Bring in acpica 20110211, still not ok anyway
authorMagliano Andrea <masterblaster@tiscali.it>
Tue, 22 Feb 2011 22:54:23 +0000 (23:54 +0100)
committerSepherosa Ziehau <sephe@dragonflybsd.org>
Sun, 27 Mar 2011 10:34:00 +0000 (18:34 +0800)
(partially) sync with FreeBSD 8:
  * AcpiWalkNamespace post callbacks
  * wakable GPEs in acpi_probe_child()

problems:
  * system reacts slowly
  * temp reads nonsense values

293 files changed:
sys/contrib/dev/acpica-unix/changes.txt
sys/contrib/dev/acpica-unix/common/16bit.h
sys/contrib/dev/acpica-unix/common/a16find.c
sys/contrib/dev/acpica-unix/common/a16utils.asm
sys/contrib/dev/acpica-unix/common/adfile.c
sys/contrib/dev/acpica-unix/common/adisasm.c
sys/contrib/dev/acpica-unix/common/adwalk.c
sys/contrib/dev/acpica-unix/common/dmextern.c [new file with mode: 0644]
sys/contrib/dev/acpica-unix/common/dmrestag.c
sys/contrib/dev/acpica-unix/common/dmtable.c
sys/contrib/dev/acpica-unix/common/dmtbdump.c
sys/contrib/dev/acpica-unix/common/dmtbinfo.c
sys/contrib/dev/acpica-unix/common/getopt.c
sys/contrib/dev/acpica-unix/compiler/aslanalyze.c
sys/contrib/dev/acpica-unix/compiler/aslbtypes.c [new file with mode: 0644]
sys/contrib/dev/acpica-unix/compiler/aslcodegen.c
sys/contrib/dev/acpica-unix/compiler/aslcompile.c
sys/contrib/dev/acpica-unix/compiler/aslcompiler.h
sys/contrib/dev/acpica-unix/compiler/aslcompiler.l
sys/contrib/dev/acpica-unix/compiler/aslcompiler.y
sys/contrib/dev/acpica-unix/compiler/asldefine.h
sys/contrib/dev/acpica-unix/compiler/aslerror.c
sys/contrib/dev/acpica-unix/compiler/aslfiles.c
sys/contrib/dev/acpica-unix/compiler/aslfold.c
sys/contrib/dev/acpica-unix/compiler/aslglobal.h
sys/contrib/dev/acpica-unix/compiler/asllength.c
sys/contrib/dev/acpica-unix/compiler/asllisting.c
sys/contrib/dev/acpica-unix/compiler/aslload.c
sys/contrib/dev/acpica-unix/compiler/asllookup.c
sys/contrib/dev/acpica-unix/compiler/aslmain.c
sys/contrib/dev/acpica-unix/compiler/aslmap.c
sys/contrib/dev/acpica-unix/compiler/aslmessages.h [copied from sys/contrib/dev/acpica-unix/compiler/asltypes.h with 77% similarity]
sys/contrib/dev/acpica-unix/compiler/aslopcodes.c
sys/contrib/dev/acpica-unix/compiler/asloperands.c
sys/contrib/dev/acpica-unix/compiler/aslopt.c
sys/contrib/dev/acpica-unix/compiler/aslpredef.c [new file with mode: 0644]
sys/contrib/dev/acpica-unix/compiler/aslresource.c
sys/contrib/dev/acpica-unix/compiler/aslrestype1.c
sys/contrib/dev/acpica-unix/compiler/aslrestype1i.c [copied from sys/contrib/dev/acpica-unix/compiler/aslrestype1.c with 55% similarity]
sys/contrib/dev/acpica-unix/compiler/aslrestype2.c
sys/contrib/dev/acpica-unix/compiler/aslrestype2d.c [new file with mode: 0644]
sys/contrib/dev/acpica-unix/compiler/aslrestype2e.c [new file with mode: 0644]
sys/contrib/dev/acpica-unix/compiler/aslrestype2q.c [new file with mode: 0644]
sys/contrib/dev/acpica-unix/compiler/aslrestype2w.c [new file with mode: 0644]
sys/contrib/dev/acpica-unix/compiler/aslstartup.c
sys/contrib/dev/acpica-unix/compiler/aslstubs.c
sys/contrib/dev/acpica-unix/compiler/asltransform.c
sys/contrib/dev/acpica-unix/compiler/asltree.c
sys/contrib/dev/acpica-unix/compiler/asltypes.h
sys/contrib/dev/acpica-unix/compiler/aslutils.c
sys/contrib/dev/acpica-unix/compiler/asluuid.c [copied from sys/contrib/dev/acpica-unix/debugger/dbhistry.c with 63% similarity]
sys/contrib/dev/acpica-unix/compiler/aslwalks.c [copied from sys/contrib/dev/acpica-unix/compiler/aslanalyze.c with 52% similarity]
sys/contrib/dev/acpica-unix/compiler/dtcompile.c [new file with mode: 0644]
sys/contrib/dev/acpica-unix/compiler/dtcompiler.h [new file with mode: 0644]
sys/contrib/dev/acpica-unix/compiler/dtexpress.c [new file with mode: 0644]
sys/contrib/dev/acpica-unix/compiler/dtfield.c [new file with mode: 0644]
sys/contrib/dev/acpica-unix/compiler/dtio.c [new file with mode: 0644]
sys/contrib/dev/acpica-unix/compiler/dtsubtable.c [copied from sys/contrib/dev/acpica-unix/parser/psscope.c with 56% similarity]
sys/contrib/dev/acpica-unix/compiler/dttable.c [new file with mode: 0644]
sys/contrib/dev/acpica-unix/compiler/dttemplate.c [copied from sys/contrib/dev/acpica-unix/events/evevent.c with 52% similarity]
sys/contrib/dev/acpica-unix/compiler/dttemplate.h [new file with mode: 0644]
sys/contrib/dev/acpica-unix/compiler/dtutils.c [new file with mode: 0644]
sys/contrib/dev/acpica-unix/debugger/dbcmds.c
sys/contrib/dev/acpica-unix/debugger/dbdisply.c
sys/contrib/dev/acpica-unix/debugger/dbexec.c
sys/contrib/dev/acpica-unix/debugger/dbfileio.c
sys/contrib/dev/acpica-unix/debugger/dbhistry.c
sys/contrib/dev/acpica-unix/debugger/dbinput.c
sys/contrib/dev/acpica-unix/debugger/dbmethod.c [new file with mode: 0644]
sys/contrib/dev/acpica-unix/debugger/dbnames.c [new file with mode: 0644]
sys/contrib/dev/acpica-unix/debugger/dbstats.c
sys/contrib/dev/acpica-unix/debugger/dbutils.c
sys/contrib/dev/acpica-unix/debugger/dbxface.c
sys/contrib/dev/acpica-unix/disassembler/dmbuffer.c
sys/contrib/dev/acpica-unix/disassembler/dmnames.c
sys/contrib/dev/acpica-unix/disassembler/dmobject.c
sys/contrib/dev/acpica-unix/disassembler/dmopcode.c
sys/contrib/dev/acpica-unix/disassembler/dmresrc.c
sys/contrib/dev/acpica-unix/disassembler/dmresrcl.c
sys/contrib/dev/acpica-unix/disassembler/dmresrcs.c
sys/contrib/dev/acpica-unix/disassembler/dmutils.c
sys/contrib/dev/acpica-unix/disassembler/dmwalk.c
sys/contrib/dev/acpica-unix/dispatcher/dsargs.c [new file with mode: 0644]
sys/contrib/dev/acpica-unix/dispatcher/dscontrol.c [new file with mode: 0644]
sys/contrib/dev/acpica-unix/dispatcher/dsfield.c
sys/contrib/dev/acpica-unix/dispatcher/dsinit.c
sys/contrib/dev/acpica-unix/dispatcher/dsmethod.c
sys/contrib/dev/acpica-unix/dispatcher/dsmthdat.c
sys/contrib/dev/acpica-unix/dispatcher/dsobject.c
sys/contrib/dev/acpica-unix/dispatcher/dsopcode.c
sys/contrib/dev/acpica-unix/dispatcher/dsutils.c
sys/contrib/dev/acpica-unix/dispatcher/dswexec.c
sys/contrib/dev/acpica-unix/dispatcher/dswload.c
sys/contrib/dev/acpica-unix/dispatcher/dswload2.c [copied from sys/contrib/dev/acpica-unix/dispatcher/dswload.c with 57% similarity]
sys/contrib/dev/acpica-unix/dispatcher/dswscope.c
sys/contrib/dev/acpica-unix/dispatcher/dswstate.c
sys/contrib/dev/acpica-unix/events/evevent.c
sys/contrib/dev/acpica-unix/events/evgpe.c
sys/contrib/dev/acpica-unix/events/evgpeblk.c
sys/contrib/dev/acpica-unix/events/evgpeinit.c [new file with mode: 0644]
sys/contrib/dev/acpica-unix/events/evgpeutil.c [copied from sys/contrib/dev/acpica-unix/utilities/utmutex.c with 50% similarity]
sys/contrib/dev/acpica-unix/events/evmisc.c
sys/contrib/dev/acpica-unix/events/evregion.c
sys/contrib/dev/acpica-unix/events/evrgnini.c
sys/contrib/dev/acpica-unix/events/evsci.c
sys/contrib/dev/acpica-unix/events/evxface.c
sys/contrib/dev/acpica-unix/events/evxfevnt.c
sys/contrib/dev/acpica-unix/events/evxfgpe.c [copied from sys/contrib/dev/acpica-unix/events/evxfevnt.c with 61% similarity]
sys/contrib/dev/acpica-unix/events/evxfregn.c
sys/contrib/dev/acpica-unix/executer/exconfig.c
sys/contrib/dev/acpica-unix/executer/exconvrt.c
sys/contrib/dev/acpica-unix/executer/excreate.c
sys/contrib/dev/acpica-unix/executer/exdebug.c [copied from sys/contrib/dev/acpica-unix/executer/exstorob.c with 54% similarity]
sys/contrib/dev/acpica-unix/executer/exdump.c
sys/contrib/dev/acpica-unix/executer/exfield.c
sys/contrib/dev/acpica-unix/executer/exfldio.c
sys/contrib/dev/acpica-unix/executer/exmisc.c
sys/contrib/dev/acpica-unix/executer/exmutex.c
sys/contrib/dev/acpica-unix/executer/exnames.c
sys/contrib/dev/acpica-unix/executer/exoparg1.c
sys/contrib/dev/acpica-unix/executer/exoparg2.c
sys/contrib/dev/acpica-unix/executer/exoparg3.c
sys/contrib/dev/acpica-unix/executer/exoparg6.c
sys/contrib/dev/acpica-unix/executer/exprep.c
sys/contrib/dev/acpica-unix/executer/exregion.c
sys/contrib/dev/acpica-unix/executer/exresnte.c
sys/contrib/dev/acpica-unix/executer/exresolv.c
sys/contrib/dev/acpica-unix/executer/exresop.c
sys/contrib/dev/acpica-unix/executer/exstore.c
sys/contrib/dev/acpica-unix/executer/exstoren.c
sys/contrib/dev/acpica-unix/executer/exstorob.c
sys/contrib/dev/acpica-unix/executer/exsystem.c
sys/contrib/dev/acpica-unix/executer/exutils.c
sys/contrib/dev/acpica-unix/generate/lint/options.lnt
sys/contrib/dev/acpica-unix/hardware/hwacpi.c
sys/contrib/dev/acpica-unix/hardware/hwgpe.c
sys/contrib/dev/acpica-unix/hardware/hwpci.c [new file with mode: 0644]
sys/contrib/dev/acpica-unix/hardware/hwregs.c
sys/contrib/dev/acpica-unix/hardware/hwsleep.c
sys/contrib/dev/acpica-unix/hardware/hwtimer.c
sys/contrib/dev/acpica-unix/hardware/hwvalid.c
sys/contrib/dev/acpica-unix/hardware/hwxface.c
sys/contrib/dev/acpica-unix/include/acapps.h
sys/contrib/dev/acpica-unix/include/accommon.h
sys/contrib/dev/acpica-unix/include/acconfig.h
sys/contrib/dev/acpica-unix/include/acdebug.h
sys/contrib/dev/acpica-unix/include/acdisasm.h
sys/contrib/dev/acpica-unix/include/acdispat.h
sys/contrib/dev/acpica-unix/include/acevents.h
sys/contrib/dev/acpica-unix/include/acexcep.h
sys/contrib/dev/acpica-unix/include/acglobal.h
sys/contrib/dev/acpica-unix/include/achware.h
sys/contrib/dev/acpica-unix/include/acinterp.h
sys/contrib/dev/acpica-unix/include/aclocal.h
sys/contrib/dev/acpica-unix/include/acmacros.h
sys/contrib/dev/acpica-unix/include/acnames.h
sys/contrib/dev/acpica-unix/include/acnamesp.h
sys/contrib/dev/acpica-unix/include/acobject.h
sys/contrib/dev/acpica-unix/include/acopcode.h
sys/contrib/dev/acpica-unix/include/acoutput.h
sys/contrib/dev/acpica-unix/include/acparser.h
sys/contrib/dev/acpica-unix/include/acpi.h
sys/contrib/dev/acpica-unix/include/acpiosxf.h
sys/contrib/dev/acpica-unix/include/acpixf.h
sys/contrib/dev/acpica-unix/include/acpredef.h
sys/contrib/dev/acpica-unix/include/acresrc.h
sys/contrib/dev/acpica-unix/include/acrestyp.h
sys/contrib/dev/acpica-unix/include/acstruct.h
sys/contrib/dev/acpica-unix/include/actables.h
sys/contrib/dev/acpica-unix/include/actbl.h
sys/contrib/dev/acpica-unix/include/actbl1.h
sys/contrib/dev/acpica-unix/include/actbl2.h
sys/contrib/dev/acpica-unix/include/actypes.h
sys/contrib/dev/acpica-unix/include/acutils.h
sys/contrib/dev/acpica-unix/include/amlcode.h
sys/contrib/dev/acpica-unix/include/amlresrc.h
sys/contrib/dev/acpica-unix/include/platform/accygwin.h
sys/contrib/dev/acpica-unix/include/platform/acefi.h
sys/contrib/dev/acpica-unix/include/platform/acenv.h
sys/contrib/dev/acpica-unix/include/platform/acfreebsd.h
sys/contrib/dev/acpica-unix/include/platform/acgcc.h
sys/contrib/dev/acpica-unix/include/platform/acintel.h
sys/contrib/dev/acpica-unix/include/platform/aclinux.h
sys/contrib/dev/acpica-unix/include/platform/acmsvc.h
sys/contrib/dev/acpica-unix/include/platform/acnetbsd.h
sys/contrib/dev/acpica-unix/include/platform/acos2.h
sys/contrib/dev/acpica-unix/include/platform/acwin.h
sys/contrib/dev/acpica-unix/include/platform/acwin64.h
sys/contrib/dev/acpica-unix/namespace/nsaccess.c
sys/contrib/dev/acpica-unix/namespace/nsalloc.c
sys/contrib/dev/acpica-unix/namespace/nsdump.c
sys/contrib/dev/acpica-unix/namespace/nsdumpdv.c
sys/contrib/dev/acpica-unix/namespace/nseval.c
sys/contrib/dev/acpica-unix/namespace/nsinit.c
sys/contrib/dev/acpica-unix/namespace/nsload.c
sys/contrib/dev/acpica-unix/namespace/nsnames.c
sys/contrib/dev/acpica-unix/namespace/nsobject.c
sys/contrib/dev/acpica-unix/namespace/nsparse.c
sys/contrib/dev/acpica-unix/namespace/nspredef.c
sys/contrib/dev/acpica-unix/namespace/nsrepair.c [new file with mode: 0644]
sys/contrib/dev/acpica-unix/namespace/nsrepair2.c [new file with mode: 0644]
sys/contrib/dev/acpica-unix/namespace/nssearch.c
sys/contrib/dev/acpica-unix/namespace/nsutils.c
sys/contrib/dev/acpica-unix/namespace/nswalk.c
sys/contrib/dev/acpica-unix/namespace/nsxfeval.c
sys/contrib/dev/acpica-unix/namespace/nsxfname.c
sys/contrib/dev/acpica-unix/namespace/nsxfobj.c
sys/contrib/dev/acpica-unix/os_specific/service_layers/osunixdir.c
sys/contrib/dev/acpica-unix/os_specific/service_layers/osunixxf.c
sys/contrib/dev/acpica-unix/os_specific/service_layers/oswindir.c
sys/contrib/dev/acpica-unix/os_specific/service_layers/oswintbl.c
sys/contrib/dev/acpica-unix/os_specific/service_layers/oswinxf.c
sys/contrib/dev/acpica-unix/osunixxf.c
sys/contrib/dev/acpica-unix/parser/psargs.c
sys/contrib/dev/acpica-unix/parser/psloop.c
sys/contrib/dev/acpica-unix/parser/psopcode.c
sys/contrib/dev/acpica-unix/parser/psparse.c
sys/contrib/dev/acpica-unix/parser/psscope.c
sys/contrib/dev/acpica-unix/parser/pstree.c
sys/contrib/dev/acpica-unix/parser/psutils.c
sys/contrib/dev/acpica-unix/parser/pswalk.c
sys/contrib/dev/acpica-unix/parser/psxface.c
sys/contrib/dev/acpica-unix/resources/rsaddr.c
sys/contrib/dev/acpica-unix/resources/rscalc.c
sys/contrib/dev/acpica-unix/resources/rscreate.c
sys/contrib/dev/acpica-unix/resources/rsdump.c
sys/contrib/dev/acpica-unix/resources/rsinfo.c
sys/contrib/dev/acpica-unix/resources/rsio.c
sys/contrib/dev/acpica-unix/resources/rsirq.c
sys/contrib/dev/acpica-unix/resources/rslist.c
sys/contrib/dev/acpica-unix/resources/rsmemory.c
sys/contrib/dev/acpica-unix/resources/rsmisc.c
sys/contrib/dev/acpica-unix/resources/rsutils.c
sys/contrib/dev/acpica-unix/resources/rsxface.c
sys/contrib/dev/acpica-unix/tables/tbfadt.c
sys/contrib/dev/acpica-unix/tables/tbfind.c
sys/contrib/dev/acpica-unix/tables/tbinstal.c
sys/contrib/dev/acpica-unix/tables/tbutils.c
sys/contrib/dev/acpica-unix/tables/tbxface.c
sys/contrib/dev/acpica-unix/tables/tbxfroot.c
sys/contrib/dev/acpica-unix/tools/acpiexec/Makefile
sys/contrib/dev/acpica-unix/tools/acpiexec/aecommon.h
sys/contrib/dev/acpica-unix/tools/acpiexec/aeexec.c
sys/contrib/dev/acpica-unix/tools/acpiexec/aehandlers.c
sys/contrib/dev/acpica-unix/tools/acpiexec/aemain.c
sys/contrib/dev/acpica-unix/tools/acpiexec/aetables.c
sys/contrib/dev/acpica-unix/tools/acpiexec/aetables.h [copied from sys/contrib/dev/acpica-unix/tools/acpiexec/aetables.c with 52% similarity]
sys/contrib/dev/acpica-unix/tools/acpiexec/osunixdir.c
sys/contrib/dev/acpica-unix/tools/acpisrc/Makefile
sys/contrib/dev/acpica-unix/tools/acpisrc/acpisrc.h
sys/contrib/dev/acpica-unix/tools/acpisrc/ascase.c
sys/contrib/dev/acpica-unix/tools/acpisrc/asconvrt.c
sys/contrib/dev/acpica-unix/tools/acpisrc/asfile.c
sys/contrib/dev/acpica-unix/tools/acpisrc/asmain.c
sys/contrib/dev/acpica-unix/tools/acpisrc/asremove.c
sys/contrib/dev/acpica-unix/tools/acpisrc/astable.c
sys/contrib/dev/acpica-unix/tools/acpisrc/asutils.c
sys/contrib/dev/acpica-unix/tools/acpisrc/osunixdir.c
sys/contrib/dev/acpica-unix/tools/acpixtract/Makefile
sys/contrib/dev/acpica-unix/tools/acpixtract/acpixtract.c
sys/contrib/dev/acpica-unix/tools/examples/examples.c
sys/contrib/dev/acpica-unix/utilities/utalloc.c
sys/contrib/dev/acpica-unix/utilities/utcache.c
sys/contrib/dev/acpica-unix/utilities/utclib.c
sys/contrib/dev/acpica-unix/utilities/utcopy.c
sys/contrib/dev/acpica-unix/utilities/utdebug.c
sys/contrib/dev/acpica-unix/utilities/utdecode.c [copied from sys/contrib/dev/acpica-unix/utilities/utglobal.c with 63% similarity]
sys/contrib/dev/acpica-unix/utilities/utdelete.c
sys/contrib/dev/acpica-unix/utilities/uteval.c
sys/contrib/dev/acpica-unix/utilities/utglobal.c
sys/contrib/dev/acpica-unix/utilities/utids.c [new file with mode: 0644]
sys/contrib/dev/acpica-unix/utilities/utinit.c
sys/contrib/dev/acpica-unix/utilities/utlock.c
sys/contrib/dev/acpica-unix/utilities/utmath.c
sys/contrib/dev/acpica-unix/utilities/utmisc.c
sys/contrib/dev/acpica-unix/utilities/utmutex.c
sys/contrib/dev/acpica-unix/utilities/utobject.c
sys/contrib/dev/acpica-unix/utilities/utosi.c [new file with mode: 0644]
sys/contrib/dev/acpica-unix/utilities/utresrc.c
sys/contrib/dev/acpica-unix/utilities/utstate.c
sys/contrib/dev/acpica-unix/utilities/uttrack.c
sys/contrib/dev/acpica-unix/utilities/utxface.c
sys/contrib/dev/acpica-unix/utilities/utxferror.c [new file with mode: 0644]
sys/dev/acpica5/Makefile
sys/dev/acpica5/Osd/OsdHardware.c
sys/dev/acpica5/acpi.c
sys/dev/acpica5/acpi_button.c
sys/dev/acpica5/acpi_cpu_cstate.c
sys/dev/acpica5/acpi_ec.c
sys/dev/acpica5/acpi_lid.c
sys/dev/acpica5/acpi_pci.c
sys/dev/acpica5/acpi_video/acpi_video.c
sys/dev/acpica5/acpivar.h

index 89f6232..b7e5387 100644 (file)
 ----------------------------------------
-21 May 2009. Summary of changes for version 20090521:
+11 February 2011. Summary of changes for version 20110211:
 
 This release is available at www.acpica.org/downloads
 
 1) ACPI CA Core Subsystem:
 
+Added a mechanism to defer _REG methods for some early-installed handlers. 
+Most user handlers should be installed before call to AcpiEnableSubsystem. 
+However, Event handlers and region handlers should be installed after 
+AcpiInitializeObjects. Override handlers for the "default" regions should be 
+installed early, however. This change executes all _REG methods for the 
+default regions (Memory/IO/PCI/DataTable) simultaneously to prevent any 
+chicken/egg issues between them. ACPICA BZ 848.
+
+Implemented an optimization for GPE detection. This optimization will simply 
+ignore GPE registers that contain no enabled GPEs -- there is no need to 
+read the register since this information is available internally. This 
+becomes more important on machines with a large GPE space. ACPICA bugzilla 
+884. Lin Ming. Suggestion from Joe Liu.
+
+Removed all use of the highly unreliable FADT revision field. The revision 
+number in the FADT has been found to be completely unreliable and cannot be 
+trusted. Only the actual table length can be used to infer the version. This 
+change updates the ACPICA core and the disassembler so that both no longer 
+even look at the FADT version and instead depend solely upon the FADT 
+length.
+
+Fix an unresolved name issue for the no-debug and no-error-message source 
+generation cases. The _AcpiModuleName was left undefined in these cases, but 
+it is actually needed as a parameter to some interfaces. Define 
+_AcpiModuleName as a null string in these cases. ACPICA Bugzilla 888.
+
+Split several large files (makefiles and project files updated)
+  utglobal.c   -> utdecode.c
+  dbcomds.c    -> dbmethod.c dbnames.c
+  dsopcode.c   -> dsargs.c dscontrol.c
+  dsload.c     -> dsload2.c
+  aslanalyze.c -> aslbtypes.c aslwalks.c
+
+Example Code and Data Size: These are the sizes for the OS-independent 
+acpica.lib produced by the Microsoft Visual C++ 9.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 (VC 9.0):
+    Non-Debug Version:  89.7K Code, 23.7K Data, 113.4K Total
+    Debug Version:     163.9K Code, 67.5K Data, 231.4K Total
+  Current Release (VC 9.0):
+    Non-Debug Version:  89.7K Code, 23.7K Data, 113.4K Total
+    Debug Version:     163.9K Code, 67.5K Data, 231.4K Total
+
+2) iASL Compiler/Disassembler and Tools:
+
+iASL: Implemented the predefined macros __LINE__, __FILE__, and __DATE__. 
+These are useful C-style macros with the standard definitions. ACPICA 
+bugzilla 898.
+
+iASL/DTC: Added support for integer expressions and labels. Support for full 
+expressions for all integer fields in all ACPI tables. Support for labels in 
+"generic" portions of tables such as UEFI. See the iASL reference manual.
+
+Debugger: Added a command to display the status of global handlers. The 
+"handlers" command will display op region, fixed event, and miscellaneous 
+global handlers. installation status -- and for op regions, whether default 
+or user-installed handler will be used.
+
+iASL: Warn if reserved method incorrectly returns a value. Many predefined 
+names are defined such that they do not return a value. If implemented as a 
+method, issue a warning if such a name explicitly returns a value. ACPICA 
+Bugzilla 855.
+
+iASL: Added detection of GPE method name conflicts. Detects a conflict where 
+there are two GPE methods of the form _Lxy and _Exy in the same scope. (For 
+example, _L1D and _E1D in the same scope.) ACPICA bugzilla 848.
+
+iASL/DTC: Fixed a couple input scanner issues with comments and line 
+numbers. Comment remover could get confused and miss a comment ending. Fixed 
+a problem with line counter maintenance.
+
+iASL/DTC: Reduced the severity of some errors from fatal to error. There is 
+no need to abort on simple errors within a field definition.
+
+Debugger: Simplified the output of the help command. All help output now in 
+a single screen, instead of help subcommands. ACPICA Bugzilla 897.
+
+
+----------------------------------------
+12 January 2011. Summary of changes for version 20110112:
+
+1) ACPI CA Core Subsystem:
+
+Fixed a race condition between method execution and namespace walks that can 
+possibly cause a fault. The problem was apparently introduced in version 
+20100528 as a result of a performance optimization that reduces the number 
+of 
+namespace walks upon method exit by using the delete_namespace_subtree 
+function instead of the delete_namespace_by_owner function used previously. 
+Bug is a missing namespace lock in the delete_namespace_subtree function. 
+dana.myers@oracle.com
+
+Fixed several issues and a possible fault with the automatic "serialized" 
+method support. History: This support changes a method to "serialized" on 
+the 
+fly if the method generates an AE_ALREADY_EXISTS error, indicating the 
+possibility that it cannot handle reentrancy. This fix repairs a couple of 
+issues seen in the field, especially on machines with many cores:
+
+    1) Delete method children only upon the exit of the last thread,
+       so as to not delete objects out from under other running threads
+      (and possibly causing a fault.)
+    2) Set the "serialized" bit for the method only upon the exit of the
+       Last thread, so as to not cause deadlock when running threads
+       attempt to exit.
+    3) Cleanup the use of the AML "MethodFlags" and internal method flags
+       so that there is no longer any confusion between the two.
+
+    Lin Ming, Bob Moore. Reported by dana.myers@oracle.com.
+
+Debugger: Now lock the namespace for duration of a namespace dump. Prevents 
+issues if the namespace is changing dynamically underneath the debugger. 
+Especially affects temporary namespace nodes, since the debugger displays 
+these also.
+
+Updated the ordering of include files. The ACPICA headers should appear 
+before any compiler-specific headers (stdio.h, etc.) so that acenv.h can set 
+any necessary compiler-specific defines, etc. Affects the ACPI-related tools 
+and utilities.
+
+Updated all ACPICA copyrights and signons to 2011. Added the 2011 copyright 
+to all module headers and signons, including the Linux header. This affects 
+virtually every file in the ACPICA core subsystem, iASL compiler, and all 
+utilities.
+
+Added project files for MS Visual Studio 2008 (VC++ 9.0). The original 
+project files for VC++ 6.0 are now obsolete. New project files can be found 
+under acpica/generate/msvc9. See acpica/generate/msvc9/readme.txt for 
+details.
+
+Example Code and Data Size: These are the sizes for the OS-independent 
+acpica.lib produced by the Microsoft Visual C++ 9.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 (VC 6.0):
+    Non-Debug Version:  89.8K Code, 18.9K Data, 108.7K Total
+    Debug Version:     166.6K Code, 52.1K Data, 218.7K Total
+  Current Release (VC 9.0):
+    Non-Debug Version:  89.7K Code, 23.7K Data, 113.4K Total
+    Debug Version:     163.9K Code, 67.5K Data, 231.4K Total
+
+2) iASL Compiler/Disassembler and Tools:
+
+iASL: Added generic data types to the Data Table compiler. Add "generic" 
+data 
+types such as UINT32, String, Unicode, etc., to simplify the generation of 
+platform-defined tables such as UEFI. Lin Ming.
+
+iASL: Added listing support for the Data Table Compiler. Adds listing 
+support 
+(-l) to display actual binary output for each line of input code.
+
+----------------------------------------
+09 December 2010. Summary of changes for version 20101209:
+
+1) ACPI CA Core Subsystem:
+
+Completed the major overhaul of the GPE support code that was begun in July 
+2010. Major features include: removal of _PRW execution in ACPICA (host 
+executes _PRWs anyway), cleanup of "wake" GPE interfaces and processing, 
+changes to existing interfaces, simplification of GPE handler operation, and 
+a handful of new interfaces:
+
+    AcpiUpdateAllGpes
+    AcpiFinishGpe
+    AcpiSetupGpeForWake
+    AcpiSetGpeWakeMask
+    One new file, evxfgpe.c to consolidate all external GPE interfaces.
+
+See the ACPICA Programmer Reference for full details and programming 
+information. See the new section 4.4 "General Purpose Event (GPE) Support" 
+for a full overview, and section 8.7 "ACPI General Purpose Event Management" 
+for programming details. ACPICA BZ 858,870,877. Matthew Garrett, Lin Ming, 
+Bob Moore, Rafael Wysocki.
+
+Implemented a new GPE feature for Windows compatibility, the "Implicit Wake 
+GPE Notify". This feature will automatically issue a Notify(2) on a device 
+when a Wake GPE is received if there is no corresponding GPE method or 
+handler. ACPICA BZ 870.
+
+Fixed a problem with the Scope() operator during table parse and load phase. 
+During load phase (table load or method execution), the scope operator 
+should 
+not enter the target into the namespace. Instead, it should open a new scope 
+at the target location. Linux BZ 19462, ACPICA BZ 882.
+
+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:  89.8K Code, 18.9K Data, 108.7K Total
+    Debug Version:     166.6K Code, 52.1K Data, 218.7K Total
+  Current Release:
+    Non-Debug Version:  89.9K Code, 19.0K Data, 108.9K Total
+    Debug Version:     166.3K Code, 52.1K Data, 218.4K Total
+
+2) iASL Compiler/Disassembler and Tools:
+
+iASL: Relax the alphanumeric restriction on _CID strings. These strings are 
+"bus-specific" per the ACPI specification, and therefore any characters are 
+acceptable. The only checks that can be performed are for a null string and 
+perhaps for a leading asterisk. ACPICA BZ 886.
+
+iASL: Fixed a problem where a syntax error that caused a premature EOF 
+condition on the source file emitted a very confusing error message. The 
+premature EOF is now detected correctly. ACPICA BZ 891.
+
+Disassembler: Decode the AccessSize within a Generic Address Structure (byte 
+access, word access, etc.) Note, this field does not allow arbitrary bit 
+access, the size is encoded as 1=byte, 2=word, 3=dword, and 4=qword.
+
+New: AcpiNames utility - Example namespace dump utility. Shows an example of 
+ACPICA configuration for a minimal namespace dump utility. Uses table and 
+namespace managers, but no AML interpreter. Does not add any functionality 
+over AcpiExec, it is a subset of AcpiExec. The purpose is to show how to 
+partition and configure ACPICA. ACPICA BZ 883.
+
+AML Debugger: Increased the debugger buffer size for method return objects. 
+Was 4K, increased to 16K. Also enhanced error messages for debugger method 
+execution, including the buffer overflow case.
+
+----------------------------------------
+13 October 2010. Summary of changes for version 20101013:
+
+1) ACPI CA Core Subsystem:
+
+Added support to clear the PCIEXP_WAKE event. When clearing ACPI events, now 
+clear the PCIEXP_WAKE_STS bit in the ACPI PM1 Status Register, via 
+HwClearAcpiStatus. Original change from Colin King. ACPICA BZ 880.
+
+Changed the type of the predefined namespace object _TZ from ThermalZone to 
+Device. This was found to be confusing to the host software that processes 
+the various thermal zones, since _TZ is not really a ThermalZone. However, a 
+Notify() can still be performed on it. ACPICA BZ 876. Suggestion from Rui 
+Zhang.
+
+Added Windows Vista SP2 to the list of supported _OSI strings. The actual 
+string is "Windows 2006 SP2".
+
+Eliminated duplicate code in AcpiUtExecute* functions. Now that the nsrepair 
+code automatically repairs _HID-related strings, this type of code is no 
+longer needed in Execute_HID, Execute_CID, and Execute_UID. ACPICA BZ 878.
+
+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:  89.9K Code, 19.0K Data, 108.9K Total
+    Debug Version:     166.3K Code, 52.1K Data, 218.4K Total
+  Current Release:
+    Non-Debug Version:  89.9K Code, 19.0K Data, 108.9K Total
+    Debug Version:     166.3K Code, 52.1K Data, 218.4K Total
+
+2) iASL Compiler/Disassembler and Tools:
+
+iASL: Implemented additional compile-time validation for _HID strings. The 
+non-hex prefix (such as "PNP" or "ACPI") must be uppercase, and the length 
+of 
+the string must be exactly seven or eight characters. For both _HID and _CID 
+strings, all characters must be alphanumeric. ACPICA BZ 874.
+
+iASL: Allow certain "null" resource descriptors. Some BIOS code creates 
+descriptors that are mostly or all zeros, with the expectation that they 
+will 
+be filled in at runtime. iASL now allows this as long as there is a 
+"resource 
+tag" (name) associated with the descriptor, which gives the ASL a handle 
+needed to modify the descriptor. ACPICA BZ 873.
+
+Added single-thread support to the generic Unix application OSL. Primarily 
+for iASL support, this change removes the use of semaphores in the single-
+threaded ACPICA tools/applications - increasing performance. The 
+_MULTI_THREADED option was replaced by the (reverse) ACPI_SINGLE_THREADED 
+option. ACPICA BZ 879.
+
+AcpiExec: several fixes for the 64-bit version. Adds XSDT support and 
+support 
+for 64-bit DSDT/FACS addresses in the FADT. Lin Ming.
+
+iASL: Moved all compiler messages to a new file, aslmessages.h.
+
+----------------------------------------
+15 September 2010. Summary of changes for version 20100915:
+
+1) ACPI CA Core Subsystem:
+
+Removed the AcpiOsDerivePciId OSL interface. The various host 
+implementations 
+of this function were not OS-dependent and are now obsolete and can be 
+removed from all host OSLs. This function has been replaced by 
+AcpiHwDerivePciId, which is now part of the ACPICA core code. 
+AcpiHwDerivePciId has been implemented without recursion. Adds one new 
+module, hwpci.c. ACPICA BZ 857.
+
+Implemented a dynamic repair for _HID and _CID strings. The following 
+problems are now repaired at runtime: 1) Remove a leading asterisk in the 
+string, and 2) the entire string is uppercased. Both repairs are in 
+accordance with the ACPI specification and will simplify host driver code. 
+ACPICA BZ 871.
+
+The ACPI_THREAD_ID type is no longer configurable, internally it is now 
+always UINT64. This simplifies the ACPICA code, especially any printf 
+output. 
+UINT64 is the only common data type for all thread_id types across all 
+operating systems. It is now up to the host OSL to cast the native thread_id 
+type to UINT64 before returning the value to ACPICA (via AcpiOsGetThreadId). 
+Lin Ming, Bob Moore.
+
+Added the ACPI_INLINE type to enhance the ACPICA configuration. The "inline" 
+keyword is not standard across compilers, and this type allows inline to be 
+configured on a per-compiler basis. Lin Ming.
+
+Made the system global AcpiGbl_SystemAwakeAndRunning publically available. 
+Added an extern for this boolean in acpixf.h. Some hosts utilize this value 
+during suspend/restore operations. ACPICA BZ 869.
+
+All code that implements error/warning messages with the "ACPI:" prefix has 
+been moved to a new module, utxferror.c.
+
+The UINT64_OVERLAY was moved to utmath.c, which is the only module where it 
+is used. ACPICA BZ 829. Lin Ming, Bob Moore.
+
+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:  89.1K Code, 19.0K Data, 108.1K Total
+    Debug Version:     165.1K Code, 51.9K Data, 217.0K Total
+  Current Release:
+    Non-Debug Version:  89.9K Code, 19.0K Data, 108.9K Total
+    Debug Version:     166.3K Code, 52.1K Data, 218.4K Total
+
+2) iASL Compiler/Disassembler and Tools:
+
+iASL/Disassembler: Write ACPI errors to stderr instead of the output file. 
+This keeps the output files free of random error messages that may originate 
+from within the namespace/interpreter code. Used this opportunity to merge 
+all ACPI:-style messages into a single new module, utxferror.c. ACPICA BZ 
+866. Lin Ming, Bob Moore.
+
+Tools: update some printfs for ansi warnings on size_t. Handle width change 
+of size_t on 32-bit versus 64-bit generations. Lin Ming.
+
+----------------------------------------
+06 August 2010. Summary of changes for version 20100806:
+
+1) ACPI CA Core Subsystem:
+
+Designed and implemented a new host interface to the _OSI support code. This 
+will allow the host to dynamically add or remove multiple _OSI strings, as 
+well as install an optional handler that is called for each _OSI invocation. 
+Also added a new AML debugger command, 'osi' to display and modify the 
+global 
+_OSI string table, and test support in the AcpiExec utility. See the ACPICA 
+reference manual for full details. Lin Ming, Bob Moore. ACPICA BZ 836.
+New Functions:
+    AcpiInstallInterface - Add an _OSI string.
+    AcpiRemoveInterface - Delete an _OSI string.
+    AcpiInstallInterfaceHandler - Install optional _OSI handler.
+Obsolete Functions:
+    AcpiOsValidateInterface - no longer used.
+New Files:
+    source/components/utilities/utosi.c
+
+Re-introduced the support to enable multi-byte transfers for Embedded 
+Controller (EC) operation regions. A reported problem was found to be a bug 
+in the host OS, not in the multi-byte support. Previously, the maximum data 
+size passed to the EC operation region handler was a single byte. There are 
+often EC Fields larger than one byte that need to be transferred, and it is 
+useful for the EC driver to lock these as a single transaction. This change 
+enables single transfers larger than 8 bits. This effectively changes the 
+access to the EC space from ByteAcc to AnyAcc, and will probably require 
+changes to the host OS Embedded Controller driver to enable 16/32/64/256-bit 
+transfers in addition to 8-bit transfers. Alexey Starikovskiy, Lin Ming.
+
+Fixed a problem with the prototype for AcpiOsReadPciConfiguration. The 
+prototype in acpiosxf.h had the output value pointer as a (void *).
+It should be a (UINT64 *). This may affect some host OSL code.
+
+Fixed a couple problems with the recently modified Linux makefiles for iASL 
+and AcpiExec. These new makefiles place the generated object files in the 
+local directory so that there can be no collisions between the files that 
+are 
+shared between them that are compiled with different options.
+
+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:  88.3K Code, 18.8K Data, 107.1K Total
+    Debug Version:     164.0K Code, 51.5K Data, 215.5K Total
+  Current Release:
+    Non-Debug Version:  89.1K Code, 19.0K Data, 108.1K Total
+    Debug Version:     165.1K Code, 51.9K Data, 217.0K Total
+
+2) iASL Compiler/Disassembler and Tools:
+
+iASL/Disassembler: Added a new option (-da, "disassemble all") to load the 
+namespace from and disassemble an entire group of AML files. Useful for 
+loading all of the AML tables for a given machine (DSDT, SSDT1...SSDTn) and 
+disassembling with one simple command. ACPICA BZ 865. Lin Ming.
+
+iASL: Allow multiple invocations of -e option. This change allows multiple 
+uses of -e on the command line: "-e ssdt1.dat -e ssdt2.dat". ACPICA BZ 834. 
+Lin Ming.
+
+----------------------------------------
+02 July 2010. Summary of changes for version 20100702:
+
+1) ACPI CA Core Subsystem:
+
+Implemented several updates to the recently added GPE reference count 
+support. The model for "wake" GPEs is changing to give the host OS complete 
+control of these GPEs. Eventually, the ACPICA core will not execute any _PRW 
+methods, since the host already must execute them. Also, additional changes 
+were made to help ensure that the reference counts are kept in proper 
+synchronization with reality. Rafael J. Wysocki.
+
+1) Ensure that GPEs are not enabled twice during initialization.
+2) Ensure that GPE enable masks stay in sync with the reference count.
+3) Do not inadvertently enable GPEs when writing GPE registers.
+4) Remove the internal wake reference counter and add new AcpiGpeWakeup 
+interface. This interface will set or clear individual GPEs for wakeup.
+5) Remove GpeType argument from AcpiEnable and AcpiDisable. These interfaces 
+are now used for "runtime" GPEs only.
+
+Changed the behavior of the GPE install/remove handler interfaces. The GPE 
+is 
+no longer disabled during this process, as it was found to cause problems on 
+some machines. Rafael J. Wysocki.
+
+Reverted a change introduced in version 20100528 to enable Embedded 
+Controller multi-byte transfers. This change was found to cause problems 
+with 
+Index Fields and possibly Bank Fields. It will be reintroduced when these 
+problems have been resolved.
+
+Fixed a problem with references to Alias objects within Package Objects. A 
+reference to an Alias within the definition of a Package was not always 
+resolved properly. Aliases to objects like Processors, Thermal zones, etc. 
+were resolved to the actual object instead of a reference to the object as 
+it 
+should be. Package objects are only allowed to contain integer, string, 
+buffer, package, and reference objects. Redhat bugzilla 608648.
+
+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:  88.3K Code, 18.8K Data, 107.1K Total
+    Debug Version:     164.1K Code, 51.5K Data, 215.6K Total
+  Current Release:
+    Non-Debug Version:  88.3K Code, 18.8K Data, 107.1K Total
+    Debug Version:     164.0K Code, 51.5K Data, 215.5K Total
+
+2) iASL Compiler/Disassembler and Tools:
+
+iASL: Implemented a new compiler subsystem to allow definition and 
+compilation of the non-AML ACPI tables such as FADT, MADT, SRAT, etc. These 
+are called "ACPI Data Tables", and the new compiler is the "Data Table 
+Compiler". This compiler is intended to simplify the existing error-prone 
+process of creating these tables for the BIOS, as well as allowing the 
+disassembly, modification, recompilation, and override of existing ACPI data 
+tables. See the iASL User Guide for detailed information.
+
+iASL: Implemented a new Template Generator option in support of the new Data 
+Table Compiler. This option will create examples of all known ACPI tables 
+that can be used as the basis for table development. See the iASL 
+documentation and the -T option.
+
+Disassembler and headers: Added support for the WDDT ACPI table (Watchdog 
+Descriptor Table).
+
+Updated the Linux makefiles for iASL and AcpiExec to place the generated 
+object files in the local directory so that there can be no collisions 
+between the shared files between them that are generated with different 
+options.
+
+Added support for Mac OS X in the Unix OSL used for iASL and AcpiExec. Use 
+the #define __APPLE__ to enable this support.
+
+----------------------------------------
+28 May 2010. Summary of changes for version 20100528:
+
+Note: The ACPI 4.0a specification was released on April 5, 2010 and is 
+available at www.acpi.info. This is primarily an errata release.
+
+1) ACPI CA Core Subsystem:
+
+Undefined ACPI tables: We are looking for the definitions for the following 
+ACPI tables that have been seen in the field: ATKG, IEIT, GSCI.
+
+Implemented support to enable multi-byte transfers for Embedded Controller 
+(EC) operation regions. Previously, the maximum data size passed to the EC 
+operation region handler was a single byte. There are often EC Fields larger 
+than one byte that need to be transferred, and it is useful for the EC 
+driver 
+to lock these as a single transaction. This change enables single transfers 
+larger than 8 bits. This effectively changes the access to the EC space from 
+ByteAcc to AnyAcc, and will probably require changes to the host OS Embedded 
+Controller driver to enable 16/32/64/256-bit transfers in addition to 8-bit 
+transfers. Alexey Starikovskiy, Lin Ming
+
+Implemented a performance enhancement for namespace search and access. This 
+change enhances the performance of namespace searches and walks by adding a 
+backpointer to the parent in each namespace node. On large namespaces, this 
+change can improve overall ACPI performance by up to 9X. Adding a pointer to 
+each namespace node increases the overall size of the internal namespace by 
+about 5%, since each namespace entry usually consists of both a namespace 
+node and an ACPI operand object. However, this is the first growth of the 
+namespace in ten years. ACPICA bugzilla 817. Alexey Starikovskiy.
+
+Implemented a performance optimization that reduces the number of namespace 
+walks. On control method exit, only walk the namespace if the method is 
+known 
+to have created namespace objects outside of its local scope. Previously, 
+the 
+entire namespace was traversed on each control method exit. This change can 
+improve overall ACPI performance by up to 3X. Alexey Starikovskiy, Bob 
+Moore.
+
+Added support to truncate I/O addresses to 16 bits for Windows 
+compatibility. 
+Some ASL code has been seen in the field that inadvertently has bits set 
+above bit 15. This feature is optional and is enabled if the BIOS requests 
+any Windows OSI strings. It can also be enabled by the host OS. Matthew 
+Garrett, Bob Moore.
+
+Added support to limit the maximum time for the ASL Sleep() operator. To 
+prevent accidental deep sleeps, limit the maximum time that Sleep() will 
+actually sleep. Configurable, the default maximum is two seconds. ACPICA 
+bugzilla 854.
+
+Added run-time validation support for the _WDG and_WED Microsoft predefined 
+methods. These objects are defined by "Windows Instrumentation", and are not 
+part of the ACPI spec. ACPICA BZ 860.
+
+Expanded all statistic counters used during namespace and device 
+initialization from 16 to 32 bits in order to support very large namespaces.
+
+Replaced all instances of %d in printf format specifiers with %u since 
+nearly 
+all integers in ACPICA are unsigned.
+
+Fixed the exception namestring for AE_WAKE_ONLY_GPE. Was incorrectly 
+returned 
+as AE_NO_HANDLER.
+
+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:  88.4K Code, 18.8K Data, 107.2K Total
+    Debug Version:     164.2K Code, 51.5K Data, 215.7K Total
+  Current Release:
+    Non-Debug Version:  88.3K Code, 18.8K Data, 107.1K Total
+    Debug Version:     164.1K Code, 51.5K Data, 215.6K Total
+
+2) iASL Compiler/Disassembler and Tools:
+
+iASL: Added compiler support for the _WDG and_WED Microsoft predefined 
+methods. These objects are defined by "Windows Instrumentation", and are not 
+part of the ACPI spec. ACPICA BZ 860.
+
+AcpiExec: added option to disable the memory tracking mechanism. The -dt 
+option will disable the tracking mechanism, which improves performance 
+considerably.
+
+AcpiExec: Restructured the command line options into -d (disable) and -e 
+(enable) options.
+
+----------------------------------------
+28 April 2010. Summary of changes for version 20100428:
+
+1) ACPI CA Core Subsystem:
+
+Implemented GPE support for dynamically loaded ACPI tables. For all GPEs, 
+including FADT-based and GPE Block Devices, execute any _PRW methods in the 
+new table, and process any _Lxx/_Exx GPE methods in the new table. Any 
+runtime GPE that is referenced by an _Lxx/_Exx method in the new table is 
+immediately enabled. Handles the FADT-defined GPEs as well as GPE Block 
+Devices. Provides compatibility with other ACPI implementations. Two new 
+files added, evgpeinit.c and evgpeutil.c. ACPICA BZ 833. Lin Ming, Bob 
+Moore.
+
+Fixed a regression introduced in version 20100331 within the table manager 
+where initial table loading could fail. This was introduced in the fix for 
+AcpiReallocateRootTable. Also, renamed some of fields in the table manager 
+data structures to clarify their meaning and use.
+
+Fixed a possible allocation overrun during internal object copy in 
+AcpiUtCopySimpleObject. The original code did not correctly handle the case 
+where the object to be copied was a namespace node. Lin Ming. ACPICA BZ 847.
+
+Updated the allocation dump routine, AcpiUtDumpAllocation and fixed a 
+possible access beyond end-of-allocation. Also, now fully validate 
+descriptor 
+(size and type) before output. Lin Ming, Bob Moore. ACPICA BZ 847
+
+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:  87.9K Code, 18.6K Data, 106.5K Total
+    Debug Version:     163.5K Code, 51.3K Data, 214.8K Total
+  Current Release:
+    Non-Debug Version:  88.4K Code, 18.8K Data, 107.2K Total
+    Debug Version:     164.2K Code, 51.5K Data, 215.7K Total
+
+2) iASL Compiler/Disassembler and Tools:
+
+iASL: Implemented Min/Max/Len/Gran validation for address resource 
+descriptors. This change implements validation for the address fields that 
+are common to all address-type resource descriptors. These checks are 
+implemented: Checks for valid Min/Max, length within the Min/Max window, 
+valid granularity, Min/Max a multiple of granularity, and _MIF/_MAF as per 
+table 6-40 in the ACPI 4.0a specification. Also split the large 
+aslrestype1.c 
+and aslrestype2.c files into five new files. ACPICA BZ 840.
+
+iASL: Added support for the _Wxx predefined names. This support was missing 
+and these names were not recognized by the compiler as valid predefined 
+names. ACPICA BZ 851.
+
+iASL: Added an error for all predefined names that are defined to return no 
+value and thus must be implemented as Control Methods. These include all of 
+the _Lxx, _Exx, _Wxx, and _Qxx names, as well as some other miscellaneous 
+names such as _DIS, _INI, _IRC, _OFF, _ON, and _PSx. ACPICA BZ 850, 856.
+
+iASL: Implemented the -ts option to emit hex AML data in ASL format, as an 
+ASL Buffer. Allows ACPI tables to be easily included within ASL files, to be 
+dynamically loaded via the Load() operator. Also cleaned up output for the -
+ta and -tc options. ACPICA BZ 853.
+
+Tests: Added a new file with examples of extended iASL error checking. 
+Demonstrates the advanced error checking ability of the iASL compiler. 
+Available at tests/misc/badcode.asl.
+
+----------------------------------------
+31 March 2010. Summary of changes for version 20100331:
+
+1) ACPI CA Core Subsystem:
+
+Completed a major update for the GPE support in order to improve support for 
+shared GPEs and to simplify both host OS and ACPICA code. Added a reference 
+count mechanism to support shared GPEs that require multiple device drivers. 
+Several external interfaces have changed. One external interface has been 
+removed. One new external interface was added. Most of the GPE external 
+interfaces now use the GPE spinlock instead of the events mutex (and the 
+Flags parameter for many GPE interfaces has been removed.) See the updated 
+ACPICA Programmer Reference for details. Matthew Garrett, Bob Moore, Rafael 
+Wysocki. ACPICA BZ 831.
+
+Changed:
+    AcpiEnableGpe, AcpiDisableGpe, AcpiClearGpe, AcpiGetGpeStatus
+Removed:
+    AcpiSetGpeType
+New:
+    AcpiSetGpe
+
+Implemented write support for DataTable operation regions. These regions are 
+defined via the DataTableRegion() operator. Previously, only read support 
+was 
+implemented. The ACPI specification allows DataTableRegions to be 
+read/write, 
+however.
+
+Implemented a new subsystem option to force a copy of the DSDT to local 
+memory. Optionally copy the entire DSDT to local memory (instead of simply 
+mapping it.) There are some (albeit very rare) BIOSs that corrupt or replace 
+the original DSDT, creating the need for this option. Default is FALSE, do 
+not copy the DSDT.
+
+Implemented detection of a corrupted or replaced DSDT. This change adds 
+support to detect a DSDT that has been corrupted and/or replaced from 
+outside 
+the OS (by firmware). This is typically catastrophic for the system, but has 
+been seen on some machines. Once this problem has been detected, the DSDT 
+copy option can be enabled via system configuration. Lin Ming, Bob Moore.
+
+Fixed two problems with AcpiReallocateRootTable during the root table copy. 
+When copying the root table to the new allocation, the length used was 
+incorrect. The new size was used instead of the current table size, meaning 
+too much data was copied. Also, the count of available slots for ACPI tables 
+was not set correctly. Alexey Starikovskiy, Bob Moore.
+
+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:  87.5K Code, 18.4K Data, 105.9K Total
+    Debug Version:     163.4K Code, 51.1K Data, 214.5K Total
+  Current Release:
+    Non-Debug Version:  87.9K Code, 18.6K Data, 106.5K Total
+    Debug Version:     163.5K Code, 51.3K Data, 214.8K Total
+
+2) iASL Compiler/Disassembler and Tools:
+
+iASL: Implement limited typechecking for values returned from predefined 
+control methods. The type of any returned static (unnamed) object is now 
+validated. For example, Return(1). ACPICA BZ 786.
+
+iASL: Fixed a predefined name object verification regression. Fixes a 
+problem 
+introduced in version 20100304. An error is incorrectly generated if a 
+predefined name is declared as a static named object with a value defined 
+using the keywords "Zero", "One", or "Ones". Lin Ming.
+
+iASL: Added Windows 7 support for the -g option (get local ACPI tables) by 
+reducing the requested registry access rights. ACPICA BZ 842.
+
+Disassembler: fixed a possible fault when generating External() statements. 
+Introduced in commit ae7d6fd: Properly handle externals with parent-prefix 
+(carat). Fixes a string length allocation calculation. Lin Ming.
+
+----------------------------------------
+04 March 2010. Summary of changes for version 20100304:
+
+1) ACPI CA Core Subsystem:
+
+Fixed a possible problem with the AML Mutex handling function 
+AcpiExReleaseMutex where the function could fault under the very rare 
+condition when the interpreter has blocked, the interpreter lock is 
+released, 
+the interpreter is then reentered via the same thread, and attempts to 
+acquire an AML mutex that was previously acquired. FreeBSD report 140979. 
+Lin 
+Ming.
+
+Implemented additional configuration support for the AML "Debug Object". 
+Output from the debug object can now be enabled via a global variable, 
+AcpiGbl_EnableAmlDebugObject. This will assist with remote machine 
+debugging. 
+This debug output is now available in the release version of ACPICA instead 
+of just the debug version. Also, the entire debug output module can now be 
+configured out of the ACPICA build if desired. One new file added, 
+executer/exdebug.c. Lin Ming, Bob Moore.
+
+Added header support for the ACPI MCHI table (Management Controller Host 
+Interface Table). This table was added in ACPI 4.0, but the defining 
+document 
+has only recently become available.
+
+Standardized output of integer values for ACPICA warnings/errors. Always use 
+0x prefix for hex output, always use %u for unsigned integer decimal output. 
+Affects ACPI_INFO, ACPI_ERROR, ACPI_EXCEPTION, and ACPI_WARNING (about 400 
+invocations.) These invocations were converted from the original 
+ACPI_DEBUG_PRINT invocations and were not consistent. ACPICA BZ 835.
+
+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:  87.1K Code, 18.0K Data, 105.1K Total
+    Debug Version:     163.5K Code, 50.9K Data, 214.4K Total
+  Current Release:
+    Non-Debug Version:  87.5K Code, 18.4K Data, 105.9K Total
+    Debug Version:     163.4K Code, 51.1K Data, 214.5K Total
+
+2) iASL Compiler/Disassembler and Tools:
+
+iASL: Implemented typechecking support for static (non-control method) 
+predefined named objects that are declared with the Name() operator. For 
+example, the type of this object is now validated to be of type Integer: 
+Name(_BBN, 1). This change migrates the compiler to using the core 
+predefined 
+name table instead of maintaining a local version. Added a new file, 
+aslpredef.c. ACPICA BZ 832.
+
+Disassembler: Added support for the ACPI 4.0 MCHI table.
+
+----------------------------------------
+21 January 2010. Summary of changes for version 20100121:
+
+1) ACPI CA Core Subsystem:
+
+Added the 2010 copyright to all module headers and signons. This affects 
+virtually every file in the ACPICA core subsystem, the iASL compiler, the 
+tools/utilities, and the test suites.
+
+Implemented a change to the AcpiGetDevices interface to eliminate 
+unnecessary 
+invocations of the _STA method. In the case where a specific _HID is 
+requested, do not run _STA until a _HID match is found. This eliminates 
+potentially dozens of _STA calls during a search for a particular 
+device/HID, 
+which in turn can improve boot times. ACPICA BZ 828. Lin Ming.
+
+Implemented an additional repair for predefined method return values. 
+Attempt 
+to repair unexpected NULL elements within returned Package objects. Create 
+an 
+Integer of value zero, a NULL String, or a zero-length Buffer as 
+appropriate. 
+ACPICA BZ 818. Lin Ming, Bob Moore.
+
+Removed the obsolete ACPI_INTEGER data type. This type was introduced as the 
+code was migrated from ACPI 1.0 (with 32-bit AML integers) to ACPI 2.0 (with 
+64-bit AML integers). It is now obsolete and this change removes it from the 
+ACPICA code base, replaced by UINT64. The original typedef has been retained 
+for now for compatibility with existing device driver code. ACPICA BZ 824.
+
+Removed the unused UINT32_STRUCT type, and the obsolete Integer64 field in 
+the parse tree object.
+
+Added additional warning options for the gcc-4 generation. Updated the 
+source 
+accordingly. This includes some code restructuring to eliminate unreachable 
+code, elimination of some gotos, elimination of unused return values, some 
+additional casting, and removal of redundant declarations.
+
+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:  87.0K Code, 18.0K Data, 105.0K Total
+    Debug Version:     163.4K Code, 50.8K Data, 214.2K Total
+  Current Release:
+    Non-Debug Version:  87.1K Code, 18.0K Data, 105.1K Total
+    Debug Version:     163.5K Code, 50.9K Data, 214.4K Total
+
+2) iASL Compiler/Disassembler and Tools:
+
+No functional changes for this release.
+
+----------------------------------------
+14 December 2009. Summary of changes for version 20091214:
+
+1) ACPI CA Core Subsystem:
+
+Enhanced automatic data type conversions for predefined name repairs. This 
+change expands the automatic repairs/conversions for predefined name return 
+values to make Integers, Strings, and Buffers fully interchangeable. Also, a 
+Buffer can be converted to a Package of Integers if necessary. The 
+nsrepair.c 
+module was completely restructured. Lin Ming, Bob Moore.
+
+Implemented automatic removal of null package elements during predefined 
+name 
+repairs. This change will automatically remove embedded and trailing NULL 
+package elements from returned package objects that are defined to contain a 
+variable number of sub-packages. The driver is then presented with a package 
+with no null elements to deal with. ACPICA BZ 819.
+
+Implemented a repair for the predefined _FDE and _GTM names. The expected 
+return value for both names is a Buffer of 5 DWORDs. This repair fixes two 
+possible problems (both seen in the field), where a package of integers is 
+returned, or a buffer of BYTEs is returned. With assistance from Jung-uk 
+Kim.
+
+Implemented additional module-level code support. This change will properly 
+execute module-level code that is not at the root of the namespace (under a 
+Device object, etc.). Now executes the code within the current scope instead 
+of the root. ACPICA BZ 762. Lin Ming.
+
+Fixed possible mutex acquisition errors when running _REG methods. Fixes a 
+problem where mutex errors can occur when running a _REG method that is in 
+the same scope as a method-defined operation region or an operation region 
+under a module-level IF block. This type of code is rare, so the problem has 
+not been seen before. ACPICA BZ 826. Lin Ming, Bob Moore.
+
+Fixed a possible memory leak during module-level code execution. An object 
+could be leaked for each block of executed module-level code if the 
+interpreter slack mode is enabled This change deletes any implicitly 
+returned 
+object from the module-level code block. Lin Ming.
+
+Removed messages for successful predefined repair(s). The repair mechanism 
+was considered too wordy. Now, messages are only unconditionally emitted if 
+the return object cannot be repaired. Existing messages for successful 
+repairs were converted to ACPI_DEBUG_PRINT messages for now. ACPICA BZ 827.
+
+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:  86.6K Code, 18.2K Data, 104.8K Total
+    Debug Version:     162.7K Code, 50.8K Data, 213.5K Total
+  Current Release:
+    Non-Debug Version:  87.0K Code, 18.0K Data, 105.0K Total
+    Debug Version:     163.4K Code, 50.8K Data, 214.2K Total
+
+2) iASL Compiler/Disassembler and Tools:
+
+iASL: Fixed a regression introduced in 20091112 where intermediate .SRC 
+files 
+were no longer automatically removed at the termination of the compile.
+
+acpiexec: Implemented the -f option to specify default region fill value. 
+This option specifies the value used to initialize buffers that simulate 
+operation regions. Default value is zero. Useful for debugging problems that 
+depend on a specific initial value for a region or field.
+
+----------------------------------------
+12 November 2009. Summary of changes for version 20091112:
+
+1) ACPI CA Core Subsystem:
+
+Implemented a post-order callback to AcpiWalkNamespace. The existing 
+interface only has a pre-order callback. This change adds an additional 
+parameter for a post-order callback which will be more useful for bus scans. 
+ACPICA BZ 779. Lin Ming. Updated the ACPICA Programmer Reference.
+
+Modified the behavior of the operation region memory mapping cache for 
+SystemMemory. Ensure that the memory mappings created for operation regions 
+do not cross 4K page boundaries. Crossing a page boundary while mapping 
+regions can cause kernel warnings on some hosts if the pages have different 
+attributes. Such regions are probably BIOS bugs, and this is the workaround. 
+Linux BZ 14445. Lin Ming.
+
+Implemented an automatic repair for predefined methods that must return 
+sorted lists. This change will repair (by sorting) packages returned by 
+_ALR, 
+_PSS, and _TSS. Drivers can now assume that the packages are correctly 
+sorted 
+and do not contain NULL package elements. Adds one new file, 
+namespace/nsrepair2.c. ACPICA BZ 784. Lin Ming, Bob Moore.
+
+Fixed a possible fault during predefined name validation if a return Package 
+object contains NULL elements. Also adds a warning if a NULL element is 
+followed by any non-null elements. ACPICA BZ 813, 814. Future enhancement 
+may 
+include repair or removal of all such NULL elements where possible.
+
+Implemented additional module-level executable AML code support. This change 
+will execute module-level code that is not at the root of the namespace 
+(under a Device object, etc.) at table load time. Module-level executable 
+AML 
+code has been illegal since ACPI 2.0. ACPICA BZ 762. Lin Ming.
+
+Implemented a new internal function to create Integer objects. This function 
+simplifies miscellaneous object creation code. ACPICA BZ 823.
+
+Reduced the severity of predefined repair messages, Warning to Info. Since 
+the object was successfully repaired, a warning is too severe. Reduced to an 
+info message for now. These messages may eventually be changed to debug-
+only. 
+ACPICA BZ 812.
+
+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:  85.8K Code, 18.0K Data, 103.8K Total
+    Debug Version:     161.8K Code, 50.6K Data, 212.4K Total
+  Current Release:
+    Non-Debug Version:  86.6K Code, 18.2K Data, 104.8K Total
+    Debug Version:     162.7K Code, 50.8K Data, 213.5K Total
+
+2) iASL Compiler/Disassembler and Tools:
+
+iASL: Implemented Switch() with While(1) so that Break works correctly. This 
+change correctly implements the Switch operator with a surrounding While(1) 
+so that the Break operator works as expected. ACPICA BZ 461. Lin Ming.
+
+iASL: Added a message if a package initializer list is shorter than package 
+length. Adds a new remark for a Package() declaration if an initializer list 
+exists, but is shorter than the declared length of the package. Although 
+technically legal, this is probably a coding error and it is seen in the 
+field. ACPICA BZ 815. Lin Ming, Bob Moore.
+
+iASL: Fixed a problem where the compiler could fault after the maximum 
+number 
+of errors was reached (200).
+
+acpixtract: Fixed a possible warning for pointer cast if the compiler 
+warning 
+level set very high.
+
+----------------------------------------
+13 October 2009. Summary of changes for version 20091013:
+
+1) ACPI CA Core Subsystem:
+
+Fixed a problem where an Operation Region _REG method could be executed more 
+than once. If a custom address space handler is installed by the host before 
+the "initialize operation regions" phase of the ACPICA initialization, any 
+_REG methods for that address space could be executed twice. This change 
+fixes the problem. ACPICA BZ 427. Lin Ming.
+
+Fixed a possible memory leak for the Scope() ASL operator. When the exact 
+invocation of "Scope(\)" is executed (change scope to root), one internal 
+operand object was leaked. Lin Ming.
+
+Implemented a run-time repair for the _MAT predefined method. If the _MAT 
+return value is defined as a Field object in the AML, and the field
+size is less than or equal to the default width of an integer (32 or 
+64),_MAT 
+can incorrectly return an Integer instead of a Buffer. ACPICA now 
+automatically repairs this problem. ACPICA BZ 810.
+
+Implemented a run-time repair for the _BIF and _BIX predefined methods. The 
+"OEM Information" field is often incorrectly returned as an Integer with 
+value zero if the field is not supported by the platform. This is due to an 
+ambiguity in the ACPI specification. The field should always be a string. 
+ACPICA now automatically repairs this problem by returning a NULL string 
+within the returned Package. ACPICA BZ 807.
+
+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:  85.6K Code, 18.0K Data, 103.6K Total
+    Debug Version:     161.7K Code, 50.9K Data, 212.6K Total
+  Current Release:
+    Non-Debug Version:  85.8K Code, 18.0K Data, 103.8K Total
+    Debug Version:     161.8K Code, 50.6K Data, 212.4K Total
+
+2) iASL Compiler/Disassembler and Tools:
+
+Disassembler: Fixed a problem where references to external symbols that 
+contained one or more parent-prefixes (carats) were not handled correctly, 
+possibly causing a fault. ACPICA BZ 806. Lin Ming.
+
+Disassembler: Restructured the code so that all functions that handle 
+external symbols are in a single module. One new file is added, 
+common/dmextern.c.
+
+AML Debugger: Added a max count argument for the Batch command (which 
+executes multiple predefined methods within the namespace.)
+
+iASL: Updated the compiler documentation (User Reference.) Available at 
+http://www.acpica.org/documentation/. ACPICA BZ 750.
+
+AcpiXtract: Updated for Lint and other formatting changes. Close all open 
+files.
+
+----------------------------------------
+03 September 2009. Summary of changes for version 20090903:
+
+1) ACPI CA Core Subsystem:
+
+For Windows Vista compatibility, added the automatic execution of an _INI 
+method located at the namespace root (\_INI). This method is executed at 
+table load time. This support is in addition to the automatic execution of 
+\_SB._INI. Lin Ming.
+
+Fixed a possible memory leak in the interpreter for AML package objects if 
+the package initializer list is longer than the defined size of the package. 
+This apparently can only happen if the BIOS changes the package size on the 
+fly (seen in a _PSS object), as ASL compilers do not allow this. The 
+interpreter will truncate the package to the defined size (and issue an 
+error 
+message), but previously could leave the extra objects undeleted if they 
+were 
+pre-created during the argument processing (such is the case if the package 
+consists of a number of sub-packages as in the _PSS.) ACPICA BZ 805.
+
+Fixed a problem seen when a Buffer or String is stored to itself via ASL. 
+This has been reported in the field. Previously, ACPICA would zero out the 
+buffer/string. Now, the operation is treated as a noop. Provides Windows 
+compatibility. ACPICA BZ 803. Lin Ming.
+
+Removed an extraneous error message for ASL constructs of the form 
+Store(LocalX,LocalX) when LocalX is uninitialized. These curious statements 
+are seen in many BIOSs and are once again treated as NOOPs and no error is 
+emitted when they are encountered. ACPICA BZ 785.
+
+Fixed an extraneous warning message if a _DSM reserved method returns a 
+Package object. _DSM can return any type of object, so validation on the 
+return type cannot be performed. ACPICA BZ 802.
+
+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:  85.5K Code, 18.0K Data, 103.5K Total
+    Debug Version:     161.6K Code, 50.9K Data, 212.5K Total
+  Current Release:
+    Non-Debug Version:  85.6K Code, 18.0K Data, 103.6K Total
+    Debug Version:     161.7K Code, 50.9K Data, 212.6K Total
+
+2) iASL Compiler/Disassembler and Tools:
+
+iASL: Fixed a problem with the use of the Alias operator and Resource 
+Templates. The correct alias is now constructed and no error is emitted. 
+ACPICA BZ 738.
+
+iASL: Implemented the -I option to specify additional search directories for 
+include files. Allows multiple additional search paths for include files. 
+Directories are searched in the order specified on the command line (after 
+the local directory is searched.) ACPICA BZ 800.
+
+iASL: Fixed a problem where the full pathname for include files was not 
+emitted for warnings/errors. This caused the IDE support to not work 
+properly. ACPICA BZ 765.
+
+iASL: Implemented the -@ option to specify a Windows-style response file 
+containing additional command line options. ACPICA BZ 801.
+
+AcpiExec: Added support to load multiple AML files simultaneously (such as a 
+DSDT and multiple SSDTs). Also added support for wildcards within the AML 
+pathname. These features allow all machine tables to be easily loaded and 
+debugged together. ACPICA BZ 804.
+
+Disassembler: Added missing support for disassembly of HEST table Error Bank 
+subtables. 
+
+----------------------------------------
+30 July 2009. Summary of changes for version 20090730:
+
+The ACPI 4.0 implementation for ACPICA is complete with this release.
+
+1) ACPI CA Core Subsystem:
+
+ACPI 4.0: Added header file support for all new and changed ACPI tables. 
+Completely new tables are: IBFT, IVRS, MSCT, and WAET. Tables that are new 
+for ACPI 4.0, but have previously been supported in ACPICA are: CPEP, BERT, 
+EINJ, ERST, and HEST. Other newly supported tables are: UEFI and WDAT. There 
+have been some ACPI 4.0 changes to other existing tables. Split the large 
+actbl1.h header into the existing actbl2.h header. ACPICA BZ 774.
+
+ACPI 4.0: Implemented predefined name validation for all new names. There 
+are 
+31 new names in ACPI 4.0. The predefined validation module was split into 
+two 
+files. The new file is namespace/nsrepair.c. ACPICA BZ 770.
+
+Implemented support for so-called "module-level executable code". This is 
+executable AML code that exists outside of any control method and is 
+intended 
+to be executed at table load time. Although illegal since ACPI 2.0, this 
+type 
+of code still exists and is apparently still being created. Blocks of this 
+code are now detected and executed as intended. Currently, the code blocks 
+must exist under either an If, Else, or While construct; these are the 
+typical cases seen in the field. ACPICA BZ 762. Lin Ming.
+
+Implemented an automatic dynamic repair for predefined names that return 
+nested Package objects. This applies to predefined names that are defined to 
+return a variable-length Package of sub-packages. If the number of sub-
+packages is one, BIOS code is occasionally seen that creates a simple single 
+package with no sub-packages. This code attempts to fix the problem by 
+wrapping a new package object around the existing package. These methods can 
+be repaired: _ALR, _CSD, _HPX, _MLS, _PRT, _PSS, _TRT, and _TSS. ACPICA BZ 
+790.
+
+Fixed a regression introduced in 20090625 for the AcpiGetDevices interface. 
+The _HID/_CID matching was broken and no longer matched IDs correctly. 
+ACPICA 
+BZ 793.
+
+Fixed a problem with AcpiReset where the reset would silently fail if the 
+register was one of the protected I/O ports. AcpiReset now bypasses the port 
+validation mechanism. This may eventually be driven into the AcpiRead/Write 
+interfaces.
+
+Fixed a regression related to the recent update of the AcpiRead/Write 
+interfaces. A sleep/suspend could fail if the optional PM2 Control register 
+does not exist during an attempt to write the Bus Master Arbitration bit. 
+(However, some hosts already delete the code that writes this bit, and the 
+code may in fact be obsolete at this date.) ACPICA BZ 799.
+
+Fixed a problem where AcpiTerminate could fault if inadvertently called 
+twice 
+in succession. ACPICA BZ 795.
+
+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:  84.7K Code, 17.8K Data, 102.5K Total
+    Debug Version:     160.5K Code, 50.6K Data, 211.1K Total
+  Current Release:
+    Non-Debug Version:  85.5K Code, 18.0K Data, 103.5K Total
+    Debug Version:     161.6K Code, 50.9K Data, 212.5K Total
+
+2) iASL Compiler/Disassembler and Tools:
+
+ACPI 4.0: Implemented disassembler support for all new ACPI tables and 
+changes to existing tables. ACPICA BZ 775.
+
+----------------------------------------
+25 June 2009. Summary of changes for version 20090625:
+
+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:
+
+1) ACPI CA Core Subsystem:
+
 Disabled the preservation of the SCI enable bit in the PM1 control register. 
-The SCI enable bit (bit 0, SCI_EN) is defined by the ACPI specification to be 
+The SCI enable bit (bit 0, SCI_EN) is defined by the ACPI specification to 
+be 
 a "preserved" bit - "OSPM always preserves this bit position", section 
 4.7.3.2.1. However, some machines fail if this bit is in fact preserved 
 because the bit needs to be explicitly set by the OS as a workaround. No 
@@ -18,7 +1323,8 @@ incorrectly formed _PRT package could cause a fault. Added validation to
 ensure that each package element is actually a sub-package.
 
 Implemented a new interface to install or override a single control method, 
-AcpiInstallMethod. This interface is useful when debugging in order to repair 
+AcpiInstallMethod. This interface is useful when debugging in order to 
+repair 
 an existing method or to install a missing method without having to override 
 the entire ACPI table. See the ACPICA Programmer Reference for use and 
 examples. Lin Ming, Bob Moore.
@@ -32,7 +1338,8 @@ caller. Lin Ming.
 
 Fixed a problem with Mutex Sync Levels. Fixed a problem where if multiple 
 mutexes of the same sync level are acquired but then not released in strict 
-opposite order, the internally maintained Current Sync Level becomes confused 
+opposite order, the internally maintained Current Sync Level becomes 
+confused 
 and can cause subsequent execution errors. ACPICA BZ 471.
 
 Changed the allowable release order for ASL mutex objects. The ACPI 4.0 
@@ -55,7 +1362,8 @@ and reduced code for this frequently used function.
 
 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 
+debug version of the code includes the debug output trace mechanism and has 
+a 
 much larger code and data size.
 
   Previous Release:
@@ -74,18 +1382,18 @@ after an invalid sub-table ID.
 ----------------------------------------
 22 April 2009. Summary of changes for version 20090422:
 
-This release is available at www.acpica.org/downloads
-
 1) ACPI CA Core Subsystem:
 
 Fixed a compatibility issue with the recently released I/O port protection 
 mechanism. For windows compatibility, 1) On a port protection violation, 
 simply ignore the request and do not return an exception (allow the control 
 method to continue execution.) 2) If only part of the request overlaps a 
-protected port, read/write the individual ports that are not protected. Linux 
+protected port, read/write the individual ports that are not protected. 
+Linux 
 BZ 13036. Lin Ming
 
-Enhanced the execution of the ASL/AML BreakPoint operator so that it actually 
+Enhanced the execution of the ASL/AML BreakPoint operator so that it 
+actually 
 breaks into the AML debugger if the debugger is present. This matches the 
 ACPI-defined behavior.
 
@@ -98,12 +1406,14 @@ ACPICA BZ 766, 767.
 Fixed a number of possible warnings when compiling with gcc 4+ (depending on 
 warning options.) Examples include printf formats, aliasing, unused globals, 
 missing prototypes, missing switch default statements, use of non-ANSI 
-library functions, use of non-ANSI constructs. See generate/unix/Makefile for 
+library functions, use of non-ANSI constructs. See generate/unix/Makefile 
+for 
 a list of warning options used with gcc 3 and 4. ACPICA BZ 735.
 
 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 
+debug version of the code includes the debug output trace mechanism and has 
+a 
 much larger code and data size.
 
   Previous Release:
@@ -115,10 +1425,12 @@ much larger code and data size.
 
 2) iASL Compiler/Disassembler and Tools:
 
-iASL: Fixed a generation warning from Bison 2.3 and fixed several warnings on 
+iASL: Fixed a generation warning from Bison 2.3 and fixed several warnings 
+on 
 the 64-bit build.
 
-iASL: Fixed a problem where the Unix/Linux versions of the compiler could not 
+iASL: Fixed a problem where the Unix/Linux versions of the compiler could 
+not 
 correctly digest Windows/DOS formatted files (with CR/LF).
 
 iASL: Added a new option for "quiet mode" (-va) that produces only the 
@@ -146,8 +1458,10 @@ execute fully on Cygwin.
 1) ACPI CA Core Subsystem:
 
 Fixed a possible race condition between AcpiWalkNamespace and dynamic table 
-unloads. Added a reader/writer locking mechanism to allow multiple concurrent 
-namespace walks (readers), but block a dynamic table unload until it can gain 
+unloads. Added a reader/writer locking mechanism to allow multiple 
+concurrent 
+namespace walks (readers), but block a dynamic table unload until it can 
+gain 
 exclusive write access to the namespace. This fixes a problem where a table 
 unload could (possibly catastrophically) delete the portion of the namespace 
 that is currently being examined by a walk. Adds a new file, utlock.c, that 
@@ -181,7 +1495,8 @@ performed on a per-field basis instead of the entire region.
 Modified the handling of the PM1 Status Register ignored bit (bit 11.) 
 Ignored bits must be "preserved" according to the ACPI spec. Usually, this 
 means a read/modify/write when writing to the register. However, for status 
-registers, writing a one means clear the event. Writing a zero means preserve 
+registers, writing a one means clear the event. Writing a zero means 
+preserve 
 the event (do not clear.) This behavior is clarified in the ACPI 4.0 spec, 
 and the ACPICA code now simply always writes a zero to the ignored bit.
 
@@ -221,7 +1536,8 @@ AcpiGetRegisterUnlocked function is no longer needed and has been removed.
 This will improve performance for reads on these registers. ACPICA BZ 760.
 
 Fixed the parameter validation for AcpiRead/Write. Now return 
-AE_BAD_PARAMETER if the input register pointer is null, and AE_BAD_ADDRESS if 
+AE_BAD_PARAMETER if the input register pointer is null, and AE_BAD_ADDRESS 
+if 
 the register has an address of zero. Previously, these cases simply returned 
 AE_OK. For optional registers such as PM1B status/enable/control, the caller 
 should check for a valid register address before calling. ACPICA BZ 748.
@@ -234,27 +1550,33 @@ and condensing duplicate code to reduce code size.
 
 Added new functions to transparently handle the possibly split PM1 A/B 
 registers. AcpiHwReadMultiple and AcpiHwWriteMultiple. These two functions 
-now handle the split registers for PM1 Status, Enable, and Control. ACPICA BZ 
+now handle the split registers for PM1 Status, Enable, and Control. ACPICA 
+BZ 
 746.
 
 Added a function to handle the PM1 control registers, AcpiHwWritePm1Control. 
-This function writes both of the PM1 control registers (A/B). These registers 
+This function writes both of the PM1 control registers (A/B). These 
+registers 
 are different than the PM1 A/B status and enable registers in that different 
 values can be written to the A/B registers. Most notably, the SLP_TYP bits 
-can be different, as per the values returned from the _Sx predefined methods.
+can be different, as per the values returned from the _Sx predefined 
+methods.
 
 Removed an extra register write within AcpiHwClearAcpiStatus. This function 
 was writing an optional PM1B status register twice. The existing call to the 
 low-level AcpiHwRegisterWrite automatically handles a possibly split PM1 A/B 
 register. ACPICA BZ 751.
 
-Split out the PM1 Status registers from the FADT. Added new globals for these 
+Split out the PM1 Status registers from the FADT. Added new globals for 
+these 
 registers (A/B), similar to the way the PM1 Enable registers are handled. 
 Instead of overloading the FADT Event Register blocks. This makes the code 
 clearer and less prone to error.
 
-Fixed the warning message for when the platform contains too many ACPI tables 
-for the default size of the global root table data structure. The calculation 
+Fixed the warning message for when the platform contains too many ACPI 
+tables 
+for the default size of the global root table data structure. The 
+calculation 
 for the truncation value was incorrect.
 
 Removed the ACPI_GET_OBJECT_TYPE macro. Removed all instances of this 
@@ -269,13 +1591,15 @@ Conditionally compile the AcpiSetFirmwareWakingVector64 function. This
 function is only needed on 64-bit host operating systems and is thus not 
 included for 32-bit hosts.
 
-Debug output: print the input and result for invocations of the _OSI reserved 
+Debug output: print the input and result for invocations of the _OSI 
+reserved 
 control method via the ACPI_LV_INFO debug level. Also, reduced some of the 
 verbosity of this debug level. Len Brown.
 
 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 
+debug version of the code includes the debug output trace mechanism and has 
+a 
 much larger code and data size.
 
   Previous Release:
@@ -300,7 +1624,8 @@ virtually every file in the ACPICA core subsystem, the iASL compiler, and
 the tools/utilities.
 
 Implemented a change to allow the host to override any ACPI table, including 
-dynamically loaded tables. Previously, only the DSDT could be replaced by the 
+dynamically loaded tables. Previously, only the DSDT could be replaced by 
+the 
 host. With this change, the AcpiOsTableOverride interface is called for each 
 table found in the RSDT/XSDT during ACPICA initialization, and also whenever 
 a table is dynamically loaded via the AML Load operator.
@@ -313,7 +1638,8 @@ with the actual namespace entry which is itself padded with underscores.
 
 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 
+debug version of the code includes the debug output trace mechanism and has 
+a 
 much larger code and data size.
 
   Previous Release:
@@ -359,7 +1685,8 @@ file, components/hardware/hwxface.c
 Enhanced the FADT parsing and low-level ACPI register access: The ACPI 
 register lengths within the FADT are now used, and the low level ACPI 
 register access no longer hardcodes the ACPI register lengths. Given that 
-there may be some risk in actually trusting the FADT register lengths, a run-
+there may be some risk in actually trusting the FADT register lengths, a 
+run-
 time option was added to fall back to the default hardcoded lengths if the 
 FADT proves to contain incorrect values - UseDefaultRegisterWidths. This 
 option is set to true for now, and a warning is issued if a suspicious FADT 
@@ -372,12 +1699,14 @@ Packages. Lin Ming.
 Added semaphore support to the Linux/Unix application OS-services layer 
 (OSL). ACPICA BZ 448. Lin Ming.
 
-Added the ACPI_MUTEX_TYPE configuration option to select whether mutexes will 
+Added the ACPI_MUTEX_TYPE configuration option to select whether mutexes 
+will 
 be implemented in the OSL, or will binary semaphores be used instead.
 
 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 
+debug version of the code includes the debug output trace mechanism and has 
+a 
 much larger code and data size.
 
   Previous Release:
@@ -389,7 +1718,8 @@ much larger code and data size.
 
 2) iASL Compiler/Disassembler and Tools:
 
-iASL: Completed the '-e' option to include additional ACPI tables in order to 
+iASL: Completed the '-e' option to include additional ACPI tables in order 
+to 
 aid with disassembly and External statement generation. ACPICA BZ 742. Lin 
 Ming.
 
@@ -406,7 +1736,8 @@ Disassembler: Updates for several ACPI data tables (HEST, EINJ, and MCFG).
 
 1) ACPI CA Core Subsystem:
 
-Restructured the ACPICA header files into public/private. acpi.h now includes 
+Restructured the ACPICA header files into public/private. acpi.h now 
+includes 
 only the "public" acpica headers. All other acpica headers are "private" and 
 should not be included by acpica users. One new file, accommon.h is used to 
 include the commonly used private headers for acpica code generation. Future 
@@ -423,7 +1754,8 @@ with a valid null-terminated string. Linux BZ 11822.
 Updated the FACS waking vector interfaces. Split AcpiSetFirmwareWakingVector 
 into two: one for the 32-bit vector, another for the 64-bit vector. This is 
 required because the host OS must setup the wake much differently for each 
-vector (real vs. protected mode, etc.) and the interface itself should not be 
+vector (real vs. protected mode, etc.) and the interface itself should not 
+be 
 deciding which vector to use. Also, eliminated the GetFirmwareWakingVector 
 interface, as it served no purpose (only the firmware reads the vector, OS 
 only writes the vector.) ACPICA BZ 731.
@@ -464,13 +1796,15 @@ handler installation, and calling a control method. Available at
 source/tools/examples.
 
 Added a global pointer for FACS table to simplify internal FACS access. Use 
-the global pointer instead of using AcpiGetTableByIndex for each FACS access. 
+the global pointer instead of using AcpiGetTableByIndex for each FACS 
+access. 
 This simplifies the code for the Global Lock and the Firmware Waking 
 Vector(s).
 
 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 
+debug version of the code includes the debug output trace mechanism and has 
+a 
 much larger code and data size.
 
   Previous Release:
@@ -483,7 +1817,8 @@ much larger code and data size.
 2) iASL Compiler/Disassembler and Tools:
 
 iASL: Improved disassembly of external method calls. Added the -e option to 
-allow the inclusion of additional ACPI tables to help with the disassembly of 
+allow the inclusion of additional ACPI tables to help with the disassembly 
+of 
 method invocations and the generation of external declarations during the 
 disassembly. Certain external method invocations cannot be disassembled 
 properly without the actual declaration of the method. Use the -e option to 
@@ -503,12 +1838,14 @@ references from the Alias operator itself. ACPICA BZ 738.
 1) ACPI CA Core Subsystem:
 
 Designed and implemented a mechanism to validate predefined ACPI methods and 
-objects. This code validates the predefined ACPI objects (objects whose names 
+objects. This code validates the predefined ACPI objects (objects whose 
+names 
 start with underscore) that appear in the namespace, at the time they are 
 evaluated. The argument count and the type of the returned object are 
 validated against the ACPI specification. The purpose of this validation is 
 to detect problems with the BIOS-implemented predefined ACPI objects before 
-the results are returned to the ACPI-related drivers. Future enhancements may 
+the results are returned to the ACPI-related drivers. Future enhancements 
+may 
 include actual repair of incorrect return objects where possible. Two new 
 files are nspredef.c and acpredef.h.
 
@@ -530,7 +1867,8 @@ similar in that they use a stack of state objects in order to eliminate
 recursion. The stack must be fully unwound and deallocated if an error 
 occurs. Lin Ming. ACPICA BZ 383.
 
-Removed the unused ACPI_BITREG_WAKE_ENABLE definition and entry in the global 
+Removed the unused ACPI_BITREG_WAKE_ENABLE definition and entry in the 
+global 
 ACPI register table. This bit does not exist and is unused. Lin Ming, Bob 
 Moore ACPICA BZ 442.
 
@@ -541,7 +1879,8 @@ only incorrect, it could also be misleading.
 
 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 
+debug version of the code includes the debug output trace mechanism and has 
+a 
 much larger code and data size.
 
   Previous Release:
@@ -559,18 +1898,22 @@ much larger code and data size.
 Completed a major cleanup of the internal ACPI_OPERAND_OBJECT of type 
 Reference. Changes include the elimination of cheating on the Object field 
 for the DdbHandle subtype, addition of a reference class field to 
-differentiate the various reference types (instead of an AML opcode), and the 
+differentiate the various reference types (instead of an AML opcode), and 
+the 
 cleanup of debug output for this object. Lin Ming, Bob Moore. BZ 723
 
 Reduce an error to a warning for an incorrect method argument count. 
 Previously aborted with an error if too few arguments were passed to a 
-control method via the external ACPICA interface. Now issue a warning instead 
+control method via the external ACPICA interface. Now issue a warning 
+instead 
 and continue. Handles the case where the method inadvertently declares too 
 many arguments, but does not actually use the extra ones. Applies mainly to 
 the predefined methods. Lin Ming. Linux BZ 11032.
 
-Disallow the evaluation of named object types with no intrinsic value. Return 
-AE_TYPE for objects that have no value and therefore evaluation is undefined: 
+Disallow the evaluation of named object types with no intrinsic value. 
+Return 
+AE_TYPE for objects that have no value and therefore evaluation is 
+undefined: 
 Device, Event, Mutex, Region, Thermal, and Scope. Previously, evaluation of 
 these types were allowed, but an exception would be generated at some point 
 during the evaluation. Now, the error is generated up front.
@@ -578,8 +1921,10 @@ during the evaluation. Now, the error is generated up front.
 Fixed a possible memory leak in the AcpiNsGetExternalPathname function 
 (nsnames.c). Fixes a leak in the error exit path.
 
-Removed the obsolete debug levels ACPI_DB_WARN and ACPI_DB_ERROR. These debug 
-levels were made obsolete by the ACPI_WARNING, ACPI_ERROR, and ACPI_EXCEPTION 
+Removed the obsolete debug levels ACPI_DB_WARN and ACPI_DB_ERROR. These 
+debug 
+levels were made obsolete by the ACPI_WARNING, ACPI_ERROR, and 
+ACPI_EXCEPTION 
 interfaces. Also added ACPI_DB_EVENTS to correspond with the existing 
 ACPI_LV_EVENTS.
 
@@ -593,7 +1938,8 @@ compiler reference, and the changes.txt release logfile.
 
 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 
+debug version of the code includes the debug output trace mechanism and has 
+a 
 much larger code and data size.
 
   Previous Release:
@@ -623,18 +1969,17 @@ header.
 
 29 July 2008. Summary of changes for version 20080729:
 
-This release is available at http://acpica.org/downloads
-Direct git access via http://www.acpica.org/repos/acpica.git
-
 1) ACPI CA Core Subsystem:
 
 Fix a possible deadlock in the GPE dispatch. Remove call to 
-AcpiHwDisableAllGpes during wake in AcpiEvGpeDispatch. This call will attempt 
+AcpiHwDisableAllGpes during wake in AcpiEvGpeDispatch. This call will 
+attempt 
 to acquire the GPE lock but can deadlock since the GPE lock is already held 
 at dispatch time. This code was introduced in version 20060831 as a response 
 to Linux BZ 6881 and has since been removed from Linux.
 
-Add a function to dereference returned reference objects. Examines the return 
+Add a function to dereference returned reference objects. Examines the 
+return 
 object from a call to AcpiEvaluateObject. Any Index or RefOf references are 
 automatically dereferenced in an attempt to return something useful (these 
 reference types cannot be converted into an external ACPI_OBJECT.) Provides 
@@ -657,13 +2002,16 @@ The function could possibly fail when the caches are initialized. Yang Yi.
 Add a function to decode reference object types to strings. Created for 
 improved error messages. 
 
-Improve object conversion error messages. Better error messages during object 
-conversion from internal to the external ACPI_OBJECT. Used for external calls 
+Improve object conversion error messages. Better error messages during 
+object 
+conversion from internal to the external ACPI_OBJECT. Used for external 
+calls 
 to AcpiEvaluateObject.
 
 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 
+debug version of the code includes the debug output trace mechanism and has 
+a 
 much larger code and data size.
 
   Previous Release:
@@ -685,16 +2033,19 @@ appear in a disassembled ASL file if they were emitted by the original
 compiler. Instead of issuing an error or warning and forcing the user to 
 manually change these names, issue a remark instead.
 
-iASL: error if named object created in while loop. Emit an error if any named 
+iASL: error if named object created in while loop. Emit an error if any 
+named 
 object is created within a While loop. If allowed, this code will generate a 
-run-time error on the second iteration of the loop when an attempt is made to 
+run-time error on the second iteration of the loop when an attempt is made 
+to 
 create the same named object twice. ACPICA bugzilla 730.
 
 iASL: Support absolute pathnames for include files. Add support for absolute 
 pathnames within the Include operator. previously, only relative pathnames 
 were supported.
 
-iASL: Enforce minimum 1 interrupt in interrupt macro and Resource Descriptor. 
+iASL: Enforce minimum 1 interrupt in interrupt macro and Resource 
+Descriptor. 
 The ACPI spec requires one interrupt minimum. BZ 423
 
 iASL: Handle a missing ResourceSource arg, with a present SourceIndex. 
@@ -706,18 +2057,17 @@ iASL: Prevent error message if CondRefOf target does not exist. Fixes cases
 where an error message is emitted if the target does not exist. BZ 516
 
 iASL: Fix broken -g option (get Windows ACPI tables). Fixes the -g option 
-(get ACPI tables on Windows). This was apparently broken in version 20070919.
+(get ACPI tables on Windows). This was apparently broken in version 
+20070919.
 
-AcpiXtract: Handle EOF while extracting data. Correctly handle the case where 
+AcpiXtract: Handle EOF while extracting data. Correctly handle the case 
+where 
 the EOF happens immediately after the last table in the input file. Print 
 completion message. Previously, no message was displayed in this case.
 
 ----------------------------------------
 01 July 2008. Summary of changes for version 20080701:
 
-This release is available at http://acpica.org/downloads
-Direct git access via http://www.acpica.org/repos/acpica.git
-
 0) Git source tree / acpica.org
 
 Fixed a problem where a git-clone from http would not transfer the entire 
@@ -728,7 +2078,8 @@ source tree.
 Implemented a "careful" GPE disable in AcpiEvDisableGpe, only modify one 
 enable bit. Now performs a read-change-write of the enable register instead 
 of simply writing out the cached enable mask. This will prevent inadvertent 
-enabling of GPEs if a rogue GPE is received during initialization (before GPE 
+enabling of GPEs if a rogue GPE is received during initialization (before 
+GPE 
 handlers are installed.)
 
 Implemented a copy for dynamically loaded tables. Previously, dynamically 
@@ -738,10 +2089,12 @@ OpRegion case, added checksum verify. Use the table length from the table
 header, not the region length. For the Buffer case, use the table length 
 also. Dennis Noordsij, Bob Moore. BZ 10734
 
-Fixed a problem where the same ACPI table could not be dynamically loaded and 
+Fixed a problem where the same ACPI table could not be dynamically loaded 
+and 
 unloaded more than once. Without this change, a table cannot be loaded again 
 once it has been loaded/unloaded one time. The current mechanism does not 
-unregister a table upon an unload. During a load, if the same table is found, 
+unregister a table upon an unload. During a load, if the same table is 
+found, 
 this no longer returns an exception. BZ 722
 
 Fixed a problem where the wrong descriptor length was calculated for the 
@@ -751,7 +2104,8 @@ descriptor is 16 because of the round-up to 8 on the 64-bit build. Reported
 by Linn Crosetto. BZ 728
 
 Fixed a possible memory leak in the Unload operator. The DdbHandle returned 
-by Load() did not have its reference count decremented during unload, leading 
+by Load() did not have its reference count decremented during unload, 
+leading 
 to a memory leak. Lin Ming. BZ 727
 
 Fixed a possible memory leak when deleting thermal/processor objects. Any 
@@ -759,7 +2113,8 @@ associated notify handlers (and objects) were not being deleted. Fiodor
 Suietov. BZ 506
 
 Fixed the ordering of the ASCII names in the global mutex table to match the 
-actual mutex IDs. Used by AcpiUtGetMutexName, a function used for debug only. 
+actual mutex IDs. Used by AcpiUtGetMutexName, a function used for debug 
+only. 
 Vegard Nossum. BZ 726
 
 Enhanced the AcpiGetObjectInfo interface to return the number of required 
@@ -774,7 +2129,8 @@ Fixed an extraneous warning from exconfig.c on the 64-bit build.
 
 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 
+debug version of the code includes the debug output trace mechanism and has 
+a 
 much larger code and data size.
 
   Previous Release:
@@ -789,7 +2145,8 @@ much larger code and data size.
 iASL: Added two missing ACPI reserved names. Added _MTP and _ASZ, both 
 resource descriptor names.
 
-iASL: Detect invalid ASCII characters in input (windows version). Removed the 
+iASL: Detect invalid ASCII characters in input (windows version). Removed 
+the 
 "-CF" flag from the flex compile, enables correct detection of non-ASCII 
 characters in the input. BZ 441
 
@@ -797,9 +2154,12 @@ iASL: Eliminate warning when result of LoadTable is not used. Eliminate the
 "result of operation not used" warning when the DDB handle returned from 
 LoadTable is not used. The warning is not needed. BZ 590
 
-AcpiExec: Add support for dynamic table load/unload. Now calls _CFG method to 
-pass address of table to the AML. Added option to disable OpRegion simulation 
-to allow creation of an OpRegion with a real address that was passed to _CFG. 
+AcpiExec: Add support for dynamic table load/unload. Now calls _CFG method 
+to 
+pass address of table to the AML. Added option to disable OpRegion 
+simulation 
+to allow creation of an OpRegion with a real address that was passed to 
+_CFG. 
 All of this allows testing of the Load and Unload operators from AcpiExec.
 
 Debugger: update tables command for unloaded tables. Handle unloaded tables 
@@ -819,10 +2179,12 @@ Simplified the internal ACPI hardware interfaces to eliminate the locking
 flag parameter from Register Read/Write. Added a new external interface, 
 AcpiGetRegisterUnlocked.
 
-Fixed a problem where the invocation of a GPE control method could hang. This 
+Fixed a problem where the invocation of a GPE control method could hang. 
+This 
 was a regression introduced in 20080514. The new method argument count 
 validation mechanism can enter an infinite loop when a GPE method is 
-dispatched. Problem fixed by removing the obsolete code that passed GPE block 
+dispatched. Problem fixed by removing the obsolete code that passed GPE 
+block 
 information to the notify handler via the control method parameter pointer.
 
 Fixed a problem where the _SST execution status was incorrectly returned to 
@@ -831,7 +2193,8 @@ the caller of AcpiEnterSleepStatePrep. This was a regression introduced in
 returned. BZ 716
 
 Fixed a problem where a deleted object could be accessed from within the AML 
-parser. This was a regression introduced in version 20080123 as a fix for the 
+parser. This was a regression introduced in version 20080123 as a fix for 
+the 
 Unload operator. Lin Ming. BZ 10669
 
 Cleaned up the debug operand dump mechanism. Eliminated unnecessary operands 
@@ -852,7 +2215,8 @@ one mutex. Linn Crosetto
 
 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 
+debug version of the code includes the debug output trace mechanism and has 
+a 
 much larger code and data size.
 
   Previous Release:
@@ -893,20 +2257,25 @@ the GPE, even if ACPICA thinks that that it is already disabled. It is
 possible that the AML or some other code has enabled the GPE unbeknownst to 
 the ACPICA code.
 
-Fixed a problem with the Field operator where zero-length fields would return 
-an AE_AML_NO_OPERAND exception during table load. Fix enables zero-length ASL 
+Fixed a problem with the Field operator where zero-length fields would 
+return 
+an AE_AML_NO_OPERAND exception during table load. Fix enables zero-length 
+ASL 
 field declarations in Field(), BankField(), and IndexField(). BZ 10606.
 
 Implemented a fix for the Load operator, now load the table at the namespace 
 root. This reverts a change introduced in version 20071019. The table is now 
 loaded at the namespace root even though this goes against the ACPI 
 specification. This provides compatibility with other ACPI implementations. 
-The ACPI specification will be updated to reflect this in ACPI 4.0. Lin Ming.
+The ACPI specification will be updated to reflect this in ACPI 4.0. Lin 
+Ming.
 
-Fixed a problem where ACPICA would not Load() tables with unusual signatures. 
+Fixed a problem where ACPICA would not Load() tables with unusual 
+signatures. 
 Now ignore ACPI table signature for Load() operator. Only "SSDT" is 
 acceptable to the ACPI spec, but tables are seen with OEMx and null sigs. 
-Therefore, signature validation is worthless. Apparently MS ACPI accepts such 
+Therefore, signature validation is worthless. Apparently MS ACPI accepts 
+such 
 signatures, ACPICA must be compatible. BZ 10454.
 
 Fixed a possible negative array index in AcpiUtValidateException. Added NULL 
@@ -923,8 +2292,10 @@ many. This applies only to extern programmatic control method execution, not
 method-to-method calls within the AML. Lin Ming.
 
 Eliminated the ACPI_NATIVE_UINT type across all ACPICA code. This type is no 
-longer needed, especially with the removal of 16-bit support. It was replaced 
-mostly with UINT32, but also ACPI_SIZE where a type that changes 32/64 bit on 
+longer needed, especially with the removal of 16-bit support. It was 
+replaced 
+mostly with UINT32, but also ACPI_SIZE where a type that changes 32/64 bit 
+on 
 32/64-bit platforms is required.
 
 Added the C const qualifier for appropriate string constants -- mostly 
@@ -932,7 +2303,8 @@ MODULE_NAME and printf format strings. Jan Beulich.
 
 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 
+debug version of the code includes the debug output trace mechanism and has 
+a 
 much larger code and data size.
 
   Previous Release:
@@ -956,7 +2328,8 @@ means 32-bit and this is unusual. 2 or greater is 64-bit.
 Implemented an additional change to the GPE support in order to suppress 
 spurious or stray GPEs. The AcpiEvDisableGpe function will now permanently 
 disable incoming GPEs that are neither enabled nor disabled -- meaning that 
-the GPE is unknown to the system. This should prevent future interrupt floods 
+the GPE is unknown to the system. This should prevent future interrupt 
+floods 
 from that GPE. BZ 6217 (Zhang Rui)
 
 Fixed a problem where NULL package elements were not returned to the 
@@ -965,7 +2338,8 @@ instead of returning a NULL ACPI_OBJECT package element, potentially causing
 a buffer overflow and/or confusing the caller who expected a fixed number of 
 elements. BZ 10132 (Lin Ming, Bob Moore)
 
-Fixed a problem with the CreateField, CreateXXXField (Bit, Byte, Word, Dword, 
+Fixed a problem with the CreateField, CreateXXXField (Bit, Byte, Word, 
+Dword, 
 Qword), Field, BankField, and IndexField operators when invoked from inside 
 an executing control method. In this case, these operators created namespace 
 nodes that were incorrectly left marked as permanent nodes instead of 
@@ -977,20 +2351,23 @@ Fixed a problem where the CreateField and CreateXXXField operators would
 incorrectly allow duplicate names (the name of the field) with no exception 
 generated.
 
-Implemented several changes for Notify handling. Added support for new Notify 
+Implemented several changes for Notify handling. Added support for new 
+Notify 
 values (ACPI 2.0+) and improved the Notify debug output. Notify on 
 PowerResource objects is no longer allowed, as per the ACPI specification. 
 (Bob Moore, Zhang Rui)
 
 All Reference Objects returned via the AcpiEvaluateObject interface are now 
-marked as type "REFERENCE" instead of "ANY". The type ANY is now reserved for 
+marked as type "REFERENCE" instead of "ANY". The type ANY is now reserved 
+for 
 NULL objects - either NULL package elements or unresolved named references.
 
 Fixed a problem where an extraneous debug message was produced for package 
 objects (when debugging enabled). The message "Package List length larger 
 than NumElements count" is now produced in the correct case, and is now an 
 error message rather than a debug message. Added a debug message for the 
-opposite case, where NumElements is larger than the Package List (the package 
+opposite case, where NumElements is larger than the Package List (the 
+package 
 will be padded out with NULL elements as per the ACPI spec.)
 
 Implemented several improvements for the output of the ASL "Debug" object to 
@@ -1028,7 +2405,8 @@ uses Switch as Serialized, thus preventing multiple thread entries. BZ 469.
 Implemented another MS compatibility design change for GPE/Notify handling. 
 GPEs are now cleared/enabled asynchronously to allow all pending notifies to 
 complete first. It is expected that the OSL will queue the enable request 
-behind all pending notify requests (may require changes to the local host OSL 
+behind all pending notify requests (may require changes to the local host 
+OSL 
 in AcpiOsExecute). Alexey Starikovskiy.
 
 Fixed a problem where buffer and package objects passed as arguments to a 
@@ -1043,8 +2421,10 @@ returned from _CRS. This change affects the following resource descriptors:
 IRQ / IRQNoFlags and StartDependendentFn / StartDependentFnNoPri. (BZ 9487)
 
 Fixed a problem where a CopyObject to RegionField, BankField, and IndexField 
-objects did not perform an implicit conversion as it should. These types must 
-retain their initial type permanently as per the ACPI specification. However, 
+objects did not perform an implicit conversion as it should. These types 
+must 
+retain their initial type permanently as per the ACPI specification. 
+However, 
 a CopyObject to all other object types should not perform an implicit 
 conversion, as per the ACPI specification. (Lin Ming, Bob Moore) BZ 388
 
@@ -1052,7 +2432,8 @@ Fixed a problem with the AcpiGetDevices interface where the mechanism to
 match device CIDs did not examine the entire list of available CIDs, but 
 instead aborted on the first non-matching CID. Andrew Patterson.
 
-Fixed a regression introduced in version 20071114. The ACPI_HIDWORD macro was 
+Fixed a regression introduced in version 20071114. The ACPI_HIDWORD macro 
+was 
 inadvertently changed to return a 16-bit value instead of a 32-bit value, 
 truncating the upper dword of a 64-bit value. This macro is only used to 
 display debug output, so no incorrect calculations were made. Also, 
@@ -1092,19 +2473,24 @@ the tools/utilities.
 
 Fixed a problem with the SizeOf operator when used with Package and Buffer 
 objects. These objects have deferred execution for some arguments, and the 
-execution is now completed before the SizeOf is executed. This problem caused 
+execution is now completed before the SizeOf is executed. This problem 
+caused 
 unexpected AE_PACKAGE_LIMIT errors on some systems (Lin Ming, Bob Moore) BZ 
 9558
 
-Implemented an enhancement to the interpreter "slack mode". In the absence of 
+Implemented an enhancement to the interpreter "slack mode". In the absence 
+of 
 an explicit return or an implicitly returned object from the last executed 
-opcode, a control method will now implicitly return an integer of value 0 for 
+opcode, a control method will now implicitly return an integer of value 0 
+for 
 Microsoft compatibility. (Lin Ming) BZ 392
 
-Fixed a problem with the Load operator where an exception was not returned in 
+Fixed a problem with the Load operator where an exception was not returned 
+in 
 the case where the table is already loaded. (Lin Ming) BZ 463
 
-Implemented support for the use of DDBHandles as an Indexed Reference, as per 
+Implemented support for the use of DDBHandles as an Indexed Reference, as 
+per 
 the ACPI spec. (Lin Ming) BZ 486
 
 Implemented support for UserTerm (Method invocation) for the Unload operator 
@@ -1117,7 +2503,8 @@ maximum lengths allowed. (Lin Ming, Bob Moore) BZ 576
 Implemented support for UserTerm (Method invocation) for the Unload operator 
 as per the ACPI spec. (Lin Ming) BZ 580
 
-Implemented header file support for new ACPI tables - BERT, ERST, EINJ, HEST, 
+Implemented header file support for new ACPI tables - BERT, ERST, EINJ, 
+HEST, 
 IBFT, UEFI, WDAT. Disassembler support is forthcoming.
 
 Example Code and Data Size: These are the sizes for the OS-independent 
@@ -1135,7 +2522,8 @@ a much larger code and data size.
 2) iASL Compiler/Disassembler and Tools:
 
 Implemented support in the disassembler for checksum validation on incoming 
-binary DSDTs and SSDTs. If incorrect, a message is displayed within the table 
+binary DSDTs and SSDTs. If incorrect, a message is displayed within the 
+table 
 header dump at the start of the disassembly.
 
 Implemented additional debugging information in the namespace listing file 
@@ -1162,7 +2550,8 @@ Ming) BZ 583,587
 
 Implemented full support for deferred execution for the TermArg string 
 arguments for DataTableRegion. This enables forward references and full 
-operand resolution for the three string arguments. Similar to OperationRegion 
+operand resolution for the three string arguments. Similar to 
+OperationRegion 
 deferred argument execution.) Lin Ming. BZ 430
 
 Implemented full argument resolution support for the BankValue argument to 
@@ -1177,7 +2566,8 @@ Zhao.
 
 Fixed a problem where "unknown" GPEs could be allowed to fire repeatedly if 
 the underlying AML code changed the GPE enable registers. Now, any unknown 
-incoming GPE (no _Lxx/_Exx method and not the EC GPE) is immediately disabled 
+incoming GPE (no _Lxx/_Exx method and not the EC GPE) is immediately 
+disabled 
 instead of simply ignored. Rui Zhang.
 
 Fixed a problem with Index Fields where the Index register was incorrectly 
index 131b562..e69de29 100644 (file)
@@ -1,165 +0,0 @@
-/******************************************************************************
- *
- * Module Name: 16bit.h - 16-bit support
- *
- *****************************************************************************/
-
-/******************************************************************************
- *
- * 1. Copyright Notice
- *
- * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp.
- * All rights reserved.
- *
- * 2. License
- *
- * 2.1. This is your license from Intel Corp. under its intellectual property
- * rights.  You may have additional license terms from the party that provided
- * you this software, covering your right to use that party's intellectual
- * property rights.
- *
- * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
- * copy of the source code appearing in this file ("Covered Code") an
- * irrevocable, perpetual, worldwide license under Intel's copyrights in the
- * base code distributed originally by Intel ("Original Intel Code") to copy,
- * make derivatives, distribute, use and display any portion of the Covered
- * Code in any form, with the right to sublicense such rights; and
- *
- * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
- * license (with the right to sublicense), under only those claims of Intel
- * patents that are infringed by the Original Intel Code, to make, use, sell,
- * offer to sell, and import the Covered Code and derivative works thereof
- * solely to the minimum extent necessary to exercise the above copyright
- * license, and in no event shall the patent license extend to any additions
- * to or modifications of the Original Intel Code.  No other license or right
- * is granted directly or by implication, estoppel or otherwise;
- *
- * The above copyright and patent license is granted only if the following
- * conditions are met:
- *
- * 3. Conditions
- *
- * 3.1. Redistribution of Source with Rights to Further Distribute Source.
- * Redistribution of source code of any substantial portion of the Covered
- * Code or modification with rights to further distribute source must include
- * the above Copyright Notice, the above License, this list of Conditions,
- * and the following Disclaimer and Export Compliance provision.  In addition,
- * Licensee must cause all Covered Code to which Licensee contributes to
- * contain a file documenting the changes Licensee made to create that Covered
- * Code and the date of any change.  Licensee must include in that file the
- * documentation of any changes made by any predecessor Licensee.  Licensee
- * must include a prominent statement that the modification is derived,
- * directly or indirectly, from Original Intel Code.
- *
- * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
- * Redistribution of source code of any substantial portion of the Covered
- * Code or modification without rights to further distribute source must
- * include the following Disclaimer and Export Compliance provision in the
- * documentation and/or other materials provided with distribution.  In
- * addition, Licensee may not authorize further sublicense of source of any
- * portion of the Covered Code, and must include terms to the effect that the
- * license from Licensee to its licensee is limited to the intellectual
- * property embodied in the software Licensee provides to its licensee, and
- * not to intellectual property embodied in modifications its licensee may
- * make.
- *
- * 3.3. Redistribution of Executable. Redistribution in executable form of any
- * substantial portion of the Covered Code or modification must reproduce the
- * above Copyright Notice, and the following Disclaimer and Export Compliance
- * provision in the documentation and/or other materials provided with the
- * distribution.
- *
- * 3.4. Intel retains all right, title, and interest in and to the Original
- * Intel Code.
- *
- * 3.5. Neither the name Intel nor any other trademark owned or controlled by
- * Intel shall be used in advertising or otherwise to promote the sale, use or
- * other dealings in products derived from or relating to the Covered Code
- * without prior written authorization from Intel.
- *
- * 4. Disclaimer and Export Compliance
- *
- * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
- * HERE.  ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
- * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT,  ASSISTANCE,
- * INSTALLATION, TRAINING OR OTHER SERVICES.  INTEL WILL NOT PROVIDE ANY
- * UPDATES, ENHANCEMENTS OR EXTENSIONS.  INTEL SPECIFICALLY DISCLAIMS ANY
- * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
- * PARTICULAR PURPOSE.
- *
- * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
- * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
- * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
- * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
- * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
- * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  THESE LIMITATIONS
- * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
- * LIMITED REMEDY.
- *
- * 4.3. Licensee shall not export, either directly or indirectly, any of this
- * software or system incorporating such software without first obtaining any
- * required license or other approval from the U. S. Department of Commerce or
- * any other agency or department of the United States Government.  In the
- * event Licensee exports any such software from the United States or
- * re-exports any such software from a foreign destination, Licensee shall
- * ensure that the distribution and export/re-export of the software is in
- * compliance with all laws, regulations, orders, or other restrictions of the
- * U.S. Export Administration Regulations. Licensee agrees that neither it nor
- * any of its subsidiaries will export/re-export any technical data, process,
- * software, or service, directly or indirectly, to any country for which the
- * United States government or any agency thereof requires an export license,
- * other governmental approval, or letter of assurance, without first obtaining
- * such license, approval or letter.
- *
- *****************************************************************************/
-
-
-#define GET_SEGMENT(ptr)            ((UINT16)(_segment)(ptr))
-#define GET_OFFSET(ptr)             ((UINT16)(UINT32) (ptr))
-#define GET_PHYSICAL_ADDRESS(ptr)   (((((UINT32)GET_SEGMENT(ptr)) << 4)) + GET_OFFSET(ptr))
-#define PTR_OVL_BUILD_PTR(p,b,o)    {p.ovl.base=b;p.ovl.offset=o;}
-
-typedef union ptr_ovl
-{
-    void                *ptr;
-    UINT32              dword;
-    struct
-    {
-        UINT16              offset;
-        UINT16              base;
-    } ovl;
-
-} PTR_OVL;
-
-
-int ACPI_INTERNAL_VAR_XFACE
-FlatMove (
-    UINT32              Dest,
-    UINT32              Src,
-    UINT16              Size);
-
-int ACPI_INTERNAL_VAR_XFACE
-FlatMove32 (
-    UINT32              Dest,
-    UINT32              Src,
-    UINT16              Size);
-
-ACPI_NATIVE_INT
-AfWriteBuffer (
-    char                *Filename,
-    char                *Buffer,
-    UINT32              Length);
-
-char *
-AfGenerateFilename (char *TableId);
-
-
-ACPI_STATUS
-AfFindTable(
-    char                *TableName,
-    UINT8               **TablePtr,
-    UINT32              *TableLength);
-
-void
-AfDumpTables (void);
-
index 22b7f2e..e69de29 100644 (file)
@@ -1,962 +0,0 @@
-/******************************************************************************
- *
- * Module Name: a16find - 16-bit (real mode) routines to find ACPI
- *                        tables in memory
- *
- *****************************************************************************/
-
-/******************************************************************************
- *
- * 1. Copyright Notice
- *
- * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp.
- * All rights reserved.
- *
- * 2. License
- *
- * 2.1. This is your license from Intel Corp. under its intellectual property
- * rights.  You may have additional license terms from the party that provided
- * you this software, covering your right to use that party's intellectual
- * property rights.
- *
- * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
- * copy of the source code appearing in this file ("Covered Code") an
- * irrevocable, perpetual, worldwide license under Intel's copyrights in the
- * base code distributed originally by Intel ("Original Intel Code") to copy,
- * make derivatives, distribute, use and display any portion of the Covered
- * Code in any form, with the right to sublicense such rights; and
- *
- * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
- * license (with the right to sublicense), under only those claims of Intel
- * patents that are infringed by the Original Intel Code, to make, use, sell,
- * offer to sell, and import the Covered Code and derivative works thereof
- * solely to the minimum extent necessary to exercise the above copyright
- * license, and in no event shall the patent license extend to any additions
- * to or modifications of the Original Intel Code.  No other license or right
- * is granted directly or by implication, estoppel or otherwise;
- *
- * The above copyright and patent license is granted only if the following
- * conditions are met:
- *
- * 3. Conditions
- *
- * 3.1. Redistribution of Source with Rights to Further Distribute Source.
- * Redistribution of source code of any substantial portion of the Covered
- * Code or modification with rights to further distribute source must include
- * the above Copyright Notice, the above License, this list of Conditions,
- * and the following Disclaimer and Export Compliance provision.  In addition,
- * Licensee must cause all Covered Code to which Licensee contributes to
- * contain a file documenting the changes Licensee made to create that Covered
- * Code and the date of any change.  Licensee must include in that file the
- * documentation of any changes made by any predecessor Licensee.  Licensee
- * must include a prominent statement that the modification is derived,
- * directly or indirectly, from Original Intel Code.
- *
- * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
- * Redistribution of source code of any substantial portion of the Covered
- * Code or modification without rights to further distribute source must
- * include the following Disclaimer and Export Compliance provision in the
- * documentation and/or other materials provided with distribution.  In
- * addition, Licensee may not authorize further sublicense of source of any
- * portion of the Covered Code, and must include terms to the effect that the
- * license from Licensee to its licensee is limited to the intellectual
- * property embodied in the software Licensee provides to its licensee, and
- * not to intellectual property embodied in modifications its licensee may
- * make.
- *
- * 3.3. Redistribution of Executable. Redistribution in executable form of any
- * substantial portion of the Covered Code or modification must reproduce the
- * above Copyright Notice, and the following Disclaimer and Export Compliance
- * provision in the documentation and/or other materials provided with the
- * distribution.
- *
- * 3.4. Intel retains all right, title, and interest in and to the Original
- * Intel Code.
- *
- * 3.5. Neither the name Intel nor any other trademark owned or controlled by
- * Intel shall be used in advertising or otherwise to promote the sale, use or
- * other dealings in products derived from or relating to the Covered Code
- * without prior written authorization from Intel.
- *
- * 4. Disclaimer and Export Compliance
- *
- * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
- * HERE.  ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
- * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT,  ASSISTANCE,
- * INSTALLATION, TRAINING OR OTHER SERVICES.  INTEL WILL NOT PROVIDE ANY
- * UPDATES, ENHANCEMENTS OR EXTENSIONS.  INTEL SPECIFICALLY DISCLAIMS ANY
- * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
- * PARTICULAR PURPOSE.
- *
- * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
- * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
- * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
- * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
- * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
- * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  THESE LIMITATIONS
- * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
- * LIMITED REMEDY.
- *
- * 4.3. Licensee shall not export, either directly or indirectly, any of this
- * software or system incorporating such software without first obtaining any
- * required license or other approval from the U. S. Department of Commerce or
- * any other agency or department of the United States Government.  In the
- * event Licensee exports any such software from the United States or
- * re-exports any such software from a foreign destination, Licensee shall
- * ensure that the distribution and export/re-export of the software is in
- * compliance with all laws, regulations, orders, or other restrictions of the
- * U.S. Export Administration Regulations. Licensee agrees that neither it nor
- * any of its subsidiaries will export/re-export any technical data, process,
- * software, or service, directly or indirectly, to any country for which the
- * United States government or any agency thereof requires an export license,
- * other governmental approval, or letter of assurance, without first obtaining
- * such license, approval or letter.
- *
- *****************************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "acpi.h"
-#include "accommon.h"
-#include "amlcode.h"
-#include "acparser.h"
-#include "actables.h"
-
-#include "16bit.h"
-
-
-#define _COMPONENT          ACPI_TABLES
-        ACPI_MODULE_NAME    ("a16find")
-
-/*
- * This module finds ACPI tables located in memory.
- * It is only generated for the 16-bit (real-mode) version of the utility.
- */
-
-#define ACPI_TABLE_FILE_SUFFIX      ".dat"
-
-
-#if ACPI_MACHINE_WIDTH == 16
-
-UINT32 ACPI_INTERNAL_VAR_XFACE dIn32 (UINT16 port);
-void ACPI_INTERNAL_VAR_XFACE vOut32 (UINT16 port, UINT32 Val);
-#define ACPI_ENABLE_HPET 0x00020000
-
-char                        FilenameBuf[20];
-ACPI_TABLE_HEADER           AcpiTblHeader;
-UINT32                      TableSize;
-
-UINT32                      AcpiGbl_SystemFlags;
-UINT32                      AcpiGbl_RsdpOriginalLocation;
-
-#if 0
-/******************************************************************************
- *
- * FUNCTION:    AfWriteBuffer
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION: Open a file and write out a single buffer
- *
- ******************************************************************************/
-
-ACPI_NATIVE_INT
-AfWriteBuffer (
-    char                *Filename,
-    char                *Buffer,
-    UINT32              Length)
-{
-    FILE                *fp;
-    ACPI_NATIVE_INT     Actual;
-
-
-    fp = fopen (Filename, "wb");
-    if (!fp)
-    {
-        printf ("Couldn't open %s\n", Filename);
-        return -1;
-    }
-
-    Actual = fwrite (Buffer, (size_t) Length, 1, fp);
-    fclose (fp);
-    return Actual;
-}
-
-
-/******************************************************************************
- *
- * FUNCTION:    AfGenerateFilename
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION: Build an output filename from an ACPI table ID string
- *
- ******************************************************************************/
-
-char *
-AfGenerateFilename (char *TableId)
-{
-    UINT16                  i;
-
-
-    for (i = 0; i < 8 && TableId[i] != ' ' && TableId[i] != 0; i++)
-    {
-        FilenameBuf [i] = TableId[i];
-    }
-
-    FilenameBuf [i] = 0;
-    strcat (FilenameBuf, ACPI_TABLE_FILE_SUFFIX);
-    return FilenameBuf;
-}
-
-
-/******************************************************************************
- *
- * FUNCTION:    AfDumpTables
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION: Dump the loaded tables to a file (or files)
- *
- ******************************************************************************/
-
-void
-AfDumpTables (void)
-{
-    char                    *Filename;
-
-
-    if (!AcpiGbl_DSDT)
-    {
-        AcpiOsPrintf ("No DSDT!\n");
-        return;
-    }
-
-
-    Filename = AfGenerateFilename (AcpiGbl_DSDT->OemTableId);
-        AfWriteBuffer (Filename,
-            (char *) AcpiGbl_DSDT, AcpiGbl_DSDT->Length);
-
-    AcpiOsPrintf ("DSDT AML written to \"%s\"\n", Filename);
-}
-
-#endif
-
-void pascal
-cprint (
-    UINT32      value)
-{
-
-    AcpiOsPrintf ("Seq: 0x%8.8X\n", value);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION:   CopyExtendedToReal
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION: Copy memory above 1meg
- *
- ******************************************************************************/
-
-int
-CopyExtendedToReal (
-    void        *Destination,
-    UINT32      PhysicalSource,
-    UINT32      Size)
-{
-    int         RetVal;
-
-
-    RetVal = FlatMove32 (GET_PHYSICAL_ADDRESS (Destination),
-                            PhysicalSource, (UINT16) Size);
-
-    AcpiOsPrintf ("FlatMove return: 0x%hX From %X To %X Len %X\n",
-        (int) RetVal, PhysicalSource, GET_PHYSICAL_ADDRESS (Destination), Size);
-    return (RetVal);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION:    AfFindRsdp
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION: Scan memory to find the RSDP
- *
- ******************************************************************************/
-
-BOOLEAN
-AfFindRsdp (RSDP_DESCRIPTOR **RSDP)
-{
-    PTR_OVL             Rove;
-
-
-    PTR_OVL_BUILD_PTR (Rove, 0, 0);
-
-
-    /* Scan low memory */
-
-    do
-    {
-        if (strncmp (Rove.ptr, ACPI_SIG_RSDP, (size_t) 8) == 0)
-        {
-
-            /* TBD: Checksum check is invalid for X descriptor */
-
-/*            if (AcpiTbSumTable (Rove.ptr, sizeof(RSDP_DESCRIPTOR)) != 0)
-            {
- */
-            AcpiOsPrintf ("RSDP found at %p (Lo block)\n", Rove.ptr);
-            *RSDP = Rove.ptr;
-            return (TRUE);
-        }
-
-        Rove.ovl.base++;
-    }
-    while (Rove.ovl.base < 0x3F);
-
-    /* Scan high memory */
-
-    PTR_OVL_BUILD_PTR (Rove, 0xE000, 0);
-    do
-    {
-        if (strncmp (Rove.ptr, ACPI_SIG_RSDP, (size_t) 8) == 0)
-        {
-             AcpiOsPrintf ("RSDP found at %p (Hi block)\n", Rove.ptr);
-            *RSDP = Rove.ptr;
-            return (TRUE);
-        }
-
-        Rove.ovl.base++;
-    }
-    while (Rove.ovl.base < 0xFFFF);
-
-    return (FALSE);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION:    AfRecognizeTable
- *
- * PARAMETERS:  TablePtr            - Input buffer pointer, optional
- *              TableInfo           - Return value from AcpiTbGetTable
- *
- * RETURN:      Status
- *
- * DESCRIPTION: Check a table signature for a match against known table types
- *
- ******************************************************************************/
-
-ACPI_STATUS
-AfRecognizeTable (
-    char                    *TablePtr,
-    UINT32                  PhysAddr,
-    ACPI_TABLE_DESC         *TableInfo)
-{
-    ACPI_TABLE_HEADER       *TableHeader;
-    ACPI_STATUS             Status;
-    ACPI_TABLE_TYPE         TableType = 0;
-    void                    **TableGlobalPtr;
-    UINT32                  i;
-
-
-    ACPI_FUNCTION_TRACE (AfRecognizeTable);
-
-
-    /* Ensure that we have a valid table pointer */
-
-    TableHeader = (ACPI_TABLE_HEADER *) TableInfo->Pointer;
-    if (!TableHeader)
-    {
-        return_ACPI_STATUS (AE_BAD_PARAMETER);
-    }
-
-    /* Search for a signature match among the known table types */
-
-    Status = AE_SUPPORT;
-    for (i = 1; i < NUM_ACPI_TABLE_TYPES; i++)       /* Start at one -> Skip RSDP */
-    {
-        if (!ACPI_STRNCMP (TableHeader->Signature,
-                    AcpiGbl_TableData[i].Signature,
-                    AcpiGbl_TableData[i].SigLength))
-        {
-            AcpiOsPrintf ("Found table [%s] Length 0x%X\n",
-                AcpiGbl_TableData[i].Signature, (UINT32) TableHeader->Length);
-
-            TableType       = i;
-            TableGlobalPtr  = AcpiGbl_TableData[i].GlobalPtr;
-            Status          = AE_OK;
-            break;
-        }
-    }
-
-    /* Return the table type via the info struct */
-
-    TableInfo->Type     = (UINT8) TableType;
-    TableInfo->Length   = (ACPI_SIZE) TableHeader->Length;
-
-    /*
-     * An AE_SUPPORT means that the table was not recognized.
-     * We ignore this table;  just print a debug message
-     */
-    if (Status == AE_SUPPORT)
-    {
-        ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-            "Unsupported table %s (Type %d) was found and discarded\n",
-            AcpiGbl_TableData[TableType].Name, (UINT32) TableType));
-
-        return_ACPI_STATUS (Status);
-    }
-
-   Status = AcpiTbValidateTableHeader (TableHeader);
-    if (ACPI_FAILURE (Status))
-    {
-        /* Table failed verification, map all errors to BAD_DATA */
-
-        ACPI_ERROR ((AE_INFO,
-            "Invalid table header found in table named %s (Type %d)",
-            AcpiGbl_TableData[TableType].Name, (UINT32) TableType));
-
-        return_ACPI_STATUS (AE_BAD_DATA);
-    }
-
-    /* Now get the rest of the table */
-
-    *TableGlobalPtr = ACPI_ALLOCATE (AcpiTblHeader.Length);
-    if (!*TableGlobalPtr)
-    {
-        AcpiOsPrintf (
-            "Could not allocate buffer for Acpi table of length 0x%X\n",
-            (UINT32) ((FACS_DESCRIPTOR *) &AcpiTblHeader)->Length);
-        return_ACPI_STATUS (AE_NO_MEMORY);
-    }
-
-    TableInfo->Pointer = *TableGlobalPtr;
-
-    CopyExtendedToReal (*TableGlobalPtr, PhysAddr, AcpiTblHeader.Length);
-
-    ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "%s=%p, (TableGlobalPtr=%p)\n",
-        AcpiGbl_TableData[TableType].Signature,
-        *TableGlobalPtr, TableGlobalPtr));
-
-    if (AcpiGbl_DbOpt_verbose)
-    {
-        AcpiUtDumpBuffer (*TableGlobalPtr, 48, 0, 0);
-    }
-
-    /*
-     * Validate checksum for _most_ tables,
-     * even the ones whose signature we don't recognize
-     */
-    if (TableType != ACPI_TABLE_FACS)
-    {
-        /* But don't abort if the checksum is wrong */
-        /* TBD: make this a configuration option? */
-
-        AcpiTbVerifyTableChecksum (*TableGlobalPtr);
-    }
-
-    return_ACPI_STATUS (Status);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION:    AfGetAllTables
- *
- * PARAMETERS:  Root            - Root of the parse tree
- *
- * RETURN:      None
- *
- * DESCRIPTION:
- *
- *****************************************************************************/
-
-ACPI_STATUS
-AfGetAllTables (
-    UINT32                  NumberOfTables,
-    char                    *TablePtr)
-{
-    ACPI_STATUS             Status = AE_OK;
-    UINT32                  Index;
-    ACPI_TABLE_DESC         TableInfo;
-
-
-    ACPI_FUNCTION_TRACE (AfGetAllTables);
-
-
-    if (AcpiGbl_DbOpt_verbose)
-    {
-        AcpiOsPrintf ("Number of tables: %d\n", (UINT32) NumberOfTables);
-    }
-
-    /*
-     * Loop through all table pointers found in RSDT.
-     * This will NOT include the FACS and DSDT - we must get
-     * them after the loop
-     */
-    for (Index = 0; Index < NumberOfTables; Index++)
-    {
-        /* Get the table via the RSDT */
-
-        CopyExtendedToReal (&AcpiTblHeader, ACPI_GET_ADDRESS (AcpiGbl_XSDT->TableOffsetEntry[Index]),
-                            sizeof (ACPI_TABLE_HEADER));
-
-        TableInfo.Pointer       = &AcpiTblHeader;
-        TableInfo.Length        = (ACPI_SIZE) AcpiTblHeader.Length;
-        TableInfo.Allocation    = ACPI_MEM_ALLOCATED;
-
-        ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Table pointer: %X\n",
-            (UINT32) ACPI_GET_ADDRESS (AcpiGbl_XSDT->TableOffsetEntry[Index])));
-
-        Status = AfRecognizeTable (NULL, ACPI_GET_ADDRESS (AcpiGbl_XSDT->TableOffsetEntry[Index]), &TableInfo);
-        if (ACPI_SUCCESS (Status))
-        {
-            AcpiTbInitTableDescriptor (TableInfo.Type, &TableInfo);
-        }
-
-       /* Ignore errors, just move on to next table */
-    }
-
-    if (!AcpiGbl_FADT)
-    {
-        AcpiOsPrintf ("FADT was not found, cannot obtain FACS and DSDT!\n");
-        return (AE_NO_ACPI_TABLES);
-    }
-
-    Status = AcpiTbConvertTableFadt ();
-    if (ACPI_FAILURE (Status))
-    {
-        return_ACPI_STATUS (Status);
-    }
-
-    /*
-     * Get the FACS
-     */
-    CopyExtendedToReal (&AcpiTblHeader, ACPI_GET_ADDRESS (AcpiGbl_FADT->XFirmwareCtrl),
-                        sizeof (ACPI_TABLE_HEADER));
-    AcpiGbl_FACS = ACPI_ALLOCATE (AcpiTblHeader.Length);
-    if (!AcpiGbl_FACS)
-    {
-        AcpiOsPrintf ("Could not allocate buffer for FADT length 0x%X\n",
-                        (UINT32) AcpiTblHeader.Length);
-        return_ACPI_STATUS (AE_NO_MEMORY);
-    }
-
-    CopyExtendedToReal (AcpiGbl_FACS, ACPI_GET_ADDRESS (AcpiGbl_FADT->XFirmwareCtrl), AcpiTblHeader.Length);
-
-    ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "FACS at %p (Phys %8.8X) length %X FADT at%p\n",
-                    AcpiGbl_FACS, (UINT32) ACPI_GET_ADDRESS (AcpiGbl_FADT->XFirmwareCtrl),
-                    (UINT32) AcpiTblHeader.Length, AcpiGbl_FADT));
-    if (AcpiGbl_DbOpt_verbose)
-    {
-        AcpiUtDumpBuffer ((char *) AcpiGbl_FADT, sizeof (ACPI_TABLE_HEADER), 0, 0);
-    }
-
-    TableInfo.Type          = ACPI_TABLE_FADT;
-    TableInfo.Pointer       = (void *) AcpiGbl_FADT;
-    TableInfo.Length        = (ACPI_SIZE) AcpiTblHeader.Length;
-    TableInfo.Allocation    = ACPI_MEM_ALLOCATED;
-
-    /* There is no checksum for the FACS, nothing to verify */
-
-    AcpiTbInitTableDescriptor (TableInfo.Type, &TableInfo);
-
-    AcpiTbBuildCommonFacs (&TableInfo);
-
-    /*
-     * Get the DSDT
-     */
-    CopyExtendedToReal (&AcpiTblHeader, ACPI_GET_ADDRESS (AcpiGbl_FADT->XDsdt), sizeof (ACPI_TABLE_HEADER));
-    AcpiGbl_DSDT = ACPI_ALLOCATE (AcpiTblHeader.Length);
-    if (!AcpiGbl_DSDT)
-    {
-        AcpiOsPrintf ("Could not allocate buffer for DSDT length 0x%X\n", (UINT32) AcpiTblHeader.Length);
-        return_ACPI_STATUS (AE_NO_MEMORY);
-    }
-
-    CopyExtendedToReal (AcpiGbl_DSDT, ACPI_GET_ADDRESS (AcpiGbl_FADT->XDsdt), AcpiTblHeader.Length);
-
-    AcpiOsPrintf ("DSDT at %p (Phys %8.8X) length %X FADT at %p\n",
-                    AcpiGbl_DSDT, (UINT32) ACPI_GET_ADDRESS (AcpiGbl_FADT->XDsdt),
-                    (UINT32) AcpiTblHeader.Length, AcpiGbl_FADT);
-    if (AcpiGbl_DbOpt_verbose)
-    {
-        AcpiUtDumpBuffer ((char *) AcpiGbl_DSDT, sizeof (ACPI_TABLE_HEADER), 0, 0);
-    }
-
-    TableInfo.Type          = ACPI_TABLE_DSDT;
-    TableInfo.Pointer       = (void *) AcpiGbl_DSDT;
-    TableInfo.Length        = (ACPI_SIZE) AcpiTblHeader.Length;
-    TableInfo.Allocation    = ACPI_MEM_ALLOCATED;
-
-    AcpiTbInitTableDescriptor (TableInfo.Type, &TableInfo);
-    AcpiTbVerifyTableChecksum ((ACPI_TABLE_HEADER *) AcpiGbl_DSDT);
-
-    return_ACPI_STATUS (AE_OK);
-}
-
-
-ACPI_STATUS
-AfGetRsdt (void)
-{
-    BOOLEAN                 Found;
-    UINT32                  PhysicalAddress;
-    UINT32                  SignatureLength;
-    char                    *TableSignature;
-    ACPI_STATUS             Status;
-    ACPI_TABLE_DESC         TableInfo;
-
-
-    ACPI_FUNCTION_TRACE (AfGetRsdt);
-
-    if (AcpiGbl_XSDT)
-    {
-        return (AE_OK);
-    }
-
-    Found = AfFindRsdp (&AcpiGbl_RSDP);
-    if (!Found)
-    {
-        AcpiOsPrintf ("Could not find RSDP in the low megabyte\n");
-        return (AE_NO_ACPI_TABLES);
-    }
-
-    /* Use XSDT if it is present */
-
-    if ((AcpiGbl_RSDP->Revision >= 2) &&
-        ACPI_GET_ADDRESS (AcpiGbl_RSDP->XsdtPhysicalAddress))
-    {
-        PhysicalAddress = ACPI_GET_ADDRESS (AcpiGbl_RSDP->XsdtPhysicalAddress);
-        TableSignature = ACPI_SIG_XSDT;
-        SignatureLength = sizeof (ACPI_SIG_XSDT) -1;
-        AcpiGbl_RootTableType = ACPI_TABLE_TYPE_XSDT;
-
-        ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Found XSDT\n"));
-    }
-    else
-    {
-        /* No XSDT, use the RSDT */
-
-        PhysicalAddress = AcpiGbl_RSDP->RsdtPhysicalAddress;
-        TableSignature = ACPI_SIG_RSDT;
-        SignatureLength = sizeof (ACPI_SIG_RSDT) -1;
-        AcpiGbl_RootTableType = ACPI_TABLE_TYPE_RSDT;
-
-        ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Found RSDT\n"));
-    }
-
-    if (AcpiGbl_DbOpt_verbose)
-    {
-        AcpiUtDumpBuffer ((char *) AcpiGbl_RSDP, sizeof (RSDP_DESCRIPTOR), 0, ACPI_UINT32_MAX);
-    }
-
-    /* Get the RSDT/XSDT header to determine the table length */
-
-    CopyExtendedToReal (&AcpiTblHeader, PhysicalAddress, sizeof (ACPI_TABLE_HEADER));
-
-    ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "RSDT/XSDT at %8.8X\n", (UINT32) PhysicalAddress));
-    if (AcpiGbl_DbOpt_verbose)
-    {
-        AcpiUtDumpBuffer ((char *) &AcpiTblHeader, sizeof (ACPI_TABLE_HEADER), 0, ACPI_UINT32_MAX);
-    }
-
-    /* Validate the table header */
-
-    Status = AcpiTbValidateTableHeader (&AcpiTblHeader);
-    if (ACPI_FAILURE (Status))
-    {
-        /* Table failed verification, map all errors to BAD_DATA */
-
-        ACPI_ERROR ((AE_INFO, "Invalid RSDT table header"));
-        return (AE_BAD_DATA);
-    }
-
-    /* Allocate a buffer for the entire table */
-
-    AcpiGbl_XSDT = (void *) malloc ((size_t) AcpiTblHeader.Length);
-    if (!AcpiGbl_XSDT)
-    {
-        AcpiOsPrintf ("Could not allocate buffer for RSDT length 0x%X\n",
-            (UINT32) AcpiTblHeader.Length);
-        return AE_NO_MEMORY;
-    }
-
-    /* Get the entire RSDT/XSDT */
-
-    CopyExtendedToReal (AcpiGbl_XSDT, PhysicalAddress, AcpiTblHeader.Length);
-    AcpiOsPrintf ("%s at %p (Phys %8.8X)\n",
-        TableSignature, AcpiGbl_XSDT, (UINT32) PhysicalAddress);
-
-    if (AcpiGbl_DbOpt_verbose)
-    {
-        AcpiUtDumpBuffer ((char *) &AcpiTblHeader, sizeof (ACPI_TABLE_HEADER), 0, 0);
-    }
-
-    /* Convert to common format XSDT */
-
-    TableInfo.Pointer       = (ACPI_TABLE_HEADER *) AcpiGbl_XSDT;
-    TableInfo.Length        = (ACPI_SIZE) AcpiTblHeader.Length;
-    TableInfo.Allocation    = ACPI_MEM_ALLOCATED;
-
-    AcpiGbl_RsdtTableCount = AcpiTbGetTableCount (AcpiGbl_RSDP, TableInfo.Pointer);
-
-    Status = AcpiTbConvertToXsdt (&TableInfo);
-    if (ACPI_FAILURE (Status))
-    {
-        goto ErrorExit;
-    }
-
-    AcpiGbl_XSDT = (XSDT_DESCRIPTOR *) TableInfo.Pointer;
-
-ErrorExit:
-    return (Status);
-}
-
-
-void
-AfDumpRsdt (void)
-{
-    UINT32                  i;
-    UINT32                  NumTables;
-    UINT32                  PhysicalAddress;
-    ACPI_TABLE_HEADER       **Table;
-    ACPI_TABLE_HEADER       ThisTable;
-
-
-    NumTables = (AcpiGbl_XSDT->Length - sizeof (ACPI_TABLE_HEADER)) / 8;
-
-    AcpiOsPrintf ("%d Tables defined in RSDT/XSDT:\n", NumTables);
-
-    for (i = 0; i < NumTables; i++)
-    {
-        PhysicalAddress = (UINT32) AcpiGbl_XSDT->TableOffsetEntry[i].Lo;
-        CopyExtendedToReal (&ThisTable, PhysicalAddress, sizeof (ACPI_TABLE_HEADER));
-        AcpiOsPrintf ("[%4.4s] ", ThisTable.Signature);
-        ((char *) Table) += 8;
-    }
-
-    AcpiOsPrintf ("\n");
-}
-
-ACPI_STATUS
-AfGetTable (
-    ACPI_TABLE_HEADER       *TableHeader,
-    UINT32                  PhysicalAddress,
-    UINT8                   **TablePtr)
-{
-
-    /* Allocate a buffer for the entire table */
-
-    *TablePtr = (void *) malloc ((size_t) TableHeader->Length);
-    if (!*TablePtr)
-    {
-        AcpiOsPrintf ("Could not allocate buffer for table length 0x%X\n",
-            (UINT32) TableHeader->Length);
-        return AE_NO_MEMORY;
-    }
-
-    /* Get the entire table */
-
-    CopyExtendedToReal (*TablePtr, PhysicalAddress, TableHeader->Length);
-    AcpiOsPrintf ("%4.4s at %p (Phys %8.8X)\n",
-        TableHeader->Signature, *TablePtr, (UINT32) PhysicalAddress);
-
-    if (AcpiGbl_DbOpt_verbose)
-    {
-        AcpiUtDumpBuffer ((char *) TableHeader, sizeof (ACPI_TABLE_HEADER), 0, 0);
-    }
-
-    return (AE_OK);
-}
-
-
-ACPI_STATUS
-AfGetTableFromXsdt (
-    char                    *TableName,
-    UINT8                   **TablePtr)
-{
-    UINT32                  i;
-    UINT32                  NumTables;
-    UINT32                  PhysicalAddress;
-    ACPI_TABLE_HEADER       ThisTable;
-
-
-    NumTables = (AcpiGbl_XSDT->Length - sizeof (ACPI_TABLE_HEADER)) / 8;
-
-    for (i = 0; i < NumTables; i++)
-    {
-        PhysicalAddress = (UINT32) AcpiGbl_XSDT->TableOffsetEntry[i].Lo;
-        CopyExtendedToReal (&ThisTable, PhysicalAddress, sizeof (ACPI_TABLE_HEADER));
-
-        if (ACPI_COMPARE_NAME (TableName, ThisTable.Signature))
-        {
-            AfGetTable (&ThisTable, PhysicalAddress, TablePtr);
-            return (AE_OK);
-        }
-    }
-
-    return (AE_NOT_FOUND);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION:    AfFindTable
- *
- * PARAMETERS:
- *
- * RETURN:      Status
- *
- * DESCRIPTION: Load the DSDT from the file pointer
- *
- *****************************************************************************/
-
-ACPI_STATUS
-AfFindTable (
-    char                    *TableName,
-    UINT8                   **TablePtr,
-    UINT32                  *TableLength)
-{
-    ACPI_STATUS             Status;
-
-
-    ACPI_FUNCTION_TRACE (AfFindTable);
-
-
-    if (!AcpiGbl_DSDT)
-    {
-        Status = AfGetRsdt ();
-        if (ACPI_FAILURE (Status))
-        {
-            return (Status);
-        }
-
-        AfDumpRsdt ();
-
-        /* Get the rest of the required tables (DSDT, FADT) */
-
-        Status = AfGetAllTables (AcpiGbl_RsdtTableCount, NULL);
-        if (ACPI_FAILURE (Status))
-        {
-            goto ErrorExit;
-        }
-
-        ACPI_DEBUG_PRINT ((ACPI_DB_INIT, "ACPI Tables successfully acquired\n"));
-    }
-
-
-    if (ACPI_COMPARE_NAME (TableName, ACPI_SIG_DSDT))
-    {
-        *TablePtr = (UINT8 *) AcpiGbl_DSDT;
-        *TableLength = AcpiGbl_DSDT->Length;
-    }
-    else if (ACPI_COMPARE_NAME (TableName, ACPI_SIG_FADT))
-    {
-        *TablePtr = (UINT8 *) AcpiGbl_FADT;
-        *TableLength = AcpiGbl_FADT->Length;
-    }
-    else if (ACPI_COMPARE_NAME (TableName, ACPI_SIG_FACS))
-    {
-        *TablePtr = (UINT8 *) AcpiGbl_FACS;
-        *TableLength = AcpiGbl_FACS->Length;
-    }
-    else if (ACPI_COMPARE_NAME (TableName, ACPI_SIG_RSDT))
-    {
-        *TablePtr = (UINT8 *) AcpiGbl_XSDT;
-        *TableLength = AcpiGbl_XSDT->Length;
-    }
-    else if (ACPI_COMPARE_NAME (TableName, ACPI_SIG_SSDT))
-    {
-        AcpiOsPrintf ("Unsupported table signature: [%4.4s]\n", TableName);
-        *TablePtr = NULL;
-        return AE_SUPPORT;
-    }
-    else
-    {
-        Status = AfGetTableFromXsdt (TableName, TablePtr);
-        if (ACPI_FAILURE (Status))
-        {
-            goto ErrorExit;
-        }
-
-        *TableLength = (*((ACPI_TABLE_HEADER **)TablePtr))->Length;
-    }
-
-    return AE_OK;
-
-ErrorExit:
-
-    ACPI_EXCEPTION ((AE_INFO, Status, "During ACPI Table initialization");
-    return (Status);
-}
-
-#ifdef _HPET
-UINT8           Hbuf[1024];
-
-void
-AfGetHpet (void)
-{
-    HPET_DESCRIPTION_TABLE  *NewTable;
-    ACPI_TABLE_HEADER       TableHeader;
-    ACPI_STATUS             Status;
-    UINT16                  i;
-    UINT32                  Value;
-    UINT32                  Value2;
-
-
-    /* Get HPET  TEMP! */
-
-    ACPI_STRNCPY (TableHeader.Signature, "HPET", 4);
-    Status = AcpiOsTableOverride (&TableHeader, (ACPI_TABLE_HEADER **) &NewTable);
-    if (ACPI_FAILURE (Status))
-    {
-        return;
-    }
-
-    AcpiDbgLevel |= ACPI_LV_TABLES;
-    AcpiOsPrintf ("HPET table :\n");
-    AcpiUtDumpBuffer ((char *) NewTable, NewTable->Header.Length, DB_BYTE_DISPLAY, ACPI_UINT32_MAX);
-
-    for (i = 0; i < 1024; i++)
-    {
-        Hbuf[i] = (UINT8) i;
-    }
-
-    /* enable HPET */
-
-    CopyExtendedToReal (&Value, 0xD0, 4);
-    AcpiOsPrintf ("Reg 0xD0: %8.8X\n", Value);
-
-    Value = dIn32 (0xD0);
-    AcpiOsPrintf ("Port 0xD0: %8.8X\n", Value);
-    Value |= ACPI_ENABLE_HPET;
-
-    vOut32 (0xD0, Value);
-    Value2 = dIn32 (0xD0);
-    AcpiOsPrintf ("Port 0xD0: Wrote: %8.8X got %8.8X\n", Value, Value2);
-
-    AcpiOsPrintf ("HPET block(at %8.8X):\n", NewTable->BaseAddress[2]);
-    CopyExtendedToReal (Hbuf, NewTable->BaseAddress[2], 1024);
-    AcpiUtDumpBuffer ((char *) Hbuf, 1024, DB_BYTE_DISPLAY, ACPI_UINT32_MAX);
-}
-#endif /* _HPET */
-
-#endif /* IA16 */
-
index 534aad4..e69de29 100644 (file)
@@ -1,915 +0,0 @@
-NAME    BU_ASM
-TITLE   BU_ASM.ASM -- ASM support for DOS BU_LIB
-
-;****************************************************************************
-;*      Copyright (C) Intel Corporation 1994-1999
-;*
-;*  All rights reserved.  No part of this program or publication
-;*  may be reproduced, transmitted, transcribed, stored in a
-;*  retrieval system, or translated into any language or computer
-;*  language, in any form or by any means, electronic, mechanical,
-;*  magnetic, optical, chemical, manual, or otherwise, without
-;*  the prior written permission of Intel Corporation.
-;****************************************************************************
-;
-;  To assemble with MASM61 -- ml /c a16utils.asm
-;
-;****************************************************************************
-
-.286
-.MODEL large, c
-
-IFDEF MODEL_S
-.MODEL small, c
-ENDIF
-
-IFDEF MODEL_M
-.MODEL medium, c
-ENDIF
-
-IFDEF MODEL_L
-.MODEL large, c
-ENDIF
-
-IFDEF MODEL_C
-.MODEL compact, c
-ENDIF
-
-IFDEF MODEL_H
-.MODEL huge, c
-ENDIF
-
-;--------------------------------------------------------------------
-
-GOREAL  MACRO
-    LOCAL   here
-
-    mov eax, cr0
-    and eax, 0fffffffeh
-    mov cr0, eax
-    jmp here
-here:
-ENDM
-
-;--------------------------------------------------------------------
-
-GOPROT  MACRO
-    LOCAL here
-
-    xor eax, eax
-    xor edx, edx
-
-    mov ax, ds
-    shl eax, 4
-    lea edx, _gdt
-    add eax, edx
-
-    mov [_gdt_ptr+2], ax
-    shr eax, 16
-    mov [_gdt_ptr+4], ax
-
-    lgdt    FWORD PTR _gdt_ptr
-    mov eax, cr0
-    or  eax, 1
-    mov cr0, eax
-    jmp here
-here:
-ENDM
-;--------------------------------------------------------------------
-
-.STACK
-.DATA
-
-PUBLIC  _dAPAwake, _dAPDone, _dAPFuncPtr, _wProcNumber, _bSPValid
-PUBLIC  _wCSegDS, _wCSegES, _wCSegSS, _wCSegSP, _wASegDS, _wASegES
-PUBLIC  _dAPHltJmp
-
-
-
-    emsfilename     DB      'EMMXXXX0',0
-
-    _dAPAwake   DD 0
-    _dAPDone    DD 0
-    _dAPFuncPtr DD 0
-    _wProcNumber    DW 0
-    _bSPValid   DB 0
-
-    _wASegDS    DW 0
-    _wASegES    DW 0
-    _wCSegDS    DW 0
-    _wCSegES    DW 0
-    _wCSegSS    DW 0
-    _wCSegSP    DW 0
-
-    _block      DW 0
-    _gdt_ptr    DW 23
-            DD 0
-    _gdt        DD 0        ; NULL descriptor
-            DD 0        ; NULL descriptor
-
-                    ; 64K real mode style data segment
-            DD 0ffffh   ; base 0, limit 0xffff
-            DD 00009200h    ; data, CPL=0, 16-bit, 1 byte granularity, r/w
-
-                    ; 4G flat data segment
-            DD 0ffffh   ; base 0, limit 0xfffff
-            DD 008f9200h    ; data, CPL=0, 16-bit, 4K granularity, r/w
-    _old_es     DW 0
-    _old_ds     DW 0
-    _old_fs     DW 0
-    _old_gs     DW 0
-    _dAPHltJmp  DD 0        ; jump to halt location
-
-.CODE
-EXTERNDEF pascal cprint:proc
-
-PUBLIC  ems_present
-ems_present PROC C
-    mov     ah,3dh                  ; open file
-    xor     al,al                   ; read only operation
-    mov     dx,offset emsfilename   ; look for EMMXXXX0
-    int     21h
-    jc      emserror1               ; if carry flag set, then no EMM driver
-
-    mov     di,ax                   ; save file handle
-    mov     bx,ax                   ; set up handle
-    mov     ax,4400h                ; get device (channel) info
-    int     21h
-
-    mov     ah,3eh                  ; close file
-    mov     bx,di                   ; close the file handle up
-    int     21h
-    jc      emserror1               ; if carry flag set, then no driver is present
-
-    test    dx,10000000b            ; if bit 7 not set, then the channel is a file
-    jz      emserror1               ; otherwise the channel is a device driver
-
-    mov     ax,1                    ; 1 = EMS present
-    ret
-
-emserror1:
-    xor ax,ax           ; 0 = EMS not present
-    ret
-ems_present ENDP
-
-PUBLIC vm86
-vm86        PROC C
-    smsw    ax
-    and ax, 1
-    ret
-vm86    ENDP
-
-
-PUBLIC _set_rows
-_set_rows   PROC C rows:WORD
-    cmp rows, 25
-    je  set_25
-    cmp rows, 50
-    je  set_50
-    cmp rows, 132
-    je  set_132
-    jmp invalid_input
-set_25:
-    mov ah, 00
-    mov al, 03
-    int 10h
-    mov ax, rows
-    jmp end_set_rows
-set_50:
-    mov ah, 00
-    mov al, 03
-    int 10h
-    xor bx, bx
-    mov ah, 11h
-    mov al, 12h
-    int 10h
-    mov ax, rows
-    jmp end_set_rows
-set_132:
-    mov ah, 00
-    mov al, 14h
-    int 10h
-    xor bx, bx
-    mov ah, 11h
-    mov al, 12h
-    int 10h
-    mov ax, rows
-    jmp end_set_rows
-invalid_input:
-    xor ax, ax
-    jmp end_set_rows
-end_set_rows:
-    ret
-_set_rows   ENDP
-
-
-PUBLIC  _cpuid_asm
-_cpuid_asm  PROC C hv:DWORD, regs:PTR DWORD
-
-check_8086:
-.8086
-    pushf
-    pop ax
-    mov cx, ax
-    and ax, 0fffh
-    push    ax
-    popf
-    pushf
-    pop ax
-    and ax, 0f000h
-    cmp ax, 0f000h
-    mov ax, 10h
-    je  end_cpuid
-
-check_80286:
-.286
-    or  cx, 0f000h
-    push    cx
-    popf
-    pushf
-    pop ax
-    and ax, 0f000h
-    mov ax, 20h
-    jz  end_cpuid
-
-check_80386:
-.386
-    mov bx, sp
-    and sp, not 3
-    pushfd
-    pop eax
-    mov ecx, eax
-    xor eax, 40000h
-    push    eax
-    popfd
-    pushfd
-    pop eax
-    cmp ecx, eax
-    jne check_80486
-    mov ax, 30h
-    mov sp, bx
-    jmp end_cpuid
-
-check_80486:
-.486
-    pushfd
-    pop ecx
-    mov ecx, eax
-    xor eax, 200000h
-    push    eax
-    popfd
-    pushfd
-    pop eax
-    xor eax, ecx
-    mov ax, 40h
-    je  end_cpuid
-
-check_cpuid:
-.586
-    mov eax, hv
-    cpuid
-    push    ebx
-    IF  @DataSize       ; segment is far
-    les bx, regs
-    mov dword ptr es:[bx], eax
-    pop eax
-    mov dword ptr es:[bx + 4], eax
-    mov dword ptr es:[bx + 8], ecx
-    mov dword ptr es:[bx + 12], edx
-    ELSE                ; segment is near
-    mov bx, regs
-    mov dword ptr [bx], eax
-    pop eax
-    mov dword ptr [bx + 4], eax
-    mov dword ptr [bx + 8], ecx
-    mov dword ptr [bx + 12], edx
-    ENDIF
-    mov ax, 5
-end_cpuid:
-    ret
-_cpuid_asm  ENDP
-
-.386p
-;--------------------------------------------------------------------
-; Pentium Pro MSRs - from Pentium Pro Developer's Manual
-;   January 1996 - Appendix C
-;
-; MTRRs: 200h - 20Fh, 250h, 258h - 259h, 268h - 26Fh, 2FFh
-;--------------------------------------------------------------------
-PUBLIC  _read_msr
-_read_msr   PROC    C dmsr:DWORD, pqmsr:PTR DWORD
-    pushad
-    mov ecx, dmsr
-    dw  320fh           ; RDMSR
-    les bx, pqmsr
-    mov DWORD ptr es:[bx], eax
-    mov DWORD ptr es:[bx + 4], edx
-    popad
-    ret
-_read_msr   ENDP
-
-;--------------------------------------------------------------------
-
-PUBLIC  _write_msr
-_write_msr  PROC    C dmsr:DWORD, pqmsr:PTR DWORD
-    pushad
-    les bx, pqmsr
-    mov eax, DWORD ptr es:[bx]
-    mov edx, DWORD ptr es:[bx + 4]
-    mov ecx, dmsr
-    dw  300fh           ; WRMSR
-    popad
-    ret
-_write_msr  ENDP
-
-;----------------------------------------------------------------------------
-; Procedure:    dReadCR0 - Reads CR0 CPU Register
-;
-; Output:   dx:ax and eax - Contents of CR0
-;
-; Registers:    All registers preserved except EAX and EDX
-;----------------------------------------------------------------------------
-PUBLIC  dReadCR0
-dReadCR0    PROC C
-    mov eax, cr0
-    mov edx, eax
-    shr edx, 16     ; upper 16 bits in dx
-    ret
-dReadCR0    ENDP
-
-;----------------------------------------------------------------------------
-; Procedure:    dReadCR2 - Reads CR2 CPU Register
-;
-; Output:   dx:ax and eax - Contents of CR2
-;
-; Registers:    All registers preserved except EAX and EDX
-;----------------------------------------------------------------------------
-PUBLIC  dReadCR2
-dReadCR2    PROC C
-    mov eax, cr2
-    mov edx, eax
-    shr edx, 16     ; upper 16 bits in dx
-    ret
-dReadCR2    ENDP
-
-;----------------------------------------------------------------------------
-; Procedure:    dReadCR3 - Reads CR3 CPU Register
-;
-; Output:   dx:ax and eax - Contents of CR3
-;
-; Registers:    All registers preserved except EAX and EDX
-;----------------------------------------------------------------------------
-PUBLIC  dReadCR3
-dReadCR3    PROC C
-    mov eax, cr3
-    mov edx, eax
-    shr edx, 16     ; upper 16 bits in dx
-    ret
-dReadCR3    ENDP
-
-
-.586
-;----------------------------------------------------------------------------
-; Procedure:    dGetProcUpdateRev_asm - Reads PPP Update Revision via an MSR
-;
-; Output:   dx:ax and eax - PPP Update Revision
-;
-; Registers:    All registers preserved except EAX, ECX, and EDX
-;----------------------------------------------------------------------------
-PUBLIC _dGetProcUpdateRev_asm
-_dGetProcUpdateRev_asm  PROC    C
-    mov ecx, 08Bh   ; model specific register to write
-    xor eax, eax
-    xor edx, edx
-    dw  300Fh       ; WRMSR ==> load 0 to MSR at 8Bh
-    mov eax, 1
-    cpuid
-    mov ecx, 08Bh   ; model specific register to read
-    dw  320Fh       ; RDMSR ==> EDX = (read) MSR 8Bh
-    mov eax, edx    ; return EAX
-    shr edx, 16 ; return DX:AX
-    ret
-_dGetProcUpdateRev_asm  ENDP
-
-;--------------------------------------------------------------------
-
-PUBLIC  iInterruptFlagState
-iInterruptFlagState PROC
-    pushf
-    pop ax
-    and ax, 200h
-    shr ax, 9
-    ret
-iInterruptFlagState ENDP
-
-;--------------------------------------------------------------------
-
-.586P
-PUBLIC  vRealFsGs
-vRealFsGs       PROC C
-
-    ; TBD:  verify this on an AMD K6-2 266 MHz
-    ; Assert A20M# via system control port A (This is a
-    ; system dependent feature).
-    in  al, 92h
-    and al, 0fdh
-    out 92h, al     ; re-assert A20M#
-
-    GOPROT
-
-    mov ax, 8
-    mov gs, ax
-
-    GOREAL
-
-    mov ax, [_old_fs]   ; restore original
-    mov fs, ax
-    mov ax, [_old_gs]   ; restore original
-    mov gs, ax
-    sti
-    ret
-vRealFsGs       ENDP
-
-;--------------------------------------------------------------------
-PUBLIC  vFlatFsGs
-vFlatFsGs       PROC C
-    cli
-    mov ax, fs
-    mov [_old_fs], ax   ; save  original fs
-    mov ax, gs
-    mov [_old_gs], ax   ; save  original gs
-
-    ; Deassert A20M# via system control port A (This is a
-    ; system dependent feature)
-    in  al, 92h
-    or  al, 2
-    out 92h, al     ; de-assert A20M#
-
-    GOPROT
-
-    mov ax, 10h
-    mov fs, ax
-    mov gs, ax
-
-    GOREAL
-
-    ret
-vFlatFsGs       ENDP
-
-
-PUBLIC  vRealEsDs
-vRealEsDs       PROC C
-
-    ; TBD:  verify this on an AMD K6-2 266 MHz
-    ; Assert A20M# via system control port A (This is a
-    ; system dependent feature).
-    in  al, 92h
-    and al, 0fdh
-    out 92h, al     ; re-assert A20M#
-
-    GOPROT
-
-    mov ax, 8
-    mov gs, ax
-
-    GOREAL
-
-    mov ax, [_old_es]   ; restore original
-    mov es, ax
-    mov ax, [_old_gs]   ; restore original
-    mov gs, ax
-    sti
-    ret
-vRealEsDs       ENDP
-
-;--------------------------------------------------------------------
-PUBLIC  vFlatEsDs
-vFlatEsDs       PROC C
-    cli
-    mov ax, es
-    mov [_old_es], ax   ; save  original
-    mov ax, gs
-    mov [_old_gs], ax   ; save  original
-
-    ; Deassert A20M# via system control port A (This is a
-    ; system dependent feature)
-    in  al, 92h
-    or  al, 2
-    out 92h, al     ; de-assert A20M#
-
-    GOPROT
-
-    mov ax, 10h
-    mov es, ax
-    mov gs, ax
-
-    GOREAL
-
-    ret
-vFlatEsDs       ENDP
-
-PUBLIC print
-print PROC PASCAL Seq:DWORD
-
-
-    pushad
-    mov     eax, Seq
-    push    eax
-    call    cprint
-    popad
-
-    ret
-print ENDP
-
-PUBLIC  DoMove
-DoMove       PROC    
-
-    push    edx
-;    GOPROT
-    pop     edx
-
-    mov     ecx, edx
-    shr     ecx, 2          ; byte count / 4 = dword count
-    cmp     ecx, 0
-    je      DoBytes 
-
-NextDword:
-    xor     eax, eax
-    lock or eax, gs:[esi]
-;    mov     eax, gs:[esi]
-
-    mov     gs:[edi], eax
-
-    add     esi, 4
-    add     edi, 4
-    loop    NextDword
-
-DoBytes:
-    mov     ecx, edx
-    and     ecx, 3
-    cmp     ecx, 0
-    je      Exit            ; no extra bytes to move
-
-NextByte:
-    mov     al, byte ptr gs:[esi]
-    mov     byte ptr gs:[edi], al
-    inc     esi
-    inc     edi
-    loop    NextByte
-
-Exit:
-;    GOREAL
-    ret       
-    
-DoMove       ENDP
-    .586
-
-;--------------------------------------------------------------------
-
-PUBLIC  _WriteApic
-_WriteApic  PROC C
-    call    vFlatFsGs
-    xor ecx, ecx
-    xor edx, edx
-
-    mov cx, [esp+6] ; high  word of apic address
-    shl ecx, 16
-    mov cx, [esp+4] ; low word of apic address
-
-    mov dx, [esp+10]    ; high  word of apic command
-    shl edx, 16
-    mov dx, [esp+8] ; low word of apic command
-
-    mov gs:[ecx], edx
-
-    call    vRealFsGs
-    ret
-_WriteApic  ENDP
-
-;--------------------------------------------------------------------
-
-PUBLIC  _ReadApic
-_ReadApic   PROC C
-    call    vFlatFsGs
-    xor ecx, ecx
-
-    mov cx, [esp+6] ; low word of apic address
-    shl ecx, 16
-    mov cx, [esp+4] ; high  word of apic address
-
-    mov eax, gs:[ecx]
-
-    push    eax     ; save  eax
-    call    vRealFsGs
-    pop eax     ; restore eax
-
-    mov edx, eax
-    shr edx, 16
-    ret
-_ReadApic   ENDP
-
-;--------------------------------------------------------------------
-; Since the AP shares the BSP's stack, coordination is needed to avoid
-; simultaneous usage by both processors, which would cause corruption.
-;
-; While the AP is executing here, the BSP is executing the code
-; which follows the call to vAPStartupAll() or vAPStartupOne()
-; in bu_apic.c:vExecuteOnAPs(). After disabling interrupts,
-; the BSP stores the sp value in _wCSegSP, sets _bSPValid to 1,
-; and spins while _dAPDone != _dAPAwake. (Both are initially zero;
-; the code below increments _dAPAwake before spinning on _bSPValid.)
-;
-; XXX - There is a race condition here:  if the BSP makes it all
-; XXX - the way to its spin loop on _dAPDone != _dAPAwake before
-; XXX - the AP increments _dAPAwake, the BSP will exit the spin
-; XXX - loop without actually having waited for the AP to finish.
-
-PUBLIC  _vSetupAP
-_vSetupAP   PROC C
-    cli
-    mov ax, @data
-    mov ds, ax
-    mov esp, 0
-    lock    inc dword ptr [_dAPAwake]
-spin1:
-    mov al, [_bSPValid]
-    cmp al, 1
-    jne spin1
-; XXX - The following line is supposed to provide some validity checking,
-; XXX - but it does not entirely succeed. It is possible for > 1 AP to
-; XXX - see _bSPValid == 1, and exit the spin1 loop just above, before
-; XXX - the first one out has had time to decrement _bSPValid; this race
-; XXX - defeats the purpose of decrementing it. The decrement is likely
-; XXX - not needed anyway due to the exclusion provided by the spin2 loop
-; XXX - below.
-    lock dec byte ptr[_bSPValid]
-
-    mov ax, [_wCSegSS]
-    mov ss, ax
-    mov sp, [_wCSegSP]
-
-; critical section - determining unique cpu signatures
-
-spin2:
-    mov eax, 1
-; XXX - Should the following line have a 'lock' prefix?
-    xchg    word ptr [_block], ax
-    test    ax, ax
-    jne spin2
-
-    mov ax, ds          ; Save ASM DS and ES in global vars
-    mov [_wASegDS], ax
-    mov ax, es
-    mov [_wASegES], ax
-
-    mov ax, [_wCSegES]
-    mov es, ax
-    mov ax, [_wCSegDS]      ; Restore C DS and ES from global vars
-    mov ds, ax
-
-; Update Current Processor Number. Mutual exclusion from other AP's is
-; guaranteed by the spin2 loop above.
-; Note that the "processor number" determined here represents the order
-; in which the processors happened to get through the spin2 lock, and
-; has nothing to do with APIC numbers. A system having > 1 AP will not
-; necessarily number the AP's consistently from one run to the next.
-    mov eax, [_dAPDone]
-    inc eax
-    mov [_wProcNumber], ax
-
-    call    [_dAPFuncPtr]       ; _dAPFuncPtr needs to point to a void function
-
-    mov ax, [_wASegDS]      ; Restore ASM DS and ES from global vars
-    mov ds, ax
-    mov ax, [_wASegES]
-    mov es, ax
-
-    lock    inc dword ptr [_dAPDone]
-    lock    inc byte ptr [_bSPValid]
-
-    xor eax, eax
-; A simple 'mov' would serve as well as the following 'xchg'.
-    xchg    word ptr [_block], ax
-    wbinvd
-    mov si, offset _dAPHltJmp
-    jmp dword ptr [si]      ; Jump to HLT, JMP $-1 in F000 segment
-    hlt             ; Should never get here
-_vSetupAP   ENDP
-
-;--------------------------------------------------------------------
-
-PUBLIC  bIn8
-bIn8    PROC    C wPort:WORD
-    xor ax, ax
-    mov dx, wPort
-    in  al, dx
-    ret
-bIn8    ENDP
-
-;--------------------------------------------------------------------
-
-PUBLIC  wIn16
-wIn16   PROC    C wPort:WORD
-    mov dx, wPort
-    in  ax, dx
-    ret
-wIn16   ENDP
-
-;--------------------------------------------------------------------
-
-PUBLIC  dIn32
-dIn32   PROC    C wPort:WORD
-    mov dx, wPort
-    in  eax, dx
-    mov edx, eax
-    shr edx, 16
-    ret
-dIn32   ENDP
-
-;--------------------------------------------------------------------
-
-PUBLIC  vOut8
-vOut8   PROC    C wPort:WORD, bValue:BYTE
-    mov dx, wPort
-    mov al, bValue
-    out dx, al
-    ret
-vOut8   ENDP
-
-;--------------------------------------------------------------------
-
-PUBLIC  vOut16
-vOut16  PROC    C wPort:WORD, wValue:WORD
-    mov dx, wPort
-    mov ax, wValue
-    out dx, ax
-    ret
-vOut16  ENDP
-
-;--------------------------------------------------------------------
-
-PUBLIC  vOut32
-vOut32  PROC    C wPort:WORD, dValue:DWORD
-    mov dx, wPort
-    mov eax, dValue
-    out dx, eax
-    ret
-vOut32  ENDP
-
-;--------------------------------------------------------------------
-
-;   int FlatMove (DWORD dPhysicalDestination, DWORD dPhysicalSource, size_t sSize)
-PUBLIC  FlatMoveX
-FlatMoveX   PROC    C dDest:DWORD, dSrc:DWORD, sSize:WORD
-    call    vm86            ; check if VM86 mode
-    cmp     ax, 0
-    jne     NotRealMode     ; skip memory move if not in real mode
-
-    call    vFlatFsGs       ; set up FS and GS as 4GB limit selectors with
-                            ; base 0:0 and de-assert A20M#
-    
-    movzx   ecx, sSize
-    cmp     ecx, 0
-    je      SKipMemoryMove  ; skip memory move if 0==sSize
-
-    mov     eax, dDest
-    cmp     eax, 400h
-    jbe     SkipMemoryMove  ; skip memory move if destination is 40:0
-                            ; BIOS Data Area or less (IVT)
-
-    mov     ebx, dSrc
-NextByte:
-    mov     dl, gs:[ebx][ecx - 1]
-    mov     gs:[eax][ecx - 1], dl
-    loop    NextByte
-
-    call    vRealFsGs
-    xor     ax, ax
-NotRealMode:
-    ret
-
-SkipMemoryMove:
-    mov ax, 1               ; return error code
-    ret
-FlatMoveX   ENDP
-
-
-;   int FlatMove32 (DWORD dPhysicalDestination, DWORD dPhysicalSource, size_t sSize)
-PUBLIC  FlatMove32
-FlatMove32   PROC    C      dDest:DWORD, dSrc:DWORD, sSize:WORD  
-
-    call    vm86            ; check if VM86 mode
-    cmp     ax, 0
-    jne     NotRealMode     ; skip memory move if not in real mode
-     
-    call    vFlatFsGs       ; set up FS and GS as 4GB limit selectors with
-                            ; base 0:0 and de-assert A20M#
-    movzx   edx, sSize 
-    mov     esi, dSrc
-    mov     edi, dDest
-
-    push    edx
-    call    print
-    push    esi
-    call    print
-    push    edi
-    call    print
-    
-    cmp     edx, 0
-    je      SkipMemoryMove  ; skip memory move if 0==sSize
-
-    cmp     edi, 400h
-    jbe     SkipMemoryMove  ; skip memory move if destination is 40:0
-                            ; BIOS Data Area or less (IVT)
-    call    DoMove          ; edx=Count, esi=src, edi=dst
-
-    movzx   ecx, sSize
-    shr     ecx, 2
-    mov     edi, dDest
-PrintLoop:
-    mov     eax, gs:[edi]
-    push    eax
-    call    print
-    add     edi, 4
-    loop    PrintLoop
-
-    call    vRealFsGs
-    xor     ax, ax
-
-NotRealMode:
-    ret
-
-SkipMemoryMove:
-    call    print
-    call    vRealEsDs
-    mov     ax, 1           ; return error code
-    ret         
-    
-FlatMove32  ENDP
-
-
-;   int FlatMove32 (DWORD dPhysicalDestination, DWORD dPhysicalSource, size_t sSize)
-PUBLIC  FlatMove32x
-FlatMove32x   PROC    C dDest:DWORD, dSrc:DWORD, sSize:WORD
-    call    vm86            ; check if VM86 mode
-    cmp     ax, 0
-    jne     NotRealMode     ; skip memory move if not in real mode
-
-    call    vFlatFsGs       ; set up FS and GS as 4GB limit selectors with
-                            ; base 0:0 and de-assert A20M#
-    movzx   ecx, sSize
-    cmp     ecx, 0
-    je      SKipMemoryMove  ; skip memory move if 0==sSize
-
-    mov     eax, dDest
-    cmp     eax, 400h
-    jbe     SkipMemoryMove  ; skip memory move if destination is 40:0
-                            ; BIOS Data Area or less (IVT) 
-                            
-    mov     ebx, dSrc
-    mov     esi, 0
-
-    push    ecx
-    call    print
-    push    ebx
-    call    print
-    push    eax
-    call    print
-
-    shr     ecx, 2          ; byte count / 4 = dword count
-    cmp     ecx, 0
-    je      DoBytes
-
-NextDword:
-    mov     edx, dword ptr gs:[ebx][esi]
-    mov     dword ptr gs:[eax][esi], edx
-    push    edx
-    call    print
-    add     esi, 4
-    loop    NextDword
-
-DoBytes:
-    movzx   ecx, sSize
-    and     ecx, 3
-    cmp     ecx, 0
-    je      Exit            ; no extra bytes to move
-
-NextByte:
-    mov     dl, gs:[ebx][esi]
-    mov     gs:[eax][esi], dl
-    inc     esi
-    loop    NextByte
-
-Exit:
-    call    vRealFsGs
-    xor     ax, ax
-
-NotRealMode:
-    ret
-
-SkipMemoryMove:
-    mov ax, 1               ; return error code
-    ret
-FlatMove32x   ENDP
-END
index 1de4b24..a7020cb 100644 (file)
@@ -8,7 +8,7 @@
  *
  * 1. Copyright Notice
  *
- * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
  * All rights reserved.
  *
  * 2. License
 #include "acapps.h"
 
 #include <stdio.h>
-#include <string.h>
 
 
 #define _COMPONENT          ACPI_TOOLS
 
 /* Local prototypes */
 
-INT32
+static INT32
 AdWriteBuffer (
     char                    *Filename,
     char                    *Buffer,
     UINT32                  Length);
 
-char                        FilenameBuf[20];
+static char                 FilenameBuf[20];
+
 
 /******************************************************************************
  *
  * FUNCTION:    AfGenerateFilename
  *
- * PARAMETERS:  Prefix      - prefix string
- *              TableId     - The table ID
+ * PARAMETERS:  Prefix              - prefix string
+ *              TableId             - The table ID
  *
  * RETURN:      Pointer to the completed string
  *
@@ -180,9 +180,9 @@ AdGenerateFilename (
  *
  * FUNCTION:    AfWriteBuffer
  *
- * PARAMETERS:  Filename        - name of file
- *              Buffer          - data to write
- *              Length          - length of data
+ * PARAMETERS:  Filename            - name of file
+ *              Buffer              - data to write
+ *              Length              - length of data
  *
  * RETURN:      Actual number of bytes written
  *
@@ -190,7 +190,7 @@ AdGenerateFilename (
  *
  ******************************************************************************/
 
-INT32
+static INT32
 AdWriteBuffer (
     char                    *Filename,
     char                    *Buffer,
@@ -217,10 +217,10 @@ AdWriteBuffer (
  *
  * FUNCTION:    AfWriteTable
  *
- * PARAMETERS:  Table       - pointer to the ACPI table
- *              Length      - length of the table
- *              TableName   - the table signature
- *              OemTableID  - from the table header
+ * PARAMETERS:  Table               - pointer to the ACPI table
+ *              Length              - length of the table
+ *              TableName           - the table signature
+ *              OemTableID          - from the table header
  *
  * RETURN:      None
  *
@@ -272,7 +272,7 @@ FlGenerateFilename (
      * Copy the original filename to a new buffer. Leave room for the worst case
      * where we append the suffix, an added dot and the null terminator.
      */
-    NewFilename = ACPI_ALLOCATE_ZEROED (
+    NewFilename = ACPI_ALLOCATE_ZEROED ((ACPI_SIZE)
         strlen (InputFilename) + strlen (Suffix) + 2);
     strcpy (NewFilename, InputFilename);
 
@@ -314,7 +314,7 @@ FlStrdup (
     char                *NewString;
 
 
-    NewString = ACPI_ALLOCATE (strlen (String) + 1);
+    NewString = ACPI_ALLOCATE ((ACPI_SIZE) strlen (String) + 1);
     if (!NewString)
     {
         return (NULL);
index 8aaa3b4..748561f 100644 (file)
@@ -8,7 +8,7 @@
  *
  * 1. Copyright Notice
  *
- * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
  * All rights reserved.
  *
  * 2. License
 #define _COMPONENT          ACPI_TOOLS
         ACPI_MODULE_NAME    ("adisasm")
 
-extern int                          AslCompilerdebug;
+
+extern int                  AslCompilerdebug;
+
 
 ACPI_STATUS
 LsDisplayNamespace (
     void);
 
 void
-LsSetupNsList (void * Handle);
+LsSetupNsList (
+    void                    *Handle);
 
 
 /* Local prototypes */
 
-void
+static void
 AdCreateTableHeader (
     char                    *Filename,
     ACPI_TABLE_HEADER       *Table);
 
-void
-AdDisassemblerHeader (
-    char                    *Filename);
-
-void
-AdAddExternalsToNamespace (
-    void);
-
-UINT32
-AdMethodExternalCount (
-    void);
-
-ACPI_STATUS
+static ACPI_STATUS
 AdDeferredParse (
     ACPI_PARSE_OBJECT       *Op,
     UINT8                   *Aml,
     UINT32                  AmlLength);
 
-ACPI_STATUS
+static ACPI_STATUS
 AdParseDeferredOps (
     ACPI_PARSE_OBJECT       *Root);
 
-ACPI_PARSE_OBJECT           *AcpiGbl_ParseOpRoot;
-
 
 /* Stubs for ASL compiler */
 
@@ -192,7 +181,6 @@ AcpiDsMethodError (
 {
     return (Status);
 }
-
 #endif
 
 ACPI_STATUS
@@ -238,18 +226,19 @@ AcpiDsMethodDataInitArgs (
 }
 
 
-ACPI_TABLE_DESC             LocalTables[1];
+static ACPI_TABLE_DESC      LocalTables[1];
+static ACPI_PARSE_OBJECT    *AcpiGbl_ParseOpRoot;
 
 
 /*******************************************************************************
  *
  * FUNCTION:    AdInitialize
  *
- * PARAMETERS:  None.
+ * PARAMETERS:  None
  *
  * RETURN:      Status
  *
- * DESCRIPTION: CA initialization
+ * DESCRIPTION: ACPICA and local initialization
  *
  ******************************************************************************/
 
@@ -288,97 +277,23 @@ AdInitialize (
 
     /* Setup the Table Manager (cheat - there is no RSDT) */
 
-    AcpiGbl_RootTableList.Size = 1;
-    AcpiGbl_RootTableList.Count = 0;
+    AcpiGbl_RootTableList.MaxTableCount = 1;
+    AcpiGbl_RootTableList.CurrentTableCount = 0;
     AcpiGbl_RootTableList.Tables = LocalTables;
 
     return (Status);
 }
 
 
-/*******************************************************************************
- *
- * FUNCTION:    AdAddExternalsToNamespace
- *
- * PARAMETERS:
- *
- * RETURN:      None
- *
- * DESCRIPTION:
- *
- ******************************************************************************/
-
-void
-AdAddExternalsToNamespace (
-    void)
-{
-    ACPI_STATUS             Status;
-    ACPI_NAMESPACE_NODE     *Node;
-    ACPI_EXTERNAL_LIST      *External = AcpiGbl_ExternalList;
-    ACPI_OPERAND_OBJECT     *MethodDesc;
-
-
-    while (External)
-    {
-        Status = AcpiNsLookup (NULL, External->InternalPath, External->Type,
-                   ACPI_IMODE_LOAD_PASS1, ACPI_NS_EXTERNAL | ACPI_NS_DONT_OPEN_SCOPE,
-                   NULL, &Node);
-
-        if (External->Type == ACPI_TYPE_METHOD)
-        {
-            MethodDesc = AcpiUtCreateInternalObject (ACPI_TYPE_METHOD);
-            MethodDesc->Method.ParamCount = (UINT8) External->Value;
-            Node->Object = MethodDesc;
-        }
-
-        External = External->Next;
-    }
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION:    AdMethodExternalCount
- *
- * PARAMETERS:  None
- *
- * RETURN:      Status
- *
- * DESCRIPTION: Return the number of externals that have been generated
- *
- ******************************************************************************/
-
-UINT32
-AdMethodExternalCount (
-    void)
-{
-    ACPI_EXTERNAL_LIST      *External = AcpiGbl_ExternalList;
-    UINT32                  Count = 0;
-
-
-    while (External)
-    {
-        if (External->Type == ACPI_TYPE_METHOD)
-        {
-            Count++;
-        }
-
-        External = External->Next;
-    }
-
-    return (Count);
-}
-
-
 /******************************************************************************
  *
  * FUNCTION:    AdAmlDisassemble
  *
- * PARAMETERS:  Filename        - AML input filename
- *              OutToFile       - TRUE if output should go to a file
- *              Prefix          - Path prefix for output
- *              OutFilename     - where the filename is returned
- *              GetAllTables    - TRUE if all tables are desired
+ * PARAMETERS:  Filename            - AML input filename
+ *              OutToFile           - TRUE if output should go to a file
+ *              Prefix              - Path prefix for output
+ *              OutFilename         - where the filename is returned
+ *              GetAllTables        - TRUE if all tables are desired
  *
  * RETURN:      Status
  *
@@ -386,8 +301,6 @@ AdMethodExternalCount (
  *
  *****************************************************************************/
 
-extern char *Gbl_ExternalFilename;
-
 ACPI_STATUS
 AdAmlDisassemble (
     BOOLEAN                 OutToFile,
@@ -399,16 +312,16 @@ AdAmlDisassemble (
     ACPI_STATUS             Status;
     char                    *DisasmFilename = NULL;
     char                    *ExternalFilename;
+    ACPI_EXTERNAL_FILE      *ExternalFileList = AcpiGbl_ExternalFileList;
     FILE                    *File = NULL;
     ACPI_TABLE_HEADER       *Table = NULL;
     ACPI_TABLE_HEADER       *ExternalTable;
     ACPI_OWNER_ID           OwnerId;
-    ACPI_EXTERNAL_LIST      *NextExternal;
 
 
     /*
-     * Input: AML Code from either a file,
-     *        or via GetTables (memory or registry)
+     * Input: AML code from either a file or via GetTables (memory or
+     * registry)
      */
     if (Filename)
     {
@@ -422,53 +335,55 @@ AdAmlDisassemble (
          * External filenames separated by commas
          * Example: iasl -e file1,file2,file3 -d xxx.aml
          */
-        if (Gbl_ExternalFilename)
+        while (ExternalFileList)
         {
-            ExternalFilename = strtok (Gbl_ExternalFilename, ",");
+            ExternalFilename = ExternalFileList->Path;
+            if (!ACPI_STRCMP (ExternalFilename, Filename))
+            {
+                /* Next external file */
+
+                ExternalFileList = ExternalFileList->Next;
+
+                continue;
+            }
 
-            while (ExternalFilename)
+            Status = AcpiDbGetTableFromFile (ExternalFilename, &ExternalTable);
+            if (ACPI_FAILURE (Status))
+            {
+                return Status;
+            }
+
+            /* Load external table for symbol resolution */
+
+            if (ExternalTable)
             {
-                Status = AcpiDbGetTableFromFile (ExternalFilename, &ExternalTable);
+                Status = AdParseTable (ExternalTable, &OwnerId, TRUE, TRUE);
                 if (ACPI_FAILURE (Status))
                 {
+                    AcpiOsPrintf ("Could not parse external ACPI tables, %s\n",
+                        AcpiFormatException (Status));
                     return Status;
                 }
 
-                /* Load external table for symbol resolution */
-
-                if (ExternalTable)
-                {
-                    Status = AdParseTable (ExternalTable, &OwnerId, TRUE, TRUE);
-                    if (ACPI_FAILURE (Status))
-                    {
-                        AcpiOsPrintf ("Could not parse external ACPI tables, %s\n",
-                            AcpiFormatException (Status));
-                        return Status;
-                    }
-
-                    /*
-                     * Load namespace from names created within control methods
-                     * Set owner id of nodes in external table
-                     */
-                    AcpiDmFinishNamespaceLoad (AcpiGbl_ParseOpRoot,
-                        AcpiGbl_RootNode, OwnerId);
-                    AcpiPsDeleteParseTree (AcpiGbl_ParseOpRoot);
-                }
+                /*
+                 * Load namespace from names created within control methods
+                 * Set owner id of nodes in external table
+                 */
+                AcpiDmFinishNamespaceLoad (AcpiGbl_ParseOpRoot,
+                    AcpiGbl_RootNode, OwnerId);
+                AcpiPsDeleteParseTree (AcpiGbl_ParseOpRoot);
+            }
 
-                /* Next external file name */
+            /* Next external file */
 
-                ExternalFilename = strtok (NULL, ",");
-            }
+            ExternalFileList = ExternalFileList->Next;
+        }
 
-            /* Clear external list generated by Scope in external tables */
+        /* Clear external list generated by Scope in external tables */
 
-            while (AcpiGbl_ExternalList)
-            {
-                NextExternal = AcpiGbl_ExternalList->Next;
-                ACPI_FREE (AcpiGbl_ExternalList->Path);
-                ACPI_FREE (AcpiGbl_ExternalList);
-                AcpiGbl_ExternalList = NextExternal;
-            }
+        if (AcpiGbl_ExternalFileList)
+        {
+            AcpiDmClearExternalList ();
         }
     }
     else
@@ -501,8 +416,7 @@ AdAmlDisassemble (
     }
 
     /*
-     * Output:  ASL code.
-     *          Redirect to a file if requested
+     * Output:  ASL code. Redirect to a file if requested
      */
     if (OutToFile)
     {
@@ -589,11 +503,11 @@ AdAmlDisassemble (
          * tree with the new information (namely, the number of arguments per
          * method)
          */
-        if (AdMethodExternalCount ())
+        if (AcpiDmGetExternalMethodCount ())
         {
             fprintf (stderr,
-                "\nFound %d external control methods, reparsing with new information\n",
-                AdMethodExternalCount());
+                "\nFound %u external control methods, reparsing with new information\n",
+                AcpiDmGetExternalMethodCount ());
 
             /*
              * Reparse, rebuild namespace. no need to xref namespace
@@ -605,13 +519,14 @@ AdAmlDisassemble (
             AcpiGbl_RootNodeStruct.Name.Integer = ACPI_ROOT_NAME;
             AcpiGbl_RootNodeStruct.DescriptorType = ACPI_DESC_TYPE_NAMED;
             AcpiGbl_RootNodeStruct.Type         = ACPI_TYPE_DEVICE;
+            AcpiGbl_RootNodeStruct.Parent       = NULL;
             AcpiGbl_RootNodeStruct.Child        = NULL;
             AcpiGbl_RootNodeStruct.Peer         = NULL;
             AcpiGbl_RootNodeStruct.Object       = NULL;
-            AcpiGbl_RootNodeStruct.Flags        = ANOBJ_END_OF_PEER_LIST;
+            AcpiGbl_RootNodeStruct.Flags        = 0;
 
             Status = AcpiNsRootInitialize ();
-            AdAddExternalsToNamespace ();
+            AcpiDmAddExternalsToNamespace ();
 
             /* Parse table. No need to reload it, however (FALSE) */
 
@@ -697,10 +612,10 @@ AdDisassemblerHeader (
 
     /* Header and input table info */
 
-    AcpiOsPrintf ("/*\n * Intel ACPI Component Architecture\n");
-    AcpiOsPrintf (" * AML Disassembler version %8.8X\n", ACPI_CA_VERSION);
+    AcpiOsPrintf ("/*\n");
+    AcpiOsPrintf (ACPI_COMMON_HEADER ("AML Disassembler", " * "));
 
-    AcpiOsPrintf (" *\n * Disassembly of %s, %s", Filename, ctime (&Timer));
+    AcpiOsPrintf (" * Disassembly of %s, %s", Filename, ctime (&Timer));
     AcpiOsPrintf (" *\n");
 }
 
@@ -719,7 +634,7 @@ AdDisassemblerHeader (
  *
  *****************************************************************************/
 
-void
+static void
 AdCreateTableHeader (
     char                    *Filename,
     ACPI_TABLE_HEADER       *Table)
@@ -733,7 +648,7 @@ AdCreateTableHeader (
      */
     AdDisassemblerHeader (Filename);
 
-    AcpiOsPrintf (" *\n * Original Table Header:\n");
+    AcpiOsPrintf (" * Original Table Header:\n");
     AcpiOsPrintf (" *     Signature        \"%4.4s\"\n",    Table->Signature);
     AcpiOsPrintf (" *     Length           0x%8.8X (%u)\n", Table->Length, Table->Length);
 
@@ -752,7 +667,7 @@ AdCreateTableHeader (
 
         if (ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_DSDT))
         {
-            AcpiOsPrintf (" **** ACPI 1.0, no 64-bit math support");
+            AcpiOsPrintf (" **** 32-bit table (V1), no 64-bit math support");
         }
         break;
 
@@ -778,7 +693,7 @@ AdCreateTableHeader (
     AcpiOsPrintf (" *     OEM Revision     0x%8.8X (%u)\n", Table->OemRevision, Table->OemRevision);
     AcpiOsPrintf (" *     Compiler ID      \"%.4s\"\n",     Table->AslCompilerId);
     AcpiOsPrintf (" *     Compiler Version 0x%8.8X (%u)\n", Table->AslCompilerRevision, Table->AslCompilerRevision);
-    AcpiOsPrintf (" */\n");
+    AcpiOsPrintf (" */\n\n");
 
     /* Create AML output filename based on input filename */
 
@@ -796,7 +711,7 @@ AdCreateTableHeader (
     /* Open the ASL definition block */
 
     AcpiOsPrintf (
-        "DefinitionBlock (\"%s\", \"%4.4s\", %hd, \"%.6s\", \"%.8s\", 0x%8.8X)\n",
+        "DefinitionBlock (\"%s\", \"%4.4s\", %hu, \"%.6s\", \"%.8s\", 0x%8.8X)\n",
         NewFilename, Table->Signature, Table->Revision,
         Table->OemId, Table->OemTableId, Table->OemRevision);
 
@@ -855,9 +770,9 @@ AdDisplayTables (
  *
  * FUNCTION:    AdDeferredParse
  *
- * PARAMETERS:  Op              - Root Op of the deferred opcode
- *              Aml             - Pointer to the raw AML
- *              AmlLength       - Length of the AML
+ * PARAMETERS:  Op                  - Root Op of the deferred opcode
+ *              Aml                 - Pointer to the raw AML
+ *              AmlLength           - Length of the AML
  *
  * RETURN:      Status
  *
@@ -866,7 +781,7 @@ AdDisplayTables (
  *
  *****************************************************************************/
 
-ACPI_STATUS
+static ACPI_STATUS
 AdDeferredParse (
     ACPI_PARSE_OBJECT       *Op,
     UINT8                   *Aml,
@@ -981,7 +896,7 @@ AdDeferredParse (
  *
  * FUNCTION:    AdParseDeferredOps
  *
- * PARAMETERS:  Root            - Root of the parse tree
+ * PARAMETERS:  Root                - Root of the parse tree
  *
  * RETURN:      Status
  *
@@ -989,7 +904,7 @@ AdDeferredParse (
  *
  *****************************************************************************/
 
-ACPI_STATUS
+static ACPI_STATUS
 AdParseDeferredOps (
     ACPI_PARSE_OBJECT       *Root)
 {
@@ -1055,8 +970,8 @@ AdParseDeferredOps (
  *
  * FUNCTION:    AdGetLocalTables
  *
- * PARAMETERS:  Filename        - Not used
- *              GetAllTables    - TRUE if all tables are desired
+ * PARAMETERS:  Filename            - Not used
+ *              GetAllTables        - TRUE if all tables are desired
  *
  * RETURN:      Status
  *
@@ -1108,7 +1023,7 @@ AdGetLocalTables (
          * is architecture-dependent.
          */
         NumTables = (NewTable->Length - sizeof (ACPI_TABLE_HEADER)) / PointerSize;
-        AcpiOsPrintf ("There are %d tables defined in the %4.4s\n\n",
+        AcpiOsPrintf ("There are %u tables defined in the %4.4s\n\n",
             NumTables, NewTable->Signature);
 
         /* Get the FADT */
@@ -1138,6 +1053,11 @@ AdGetLocalTables (
 
         Status = AcpiTbStoreTable (0, NewTable, NewTable->Length,
                     0, &TableIndex);
+        if (ACPI_FAILURE (Status))
+        {
+            fprintf (stderr, "Could not store DSDT\n");
+            return AE_NO_ACPI_TABLES;
+        }
     }
     else
     {
@@ -1169,10 +1089,10 @@ AdGetLocalTables (
  *
  * FUNCTION:    AdParseTable
  *
- * PARAMETERS:  Table           - Pointer to the raw table
- *              OwnerId         - Returned OwnerId of the table
- *              LoadTable       - If add table to the global table list
- *              External        - If this is an external table
+ * PARAMETERS:  Table               - Pointer to the raw table
+ *              OwnerId             - Returned OwnerId of the table
+ *              LoadTable           - If add table to the global table list
+ *              External            - If this is an external table
  *
  * RETURN:      Status
  *
@@ -1241,7 +1161,7 @@ AdParseTable (
 
     /* If LoadTable is FALSE, we are parsing the last loaded table */
 
-    TableIndex = AcpiGbl_RootTableList.Count - 1;
+    TableIndex = AcpiGbl_RootTableList.CurrentTableCount - 1;
 
     /* Pass 2 */
 
index 67d9b11..b4e227d 100644 (file)
@@ -8,7 +8,7 @@
  *
  * 1. Copyright Notice
  *
- * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
  * All rights reserved.
  *
  * 2. License
 #include "accommon.h"
 #include "acparser.h"
 #include "amlcode.h"
-#include "acdebug.h"
 #include "acdisasm.h"
 #include "acdispat.h"
 #include "acnamesp.h"
@@ -184,7 +183,7 @@ AcpiDmResourceDescendingOp (
  *
  * FUNCTION:    AcpiDmDumpTree
  *
- * PARAMETERS:  Origin          - Starting object
+ * PARAMETERS:  Origin              - Starting object
  *
  * RETURN:      None
  *
@@ -218,7 +217,7 @@ AcpiDmDumpTree (
  *
  * FUNCTION:    AcpiDmFindOrphanMethods
  *
- * PARAMETERS:  Origin          - Starting object
+ * PARAMETERS:  Origin              - Starting object
  *
  * RETURN:      None
  *
@@ -426,7 +425,6 @@ AcpiDmDumpDescending (
     void                    *Context)
 {
     ACPI_OP_WALK_INFO       *Info = Context;
-    const ACPI_OPCODE_INFO  *OpInfo;
     char                    *Path;
 
 
@@ -435,11 +433,9 @@ AcpiDmDumpDescending (
         return (AE_OK);
     }
 
-    OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
-    Info->Count++;
-
     /* Most of the information (count, level, name) here */
 
+    Info->Count++;
     AcpiOsPrintf ("% 5d [%2.2d] ", Info->Count, Level);
     AcpiDmIndent (Level);
     AcpiOsPrintf ("%-28s", AcpiPsGetOpcodeName (Op->Common.AmlOpcode));
@@ -472,7 +468,7 @@ AcpiDmDumpDescending (
     case AML_METHOD_OP:
     case AML_DEVICE_OP:
     case AML_INT_NAMEDFIELD_OP:
-        AcpiOsPrintf ("%4.4s", &Op->Named.Name);
+        AcpiOsPrintf ("%4.4s", ACPI_CAST_PTR (char, &Op->Named.Name));
         break;
 
     default:
@@ -536,22 +532,22 @@ AcpiDmFindOrphanDescending (
             {
                 /* This NamePath has no args, assume it is an integer */
 
-                AcpiDmAddToExternalList (ChildOp->Common.Value.String, ACPI_TYPE_INTEGER, 0);
+                AcpiDmAddToExternalList (ChildOp, ChildOp->Common.Value.String, ACPI_TYPE_INTEGER, 0);
                 return (AE_OK);
             }
 
             ArgCount = AcpiDmInspectPossibleArgs (3, 1, NextOp);
-            AcpiOsPrintf ("/* A-CHILDREN: %d Actual %d */\n", ArgCount, AcpiDmCountChildren (Op));
+            AcpiOsPrintf ("/* A-CHILDREN: %u Actual %u */\n", ArgCount, AcpiDmCountChildren (Op));
 
             if (ArgCount < 1)
             {
                 /* One Arg means this is just a Store(Name,Target) */
 
-                AcpiDmAddToExternalList (ChildOp->Common.Value.String, ACPI_TYPE_INTEGER, 0);
+                AcpiDmAddToExternalList (ChildOp, ChildOp->Common.Value.String, ACPI_TYPE_INTEGER, 0);
                 return (AE_OK);
             }
 
-            AcpiDmAddToExternalList (ChildOp->Common.Value.String, ACPI_TYPE_METHOD, ArgCount);
+            AcpiDmAddToExternalList (ChildOp, ChildOp->Common.Value.String, ACPI_TYPE_METHOD, ArgCount);
         }
         break;
 #endif
@@ -567,7 +563,7 @@ AcpiDmFindOrphanDescending (
             {
                 /* This NamePath has no args, assume it is an integer */
 
-                AcpiDmAddToExternalList (ChildOp->Common.Value.String, ACPI_TYPE_INTEGER, 0);
+                AcpiDmAddToExternalList (ChildOp, ChildOp->Common.Value.String, ACPI_TYPE_INTEGER, 0);
                 return (AE_OK);
             }
 
@@ -576,11 +572,11 @@ AcpiDmFindOrphanDescending (
             {
                 /* One Arg means this is just a Store(Name,Target) */
 
-                AcpiDmAddToExternalList (ChildOp->Common.Value.String, ACPI_TYPE_INTEGER, 0);
+                AcpiDmAddToExternalList (ChildOp, ChildOp->Common.Value.String, ACPI_TYPE_INTEGER, 0);
                 return (AE_OK);
             }
 
-            AcpiDmAddToExternalList (ChildOp->Common.Value.String, ACPI_TYPE_METHOD, ArgCount);
+            AcpiDmAddToExternalList (ChildOp, ChildOp->Common.Value.String, ACPI_TYPE_METHOD, ArgCount);
         }
         break;
 
@@ -611,7 +607,7 @@ AcpiDmFindOrphanDescending (
                      /* And namepath is the first argument */
                      (ParentOp->Common.Value.Arg == Op))
                 {
-                    AcpiDmAddToExternalList (Op->Common.Value.String, ACPI_TYPE_INTEGER, 0);
+                    AcpiDmAddToExternalList (Op, Op->Common.Value.String, ACPI_TYPE_INTEGER, 0);
                     break;
                 }
             }
@@ -621,7 +617,7 @@ AcpiDmFindOrphanDescending (
              * operator) - it *must* be a method invocation, nothing else is
              * grammatically possible.
              */
-            AcpiDmAddToExternalList (Op->Common.Value.String, ACPI_TYPE_METHOD, ArgCount);
+            AcpiDmAddToExternalList (Op, Op->Common.Value.String, ACPI_TYPE_METHOD, ArgCount);
 
         }
         break;
@@ -796,6 +792,7 @@ AcpiDmXrefDescendingOp (
     ACPI_PARSE_OBJECT       *NextOp;
     ACPI_NAMESPACE_NODE     *Node;
     ACPI_OPERAND_OBJECT     *Object;
+    UINT32                  ParamCount = 0;
 
 
     WalkState = Info->WalkState;
@@ -858,7 +855,7 @@ AcpiDmXrefDescendingOp (
     {
         if (Status == AE_NOT_FOUND)
         {
-            AcpiDmAddToExternalList (Path, (UINT8) ObjectType, 0);
+            AcpiDmAddToExternalList (Op, Path, (UINT8) ObjectType, 0);
 
             /*
              * We could install this into the namespace, but we catch duplicate
@@ -884,18 +881,13 @@ AcpiDmXrefDescendingOp (
         if (Object)
         {
             ObjectType2 = Object->Common.Type;
+            if (ObjectType2 == ACPI_TYPE_METHOD)
+            {
+                ParamCount = Object->Method.ParamCount;
+            }
         }
 
-        if (ObjectType2 == ACPI_TYPE_METHOD)
-        {
-            AcpiDmAddToExternalList (Path, ACPI_TYPE_METHOD,
-                Object->Method.ParamCount);
-        }
-        else
-        {
-            AcpiDmAddToExternalList (Path, (UINT8) ObjectType2, 0);
-        }
-
+        AcpiDmAddToExternalList (Op, Path, (UINT8) ObjectType2, ParamCount);
         Op->Common.Node = Node;
     }
     else
diff --git a/sys/contrib/dev/acpica-unix/common/dmextern.c b/sys/contrib/dev/acpica-unix/common/dmextern.c
new file mode 100644 (file)
index 0000000..0c3580f
--- /dev/null
@@ -0,0 +1,743 @@
+/******************************************************************************
+ *
+ * Module Name: dmextern - Support for External() ASL statements
+ *
+ *****************************************************************************/
+
+/******************************************************************************
+ *
+ * 1. Copyright Notice
+ *
+ * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
+ * All rights reserved.
+ *
+ * 2. License
+ *
+ * 2.1. This is your license from Intel Corp. under its intellectual property
+ * rights.  You may have additional license terms from the party that provided
+ * you this software, covering your right to use that party's intellectual
+ * property rights.
+ *
+ * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
+ * copy of the source code appearing in this file ("Covered Code") an
+ * irrevocable, perpetual, worldwide license under Intel's copyrights in the
+ * base code distributed originally by Intel ("Original Intel Code") to copy,
+ * make derivatives, distribute, use and display any portion of the Covered
+ * Code in any form, with the right to sublicense such rights; and
+ *
+ * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
+ * license (with the right to sublicense), under only those claims of Intel
+ * patents that are infringed by the Original Intel Code, to make, use, sell,
+ * offer to sell, and import the Covered Code and derivative works thereof
+ * solely to the minimum extent necessary to exercise the above copyright
+ * license, and in no event shall the patent license extend to any additions
+ * to or modifications of the Original Intel Code.  No other license or right
+ * is granted directly or by implication, estoppel or otherwise;
+ *
+ * The above copyright and patent license is granted only if the following
+ * conditions are met:
+ *
+ * 3. Conditions
+ *
+ * 3.1. Redistribution of Source with Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification with rights to further distribute source must include
+ * the above Copyright Notice, the above License, this list of Conditions,
+ * and the following Disclaimer and Export Compliance provision.  In addition,
+ * Licensee must cause all Covered Code to which Licensee contributes to
+ * contain a file documenting the changes Licensee made to create that Covered
+ * Code and the date of any change.  Licensee must include in that file the
+ * documentation of any changes made by any predecessor Licensee.  Licensee
+ * must include a prominent statement that the modification is derived,
+ * directly or indirectly, from Original Intel Code.
+ *
+ * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification without rights to further distribute source must
+ * include the following Disclaimer and Export Compliance provision in the
+ * documentation and/or other materials provided with distribution.  In
+ * addition, Licensee may not authorize further sublicense of source of any
+ * portion of the Covered Code, and must include terms to the effect that the
+ * license from Licensee to its licensee is limited to the intellectual
+ * property embodied in the software Licensee provides to its licensee, and
+ * not to intellectual property embodied in modifications its licensee may
+ * make.
+ *
+ * 3.3. Redistribution of Executable. Redistribution in executable form of any
+ * substantial portion of the Covered Code or modification must reproduce the
+ * above Copyright Notice, and the following Disclaimer and Export Compliance
+ * provision in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3.4. Intel retains all right, title, and interest in and to the Original
+ * Intel Code.
+ *
+ * 3.5. Neither the name Intel nor any other trademark owned or controlled by
+ * Intel shall be used in advertising or otherwise to promote the sale, use or
+ * other dealings in products derived from or relating to the Covered Code
+ * without prior written authorization from Intel.
+ *
+ * 4. Disclaimer and Export Compliance
+ *
+ * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
+ * HERE.  ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
+ * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT,  ASSISTANCE,
+ * INSTALLATION, TRAINING OR OTHER SERVICES.  INTEL WILL NOT PROVIDE ANY
+ * UPDATES, ENHANCEMENTS OR EXTENSIONS.  INTEL SPECIFICALLY DISCLAIMS ANY
+ * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
+ * PARTICULAR PURPOSE.
+ *
+ * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
+ * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
+ * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
+ * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
+ * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
+ * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  THESE LIMITATIONS
+ * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
+ * LIMITED REMEDY.
+ *
+ * 4.3. Licensee shall not export, either directly or indirectly, any of this
+ * software or system incorporating such software without first obtaining any
+ * required license or other approval from the U. S. Department of Commerce or
+ * any other agency or department of the United States Government.  In the
+ * event Licensee exports any such software from the United States or
+ * re-exports any such software from a foreign destination, Licensee shall
+ * ensure that the distribution and export/re-export of the software is in
+ * compliance with all laws, regulations, orders, or other restrictions of the
+ * U.S. Export Administration Regulations. Licensee agrees that neither it nor
+ * any of its subsidiaries will export/re-export any technical data, process,
+ * software, or service, directly or indirectly, to any country for which the
+ * United States government or any agency thereof requires an export license,
+ * other governmental approval, or letter of assurance, without first obtaining
+ * such license, approval or letter.
+ *
+ *****************************************************************************/
+
+#include "acpi.h"
+#include "accommon.h"
+#include "amlcode.h"
+#include "acnamesp.h"
+#include "acdisasm.h"
+
+
+/*
+ * This module is used for application-level code (iASL disassembler) only.
+ *
+ * It contains the code to create and emit any necessary External() ASL
+ * statements for the module being disassembled.
+ */
+#define _COMPONENT          ACPI_CA_DISASSEMBLER
+        ACPI_MODULE_NAME    ("dmextern")
+
+
+/*
+ * This table maps ACPI_OBJECT_TYPEs to the corresponding ASL
+ * ObjectTypeKeyword. Used to generate typed external declarations
+ */
+static const char           *AcpiGbl_DmTypeNames[] =
+{
+    /* 00 */ "",                    /* Type ANY */
+    /* 01 */ ", IntObj",
+    /* 02 */ ", StrObj",
+    /* 03 */ ", BuffObj",
+    /* 04 */ ", PkgObj",
+    /* 05 */ ", FieldUnitObj",
+    /* 06 */ ", DeviceObj",
+    /* 07 */ ", EventObj",
+    /* 08 */ ", MethodObj",
+    /* 09 */ ", MutexObj",
+    /* 10 */ ", OpRegionObj",
+    /* 11 */ ", PowerResObj",
+    /* 12 */ ", ProcessorObj",
+    /* 13 */ ", ThermalZoneObj",
+    /* 14 */ ", BuffFieldObj",
+    /* 15 */ ", DDBHandleObj",
+    /* 16 */ "",                    /* Debug object */
+    /* 17 */ ", FieldUnitObj",
+    /* 18 */ ", FieldUnitObj",
+    /* 19 */ ", FieldUnitObj"
+};
+
+
+/* Local prototypes */
+
+static const char *
+AcpiDmGetObjectTypeName (
+    ACPI_OBJECT_TYPE        Type);
+
+static char *
+AcpiDmNormalizeParentPrefix (
+    ACPI_PARSE_OBJECT       *Op,
+    char                    *Path);
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiDmGetObjectTypeName
+ *
+ * PARAMETERS:  Type                - An ACPI_OBJECT_TYPE
+ *
+ * RETURN:      Pointer to a string
+ *
+ * DESCRIPTION: Map an object type to the ASL object type string.
+ *
+ ******************************************************************************/
+
+static const char *
+AcpiDmGetObjectTypeName (
+    ACPI_OBJECT_TYPE        Type)
+{
+
+    if (Type == ACPI_TYPE_LOCAL_SCOPE)
+    {
+        Type = ACPI_TYPE_DEVICE;
+    }
+
+    else if (Type > ACPI_TYPE_LOCAL_INDEX_FIELD)
+    {
+        return ("");
+    }
+
+    return (AcpiGbl_DmTypeNames[Type]);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiDmNormalizeParentPrefix
+ *
+ * PARAMETERS:  Op                  - Parse op
+ *              Path                - Path with parent prefix
+ *
+ * RETURN:      The full pathname to the object (from the namespace root)
+ *
+ * DESCRIPTION: Returns the full pathname of a path with parent prefix
+ *              The caller must free the fullpath returned.
+ *
+ ******************************************************************************/
+
+static char *
+AcpiDmNormalizeParentPrefix (
+    ACPI_PARSE_OBJECT       *Op,
+    char                    *Path)
+{
+    ACPI_NAMESPACE_NODE     *Node;
+    char                    *Fullpath;
+    char                    *ParentPath;
+    ACPI_SIZE               Length;
+
+
+    /* Search upwards in the parse tree until we reach a namespace node */
+
+    while (Op)
+    {
+        if (Op->Common.Node)
+        {
+            break;
+        }
+
+        Op = Op->Common.Parent;
+    }
+
+    if (!Op)
+    {
+        return (NULL);
+    }
+
+    /*
+     * Find the actual parent node for the reference:
+     * Remove all carat prefixes from the input path.
+     * There may be multiple parent prefixes (For example, ^^^M000)
+     */
+    Node = Op->Common.Node;
+    while (Node && (*Path == (UINT8) AML_PARENT_PREFIX))
+    {
+        Node = Node->Parent;
+        Path++;
+    }
+
+    if (!Node)
+    {
+        return (NULL);
+    }
+
+    /* Get the full pathname for the parent node */
+
+    ParentPath = AcpiNsGetExternalPathname (Node);
+    if (!ParentPath)
+    {
+        return (NULL);
+    }
+
+    Length = (ACPI_STRLEN (ParentPath) + ACPI_STRLEN (Path) + 1);
+    if (ParentPath[1])
+    {
+        /*
+         * If ParentPath is not just a simple '\', increment the length
+         * for the required dot separator (ParentPath.Path)
+         */
+        Length++;
+    }
+
+    Fullpath = ACPI_ALLOCATE_ZEROED (Length);
+    if (!Fullpath)
+    {
+        goto Cleanup;
+    }
+
+    /*
+     * Concatenate parent fullpath and path. For example,
+     * parent fullpath "\_SB_", Path "^INIT", Fullpath "\_SB_.INIT"
+     *
+     * Copy the parent path
+     */
+    ACPI_STRCAT (Fullpath, ParentPath);
+
+    /* Add dot separator (don't need dot if parent fullpath is a single "\") */
+
+    if (ParentPath[1])
+    {
+        ACPI_STRCAT (Fullpath, ".");
+    }
+
+    /* Copy child path (carat parent prefix(es) were skipped above) */
+
+    ACPI_STRCAT (Fullpath, Path);
+
+Cleanup:
+    ACPI_FREE (ParentPath);
+    return (Fullpath);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiDmAddToExternalFileList
+ *
+ * PARAMETERS:  PathList            - Single path or list separated by comma
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Add external files to global list
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiDmAddToExternalFileList (
+    char                    *PathList)
+{
+    ACPI_EXTERNAL_FILE      *ExternalFile;
+    char                    *Path;
+    char                    *TmpPath;
+
+
+    if (!PathList)
+    {
+        return (AE_OK);
+    }
+
+    Path = strtok (PathList, ",");
+
+    while (Path)
+    {
+        TmpPath = ACPI_ALLOCATE_ZEROED (ACPI_STRLEN (Path) + 1);
+        if (!TmpPath)
+        {
+            return (AE_NO_MEMORY);
+        }
+
+        ACPI_STRCPY (TmpPath, Path);
+
+        ExternalFile = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_EXTERNAL_FILE));
+        if (!ExternalFile)
+        {
+            ACPI_FREE (TmpPath);
+            return (AE_NO_MEMORY);
+        }
+
+        ExternalFile->Path = TmpPath;
+
+        if (AcpiGbl_ExternalFileList)
+        {
+            ExternalFile->Next = AcpiGbl_ExternalFileList;
+        }
+
+        AcpiGbl_ExternalFileList = ExternalFile;
+        Path = strtok (NULL, ",");
+    }
+
+    return (AE_OK);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiDmClearExternalFileList
+ *
+ * PARAMETERS:  None
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Clear the external file list
+ *
+ ******************************************************************************/
+
+void
+AcpiDmClearExternalFileList (
+    void)
+{
+    ACPI_EXTERNAL_FILE      *NextExternal;
+
+
+    while (AcpiGbl_ExternalFileList)
+    {
+        NextExternal = AcpiGbl_ExternalFileList->Next;
+        ACPI_FREE (AcpiGbl_ExternalFileList->Path);
+        ACPI_FREE (AcpiGbl_ExternalFileList);
+        AcpiGbl_ExternalFileList = NextExternal;
+    }
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiDmAddToExternalList
+ *
+ * PARAMETERS:  Op                  - Current parser Op
+ *              Path                - Internal (AML) path to the object
+ *              Type                - ACPI object type to be added
+ *              Value               - Arg count if adding a Method object
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Insert a new name into the global list of Externals which
+ *              will in turn be later emitted as an External() declaration
+ *              in the disassembled output.
+ *
+ ******************************************************************************/
+
+void
+AcpiDmAddToExternalList (
+    ACPI_PARSE_OBJECT       *Op,
+    char                    *Path,
+    UINT8                   Type,
+    UINT32                  Value)
+{
+    char                    *ExternalPath;
+    char                    *Fullpath = NULL;
+    ACPI_EXTERNAL_LIST      *NewExternal;
+    ACPI_EXTERNAL_LIST      *NextExternal;
+    ACPI_EXTERNAL_LIST      *PrevExternal = NULL;
+    ACPI_STATUS             Status;
+
+
+    if (!Path)
+    {
+        return;
+    }
+
+    /* Externalize the ACPI path */
+
+    Status = AcpiNsExternalizeName (ACPI_UINT32_MAX, Path,
+                NULL, &ExternalPath);
+    if (ACPI_FAILURE (Status))
+    {
+        return;
+    }
+
+    /* Get the full pathname from root if "Path" has a parent prefix */
+
+    if (*Path == (UINT8) AML_PARENT_PREFIX)
+    {
+        Fullpath = AcpiDmNormalizeParentPrefix (Op, ExternalPath);
+        if (Fullpath)
+        {
+            /* Set new external path */
+
+            ACPI_FREE (ExternalPath);
+            ExternalPath = Fullpath;
+        }
+    }
+
+    /* Check all existing externals to ensure no duplicates */
+
+    NextExternal = AcpiGbl_ExternalList;
+    while (NextExternal)
+    {
+        if (!ACPI_STRCMP (ExternalPath, NextExternal->Path))
+        {
+            /* Duplicate method, check that the Value (ArgCount) is the same */
+
+            if ((NextExternal->Type == ACPI_TYPE_METHOD) &&
+                (NextExternal->Value != Value))
+            {
+                ACPI_ERROR ((AE_INFO,
+                    "Argument count mismatch for method %s %u %u",
+                    NextExternal->Path, NextExternal->Value, Value));
+            }
+
+            /* Allow upgrade of type from ANY */
+
+            else if (NextExternal->Type == ACPI_TYPE_ANY)
+            {
+                NextExternal->Type = Type;
+                NextExternal->Value = Value;
+            }
+
+            ACPI_FREE (ExternalPath);
+            return;
+        }
+
+        NextExternal = NextExternal->Next;
+    }
+
+    /* Allocate and init a new External() descriptor */
+
+    NewExternal = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_EXTERNAL_LIST));
+    if (!NewExternal)
+    {
+        ACPI_FREE (ExternalPath);
+        return;
+    }
+
+    NewExternal->Path = ExternalPath;
+    NewExternal->Type = Type;
+    NewExternal->Value = Value;
+    NewExternal->Length = (UINT16) ACPI_STRLEN (ExternalPath);
+
+    /* Was the external path with parent prefix normalized to a fullpath? */
+
+    if (Fullpath == ExternalPath)
+    {
+        /* Get new internal path */
+
+        Status = AcpiNsInternalizeName (ExternalPath, &Path);
+        if (ACPI_FAILURE (Status))
+        {
+            ACPI_FREE (ExternalPath);
+            ACPI_FREE (NewExternal);
+            return;
+        }
+
+        /* Set flag to indicate External->InternalPath need to be freed */
+
+        NewExternal->Flags |= ACPI_IPATH_ALLOCATED;
+    }
+
+    NewExternal->InternalPath = Path;
+
+    /* Link the new descriptor into the global list, ordered by string length */
+
+    NextExternal = AcpiGbl_ExternalList;
+    while (NextExternal)
+    {
+        if (NewExternal->Length <= NextExternal->Length)
+        {
+            if (PrevExternal)
+            {
+                PrevExternal->Next = NewExternal;
+            }
+            else
+            {
+                AcpiGbl_ExternalList = NewExternal;
+            }
+
+            NewExternal->Next = NextExternal;
+            return;
+        }
+
+        PrevExternal = NextExternal;
+        NextExternal = NextExternal->Next;
+    }
+
+    if (PrevExternal)
+    {
+        PrevExternal->Next = NewExternal;
+    }
+    else
+    {
+        AcpiGbl_ExternalList = NewExternal;
+    }
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiDmAddExternalsToNamespace
+ *
+ * PARAMETERS:  None
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Add all externals to the namespace. Allows externals to be
+ *              "resolved".
+ *
+ ******************************************************************************/
+
+void
+AcpiDmAddExternalsToNamespace (
+    void)
+{
+    ACPI_STATUS             Status;
+    ACPI_NAMESPACE_NODE     *Node;
+    ACPI_OPERAND_OBJECT     *MethodDesc;
+    ACPI_EXTERNAL_LIST      *External = AcpiGbl_ExternalList;
+
+
+    while (External)
+    {
+        /* Add the external name (object) into the namespace */
+
+        Status = AcpiNsLookup (NULL, External->InternalPath, External->Type,
+                   ACPI_IMODE_LOAD_PASS1,
+                   ACPI_NS_EXTERNAL | ACPI_NS_DONT_OPEN_SCOPE,
+                   NULL, &Node);
+
+        if (ACPI_FAILURE (Status))
+        {
+            ACPI_EXCEPTION ((AE_INFO, Status,
+                "while adding external to namespace [%s]",
+                External->Path));
+        }
+        else if (External->Type == ACPI_TYPE_METHOD)
+        {
+            /* For methods, we need to save the argument count */
+
+            MethodDesc = AcpiUtCreateInternalObject (ACPI_TYPE_METHOD);
+            MethodDesc->Method.ParamCount = (UINT8) External->Value;
+            Node->Object = MethodDesc;
+        }
+
+        External = External->Next;
+    }
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiDmGetExternalMethodCount
+ *
+ * PARAMETERS:  None
+ *
+ * RETURN:      The number of control method externals in the external list
+ *
+ * DESCRIPTION: Return the number of method externals that have been generated.
+ *              If any control method externals have been found, we must
+ *              re-parse the entire definition block with the new information
+ *              (number of arguments for the methods.) This is limitation of
+ *              AML, we don't know the number of arguments from the control
+ *              method invocation itself.
+ *
+ ******************************************************************************/
+
+UINT32
+AcpiDmGetExternalMethodCount (
+    void)
+{
+    ACPI_EXTERNAL_LIST      *External = AcpiGbl_ExternalList;
+    UINT32                  Count = 0;
+
+
+    while (External)
+    {
+        if (External->Type == ACPI_TYPE_METHOD)
+        {
+            Count++;
+        }
+
+        External = External->Next;
+    }
+
+    return (Count);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiDmClearExternalList
+ *
+ * PARAMETERS:  None
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Free the entire External info list
+ *
+ ******************************************************************************/
+
+void
+AcpiDmClearExternalList (
+    void)
+{
+    ACPI_EXTERNAL_LIST      *NextExternal;
+
+
+    while (AcpiGbl_ExternalList)
+    {
+        NextExternal = AcpiGbl_ExternalList->Next;
+        ACPI_FREE (AcpiGbl_ExternalList->Path);
+        ACPI_FREE (AcpiGbl_ExternalList);
+        AcpiGbl_ExternalList = NextExternal;
+    }
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiDmEmitExternals
+ *
+ * PARAMETERS:  None
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Emit an External() ASL statement for each of the externals in
+ *              the global external info list.
+ *
+ ******************************************************************************/
+
+void
+AcpiDmEmitExternals (
+    void)
+{
+    ACPI_EXTERNAL_LIST      *NextExternal;
+
+
+    if (!AcpiGbl_ExternalList)
+    {
+        return;
+    }
+
+    /*
+     * Walk the list of externals (unresolved references)
+     * found during the AML parsing
+     */
+    while (AcpiGbl_ExternalList)
+    {
+        AcpiOsPrintf ("    External (%s%s",
+            AcpiGbl_ExternalList->Path,
+            AcpiDmGetObjectTypeName (AcpiGbl_ExternalList->Type));
+
+        if (AcpiGbl_ExternalList->Type == ACPI_TYPE_METHOD)
+        {
+            AcpiOsPrintf (")    // %u Arguments\n",
+                AcpiGbl_ExternalList->Value);
+        }
+        else
+        {
+            AcpiOsPrintf (")\n");
+        }
+
+        /* Free this external info block and move on to next external */
+
+        NextExternal = AcpiGbl_ExternalList->Next;
+        if (AcpiGbl_ExternalList->Flags & ACPI_IPATH_ALLOCATED)
+        {
+            ACPI_FREE (AcpiGbl_ExternalList->InternalPath);
+        }
+
+        ACPI_FREE (AcpiGbl_ExternalList->Path);
+        ACPI_FREE (AcpiGbl_ExternalList);
+        AcpiGbl_ExternalList = NextExternal;
+    }
+
+    AcpiOsPrintf ("\n");
+}
index b461988..827dc26 100644 (file)
@@ -8,7 +8,7 @@
  *
  * 1. Copyright Notice
  *
- * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
  * All rights reserved.
  *
  * 2. License
@@ -387,7 +387,7 @@ static ACPI_RESOURCE_TAG        *AcpiGbl_ResourceTags [] =
 
 static UINT32                   AcpiGbl_NextResourceId = 0;
 static UINT8                    AcpiGbl_NextPrefix = 0;
-static UINT8                    AcpiGbl_Prefix[ACPI_NUM_RES_PREFIX] =
+static char                     AcpiGbl_Prefix[ACPI_NUM_RES_PREFIX] =
                                     {'Y','Z','J','K','X'};
 
 
@@ -549,13 +549,6 @@ AcpiDmGetResourceNode (
             return (Node);
         }
 
-        /* List is circular, this flag marks the end */
-
-        if (Node->Flags & ANOBJ_END_OF_PEER_LIST)
-        {
-            return (NULL);
-        }
-
         Node = Node->Peer;
     }
 
@@ -711,8 +704,8 @@ AcpiDmUpdateResourceName (
 
     Name[0] = '_';
     Name[1] = AcpiGbl_Prefix[AcpiGbl_NextPrefix];
-    Name[2] = AcpiUtHexToAsciiChar (AcpiGbl_NextResourceId, 4);
-    Name[3] = AcpiUtHexToAsciiChar (AcpiGbl_NextResourceId, 0);
+    Name[2] = AcpiUtHexToAsciiChar ((UINT64) AcpiGbl_NextResourceId, 4);
+    Name[3] = AcpiUtHexToAsciiChar ((UINT64) AcpiGbl_NextResourceId, 0);
 
     /* Update globals for next name */
 
index 73a0338..123c763 100644 (file)
@@ -8,7 +8,7 @@
  *
  * 1. Copyright Notice
  *
- * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
  * All rights reserved.
  *
  * 2. License
 #include "accommon.h"
 #include "acdisasm.h"
 #include "actables.h"
+#include "aslcompiler.h"
+#include "dtcompiler.h"
 
 /* This module used for application-level code only */
 
 
 /* Local Prototypes */
 
-static ACPI_DMTABLE_DATA *
-AcpiDmGetTableData (
-    char                    *Signature);
-
 static void
 AcpiDmCheckAscii (
     UINT8                   *Target,
+    char                    *RepairedName,
     UINT32                  Count);
 
-UINT8
-AcpiTbGenerateChecksum (
-    ACPI_TABLE_HEADER       *Table);
-
 
 /* These tables map a subtable type to a description string */
 
@@ -156,17 +151,86 @@ static const char           *AcpiDmDmarSubnames[] =
     "Hardware Unit Definition",
     "Reserved Memory Region",
     "Root Port ATS Capability",
+    "Remapping Hardware Static Affinity",
     "Unknown SubTable Type"         /* Reserved */
 };
 
+static const char           *AcpiDmEinjActions[] =
+{
+    "Begin Operation",
+    "Get Trigger Table",
+    "Set Error Type",
+    "Get Error Type",
+    "End Operation",
+    "Execute Operation",
+    "Check Busy Status",
+    "Get Command Status",
+    "Unknown Action"
+};
+
+static const char           *AcpiDmEinjInstructions[] =
+{
+    "Read Register",
+    "Read Register Value",
+    "Write Register",
+    "Write Register Value",
+    "Noop",
+    "Unknown Instruction"
+};
+
+static const char           *AcpiDmErstActions[] =
+{
+    "Begin Write Operation",
+    "Begin Read Operation",
+    "Begin Clear Operation",
+    "End Operation",
+    "Set Record Offset",
+    "Execute Operation",
+    "Check Busy Status",
+    "Get Command Status",
+    "Get Record Identifier",
+    "Set Record Identifier",
+    "Get Record Count",
+    "Begin Dummy Write",
+    "Unused/Unknown Action",
+    "Get Error Address Range",
+    "Get Error Address Length",
+    "Get Error Attributes",
+    "Unknown Action"
+};
+
+static const char           *AcpiDmErstInstructions[] =
+{
+    "Read Register",
+    "Read Register Value",
+    "Write Register",
+    "Write Register Value",
+    "Noop",
+    "Load Var1",
+    "Load Var2",
+    "Store Var1",
+    "Add",
+    "Subtract",
+    "Add Value",
+    "Subtract Value",
+    "Stall",
+    "Stall While True",
+    "Skip Next If True",
+    "GoTo",
+    "Set Source Address",
+    "Set Destination Address",
+    "Move Data",
+    "Unknown Instruction"
+};
+
 static const char           *AcpiDmHestSubnames[] =
 {
-    "XPF Machine Check Exception",
-    "XPF Corrected Machine Check",
-    "NOT USED???",
-    "XPF Non-Maskable Interrupt",
-    "IPF Corrected Machine Check",
-    "IPF Corrected Platform Error",
+    "IA-32 Machine Check Exception",
+    "IA-32 Corrected Machine Check",
+    "IA-32 Non-Maskable Interrupt",
+    "Unknown SubTable Type",        /* 3 - Reserved */
+    "Unknown SubTable Type",        /* 4 - Reserved */
+    "Unknown SubTable Type",        /* 5 - Reserved */
     "PCI Express Root Port AER",
     "PCI Express AER (AER Endpoint)",
     "PCI Express/PCI-X Bridge AER",
@@ -208,6 +272,13 @@ static const char           *AcpiDmSratSubnames[] =
     "Unknown SubTable Type"         /* Reserved */
 };
 
+static const char           *AcpiDmIvrsSubnames[] =
+{
+    "Hardware Definition Block",
+    "Memory Definition Block",
+    "Unknown SubTable Type"         /* Reserved */
+};
+
 
 #define ACPI_FADT_PM_RESERVED       8
 
@@ -224,53 +295,76 @@ static const char           *AcpiDmFadtProfiles[] =
     "Unknown Profile Type"
 };
 
+#define ACPI_GAS_WIDTH_RESERVED     5
+
+static const char           *AcpiDmGasAccessWidth[] =
+{
+    "Undefined/Legacy",
+    "Byte Access:8",
+    "Word Access:16",
+    "DWord Access:32",
+    "QWord Access:64",
+    "Unknown Width Encoding"
+};
+
 
 /*******************************************************************************
  *
  * ACPI Table Data, indexed by signature.
  *
- * Simple tables have only a TableInfo structure, complex tables have a handler.
- * This table must be NULL terminated. RSDP and FACS are special-cased
- * elsewhere.
+ * Each entry contains: Signature, Table Info, Handler, DtHandler,
+ *  Template, Description
+ *
+ * Simple tables have only a TableInfo structure, complex tables have a
+ * handler. This table must be NULL terminated. RSDP and FACS are
+ * special-cased elsewhere.
  *
  ******************************************************************************/
 
-static ACPI_DMTABLE_DATA    AcpiDmTableData[] =
+ACPI_DMTABLE_DATA    AcpiDmTableData[] =
 {
-    {ACPI_SIG_ASF,  NULL,                   AcpiDmDumpAsf,  "Alert Standard Format table"},
-    {ACPI_SIG_BOOT, AcpiDmTableInfoBoot,    NULL,           "Simple Boot Flag Table"},
-    {ACPI_SIG_BERT, AcpiDmTableInfoBert,    NULL,           "Boot Error Record Table"},
-    {ACPI_SIG_CPEP, NULL,                   AcpiDmDumpCpep, "Corrected Platform Error Polling table"},
-    {ACPI_SIG_DBGP, AcpiDmTableInfoDbgp,    NULL,           "Debug Port table"},
-    {ACPI_SIG_DMAR, NULL,                   AcpiDmDumpDmar, "DMA Remapping table"},
-    {ACPI_SIG_ECDT, AcpiDmTableInfoEcdt,    NULL,           "Embedded Controller Boot Resources Table"},
-    {ACPI_SIG_EINJ, NULL,                   AcpiDmDumpEinj, "Error Injection table"},
-    {ACPI_SIG_ERST, NULL,                   AcpiDmDumpErst, "Error Record Serialization Table"},
-    {ACPI_SIG_FADT, NULL,                   AcpiDmDumpFadt, "Fixed ACPI Description Table"},
-    {ACPI_SIG_HEST, NULL,                   AcpiDmDumpHest, "Hardware Error Source Table"},
-    {ACPI_SIG_HPET, AcpiDmTableInfoHpet,    NULL,           "High Precision Event Timer table"},
-    {ACPI_SIG_MADT, NULL,                   AcpiDmDumpMadt, "Multiple APIC Description Table"},
-    {ACPI_SIG_MCFG, NULL,                   AcpiDmDumpMcfg, "Memory Mapped Configuration table"},
-    {ACPI_SIG_RSDT, NULL,                   AcpiDmDumpRsdt, "Root System Description Table"},
-    {ACPI_SIG_SBST, AcpiDmTableInfoSbst,    NULL,           "Smart Battery Specification Table"},
-    {ACPI_SIG_SLIC, AcpiDmTableInfoSlic,    NULL,           "Software Licensing Description Table"},
-    {ACPI_SIG_SLIT, NULL,                   AcpiDmDumpSlit, "System Locality Information Table"},
-    {ACPI_SIG_SPCR, AcpiDmTableInfoSpcr,    NULL,           "Serial Port Console Redirection table"},
-    {ACPI_SIG_SPMI, AcpiDmTableInfoSpmi,    NULL,           "Server Platform Management Interface table"},
-    {ACPI_SIG_SRAT, NULL,                   AcpiDmDumpSrat, "System Resource Affinity Table"},
-    {ACPI_SIG_TCPA, AcpiDmTableInfoTcpa,    NULL,           "Trusted Computing Platform Alliance table"},
-    {ACPI_SIG_WDRT, AcpiDmTableInfoWdrt,    NULL,           "Watchdog Resource Table"},
-    {ACPI_SIG_XSDT, NULL,                   AcpiDmDumpXsdt, "Extended System Description Table"},
-    {NULL,          NULL,                   NULL,           NULL}
+    {ACPI_SIG_ASF,  NULL,                   AcpiDmDumpAsf,  DtCompileAsf,   TemplateAsf,    "Alert Standard Format table"},
+    {ACPI_SIG_BOOT, AcpiDmTableInfoBoot,    NULL,           NULL,           TemplateBoot,   "Simple Boot Flag Table"},
+    {ACPI_SIG_BERT, AcpiDmTableInfoBert,    NULL,           NULL,           TemplateBert,   "Boot Error Record Table"},
+    {ACPI_SIG_CPEP, NULL,                   AcpiDmDumpCpep, DtCompileCpep,  TemplateCpep,   "Corrected Platform Error Polling table"},
+    {ACPI_SIG_DBGP, AcpiDmTableInfoDbgp,    NULL,           NULL,           TemplateDbgp,   "Debug Port table"},
+    {ACPI_SIG_DMAR, NULL,                   AcpiDmDumpDmar, DtCompileDmar,  TemplateDmar,   "DMA Remapping table"},
+    {ACPI_SIG_ECDT, AcpiDmTableInfoEcdt,    NULL,           NULL,           TemplateEcdt,   "Embedded Controller Boot Resources Table"},
+    {ACPI_SIG_EINJ, NULL,                   AcpiDmDumpEinj, DtCompileEinj,  TemplateEinj,   "Error Injection table"},
+    {ACPI_SIG_ERST, NULL,                   AcpiDmDumpErst, DtCompileErst,  TemplateErst,   "Error Record Serialization Table"},
+    {ACPI_SIG_FADT, NULL,                   AcpiDmDumpFadt, DtCompileFadt,  TemplateFadt,   "Fixed ACPI Description Table"},
+    {ACPI_SIG_HEST, NULL,                   AcpiDmDumpHest, DtCompileHest,  TemplateHest,   "Hardware Error Source Table"},
+    {ACPI_SIG_HPET, AcpiDmTableInfoHpet,    NULL,           NULL,           TemplateHpet,   "High Precision Event Timer table"},
+    {ACPI_SIG_IVRS, NULL,                   AcpiDmDumpIvrs, DtCompileIvrs,  TemplateIvrs,   "I/O Virtualization Reporting Structure"},
+    {ACPI_SIG_MADT, NULL,                   AcpiDmDumpMadt, DtCompileMadt,  TemplateMadt,   "Multiple APIC Description Table"},
+    {ACPI_SIG_MCFG, NULL,                   AcpiDmDumpMcfg, DtCompileMcfg,  TemplateMcfg,   "Memory Mapped Configuration table"},
+    {ACPI_SIG_MCHI, AcpiDmTableInfoMchi,    NULL,           NULL,           TemplateMchi,   "Management Controller Host Interface table"},
+    {ACPI_SIG_MSCT, NULL,                   AcpiDmDumpMsct, DtCompileMsct,  TemplateMsct,   "Maximum System Characteristics Table"},
+    {ACPI_SIG_RSDT, NULL,                   AcpiDmDumpRsdt, DtCompileRsdt,  TemplateRsdt,   "Root System Description Table"},
+    {ACPI_SIG_SBST, AcpiDmTableInfoSbst,    NULL,           NULL,           TemplateSbst,   "Smart Battery Specification Table"},
+    {ACPI_SIG_SLIC, AcpiDmTableInfoSlic,    NULL,           NULL,           NULL,           "Software Licensing Description Table"},
+    {ACPI_SIG_SLIT, NULL,                   AcpiDmDumpSlit, DtCompileSlit,  TemplateSlit,   "System Locality Information Table"},
+    {ACPI_SIG_SPCR, AcpiDmTableInfoSpcr,    NULL,           NULL,           TemplateSpcr,   "Serial Port Console Redirection table"},
+    {ACPI_SIG_SPMI, AcpiDmTableInfoSpmi,    NULL,           NULL,           TemplateSpmi,   "Server Platform Management Interface table"},
+    {ACPI_SIG_SRAT, NULL,                   AcpiDmDumpSrat, DtCompileSrat,  TemplateSrat,   "System Resource Affinity Table"},
+    {ACPI_SIG_TCPA, AcpiDmTableInfoTcpa,    NULL,           NULL,           TemplateTcpa,   "Trusted Computing Platform Alliance table"},
+    {ACPI_SIG_UEFI, AcpiDmTableInfoUefi,    NULL,           DtCompileUefi,  TemplateUefi,   "UEFI Boot Optimization Table"},
+    {ACPI_SIG_WAET, AcpiDmTableInfoWaet,    NULL,           NULL,           TemplateWaet,   "Windows ACPI Emulated Devices Table"},
+    {ACPI_SIG_WDAT, NULL,                   AcpiDmDumpWdat, DtCompileWdat,  TemplateWdat,   "Watchdog Action Table"},
+    {ACPI_SIG_WDDT, AcpiDmTableInfoWddt,    NULL,           NULL,           TemplateWddt,   "Watchdog Description Table"},
+    {ACPI_SIG_WDRT, AcpiDmTableInfoWdrt,    NULL,           NULL,           TemplateWdrt,   "Watchdog Resource Table"},
+    {ACPI_SIG_XSDT, NULL,                   AcpiDmDumpXsdt, DtCompileXsdt,  TemplateXsdt,   "Extended System Description Table"},
+    {NULL,          NULL,                   NULL,           NULL,           NULL,           NULL}
 };
 
 
 /*******************************************************************************
  *
- * FUNCTION:    AcpiTbGenerateChecksum
+ * FUNCTION:    AcpiDmGenerateChecksum
  *
- * PARAMETERS:  Table               - Pointer to a valid ACPI table (with a
- *                                    standard ACPI header)
+ * PARAMETERS:  Table               - Pointer to table to be checksummed
+ *              Length              - Length of the table
+ *              OriginalChecksum    - Value of the checksum field
  *
  * RETURN:      8 bit checksum of buffer
  *
@@ -279,19 +373,21 @@ static ACPI_DMTABLE_DATA    AcpiDmTableData[] =
  ******************************************************************************/
 
 UINT8
-AcpiTbGenerateChecksum (
-    ACPI_TABLE_HEADER       *Table)
+AcpiDmGenerateChecksum (
+    void                    *Table,
+    UINT32                  Length,
+    UINT8                   OriginalChecksum)
 {
     UINT8                   Checksum;
 
 
     /* Sum the entire table as-is */
 
-    Checksum = AcpiTbChecksum ((UINT8 *) Table, Table->Length);
+    Checksum = AcpiTbChecksum ((UINT8 *) Table, Length);
 
     /* Subtract off the existing checksum value in the table */
 
-    Checksum = (UINT8) (Checksum - Table->Checksum);
+    Checksum = (UINT8) (Checksum - OriginalChecksum);
 
     /* Compute the final checksum */
 
@@ -312,7 +408,7 @@ AcpiTbGenerateChecksum (
  *
  ******************************************************************************/
 
-static ACPI_DMTABLE_DATA *
+ACPI_DMTABLE_DATA *
 AcpiDmGetTableData (
     char                    *Signature)
 {
@@ -416,10 +512,14 @@ AcpiDmDumpDataTable (
         }
     }
 
-    /* Always dump the raw table data */
+    if (!Gbl_DoTemplates || Gbl_VerboseTemplates)
+    {
+        /* Dump the raw table data */
 
-    AcpiOsPrintf ("\nRaw Table Data\n\n");
-    AcpiUtDumpBuffer2 (ACPI_CAST_PTR (UINT8, Table), Length, DB_BYTE_DISPLAY);
+        AcpiOsPrintf ("\n%s: Length %d (0x%X)\n\n",
+            ACPI_RAW_TABLE_DATA_HEADER, Length, Length);
+        AcpiUtDumpBuffer2 (ACPI_CAST_PTR (UINT8, Table), Length, DB_BYTE_DISPLAY);
+    }
 }
 
 
@@ -447,15 +547,31 @@ AcpiDmLineHeader (
     char                    *Name)
 {
 
-    if (ByteLength)
+    if (Gbl_DoTemplates && !Gbl_VerboseTemplates) /* Terse template */
     {
-        AcpiOsPrintf ("[%3.3Xh %4.4d% 3d] %28s : ",
-            Offset, Offset, ByteLength, Name);
+        if (ByteLength)
+        {
+            AcpiOsPrintf ("[%.3d] %34s : ",
+                ByteLength, Name);
+        }
+        else
+        {
+            AcpiOsPrintf ("%40s : ",
+                Name);
+        }
     }
-    else
+    else /* Normal disassembler or verbose template */
     {
-        AcpiOsPrintf ("%43s : ",
-            Name);
+        if (ByteLength)
+        {
+            AcpiOsPrintf ("[%3.3Xh %4.4d% 3d] %28s : ",
+                Offset, Offset, ByteLength, Name);
+        }
+        else
+        {
+            AcpiOsPrintf ("%43s : ",
+                Name);
+        }
     }
 }
 
@@ -467,15 +583,31 @@ AcpiDmLineHeader2 (
     UINT32                  Value)
 {
 
-    if (ByteLength)
+    if (Gbl_DoTemplates && !Gbl_VerboseTemplates) /* Terse template */
     {
-        AcpiOsPrintf ("[%3.3Xh %4.4d% 3d] %24s % 3d : ",
-            Offset, Offset, ByteLength, Name, Value);
+        if (ByteLength)
+        {
+            AcpiOsPrintf ("[%.3d] %30s % 3d : ",
+                ByteLength, Name, Value);
+        }
+        else
+        {
+            AcpiOsPrintf ("%36s % 3d : ",
+                Name, Value);
+        }
     }
-    else
+    else /* Normal disassembler or verbose template */
     {
-        AcpiOsPrintf ("[%3.3Xh %4.4d   ] %24s % 3d : ",
-            Offset, Offset, Name, Value);
+        if (ByteLength)
+        {
+            AcpiOsPrintf ("[%3.3Xh %4.4d% 3d] %24s % 3d : ",
+                Offset, Offset, ByteLength, Name, Value);
+        }
+        else
+        {
+            AcpiOsPrintf ("[%3.3Xh %4.4d   ] %24s % 3d : ",
+                Offset, Offset, Name, Value);
+        }
     }
 }
 
@@ -495,6 +627,8 @@ AcpiDmLineHeader2 (
  *
  * DESCRIPTION: Display ACPI table contents by walking the Info table.
  *
+ * Note: This function must remain in sync with DtGetFieldLength.
+ *
  ******************************************************************************/
 
 ACPI_STATUS
@@ -511,7 +645,9 @@ AcpiDmDumpTable (
     UINT8                   Temp8;
     UINT16                  Temp16;
     ACPI_DMTABLE_DATA       *TableData;
+    const char              *Name;
     BOOLEAN                 LastOutputBlankLine = FALSE;
+    char                    RepairedName[8];
 
 
     if (!Info)
@@ -547,11 +683,17 @@ AcpiDmDumpTable (
         case ACPI_DMT_UINT8:
         case ACPI_DMT_CHKSUM:
         case ACPI_DMT_SPACEID:
+        case ACPI_DMT_ACCWIDTH:
+        case ACPI_DMT_IVRS:
         case ACPI_DMT_MADT:
         case ACPI_DMT_SRAT:
         case ACPI_DMT_ASF:
         case ACPI_DMT_HESTNTYP:
         case ACPI_DMT_FADTPM:
+        case ACPI_DMT_EINJACT:
+        case ACPI_DMT_EINJINST:
+        case ACPI_DMT_ERSTACT:
+        case ACPI_DMT_ERSTINST:
             ByteLength = 1;
             break;
         case ACPI_DMT_UINT16:
@@ -571,12 +713,17 @@ AcpiDmDumpTable (
             ByteLength = 6;
             break;
         case ACPI_DMT_UINT56:
+        case ACPI_DMT_BUF7:
             ByteLength = 7;
             break;
         case ACPI_DMT_UINT64:
         case ACPI_DMT_NAME8:
             ByteLength = 8;
             break;
+        case ACPI_DMT_BUF16:
+        case ACPI_DMT_UUID:
+            ByteLength = 16;
+            break;
         case ACPI_DMT_STRING:
             ByteLength = ACPI_STRLEN (ACPI_CAST_PTR (char, Target)) + 1;
             break;
@@ -677,17 +824,44 @@ AcpiDmDumpTable (
                 ACPI_FORMAT_UINT64 (ACPI_GET64 (Target)));
             break;
 
+        case ACPI_DMT_BUF7:
+        case ACPI_DMT_BUF16:
+
+            /*
+             * Buffer: Size depends on the opcode and was set above.
+             * Each hex byte is separated with a space.
+             */
+            for (Temp8 = 0; Temp8 < ByteLength; Temp8++)
+            {
+                AcpiOsPrintf ("%2.2X", Target[Temp8]);
+                if ((UINT32) (Temp8 + 1) < ByteLength)
+                {
+                    AcpiOsPrintf (" ");
+                }
+            }
+            AcpiOsPrintf ("\n");
+            break;
+
+        case ACPI_DMT_UUID:
+
+            /* Convert 16-byte UUID buffer to 36-byte formatted UUID string */
+
+            (void) AuConvertUuidToString ((char *) Target, MsgBuffer);
+
+            AcpiOsPrintf ("%s\n", MsgBuffer);
+            break;
+
         case ACPI_DMT_STRING:
 
-            AcpiOsPrintf ("%s\n", ACPI_CAST_PTR (char, Target));
+            AcpiOsPrintf ("\"%s\"\n", ACPI_CAST_PTR (char, Target));
             break;
 
         /* Fixed length ASCII name fields */
 
         case ACPI_DMT_SIG:
 
-            AcpiDmCheckAscii (Target, 4);
-            AcpiOsPrintf ("\"%4.4s\"    ", Target);
+            AcpiDmCheckAscii (Target, RepairedName, 4);
+            AcpiOsPrintf ("\"%.4s\"    ", RepairedName);
             TableData = AcpiDmGetTableData (ACPI_CAST_PTR (char, Target));
             if (TableData)
             {
@@ -698,20 +872,20 @@ AcpiDmDumpTable (
 
         case ACPI_DMT_NAME4:
 
-            AcpiDmCheckAscii (Target, 4);
-            AcpiOsPrintf ("\"%4.4s\"\n", Target);
+            AcpiDmCheckAscii (Target, RepairedName, 4);
+            AcpiOsPrintf ("\"%.4s\"\n", RepairedName);
             break;
 
         case ACPI_DMT_NAME6:
 
-            AcpiDmCheckAscii (Target, 6);
-            AcpiOsPrintf ("\"%6.6s\"\n", Target);
+            AcpiDmCheckAscii (Target, RepairedName, 6);
+            AcpiOsPrintf ("\"%.6s\"\n", RepairedName);
             break;
 
         case ACPI_DMT_NAME8:
 
-            AcpiDmCheckAscii (Target, 8);
-            AcpiOsPrintf ("\"%8.8s\"\n", Target);
+            AcpiDmCheckAscii (Target, RepairedName, 8);
+            AcpiOsPrintf ("\"%.8s\"\n", RepairedName);
             break;
 
         /* Special Data Types */
@@ -721,7 +895,9 @@ AcpiDmDumpTable (
             /* Checksum, display and validate */
 
             AcpiOsPrintf ("%2.2X", *Target);
-            Temp8 = AcpiTbGenerateChecksum (Table);
+            Temp8 = AcpiDmGenerateChecksum (Table,
+                        ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Length,
+                        ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Checksum);
             if (Temp8 != ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Checksum)
             {
                 AcpiOsPrintf (
@@ -737,13 +913,26 @@ AcpiDmDumpTable (
             AcpiOsPrintf ("%2.2X (%s)\n", *Target, AcpiUtGetRegionName (*Target));
             break;
 
+        case ACPI_DMT_ACCWIDTH:
+
+            /* Encoded Access Width */
+
+            Temp8 = *Target;
+            if (Temp8 > ACPI_GAS_WIDTH_RESERVED)
+            {
+                Temp8 = ACPI_GAS_WIDTH_RESERVED;
+            }
+
+            AcpiOsPrintf ("%2.2X (%s)\n", Temp8, AcpiDmGasAccessWidth[Temp8]);
+            break;
+
         case ACPI_DMT_GAS:
 
             /* Generic Address Structure */
 
             AcpiOsPrintf ("<Generic Address Structure>\n");
-            AcpiDmDumpTable (ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Length,
-                CurrentOffset, Target, sizeof (ACPI_GENERIC_ADDRESS), AcpiDmTableInfoGas);
+            AcpiDmDumpTable (TableLength, CurrentOffset, Target,
+                sizeof (ACPI_GENERIC_ADDRESS), AcpiDmTableInfoGas);
             AcpiOsPrintf ("\n");
             LastOutputBlankLine = TRUE;
             break;
@@ -774,6 +963,58 @@ AcpiDmDumpTable (
             AcpiOsPrintf ("%4.4X <%s>\n", ACPI_GET16 (Target), AcpiDmDmarSubnames[Temp16]);
             break;
 
+        case ACPI_DMT_EINJACT:
+
+            /* EINJ Action types */
+
+            Temp8 = *Target;
+            if (Temp8 > ACPI_EINJ_ACTION_RESERVED)
+            {
+                Temp8 = ACPI_EINJ_ACTION_RESERVED;
+            }
+
+            AcpiOsPrintf ("%2.2X (%s)\n", *Target, AcpiDmEinjActions[Temp8]);
+            break;
+
+        case ACPI_DMT_EINJINST:
+
+            /* EINJ Instruction types */
+
+            Temp8 = *Target;
+            if (Temp8 > ACPI_EINJ_INSTRUCTION_RESERVED)
+            {
+                Temp8 = ACPI_EINJ_INSTRUCTION_RESERVED;
+            }
+
+            AcpiOsPrintf ("%2.2X (%s)\n", *Target, AcpiDmEinjInstructions[Temp8]);
+            break;
+
+        case ACPI_DMT_ERSTACT:
+
+            /* ERST Action types */
+
+            Temp8 = *Target;
+            if (Temp8 > ACPI_ERST_ACTION_RESERVED)
+            {
+                Temp8 = ACPI_ERST_ACTION_RESERVED;
+            }
+
+            AcpiOsPrintf ("%2.2X (%s)\n", *Target, AcpiDmErstActions[Temp8]);
+            break;
+
+        case ACPI_DMT_ERSTINST:
+
+            /* ERST Instruction types */
+
+            Temp8 = *Target;
+            if (Temp8 > ACPI_ERST_INSTRUCTION_RESERVED)
+            {
+                Temp8 = ACPI_ERST_INSTRUCTION_RESERVED;
+            }
+
+            AcpiOsPrintf ("%2.2X (%s)\n", *Target, AcpiDmErstInstructions[Temp8]);
+            break;
+
         case ACPI_DMT_HEST:
 
             /* HEST subtable types */
@@ -790,8 +1031,8 @@ AcpiDmDumpTable (
         case ACPI_DMT_HESTNTFY:
 
             AcpiOsPrintf ("<Hardware Error Notification Structure>\n");
-            AcpiDmDumpTable (ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Length,
-                CurrentOffset, Target, sizeof (ACPI_HEST_NOTIFY), AcpiDmTableInfoHestNotify);
+            AcpiDmDumpTable (TableLength, CurrentOffset, Target,
+                sizeof (ACPI_HEST_NOTIFY), AcpiDmTableInfoHestNotify);
             AcpiOsPrintf ("\n");
             LastOutputBlankLine = TRUE;
             break;
@@ -809,7 +1050,6 @@ AcpiDmDumpTable (
             AcpiOsPrintf ("%2.2X (%s)\n", *Target, AcpiDmHestNotifySubnames[Temp8]);
             break;
 
-
         case ACPI_DMT_MADT:
 
             /* MADT subtable types */
@@ -849,12 +1089,37 @@ AcpiDmDumpTable (
             AcpiOsPrintf ("%2.2X (%s)\n", *Target, AcpiDmFadtProfiles[Temp8]);
             break;
 
+        case ACPI_DMT_IVRS:
+
+            /* IVRS subtable types */
+
+            Temp8 = *Target;
+            switch (Temp8)
+            {
+            case ACPI_IVRS_TYPE_HARDWARE:
+                Name = AcpiDmIvrsSubnames[0];
+                break;
+
+            case ACPI_IVRS_TYPE_MEMORY1:
+            case ACPI_IVRS_TYPE_MEMORY2:
+            case ACPI_IVRS_TYPE_MEMORY3:
+                Name = AcpiDmIvrsSubnames[1];
+                break;
+
+            default:
+                Name = AcpiDmIvrsSubnames[2];
+                break;
+            }
+
+            AcpiOsPrintf ("%2.2X <%s>\n", *Target, Name);
+            break;
+
         case ACPI_DMT_EXIT:
             return (AE_OK);
 
         default:
             ACPI_ERROR ((AE_INFO,
-                "**** Invalid table opcode [%X] ****\n", Info->Opcode));
+                "**** Invalid table opcode [0x%X] ****\n", Info->Opcode));
             return (AE_SUPPORT);
         }
     }
@@ -888,6 +1153,7 @@ AcpiDmDumpTable (
 static void
 AcpiDmCheckAscii (
     UINT8                   *Name,
+    char                    *RepairedName,
     UINT32                  Count)
 {
     UINT32                  i;
@@ -895,9 +1161,15 @@ AcpiDmCheckAscii (
 
     for (i = 0; i < Count; i++)
     {
-        if (!Name[i] || !isprint (Name[i]))
+        RepairedName[i] = (char) Name[i];
+
+        if (!Name[i])
+        {
+            return;
+        }
+        if (!isprint (Name[i]))
         {
-            Name[i] = ' ';
+            RepairedName[i] = ' ';
         }
     }
 }
index a0b0d96..3da66be 100644 (file)
@@ -8,7 +8,7 @@
  *
  * 1. Copyright Notice
  *
- * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
  * All rights reserved.
  *
  * 2. License
         ACPI_MODULE_NAME    ("dmtbdump")
 
 
+static void
+AcpiDmValidateFadtLength (
+    UINT32                  Revision,
+    UINT32                  Length);
+
+
 /*******************************************************************************
  *
  * FUNCTION:    AcpiDmDumpRsdp
  *
  * PARAMETERS:  Table               - A RSDP
  *
- * RETURN:      Length of the table (there is no length field, use revision)
+ * RETURN:      Length of the table (there is not always a length field,
+ *              use revision or length if available (ACPI 2.0+))
  *
  * DESCRIPTION: Format the contents of a RSDP
  *
@@ -140,19 +147,42 @@ UINT32
 AcpiDmDumpRsdp (
     ACPI_TABLE_HEADER       *Table)
 {
-    UINT32                  Length = ACPI_RSDP_REV0_SIZE;
+    ACPI_TABLE_RSDP         *Rsdp = ACPI_CAST_PTR (ACPI_TABLE_RSDP, Table);
+    UINT32                  Length = sizeof (ACPI_RSDP_COMMON);
+    UINT8                   Checksum;
 
 
     /* Dump the common ACPI 1.0 portion */
 
     AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoRsdp1);
 
-    /* ACPI 2.0+ contains more data and has a Length field */
+    /* Validate the first checksum */
+
+    Checksum = AcpiDmGenerateChecksum (Rsdp, sizeof (ACPI_RSDP_COMMON),
+                Rsdp->Checksum);
+    if (Checksum != Rsdp->Checksum)
+    {
+        AcpiOsPrintf ("/* Incorrect Checksum above, should be 0x%2.2X */\n",
+            Checksum);
+    }
+
+    /* The RSDP for ACPI 2.0+ contains more data and has a Length field */
 
-    if (ACPI_CAST_PTR (ACPI_TABLE_RSDP, Table)->Revision > 0)
+    if (Rsdp->Revision > 0)
     {
-        Length = ACPI_CAST_PTR (ACPI_TABLE_RSDP, Table)->Length;
+        Length = Rsdp->Length;
         AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoRsdp2);
+
+        /* Validate the extended checksum over entire RSDP */
+
+        Checksum = AcpiDmGenerateChecksum (Rsdp, sizeof (ACPI_TABLE_RSDP),
+                    Rsdp->ExtendedChecksum);
+        if (Checksum != Rsdp->ExtendedChecksum)
+        {
+            AcpiOsPrintf (
+                "/* Incorrect Extended Checksum above, should be 0x%2.2X */\n",
+                Checksum);
+        }
     }
 
     return (Length);
@@ -249,6 +279,10 @@ AcpiDmDumpXsdt (
  *
  * DESCRIPTION: Format the contents of a FADT
  *
+ * NOTE:        We cannot depend on the FADT version to indicate the actual
+ *              contents of the FADT because of BIOS bugs. The table length
+ *              is the only reliable indicator.
+ *
  ******************************************************************************/
 
 void
@@ -256,20 +290,21 @@ AcpiDmDumpFadt (
     ACPI_TABLE_HEADER       *Table)
 {
 
-    /* Common ACPI 1.0 portion of FADT */
+    /* Always dump the minimum FADT revision 1 fields (ACPI 1.0) */
 
     AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt1);
 
-    /* Check for ACPI 1.0B MS extensions (FADT revision 2) */
+    /* Check for FADT revision 2 fields (ACPI 1.0B MS extensions) */
 
-    if (Table->Revision == 2)
+    if ((Table->Length > ACPI_FADT_V1_SIZE) &&
+        (Table->Length <= ACPI_FADT_V2_SIZE))
     {
         AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt2);
     }
 
-    /* Check for ACPI 2.0+ extended data (FADT revision 3+) */
+    /* Check for FADT revision 3 fields and up (ACPI 2.0+ extended data) */
 
-    else if (Table->Length >= sizeof (ACPI_TABLE_FADT))
+    else if (Table->Length > ACPI_FADT_V2_SIZE)
     {
         AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt3);
     }
@@ -277,6 +312,68 @@ AcpiDmDumpFadt (
     /* Validate various fields in the FADT, including length */
 
     AcpiTbCreateLocalFadt (Table, Table->Length);
+
+    /* Validate FADT length against the revision */
+
+    AcpiDmValidateFadtLength (Table->Revision, Table->Length);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiDmValidateFadtLength
+ *
+ * PARAMETERS:  Revision            - FADT revision (Header->Revision)
+ *              Length              - FADT length (Header->Length
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Check the FADT revision against the expected table length for
+ *              that revision. Issue a warning if the length is not what was
+ *              expected. This seems to be such a common BIOS bug that the
+ *              FADT revision has been rendered virtually meaningless.
+ *
+ ******************************************************************************/
+
+static void
+AcpiDmValidateFadtLength (
+    UINT32                  Revision,
+    UINT32                  Length)
+{
+    UINT32                  ExpectedLength;
+
+
+    switch (Revision)
+    {
+    case 0:
+        AcpiOsPrintf ("// ACPI Warning: Invalid FADT revision: 0\n");
+        return;
+
+    case 1:
+        ExpectedLength = ACPI_FADT_V1_SIZE;
+        break;
+
+    case 2:
+        ExpectedLength = ACPI_FADT_V2_SIZE;
+        break;
+
+    case 3:
+    case 4:
+        ExpectedLength = ACPI_FADT_V3_SIZE;
+        break;
+
+    default:
+        return;
+    }
+
+    if (Length == ExpectedLength)
+    {
+        return;
+    }
+
+    AcpiOsPrintf (
+        "\n// ACPI Warning: FADT revision %X does not match length: found %X expected %X\n",
+        Revision, Length, ExpectedLength);
 }
 
 
@@ -306,6 +403,7 @@ AcpiDmDumpAsf (
     UINT32                  DataLength = 0;
     UINT32                  DataOffset = 0;
     UINT32                  i;
+    UINT8                   Type;
 
 
     /* No main table, only sub-tables */
@@ -322,7 +420,11 @@ AcpiDmDumpAsf (
             return;
         }
 
-        switch (SubTable->Header.Type & 0x7F) /* Mask off top bit */
+        /* The actual type is the lower 7 bits of Type */
+
+        Type = (UINT8) (SubTable->Header.Type & 0x7F);
+
+        switch (Type)
         {
         case ACPI_ASF_TYPE_INFO:
             InfoTable = AcpiDmTableInfoAsf0;
@@ -332,8 +434,8 @@ AcpiDmDumpAsf (
             InfoTable = AcpiDmTableInfoAsf1;
             DataInfoTable = AcpiDmTableInfoAsf1a;
             DataTable = ACPI_ADD_PTR (UINT8, SubTable, sizeof (ACPI_ASF_ALERT));
-            DataCount = ((ACPI_ASF_ALERT *) SubTable)->Alerts;
-            DataLength = ((ACPI_ASF_ALERT *) SubTable)->DataLength;
+            DataCount = ACPI_CAST_PTR (ACPI_ASF_ALERT, SubTable)->Alerts;
+            DataLength = ACPI_CAST_PTR (ACPI_ASF_ALERT, SubTable)->DataLength;
             DataOffset = Offset + sizeof (ACPI_ASF_ALERT);
             break;
 
@@ -341,8 +443,8 @@ AcpiDmDumpAsf (
             InfoTable = AcpiDmTableInfoAsf2;
             DataInfoTable = AcpiDmTableInfoAsf2a;
             DataTable = ACPI_ADD_PTR (UINT8, SubTable, sizeof (ACPI_ASF_REMOTE));
-            DataCount = ((ACPI_ASF_REMOTE *) SubTable)->Controls;
-            DataLength = ((ACPI_ASF_REMOTE *) SubTable)->DataLength;
+            DataCount = ACPI_CAST_PTR (ACPI_ASF_REMOTE, SubTable)->Controls;
+            DataLength = ACPI_CAST_PTR (ACPI_ASF_REMOTE, SubTable)->DataLength;
             DataOffset = Offset + sizeof (ACPI_ASF_REMOTE);
             break;
 
@@ -353,12 +455,12 @@ AcpiDmDumpAsf (
         case ACPI_ASF_TYPE_ADDRESS:
             InfoTable = AcpiDmTableInfoAsf4;
             DataTable = ACPI_ADD_PTR (UINT8, SubTable, sizeof (ACPI_ASF_ADDRESS));
-            DataLength = ((ACPI_ASF_ADDRESS *) SubTable)->Devices;
+            DataLength = ACPI_CAST_PTR (ACPI_ASF_ADDRESS, SubTable)->Devices;
             DataOffset = Offset + sizeof (ACPI_ASF_ADDRESS);
             break;
 
         default:
-            AcpiOsPrintf ("\n**** Unknown ASF sub-table type %X\n", SubTable->Header.Type);
+            AcpiOsPrintf ("\n**** Unknown ASF sub-table type 0x%X\n", SubTable->Header.Type);
             return;
         }
 
@@ -371,7 +473,7 @@ AcpiDmDumpAsf (
 
         /* Dump variable-length extra data */
 
-        switch (SubTable->Header.Type & 0x7F) /* Mask off top bit */
+        switch (Type)
         {
         case ACPI_ASF_TYPE_ALERT:
         case ACPI_ASF_TYPE_CONTROL:
@@ -471,7 +573,7 @@ AcpiDmDumpCpep (
     {
         AcpiOsPrintf ("\n");
         Status = AcpiDmDumpTable (Length, Offset, SubTable,
-                    SubTable->Length, AcpiDmTableInfoCpep0);
+                    SubTable->Header.Length, AcpiDmTableInfoCpep0);
         if (ACPI_FAILURE (Status))
         {
             return;
@@ -479,8 +581,9 @@ AcpiDmDumpCpep (
 
         /* Point to next sub-table */
 
-        Offset += SubTable->Length;
-        SubTable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, SubTable, SubTable->Length);
+        Offset += SubTable->Header.Length;
+        SubTable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, SubTable,
+                    SubTable->Header.Length);
     }
 }
 
@@ -550,8 +653,12 @@ AcpiDmDumpDmar (
             InfoTable = AcpiDmTableInfoDmar2;
             ScopeOffset = sizeof (ACPI_DMAR_ATSR);
             break;
+        case ACPI_DMAR_HARDWARE_AFFINITY:
+            InfoTable = AcpiDmTableInfoDmar3;
+            ScopeOffset = sizeof (ACPI_DMAR_RHSA);
+            break;
         default:
-            AcpiOsPrintf ("\n**** Unknown DMAR sub-table type %X\n\n", SubTable->Type);
+            AcpiOsPrintf ("\n**** Unknown DMAR sub-table type 0x%X\n\n", SubTable->Type);
             return;
         }
 
@@ -585,7 +692,7 @@ AcpiDmDumpDmar (
             while (PathOffset < ScopeTable->Length)
             {
                 AcpiDmLineHeader ((PathOffset + ScopeOffset + Offset), 2, "PCI Path");
-                AcpiOsPrintf ("[%2.2X, %2.2X]\n", PciPath[0], PciPath[1]);
+                AcpiOsPrintf ("%2.2X,%2.2X\n", PciPath[0], PciPath[1]);
 
                 /* Point to next PCI Path entry */
 
@@ -699,7 +806,7 @@ AcpiDmDumpErst (
     {
         AcpiOsPrintf ("\n");
         Status = AcpiDmDumpTable (Length, Offset, SubTable,
-                    sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoEinj0);
+                    sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoErst0);
         if (ACPI_FAILURE (Status))
         {
             return;
@@ -737,6 +844,8 @@ AcpiDmDumpHest (
     UINT32                  Offset = sizeof (ACPI_TABLE_HEST);
     ACPI_DMTABLE_INFO       *InfoTable;
     UINT32                  SubTableLength;
+    UINT32                  BankCount;
+    ACPI_HEST_IA_ERROR_BANK *BankTable;
 
 
     /* Main table */
@@ -752,31 +861,26 @@ AcpiDmDumpHest (
     SubTable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Table, Offset);
     while (Offset < Table->Length)
     {
+        BankCount = 0;
         switch (SubTable->Type)
         {
-        case ACPI_HEST_TYPE_XPF_MACHINE_CHECK:
+        case ACPI_HEST_TYPE_IA32_CHECK:
             InfoTable = AcpiDmTableInfoHest0;
-            SubTableLength = sizeof (ACPI_HEST_XPF_MACHINE_CHECK);
+            SubTableLength = sizeof (ACPI_HEST_IA_MACHINE_CHECK);
+            BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_MACHINE_CHECK,
+                            SubTable))->NumHardwareBanks;
             break;
 
-        case ACPI_HEST_TYPE_XPF_CORRECTED_MACHINE_CHECK:
+        case ACPI_HEST_TYPE_IA32_CORRECTED_CHECK:
             InfoTable = AcpiDmTableInfoHest1;
-            SubTableLength = sizeof (ACPI_HEST_XPF_CORRECTED);
+            SubTableLength = sizeof (ACPI_HEST_IA_CORRECTED);
+            BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_CORRECTED,
+                            SubTable))->NumHardwareBanks;
             break;
 
-        case ACPI_HEST_TYPE_XPF_NON_MASKABLE_INTERRUPT:
-            InfoTable = AcpiDmTableInfoHest3;
-            SubTableLength = sizeof (ACPI_HEST_XPF_NMI);
-            break;
-
-        case ACPI_HEST_TYPE_IPF_CORRECTED_MACHINE_CHECK:
-            InfoTable = AcpiDmTableInfoHest4;
-            SubTableLength = sizeof (ACPI_HEST_IPF_CORRECTED);
-            break;
-
-        case ACPI_HEST_TYPE_IPF_CORRECTED_PLATFORM_ERROR:
-            InfoTable = AcpiDmTableInfoHest5;
-            SubTableLength = sizeof (ACPI_HEST_IPF_CORRECTED_PLATFORM);
+        case ACPI_HEST_TYPE_IA32_NMI:
+            InfoTable = AcpiDmTableInfoHest2;
+            SubTableLength = sizeof (ACPI_HEST_IA_NMI);
             break;
 
         case ACPI_HEST_TYPE_AER_ROOT_PORT:
@@ -794,7 +898,7 @@ AcpiDmDumpHest (
             SubTableLength = sizeof (ACPI_HEST_AER_BRIDGE);
             break;
 
-        case ACPI_HEST_TYPE_GENERIC_HARDWARE_ERROR_SOURCE:
+        case ACPI_HEST_TYPE_GENERIC_ERROR:
             InfoTable = AcpiDmTableInfoHest9;
             SubTableLength = sizeof (ACPI_HEST_GENERIC);
             break;
@@ -802,7 +906,7 @@ AcpiDmDumpHest (
         default:
             /* Cannot continue on unknown type - no length */
 
-            AcpiOsPrintf ("\n**** Unknown HEST sub-table type %X\n", SubTable->Type);
+            AcpiOsPrintf ("\n**** Unknown HEST sub-table type 0x%X\n", SubTable->Type);
             return;
         }
 
@@ -814,14 +918,212 @@ AcpiDmDumpHest (
             return;
         }
 
-        /* Point to next sub-table (each subtable is of fixed length) */
+        /* Point to end of current subtable (each subtable above is of fixed length) */
 
         Offset += SubTableLength;
+
+        /* If there are any (fixed-length) Error Banks from above, dump them now */
+
+        if (BankCount)
+        {
+            BankTable = ACPI_ADD_PTR (ACPI_HEST_IA_ERROR_BANK, SubTable, SubTableLength);
+            SubTableLength += BankCount * sizeof (ACPI_HEST_IA_ERROR_BANK);
+
+            while (BankCount)
+            {
+                AcpiOsPrintf ("\n");
+                Status = AcpiDmDumpTable (Length, Offset, BankTable,
+                            sizeof (ACPI_HEST_IA_ERROR_BANK), AcpiDmTableInfoHestBank);
+                if (ACPI_FAILURE (Status))
+                {
+                    return;
+                }
+                Offset += sizeof (ACPI_HEST_IA_ERROR_BANK);
+                BankTable++;
+                BankCount--;
+            }
+        }
+
+        /* Point to next sub-table */
+
         SubTable = ACPI_ADD_PTR (ACPI_HEST_HEADER, SubTable, SubTableLength);
     }
 }
 
 
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiDmDumpIvrs
+ *
+ * PARAMETERS:  Table               - A IVRS table
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Format the contents of a IVRS
+ *
+ ******************************************************************************/
+
+static UINT8 EntrySizes[] = {4,8,16,32};
+
+void
+AcpiDmDumpIvrs (
+    ACPI_TABLE_HEADER       *Table)
+{
+    ACPI_STATUS             Status;
+    UINT32                  Offset = sizeof (ACPI_TABLE_IVRS);
+    UINT32                  EntryOffset;
+    UINT32                  EntryLength;
+    UINT32                  EntryType;
+    ACPI_IVRS_DE_HEADER     *DeviceEntry;
+    ACPI_IVRS_HEADER        *SubTable;
+    ACPI_DMTABLE_INFO       *InfoTable;
+
+
+    /* Main table */
+
+    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIvrs);
+    if (ACPI_FAILURE (Status))
+    {
+        return;
+    }
+
+    /* Sub-tables */
+
+    SubTable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset);
+    while (Offset < Table->Length)
+    {
+        /* Common sub-table header */
+
+        AcpiOsPrintf ("\n");
+        Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
+                    SubTable->Length, AcpiDmTableInfoIvrsHdr);
+        if (ACPI_FAILURE (Status))
+        {
+            return;
+        }
+
+        switch (SubTable->Type)
+        {
+        case ACPI_IVRS_TYPE_HARDWARE:
+            InfoTable = AcpiDmTableInfoIvrs0;
+            break;
+        case ACPI_IVRS_TYPE_MEMORY1:
+        case ACPI_IVRS_TYPE_MEMORY2:
+        case ACPI_IVRS_TYPE_MEMORY3:
+            InfoTable = AcpiDmTableInfoIvrs1;
+            break;
+        default:
+            AcpiOsPrintf ("\n**** Unknown IVRS sub-table type 0x%X\n",
+                SubTable->Type);
+
+            /* Attempt to continue */
+
+            if (!SubTable->Length)
+            {
+                AcpiOsPrintf ("Invalid zero length subtable\n");
+                return;
+            }
+            goto NextSubTable;
+        }
+
+        /* Dump the subtable */
+
+        AcpiOsPrintf ("\n");
+        Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
+                    SubTable->Length, InfoTable);
+        if (ACPI_FAILURE (Status))
+        {
+            return;
+        }
+
+        /* The hardware subtable can contain multiple device entries */
+
+        if (SubTable->Type == ACPI_IVRS_TYPE_HARDWARE)
+        {
+            EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE);
+            DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, SubTable,
+                            sizeof (ACPI_IVRS_HARDWARE));
+
+            while (EntryOffset < (Offset + SubTable->Length))
+            {
+                AcpiOsPrintf ("\n");
+                /*
+                 * Upper 2 bits of Type encode the length of the device entry
+                 *
+                 * 00 = 4 byte
+                 * 01 = 8 byte
+                 * 10 = 16 byte - currently no entries defined
+                 * 11 = 32 byte - currently no entries defined
+                 */
+                EntryType = DeviceEntry->Type;
+                EntryLength = EntrySizes [EntryType >> 6];
+
+                switch (EntryType)
+                {
+                /* 4-byte device entries */
+
+                case ACPI_IVRS_TYPE_PAD4:
+                case ACPI_IVRS_TYPE_ALL:
+                case ACPI_IVRS_TYPE_SELECT:
+                case ACPI_IVRS_TYPE_START:
+                case ACPI_IVRS_TYPE_END:
+
+                    InfoTable = AcpiDmTableInfoIvrs4;
+                    break;
+
+                /* 8-byte entries, type A */
+
+                case ACPI_IVRS_TYPE_ALIAS_SELECT:
+                case ACPI_IVRS_TYPE_ALIAS_START:
+
+                    InfoTable = AcpiDmTableInfoIvrs8a;
+                    break;
+
+                /* 8-byte entries, type B */
+
+                case ACPI_IVRS_TYPE_PAD8:
+                case ACPI_IVRS_TYPE_EXT_SELECT:
+                case ACPI_IVRS_TYPE_EXT_START:
+
+                    InfoTable = AcpiDmTableInfoIvrs8b;
+                    break;
+
+                /* 8-byte entries, type C */
+
+                case ACPI_IVRS_TYPE_SPECIAL:
+
+                    InfoTable = AcpiDmTableInfoIvrs8c;
+                    break;
+
+                default:
+                    InfoTable = AcpiDmTableInfoIvrs4;
+                    AcpiOsPrintf (
+                        "\n**** Unknown IVRS device entry type/length: "
+                        "0x%.2X/0x%X at offset 0x%.4X: (header below)\n",
+                        EntryType, EntryLength, EntryOffset);
+                    break;
+                }
+
+                /* Dump the Device Entry */
+
+                Status = AcpiDmDumpTable (Table->Length, EntryOffset,
+                            DeviceEntry, EntryLength, InfoTable);
+
+                EntryOffset += EntryLength;
+                DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, DeviceEntry,
+                                EntryLength);
+            }
+        }
+
+NextSubTable:
+        /* Point to next sub-table */
+
+        Offset += SubTable->Length;
+        SubTable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, SubTable, SubTable->Length);
+    }
+}
+
+
 /*******************************************************************************
  *
  * FUNCTION:    AcpiDmDumpMadt
@@ -905,7 +1207,7 @@ AcpiDmDumpMadt (
             InfoTable = AcpiDmTableInfoMadt10;
             break;
         default:
-            AcpiOsPrintf ("\n**** Unknown MADT sub-table type %X\n\n", SubTable->Type);
+            AcpiOsPrintf ("\n**** Unknown MADT sub-table type 0x%X\n\n", SubTable->Type);
 
             /* Attempt to continue */
 
@@ -969,7 +1271,7 @@ AcpiDmDumpMcfg (
     {
         if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > Table->Length)
         {
-            AcpiOsPrintf ("Warning: there are %d invalid trailing bytes\n",
+            AcpiOsPrintf ("Warning: there are %u invalid trailing bytes\n",
                 sizeof (ACPI_MCFG_ALLOCATION) - (Offset - Table->Length));
             return;
         }
@@ -991,6 +1293,58 @@ AcpiDmDumpMcfg (
 }
 
 
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiDmDumpMsct
+ *
+ * PARAMETERS:  Table               - A MSCT table
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Format the contents of a MSCT
+ *
+ ******************************************************************************/
+
+void
+AcpiDmDumpMsct (
+    ACPI_TABLE_HEADER       *Table)
+{
+    ACPI_STATUS             Status;
+    UINT32                  Offset = sizeof (ACPI_TABLE_MSCT);
+    ACPI_MSCT_PROXIMITY     *SubTable;
+
+
+    /* Main table */
+
+    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMsct);
+    if (ACPI_FAILURE (Status))
+    {
+        return;
+    }
+
+    /* Sub-tables */
+
+    SubTable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Table, Offset);
+    while (Offset < Table->Length)
+    {
+        /* Common sub-table header */
+
+        AcpiOsPrintf ("\n");
+        Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
+                    sizeof (ACPI_MSCT_PROXIMITY), AcpiDmTableInfoMsct0);
+        if (ACPI_FAILURE (Status))
+        {
+            return;
+        }
+
+        /* Point to next sub-table */
+
+        Offset += sizeof (ACPI_MSCT_PROXIMITY);
+        SubTable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, SubTable, sizeof (ACPI_MSCT_PROXIMITY));
+    }
+}
+
+
 /*******************************************************************************
  *
  * FUNCTION:    AcpiDmDumpSlit
@@ -1044,15 +1398,20 @@ AcpiDmDumpSlit (
                 return;
             }
 
-            AcpiOsPrintf ("%2.2X ", Row[j]);
+            AcpiOsPrintf ("%2.2X", Row[j]);
             Offset++;
 
             /* Display up to 16 bytes per output row */
 
-            if (j && (((j+1) % 16) == 0) && ((j+1) < Localities))
+            if ((j+1) < Localities)
             {
-                AcpiOsPrintf ("\n");
-                AcpiDmLineHeader (Offset, 0, "");
+                AcpiOsPrintf (",");
+
+                if (j && (((j+1) % 16) == 0))
+                {
+                    AcpiOsPrintf ("\n");
+                    AcpiDmLineHeader (Offset, 0, "");
+                }
             }
         }
 
@@ -1121,7 +1480,7 @@ AcpiDmDumpSrat (
             InfoTable = AcpiDmTableInfoSrat2;
             break;
         default:
-            AcpiOsPrintf ("\n**** Unknown SRAT sub-table type %X\n", SubTable->Type);
+            AcpiOsPrintf ("\n**** Unknown SRAT sub-table type 0x%X\n", SubTable->Type);
 
             /* Attempt to continue */
 
@@ -1149,3 +1508,54 @@ NextSubTable:
     }
 }
 
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiDmDumpWdat
+ *
+ * PARAMETERS:  Table               - A WDAT table
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Format the contents of a WDAT
+ *
+ ******************************************************************************/
+
+void
+AcpiDmDumpWdat (
+    ACPI_TABLE_HEADER       *Table)
+{
+    ACPI_STATUS             Status;
+    UINT32                  Offset = sizeof (ACPI_TABLE_WDAT);
+    ACPI_WDAT_ENTRY         *SubTable;
+
+
+    /* Main table */
+
+    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoWdat);
+    if (ACPI_FAILURE (Status))
+    {
+        return;
+    }
+
+    /* Sub-tables */
+
+    SubTable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Table, Offset);
+    while (Offset < Table->Length)
+    {
+        /* Common sub-table header */
+
+        AcpiOsPrintf ("\n");
+        Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
+                    sizeof (ACPI_WDAT_ENTRY), AcpiDmTableInfoWdat0);
+        if (ACPI_FAILURE (Status))
+        {
+            return;
+        }
+
+        /* Point to next sub-table */
+
+        Offset += sizeof (ACPI_WDAT_ENTRY);
+        SubTable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, SubTable, sizeof (ACPI_WDAT_ENTRY));
+    }
+}
index 3574a2a..51c31a9 100644 (file)
@@ -8,7 +8,7 @@
  *
  * 1. Copyright Notice
  *
- * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
  * All rights reserved.
  *
  * 2. License