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

[Xen-changelog] [xen-unstable] Update ACPI headers to Linux 2.6.24.



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1205852136 0
# Node ID 13cba2e78a65f636f3b0aeb0af5a3cfd291f7c04
# Parent  5cbfc6c24d3201ec93b722bc91350be38991c177
Update ACPI headers to Linux 2.6.24.
Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
---
 xen/include/acpi/actbl2.h           |  232 -----
 xen/arch/ia64/xen/acpi.c            |   12 
 xen/arch/ia64/xen/dom_fw_common.c   |   18 
 xen/arch/x86/acpi/boot.c            |   79 --
 xen/arch/x86/srat.c                 |    4 
 xen/drivers/acpi/numa.c             |    2 
 xen/drivers/acpi/tables.c           |   45 -
 xen/drivers/passthrough/vtd/dmar.c  |    8 
 xen/include/acpi/acconfig.h         |   85 --
 xen/include/acpi/acexcep.h          |   69 -
 xen/include/acpi/acglobal.h         |  404 +++++-----
 xen/include/acpi/achware.h          |  179 +---
 xen/include/acpi/aclocal.h          | 1225 +++++++++++++++----------------
 xen/include/acpi/acmacros.h         |  615 ++++++++-------
 xen/include/acpi/acnames.h          |   83 ++
 xen/include/acpi/acobject.h         |  657 +++++++---------
 xen/include/acpi/acoutput.h         |   32 
 xen/include/acpi/acpi.h             |   36 
 xen/include/acpi/acpi_bus.h         |  381 +++++----
 xen/include/acpi/acpiosxf.h         |  426 ++++------
 xen/include/acpi/acpixf.h           |  679 ++++++-----------
 xen/include/acpi/acstruct.h         |  297 +++----
 xen/include/acpi/actbl.h            |  548 ++++++-------
 xen/include/acpi/actbl1.h           |  763 +++++++++++++++++--
 xen/include/acpi/actypes.h          | 1414 +++++++++++++++++-------------------
 xen/include/acpi/acutils.h          | 1280 ++++++++++++--------------------
 xen/include/acpi/pdc_intel.h        |   33 
 xen/include/acpi/platform/acenv.h   |  171 ++--
 xen/include/acpi/platform/acgcc.h   |   18 
 xen/include/acpi/platform/aclinux.h |   63 +
 xen/include/asm-x86/acpi.h          |  124 +--
 xen/include/asm-x86/apic.h          |    1 
 xen/include/xen/acpi.h              |  133 ---
 33 files changed, 4857 insertions(+), 5259 deletions(-)

diff -r 5cbfc6c24d32 -r 13cba2e78a65 xen/arch/ia64/xen/acpi.c
--- a/xen/arch/ia64/xen/acpi.c  Tue Mar 18 13:14:26 2008 +0000
+++ b/xen/arch/ia64/xen/acpi.c  Tue Mar 18 14:55:36 2008 +0000
@@ -560,7 +560,7 @@ acpi_parse_fadt (unsigned long phys_addr
 acpi_parse_fadt (unsigned long phys_addr, unsigned long size)
 {
        struct acpi_table_header *fadt_header;
-       struct fadt_descriptor_rev2 *fadt;
+       struct acpi_table_fadt *fadt;
 
        if (!phys_addr || !size)
                return -EINVAL;
@@ -569,16 +569,16 @@ acpi_parse_fadt (unsigned long phys_addr
        if (fadt_header->revision != 3)
                return -ENODEV;         /* Only deal with ACPI 2.0 FADT */
 
-       fadt = (struct fadt_descriptor_rev2 *) fadt_header;
-
-       if (!(fadt->iapc_boot_arch & BAF_8042_KEYBOARD_CONTROLLER))
+       fadt = (struct acpi_table_fadt *) fadt_header;
+
+       if (!(fadt->boot_flags & BAF_8042_KEYBOARD_CONTROLLER))
                acpi_kbd_controller_present = 0;
 
-       if (fadt->iapc_boot_arch & BAF_LEGACY_DEVICES)
+       if (fadt->boot_flags & BAF_LEGACY_DEVICES)
                acpi_legacy_devices = 1;
 
 #if 0
-       acpi_register_gsi(fadt->sci_int, ACPI_ACTIVE_LOW, ACPI_LEVEL_SENSITIVE);
+       acpi_register_gsi(fadt->sci_interrupt, ACPI_ACTIVE_LOW, 
ACPI_LEVEL_SENSITIVE);
 #endif
        return 0;
 }
diff -r 5cbfc6c24d32 -r 13cba2e78a65 xen/arch/ia64/xen/dom_fw_common.c
--- a/xen/arch/ia64/xen/dom_fw_common.c Tue Mar 18 13:14:26 2008 +0000
+++ b/xen/arch/ia64/xen/dom_fw_common.c Tue Mar 18 14:55:36 2008 +0000
@@ -209,10 +209,10 @@ print_md(efi_memory_desc_t *md)
 
 struct fake_acpi_tables {
        struct acpi20_table_rsdp rsdp;
-       struct xsdt_descriptor_rev2 xsdt;
+       struct acpi_table_xsdt xsdt;
        uint64_t madt_ptr;
-       struct fadt_descriptor_rev2 fadt;
-       struct facs_descriptor_rev2 facs;
+       struct acpi_table_fadt fadt;
+       struct acpi_table_facs facs;
        struct acpi_table_header dsdt;
        uint8_t aml[8 + 11 * MAX_VIRT_CPUS];
        struct acpi_table_madt madt;
@@ -229,9 +229,9 @@ dom_fw_fake_acpi(domain_t *d, struct fak
 dom_fw_fake_acpi(domain_t *d, struct fake_acpi_tables *tables)
 {
        struct acpi20_table_rsdp *rsdp = &tables->rsdp;
-       struct xsdt_descriptor_rev2 *xsdt = &tables->xsdt;
-       struct fadt_descriptor_rev2 *fadt = &tables->fadt;
-       struct facs_descriptor_rev2 *facs = &tables->facs;
+       struct acpi_table_xsdt *xsdt = &tables->xsdt;
+       struct acpi_table_fadt *fadt = &tables->fadt;
+       struct acpi_table_facs *facs = &tables->facs;
        struct acpi_table_header *dsdt = &tables->dsdt;
        struct acpi_table_madt *madt = &tables->madt;
        struct acpi_table_lsapic *lsapic = tables->lsapic;
@@ -247,7 +247,7 @@ dom_fw_fake_acpi(domain_t *d, struct fak
        /* setup XSDT (64bit version of RSDT) */
        memcpy(xsdt->signature, XSDT_SIG, sizeof(xsdt->signature));
        /* XSDT points to both the FADT and the MADT, so add one entry */
-       xsdt->length = sizeof(struct xsdt_descriptor_rev2) + sizeof(uint64_t);
+       xsdt->length = sizeof(struct acpi_table_xsdt) + sizeof(uint64_t);
        xsdt->revision = 1;
        memcpy(xsdt->oem_id, "XEN", 3);
        memcpy(xsdt->oem_table_id, "Xen/ia64", 8);
@@ -261,7 +261,7 @@ dom_fw_fake_acpi(domain_t *d, struct fak
 
        /* setup FADT */
        memcpy(fadt->signature, FADT_SIG, sizeof(fadt->signature));
-       fadt->length = sizeof(struct fadt_descriptor_rev2);
+       fadt->length = sizeof(struct acpi_table_fadt);
        fadt->revision = FADT2_REVISION_ID;
        memcpy(fadt->oem_id, "XEN", 3);
        memcpy(fadt->oem_table_id, "Xen/ia64", 8);
@@ -270,7 +270,7 @@ dom_fw_fake_acpi(domain_t *d, struct fak
 
        memcpy(facs->signature, FACS_SIG, sizeof(facs->signature));
        facs->version = 1;
-       facs->length = sizeof(struct facs_descriptor_rev2);
+       facs->length = sizeof(struct acpi_table_facs);
 
        fadt->xfirmware_ctrl = ACPI_TABLE_MPA(facs);
        fadt->Xdsdt = ACPI_TABLE_MPA(dsdt);
diff -r 5cbfc6c24d32 -r 13cba2e78a65 xen/arch/x86/acpi/boot.c
--- a/xen/arch/x86/acpi/boot.c  Tue Mar 18 13:14:26 2008 +0000
+++ b/xen/arch/x86/acpi/boot.c  Tue Mar 18 14:55:36 2008 +0000
@@ -63,7 +63,7 @@ int acpi_strict;
 int acpi_strict;
 EXPORT_SYMBOL(acpi_strict);
 
-acpi_interrupt_flags acpi_sci_flags __initdata;
+u8 acpi_sci_flags __initdata;
 int acpi_sci_override_gsi __initdata;
 int acpi_skip_timer_override __initdata;
 
@@ -148,11 +148,11 @@ static int __init acpi_parse_madt(unsign
                return -ENODEV;
        }
 
-       if (madt->lapic_address) {
-               acpi_lapic_addr = (u64) madt->lapic_address;
+       if (madt->address) {
+               acpi_lapic_addr = (u64) madt->address;
 
                printk(KERN_DEBUG PREFIX "Local APIC address 0x%08x\n",
-                      madt->lapic_address);
+                      madt->address);
        }
 
        acpi_madt_oem_check(madt->header.oem_id, madt->header.oem_table_id);
@@ -342,15 +342,14 @@ static int __init acpi_parse_hpet(unsign
                return -ENODEV;
        }
 
-       if (hpet_tbl->addr.space_id != ACPI_SPACE_MEM) {
+       if (hpet_tbl->address.space_id != ACPI_SPACE_MEM) {
                printk(KERN_WARNING PREFIX "HPET timers must be located in "
                       "memory.\n");
                return -1;
        }
 
 #if 0/*def     CONFIG_X86_64*/
-        vxtime.hpet_address = hpet_tbl->addr.addrl |
-                ((long) hpet_tbl->addr.addrh << 32);
+        vxtime.hpet_address = hpet_tbl->address.address;
 
         printk(KERN_INFO PREFIX "HPET id: %#x base: %#lx\n",
                hpet_tbl->id, vxtime.hpet_address);
@@ -358,7 +357,7 @@ static int __init acpi_parse_hpet(unsign
        {
                extern unsigned long hpet_address;
 
-               hpet_address = hpet_tbl->addr.addrl;
+               hpet_address = hpet_tbl->address.address;
                printk(KERN_INFO PREFIX "HPET id: %#x base: %#lx\n",
                       hpet_tbl->id, hpet_address);
        }
@@ -377,11 +376,11 @@ extern u32 pmtmr_ioport;
 #ifdef CONFIG_ACPI_SLEEP
 /* Get pm1x_cnt and pm1x_evt information for ACPI sleep */
 static void __init
-acpi_fadt_parse_sleep_info(struct fadt_descriptor_rev2 *fadt)
+acpi_fadt_parse_sleep_info(struct acpi_table_fadt *fadt)
 {
        struct acpi_table_rsdp *rsdp;
        unsigned long rsdp_phys;
-       struct facs_descriptor_rev2 *facs = NULL;
+       struct acpi_table_facs *facs = NULL;
        uint64_t facs_pa;
 
        rsdp_phys = acpi_find_rsdp();
@@ -389,41 +388,41 @@ acpi_fadt_parse_sleep_info(struct fadt_d
                goto bad;
        rsdp = __va(rsdp_phys);
 
-       if (fadt->revision >= FADT2_REVISION_ID) {
+       if (fadt->header.revision >= FADT2_REVISION_ID) {
                /* Sanity check on FADT Rev. 2 */
-               if ((fadt->xpm1a_cnt_blk.address_space_id !=
+               if ((fadt->xpm1a_control_block.space_id !=
                     ACPI_ADR_SPACE_SYSTEM_IO) ||
-                   (fadt->xpm1b_cnt_blk.address_space_id !=
+                   (fadt->xpm1b_control_block.space_id !=
                     ACPI_ADR_SPACE_SYSTEM_IO) ||
-                   (fadt->xpm1a_evt_blk.address_space_id !=
+                   (fadt->xpm1a_event_block.space_id !=
                     ACPI_ADR_SPACE_SYSTEM_IO) ||
-                   (fadt->xpm1b_evt_blk.address_space_id !=
+                   (fadt->xpm1b_event_block.space_id !=
                     ACPI_ADR_SPACE_SYSTEM_IO))
                        goto bad; 
 
-               acpi_sinfo.pm1a_cnt = (uint16_t)fadt->xpm1a_cnt_blk.address;
-               acpi_sinfo.pm1b_cnt = (uint16_t)fadt->xpm1b_cnt_blk.address;
-               acpi_sinfo.pm1a_evt = (uint16_t)fadt->xpm1a_evt_blk.address;
-               acpi_sinfo.pm1b_evt = (uint16_t)fadt->xpm1b_evt_blk.address;
+               acpi_sinfo.pm1a_cnt = 
(uint16_t)fadt->xpm1a_control_block.address;
+               acpi_sinfo.pm1b_cnt = 
(uint16_t)fadt->xpm1b_control_block.address;
+               acpi_sinfo.pm1a_evt = (uint16_t)fadt->xpm1a_event_block.address;
+               acpi_sinfo.pm1b_evt = (uint16_t)fadt->xpm1b_event_block.address;
        }
 
        if (!acpi_sinfo.pm1a_cnt)
-               acpi_sinfo.pm1a_cnt = (uint16_t)fadt->V1_pm1a_cnt_blk;
+               acpi_sinfo.pm1a_cnt = (uint16_t)fadt->pm1a_control_block;
        if (!acpi_sinfo.pm1b_cnt)
-               acpi_sinfo.pm1b_cnt = (uint16_t)fadt->V1_pm1b_cnt_blk;
+               acpi_sinfo.pm1b_cnt = (uint16_t)fadt->pm1b_control_block;
        if (!acpi_sinfo.pm1a_evt)
-               acpi_sinfo.pm1a_evt = (uint16_t)fadt->V1_pm1a_evt_blk;
+               acpi_sinfo.pm1a_evt = (uint16_t)fadt->pm1a_event_block;
        if (!acpi_sinfo.pm1b_evt)
-               acpi_sinfo.pm1b_evt = (uint16_t)fadt->V1_pm1b_evt_blk;
+               acpi_sinfo.pm1b_evt = (uint16_t)fadt->pm1b_event_block;
 
        /* Now FACS... */
-       if (fadt->revision >= FADT2_REVISION_ID)
-               facs_pa = fadt->xfirmware_ctrl;
+       if (fadt->header.revision >= FADT2_REVISION_ID)
+               facs_pa = fadt->Xfacs;
        else
-               facs_pa = (uint64_t)fadt->V1_firmware_ctrl;
-
-       facs = (struct facs_descriptor_rev2 *)
-               __acpi_map_table(facs_pa, sizeof(struct facs_descriptor_rev2));
+               facs_pa = (uint64_t)fadt->facs;
+
+       facs = (struct acpi_table_facs *)
+               __acpi_map_table(facs_pa, sizeof(struct acpi_table_facs));
        if (!facs)
                goto bad;
 
@@ -446,12 +445,12 @@ acpi_fadt_parse_sleep_info(struct fadt_d
 
        if ((rsdp->revision < 2) || (facs->length < 32)) {
                acpi_sinfo.wakeup_vector = facs_pa + 
-                       offsetof(struct facs_descriptor_rev2,
+                       offsetof(struct acpi_table_facs,
                                 firmware_waking_vector);
                acpi_sinfo.vector_width = 32;
        } else {
                acpi_sinfo.wakeup_vector = facs_pa +
-                       offsetof(struct facs_descriptor_rev2,
+                       offsetof(struct acpi_table_facs,
                                 xfirmware_waking_vector);
                acpi_sinfo.vector_width = 64;
        }
@@ -471,9 +470,9 @@ bad:
 
 static int __init acpi_parse_fadt(unsigned long phys, unsigned long size)
 {
-       struct fadt_descriptor_rev2 *fadt = NULL;
-
-       fadt = (struct fadt_descriptor_rev2 *)__acpi_map_table(phys, size);
+       struct acpi_table_fadt *fadt = NULL;
+
+       fadt = (struct acpi_table_fadt *)__acpi_map_table(phys, size);
        if (!fadt) {
                printk(KERN_WARNING PREFIX "Unable to map FADT\n");
                return 0;
@@ -491,28 +490,28 @@ static int __init acpi_parse_fadt(unsign
 
 #ifdef CONFIG_X86_PM_TIMER
        /* detect the location of the ACPI PM Timer */
-       if (fadt->revision >= FADT2_REVISION_ID) {
+       if (fadt->header.revision >= FADT2_REVISION_ID) {
                /* FADT rev. 2 */
-               if (fadt->xpm_tmr_blk.address_space_id ==
+               if (fadt->xpm_timer_block.space_id ==
                    ACPI_ADR_SPACE_SYSTEM_IO)
-                       pmtmr_ioport = fadt->xpm_tmr_blk.address;
+                       pmtmr_ioport = fadt->xpm_timer_block.address;
                /*
                 * "X" fields are optional extensions to the original V1.0
                 * fields, so we must selectively expand V1.0 fields if the
                 * corresponding X field is zero.
                 */
                if (!pmtmr_ioport)
-                       pmtmr_ioport = fadt->V1_pm_tmr_blk;
+                       pmtmr_ioport = fadt->pm_timer_block;
        } else {
                /* FADT rev. 1 */
-               pmtmr_ioport = fadt->V1_pm_tmr_blk;
+               pmtmr_ioport = fadt->pm_timer_block;
        }
        if (pmtmr_ioport)
                printk(KERN_INFO PREFIX "PM-Timer IO Port: %#x\n",
                       pmtmr_ioport);
 #endif
 
-       acpi_smi_cmd       = fadt->smi_cmd;
+       acpi_smi_cmd       = fadt->smi_command;
        acpi_enable_value  = fadt->acpi_enable;
        acpi_disable_value = fadt->acpi_disable;
 
diff -r 5cbfc6c24d32 -r 13cba2e78a65 xen/arch/x86/srat.c
--- a/xen/arch/x86/srat.c       Tue Mar 18 13:14:26 2008 +0000
+++ b/xen/arch/x86/srat.c       Tue Mar 18 14:55:36 2008 +0000
@@ -106,7 +106,7 @@ static __init int slit_valid(struct acpi
 static __init int slit_valid(struct acpi_table_slit *slit)
 {
        int i, j;
-       int d = slit->localities;
+       int d = slit->locality_count;
        for (i = 0; i < d; i++) {
                for (j = 0; j < d; j++)  {
                        u8 val = slit->entry[d*i + j];
@@ -308,7 +308,7 @@ int __node_distance(int a, int b)
 
        if (!acpi_slit)
                return a == b ? 10 : 20;
-       index = acpi_slit->localities * node_to_pxm(a);
+       index = acpi_slit->locality_count * node_to_pxm(a);
        return acpi_slit->entry[index + node_to_pxm(b)];
 }
 
diff -r 5cbfc6c24d32 -r 13cba2e78a65 xen/drivers/acpi/numa.c
--- a/xen/drivers/acpi/numa.c   Tue Mar 18 13:14:26 2008 +0000
+++ b/xen/drivers/acpi/numa.c   Tue Mar 18 14:55:36 2008 +0000
@@ -104,7 +104,7 @@ static int __init acpi_parse_slit(unsign
        slit = (struct acpi_table_slit *)__acpi_map_table(phys_addr, size);
 
        /* downcast just for %llu vs %lu for i386/ia64  */
-       localities = (u32) slit->localities;
+       localities = (u32) slit->locality_count;
 
        acpi_numa_slit_init(slit);
 
diff -r 5cbfc6c24d32 -r 13cba2e78a65 xen/drivers/acpi/tables.c
--- a/xen/drivers/acpi/tables.c Tue Mar 18 13:14:26 2008 +0000
+++ b/xen/drivers/acpi/tables.c Tue Mar 18 14:55:36 2008 +0000
@@ -295,15 +295,15 @@ acpi_get_table_header_early(enum acpi_ta
 
        /* Map the DSDT header via the pointer in the FADT */
        if (id == ACPI_DSDT) {
-               struct fadt_descriptor_rev2 *fadt =
-                   (struct fadt_descriptor_rev2 *)*header;
-
-               if (fadt->revision == 3 && fadt->Xdsdt) {
+               struct acpi_table_fadt *fadt =
+                       (struct acpi_table_fadt *)*header;
+
+               if (fadt->header.revision == 3 && fadt->Xdsdt) {
                        *header = (void *)__acpi_map_table(fadt->Xdsdt,
                                                           sizeof(struct
                                                                  
acpi_table_header));
-               } else if (fadt->V1_dsdt) {
-                       *header = (void *)__acpi_map_table(fadt->V1_dsdt,
+               } else if (fadt->dsdt) {
+                       *header = (void *)__acpi_map_table(fadt->dsdt,
                                                           sizeof(struct
                                                                  
acpi_table_header));
                } else
@@ -424,12 +424,11 @@ static int __init acpi_table_get_sdt(str
 
        /* First check XSDT (but only on ACPI 2.0-compatible systems) */
 
-       if ((rsdp->revision >= 2) &&
-           (((struct acpi20_table_rsdp *)rsdp)->xsdt_address)) {
+       if ((rsdp->revision >= 2) && rsdp->xsdt_physical_address) {
 
                struct acpi_table_xsdt *mapped_xsdt = NULL;
 
-               sdt_pa = ((struct acpi20_table_rsdp *)rsdp)->xsdt_address;
+               sdt_pa = rsdp->xsdt_physical_address;
 
                /* map in just the header */
                header = (struct acpi_table_header *)
@@ -471,16 +470,16 @@ static int __init acpi_table_get_sdt(str
                }
 
                for (i = 0; i < sdt_count; i++)
-                       sdt_entry[i].pa = (unsigned long)mapped_xsdt->entry[i];
+                       sdt_entry[i].pa = (unsigned 
long)mapped_xsdt->table_offset_entry[i];
        }
 
        /* Then check RSDT */
 
-       else if (rsdp->rsdt_address) {
+       else if (rsdp->rsdt_physical_address) {
 
                struct acpi_table_rsdt *mapped_rsdt = NULL;
 
-               sdt_pa = rsdp->rsdt_address;
+               sdt_pa = rsdp->rsdt_physical_address;
 
                /* map in just the header */
                header = (struct acpi_table_header *)
@@ -521,7 +520,7 @@ static int __init acpi_table_get_sdt(str
                }
 
                for (i = 0; i < sdt_count; i++)
-                       sdt_entry[i].pa = (unsigned long)mapped_rsdt->entry[i];
+                       sdt_entry[i].pa = (unsigned 
long)mapped_rsdt->table_offset_entry[i];
        }
 
        else {
@@ -613,13 +612,10 @@ int __init acpi_table_init(void)
 
        if (rsdp->revision < 2)
                result =
-                   acpi_table_compute_checksum(rsdp,
-                                               sizeof(struct acpi_table_rsdp));
+                   acpi_table_compute_checksum(rsdp, 20);
        else
                result =
-                   acpi_table_compute_checksum(rsdp,
-                                               ((struct acpi20_table_rsdp *)
-                                                rsdp)->length);
+                   acpi_table_compute_checksum(rsdp, rsdp->length);
 
        if (result) {
                printk(KERN_WARNING "  >>> ERROR: Invalid checksum\n");
@@ -663,12 +659,11 @@ acpi_table_disable(enum acpi_table_id ta
 
        /* First check XSDT (but only on ACPI 2.0-compatible systems) */
 
-       if ((rsdp->revision >= 2) &&
-           (((struct acpi20_table_rsdp *)rsdp)->xsdt_address)) {
+       if ((rsdp->revision >= 2) && rsdp->xsdt_physical_address) {
 
                struct acpi_table_xsdt *mapped_xsdt = NULL;
 
-               sdt_pa = ((struct acpi20_table_rsdp *)rsdp)->xsdt_address;
+               sdt_pa = rsdp->xsdt_physical_address;
 
                /* map in just the header */
                header = (struct acpi_table_header *)
@@ -702,7 +697,7 @@ acpi_table_disable(enum acpi_table_id ta
 
                if (id < sdt_count) {
                        header = (struct acpi_table_header *)
-                          __acpi_map_table(mapped_xsdt->entry[id], 
sizeof(struct acpi_table_header));
+                          
__acpi_map_table(mapped_xsdt->table_offset_entry[id], sizeof(struct 
acpi_table_header));
                } else {
                        printk(KERN_WARNING PREFIX
                               "Unable to disable entry %d\n",
@@ -713,11 +708,11 @@ acpi_table_disable(enum acpi_table_id ta
 
        /* Then check RSDT */
 
-       else if (rsdp->rsdt_address) {
+       else if (rsdp->rsdt_physical_address) {
 
                struct acpi_table_rsdt *mapped_rsdt = NULL;
 
-               sdt_pa = rsdp->rsdt_address;
+               sdt_pa = rsdp->rsdt_physical_address;
 
                /* map in just the header */
                header = (struct acpi_table_header *)
@@ -749,7 +744,7 @@ acpi_table_disable(enum acpi_table_id ta
                }
                if (id < sdt_count) {
                        header = (struct acpi_table_header *)
-                          __acpi_map_table(mapped_rsdt->entry[id], 
sizeof(struct acpi_table_header));
+                          
__acpi_map_table(mapped_rsdt->table_offset_entry[id], sizeof(struct 
acpi_table_header));
                } else {
                        printk(KERN_WARNING PREFIX
                               "Unable to disable entry %d\n",
diff -r 5cbfc6c24d32 -r 13cba2e78a65 xen/drivers/passthrough/vtd/dmar.c
--- a/xen/drivers/passthrough/vtd/dmar.c        Tue Mar 18 13:14:26 2008 +0000
+++ b/xen/drivers/passthrough/vtd/dmar.c        Tue Mar 18 14:55:36 2008 +0000
@@ -555,13 +555,13 @@ static int __init acpi_parse_dmar(unsign
         return -ENODEV;
     }
 
-    if ( !dmar->haw )
-    {
-        dprintk(XENLOG_WARNING VTDPREFIX, "Zero: Invalid DMAR haw\n");
+    if ( !dmar->width )
+    {
+        dprintk(XENLOG_WARNING VTDPREFIX, "Zero: Invalid DMAR width\n");
         return -EINVAL;
     }
 
-    dmar_host_address_width = dmar->haw;
+    dmar_host_address_width = dmar->width;
     dprintk(XENLOG_INFO VTDPREFIX, "Host address width %d\n",
             dmar_host_address_width);
 
diff -r 5cbfc6c24d32 -r 13cba2e78a65 xen/include/acpi/acconfig.h
--- a/xen/include/acpi/acconfig.h       Tue Mar 18 13:14:26 2008 +0000
+++ b/xen/include/acpi/acconfig.h       Tue Mar 18 14:55:36 2008 +0000
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2005, R. Byron Moore
+ * Copyright (C) 2000 - 2007, R. Byron Moore
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -44,7 +44,6 @@
 #ifndef _ACCONFIG_H
 #define _ACCONFIG_H
 
-
 /******************************************************************************
  *
  * Configuration options
@@ -62,9 +61,9 @@
  *
  */
 
-/* Version string */
-
-#define ACPI_CA_VERSION                 0x20050211
+/* Current ACPICA subsystem version in YYYYMMDD format */
+
+#define ACPI_CA_VERSION                 0x20070126
 
 /*
  * OS name, used for the _OS object.  The _OS object is essentially obsolete,
@@ -78,19 +77,18 @@
 
 /* Maximum objects in the various object caches */
 
-#define ACPI_MAX_STATE_CACHE_DEPTH      64          /* State objects */
-#define ACPI_MAX_PARSE_CACHE_DEPTH      96          /* Parse tree objects */
-#define ACPI_MAX_EXTPARSE_CACHE_DEPTH   64          /* Parse tree objects */
-#define ACPI_MAX_OBJECT_CACHE_DEPTH     64          /* Interpreter operand 
objects */
-#define ACPI_MAX_WALK_CACHE_DEPTH       4           /* Objects for parse tree 
walks */
-
-/*
- * Should the subystem abort the loading of an ACPI table if the
+#define ACPI_MAX_STATE_CACHE_DEPTH      96     /* State objects */
+#define ACPI_MAX_PARSE_CACHE_DEPTH      96     /* Parse tree objects */
+#define ACPI_MAX_EXTPARSE_CACHE_DEPTH   96     /* Parse tree objects */
+#define ACPI_MAX_OBJECT_CACHE_DEPTH     96     /* Interpreter operand objects 
*/
+#define ACPI_MAX_NAMESPACE_CACHE_DEPTH  96     /* Namespace objects */
+
+/*
+ * Should the subsystem abort the loading of an ACPI table if the
  * table checksum is incorrect?
  */
 #define ACPI_CHECKSUM_ABORT             FALSE
 
-
 /******************************************************************************
  *
  * Subsystem Constants
@@ -101,23 +99,25 @@
 
 #define ACPI_CA_SUPPORT_LEVEL           3
 
-/* String size constants */
-
-#define ACPI_MAX_STRING_LENGTH          512
-#define ACPI_PATHNAME_MAX               256         /* A full namespace 
pathname */
-
 /* Maximum count for a semaphore object */
 
 #define ACPI_MAX_SEMAPHORE_COUNT        256
 
-/* Max reference count (for debug only) */
-
-#define ACPI_MAX_REFERENCE_COUNT        0x400
+/* Maximum object reference count (detects object deletion issues) */
+
+#define ACPI_MAX_REFERENCE_COUNT        0x1000
 
 /* Size of cached memory mapping for system memory operation region */
 
 #define ACPI_SYSMEM_REGION_WINDOW_SIZE  4096
 
+/* owner_id tracking. 8 entries allows for 255 owner_ids */
+
+#define ACPI_NUM_OWNERID_MASKS          8
+
+/* Size of the root table array is increased by this increment */
+
+#define ACPI_ROOT_TABLE_SIZE_INCREMENT  4
 
 /******************************************************************************
  *
@@ -130,23 +130,19 @@
 #define ACPI_MAX_GPE_BLOCKS             2
 #define ACPI_GPE_REGISTER_WIDTH         8
 
-/*
- * Method info (in WALK_STATE), containing local variables and argumetns
- */
+/* Method info (in WALK_STATE), containing local variables and argumetns */
+
 #define ACPI_METHOD_NUM_LOCALS          8
 #define ACPI_METHOD_MAX_LOCAL           7
 
 #define ACPI_METHOD_NUM_ARGS            7
 #define ACPI_METHOD_MAX_ARG             6
 
-/* Maximum length of resulting string when converting from a buffer */
-
-#define ACPI_MAX_STRING_CONVERSION      200
-
-/* Length of _HID, _UID, and _CID values */
+/* Length of _HID, _UID, _CID, and UUID values */
 
 #define ACPI_DEVICE_ID_LENGTH           0x09
 #define ACPI_MAX_CID_LENGTH             48
+#define ACPI_UUID_LENGTH                16
 
 /*
  * Operand Stack (in WALK_STATE), Must be large enough to contain 
METHOD_MAX_ARG
@@ -157,15 +153,20 @@
 /* Names within the namespace are 4 bytes long */
 
 #define ACPI_NAME_SIZE                  4
-#define ACPI_PATH_SEGMENT_LENGTH        5           /* 4 chars for name + 1 
char for separator */
+#define ACPI_PATH_SEGMENT_LENGTH        5      /* 4 chars for name + 1 char 
for separator */
 #define ACPI_PATH_SEPARATOR             '.'
 
+/* Sizes for ACPI table headers */
+
+#define ACPI_OEM_ID_SIZE                6
+#define ACPI_OEM_TABLE_ID_SIZE          8
+
 /* Constants used in searching for the RSDP in low memory */
 
-#define ACPI_EBDA_PTR_LOCATION          0x0000040E     /* Physical Address */
+#define ACPI_EBDA_PTR_LOCATION          0x0000040E     /* Physical Address */
 #define ACPI_EBDA_PTR_LENGTH            2
 #define ACPI_EBDA_WINDOW_SIZE           1024
-#define ACPI_HI_RSDP_WINDOW_BASE        0x000E0000     /* Physical Address */
+#define ACPI_HI_RSDP_WINDOW_BASE        0x000E0000     /* Physical Address */
 #define ACPI_HI_RSDP_WINDOW_SIZE        0x00020000
 #define ACPI_RSDP_SCAN_STEP             16
 
@@ -180,12 +181,7 @@
 
 /* Array sizes.  Used for range checking also */
 
-#define ACPI_NUM_ACCESS_TYPES           6
-#define ACPI_NUM_UPDATE_RULES           3
-#define ACPI_NUM_LOCK_RULES             2
-#define ACPI_NUM_MATCH_OPS              6
-#define ACPI_NUM_OPCODES                256
-#define ACPI_NUM_FIELD_NAMES            2
+#define ACPI_MAX_MATCH_OPCODE           5
 
 /* RSDP checksums */
 
@@ -196,22 +192,15 @@
 
 #define ACPI_SMBUS_BUFFER_SIZE          34
 
-/* Number of strings associated with the _OSI reserved method */
-
-#define ACPI_NUM_OSI_STRINGS            9
-
-
 /******************************************************************************
  *
  * ACPI AML Debugger
  *
  *****************************************************************************/
 
-#define ACPI_DEBUGGER_MAX_ARGS          8  /* Must be max method args + 1 */
+#define ACPI_DEBUGGER_MAX_ARGS          8      /* Must be max method args + 1 
*/
 
 #define ACPI_DEBUGGER_COMMAND_PROMPT    '-'
 #define ACPI_DEBUGGER_EXECUTE_PROMPT    '%'
 
-
-#endif /* _ACCONFIG_H */
-
+#endif                         /* _ACCONFIG_H */
diff -r 5cbfc6c24d32 -r 13cba2e78a65 xen/include/acpi/acexcep.h
--- a/xen/include/acpi/acexcep.h        Tue Mar 18 13:14:26 2008 +0000
+++ b/xen/include/acpi/acexcep.h        Tue Mar 18 14:55:36 2008 +0000
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2005, R. Byron Moore
+ * Copyright (C) 2000 - 2007, R. Byron Moore
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -44,11 +44,9 @@
 #ifndef __ACEXCEP_H__
 #define __ACEXCEP_H__
 
-
 /*
  * Exceptions returned by external ACPI interfaces
  */
-
 #define AE_CODE_ENVIRONMENTAL           0x0000
 #define AE_CODE_PROGRAMMER              0x1000
 #define AE_CODE_ACPI_TABLES             0x2000
@@ -56,10 +54,8 @@
 #define AE_CODE_CONTROL                 0x4000
 #define AE_CODE_MASK                    0xF000
 
-
 #define ACPI_SUCCESS(a)                 (!(a))
 #define ACPI_FAILURE(a)                 (a)
-
 
 #define AE_OK                           (acpi_status) 0x0000
 
@@ -96,8 +92,9 @@
 #define AE_ABORT_METHOD                 (acpi_status) (0x001C | 
AE_CODE_ENVIRONMENTAL)
 #define AE_SAME_HANDLER                 (acpi_status) (0x001D | 
AE_CODE_ENVIRONMENTAL)
 #define AE_WAKE_ONLY_GPE                (acpi_status) (0x001E | 
AE_CODE_ENVIRONMENTAL)
-
-#define AE_CODE_ENV_MAX                 0x001E
+#define AE_OWNER_ID_LIMIT               (acpi_status) (0x001F | 
AE_CODE_ENVIRONMENTAL)
+
+#define AE_CODE_ENV_MAX                 0x001F
 
 /*
  * Programmer exceptions
@@ -114,7 +111,6 @@
 
 #define AE_CODE_PGM_MAX                 0x0009
 
-
 /*
  * Acpi table exceptions
  */
@@ -126,7 +122,6 @@
 #define AE_INVALID_TABLE_LENGTH         (acpi_status) (0x0006 | 
AE_CODE_ACPI_TABLES)
 
 #define AE_CODE_TBL_MAX                 0x0006
-
 
 /*
  * AML exceptions.  These are caused by problems with
@@ -165,8 +160,9 @@
 #define AE_AML_BAD_RESOURCE_VALUE       (acpi_status) (0x001F | AE_CODE_AML)
 #define AE_AML_CIRCULAR_REFERENCE       (acpi_status) (0x0020 | AE_CODE_AML)
 #define AE_AML_BAD_RESOURCE_LENGTH      (acpi_status) (0x0021 | AE_CODE_AML)
-
-#define AE_CODE_AML_MAX                 0x0021
+#define AE_AML_ILLEGAL_ADDRESS          (acpi_status) (0x0022 | AE_CODE_AML)
+
+#define AE_CODE_AML_MAX                 0x0022
 
 /*
  * Internal exceptions used for control
@@ -182,9 +178,10 @@
 #define AE_CTRL_BREAK                   (acpi_status) (0x0009 | 
AE_CODE_CONTROL)
 #define AE_CTRL_CONTINUE                (acpi_status) (0x000A | 
AE_CODE_CONTROL)
 #define AE_CTRL_SKIP                    (acpi_status) (0x000B | 
AE_CODE_CONTROL)
-
-#define AE_CODE_CTRL_MAX                0x000B
-
+#define AE_CTRL_PARSE_CONTINUE          (acpi_status) (0x000C | 
AE_CODE_CONTROL)
+#define AE_CTRL_PARSE_PENDING           (acpi_status) (0x000D | 
AE_CODE_CONTROL)
+
+#define AE_CODE_CTRL_MAX                0x000D
 
 #ifdef DEFINE_ACPI_GLOBALS
 
@@ -192,8 +189,7 @@
  * String versions of the exception codes above
  * These strings must match the corresponding defines exactly
  */
-char const   *acpi_gbl_exception_names_env[] =
-{
+char const *acpi_gbl_exception_names_env[] = {
        "AE_OK",
        "AE_ERROR",
        "AE_NO_ACPI_TABLES",
@@ -224,11 +220,11 @@ char const   *acpi_gbl_exception_names_e
        "AE_LOGICAL_ADDRESS",
        "AE_ABORT_METHOD",
        "AE_SAME_HANDLER",
-       "AE_WAKE_ONLY_GPE"
-};
-
-char const   *acpi_gbl_exception_names_pgm[] =
-{
+       "AE_WAKE_ONLY_GPE",
+       "AE_OWNER_ID_LIMIT"
+};
+
+char const *acpi_gbl_exception_names_pgm[] = {
        "AE_BAD_PARAMETER",
        "AE_BAD_CHARACTER",
        "AE_BAD_PATHNAME",
@@ -240,8 +236,7 @@ char const   *acpi_gbl_exception_names_p
        "AE_BAD_DECIMAL_CONSTANT"
 };
 
-char const   *acpi_gbl_exception_names_tbl[] =
-{
+char const *acpi_gbl_exception_names_tbl[] = {
        "AE_BAD_SIGNATURE",
        "AE_BAD_HEADER",
        "AE_BAD_CHECKSUM",
@@ -250,8 +245,7 @@ char const   *acpi_gbl_exception_names_t
        "AE_INVALID_TABLE_LENGTH"
 };
 
-char const   *acpi_gbl_exception_names_aml[] =
-{
+char const *acpi_gbl_exception_names_aml[] = {
        "AE_AML_ERROR",
        "AE_AML_PARSE",
        "AE_AML_BAD_OPCODE",
@@ -284,11 +278,11 @@ char const   *acpi_gbl_exception_names_a
        "AE_AML_NO_RESOURCE_END_TAG",
        "AE_AML_BAD_RESOURCE_VALUE",
        "AE_AML_CIRCULAR_REFERENCE",
-       "AE_AML_BAD_RESOURCE_LENGTH"
-};
-
-char const   *acpi_gbl_exception_names_ctrl[] =
-{
+       "AE_AML_BAD_RESOURCE_LENGTH",
+       "AE_AML_ILLEGAL_ADDRESS"
+};
+
+char const *acpi_gbl_exception_names_ctrl[] = {
        "AE_CTRL_RETURN_VALUE",
        "AE_CTRL_PENDING",
        "AE_CTRL_TERMINATE",
@@ -299,10 +293,11 @@ char const   *acpi_gbl_exception_names_c
        "AE_CTRL_TRANSFER",
        "AE_CTRL_BREAK",
        "AE_CTRL_CONTINUE",
-       "AE_CTRL_SKIP"
-};
-
-#endif /* ACPI GLOBALS */
-
-
-#endif /* __ACEXCEP_H__ */
+       "AE_CTRL_SKIP",
+       "AE_CTRL_PARSE_CONTINUE",
+       "AE_CTRL_PARSE_PENDING"
+};
+
+#endif                         /* ACPI GLOBALS */
+
+#endif                         /* __ACEXCEP_H__ */
diff -r 5cbfc6c24d32 -r 13cba2e78a65 xen/include/acpi/acglobal.h
--- a/xen/include/acpi/acglobal.h       Tue Mar 18 13:14:26 2008 +0000
+++ b/xen/include/acpi/acglobal.h       Tue Mar 18 14:55:36 2008 +0000
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2005, R. Byron Moore
+ * Copyright (C) 2000 - 2007, R. Byron Moore
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -44,7 +44,6 @@
 #ifndef __ACGLOBAL_H__
 #define __ACGLOBAL_H__
 
-
 /*
  * Ensure that the globals are actually defined and initialized only once.
  *
@@ -59,30 +58,6 @@
 #define ACPI_INIT_GLOBAL(a,b) a
 #endif
 
-/*
- * Keep local copies of these FADT-based registers.  NOTE: These globals
- * are first in this file for alignment reasons on 64-bit systems.
- */
-ACPI_EXTERN struct acpi_generic_address         acpi_gbl_xpm1a_enable;
-ACPI_EXTERN struct acpi_generic_address         acpi_gbl_xpm1b_enable;
-
-
-/*****************************************************************************
- *
- * Debug support
- *
- ****************************************************************************/
-
-/* Runtime configuration of debug print levels */
-
-extern      u32                                 acpi_dbg_level;
-extern      u32                                 acpi_dbg_layer;
-
-/* Procedure nesting level for debug output */
-
-extern      u32                                 acpi_gbl_nesting_level;
-
-
 /*****************************************************************************
  *
  * Runtime configuration (static defaults that can be overriden at runtime)
@@ -92,36 +67,64 @@ extern      u32                         
 /*
  * Enable "slack" in the AML interpreter?  Default is FALSE, and the
  * interpreter strictly follows the ACPI specification.  Setting to TRUE
- * allows the interpreter to forgive certain bad AML constructs.  Currently:
+ * allows the interpreter to ignore certain errors and/or bad AML constructs.
+ *
+ * Currently, these features are enabled by this flag:
+ *
  * 1) Allow "implicit return" of last value in a control method
- * 2) Allow access beyond end of operation region
+ * 2) Allow access beyond the end of an operation region
  * 3) Allow access to uninitialized locals/args (auto-init to integer 0)
  * 4) Allow ANY object type to be a source operand for the Store() operator
- */
-ACPI_EXTERN u8       ACPI_INIT_GLOBAL (acpi_gbl_enable_interpreter_slack, 
FALSE);
+ * 5) Allow unresolved references (invalid target name) in package objects
+ * 6) Enable warning messages for behavior that is not ACPI spec compliant
+ */
+ACPI_EXTERN u8 ACPI_INIT_GLOBAL(acpi_gbl_enable_interpreter_slack, FALSE);
 
 /*
  * Automatically serialize ALL control methods? Default is FALSE, meaning
  * to use the Serialized/not_serialized method flags on a per method basis.
  * Only change this if the ASL code is poorly written and cannot handle
- * reentrancy even though methods are marked "not_serialized".
- */
-ACPI_EXTERN u8       ACPI_INIT_GLOBAL (acpi_gbl_all_methods_serialized, FALSE);
+ * reentrancy even though methods are marked "NotSerialized".
+ */
+ACPI_EXTERN u8 ACPI_INIT_GLOBAL(acpi_gbl_all_methods_serialized, FALSE);
 
 /*
  * Create the predefined _OSI method in the namespace? Default is TRUE
  * because ACPI CA is fully compatible with other ACPI implementations.
  * Changing this will revert ACPI CA (and machine ASL) to pre-OSI behavior.
  */
-ACPI_EXTERN u8       ACPI_INIT_GLOBAL (acpi_gbl_create_osi_method, TRUE);
+ACPI_EXTERN u8 ACPI_INIT_GLOBAL(acpi_gbl_create_osi_method, TRUE);
 
 /*
  * Disable wakeup GPEs during runtime? Default is TRUE because WAKE and
  * RUNTIME GPEs should never be shared, and WAKE GPEs should typically only
  * be enabled just before going to sleep.
  */
-ACPI_EXTERN u8       ACPI_INIT_GLOBAL (acpi_gbl_leave_wake_gpes_disabled, 
TRUE);
-
+ACPI_EXTERN u8 ACPI_INIT_GLOBAL(acpi_gbl_leave_wake_gpes_disabled, TRUE);
+
+/*****************************************************************************
+ *
+ * Debug support
+ *
+ ****************************************************************************/
+
+/* Runtime configuration of debug print levels */
+
+extern u32 acpi_dbg_level;
+extern u32 acpi_dbg_layer;
+
+/* Procedure nesting level for debug output */
+
+extern u32 acpi_gbl_nesting_level;
+
+/* Support for dynamic control method tracing mechanism */
+
+ACPI_EXTERN u32 acpi_gbl_original_dbg_level;
+ACPI_EXTERN u32 acpi_gbl_original_dbg_layer;
+ACPI_EXTERN acpi_name acpi_gbl_trace_method_name;
+ACPI_EXTERN u32 acpi_gbl_trace_dbg_level;
+ACPI_EXTERN u32 acpi_gbl_trace_dbg_layer;
+ACPI_EXTERN u32 acpi_gbl_trace_flags;
 
 /*****************************************************************************
  *
@@ -130,49 +133,56 @@ ACPI_EXTERN u8       ACPI_INIT_GLOBAL (a
  ****************************************************************************/
 
 /*
- * Table pointers.
- * Although these pointers are somewhat redundant with the global acpi_table,
- * they are convenient because they are typed pointers.
- *
- * These tables are single-table only; meaning that there can be at most one
- * of each in the system.  Each global points to the actual table.
- */
-ACPI_EXTERN u32                                 acpi_gbl_table_flags;
-ACPI_EXTERN u32                                 acpi_gbl_rsdt_table_count;
-ACPI_EXTERN struct rsdp_descriptor             *acpi_gbl_RSDP;
-ACPI_EXTERN XSDT_DESCRIPTOR            *acpi_gbl_XSDT;
-ACPI_EXTERN FADT_DESCRIPTOR            *acpi_gbl_FADT;
-ACPI_EXTERN struct acpi_table_header           *acpi_gbl_DSDT;
-ACPI_EXTERN FACS_DESCRIPTOR            *acpi_gbl_FACS;
-ACPI_EXTERN struct acpi_common_facs             acpi_gbl_common_fACS;
-/*
- * Since there may be multiple SSDTs and PSDTS, a single pointer is not
- * sufficient; Therefore, there isn't one!
- */
-
-
-/*
- * Handle both ACPI 1.0 and ACPI 2.0 Integer widths
- * If we are running a method that exists in a 32-bit ACPI table.
- * Use only 32 bits of the Integer for conversion.
- */
-ACPI_EXTERN u8                                  acpi_gbl_integer_bit_width;
-ACPI_EXTERN u8                                  acpi_gbl_integer_byte_width;
-ACPI_EXTERN u8                                  acpi_gbl_integer_nybble_width;
-
-/*
- * ACPI Table info arrays
- */
-extern      struct acpi_table_list              
acpi_gbl_table_lists[NUM_ACPI_TABLE_TYPES];
-extern      struct acpi_table_support           
acpi_gbl_table_data[NUM_ACPI_TABLE_TYPES];
-
-/*
- * Predefined mutex objects.  This array contains the
+ * acpi_gbl_root_table_list is the master list of ACPI tables found in the
+ * RSDT/XSDT.
+ *
+ * acpi_gbl_FADT is a local copy of the FADT, converted to a common format.
+ */
+ACPI_EXTERN struct acpi_internal_rsdt acpi_gbl_root_table_list;
+ACPI_EXTERN struct acpi_table_fadt acpi_gbl_FADT;
+extern acpi_native_uint acpi_gbl_permanent_mmap;
+
+/* These addresses are calculated from FADT address values */
+
+ACPI_EXTERN struct acpi_generic_address acpi_gbl_xpm1a_enable;
+ACPI_EXTERN struct acpi_generic_address acpi_gbl_xpm1b_enable;
+
+/*
+ * Handle both ACPI 1.0 and ACPI 2.0 Integer widths. The integer width is
+ * determined by the revision of the DSDT: If the DSDT revision is less than
+ * 2, use only the lower 32 bits of the internal 64-bit Integer.
+ */
+ACPI_EXTERN u8 acpi_gbl_integer_bit_width;
+ACPI_EXTERN u8 acpi_gbl_integer_byte_width;
+ACPI_EXTERN u8 acpi_gbl_integer_nybble_width;
+
+/*****************************************************************************
+ *
+ * Mutual exlusion within ACPICA subsystem
+ *
+ ****************************************************************************/
+
+/*
+ * Predefined mutex objects. This array contains the
  * actual OS mutex handles, indexed by the local ACPI_MUTEX_HANDLEs.
  * (The table maps local handles to the real OS handles)
  */
-ACPI_EXTERN struct acpi_mutex_info              acpi_gbl_mutex_info[NUM_MUTEX];
-
+ACPI_EXTERN struct acpi_mutex_info acpi_gbl_mutex_info[ACPI_NUM_MUTEX];
+
+/*
+ * Global lock semaphore works in conjunction with the actual HW global lock
+ */
+ACPI_EXTERN acpi_mutex acpi_gbl_global_lock_mutex;
+ACPI_EXTERN acpi_semaphore acpi_gbl_global_lock_semaphore;
+
+/*
+ * Spinlocks are used for interfaces that can be possibly called at
+ * interrupt level
+ */
+ACPI_EXTERN spinlock_t _acpi_gbl_gpe_lock;     /* For GPE data structs and 
registers */
+ACPI_EXTERN spinlock_t _acpi_gbl_hardware_lock;        /* For ACPI H/W except 
GPE registers */
+#define acpi_gbl_gpe_lock      &_acpi_gbl_gpe_lock
+#define acpi_gbl_hardware_lock &_acpi_gbl_hardware_lock
 
 /*****************************************************************************
  *
@@ -180,41 +190,64 @@ ACPI_EXTERN struct acpi_mutex_info      
  *
  ****************************************************************************/
 
-
-ACPI_EXTERN struct acpi_memory_list             
acpi_gbl_memory_lists[ACPI_NUM_MEM_LISTS];
-ACPI_EXTERN struct acpi_object_notify_handler   acpi_gbl_device_notify;
-ACPI_EXTERN struct acpi_object_notify_handler   acpi_gbl_system_notify;
-ACPI_EXTERN acpi_exception_handler              acpi_gbl_exception_handler;
-ACPI_EXTERN acpi_init_handler                   acpi_gbl_init_handler;
-ACPI_EXTERN struct acpi_walk_state             *acpi_gbl_breakpoint_walk;
-ACPI_EXTERN acpi_handle                         acpi_gbl_global_lock_semaphore;
-
-ACPI_EXTERN u32                                 
acpi_gbl_global_lock_thread_count;
-ACPI_EXTERN u32                                 acpi_gbl_original_mode;
-ACPI_EXTERN u32                                 
acpi_gbl_rsdp_original_location;
-ACPI_EXTERN u32                                 acpi_gbl_ns_lookup_count;
-ACPI_EXTERN u32                                 acpi_gbl_ps_find_count;
-ACPI_EXTERN u16                                 
acpi_gbl_pm1_enable_register_save;
-ACPI_EXTERN u16                                 acpi_gbl_next_table_owner_id;
-ACPI_EXTERN u16                                 acpi_gbl_next_method_owner_id;
-ACPI_EXTERN u16                                 acpi_gbl_global_lock_handle;
-ACPI_EXTERN u8                                  
acpi_gbl_debugger_configuration;
-ACPI_EXTERN u8                                  acpi_gbl_global_lock_acquired;
-ACPI_EXTERN u8                                  acpi_gbl_step_to_next_call;
-ACPI_EXTERN u8                                  acpi_gbl_acpi_hardware_present;
-ACPI_EXTERN u8                                  acpi_gbl_global_lock_present;
-ACPI_EXTERN u8                                  acpi_gbl_events_initialized;
-ACPI_EXTERN u8                                  
acpi_gbl_system_awake_and_running;
-
-extern u8                                       acpi_gbl_shutdown;
-extern u32                                      acpi_gbl_startup_flags;
-extern const u8                                 acpi_gbl_decode_to8bit[8];
-extern const char                              
*acpi_gbl_sleep_state_names[ACPI_S_STATE_COUNT];
-extern const char                              
*acpi_gbl_highest_dstate_names[4];
-extern const struct acpi_opcode_info            
acpi_gbl_aml_op_info[AML_NUM_OPCODES];
-extern const char                              
*acpi_gbl_region_types[ACPI_NUM_PREDEFINED_REGIONS];
-extern const char                              
*acpi_gbl_valid_osi_strings[ACPI_NUM_OSI_STRINGS];
-
+#ifdef ACPI_DBG_TRACK_ALLOCATIONS
+
+/* Lists for tracking memory allocations */
+
+ACPI_EXTERN struct acpi_memory_list *acpi_gbl_global_list;
+ACPI_EXTERN struct acpi_memory_list *acpi_gbl_ns_node_list;
+ACPI_EXTERN u8 acpi_gbl_display_final_mem_stats;
+#endif
+
+/* Object caches */
+
+ACPI_EXTERN acpi_cache_t *acpi_gbl_namespace_cache;
+ACPI_EXTERN acpi_cache_t *acpi_gbl_state_cache;
+ACPI_EXTERN acpi_cache_t *acpi_gbl_ps_node_cache;
+ACPI_EXTERN acpi_cache_t *acpi_gbl_ps_node_ext_cache;
+ACPI_EXTERN acpi_cache_t *acpi_gbl_operand_cache;
+
+/* Global handlers */
+
+ACPI_EXTERN struct acpi_object_notify_handler acpi_gbl_device_notify;
+ACPI_EXTERN struct acpi_object_notify_handler acpi_gbl_system_notify;
+ACPI_EXTERN acpi_exception_handler acpi_gbl_exception_handler;
+ACPI_EXTERN acpi_init_handler acpi_gbl_init_handler;
+ACPI_EXTERN struct acpi_walk_state *acpi_gbl_breakpoint_walk;
+
+/* Misc */
+
+ACPI_EXTERN u32 acpi_gbl_original_mode;
+ACPI_EXTERN u32 acpi_gbl_rsdp_original_location;
+ACPI_EXTERN u32 acpi_gbl_ns_lookup_count;
+ACPI_EXTERN u32 acpi_gbl_ps_find_count;
+ACPI_EXTERN u32 acpi_gbl_owner_id_mask[ACPI_NUM_OWNERID_MASKS];
+ACPI_EXTERN u16 acpi_gbl_pm1_enable_register_save;
+ACPI_EXTERN u16 acpi_gbl_global_lock_handle;
+ACPI_EXTERN u8 acpi_gbl_last_owner_id_index;
+ACPI_EXTERN u8 acpi_gbl_next_owner_id_offset;
+ACPI_EXTERN u8 acpi_gbl_debugger_configuration;
+ACPI_EXTERN u8 acpi_gbl_global_lock_acquired;
+ACPI_EXTERN u8 acpi_gbl_step_to_next_call;
+ACPI_EXTERN u8 acpi_gbl_acpi_hardware_present;
+ACPI_EXTERN u8 acpi_gbl_global_lock_present;
+ACPI_EXTERN u8 acpi_gbl_events_initialized;
+ACPI_EXTERN u8 acpi_gbl_system_awake_and_running;
+
+extern u8 acpi_gbl_shutdown;
+extern u32 acpi_gbl_startup_flags;
+extern const char *acpi_gbl_sleep_state_names[ACPI_S_STATE_COUNT];
+extern const char *acpi_gbl_highest_dstate_names[4];
+extern const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES];
+extern const char *acpi_gbl_region_types[ACPI_NUM_PREDEFINED_REGIONS];
+
+/* Exception codes */
+
+extern char const *acpi_gbl_exception_names_env[];
+extern char const *acpi_gbl_exception_names_pgm[];
+extern char const *acpi_gbl_exception_names_tbl[];
+extern char const *acpi_gbl_exception_names_aml[];
+extern char const *acpi_gbl_exception_names_ctrl[];
 
 /*****************************************************************************
  *
@@ -230,20 +263,21 @@ extern const char                       
 #define NUM_PREDEFINED_NAMES            9
 #endif
 
-ACPI_EXTERN struct acpi_namespace_node          acpi_gbl_root_node_struct;
-ACPI_EXTERN struct acpi_namespace_node         *acpi_gbl_root_node;
-ACPI_EXTERN struct acpi_namespace_node         *acpi_gbl_fadt_gpe_device;
-
-extern const u8                                 
acpi_gbl_ns_properties[NUM_NS_TYPES];
-extern const struct acpi_predefined_names       acpi_gbl_pre_defined_names 
[NUM_PREDEFINED_NAMES];
+ACPI_EXTERN struct acpi_namespace_node acpi_gbl_root_node_struct;
+ACPI_EXTERN struct acpi_namespace_node *acpi_gbl_root_node;
+ACPI_EXTERN struct acpi_namespace_node *acpi_gbl_fadt_gpe_device;
+
+extern const u8 acpi_gbl_ns_properties[NUM_NS_TYPES];
+extern const struct acpi_predefined_names
+    acpi_gbl_pre_defined_names[NUM_PREDEFINED_NAMES];
 
 #ifdef ACPI_DEBUG_OUTPUT
-ACPI_EXTERN u32                                 acpi_gbl_current_node_count;
-ACPI_EXTERN u32                                 acpi_gbl_current_node_size;
-ACPI_EXTERN u32                                 
acpi_gbl_max_concurrent_node_count;
-ACPI_EXTERN acpi_size                           acpi_gbl_entry_stack_pointer;
-ACPI_EXTERN acpi_size                           acpi_gbl_lowest_stack_pointer;
-ACPI_EXTERN u32                                 acpi_gbl_deepest_nesting;
+ACPI_EXTERN u32 acpi_gbl_current_node_count;
+ACPI_EXTERN u32 acpi_gbl_current_node_size;
+ACPI_EXTERN u32 acpi_gbl_max_concurrent_node_count;
+ACPI_EXTERN acpi_size acpi_gbl_entry_stack_pointer;
+ACPI_EXTERN acpi_size acpi_gbl_lowest_stack_pointer;
+ACPI_EXTERN u32 acpi_gbl_deepest_nesting;
 #endif
 
 /*****************************************************************************
@@ -252,21 +286,11 @@ ACPI_EXTERN u32                         
  *
  ****************************************************************************/
 
-
-ACPI_EXTERN struct acpi_thread_state           *acpi_gbl_current_walk_list;
+ACPI_EXTERN struct acpi_thread_state *acpi_gbl_current_walk_list;
 
 /* Control method single step flag */
 
-ACPI_EXTERN u8                                  acpi_gbl_cm_single_step;
-
-
-/*****************************************************************************
- *
- * Parser globals
- *
- ****************************************************************************/
-
-ACPI_EXTERN union acpi_parse_object            *acpi_gbl_parsed_namespace_root;
+ACPI_EXTERN u8 acpi_gbl_cm_single_step;
 
 /*****************************************************************************
  *
@@ -274,10 +298,10 @@ ACPI_EXTERN union acpi_parse_object     
  *
  ****************************************************************************/
 
-extern      struct acpi_bit_register_info       
acpi_gbl_bit_register_info[ACPI_NUM_BITREG];
-ACPI_EXTERN u8                                  acpi_gbl_sleep_type_a;
-ACPI_EXTERN u8                                  acpi_gbl_sleep_type_b;
-
+extern struct acpi_bit_register_info
+    acpi_gbl_bit_register_info[ACPI_NUM_BITREG];
+ACPI_EXTERN u8 acpi_gbl_sleep_type_a;
+ACPI_EXTERN u8 acpi_gbl_sleep_type_b;
 
 /*****************************************************************************
  *
@@ -285,12 +309,13 @@ ACPI_EXTERN u8                          
  *
  ****************************************************************************/
 
-extern      struct acpi_fixed_event_info        
acpi_gbl_fixed_event_info[ACPI_NUM_FIXED_EVENTS];
-ACPI_EXTERN struct acpi_fixed_event_handler     
acpi_gbl_fixed_event_handlers[ACPI_NUM_FIXED_EVENTS];
-ACPI_EXTERN struct acpi_gpe_xrupt_info         *acpi_gbl_gpe_xrupt_list_head;
-ACPI_EXTERN struct acpi_gpe_block_info         
*acpi_gbl_gpe_fadt_blocks[ACPI_MAX_GPE_BLOCKS];
-ACPI_EXTERN acpi_handle                         acpi_gbl_gpe_lock;
-
+extern struct acpi_fixed_event_info
+    acpi_gbl_fixed_event_info[ACPI_NUM_FIXED_EVENTS];
+ACPI_EXTERN struct acpi_fixed_event_handler
+    acpi_gbl_fixed_event_handlers[ACPI_NUM_FIXED_EVENTS];
+ACPI_EXTERN struct acpi_gpe_xrupt_info *acpi_gbl_gpe_xrupt_list_head;
+ACPI_EXTERN struct acpi_gpe_block_info
+*acpi_gbl_gpe_fadt_blocks[ACPI_MAX_GPE_BLOCKS];
 
 /*****************************************************************************
  *
@@ -298,60 +323,55 @@ ACPI_EXTERN acpi_handle                 
  *
  ****************************************************************************/
 
-
-ACPI_EXTERN u8                                  acpi_gbl_db_output_flags;
+ACPI_EXTERN u8 acpi_gbl_db_output_flags;
 
 #ifdef ACPI_DISASSEMBLER
 
-ACPI_EXTERN u8                                  acpi_gbl_db_opt_disasm;
-ACPI_EXTERN u8                                  acpi_gbl_db_opt_verbose;
-#endif
-
+ACPI_EXTERN u8 acpi_gbl_db_opt_disasm;
+ACPI_EXTERN u8 acpi_gbl_db_opt_verbose;
+#endif
 
 #ifdef ACPI_DEBUGGER
 
-extern      u8                                  acpi_gbl_method_executing;
-extern      u8                                  acpi_gbl_abort_method;
-extern      u8                                  acpi_gbl_db_terminate_threads;
-
-ACPI_EXTERN int                                 optind;
-ACPI_EXTERN char                               *optarg;
-
-ACPI_EXTERN u8                                  acpi_gbl_db_opt_tables;
-ACPI_EXTERN u8                                  acpi_gbl_db_opt_stats;
-ACPI_EXTERN u8                                  acpi_gbl_db_opt_ini_methods;
-
-
-ACPI_EXTERN char                               
*acpi_gbl_db_args[ACPI_DEBUGGER_MAX_ARGS];
-ACPI_EXTERN char                                acpi_gbl_db_line_buf[80];
-ACPI_EXTERN char                                acpi_gbl_db_parsed_buf[80];
-ACPI_EXTERN char                                acpi_gbl_db_scope_buf[40];
-ACPI_EXTERN char                                acpi_gbl_db_debug_filename[40];
-ACPI_EXTERN u8                                  acpi_gbl_db_output_to_file;
-ACPI_EXTERN char                               *acpi_gbl_db_buffer;
-ACPI_EXTERN char                               *acpi_gbl_db_filename;
-ACPI_EXTERN u32                                 acpi_gbl_db_debug_level;
-ACPI_EXTERN u32                                 
acpi_gbl_db_console_debug_level;
-ACPI_EXTERN struct acpi_table_header           *acpi_gbl_db_table_ptr;
-ACPI_EXTERN struct acpi_namespace_node         *acpi_gbl_db_scope_node;
+extern u8 acpi_gbl_method_executing;
+extern u8 acpi_gbl_abort_method;
+extern u8 acpi_gbl_db_terminate_threads;
+
+ACPI_EXTERN int optind;
+ACPI_EXTERN char *optarg;
+
+ACPI_EXTERN u8 acpi_gbl_db_opt_tables;
+ACPI_EXTERN u8 acpi_gbl_db_opt_stats;
+ACPI_EXTERN u8 acpi_gbl_db_opt_ini_methods;
+
+ACPI_EXTERN char *acpi_gbl_db_args[ACPI_DEBUGGER_MAX_ARGS];
+ACPI_EXTERN char acpi_gbl_db_line_buf[80];
+ACPI_EXTERN char acpi_gbl_db_parsed_buf[80];
+ACPI_EXTERN char acpi_gbl_db_scope_buf[40];
+ACPI_EXTERN char acpi_gbl_db_debug_filename[40];
+ACPI_EXTERN u8 acpi_gbl_db_output_to_file;
+ACPI_EXTERN char *acpi_gbl_db_buffer;
+ACPI_EXTERN char *acpi_gbl_db_filename;
+ACPI_EXTERN u32 acpi_gbl_db_debug_level;
+ACPI_EXTERN u32 acpi_gbl_db_console_debug_level;
+ACPI_EXTERN struct acpi_table_header *acpi_gbl_db_table_ptr;
+ACPI_EXTERN struct acpi_namespace_node *acpi_gbl_db_scope_node;
 
 /*
  * Statistic globals
  */
-ACPI_EXTERN u16                                 
acpi_gbl_obj_type_count[ACPI_TYPE_NS_NODE_MAX+1];
-ACPI_EXTERN u16                                 
acpi_gbl_node_type_count[ACPI_TYPE_NS_NODE_MAX+1];
-ACPI_EXTERN u16                                 acpi_gbl_obj_type_count_misc;
-ACPI_EXTERN u16                                 acpi_gbl_node_type_count_misc;
-ACPI_EXTERN u32                                 acpi_gbl_num_nodes;
-ACPI_EXTERN u32                                 acpi_gbl_num_objects;
-
-
-ACPI_EXTERN u32                                 acpi_gbl_size_of_parse_tree;
-ACPI_EXTERN u32                                 acpi_gbl_size_of_method_trees;
-ACPI_EXTERN u32                                 acpi_gbl_size_of_node_entries;
-ACPI_EXTERN u32                                 acpi_gbl_size_of_acpi_objects;
-
-#endif /* ACPI_DEBUGGER */
-
-
-#endif /* __ACGLOBAL_H__ */
+ACPI_EXTERN u16 acpi_gbl_obj_type_count[ACPI_TYPE_NS_NODE_MAX + 1];
+ACPI_EXTERN u16 acpi_gbl_node_type_count[ACPI_TYPE_NS_NODE_MAX + 1];
+ACPI_EXTERN u16 acpi_gbl_obj_type_count_misc;
+ACPI_EXTERN u16 acpi_gbl_node_type_count_misc;
+ACPI_EXTERN u32 acpi_gbl_num_nodes;
+ACPI_EXTERN u32 acpi_gbl_num_objects;
+
+ACPI_EXTERN u32 acpi_gbl_size_of_parse_tree;
+ACPI_EXTERN u32 acpi_gbl_size_of_method_trees;
+ACPI_EXTERN u32 acpi_gbl_size_of_node_entries;
+ACPI_EXTERN u32 acpi_gbl_size_of_acpi_objects;
+
+#endif                         /* ACPI_DEBUGGER */
+
+#endif                         /* __ACGLOBAL_H__ */
diff -r 5cbfc6c24d32 -r 13cba2e78a65 xen/include/acpi/achware.h
--- a/xen/include/acpi/achware.h        Tue Mar 18 13:14:26 2008 +0000
+++ b/xen/include/acpi/achware.h        Tue Mar 18 14:55:36 2008 +0000
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2005, R. Byron Moore
+ * Copyright (C) 2000 - 2007, R. Byron Moore
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -44,139 +44,88 @@
 #ifndef __ACHWARE_H__
 #define __ACHWARE_H__
 
+/* PM Timer ticks per second (HZ) */
 
-/* PM Timer ticks per second (HZ) */
 #define PM_TIMER_FREQUENCY  3579545
 
+/* Values for the _SST reserved method */
+
+#define ACPI_SST_INDICATOR_OFF  0
+#define ACPI_SST_WORKING        1
+#define ACPI_SST_WAKING         2
+#define ACPI_SST_SLEEPING       3
+#define ACPI_SST_SLEEP_CONTEXT  4
 
 /* Prototypes */
 
+/*
+ * hwacpi - high level functions
+ */
+acpi_status acpi_hw_set_mode(u32 mode);
+
+u32 acpi_hw_get_mode(void);
+
+/*
+ * hwregs - ACPI Register I/O
+ */
+struct acpi_bit_register_info *acpi_hw_get_bit_register_info(u32 register_id);
 
 acpi_status
-acpi_hw_initialize (
-       void);
+acpi_hw_register_read(u32 register_id, u32 * return_value);
+
+acpi_status acpi_hw_register_write(u32 register_id, u32 value);
 
 acpi_status
-acpi_hw_shutdown (
-       void);
+acpi_hw_low_level_read(u32 width,
+                      u32 * value, struct acpi_generic_address *reg);
 
 acpi_status
-acpi_hw_initialize_system_info (
-       void);
+acpi_hw_low_level_write(u32 width, u32 value, struct acpi_generic_address 
*reg);
+
+acpi_status acpi_hw_clear_acpi_status(void);
+
+/*
+ * hwgpe - GPE support
+ */
+acpi_status
+acpi_hw_write_gpe_enable_reg(struct acpi_gpe_event_info *gpe_event_info);
 
 acpi_status
-acpi_hw_set_mode (
-       u32                             mode);
+acpi_hw_disable_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
+                         struct acpi_gpe_block_info *gpe_block);
 
-u32
-acpi_hw_get_mode (
-       void);
-
-u32
-acpi_hw_get_mode_capabilities (
-       void);
-
-/* Register I/O Prototypes */
-
-struct acpi_bit_register_info *
-acpi_hw_get_bit_register_info (
-       u32                             register_id);
+acpi_status acpi_hw_clear_gpe(struct acpi_gpe_event_info *gpe_event_info);
 
 acpi_status
-acpi_hw_register_read (
-       u8                              use_lock,
-       u32                             register_id,
-       u32                             *return_value);
+acpi_hw_clear_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
+                       struct acpi_gpe_block_info *gpe_block);
+
+#ifdef ACPI_FUTURE_USAGE
+acpi_status
+acpi_hw_get_gpe_status(struct acpi_gpe_event_info *gpe_event_info,
+                      acpi_event_status * event_status);
+#endif                         /* ACPI_FUTURE_USAGE */
+
+acpi_status acpi_hw_disable_all_gpes(void);
+
+acpi_status acpi_hw_enable_all_runtime_gpes(void);
+
+acpi_status acpi_hw_enable_all_wakeup_gpes(void);
 
 acpi_status
-acpi_hw_register_write (
-       u8                              use_lock,
-       u32                             register_id,
-       u32                             value);
+acpi_hw_enable_runtime_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
+                                struct acpi_gpe_block_info *gpe_block);
+
+#ifdef ACPI_FUTURE_USAGE
+/*
+ * hwtimer - ACPI Timer prototypes
+ */
+acpi_status acpi_get_timer_resolution(u32 * resolution);
+
+acpi_status acpi_get_timer(u32 * ticks);
 
 acpi_status
-acpi_hw_low_level_read (
-       u32                             width,
-       u32                             *value,
-       struct acpi_generic_address     *reg);
+acpi_get_timer_duration(u32 start_ticks, u32 end_ticks, u32 * time_elapsed);
+#endif                         /* ACPI_FUTURE_USAGE */
 
-acpi_status
-acpi_hw_low_level_write (
-       u32                             width,
-       u32                             value,
-       struct acpi_generic_address     *reg);
-
-acpi_status
-acpi_hw_clear_acpi_status (
-       u32                             flags);
-
-
-/* GPE support */
-
-acpi_status
-acpi_hw_write_gpe_enable_reg (
-       struct acpi_gpe_event_info      *gpe_event_info);
-
-acpi_status
-acpi_hw_disable_gpe_block (
-       struct acpi_gpe_xrupt_info      *gpe_xrupt_info,
-       struct acpi_gpe_block_info      *gpe_block);
-
-acpi_status
-acpi_hw_clear_gpe (
-       struct acpi_gpe_event_info      *gpe_event_info);
-
-acpi_status
-acpi_hw_clear_gpe_block (
-       struct acpi_gpe_xrupt_info      *gpe_xrupt_info,
-       struct acpi_gpe_block_info      *gpe_block);
-
-#ifdef ACPI_FUTURE_USAGE
-acpi_status
-acpi_hw_get_gpe_status (
-       struct acpi_gpe_event_info      *gpe_event_info,
-       acpi_event_status               *event_status);
-#endif
-
-acpi_status
-acpi_hw_disable_all_gpes (
-       u32                             flags);
-
-acpi_status
-acpi_hw_enable_all_runtime_gpes (
-       u32                             flags);
-
-acpi_status
-acpi_hw_enable_all_wakeup_gpes (
-       u32                             flags);
-
-acpi_status
-acpi_hw_enable_runtime_gpe_block (
-       struct acpi_gpe_xrupt_info      *gpe_xrupt_info,
-       struct acpi_gpe_block_info      *gpe_block);
-
-acpi_status
-acpi_hw_enable_wakeup_gpe_block (
-       struct acpi_gpe_xrupt_info      *gpe_xrupt_info,
-       struct acpi_gpe_block_info      *gpe_block);
-
-
-/* ACPI Timer prototypes */
-
-#ifdef ACPI_FUTURE_USAGE
-acpi_status
-acpi_get_timer_resolution (
-       u32                             *resolution);
-
-acpi_status
-acpi_get_timer (
-       u32                             *ticks);
-
-acpi_status
-acpi_get_timer_duration (
-       u32                             start_ticks,
-       u32                             end_ticks,
-       u32                             *time_elapsed);
-#endif  /*  ACPI_FUTURE_USAGE  */
-
-#endif /* __ACHWARE_H__ */
+#endif                         /* __ACHWARE_H__ */
diff -r 5cbfc6c24d32 -r 13cba2e78a65 xen/include/acpi/aclocal.h
--- a/xen/include/acpi/aclocal.h        Tue Mar 18 13:14:26 2008 +0000
+++ b/xen/include/acpi/aclocal.h        Tue Mar 18 14:55:36 2008 +0000
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2005, R. Byron Moore
+ * Copyright (C) 2000 - 2007, R. Byron Moore
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -44,105 +44,103 @@
 #ifndef __ACLOCAL_H__
 #define __ACLOCAL_H__
 
-
-#define ACPI_WAIT_FOREVER               0xFFFF  /* u16, as per ACPI spec */
-
-typedef void *                                  acpi_mutex;
-typedef u32                                     acpi_mutex_handle;
-
+/* acpisrc:struct_defs -- for acpisrc conversion */
+
+#define ACPI_WAIT_FOREVER               0xFFFF /* u16, as per ACPI spec */
+#define ACPI_DO_NOT_WAIT                0
+#define ACPI_SERIALIZED                 0xFF
+
+typedef u32 acpi_mutex_handle;
+#define ACPI_GLOBAL_LOCK                (acpi_semaphore) (-1)
 
 /* Total number of aml opcodes defined */
 
 #define AML_NUM_OPCODES                 0x7F
 
+/* Forward declarations */
+
+struct acpi_walk_state;
+struct acpi_obj_mutex;
+union acpi_parse_object;
 
 /*****************************************************************************
  *
  * Mutex typedefs and structs
  *
  ****************************************************************************/
-
 
 /*
  * Predefined handles for the mutex objects used within the subsystem
  * All mutex objects are automatically created by acpi_ut_mutex_initialize.
  *
- * The acquire/release ordering protocol is implied via this list.  Mutexes
+ * The acquire/release ordering protocol is implied via this list. Mutexes
  * with a lower value must be acquired before mutexes with a higher value.
  *
- * NOTE: any changes here must be reflected in the acpi_gbl_mutex_names table 
also!
- */
-
-#define ACPI_MTX_EXECUTE                0
-#define ACPI_MTX_INTERPRETER            1
-#define ACPI_MTX_PARSER                 2
-#define ACPI_MTX_DISPATCHER             3
-#define ACPI_MTX_TABLES                 4
-#define ACPI_MTX_OP_REGIONS             5
-#define ACPI_MTX_NAMESPACE              6
-#define ACPI_MTX_EVENTS                 7
-#define ACPI_MTX_HARDWARE               8
-#define ACPI_MTX_CACHES                 9
-#define ACPI_MTX_MEMORY                 10
-#define ACPI_MTX_DEBUG_CMD_COMPLETE     11
-#define ACPI_MTX_DEBUG_CMD_READY        12
-
-#define MAX_MUTEX                       12
-#define NUM_MUTEX                       MAX_MUTEX+1
-
+ * NOTE: any changes here must be reflected in the acpi_gbl_mutex_names
+ * table below also!
+ */
+#define ACPI_MTX_INTERPRETER            0      /* AML Interpreter, main lock */
+#define ACPI_MTX_NAMESPACE              1      /* ACPI Namespace */
+#define ACPI_MTX_TABLES                 2      /* Data for ACPI tables */
+#define ACPI_MTX_EVENTS                 3      /* Data for ACPI events */
+#define ACPI_MTX_CACHES                 4      /* Internal caches, general 
purposes */
+#define ACPI_MTX_MEMORY                 5      /* Debug memory tracking lists 
*/
+#define ACPI_MTX_DEBUG_CMD_COMPLETE     6      /* AML debugger */
+#define ACPI_MTX_DEBUG_CMD_READY        7      /* AML debugger */
+
+#define ACPI_MAX_MUTEX                  7
+#define ACPI_NUM_MUTEX                  ACPI_MAX_MUTEX+1
 
 #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
 #ifdef DEFINE_ACPI_GLOBALS
 
-/* Names for the mutexes used in the subsystem */
-
-static char                         *acpi_gbl_mutex_names[] =
-{
-       "ACPI_MTX_Execute",
+/* Debug names for the mutexes above */
+
+static char *acpi_gbl_mutex_names[ACPI_NUM_MUTEX] = {
        "ACPI_MTX_Interpreter",
-       "ACPI_MTX_Parser",
-       "ACPI_MTX_Dispatcher",
        "ACPI_MTX_Tables",
-       "ACPI_MTX_op_regions",
        "ACPI_MTX_Namespace",
        "ACPI_MTX_Events",
-       "ACPI_MTX_Hardware",
        "ACPI_MTX_Caches",
        "ACPI_MTX_Memory",
-       "ACPI_MTX_debug_cmd_complete",
-       "ACPI_MTX_debug_cmd_ready",
+       "ACPI_MTX_CommandComplete",
+       "ACPI_MTX_CommandReady"
 };
 
 #endif
 #endif
 
+/*
+ * Predefined handles for spinlocks used within the subsystem.
+ * These spinlocks are created by acpi_ut_mutex_initialize
+ */
+#define ACPI_LOCK_GPES                  0
+#define ACPI_LOCK_HARDWARE              1
+
+#define ACPI_MAX_LOCK                   1
+#define ACPI_NUM_LOCK                   ACPI_MAX_LOCK+1
+
+/* Owner IDs are used to track namespace nodes for selective deletion */
+
+typedef u8 acpi_owner_id;
+#define ACPI_OWNER_ID_MAX               0xFF
+
+/* This Thread ID means that the mutex is not in use (unlocked) */
+
+#define ACPI_MUTEX_NOT_ACQUIRED         (acpi_thread_id) 0
 
 /* Table for the global mutexes */
 
-struct acpi_mutex_info
-{
-       acpi_mutex                          mutex;
-       u32                                 use_count;
-       u32                                 owner_id;
-};
-
-/* This owner ID means that the mutex is not in use (unlocked) */
-
-#define ACPI_MUTEX_NOT_ACQUIRED         (u32) (-1)
-
+struct acpi_mutex_info {
+       acpi_mutex mutex;
+       u32 use_count;
+       acpi_thread_id thread_id;
+};
 
 /* Lock flag parameter for various interfaces */
 
 #define ACPI_MTX_DO_NOT_LOCK            0
 #define ACPI_MTX_LOCK                   1
-
-
-typedef u16                                     acpi_owner_id;
-#define ACPI_OWNER_TYPE_TABLE           0x0
-#define ACPI_OWNER_TYPE_METHOD          0x1
-#define ACPI_FIRST_METHOD_ID            0x0001
-#define ACPI_FIRST_TABLE_ID             0xF000
-
 
 /* Field access granularities */
 
@@ -151,153 +149,196 @@ typedef u16                             
 #define ACPI_FIELD_DWORD_GRANULARITY    4
 #define ACPI_FIELD_QWORD_GRANULARITY    8
 
+#define ACPI_ENTRY_NOT_FOUND            NULL
+
 /*****************************************************************************
  *
  * Namespace typedefs and structs
  *
  ****************************************************************************/
 
-
 /* Operational modes of the AML interpreter/scanner */
 
-typedef enum
-{
-       ACPI_IMODE_LOAD_PASS1               = 0x01,
-       ACPI_IMODE_LOAD_PASS2               = 0x02,
-       ACPI_IMODE_EXECUTE                  = 0x0E
-
+typedef enum {
+       ACPI_IMODE_LOAD_PASS1 = 0x01,
+       ACPI_IMODE_LOAD_PASS2 = 0x02,
+       ACPI_IMODE_EXECUTE = 0x03
 } acpi_interpreter_mode;
 
-
-/*
- * The Node describes a named object that appears in the AML
- * An acpi_node is used to store Nodes.
- *
- * data_type is used to differentiate between internal descriptors, and MUST
- * be the first byte in this structure.
- */
-
-union acpi_name_union
-{
-       u32                                 integer;
-       char                                ascii[4];
-};
-
-struct acpi_namespace_node
-{
-       u8                                  descriptor;     /* Used to 
differentiate object descriptor types */
-       u8                                  type;           /* Type associated 
with this name */
-       u16                                 owner_id;
-       union acpi_name_union               name;           /* ACPI Name, 
always 4 chars per ACPI spec */
-       union acpi_operand_object           *object;        /* Pointer to 
attached ACPI object (optional) */
-       struct acpi_namespace_node          *child;         /* First child */
-       struct acpi_namespace_node          *peer;          /* Next peer*/
-       u16                                 reference_count; /* Current count 
of references and children */
-       u8                                  flags;
-};
-
-
-#define ACPI_ENTRY_NOT_FOUND            NULL
-
-
-/* Node flags */
-
-#define ANOBJ_RESERVED                  0x01
-#define ANOBJ_END_OF_PEER_LIST          0x02
-#define ANOBJ_DATA_WIDTH_32             0x04     /* Parent table is 64-bits */
-#define ANOBJ_METHOD_ARG                0x08
-#define ANOBJ_METHOD_LOCAL              0x10
-#define ANOBJ_METHOD_NO_RETVAL          0x20
-#define ANOBJ_METHOD_SOME_NO_RETVAL     0x40
-#define ANOBJ_IS_BIT_OFFSET             0x80
+union acpi_name_union {
+       u32 integer;
+       char ascii[4];
+};
+
+/*
+ * The Namespace Node describes a named object that appears in the AML.
+ * descriptor_type is used to differentiate between internal descriptors.
+ *
+ * The node is optimized for both 32-bit and 64-bit platforms:
+ * 20 bytes for the 32-bit case, 32 bytes for the 64-bit case.
+ *
+ * Note: The descriptor_type and Type fields must appear in the identical
+ * position in both the struct acpi_namespace_node and union 
acpi_operand_object
+ * structures.
+ */
+struct acpi_namespace_node {
+       union acpi_operand_object *object;      /* Interpreter object */
+       u8 descriptor_type;     /* Differentiate object descriptor types */
+       u8 type;                /* ACPI Type associated with this name */
+       u8 flags;               /* Miscellaneous flags */
+       acpi_owner_id owner_id; /* Node creator */
+       union acpi_name_union name;     /* ACPI Name, always 4 chars per ACPI 
spec */
+       struct acpi_namespace_node *child;      /* First child */
+       struct acpi_namespace_node *peer;       /* Peer. Parent if 
ANOBJ_END_OF_PEER_LIST set */
+
+       /*
+        * The following fields are used by the ASL compiler and disassembler 
only
+        */
+#ifdef ACPI_LARGE_NAMESPACE_NODE
+       union acpi_parse_object *op;
+       u32 value;
+       u32 length;
+#endif
+};
+
+/* Namespace Node flags */
+
+#define ANOBJ_END_OF_PEER_LIST          0x01   /* End-of-list, Peer field 
points to parent */
+#define ANOBJ_TEMPORARY                 0x02   /* Node is create by a method 
and is temporary */
+#define ANOBJ_METHOD_ARG                0x04   /* Node is a method argument */
+#define ANOBJ_METHOD_LOCAL              0x08   /* Node is a method local */
+#define ANOBJ_SUBTREE_HAS_INI           0x10   /* Used to optimize device 
initialization */
+
+#define ANOBJ_IS_EXTERNAL               0x08   /* i_aSL only: This object 
created via External() */
+#define ANOBJ_METHOD_NO_RETVAL          0x10   /* i_aSL only: Method has no 
return value */
+#define ANOBJ_METHOD_SOME_NO_RETVAL     0x20   /* i_aSL only: Method has at 
least one return value */
+#define ANOBJ_IS_BIT_OFFSET             0x40   /* i_aSL only: Reference is a 
bit offset */
+#define ANOBJ_IS_REFERENCED             0x80   /* i_aSL only: Object was 
referenced */
 
 /*
  * ACPI Table Descriptor.  One per ACPI table
  */
-struct acpi_table_desc
-{
-       struct acpi_table_desc          *prev;
-       struct acpi_table_desc          *next;
-       struct acpi_table_desc          *installed_desc;
-       struct acpi_table_header        *pointer;
-       u8                              *aml_start;
-       u64                             physical_address;
-       u32                             aml_length;
-       acpi_size                       length;
-       acpi_owner_id                   table_id;
-       u8                              type;
-       u8                              allocation;
-       u8                              loaded_into_namespace;
-};
-
-struct acpi_table_list
-{
-       struct acpi_table_desc          *next;
-       u32                             count;
-};
-
-
-struct acpi_find_context
-{
-       char                            *search_for;
-       acpi_handle                     *list;
-       u32                             *count;
-};
-
-
-struct acpi_ns_search_data
-{
-       struct acpi_namespace_node      *node;
-};
-
+struct acpi_table_desc {
+       acpi_physical_address address;
+       struct acpi_table_header *pointer;
+       u32 length;             /* Length fixed at 32 bits */
+       union acpi_name_union signature;
+       acpi_owner_id owner_id;
+       u8 flags;
+};
+
+/* Flags for above */
+
+#define ACPI_TABLE_ORIGIN_UNKNOWN       (0)
+#define ACPI_TABLE_ORIGIN_MAPPED        (1)
+#define ACPI_TABLE_ORIGIN_ALLOCATED     (2)
+#define ACPI_TABLE_ORIGIN_MASK          (3)
+#define ACPI_TABLE_IS_LOADED            (4)
+
+/* One internal RSDT for table management */
+
+struct acpi_internal_rsdt {
+       struct acpi_table_desc *tables;
+       u32 count;
+       u32 size;
+       u8 flags;
+};
+
+/* Flags for above */
+
+#define ACPI_ROOT_ORIGIN_UNKNOWN        (0)    /* ~ORIGIN_ALLOCATED */
+#define ACPI_ROOT_ORIGIN_ALLOCATED      (1)
+#define ACPI_ROOT_ALLOW_RESIZE          (2)
+
+/* Predefined (fixed) table indexes */
+
+#define ACPI_TABLE_INDEX_DSDT           (0)
+#define ACPI_TABLE_INDEX_FACS           (1)
+
+struct acpi_find_context {
+       char *search_for;
+       acpi_handle *list;
+       u32 *count;
+};
+
+struct acpi_ns_search_data {
+       struct acpi_namespace_node *node;
+};
 
 /*
  * Predefined Namespace items
  */
-struct acpi_predefined_names
-{
-       char                            *name;
-       u8                              type;
-       char                            *val;
-};
-
+struct acpi_predefined_names {
+       char *name;
+       u8 type;
+       char *val;
+};
 
 /* Object types used during package copies */
-
 
 #define ACPI_COPY_TYPE_SIMPLE           0
 #define ACPI_COPY_TYPE_PACKAGE          1
 
 /* Info structure used to convert external<->internal namestrings */
 
-struct acpi_namestring_info
-{
-       char                            *external_name;
-       char                            *next_external_char;
-       char                            *internal_name;
-       u32                             length;
-       u32                             num_segments;
-       u32                             num_carats;
-       u8                              fully_qualified;
-};
-
+struct acpi_namestring_info {
+       char *external_name;
+       char *next_external_char;
+       char *internal_name;
+       u32 length;
+       u32 num_segments;
+       u32 num_carats;
+       u8 fully_qualified;
+};
 
 /* Field creation info */
 
-struct acpi_create_field_info
-{
-       struct acpi_namespace_node      *region_node;
-       struct acpi_namespace_node      *field_node;
-       struct acpi_namespace_node      *register_node;
-       struct acpi_namespace_node      *data_register_node;
-       u32                             bank_value;
-       u32                             field_bit_position;
-       u32                             field_bit_length;
-       u8                              field_flags;
-       u8                              attribute;
-       u8                              field_type;
-};
-
+struct acpi_create_field_info {
+       struct acpi_namespace_node *region_node;
+       struct acpi_namespace_node *field_node;
+       struct acpi_namespace_node *register_node;
+       struct acpi_namespace_node *data_register_node;
+       u32 bank_value;
+       u32 field_bit_position;
+       u32 field_bit_length;
+       u8 field_flags;
+       u8 attribute;
+       u8 field_type;
+};
+
+typedef
+acpi_status(*ACPI_INTERNAL_METHOD) (struct acpi_walk_state * walk_state);
+
+/*
+ * Bitmapped ACPI types.  Used internally only
+ */
+#define ACPI_BTYPE_ANY                  0x00000000
+#define ACPI_BTYPE_INTEGER              0x00000001
+#define ACPI_BTYPE_STRING               0x00000002
+#define ACPI_BTYPE_BUFFER               0x00000004
+#define ACPI_BTYPE_PACKAGE              0x00000008
+#define ACPI_BTYPE_FIELD_UNIT           0x00000010
+#define ACPI_BTYPE_DEVICE               0x00000020
+#define ACPI_BTYPE_EVENT                0x00000040
+#define ACPI_BTYPE_METHOD               0x00000080
+#define ACPI_BTYPE_MUTEX                0x00000100
+#define ACPI_BTYPE_REGION               0x00000200
+#define ACPI_BTYPE_POWER                0x00000400
+#define ACPI_BTYPE_PROCESSOR            0x00000800
+#define ACPI_BTYPE_THERMAL              0x00001000
+#define ACPI_BTYPE_BUFFER_FIELD         0x00002000
+#define ACPI_BTYPE_DDB_HANDLE           0x00004000
+#define ACPI_BTYPE_DEBUG_OBJECT         0x00008000
+#define ACPI_BTYPE_REFERENCE            0x00010000
+#define ACPI_BTYPE_RESOURCE             0x00020000
+
+#define ACPI_BTYPE_COMPUTE_DATA         (ACPI_BTYPE_INTEGER | 
ACPI_BTYPE_STRING | ACPI_BTYPE_BUFFER)
+
+#define ACPI_BTYPE_DATA                 (ACPI_BTYPE_COMPUTE_DATA  | 
ACPI_BTYPE_PACKAGE)
+#define ACPI_BTYPE_DATA_REFERENCE       (ACPI_BTYPE_DATA | 
ACPI_BTYPE_REFERENCE | ACPI_BTYPE_DDB_HANDLE)
+#define ACPI_BTYPE_DEVICE_OBJECTS       (ACPI_BTYPE_DEVICE | 
ACPI_BTYPE_THERMAL | ACPI_BTYPE_PROCESSOR)
+#define ACPI_BTYPE_OBJECTS_AND_REFS     0x0001FFFF     /* ARG or LOCAL */
+#define ACPI_BTYPE_ALL_OBJECTS          0x0000FFFF
 
 /*****************************************************************************
  *
@@ -307,114 +348,100 @@ struct acpi_create_field_info
 
 /* Dispatch info for each GPE -- either a method or handler, cannot be both */
 
-struct acpi_handler_info
-{
-       acpi_event_handler                      address;        /* Address of 
handler, if any */
-       void                                    *context;       /* Context to 
be passed to handler */
-       struct acpi_namespace_node              *method_node;   /* Method node 
for this GPE level (saved) */
-};
-
-union acpi_gpe_dispatch_info
-{
-       struct acpi_namespace_node              *method_node;   /* Method node 
for this GPE level */
-       struct acpi_handler_info                *handler;
+struct acpi_handler_info {
+       acpi_event_handler address;     /* Address of handler, if any */
+       void *context;          /* Context to be passed to handler */
+       struct acpi_namespace_node *method_node;        /* Method node for this 
GPE level (saved) */
+};
+
+union acpi_gpe_dispatch_info {
+       struct acpi_namespace_node *method_node;        /* Method node for this 
GPE level */
+       struct acpi_handler_info *handler;
 };
 
 /*
  * Information about a GPE, one per each GPE in an array.
  * NOTE: Important to keep this struct as small as possible.
  */
-struct acpi_gpe_event_info
-{
-       union acpi_gpe_dispatch_info    dispatch;       /* Either Method or 
Handler */
-       struct acpi_gpe_register_info           *register_info; /* Backpointer 
to register info */
-       u8                                      flags;          /* Misc info 
about this GPE */
-       u8                                      register_bit;   /* This GPE bit 
within the register */
+struct acpi_gpe_event_info {
+       union acpi_gpe_dispatch_info dispatch;  /* Either Method or Handler */
+       struct acpi_gpe_register_info *register_info;   /* Backpointer to 
register info */
+       u8 flags;               /* Misc info about this GPE */
+       u8 gpe_number;          /* This GPE */
 };
 
 /* Information about a GPE register pair, one per each status/enable pair in 
an array */
 
-struct acpi_gpe_register_info
-{
-       struct acpi_generic_address             status_address; /* Address of 
status reg */
-       struct acpi_generic_address             enable_address; /* Address of 
enable reg */
-       u8                                      enable_for_wake; /* GPEs to 
keep enabled when sleeping */
-       u8                                      enable_for_run; /* GPEs to keep 
enabled when running */
-       u8                                      base_gpe_number; /* Base GPE 
number for this register */
+struct acpi_gpe_register_info {
+       struct acpi_generic_address status_address;     /* Address of status 
reg */
+       struct acpi_generic_address enable_address;     /* Address of enable 
reg */
+       u8 enable_for_wake;     /* GPEs to keep enabled when sleeping */
+       u8 enable_for_run;      /* GPEs to keep enabled when running */
+       u8 base_gpe_number;     /* Base GPE number for this register */
 };
 
 /*
  * Information about a GPE register block, one per each installed block --
  * GPE0, GPE1, and one per each installed GPE Block Device.
  */
-struct acpi_gpe_block_info
-{
-       struct acpi_namespace_node              *node;
-       struct acpi_gpe_block_info              *previous;
-       struct acpi_gpe_block_info              *next;
-       struct acpi_gpe_xrupt_info              *xrupt_block;   /* Backpointer 
to interrupt block */
-       struct acpi_gpe_register_info           *register_info; /* One per GPE 
register pair */
-       struct acpi_gpe_event_info              *event_info;    /* One for each 
GPE */
-       struct acpi_generic_address             block_address;  /* Base address 
of the block */
-       u32                                     register_count; /* Number of 
register pairs in block */
-       u8                                      block_base_number;/* Base GPE 
number for this block */
+struct acpi_gpe_block_info {
+       struct acpi_namespace_node *node;
+       struct acpi_gpe_block_info *previous;
+       struct acpi_gpe_block_info *next;
+       struct acpi_gpe_xrupt_info *xrupt_block;        /* Backpointer to 
interrupt block */
+       struct acpi_gpe_register_info *register_info;   /* One per GPE register 
pair */
+       struct acpi_gpe_event_info *event_info; /* One for each GPE */
+       struct acpi_generic_address block_address;      /* Base address of the 
block */
+       u32 register_count;     /* Number of register pairs in block */
+       u8 block_base_number;   /* Base GPE number for this block */
 };
 
 /* Information about GPE interrupt handlers, one per each interrupt level used 
for GPEs */
 
-struct acpi_gpe_xrupt_info
-{
-       struct acpi_gpe_xrupt_info              *previous;
-       struct acpi_gpe_xrupt_info              *next;
-       struct acpi_gpe_block_info              *gpe_block_list_head; /* List 
of GPE blocks for this xrupt */
-       u32                                     interrupt_level;    /* System 
interrupt level */
-};
-
-
-struct acpi_gpe_walk_info
-{
-       struct acpi_namespace_node              *gpe_device;
-       struct acpi_gpe_block_info              *gpe_block;
-};
-
-
-typedef acpi_status (*ACPI_GPE_CALLBACK) (
-       struct acpi_gpe_xrupt_info      *gpe_xrupt_info,
-       struct acpi_gpe_block_info      *gpe_block);
-
+struct acpi_gpe_xrupt_info {
+       struct acpi_gpe_xrupt_info *previous;
+       struct acpi_gpe_xrupt_info *next;
+       struct acpi_gpe_block_info *gpe_block_list_head;        /* List of GPE 
blocks for this xrupt */
+       u32 interrupt_number;   /* System interrupt number */
+};
+
+struct acpi_gpe_walk_info {
+       struct acpi_namespace_node *gpe_device;
+       struct acpi_gpe_block_info *gpe_block;
+};
+
+typedef acpi_status(*acpi_gpe_callback) (struct acpi_gpe_xrupt_info *
+                                        gpe_xrupt_info,
+                                        struct acpi_gpe_block_info *
+                                        gpe_block);
 
 /* Information about each particular fixed event */
 
-struct acpi_fixed_event_handler
-{
-       acpi_event_handler              handler;        /* Address of handler. 
*/
-       void                            *context;       /* Context to be passed 
to handler */
-};
-
-struct acpi_fixed_event_info
-{
-       u8                              status_register_id;
-       u8                              enable_register_id;
-       u16                             status_bit_mask;
-       u16                             enable_bit_mask;
+struct acpi_fixed_event_handler {
+       acpi_event_handler handler;     /* Address of handler. */
+       void *context;          /* Context to be passed to handler */
+};
+
+struct acpi_fixed_event_info {
+       u8 status_register_id;
+       u8 enable_register_id;
+       u16 status_bit_mask;
+       u16 enable_bit_mask;
 };
 
 /* Information used during field processing */
 
-struct acpi_field_info
-{
-       u8                              skip_field;
-       u8                              field_flag;
-       u32                             pkg_length;
-};
-
+struct acpi_field_info {
+       u8 skip_field;
+       u8 field_flag;
+       u32 pkg_length;
+};
 
 /*****************************************************************************
  *
  * Generic "state" object for stacks
  *
  ****************************************************************************/
-
 
 #define ACPI_CONTROL_NORMAL                  0xC0
 #define ACPI_CONTROL_CONDITIONAL_EXECUTING   0xC1
@@ -422,151 +449,112 @@ struct acpi_field_info
 #define ACPI_CONTROL_PREDICATE_FALSE         0xC3
 #define ACPI_CONTROL_PREDICATE_TRUE          0xC4
 
-
-/* Forward declarations */
-struct acpi_walk_state        ;
-struct acpi_obj_mutex;
-union acpi_parse_object        ;
-
-
-#define ACPI_STATE_COMMON                  /* Two 32-bit fields and a pointer 
*/\
-       u8                                  data_type;          /* To 
differentiate various internal objs */\
-       u8                                  flags;      \
-       u16                                 value;      \
-       u16                                 state;      \
-       u16                                 reserved;   \
-       void                                *next;      \
-
-struct acpi_common_state
-{
-       ACPI_STATE_COMMON
-};
-
+#define ACPI_STATE_COMMON \
+       void                            *next; \
+       u8                              descriptor_type; /* To differentiate 
various internal objs */\
+       u8                              flags; \
+       u16                             value; \
+       u16                             state;
+
+       /* There are 2 bytes available here until the next natural alignment 
boundary */
+
+struct acpi_common_state {
+ACPI_STATE_COMMON};
 
 /*
  * Update state - used to traverse complex objects such as packages
  */
-struct acpi_update_state
-{
-       ACPI_STATE_COMMON
-       union acpi_operand_object           *object;
-};
-
+struct acpi_update_state {
+       ACPI_STATE_COMMON union acpi_operand_object *object;
+};
 
 /*
  * Pkg state - used to traverse nested package structures
  */
-struct acpi_pkg_state
-{
-       ACPI_STATE_COMMON
-       union acpi_operand_object           *source_object;
-       union acpi_operand_object           *dest_object;
-       struct acpi_walk_state              *walk_state;
-       void                                *this_target_obj;
-       u32                                 num_packages;
-       u16                                 index;
-};
-
+struct acpi_pkg_state {
+       ACPI_STATE_COMMON u16 index;
+       union acpi_operand_object *source_object;
+       union acpi_operand_object *dest_object;
+       struct acpi_walk_state *walk_state;
+       void *this_target_obj;
+       u32 num_packages;
+};
 
 /*
  * Control state - one per if/else and while constructs.
  * Allows nesting of these constructs
  */
-struct acpi_control_state
-{
-       ACPI_STATE_COMMON
-       union acpi_parse_object             *predicate_op;
-       u8                                  *aml_predicate_start;   /* Start of 
if/while predicate */
-       u8                                  *package_end;           /* End of 
if/while block */
-       u16                                 opcode;
-};
-
+struct acpi_control_state {
+       ACPI_STATE_COMMON u16 opcode;
+       union acpi_parse_object *predicate_op;
+       u8 *aml_predicate_start;        /* Start of if/while predicate */
+       u8 *package_end;        /* End of if/while block */
+};
 
 /*
  * Scope state - current scope during namespace lookups
  */
-struct acpi_scope_state
-{
-       ACPI_STATE_COMMON
-       struct acpi_namespace_node          *node;
-};
-
-
-struct acpi_pscope_state
-{
-       ACPI_STATE_COMMON
-       union acpi_parse_object             *op;                    /* Current 
op being parsed */
-       u8                                  *arg_end;               /* Current 
argument end */
-       u8                                  *pkg_end;               /* Current 
package end */
-       u32                                 arg_list;               /* Next 
argument to parse */
-       u32                                 arg_count;              /* Number 
of fixed arguments */
-};
-
+struct acpi_scope_state {
+       ACPI_STATE_COMMON struct acpi_namespace_node *node;
+};
+
+struct acpi_pscope_state {
+       ACPI_STATE_COMMON u32 arg_count;        /* Number of fixed arguments */
+       union acpi_parse_object *op;    /* Current op being parsed */
+       u8 *arg_end;            /* Current argument end */
+       u8 *pkg_end;            /* Current package end */
+       u32 arg_list;           /* Next argument to parse */
+};
 
 /*
  * Thread state - one per thread across multiple walk states.  Multiple walk
  * states are created when there are nested control methods executing.
  */
-struct acpi_thread_state
-{
-       ACPI_STATE_COMMON
-       struct acpi_walk_state              *walk_state_list;       /* Head of 
list of walk_states for this thread */
-       union acpi_operand_object           *acquired_mutex_list;   /* List of 
all currently acquired mutexes */
-       u32                                 thread_id;              /* Running 
thread ID */
-       u8                                  current_sync_level;     /* Mutex 
Sync (nested acquire) level */
-};
-
+struct acpi_thread_state {
+       ACPI_STATE_COMMON u8 current_sync_level;        /* Mutex Sync (nested 
acquire) level */
+       struct acpi_walk_state *walk_state_list;        /* Head of list of 
walk_states for this thread */
+       union acpi_operand_object *acquired_mutex_list; /* List of all 
currently acquired mutexes */
+       acpi_thread_id thread_id;       /* Running thread ID */
+};
 
 /*
  * Result values - used to accumulate the results of nested
  * AML arguments
  */
-struct acpi_result_values
-{
-       ACPI_STATE_COMMON
-       union acpi_operand_object           *obj_desc [ACPI_OBJ_NUM_OPERANDS];
-       u8                                  num_results;
-       u8                                  last_insert;
-};
-
+struct acpi_result_values {
+       ACPI_STATE_COMMON u8 num_results;
+       u8 last_insert;
+       union acpi_operand_object *obj_desc[ACPI_OBJ_NUM_OPERANDS];
+};
 
 typedef
-acpi_status (*acpi_parse_downwards) (
-       struct acpi_walk_state              *walk_state,
-       union acpi_parse_object             **out_op);
-
-typedef
-acpi_status (*acpi_parse_upwards) (
-       struct acpi_walk_state              *walk_state);
-
+acpi_status(*acpi_parse_downwards) (struct acpi_walk_state * walk_state,
+                                   union acpi_parse_object ** out_op);
+
+typedef acpi_status(*acpi_parse_upwards) (struct acpi_walk_state * walk_state);
 
 /*
  * Notify info - used to pass info to the deferred notify
  * handler/dispatcher.
  */
-struct acpi_notify_info
-{
-       ACPI_STATE_COMMON
-       struct acpi_namespace_node          *node;
-       union acpi_operand_object           *handler_obj;
-};
-
+struct acpi_notify_info {
+       ACPI_STATE_COMMON struct acpi_namespace_node *node;
+       union acpi_operand_object *handler_obj;
+};
 
 /* Generic state is union of structs above */
 
-union acpi_generic_state
-{
-       struct acpi_common_state            common;
-       struct acpi_control_state           control;
-       struct acpi_update_state            update;
-       struct acpi_scope_state             scope;
-       struct acpi_pscope_state            parse_scope;
-       struct acpi_pkg_state               pkg;
-       struct acpi_thread_state            thread;
-       struct acpi_result_values           results;
-       struct acpi_notify_info             notify;
-};
-
+union acpi_generic_state {
+       struct acpi_common_state common;
+       struct acpi_control_state control;
+       struct acpi_update_state update;
+       struct acpi_scope_state scope;
+       struct acpi_pscope_state parse_scope;
+       struct acpi_pkg_state pkg;
+       struct acpi_thread_state thread;
+       struct acpi_result_values results;
+       struct acpi_notify_info notify;
+};
 
 /*****************************************************************************
  *
@@ -574,10 +562,7 @@ union acpi_generic_state
  *
  ****************************************************************************/
 
-typedef
-acpi_status (*ACPI_EXECUTE_OP) (
-       struct acpi_walk_state              *walk_state);
-
+typedef acpi_status(*ACPI_EXECUTE_OP) (struct acpi_walk_state * walk_state);
 
 /*****************************************************************************
  *
@@ -588,152 +573,137 @@ acpi_status (*ACPI_EXECUTE_OP) (
 /*
  * AML opcode, name, and argument layout
  */
-struct acpi_opcode_info
-{
+struct acpi_opcode_info {
 #if defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUG_OUTPUT)
-       char                                *name;          /* Opcode name 
(disassembler/debug only) */
+       char *name;             /* Opcode name (disassembler/debug only) */
 #endif
-       u32                                 parse_args;     /* Grammar/Parse 
time arguments */
-       u32                                 runtime_args;   /* Interpret time 
arguments */
-       u32                                 flags;          /* Misc flags */
-       u8                                  object_type;    /* Corresponding 
internal object type */
-       u8                                  class;          /* Opcode class */
-       u8                                  type;           /* Opcode type */
-};
-
-
-union acpi_parse_value
-{
-       acpi_integer                        integer;        /* Integer constant 
(Up to 64 bits) */
-       struct uint64_struct                integer64;      /* Structure 
overlay for 2 32-bit Dwords */
-       u32                                 size;           /* bytelist or 
field size */
-       char                                *string;        /* NULL terminated 
string */
-       u8                                  *buffer;        /* buffer or string 
*/
-       char                                *name;          /* NULL terminated 
string */
-       union acpi_parse_object             *arg;           /* arguments and 
contained ops */
-};
-
+       u32 parse_args;         /* Grammar/Parse time arguments */
+       u32 runtime_args;       /* Interpret time arguments */
+       u16 flags;              /* Misc flags */
+       u8 object_type;         /* Corresponding internal object type */
+       u8 class;               /* Opcode class */
+       u8 type;                /* Opcode type */
+};
+
+union acpi_parse_value {
+       acpi_integer integer;   /* Integer constant (Up to 64 bits) */
+       struct uint64_struct integer64; /* Structure overlay for 2 32-bit 
Dwords */
+       u32 size;               /* bytelist or field size */
+       char *string;           /* NULL terminated string */
+       u8 *buffer;             /* buffer or string */
+       char *name;             /* NULL terminated string */
+       union acpi_parse_object *arg;   /* arguments and contained ops */
+};
 
 #define ACPI_PARSE_COMMON \
-       u8                                  data_type;      /* To differentiate 
various internal objs */\
-       u8                                  flags;          /* Type of Op */\
-       u16                                 aml_opcode;     /* AML opcode */\
-       u32                                 aml_offset;     /* Offset of 
declaration in AML */\
-       union acpi_parse_object             *parent;        /* Parent op */\
-       union acpi_parse_object             *next;          /* Next op */\
+       union acpi_parse_object         *parent;        /* Parent op */\
+       u8                              descriptor_type; /* To differentiate 
various internal objs */\
+       u8                              flags;          /* Type of Op */\
+       u16                             aml_opcode;     /* AML opcode */\
+       u32                             aml_offset;     /* Offset of 
declaration in AML */\
+       union acpi_parse_object         *next;          /* Next op */\
+       struct acpi_namespace_node      *node;          /* For use by 
interpreter */\
+       union acpi_parse_value          value;          /* Value or args 
associated with the opcode */\
        ACPI_DISASM_ONLY_MEMBERS (\
-       u8                                  disasm_flags;   /* Used during AML 
disassembly */\
-       u8                                  disasm_opcode;  /* Subtype used for 
disassembly */\
-       char                                aml_op_name[16]) /* Op name (debug 
only) */\
-                          /* NON-DEBUG members below: */\
-       struct acpi_namespace_node          *node;          /* For use by 
interpreter */\
-       union acpi_parse_value              value;          /* Value or args 
associated with the opcode */\
-
-
-#define ACPI_DASM_BUFFER        0x00
-#define ACPI_DASM_RESOURCE      0x01
-#define ACPI_DASM_STRING        0x02
-#define ACPI_DASM_UNICODE       0x03
-#define ACPI_DASM_EISAID        0x04
-#define ACPI_DASM_MATCHOP       0x05
-
-/*
- * generic operation (for example:  If, While, Store)
- */
-struct acpi_parse_obj_common
-{
-       ACPI_PARSE_COMMON
-};
-
+       u8                              disasm_flags;   /* Used during AML 
disassembly */\
+       u8                              disasm_opcode;  /* Subtype used for 
disassembly */\
+       char                            aml_op_name[16])        /* Op name 
(debug only) */
+
+#define ACPI_DASM_BUFFER                0x00
+#define ACPI_DASM_RESOURCE              0x01
+#define ACPI_DASM_STRING                0x02
+#define ACPI_DASM_UNICODE               0x03
+#define ACPI_DASM_EISAID                0x04
+#define ACPI_DASM_MATCHOP               0x05
+#define ACPI_DASM_LNOT_PREFIX           0x06
+#define ACPI_DASM_LNOT_SUFFIX           0x07
+#define ACPI_DASM_IGNORE                0x08
+
+/*
+ * Generic operation (for example:  If, While, Store)
+ */
+struct acpi_parse_obj_common {
+ACPI_PARSE_COMMON};
 
 /*
  * Extended Op for named ops (Scope, Method, etc.), deferred ops (Methods and 
op_regions),
  * and bytelists.
  */
-struct acpi_parse_obj_named
-{
-       ACPI_PARSE_COMMON
-       u8                                  *path;
-       u8                                  *data;          /* AML body or 
bytelist data */
-       u32                                 length;         /* AML length */
-       u32                                 name;           /* 4-byte name or 
zero if no name */
-};
-
-
-/* The parse node is the fundamental element of the parse tree */
-
-struct acpi_parse_obj_asl
-{
-       ACPI_PARSE_COMMON
-       union acpi_parse_object             *child;
-       union acpi_parse_object             *parent_method;
-       char                                *filename;
-       char                                *external_name;
-       char                                *namepath;
-       char                                name_seg[4];
-       u32                                 extra_value;
-       u32                                 column;
-       u32                                 line_number;
-       u32                                 logical_line_number;
-       u32                                 logical_byte_offset;
-       u32                                 end_line;
-       u32                                 end_logical_line;
-       u32                                 acpi_btype;
-       u32                                 aml_length;
-       u32                                 aml_subtree_length;
-       u32                                 final_aml_length;
-       u32                                 final_aml_offset;
-       u32                                 compile_flags;
-       u16                                 parse_opcode;
-       u8                                  aml_opcode_length;
-       u8                                  aml_pkg_len_bytes;
-       u8                                  extra;
-       char                                parse_op_name[12];
-};
-
-
-union acpi_parse_object
-{
-       struct acpi_parse_obj_common        common;
-       struct acpi_parse_obj_named         named;
-       struct acpi_parse_obj_asl           asl;
-};
-
+struct acpi_parse_obj_named {
+       ACPI_PARSE_COMMON u8 *path;
+       u8 *data;               /* AML body or bytelist data */
+       u32 length;             /* AML length */
+       u32 name;               /* 4-byte name or zero if no name */
+};
+
+/* This version is used by the i_aSL compiler only */
+
+#define ACPI_MAX_PARSEOP_NAME   20
+
+struct acpi_parse_obj_asl {
+       ACPI_PARSE_COMMON union acpi_parse_object *child;
+       union acpi_parse_object *parent_method;
+       char *filename;
+       char *external_name;
+       char *namepath;
+       char name_seg[4];
+       u32 extra_value;
+       u32 column;
+       u32 line_number;
+       u32 logical_line_number;
+       u32 logical_byte_offset;
+       u32 end_line;
+       u32 end_logical_line;
+       u32 acpi_btype;
+       u32 aml_length;
+       u32 aml_subtree_length;
+       u32 final_aml_length;
+       u32 final_aml_offset;
+       u32 compile_flags;
+       u16 parse_opcode;
+       u8 aml_opcode_length;
+       u8 aml_pkg_len_bytes;
+       u8 extra;
+       char parse_op_name[ACPI_MAX_PARSEOP_NAME];
+};
+
+union acpi_parse_object {
+       struct acpi_parse_obj_common common;
+       struct acpi_parse_obj_named named;
+       struct acpi_parse_obj_asl asl;
+};
 
 /*
  * Parse state - one state per parser invocation and each control
  * method.
  */
-struct acpi_parse_state
-{
-       u32                                 aml_size;
-       u8                                  *aml_start;     /* First AML byte */
-       u8                                  *aml;           /* Next AML byte */
-       u8                                  *aml_end;       /* (last + 1) AML 
byte */
-       u8                                  *pkg_start;     /* Current package 
begin */
-       u8                                  *pkg_end;       /* Current package 
end */
-       union acpi_parse_object             *start_op;      /* Root of parse 
tree */
-       struct acpi_namespace_node          *start_node;
-       union acpi_generic_state            *scope;         /* Current scope */
-       union acpi_parse_object             *start_scope;
-};
-
+struct acpi_parse_state {
+       u8 *aml_start;          /* First AML byte */
+       u8 *aml;                /* Next AML byte */
+       u8 *aml_end;            /* (last + 1) AML byte */
+       u8 *pkg_start;          /* Current package begin */
+       u8 *pkg_end;            /* Current package end */
+       union acpi_parse_object *start_op;      /* Root of parse tree */
+       struct acpi_namespace_node *start_node;
+       union acpi_generic_state *scope;        /* Current scope */
+       union acpi_parse_object *start_scope;
+       u32 aml_size;
+};
 
 /* Parse object flags */
 
-#define ACPI_PARSEOP_GENERIC                    0x01
-#define ACPI_PARSEOP_NAMED                      0x02
-#define ACPI_PARSEOP_DEFERRED                   0x04
-#define ACPI_PARSEOP_BYTELIST                   0x08
-#define ACPI_PARSEOP_IN_CACHE                   0x80
+#define ACPI_PARSEOP_GENERIC            0x01
+#define ACPI_PARSEOP_NAMED              0x02
+#define ACPI_PARSEOP_DEFERRED           0x04
+#define ACPI_PARSEOP_BYTELIST           0x08
+#define ACPI_PARSEOP_IN_CACHE           0x80
 
 /* Parse object disasm_flags */
 
-#define ACPI_PARSEOP_IGNORE                     0x01
-#define ACPI_PARSEOP_PARAMLIST                  0x02
-#define ACPI_PARSEOP_EMPTY_TERMLIST             0x04
-#define ACPI_PARSEOP_SPECIAL                    0x10
-
+#define ACPI_PARSEOP_IGNORE             0x01
+#define ACPI_PARSEOP_PARAMLIST          0x02
+#define ACPI_PARSEOP_EMPTY_TERMLIST     0x04
+#define ACPI_PARSEOP_SPECIAL            0x10
 
 /*****************************************************************************
  *
@@ -741,15 +711,21 @@ struct acpi_parse_state
  *
  ****************************************************************************/
 
-#define PCI_ROOT_HID_STRING         "PNP0A03"
-
-struct acpi_bit_register_info
-{
-       u8                                  parent_register;
-       u8                                  bit_position;
-       u16                                 access_bit_mask;
-};
-
+#define PCI_ROOT_HID_STRING             "PNP0A03"
+#define PCI_EXPRESS_ROOT_HID_STRING     "PNP0A08"
+
+struct acpi_bit_register_info {
+       u8 parent_register;
+       u8 bit_position;
+       u16 access_bit_mask;
+};
+
+/*
+ * Some ACPI registers have bits that must be ignored -- meaning that they
+ * must be preserved.
+ */
+#define ACPI_PM1_STATUS_PRESERVED_BITS          0x0800 /* Bit 11 */
+#define ACPI_PM1_CONTROL_PRESERVED_BITS         0x0200 /* Bit 9 (whatever) */
 
 /*
  * Register IDs
@@ -765,7 +741,6 @@ struct acpi_bit_register_info
 #define ACPI_REGISTER_PROCESSOR_BLOCK           0x08
 #define ACPI_REGISTER_SMI_COMMAND_BLOCK         0x09
 
-
 /* Masks used to access the bit_registers */
 
 #define ACPI_BITMASK_TIMER_STATUS               0x0001
@@ -774,21 +749,24 @@ struct acpi_bit_register_info
 #define ACPI_BITMASK_POWER_BUTTON_STATUS        0x0100
 #define ACPI_BITMASK_SLEEP_BUTTON_STATUS        0x0200
 #define ACPI_BITMASK_RT_CLOCK_STATUS            0x0400
+#define ACPI_BITMASK_PCIEXP_WAKE_STATUS         0x4000 /* ACPI 3.0 */
 #define ACPI_BITMASK_WAKE_STATUS                0x8000
 
-#define ACPI_BITMASK_ALL_FIXED_STATUS           (ACPI_BITMASK_TIMER_STATUS     
     | \
-                        ACPI_BITMASK_BUS_MASTER_STATUS     | \
-                        ACPI_BITMASK_GLOBAL_LOCK_STATUS    | \
-                        ACPI_BITMASK_POWER_BUTTON_STATUS   | \
-                        ACPI_BITMASK_SLEEP_BUTTON_STATUS   | \
-                        ACPI_BITMASK_RT_CLOCK_STATUS       | \
-                        ACPI_BITMASK_WAKE_STATUS)
+#define ACPI_BITMASK_ALL_FIXED_STATUS           (\
+       ACPI_BITMASK_TIMER_STATUS          | \
+       ACPI_BITMASK_BUS_MASTER_STATUS     | \
+       ACPI_BITMASK_GLOBAL_LOCK_STATUS    | \
+       ACPI_BITMASK_POWER_BUTTON_STATUS   | \
+       ACPI_BITMASK_SLEEP_BUTTON_STATUS   | \
+       ACPI_BITMASK_RT_CLOCK_STATUS       | \
+       ACPI_BITMASK_WAKE_STATUS)
 
 #define ACPI_BITMASK_TIMER_ENABLE               0x0001
 #define ACPI_BITMASK_GLOBAL_LOCK_ENABLE         0x0020
 #define ACPI_BITMASK_POWER_BUTTON_ENABLE        0x0100
 #define ACPI_BITMASK_SLEEP_BUTTON_ENABLE        0x0200
 #define ACPI_BITMASK_RT_CLOCK_ENABLE            0x0400
+#define ACPI_BITMASK_PCIEXP_WAKE_DISABLE        0x4000 /* ACPI 3.0 */
 
 #define ACPI_BITMASK_SCI_ENABLE                 0x0001
 #define ACPI_BITMASK_BUS_MASTER_RLD             0x0002
@@ -797,7 +775,6 @@ struct acpi_bit_register_info
 #define ACPI_BITMASK_SLEEP_ENABLE               0x2000
 
 #define ACPI_BITMASK_ARB_DISABLE                0x0001
-
 
 /* Raw bit position of each bit_register */
 
@@ -807,6 +784,7 @@ struct acpi_bit_register_info
 #define ACPI_BITPOSITION_POWER_BUTTON_STATUS    0x08
 #define ACPI_BITPOSITION_SLEEP_BUTTON_STATUS    0x09
 #define ACPI_BITPOSITION_RT_CLOCK_STATUS        0x0A
+#define ACPI_BITPOSITION_PCIEXP_WAKE_STATUS     0x0E   /* ACPI 3.0 */
 #define ACPI_BITPOSITION_WAKE_STATUS            0x0F
 
 #define ACPI_BITPOSITION_TIMER_ENABLE           0x00
@@ -814,6 +792,7 @@ struct acpi_bit_register_info
 #define ACPI_BITPOSITION_POWER_BUTTON_ENABLE    0x08
 #define ACPI_BITPOSITION_SLEEP_BUTTON_ENABLE    0x09
 #define ACPI_BITPOSITION_RT_CLOCK_ENABLE        0x0A
+#define ACPI_BITPOSITION_PCIEXP_WAKE_DISABLE    0x0E   /* ACPI 3.0 */
 
 #define ACPI_BITPOSITION_SCI_ENABLE             0x00
 #define ACPI_BITPOSITION_BUS_MASTER_RLD         0x01
@@ -823,56 +802,60 @@ struct acpi_bit_register_info
 
 #define ACPI_BITPOSITION_ARB_DISABLE            0x00
 
-
 /*****************************************************************************
  *
  * Resource descriptors
  *
  ****************************************************************************/
 
-
 /* resource_type values */
 
-#define ACPI_RESOURCE_TYPE_MEMORY_RANGE         0
-#define ACPI_RESOURCE_TYPE_IO_RANGE             1
-#define ACPI_RESOURCE_TYPE_BUS_NUMBER_RANGE     2
+#define ACPI_ADDRESS_TYPE_MEMORY_RANGE          0
+#define ACPI_ADDRESS_TYPE_IO_RANGE              1
+#define ACPI_ADDRESS_TYPE_BUS_NUMBER_RANGE      2
 
 /* Resource descriptor types and masks */
 
-#define ACPI_RDESC_TYPE_LARGE                   0x80
-#define ACPI_RDESC_TYPE_SMALL                   0x00
-
-#define ACPI_RDESC_TYPE_MASK                    0x80
-#define ACPI_RDESC_SMALL_MASK                   0x78 /* Only bits 6:3 contain 
the type */
-
-
-/*
- * Small resource descriptor types
- * Note: The 3 length bits (2:0) must be zero
- */
-#define ACPI_RDESC_TYPE_IRQ_FORMAT              0x20
-#define ACPI_RDESC_TYPE_DMA_FORMAT              0x28
-#define ACPI_RDESC_TYPE_START_DEPENDENT         0x30
-#define ACPI_RDESC_TYPE_END_DEPENDENT           0x38
-#define ACPI_RDESC_TYPE_IO_PORT                 0x40
-#define ACPI_RDESC_TYPE_FIXED_IO_PORT           0x48
-#define ACPI_RDESC_TYPE_SMALL_VENDOR            0x70
-#define ACPI_RDESC_TYPE_END_TAG                 0x78
-
-/*
- * Large resource descriptor types
- */
-#define ACPI_RDESC_TYPE_MEMORY_24               0x81
-#define ACPI_RDESC_TYPE_GENERAL_REGISTER        0x82
-#define ACPI_RDESC_TYPE_LARGE_VENDOR            0x84
-#define ACPI_RDESC_TYPE_MEMORY_32               0x85
-#define ACPI_RDESC_TYPE_FIXED_MEMORY_32         0x86
-#define ACPI_RDESC_TYPE_DWORD_ADDRESS_SPACE     0x87
-#define ACPI_RDESC_TYPE_WORD_ADDRESS_SPACE      0x88
-#define ACPI_RDESC_TYPE_EXTENDED_XRUPT          0x89
-#define ACPI_RDESC_TYPE_QWORD_ADDRESS_SPACE     0x8A
-#define ACPI_RDESC_TYPE_EXTENDED_ADDRESS_SPACE  0x8B
-
+#define ACPI_RESOURCE_NAME_LARGE                0x80
+#define ACPI_RESOURCE_NAME_SMALL                0x00
+
+#define ACPI_RESOURCE_NAME_SMALL_MASK           0x78   /* Bits 6:3 contain the 
type */
+#define ACPI_RESOURCE_NAME_SMALL_LENGTH_MASK    0x07   /* Bits 2:0 contain the 
length */
+#define ACPI_RESOURCE_NAME_LARGE_MASK           0x7F   /* Bits 6:0 contain the 
type */
+
+/*
+ * Small resource descriptor "names" as defined by the ACPI specification.
+ * Note: Bits 2:0 are used for the descriptor length
+ */
+#define ACPI_RESOURCE_NAME_IRQ                  0x20
+#define ACPI_RESOURCE_NAME_DMA                  0x28
+#define ACPI_RESOURCE_NAME_START_DEPENDENT      0x30
+#define ACPI_RESOURCE_NAME_END_DEPENDENT        0x38
+#define ACPI_RESOURCE_NAME_IO                   0x40
+#define ACPI_RESOURCE_NAME_FIXED_IO             0x48
+#define ACPI_RESOURCE_NAME_RESERVED_S1          0x50
+#define ACPI_RESOURCE_NAME_RESERVED_S2          0x58
+#define ACPI_RESOURCE_NAME_RESERVED_S3          0x60
+#define ACPI_RESOURCE_NAME_RESERVED_S4          0x68
+#define ACPI_RESOURCE_NAME_VENDOR_SMALL         0x70
+#define ACPI_RESOURCE_NAME_END_TAG              0x78
+
+/*
+ * Large resource descriptor "names" as defined by the ACPI specification.
+ * Note: includes the Large Descriptor bit in bit[7]
+ */
+#define ACPI_RESOURCE_NAME_MEMORY24             0x81
+#define ACPI_RESOURCE_NAME_GENERIC_REGISTER     0x82
+#define ACPI_RESOURCE_NAME_RESERVED_L1          0x83
+#define ACPI_RESOURCE_NAME_VENDOR_LARGE         0x84
+#define ACPI_RESOURCE_NAME_MEMORY32             0x85
+#define ACPI_RESOURCE_NAME_FIXED_MEMORY32       0x86
+#define ACPI_RESOURCE_NAME_ADDRESS32            0x87
+#define ACPI_RESOURCE_NAME_ADDRESS16            0x88
+#define ACPI_RESOURCE_NAME_EXTENDED_IRQ         0x89
+#define ACPI_RESOURCE_NAME_ADDRESS64            0x8A
+#define ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64   0x8B
+#define ACPI_RESOURCE_NAME_LARGE_MAX            0x8B
 
 /*****************************************************************************
  *
@@ -880,8 +863,7 @@ struct acpi_bit_register_info
  *
  ****************************************************************************/
 
-#define ACPI_ASCII_ZERO                      0x30
-
+#define ACPI_ASCII_ZERO                 0x30
 
 /*****************************************************************************
  *
@@ -889,27 +871,41 @@ struct acpi_bit_register_info
  *
  ****************************************************************************/
 
-struct acpi_db_method_info
-{
-       acpi_handle                     thread_gate;
-       char                            *name;
-       char                            **args;
-       u32                             flags;
-       u32                             num_loops;
-       char                            pathname[128];
-};
-
-struct acpi_integrity_info
-{
-       u32                         nodes;
-       u32                         objects;
-};
-
-
-#define ACPI_DB_REDIRECTABLE_OUTPUT  0x01
-#define ACPI_DB_CONSOLE_OUTPUT       0x02
-#define ACPI_DB_DUPLICATE_OUTPUT     0x03
-
+struct acpi_db_method_info {
+       acpi_handle main_thread_gate;
+       acpi_handle thread_complete_gate;
+       u32 *threads;
+       u32 num_threads;
+       u32 num_created;
+       u32 num_completed;
+
+       char *name;
+       u32 flags;
+       u32 num_loops;
+       char pathname[128];
+       char **args;
+
+       /*
+        * Arguments to be passed to method for the command
+        * Threads -
+        *   the Number of threads, ID of current thread and
+        *   Index of current thread inside all them created.
+        */
+       char init_args;
+       char *arguments[4];
+       char num_threads_str[11];
+       char id_of_thread_str[11];
+       char index_of_thread_str[11];
+};
+
+struct acpi_integrity_info {
+       u32 nodes;
+       u32 objects;
+};
+
+#define ACPI_DB_REDIRECTABLE_OUTPUT     0x01
+#define ACPI_DB_CONSOLE_OUTPUT          0x02
+#define ACPI_DB_DUPLICATE_OUTPUT        0x03
 
 /*****************************************************************************
  *
@@ -917,74 +913,53 @@ struct acpi_integrity_info
  *
  ****************************************************************************/
 
-struct acpi_debug_print_info
-{
-       u32                             component_id;
-       char                            *proc_name;
-       char                            *module_name;
-};
-
-
 /* Entry for a memory allocation (debug only) */
 
-#define ACPI_MEM_MALLOC                      0
-#define ACPI_MEM_CALLOC                      1
-#define ACPI_MAX_MODULE_NAME                 16
+#define ACPI_MEM_MALLOC                 0
+#define ACPI_MEM_CALLOC                 1
+#define ACPI_MAX_MODULE_NAME            16
 
 #define ACPI_COMMON_DEBUG_MEM_HEADER \
-       struct acpi_debug_mem_block         *previous; \
-       struct acpi_debug_mem_block         *next; \
-       u32                                 size; \
-       u32                                 component; \
-       u32                                 line; \
-       char                                module[ACPI_MAX_MODULE_NAME]; \
-       u8                                  alloc_type;
-
-struct acpi_debug_mem_header
-{
-       ACPI_COMMON_DEBUG_MEM_HEADER
-};
-
-struct acpi_debug_mem_block
-{
-       ACPI_COMMON_DEBUG_MEM_HEADER
-       u64                                 user_space;
-};
-
+       struct acpi_debug_mem_block     *previous; \
+       struct acpi_debug_mem_block     *next; \
+       u32                             size; \
+       u32                             component; \
+       u32                             line; \
+       char                            module[ACPI_MAX_MODULE_NAME]; \
+       u8                              alloc_type;
+
+struct acpi_debug_mem_header {
+ACPI_COMMON_DEBUG_MEM_HEADER};
+
+struct acpi_debug_mem_block {
+       ACPI_COMMON_DEBUG_MEM_HEADER u64 user_space;
+};
 
 #define ACPI_MEM_LIST_GLOBAL            0
 #define ACPI_MEM_LIST_NSNODE            1
-
-#define ACPI_MEM_LIST_FIRST_CACHE_LIST  2
-#define ACPI_MEM_LIST_STATE             2
-#define ACPI_MEM_LIST_PSNODE            3
-#define ACPI_MEM_LIST_PSNODE_EXT        4
-#define ACPI_MEM_LIST_OPERAND           5
-#define ACPI_MEM_LIST_WALK              6
-#define ACPI_MEM_LIST_MAX               6
-#define ACPI_NUM_MEM_LISTS              7
-
-
-struct acpi_memory_list
-{
-       void                                *list_head;
-       u16                                 link_offset;
-       u16                                 max_cache_depth;
-       u16                                 cache_depth;
-       u16                                 object_size;
+#define ACPI_MEM_LIST_MAX               1
+#define ACPI_NUM_MEM_LISTS              2
+
+struct acpi_memory_list {
+       char *list_name;
+       void *list_head;
+       u16 object_size;
+       u16 max_depth;
+       u16 current_depth;
+       u16 link_offset;
 
 #ifdef ACPI_DBG_TRACK_ALLOCATIONS
 
        /* Statistics for debug memory tracking only */
 
-       u32                                 total_allocated;
-       u32                                 total_freed;
-       u32                                 current_total_size;
-       u32                                 cache_requests;
-       u32                                 cache_hits;
-       char                                *list_name;
+       u32 total_allocated;
+       u32 total_freed;
+       u32 max_occupied;
+       u32 total_size;
+       u32 current_total_size;
+       u32 requests;
+       u32 hits;
 #endif
 };
 
-
-#endif /* __ACLOCAL_H__ */
+#endif                         /* __ACLOCAL_H__ */
diff -r 5cbfc6c24d32 -r 13cba2e78a65 xen/include/acpi/acmacros.h
--- a/xen/include/acpi/acmacros.h       Tue Mar 18 13:14:26 2008 +0000
+++ b/xen/include/acpi/acmacros.h       Tue Mar 18 14:55:36 2008 +0000
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2005, R. Byron Moore
+ * Copyright (C) 2000 - 2007, R. Byron Moore
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -44,7 +44,6 @@
 #ifndef __ACMACROS_H__
 #define __ACMACROS_H__
 
-
 /*
  * Data manipulation macros
  */
@@ -56,33 +55,19 @@
 #define ACPI_SET_BIT(target,bit)        ((target) |= (bit))
 #define ACPI_CLEAR_BIT(target,bit)      ((target) &= ~(bit))
 #define ACPI_MIN(a,b)                   (((a)<(b))?(a):(b))
-
-
-#if ACPI_MACHINE_WIDTH == 16
-
-/*
- * For 16-bit addresses, we have to assume that the upper 32 bits
- * are zero.
+#define ACPI_MAX(a,b)                   (((a)>(b))?(a):(b))
+
+/* Size calculation */
+
+#define ACPI_ARRAY_LENGTH(x)            (sizeof(x) / sizeof((x)[0]))
+
+#ifdef ACPI_NO_INTEGER64_SUPPORT
+/*
+ * acpi_integer is 32-bits, no 64-bit support on this platform
  */
 #define ACPI_LODWORD(l)                 ((u32)(l))
 #define ACPI_HIDWORD(l)                 ((u32)(0))
 
-#define ACPI_GET_ADDRESS(a)             ((a).lo)
-#define ACPI_STORE_ADDRESS(a,b)         {(a).hi=0;(a).lo=(u32)(b);}
-#define ACPI_VALID_ADDRESS(a)           ((a).hi | (a).lo)
-
-#else
-#ifdef ACPI_NO_INTEGER64_SUPPORT
-/*
- * acpi_integer is 32-bits, no 64-bit support on this platform
- */
-#define ACPI_LODWORD(l)                 ((u32)(l))
-#define ACPI_HIDWORD(l)                 ((u32)(0))
-
-#define ACPI_GET_ADDRESS(a)             (a)
-#define ACPI_STORE_ADDRESS(a,b)         ((a)=(b))
-#define ACPI_VALID_ADDRESS(a)           (a)
-
 #else
 
 /*
@@ -90,49 +75,50 @@
  */
 #define ACPI_LODWORD(l)                 ((u32)(u64)(l))
 #define ACPI_HIDWORD(l)                 ((u32)(((*(struct uint64_struct 
*)(void *)(&l))).hi))
-
-#define ACPI_GET_ADDRESS(a)             (a)
-#define ACPI_STORE_ADDRESS(a,b)         ((a)=(acpi_physical_address)(b))
-#define ACPI_VALID_ADDRESS(a)           (a)
-#endif
 #endif
 
 /*
  * printf() format helpers
  */
 
-/* Split 64-bit integer into two 32-bit values. Use with %8.8X%8.8X */
+/* Split 64-bit integer into two 32-bit values. Use with %8.8_x%8.8_x */
 
 #define ACPI_FORMAT_UINT64(i)           ACPI_HIDWORD(i),ACPI_LODWORD(i)
 
 /*
- * Extract a byte of data using a pointer.  Any more than a byte and we
- * get into potential aligment issues -- see the STORE macros below
- */
-#define ACPI_GET8(addr)                 (*(u8*)(addr))
-
-/* Pointer arithmetic */
-
-#define ACPI_PTR_ADD(t,a,b)             (t *) (void *)((char *)(a) + 
(acpi_native_uint)(b))
-#define ACPI_PTR_DIFF(a,b)              (acpi_native_uint) ((char *)(a) - 
(char *)(b))
+ * Extract data using a pointer.  Any more than a byte and we
+ * get into potential aligment issues -- see the STORE macros below.
+ * Use with care.
+ */
+#define ACPI_GET8(ptr)                  *ACPI_CAST_PTR (u8, ptr)
+#define ACPI_GET16(ptr)                 *ACPI_CAST_PTR (u16, ptr)
+#define ACPI_GET32(ptr)                 *ACPI_CAST_PTR (u32, ptr)
+#define ACPI_GET64(ptr)                 *ACPI_CAST_PTR (u64, ptr)
+#define ACPI_SET8(ptr)                  *ACPI_CAST_PTR (u8, ptr)
+#define ACPI_SET16(ptr)                 *ACPI_CAST_PTR (u16, ptr)
+#define ACPI_SET32(ptr)                 *ACPI_CAST_PTR (u32, ptr)
+#define ACPI_SET64(ptr)                 *ACPI_CAST_PTR (u64, ptr)
+
+/*
+ * Pointer manipulation
+ */
+#define ACPI_CAST_PTR(t, p)             ((t *) (acpi_uintptr_t) (p))
+#define ACPI_CAST_INDIRECT_PTR(t, p)    ((t **) (acpi_uintptr_t) (p))
+#define ACPI_ADD_PTR(t,a,b)             ACPI_CAST_PTR (t, (ACPI_CAST_PTR 
(u8,(a)) + (acpi_native_uint)(b)))
+#define ACPI_PTR_DIFF(a,b)              (acpi_native_uint) (ACPI_CAST_PTR 
(u8,(a)) - ACPI_CAST_PTR (u8,(b)))
 
 /* Pointer/Integer type conversions */
 
-#define ACPI_TO_POINTER(i)              ACPI_PTR_ADD (void, (void *) 
NULL,(acpi_native_uint)i)
+#define ACPI_TO_POINTER(i)              ACPI_ADD_PTR (void,(void *) 
NULL,(acpi_native_uint) i)
 #define ACPI_TO_INTEGER(p)              ACPI_PTR_DIFF (p,(void *) NULL)
 #define ACPI_OFFSET(d,f)                (acpi_size) ACPI_PTR_DIFF (&(((d 
*)0)->f),(void *) NULL)
-#define ACPI_FADT_OFFSET(f)             ACPI_OFFSET (FADT_DESCRIPTOR, f)
-
-#define ACPI_CAST_PTR(t, p)             ((t *)(void *)(p))
-#define ACPI_CAST_INDIRECT_PTR(t, p)    ((t **)(void *)(p))
-
-#if ACPI_MACHINE_WIDTH == 16
-#define ACPI_STORE_POINTER(d,s)         ACPI_MOVE_32_TO_32(d,s)
-#define ACPI_PHYSADDR_TO_PTR(i)         (void *)(i)
-#define ACPI_PTR_TO_PHYSADDR(i)         (u32) (char *)(i)
-#else
 #define ACPI_PHYSADDR_TO_PTR(i)         ACPI_TO_POINTER(i)
 #define ACPI_PTR_TO_PHYSADDR(i)         ACPI_TO_INTEGER(i)
+
+#ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED
+#define ACPI_COMPARE_NAME(a,b)          (*ACPI_CAST_PTR (u32,(a)) == 
*ACPI_CAST_PTR (u32,(b)))
+#else
+#define ACPI_COMPARE_NAME(a,b)          (!ACPI_STRNCMP (ACPI_CAST_PTR 
(char,(a)), ACPI_CAST_PTR (char,(b)), ACPI_NAME_SIZE))
 #endif
 
 /*
@@ -168,7 +154,7 @@
 
 /* 32-bit source, 16/32/64 destination */
 
-#define ACPI_MOVE_32_TO_16(d,s)         ACPI_MOVE_16_TO_16(d,s)    /* Truncate 
to 16 */
+#define ACPI_MOVE_32_TO_16(d,s)         ACPI_MOVE_16_TO_16(d,s)        /* 
Truncate to 16 */
 
 #define ACPI_MOVE_32_TO_32(d,s)         {((  u8 *)(void *)(d))[0] = ((u8 
*)(void *)(s))[3];\
                                                                          ((  
u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[2];\
@@ -183,9 +169,9 @@
 
 /* 64-bit source, 16/32/64 destination */
 
-#define ACPI_MOVE_64_TO_16(d,s)         ACPI_MOVE_16_TO_16(d,s)    /* Truncate 
to 16 */
-
-#define ACPI_MOVE_64_TO_32(d,s)         ACPI_MOVE_32_TO_32(d,s)    /* Truncate 
to 32 */
+#define ACPI_MOVE_64_TO_16(d,s)         ACPI_MOVE_16_TO_16(d,s)        /* 
Truncate to 16 */
+
+#define ACPI_MOVE_64_TO_32(d,s)         ACPI_MOVE_32_TO_32(d,s)        /* 
Truncate to 32 */
 
 #define ACPI_MOVE_64_TO_64(d,s)         {((  u8 *)(void *)(d))[0] = ((u8 
*)(void *)(s))[7];\
                                                                                
 ((  u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[6];\
@@ -204,32 +190,10 @@
 
 #define ACPI_BUFFER_INDEX(buf_len,buf_offset,byte_gran) (buf_offset)
 
-#ifdef ACPI_MISALIGNED_TRANSFERS
+#ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED
 
 /* The hardware supports unaligned transfers, just do the little-endian move */
 
-#if ACPI_MACHINE_WIDTH == 16
-
-/* No 64-bit integers */
-/* 16-bit source, 16/32/64 destination */
-
-#define ACPI_MOVE_16_TO_16(d,s)         *(u16 *)(void *)(d) = *(u16 *)(void 
*)(s)
-#define ACPI_MOVE_16_TO_32(d,s)         *(u32 *)(void *)(d) = *(u16 *)(void 
*)(s)
-#define ACPI_MOVE_16_TO_64(d,s)         ACPI_MOVE_16_TO_32(d,s)
-
-/* 32-bit source, 16/32/64 destination */
-
-#define ACPI_MOVE_32_TO_16(d,s)         ACPI_MOVE_16_TO_16(d,s)    /* Truncate 
to 16 */
-#define ACPI_MOVE_32_TO_32(d,s)         *(u32 *)(void *)(d) = *(u32 *)(void 
*)(s)
-#define ACPI_MOVE_32_TO_64(d,s)         ACPI_MOVE_32_TO_32(d,s)
-
-/* 64-bit source, 16/32/64 destination */
-
-#define ACPI_MOVE_64_TO_16(d,s)         ACPI_MOVE_16_TO_16(d,s)    /* Truncate 
to 16 */
-#define ACPI_MOVE_64_TO_32(d,s)         ACPI_MOVE_32_TO_32(d,s)    /* Truncate 
to 32 */
-#define ACPI_MOVE_64_TO_64(d,s)         ACPI_MOVE_32_TO_32(d,s)
-
-#else
 /* 16-bit source, 16/32/64 destination */
 
 #define ACPI_MOVE_16_TO_16(d,s)         *(u16 *)(void *)(d) = *(u16 *)(void 
*)(s)
@@ -238,16 +202,15 @@
 
 /* 32-bit source, 16/32/64 destination */
 
-#define ACPI_MOVE_32_TO_16(d,s)         ACPI_MOVE_16_TO_16(d,s)    /* Truncate 
to 16 */
+#define ACPI_MOVE_32_TO_16(d,s)         ACPI_MOVE_16_TO_16(d,s)        /* 
Truncate to 16 */
 #define ACPI_MOVE_32_TO_32(d,s)         *(u32 *)(void *)(d) = *(u32 *)(void 
*)(s)
 #define ACPI_MOVE_32_TO_64(d,s)         *(u64 *)(void *)(d) = *(u32 *)(void 
*)(s)
 
 /* 64-bit source, 16/32/64 destination */
 
-#define ACPI_MOVE_64_TO_16(d,s)         ACPI_MOVE_16_TO_16(d,s)    /* Truncate 
to 16 */
-#define ACPI_MOVE_64_TO_32(d,s)         ACPI_MOVE_32_TO_32(d,s)    /* Truncate 
to 32 */
+#define ACPI_MOVE_64_TO_16(d,s)         ACPI_MOVE_16_TO_16(d,s)        /* 
Truncate to 16 */
+#define ACPI_MOVE_64_TO_32(d,s)         ACPI_MOVE_32_TO_32(d,s)        /* 
Truncate to 32 */
 #define ACPI_MOVE_64_TO_64(d,s)         *(u64 *)(void *)(d) = *(u64 *)(void 
*)(s)
-#endif
 
 #else
 /*
@@ -266,7 +229,7 @@
 
 /* 32-bit source, 16/32/64 destination */
 
-#define ACPI_MOVE_32_TO_16(d,s)         ACPI_MOVE_16_TO_16(d,s)    /* Truncate 
to 16 */
+#define ACPI_MOVE_32_TO_16(d,s)         ACPI_MOVE_16_TO_16(d,s)        /* 
Truncate to 16 */
 
 #define ACPI_MOVE_32_TO_32(d,s)         {((  u8 *)(void *)(d))[0] = ((u8 
*)(void *)(s))[0];\
                                                                                
 ((  u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[1];\
@@ -277,8 +240,8 @@
 
 /* 64-bit source, 16/32/64 destination */
 
-#define ACPI_MOVE_64_TO_16(d,s)         ACPI_MOVE_16_TO_16(d,s)    /* Truncate 
to 16 */
-#define ACPI_MOVE_64_TO_32(d,s)         ACPI_MOVE_32_TO_32(d,s)    /* Truncate 
to 32 */
+#define ACPI_MOVE_64_TO_16(d,s)         ACPI_MOVE_16_TO_16(d,s)        /* 
Truncate to 16 */
+#define ACPI_MOVE_64_TO_32(d,s)         ACPI_MOVE_32_TO_32(d,s)        /* 
Truncate to 32 */
 #define ACPI_MOVE_64_TO_64(d,s)         {((  u8 *)(void *)(d))[0] = ((u8 
*)(void *)(s))[0];\
                                                                                
 ((  u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[1];\
                                                                                
 ((  u8 *)(void *)(d))[2] = ((u8 *)(void *)(s))[2];\
@@ -292,10 +255,7 @@
 
 /* Macros based on machine integer width */
 
-#if ACPI_MACHINE_WIDTH == 16
-#define ACPI_MOVE_SIZE_TO_16(d,s)       ACPI_MOVE_16_TO_16(d,s)
-
-#elif ACPI_MACHINE_WIDTH == 32
+#if ACPI_MACHINE_WIDTH == 32
 #define ACPI_MOVE_SIZE_TO_16(d,s)       ACPI_MOVE_32_TO_16(d,s)
 
 #elif ACPI_MACHINE_WIDTH == 64
@@ -304,7 +264,6 @@
 #else
 #error unknown ACPI_MACHINE_WIDTH
 #endif
-
 
 /*
  * Fast power-of-two math macros for non-optimized compilers
@@ -329,30 +288,40 @@
 #define ACPI_MUL_16(a)                  _ACPI_MUL(a,4)
 #define ACPI_MOD_16(a)                  _ACPI_MOD(a,16)
 
+#define ACPI_DIV_32(a)                  _ACPI_DIV(a,5)
+#define ACPI_MUL_32(a)                  _ACPI_MUL(a,5)
+#define ACPI_MOD_32(a)                  _ACPI_MOD(a,32)
 
 /*
  * Rounding macros (Power of two boundaries only)
  */
-#define ACPI_ROUND_DOWN(value,boundary)      (((acpi_native_uint)(value)) & 
(~(((acpi_native_uint) boundary)-1)))
-#define ACPI_ROUND_UP(value,boundary)        ((((acpi_native_uint)(value)) + 
(((acpi_native_uint) boundary)-1)) & (~(((acpi_native_uint) boundary)-1)))
-
-#define ACPI_ROUND_DOWN_TO_32_BITS(a)        ACPI_ROUND_DOWN(a,4)
-#define ACPI_ROUND_DOWN_TO_64_BITS(a)        ACPI_ROUND_DOWN(a,8)
-#define ACPI_ROUND_DOWN_TO_NATIVE_WORD(a)    
ACPI_ROUND_DOWN(a,ALIGNED_ADDRESS_BOUNDARY)
-
-#define ACPI_ROUND_UP_to_32_bITS(a)          ACPI_ROUND_UP(a,4)
-#define ACPI_ROUND_UP_to_64_bITS(a)          ACPI_ROUND_UP(a,8)
-#define ACPI_ROUND_UP_TO_NATIVE_WORD(a)      
ACPI_ROUND_UP(a,ALIGNED_ADDRESS_BOUNDARY)
-
-
-#define ACPI_ROUND_BITS_UP_TO_BYTES(a)       ACPI_DIV_8((a) + 7)
-#define ACPI_ROUND_BITS_DOWN_TO_BYTES(a)     ACPI_DIV_8((a))
-
-#define ACPI_ROUND_UP_TO_1K(a)               (((a) + 1023) >> 10)
+#define ACPI_ROUND_DOWN(value,boundary)     (((acpi_native_uint)(value)) & \
+                                                                               
                (~(((acpi_native_uint) boundary)-1)))
+
+#define ACPI_ROUND_UP(value,boundary)       ((((acpi_native_uint)(value)) + \
+                                                                               
                (((acpi_native_uint) boundary)-1)) & \
+                                                                               
                (~(((acpi_native_uint) boundary)-1)))
+
+/* Note: sizeof(acpi_native_uint) evaluates to either 2, 4, or 8 */
+
+#define ACPI_ROUND_DOWN_TO_32BIT(a)         ACPI_ROUND_DOWN(a,4)
+#define ACPI_ROUND_DOWN_TO_64BIT(a)         ACPI_ROUND_DOWN(a,8)
+#define ACPI_ROUND_DOWN_TO_NATIVE_WORD(a)   
ACPI_ROUND_DOWN(a,sizeof(acpi_native_uint))
+
+#define ACPI_ROUND_UP_TO_32BIT(a)           ACPI_ROUND_UP(a,4)
+#define ACPI_ROUND_UP_TO_64BIT(a)           ACPI_ROUND_UP(a,8)
+#define ACPI_ROUND_UP_TO_NATIVE_WORD(a)     
ACPI_ROUND_UP(a,sizeof(acpi_native_uint))
+
+#define ACPI_ROUND_BITS_UP_TO_BYTES(a)      ACPI_DIV_8((a) + 7)
+#define ACPI_ROUND_BITS_DOWN_TO_BYTES(a)    ACPI_DIV_8((a))
+
+#define ACPI_ROUND_UP_TO_1K(a)              (((a) + 1023) >> 10)
 
 /* Generic (non-power-of-two) rounding */
 
-#define ACPI_ROUND_UP_TO(value,boundary)     (((value) + ((boundary)-1)) / 
(boundary))
+#define ACPI_ROUND_UP_TO(value,boundary)    (((value) + ((boundary)-1)) / 
(boundary))
+
+#define ACPI_IS_MISALIGNED(value)           (((acpi_native_uint)value) & 
(sizeof(acpi_native_uint)-1))
 
 /*
  * Bitmask creation
@@ -360,16 +329,25 @@
  * MASK_BITS_ABOVE creates a mask starting AT the position and above
  * MASK_BITS_BELOW creates a mask starting one bit BELOW the position
  */
-#define ACPI_MASK_BITS_ABOVE(position)       (~((ACPI_INTEGER_MAX) << ((u32) 
(position))))
-#define ACPI_MASK_BITS_BELOW(position)       ((ACPI_INTEGER_MAX) << ((u32) 
(position)))
-
-#define ACPI_IS_OCTAL_DIGIT(d)               (((char)(d) >= '0') && ((char)(d) 
<= '7'))
-
+#define ACPI_MASK_BITS_ABOVE(position)      (~((ACPI_INTEGER_MAX) << ((u32) 
(position))))
+#define ACPI_MASK_BITS_BELOW(position)      ((ACPI_INTEGER_MAX) << ((u32) 
(position)))
+
+#define ACPI_IS_OCTAL_DIGIT(d)              (((char)(d) >= '0') && ((char)(d) 
<= '7'))
 
 /* Bitfields within ACPI registers */
 
 #define ACPI_REGISTER_PREPARE_BITS(val, pos, mask)      ((val << pos) & mask)
 #define ACPI_REGISTER_INSERT_VALUE(reg, pos, mask, val)  reg = (reg & 
(~(mask))) | ACPI_REGISTER_PREPARE_BITS(val, pos, mask)
+
+#define ACPI_INSERT_BITS(target, mask, source)          target = ((target & 
(~(mask))) | (source & mask))
+
+/* Generate a UUID */
+
+#define ACPI_INIT_UUID(a,b,c,d0,d1,d2,d3,d4,d5,d6,d7) \
+       (a) & 0xFF, ((a) >> 8) & 0xFF, ((a) >> 16) & 0xFF, ((a) >> 24) & 0xFF, \
+       (b) & 0xFF, ((b) >> 8) & 0xFF, \
+       (c) & 0xFF, ((c) >> 8) & 0xFF, \
+       (d0), (d1), (d2), (d3), (d4), (d5), (d6), (d7)
 
 /*
  * An struct acpi_namespace_node * can appear in some contexts,
@@ -378,9 +356,8 @@
  *
  * The "Descriptor" field is the first field in both structures.
  */
-#define ACPI_GET_DESCRIPTOR_TYPE(d)     (((union acpi_descriptor *)(void 
*)(d))->descriptor_id)
-#define ACPI_SET_DESCRIPTOR_TYPE(d,t)   (((union acpi_descriptor *)(void 
*)(d))->descriptor_id = t)
-
+#define ACPI_GET_DESCRIPTOR_TYPE(d)     (((union acpi_descriptor *)(void 
*)(d))->common.descriptor_type)
+#define ACPI_SET_DESCRIPTOR_TYPE(d,t)   (((union acpi_descriptor *)(void 
*)(d))->common.descriptor_type = t)
 
 /* Macro to test the object type */
 
@@ -430,86 +407,107 @@
 #define GET_CURRENT_ARG_TYPE(list)      (list & ((u32) 0x1F))
 #define INCREMENT_ARG_LIST(list)        (list >>= ((u32) ARG_TYPE_WIDTH))
 
-
-/*
- * Reporting macros that are never compiled out
- */
-#define ACPI_PARAM_LIST(pl)                 pl
-
-/*
- * Error reporting.  These versions add callers module and line#.  Since
- * _THIS_MODULE gets compiled out when ACPI_DEBUG_OUTPUT isn't defined, only
- * use it in debug mode.
+#if defined (ACPI_DEBUG_OUTPUT) || !defined (ACPI_NO_ERROR_MESSAGES)
+/*
+ * Module name is include in both debug and non-debug versions primarily for
+ * error messages. The __FILE__ macro is not very useful for this, because it
+ * often includes the entire pathname to the module
+ */
+#define ACPI_MODULE_NAME(name)          static char ACPI_UNUSED_VAR 
*_acpi_module_name = name;
+#else
+#define ACPI_MODULE_NAME(name)
+#endif
+
+/*
+ * Ascii error messages can be configured out
+ */
+#ifndef ACPI_NO_ERROR_MESSAGES
+#define AE_INFO                         _acpi_module_name, __LINE__
+
+/*
+ * Error reporting. Callers module and line number are inserted by AE_INFO,
+ * the plist contains a set of parens to allow variable-length lists.
+ * These macros are used for both the debug and non-debug versions of the code.
+ */
+#define ACPI_INFO(plist)                acpi_ut_info plist
+#define ACPI_WARNING(plist)             acpi_ut_warning plist
+#define ACPI_EXCEPTION(plist)           acpi_ut_exception plist
+#define ACPI_ERROR(plist)               acpi_ut_error plist
+#define ACPI_ERROR_NAMESPACE(s,e)       acpi_ns_report_error (AE_INFO, s, e);
+#define ACPI_ERROR_METHOD(s,n,p,e)      acpi_ns_report_method_error (AE_INFO, 
s, n, p, e);
+
+#else
+
+/* No error messages */
+
+#define ACPI_INFO(plist)
+#define ACPI_WARNING(plist)
+#define ACPI_EXCEPTION(plist)
+#define ACPI_ERROR(plist)
+#define ACPI_ERROR_NAMESPACE(s,e)
+#define ACPI_ERROR_METHOD(s,n,p,e)
+#endif
+
+/*
+ * Debug macros that are conditionally compiled
  */
 #ifdef ACPI_DEBUG_OUTPUT
 
-#define ACPI_REPORT_INFO(fp)                
{acpi_ut_report_info(_THIS_MODULE,__LINE__,_COMPONENT); \
-                                                                               
                acpi_os_printf ACPI_PARAM_LIST(fp);}
-#define ACPI_REPORT_ERROR(fp)               
{acpi_ut_report_error(_THIS_MODULE,__LINE__,_COMPONENT); \
-                                                                               
                acpi_os_printf ACPI_PARAM_LIST(fp);}
-#define ACPI_REPORT_WARNING(fp)             
{acpi_ut_report_warning(_THIS_MODULE,__LINE__,_COMPONENT); \
-                                                                               
                acpi_os_printf ACPI_PARAM_LIST(fp);}
-#define ACPI_REPORT_NSERROR(s,e)            
acpi_ns_report_error(_THIS_MODULE,__LINE__,_COMPONENT, s, e);
-
-#define ACPI_REPORT_METHOD_ERROR(s,n,p,e)   
acpi_ns_report_method_error(_THIS_MODULE,__LINE__,_COMPONENT, s, n, p, e);
-
-#else
-
-#define ACPI_REPORT_INFO(fp)                
{acpi_ut_report_info("ACPI",__LINE__,_COMPONENT); \
-                                                                               
                acpi_os_printf ACPI_PARAM_LIST(fp);}
-#define ACPI_REPORT_ERROR(fp)               
{acpi_ut_report_error("ACPI",__LINE__,_COMPONENT); \
-                                                                               
                acpi_os_printf ACPI_PARAM_LIST(fp);}
-#define ACPI_REPORT_WARNING(fp)             
{acpi_ut_report_warning("ACPI",__LINE__,_COMPONENT); \
-                                                                               
                acpi_os_printf ACPI_PARAM_LIST(fp);}
-#define ACPI_REPORT_NSERROR(s,e)            
acpi_ns_report_error("ACPI",__LINE__,_COMPONENT, s, e);
-
-#define ACPI_REPORT_METHOD_ERROR(s,n,p,e)   
acpi_ns_report_method_error("ACPI",__LINE__,_COMPONENT, s, n, p, e);
-
-#endif
-
-/* Error reporting.  These versions pass thru the module and line# */
-
-#define _ACPI_REPORT_INFO(a,b,c,fp)         {acpi_ut_report_info(a,b,c); \
-                                                                               
                acpi_os_printf ACPI_PARAM_LIST(fp);}
-#define _ACPI_REPORT_ERROR(a,b,c,fp)        {acpi_ut_report_error(a,b,c); \
-                                                                               
                acpi_os_printf ACPI_PARAM_LIST(fp);}
-#define _ACPI_REPORT_WARNING(a,b,c,fp)      {acpi_ut_report_warning(a,b,c); \
-                                                                               
                acpi_os_printf ACPI_PARAM_LIST(fp);}
-
-/*
- * Debug macros that are conditionally compiled
- */
-#ifdef ACPI_DEBUG_OUTPUT
-
-#define ACPI_MODULE_NAME(name)               static char ACPI_UNUSED_VAR 
*_THIS_MODULE = name;
-
-/*
- * Function entry tracing.
- * The first parameter should be the procedure name as a quoted string.  This 
is declared
- * as a local string ("_proc_name) so that it can be also used by the function 
exit macros below.
- */
-#define ACPI_FUNCTION_NAME(a)               struct acpi_debug_print_info 
_debug_info; \
-                                                                               
                _debug_info.component_id = _COMPONENT; \
-                                                                               
                _debug_info.proc_name  = a; \
-                                                                               
                _debug_info.module_name = _THIS_MODULE;
-
-#define ACPI_FUNCTION_TRACE(a)              ACPI_FUNCTION_NAME(a) \
-                                                                               
                acpi_ut_trace(__LINE__,&_debug_info)
-#define ACPI_FUNCTION_TRACE_PTR(a,b)        ACPI_FUNCTION_NAME(a) \
-                                                                               
                acpi_ut_trace_ptr(__LINE__,&_debug_info,(void *)b)
-#define ACPI_FUNCTION_TRACE_U32(a,b)        ACPI_FUNCTION_NAME(a) \
-                                                                               
                acpi_ut_trace_u32(__LINE__,&_debug_info,(u32)b)
-#define ACPI_FUNCTION_TRACE_STR(a,b)        ACPI_FUNCTION_NAME(a) \
-                                                                               
                acpi_ut_trace_str(__LINE__,&_debug_info,(char *)b)
-
-#define ACPI_FUNCTION_ENTRY()               acpi_ut_track_stack_ptr()
+/*
+ * Common parameters used for debug output functions:
+ * line number, function name, module(file) name, component ID
+ */
+#define ACPI_DEBUG_PARAMETERS           __LINE__, ACPI_GET_FUNCTION_NAME, 
_acpi_module_name, _COMPONENT
+
+/*
+ * Function entry tracing
+ */
+
+/*
+ * If ACPI_GET_FUNCTION_NAME was not defined in the compiler-dependent header,
+ * define it now. This is the case where there the compiler does not support
+ * a __FUNCTION__ macro or equivalent. We save the function name on the
+ * local stack.
+ */
+#ifndef ACPI_GET_FUNCTION_NAME
+#define ACPI_GET_FUNCTION_NAME          _acpi_function_name
+/*
+ * The Name parameter should be the procedure name as a quoted string.
+ * This is declared as a local string ("MyFunctionName") so that it can
+ * be also used by the function exit macros below.
+ * Note: (const char) is used to be compatible with the debug interfaces
+ * and macros such as __FUNCTION__.
+ */
+#define ACPI_FUNCTION_NAME(name)        const char *_acpi_function_name = 
#name;
+
+#else
+/* Compiler supports __FUNCTION__ (or equivalent) -- Ignore this macro */
+
+#define ACPI_FUNCTION_NAME(name)
+#endif
+
+#ifdef CONFIG_ACPI_DEBUG_FUNC_TRACE
+
+#define ACPI_FUNCTION_TRACE(a)          ACPI_FUNCTION_NAME(a) \
+                         acpi_ut_trace(ACPI_DEBUG_PARAMETERS)
+#define ACPI_FUNCTION_TRACE_PTR(a,b)    ACPI_FUNCTION_NAME(a) \
+                                          
acpi_ut_trace_ptr(ACPI_DEBUG_PARAMETERS,(void *)b)
+#define ACPI_FUNCTION_TRACE_U32(a,b)    ACPI_FUNCTION_NAME(a) \
+                                                        
acpi_ut_trace_u32(ACPI_DEBUG_PARAMETERS,(u32)b)
+#define ACPI_FUNCTION_TRACE_STR(a,b)    ACPI_FUNCTION_NAME(a) \
+                                                                         
acpi_ut_trace_str(ACPI_DEBUG_PARAMETERS,(char *)b)
+
+#define ACPI_FUNCTION_ENTRY()           acpi_ut_track_stack_ptr()
 
 /*
  * Function exit tracing.
  * WARNING: These macros include a return statement.  This is usually 
considered
  * bad form, but having a separate exit macro is very ugly and difficult to 
maintain.
  * One of the FUNCTION_TRACE macros above must be used in conjunction with 
these macros
- * so that "_proc_name" is defined.
+ * so that "_AcpiFunctionName" is defined.
+ *
+ * Note: the DO_WHILE0 macro is used to prevent some compilers from complaining
+ * about these constructs.
  */
 #ifdef ACPI_USE_DO_WHILE_0
 #define ACPI_DO_WHILE0(a)               do a while(0)
@@ -517,74 +515,58 @@
 #define ACPI_DO_WHILE0(a)               a
 #endif
 
-#define return_VOID                     ACPI_DO_WHILE0 
({acpi_ut_exit(__LINE__,&_debug_info);return;})
-#define return_ACPI_STATUS(s)           ACPI_DO_WHILE0 
({acpi_ut_status_exit(__LINE__,&_debug_info,(s));return((s));})
-#define return_VALUE(s)                 ACPI_DO_WHILE0 
({acpi_ut_value_exit(__LINE__,&_debug_info,(acpi_integer)(s));return((s));})
-#define return_PTR(s)                   ACPI_DO_WHILE0 
({acpi_ut_ptr_exit(__LINE__,&_debug_info,(u8 *)(s));return((s));})
-
-/* Conditional execution */
-
-#define ACPI_DEBUG_EXEC(a)              a
-#define ACPI_NORMAL_EXEC(a)
-
-#define ACPI_DEBUG_DEFINE(a)            a;
-#define ACPI_DEBUG_ONLY_MEMBERS(a)      a;
-#define _VERBOSE_STRUCTURES
-
-
-/* Stack and buffer dumping */
-
-#define ACPI_DUMP_STACK_ENTRY(a)        acpi_ex_dump_operand((a),0)
-#define ACPI_DUMP_OPERANDS(a,b,c,d,e)   
acpi_ex_dump_operands(a,b,c,d,e,_THIS_MODULE,__LINE__)
-
-
-#define ACPI_DUMP_ENTRY(a,b)            acpi_ns_dump_entry (a,b)
-
-#ifdef ACPI_FUTURE_USAGE
-#define ACPI_DUMP_TABLES(a,b)           acpi_ns_dump_tables(a,b)
-#endif
-
-#define ACPI_DUMP_PATHNAME(a,b,c,d)     acpi_ns_dump_pathname(a,b,c,d)
-#define ACPI_DUMP_RESOURCE_LIST(a)      acpi_rs_dump_resource_list(a)
-#define ACPI_DUMP_BUFFER(a,b)           acpi_ut_dump_buffer((u8 
*)a,b,DB_BYTE_DISPLAY,_COMPONENT)
-#define ACPI_BREAK_MSG(a)               acpi_os_signal 
(ACPI_SIGNAL_BREAKPOINT,(a))
-
-
-/*
- * Generate INT3 on ACPI_ERROR (Debug only!)
- */
-#define ACPI_ERROR_BREAK
-#ifdef  ACPI_ERROR_BREAK
-#define ACPI_BREAK_ON_ERROR(lvl)        if ((lvl)&ACPI_ERROR) \
-                                                                               
        acpi_os_signal(ACPI_SIGNAL_BREAKPOINT,"Fatal error encountered\n")
-#else
-#define ACPI_BREAK_ON_ERROR(lvl)
-#endif
-
-/*
- * Master debug print macros
- * Print iff:
- *    1) Debug print for the current component is enabled
- *    2) Debug error level or trace level for the print statement is enabled
- */
-#define ACPI_DEBUG_PRINT(pl)            acpi_ut_debug_print ACPI_PARAM_LIST(pl)
-#define ACPI_DEBUG_PRINT_RAW(pl)        acpi_ut_debug_print_raw 
ACPI_PARAM_LIST(pl)
-
-
-#else
-/*
- * This is the non-debug case -- make everything go away,
- * leaving no executable debug code!
- */
-#define ACPI_MODULE_NAME(name)
-#define _THIS_MODULE ""
-
-#define ACPI_DEBUG_EXEC(a)
-#define ACPI_NORMAL_EXEC(a)             a;
-
-#define ACPI_DEBUG_DEFINE(a)
-#define ACPI_DEBUG_ONLY_MEMBERS(a)
-#define ACPI_FUNCTION_NAME(a)
+#define return_VOID                     ACPI_DO_WHILE0 ({ \
+                                                                               
        acpi_ut_exit (ACPI_DEBUG_PARAMETERS); \
+                                                                               
        return;})
+/*
+ * There are two versions of most of the return macros. The default version is
+ * safer, since it avoids side-effects by guaranteeing that the argument will
+ * not be evaluated twice.
+ *
+ * A less-safe version of the macros is provided for optional use if the
+ * compiler uses excessive CPU stack (for example, this may happen in the
+ * debug case if code optimzation is disabled.)
+ */
+#ifndef ACPI_SIMPLE_RETURN_MACROS
+
+#define return_ACPI_STATUS(s)           ACPI_DO_WHILE0 ({ \
+                                                                               
        register acpi_status _s = (s); \
+                                                                               
        acpi_ut_status_exit (ACPI_DEBUG_PARAMETERS, _s); \
+                                                                               
        return (_s); })
+#define return_PTR(s)                   ACPI_DO_WHILE0 ({ \
+                                                                               
        register void *_s = (void *) (s); \
+                                                                               
        acpi_ut_ptr_exit (ACPI_DEBUG_PARAMETERS, (u8 *) _s); \
+                                                                               
        return (_s); })
+#define return_VALUE(s)                 ACPI_DO_WHILE0 ({ \
+                                                                               
        register acpi_integer _s = (s); \
+                                                                               
        acpi_ut_value_exit (ACPI_DEBUG_PARAMETERS, _s); \
+                                                                               
        return (_s); })
+#define return_UINT8(s)                 ACPI_DO_WHILE0 ({ \
+                                                                               
        register u8 _s = (u8) (s); \
+                                                                               
        acpi_ut_value_exit (ACPI_DEBUG_PARAMETERS, (acpi_integer) _s); \
+                                                                               
        return (_s); })
+#define return_UINT32(s)                ACPI_DO_WHILE0 ({ \
+                                                                               
        register u32 _s = (u32) (s); \
+                                                                               
        acpi_ut_value_exit (ACPI_DEBUG_PARAMETERS, (acpi_integer) _s); \
+                                                                               
        return (_s); })
+#else                          /* Use original less-safe macros */
+
+#define return_ACPI_STATUS(s)           ACPI_DO_WHILE0 ({ \
+                                                                               
        acpi_ut_status_exit (ACPI_DEBUG_PARAMETERS, (s)); \
+                                                                               
        return((s)); })
+#define return_PTR(s)                   ACPI_DO_WHILE0 ({ \
+                                                                               
        acpi_ut_ptr_exit (ACPI_DEBUG_PARAMETERS, (u8 *) (s)); \
+                                                                               
        return((s)); })
+#define return_VALUE(s)                 ACPI_DO_WHILE0 ({ \
+                                                                               
        acpi_ut_value_exit (ACPI_DEBUG_PARAMETERS, (acpi_integer) (s)); \
+                                                                               
        return((s)); })
+#define return_UINT8(s)                 return_VALUE(s)
+#define return_UINT32(s)                return_VALUE(s)
+
+#endif                         /* ACPI_SIMPLE_RETURN_MACROS */
+
+#else /* !CONFIG_ACPI_DEBUG_FUNC_TRACE */
+
 #define ACPI_FUNCTION_TRACE(a)
 #define ACPI_FUNCTION_TRACE_PTR(a,b)
 #define ACPI_FUNCTION_TRACE_U32(a,b)
@@ -592,25 +574,80 @@
 #define ACPI_FUNCTION_EXIT
 #define ACPI_FUNCTION_STATUS_EXIT(s)
 #define ACPI_FUNCTION_VALUE_EXIT(s)
+#define ACPI_FUNCTION_TRACE(a)
 #define ACPI_FUNCTION_ENTRY()
-#define ACPI_DUMP_STACK_ENTRY(a)
-#define ACPI_DUMP_OPERANDS(a,b,c,d,e)
-#define ACPI_DUMP_ENTRY(a,b)
-
-#ifdef ACPI_FUTURE_USAGE
-#define ACPI_DUMP_TABLES(a,b)
-#endif
-
-#define ACPI_DUMP_PATHNAME(a,b,c,d)
-#define ACPI_DUMP_RESOURCE_LIST(a)
-#define ACPI_DUMP_BUFFER(a,b)
-#define ACPI_DEBUG_PRINT(pl)
-#define ACPI_DEBUG_PRINT_RAW(pl)
-#define ACPI_BREAK_MSG(a)
 
 #define return_VOID                     return
 #define return_ACPI_STATUS(s)           return(s)
 #define return_VALUE(s)                 return(s)
+#define return_UINT8(s)                 return(s)
+#define return_UINT32(s)                return(s)
+#define return_PTR(s)                   return(s)
+
+#endif /* CONFIG_ACPI_DEBUG_FUNC_TRACE */
+
+/* Conditional execution */
+
+#define ACPI_DEBUG_EXEC(a)              a
+#define ACPI_NORMAL_EXEC(a)
+
+#define ACPI_DEBUG_DEFINE(a)            a;
+#define ACPI_DEBUG_ONLY_MEMBERS(a)      a;
+#define _VERBOSE_STRUCTURES
+
+/* Stack and buffer dumping */
+
+#define ACPI_DUMP_STACK_ENTRY(a)        acpi_ex_dump_operand((a),0)
+#define ACPI_DUMP_OPERANDS(a,b,c,d,e)   
acpi_ex_dump_operands(a,b,c,d,e,_acpi_module_name,__LINE__)
+
+#define ACPI_DUMP_ENTRY(a,b)            acpi_ns_dump_entry (a,b)
+#define ACPI_DUMP_PATHNAME(a,b,c,d)     acpi_ns_dump_pathname(a,b,c,d)
+#define ACPI_DUMP_RESOURCE_LIST(a)      acpi_rs_dump_resource_list(a)
+#define ACPI_DUMP_BUFFER(a,b)           acpi_ut_dump_buffer((u8 
*)a,b,DB_BYTE_DISPLAY,_COMPONENT)
+
+/*
+ * Master debug print macros
+ * Print iff:
+ *    1) Debug print for the current component is enabled
+ *    2) Debug error level or trace level for the print statement is enabled
+ */
+#define ACPI_DEBUG_PRINT(plist)         acpi_ut_debug_print plist
+#define ACPI_DEBUG_PRINT_RAW(plist)     acpi_ut_debug_print_raw plist
+
+#else
+/*
+ * This is the non-debug case -- make everything go away,
+ * leaving no executable debug code!
+ */
+#define ACPI_DEBUG_EXEC(a)
+#define ACPI_NORMAL_EXEC(a)             a;
+
+#define ACPI_DEBUG_DEFINE(a)           do { } while(0)
+#define ACPI_DEBUG_ONLY_MEMBERS(a)     do { } while(0)
+#define ACPI_FUNCTION_NAME(a)          do { } while(0)
+#define ACPI_FUNCTION_TRACE(a)         do { } while(0)
+#define ACPI_FUNCTION_TRACE_PTR(a,b)   do { } while(0)
+#define ACPI_FUNCTION_TRACE_U32(a,b)   do { } while(0)
+#define ACPI_FUNCTION_TRACE_STR(a,b)   do { } while(0)
+#define ACPI_FUNCTION_EXIT             do { } while(0)
+#define ACPI_FUNCTION_STATUS_EXIT(s)   do { } while(0)
+#define ACPI_FUNCTION_VALUE_EXIT(s)    do { } while(0)
+#define ACPI_FUNCTION_ENTRY()          do { } while(0)
+#define ACPI_DUMP_STACK_ENTRY(a)       do { } while(0)
+#define ACPI_DUMP_OPERANDS(a,b,c,d,e)  do { } while(0)
+#define ACPI_DUMP_ENTRY(a,b)           do { } while(0)
+#define ACPI_DUMP_TABLES(a,b)          do { } while(0)
+#define ACPI_DUMP_PATHNAME(a,b,c,d)    do { } while(0)
+#define ACPI_DUMP_RESOURCE_LIST(a)     do { } while(0)
+#define ACPI_DUMP_BUFFER(a,b)          do { } while(0)
+#define ACPI_DEBUG_PRINT(pl)           do { } while(0)
+#define ACPI_DEBUG_PRINT_RAW(pl)       do { } while(0)
+
+#define return_VOID                     return
+#define return_ACPI_STATUS(s)           return(s)
+#define return_VALUE(s)                 return(s)
+#define return_UINT8(s)                 return(s)
+#define return_UINT32(s)                return(s)
 #define return_PTR(s)                   return(s)
 
 #endif
@@ -626,18 +663,6 @@
 #define ACPI_DEBUGGER_EXEC(a)
 #endif
 
-
-/*
- * For 16-bit code, we want to shrink some things even though
- * we are using ACPI_DEBUG_OUTPUT to get the debug output
- */
-#if ACPI_MACHINE_WIDTH == 16
-#undef ACPI_DEBUG_ONLY_MEMBERS
-#undef _VERBOSE_STRUCTURES
-#define ACPI_DEBUG_ONLY_MEMBERS(a)
-#endif
-
-
 #ifdef ACPI_DEBUG_OUTPUT
 /*
  * 1) Set name to blanks
@@ -650,7 +675,6 @@
 #define ACPI_ADD_OBJECT_NAME(a,b)
 #endif
 
-
 /*
  * Memory allocation tracking (DEBUG ONLY)
  */
@@ -658,21 +682,26 @@
 
 /* Memory allocation */
 
-#define ACPI_MEM_ALLOCATE(a)            
acpi_ut_allocate((acpi_size)(a),_COMPONENT,_THIS_MODULE,__LINE__)
-#define ACPI_MEM_CALLOCATE(a)           acpi_ut_callocate((acpi_size)(a), 
_COMPONENT,_THIS_MODULE,__LINE__)
-#define ACPI_MEM_FREE(a)                acpi_os_free(a)
+#ifndef ACPI_ALLOCATE
+#define ACPI_ALLOCATE(a)            
acpi_ut_allocate((acpi_size)(a),_COMPONENT,_acpi_module_name,__LINE__)
+#endif
+#ifndef ACPI_ALLOCATE_ZEROED
+#define ACPI_ALLOCATE_ZEROED(a)     acpi_ut_allocate_zeroed((acpi_size)(a), 
_COMPONENT,_acpi_module_name,__LINE__)
+#endif
+#ifndef ACPI_FREE
+#define ACPI_FREE(a)                acpio_os_free(a)
+#endif
 #define ACPI_MEM_TRACKING(a)
 
-
 #else
 
 /* Memory allocation */
 
-#define ACPI_MEM_ALLOCATE(a)            
acpi_ut_allocate_and_track((acpi_size)(a),_COMPONENT,_THIS_MODULE,__LINE__)
-#define ACPI_MEM_CALLOCATE(a)           
acpi_ut_callocate_and_track((acpi_size)(a), _COMPONENT,_THIS_MODULE,__LINE__)
-#define ACPI_MEM_FREE(a)                
acpi_ut_free_and_track(a,_COMPONENT,_THIS_MODULE,__LINE__)
-#define ACPI_MEM_TRACKING(a)            a
-
-#endif /* ACPI_DBG_TRACK_ALLOCATIONS */
-
-#endif /* ACMACROS_H */
+#define ACPI_ALLOCATE(a)            
acpi_ut_allocate_and_track((acpi_size)(a),_COMPONENT,_acpi_module_name,__LINE__)
+#define ACPI_ALLOCATE_ZEROED(a)     
acpi_ut_allocate_zeroed_and_track((acpi_size)(a), 
_COMPONENT,_acpi_module_name,__LINE__)
+#define ACPI_FREE(a)                
acpi_ut_free_and_track(a,_COMPONENT,_acpi_module_name,__LINE__)
+#define ACPI_MEM_TRACKING(a)        a
+
+#endif                         /* ACPI_DBG_TRACK_ALLOCATIONS */
+
+#endif                         /* ACMACROS_H */
diff -r 5cbfc6c24d32 -r 13cba2e78a65 xen/include/acpi/acnames.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/xen/include/acpi/acnames.h        Tue Mar 18 14:55:36 2008 +0000
@@ -0,0 +1,83 @@
+/******************************************************************************
+ *
+ * Name: acnames.h - Global names and strings
+ *
+ *****************************************************************************/
+
+/*
+ * Copyright (C) 2000 - 2007, R. Byron Moore
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions, and the following disclaimer,
+ *    without modification.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ *    substantially similar to the "NO WARRANTY" disclaimer below
+ *    ("Disclaimer") and any redistribution must be conditioned upon
+ *    including a substantially similar Disclaimer requirement for further
+ *    binary redistribution.
+ * 3. Neither the names of the above-listed copyright holders nor the names
+ *    of any contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * NO WARRANTY
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGES.
+ */
+
+#ifndef __ACNAMES_H__
+#define __ACNAMES_H__
+
+/* Method names - these methods can appear anywhere in the namespace */
+
+#define METHOD_NAME__HID        "_HID"
+#define METHOD_NAME__CID        "_CID"
+#define METHOD_NAME__UID        "_UID"
+#define METHOD_NAME__ADR        "_ADR"
+#define METHOD_NAME__INI        "_INI"
+#define METHOD_NAME__STA        "_STA"
+#define METHOD_NAME__REG        "_REG"
+#define METHOD_NAME__SEG        "_SEG"
+#define METHOD_NAME__BBN        "_BBN"
+#define METHOD_NAME__PRT        "_PRT"
+#define METHOD_NAME__CRS        "_CRS"
+#define METHOD_NAME__PRS        "_PRS"
+#define METHOD_NAME__PRW        "_PRW"
+#define METHOD_NAME__SRS        "_SRS"
+
+/* Method names - these methods must appear at the namespace root */
+
+#define METHOD_NAME__BFS        "\\_BFS"
+#define METHOD_NAME__GTS        "\\_GTS"
+#define METHOD_NAME__PTS        "\\_PTS"
+#define METHOD_NAME__SST        "\\_SI._SST"
+#define METHOD_NAME__WAK        "\\_WAK"
+
+/* Definitions of the predefined namespace names  */
+
+#define ACPI_UNKNOWN_NAME       (u32) 0x3F3F3F3F       /* Unknown name is 
"????" */
+#define ACPI_ROOT_NAME          (u32) 0x5F5F5F5C       /* Root name is    
"\___" */
+
+#define ACPI_PREFIX_MIXED       (u32) 0x69706341       /* "Acpi" */
+#define ACPI_PREFIX_LOWER       (u32) 0x69706361       /* "acpi" */
+
+#define ACPI_NS_ROOT_PATH       "\\"
+#define ACPI_NS_SYSTEM_BUS      "_SB_"
+
+#endif                         /* __ACNAMES_H__  */
diff -r 5cbfc6c24d32 -r 13cba2e78a65 xen/include/acpi/acobject.h
--- a/xen/include/acpi/acobject.h       Tue Mar 18 13:14:26 2008 +0000
+++ b/xen/include/acpi/acobject.h       Tue Mar 18 14:55:36 2008 +0000
@@ -1,12 +1,12 @@
 
 /******************************************************************************
  *
- * Name: acobject.h - Definition of union acpi_operand_object    (Internal 
object only)
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000 - 2005, R. Byron Moore
+ * Name: acobject.h - Definition of union acpi_operand_object  (Internal 
object only)
+ *
+ *****************************************************************************/
+
+/*
+ * Copyright (C) 2000 - 2007, R. Byron Moore
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -45,13 +45,22 @@
 #ifndef _ACOBJECT_H
 #define _ACOBJECT_H
 
-
-/*
- * The union acpi_operand_object    is used to pass AML operands from the 
dispatcher
+/* acpisrc:struct_defs -- for acpisrc conversion */
+
+/*
+ * The union acpi_operand_object is used to pass AML operands from the 
dispatcher
  * to the interpreter, and to keep track of the various handlers such as
- * address space handlers and notify handlers.  The object is a constant
+ * address space handlers and notify handlers. The object is a constant
  * size in order to allow it to be cached and reused.
- */
+ *
+ * Note: The object is optimized to be aligned and will not work if it is
+ * byte-packed.
+ */
+#if ACPI_MACHINE_WIDTH == 64
+#pragma pack(8)
+#else
+#pragma pack(4)
+#endif
 
 
/*******************************************************************************
  *
@@ -62,17 +71,25 @@
 /*
  * Common area for all objects.
  *
- * data_type is used to differentiate between internal descriptors, and MUST
- * be the first byte in this structure.
- */
-#define ACPI_OBJECT_COMMON_HEADER   /* SIZE/ALIGNMENT: 32 bits, one ptr plus 
trailing 8-bit flag */\
-       u8                                      descriptor;         /* To 
differentiate various internal objs */\
-       u8                                      type;               /* 
acpi_object_type */\
-       u16                                     reference_count;    /* For 
object deletion management */\
-       union acpi_operand_object               *next_object;       /* Objects 
linked to parent NS node */\
-       u8                                      flags; \
-
-/* Values for flag byte above */
+ * descriptor_type is used to differentiate between internal descriptors, and
+ * must be in the same place across all descriptors
+ *
+ * Note: The descriptor_type and Type fields must appear in the identical
+ * position in both the struct acpi_namespace_node and union 
acpi_operand_object
+ * structures.
+ */
+#define ACPI_OBJECT_COMMON_HEADER \
+       union acpi_operand_object       *next_object;       /* Objects linked 
to parent NS node */\
+       u8                              descriptor_type;    /* To differentiate 
various internal objs */\
+       u8                              type;               /* acpi_object_type 
*/\
+       u16                             reference_count;    /* For object 
deletion management */\
+       u8                              flags;
+       /*
+        * Note: There are 3 bytes available here before the
+        * next natural alignment boundary (for both 32/64 cases)
+        */
+
+/* Values for Flag byte above */
 
 #define AOPOBJ_AML_CONSTANT         0x01
 #define AOPOBJ_STATIC_POINTER       0x02
@@ -80,257 +97,181 @@
 #define AOPOBJ_OBJECT_INITIALIZED   0x08
 #define AOPOBJ_SETUP_COMPLETE       0x10
 #define AOPOBJ_SINGLE_DATUM         0x20
-
+#define AOPOBJ_INVALID              0x40       /* Used if host OS won't allow 
an op_region address */
+
+/******************************************************************************
+ *
+ * Basic data types
+ *
+ *****************************************************************************/
+
+struct acpi_object_common {
+ACPI_OBJECT_COMMON_HEADER};
+
+struct acpi_object_integer {
+       ACPI_OBJECT_COMMON_HEADER u8 fill[3];   /* Prevent warning on some 
compilers */
+       acpi_integer value;
+};
+
+/*
+ * Note: The String and Buffer object must be identical through the Pointer
+ * and length elements.  There is code that depends on this.
+ *
+ * Fields common to both Strings and Buffers
+ */
+#define ACPI_COMMON_BUFFER_INFO(_type) \
+       _type                           *pointer; \
+       u32                             length;
+
+struct acpi_object_string {    /* Null terminated, ASCII characters only */
+       ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_BUFFER_INFO(char) /* String in 
AML stream or allocated string */
+};
+
+struct acpi_object_buffer {
+       ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_BUFFER_INFO(u8)   /* Buffer in 
AML stream or allocated buffer */
+       u32 aml_length;
+       u8 *aml_start;
+       struct acpi_namespace_node *node;       /* Link back to parent node */
+};
+
+struct acpi_object_package {
+       ACPI_OBJECT_COMMON_HEADER struct acpi_namespace_node *node;     /* Link 
back to parent node */
+       union acpi_operand_object **elements;   /* Array of pointers to 
acpi_objects */
+       u8 *aml_start;
+       u32 aml_length;
+       u32 count;              /* # of elements in package */
+};
+
+/******************************************************************************
+ *
+ * Complex data types
+ *
+ *****************************************************************************/
+
+struct acpi_object_event {
+       ACPI_OBJECT_COMMON_HEADER acpi_semaphore os_semaphore;  /* Actual OS 
synchronization object */
+};
+
+struct acpi_object_mutex {
+       ACPI_OBJECT_COMMON_HEADER u8 sync_level;        /* 0-15, specified in 
Mutex() call */
+       u16 acquisition_depth;  /* Allow multiple Acquires, same thread */
+       struct acpi_thread_state *owner_thread; /* Current owner of the mutex */
+       acpi_mutex os_mutex;    /* Actual OS synchronization object */
+       union acpi_operand_object *prev;        /* Link for list of acquired 
mutexes */
+       union acpi_operand_object *next;        /* Link for list of acquired 
mutexes */
+       struct acpi_namespace_node *node;       /* Containing namespace node */
+       u8 original_sync_level; /* Owner's original sync level (0-15) */
+};
+
+struct acpi_object_region {
+       ACPI_OBJECT_COMMON_HEADER u8 space_id;
+       struct acpi_namespace_node *node;       /* Containing namespace node */
+       union acpi_operand_object *handler;     /* Handler for region access */
+       union acpi_operand_object *next;
+       acpi_physical_address address;
+       u32 length;
+};
+
+struct acpi_object_method {
+       ACPI_OBJECT_COMMON_HEADER u8 method_flags;
+       u8 param_count;
+       u8 sync_level;
+       union acpi_operand_object *mutex;
+       u8 *aml_start;
+       ACPI_INTERNAL_METHOD implementation;
+       u32 aml_length;
+       u8 thread_count;
+       acpi_owner_id owner_id;
+};
+
+/******************************************************************************
+ *
+ * Objects that can be notified.  All share a common notify_info area.
+ *
+ *****************************************************************************/
+
+/*
+ * Common fields for objects that support ASL notifications
+ */
+#define ACPI_COMMON_NOTIFY_INFO \
+       union acpi_operand_object       *system_notify;     /* Handler for 
system notifies */\
+       union acpi_operand_object       *device_notify;     /* Handler for 
driver notifies */\
+       union acpi_operand_object       *handler;       /* Handler for Address 
space */
+
+struct acpi_object_notify_common {     /* COMMON NOTIFY for POWER, PROCESSOR, 
DEVICE, and THERMAL */
+ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_NOTIFY_INFO};
+
+struct acpi_object_device {
+       ACPI_OBJECT_COMMON_HEADER
+           ACPI_COMMON_NOTIFY_INFO struct acpi_gpe_block_info *gpe_block;
+};
+
+struct acpi_object_power_resource {
+       ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_NOTIFY_INFO u32 system_level;
+       u32 resource_order;
+};
+
+struct acpi_object_processor {
+       ACPI_OBJECT_COMMON_HEADER
+           /* The next two fields take advantage of the 3-byte space before 
NOTIFY_INFO */
+       u8 proc_id;
+       u8 length;
+       ACPI_COMMON_NOTIFY_INFO acpi_io_address address;
+};
+
+struct acpi_object_thermal_zone {
+ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_NOTIFY_INFO};
+
+/******************************************************************************
+ *
+ * Fields.  All share a common header/info field.
+ *
+ *****************************************************************************/
 
 /*
  * Common bitfield for the field objects
  * "Field Datum"  -- a datum from the actual field object
  * "Buffer Datum" -- a datum from a user buffer, read from or to be written to 
the field
  */
-#define ACPI_COMMON_FIELD_INFO      /* SIZE/ALIGNMENT: 24 bits + three 32-bit 
values */\
-       u8                                      field_flags;        /* Access, 
update, and lock bits */\
-       u8                                      attribute;          /* From 
access_as keyword */\
-       u8                                      access_byte_width;  /* 
Read/Write size in bytes */\
-       u32                                     bit_length;         /* Length 
of field in bits */\
-       u32                                     base_byte_offset;   /* Byte 
offset within containing object */\
-       u8                                      start_field_bit_offset;/* Bit 
offset within first field datum (0-63) */\
-       u8                                      access_bit_width;   /* 
Read/Write size in bits (8-64) */\
-       u32                                     value;              /* Value to 
store into the Bank or Index register */\
-       struct acpi_namespace_node              *node;              /* Link 
back to parent node */
-
-
-/*
- * Fields common to both Strings and Buffers
- */
-#define ACPI_COMMON_BUFFER_INFO \
-       u32                                     length;
-
-
-/*
- * Common fields for objects that support ASL notifications
- */
-#define ACPI_COMMON_NOTIFY_INFO \
-       union acpi_operand_object               *system_notify;     /* Handler 
for system notifies */\
-       union acpi_operand_object               *device_notify;     /* Handler 
for driver notifies */\
-       union acpi_operand_object               *handler;           /* Handler 
for Address space */
-
-
-/******************************************************************************
- *
- * Basic data types
- *
- *****************************************************************************/
-
-struct acpi_object_common
-{
-       ACPI_OBJECT_COMMON_HEADER
-};
-
-
-struct acpi_object_integer
-{
-       ACPI_OBJECT_COMMON_HEADER
-       acpi_integer                            value;
-};
-
-/*
- * Note: The String and Buffer object must be identical through the Pointer
- * element.  There is code that depends on this.
- */
-struct acpi_object_string           /* Null terminated, ASCII characters only 
*/
-{
-       ACPI_OBJECT_COMMON_HEADER
-       ACPI_COMMON_BUFFER_INFO
-       char                                    *pointer;           /* String 
in AML stream or allocated string */
-};
-
-
-struct acpi_object_buffer
-{
-       ACPI_OBJECT_COMMON_HEADER
-       ACPI_COMMON_BUFFER_INFO
-       u8                                      *pointer;           /* Buffer 
in AML stream or allocated buffer */
-       struct acpi_namespace_node              *node;              /* Link 
back to parent node */
-       u8                                      *aml_start;
-       u32                                     aml_length;
-};
-
-
-struct acpi_object_package
-{
-       ACPI_OBJECT_COMMON_HEADER
-
-       u32                                     count;              /* # of 
elements in package */
-       u32                                     aml_length;
-       u8                                      *aml_start;
-       struct acpi_namespace_node              *node;              /* Link 
back to parent node */
-       union acpi_operand_object               **elements;         /* Array of 
pointers to acpi_objects */
-};
-
-
-/******************************************************************************
- *
- * Complex data types
- *
- *****************************************************************************/
-
-struct acpi_object_event
-{
-       ACPI_OBJECT_COMMON_HEADER
-       void                                    *semaphore;
-};
-
-
-#define ACPI_INFINITE_CONCURRENCY   0xFF
-
-typedef
-acpi_status (*ACPI_INTERNAL_METHOD) (
-       struct acpi_walk_state          *walk_state);
-
-struct acpi_object_method
-{
-       ACPI_OBJECT_COMMON_HEADER
-       u8                                      method_flags;
-       u8                                      param_count;
-       u32                                     aml_length;
-       void                                    *semaphore;
-       u8                                      *aml_start;
-       ACPI_INTERNAL_METHOD            implementation;
-       u8                                      concurrency;
-       u8                                      thread_count;
-       acpi_owner_id                           owning_id;
-};
-
-
-struct acpi_object_mutex
-{
-       ACPI_OBJECT_COMMON_HEADER
-       u8                                      sync_level;         /* 0-15, 
specified in Mutex() call */
-       u16                                     acquisition_depth;  /* Allow 
multiple Acquires, same thread */
-       struct acpi_thread_state                *owner_thread;      /* Current 
owner of the mutex */
-       void                                    *semaphore;         /* Actual 
OS synchronization object */
-       union acpi_operand_object               *prev;              /* Link for 
list of acquired mutexes */
-       union acpi_operand_object               *next;              /* Link for 
list of acquired mutexes */
-       struct acpi_namespace_node              *node;              /* 
Containing namespace node */
-       u8                                      original_sync_level; /* Owner's 
original sync level (0-15) */
-};
-
-
-struct acpi_object_region
-{
-       ACPI_OBJECT_COMMON_HEADER
-
-       u8                                      space_id;
-       union acpi_operand_object               *handler;           /* Handler 
for region access */
-       struct acpi_namespace_node              *node;              /* 
Containing namespace node */
-       union acpi_operand_object               *next;
-       u32                                     length;
-       acpi_physical_address                   address;
-};
-
-
-/******************************************************************************
- *
- * Objects that can be notified.  All share a common notify_info area.
- *
- *****************************************************************************/
-
-struct acpi_object_notify_common            /* COMMON NOTIFY for POWER, 
PROCESSOR, DEVICE, and THERMAL */
-{
-       ACPI_OBJECT_COMMON_HEADER
-       ACPI_COMMON_NOTIFY_INFO
-};
-
-
-struct acpi_object_device
-{
-       ACPI_OBJECT_COMMON_HEADER
-       ACPI_COMMON_NOTIFY_INFO
-       struct acpi_gpe_block_info              *gpe_block;
-};
-
-
-struct acpi_object_power_resource
-{
-       ACPI_OBJECT_COMMON_HEADER
-       ACPI_COMMON_NOTIFY_INFO
-       u32                                     system_level;
-       u32                                     resource_order;
-};
-
-
-struct acpi_object_processor
-{
-       ACPI_OBJECT_COMMON_HEADER
-       ACPI_COMMON_NOTIFY_INFO
-       u32                                     proc_id;
-       u32                                     length;
-       acpi_io_address                         address;
-};
-
-
-struct acpi_object_thermal_zone
-{
-       ACPI_OBJECT_COMMON_HEADER
-       ACPI_COMMON_NOTIFY_INFO
-};
-
-
-/******************************************************************************
- *
- * Fields.  All share a common header/info field.
- *
- *****************************************************************************/
-
-struct acpi_object_field_common                         /* COMMON FIELD (for 
BUFFER, REGION, BANK, and INDEX fields) */
-{
-       ACPI_OBJECT_COMMON_HEADER
-       ACPI_COMMON_FIELD_INFO
-       union acpi_operand_object               *region_obj;        /* 
Containing Operation Region object */
-                         /* (REGION/BANK fields only) */
-};
-
-
-struct acpi_object_region_field
-{
-       ACPI_OBJECT_COMMON_HEADER
-       ACPI_COMMON_FIELD_INFO
-       union acpi_operand_object               *region_obj;        /* 
Containing op_region object */
-};
-
-
-struct acpi_object_bank_field
-{
-       ACPI_OBJECT_COMMON_HEADER
-       ACPI_COMMON_FIELD_INFO
-       union acpi_operand_object               *region_obj;        /* 
Containing op_region object */
-       union acpi_operand_object               *bank_obj;          /* 
bank_select Register object */
-};
-
-
-struct acpi_object_index_field
-{
-       ACPI_OBJECT_COMMON_HEADER
-       ACPI_COMMON_FIELD_INFO
-
-       /*
-        * No "region_obj" pointer needed since the Index and Data registers
-        * are each field definitions unto themselves.
-        */
-       union acpi_operand_object               *index_obj;         /* Index 
register */
-       union acpi_operand_object               *data_obj;          /* Data 
register */
-};
-
+#define ACPI_COMMON_FIELD_INFO \
+       u8                              field_flags;        /* Access, update, 
and lock bits */\
+       u8                              attribute;          /* From access_as 
keyword */\
+       u8                              access_byte_width;  /* Read/Write size 
in bytes */\
+       struct acpi_namespace_node      *node;              /* Link back to 
parent node */\
+       u32                             bit_length;         /* Length of field 
in bits */\
+       u32                             base_byte_offset;   /* Byte offset 
within containing object */\
+       u32                             value;              /* Value to store 
into the Bank or Index register */\
+       u8                              start_field_bit_offset;/* Bit offset 
within first field datum (0-63) */\
+       u8                              access_bit_width;       /* Read/Write 
size in bits (8-64) */
+
+struct acpi_object_field_common {      /* COMMON FIELD (for BUFFER, REGION, 
BANK, and INDEX fields) */
+       ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO union 
acpi_operand_object *region_obj; /* Parent Operation Region object (REGION/BANK 
fields only) */
+};
+
+struct acpi_object_region_field {
+       ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO union 
acpi_operand_object *region_obj; /* Containing op_region object */
+};
+
+struct acpi_object_bank_field {
+       ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO union 
acpi_operand_object *region_obj; /* Containing op_region object */
+       union acpi_operand_object *bank_obj;    /* bank_select Register object 
*/
+};
+
+struct acpi_object_index_field {
+       ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO
+           /*
+            * No "RegionObj" pointer needed since the Index and Data registers
+            * are each field definitions unto themselves.
+            */
+       union acpi_operand_object *index_obj;   /* Index register */
+       union acpi_operand_object *data_obj;    /* Data register */
+};
 
 /* The buffer_field is different in that it is part of a Buffer, not an 
op_region */
 
-struct acpi_object_buffer_field
-{
-       ACPI_OBJECT_COMMON_HEADER
-       ACPI_COMMON_FIELD_INFO
-       union acpi_operand_object               *buffer_obj;        /* 
Containing Buffer object */
-};
-
+struct acpi_object_buffer_field {
+       ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO union 
acpi_operand_object *buffer_obj; /* Containing Buffer object */
+};
 
 /******************************************************************************
  *
@@ -338,33 +279,26 @@ struct acpi_object_buffer_field
  *
  *****************************************************************************/
 
-struct acpi_object_notify_handler
-{
-       ACPI_OBJECT_COMMON_HEADER
-       struct acpi_namespace_node              *node;              /* Parent 
device */
-       acpi_notify_handler                     handler;
-       void                                    *context;
-};
-
-
-/* Flags for address handler */
-
-#define ACPI_ADDR_HANDLER_DEFAULT_INSTALLED  0x1
-
-
-struct acpi_object_addr_handler
-{
-       ACPI_OBJECT_COMMON_HEADER
-       u8                                      space_id;
-       u16                                     hflags;
-       acpi_adr_space_handler                  handler;
-       struct acpi_namespace_node              *node;              /* Parent 
device */
-       void                                    *context;
-       acpi_adr_space_setup                    setup;
-       union acpi_operand_object               *region_list;       /* regions 
using this handler */
-       union acpi_operand_object               *next;
-};
-
+struct acpi_object_notify_handler {
+       ACPI_OBJECT_COMMON_HEADER struct acpi_namespace_node *node;     /* 
Parent device */
+       acpi_notify_handler handler;
+       void *context;
+};
+
+struct acpi_object_addr_handler {
+       ACPI_OBJECT_COMMON_HEADER u8 space_id;
+       u8 handler_flags;
+       acpi_adr_space_handler handler;
+       struct acpi_namespace_node *node;       /* Parent device */
+       void *context;
+       acpi_adr_space_setup setup;
+       union acpi_operand_object *region_list; /* regions using this handler */
+       union acpi_operand_object *next;
+};
+
+/* Flags for address handler (handler_flags) */
+
+#define ACPI_ADDR_HANDLER_DEFAULT_INSTALLED  0x01
 
 /******************************************************************************
  *
@@ -376,17 +310,14 @@ struct acpi_object_addr_handler
  * The Reference object type is used for these opcodes:
  * Arg[0-6], Local[0-7], index_op, name_op, zero_op, one_op, ones_op, debug_op
  */
-struct acpi_object_reference
-{
-       ACPI_OBJECT_COMMON_HEADER
-       u8                                      target_type;        /* Used for 
index_op */
-       u16                                     opcode;
-       u32                                     offset;             /* Used for 
arg_op, local_op, and index_op */
-       void                                    *object;            /* 
name_op=>HANDLE to obj, index_op=>union acpi_operand_object  */
-       struct acpi_namespace_node              *node;
-       union acpi_operand_object               **where;
-};
-
+struct acpi_object_reference {
+       ACPI_OBJECT_COMMON_HEADER u8 target_type;       /* Used for index_op */
+       u16 opcode;
+       void *object;           /* name_op=>HANDLE to obj, index_op=>union 
acpi_operand_object */
+       struct acpi_namespace_node *node;
+       union acpi_operand_object **where;
+       u32 offset;             /* Used for arg_op, local_op, and index_op */
+};
 
 /*
  * Extra object is used as additional storage for types that
@@ -395,36 +326,25 @@ struct acpi_object_reference
  *
  * Currently: Region and field_unit types
  */
-struct acpi_object_extra
-{
-       ACPI_OBJECT_COMMON_HEADER
-       u8                                      byte_fill1;
-       u16                                     word_fill1;
-       u32                                     aml_length;
-       u8                                      *aml_start;
-       struct acpi_namespace_node              *method_REG;        /* _REG 
method for this region (if any) */
-       void                                    *region_context;    /* 
Region-specific data */
-};
-
+struct acpi_object_extra {
+       ACPI_OBJECT_COMMON_HEADER struct acpi_namespace_node *method_REG;       
/* _REG method for this region (if any) */
+       void *region_context;   /* Region-specific data */
+       u8 *aml_start;
+       u32 aml_length;
+};
 
 /* Additional data that can be attached to namespace nodes */
 
-struct acpi_object_data
-{
-       ACPI_OBJECT_COMMON_HEADER
-       acpi_object_handler                     handler;
-       void                                    *pointer;
-};
-
+struct acpi_object_data {
+       ACPI_OBJECT_COMMON_HEADER acpi_object_handler handler;
+       void *pointer;
+};
 
 /* Structure used when objects are cached for reuse */
 
-struct acpi_object_cache_list
-{
-       ACPI_OBJECT_COMMON_HEADER
-       union acpi_operand_object               *next;              /* Link for 
object cache and internal lists*/
-};
-
+struct acpi_object_cache_list {
+       ACPI_OBJECT_COMMON_HEADER union acpi_operand_object *next;      /* Link 
for object cache and internal lists */
+};
 
 /******************************************************************************
  *
@@ -432,35 +352,33 @@ struct acpi_object_cache_list
  *
  *****************************************************************************/
 
-union acpi_operand_object
-{
-       struct acpi_object_common               common;
-       struct acpi_object_integer              integer;
-       struct acpi_object_string               string;
-       struct acpi_object_buffer               buffer;
-       struct acpi_object_package              package;
-       struct acpi_object_event                event;
-       struct acpi_object_method               method;
-       struct acpi_object_mutex                mutex;
-       struct acpi_object_region               region;
-       struct acpi_object_notify_common        common_notify;
-       struct acpi_object_device               device;
-       struct acpi_object_power_resource       power_resource;
-       struct acpi_object_processor            processor;
-       struct acpi_object_thermal_zone         thermal_zone;
-       struct acpi_object_field_common         common_field;
-       struct acpi_object_region_field         field;
-       struct acpi_object_buffer_field         buffer_field;
-       struct acpi_object_bank_field           bank_field;
-       struct acpi_object_index_field          index_field;
-       struct acpi_object_notify_handler       notify;
-       struct acpi_object_addr_handler         address_space;
-       struct acpi_object_reference            reference;
-       struct acpi_object_extra                extra;
-       struct acpi_object_data                 data;
-       struct acpi_object_cache_list           cache;
-};
-
+union acpi_operand_object {
+       struct acpi_object_common common;
+       struct acpi_object_integer integer;
+       struct acpi_object_string string;
+       struct acpi_object_buffer buffer;
+       struct acpi_object_package package;
+       struct acpi_object_event event;
+       struct acpi_object_method method;
+       struct acpi_object_mutex mutex;
+       struct acpi_object_region region;
+       struct acpi_object_notify_common common_notify;
+       struct acpi_object_device device;
+       struct acpi_object_power_resource power_resource;
+       struct acpi_object_processor processor;
+       struct acpi_object_thermal_zone thermal_zone;
+       struct acpi_object_field_common common_field;
+       struct acpi_object_region_field field;
+       struct acpi_object_buffer_field buffer_field;
+       struct acpi_object_bank_field bank_field;
+       struct acpi_object_index_field index_field;
+       struct acpi_object_notify_handler notify;
+       struct acpi_object_addr_handler address_space;
+       struct acpi_object_reference reference;
+       struct acpi_object_extra extra;
+       struct acpi_object_data data;
+       struct acpi_object_cache_list cache;
+};
 
 /******************************************************************************
  *
@@ -468,10 +386,9 @@ union acpi_operand_object
  *
  *****************************************************************************/
 
-
 /* Object descriptor types */
 
-#define ACPI_DESC_TYPE_CACHED           0x01        /* Used only when object 
is cached */
+#define ACPI_DESC_TYPE_CACHED           0x01   /* Used only when object is 
cached */
 #define ACPI_DESC_TYPE_STATE            0x02
 #define ACPI_DESC_TYPE_STATE_UPDATE     0x03
 #define ACPI_DESC_TYPE_STATE_PACKAGE    0x04
@@ -488,14 +405,18 @@ union acpi_operand_object
 #define ACPI_DESC_TYPE_NAMED            0x0F
 #define ACPI_DESC_TYPE_MAX              0x0F
 
-
-union acpi_descriptor
-{
-       u8                                      descriptor_id;  /* To 
differentiate various internal objs */\
-       union acpi_operand_object               object;
-       struct acpi_namespace_node              node;
-       union acpi_parse_object                 op;
-};
-
-
-#endif /* _ACOBJECT_H */
+struct acpi_common_descriptor {
+       void *common_pointer;
+       u8 descriptor_type;     /* To differentiate various internal objs */
+};
+
+union acpi_descriptor {
+       struct acpi_common_descriptor common;
+       union acpi_operand_object object;
+       struct acpi_namespace_node node;
+       union acpi_parse_object op;
+};
+
+#pragma pack()
+
+#endif                         /* _ACOBJECT_H */
diff -r 5cbfc6c24d32 -r 13cba2e78a65 xen/include/acpi/acoutput.h
--- a/xen/include/acpi/acoutput.h       Tue Mar 18 13:14:26 2008 +0000
+++ b/xen/include/acpi/acoutput.h       Tue Mar 18 14:55:36 2008 +0000
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2005, R. Byron Moore
+ * Copyright (C) 2000 - 2007, R. Byron Moore
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -50,7 +50,7 @@
  * component basis and a per-exception-type basis.
  */
 
-/* Component IDs are used in the global "debug_layer" */
+/* Component IDs are used in the global "DebugLayer" */
 
 #define ACPI_UTILITIES              0x00000001
 #define ACPI_HARDWARE               0x00000002
@@ -73,11 +73,9 @@
 #define ACPI_ALL_COMPONENTS         0x00003FFF
 #define ACPI_COMPONENT_DEFAULT      (ACPI_ALL_COMPONENTS)
 
-
 /* Component IDs reserved for ACPI drivers */
 
 #define ACPI_ALL_DRIVERS            0xFFFF0000
-
 
 /*
  * Raw debug output levels, do not use these in the DEBUG_PRINT macros
@@ -123,7 +121,7 @@
 #define ACPI_LV_INTERRUPTS          0x08000000
 #define ACPI_LV_VERBOSITY3          0x0F000000 | ACPI_LV_VERBOSITY2
 
-/* Exceptionally verbose output -- also used in the global "debug_level" */
+/* Exceptionally verbose output -- also used in the global "DebugLevel"  */
 
 #define ACPI_LV_AML_DISASSEMBLE     0x10000000
 #define ACPI_LV_VERBOSE_INFO        0x20000000
@@ -132,23 +130,27 @@
 
 #define ACPI_LV_VERBOSE             0xF0000000
 
-
 /*
  * Debug level macros that are used in the DEBUG_PRINT macros
  */
-#define ACPI_DEBUG_LEVEL(dl)        (u32) dl,__LINE__,&_debug_info
+#define ACPI_DEBUG_LEVEL(dl)        (u32) dl,ACPI_DEBUG_PARAMETERS
 
-/* Exception level -- used in the global "debug_level" */
+/* Exception level -- used in the global "DebugLevel" */
 
-#define ACPI_DB_ERROR               ACPI_DEBUG_LEVEL (ACPI_LV_ERROR)
-#define ACPI_DB_WARN                ACPI_DEBUG_LEVEL (ACPI_LV_WARN)
 #define ACPI_DB_INIT                ACPI_DEBUG_LEVEL (ACPI_LV_INIT)
 #define ACPI_DB_DEBUG_OBJECT        ACPI_DEBUG_LEVEL (ACPI_LV_DEBUG_OBJECT)
 #define ACPI_DB_INFO                ACPI_DEBUG_LEVEL (ACPI_LV_INFO)
 #define ACPI_DB_ALL_EXCEPTIONS      ACPI_DEBUG_LEVEL (ACPI_LV_ALL_EXCEPTIONS)
 
+/*
+ * These two levels are essentially obsolete, all instances in the
+ * ACPICA core code have been replaced by ACPI_ERROR and ACPI_WARNING
+ * (Kept here because some drivers may still use them)
+ */
+#define ACPI_DB_ERROR               ACPI_DEBUG_LEVEL (ACPI_LV_ERROR)
+#define ACPI_DB_WARN                ACPI_DEBUG_LEVEL (ACPI_LV_WARN)
 
-/* Trace level -- also used in the global "debug_level" */
+/* Trace level -- also used in the global "DebugLevel" */
 
 #define ACPI_DB_INIT_NAMES          ACPI_DEBUG_LEVEL (ACPI_LV_INIT_NAMES)
 #define ACPI_DB_THREADS             ACPI_DEBUG_LEVEL (ACPI_LV_THREADS)
@@ -174,12 +176,10 @@
 
 #define ACPI_DB_ALL                 ACPI_DEBUG_LEVEL (ACPI_LV_ALL)
 
-
 /* Defaults for debug_level, debug and normal */
 
-#define ACPI_DEBUG_DEFAULT          (ACPI_LV_INIT | ACPI_LV_WARN | 
ACPI_LV_ERROR | ACPI_LV_DEBUG_OBJECT)
-#define ACPI_NORMAL_DEFAULT         (ACPI_LV_INIT | ACPI_LV_WARN | 
ACPI_LV_ERROR | ACPI_LV_DEBUG_OBJECT)
+#define ACPI_DEBUG_DEFAULT          (ACPI_LV_INIT | ACPI_LV_WARN | 
ACPI_LV_ERROR)
+#define ACPI_NORMAL_DEFAULT         (ACPI_LV_INIT | ACPI_LV_WARN | 
ACPI_LV_ERROR)
 #define ACPI_DEBUG_ALL              (ACPI_LV_AML_DISASSEMBLE | 
ACPI_LV_ALL_EXCEPTIONS | ACPI_LV_ALL)
 
-
-#endif /* __ACOUTPUT_H__ */
+#endif                         /* __ACOUTPUT_H__ */
diff -r 5cbfc6c24d32 -r 13cba2e78a65 xen/include/acpi/acpi.h
--- a/xen/include/acpi/acpi.h   Tue Mar 18 13:14:26 2008 +0000
+++ b/xen/include/acpi/acpi.h   Tue Mar 18 14:55:36 2008 +0000
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2005, R. Byron Moore
+ * Copyright (C) 2000 - 2007, R. Byron Moore
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -49,21 +49,21 @@
  * We put them here because we don't want to duplicate them
  * in the rest of the source code again and again.
  */
-#include "acconfig.h"           /* Configuration constants */
-#include "platform/acenv.h"     /* Target environment specific items */
-#include "actypes.h"            /* Fundamental common data types */
-#include "acexcep.h"            /* ACPI exception codes */
-#include "acmacros.h"           /* C macros */
-#include "actbl.h"              /* ACPI table definitions */
-#include "aclocal.h"            /* Internal data types */
-#include "acoutput.h"           /* Error output and Debug macros */
-#include "acpiosxf.h"           /* Interfaces to the ACPI-to-OS layer*/
-#include "acpixf.h"             /* ACPI core subsystem external interfaces */
-#include "acobject.h"           /* ACPI internal object */
-#include "acstruct.h"           /* Common structures */
-#include "acglobal.h"           /* All global variables */
-#include "achware.h"            /* Hardware defines and interfaces */
-#include "acutils.h"            /* Utility interfaces */
+#include "acnames.h"           /* Global ACPI names and strings */
+#include "acconfig.h"          /* Configuration constants */
+#include "platform/acenv.h"    /* Target environment specific items */
+#include "actypes.h"           /* Fundamental common data types */
+#include "acexcep.h"           /* ACPI exception codes */
+#include "acmacros.h"          /* C macros */
+#include "actbl.h"             /* ACPI table definitions */
+#include "aclocal.h"           /* Internal data types */
+#include "acoutput.h"          /* Error output and Debug macros */
+#include "acpiosxf.h"          /* Interfaces to the ACPI-to-OS layer */
+#include "acpixf.h"            /* ACPI core subsystem external interfaces */
+#include "acobject.h"          /* ACPI internal object */
+#include "acstruct.h"          /* Common structures */
+#include "acglobal.h"          /* All global variables */
+#include "achware.h"           /* Hardware defines and interfaces */
+#include "acutils.h"           /* Utility interfaces */
 
-
-#endif /* __ACPI_H__ */
+#endif                         /* __ACPI_H__ */
diff -r 5cbfc6c24d32 -r 13cba2e78a65 xen/include/acpi/acpi_bus.h
--- a/xen/include/acpi/acpi_bus.h       Tue Mar 18 13:14:26 2008 +0000
+++ b/xen/include/acpi/acpi_bus.h       Tue Mar 18 14:55:36 2008 +0000
@@ -33,48 +33,40 @@
 /* TBD: Make dynamic */
 #define ACPI_MAX_HANDLES       10
 struct acpi_handle_list {
-       u32                     count;
-       acpi_handle             handles[ACPI_MAX_HANDLES];
-};
-
+       u32 count;
+       acpi_handle handles[ACPI_MAX_HANDLES];
+};
 
 /* acpi_utils.h */
 acpi_status
-acpi_extract_package (
-       union acpi_object       *package,
-       struct acpi_buffer      *format,
-       struct acpi_buffer      *buffer);
+acpi_extract_package(union acpi_object *package,
+                    struct acpi_buffer *format, struct acpi_buffer *buffer);
 acpi_status
-acpi_evaluate_integer (
-       acpi_handle             handle,
-       acpi_string             pathname,
-       struct acpi_object_list *arguments,
-       unsigned long           *data);
+acpi_evaluate_integer(acpi_handle handle,
+                     acpi_string pathname,
+                     struct acpi_object_list *arguments, unsigned long *data);
 acpi_status
-acpi_evaluate_reference (
-       acpi_handle             handle,
-       acpi_string             pathname,
-       struct acpi_object_list *arguments,
-       struct acpi_handle_list *list);
-
-
-#ifdef CONFIG_ACPI_BUS
+acpi_evaluate_reference(acpi_handle handle,
+                       acpi_string pathname,
+                       struct acpi_object_list *arguments,
+                       struct acpi_handle_list *list);
+
+#if 0//def CONFIG_ACPI
 
 #include <linux/proc_fs.h>
 
 #define ACPI_BUS_FILE_ROOT     "acpi"
-extern struct proc_dir_entry   *acpi_root_dir;
-extern FADT_DESCRIPTOR         acpi_fadt;
+extern struct proc_dir_entry *acpi_root_dir;
 
 enum acpi_bus_removal_type {
-       ACPI_BUS_REMOVAL_NORMAL = 0,
+       ACPI_BUS_REMOVAL_NORMAL = 0,
        ACPI_BUS_REMOVAL_EJECT,
        ACPI_BUS_REMOVAL_SUPRISE,
        ACPI_BUS_REMOVAL_TYPE_COUNT
 };
 
 enum acpi_bus_device_type {
-       ACPI_BUS_TYPE_DEVICE    = 0,
+       ACPI_BUS_TYPE_DEVICE = 0,
        ACPI_BUS_TYPE_POWER,
        ACPI_BUS_TYPE_PROCESSOR,
        ACPI_BUS_TYPE_THERMAL,
@@ -87,46 +79,60 @@ struct acpi_driver;
 struct acpi_driver;
 struct acpi_device;
 
-
 /*
  * ACPI Driver
  * -----------
  */
 
-typedef int (*acpi_op_add)     (struct acpi_device *device);
-typedef int (*acpi_op_remove)  (struct acpi_device *device, int type);
-typedef int (*acpi_op_lock)    (struct acpi_device *device, int type);
-typedef int (*acpi_op_start)   (struct acpi_device *device);
-typedef int (*acpi_op_stop)    (struct acpi_device *device, int type);
-typedef int (*acpi_op_suspend) (struct acpi_device *device, int state);
-typedef int (*acpi_op_resume)  (struct acpi_device *device, int state);
-typedef int (*acpi_op_scan)    (struct acpi_device *device);
-typedef int (*acpi_op_bind)    (struct acpi_device *device);
-typedef int (*acpi_op_unbind)  (struct acpi_device *device);
-typedef int (*acpi_op_match)   (struct acpi_device *device,
-                                struct acpi_driver *driver);
+typedef int (*acpi_op_add) (struct acpi_device * device);
+typedef int (*acpi_op_remove) (struct acpi_device * device, int type);
+typedef int (*acpi_op_lock) (struct acpi_device * device, int type);
+typedef int (*acpi_op_start) (struct acpi_device * device);
+typedef int (*acpi_op_stop) (struct acpi_device * device, int type);
+typedef int (*acpi_op_suspend) (struct acpi_device * device,
+                               pm_message_t state);
+typedef int (*acpi_op_resume) (struct acpi_device * device);
+typedef int (*acpi_op_scan) (struct acpi_device * device);
+typedef int (*acpi_op_bind) (struct acpi_device * device);
+typedef int (*acpi_op_unbind) (struct acpi_device * device);
+typedef int (*acpi_op_shutdown) (struct acpi_device * device);
+
+struct acpi_bus_ops {
+       u32 acpi_op_add:1;
+       u32 acpi_op_remove:1;
+       u32 acpi_op_lock:1;
+       u32 acpi_op_start:1;
+       u32 acpi_op_stop:1;
+       u32 acpi_op_suspend:1;
+       u32 acpi_op_resume:1;
+       u32 acpi_op_scan:1;
+       u32 acpi_op_bind:1;
+       u32 acpi_op_unbind:1;
+       u32 acpi_op_shutdown:1;
+       u32 reserved:21;
+};
 
 struct acpi_device_ops {
-       acpi_op_add             add;
-       acpi_op_remove          remove;
-       acpi_op_lock            lock;
-       acpi_op_start           start;
-       acpi_op_stop            stop;
-       acpi_op_suspend         suspend;
-       acpi_op_resume          resume;
-       acpi_op_scan            scan;
-       acpi_op_bind            bind;
-       acpi_op_unbind          unbind;
-       acpi_op_match           match;
+       acpi_op_add add;
+       acpi_op_remove remove;
+       acpi_op_lock lock;
+       acpi_op_start start;
+       acpi_op_stop stop;
+       acpi_op_suspend suspend;
+       acpi_op_resume resume;
+       acpi_op_scan scan;
+       acpi_op_bind bind;
+       acpi_op_unbind unbind;
+       acpi_op_shutdown shutdown;
 };
 
 struct acpi_driver {
-       struct list_head        node;
-       char                    name[80];
-       char                    class[80];
-       atomic_t                references;
-       char                    *ids;           /* Supported Hardware IDs */
-       struct acpi_device_ops  ops;
+       char name[80];
+       char class[80];
+       const struct acpi_device_id *ids; /* Supported Hardware IDs */
+       struct acpi_device_ops ops;
+       struct device_driver drv;
+       struct module *owner;
 };
 
 /*
@@ -137,60 +143,58 @@ struct acpi_driver {
 /* Status (_STA) */
 
 struct acpi_device_status {
-       u32                     present:1;
-       u32                     enabled:1;
-       u32                     show_in_ui:1;
-       u32                     functional:1;
-       u32                     battery_present:1;
-       u32                     reserved:27;
-};
-
+       u32 present:1;
+       u32 enabled:1;
+       u32 show_in_ui:1;
+       u32 functional:1;
+       u32 battery_present:1;
+       u32 reserved:27;
+};
 
 /* Flags */
 
 struct acpi_device_flags {
-       u32                     dynamic_status:1;
-       u32                     hardware_id:1;
-       u32                     compatible_ids:1;
-       u32                     bus_address:1;
-       u32                     unique_id:1;
-       u32                     removable:1;
-       u32                     ejectable:1;
-       u32                     lockable:1;
-       u32                     suprise_removal_ok:1;
-       u32                     power_manageable:1;
-       u32                     performance_manageable:1;
-       u32                     wake_capable:1; /* Wakeup(_PRW) supported? */
-       u32                     reserved:20;
-};
-
+       u32 dynamic_status:1;
+       u32 hardware_id:1;
+       u32 compatible_ids:1;
+       u32 bus_address:1;
+       u32 unique_id:1;
+       u32 removable:1;
+       u32 ejectable:1;
+       u32 lockable:1;
+       u32 suprise_removal_ok:1;
+       u32 power_manageable:1;
+       u32 performance_manageable:1;
+       u32 wake_capable:1;     /* Wakeup(_PRW) supported? */
+       u32 force_power_state:1;
+       u32 reserved:19;
+};
 
 /* File System */
 
 struct acpi_device_dir {
-       struct proc_dir_entry   *entry;
+       struct proc_dir_entry *entry;
 };
 
 #define acpi_device_dir(d)     ((d)->dir.entry)
 
-
 /* Plug and Play */
 
-typedef char                   acpi_bus_id[5];
-typedef unsigned long          acpi_bus_address;
-typedef char                   acpi_hardware_id[9];
-typedef char                   acpi_unique_id[9];
-typedef char                   acpi_device_name[40];
-typedef char                   acpi_device_class[20];
+typedef char acpi_bus_id[5];
+typedef unsigned long acpi_bus_address;
+typedef char acpi_hardware_id[15];
+typedef char acpi_unique_id[9];
+typedef char acpi_device_name[40];
+typedef char acpi_device_class[20];
 
 struct acpi_device_pnp {
-       acpi_bus_id             bus_id;                        /* Object name */
-       acpi_bus_address        bus_address;                          /* _ADR */
-       acpi_hardware_id        hardware_id;                          /* _HID */
-       struct acpi_compatible_id_list *cid_list;                    /* _CIDs */
-       acpi_unique_id          unique_id;                            /* _UID */
-       acpi_device_name        device_name;             /* Driver-determined */
-       acpi_device_class       device_class;            /*        "          */
+       acpi_bus_id bus_id;     /* Object name */
+       acpi_bus_address bus_address;   /* _ADR */
+       acpi_hardware_id hardware_id;   /* _HID */
+       struct acpi_compatible_id_list *cid_list;       /* _CIDs */
+       acpi_unique_id unique_id;       /* _UID */
+       acpi_device_name device_name;   /* Driver-determined */
+       acpi_device_class device_class; /*        "          */
 };
 
 #define acpi_device_bid(d)     ((d)->pnp.bus_id)
@@ -200,102 +204,105 @@ struct acpi_device_pnp {
 #define acpi_device_name(d)    ((d)->pnp.device_name)
 #define acpi_device_class(d)   ((d)->pnp.device_class)
 
-
 /* Power Management */
 
 struct acpi_device_power_flags {
-       u32                     explicit_get:1;              /* _PSC present? */
-       u32                     power_resources:1;         /* Power resources */
-       u32                     inrush_current:1;         /* Serialize Dx->D0 */
-       u32                     power_removed:1;           /* Optimize Dx->D0 */
-       u32                     reserved:28;
+       u32 explicit_get:1;     /* _PSC present? */
+       u32 power_resources:1;  /* Power resources */
+       u32 inrush_current:1;   /* Serialize Dx->D0 */
+       u32 power_removed:1;    /* Optimize Dx->D0 */
+       u32 reserved:28;
 };
 
 struct acpi_device_power_state {
        struct {
-               u8                      valid:1;        
-               u8                      explicit_set:1;      /* _PSx present? */
-               u8                      reserved:6;
-       }                       flags;
-       int                     power;            /* % Power (compared to D0) */
-       int                     latency;        /* Dx->D0 time (microseconds) */
-       struct acpi_handle_list resources;      /* Power resources referenced */
+               u8 valid:1;
+               u8 explicit_set:1;      /* _PSx present? */
+               u8 reserved:6;
+       } flags;
+       int power;              /* % Power (compared to D0) */
+       int latency;            /* Dx->D0 time (microseconds) */
+       struct acpi_handle_list resources;      /* Power resources referenced */
 };
 
 struct acpi_device_power {
-       int                     state;                       /* Current state */
+       int state;              /* Current state */
        struct acpi_device_power_flags flags;
-       struct acpi_device_power_state states[4];     /* Power states (D0-D3) */
-};
-
+       struct acpi_device_power_state states[4];       /* Power states (D0-D3) 
*/
+};
 
 /* Performance Management */
 
 struct acpi_device_perf_flags {
-       u8                      reserved:8;
+       u8 reserved:8;
 };
 
 struct acpi_device_perf_state {
        struct {
-               u8                      valid:1;        
-               u8                      reserved:7;
-       }                       flags;
-       u8                      power;            /* % Power (compared to P0) */
-       u8                      performance;      /* % Performance (    "   ) */
-       int                     latency;        /* Px->P0 time (microseconds) */
+               u8 valid:1;
+               u8 reserved:7;
+       } flags;
+       u8 power;               /* % Power (compared to P0) */
+       u8 performance;         /* % Performance (    "   ) */
+       int latency;            /* Px->P0 time (microseconds) */
 };
 
 struct acpi_device_perf {
-       int                     state;
+       int state;
        struct acpi_device_perf_flags flags;
-       int                     state_count;
+       int state_count;
        struct acpi_device_perf_state *states;
 };
 
 /* Wakeup Management */
 struct acpi_device_wakeup_flags {
-       u8      valid:1; /* Can successfully enable wakeup? */
-       u8      run_wake:1; /* Run-Wake GPE devices */
+       u8 valid:1;             /* Can successfully enable wakeup? */
+       u8 run_wake:1;          /* Run-Wake GPE devices */
 };
 
 struct acpi_device_wakeup_state {
-       u8      enabled:1;
-       u8      active:1;
+       u8 enabled:1;
 };
 
 struct acpi_device_wakeup {
-       acpi_handle             gpe_device;
-       acpi_integer            gpe_number;;
-       acpi_integer            sleep_state;
-       struct acpi_handle_list resources;
-       struct acpi_device_wakeup_state state;
-       struct acpi_device_wakeup_flags flags;
+       acpi_handle gpe_device;
+       acpi_integer gpe_number;
+       acpi_integer sleep_state;
+       struct acpi_handle_list resources;
+       struct acpi_device_wakeup_state state;
+       struct acpi_device_wakeup_flags flags;
 };
 
 /* Device */
 
 struct acpi_device {
-       acpi_handle             handle;
-       struct acpi_device      *parent;
-       struct list_head        children;
-       struct list_head        node;
-       struct list_head        wakeup_list;
-       struct list_head        g_list;
+       acpi_handle handle;
+       struct acpi_device *parent;
+       struct list_head children;
+       struct list_head node;
+       struct list_head wakeup_list;
+       struct list_head g_list;
        struct acpi_device_status status;
        struct acpi_device_flags flags;
-       struct acpi_device_pnp  pnp;
+       struct acpi_device_pnp pnp;
        struct acpi_device_power power;
        struct acpi_device_wakeup wakeup;
-       struct acpi_device_perf performance;
-       struct acpi_device_dir  dir;
-       struct acpi_device_ops  ops;
-       struct acpi_driver      *driver;
-       void                    *driver_data;
-       struct kobject          kobj;
+       struct acpi_device_perf performance;
+       struct acpi_device_dir dir;
+       struct acpi_device_ops ops;
+       struct acpi_driver *driver;
+       void *driver_data;
+       struct device dev;
+       struct acpi_bus_ops bus_ops;    /* workaround for different code path 
for hotplug */
+       enum acpi_bus_removal_type removal_type;        /* indicate for 
different removal type */
 };
 
 #define acpi_driver_data(d)    ((d)->driver_data)
-
+#define to_acpi_device(d)      container_of(d, struct acpi_device, dev)
+#define to_acpi_driver(d)      container_of(d, struct acpi_driver, drv)
+
+/* acpi_device.dev.bus == &acpi_bus_type */
+extern struct bus_type acpi_bus_type;
 
 /*
  * Events
@@ -303,38 +310,80 @@ struct acpi_device {
  */
 
 struct acpi_bus_event {
-       struct list_head        node;
-       acpi_device_class       device_class;
-       acpi_bus_id             bus_id;
-       u32                     type;
-       u32                     data;
-};
-
-extern struct subsystem acpi_subsys;
-
+       struct list_head node;
+       acpi_device_class device_class;
+       acpi_bus_id bus_id;
+       u32 type;
+       u32 data;
+};
+
+extern struct kobject *acpi_kobj;
+extern int acpi_bus_generate_netlink_event(const char*, const char*, u8, int);
+void acpi_bus_private_data_handler(acpi_handle, u32, void *);
+int acpi_bus_get_private_data(acpi_handle, void **);
+extern int acpi_notifier_call_chain(struct acpi_device *, u32, u32);
+extern int register_acpi_notifier(struct notifier_block *);
+extern int unregister_acpi_notifier(struct notifier_block *);
 /*
  * External Functions
  */
 
 int acpi_bus_get_device(acpi_handle handle, struct acpi_device **device);
 void acpi_bus_data_handler(acpi_handle handle, u32 function, void *context);
-int acpi_bus_get_status (struct acpi_device *device);
-int acpi_bus_get_power (acpi_handle handle, int *state);
-int acpi_bus_set_power (acpi_handle handle, int state);
-int acpi_bus_generate_event (struct acpi_device *device, u8 type, int data);
-int acpi_bus_receive_event (struct acpi_bus_event *event);
-int acpi_bus_register_driver (struct acpi_driver *driver);
-int acpi_bus_unregister_driver (struct acpi_driver *driver);
-int acpi_bus_scan (struct acpi_device *start);
+int acpi_bus_get_status(struct acpi_device *device);
+int acpi_bus_get_power(acpi_handle handle, int *state);
+int acpi_bus_set_power(acpi_handle handle, int state);
+#ifdef CONFIG_ACPI_PROC_EVENT
+int acpi_bus_generate_proc_event(struct acpi_device *device, u8 type, int 
data);
+int acpi_bus_generate_proc_event4(const char *class, const char *bid, u8 type, 
int data);
+int acpi_bus_receive_event(struct acpi_bus_event *event);
+#else
+static inline int acpi_bus_generate_proc_event(struct acpi_device *device, u8 
type, int data)
+       { return 0; }
+#endif
+int acpi_bus_register_driver(struct acpi_driver *driver);
+void acpi_bus_unregister_driver(struct acpi_driver *driver);
+int acpi_bus_add(struct acpi_device **child, struct acpi_device *parent,
+                acpi_handle handle, int type);
 int acpi_bus_trim(struct acpi_device *start, int rmdevice);
-int acpi_bus_add (struct acpi_device **child, struct acpi_device *parent,
-               acpi_handle handle, int type);
-
-
-int acpi_match_ids (struct acpi_device *device, char   *ids);
+int acpi_bus_start(struct acpi_device *device);
+acpi_status acpi_bus_get_ejd(acpi_handle handle, acpi_handle * ejd);
+int acpi_match_device_ids(struct acpi_device *device,
+                         const struct acpi_device_id *ids);
 int acpi_create_dir(struct acpi_device *);
 void acpi_remove_dir(struct acpi_device *);
 
-#endif /*CONFIG_ACPI_BUS*/
+/*
+ * Bind physical devices with ACPI devices
+ */
+#include <linux/device.h>
+struct acpi_bus_type {
+       struct list_head list;
+       struct bus_type *bus;
+       /* For general devices under the bus */
+       int (*find_device) (struct device *, acpi_handle *);
+       /* For bridges, such as PCI root bridge, IDE controller */
+       int (*find_bridge) (struct device *, acpi_handle *);
+};
+int register_acpi_bus_type(struct acpi_bus_type *);
+int unregister_acpi_bus_type(struct acpi_bus_type *);
+struct device *acpi_get_physical_device(acpi_handle);
+/* helper */
+acpi_handle acpi_get_child(acpi_handle, acpi_integer);
+acpi_handle acpi_get_pci_rootbridge_handle(unsigned int, unsigned int);
+#define DEVICE_ACPI_HANDLE(dev) ((acpi_handle)((dev)->archdata.acpi_handle))
+
+#ifdef CONFIG_PM_SLEEP
+int acpi_pm_device_sleep_state(struct device *, int, int *);
+#else /* !CONFIG_PM_SLEEP */
+static inline int acpi_pm_device_sleep_state(struct device *d, int w, int *p)
+{
+       if (p)
+               *p = ACPI_STATE_D0;
+       return ACPI_STATE_D3;
+}
+#endif /* !CONFIG_PM_SLEEP */
+
+#endif                         /* CONFIG_ACPI */
 
 #endif /*__ACPI_BUS_H__*/
diff -r 5cbfc6c24d32 -r 13cba2e78a65 xen/include/acpi/acpiosxf.h
--- a/xen/include/acpi/acpiosxf.h       Tue Mar 18 13:14:26 2008 +0000
+++ b/xen/include/acpi/acpiosxf.h       Tue Mar 18 14:55:36 2008 +0000
@@ -7,9 +7,8 @@
  *
  *****************************************************************************/
 
-
-/*
- * Copyright (C) 2000 - 2005, R. Byron Moore
+/*
+ * Copyright (C) 2000 - 2007, R. Byron Moore
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -51,335 +50,234 @@
 #include "platform/acenv.h"
 #include "actypes.h"
 
-
-/* Priorities for acpi_os_queue_for_execution */
-
-#define OSD_PRIORITY_GPE            1
-#define OSD_PRIORITY_HIGH           2
-#define OSD_PRIORITY_MED            3
-#define OSD_PRIORITY_LO             4
+/* Types for acpi_os_execute */
+
+typedef enum {
+       OSL_GLOBAL_LOCK_HANDLER,
+       OSL_NOTIFY_HANDLER,
+       OSL_GPE_HANDLER,
+       OSL_DEBUGGER_THREAD,
+       OSL_EC_POLL_HANDLER,
+       OSL_EC_BURST_HANDLER
+} acpi_execute_type;
 
 #define ACPI_NO_UNIT_LIMIT          ((u32) -1)
 #define ACPI_MUTEX_SEM              1
 
-
 /* Functions for acpi_os_signal */
 
 #define ACPI_SIGNAL_FATAL           0
 #define ACPI_SIGNAL_BREAKPOINT      1
 
-struct acpi_signal_fatal_info
-{
-       u32                             type;
-       u32                             code;
-       u32                             argument;
+struct acpi_signal_fatal_info {
+       u32 type;
+       u32 code;
+       u32 argument;
 };
 
-
 /*
  * OSL Initialization and shutdown primitives
  */
-
-acpi_status
-acpi_os_initialize (
-       void);
-
-acpi_status
-acpi_os_terminate (
-       void);
-
+acpi_status acpi_os_initialize(void);
+
+acpi_status acpi_os_terminate(void);
 
 /*
  * ACPI Table interfaces
  */
-
-acpi_status
-acpi_os_get_root_pointer (
-       u32                             flags,
-       struct acpi_pointer             *address);
-
-acpi_status
-acpi_os_predefined_override (
-       const struct acpi_predefined_names *init_val,
-       acpi_string                         *new_val);
-
-acpi_status
-acpi_os_table_override (
-       struct acpi_table_header        *existing_table,
-       struct acpi_table_header        **new_table);
-
-
-/*
- * Synchronization primitives
- */
-
-acpi_status
-acpi_os_create_semaphore (
-       u32                             max_units,
-       u32                             initial_units,
-       acpi_handle                     *out_handle);
-
-acpi_status
-acpi_os_delete_semaphore (
-       acpi_handle                     handle);
-
-acpi_status
-acpi_os_wait_semaphore (
-       acpi_handle                     handle,
-       u32                             units,
-       u16                             timeout);
-
-acpi_status
-acpi_os_signal_semaphore (
-       acpi_handle                     handle,
-       u32                             units);
-
-acpi_status
-acpi_os_create_lock (
-       acpi_handle                     *out_handle);
-
-void
-acpi_os_delete_lock (
-       acpi_handle                     handle);
-
-void
-acpi_os_acquire_lock (
-       acpi_handle                     handle,
-       u32                             flags);
-
-void
-acpi_os_release_lock (
-       acpi_handle                     handle,
-       u32                             flags);
-
+acpi_physical_address acpi_os_get_root_pointer(void);
+
+acpi_status
+acpi_os_predefined_override(const struct acpi_predefined_names *init_val,
+                           acpi_string * new_val);
+
+acpi_status
+acpi_os_table_override(struct acpi_table_header *existing_table,
+                      struct acpi_table_header **new_table);
+
+/*
+ * Spinlock primitives
+ */
+acpi_status acpi_os_create_lock(acpi_spinlock * out_handle);
+
+void acpi_os_delete_lock(acpi_spinlock handle);
+
+acpi_cpu_flags acpi_os_acquire_lock(acpi_spinlock handle);
+
+void acpi_os_release_lock(acpi_spinlock handle, acpi_cpu_flags flags);
+
+/*
+ * Semaphore primitives
+ */
+acpi_status
+acpi_os_create_semaphore(u32 max_units,
+                        u32 initial_units, acpi_semaphore * out_handle);
+
+acpi_status acpi_os_delete_semaphore(acpi_semaphore handle);
+
+acpi_status
+acpi_os_wait_semaphore(acpi_semaphore handle, u32 units, u16 timeout);
+
+acpi_status acpi_os_signal_semaphore(acpi_semaphore handle, u32 units);
+
+/*
+ * Mutex primitives
+ */
+acpi_status acpi_os_create_mutex(acpi_mutex * out_handle);
+
+void acpi_os_delete_mutex(acpi_mutex handle);
+
+acpi_status acpi_os_acquire_mutex(acpi_mutex handle, u16 timeout);
+
+void acpi_os_release_mutex(acpi_mutex handle);
+
+/* Temporary macros for Mutex* interfaces, map to existing semaphore xfaces */
+
+#define acpi_os_create_mutex(out_handle)    acpi_os_create_semaphore (1, 1, 
out_handle)
+#define acpi_os_delete_mutex(handle)        (void) acpi_os_delete_semaphore 
(handle)
+#define acpi_os_acquire_mutex(handle,time)  acpi_os_wait_semaphore (handle, 1, 
time)
+#define acpi_os_release_mutex(handle)       (void) acpi_os_signal_semaphore 
(handle, 1)
 
 /*
  * Memory allocation and mapping
  */
-
-void *
-acpi_os_allocate (
-       acpi_size                       size);
-
-void
-acpi_os_free (
-       void *                          memory);
-
-acpi_status
-acpi_os_map_memory (
-       acpi_physical_address           physical_address,
-       acpi_size                       size,
-       void __iomem                  **logical_address);
-
-void
-acpi_os_unmap_memory (
-       void __iomem                  *logical_address,
-       acpi_size                       size);
+void *acpi_os_allocate(acpi_size size);
+
+void __iomem *acpi_os_map_memory(acpi_physical_address where,
+                                acpi_native_uint length);
+
+void acpi_os_unmap_memory(void __iomem * logical_address, acpi_size size);
 
 #ifdef ACPI_FUTURE_USAGE
 acpi_status
-acpi_os_get_physical_address (
-       void                            *logical_address,
-       acpi_physical_address           *physical_address);
+acpi_os_get_physical_address(void *logical_address,
+                            acpi_physical_address * physical_address);
 #endif
 
+/*
+ * Memory/Object Cache
+ */
+acpi_status
+acpi_os_create_cache(char *cache_name,
+                    u16 object_size,
+                    u16 max_depth, acpi_cache_t ** return_cache);
+
+acpi_status acpi_os_delete_cache(acpi_cache_t * cache);
+
+acpi_status acpi_os_purge_cache(acpi_cache_t * cache);
+
+void *acpi_os_acquire_object(acpi_cache_t * cache);
+
+acpi_status acpi_os_release_object(acpi_cache_t * cache, void *object);
 
 /*
  * Interrupt handlers
  */
-
-acpi_status
-acpi_os_install_interrupt_handler (
-       u32                             gsi,
-       acpi_osd_handler                service_routine,
-       void                            *context);
-
-acpi_status
-acpi_os_remove_interrupt_handler (
-       u32                             gsi,
-       acpi_osd_handler                service_routine);
-
+acpi_status
+acpi_os_install_interrupt_handler(u32 gsi,
+                                 acpi_osd_handler service_routine,
+                                 void *context);
+
+acpi_status
+acpi_os_remove_interrupt_handler(u32 gsi, acpi_osd_handler service_routine);
+
+void acpi_os_gpe_count(u32 gpe_number);
+void acpi_os_fixed_event_count(u32 fixed_event_number);
 
 /*
  * Threads and Scheduling
  */
-
-u32
-acpi_os_get_thread_id (
-       void);
-
-acpi_status
-acpi_os_queue_for_execution (
-       u32                             priority,
-       acpi_osd_exec_callback          function,
-       void                            *context);
-
-void
-acpi_os_wait_events_complete (
-       void                            *context);
-
-void
-acpi_os_sleep (
-       acpi_integer                    milliseconds);
-
-void
-acpi_os_stall (
-       u32                             microseconds);
-
+acpi_thread_id acpi_os_get_thread_id(void);
+
+acpi_status
+acpi_os_execute(acpi_execute_type type,
+               acpi_osd_exec_callback function, void *context);
+
+void acpi_os_wait_events_complete(void *context);
+
+void acpi_os_sleep(acpi_integer milliseconds);
+
+void acpi_os_stall(u32 microseconds);
 
 /*
  * Platform and hardware-independent I/O interfaces
  */
-
-acpi_status
-acpi_os_read_port (
-       acpi_io_address                 address,
-       u32                             *value,
-       u32                             width);
-
-acpi_status
-acpi_os_write_port (
-       acpi_io_address                 address,
-       u32                             value,
-       u32                             width);
-
+acpi_status acpi_os_read_port(acpi_io_address address, u32 * value, u32 width);
+
+acpi_status acpi_os_write_port(acpi_io_address address, u32 value, u32 width);
 
 /*
  * Platform and hardware-independent physical memory interfaces
  */
-
-acpi_status
-acpi_os_read_memory (
-       acpi_physical_address           address,
-       u32                             *value,
-       u32                             width);
-
-acpi_status
-acpi_os_write_memory (
-       acpi_physical_address           address,
-       u32                             value,
-       u32                             width);
-
+acpi_status
+acpi_os_read_memory(acpi_physical_address address, u32 * value, u32 width);
+
+acpi_status
+acpi_os_write_memory(acpi_physical_address address, u32 value, u32 width);
 
 /*
  * Platform and hardware-independent PCI configuration space access
  * Note: Can't use "Register" as a parameter, changed to "Reg" --
  * certain compilers complain.
  */
-
-acpi_status
-acpi_os_read_pci_configuration (
-       struct acpi_pci_id              *pci_id,
-       u32                             reg,
-       void                            *value,
-       u32                             width);
-
-acpi_status
-acpi_os_write_pci_configuration (
-       struct acpi_pci_id              *pci_id,
-       u32                             reg,
-       acpi_integer                    value,
-       u32                             width);
+acpi_status
+acpi_os_read_pci_configuration(struct acpi_pci_id *pci_id,
+                              u32 reg, u32 *value, u32 width);
+
+acpi_status
+acpi_os_write_pci_configuration(struct acpi_pci_id *pci_id,
+                               u32 reg, acpi_integer value, u32 width);
 
 /*
  * Interim function needed for PCI IRQ routing
  */
-
 void
-acpi_os_derive_pci_id(
-       acpi_handle                     rhandle,
-       acpi_handle                     chandle,
-       struct acpi_pci_id              **pci_id);
+acpi_os_derive_pci_id(acpi_handle rhandle,
+                     acpi_handle chandle, struct acpi_pci_id **pci_id);
 
 /*
  * Miscellaneous
  */
-
-u8
-acpi_os_readable (
-       void                            *pointer,
-       acpi_size                       length);
+acpi_status acpi_os_validate_interface(char *interface);
+acpi_status acpi_osi_invalidate(char* interface);
+
+acpi_status
+acpi_os_validate_address(u8 space_id, acpi_physical_address address,
+                        acpi_size length, char *name);
+
+u64 acpi_os_get_timer(void);
+
+acpi_status acpi_os_signal(u32 function, void *info);
+
+/*
+ * Debug print routines
+ */
+void ACPI_INTERNAL_VAR_XFACE acpi_os_printf(const char *format, ...);
+
+void acpi_os_vprintf(const char *format, va_list args);
+
+void acpi_os_redirect_output(void *destination);
 
 #ifdef ACPI_FUTURE_USAGE
-u8
-acpi_os_writable (
-       void                            *pointer,
-       acpi_size                       length);
+/*
+ * Debug input
+ */
+u32 acpi_os_get_line(char *buffer);
 #endif
 
-u64
-acpi_os_get_timer (
-       void);
-
-acpi_status
-acpi_os_signal (
-       u32                             function,
-       void                            *info);
-
-/*
- * Debug print routines
- */
-
-void ACPI_INTERNAL_VAR_XFACE
-acpi_os_printf (
-       const char                      *format,
-       ...);
-
-void
-acpi_os_vprintf (
-       const char                      *format,
-       va_list                 args);
-
-void
-acpi_os_redirect_output (
-       void                            *destination);
-
-
-/*
- * Debug input
- */
-
-#ifdef ACPI_FUTURE_USAGE
-u32
-acpi_os_get_line (
-       char                            *buffer);
-#endif
-
-
 /*
  * Directory manipulation
  */
-
-void *
-acpi_os_open_directory (
-       char                            *pathname,
-       char                            *wildcard_spec,
-       char                            requested_file_type);
+void *acpi_os_open_directory(char *pathname,
+                            char *wildcard_spec, char requested_file_type);
 
 /* requeste_file_type values */
 
 #define REQUEST_FILE_ONLY                   0
 #define REQUEST_DIR_ONLY                    1
 
-
-char *
-acpi_os_get_next_filename (
-       void                            *dir_handle);
-
-void
-acpi_os_close_directory (
-       void                            *dir_handle);
-
-/*
- * Debug
- */
-
-void
-acpi_os_dbg_assert(
-       void                            *failed_assertion,
-       void                            *file_name,
-       u32                             line_number,
-       char                            *message);
-
-
-#endif /* __ACPIOSXF_H__ */
+char *acpi_os_get_next_filename(void *dir_handle);
+
+void acpi_os_close_directory(void *dir_handle);
+
+#endif                         /* __ACPIOSXF_H__ */
diff -r 5cbfc6c24d32 -r 13cba2e78a65 xen/include/acpi/acpixf.h
--- a/xen/include/acpi/acpixf.h Tue Mar 18 13:14:26 2008 +0000
+++ b/xen/include/acpi/acpixf.h Tue Mar 18 14:55:36 2008 +0000
@@ -6,7 +6,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2005, R. Byron Moore
+ * Copyright (C) 2000 - 2007, R. Byron Moore
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -42,456 +42,301 @@
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #ifndef __ACXFACE_H__
 #define __ACXFACE_H__
 
 #include "actypes.h"
 #include "actbl.h"
 
-
- /*
+/*
  * Global interfaces
  */
-
-acpi_status
-acpi_initialize_subsystem (
-       void);
-
-acpi_status
-acpi_enable_subsystem (
-       u32                             flags);
-
-acpi_status
-acpi_initialize_objects (
-       u32                             flags);
-
-acpi_status
-acpi_terminate (
-       void);
-
-#ifdef ACPI_FUTURE_USAGE
-acpi_status
-acpi_subsystem_status (
-       void);
-#endif
-
-acpi_status
-acpi_enable (
-       void);
-
-acpi_status
-acpi_disable (
-       void);
-
-#ifdef ACPI_FUTURE_USAGE
-acpi_status
-acpi_get_system_info (
-       struct acpi_buffer              *ret_buffer);
-#endif
-
-const char *
-acpi_format_exception (
-       acpi_status                     exception);
-
-acpi_status
-acpi_purge_cached_objects (
-       void);
-
-#ifdef ACPI_FUTURE_USAGE
-acpi_status
-acpi_install_initialization_handler (
-       acpi_init_handler               handler,
-       u32                             function);
-#endif
-
-/*
- * ACPI Memory manager
- */
-
-void *
-acpi_allocate (
-       u32                             size);
-
-void *
-acpi_callocate (
-       u32                             size);
-
-void
-acpi_free (
-       void                            *address);
-
+acpi_status
+acpi_initialize_tables(struct acpi_table_desc *initial_storage,
+                      u32 initial_table_count, u8 allow_resize);
+
+acpi_status acpi_initialize_subsystem(void);
+
+acpi_status acpi_enable_subsystem(u32 flags);
+
+acpi_status acpi_initialize_objects(u32 flags);
+
+acpi_status acpi_terminate(void);
+
+#ifdef ACPI_FUTURE_USAGE
+acpi_status acpi_subsystem_status(void);
+#endif
+
+acpi_status acpi_enable(void);
+
+acpi_status acpi_disable(void);
+
+#ifdef ACPI_FUTURE_USAGE
+acpi_status acpi_get_system_info(struct acpi_buffer *ret_buffer);
+#endif
+
+const char *acpi_format_exception(acpi_status exception);
+
+acpi_status acpi_purge_cached_objects(void);
+
+#ifdef ACPI_FUTURE_USAGE
+acpi_status
+acpi_install_initialization_handler(acpi_init_handler handler, u32 function);
+#endif
+
+/*
+ * ACPI Memory management
+ */
+void *acpi_allocate(u32 size);
+
+void *acpi_callocate(u32 size);
+
+void acpi_free(void *address);
 
 /*
  * ACPI table manipulation interfaces
  */
-
-acpi_status
-acpi_find_root_pointer (
-       u32                             flags,
-       struct acpi_pointer             *rsdp_address);
-
-acpi_status
-acpi_load_tables (
-       void);
-
-#ifdef ACPI_FUTURE_USAGE
-acpi_status
-acpi_load_table (
-       struct acpi_table_header        *table_ptr);
-
-acpi_status
-acpi_unload_table (
-       acpi_table_type                 table_type);
-
-acpi_status
-acpi_get_table_header (
-       acpi_table_type                 table_type,
-       u32                             instance,
-       struct acpi_table_header        *out_table_header);
-#endif  /*  ACPI_FUTURE_USAGE  */
-
-acpi_status
-acpi_get_table (
-       acpi_table_type                 table_type,
-       u32                             instance,
-       struct acpi_buffer              *ret_buffer);
-
-acpi_status
-acpi_get_firmware_table (
-       acpi_string                     signature,
-       u32                             instance,
-       u32                             flags,
-       struct acpi_table_header        **table_pointer);
-
+acpi_status acpi_reallocate_root_table(void);
+
+acpi_status acpi_find_root_pointer(acpi_native_uint * rsdp_address);
+
+acpi_status acpi_load_tables(void);
+
+acpi_status acpi_load_table(struct acpi_table_header *table_ptr);
+
+acpi_status acpi_unload_table_id(acpi_owner_id id);
+
+acpi_status
+acpi_get_table_header(acpi_string signature,
+                     acpi_native_uint instance,
+                     struct acpi_table_header *out_table_header);
+
+acpi_status
+acpi_get_table(acpi_string signature,
+              acpi_native_uint instance, struct acpi_table_header **out_table);
+
+acpi_status
+acpi_get_table_by_index(acpi_native_uint table_index,
+                       struct acpi_table_header **out_table);
 
 /*
  * Namespace and name interfaces
  */
-
-acpi_status
-acpi_walk_namespace (
-       acpi_object_type                type,
-       acpi_handle                     start_object,
-       u32                             max_depth,
-       acpi_walk_callback              user_function,
-       void                            *context,
-       void                            **return_value);
-
-acpi_status
-acpi_get_devices (
-       char                            *HID,
-       acpi_walk_callback              user_function,
-       void                            *context,
-       void                            **return_value);
-
-acpi_status
-acpi_get_name (
-       acpi_handle                     handle,
-       u32                             name_type,
-       struct acpi_buffer              *ret_path_ptr);
-
-acpi_status
-acpi_get_handle (
-       acpi_handle                     parent,
-       acpi_string                     pathname,
-       acpi_handle                     *ret_handle);
-
-acpi_status
-acpi_attach_data (
-       acpi_handle                     obj_handle,
-       acpi_object_handler             handler,
-       void                            *data);
-
-acpi_status
-acpi_detach_data (
-       acpi_handle                     obj_handle,
-       acpi_object_handler             handler);
-
-acpi_status
-acpi_get_data (
-       acpi_handle                     obj_handle,
-       acpi_object_handler             handler,
-       void                            **data);
-
+acpi_status
+acpi_walk_namespace(acpi_object_type type,
+                   acpi_handle start_object,
+                   u32 max_depth,
+                   acpi_walk_callback user_function,
+                   void *context, void **return_value);
+
+acpi_status
+acpi_get_devices(const char *HID,
+                acpi_walk_callback user_function,
+                void *context, void **return_value);
+
+acpi_status
+acpi_get_name(acpi_handle handle,
+             u32 name_type, struct acpi_buffer *ret_path_ptr);
+
+acpi_status
+acpi_get_handle(acpi_handle parent,
+               acpi_string pathname, acpi_handle * ret_handle);
+
+acpi_status
+acpi_attach_data(acpi_handle obj_handle,
+                acpi_object_handler handler, void *data);
+
+acpi_status
+acpi_detach_data(acpi_handle obj_handle, acpi_object_handler handler);
+
+acpi_status
+acpi_get_data(acpi_handle obj_handle, acpi_object_handler handler, void 
**data);
+
+acpi_status
+acpi_debug_trace(char *name, u32 debug_level, u32 debug_layer, u32 flags);
 
 /*
  * Object manipulation and enumeration
  */
-
-acpi_status
-acpi_evaluate_object (
-       acpi_handle                     object,
-       acpi_string                     pathname,
-       struct acpi_object_list         *parameter_objects,
-       struct acpi_buffer              *return_object_buffer);
-
-#ifdef ACPI_FUTURE_USAGE
-acpi_status
-acpi_evaluate_object_typed (
-       acpi_handle                     object,
-       acpi_string                     pathname,
-       struct acpi_object_list         *external_params,
-       struct acpi_buffer              *return_buffer,
-       acpi_object_type                return_type);
-#endif
-
-acpi_status
-acpi_get_object_info (
-       acpi_handle                     handle,
-       struct acpi_buffer              *return_buffer);
-
-acpi_status
-acpi_get_next_object (
-       acpi_object_type                type,
-       acpi_handle                     parent,
-       acpi_handle                     child,
-       acpi_handle                     *out_handle);
-
-acpi_status
-acpi_get_type (
-       acpi_handle                     object,
-       acpi_object_type                *out_type);
-
-acpi_status
-acpi_get_parent (
-       acpi_handle                     object,
-       acpi_handle                     *out_handle);
-
+acpi_status
+acpi_evaluate_object(acpi_handle object,
+                    acpi_string pathname,
+                    struct acpi_object_list *parameter_objects,
+                    struct acpi_buffer *return_object_buffer);
+
+#ifdef ACPI_FUTURE_USAGE
+acpi_status
+acpi_evaluate_object_typed(acpi_handle object,
+                          acpi_string pathname,
+                          struct acpi_object_list *external_params,
+                          struct acpi_buffer *return_buffer,
+                          acpi_object_type return_type);
+#endif
+
+acpi_status
+acpi_get_object_info(acpi_handle handle, struct acpi_buffer *return_buffer);
+
+acpi_status
+acpi_get_next_object(acpi_object_type type,
+                    acpi_handle parent,
+                    acpi_handle child, acpi_handle * out_handle);
+
+acpi_status acpi_get_type(acpi_handle object, acpi_object_type * out_type);
+
+acpi_status acpi_get_id(acpi_handle object, acpi_owner_id * out_type);
+
+acpi_status acpi_get_parent(acpi_handle object, acpi_handle * out_handle);
 
 /*
  * Event handler interfaces
  */
-
-acpi_status
-acpi_install_fixed_event_handler (
-       u32                             acpi_event,
-       acpi_event_handler              handler,
-       void                            *context);
-
-acpi_status
-acpi_remove_fixed_event_handler (
-       u32                             acpi_event,
-       acpi_event_handler              handler);
-
-acpi_status
-acpi_install_notify_handler (
-       acpi_handle                     device,
-       u32                             handler_type,
-       acpi_notify_handler             handler,
-       void                            *context);
-
-acpi_status
-acpi_remove_notify_handler (
-       acpi_handle                     device,
-       u32                             handler_type,
-       acpi_notify_handler             handler);
-
-acpi_status
-acpi_install_address_space_handler (
-       acpi_handle                     device,
-       acpi_adr_space_type             space_id,
-       acpi_adr_space_handler          handler,
-       acpi_adr_space_setup            setup,
-       void                            *context);
-
-acpi_status
-acpi_remove_address_space_handler (
-       acpi_handle                     device,
-       acpi_adr_space_type             space_id,
-       acpi_adr_space_handler          handler);
-
-acpi_status
-acpi_install_gpe_handler (
-       acpi_handle                     gpe_device,
-       u32                             gpe_number,
-       u32                             type,
-       acpi_event_handler              address,
-       void                            *context);
-
-#ifdef ACPI_FUTURE_USAGE
-acpi_status
-acpi_install_exception_handler (
-       acpi_exception_handler          handler);
-#endif
-
+acpi_status
+acpi_install_fixed_event_handler(u32 acpi_event,
+                                acpi_event_handler handler, void *context);
+
+acpi_status
+acpi_remove_fixed_event_handler(u32 acpi_event, acpi_event_handler handler);
+
+acpi_status
+acpi_install_notify_handler(acpi_handle device,
+                           u32 handler_type,
+                           acpi_notify_handler handler, void *context);
+
+acpi_status
+acpi_remove_notify_handler(acpi_handle device,
+                          u32 handler_type, acpi_notify_handler handler);
+
+acpi_status
+acpi_install_address_space_handler(acpi_handle device,
+                                  acpi_adr_space_type space_id,
+                                  acpi_adr_space_handler handler,
+                                  acpi_adr_space_setup setup, void *context);
+
+acpi_status
+acpi_remove_address_space_handler(acpi_handle device,
+                                 acpi_adr_space_type space_id,
+                                 acpi_adr_space_handler handler);
+
+acpi_status
+acpi_install_gpe_handler(acpi_handle gpe_device,
+                        u32 gpe_number,
+                        u32 type, acpi_event_handler address, void *context);
+
+#ifdef ACPI_FUTURE_USAGE
+acpi_status acpi_install_exception_handler(acpi_exception_handler handler);
+#endif
 
 /*
  * Event interfaces
  */
-
-acpi_status
-acpi_acquire_global_lock (
-       u16                             timeout,
-       u32                             *handle);
-
-acpi_status
-acpi_release_global_lock (
-       u32                             handle);
-
-acpi_status
-acpi_remove_gpe_handler (
-       acpi_handle                     gpe_device,
-       u32                             gpe_number,
-       acpi_event_handler              address);
-
-acpi_status
-acpi_enable_event (
-       u32                             event,
-       u32                             flags);
-
-acpi_status
-acpi_disable_event (
-       u32                             event,
-       u32                             flags);
-
-acpi_status
-acpi_clear_event (
-       u32                             event);
-
-#ifdef ACPI_FUTURE_USAGE
-acpi_status
-acpi_get_event_status (
-       u32                             event,
-       acpi_event_status               *event_status);
-#endif  /*  ACPI_FUTURE_USAGE  */
-
-acpi_status
-acpi_set_gpe_type (
-       acpi_handle                     gpe_device,
-       u32                             gpe_number,
-       u8                              type);
-
-acpi_status
-acpi_enable_gpe (
-       acpi_handle                     gpe_device,
-       u32                             gpe_number,
-       u32                             flags);
-
-acpi_status
-acpi_disable_gpe (
-       acpi_handle                     gpe_device,
-       u32                             gpe_number,
-       u32                             flags);
-
-acpi_status
-acpi_clear_gpe (
-       acpi_handle                     gpe_device,
-       u32                             gpe_number,
-       u32                             flags);
-
-#ifdef ACPI_FUTURE_USAGE
-acpi_status
-acpi_get_gpe_status (
-       acpi_handle                     gpe_device,
-       u32                             gpe_number,
-       u32                             flags,
-       acpi_event_status               *event_status);
-#endif  /*  ACPI_FUTURE_USAGE  */
-
-acpi_status
-acpi_install_gpe_block (
-       acpi_handle                     gpe_device,
-       struct acpi_generic_address     *gpe_block_address,
-       u32                             register_count,
-       u32                             interrupt_level);
-
-acpi_status
-acpi_remove_gpe_block (
-       acpi_handle                     gpe_device);
-
+acpi_status acpi_acquire_global_lock(u16 timeout, u32 * handle);
+
+acpi_status acpi_release_global_lock(u32 handle);
+
+acpi_status
+acpi_remove_gpe_handler(acpi_handle gpe_device,
+                       u32 gpe_number, acpi_event_handler address);
+
+acpi_status acpi_enable_event(u32 event, u32 flags);
+
+acpi_status acpi_disable_event(u32 event, u32 flags);
+
+acpi_status acpi_clear_event(u32 event);
+
+#ifdef ACPI_FUTURE_USAGE
+acpi_status acpi_get_event_status(u32 event, acpi_event_status * event_status);
+#endif                         /*  ACPI_FUTURE_USAGE  */
+
+acpi_status acpi_set_gpe_type(acpi_handle gpe_device, u32 gpe_number, u8 type);
+
+acpi_status acpi_enable_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags);
+
+acpi_status acpi_disable_gpe(acpi_handle gpe_device, u32 gpe_number, u32 
flags);
+
+acpi_status acpi_clear_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags);
+
+#ifdef ACPI_FUTURE_USAGE
+acpi_status
+acpi_get_gpe_status(acpi_handle gpe_device,
+                   u32 gpe_number,
+                   u32 flags, acpi_event_status * event_status);
+#endif                         /*  ACPI_FUTURE_USAGE  */
+
+acpi_status
+acpi_install_gpe_block(acpi_handle gpe_device,
+                      struct acpi_generic_address *gpe_block_address,
+                      u32 register_count, u32 interrupt_number);
+
+acpi_status acpi_remove_gpe_block(acpi_handle gpe_device);
 
 /*
  * Resource interfaces
  */
-
 typedef
-acpi_status (*ACPI_WALK_RESOURCE_CALLBACK) (
-       struct acpi_resource            *resource,
-       void                            *context);
-
-
-acpi_status
-acpi_get_current_resources(
-       acpi_handle                     device_handle,
-       struct acpi_buffer              *ret_buffer);
-
-#ifdef ACPI_FUTURE_USAGE
-acpi_status
-acpi_get_possible_resources(
-       acpi_handle                     device_handle,
-       struct acpi_buffer              *ret_buffer);
-#endif
-
-acpi_status
-acpi_walk_resources (
-       acpi_handle                             device_handle,
-       char                                    *path,
-       ACPI_WALK_RESOURCE_CALLBACK     user_function,
-       void                                    *context);
-
-acpi_status
-acpi_set_current_resources (
-       acpi_handle                     device_handle,
-       struct acpi_buffer              *in_buffer);
-
-acpi_status
-acpi_get_irq_routing_table (
-       acpi_handle                     bus_device_handle,
-       struct acpi_buffer              *ret_buffer);
-
-acpi_status
-acpi_resource_to_address64 (
-       struct acpi_resource            *resource,
-       struct acpi_resource_address64 *out);
+acpi_status(*acpi_walk_resource_callback) (struct acpi_resource * resource,
+                                          void *context);
+
+acpi_status
+acpi_get_vendor_resource(acpi_handle device_handle,
+                        char *name,
+                        struct acpi_vendor_uuid *uuid,
+                        struct acpi_buffer *ret_buffer);
+
+acpi_status
+acpi_get_current_resources(acpi_handle device_handle,
+                          struct acpi_buffer *ret_buffer);
+
+#ifdef ACPI_FUTURE_USAGE
+acpi_status
+acpi_get_possible_resources(acpi_handle device_handle,
+                           struct acpi_buffer *ret_buffer);
+#endif
+
+acpi_status
+acpi_walk_resources(acpi_handle device_handle,
+                   char *name,
+                   acpi_walk_resource_callback user_function, void *context);
+
+acpi_status
+acpi_set_current_resources(acpi_handle device_handle,
+                          struct acpi_buffer *in_buffer);
+
+acpi_status
+acpi_get_irq_routing_table(acpi_handle bus_device_handle,
+                          struct acpi_buffer *ret_buffer);
+
+acpi_status
+acpi_resource_to_address64(struct acpi_resource *resource,
+                          struct acpi_resource_address64 *out);
 
 /*
  * Hardware (ACPI device) interfaces
  */
-
-acpi_status
-acpi_get_register (
-       u32                             register_id,
-       u32                             *return_value,
-       u32                             flags);
-
-acpi_status
-acpi_set_register (
-       u32                             register_id,
-       u32                             value,
-       u32                             flags);
-
-acpi_status
-acpi_set_firmware_waking_vector (
-       acpi_physical_address           physical_address);
-
-#ifdef ACPI_FUTURE_USAGE
-acpi_status
-acpi_get_firmware_waking_vector (
-       acpi_physical_address           *physical_address);
-#endif
-
-acpi_status
-acpi_get_sleep_type_data (
-       u8                              sleep_state,
-       u8                              *slp_typ_a,
-       u8                              *slp_typ_b);
-
-acpi_status
-acpi_enter_sleep_state_prep (
-       u8                              sleep_state);
-
-acpi_status asmlinkage
-acpi_enter_sleep_state (
-       u8                              sleep_state);
-
-acpi_status asmlinkage
-acpi_enter_sleep_state_s4bios (
-       void);
-
-acpi_status
-acpi_leave_sleep_state (
-       u8                              sleep_state);
-
-
-#endif /* __ACXFACE_H__ */
+acpi_status acpi_get_register(u32 register_id, u32 * return_value);
+
+acpi_status acpi_get_register_unlocked(u32 register_id, u32 *return_value);
+
+acpi_status acpi_set_register(u32 register_id, u32 value);
+
+acpi_status
+acpi_set_firmware_waking_vector(acpi_physical_address physical_address);
+
+#ifdef ACPI_FUTURE_USAGE
+acpi_status
+acpi_get_firmware_waking_vector(acpi_physical_address * physical_address);
+#endif
+
+acpi_status
+acpi_get_sleep_type_data(u8 sleep_state, u8 * slp_typ_a, u8 * slp_typ_b);
+
+acpi_status acpi_enter_sleep_state_prep(u8 sleep_state);
+
+acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state);
+
+acpi_status asmlinkage acpi_enter_sleep_state_s4bios(void);
+
+acpi_status acpi_leave_sleep_state_prep(u8 sleep_state);
+
+acpi_status acpi_leave_sleep_state(u8 sleep_state);
+
+#endif                         /* __ACXFACE_H__ */
diff -r 5cbfc6c24d32 -r 13cba2e78a65 xen/include/acpi/acstruct.h
--- a/xen/include/acpi/acstruct.h       Tue Mar 18 13:14:26 2008 +0000
+++ b/xen/include/acpi/acstruct.h       Tue Mar 18 14:55:36 2008 +0000
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2005, R. Byron Moore
+ * Copyright (C) 2000 - 2007, R. Byron Moore
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -44,6 +44,7 @@
 #ifndef __ACSTRUCT_H__
 #define __ACSTRUCT_H__
 
+/* acpisrc:struct_defs -- for acpisrc conversion */
 
 /*****************************************************************************
  *
@@ -51,166 +52,144 @@
  *
  ****************************************************************************/
 
-
-/*
- * Walk state - current state of a parse tree walk.  Used for both a leisurely 
stroll through
- * the tree (for whatever reason), and for control method execution.
- */
-
+/*
+ * Walk state - current state of a parse tree walk.  Used for both a leisurely
+ * stroll through the tree (for whatever reason), and for control method
+ * execution.
+ */
 #define ACPI_NEXT_OP_DOWNWARD       1
 #define ACPI_NEXT_OP_UPWARD         2
 
+/*
+ * Groups of definitions for walk_type used for different implementations of
+ * walkers (never simultaneously) - flags for interpreter:
+ */
 #define ACPI_WALK_NON_METHOD        0
-#define ACPI_WALK_METHOD            1
-#define ACPI_WALK_METHOD_RESTART    2
-#define ACPI_WALK_CONST_REQUIRED    3
-#define ACPI_WALK_CONST_OPTIONAL    4
-
-struct acpi_walk_state
-{
-       u8                                  data_type;                          
/* To differentiate various internal objs MUST BE FIRST!*/\
-       u8                                  walk_type;
-       acpi_owner_id                       owner_id;                           
/* Owner of objects created during the walk */
-       u8                                  last_predicate;                     
/* Result of last predicate */
-       u8                                  reserved;                           
/* For alignment */
-       u8                                  current_result;                     
/* */
-       u8                                  next_op_info;                       
/* Info about next_op */
-       u8                                  num_operands;                       
/* Stack pointer for Operands[] array */
-       u8                                  return_used;
-       u16                                 opcode;                             
/* Current AML opcode */
-       u8                                  scope_depth;
-       u8                                  reserved1;
-       u32                                 arg_count;                          
/* push for fixed or var args */
-       u32                                 aml_offset;
-       u32                                 arg_types;
-       u32                                 method_breakpoint;                  
/* For single stepping */
-       u32                                 user_breakpoint;                    
/* User AML breakpoint */
-       u32                                 parse_flags;
-       u32                                 prev_arg_types;
-
-       u8                                  *aml_last_while;
-       struct acpi_namespace_node          arguments[ACPI_METHOD_NUM_ARGS];    
/* Control method arguments */
-       union acpi_operand_object           **caller_return_desc;
-       union acpi_generic_state            *control_state;                     
/* List of control states (nested IFs) */
-       struct acpi_namespace_node          *deferred_node;                     
/* Used when executing deferred opcodes */
-       struct acpi_gpe_event_info          *gpe_event_info;                    
/* Info for GPE (_Lxx/_Exx methods only */
-       struct acpi_namespace_node          
local_variables[ACPI_METHOD_NUM_LOCALS];    /* Control method locals */
-       struct acpi_namespace_node          *method_call_node;                  
/* Called method Node*/
-       union acpi_parse_object             *method_call_op;                    
/* method_call Op if running a method */
-       union acpi_operand_object           *method_desc;                       
/* Method descriptor if running a method */
-       struct acpi_namespace_node          *method_node;                       
/* Method node if running a method. */
-       union acpi_parse_object             *op;                                
/* Current parser op */
-       union acpi_operand_object           *operands[ACPI_OBJ_NUM_OPERANDS+1]; 
/* Operands passed to the interpreter (+1 for NULL terminator) */
-       const struct acpi_opcode_info       *op_info;                           
/* Info on current opcode */
-       union acpi_parse_object             *origin;                            
/* Start of walk [Obsolete] */
-       union acpi_operand_object           **params;
-       struct acpi_parse_state             parser_state;                       
/* Current state of parser */
-       union acpi_operand_object           *result_obj;
-       union acpi_generic_state            *results;                           
/* Stack of accumulated results */
-       union acpi_operand_object           *return_desc;                       
/* Return object, if any */
-       union acpi_generic_state            *scope_info;                        
/* Stack of nested scopes */
-
-       union acpi_parse_object             *prev_op;                           
/* Last op that was processed */
-       union acpi_parse_object             *next_op;                           
/* next op to be processed */
-       acpi_parse_downwards                descending_callback;
-       acpi_parse_upwards                  ascending_callback;
-       struct acpi_thread_state            *thread;
-       struct acpi_walk_state              *next;                              
/* Next walk_state in list */
-};
-
+#define ACPI_WALK_METHOD            0x01
+#define ACPI_WALK_METHOD_RESTART    0x02
+
+/* Flags for i_aSL compiler only */
+
+#define ACPI_WALK_CONST_REQUIRED    0x10
+#define ACPI_WALK_CONST_OPTIONAL    0x20
+
+struct acpi_walk_state {
+       struct acpi_walk_state *next;   /* Next walk_state in list */
+       u8 descriptor_type;     /* To differentiate various internal objs */
+       u8 walk_type;
+       u16 opcode;             /* Current AML opcode */
+       u8 next_op_info;        /* Info about next_op */
+       u8 num_operands;        /* Stack pointer for Operands[] array */
+       acpi_owner_id owner_id; /* Owner of objects created during the walk */
+       u8 last_predicate;      /* Result of last predicate */
+       u8 current_result;
+       u8 return_used;
+       u8 scope_depth;
+       u8 pass_number;         /* Parse pass during table load */
+       u32 aml_offset;
+       u32 arg_types;
+       u32 method_breakpoint;  /* For single stepping */
+       u32 user_breakpoint;    /* User AML breakpoint */
+       u32 parse_flags;
+
+       struct acpi_parse_state parser_state;   /* Current state of parser */
+       u32 prev_arg_types;
+       u32 arg_count;          /* push for fixed or var args */
+
+       struct acpi_namespace_node arguments[ACPI_METHOD_NUM_ARGS];     /* 
Control method arguments */
+       struct acpi_namespace_node local_variables[ACPI_METHOD_NUM_LOCALS];     
/* Control method locals */
+       union acpi_operand_object *operands[ACPI_OBJ_NUM_OPERANDS + 1]; /* 
Operands passed to the interpreter (+1 for NULL terminator) */
+       union acpi_operand_object **params;
+
+       u8 *aml_last_while;
+       union acpi_operand_object **caller_return_desc;
+       union acpi_generic_state *control_state;        /* List of control 
states (nested IFs) */
+       struct acpi_namespace_node *deferred_node;      /* Used when executing 
deferred opcodes */
+       struct acpi_gpe_event_info *gpe_event_info;     /* Info for GPE 
(_Lxx/_Exx methods only */
+       union acpi_operand_object *implicit_return_obj;
+       struct acpi_namespace_node *method_call_node;   /* Called method Node */
+       union acpi_parse_object *method_call_op;        /* method_call Op if 
running a method */
+       union acpi_operand_object *method_desc; /* Method descriptor if running 
a method */
+       struct acpi_namespace_node *method_node;        /* Method node if 
running a method. */
+       union acpi_parse_object *op;    /* Current parser op */
+       const struct acpi_opcode_info *op_info; /* Info on current opcode */
+       union acpi_parse_object *origin;        /* Start of walk [Obsolete] */
+       union acpi_operand_object *result_obj;
+       union acpi_generic_state *results;      /* Stack of accumulated results 
*/
+       union acpi_operand_object *return_desc; /* Return object, if any */
+       union acpi_generic_state *scope_info;   /* Stack of nested scopes */
+       union acpi_parse_object *prev_op;       /* Last op that was processed */
+       union acpi_parse_object *next_op;       /* next op to be processed */
+       struct acpi_thread_state *thread;
+       acpi_parse_downwards descending_callback;
+       acpi_parse_upwards ascending_callback;
+};
 
 /* Info used by acpi_ps_init_objects */
 
-struct acpi_init_walk_info
-{
-       u16                             method_count;
-       u16                             device_count;
-       u16                             op_region_count;
-       u16                             field_count;
-       u16                             buffer_count;
-       u16                             package_count;
-       u16                             op_region_init;
-       u16                             field_init;
-       u16                             buffer_init;
-       u16                             package_init;
-       u16                             object_count;
-       struct acpi_table_desc          *table_desc;
-};
-
-
-/* Info used by acpi_ns_initialize_devices */
-
-struct acpi_device_walk_info
-{
-       u16                             device_count;
-       u16                             num_STA;
-       u16                             num_INI;
-       struct acpi_table_desc          *table_desc;
-};
-
-
-/* TBD: [Restructure] Merge with struct above */
-
-struct acpi_walk_info
-{
-       u32                             debug_level;
-       u32                             owner_id;
-       u8                              display_type;
-};
-
-/* Display Types */
-
-#define ACPI_DISPLAY_SUMMARY    0
-#define ACPI_DISPLAY_OBJECTS    1
-
-struct acpi_get_devices_info
-{
-       acpi_walk_callback              user_function;
-       void                            *context;
-       char                            *hid;
-};
-
-
-union acpi_aml_operands
-{
-       union acpi_operand_object           *operands[7];
-
-       struct
-       {
-               struct acpi_object_integer      *type;
-               struct acpi_object_integer      *code;
-               struct acpi_object_integer      *argument;
+struct acpi_init_walk_info {
+       u16 method_count;
+       u16 device_count;
+       u16 op_region_count;
+       u16 field_count;
+       u16 buffer_count;
+       u16 package_count;
+       u16 op_region_init;
+       u16 field_init;
+       u16 buffer_init;
+       u16 package_init;
+       u16 object_count;
+       acpi_owner_id owner_id;
+       acpi_native_uint table_index;
+};
+
+struct acpi_get_devices_info {
+       acpi_walk_callback user_function;
+       void *context;
+       const char *hid;
+};
+
+union acpi_aml_operands {
+       union acpi_operand_object *operands[7];
+
+       struct {
+               struct acpi_object_integer *type;
+               struct acpi_object_integer *code;
+               struct acpi_object_integer *argument;
 
        } fatal;
 
-       struct
-       {
-               union acpi_operand_object       *source;
-               struct acpi_object_integer      *index;
-               union acpi_operand_object       *target;
+       struct {
+               union acpi_operand_object *source;
+               struct acpi_object_integer *index;
+               union acpi_operand_object *target;
 
        } index;
 
-       struct
-       {
-               union acpi_operand_object       *source;
-               struct acpi_object_integer      *index;
-               struct acpi_object_integer      *length;
-               union acpi_operand_object       *target;
+       struct {
+               union acpi_operand_object *source;
+               struct acpi_object_integer *index;
+               struct acpi_object_integer *length;
+               union acpi_operand_object *target;
 
        } mid;
 };
 
-
-/* Internal method parameter list */
-
-struct acpi_parameter_info
-{
-       struct acpi_namespace_node      *node;
-       union acpi_operand_object       **parameters;
-       union acpi_operand_object       *return_object;
-       u8                              parameter_type;
-       u8                              return_object_type;
+/*
+ * Structure used to pass object evaluation parameters.
+ * Purpose is to reduce CPU stack use.
+ */
+struct acpi_evaluate_info {
+       struct acpi_namespace_node *prefix_node;
+       char *pathname;
+       union acpi_operand_object *obj_desc;
+       union acpi_operand_object **parameters;
+       struct acpi_namespace_node *resolved_node;
+       union acpi_operand_object *return_object;
+       u8 pass_number;
+       u8 parameter_type;
+       u8 return_object_type;
+       u8 flags;
 };
 
 /* Types for parameter_type above */
@@ -218,5 +197,35 @@ struct acpi_parameter_info
 #define ACPI_PARAM_ARGS                 0
 #define ACPI_PARAM_GPE                  1
 
+/* Values for Flags above */
+
+#define ACPI_IGNORE_RETURN_VALUE        1
+
+/* Info used by acpi_ns_initialize_devices */
+
+struct acpi_device_walk_info {
+       u16 device_count;
+       u16 num_STA;
+       u16 num_INI;
+       struct acpi_table_desc *table_desc;
+       struct acpi_evaluate_info *evaluate_info;
+};
+
+/* TBD: [Restructure] Merge with struct above */
+
+struct acpi_walk_info {
+       u32 debug_level;
+       u32 count;
+       acpi_owner_id owner_id;
+       u8 display_type;
+};
+
+/* Display Types */
+
+#define ACPI_DISPLAY_SUMMARY        (u8) 0
+#define ACPI_DISPLAY_OBJECTS        (u8) 1
+#define ACPI_DISPLAY_MASK           (u8) 1
+
+#define ACPI_DISPLAY_SHORT          (u8) 2
 
 #endif
diff -r 5cbfc6c24d32 -r 13cba2e78a65 xen/include/acpi/actbl.h
--- a/xen/include/acpi/actbl.h  Tue Mar 18 13:14:26 2008 +0000
+++ b/xen/include/acpi/actbl.h  Tue Mar 18 14:55:36 2008 +0000
@@ -1,11 +1,11 @@
 /******************************************************************************
  *
- * Name: actbl.h - Table data structures defined in ACPI specification
+ * Name: actbl.h - Basic ACPI Table Definitions
  *
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2005, R. Byron Moore
+ * Copyright (C) 2000 - 2007, R. Byron Moore
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -44,309 +44,253 @@
 #ifndef __ACTBL_H__
 #define __ACTBL_H__
 
-
-/*
- *  Values for description table header signatures
- */
-#define RSDP_NAME               "RSDP"
-#define RSDP_SIG                "RSD PTR "  /* RSDT Pointer signature */
-#define APIC_SIG                "APIC"      /* Multiple APIC Description Table 
*/
-#define DSDT_SIG                "DSDT"      /* Differentiated System 
Description Table */
-#define FADT_SIG                "FACP"      /* Fixed ACPI Description Table */
-#define FACS_SIG                "FACS"      /* Firmware ACPI Control Structure 
*/
-#define PSDT_SIG                "PSDT"      /* Persistent System Description 
Table */
-#define RSDT_SIG                "RSDT"      /* Root System Description Table */
-#define XSDT_SIG                "XSDT"      /* Extended  System Description 
Table */
-#define SSDT_SIG                "SSDT"      /* Secondary System Description 
Table */
-#define SBST_SIG                "SBST"      /* Smart Battery Specification 
Table */
-#define SPIC_SIG                "SPIC"      /* IOSAPIC table */
-#define BOOT_SIG                "BOOT"      /* Boot table */
-
-
-#define GL_OWNED                0x02        /* Ownership of global lock is bit 
1 */
-
-
-/*
- * Common table types.  The base code can remain
- * constant if the underlying tables are changed
- */
-#define RSDT_DESCRIPTOR         struct rsdt_descriptor_rev2
-#define XSDT_DESCRIPTOR         struct xsdt_descriptor_rev2
-#define FACS_DESCRIPTOR         struct facs_descriptor_rev2
-#define FADT_DESCRIPTOR         struct fadt_descriptor_rev2
-
-
+/*
+ * Values for description table header signatures. Useful because they make
+ * it more difficult to inadvertently type in the wrong signature.
+ */
+#define ACPI_SIG_DSDT           "DSDT" /* Differentiated System Description 
Table */
+#define ACPI_SIG_FADT           "FACP" /* Fixed ACPI Description Table */
+#define ACPI_SIG_FACS           "FACS" /* Firmware ACPI Control Structure */
+#define ACPI_SIG_PSDT           "PSDT" /* Persistent System Description Table 
*/
+#define ACPI_SIG_RSDP           "RSD PTR "     /* Root System Description 
Pointer */
+#define ACPI_SIG_RSDT           "RSDT" /* Root System Description Table */
+#define ACPI_SIG_XSDT           "XSDT" /* Extended  System Description Table */
+#define ACPI_SIG_SSDT           "SSDT" /* Secondary System Description Table */
+#define ACPI_RSDP_NAME          "RSDP" /* Short name for RSDP, not signature */
+
+/*
+ * All tables and structures must be byte-packed to match the ACPI
+ * specification, since the tables are provided by the system BIOS
+ */
 #pragma pack(1)
 
 /*
- * ACPI Version-independent tables
- *
- * NOTE: The tables that are specific to ACPI versions (1.0, 2.0, etc.)
- * are in separate files.
- */
-struct rsdp_descriptor         /* Root System Descriptor Pointer */
-{
-       char                            signature [8];          /* ACPI 
signature, contains "RSD PTR " */
-       u8                              checksum;               /* To make sum 
of struct == 0 */
-       char                            oem_id [6];             /* OEM 
identification */
-       u8                              revision;               /* Must be 0 
for 1.0, 2 for 2.0 */
-       u32                             rsdt_physical_address;  /* 32-bit 
physical address of RSDT */
-       u32                             length;                 /* XSDT Length 
in bytes including hdr */
-       u64                             xsdt_physical_address;  /* 64-bit 
physical address of XSDT */
-       u8                              extended_checksum;      /* Checksum of 
entire table */
-       char                            reserved [3];           /* Reserved 
field must be 0 */
-};
-
-
-struct acpi_common_facs          /* Common FACS for internal use */
-{
-       u32                             *global_lock;
-       u64                             *firmware_waking_vector;
-       u8                              vector_width;
-};
-
-
-#define ACPI_TABLE_HEADER_DEF   /* ACPI common table header */ \
-       char                            signature [4];          /* ACPI 
signature (4 ASCII characters) */\
-       u32                             length;                 /* Length of 
table, in bytes, including header */\
-       u8                              revision;               /* ACPI 
Specification minor version # */\
-       u8                              checksum;               /* To make sum 
of entire table == 0 */\
-       char                            oem_id [6];             /* OEM 
identification */\
-       char                            oem_table_id [8];       /* OEM table 
identification */\
-       u32                             oem_revision;           /* OEM revision 
number */\
-       char                            asl_compiler_id [4];    /* ASL compiler 
vendor ID */\
-       u32                             asl_compiler_revision;  /* ASL compiler 
revision number */
-
-
-struct acpi_table_header         /* ACPI common table header */
-{
-       ACPI_TABLE_HEADER_DEF
-};
-
-
-/*
- * MADT values and structures
- */
-
-/* Values for MADT PCATCompat */
-
-#define DUAL_PIC                0
-#define MULTIPLE_APIC           1
-
-
-/* Master MADT */
-
-struct multiple_apic_table
-{
-       ACPI_TABLE_HEADER_DEF                           /* ACPI common table 
header */
-       u32                             local_apic_address;     /* Physical 
address of local APIC */
-       u32                             PCATcompat      : 1;    /* A one 
indicates system also has dual 8259s */
-       u32                             reserved1       : 31;
-};
-
-
-/* Values for Type in APIC_HEADER_DEF */
-
-#define APIC_PROCESSOR          0
-#define APIC_IO                 1
-#define APIC_XRUPT_OVERRIDE     2
-#define APIC_NMI                3
-#define APIC_LOCAL_NMI          4
-#define APIC_ADDRESS_OVERRIDE   5
-#define APIC_IO_SAPIC           6
-#define APIC_LOCAL_SAPIC        7
-#define APIC_XRUPT_SOURCE       8
-#define APIC_RESERVED           9           /* 9 and greater are reserved */
-
-/*
- * MADT sub-structures (Follow MULTIPLE_APIC_DESCRIPTION_TABLE)
- */
-#define APIC_HEADER_DEF                     /* Common APIC sub-structure 
header */\
-       u8                              type; \
-       u8                              length;
-
-struct apic_header
-{
-       APIC_HEADER_DEF
-};
-
-/* Values for MPS INTI flags */
-
-#define POLARITY_CONFORMS       0
-#define POLARITY_ACTIVE_HIGH    1
-#define POLARITY_RESERVED       2
-#define POLARITY_ACTIVE_LOW     3
-
-#define TRIGGER_CONFORMS        0
-#define TRIGGER_EDGE            1
-#define TRIGGER_RESERVED        2
-#define TRIGGER_LEVEL           3
-
-/* Common flag definitions */
-
-#define MPS_INTI_FLAGS \
-       u16                             polarity        : 2;    /* Polarity of 
APIC I/O input signals */\
-       u16                             trigger_mode    : 2;    /* Trigger mode 
of APIC input signals */\
-       u16                             reserved1       : 12;   /* Reserved, 
must be zero */
-
-#define LOCAL_APIC_FLAGS \
-       u32                             processor_enabled: 1;   /* Processor is 
usable if set */\
-       u32                             reserved2       : 31;   /* Reserved, 
must be zero */
-
-/* Sub-structures for MADT */
-
-struct madt_processor_apic
-{
-       APIC_HEADER_DEF
-       u8                              processor_id;           /* ACPI 
processor id */
-       u8                              local_apic_id;          /* Processor's 
local APIC id */
-       LOCAL_APIC_FLAGS
-};
-
-struct madt_io_apic
-{
-       APIC_HEADER_DEF
-       u8                              io_apic_id;             /* I/O APIC ID 
*/
-       u8                              reserved;               /* Reserved - 
must be zero */
-       u32                             address;                /* APIC 
physical address */
-       u32                             interrupt;              /* Global 
system interrupt where INTI
-                         * lines start */
-};
-
-struct madt_interrupt_override
-{
-       APIC_HEADER_DEF
-       u8                              bus;                    /* 0 - ISA */
-       u8                              source;                 /* Interrupt 
source (IRQ) */
-       u32                             interrupt;              /* Global 
system interrupt */
-       MPS_INTI_FLAGS
-};
-
-struct madt_nmi_source
-{
-       APIC_HEADER_DEF
-       MPS_INTI_FLAGS
-       u32                             interrupt;              /* Global 
system interrupt */
-};
-
-struct madt_local_apic_nmi
-{
-       APIC_HEADER_DEF
-       u8                              processor_id;           /* ACPI 
processor id */
-       MPS_INTI_FLAGS
-       u8                              lint;                   /* LINTn to 
which NMI is connected */
-};
-
-struct madt_address_override
-{
-       APIC_HEADER_DEF
-       u16                             reserved;               /* Reserved - 
must be zero */
-       u64                             address;                /* APIC 
physical address */
-};
-
-struct madt_io_sapic
-{
-       APIC_HEADER_DEF
-       u8                              io_sapic_id;            /* I/O SAPIC ID 
*/
-       u8                              reserved;               /* Reserved - 
must be zero */
-       u32                             interrupt_base;         /* Glocal 
interrupt for SAPIC start */
-       u64                             address;                /* SAPIC 
physical address */
-};
-
-struct madt_local_sapic
-{
-       APIC_HEADER_DEF
-       u8                              processor_id;           /* ACPI 
processor id */
-       u8                              local_sapic_id;         /* SAPIC ID */
-       u8                              local_sapic_eid;        /* SAPIC EID */
-       u8                              reserved [3];           /* Reserved - 
must be zero */
-       LOCAL_APIC_FLAGS
-};
-
-struct madt_interrupt_source
-{
-       APIC_HEADER_DEF
-       MPS_INTI_FLAGS
-       u8                              interrupt_type;         /* 1=PMI, 
2=INIT, 3=corrected */
-       u8                              processor_id;           /* Processor ID 
*/
-       u8                              processor_eid;          /* Processor 
EID */
-       u8                              io_sapic_vector;        /* Vector value 
for PMI interrupts */
-       u32                             interrupt;              /* Global 
system interrupt */
-       u32                             reserved;               /* Reserved - 
must be zero */
-};
-
-
-/*
- * Smart Battery
- */
-struct smart_battery_table
-{
-       ACPI_TABLE_HEADER_DEF
-       u32                             warning_level;
-       u32                             low_level;
-       u32                             critical_level;
-};
-
+ * These are the ACPI tables that are directly consumed by the subsystem.
+ *
+ * The RSDP and FACS do not use the common ACPI table header. All other ACPI
+ * tables use the header.
+ *
+ * Note about bitfields: The u8 type is used for bitfields in ACPI tables.
+ * This is the only type that is even remotely portable. Anything else is not
+ * portable, so do not use any other bitfield types.
+ */
+
+/*******************************************************************************
+ *
+ * ACPI Table Header. This common header is used by all tables except the
+ * RSDP and FACS. The define is used for direct inclusion of header into
+ * other ACPI tables
+ *
+ 
******************************************************************************/
+
+struct acpi_table_header {
+       char signature[ACPI_NAME_SIZE]; /* ASCII table signature */
+       u32 length;             /* Length of table in bytes, including this 
header */
+       u8 revision;            /* ACPI Specification minor version # */
+       u8 checksum;            /* To make sum of entire table == 0 */
+       char oem_id[ACPI_OEM_ID_SIZE];  /* ASCII OEM identification */
+       char oem_table_id[ACPI_OEM_TABLE_ID_SIZE];      /* ASCII OEM table 
identification */
+       u32 oem_revision;       /* OEM revision number */
+       char asl_compiler_id[ACPI_NAME_SIZE];   /* ASCII ASL compiler vendor ID 
*/
+       u32 asl_compiler_revision;      /* ASL compiler version */
+};
+
+/*
+ * GAS - Generic Address Structure (ACPI 2.0+)
+ *
+ * Note: Since this structure is used in the ACPI tables, it is byte aligned.
+ * If misalignment is not supported, access to the Address field must be
+ * performed with care.
+ */
+struct acpi_generic_address {
+       u8 space_id;            /* Address space where struct or register 
exists */
+       u8 bit_width;           /* Size in bits of given register */
+       u8 bit_offset;          /* Bit offset within the register */
+       u8 access_width;        /* Minimum Access size (ACPI 3.0) */
+       u64 address;            /* 64-bit address of struct or register */
+};
+
+/*******************************************************************************
+ *
+ * RSDP - Root System Description Pointer (Signature is "RSD PTR ")
+ *
+ 
******************************************************************************/
+
+struct acpi_table_rsdp {
+       char signature[8];      /* ACPI signature, contains "RSD PTR " */
+       u8 checksum;            /* ACPI 1.0 checksum */
+       char oem_id[ACPI_OEM_ID_SIZE];  /* OEM identification */
+       u8 revision;            /* Must be (0) for ACPI 1.0 or (2) for ACPI 
2.0+ */
+       u32 rsdt_physical_address;      /* 32-bit physical address of the RSDT 
*/
+       u32 length;             /* Table length in bytes, including header 
(ACPI 2.0+) */
+       u64 xsdt_physical_address;      /* 64-bit physical address of the XSDT 
(ACPI 2.0+) */
+       u8 extended_checksum;   /* Checksum of entire table (ACPI 2.0+) */
+       u8 reserved[3];         /* Reserved, must be zero */
+};
+
+#define ACPI_RSDP_REV0_SIZE     20     /* Size of original ACPI 1.0 RSDP */
+
+/*******************************************************************************
+ *
+ * RSDT/XSDT - Root System Description Tables
+ *
+ 
******************************************************************************/
+
+struct acpi_table_rsdt {
+       struct acpi_table_header header;        /* Common ACPI table header */
+       u32 table_offset_entry[1];      /* Array of pointers to ACPI tables */
+};
+
+struct acpi_table_xsdt {
+       struct acpi_table_header header;        /* Common ACPI table header */
+       u64 table_offset_entry[1];      /* Array of pointers to ACPI tables */
+};
+
+/*******************************************************************************
+ *
+ * FACS - Firmware ACPI Control Structure (FACS)
+ *
+ 
******************************************************************************/
+
+struct acpi_table_facs {
+       char signature[4];      /* ASCII table signature */
+       u32 length;             /* Length of structure, in bytes */
+       u32 hardware_signature; /* Hardware configuration signature */
+       u32 firmware_waking_vector;     /* 32-bit physical address of the 
Firmware Waking Vector */
+       u32 global_lock;        /* Global Lock for shared hardware resources */
+       u32 flags;
+       u64 xfirmware_waking_vector;    /* 64-bit version of the Firmware 
Waking Vector (ACPI 2.0+) */
+       u8 version;             /* Version of this table (ACPI 2.0+) */
+       u8 reserved[31];        /* Reserved, must be zero */
+};
+
+/* Flag macros */
+
+#define ACPI_FACS_S4_BIOS_PRESENT (1)  /* 00: S4BIOS support is present */
+
+/* Global lock flags */
+
+#define ACPI_GLOCK_PENDING      0x01   /* 00: Pending global lock ownership */
+#define ACPI_GLOCK_OWNED        0x02   /* 01: Global lock is owned */
+
+/*******************************************************************************
+ *
+ * FADT - Fixed ACPI Description Table (Signature "FACP")
+ *
+ 
******************************************************************************/
+
+/* Fields common to all versions of the FADT */
+
+struct acpi_table_fadt {
+       struct acpi_table_header header;        /* Common ACPI table header */
+       u32 facs;               /* 32-bit physical address of FACS */
+       u32 dsdt;               /* 32-bit physical address of DSDT */
+       u8 model;               /* System Interrupt Model (ACPI 1.0) - not used 
in ACPI 2.0+ */
+       u8 preferred_profile;   /* Conveys preferred power management profile 
to OSPM. */
+       u16 sci_interrupt;      /* System vector of SCI interrupt */
+       u32 smi_command;        /* 32-bit Port address of SMI command port */
+       u8 acpi_enable;         /* Value to write to smi_cmd to enable ACPI */
+       u8 acpi_disable;        /* Value to write to smi_cmd to disable ACPI */
+       u8 S4bios_request;      /* Value to write to SMI CMD to enter S4BIOS 
state */
+       u8 pstate_control;      /* Processor performance state control */
+       u32 pm1a_event_block;   /* 32-bit Port address of Power Mgt 1a Event 
Reg Blk */
+       u32 pm1b_event_block;   /* 32-bit Port address of Power Mgt 1b Event 
Reg Blk */
+       u32 pm1a_control_block; /* 32-bit Port address of Power Mgt 1a Control 
Reg Blk */
+       u32 pm1b_control_block; /* 32-bit Port address of Power Mgt 1b Control 
Reg Blk */
+       u32 pm2_control_block;  /* 32-bit Port address of Power Mgt 2 Control 
Reg Blk */
+       u32 pm_timer_block;     /* 32-bit Port address of Power Mgt Timer Ctrl 
Reg Blk */
+       u32 gpe0_block;         /* 32-bit Port address of General Purpose Event 
0 Reg Blk */
+       u32 gpe1_block;         /* 32-bit Port address of General Purpose Event 
1 Reg Blk */
+       u8 pm1_event_length;    /* Byte Length of ports at pm1x_event_block */
+       u8 pm1_control_length;  /* Byte Length of ports at pm1x_control_block */
+       u8 pm2_control_length;  /* Byte Length of ports at pm2_control_block */
+       u8 pm_timer_length;     /* Byte Length of ports at pm_timer_block */
+       u8 gpe0_block_length;   /* Byte Length of ports at gpe0_block */
+       u8 gpe1_block_length;   /* Byte Length of ports at gpe1_block */
+       u8 gpe1_base;           /* Offset in GPE number space where GPE1 events 
start */
+       u8 cst_control;         /* Support for the _CST object and C States 
change notification */
+       u16 C2latency;          /* Worst case HW latency to enter/exit C2 state 
*/
+       u16 C3latency;          /* Worst case HW latency to enter/exit C3 state 
*/
+       u16 flush_size;         /* Processor's memory cache line width, in 
bytes */
+       u16 flush_stride;       /* Number of flush strides that need to be read 
*/
+       u8 duty_offset;         /* Processor duty cycle index in processor's 
P_CNT reg */
+       u8 duty_width;          /* Processor duty cycle value bit width in 
P_CNT register. */
+       u8 day_alarm;           /* Index to day-of-month alarm in RTC CMOS RAM 
*/
+       u8 month_alarm;         /* Index to month-of-year alarm in RTC CMOS RAM 
*/
+       u8 century;             /* Index to century in RTC CMOS RAM */
+       u16 boot_flags;         /* IA-PC Boot Architecture Flags. See Table 
5-10 for description */
+       u8 reserved;            /* Reserved, must be zero */
+       u32 flags;              /* Miscellaneous flag bits (see below for 
individual flags) */
+       struct acpi_generic_address reset_register;     /* 64-bit address of 
the Reset register */
+       u8 reset_value;         /* Value to write to the reset_register port to 
reset the system */
+       u8 reserved4[3];        /* Reserved, must be zero */
+       u64 Xfacs;              /* 64-bit physical address of FACS */
+       u64 Xdsdt;              /* 64-bit physical address of DSDT */
+       struct acpi_generic_address xpm1a_event_block;  /* 64-bit Extended 
Power Mgt 1a Event Reg Blk address */
+       struct acpi_generic_address xpm1b_event_block;  /* 64-bit Extended 
Power Mgt 1b Event Reg Blk address */
+       struct acpi_generic_address xpm1a_control_block;        /* 64-bit 
Extended Power Mgt 1a Control Reg Blk address */
+       struct acpi_generic_address xpm1b_control_block;        /* 64-bit 
Extended Power Mgt 1b Control Reg Blk address */
+       struct acpi_generic_address xpm2_control_block; /* 64-bit Extended 
Power Mgt 2 Control Reg Blk address */
+       struct acpi_generic_address xpm_timer_block;    /* 64-bit Extended 
Power Mgt Timer Ctrl Reg Blk address */
+       struct acpi_generic_address xgpe0_block;        /* 64-bit Extended 
General Purpose Event 0 Reg Blk address */
+       struct acpi_generic_address xgpe1_block;        /* 64-bit Extended 
General Purpose Event 1 Reg Blk address */
+};
+
+/* FADT flags */
+
+#define ACPI_FADT_WBINVD            (1)        /* 00: The wbinvd instruction 
works properly */
+#define ACPI_FADT_WBINVD_FLUSH      (1<<1)     /* 01: The wbinvd flushes but 
does not invalidate */
+#define ACPI_FADT_C1_SUPPORTED      (1<<2)     /* 02: All processors support 
C1 state */
+#define ACPI_FADT_C2_MP_SUPPORTED   (1<<3)     /* 03: C2 state works on MP 
system */
+#define ACPI_FADT_POWER_BUTTON      (1<<4)     /* 04: Power button is handled 
as a generic feature */
+#define ACPI_FADT_SLEEP_BUTTON      (1<<5)     /* 05: Sleep button is handled 
as a generic feature, or  not present */
+#define ACPI_FADT_FIXED_RTC         (1<<6)     /* 06: RTC wakeup stat not in 
fixed register space */
+#define ACPI_FADT_S4_RTC_WAKE       (1<<7)     /* 07: RTC wakeup stat not 
possible from S4 */
+#define ACPI_FADT_32BIT_TIMER       (1<<8)     /* 08: tmr_val is 32 bits 
0=24-bits */
+#define ACPI_FADT_DOCKING_SUPPORTED (1<<9)     /* 09: Docking supported */
+#define ACPI_FADT_RESET_REGISTER    (1<<10)    /* 10: System reset via the 
FADT RESET_REG supported */
+#define ACPI_FADT_SEALED_CASE       (1<<11)    /* 11: No internal expansion 
capabilities and case is sealed */
+#define ACPI_FADT_HEADLESS          (1<<12)    /* 12: No local video 
capabilities or local input devices */
+#define ACPI_FADT_SLEEP_TYPE        (1<<13)    /* 13: Must execute native 
instruction after writing  SLP_TYPx register */
+#define ACPI_FADT_PCI_EXPRESS_WAKE  (1<<14)    /* 14: System supports 
PCIEXP_WAKE (STS/EN) bits (ACPI 3.0) */
+#define ACPI_FADT_PLATFORM_CLOCK    (1<<15)    /* 15: OSPM should use 
platform-provided timer (ACPI 3.0) */
+#define ACPI_FADT_S4_RTC_VALID      (1<<16)    /* 16: Contents of RTC_STS 
valid after S4 wake (ACPI 3.0) */
+#define ACPI_FADT_REMOTE_POWER_ON   (1<<17)    /* 17: System is compatible 
with remote power on (ACPI 3.0) */
+#define ACPI_FADT_APIC_CLUSTER      (1<<18)    /* 18: All local APICs must use 
cluster model (ACPI 3.0) */
+#define ACPI_FADT_APIC_PHYSICAL     (1<<19)    /* 19: All local x_aPICs must 
use physical dest mode (ACPI 3.0) */
+
+/*
+ * FADT Prefered Power Management Profiles
+ */
+enum acpi_prefered_pm_profiles {
+       PM_UNSPECIFIED = 0,
+       PM_DESKTOP = 1,
+       PM_MOBILE = 2,
+       PM_WORKSTATION = 3,
+       PM_ENTERPRISE_SERVER = 4,
+       PM_SOHO_SERVER = 5,
+       PM_APPLIANCE_PC = 6
+};
+
+/* FADT Boot Arch Flags */
+
+#define BAF_LEGACY_DEVICES              0x0001
+#define BAF_8042_KEYBOARD_CONTROLLER    0x0002
+#define BAF_MSI_NOT_SUPPORTED           0x0008
+
+#define FADT2_REVISION_ID               3
+#define FADT2_MINUS_REVISION_ID         2
+
+/* Reset to default packing */
 
 #pragma pack()
 
-
-/*
- * ACPI Table information.  We save the table address, length,
- * and type of memory allocation (mapped or allocated) for each
- * table for 1) when we exit, and 2) if a new table is installed
- */
-#define ACPI_MEM_NOT_ALLOCATED  0
-#define ACPI_MEM_ALLOCATED      1
-#define ACPI_MEM_MAPPED         2
-
-/* Definitions for the Flags bitfield member of struct acpi_table_support */
-
-#define ACPI_TABLE_SINGLE       0x00
-#define ACPI_TABLE_MULTIPLE     0x01
-#define ACPI_TABLE_EXECUTABLE   0x02
-
-#define ACPI_TABLE_ROOT         0x00
-#define ACPI_TABLE_PRIMARY      0x10
-#define ACPI_TABLE_SECONDARY    0x20
-#define ACPI_TABLE_ALL          0x30
-#define ACPI_TABLE_TYPE_MASK    0x30
-
-/* Data about each known table type */
-
-struct acpi_table_support
-{
-       char                            *name;
-       char                            *signature;
-       void                            **global_ptr;
-       u8                              sig_length;
-       u8                              flags;
-};
-
-
-/*
- * Get the ACPI version-specific tables
- */
-#include "actbl1.h"   /* Acpi 1.0 table definitions */
-#include "actbl2.h"   /* Acpi 2.0 table definitions */
-
-extern u8 acpi_fadt_is_v1; /* is set to 1 if FADT is revision 1,
-                           * needed for certain workarounds */
-
-#pragma pack(1)
-/*
- * High performance timer
- */
-struct hpet_table
-{
-       ACPI_TABLE_HEADER_DEF
-       u32                             hardware_id;
-       struct acpi_generic_address     base_address;
-       u8                              hpet_number;
-       u16                             clock_tick;
-       u8                              attributes;
-};
-
-#pragma pack()
-
-#endif /* __ACTBL_H__ */
+#define ACPI_FADT_OFFSET(f)             (u8) ACPI_OFFSET (struct 
acpi_table_fadt, f)
+
+/*
+ * Get the remaining ACPI tables
+ */
+
+#include <acpi/actbl1.h>
+
+#endif                         /* __ACTBL_H__ */
diff -r 5cbfc6c24d32 -r 13cba2e78a65 xen/include/acpi/actbl1.h
--- a/xen/include/acpi/actbl1.h Tue Mar 18 13:14:26 2008 +0000
+++ b/xen/include/acpi/actbl1.h Tue Mar 18 14:55:36 2008 +0000
@@ -1,11 +1,11 @@
 /******************************************************************************
  *
- * Name: actbl1.h - ACPI 1.0 tables
+ * Name: actbl1.h - Additional ACPI table definitions
  *
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2005, R. Byron Moore
+ * Copyright (C) 2000 - 2007, R. Byron Moore
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -44,93 +44,684 @@
 #ifndef __ACTBL1_H__
 #define __ACTBL1_H__
 
+/*******************************************************************************
+ *
+ * Additional ACPI Tables
+ *
+ * These tables are not consumed directly by the ACPICA subsystem, but are
+ * included here to support device drivers and the AML disassembler.
+ *
+ 
******************************************************************************/
+
+/*
+ * Values for description table header signatures. Useful because they make
+ * it more difficult to inadvertently type in the wrong signature.
+ */
+#define ACPI_SIG_ASF            "ASF!" /* Alert Standard Format table */
+#define ACPI_SIG_BOOT           "BOOT" /* Simple Boot Flag Table */
+#define ACPI_SIG_CPEP           "CPEP" /* Corrected Platform Error Polling 
table */
+#define ACPI_SIG_DBGP           "DBGP" /* Debug Port table */
+#define ACPI_SIG_DMAR           "DMAR" /* DMA Remapping table */
+#define ACPI_SIG_ECDT           "ECDT" /* Embedded Controller Boot Resources 
Table */
+#define ACPI_SIG_HPET           "HPET" /* High Precision Event Timer table */
+#define ACPI_SIG_MADT           "APIC" /* Multiple APIC Description Table */
+#define ACPI_SIG_MCFG           "MCFG" /* PCI Memory Mapped Configuration 
table */
+#define ACPI_SIG_SBST           "SBST" /* Smart Battery Specification Table */
+#define ACPI_SIG_SLIT           "SLIT" /* System Locality Distance Information 
Table */
+#define ACPI_SIG_SPCR           "SPCR" /* Serial Port Console Redirection 
table */
+#define ACPI_SIG_SPMI           "SPMI" /* Server Platform Management Interface 
table */
+#define ACPI_SIG_SRAT           "SRAT" /* System Resource Affinity Table */
+#define ACPI_SIG_TCPA           "TCPA" /* Trusted Computing Platform Alliance 
table */
+#define ACPI_SIG_WDRT           "WDRT" /* Watchdog Resource Table */
+
+/*
+ * All tables must be byte-packed to match the ACPI specification, since
+ * the tables are provided by the system BIOS.
+ */
 #pragma pack(1)
 
 /*
- * ACPI 1.0 Root System Description Table (RSDT)
- */
-struct rsdt_descriptor_rev1
-{
-       ACPI_TABLE_HEADER_DEF                           /* ACPI common table 
header */
-       u32                             table_offset_entry [1]; /* Array of 
pointers to other */
-                        /* ACPI tables */
-};
-
-
-/*
- * ACPI 1.0 Firmware ACPI Control Structure (FACS)
- */
-struct facs_descriptor_rev1
-{
-       char                            signature[4];           /* ACPI 
Signature */
-       u32                             length;                 /* Length of 
structure, in bytes */
-       u32                             hardware_signature;     /* Hardware 
configuration signature */
-       u32                             firmware_waking_vector; /* ACPI OS 
waking vector */
-       u32                             global_lock;            /* Global Lock 
*/
-       u32                             S4bios_f        : 1;    /* Indicates if 
S4BIOS support is present */
-       u32                             reserved1       : 31;   /* Must be 0 */
-       u8                              resverved3 [40];        /* Reserved - 
must be zero */
-};
-
-
-/*
- * ACPI 1.0 Fixed ACPI Description Table (FADT)
- */
-struct fadt_descriptor_rev1
-{
-       ACPI_TABLE_HEADER_DEF                           /* ACPI common table 
header */
-       u32                             firmware_ctrl;          /* Physical 
address of FACS */
-       u32                             dsdt;                   /* Physical 
address of DSDT */
-       u8                              model;                  /* System 
Interrupt Model */
-       u8                              reserved1;              /* Reserved */
-       u16                             sci_int;                /* System 
vector of SCI interrupt */
-       u32                             smi_cmd;                /* Port address 
of SMI command port */
-       u8                              acpi_enable;            /* Value to 
write to smi_cmd to enable ACPI */
-       u8                              acpi_disable;           /* Value to 
write to smi_cmd to disable ACPI */
-       u8                              S4bios_req;             /* Value to 
write to SMI CMD to enter S4BIOS state */
-       u8                              reserved2;              /* Reserved - 
must be zero */
-       u32                             pm1a_evt_blk;           /* Port address 
of Power Mgt 1a acpi_event Reg Blk */
-       u32                             pm1b_evt_blk;           /* Port address 
of Power Mgt 1b acpi_event Reg Blk */
-       u32                             pm1a_cnt_blk;           /* Port address 
of Power Mgt 1a Control Reg Blk */
-       u32                             pm1b_cnt_blk;           /* Port address 
of Power Mgt 1b Control Reg Blk */
-       u32                             pm2_cnt_blk;            /* Port address 
of Power Mgt 2 Control Reg Blk */
-       u32                             pm_tmr_blk;             /* Port address 
of Power Mgt Timer Ctrl Reg Blk */
-       u32                             gpe0_blk;               /* Port addr of 
General Purpose acpi_event 0 Reg Blk */
-       u32                             gpe1_blk;               /* Port addr of 
General Purpose acpi_event 1 Reg Blk */
-       u8                              pm1_evt_len;            /* Byte length 
of ports at pm1_x_evt_blk */
-       u8                              pm1_cnt_len;            /* Byte length 
of ports at pm1_x_cnt_blk */
-       u8                              pm2_cnt_len;            /* Byte Length 
of ports at pm2_cnt_blk */
-       u8                              pm_tm_len;              /* Byte Length 
of ports at pm_tm_blk */
-       u8                              gpe0_blk_len;           /* Byte Length 
of ports at gpe0_blk */
-       u8                              gpe1_blk_len;           /* Byte Length 
of ports at gpe1_blk */
-       u8                              gpe1_base;              /* Offset in 
gpe model where gpe1 events start */
-       u8                              reserved3;              /* Reserved */
-       u16                             plvl2_lat;              /* Worst case 
HW latency to enter/exit C2 state */
-       u16                             plvl3_lat;              /* Worst case 
HW latency to enter/exit C3 state */
-       u16                             flush_size;             /* Size of area 
read to flush caches */
-       u16                             flush_stride;           /* Stride used 
in flushing caches */
-       u8                              duty_offset;            /* Bit location 
of duty cycle field in p_cnt reg */
-       u8                              duty_width;             /* Bit width of 
duty cycle field in p_cnt reg */
-       u8                              day_alrm;               /* Index to 
day-of-month alarm in RTC CMOS RAM */
-       u8                              mon_alrm;               /* Index to 
month-of-year alarm in RTC CMOS RAM */
-       u8                              century;                /* Index to 
century in RTC CMOS RAM */
-       u8                              reserved4;              /* Reserved */
-       u8                              reserved4a;             /* Reserved */
-       u8                              reserved4b;             /* Reserved */
-       u32                             wb_invd         : 1;    /* The wbinvd 
instruction works properly */
-       u32                             wb_invd_flush   : 1;    /* The wbinvd 
flushes but does not invalidate */
-       u32                             proc_c1         : 1;    /* All 
processors support C1 state */
-       u32                             plvl2_up        : 1;    /* C2 state 
works on MP system */
-       u32                             pwr_button      : 1;    /* Power button 
is handled as a generic feature */
-       u32                             sleep_button    : 1;    /* Sleep button 
is handled as a generic feature, or not present */
-       u32                             fixed_rTC       : 1;    /* RTC wakeup 
stat not in fixed register space */
-       u32                             rtcs4           : 1;    /* RTC wakeup 
stat not possible from S4 */
-       u32                             tmr_val_ext     : 1;    /* The tmr_val 
width is 32 bits (0 = 24 bits) */
-       u32                             reserved5       : 23;   /* Reserved - 
must be zero */
-};
+ * Note about bitfields: The u8 type is used for bitfields in ACPI tables.
+ * This is the only type that is even remotely portable. Anything else is not
+ * portable, so do not use any other bitfield types.
+ */
+
+/* Common Sub-table header (used in MADT, SRAT, etc.) */
+
+struct acpi_subtable_header {
+       u8 type;
+       u8 length;
+};
+
+/*******************************************************************************
+ *
+ * ASF - Alert Standard Format table (Signature "ASF!")
+ *
+ * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003
+ *
+ 
******************************************************************************/
+
+struct acpi_table_asf {
+       struct acpi_table_header header;        /* Common ACPI table header */
+};
+
+/* ASF subtable header */
+
+struct acpi_asf_header {
+       u8 type;
+       u8 reserved;
+       u16 length;
+};
+
+/* Values for Type field above */
+
+enum acpi_asf_type {
+       ACPI_ASF_TYPE_INFO = 0,
+       ACPI_ASF_TYPE_ALERT = 1,
+       ACPI_ASF_TYPE_CONTROL = 2,
+       ACPI_ASF_TYPE_BOOT = 3,
+       ACPI_ASF_TYPE_ADDRESS = 4,
+       ACPI_ASF_TYPE_RESERVED = 5
+};
+
+/*
+ * ASF subtables
+ */
+
+/* 0: ASF Information */
+
+struct acpi_asf_info {
+       struct acpi_asf_header header;
+       u8 min_reset_value;
+       u8 min_poll_interval;
+       u16 system_id;
+       u32 mfg_id;
+       u8 flags;
+       u8 reserved2[3];
+};
+
+/* 1: ASF Alerts */
+
+struct acpi_asf_alert {
+       struct acpi_asf_header header;
+       u8 assert_mask;
+       u8 deassert_mask;
+       u8 alerts;
+       u8 data_length;
+};
+
+struct acpi_asf_alert_data {
+       u8 address;
+       u8 command;
+       u8 mask;
+       u8 value;
+       u8 sensor_type;
+       u8 type;
+       u8 offset;
+       u8 source_type;
+       u8 severity;
+       u8 sensor_number;
+       u8 entity;
+       u8 instance;
+};
+
+/* 2: ASF Remote Control */
+
+struct acpi_asf_remote {
+       struct acpi_asf_header header;
+       u8 controls;
+       u8 data_length;
+       u16 reserved2;
+};
+
+struct acpi_asf_control_data {
+       u8 function;
+       u8 address;
+       u8 command;
+       u8 value;
+};
+
+/* 3: ASF RMCP Boot Options */
+
+struct acpi_asf_rmcp {
+       struct acpi_asf_header header;
+       u8 capabilities[7];
+       u8 completion_code;
+       u32 enterprise_id;
+       u8 command;
+       u16 parameter;
+       u16 boot_options;
+       u16 oem_parameters;
+};
+
+/* 4: ASF Address */
+
+struct acpi_asf_address {
+       struct acpi_asf_header header;
+       u8 eprom_address;
+       u8 devices;
+};
+
+/*******************************************************************************
+ *
+ * BOOT - Simple Boot Flag Table
+ *
+ 
******************************************************************************/
+
+struct acpi_table_boot {
+       struct acpi_table_header header;        /* Common ACPI table header */
+       u8 cmos_index;          /* Index in CMOS RAM for the boot register */
+       u8 reserved[3];
+};
+
+/*******************************************************************************
+ *
+ * CPEP - Corrected Platform Error Polling table
+ *
+ 
******************************************************************************/
+
+struct acpi_table_cpep {
+       struct acpi_table_header header;        /* Common ACPI table header */
+       u64 reserved;
+};
+
+/* Subtable */
+
+struct acpi_cpep_polling {
+       u8 type;
+       u8 length;
+       u8 id;                  /* Processor ID */
+       u8 eid;                 /* Processor EID */
+       u32 interval;           /* Polling interval (msec) */
+};
+
+/*******************************************************************************
+ *
+ * DBGP - Debug Port table
+ *
+ 
******************************************************************************/
+
+struct acpi_table_dbgp {
+       struct acpi_table_header header;        /* Common ACPI table header */
+       u8 type;                /* 0=full 16550, 1=subset of 16550 */
+       u8 reserved[3];
+       struct acpi_generic_address debug_port;
+};
+
+/*******************************************************************************
+ *
+ * DMAR - DMA Remapping table
+ *
+ 
******************************************************************************/
+
+struct acpi_table_dmar {
+       struct acpi_table_header header;        /* Common ACPI table header */
+       u8 width;               /* Host Address Width */
+       u8 flags;
+       u8 reserved[10];
+};
+
+/* DMAR subtable header */
+
+struct acpi_dmar_header {
+       u16 type;
+       u16 length;
+};
+
+/* Values for subtable type in struct acpi_dmar_header */
+
+enum acpi_dmar_type {
+       ACPI_DMAR_TYPE_HARDWARE_UNIT = 0,
+       ACPI_DMAR_TYPE_RESERVED_MEMORY = 1,
+       ACPI_DMAR_TYPE_ATSR = 2,
+       ACPI_DMAR_TYPE_RESERVED = 3     /* 3 and greater are reserved */
+};
+
+struct acpi_dmar_device_scope {
+       u8 entry_type;
+       u8 length;
+       u16 reserved;
+       u8 enumeration_id;
+       u8 bus;
+};
+
+/* Values for entry_type in struct acpi_dmar_device_scope */
+
+enum acpi_dmar_scope_type {
+       ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0,
+       ACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1,
+       ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2,
+       ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3,
+       ACPI_DMAR_SCOPE_TYPE_HPET = 4,
+       ACPI_DMAR_SCOPE_TYPE_RESERVED = 5       /* 5 and greater are reserved */
+};
+
+struct acpi_dmar_pci_path {
+       u8 dev;
+       u8 fn;
+};
+
+/*
+ * DMAR Sub-tables, correspond to Type in struct acpi_dmar_header
+ */
+
+/* 0: Hardware Unit Definition */
+
+struct acpi_dmar_hardware_unit {
+       struct acpi_dmar_header header;
+       u8 flags;
+       u8 reserved;
+       u16 segment;
+       u64 address;            /* Register Base Address */
+};
+
+/* Flags */
+
+#define ACPI_DMAR_INCLUDE_ALL       (1)
+
+/* 1: Reserved Memory Defininition */
+
+struct acpi_dmar_reserved_memory {
+       struct acpi_dmar_header header;
+       u16 reserved;
+       u16 segment;
+       u64 base_address;               /* 4_k aligned base address */
+       u64 end_address;        /* 4_k aligned limit address */
+};
+
+/* Flags */
+
+#define ACPI_DMAR_ALLOW_ALL         (1)
+
+/*******************************************************************************
+ *
+ * ECDT - Embedded Controller Boot Resources Table
+ *
+ 
******************************************************************************/
+
+struct acpi_table_ecdt {
+       struct acpi_table_header header;        /* Common ACPI table header */
+       struct acpi_generic_address control;    /* Address of EC command/status 
register */
+       struct acpi_generic_address data;       /* Address of EC data register 
*/
+       u32 uid;                /* Unique ID - must be same as the EC _UID 
method */
+       u8 gpe;                 /* The GPE for the EC */
+       u8 id[1];               /* Full namepath of the EC in the ACPI 
namespace */
+};
+
+/*******************************************************************************
+ *
+ * HPET - High Precision Event Timer table
+ *
+ 
******************************************************************************/
+
+struct acpi_table_hpet {
+       struct acpi_table_header header;        /* Common ACPI table header */
+       u32 id;                 /* Hardware ID of event timer block */
+       struct acpi_generic_address address;    /* Address of event timer block 
*/
+       u8 sequence;            /* HPET sequence number */
+       u16 minimum_tick;       /* Main counter min tick, periodic mode */
+       u8 flags;
+};
+
+/*! Flags */
+
+#define ACPI_HPET_PAGE_PROTECT      (1)        /* 00: No page protection */
+#define ACPI_HPET_PAGE_PROTECT_4    (1<<1)     /* 01: 4KB page protected */
+#define ACPI_HPET_PAGE_PROTECT_64   (1<<2)     /* 02: 64KB page protected */
+
+/*! [End] no source code translation !*/
+
+/*******************************************************************************
+ *
+ * MADT - Multiple APIC Description Table
+ *
+ 
******************************************************************************/
+
+struct acpi_table_madt {
+       struct acpi_table_header header;        /* Common ACPI table header */
+       u32 address;            /* Physical address of local APIC */
+       u32 flags;
+};
+
+/* Flags */
+
+#define ACPI_MADT_PCAT_COMPAT       (1)        /* 00:    System also has dual 
8259s */
+
+/* Values for PCATCompat flag */
+
+#define ACPI_MADT_DUAL_PIC          0
+#define ACPI_MADT_MULTIPLE_APIC     1
+
+/* Values for subtable type in struct acpi_subtable_header */
+
+enum acpi_madt_type {
+       ACPI_MADT_TYPE_LOCAL_APIC = 0,
+       ACPI_MADT_TYPE_IO_APIC = 1,
+       ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2,
+       ACPI_MADT_TYPE_NMI_SOURCE = 3,
+       ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4,
+       ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5,
+       ACPI_MADT_TYPE_IO_SAPIC = 6,
+       ACPI_MADT_TYPE_LOCAL_SAPIC = 7,
+       ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8,
+       ACPI_MADT_TYPE_RESERVED = 9     /* 9 and greater are reserved */
+};
+
+/*
+ * MADT Sub-tables, correspond to Type in struct acpi_subtable_header
+ */
+
+/* 0: Processor Local APIC */
+
+struct acpi_madt_local_apic {
+       struct acpi_subtable_header header;
+       u8 processor_id;        /* ACPI processor id */
+       u8 id;                  /* Processor's local APIC id */
+       u32 lapic_flags;
+};
+
+/* 1: IO APIC */
+
+struct acpi_madt_io_apic {
+       struct acpi_subtable_header header;
+       u8 id;                  /* I/O APIC ID */
+       u8 reserved;            /* Reserved - must be zero */
+       u32 address;            /* APIC physical address */
+       u32 global_irq_base;    /* Global system interrupt where INTI lines 
start */
+};
+
+/* 2: Interrupt Override */
+
+struct acpi_madt_interrupt_override {
+       struct acpi_subtable_header header;
+       u8 bus;                 /* 0 - ISA */
+       u8 source_irq;          /* Interrupt source (IRQ) */
+       u32 global_irq;         /* Global system interrupt */
+       u16 inti_flags;
+};
+
+/* 3: NMI Source */
+
+struct acpi_madt_nmi_source {
+       struct acpi_subtable_header header;
+       u16 inti_flags;
+       u32 global_irq;         /* Global system interrupt */
+};
+
+/* 4: Local APIC NMI */
+
+struct acpi_madt_local_apic_nmi {
+       struct acpi_subtable_header header;
+       u8 processor_id;        /* ACPI processor id */
+       u16 inti_flags;
+       u8 lint;                /* LINTn to which NMI is connected */
+};
+
+/* 5: Address Override */
+
+struct acpi_madt_local_apic_override {
+       struct acpi_subtable_header header;
+       u16 reserved;           /* Reserved, must be zero */
+       u64 address;            /* APIC physical address */
+};
+
+/* 6: I/O Sapic */
+
+struct acpi_madt_io_sapic {
+       struct acpi_subtable_header header;
+       u8 id;                  /* I/O SAPIC ID */
+       u8 reserved;            /* Reserved, must be zero */
+       u32 global_irq_base;    /* Global interrupt for SAPIC start */
+       u64 address;            /* SAPIC physical address */
+};
+
+/* 7: Local Sapic */
+
+struct acpi_madt_local_sapic {
+       struct acpi_subtable_header header;
+       u8 processor_id;        /* ACPI processor id */
+       u8 id;                  /* SAPIC ID */
+       u8 eid;                 /* SAPIC EID */
+       u8 reserved[3];         /* Reserved, must be zero */
+       u32 lapic_flags;
+       u32 uid;                /* Numeric UID - ACPI 3.0 */
+       char uid_string[1];     /* String UID  - ACPI 3.0 */
+};
+
+/* 8: Platform Interrupt Source */
+
+struct acpi_madt_interrupt_source {
+       struct acpi_subtable_header header;
+       u16 inti_flags;
+       u8 type;                /* 1=PMI, 2=INIT, 3=corrected */
+       u8 id;                  /* Processor ID */
+       u8 eid;                 /* Processor EID */
+       u8 io_sapic_vector;     /* Vector value for PMI interrupts */
+       u32 global_irq;         /* Global system interrupt */
+       u32 flags;              /* Interrupt Source Flags */
+};
+
+/* Flags field above */
+
+#define ACPI_MADT_CPEI_OVERRIDE     (1)
+
+/*
+ * Common flags fields for MADT subtables
+ */
+
+/* MADT Local APIC flags (lapic_flags) */
+
+#define ACPI_MADT_ENABLED           (1)        /* 00: Processor is usable if 
set */
+
+/* MADT MPS INTI flags (inti_flags) */
+
+#define ACPI_MADT_POLARITY_MASK     (3)        /* 00-01: Polarity of APIC I/O 
input signals */
+#define ACPI_MADT_TRIGGER_MASK      (3<<2)     /* 02-03: Trigger mode of APIC 
input signals */
+
+/* Values for MPS INTI flags */
+
+#define ACPI_MADT_POLARITY_CONFORMS       0
+#define ACPI_MADT_POLARITY_ACTIVE_HIGH    1
+#define ACPI_MADT_POLARITY_RESERVED       2
+#define ACPI_MADT_POLARITY_ACTIVE_LOW     3
+
+#define ACPI_MADT_TRIGGER_CONFORMS        (0)
+#define ACPI_MADT_TRIGGER_EDGE            (1<<2)
+#define ACPI_MADT_TRIGGER_RESERVED        (2<<2)
+#define ACPI_MADT_TRIGGER_LEVEL           (3<<2)
+
+/*******************************************************************************
+ *
+ * MCFG - PCI Memory Mapped Configuration table and sub-table
+ *
+ 
******************************************************************************/
+
+struct acpi_table_mcfg {
+       struct acpi_table_header header;        /* Common ACPI table header */
+       u8 reserved[8];
+};
+
+/* Subtable */
+
+struct acpi_mcfg_allocation {
+       u64 address;            /* Base address, processor-relative */
+       u16 pci_segment;        /* PCI segment group number */
+       u8 start_bus_number;    /* Starting PCI Bus number */
+       u8 end_bus_number;      /* Final PCI Bus number */
+       u32 reserved;
+};
+
+/*******************************************************************************
+ *
+ * SBST - Smart Battery Specification Table
+ *
+ 
******************************************************************************/
+
+struct acpi_table_sbst {
+       struct acpi_table_header header;        /* Common ACPI table header */
+       u32 warning_level;
+       u32 low_level;
+       u32 critical_level;
+};
+
+/*******************************************************************************
+ *
+ * SLIT - System Locality Distance Information Table
+ *
+ 
******************************************************************************/
+
+struct acpi_table_slit {
+       struct acpi_table_header header;        /* Common ACPI table header */
+       u64 locality_count;
+       u8 entry[1];            /* Real size = localities^2 */
+};
+
+/*******************************************************************************
+ *
+ * SPCR - Serial Port Console Redirection table
+ *
+ 
******************************************************************************/
+
+struct acpi_table_spcr {
+       struct acpi_table_header header;        /* Common ACPI table header */
+       u8 interface_type;      /* 0=full 16550, 1=subset of 16550 */
+       u8 reserved[3];
+       struct acpi_generic_address serial_port;
+       u8 interrupt_type;
+       u8 pc_interrupt;
+       u32 interrupt;
+       u8 baud_rate;
+       u8 parity;
+       u8 stop_bits;
+       u8 flow_control;
+       u8 terminal_type;
+       u8 reserved1;
+       u16 pci_device_id;
+       u16 pci_vendor_id;
+       u8 pci_bus;
+       u8 pci_device;
+       u8 pci_function;
+       u32 pci_flags;
+       u8 pci_segment;
+       u32 reserved2;
+};
+
+/*******************************************************************************
+ *
+ * SPMI - Server Platform Management Interface table
+ *
+ 
******************************************************************************/
+
+struct acpi_table_spmi {
+       struct acpi_table_header header;        /* Common ACPI table header */
+       u8 reserved;
+       u8 interface_type;
+       u16 spec_revision;      /* Version of IPMI */
+       u8 interrupt_type;
+       u8 gpe_number;          /* GPE assigned */
+       u8 reserved1;
+       u8 pci_device_flag;
+       u32 interrupt;
+       struct acpi_generic_address ipmi_register;
+       u8 pci_segment;
+       u8 pci_bus;
+       u8 pci_device;
+       u8 pci_function;
+};
+
+/*******************************************************************************
+ *
+ * SRAT - System Resource Affinity Table
+ *
+ 
******************************************************************************/
+
+struct acpi_table_srat {
+       struct acpi_table_header header;        /* Common ACPI table header */
+       u32 table_revision;     /* Must be value '1' */
+       u64 reserved;           /* Reserved, must be zero */
+};
+
+/* Values for subtable type in struct acpi_subtable_header */
+
+enum acpi_srat_type {
+       ACPI_SRAT_TYPE_CPU_AFFINITY = 0,
+       ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1,
+       ACPI_SRAT_TYPE_RESERVED = 2
+};
+
+/* SRAT sub-tables */
+
+struct acpi_srat_cpu_affinity {
+       struct acpi_subtable_header header;
+       u8 proximity_domain_lo;
+       u8 apic_id;
+       u32 flags;
+       u8 local_sapic_eid;
+       u8 proximity_domain_hi[3];
+       u32 reserved;           /* Reserved, must be zero */
+};
+
+/* Flags */
+
+#define ACPI_SRAT_CPU_ENABLED       (1)        /* 00: Use affinity structure */
+
+struct acpi_srat_mem_affinity {
+       struct acpi_subtable_header header;
+       u32 proximity_domain;
+       u16 reserved;           /* Reserved, must be zero */
+       u64 base_address;
+       u64 length;
+       u32 memory_type;        /* See acpi_address_range_id */
+       u32 flags;
+       u64 reserved1;          /* Reserved, must be zero */
+};
+
+/* Flags */
+
+#define ACPI_SRAT_MEM_ENABLED       (1)        /* 00: Use affinity structure */
+#define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1)     /* 01: Memory region is hot 
pluggable */
+#define ACPI_SRAT_MEM_NON_VOLATILE  (1<<2)     /* 02: Memory region is 
non-volatile */
+
+/*******************************************************************************
+ *
+ * TCPA - Trusted Computing Platform Alliance table
+ *
+ 
******************************************************************************/
+
+struct acpi_table_tcpa {
+       struct acpi_table_header header;        /* Common ACPI table header */
+       u16 reserved;
+       u32 max_log_length;     /* Maximum length for the event log area */
+       u64 log_address;        /* Address of the event log area */
+};
+
+/*******************************************************************************
+ *
+ * WDRT - Watchdog Resource Table
+ *
+ 
******************************************************************************/
+
+struct acpi_table_wdrt {
+       struct acpi_table_header header;        /* Common ACPI table header */
+       u32 header_length;      /* Watchdog Header Length */
+       u8 pci_segment;         /* PCI Segment number */
+       u8 pci_bus;             /* PCI Bus number */
+       u8 pci_device;          /* PCI Device number */
+       u8 pci_function;        /* PCI Function number */
+       u32 timer_period;       /* Period of one timer count (msec) */
+       u32 max_count;          /* Maximum counter value supported */
+       u32 min_count;          /* Minimum counter value */
+       u8 flags;
+       u8 reserved[3];
+       u32 entries;            /* Number of watchdog entries that follow */
+};
+
+/* Flags */
+
+#define ACPI_WDRT_TIMER_ENABLED     (1)        /* 00: Timer enabled */
+
+/* Reset to default packing */
 
 #pragma pack()
 
-#endif /* __ACTBL1_H__ */
-
-
+#endif                         /* __ACTBL1_H__ */
diff -r 5cbfc6c24d32 -r 13cba2e78a65 xen/include/acpi/actbl2.h
--- a/xen/include/acpi/actbl2.h Tue Mar 18 13:14:26 2008 +0000
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,232 +0,0 @@
-/******************************************************************************
- *
- * Name: actbl2.h - ACPI Specification Revision 2.0 Tables
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000 - 2005, R. Byron Moore
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions, and the following disclaimer,
- *    without modification.
- * 2. Redistributions in binary form must reproduce at minimum a disclaimer
- *    substantially similar to the "NO WARRANTY" disclaimer below
- *    ("Disclaimer") and any redistribution must be conditioned upon
- *    including a substantially similar Disclaimer requirement for further
- *    binary redistribution.
- * 3. Neither the names of the above-listed copyright holders nor the names
- *    of any contributors may be used to endorse or promote products derived
- *    from this software without specific prior written permission.
- *
- * Alternatively, this software may be distributed under the terms of the
- * GNU General Public License ("GPL") version 2 as published by the Free
- * Software Foundation.
- *
- * NO WARRANTY
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef __ACTBL2_H__
-#define __ACTBL2_H__
-
-/*
- * Prefered Power Management Profiles
- */
-#define PM_UNSPECIFIED                  0
-#define PM_DESKTOP                      1
-#define PM_MOBILE                       2
-#define PM_WORKSTATION                  3
-#define PM_ENTERPRISE_SERVER            4
-#define PM_SOHO_SERVER                  5
-#define PM_APPLIANCE_PC                 6
-
-/*
- * ACPI Boot Arch Flags
- */
-#define BAF_LEGACY_DEVICES              0x0001
-#define BAF_8042_KEYBOARD_CONTROLLER    0x0002
-
-#define FADT2_REVISION_ID               3
-#define FADT2_MINUS_REVISION_ID         2
-
-
-#pragma pack(1)
-
-/*
- * ACPI 2.0 Root System Description Table (RSDT)
- */
-struct rsdt_descriptor_rev2
-{
-       ACPI_TABLE_HEADER_DEF                           /* ACPI common table 
header */
-       u32                             table_offset_entry [1]; /* Array of 
pointers to  */
-                        /* ACPI table headers */
-};
-
-
-/*
- * ACPI 2.0 Extended System Description Table (XSDT)
- */
-struct xsdt_descriptor_rev2
-{
-       ACPI_TABLE_HEADER_DEF                           /* ACPI common table 
header */
-       u64                             table_offset_entry [1]; /* Array of 
pointers to  */
-                        /* ACPI table headers */
-};
-
-
-/*
- * ACPI 2.0 Firmware ACPI Control Structure (FACS)
- */
-struct facs_descriptor_rev2
-{
-       char                            signature[4];           /* ACPI 
signature */
-       u32                             length;                 /* Length of 
structure, in bytes */
-       u32                             hardware_signature;     /* Hardware 
configuration signature */
-       u32                             firmware_waking_vector; /* 32bit 
physical address of the Firmware Waking Vector. */
-       u32                             global_lock;            /* Global Lock 
used to synchronize access to shared hardware resources */
-       u32                             S4bios_f        : 1;    /* S4Bios_f - 
Indicates if S4BIOS support is present */
-       u32                             reserved1       : 31;   /* Must be 0 */
-       u64                             xfirmware_waking_vector; /* 64bit 
physical address of the Firmware Waking Vector. */
-       u8                              version;                /* Version of 
this table */
-       u8                              reserved3 [31];         /* Reserved - 
must be zero */
-};
-
-
-/*
- * ACPI 2.0 Generic Address Structure (GAS)
- */
-struct acpi_generic_address
-{
-       u8                              address_space_id;       /* Address 
space where struct or register exists. */
-       u8                              register_bit_width;     /* Size in bits 
of given register */
-       u8                              register_bit_offset;    /* Bit offset 
within the register */
-       u8                              access_width;           /* Minimum 
Access size (ACPI 3.0) */
-       u64                             address;                /* 64-bit 
address of struct or register */
-};
-
-
-#define FADT_REV2_COMMON \
-       u32                             V1_firmware_ctrl;   /* 32-bit physical 
address of FACS */ \
-       u32                             V1_dsdt;            /* 32-bit physical 
address of DSDT */ \
-       u8                              reserved1;          /* System Interrupt 
Model isn't used in ACPI 2.0*/ \
-       u8                              prefer_PM_profile;  /* Conveys 
preferred power management profile to OSPM. */ \
-       u16                             sci_int;            /* System vector of 
SCI interrupt */ \
-       u32                             smi_cmd;            /* Port address of 
SMI command port */ \
-       u8                              acpi_enable;        /* Value to write 
to smi_cmd to enable ACPI */ \
-       u8                              acpi_disable;       /* Value to write 
to smi_cmd to disable ACPI */ \
-       u8                              S4bios_req;         /* Value to write 
to SMI CMD to enter S4BIOS state */ \
-       u8                              pstate_cnt;         /* Processor 
performance state control*/ \
-       u32                             V1_pm1a_evt_blk;    /* Port address of 
Power Mgt 1a acpi_event Reg Blk */ \
-       u32                             V1_pm1b_evt_blk;    /* Port address of 
Power Mgt 1b acpi_event Reg Blk */ \
-       u32                             V1_pm1a_cnt_blk;    /* Port address of 
Power Mgt 1a Control Reg Blk */ \
-       u32                             V1_pm1b_cnt_blk;    /* Port address of 
Power Mgt 1b Control Reg Blk */ \
-       u32                             V1_pm2_cnt_blk;     /* Port address of 
Power Mgt 2 Control Reg Blk */ \
-       u32                             V1_pm_tmr_blk;      /* Port address of 
Power Mgt Timer Ctrl Reg Blk */ \
-       u32                             V1_gpe0_blk;        /* Port addr of 
General Purpose acpi_event 0 Reg Blk */ \
-       u32                             V1_gpe1_blk;        /* Port addr of 
General Purpose acpi_event 1 Reg Blk */ \
-       u8                              pm1_evt_len;        /* Byte length of 
ports at pm1_x_evt_blk */ \
-       u8                              pm1_cnt_len;        /* Byte length of 
ports at pm1_x_cnt_blk */ \
-       u8                              pm2_cnt_len;        /* Byte Length of 
ports at pm2_cnt_blk */ \
-       u8                              pm_tm_len;          /* Byte Length of 
ports at pm_tm_blk */ \
-       u8                              gpe0_blk_len;       /* Byte Length of 
ports at gpe0_blk */ \
-       u8                              gpe1_blk_len;       /* Byte Length of 
ports at gpe1_blk */ \
-       u8                              gpe1_base;          /* Offset in gpe 
model where gpe1 events start */ \
-       u8                              cst_cnt;            /* Support for the 
_CST object and C States change notification.*/ \
-       u16                             plvl2_lat;          /* Worst case HW 
latency to enter/exit C2 state */ \
-       u16                             plvl3_lat;          /* Worst case HW 
latency to enter/exit C3 state */ \
-       u16                             flush_size;         /* Number of flush 
strides that need to be read */ \
-       u16                             flush_stride;       /* Processor's 
memory cache line width, in bytes */ \
-       u8                              duty_offset;        /* Processor's duty 
cycle index in processor's P_CNT reg*/ \
-       u8                              duty_width;         /* Processor's duty 
cycle value bit width in P_CNT register.*/ \
-       u8                              day_alrm;           /* Index to 
day-of-month alarm in RTC CMOS RAM */ \
-       u8                              mon_alrm;           /* Index to 
month-of-year alarm in RTC CMOS RAM */ \
-       u8                              century;            /* Index to century 
in RTC CMOS RAM */ \
-       u16                             iapc_boot_arch;     /* IA-PC Boot 
Architecture Flags. See Table 5-10 for description*/
-
-/*
- * ACPI 2.0 Fixed ACPI Description Table (FADT)
- */
-struct fadt_descriptor_rev2
-{
-       ACPI_TABLE_HEADER_DEF                       /* ACPI common table header 
*/
-       FADT_REV2_COMMON
-       u8                              reserved2;          /* Reserved */
-       u32                             wb_invd     : 1;    /* The wbinvd 
instruction works properly */
-       u32                             wb_invd_flush : 1;  /* The wbinvd 
flushes but does not invalidate */
-       u32                             proc_c1     : 1;    /* All processors 
support C1 state */
-       u32                             plvl2_up    : 1;    /* C2 state works 
on MP system */
-       u32                             pwr_button  : 1;    /* Power button is 
handled as a generic feature */
-       u32                             sleep_button : 1;   /* Sleep button is 
handled as a generic feature, or not present */
-       u32                             fixed_rTC   : 1;    /* RTC wakeup stat 
not in fixed register space */
-       u32                             rtcs4       : 1;    /* RTC wakeup stat 
not possible from S4 */
-       u32                             tmr_val_ext : 1;    /* Indicates 
tmr_val is 32 bits 0=24-bits*/
-       u32                             dock_cap    : 1;    /* Supports Docking 
*/
-       u32                             reset_reg_sup : 1;  /* Indicates system 
supports system reset via the FADT RESET_REG*/
-       u32                             sealed_case : 1;    /* Indicates system 
has no internal expansion capabilities and case is sealed. */
-       u32                             headless    : 1;    /* Indicates system 
does not have local video capabilities or local input devices.*/
-       u32                             cpu_sw_sleep : 1;   /* Indicates to 
OSPM that a processor native instruction */
-                          /* Must be executed after writing the SLP_TYPx 
register. */
-       u32                             reserved6   : 18;   /* Reserved - must 
be zero */
-
-       struct acpi_generic_address     reset_register;     /* Reset register 
address in GAS format */
-       u8                              reset_value;        /* Value to write 
to the reset_register port to reset the system. */
-       u8                              reserved7[3];       /* These three 
bytes must be zero */
-       u64                             xfirmware_ctrl;     /* 64-bit physical 
address of FACS */
-       u64                             Xdsdt;              /* 64-bit physical 
address of DSDT */
-       struct acpi_generic_address     xpm1a_evt_blk;      /* Extended Power 
Mgt 1a acpi_event Reg Blk address */
-       struct acpi_generic_address     xpm1b_evt_blk;      /* Extended Power 
Mgt 1b acpi_event Reg Blk address */
-       struct acpi_generic_address     xpm1a_cnt_blk;      /* Extended Power 
Mgt 1a Control Reg Blk address */
-       struct acpi_generic_address     xpm1b_cnt_blk;      /* Extended Power 
Mgt 1b Control Reg Blk address */
-       struct acpi_generic_address     xpm2_cnt_blk;       /* Extended Power 
Mgt 2 Control Reg Blk address */
-       struct acpi_generic_address     xpm_tmr_blk;        /* Extended Power 
Mgt Timer Ctrl Reg Blk address */
-       struct acpi_generic_address     xgpe0_blk;          /* Extended General 
Purpose acpi_event 0 Reg Blk address */
-       struct acpi_generic_address     xgpe1_blk;          /* Extended General 
Purpose acpi_event 1 Reg Blk address */
-};
-
-
-/* "Downrevved" ACPI 2.0 FADT descriptor */
-
-struct fadt_descriptor_rev2_minus
-{
-       ACPI_TABLE_HEADER_DEF                       /* ACPI common table header 
*/
-       FADT_REV2_COMMON
-       u8                              reserved2;          /* Reserved */
-       u32                             flags;
-       struct acpi_generic_address     reset_register;     /* Reset register 
address in GAS format */
-       u8                              reset_value;        /* Value to write 
to the reset_register port to reset the system. */
-       u8                              reserved7[3];       /* These three 
bytes must be zero */
-};
-
-
-/* Embedded Controller */
-
-struct ec_boot_resources
-{
-       ACPI_TABLE_HEADER_DEF
-       struct acpi_generic_address     ec_control;         /* Address of EC 
command/status register */
-       struct acpi_generic_address     ec_data;            /* Address of EC 
data register */
-       u32                             uid;                /* Unique ID - must 
be same as the EC _UID method */
-       u8                              gpe_bit;            /* The GPE for the 
EC */
-       u8                              ec_id[1];           /* Full namepath of 
the EC in the ACPI namespace */
-};
-
-
-#pragma pack()
-
-#endif /* __ACTBL2_H__ */
-
diff -r 5cbfc6c24d32 -r 13cba2e78a65 xen/include/acpi/actypes.h
--- a/xen/include/acpi/actypes.h        Tue Mar 18 13:14:26 2008 +0000
+++ b/xen/include/acpi/actypes.h        Tue Mar 18 14:55:36 2008 +0000
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2005, R. Byron Moore
+ * Copyright (C) 2000 - 2007, R. Byron Moore
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -44,9 +44,18 @@
 #ifndef __ACTYPES_H__
 #define __ACTYPES_H__
 
-/*! [Begin] no source code translation (keep the typedefs) */
-
-
+/* acpisrc:struct_defs -- for acpisrc conversion */
+
+/*
+ * ACPI_MACHINE_WIDTH must be specified in an OS- or compiler-dependent header
+ * and must be either 32 or 64. 16-bit ACPICA is no longer supported, as of
+ * 12/2006.
+ */
+#ifndef ACPI_MACHINE_WIDTH
+#error ACPI_MACHINE_WIDTH not defined
+#endif
+
+/*! [Begin] no source code translation */
 
 /*
  * Data type ranges
@@ -54,199 +63,223 @@
  * working around problems that some 32-bit compilers have with 64-bit
  * constants.
  */
-#define ACPI_UINT8_MAX                  (UINT8) (~((UINT8)  0)) /* 0xFF        
       */
-#define ACPI_UINT16_MAX                 (UINT16)(~((UINT16) 0)) /* 0xFFFF      
       */
-#define ACPI_UINT32_MAX                 (UINT32)(~((UINT32) 0)) /* 0xFFFFFFFF  
       */
-#define ACPI_UINT64_MAX                 (UINT64)(~((UINT64) 0)) /* 
0xFFFFFFFFFFFFFFFF */
+#define ACPI_UINT8_MAX                  (UINT8) (~((UINT8)  0))        /* 0xFF 
              */
+#define ACPI_UINT16_MAX                 (UINT16)(~((UINT16) 0))        /* 
0xFFFF             */
+#define ACPI_UINT32_MAX                 (UINT32)(~((UINT32) 0))        /* 
0xFFFFFFFF         */
+#define ACPI_UINT64_MAX                 (UINT64)(~((UINT64) 0))        /* 
0xFFFFFFFFFFFFFFFF */
 #define ACPI_ASCII_MAX                  0x7F
 
-
-#ifdef DEFINE_ALTERNATE_TYPES
-/*
- * Types used only in translated source, defined here to enable
- * cross-platform compilation only.
- */
-typedef int                             s32;
-typedef unsigned char                   u8;
-typedef unsigned short                  u16;
-typedef unsigned int                    u32;
-typedef COMPILER_DEPENDENT_UINT64       u64;
-
-#endif
-
-
-/*
- * Data types - Fixed across all compilation models (16/32/64)
- *
- * BOOLEAN          Logical Boolean.
- * INT8             8-bit  (1 byte) signed value
- * UINT8            8-bit  (1 byte) unsigned value
- * INT16            16-bit (2 byte) signed value
- * UINT16           16-bit (2 byte) unsigned value
- * INT32            32-bit (4 byte) signed value
- * UINT32           32-bit (4 byte) unsigned value
- * INT64            64-bit (8 byte) signed value
- * UINT64           64-bit (8 byte) unsigned value
- * ACPI_NATIVE_INT  32-bit on IA-32, 64-bit on IA-64 signed value
- * ACPI_NATIVE_UINT 32-bit on IA-32, 64-bit on IA-64 unsigned value
- */
-
-#ifndef ACPI_MACHINE_WIDTH
-#error ACPI_MACHINE_WIDTH not defined
-#endif
+/*
+ * Architecture-specific ACPICA Subsystem Data Types
+ *
+ * The goal of these types is to provide source code portability across
+ * 16-bit, 32-bit, and 64-bit targets.
+ *
+ * 1) The following types are of fixed size for all targets (16/32/64):
+ *
+ * BOOLEAN      Logical boolean
+ *
+ * UINT8        8-bit  (1 byte) unsigned value
+ * UINT16       16-bit (2 byte) unsigned value
+ * UINT32       32-bit (4 byte) unsigned value
+ * UINT64       64-bit (8 byte) unsigned value
+ *
+ * INT16        16-bit (2 byte) signed value
+ * INT32        32-bit (4 byte) signed value
+ * INT64        64-bit (8 byte) signed value
+ *
+ * COMPILER_DEPENDENT_UINT64/INT64 - These types are defined in the
+ * compiler-dependent header(s) and were introduced because there is no common
+ * 64-bit integer type across the various compilation models, as shown in
+ * the table below.
+ *
+ * Datatype  LP64 ILP64 LLP64 ILP32 LP32 16bit
+ * char      8    8     8     8     8    8
+ * short     16   16    16    16    16   16
+ * _int32         32
+ * int       32   64    32    32    16   16
+ * long      64   64    32    32    32   32
+ * long long            64    64
+ * pointer   64   64    64    32    32   32
+ *
+ * Note: ILP64 and LP32 are currently not supported.
+ *
+ *
+ * 2) These types represent the native word size of the target mode of the
+ * processor, and may be 16-bit, 32-bit, or 64-bit as required. They are
+ * usually used for memory allocation, efficient loop counters, and array
+ * indexes. The types are similar to the size_t type in the C library and are
+ * required because there is no C type that consistently represents the native
+ * data width.
+ *
+ * ACPI_SIZE        16/32/64-bit unsigned value
+ * ACPI_NATIVE_UINT 16/32/64-bit unsigned value
+ * ACPI_NATIVE_INT  16/32/64-bit signed value
+ *
+ */
+
+/*******************************************************************************
+ *
+ * Common types for all compilers, all targets
+ *
+ 
******************************************************************************/
+
+typedef unsigned char BOOLEAN;
+typedef unsigned char UINT8;
+typedef unsigned short UINT16;
+typedef COMPILER_DEPENDENT_UINT64 UINT64;
+typedef COMPILER_DEPENDENT_INT64 INT64;
+
+/*! [End] no source code translation !*/
+
+/*******************************************************************************
+ *
+ * Types specific to 64-bit targets
+ *
+ 
******************************************************************************/
 
 #if ACPI_MACHINE_WIDTH == 64
 
-/*! [Begin] no source code translation (keep the typedefs) */
-
-/*
- * 64-bit type definitions
- */
-typedef unsigned char                   UINT8;
-typedef unsigned char                   BOOLEAN;
-typedef unsigned short                  UINT16;
-typedef int                             INT32;
-typedef unsigned int                    UINT32;
-typedef COMPILER_DEPENDENT_INT64        INT64;
-typedef COMPILER_DEPENDENT_UINT64       UINT64;
+/*! [Begin] no source code translation (keep the typedefs as-is) */
+
+typedef unsigned int UINT32;
+typedef int INT32;
 
 /*! [End] no source code translation !*/
 
-typedef s64                                     acpi_native_int;
-typedef u64                                     acpi_native_uint;
-
-typedef u64                                     acpi_table_ptr;
-typedef u64                                     acpi_io_address;
-typedef u64                                     acpi_physical_address;
-typedef u64                                     acpi_size;
-
-#define ALIGNED_ADDRESS_BOUNDARY        0x00000008      /* No hardware 
alignment support in IA64 */
-#define ACPI_USE_NATIVE_DIVIDE                          /* Native 64-bit 
integer support */
+typedef u64 acpi_native_uint;
+typedef s64 acpi_native_int;
+
+typedef u64 acpi_io_address;
+typedef u64 acpi_physical_address;
+
 #define ACPI_MAX_PTR                    ACPI_UINT64_MAX
 #define ACPI_SIZE_MAX                   ACPI_UINT64_MAX
 
-
-#elif ACPI_MACHINE_WIDTH == 16
-
-/*! [Begin] no source code translation (keep the typedefs) */
-
-/*
- * 16-bit type definitions
- */
-typedef unsigned char                   UINT8;
-typedef unsigned char                   BOOLEAN;
-typedef unsigned int                    UINT16;
-typedef long                            INT32;
-typedef int                             INT16;
-typedef unsigned long                   UINT32;
-
-struct
-{
-       UINT32                                  Lo;
-       UINT32                                  Hi;
-};
+#define ACPI_USE_NATIVE_DIVIDE /* Has native 64-bit integer support */
+
+/*
+ * In the case of the Itanium Processor Family (IPF), the hardware does not
+ * support misaligned memory transfers. Set the MISALIGNMENT_NOT_SUPPORTED flag
+ * to indicate that special precautions must be taken to avoid alignment 
faults.
+ * (IA64 or ia64 is currently used by existing compilers to indicate IPF.)
+ *
+ * Note: Em64_t and other X86-64 processors support misaligned transfers,
+ * so there is no need to define this flag.
+ */
+#if defined (__IA64__) || defined (__ia64__)
+#define ACPI_MISALIGNMENT_NOT_SUPPORTED
+#endif
+
+/*******************************************************************************
+ *
+ * Types specific to 32-bit targets
+ *
+ 
******************************************************************************/
+
+#elif ACPI_MACHINE_WIDTH == 32
+
+/*! [Begin] no source code translation (keep the typedefs as-is) */
+
+typedef unsigned int UINT32;
+typedef int INT32;
 
 /*! [End] no source code translation !*/
 
-typedef u16                                     acpi_native_uint;
-typedef s16                                     acpi_native_int;
-
-typedef u32                                     acpi_table_ptr;
-typedef u32                                     acpi_io_address;
-typedef char                                    *acpi_physical_address;
-typedef u16                                     acpi_size;
-
-#define ALIGNED_ADDRESS_BOUNDARY        0x00000002
-#define ACPI_MISALIGNED_TRANSFERS
-#define ACPI_USE_NATIVE_DIVIDE                          /* No 64-bit integers, 
ok to use native divide */
-#define ACPI_MAX_PTR                    ACPI_UINT16_MAX
-#define ACPI_SIZE_MAX                   ACPI_UINT16_MAX
-
-/*
- * (16-bit only) internal integers must be 32-bits, so
- * 64-bit integers cannot be supported
- */
-#define ACPI_NO_INTEGER64_SUPPORT
-
-
-#elif ACPI_MACHINE_WIDTH == 32
-
-/*! [Begin] no source code translation (keep the typedefs) */
-
-/*
- * 32-bit type definitions (default)
- */
-typedef unsigned char                   UINT8;
-typedef unsigned char                   BOOLEAN;
-typedef unsigned short                  UINT16;
-typedef int                             INT32;
-typedef unsigned int                    UINT32;
-typedef COMPILER_DEPENDENT_INT64        INT64;
-typedef COMPILER_DEPENDENT_UINT64       UINT64;
-
-/*! [End] no source code translation !*/
-
-typedef s32                                     acpi_native_int;
-typedef u32                                     acpi_native_uint;
-
-typedef u64                                     acpi_table_ptr;
-typedef u32                                     acpi_io_address;
-typedef u64                                     acpi_physical_address;
-typedef u32                                     acpi_size;
-
-#define ALIGNED_ADDRESS_BOUNDARY        0x00000004
-#define ACPI_MISALIGNED_TRANSFERS
+typedef u32 acpi_native_uint;
+typedef s32 acpi_native_int;
+
+typedef u32 acpi_io_address;
+typedef u32 acpi_physical_address;
+
 #define ACPI_MAX_PTR                    ACPI_UINT32_MAX
 #define ACPI_SIZE_MAX                   ACPI_UINT32_MAX
 
 #else
+
+/* ACPI_MACHINE_WIDTH must be either 64 or 32 */
+
 #error unknown ACPI_MACHINE_WIDTH
 #endif
 
-
-/*
- * Miscellaneous common types
- */
-typedef u16                                     UINT16_BIT;
-typedef u32                                     UINT32_BIT;
-typedef acpi_native_uint                        ACPI_PTRDIFF;
-
-/*
- * Pointer overlays to avoid lots of typecasting for
- * code that accepts both physical and logical pointers.
- */
-union acpi_pointers
-{
-       acpi_physical_address               physical;
-       void                                *logical;
-       acpi_table_ptr                      value;
-};
-
-struct acpi_pointer
-{
-       u32                                 pointer_type;
-       union acpi_pointers                 pointer;
-};
-
-/* pointer_types for above */
-
-#define ACPI_PHYSICAL_POINTER           0x01
-#define ACPI_LOGICAL_POINTER            0x02
-
-/* Processor mode */
-
-#define ACPI_PHYSICAL_ADDRESSING        0x04
-#define ACPI_LOGICAL_ADDRESSING         0x08
-#define ACPI_MEMORY_MODE                0x0C
-
-#define ACPI_PHYSMODE_PHYSPTR           ACPI_PHYSICAL_ADDRESSING | 
ACPI_PHYSICAL_POINTER
-#define ACPI_LOGMODE_PHYSPTR            ACPI_LOGICAL_ADDRESSING  | 
ACPI_PHYSICAL_POINTER
-#define ACPI_LOGMODE_LOGPTR             ACPI_LOGICAL_ADDRESSING  | 
ACPI_LOGICAL_POINTER
-
-
-/*
- * Useful defines
- */
+/* Variable-width type, used instead of clib size_t */
+
+typedef acpi_native_uint acpi_size;
+
+/*******************************************************************************
+ *
+ * OS-dependent and compiler-dependent types
+ *
+ * If the defaults below are not appropriate for the host system, they can
+ * be defined in the compiler-specific or OS-specific header, and this will
+ * take precedence.
+ *
+ 
******************************************************************************/
+
+/* Value returned by acpi_os_get_thread_id */
+
+#ifndef acpi_thread_id
+#define acpi_thread_id                  acpi_native_uint
+#endif
+
+/* Object returned from acpi_os_create_lock */
+
+#ifndef acpi_spinlock
+#define acpi_spinlock                   void *
+#endif
+
+/* Flags for acpi_os_acquire_lock/acpi_os_release_lock */
+
+#ifndef acpi_cpu_flags
+#define acpi_cpu_flags                  acpi_native_uint
+#endif
+
+/* Object returned from acpi_os_create_cache */
+
+#ifndef acpi_cache_t
+#define acpi_cache_t                    struct acpi_memory_list
+#endif
+
+/* Use C99 uintptr_t for pointer casting if available, "void *" otherwise */
+
+#ifndef acpi_uintptr_t
+#define acpi_uintptr_t                  void *
+#endif
+
+/*
+ * ACPI_PRINTF_LIKE is used to tag functions as "printf-like" because
+ * some compilers can catch printf format string problems
+ */
+#ifndef ACPI_PRINTF_LIKE
+#define ACPI_PRINTF_LIKE(c)
+#endif
+
+/*
+ * Some compilers complain about unused variables. Sometimes we don't want to
+ * use all the variables (for example, _acpi_module_name). This allows us
+ * to to tell the compiler in a per-variable manner that a variable
+ * is unused
+ */
+#ifndef ACPI_UNUSED_VAR
+#define ACPI_UNUSED_VAR
+#endif
+
+/*
+ * All ACPICA functions that are available to the rest of the kernel are
+ * tagged with this macro which can be defined as appropriate for the host.
+ */
+#ifndef ACPI_EXPORT_SYMBOL
+#define ACPI_EXPORT_SYMBOL(symbol)
+#endif
+
+/*******************************************************************************
+ *
+ * Independent types
+ *
+ 
******************************************************************************/
+
+/* Logical defines and NULL */
+
 #ifdef FALSE
 #undef FALSE
 #endif
@@ -261,33 +294,33 @@ struct acpi_pointer
 #define NULL                            (void *) 0
 #endif
 
-
-/*
- * Local datatypes
- */
-typedef u32                                     acpi_status;    /* All ACPI 
Exceptions */
-typedef u32                                     acpi_name;      /* 4-byte ACPI 
name */
-typedef char *                                  acpi_string;    /* Null 
terminated ASCII string */
-typedef void *                                  acpi_handle;    /* Actually a 
ptr to an Node */
-
-struct uint64_struct
-{
-       u32                                 lo;
-       u32                                 hi;
-};
-
-union uint64_overlay
-{
-       u64                                 full;
-       struct uint64_struct                part;
-};
-
-struct uint32_struct
-{
-       u32                                 lo;
-       u32                                 hi;
-};
-
+/*
+ * Mescellaneous types
+ */
+typedef u32 acpi_status;       /* All ACPI Exceptions */
+typedef u32 acpi_name;         /* 4-byte ACPI name */
+typedef char *acpi_string;     /* Null terminated ASCII string */
+typedef void *acpi_handle;     /* Actually a ptr to a NS Node */
+
+struct uint64_struct {
+       u32 lo;
+       u32 hi;
+};
+
+union uint64_overlay {
+       u64 full;
+       struct uint64_struct part;
+};
+
+struct uint32_struct {
+       u32 lo;
+       u32 hi;
+};
+
+/* Synchronization objects */
+
+#define acpi_mutex                      void *
+#define acpi_semaphore                  void *
 
 /*
  * Acpi integer width. In ACPI version 1, integers are
@@ -300,26 +333,24 @@ struct uint32_struct
 
 /* 32-bit integers only, no 64-bit support */
 
-typedef u32                                     acpi_integer;
+typedef u32 acpi_integer;
 #define ACPI_INTEGER_MAX                ACPI_UINT32_MAX
 #define ACPI_INTEGER_BIT_SIZE           32
-#define ACPI_MAX_DECIMAL_DIGITS         10  /* 2^32 = 4,294,967,296 */
-
-#define ACPI_USE_NATIVE_DIVIDE          /* Use compiler native 32-bit divide */
-
+#define ACPI_MAX_DECIMAL_DIGITS         10     /* 2^32 = 4,294,967,296 */
+
+#define ACPI_USE_NATIVE_DIVIDE /* Use compiler native 32-bit divide */
 
 #else
 
 /* 64-bit integers */
 
-typedef u64                                     acpi_integer;
+typedef unsigned long long acpi_integer;
 #define ACPI_INTEGER_MAX                ACPI_UINT64_MAX
 #define ACPI_INTEGER_BIT_SIZE           64
-#define ACPI_MAX_DECIMAL_DIGITS         20  /* 2^64 = 
18,446,744,073,709,551,616 */
-
+#define ACPI_MAX_DECIMAL_DIGITS         20     /* 2^64 = 
18,446,744,073,709,551,616 */
 
 #if ACPI_MACHINE_WIDTH == 64
-#define ACPI_USE_NATIVE_DIVIDE          /* Use compiler native 64-bit divide */
+#define ACPI_USE_NATIVE_DIVIDE /* Use compiler native 64-bit divide */
 #endif
 #endif
 
@@ -331,8 +362,7 @@ typedef u64                             
 /*
  * Constants with special meanings
  */
-#define ACPI_ROOT_OBJECT                (acpi_handle) ACPI_PTR_ADD (char, 
NULL, ACPI_MAX_PTR)
-
+#define ACPI_ROOT_OBJECT                ACPI_ADD_PTR (acpi_handle, NULL, 
ACPI_MAX_PTR)
 
 /*
  * Initialization sequence
@@ -349,7 +379,8 @@ typedef u64                             
 /*
  * Initialization state
  */
-#define ACPI_INITIALIZED_OK             0x01
+#define ACPI_SUBSYSTEM_INITIALIZE       0x01
+#define ACPI_INITIALIZED_OK             0x02
 
 /*
  * Power state values
@@ -398,21 +429,6 @@ typedef u64                             
 #define ACPI_NOTIFY_POWER_FAULT         (u8) 7
 
 /*
- *  Table types.  These values are passed to the table related APIs
- */
-typedef u32                                     acpi_table_type;
-
-#define ACPI_TABLE_RSDP                 (acpi_table_type) 0
-#define ACPI_TABLE_DSDT                 (acpi_table_type) 1
-#define ACPI_TABLE_FADT                 (acpi_table_type) 2
-#define ACPI_TABLE_FACS                 (acpi_table_type) 3
-#define ACPI_TABLE_PSDT                 (acpi_table_type) 4
-#define ACPI_TABLE_SSDT                 (acpi_table_type) 5
-#define ACPI_TABLE_XSDT                 (acpi_table_type) 6
-#define ACPI_TABLE_MAX                  6
-#define NUM_ACPI_TABLE_TYPES            (ACPI_TABLE_MAX+1)
-
-/*
  * Types associated with ACPI names and objects.  The first group of
  * values (up to ACPI_TYPE_EXTERNAL_MAX) correspond to the definition
  * of the ACPI object_type() operator (See the ACPI Spec). Therefore,
@@ -421,22 +437,22 @@ typedef u32                             
  * NOTE: Types must be kept in sync with the global acpi_ns_properties
  * and acpi_ns_type_names arrays.
  */
-typedef u32                                     acpi_object_type;
+typedef u32 acpi_object_type;
 
 #define ACPI_TYPE_ANY                   0x00
-#define ACPI_TYPE_INTEGER               0x01  /* Byte/Word/Dword/Zero/One/Ones 
*/
+#define ACPI_TYPE_INTEGER               0x01   /* 
Byte/Word/Dword/Zero/One/Ones */
 #define ACPI_TYPE_STRING                0x02
 #define ACPI_TYPE_BUFFER                0x03
-#define ACPI_TYPE_PACKAGE               0x04  /* byte_const, multiple 
data_term/Constant/super_name */
+#define ACPI_TYPE_PACKAGE               0x04   /* byte_const, multiple 
data_term/Constant/super_name */
 #define ACPI_TYPE_FIELD_UNIT            0x05
-#define ACPI_TYPE_DEVICE                0x06  /* Name, multiple Node */
+#define ACPI_TYPE_DEVICE                0x06   /* Name, multiple Node */
 #define ACPI_TYPE_EVENT                 0x07
-#define ACPI_TYPE_METHOD                0x08  /* Name, byte_const, multiple 
Code */
+#define ACPI_TYPE_METHOD                0x08   /* Name, byte_const, multiple 
Code */
 #define ACPI_TYPE_MUTEX                 0x09
 #define ACPI_TYPE_REGION                0x0A
-#define ACPI_TYPE_POWER                 0x0B  /* 
Name,byte_const,word_const,multi Node */
-#define ACPI_TYPE_PROCESSOR             0x0C  /* 
Name,byte_const,Dword_const,byte_const,multi nm_o */
-#define ACPI_TYPE_THERMAL               0x0D  /* Name, multiple Node */
+#define ACPI_TYPE_POWER                 0x0B   /* 
Name,byte_const,word_const,multi Node */
+#define ACPI_TYPE_PROCESSOR             0x0C   /* 
Name,byte_const,Dword_const,byte_const,multi nm_o */
+#define ACPI_TYPE_THERMAL               0x0D   /* Name, multiple Node */
 #define ACPI_TYPE_BUFFER_FIELD          0x0E
 #define ACPI_TYPE_DDB_HANDLE            0x0F
 #define ACPI_TYPE_DEBUG_OBJECT          0x10
@@ -453,16 +469,16 @@ typedef u32                             
 #define ACPI_TYPE_LOCAL_REGION_FIELD    0x11
 #define ACPI_TYPE_LOCAL_BANK_FIELD      0x12
 #define ACPI_TYPE_LOCAL_INDEX_FIELD     0x13
-#define ACPI_TYPE_LOCAL_REFERENCE       0x14  /* Arg#, Local#, Name, Debug, 
ref_of, Index */
+#define ACPI_TYPE_LOCAL_REFERENCE       0x14   /* Arg#, Local#, Name, Debug, 
ref_of, Index */
 #define ACPI_TYPE_LOCAL_ALIAS           0x15
 #define ACPI_TYPE_LOCAL_METHOD_ALIAS    0x16
 #define ACPI_TYPE_LOCAL_NOTIFY          0x17
 #define ACPI_TYPE_LOCAL_ADDRESS_HANDLER 0x18
 #define ACPI_TYPE_LOCAL_RESOURCE        0x19
 #define ACPI_TYPE_LOCAL_RESOURCE_FIELD  0x1A
-#define ACPI_TYPE_LOCAL_SCOPE           0x1B  /* 1 Name, multiple object_list 
Nodes */
-
-#define ACPI_TYPE_NS_NODE_MAX           0x1B  /* Last typecode used within a 
NS Node */
+#define ACPI_TYPE_LOCAL_SCOPE           0x1B   /* 1 Name, multiple object_list 
Nodes */
+
+#define ACPI_TYPE_NS_NODE_MAX           0x1B   /* Last typecode used within a 
NS Node */
 
 /*
  * These are special object types that never appear in
@@ -477,38 +493,6 @@ typedef u32                             
 
 #define ACPI_TYPE_INVALID               0x1E
 #define ACPI_TYPE_NOT_FOUND             0xFF
-
-
-/*
- * Bitmapped ACPI types.  Used internally only
- */
-#define ACPI_BTYPE_ANY                  0x00000000
-#define ACPI_BTYPE_INTEGER              0x00000001
-#define ACPI_BTYPE_STRING               0x00000002
-#define ACPI_BTYPE_BUFFER               0x00000004
-#define ACPI_BTYPE_PACKAGE              0x00000008
-#define ACPI_BTYPE_FIELD_UNIT           0x00000010
-#define ACPI_BTYPE_DEVICE               0x00000020
-#define ACPI_BTYPE_EVENT                0x00000040
-#define ACPI_BTYPE_METHOD               0x00000080
-#define ACPI_BTYPE_MUTEX                0x00000100
-#define ACPI_BTYPE_REGION               0x00000200
-#define ACPI_BTYPE_POWER                0x00000400
-#define ACPI_BTYPE_PROCESSOR            0x00000800
-#define ACPI_BTYPE_THERMAL              0x00001000
-#define ACPI_BTYPE_BUFFER_FIELD         0x00002000
-#define ACPI_BTYPE_DDB_HANDLE           0x00004000
-#define ACPI_BTYPE_DEBUG_OBJECT         0x00008000
-#define ACPI_BTYPE_REFERENCE            0x00010000
-#define ACPI_BTYPE_RESOURCE             0x00020000
-
-#define ACPI_BTYPE_COMPUTE_DATA         (ACPI_BTYPE_INTEGER | 
ACPI_BTYPE_STRING | ACPI_BTYPE_BUFFER)
-
-#define ACPI_BTYPE_DATA                 (ACPI_BTYPE_COMPUTE_DATA  | 
ACPI_BTYPE_PACKAGE)
-#define ACPI_BTYPE_DATA_REFERENCE       (ACPI_BTYPE_DATA | 
ACPI_BTYPE_REFERENCE | ACPI_BTYPE_DDB_HANDLE)
-#define ACPI_BTYPE_DEVICE_OBJECTS       (ACPI_BTYPE_DEVICE | 
ACPI_BTYPE_THERMAL | ACPI_BTYPE_PROCESSOR)
-#define ACPI_BTYPE_OBJECTS_AND_REFS     0x0001FFFF  /* ARG or LOCAL */
-#define ACPI_BTYPE_ALL_OBJECTS          0x0000FFFF
 
 /*
  * All I/O
@@ -520,7 +504,7 @@ typedef u32                             
 /*
  * Event Types: Fixed & General Purpose
  */
-typedef u32                                     acpi_event_type;
+typedef u32 acpi_event_type;
 
 /*
  * Fixed events
@@ -548,7 +532,7 @@ typedef u32                             
  *          |     +----- Set?
  *          +----------- <Reserved>
  */
-typedef u32                                     acpi_event_status;
+typedef u32 acpi_event_status;
 
 #define ACPI_EVENT_FLAG_DISABLED        (acpi_event_status) 0x00
 #define ACPI_EVENT_FLAG_ENABLED         (acpi_event_status) 0x01
@@ -564,7 +548,6 @@ typedef u32                             
 
 #define ACPI_GPE_ENABLE                 0
 #define ACPI_GPE_DISABLE                1
-
 
 /*
  * GPE info flags - Per GPE
@@ -577,7 +560,7 @@ typedef u32                             
  *  | | |  +--- Type of dispatch -- to method, handler, or none
  *  | | +--- Enabled for runtime?
  *  | +--- Enabled for wake?
- *  +--- System state when GPE ocurred (running/waking)
+ *  +--- Unused
  */
 #define ACPI_GPE_XRUPT_TYPE_MASK        (u8) 0x01
 #define ACPI_GPE_LEVEL_TRIGGERED        (u8) 0x01
@@ -586,36 +569,31 @@ typedef u32                             
 #define ACPI_GPE_TYPE_MASK              (u8) 0x06
 #define ACPI_GPE_TYPE_WAKE_RUN          (u8) 0x06
 #define ACPI_GPE_TYPE_WAKE              (u8) 0x02
-#define ACPI_GPE_TYPE_RUNTIME           (u8) 0x04    /* Default */
+#define ACPI_GPE_TYPE_RUNTIME           (u8) 0x04      /* Default */
 
 #define ACPI_GPE_DISPATCH_MASK          (u8) 0x18
 #define ACPI_GPE_DISPATCH_HANDLER       (u8) 0x08
 #define ACPI_GPE_DISPATCH_METHOD        (u8) 0x10
-#define ACPI_GPE_DISPATCH_NOT_USED      (u8) 0x00    /* Default */
+#define ACPI_GPE_DISPATCH_NOT_USED      (u8) 0x00      /* Default */
 
 #define ACPI_GPE_RUN_ENABLE_MASK        (u8) 0x20
 #define ACPI_GPE_RUN_ENABLED            (u8) 0x20
-#define ACPI_GPE_RUN_DISABLED           (u8) 0x00    /* Default */
+#define ACPI_GPE_RUN_DISABLED           (u8) 0x00      /* Default */
 
 #define ACPI_GPE_WAKE_ENABLE_MASK       (u8) 0x40
 #define ACPI_GPE_WAKE_ENABLED           (u8) 0x40
-#define ACPI_GPE_WAKE_DISABLED          (u8) 0x00    /* Default */
-
-#define ACPI_GPE_ENABLE_MASK            (u8) 0x60    /* Both run/wake */
-
-#define ACPI_GPE_SYSTEM_MASK            (u8) 0x80
-#define ACPI_GPE_SYSTEM_RUNNING         (u8) 0x80
-#define ACPI_GPE_SYSTEM_WAKING          (u8) 0x00
+#define ACPI_GPE_WAKE_DISABLED          (u8) 0x00      /* Default */
+
+#define ACPI_GPE_ENABLE_MASK            (u8) 0x60      /* Both run/wake */
 
 /*
  * Flags for GPE and Lock interfaces
  */
-#define ACPI_EVENT_WAKE_ENABLE          0x2             /* acpi_gpe_enable */
-#define ACPI_EVENT_WAKE_DISABLE         0x2             /* acpi_gpe_disable */
+#define ACPI_EVENT_WAKE_ENABLE          0x2    /* acpi_gpe_enable */
+#define ACPI_EVENT_WAKE_DISABLE         0x2    /* acpi_gpe_disable */
 
 #define ACPI_NOT_ISR                    0x1
 #define ACPI_ISR                        0x0
-
 
 /* Notify types */
 
@@ -626,10 +604,9 @@ typedef u32                             
 
 #define ACPI_MAX_SYS_NOTIFY             0x7f
 
-
 /* Address Space (Operation Region) Types */
 
-typedef u8                                      acpi_adr_space_type;
+typedef u8 acpi_adr_space_type;
 
 #define ACPI_ADR_SPACE_SYSTEM_MEMORY    (acpi_adr_space_type) 0
 #define ACPI_ADR_SPACE_SYSTEM_IO        (acpi_adr_space_type) 1
@@ -641,7 +618,6 @@ typedef u8                              
 #define ACPI_ADR_SPACE_DATA_TABLE       (acpi_adr_space_type) 7
 #define ACPI_ADR_SPACE_FIXED_HARDWARE   (acpi_adr_space_type) 127
 
-
 /*
  * bit_register IDs
  * These are bitfields defined within the full ACPI registers
@@ -653,93 +629,83 @@ typedef u8                              
 #define ACPI_BITREG_SLEEP_BUTTON_STATUS         0x04
 #define ACPI_BITREG_RT_CLOCK_STATUS             0x05
 #define ACPI_BITREG_WAKE_STATUS                 0x06
-
-#define ACPI_BITREG_TIMER_ENABLE                0x07
-#define ACPI_BITREG_GLOBAL_LOCK_ENABLE          0x08
-#define ACPI_BITREG_POWER_BUTTON_ENABLE         0x09
-#define ACPI_BITREG_SLEEP_BUTTON_ENABLE         0x0A
-#define ACPI_BITREG_RT_CLOCK_ENABLE             0x0B
-#define ACPI_BITREG_WAKE_ENABLE                 0x0C
-
-#define ACPI_BITREG_SCI_ENABLE                  0x0D
-#define ACPI_BITREG_BUS_MASTER_RLD              0x0E
-#define ACPI_BITREG_GLOBAL_LOCK_RELEASE         0x0F
-#define ACPI_BITREG_SLEEP_TYPE_A                0x10
-#define ACPI_BITREG_SLEEP_TYPE_B                0x11
-#define ACPI_BITREG_SLEEP_ENABLE                0x12
-
-#define ACPI_BITREG_ARB_DISABLE                 0x13
-
-#define ACPI_BITREG_MAX                         0x13
+#define ACPI_BITREG_PCIEXP_WAKE_STATUS          0x07
+
+#define ACPI_BITREG_TIMER_ENABLE                0x08
+#define ACPI_BITREG_GLOBAL_LOCK_ENABLE          0x09
+#define ACPI_BITREG_POWER_BUTTON_ENABLE         0x0A
+#define ACPI_BITREG_SLEEP_BUTTON_ENABLE         0x0B
+#define ACPI_BITREG_RT_CLOCK_ENABLE             0x0C
+#define ACPI_BITREG_WAKE_ENABLE                 0x0D
+#define ACPI_BITREG_PCIEXP_WAKE_DISABLE         0x0E
+
+#define ACPI_BITREG_SCI_ENABLE                  0x0F
+#define ACPI_BITREG_BUS_MASTER_RLD              0x10
+#define ACPI_BITREG_GLOBAL_LOCK_RELEASE         0x11
+#define ACPI_BITREG_SLEEP_TYPE_A                0x12
+#define ACPI_BITREG_SLEEP_TYPE_B                0x13
+#define ACPI_BITREG_SLEEP_ENABLE                0x14
+
+#define ACPI_BITREG_ARB_DISABLE                 0x15
+
+#define ACPI_BITREG_MAX                         0x15
 #define ACPI_NUM_BITREG                         ACPI_BITREG_MAX + 1
 
-
 /*
  * External ACPI object definition
  */
-union acpi_object
-{
-       acpi_object_type                    type;   /* See definition of 
acpi_ns_type for values */
-       struct
-       {
-               acpi_object_type                    type;
-               acpi_integer                        value;      /* The actual 
number */
+union acpi_object {
+       acpi_object_type type;  /* See definition of acpi_ns_type for values */
+       struct {
+               acpi_object_type type;
+               acpi_integer value;     /* The actual number */
        } integer;
 
-       struct
-       {
-               acpi_object_type                    type;
-               u32                                 length;     /* # of bytes 
in string, excluding trailing null */
-               char                                *pointer;   /* points to 
the string value */
+       struct {
+               acpi_object_type type;
+               u32 length;     /* # of bytes in string, excluding trailing 
null */
+               char *pointer;  /* points to the string value */
        } string;
 
-       struct
-       {
-               acpi_object_type                    type;
-               u32                                 length;     /* # of bytes 
in buffer */
-               u8                                  *pointer;   /* points to 
the buffer */
+       struct {
+               acpi_object_type type;
+               u32 length;     /* # of bytes in buffer */
+               u8 *pointer;    /* points to the buffer */
        } buffer;
 
-       struct
-       {
-               acpi_object_type                    type;
-               u32                                 fill1;
-               acpi_handle                         handle;     /* object 
reference */
+       struct {
+               acpi_object_type type;
+               u32 fill1;
+               acpi_handle handle;     /* object reference */
        } reference;
 
-       struct
-       {
-               acpi_object_type                    type;
-               u32                                 count;      /* # of 
elements in package */
-               union acpi_object                   *elements;  /* Pointer to 
an array of ACPI_OBJECTs */
+       struct {
+               acpi_object_type type;
+               u32 count;      /* # of elements in package */
+               union acpi_object *elements;    /* Pointer to an array of 
ACPI_OBJECTs */
        } package;
 
-       struct
-       {
-               acpi_object_type                    type;
-               u32                                 proc_id;
-               acpi_io_address                     pblk_address;
-               u32                                 pblk_length;
+       struct {
+               acpi_object_type type;
+               u32 proc_id;
+               acpi_io_address pblk_address;
+               u32 pblk_length;
        } processor;
 
-       struct
-       {
-               acpi_object_type                    type;
-               u32                                 system_level;
-               u32                                 resource_order;
+       struct {
+               acpi_object_type type;
+               u32 system_level;
+               u32 resource_order;
        } power_resource;
 };
 
-
 /*
  * List of objects, used as a parameter list for control method evaluation
  */
-struct acpi_object_list
-{
-       u32                                 count;
-       union acpi_object                   *pointer;
-};
-
+struct acpi_object_list {
+       u32 count;
+       union acpi_object *pointer;
+};
 
 /*
  * Miscellaneous common Data Structures used by the interfaces
@@ -748,12 +714,10 @@ struct acpi_object_list
 #define ACPI_ALLOCATE_BUFFER        (acpi_size) (-1)
 #define ACPI_ALLOCATE_LOCAL_BUFFER  (acpi_size) (-2)
 
-struct acpi_buffer
-{
-       acpi_size                           length;         /* Length in bytes 
of the buffer */
-       void                                *pointer;       /* pointer to 
buffer */
-};
-
+struct acpi_buffer {
+       acpi_size length;       /* Length in bytes of the buffer */
+       void *pointer;          /* pointer to buffer */
+};
 
 /*
  * name_type for acpi_get_name
@@ -761,7 +725,6 @@ struct acpi_buffer
 #define ACPI_FULL_PATHNAME              0
 #define ACPI_SINGLE_NAME                1
 #define ACPI_NAME_TYPE_MAX              1
-
 
 /*
  * Structure and flags for acpi_get_system_info
@@ -771,139 +734,96 @@ struct acpi_buffer
 #define ACPI_SYS_MODE_LEGACY            0x0002
 #define ACPI_SYS_MODES_MASK             0x0003
 
-
-/*
- * ACPI Table Info.  One per ACPI table _type_
- */
-struct acpi_table_info
-{
-       u32                                 count;
-};
-
-
 /*
  * System info returned by acpi_get_system_info()
  */
-struct acpi_system_info
-{
-       u32                                 acpi_ca_version;
-       u32                                 flags;
-       u32                                 timer_resolution;
-       u32                                 reserved1;
-       u32                                 reserved2;
-       u32                                 debug_level;
-       u32                                 debug_layer;
-       u32                                 num_table_types;
-       struct acpi_table_info              table_info [NUM_ACPI_TABLE_TYPES];
-};
-
+struct acpi_system_info {
+       u32 acpi_ca_version;
+       u32 flags;
+       u32 timer_resolution;
+       u32 reserved1;
+       u32 reserved2;
+       u32 debug_level;
+       u32 debug_layer;
+};
 
 /*
  * Types specific to the OS service interfaces
  */
-
-typedef u32
-(ACPI_SYSTEM_XFACE *acpi_osd_handler) (
-       void                            *context);
+typedef u32(ACPI_SYSTEM_XFACE * acpi_osd_handler) (void *context);
 
 typedef void
-(ACPI_SYSTEM_XFACE *acpi_osd_exec_callback) (
-       void                            *context);
+ (ACPI_SYSTEM_XFACE * acpi_osd_exec_callback) (void *context);
 
 /*
  * Various handlers and callback procedures
  */
+typedef u32(*acpi_event_handler) (void *context);
+
 typedef
-u32 (*acpi_event_handler) (
-       void                                *context);
+void (*acpi_notify_handler) (acpi_handle device, u32 value, void *context);
 
 typedef
-void (*acpi_notify_handler) (
-       acpi_handle                         device,
-       u32                                 value,
-       void                                *context);
+void (*acpi_object_handler) (acpi_handle object, u32 function, void *data);
+
+typedef acpi_status(*acpi_init_handler) (acpi_handle object, u32 function);
+
+#define ACPI_INIT_DEVICE_INI        1
 
 typedef
-void (*acpi_object_handler) (
-       acpi_handle                         object,
-       u32                                 function,
-       void                                *data);
+acpi_status(*acpi_exception_handler) (acpi_status aml_status,
+                                     acpi_name name,
+                                     u16 opcode,
+                                     u32 aml_offset, void *context);
+
+/* Address Spaces (For Operation Regions) */
 
 typedef
-acpi_status (*acpi_init_handler) (
-       acpi_handle                         object,
-       u32                                 function);
-
-#define ACPI_INIT_DEVICE_INI        1
+acpi_status(*acpi_adr_space_handler) (u32 function,
+                                     acpi_physical_address address,
+                                     u32 bit_width,
+                                     acpi_integer * value,
+                                     void *handler_context,
+                                     void *region_context);
+
+#define ACPI_DEFAULT_HANDLER            NULL
 
 typedef
-acpi_status (*acpi_exception_handler) (
-       acpi_status                     aml_status,
-       acpi_name                       name,
-       u16                             opcode,
-       u32                             aml_offset,
-       void                            *context);
-
-
-/* Address Spaces (For Operation Regions) */
-
-typedef
-acpi_status (*acpi_adr_space_handler) (
-       u32                                 function,
-       acpi_physical_address               address,
-       u32                                 bit_width,
-       acpi_integer                        *value,
-       void                                *handler_context,
-       void                                *region_context);
-
-#define ACPI_DEFAULT_HANDLER        NULL
-
-
-typedef
-acpi_status (*acpi_adr_space_setup) (
-       acpi_handle                         region_handle,
-       u32                                 function,
-       void                                *handler_context,
-       void                                **region_context);
+acpi_status(*acpi_adr_space_setup) (acpi_handle region_handle,
+                                   u32 function,
+                                   void *handler_context,
+                                   void **region_context);
 
 #define ACPI_REGION_ACTIVATE    0
 #define ACPI_REGION_DEACTIVATE  1
 
 typedef
-acpi_status (*acpi_walk_callback) (
-       acpi_handle                         obj_handle,
-       u32                                 nesting_level,
-       void                                *context,
-       void                                **return_value);
-
+acpi_status(*acpi_walk_callback) (acpi_handle obj_handle,
+                                 u32 nesting_level,
+                                 void *context, void **return_value);
 
 /* Interrupt handler return values */
 
 #define ACPI_INTERRUPT_NOT_HANDLED      0x00
 #define ACPI_INTERRUPT_HANDLED          0x01
 
-
 /* Common string version of device HIDs and UIDs */
 
-struct acpi_device_id
-{
-       char                            value[ACPI_DEVICE_ID_LENGTH];
+struct acpica_device_id {
+       char value[ACPI_DEVICE_ID_LENGTH];
 };
 
 /* Common string version of device CIDs */
 
-struct acpi_compatible_id
-{
-       char                            value[ACPI_MAX_CID_LENGTH];
-};
-
-struct acpi_compatible_id_list
-{
-       u32                             count;
-       u32                             size;
-       struct acpi_compatible_id       id[1];
-};
-
+struct acpi_compatible_id {
+       char value[ACPI_MAX_CID_LENGTH];
+};
+
+struct acpi_compatible_id_list {
+       u32 count;
+       u32 size;
+       struct acpi_compatible_id id[1];
+};
 
 /* Structure and flags for acpi_get_object_info */
 
@@ -914,58 +834,59 @@ struct acpi_compatible_id_list
 #define ACPI_VALID_CID                  0x0010
 #define ACPI_VALID_SXDS                 0x0020
 
+/* Flags for _STA method */
+
+#define ACPI_STA_DEVICE_PRESENT         0x01
+#define ACPI_STA_DEVICE_ENABLED         0x02
+#define ACPI_STA_DEVICE_UI              0x04
+#define ACPI_STA_DEVICE_FUNCTIONING     0x08
+#define ACPI_STA_DEVICE_OK              0x08   /* Synonym */
+#define ACPI_STA_BATTERY_PRESENT        0x10
 
 #define ACPI_COMMON_OBJ_INFO \
-       acpi_object_type                    type;           /* ACPI object type 
*/ \
-       acpi_name                           name            /* ACPI object Name 
*/
-
-
-struct acpi_obj_info_header
-{
+       acpi_object_type                type;           /* ACPI object type */ \
+       acpi_name                       name    /* ACPI object Name */
+
+struct acpi_obj_info_header {
        ACPI_COMMON_OBJ_INFO;
 };
 
-
 /* Structure returned from Get Object Info */
 
-struct acpi_device_info
-{
+struct acpi_device_info {
        ACPI_COMMON_OBJ_INFO;
 
-       u32                                 valid;              /* Indicates 
which fields below are valid */
-       u32                                 current_status;     /* _STA value */
-       acpi_integer                        address;            /* _ADR value 
if any */
-       struct acpi_device_id               hardware_id;        /* _HID value 
if any */
-       struct acpi_device_id               unique_id;          /* _UID value 
if any */
-       u8                                  highest_dstates[4]; /* _sx_d 
values: 0xFF indicates not valid */
-       struct acpi_compatible_id_list      compatibility_id;   /* List of 
_CIDs if any */
-};
-
+       u32 valid;              /* Indicates which fields below are valid */
+       u32 current_status;     /* _STA value */
+       acpi_integer address;   /* _ADR value if any */
+       struct acpica_device_id hardware_id;    /* _HID value if any */
+       struct acpica_device_id unique_id;      /* _UID value if any */
+       u8 highest_dstates[4];  /* _sx_d values: 0xFF indicates not valid */
+       struct acpi_compatible_id_list compatibility_id;        /* List of 
_CIDs if any */
+};
 
 /* Context structs for address space handlers */
 
-struct acpi_pci_id
-{
-       u16                                 segment;
-       u16                                 bus;
-       u16                                 device;
-       u16                                 function;
-};
-
-
-struct acpi_mem_space_context
-{
-       u32                                 length;
-       acpi_physical_address               address;
-       acpi_physical_address               mapped_physical_address;
-       u8                                  *mapped_logical_address;
-       acpi_size                           mapped_length;
-};
-
+struct acpi_pci_id {
+       u16 segment;
+       u16 bus;
+       u16 device;
+       u16 function;
+};
+
+struct acpi_mem_space_context {
+       u32 length;
+       acpi_physical_address address;
+       acpi_physical_address mapped_physical_address;
+       u8 *mapped_logical_address;
+       acpi_size mapped_length;
+};
 
 /*
  * Definitions for Resource Attributes
  */
+typedef u16 acpi_rs_length;    /* Resource Length field is fixed at 16 bits */
+typedef u32 acpi_rsdesc_size;  /* Max Resource Descriptor size is (Length+3) = 
(64_k-1)+3 */
 
 /*
  *  Memory Attributes
@@ -980,26 +901,28 @@ struct acpi_mem_space_context
 
 /*
  *  IO Attributes
- *  The ISA Io ranges are:     n000-n0_ffh, n400-n4_ffh, n800-n8_ffh, 
n_c00-n_cFFh.
- *  The non-ISA Io ranges are: n100-n3_ffh, n500-n7_ffh, n900-n_bFfh, 
n_cd0-n_fFFh.
+ *  The ISA IO ranges are:     n000-n0_fFh, n400-n4_fFh, n800-n8_fFh, 
n_c00-n_cFFh.
+ *  The non-ISA IO ranges are: n100-n3_fFh, n500-n7_fFh, n900-n_bFFh, 
n_cd0-n_fFFh.
  */
 #define ACPI_NON_ISA_ONLY_RANGES        (u8) 0x01
 #define ACPI_ISA_ONLY_RANGES            (u8) 0x02
 #define ACPI_ENTIRE_RANGE               (ACPI_NON_ISA_ONLY_RANGES | 
ACPI_ISA_ONLY_RANGES)
 
-#define ACPI_SPARSE_TRANSLATION         (u8) 0x03
+/* Type of translation - 1=Sparse, 0=Dense */
+
+#define ACPI_SPARSE_TRANSLATION         (u8) 0x01
 
 /*
  *  IO Port Descriptor Decode
  */
-#define ACPI_DECODE_10                  (u8) 0x00    /* 10-bit IO address 
decode */
-#define ACPI_DECODE_16                  (u8) 0x01    /* 16-bit IO address 
decode */
+#define ACPI_DECODE_10                  (u8) 0x00      /* 10-bit IO address 
decode */
+#define ACPI_DECODE_16                  (u8) 0x01      /* 16-bit IO address 
decode */
 
 /*
  *  IRQ Attributes
  */
-#define ACPI_EDGE_SENSITIVE             (u8) 0x00
-#define ACPI_LEVEL_SENSITIVE            (u8) 0x01
+#define ACPI_LEVEL_SENSITIVE            (u8) 0x00
+#define ACPI_EDGE_SENSITIVE             (u8) 0x01
 
 #define ACPI_ACTIVE_HIGH                (u8) 0x00
 #define ACPI_ACTIVE_LOW                 (u8) 0x01
@@ -1045,32 +968,46 @@ struct acpi_mem_space_context
 #define ACPI_PRODUCER                   (u8) 0x00
 #define ACPI_CONSUMER                   (u8) 0x01
 
+/*
+ * If possible, pack the following structures to byte alignment
+ */
+#ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED
+#pragma pack(1)
+#endif
+
+/* UUID data structures for use in vendor-defined resource descriptors */
+
+struct acpi_uuid {
+       u8 data[ACPI_UUID_LENGTH];
+};
+
+struct acpi_vendor_uuid {
+       u8 subtype;
+       u8 data[ACPI_UUID_LENGTH];
+};
 
 /*
  *  Structures used to describe device resources
  */
-struct acpi_resource_irq
-{
-       u32                                 edge_level;
-       u32                                 active_high_low;
-       u32                                 shared_exclusive;
-       u32                                 number_of_interrupts;
-       u32                                 interrupts[1];
-};
-
-struct acpi_resource_dma
-{
-       u32                                 type;
-       u32                                 bus_master;
-       u32                                 transfer;
-       u32                                 number_of_channels;
-       u32                                 channels[1];
-};
-
-struct acpi_resource_start_dpf
-{
-       u32                                 compatibility_priority;
-       u32                                 performance_robustness;
+struct acpi_resource_irq {
+       u8 triggering;
+       u8 polarity;
+       u8 sharable;
+       u8 interrupt_count;
+       u8 interrupts[1];
+};
+
+struct acpi_resource_dma {
+       u8 type;
+       u8 bus_master;
+       u8 transfer;
+       u8 channel_count;
+       u8 channels[1];
+};
+
+struct acpi_resource_start_dependent {
+       u8 compatibility_priority;
+       u8 performance_robustness;
 };
 
 /*
@@ -1078,224 +1015,223 @@ struct acpi_resource_start_dpf
  * needed because it has no fields
  */
 
-struct acpi_resource_io
-{
-       u32                                 io_decode;
-       u32                                 min_base_address;
-       u32                                 max_base_address;
-       u32                                 alignment;
-       u32                                 range_length;
-};
-
-struct acpi_resource_fixed_io
-{
-       u32                                 base_address;
-       u32                                 range_length;
-};
-
-struct acpi_resource_vendor
-{
-       u32                                 length;
-       u8                                  reserved[1];
-};
-
-struct acpi_resource_end_tag
-{
-       u8                                  checksum;
-};
-
-struct acpi_resource_mem24
-{
-       u32                                 read_write_attribute;

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.