Port-xen archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: ioapic: adaption required?



On Monday 08 October 2007 13:33:38 Manuel Bouyer wrote:
> On Mon, Oct 08, 2007 at 01:22:32PM +0200, Christoph Egger wrote:
> > > xen/include/i82093var.h Or maybe you mean to use APIC operations to
> > > query/ack the interrupts instead of these hypercalls ?
> >
> > I'm talking about the hypercall used in pirq_establish() in xen/evtchn.c.
>
> Do you know what should be used instead now ?
The information is in include/xen3-public/physdev.h.
To acknowledge an interrupt use:
/*
 * Notify end-of-interrupt (EOI) for the specified IRQ.
 * @arg == pointer to physdev_eoi structure.
 */
#define PHYSDEVOP_eoi 12
struct physdev_eoi {
 /* IN */
 uint32_t irq;
};
To query for an interrupt use:
/*
 * Query the status of an IRQ line.
 * @arg == pointer to physdev_irq_status_query structure.
 */
#define PHYSDEVOP_irq_status_query 5
struct physdev_irq_status_query {
 /* IN */
 uint32_t irq;
 /* OUT */
 uint32_t flags; /* XENIRQSTAT_* */
};
/* Need to call PHYSDEVOP_eoi when the IRQ has been serviced? */
#define _XENIRQSTAT_needs_eoi (0)
#define XENIRQSTAT_needs_eoi (1U<<_XENIRQSTAT_needs_eoi)
/* IRQ shared by multiple guests? */
#define _XENIRQSTAT_shared (1)
#define XENIRQSTAT_shared (1U<<_XENIRQSTAT_shared)
To set VCPU's iopl use:
/*
 * Set the current VCPU's I/O privilege level.
 * @arg == pointer to physdev_set_iopl structure.
 */
#define PHYSDEVOP_set_iopl 6
struct physdev_set_iopl {
 /* IN */
 uint32_t iopl;
};
To allocate/free an interrupt use:
/*
 * Allocate or free a physical upcall vector for the specified IRQ line.
 * @arg == pointer to physdev_irq structure.
 */
#define PHYSDEVOP_alloc_irq_vector 10
#define PHYSDEVOP_free_irq_vector 11
struct physdev_irq {
 /* IN */
 uint32_t irq;
 /* IN or OUT */
 uint32_t vector;
};
The new physdev_op collects all these structs in an union:
struct physdev_op {
 uint32_t cmd;
 union {
 struct physdev_irq_status_query irq_status_query;
 struct physdev_set_iopl set_iopl;
 struct physdev_set_iobitmap set_iobitmap;
 struct physdev_apic apic_op;
 struct physdev_irq irq_op;
 } u;
};
So, fill out the structure, set cmd to one of the above's #define,
then do the hypercall.


Home | Main Index | Thread Index | Old Index

AltStyle によって変換されたページ (->オリジナル) /