svn commit: r195013 - in vendor-sys/acpica/dist: . common compiler debugger events executer generate/lint hardware include namespace tables tools/acpiexec tools/acpisrc utilities

Jung-uk Kim jkim at FreeBSD.org
Thu Jun 25 23:20:51 UTC 2009


Author: jkim
Date: Thu Jun 25 23:20:50 2009
New Revision: 195013
URL: http://svn.freebsd.org/changeset/base/195013

Log:
  Import ACPICA 20090625

Added:
  vendor-sys/acpica/dist/utilities/utids.c   (contents, props changed)
Modified:
  vendor-sys/acpica/dist/changes.txt
  vendor-sys/acpica/dist/common/dmtbinfo.c
  vendor-sys/acpica/dist/compiler/aslcompiler.l
  vendor-sys/acpica/dist/compiler/aslcompiler.y
  vendor-sys/acpica/dist/compiler/asllookup.c
  vendor-sys/acpica/dist/compiler/aslmap.c
  vendor-sys/acpica/dist/debugger/dbcmds.c
  vendor-sys/acpica/dist/debugger/dbdisply.c
  vendor-sys/acpica/dist/debugger/dbexec.c
  vendor-sys/acpica/dist/events/evgpe.c
  vendor-sys/acpica/dist/events/evgpeblk.c
  vendor-sys/acpica/dist/events/evrgnini.c
  vendor-sys/acpica/dist/executer/exfield.c
  vendor-sys/acpica/dist/executer/exfldio.c
  vendor-sys/acpica/dist/executer/exutils.c
  vendor-sys/acpica/dist/generate/lint/options.lnt
  vendor-sys/acpica/dist/hardware/hwgpe.c
  vendor-sys/acpica/dist/hardware/hwregs.c
  vendor-sys/acpica/dist/hardware/hwtimer.c
  vendor-sys/acpica/dist/hardware/hwxface.c
  vendor-sys/acpica/dist/include/acconfig.h
  vendor-sys/acpica/dist/include/acdebug.h
  vendor-sys/acpica/dist/include/acglobal.h
  vendor-sys/acpica/dist/include/achware.h
  vendor-sys/acpica/dist/include/acinterp.h
  vendor-sys/acpica/dist/include/aclocal.h
  vendor-sys/acpica/dist/include/acmacros.h
  vendor-sys/acpica/dist/include/acnamesp.h
  vendor-sys/acpica/dist/include/acpixf.h
  vendor-sys/acpica/dist/include/actbl.h
  vendor-sys/acpica/dist/include/actbl1.h
  vendor-sys/acpica/dist/include/actypes.h
  vendor-sys/acpica/dist/include/acutils.h
  vendor-sys/acpica/dist/include/amlcode.h
  vendor-sys/acpica/dist/namespace/nsalloc.c
  vendor-sys/acpica/dist/namespace/nsload.c
  vendor-sys/acpica/dist/namespace/nspredef.c
  vendor-sys/acpica/dist/namespace/nsxfeval.c
  vendor-sys/acpica/dist/namespace/nsxfname.c
  vendor-sys/acpica/dist/tables/tbutils.c
  vendor-sys/acpica/dist/tools/acpiexec/Makefile
  vendor-sys/acpica/dist/tools/acpiexec/aeexec.c
  vendor-sys/acpica/dist/tools/acpiexec/aehandlers.c
  vendor-sys/acpica/dist/tools/acpisrc/astable.c
  vendor-sys/acpica/dist/utilities/uteval.c
  vendor-sys/acpica/dist/utilities/utglobal.c
  vendor-sys/acpica/dist/utilities/utmisc.c

Modified: vendor-sys/acpica/dist/changes.txt
==============================================================================
--- vendor-sys/acpica/dist/changes.txt	Thu Jun 25 23:10:59 2009	(r195012)
+++ vendor-sys/acpica/dist/changes.txt	Thu Jun 25 23:20:50 2009	(r195013)
@@ -1,4 +1,82 @@
 ----------------------------------------
+25 June 2009. Summary of changes for version 20090625:
+
+This release is available at www.acpica.org/downloads
+
+The ACPI 4.0 Specification was released on June 16 and is available at 
+www.acpi.info. ACPICA implementation of ACPI 4.0 is underway and will 
+continue for the next few releases.
+
+1) ACPI CA Core Subsystem:
+
+ACPI 4.0: Implemented interpreter support for the IPMI operation region 
+address space. Includes support for bi-directional data buffers and an IPMI 
+address space handler (to be installed by an IPMI device driver.) ACPICA BZ 
+773. Lin Ming.
+
+ACPI 4.0: Added changes for existing ACPI tables - FACS and SRAT. Includes 
+support in both the header files and the disassembler.
+
+Completed a major update for the AcpiGetObjectInfo external interface. 
+Changes include:
+ - Support for variable, unlimited length HID, UID, and CID strings.
+ - Support Processor objects the same as Devices (HID,UID,CID,ADR,STA, etc.)
+ - Call the _SxW power methods on behalf of a device object.
+ - Determine if a device is a PCI root bridge.
+ - Change the ACPI_BUFFER parameter to ACPI_DEVICE_INFO.
+These changes will require an update to all callers of this interface. See 
+the updated ACPICA Programmer Reference for details. One new source file has 
+been added - utilities/utids.c. ACPICA BZ 368, 780.
+
+Updated the AcpiRead and AcpiWrite external interfaces to support 64-bit 
+transfers. The Value parameter has been extended from 32 bits to 64 bits in 
+order to support new ACPI 4.0 tables. These changes will require an update to 
+all callers of these interfaces. See the ACPICA Programmer Reference for 
+details. ACPICA BZ 768.
+
+Fixed several problems with AcpiAttachData. The handler was not invoked when 
+the host node was deleted. The data sub-object was not automatically deleted 
+when the host node was deleted. The interface to the handler had an unused 
+parameter, this was removed. ACPICA BZ 778.
+
+Enhanced the function that dumps ACPI table headers. All non-printable 
+characters in the string fields are now replaced with '?' (Signature, OemId, 
+OemTableId, and CompilerId.) ACPI tables with non-printable characters in 
+these fields are occasionally seen in the field. ACPICA BZ 788.
+
+Fixed a problem with predefined method repair code where the code that 
+attempts to repair/convert an object of incorrect type is only executed on 
+the first time the predefined method is called. The mechanism that disables 
+warnings on subsequent calls was interfering with the repair mechanism. 
+ACPICA BZ 781.
+
+Fixed a possible memory leak in the predefined validation/repair code when a 
+buffer is automatically converted to an expected string object.
+
+Removed obsolete 16-bit files from the distribution and from the current git 
+tree head. ACPICA BZ 776.
+
+Example Code and Data Size: These are the sizes for the OS-independent 
+acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
+debug version of the code includes the debug output trace mechanism and has a 
+much larger code and data size.
+
+  Previous Release:
+    Non-Debug Version:  83.4K Code, 17.5K Data, 100.9K Total
+    Debug Version:     158.9K Code, 50.0K Data, 208.9K Total
+  Current Release:
+    Non-Debug Version:  84.7K Code, 17.8K Data, 102.5K Total
+    Debug Version:     160.5K Code, 50.6K Data, 211.1K Total
+
+2) iASL Compiler/Disassembler and Tools:
+
+ACPI 4.0: iASL and Disassembler - implemented support for the new IPMI 
+operation region keyword. ACPICA BZ 771, 772. Lin Ming.
+
+ACPI 4.0: iASL - implemented compile-time validation support for all new 
+predefined names and control methods (31 total). ACPICA BZ 769.
+
+----------------------------------------
 21 May 2009. Summary of changes for version 20090521:
 
 This release is available at www.acpica.org/downloads

Modified: vendor-sys/acpica/dist/common/dmtbinfo.c
==============================================================================
--- vendor-sys/acpica/dist/common/dmtbinfo.c	Thu Jun 25 23:10:59 2009	(r195012)
+++ vendor-sys/acpica/dist/common/dmtbinfo.c	Thu Jun 25 23:20:50 2009	(r195013)
@@ -299,12 +299,16 @@ ACPI_DMTABLE_INFO           AcpiDmTableI
     {ACPI_DMT_NAME4,    ACPI_FACS_OFFSET (Signature[0]),            "Signature"},
     {ACPI_DMT_UINT32,   ACPI_FACS_OFFSET (Length),                  "Length"},
     {ACPI_DMT_UINT32,   ACPI_FACS_OFFSET (HardwareSignature),       "Hardware Signature"},
-    {ACPI_DMT_UINT32,   ACPI_FACS_OFFSET (FirmwareWakingVector),    "Firmware Waking Vector(32)"},
+    {ACPI_DMT_UINT32,   ACPI_FACS_OFFSET (FirmwareWakingVector),    "32 Firmware Waking Vector"},
     {ACPI_DMT_UINT32,   ACPI_FACS_OFFSET (GlobalLock),              "Global Lock"},
     {ACPI_DMT_UINT32,   ACPI_FACS_OFFSET (Flags),                   "Flags (decoded below)"},
     {ACPI_DMT_FLAG0,    ACPI_FACS_FLAG_OFFSET (Flags,0),            "S4BIOS Support Present"},
-    {ACPI_DMT_UINT64,   ACPI_FACS_OFFSET (XFirmwareWakingVector),   "Firmware Waking Vector(64)"},
+    {ACPI_DMT_FLAG1,    ACPI_FACS_FLAG_OFFSET (Flags,0),            "64-bit Wake Supported (V2)"},
+    {ACPI_DMT_UINT64,   ACPI_FACS_OFFSET (XFirmwareWakingVector),   "64 Firmware Waking Vector"},
     {ACPI_DMT_UINT8,    ACPI_FACS_OFFSET (Version),                 "Version"},
+    {ACPI_DMT_UINT24,   ACPI_FACS_OFFSET (Reserved),                "Reserved"},
+    {ACPI_DMT_UINT32,   ACPI_FACS_OFFSET (OspmFlags),               "OspmFlags (decoded below)"},
+    {ACPI_DMT_FLAG0,    ACPI_FACS_FLAG_OFFSET (OspmFlags,0),        "64-bit Wake Env Required (V2)"},
     {ACPI_DMT_EXIT,     0,                                          NULL}
 };
 
@@ -1074,7 +1078,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableI
     {ACPI_DMT_EXIT,     0,                                          NULL}
 };
 
-/* 9: Processor Local X2_APIC (07/2008) */
+/* 9: Processor Local X2_APIC (ACPI 4.0) */
 
 ACPI_DMTABLE_INFO           AcpiDmTableInfoMadt9[] =
 {
@@ -1086,7 +1090,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableI
     {ACPI_DMT_EXIT,     0,                                          NULL}
 };
 
-/* 10: Local X2_APIC NMI (07/2008) */
+/* 10: Local X2_APIC NMI (ACPI 4.0) */
 
 ACPI_DMTABLE_INFO           AcpiDmTableInfoMadt10[] =
 {
@@ -1275,7 +1279,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableI
     {ACPI_DMT_EXIT,     0,                                          NULL}
 };
 
-/* 2: Processor Local X2_APIC Affinity (07/2008) */
+/* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */
 
 ACPI_DMTABLE_INFO           AcpiDmTableInfoSrat2[] =
 {
@@ -1284,6 +1288,8 @@ ACPI_DMTABLE_INFO           AcpiDmTableI
     {ACPI_DMT_UINT32,   ACPI_SRAT2_OFFSET (ApicId),                 "Apic ID"},
     {ACPI_DMT_UINT32,   ACPI_SRAT2_OFFSET (Flags),                  "Flags (decoded below)"},
     {ACPI_DMT_FLAG0,    ACPI_SRAT2_FLAG_OFFSET (Flags,0),           "Enabled"},
+    {ACPI_DMT_UINT32,   ACPI_SRAT2_OFFSET (ClockDomain),            "Clock Domain"},
+    {ACPI_DMT_UINT32,   ACPI_SRAT2_OFFSET (Reserved2),              "Reserved"},
     {ACPI_DMT_EXIT,     0,                                          NULL}
 };
 

Modified: vendor-sys/acpica/dist/compiler/aslcompiler.l
==============================================================================
--- vendor-sys/acpica/dist/compiler/aslcompiler.l	Thu Jun 25 23:10:59 2009	(r195012)
+++ vendor-sys/acpica/dist/compiler/aslcompiler.l	Thu Jun 25 23:20:50 2009	(r195013)
@@ -386,6 +386,7 @@ NamePathTail                [.]{NameSeg}
 "SMBus"                     { count (0); return (PARSEOP_REGIONSPACE_SMBUS); }
 "SystemCMOS"                { count (0); return (PARSEOP_REGIONSPACE_CMOS); }
 "PciBarTarget"              { count (0); return (PARSEOP_REGIONSPACE_PCIBAR); }
+"IPMI"                      { count (0); return (PARSEOP_REGIONSPACE_IPMI); }
 
 "FFixedHW"                  { count (0); return (PARSEOP_ADDRESSSPACE_FFIXEDHW); }
 

Modified: vendor-sys/acpica/dist/compiler/aslcompiler.y
==============================================================================
--- vendor-sys/acpica/dist/compiler/aslcompiler.y	Thu Jun 25 23:10:59 2009	(r195012)
+++ vendor-sys/acpica/dist/compiler/aslcompiler.y	Thu Jun 25 23:20:50 2009	(r195013)
@@ -400,6 +400,7 @@ AslLocalAllocate (unsigned int Size);
 %token <i> PARSEOP_REGIONSPACE_CMOS
 %token <i> PARSEOP_REGIONSPACE_EC
 %token <i> PARSEOP_REGIONSPACE_IO
+%token <i> PARSEOP_REGIONSPACE_IPMI
 %token <i> PARSEOP_REGIONSPACE_MEM
 %token <i> PARSEOP_REGIONSPACE_PCI
 %token <i> PARSEOP_REGIONSPACE_PCIBAR
@@ -2175,6 +2176,7 @@ RegionSpaceKeyword
     | PARSEOP_REGIONSPACE_SMBUS             {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_SMBUS);}
     | PARSEOP_REGIONSPACE_CMOS              {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_CMOS);}
     | PARSEOP_REGIONSPACE_PCIBAR            {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_PCIBAR);}
+    | PARSEOP_REGIONSPACE_IPMI              {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_IPMI);}
     ;
 
 AddressSpaceKeyword

Modified: vendor-sys/acpica/dist/compiler/asllookup.c
==============================================================================
--- vendor-sys/acpica/dist/compiler/asllookup.c	Thu Jun 25 23:10:59 2009	(r195012)
+++ vendor-sys/acpica/dist/compiler/asllookup.c	Thu Jun 25 23:20:50 2009	(r195013)
@@ -1337,6 +1337,7 @@ LkNamespaceLocateBegin (
                 break;
 
             case REGION_SMBUS:
+            case REGION_IPMI:
 
                 if ((UINT8) Op->Asl.Parent->Asl.Value.Integer != AML_FIELD_ACCESS_BUFFER)
                 {

Modified: vendor-sys/acpica/dist/compiler/aslmap.c
==============================================================================
--- vendor-sys/acpica/dist/compiler/aslmap.c	Thu Jun 25 23:10:59 2009	(r195012)
+++ vendor-sys/acpica/dist/compiler/aslmap.c	Thu Jun 25 23:20:50 2009	(r195013)
@@ -232,7 +232,8 @@ MpDisplayReservedNames (
  *
  * Name         - The ACPI reserved name
  * Args         - Number of arguments to the method
- * Flags        - Whether this method must return a value or not
+ * Flags        - Whether this method must return a value or not. Or if the
+ *                name is a resource descriptor label.
  *
  ******************************************************************************/
 
@@ -264,24 +265,30 @@ const ASL_RESERVED_INFO         Reserved
     {"_ALP",     0,      ASL_RSVD_RETURN_VALUE},    /* Acpi 3.0 */
     {"_ALR",     0,      ASL_RSVD_RETURN_VALUE},    /* Acpi 3.0 */
     {"_ALT",     0,      ASL_RSVD_RETURN_VALUE},    /* Acpi 3.0 */
+    {"_ART",     0,      ASL_RSVD_RETURN_VALUE},    /* Acpi 4.0 */
     {"_ASI",     0,      ASL_RSVD_RESOURCE_NAME},
     {"_ASZ",     0,      ASL_RSVD_RESOURCE_NAME},
     {"_BAS",     0,      ASL_RSVD_RESOURCE_NAME},
     {"_BBN",     0,      ASL_RSVD_RETURN_VALUE},
     {"_BCL",     0,      ASL_RSVD_RETURN_VALUE},
     {"_BCM",     1,      0},
+    {"_BCT",     1,      ASL_RSVD_RETURN_VALUE},    /* Acpi 4.0 */
     {"_BDN",     0,      ASL_RSVD_RETURN_VALUE},
     {"_BFS",     1,      0},
     {"_BIF",     0,      ASL_RSVD_RETURN_VALUE},
+    {"_BIX",     0,      ASL_RSVD_RETURN_VALUE},    /* Acpi 4.0 */
     {"_BLT",     3,      0},                        /* Acpi 3.0 */
     {"_BM_",     0,      ASL_RSVD_RESOURCE_NAME},
+    {"_BMA",     1,      ASL_RSVD_RETURN_VALUE},    /* Acpi 4.0 */
     {"_BMC",     1,      0},                        /* Acpi 3.0 */
     {"_BMD",     0,      ASL_RSVD_RETURN_VALUE},    /* Acpi 3.0 */
+    {"_BMS",     1,      ASL_RSVD_RETURN_VALUE},    /* Acpi 4.0 */
     {"_BQC",     0,      ASL_RSVD_RETURN_VALUE},    /* Acpi 3.0 */
     {"_BST",     0,      ASL_RSVD_RETURN_VALUE},
     {"_BTM",     1,      ASL_RSVD_RETURN_VALUE},    /* Acpi 3.0 */
     {"_BTP",     1,      0},
     {"_CBA",     0,      ASL_RSVD_RETURN_VALUE},    /* Acpi 3.0 */
+    {"_CDM",     0,      ASL_RSVD_RETURN_VALUE},    /* Acpi 4.0 */
     {"_CID",     0,      ASL_RSVD_RETURN_VALUE},
     {"_CRS",     0,      ASL_RSVD_RETURN_VALUE},
     {"_CRT",     0,      ASL_RSVD_RETURN_VALUE},
@@ -300,6 +307,7 @@ const ASL_RESERVED_INFO         Reserved
     {"_DSM",     4,      ASL_RSVD_RETURN_VALUE},    /* Acpi 3.0 */
     {"_DSS",     1,      0},
     {"_DSW",     3,      0},                        /* Acpi 3.0 */
+    {"_DTI",     1,      0},                        /* Acpi 4.0 */
     {"_EC_",     0,      ASL_RSVD_RETURN_VALUE},
     {"_EDL",     0,      ASL_RSVD_RETURN_VALUE},
     {"_EJ0",     1,      0},
@@ -312,7 +320,13 @@ const ASL_RESERVED_INFO         Reserved
     {"_FDE",     0,      ASL_RSVD_RETURN_VALUE},
     {"_FDI",     0,      ASL_RSVD_RETURN_VALUE},
     {"_FDM",     1,      0},
+    {"_FIF",     0,      ASL_RSVD_RETURN_VALUE},    /* Acpi 4.0 */
     {"_FIX",     0,      ASL_RSVD_RETURN_VALUE},
+    {"_FPS",     0,      ASL_RSVD_RETURN_VALUE},    /* Acpi 4.0 */
+    {"_FSL",     1,      0},                        /* Acpi 4.0 */
+    {"_FST",     0,      ASL_RSVD_RETURN_VALUE},    /* Acpi 4.0 */
+    {"_GAI",     0,      ASL_RSVD_RETURN_VALUE},    /* Acpi 4.0 */
+    {"_GHL",     0,      ASL_RSVD_RETURN_VALUE},    /* Acpi 4.0 */
     {"_GL_",     0,      ASL_RSVD_RETURN_VALUE},
     {"_GLK",     0,      ASL_RSVD_RETURN_VALUE},
     {"_GPD",     0,      ASL_RSVD_RETURN_VALUE},
@@ -338,28 +352,39 @@ const ASL_RESERVED_INFO         Reserved
     {"_MAF",     0,      ASL_RSVD_RESOURCE_NAME},
     {"_MAT",     0,      ASL_RSVD_RETURN_VALUE},
     {"_MAX",     0,      ASL_RSVD_RESOURCE_NAME},
+    {"_MBM",     0,      ASL_RSVD_RETURN_VALUE},    /* Acpi 4.0 */
     {"_MEM",     0,      ASL_RSVD_RESOURCE_NAME},
     {"_MIF",     0,      ASL_RSVD_RESOURCE_NAME},
     {"_MIN",     0,      ASL_RSVD_RESOURCE_NAME},
     {"_MLS",     0,      ASL_RSVD_RETURN_VALUE},    /* Acpi 3.0 */
     {"_MSG",     1,      0},
+    {"_MSM",     4,      ASL_RSVD_RETURN_VALUE},    /* Acpi 4.0 */
     {"_MTP",     0,      ASL_RSVD_RESOURCE_NAME},
+    {"_NTT",     0,      ASL_RSVD_RETURN_VALUE},    /* Acpi 4.0 */
     {"_OFF",     0,      0},
     {"_ON_",     0,      0},
     {"_OS_",     0,      ASL_RSVD_RETURN_VALUE},
     {"_OSC",     4,      ASL_RSVD_RETURN_VALUE},    /* Acpi 3.0 */
     {"_OSI",     1,      ASL_RSVD_RETURN_VALUE},
     {"_OST",     3,      0},                        /* Acpi 3.0 */
+    {"_PAI",     1,      ASL_RSVD_RETURN_VALUE},    /* Acpi 4.0 */
     {"_PCL",     0,      ASL_RSVD_RETURN_VALUE},
     {"_PCT",     0,      ASL_RSVD_RETURN_VALUE},
     {"_PDC",     1,      0},
+    {"_PDL",     0,      ASL_RSVD_RETURN_VALUE},    /* Acpi 4.0 */
     {"_PIC",     1,      0},
+    {"_PIF",     0,      ASL_RSVD_RETURN_VALUE},    /* Acpi 4.0 */
     {"_PLD",     0,      ASL_RSVD_RETURN_VALUE},    /* Acpi 3.0 */
+    {"_PMC",     0,      ASL_RSVD_RETURN_VALUE},    /* Acpi 4.0 */
+    {"_PMD",     0,      ASL_RSVD_RETURN_VALUE},    /* Acpi 4.0 */
+    {"_PMM",     0,      ASL_RSVD_RETURN_VALUE},    /* Acpi 4.0 */
     {"_PPC",     0,      ASL_RSVD_RETURN_VALUE},
     {"_PPE",     0,      ASL_RSVD_RETURN_VALUE},    /* Acpi 3.0 */
     {"_PR0",     0,      ASL_RSVD_RETURN_VALUE},
     {"_PR1",     0,      ASL_RSVD_RETURN_VALUE},
     {"_PR2",     0,      ASL_RSVD_RETURN_VALUE},
+    {"_PR3",     0,      ASL_RSVD_RETURN_VALUE},    /* Acpi 4.0 */
+    {"_PRL",     0,      ASL_RSVD_RETURN_VALUE},    /* Acpi 4.0 */
     {"_PRS",     0,      ASL_RSVD_RETURN_VALUE},
     {"_PRT",     0,      ASL_RSVD_RETURN_VALUE},
     {"_PRW",     0,      ASL_RSVD_RETURN_VALUE},
@@ -375,7 +400,9 @@ const ASL_RESERVED_INFO         Reserved
     {"_PSV",     0,      ASL_RSVD_RETURN_VALUE},
     {"_PSW",     1,      0},
     {"_PTC",     0,      ASL_RSVD_RETURN_VALUE},
+    {"_PTP",     2,      ASL_RSVD_RETURN_VALUE},    /* Acpi 4.0 */
     {"_PTS",     1,      0},
+    {"_PUR",     0,      ASL_RSVD_RETURN_VALUE},    /* Acpi 4.0 */
     {"_PXM",     0,      ASL_RSVD_RETURN_VALUE},
     {"_RBO",     0,      ASL_RSVD_RESOURCE_NAME},
     {"_RBW",     0,      ASL_RSVD_RESOURCE_NAME},
@@ -407,6 +434,7 @@ const ASL_RESERVED_INFO         Reserved
     {"_SCP",     0x13,   0},                        /* Acpi 1.0 - one arg; Acpi 3.0 - three args */
     {"_SDD",     1,      0},                        /* Acpi 3.0 */
     {"_SEG",     0,      ASL_RSVD_RETURN_VALUE},
+    {"_SHL",     1,      ASL_RSVD_RETURN_VALUE},    /* Acpi 4.0 */
     {"_SHR",     0,      ASL_RSVD_RESOURCE_NAME},
     {"_SI_",     0,      ASL_RSVD_SCOPE},
     {"_SIZ",     0,      ASL_RSVD_RESOURCE_NAME},
@@ -417,12 +445,16 @@ const ASL_RESERVED_INFO         Reserved
     {"_SST",     1,      0},
     {"_STA",     0,      ASL_RSVD_RETURN_VALUE},
     {"_STM",     3,      0},
+    {"_STP",     2,      ASL_RSVD_RETURN_VALUE},    /* Acpi 4.0 */
     {"_STR",     0,      ASL_RSVD_RETURN_VALUE},
+    {"_STV",     2,      ASL_RSVD_RETURN_VALUE},    /* Acpi 4.0 */
     {"_SUN",     0,      ASL_RSVD_RETURN_VALUE},
     {"_SWS",     0,      ASL_RSVD_RETURN_VALUE},    /* Acpi 3.0 */
     {"_TC1",     0,      ASL_RSVD_RETURN_VALUE},
     {"_TC2",     0,      ASL_RSVD_RETURN_VALUE},
     {"_TDL",     0,      ASL_RSVD_RETURN_VALUE},    /* Acpi 3.0b */
+    {"_TIP",     1,      ASL_RSVD_RETURN_VALUE},    /* Acpi 4.0 */
+    {"_TIV",     1,      ASL_RSVD_RETURN_VALUE},    /* Acpi 4.0 */
     {"_TMP",     0,      ASL_RSVD_RETURN_VALUE},
     {"_TPC",     0,      ASL_RSVD_RETURN_VALUE},    /* Acpi 3.0 */
     {"_TPT",     1,      0},                        /* Acpi 3.0 */
@@ -681,6 +713,7 @@ const ASL_MAPPING_ENTRY     AslKeywordMa
 /* REGIONSPACE_CMOS */          OP_TABLE_ENTRY (AML_RAW_DATA_BYTE,          REGION_CMOS,                    0,                  0),
 /* REGIONSPACE_EC */            OP_TABLE_ENTRY (AML_RAW_DATA_BYTE,          REGION_EC,                      0,                  0),
 /* REGIONSPACE_IO */            OP_TABLE_ENTRY (AML_RAW_DATA_BYTE,          REGION_IO,                      0,                  0),
+/* REGIONSPACE_IPMI */          OP_TABLE_ENTRY (AML_RAW_DATA_BYTE,          REGION_IPMI,                    0,                  0),
 /* REGIONSPACE_MEM */           OP_TABLE_ENTRY (AML_RAW_DATA_BYTE,          REGION_MEMORY,                  0,                  0),
 /* REGIONSPACE_PCI */           OP_TABLE_ENTRY (AML_RAW_DATA_BYTE,          REGION_PCI_CONFIG,              0,                  0),
 /* REGIONSPACE_PCIBAR */        OP_TABLE_ENTRY (AML_RAW_DATA_BYTE,          REGION_PCI_BAR,                 0,                  0),

Modified: vendor-sys/acpica/dist/debugger/dbcmds.c
==============================================================================
--- vendor-sys/acpica/dist/debugger/dbcmds.c	Thu Jun 25 23:10:59 2009	(r195012)
+++ vendor-sys/acpica/dist/debugger/dbcmds.c	Thu Jun 25 23:20:50 2009	(r195013)
@@ -500,17 +500,16 @@ AcpiDbWalkForExecute (
     void                    *Context,
     void                    **ReturnValue)
 {
-    ACPI_NAMESPACE_NODE         *Node = (ACPI_NAMESPACE_NODE *) ObjHandle;
-    UINT32                      *Count = (UINT32 *) Context;
-    const ACPI_PREDEFINED_INFO  *Predefined;
-    ACPI_BUFFER                 ReturnObj;
-    ACPI_STATUS                 Status;
-    char                        *Pathname;
-    ACPI_BUFFER             Buffer;
+    ACPI_NAMESPACE_NODE     *Node = (ACPI_NAMESPACE_NODE *) ObjHandle;
+    UINT32                  *Count = (UINT32 *) Context;
+    ACPI_BUFFER             ReturnObj;
+    ACPI_STATUS             Status;
+    char                    *Pathname;
     UINT32                  i;
     ACPI_DEVICE_INFO        *ObjInfo;
     ACPI_OBJECT_LIST        ParamObjects;
     ACPI_OBJECT             Params[ACPI_METHOD_NUM_ARGS];
+    const ACPI_PREDEFINED_INFO *Predefined;
 
 
     Predefined = AcpiNsCheckForPredefinedName (Node);
@@ -532,8 +531,7 @@ AcpiDbWalkForExecute (
 
     /* Get the object info for number of method parameters */
 
-    Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
-    Status = AcpiGetObjectInfo (ObjHandle, &Buffer);
+    Status = AcpiGetObjectInfo (ObjHandle, &ObjInfo);
     if (ACPI_FAILURE (Status))
     {
         return (Status);
@@ -542,7 +540,6 @@ AcpiDbWalkForExecute (
     ParamObjects.Pointer = NULL;
     ParamObjects.Count   = 0;
 
-    ObjInfo = Buffer.Pointer;
     if (ObjInfo->Type == ACPI_TYPE_METHOD)
     {
 
@@ -558,7 +555,7 @@ AcpiDbWalkForExecute (
         ParamObjects.Count       = ObjInfo->ParamCount;
     }
 
-    ACPI_FREE (Buffer.Pointer);
+    ACPI_FREE (ObjInfo);
 
     ReturnObj.Pointer = NULL;
     ReturnObj.Length = ACPI_ALLOCATE_BUFFER;
@@ -1993,12 +1990,17 @@ AcpiDbBusWalk (
     ACPI_NAMESPACE_NODE     *Node = (ACPI_NAMESPACE_NODE *) ObjHandle;
     ACPI_STATUS             Status;
     ACPI_BUFFER             Buffer;
-    ACPI_INTEGER            ADR;
-    ACPI_DEVICE_ID          Id;
-    ACPI_COMPATIBLE_ID_LIST *Cid;
     ACPI_NAMESPACE_NODE     *TempNode;
+    ACPI_DEVICE_INFO        *Info;
+    UINT32                  i;
 
 
+    if ((Node->Type != ACPI_TYPE_DEVICE) &&
+        (Node->Type != ACPI_TYPE_PROCESSOR))
+    {
+        return (AE_OK);
+    }
+
     /* Exit if there is no _PRT under this device */
 
     Status = AcpiGetHandle (Node, METHOD_NAME__PRT,
@@ -2018,57 +2020,70 @@ AcpiDbBusWalk (
         return (AE_OK);
     }
 
+    Status = AcpiGetObjectInfo (ObjHandle, &Info);
+    if (ACPI_FAILURE (Status))
+    {
+        return (AE_OK);
+    }
+
     /* Display the full path */
 
-    AcpiOsPrintf ("%-32s", (char *) Buffer.Pointer);
+    AcpiOsPrintf ("%-32s Type %X", (char *) Buffer.Pointer, Node->Type);
     ACPI_FREE (Buffer.Pointer);
 
+    if (Info->Flags & ACPI_PCI_ROOT_BRIDGE)
+    {
+        AcpiOsPrintf ("  - Is PCI Root Bridge");
+    }
+    AcpiOsPrintf ("\n");
+
     /* _PRT info */
 
-    AcpiOsPrintf ("_PRT=%p", TempNode);
+    AcpiOsPrintf ("_PRT: %p\n", TempNode);
 
-    /* Get the _ADR value */
+    /* Dump _ADR, _HID, _UID, _CID */
 
-    Status = AcpiUtEvaluateNumericObject (METHOD_NAME__ADR, Node, &ADR);
-    if (ACPI_FAILURE (Status))
+    if (Info->Valid & ACPI_VALID_ADR)
     {
-        AcpiOsPrintf (" No _ADR      ");
+        AcpiOsPrintf ("_ADR: %8.8X%8.8X\n", ACPI_FORMAT_UINT64 (Info->Address));
     }
     else
     {
-        AcpiOsPrintf (" _ADR=%8.8X", (UINT32) ADR);
+        AcpiOsPrintf ("_ADR: <Not Present>\n");
     }
 
-    /* Get the _HID if present */
-
-    Status = AcpiUtExecute_HID (Node, &Id);
-    if (ACPI_SUCCESS (Status))
+    if (Info->Valid & ACPI_VALID_HID)
     {
-        AcpiOsPrintf (" _HID=%s", Id.Value);
+        AcpiOsPrintf ("_HID: %s\n", Info->HardwareId.String);
     }
     else
     {
-        AcpiOsPrintf ("             ");
+        AcpiOsPrintf ("_HID: <Not Present>\n");
     }
 
-    /* Get the _UID if present */
-
-    Status = AcpiUtExecute_UID (Node, &Id);
-    if (ACPI_SUCCESS (Status))
+    if (Info->Valid & ACPI_VALID_UID)
     {
-        AcpiOsPrintf (" _UID=%s", Id.Value);
+        AcpiOsPrintf ("_UID: %s\n", Info->UniqueId.String);
+    }
+    else
+    {
+        AcpiOsPrintf ("_UID: <Not Present>\n");
     }
 
-    /* Get the _CID if present */
-
-    Status = AcpiUtExecute_CID (Node, &Cid);
-    if (ACPI_SUCCESS (Status))
+    if (Info->Valid & ACPI_VALID_CID)
+    {
+        for (i = 0; i < Info->CompatibleIdList.Count; i++)
+        {
+            AcpiOsPrintf ("_CID: %s\n",
+                Info->CompatibleIdList.Ids[i].String);
+        }
+    }
+    else
     {
-        AcpiOsPrintf (" _CID=%s", Cid->Id[0].Value);
-        ACPI_FREE (Cid);
+        AcpiOsPrintf ("_CID: <Not Present>\n");
     }
 
-    AcpiOsPrintf ("\n");
+    ACPI_FREE (Info);
     return (AE_OK);
 }
 
@@ -2091,7 +2106,7 @@ AcpiDbGetBusInfo (
 {
     /* Search all nodes in namespace */
 
-    (void) AcpiWalkNamespace (ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
+    (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
                     AcpiDbBusWalk, NULL, NULL);
 }
 

Modified: vendor-sys/acpica/dist/debugger/dbdisply.c
==============================================================================
--- vendor-sys/acpica/dist/debugger/dbdisply.c	Thu Jun 25 23:10:59 2009	(r195012)
+++ vendor-sys/acpica/dist/debugger/dbdisply.c	Thu Jun 25 23:20:50 2009	(r195013)
@@ -682,42 +682,52 @@ AcpiDbDisplayObjectType (
     char                    *ObjectArg)
 {
     ACPI_HANDLE             Handle;
-    ACPI_BUFFER             Buffer;
     ACPI_DEVICE_INFO        *Info;
     ACPI_STATUS             Status;
     UINT32                  i;
 
 
     Handle = ACPI_TO_POINTER (ACPI_STRTOUL (ObjectArg, NULL, 16));
-    Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
 
-    Status = AcpiGetObjectInfo (Handle, &Buffer);
-    if (ACPI_SUCCESS (Status))
+    Status = AcpiGetObjectInfo (Handle, &Info);
+    if (ACPI_FAILURE (Status))
     {
-        Info = Buffer.Pointer;
-        AcpiOsPrintf (
-            "S1D-%2.2X S2D-%2.2X S3D-%2.2X S4D-%2.2X    HID: %s, ADR: %8.8X%8.8X, Status %8.8X\n",
-            Info->HighestDstates[0], Info->HighestDstates[1],
-            Info->HighestDstates[2], Info->HighestDstates[3],
-            Info->HardwareId.Value,
-            ACPI_FORMAT_UINT64 (Info->Address),
-            Info->CurrentStatus);
+        AcpiOsPrintf ("Could not get object info, %s\n",
+            AcpiFormatException (Status));
+        return;
+    }
 
-        if (Info->Valid & ACPI_VALID_CID)
-        {
-            for (i = 0; i < Info->CompatibilityId.Count; i++)
-            {
-                AcpiOsPrintf ("CID #%d: %s\n", i,
-                    Info->CompatibilityId.Id[i].Value);
-            }
-        }
+    AcpiOsPrintf ("ADR: %8.8X%8.8X, STA: %8.8X, Flags: %X\n",
+        ACPI_FORMAT_UINT64 (Info->Address),
+        Info->CurrentStatus, Info->Flags);
+
+    AcpiOsPrintf ("S1D-%2.2X S2D-%2.2X S3D-%2.2X S4D-%2.2X\n",
+        Info->HighestDstates[0], Info->HighestDstates[1],
+        Info->HighestDstates[2], Info->HighestDstates[3]);
+
+    AcpiOsPrintf ("S0W-%2.2X S1W-%2.2X S2W-%2.2X S3W-%2.2X S4W-%2.2X\n",
+        Info->LowestDstates[0], Info->LowestDstates[1],
+        Info->LowestDstates[2], Info->LowestDstates[3],
+        Info->LowestDstates[4]);
 
-        ACPI_FREE (Info);
+    if (Info->Valid & ACPI_VALID_HID)
+    {
+        AcpiOsPrintf ("HID: %s\n", Info->HardwareId.String);
+    }
+    if (Info->Valid & ACPI_VALID_UID)
+    {
+        AcpiOsPrintf ("UID: %s\n", Info->UniqueId.String);
     }
-    else
+    if (Info->Valid & ACPI_VALID_CID)
     {
-        AcpiOsPrintf ("%s\n", AcpiFormatException (Status));
+        for (i = 0; i < Info->CompatibleIdList.Count; i++)
+        {
+            AcpiOsPrintf ("CID %d: %s\n", i,
+                Info->CompatibleIdList.Ids[i].String);
+        }
     }
+
+    ACPI_FREE (Info);
 }
 
 

Modified: vendor-sys/acpica/dist/debugger/dbexec.c
==============================================================================
--- vendor-sys/acpica/dist/debugger/dbexec.c	Thu Jun 25 23:10:59 2009	(r195012)
+++ vendor-sys/acpica/dist/debugger/dbexec.c	Thu Jun 25 23:20:50 2009	(r195013)
@@ -176,7 +176,6 @@ AcpiDbExecuteMethod (
     ACPI_OBJECT_LIST        ParamObjects;
     ACPI_OBJECT             Params[ACPI_METHOD_NUM_ARGS];
     ACPI_HANDLE             Handle;
-    ACPI_BUFFER             Buffer;
     UINT32                  i;
     ACPI_DEVICE_INFO        *ObjInfo;
 
@@ -196,8 +195,7 @@ AcpiDbExecuteMethod (
 
     /* Get the object info for number of method parameters */
 
-    Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
-    Status = AcpiGetObjectInfo (Handle, &Buffer);
+    Status = AcpiGetObjectInfo (Handle, &ObjInfo);
     if (ACPI_FAILURE (Status))
     {
         return (Status);
@@ -206,7 +204,6 @@ AcpiDbExecuteMethod (
     ParamObjects.Pointer = NULL;
     ParamObjects.Count   = 0;
 
-    ObjInfo = Buffer.Pointer;
     if (ObjInfo->Type == ACPI_TYPE_METHOD)
     {
         /* Are there arguments to the method? */
@@ -256,7 +253,7 @@ AcpiDbExecuteMethod (
         }
     }
 
-    ACPI_FREE (Buffer.Pointer);
+    ACPI_FREE (ObjInfo);
 
     /* Prepare for a return object of arbitrary size */
 

Modified: vendor-sys/acpica/dist/events/evgpe.c
==============================================================================
--- vendor-sys/acpica/dist/events/evgpe.c	Thu Jun 25 23:10:59 2009	(r195012)
+++ vendor-sys/acpica/dist/events/evgpe.c	Thu Jun 25 23:20:50 2009	(r195013)
@@ -543,7 +543,7 @@ AcpiEvGpeDetect (
 
             /* Read the Status Register */
 
-            Status = AcpiRead (&StatusReg, &GpeRegisterInfo->StatusAddress);
+            Status = AcpiHwRead (&StatusReg, &GpeRegisterInfo->StatusAddress);
             if (ACPI_FAILURE (Status))
             {
                 goto UnlockAndExit;
@@ -551,7 +551,7 @@ AcpiEvGpeDetect (
 
             /* Read the Enable Register */
 
-            Status = AcpiRead (&EnableReg, &GpeRegisterInfo->EnableAddress);
+            Status = AcpiHwRead (&EnableReg, &GpeRegisterInfo->EnableAddress);
             if (ACPI_FAILURE (Status))
             {
                 goto UnlockAndExit;

Modified: vendor-sys/acpica/dist/events/evgpeblk.c
==============================================================================
--- vendor-sys/acpica/dist/events/evgpeblk.c	Thu Jun 25 23:10:59 2009	(r195012)
+++ vendor-sys/acpica/dist/events/evgpeblk.c	Thu Jun 25 23:20:50 2009	(r195013)
@@ -995,7 +995,7 @@ AcpiEvCreateGpeInfoBlocks (
 
         /* Disable all GPEs within this register */
 
-        Status = AcpiWrite (0x00, &ThisRegister->EnableAddress);
+        Status = AcpiHwWrite (0x00, &ThisRegister->EnableAddress);
         if (ACPI_FAILURE (Status))
         {
             goto ErrorExit;
@@ -1003,7 +1003,7 @@ AcpiEvCreateGpeInfoBlocks (
 
         /* Clear any pending GPE events within this register */
 
-        Status = AcpiWrite (0xFF, &ThisRegister->StatusAddress);
+        Status = AcpiHwWrite (0xFF, &ThisRegister->StatusAddress);
         if (ACPI_FAILURE (Status))
         {
             goto ErrorExit;

Modified: vendor-sys/acpica/dist/events/evrgnini.c
==============================================================================
--- vendor-sys/acpica/dist/events/evrgnini.c	Thu Jun 25 23:10:59 2009	(r195012)
+++ vendor-sys/acpica/dist/events/evrgnini.c	Thu Jun 25 23:20:50 2009	(r195013)
@@ -127,10 +127,6 @@
 /* Local prototypes */
 
 static BOOLEAN
-AcpiEvMatchPciRootBridge (
-    char                    *Id);
-
-static BOOLEAN
 AcpiEvIsPciRootBridge (
     ACPI_NAMESPACE_NODE     *Node);
 
@@ -444,42 +440,6 @@ AcpiEvPciConfigRegionSetup (
 
 /*******************************************************************************
  *
- * FUNCTION:    AcpiEvMatchPciRootBridge
- *
- * PARAMETERS:  Id              - The HID/CID in string format
- *
- * RETURN:      TRUE if the Id is a match for a PCI/PCI-Express Root Bridge
- *
- * DESCRIPTION: Determine if the input ID is a PCI Root Bridge ID.
- *
- ******************************************************************************/
-
-static BOOLEAN
-AcpiEvMatchPciRootBridge (
-    char                    *Id)
-{
-
-    /*
-     * Check if this is a PCI root.
-     * ACPI 3.0+: check for a PCI Express root also.
-     */
-    if (!(ACPI_STRNCMP (Id,
-            PCI_ROOT_HID_STRING,
-            sizeof (PCI_ROOT_HID_STRING)))      ||
-
-        !(ACPI_STRNCMP (Id,
-            PCI_EXPRESS_ROOT_HID_STRING,
-            sizeof (PCI_EXPRESS_ROOT_HID_STRING))))
-    {
-        return (TRUE);
-    }
-
-    return (FALSE);
-}
-
-
-/*******************************************************************************
- *
  * FUNCTION:    AcpiEvIsPciRootBridge
  *
  * PARAMETERS:  Node            - Device node being examined
@@ -496,9 +456,10 @@ AcpiEvIsPciRootBridge (
     ACPI_NAMESPACE_NODE     *Node)
 {
     ACPI_STATUS             Status;
-    ACPI_DEVICE_ID          Hid;
-    ACPI_COMPATIBLE_ID_LIST *Cid;
+    ACPI_DEVICE_ID          *Hid;
+    ACPI_DEVICE_ID_LIST     *Cid;
     UINT32                  i;
+    BOOLEAN                 Match;
 
 
     /* Get the _HID and check for a PCI Root Bridge */
@@ -509,7 +470,10 @@ AcpiEvIsPciRootBridge (
         return (FALSE);
     }
 
-    if (AcpiEvMatchPciRootBridge (Hid.Value))
+    Match = AcpiUtIsPciRootBridge (Hid->String);
+    ACPI_FREE (Hid);
+
+    if (Match)
     {
         return (TRUE);
     }
@@ -526,7 +490,7 @@ AcpiEvIsPciRootBridge (
 
     for (i = 0; i < Cid->Count; i++)
     {
-        if (AcpiEvMatchPciRootBridge (Cid->Id[i].Value))
+        if (AcpiUtIsPciRootBridge (Cid->Ids[i].String))
         {
             ACPI_FREE (Cid);
             return (TRUE);

Modified: vendor-sys/acpica/dist/executer/exfield.c
==============================================================================
--- vendor-sys/acpica/dist/executer/exfield.c	Thu Jun 25 23:10:59 2009	(r195012)
+++ vendor-sys/acpica/dist/executer/exfield.c	Thu Jun 25 23:20:50 2009	(r195013)
@@ -151,6 +151,7 @@ AcpiExReadDataFromField (
     ACPI_OPERAND_OBJECT     *BufferDesc;
     ACPI_SIZE               Length;
     void                    *Buffer;
+    UINT32                  Function;
 
 
     ACPI_FUNCTION_TRACE_PTR (ExReadDataFromField, ObjDesc);
@@ -183,13 +184,27 @@ AcpiExReadDataFromField (
         }
     }
     else if ((ObjDesc->Common.Type == ACPI_TYPE_LOCAL_REGION_FIELD) &&
-             (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_SMBUS))
+             (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_SMBUS ||
+              ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_IPMI))
     {
         /*
-         * This is an SMBus read.  We must create a buffer to hold the data
-         * and directly access the region handler.
+         * This is an SMBus or IPMI read. We must create a buffer to hold
+         * the data and then directly access the region handler.
+         *
+         * Note: Smbus protocol value is passed in upper 16-bits of Function
          */
-        BufferDesc = AcpiUtCreateBufferObject (ACPI_SMBUS_BUFFER_SIZE);
+        if (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_SMBUS)
+        {
+            Length = ACPI_SMBUS_BUFFER_SIZE;
+            Function = ACPI_READ | (ObjDesc->Field.Attribute << 16);
+        }
+        else /* IPMI */
+        {
+            Length = ACPI_IPMI_BUFFER_SIZE;
+            Function = ACPI_READ;
+        }
+
+        BufferDesc = AcpiUtCreateBufferObject (Length);
         if (!BufferDesc)
         {
             return_ACPI_STATUS (AE_NO_MEMORY);
@@ -199,13 +214,11 @@ AcpiExReadDataFromField (
 
         AcpiExAcquireGlobalLock (ObjDesc->CommonField.FieldFlags);
 
-        /*
-         * Perform the read.
-         * Note: Smbus protocol value is passed in upper 16-bits of Function
-         */
+        /* Call the region handler for the read */
+
         Status = AcpiExAccessRegion (ObjDesc, 0,
                     ACPI_CAST_PTR (ACPI_INTEGER, BufferDesc->Buffer.Pointer),
-                    ACPI_READ | (ObjDesc->Field.Attribute << 16));
+                    Function);
         AcpiExReleaseGlobalLock (ObjDesc->CommonField.FieldFlags);
         goto Exit;
     }
@@ -304,6 +317,7 @@ AcpiExWriteDataToField (
     UINT32                  Length;
     void                    *Buffer;
     ACPI_OPERAND_OBJECT     *BufferDesc;
+    UINT32                  Function;
 
 
     ACPI_FUNCTION_TRACE_PTR (ExWriteDataToField, ObjDesc);
@@ -332,40 +346,59 @@ AcpiExWriteDataToField (
         }
     }
     else if ((ObjDesc->Common.Type == ACPI_TYPE_LOCAL_REGION_FIELD) &&
-             (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_SMBUS))
+             (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_SMBUS ||
+              ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_IPMI))
     {
         /*
-         * This is an SMBus write.  We will bypass the entire field mechanism
-         * and handoff the buffer directly to the handler.
+         * This is an SMBus or IPMI write. We will bypass the entire field
+         * mechanism and handoff the buffer directly to the handler. For
+         * these address spaces, the buffer is bi-directional; on a write,
+         * return data is returned in the same buffer.
+         *
+         * Source must be a buffer of sufficient size:
+         * ACPI_SMBUS_BUFFER_SIZE or ACPI_IPMI_BUFFER_SIZE.
          *
-         * Source must be a buffer of sufficient size (ACPI_SMBUS_BUFFER_SIZE).
+         * Note: SMBus protocol type is passed in upper 16-bits of Function
          */
         if (SourceDesc->Common.Type != ACPI_TYPE_BUFFER)
         {
-            ACPI_ERROR ((AE_INFO, "SMBus write requires Buffer, found type %s",
+            ACPI_ERROR ((AE_INFO,
+                "SMBus or IPMI write requires Buffer, found type %s",
                 AcpiUtGetObjectTypeName (SourceDesc)));
 
             return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
         }
 
-        if (SourceDesc->Buffer.Length < ACPI_SMBUS_BUFFER_SIZE)
+        if (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_SMBUS)
+        {
+            Length = ACPI_SMBUS_BUFFER_SIZE;
+            Function = ACPI_WRITE | (ObjDesc->Field.Attribute << 16);
+        }
+        else /* IPMI */
+        {
+            Length = ACPI_IPMI_BUFFER_SIZE;
+            Function = ACPI_WRITE;
+        }
+
+        if (SourceDesc->Buffer.Length < Length)
         {
             ACPI_ERROR ((AE_INFO,
-                "SMBus write requires Buffer of length %X, found length %X",
-                ACPI_SMBUS_BUFFER_SIZE, SourceDesc->Buffer.Length));
+                "SMBus or IPMI write requires Buffer of length %X, found length %X",
+                Length, SourceDesc->Buffer.Length));
 
             return_ACPI_STATUS (AE_AML_BUFFER_LIMIT);
         }
 
-        BufferDesc = AcpiUtCreateBufferObject (ACPI_SMBUS_BUFFER_SIZE);
+        /* Create the bi-directional buffer */
+
+        BufferDesc = AcpiUtCreateBufferObject (Length);
         if (!BufferDesc)
         {
             return_ACPI_STATUS (AE_NO_MEMORY);
         }
 
         Buffer = BufferDesc->Buffer.Pointer;
-        ACPI_MEMCPY (Buffer, SourceDesc->Buffer.Pointer,
-            ACPI_SMBUS_BUFFER_SIZE);
+        ACPI_MEMCPY (Buffer, SourceDesc->Buffer.Pointer, Length);
 
         /* Lock entire transaction if requested */
 
@@ -374,11 +407,9 @@ AcpiExWriteDataToField (
         /*
          * Perform the write (returns status and perhaps data in the
          * same buffer)
-         * Note: SMBus protocol type is passed in upper 16-bits of Function.
          */
         Status = AcpiExAccessRegion (ObjDesc, 0,
-                        (ACPI_INTEGER *) Buffer,
-                        ACPI_WRITE | (ObjDesc->Field.Attribute << 16));
+                    (ACPI_INTEGER *) Buffer, Function);
         AcpiExReleaseGlobalLock (ObjDesc->CommonField.FieldFlags);
 
         *ResultDesc = BufferDesc;

Modified: vendor-sys/acpica/dist/executer/exfldio.c
==============================================================================
--- vendor-sys/acpica/dist/executer/exfldio.c	Thu Jun 25 23:10:59 2009	(r195012)
+++ vendor-sys/acpica/dist/executer/exfldio.c	Thu Jun 25 23:20:50 2009	(r195013)
@@ -202,12 +202,13 @@ AcpiExSetupRegion (
     }
 
     /*
-     * Exit now for SMBus address space, it has a non-linear address space
+     * Exit now for SMBus or IPMI address space, it has a non-linear address space
      * and the request cannot be directly validated
      */
-    if (RgnDesc->Region.SpaceId == ACPI_ADR_SPACE_SMBUS)
+    if (RgnDesc->Region.SpaceId == ACPI_ADR_SPACE_SMBUS ||
+        RgnDesc->Region.SpaceId == ACPI_ADR_SPACE_IPMI)
     {
-        /* SMBus has a non-linear address space */
+        /* SMBus or IPMI has a non-linear address space */
 
         return_ACPI_STATUS (AE_OK);
     }

Modified: vendor-sys/acpica/dist/executer/exutils.c
==============================================================================
--- vendor-sys/acpica/dist/executer/exutils.c	Thu Jun 25 23:10:59 2009	(r195012)
+++ vendor-sys/acpica/dist/executer/exutils.c	Thu Jun 25 23:20:50 2009	(r195013)
@@ -482,59 +482,76 @@ AcpiExDigitsNeeded (
  *
  * FUNCTION:    AcpiExEisaIdToString
  *
- * PARAMETERS:  NumericId       - EISA ID to be converted
+ * PARAMETERS:  CompressedId    - EISAID to be converted
  *              OutString       - Where to put the converted string (8 bytes)
  *
  * RETURN:      None
  *
- * DESCRIPTION: Convert a numeric EISA ID to string representation
+ * DESCRIPTION: Convert a numeric EISAID to string representation. Return
+ *              buffer must be large enough to hold the string. The string
+ *              returned is always exactly of length ACPI_EISAID_STRING_SIZE
+ *              (includes null terminator). The EISAID is always 32 bits.
  *
  ******************************************************************************/
 
 void
 AcpiExEisaIdToString (
-    UINT32                  NumericId,
-    char                    *OutString)
+    char                    *OutString,
+    ACPI_INTEGER            CompressedId)
 {
-    UINT32                  EisaId;
+    UINT32                  SwappedId;
 
 
     ACPI_FUNCTION_ENTRY ();
 
 
+    /* The EISAID should be a 32-bit integer */
+
+    if (CompressedId > ACPI_UINT32_MAX)
+    {
+        ACPI_WARNING ((AE_INFO,
+            "Expected EISAID is larger than 32 bits: 0x%8.8X%8.8X, truncating",
+            ACPI_FORMAT_UINT64 (CompressedId)));
+    }
+
     /* Swap ID to big-endian to get contiguous bits */
 
-    EisaId = AcpiUtDwordByteSwap (NumericId);
+    SwappedId = AcpiUtDwordByteSwap ((UINT32) CompressedId);
+
+    /* First 3 bytes are uppercase letters. Next 4 bytes are hexadecimal */
 
-    OutString[0] = (char) ('@' + (((unsigned long) EisaId >> 26) & 0x1f));
-    OutString[1] = (char) ('@' + ((EisaId >> 21) & 0x1f));
-    OutString[2] = (char) ('@' + ((EisaId >> 16) & 0x1f));
-    OutString[3] = AcpiUtHexToAsciiChar ((ACPI_INTEGER) EisaId, 12);
-    OutString[4] = AcpiUtHexToAsciiChar ((ACPI_INTEGER) EisaId, 8);
-    OutString[5] = AcpiUtHexToAsciiChar ((ACPI_INTEGER) EisaId, 4);
-    OutString[6] = AcpiUtHexToAsciiChar ((ACPI_INTEGER) EisaId, 0);
+    OutString[0] = (char) (0x40 + (((unsigned long) SwappedId >> 26) & 0x1F));
+    OutString[1] = (char) (0x40 + ((SwappedId >> 21) & 0x1F));
+    OutString[2] = (char) (0x40 + ((SwappedId >> 16) & 0x1F));
+    OutString[3] = AcpiUtHexToAsciiChar ((ACPI_INTEGER) SwappedId, 12);
+    OutString[4] = AcpiUtHexToAsciiChar ((ACPI_INTEGER) SwappedId, 8);
+    OutString[5] = AcpiUtHexToAsciiChar ((ACPI_INTEGER) SwappedId, 4);
+    OutString[6] = AcpiUtHexToAsciiChar ((ACPI_INTEGER) SwappedId, 0);
     OutString[7] = 0;
 }
 
 
 /*******************************************************************************
  *
- * FUNCTION:    AcpiExUnsignedIntegerToString
+ * FUNCTION:    AcpiExIntegerToString
  *
- * PARAMETERS:  Value           - Value to be converted
- *              OutString       - Where to put the converted string (8 bytes)
+ * PARAMETERS:  OutString       - Where to put the converted string. At least
+ *                                21 bytes are needed to hold the largest
+ *                                possible 64-bit integer.

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-src-all mailing list