diff options
author | kfraser@localhost.localdomain <kfraser@localhost.localdomain> | 2006-11-07 17:46:40 +0000 |
---|---|---|
committer | kfraser@localhost.localdomain <kfraser@localhost.localdomain> | 2006-11-07 17:46:40 +0000 |
commit | 18f003979cd14d98000bcd4731e9051f030a11bd (patch) | |
tree | 0817579f3efd2409c99c7445e8258c1b7a6a6324 /xen/include/asm-x86/hvm/vioapic.h | |
parent | 1aa6e42118517949a420f1a402e9a9cd2dad273e (diff) | |
download | xen-18f003979cd14d98000bcd4731e9051f030a11bd.tar.gz xen-18f003979cd14d98000bcd4731e9051f030a11bd.tar.bz2 xen-18f003979cd14d98000bcd4731e9051f030a11bd.zip |
[HVM] VIOAPIC and VPIC cleanups.
Signed-off-by: Keir Fraser <keir@xensource.com>
Diffstat (limited to 'xen/include/asm-x86/hvm/vioapic.h')
-rw-r--r-- | xen/include/asm-x86/hvm/vioapic.h | 103 |
1 files changed, 48 insertions, 55 deletions
diff --git a/xen/include/asm-x86/hvm/vioapic.h b/xen/include/asm-x86/hvm/vioapic.h index 31ab4373b4..ad4fb9cd48 100644 --- a/xen/include/asm-x86/hvm/vioapic.h +++ b/xen/include/asm-x86/hvm/vioapic.h @@ -23,97 +23,90 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifndef __ASM_X86_HVM_IOAPIC_H__ -#define __ASM_X86_HVM_IOAPIC_H__ +#ifndef __ASM_X86_HVM_VIOAPIC_H__ +#define __ASM_X86_HVM_VIOAPIC_H__ #include <xen/config.h> #include <xen/types.h> #include <xen/smp.h> -#ifndef __ia64__ -#define IOAPIC_VERSION_ID 0x11 +#ifdef __ia64__ +#define VIOAPIC_IS_IOSAPIC 1 +#endif + +#if !VIOAPIC_IS_IOSAPIC +#define VIOAPIC_VERSION_ID 0x11 /* IOAPIC version */ #else -#define IOAPIC_VERSION_ID 0x21 +#define VIOAPIC_VERSION_ID 0x21 /* IOSAPIC version */ #endif -#define IOAPIC_NUM_PINS 24 -#define MAX_LAPIC_NUM 32 +#define VIOAPIC_NUM_PINS 24 -#define IOAPIC_LEVEL_TRIGGER 1 +#define VIOAPIC_EDGE_TRIG 0 +#define VIOAPIC_LEVEL_TRIG 1 -#define IOAPIC_DEFAULT_BASE_ADDRESS 0xfec00000 -#define IOAPIC_MEM_LENGTH 0x100 +#define VIOAPIC_DEFAULT_BASE_ADDRESS 0xfec00000 +#define VIOAPIC_MEM_LENGTH 0x100 -#define IOAPIC_ENABLE_MASK 0x0 -#define IOAPIC_ENABLE_FLAG (1 << IOAPIC_ENABLE_MASK) -#define IOAPICEnabled(s) (s->flags & IOAPIC_ENABLE_FLAG) +/* Direct registers. */ +#define VIOAPIC_REG_SELECT 0x00 +#define VIOAPIC_REG_WINDOW 0x10 +#define VIOAPIC_REG_EOI 0x40 /* IA64 IOSAPIC only */ -#define IOAPIC_REG_SELECT 0x0 -#define IOAPIC_REG_WINDOW 0x10 +/* Indirect registers. */ +#define VIOAPIC_REG_APIC_ID 0x00 /* x86 IOAPIC only */ +#define VIOAPIC_REG_VERSION 0x01 +#define VIOAPIC_REG_ARB_ID 0x02 /* x86 IOAPIC only */ -#ifdef __ia64__ -#define IOAPIC_REG_ASSERTION 0x20 -#define IOAPIC_REG_EOI 0x40 -#endif - -#ifndef __ia64__ -#define IOAPIC_REG_APIC_ID 0x0 -#define IOAPIC_REG_ARB_ID 0x2 -#endif +#define domain_vioapic(d) (&(d)->arch.hvm_domain.vioapic) +#define vioapic_domain(v) (container_of((v), struct domain, \ + arch.hvm_domain.vioapic)) -#define IOAPIC_REG_VERSION 0x1 - -typedef union RedirStatus +union vioapic_redir_entry { - uint64_t value; + uint64_t bits; struct { uint8_t vector; - uint8_t deliver_mode:3; - uint8_t destmode:1; - uint8_t delivestatus:1; + uint8_t delivery_mode:3; + uint8_t dest_mode:1; + uint8_t delivery_status:1; uint8_t polarity:1; - uint8_t remoteirr:1; - uint8_t trigmod:1; - uint8_t mask:1; /* interrupt mask*/ + uint8_t remote_irr:1; + uint8_t trig_mode:1; + uint8_t mask:1; uint8_t reserve:7; -#ifndef __ia64__ +#if !VIOAPIC_IS_IOSAPIC uint8_t reserved[4]; uint8_t dest_id; #else uint8_t reserved[3]; uint16_t dest_id; #endif - } RedirForm; -} RedirStatus; + } fields; +}; -typedef struct hvm_vioapic { +struct vioapic { uint32_t irr; uint32_t irr_xen; /* interrupts forced on by the hypervisor. */ - uint32_t isr; /* This is used for level trigger */ + uint32_t isr; /* This is used for level trigger */ uint32_t imr; uint32_t ioregsel; - uint32_t flags; - uint32_t lapic_count; uint32_t id; - uint32_t arb_id; unsigned long base_address; - RedirStatus redirtbl[IOAPIC_NUM_PINS]; - struct vlapic *lapic_info[MAX_LAPIC_NUM]; - struct domain *domain; -} hvm_vioapic_t; - -hvm_vioapic_t *hvm_vioapic_init(struct domain *d); - -void hvm_vioapic_set_xen_irq(struct domain *d, int irq, int level); -void hvm_vioapic_set_irq(struct domain *d, int irq, int level); - -int hvm_vioapic_add_lapic(struct vlapic *vlapic, struct vcpu *v); + union vioapic_redir_entry redirtbl[VIOAPIC_NUM_PINS]; + struct vlapic *lapic_info[32]; + uint32_t lapic_count; +}; -void ioapic_update_EOI(struct domain *d, int vector); +void vioapic_init(struct domain *d); +void vioapic_set_xen_irq(struct domain *d, int irq, int level); +void vioapic_set_irq(struct domain *d, int irq, int level); +int vioapic_add_lapic(struct vlapic *vlapic, struct vcpu *v); +void vioapic_update_EOI(struct domain *d, int vector); #ifdef HVM_DOMAIN_SAVE_RESTORE void ioapic_save(QEMUFile* f, void* opaque); int ioapic_load(QEMUFile* f, void* opaque, int version_id); #endif -#endif /* __ASM_X86_HVM_IOAPIC_H__ */ +#endif /* __ASM_X86_HVM_VIOAPIC_H__ */ |