WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

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

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] Update ACPI headers to Linux 2.6.24.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 20 Mar 2008 05:40:46 -0700
Delivery-date: Thu, 20 Mar 2008 05:44:08 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# 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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] Update ACPI headers to Linux 2.6.24., Xen patchbot-unstable <=