aboutsummaryrefslogtreecommitdiffstats
path: root/xen/include/xen/acpi.h
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2008-06-10 13:45:29 +0100
committerKeir Fraser <keir.fraser@citrix.com>2008-06-10 13:45:29 +0100
commitc30c55b1bc1a586494b1dbd010ccad1ae43548a6 (patch)
tree6a6abf55edcd944d9aaf37ce12782c87d72ba439 /xen/include/xen/acpi.h
parent572d6c9581d7f82e387558edc94a2c3df9631186 (diff)
downloadxen-c30c55b1bc1a586494b1dbd010ccad1ae43548a6.tar.gz
xen-c30c55b1bc1a586494b1dbd010ccad1ae43548a6.tar.bz2
xen-c30c55b1bc1a586494b1dbd010ccad1ae43548a6.zip
Pull in ACPI table parsing code from Linux 2.6.26-rc4.
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
Diffstat (limited to 'xen/include/xen/acpi.h')
-rw-r--r--xen/include/xen/acpi.h75
1 files changed, 20 insertions, 55 deletions
diff --git a/xen/include/xen/acpi.h b/xen/include/xen/acpi.h
index b889014ae0..a9f46c6c55 100644
--- a/xen/include/xen/acpi.h
+++ b/xen/include/xen/acpi.h
@@ -47,11 +47,6 @@ enum acpi_irq_model_id {
extern enum acpi_irq_model_id acpi_irq_model;
-typedef struct {
- u8 type;
- u8 length;
-} __attribute__ ((packed)) acpi_table_entry_header;
-
enum acpi_madt_entry_id {
ACPI_MADT_LAPIC = 0,
ACPI_MADT_IOAPIC,
@@ -72,7 +67,7 @@ typedef struct {
} __attribute__ ((packed)) acpi_interrupt_flags;
struct acpi_table_lapic {
- acpi_table_entry_header header;
+ struct acpi_subtable_header header;
u8 acpi_id;
u8 id;
struct {
@@ -82,7 +77,7 @@ struct acpi_table_lapic {
} __attribute__ ((packed));
struct acpi_table_ioapic {
- acpi_table_entry_header header;
+ struct acpi_subtable_header header;
u8 id;
u8 reserved;
u32 address;
@@ -90,7 +85,7 @@ struct acpi_table_ioapic {
} __attribute__ ((packed));
struct acpi_table_int_src_ovr {
- acpi_table_entry_header header;
+ struct acpi_subtable_header header;
u8 bus;
u8 bus_irq;
u32 global_irq;
@@ -98,26 +93,26 @@ struct acpi_table_int_src_ovr {
} __attribute__ ((packed));
struct acpi_table_nmi_src {
- acpi_table_entry_header header;
+ struct acpi_subtable_header header;
acpi_interrupt_flags flags;
u32 global_irq;
} __attribute__ ((packed));
struct acpi_table_lapic_nmi {
- acpi_table_entry_header header;
+ struct acpi_subtable_header header;
u8 acpi_id;
acpi_interrupt_flags flags;
u8 lint;
} __attribute__ ((packed));
struct acpi_table_lapic_addr_ovr {
- acpi_table_entry_header header;
+ struct acpi_subtable_header header;
u8 reserved[2];
u64 address;
} __attribute__ ((packed));
struct acpi_table_iosapic {
- acpi_table_entry_header header;
+ struct acpi_subtable_header header;
u8 id;
u8 reserved;
u32 global_irq_base;
@@ -125,7 +120,7 @@ struct acpi_table_iosapic {
} __attribute__ ((packed));
struct acpi_table_lsapic {
- acpi_table_entry_header header;
+ struct acpi_subtable_header header;
u8 acpi_id;
u8 id;
u8 eid;
@@ -137,7 +132,7 @@ struct acpi_table_lsapic {
} __attribute__ ((packed));
struct acpi_table_plat_int_src {
- acpi_table_entry_header header;
+ struct acpi_subtable_header header;
acpi_interrupt_flags flags;
u8 type; /* See acpi_interrupt_type */
u8 id;
@@ -182,7 +177,7 @@ enum acpi_srat_entry_id {
};
struct acpi_table_processor_affinity {
- acpi_table_entry_header header;
+ struct acpi_subtable_header header;
u8 proximity_domain;
u8 apic_id;
struct {
@@ -194,7 +189,7 @@ struct acpi_table_processor_affinity {
} __attribute__ ((packed));
struct acpi_table_memory_affinity {
- acpi_table_entry_header header;
+ struct acpi_subtable_header header;
u8 proximity_domain;
u8 reserved1[5];
u32 base_addr_lo;
@@ -218,33 +213,6 @@ enum acpi_address_range_id {
ACPI_ADDRESS_RANGE_COUNT
};
-/* Table Handlers */
-
-enum acpi_table_id {
- ACPI_TABLE_UNKNOWN = 0,
- ACPI_APIC,
- ACPI_BOOT,
- ACPI_DBGP,
- ACPI_DSDT,
- ACPI_ECDT,
- ACPI_ETDT,
- ACPI_FADT,
- ACPI_FACS,
- ACPI_OEMX,
- ACPI_PSDT,
- ACPI_SBST,
- ACPI_SLIT,
- ACPI_SPCR,
- ACPI_SRAT,
- ACPI_SSDT,
- ACPI_SPMI,
- ACPI_HPET,
- ACPI_MCFG,
- ACPI_DMAR,
- ACPI_IVRS,
- ACPI_TABLE_COUNT
-};
-
/* DMA Remapping Reporting Table (DMAR) */
#define DMAR_FLAGS_INTR_REMAP 0x1 /* intr remap supported */
@@ -306,13 +274,11 @@ struct acpi_pci_path {
u8 fn;
} __attribute__((packed));
-typedef int (*acpi_dmar_entry_handler) (struct acpi_dmar_entry_header *header, const unsigned long end);
-
-typedef int (*acpi_table_handler) (unsigned long phys_addr, unsigned long size);
+typedef int (*acpi_madt_entry_handler) (struct acpi_subtable_header *header, const unsigned long end);
-extern acpi_table_handler acpi_table_ops[ACPI_TABLE_COUNT];
+typedef int (*acpi_table_handler) (struct acpi_table_header *table);
-typedef int (*acpi_madt_entry_handler) (acpi_table_entry_header *header, const unsigned long end);
+typedef int (*acpi_table_entry_handler) (struct acpi_subtable_header *header, const unsigned long end);
unsigned int acpi_get_processor_id (unsigned int cpu);
char * __acpi_map_table (unsigned long phys_addr, unsigned long size);
@@ -322,14 +288,13 @@ int acpi_boot_table_init (void);
int acpi_numa_init (void);
int acpi_table_init (void);
-int acpi_table_disable(enum acpi_table_id table_id);
-int acpi_table_parse (enum acpi_table_id id, acpi_table_handler handler);
-int acpi_get_table_header_early (enum acpi_table_id id, struct acpi_table_header **header);
-int acpi_table_parse_madt (enum acpi_madt_entry_id id, acpi_madt_entry_handler handler, unsigned int max_entries);
-int acpi_table_parse_srat (enum acpi_srat_entry_id id, acpi_madt_entry_handler handler, unsigned int max_entries);
+int acpi_table_parse(char *id, acpi_table_handler handler);
+int acpi_table_parse_entries(char *id, unsigned long table_size,
+ int entry_id, acpi_table_entry_handler handler, unsigned int max_entries);
+int acpi_table_parse_madt(enum acpi_madt_type id, acpi_table_entry_handler handler, unsigned int max_entries);
void acpi_table_print (struct acpi_table_header *header, unsigned long phys_addr);
-void acpi_table_print_madt_entry (acpi_table_entry_header *madt);
-void acpi_table_print_srat_entry (acpi_table_entry_header *srat);
+void acpi_table_print_madt_entry (struct acpi_subtable_header *madt);
+void acpi_table_print_srat_entry (struct acpi_subtable_header *srat);
uint8_t generate_acpi_checksum(void *tbl, unsigned long len);
/* the following four functions are architecture-dependent */