kernel: Sync ACPICA with Intel's version 20140627.
authorSascha Wildner <saw@online.de>
Sat, 28 Jun 2014 11:14:15 +0000 (13:14 +0200)
committerSascha Wildner <saw@online.de>
Sat, 28 Jun 2014 11:15:59 +0000 (13:15 +0200)
* Various bug fixes and enhancements (see changes.txt).

* Use new local printf() like functions for the utilities.

* Use new AcpiLogError for portability.

This that are also changed/new but it don't affect DragonFly so far:

* Support for ACPICA generation within the EFI environment.

* New OSL file I/O interface.

* New global AcpiGbl_VerifyTableChecksum.

For a more detailed list, please see sys/contrib/dev/acpica/changes.txt.

89 files changed:
sys/contrib/dev/acpica/Makefile
sys/contrib/dev/acpica/changes.txt
sys/contrib/dev/acpica/generate/unix/acpibin/Makefile
sys/contrib/dev/acpica/generate/unix/acpidump/Makefile
sys/contrib/dev/acpica/generate/unix/acpiexamples/Makefile
sys/contrib/dev/acpica/generate/unix/acpiexec/Makefile
sys/contrib/dev/acpica/generate/unix/acpihelp/Makefile
sys/contrib/dev/acpica/generate/unix/acpinames/Makefile
sys/contrib/dev/acpica/generate/unix/acpisrc/Makefile
sys/contrib/dev/acpica/generate/unix/acpixtract/Makefile
sys/contrib/dev/acpica/generate/unix/iasl/Makefile
sys/contrib/dev/acpica/source/common/ahpredef.c
sys/contrib/dev/acpica/source/common/cmfsize.c
sys/contrib/dev/acpica/source/common/getopt.c
sys/contrib/dev/acpica/source/compiler/aslanalyze.c
sys/contrib/dev/acpica/source/compiler/aslcompiler.h
sys/contrib/dev/acpica/source/compiler/aslmain.c
sys/contrib/dev/acpica/source/compiler/aslmessages.c
sys/contrib/dev/acpica/source/compiler/aslmessages.h
sys/contrib/dev/acpica/source/compiler/aslmethod.c
sys/contrib/dev/acpica/source/compiler/asloptions.c
sys/contrib/dev/acpica/source/compiler/aslstubs.c
sys/contrib/dev/acpica/source/components/debugger/dbfileio.c
sys/contrib/dev/acpica/source/components/debugger/dbtest.c
sys/contrib/dev/acpica/source/components/disassembler/dmbuffer.c
sys/contrib/dev/acpica/source/components/disassembler/dmwalk.c
sys/contrib/dev/acpica/source/components/executer/exfield.c
sys/contrib/dev/acpica/source/components/hardware/hwregs.c
sys/contrib/dev/acpica/source/components/namespace/nsobject.c
sys/contrib/dev/acpica/source/components/tables/tbdata.c
sys/contrib/dev/acpica/source/components/tables/tbinstal.c
sys/contrib/dev/acpica/source/components/tables/tbutils.c
sys/contrib/dev/acpica/source/components/utilities/utbuffer.c
sys/contrib/dev/acpica/source/components/utilities/utclib.c
sys/contrib/dev/acpica/source/components/utilities/utcopy.c
sys/contrib/dev/acpica/source/components/utilities/utdebug.c
sys/contrib/dev/acpica/source/components/utilities/utfileio.c [copied from sys/contrib/dev/acpica/source/components/debugger/dbfileio.c with 60% similarity]
sys/contrib/dev/acpica/source/components/utilities/utglobal.c
sys/contrib/dev/acpica/source/components/utilities/utinit.c
sys/contrib/dev/acpica/source/components/utilities/utprint.c [new file with mode: 0644]
sys/contrib/dev/acpica/source/include/acapps.h
sys/contrib/dev/acpica/source/include/acdebug.h
sys/contrib/dev/acpica/source/include/acglobal.h
sys/contrib/dev/acpica/source/include/acnames.h
sys/contrib/dev/acpica/source/include/acpi.h
sys/contrib/dev/acpica/source/include/acpiosxf.h
sys/contrib/dev/acpica/source/include/acpixf.h
sys/contrib/dev/acpica/source/include/acpredef.h
sys/contrib/dev/acpica/source/include/actables.h
sys/contrib/dev/acpica/source/include/actypes.h
sys/contrib/dev/acpica/source/include/acutils.h
sys/contrib/dev/acpica/source/include/platform/accygwin.h
sys/contrib/dev/acpica/source/include/platform/acefi.h
sys/contrib/dev/acpica/source/include/platform/acenv.h
sys/contrib/dev/acpica/source/include/platform/acenvex.h [copied from sys/contrib/dev/acpica/source/include/platform/acefi.h with 72% similarity]
sys/contrib/dev/acpica/source/include/platform/aclinux.h
sys/contrib/dev/acpica/source/include/platform/aclinuxex.h [new file with mode: 0644]
sys/contrib/dev/acpica/source/os_specific/service_layers/osefitbl.c [copied from sys/contrib/dev/acpica/source/os_specific/service_layers/oslinuxtbl.c with 66% similarity]
sys/contrib/dev/acpica/source/os_specific/service_layers/osefixf.c [new file with mode: 0644]
sys/contrib/dev/acpica/source/os_specific/service_layers/oslibcfs.c [new file with mode: 0644]
sys/contrib/dev/acpica/source/os_specific/service_layers/oslinuxtbl.c
sys/contrib/dev/acpica/source/os_specific/service_layers/osunixxf.c
sys/contrib/dev/acpica/source/os_specific/service_layers/oswinxf.c
sys/contrib/dev/acpica/source/tools/acpibin/abcompare.c
sys/contrib/dev/acpica/source/tools/acpibin/abmain.c
sys/contrib/dev/acpica/source/tools/acpidump/acpidump.h
sys/contrib/dev/acpica/source/tools/acpidump/apdump.c
sys/contrib/dev/acpica/source/tools/acpidump/apfiles.c
sys/contrib/dev/acpica/source/tools/acpidump/apmain.c
sys/contrib/dev/acpica/source/tools/acpiexec/aehandlers.c
sys/contrib/dev/acpica/source/tools/acpiexec/aemain.c
sys/contrib/dev/acpica/source/tools/acpiexec/aetables.c
sys/contrib/dev/acpica/source/tools/acpihelp/ahmain.c
sys/contrib/dev/acpica/source/tools/acpinames/anmain.c
sys/contrib/dev/acpica/source/tools/acpinames/anstubs.c
sys/contrib/dev/acpica/source/tools/acpinames/antables.c
sys/contrib/dev/acpica/source/tools/acpisrc/asmain.c
sys/contrib/dev/acpica/source/tools/acpisrc/astable.c
sys/contrib/dev/acpica/source/tools/acpixtract/axmain.c
sys/contrib/dev/acpica/source/tools/examples/examples.c
sys/contrib/dev/acpica/source/tools/examples/exstubs.c
sys/contrib/dev/acpica/source/tools/examples/extables.c
usr.sbin/acpi/acpibin/Makefile
usr.sbin/acpi/acpidump/Makefile
usr.sbin/acpi/acpiexec/Makefile
usr.sbin/acpi/acpihelp/Makefile
usr.sbin/acpi/acpinames/Makefile
usr.sbin/acpi/acpixtract/Makefile
usr.sbin/acpi/iasl/Makefile

index 5ee33d7..80bf379 100644 (file)
 # code directories. This prevents collisions between different
 # compilations of the same source file with different compile options.
 #
-BUILD_DIRECTORY_PATH = "generate/unix"
 
-include generate/unix/Makefile.config
-include generate/unix/Makefile.common
+ifeq ($(OS),efi)
+       BUILD_DIRECTORY_PATH = "generate/efi"
+       include generate/efi/Makefile.config
+       include generate/efi/Makefile.common
+else
+       BUILD_DIRECTORY_PATH = "generate/unix"
+       include generate/unix/Makefile.config
+       include generate/unix/Makefile.common
+endif
index e93fc4d..3acf4fd 100644 (file)
@@ -1,3 +1,104 @@
+----------------------------------------
+27 June 2014. Summary of changes for version 20140627:
+
+1) ACPICA kernel-resident subsystem:
+
+Formatted Output: Implemented local versions of standard formatted output 
+utilities such as printf, etc. Over time, it has been discovered that 
+there are in fact many portability issues with printf, and the addition 
+of this feature will fix/prevent these issues once and for all. Some 
+known issues are summarized below:
+
+1) Output of 64-bit values is not portable. For example, UINT64 is %ull 
+for the Linux kernel and is %uI64 for some MSVC versions.
+2) Invoking printf consistently in a manner that is portable across both 
+32-bit and 64-bit platforms is difficult at best in many situations.
+3) The output format for pointers varies from system to system (leading 
+zeros especially), and leads to inconsistent output from ACPICA across 
+platforms.
+4) Certain platform-specific printf formats may conflict with ACPICA use.
+5) If there is no local C library available, ACPICA now has local support 
+for printf.
+
+-- To address these printf issues in a complete manner, ACPICA now 
+directly implements a small subset of printf format specifiers, only 
+those that it requires. Adds a new file, utilities/utprint.c. Lv Zheng.
+
+Implemented support for ACPICA generation within the EFI environment. 
+Initially, the AcpiDump utility is supported in the UEFI shell 
+environment. Lv Zheng.
+
+Added a new external interface, AcpiLogError, to improve ACPICA 
+portability. This allows the host to redirect error messages from the 
+ACPICA utilities. Lv Zheng.
+
+Added and deployed new OSL file I/O interfaces to improve ACPICA 
+portability:
+  AcpiOsOpenFile
+  AcpiOsCloseFile
+  AcpiOsReadFile
+  AcpiOsWriteFile
+  AcpiOsGetFileOffset
+  AcpiOsSetFileOffset
+There are C library implementations of these functions in the new file 
+service_layers/oslibcfs.c -- however, the functions can be implemented by 
+the local host in any way necessary. Lv Zheng.
+
+Implemented a mechanism to disable/enable ACPI table checksum validation 
+at runtime. This can be useful when loading tables very early during OS 
+initialization when it may not be possible to map the entire table in 
+order to compute the checksum. Lv Zheng.
+
+Fixed a buffer allocation issue for the Generic Serial Bus support. 
+Originally, a fixed buffer length was used. This change allows for 
+variable-length buffers based upon the protocol indicated by the field 
+access attributes. Reported by Lan Tianyu. Lv Zheng.
+
+Fixed a problem where an object detached from a namespace node was not 
+properly terminated/cleared and could cause a circular list problem if 
+reattached. ACPICA BZ 1063. David Box.
+
+Fixed a possible recursive lock acquisition in hwregs.c. Rakib Mullick.
+
+Fixed a possible memory leak in an error return path within the function 
+AcpiUtCopyIobjectToIobject. ACPICA BZ 1087. Colin Ian King.
+
+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.
+
+  Current Release:
+    Non-Debug Version:  98.7K Code, 27.2K Data, 125.9K Total
+    Debug Version:     191.7K Code, 79.6K Data, 271.3K Total
+  Previous Release:
+    Non-Debug Version:  96.8K Code, 27.2K Data, 124.0K Total
+    Debug Version:     189.5K Code, 79.7K Data, 269.2K Total
+
+
+2) iASL Compiler/Disassembler and Tools:
+
+Disassembler: Add dump of ASCII equivalent text within a comment at the 
+end of each line of the output for the Buffer() ASL operator.
+
+AcpiDump: Miscellaneous changes:
+  Fixed repetitive table dump in -n mode.
+  For older EFI platforms, use the ACPI 1.0 GUID during RSDP search if 
+the ACPI 2.0 GUID fails.
+
+iASL: Fixed a problem where the compiler could fault if incorrectly given 
+an acpidump output file as input. ACPICA BZ 1088. David Box.
+
+AcpiExec/AcpiNames: Fixed a problem where these utilities could fault if 
+they are invoked without any arguments.
+
+Debugger: Fixed a possible memory leak in an error return path. ACPICA BZ 
+1086. Colin Ian King.
+
+Disassembler: Cleaned up a block of code that extracts a parent Op 
+object. Added a comment that explains that the parent is guaranteed to be 
+valid in this case. ACPICA BZ 1069.
+
 ----------------------------------------
 24 April 2014. Summary of changes for version 20140424:
 
index c33c085..1be484d 100644 (file)
@@ -34,6 +34,7 @@ OBJECTS = \
        $(OBJDIR)/utalloc.o\
        $(OBJDIR)/utbuffer.o\
        $(OBJDIR)/utcache.o\
+       $(OBJDIR)/utdebug.o\
        $(OBJDIR)/utdecode.o\
        $(OBJDIR)/utexcep.o\
        $(OBJDIR)/utglobal.o\
@@ -41,9 +42,11 @@ OBJECTS = \
        $(OBJDIR)/utmath.o\
        $(OBJDIR)/utmisc.o\
        $(OBJDIR)/utmutex.o\
+       $(OBJDIR)/utprint.o\
        $(OBJDIR)/utstate.o\
        $(OBJDIR)/utstring.o\
        $(OBJDIR)/utxferror.o\
+       $(OBJDIR)/oslibcfs.o\
        $(OBJDIR)/osunixxf.o
 
 #
index 8a9cda5..64256ea 100644 (file)
@@ -33,13 +33,18 @@ OBJECTS = \
        $(OBJDIR)/apmain.o\
        $(OBJDIR)/cmfsize.o\
        $(OBJDIR)/getopt.o\
+       $(OBJDIR)/oslibcfs.o\
        $(OBJDIR)/osunixdir.o\
        $(OBJDIR)/osunixmap.o\
+       $(OBJDIR)/osunixxf.o\
        $(OBJDIR)/tbprint.o\
        $(OBJDIR)/tbxfroot.o\
        $(OBJDIR)/utbuffer.o\
+       $(OBJDIR)/utdebug.o\
        $(OBJDIR)/utexcep.o\
+       $(OBJDIR)/utglobal.o\
        $(OBJDIR)/utmath.o\
+       $(OBJDIR)/utprint.o\
        $(OBJDIR)/utstring.o\
        $(OBJDIR)/utxferror.o
 
index c2f3c73..8bcdb9b 100644 (file)
@@ -20,9 +20,10 @@ PROG = $(OBJDIR)/acpiexamples
 #
 vpath %.c \
     $(ACPIEXAMPLES)\
-    $(ACPICA_DEBUGGER)\
     $(ACPICA_DISPATCHER)\
+    $(ACPICA_EVENTS)\
     $(ACPICA_EXECUTER)\
+    $(ACPICA_HARDWARE)\
     $(ACPICA_NAMESPACE)\
     $(ACPICA_PARSER)\
     $(ACPICA_TABLES)\
@@ -51,6 +52,12 @@ OBJECTS = \
        $(OBJDIR)/dswload2.o\
        $(OBJDIR)/dswscope.o\
        $(OBJDIR)/dswstate.o\
+       $(OBJDIR)/evhandler.o\
+       $(OBJDIR)/evmisc.o\
+       $(OBJDIR)/evregion.o\
+       $(OBJDIR)/evrgnini.o\
+       $(OBJDIR)/evxface.o\
+       $(OBJDIR)/evxfregn.o\
        $(OBJDIR)/exconfig.o\
        $(OBJDIR)/exconvrt.o\
        $(OBJDIR)/excreate.o\
@@ -75,8 +82,10 @@ OBJECTS = \
        $(OBJDIR)/exstorob.o\
        $(OBJDIR)/exsystem.o\
        $(OBJDIR)/exutils.o\
+       $(OBJDIR)/hwpci.o\
        $(OBJDIR)/nsaccess.o\
        $(OBJDIR)/nsalloc.o\
+       $(OBJDIR)/nsarguments.o\
        $(OBJDIR)/nsconvert.o\
        $(OBJDIR)/nsdump.o\
        $(OBJDIR)/nseval.o\
@@ -85,12 +94,17 @@ OBJECTS = \
        $(OBJDIR)/nsnames.o\
        $(OBJDIR)/nsobject.o\
        $(OBJDIR)/nsparse.o\
+       $(OBJDIR)/nspredef.o\
+       $(OBJDIR)/nsprepkg.o\
+       $(OBJDIR)/nsrepair.o\
+       $(OBJDIR)/nsrepair2.o\
        $(OBJDIR)/nssearch.o\
        $(OBJDIR)/nsutils.o\
        $(OBJDIR)/nswalk.o\
        $(OBJDIR)/nsxfeval.o\
        $(OBJDIR)/nsxfname.o\
        $(OBJDIR)/nsxfobj.o\
+       $(OBJDIR)/oslibcfs.o\
        $(OBJDIR)/osunixxf.o\
        $(OBJDIR)/psargs.o\
        $(OBJDIR)/psloop.o\
@@ -121,8 +135,11 @@ OBJECTS = \
        $(OBJDIR)/utdecode.o\
        $(OBJDIR)/utdelete.o\
        $(OBJDIR)/uterror.o\
+       $(OBJDIR)/uteval.o\
        $(OBJDIR)/utexcep.o\
        $(OBJDIR)/utglobal.o\
+       $(OBJDIR)/utids.o\
+       $(OBJDIR)/utinit.o\
        $(OBJDIR)/utlock.o\
        $(OBJDIR)/utmath.o\
        $(OBJDIR)/utmisc.o\
@@ -130,6 +147,9 @@ OBJECTS = \
        $(OBJDIR)/utobject.o\
        $(OBJDIR)/utosi.o\
        $(OBJDIR)/utownerid.o\
+       $(OBJDIR)/utpredef.o\
+       $(OBJDIR)/utprint.o\
+       $(OBJDIR)/utresrc.o\
        $(OBJDIR)/utstate.o\
        $(OBJDIR)/utstring.o\
        $(OBJDIR)/utxface.o\
index 84cc978..6c5c632 100644 (file)
@@ -155,6 +155,7 @@ OBJECTS = \
        $(OBJDIR)/nsxfeval.o\
        $(OBJDIR)/nsxfname.o\
        $(OBJDIR)/nsxfobj.o\
+       $(OBJDIR)/oslibcfs.o\
        $(OBJDIR)/osunixxf.o\
        $(OBJDIR)/psargs.o\
        $(OBJDIR)/psloop.o\
@@ -201,6 +202,7 @@ OBJECTS = \
        $(OBJDIR)/uterror.o\
        $(OBJDIR)/uteval.o\
        $(OBJDIR)/utexcep.o\
+       $(OBJDIR)/utfileio.o\
        $(OBJDIR)/utglobal.o\
        $(OBJDIR)/utids.o\
        $(OBJDIR)/utinit.o\
@@ -212,6 +214,7 @@ OBJECTS = \
        $(OBJDIR)/utosi.o\
        $(OBJDIR)/utownerid.o\
        $(OBJDIR)/utpredef.o\
+       $(OBJDIR)/utprint.o\
        $(OBJDIR)/utresrc.o\
        $(OBJDIR)/utstate.o\
        $(OBJDIR)/utstring.o\
index da6ee49..25c8c0a 100644 (file)
@@ -21,7 +21,8 @@ PROG = $(OBJDIR)/acpihelp
 vpath %.c \
     $(ACPIHELP)\
     $(ACPICA_COMMON)\
-    $(ACPICA_UTILITIES)
+    $(ACPICA_UTILITIES)\
+    $(ACPICA_OSL)
 
 HEADERS = \
     $(wildcard $(ACPIHELP)/*.h)
@@ -35,8 +36,14 @@ OBJECTS = \
        $(OBJDIR)/ahpredef.o\
        $(OBJDIR)/ahmain.o\
        $(OBJDIR)/getopt.o\
+       $(OBJDIR)/oslibcfs.o\
+       $(OBJDIR)/osunixxf.o\
+       $(OBJDIR)/utdebug.o\
        $(OBJDIR)/utexcep.o\
-       $(OBJDIR)/utpredef.o
+       $(OBJDIR)/utglobal.o\
+       $(OBJDIR)/utmath.o\
+       $(OBJDIR)/utpredef.o\
+       $(OBJDIR)/utprint.o
 
 #
 # Flags specific to acpihelp
index 00a0026..27c7b95 100644 (file)
@@ -21,7 +21,6 @@ PROG = $(OBJDIR)/acpinames
 #
 vpath %.c \
     $(ACPINAMES)\
-    $(ACPICA_DEBUGGER)\
     $(ACPICA_DISPATCHER)\
     $(ACPICA_EXECUTER)\
     $(ACPICA_NAMESPACE)\
@@ -39,7 +38,6 @@ OBJECTS = \
        $(OBJDIR)/anstubs.o\
        $(OBJDIR)/antables.o\
        $(OBJDIR)/cmfsize.o\
-       $(OBJDIR)/dbfileio.o\
        $(OBJDIR)/dsfield.o\
        $(OBJDIR)/dsmthdat.o\
        $(OBJDIR)/dsobject.o\
@@ -49,9 +47,12 @@ OBJECTS = \
        $(OBJDIR)/dswscope.o\
        $(OBJDIR)/dswstate.o\
        $(OBJDIR)/excreate.o\
+       $(OBJDIR)/exdump.o\
+       $(OBJDIR)/exmutex.o\
        $(OBJDIR)/exnames.o\
        $(OBJDIR)/exresnte.o\
        $(OBJDIR)/exresolv.o\
+       $(OBJDIR)/exsystem.o\
        $(OBJDIR)/exutils.o\
        $(OBJDIR)/getopt.o\
        $(OBJDIR)/nsaccess.o\
@@ -68,6 +69,7 @@ OBJECTS = \
        $(OBJDIR)/nsxfeval.o\
        $(OBJDIR)/nsxfname.o\
        $(OBJDIR)/nsxfobj.o\
+       $(OBJDIR)/oslibcfs.o\
        $(OBJDIR)/osunixxf.o\
        $(OBJDIR)/psargs.o\
        $(OBJDIR)/psloop.o\
@@ -91,13 +93,18 @@ OBJECTS = \
        $(OBJDIR)/tbxfroot.o\
        $(OBJDIR)/utaddress.o\
        $(OBJDIR)/utalloc.o\
+       $(OBJDIR)/utbuffer.o\
        $(OBJDIR)/utcache.o\
        $(OBJDIR)/utdebug.o\
        $(OBJDIR)/utdecode.o\
        $(OBJDIR)/utdelete.o\
        $(OBJDIR)/uterror.o\
+       $(OBJDIR)/uteval.o\
        $(OBJDIR)/utexcep.o\
+       $(OBJDIR)/utfileio.o\
        $(OBJDIR)/utglobal.o\
+       $(OBJDIR)/utids.o\
+       $(OBJDIR)/utinit.o\
        $(OBJDIR)/utlock.o\
        $(OBJDIR)/utmath.o\
        $(OBJDIR)/utmisc.o\
@@ -105,6 +112,7 @@ OBJECTS = \
        $(OBJDIR)/utobject.o\
        $(OBJDIR)/utosi.o\
        $(OBJDIR)/utownerid.o\
+       $(OBJDIR)/utprint.o\
        $(OBJDIR)/utstate.o\
        $(OBJDIR)/utstring.o\
        $(OBJDIR)/utxface.o\
index 50199ce..5d40c09 100644 (file)
@@ -19,6 +19,7 @@ PROG = $(OBJDIR)/acpisrc
 #
 vpath %.c \
     $(ACPISRC)\
+    $(ACPICA_UTILITIES)\
     $(ACPICA_COMMON)\
     $(ACPICA_OSL)
 
@@ -33,9 +34,17 @@ OBJECTS = \
     $(OBJDIR)/asremove.o\
     $(OBJDIR)/astable.o\
     $(OBJDIR)/asutils.o\
-       $(OBJDIR)/cmfsize.o\
+    $(OBJDIR)/cmfsize.o\
     $(OBJDIR)/getopt.o \
-    $(OBJDIR)/osunixdir.o
+    $(OBJDIR)/oslibcfs.o\
+    $(OBJDIR)/osunixdir.o\
+    $(OBJDIR)/osunixxf.o\
+    $(OBJDIR)/utdebug.o\
+    $(OBJDIR)/utexcep.o\
+    $(OBJDIR)/utglobal.o\
+    $(OBJDIR)/utmath.o\
+    $(OBJDIR)/utprint.o\
+    $(OBJDIR)/utxferror.o
 
 #
 # Compile flags specific to acpisrc
index 1e5b101..750583e 100644 (file)
@@ -19,7 +19,9 @@ PROG = $(OBJDIR)/acpixtract
 #
 vpath %.c \
     $(ACPIXTRACT)\
-    $(ACPICA_COMMON)
+    $(ACPICA_UTILITIES)\
+    $(ACPICA_COMMON)\
+    $(ACPICA_OSL)
 
 HEADERS = \
     $(wildcard $(ACPIXTRACT)/*.h)
@@ -27,7 +29,15 @@ HEADERS = \
 OBJECTS = \
     $(OBJDIR)/acpixtract.o\
     $(OBJDIR)/axmain.o\
-    $(OBJDIR)/getopt.o
+    $(OBJDIR)/getopt.o\
+    $(OBJDIR)/oslibcfs.o\
+    $(OBJDIR)/osunixxf.o\
+    $(OBJDIR)/utdebug.o\
+    $(OBJDIR)/utexcep.o\
+    $(OBJDIR)/utglobal.o\
+    $(OBJDIR)/utmath.o\
+    $(OBJDIR)/utprint.o\
+    $(OBJDIR)/utxferror.o
 
 #
 # Flags specific to acpixtract
index 8cc8d81..7fd7bbe 100644 (file)
@@ -160,6 +160,7 @@ OBJECTS = \
        $(OBJDIR)/nswalk.o\
        $(OBJDIR)/nsxfobj.o\
        $(OBJDIR)/osunixxf.o\
+       $(OBJDIR)/oslibcfs.o\
        $(OBJDIR)/prexpress.o\
        $(OBJDIR)/prmacros.o\
        $(OBJDIR)/prscan.o\
@@ -190,6 +191,7 @@ OBJECTS = \
        $(OBJDIR)/utdelete.o\
        $(OBJDIR)/uterror.o\
        $(OBJDIR)/utexcep.o\
+       $(OBJDIR)/utfileio.o\
        $(OBJDIR)/utglobal.o\
        $(OBJDIR)/utinit.o\
        $(OBJDIR)/utlock.o\
@@ -199,6 +201,7 @@ OBJECTS = \
        $(OBJDIR)/utobject.o\
        $(OBJDIR)/utownerid.o\
        $(OBJDIR)/utpredef.o\
+       $(OBJDIR)/utprint.o\
        $(OBJDIR)/utresrc.o\
        $(OBJDIR)/utstate.o\
        $(OBJDIR)/utstring.o\
index 2ac216f..6f4258b 100644 (file)
@@ -217,7 +217,6 @@ const AH_PREDEFINED_NAME    AslPredefinedInfo[] =
     AH_PREDEF ("_PR3",    "Power Resources for D3hot", "Returns a list of dependent power resources to enter state D3hot"),
     AH_PREDEF ("_PRE",    "Power Resources for Enumeration", "Returns a list of dependent power resources to enumerate devices on a bus"),
     AH_PREDEF ("_PRL",    "Power Source Redundancy List", "Returns a list of power source devices in the same redundancy grouping"),
-    AH_PREDEF ("_PRP",    "Device Properties", "Returns a list of device property information"),
     AH_PREDEF ("_PRS",    "Possible Resource Settings", "Returns a list of a device's possible resource settings"),
     AH_PREDEF ("_PRT",    "PCI Routing Table", "Returns a list of PCI interrupt mappings"),
     AH_PREDEF ("_PRW",    "Power Resources for Wake", "Returns a list of dependent power resources for waking"),
index c8d5a56..904d7d8 100644 (file)
  * RETURN:      File Size. On error, -1 (ACPI_UINT32_MAX)
  *
  * DESCRIPTION: Get the size of a file. Uses seek-to-EOF. File must be open.
- *              Does not disturb the current file pointer. Uses perror for
- *              error messages.
+ *              Does not disturb the current file pointer.
  *
  ******************************************************************************/
 
 UINT32
 CmGetFileSize (
-    FILE                    *File)
+    ACPI_FILE               File)
 {
     long                    FileSize;
     long                    CurrentOffset;
+    ACPI_STATUS             Status;
 
 
     /* Save the current file pointer, seek to EOF to obtain file size */
 
-    CurrentOffset = ftell (File);
+    CurrentOffset = AcpiOsGetFileOffset (File);
     if (CurrentOffset < 0)
     {
         goto OffsetError;
     }
 
-    if (fseek (File, 0, SEEK_END))
+    Status = AcpiOsSetFileOffset (File, 0, ACPI_FILE_END);
+    if (ACPI_FAILURE (Status))
     {
         goto SeekError;
     }
 
-    FileSize = ftell (File);
+    FileSize = AcpiOsGetFileOffset (File);
     if (FileSize < 0)
     {
         goto OffsetError;
@@ -93,7 +94,8 @@ CmGetFileSize (
 
     /* Restore original file pointer */
 
-    if (fseek (File, CurrentOffset, SEEK_SET))
+    Status = AcpiOsSetFileOffset (File, CurrentOffset, ACPI_FILE_BEGIN);
+    if (ACPI_FAILURE (Status))
     {
         goto SeekError;
     }
@@ -102,10 +104,10 @@ CmGetFileSize (
 
 
 OffsetError:
-    perror ("Could not get file offset");
+    AcpiLogError ("Could not get file offset");
     return (ACPI_UINT32_MAX);
 
 SeekError:
-    perror ("Could not seek file");
+    AcpiLogError ("Could not set file offset");
     return (ACPI_UINT32_MAX);
 }
index bca9a6f..5ae1e0a 100644 (file)
  *    "f|"      - Option has required single-char sub-options
  */
 
-#include <stdio.h>
-#include <string.h>
 #include "acpi.h"
 #include "accommon.h"
 #include "acapps.h"
 
 #define ACPI_OPTION_ERROR(msg, badchar) \
-    if (AcpiGbl_Opterr) {fprintf (stderr, "%s%c\n", msg, badchar);}
+    if (AcpiGbl_Opterr) {AcpiLogError ("%s%c\n", msg, badchar);}
 
 
 int                 AcpiGbl_Opterr = 1;
@@ -123,7 +121,7 @@ AcpiGetoptArgument (
  * PARAMETERS:  argc, argv          - from main
  *              opts                - options info list
  *
- * RETURN:      Option character or EOF
+ * RETURN:      Option character or ACPI_OPT_END
  *
  * DESCRIPTION: Get the next option
  *
@@ -145,12 +143,12 @@ AcpiGetopt(
             argv[AcpiGbl_Optind][0] != '-' ||
             argv[AcpiGbl_Optind][1] == '\0')
         {
-            return (EOF);
+            return (ACPI_OPT_END);
         }
-        else if (strcmp (argv[AcpiGbl_Optind], "--") == 0)
+        else if (ACPI_STRCMP (argv[AcpiGbl_Optind], "--") == 0)
         {
             AcpiGbl_Optind++;
-            return (EOF);
+            return (ACPI_OPT_END);
         }
     }
 
@@ -161,7 +159,7 @@ AcpiGetopt(
     /* Make sure that the option is legal */
 
     if (CurrentChar == ':' ||
-       (OptsPtr = strchr (opts, CurrentChar)) == NULL)
+       (OptsPtr = ACPI_STRCHR (opts, CurrentChar)) == NULL)
     {
         ACPI_OPTION_ERROR ("Illegal option: -", CurrentChar);
 
index 940f220..112c121 100644 (file)
@@ -569,51 +569,3 @@ ApCheckRegMethod (
 
     AslError (ASL_WARNING, ASL_MSG_NO_REGION, Op, NULL);
 }
-
-
-/*******************************************************************************
- *
- * FUNCTION:    ApFindNameInScope
- *
- * PARAMETERS:  Name                - Name to search for
- *              Op                  - Current parse op
- *
- * RETURN:      TRUE if name found in the same scope as Op.
- *
- * DESCRIPTION: Determine if a name appears in the same scope as Op, as either
- *              a Method() or a Name().
- *
- ******************************************************************************/
-
-BOOLEAN
-ApFindNameInScope (
-    char                    *Name,
-    ACPI_PARSE_OBJECT       *Op)
-{
-    ACPI_PARSE_OBJECT       *Next;
-    ACPI_PARSE_OBJECT       *Parent;
-
-
-    /* Get the start of the current scope */
-
-    Parent = Op->Asl.Parent;
-    Next = Parent->Asl.Child;
-
-    /* Search entire scope for a match to the name */
-
-    while (Next)
-    {
-        if ((Next->Asl.ParseOpcode == PARSEOP_METHOD) ||
-            (Next->Asl.ParseOpcode == PARSEOP_NAME))
-        {
-            if (ACPI_COMPARE_NAME (Name, Next->Asl.NameSeg))
-            {
-                return (TRUE);
-            }
-        }
-
-        Next = Next->Asl.Next;
-    }
-
-    return (FALSE);
-}
index 1f94245..40dcd69 100644 (file)
@@ -275,11 +275,6 @@ void
 ApCheckRegMethod (
     ACPI_PARSE_OBJECT       *Op);
 
-BOOLEAN
-ApFindNameInScope (
-    char                    *Name,
-    ACPI_PARSE_OBJECT       *Op);
-
 
 /*
  * aslerror - error handling/reporting
@@ -350,10 +345,6 @@ void
 AeClearErrorLog (
     void);
 
-ACPI_PHYSICAL_ADDRESS
-AeLocalGetRootPointer (
-    void);
-
 
 /*
  * asllisting - generate all "listing" type files
index 6e92d53..3034281 100644 (file)
@@ -341,6 +341,7 @@ main (
         return (-1);
     }
 
+    AcpiOsInitialize ();
     ACPI_DEBUG_INITIALIZE (); /* For debug version only */
 
     /* Initialize preprocessor and compiler before command line processing */
index c9d196f..926bc46 100644 (file)
@@ -233,7 +233,6 @@ const char                      *AslCompilerMsgs [] =
 /*    ASL_MSG_WRITE */                      "Could not write file",
 /*    ASL_MSG_RANGE */                      "Constant out of range",
 /*    ASL_MSG_BUFFER_ALLOCATION */          "Could not allocate line buffer",
-/*    ASL_MSG_MISSING_DEPENDENCY */         "Missing dependency"
 };
 
 /* Table compiler */
index 48ebcbf..851d46c 100644 (file)
@@ -235,7 +235,6 @@ typedef enum
     ASL_MSG_WRITE,
     ASL_MSG_RANGE,
     ASL_MSG_BUFFER_ALLOCATION,
-    ASL_MSG_MISSING_DEPENDENCY,
 
     /* These messages are used by the Data Table compiler only */
 
index 9b0a7a1..a9b0640 100644 (file)
@@ -108,17 +108,6 @@ MtMethodAnalysisWalkBegin (
 
         WalkInfo->MethodStack = MethodInfo;
 
-        /* Special handling for _PRP, must have a _HID also */
-
-        if (!ACPI_STRCMP (METHOD_NAME__PRP, Op->Asl.NameSeg))
-        {
-            if (!ApFindNameInScope (METHOD_NAME__HID, Op))
-            {
-                AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op,
-                    "_PRP requires _HID in same scope");
-            }
-        }
-
         /* Get the name node */
 
         Next = Op->Asl.Child;
@@ -424,15 +413,6 @@ MtMethodAnalysisWalkBegin (
             }
         }
 
-        else if (!ACPI_STRCMP (METHOD_NAME__PRP, Op->Asl.NameSeg))
-        {
-            if (!ApFindNameInScope (METHOD_NAME__HID, Op))
-            {
-                AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op,
-                    "_PRP requires _HID in same scope");
-            }
-        }
-
         break;
 
     default:
index 8d52826..039fc7d 100644 (file)
@@ -168,7 +168,7 @@ AslDoOptions (
 
     /* Get the command line options */
 
-    while ((j = AcpiGetopt (argc, argv, ASL_SUPPORTED_OPTIONS)) != EOF) switch (j)
+    while ((j = AcpiGetopt (argc, argv, ASL_SUPPORTED_OPTIONS)) != ACPI_OPT_END) switch (j)
     {
     case '@':   /* Begin a response file */
 
index 589edb2..6bbb89a 100644 (file)
  * Things like Events, Global Lock, etc. are not used
  * by the compiler, so they are stubbed out here.
  */
-ACPI_PHYSICAL_ADDRESS
-AeLocalGetRootPointer (
-    void)
-{
-    return (0);
-}
-
 void
 AcpiNsExecModuleCodeList (
     void)
@@ -232,21 +225,3 @@ AcpiTbFindTable (
 {
     return (AE_SUPPORT);
 }
-
-/* OSL interfaces */
-
-ACPI_THREAD_ID
-AcpiOsGetThreadId (
-    void)
-{
-    return (1);
-}
-
-ACPI_STATUS
-AcpiOsExecute (
-    ACPI_EXECUTE_TYPE       Type,
-    ACPI_OSD_EXEC_CALLBACK  Function,
-    void                    *Context)
-{
-    return (AE_SUPPORT);
-}
index a09c1de..ee4ba15 100644 (file)
 #include "acpi.h"
 #include "accommon.h"
 #include "acdebug.h"
-
-#ifdef ACPI_APPLICATION
 #include "actables.h"
-#endif
-
-#ifdef ACPI_ASL_COMPILER
-#include "aslcompiler.h"
-#endif
 
 #if (defined ACPI_DEBUGGER || defined ACPI_DISASSEMBLER)
 
 
 #ifdef ACPI_DEBUGGER
 
-/* Local prototypes */
-
-#ifdef ACPI_APPLICATION
-
-static ACPI_STATUS
-AcpiDbCheckTextModeCorruption (
-    UINT8                   *Table,
-    UINT32                  TableLength,
-    UINT32                  FileLength);
-
-#endif
-
 /*******************************************************************************
  *
  * FUNCTION:    AcpiDbCloseDebugFile
@@ -144,245 +125,6 @@ AcpiDbOpenDebugFile (
 #ifdef ACPI_APPLICATION
 #include "acapps.h"
 
-/*******************************************************************************
- *
- * FUNCTION:    AcpiDbCheckTextModeCorruption
- *
- * PARAMETERS:  Table           - Table buffer
- *              TableLength     - Length of table from the table header
- *              FileLength      - Length of the file that contains the table
- *
- * RETURN:      Status
- *
- * DESCRIPTION: Check table for text mode file corruption where all linefeed
- *              characters (LF) have been replaced by carriage return linefeed
- *              pairs (CR/LF).
- *
- ******************************************************************************/
-
-static ACPI_STATUS
-AcpiDbCheckTextModeCorruption (
-    UINT8                   *Table,
-    UINT32                  TableLength,
-    UINT32                  FileLength)
-{
-    UINT32                  i;
-    UINT32                  Pairs = 0;
-
-
-    if (TableLength != FileLength)
-    {
-        ACPI_WARNING ((AE_INFO,
-            "File length (0x%X) is not the same as the table length (0x%X)",
-            FileLength, TableLength));
-    }
-
-    /* Scan entire table to determine if each LF has been prefixed with a CR */
-
-    for (i = 1; i < FileLength; i++)
-    {
-        if (Table[i] == 0x0A)
-        {
-            if (Table[i - 1] != 0x0D)
-            {
-                /* The LF does not have a preceding CR, table not corrupted */
-
-                return (AE_OK);
-            }
-            else
-            {
-                /* Found a CR/LF pair */
-
-                Pairs++;
-            }
-            i++;
-        }
-    }
-
-    if (!Pairs)
-    {
-        return (AE_OK);
-    }
-
-    /*
-     * Entire table scanned, each CR is part of a CR/LF pair --
-     * meaning that the table was treated as a text file somewhere.
-     *
-     * NOTE: We can't "fix" the table, because any existing CR/LF pairs in the
-     * original table are left untouched by the text conversion process --
-     * meaning that we cannot simply replace CR/LF pairs with LFs.
-     */
-    AcpiOsPrintf ("Table has been corrupted by text mode conversion\n");
-    AcpiOsPrintf ("All LFs (%u) were changed to CR/LF pairs\n", Pairs);
-    AcpiOsPrintf ("Table cannot be repaired!\n");
-    return (AE_BAD_VALUE);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION:    AcpiDbReadTable
- *
- * PARAMETERS:  fp              - File that contains table
- *              Table           - Return value, buffer with table
- *              TableLength     - Return value, length of table
- *
- * RETURN:      Status
- *
- * DESCRIPTION: Load the DSDT from the file pointer
- *
- ******************************************************************************/
-
-static ACPI_STATUS
-AcpiDbReadTable (
-    FILE                    *fp,
-    ACPI_TABLE_HEADER       **Table,
-    UINT32                  *TableLength)
-{
-    ACPI_TABLE_HEADER       TableHeader;
-    UINT32                  Actual;
-    ACPI_STATUS             Status;
-    UINT32                  FileSize;
-    BOOLEAN                 StandardHeader = TRUE;
-
-
-    /* Get the file size */
-
-    FileSize = CmGetFileSize (fp);
-    if (FileSize == ACPI_UINT32_MAX)
-    {
-        return (AE_ERROR);
-    }
-
-    if (FileSize < 4)
-    {
-        return (AE_BAD_HEADER);
-    }
-
-    /* Read the signature */
-
-    if (fread (&TableHeader, 1, 4, fp) != 4)
-    {
-        AcpiOsPrintf ("Could not read the table signature\n");
-        return (AE_BAD_HEADER);
-    }
-
-    fseek (fp, 0, SEEK_SET);
-
-    /* The RSDP table does not have standard ACPI header */
-
-    if (ACPI_COMPARE_NAME (TableHeader.Signature, "RSD "))
-    {
-        *TableLength = FileSize;
-        StandardHeader = FALSE;
-    }
-    else
-    {
-        /* Read the table header */
-
-        if (fread (&TableHeader, 1, sizeof (ACPI_TABLE_HEADER), fp) !=
-                sizeof (ACPI_TABLE_HEADER))
-        {
-            AcpiOsPrintf ("Could not read the table header\n");
-            return (AE_BAD_HEADER);
-        }
-
-#if 0
-        /* Validate the table header/length */
-
-        Status = AcpiTbValidateTableHeader (&TableHeader);
-        if (ACPI_FAILURE (Status))
-        {
-            AcpiOsPrintf ("Table header is invalid!\n");
-            return (Status);
-        }
-#endif
-
-        /* File size must be at least as long as the Header-specified length */
-
-        if (TableHeader.Length > FileSize)
-        {
-            AcpiOsPrintf (
-                "TableHeader length [0x%X] greater than the input file size [0x%X]\n",
-                TableHeader.Length, FileSize);
-
-#ifdef ACPI_ASL_COMPILER
-            Status = FlCheckForAscii (fp, NULL, FALSE);
-            if (ACPI_SUCCESS (Status))
-            {
-                AcpiOsPrintf ("File appears to be ASCII only, must be binary\n",
-                    TableHeader.Length, FileSize);
-            }
-#endif
-            return (AE_BAD_HEADER);
-        }
-
-#ifdef ACPI_OBSOLETE_CODE
-        /* We only support a limited number of table types */
-
-        if (!ACPI_COMPARE_NAME ((char *) TableHeader.Signature, ACPI_SIG_DSDT) &&
-            !ACPI_COMPARE_NAME ((char *) TableHeader.Signature, ACPI_SIG_PSDT) &&
-            !ACPI_COMPARE_NAME ((char *) TableHeader.Signature, ACPI_SIG_SSDT))
-        {
-            AcpiOsPrintf ("Table signature [%4.4s] is invalid or not supported\n",
-                (char *) TableHeader.Signature);
-            ACPI_DUMP_BUFFER (&TableHeader, sizeof (ACPI_TABLE_HEADER));
-            return (AE_ERROR);
-        }
-#endif
-
-        *TableLength = TableHeader.Length;
-    }
-
-    /* Allocate a buffer for the table */
-
-    *Table = AcpiOsAllocate ((size_t) FileSize);
-    if (!*Table)
-    {
-        AcpiOsPrintf (
-            "Could not allocate memory for ACPI table %4.4s (size=0x%X)\n",
-            TableHeader.Signature, *TableLength);
-        return (AE_NO_MEMORY);
-    }
-
-    /* Get the rest of the table */
-
-    fseek (fp, 0, SEEK_SET);
-    Actual = fread (*Table, 1, (size_t) FileSize, fp);
-    if (Actual == FileSize)
-    {
-        if (StandardHeader)
-        {
-            /* Now validate the checksum */
-
-            Status = AcpiTbVerifyChecksum ((void *) *Table,
-                        ACPI_CAST_PTR (ACPI_TABLE_HEADER, *Table)->Length);
-
-            if (Status == AE_BAD_CHECKSUM)
-            {
-                Status = AcpiDbCheckTextModeCorruption ((UINT8 *) *Table,
-                            FileSize, (*Table)->Length);
-                return (Status);
-            }
-        }
-        return (AE_OK);
-    }
-
-    if (Actual > 0)
-    {
-        AcpiOsPrintf ("Warning - reading table, asked for %X got %X\n",
-            FileSize, Actual);
-        return (AE_OK);
-    }
-
-    AcpiOsPrintf ("Error - could not read the table file\n");
-    AcpiOsFree (*Table);
-    *Table = NULL;
-    *TableLength = 0;
-    return (AE_ERROR);
-}
-
-
 /*******************************************************************************
  *
  * FUNCTION:    AeLocalLoadTable
@@ -456,62 +198,6 @@ AeLocalLoadTable (
 
     return_ACPI_STATUS (Status);
 }
-
-
-/*******************************************************************************
- *
- * FUNCTION:    AcpiDbReadTableFromFile
- *
- * PARAMETERS:  Filename         - File where table is located
- *              Table            - Where a pointer to the table is returned
- *
- * RETURN:      Status
- *
- * DESCRIPTION: Get an ACPI table from a file
- *
- ******************************************************************************/
-
-ACPI_STATUS
-AcpiDbReadTableFromFile (
-    char                    *Filename,
-    ACPI_TABLE_HEADER       **Table)
-{
-    FILE                    *File;
-    UINT32                  FileSize;
-    UINT32                  TableLength;
-    ACPI_STATUS             Status = AE_ERROR;
-
-
-    /* Open the file, get current size */
-
-    File = fopen (Filename, "rb");
-    if (!File)
-    {
-        perror ("Could not open input file");
-        return (Status);
-    }
-
-    FileSize = CmGetFileSize (File);
-    if (FileSize == ACPI_UINT32_MAX)
-    {
-        goto Exit;
-    }
-
-    /* Get the entire file */
-
-    fprintf (stderr, "Loading Acpi table from file %10s - Length %.8u (%06X)\n",
-        Filename, FileSize, FileSize);
-
-    Status = AcpiDbReadTable (File, Table, &TableLength);
-    if (ACPI_FAILURE (Status))
-    {
-        AcpiOsPrintf ("Could not get table from the file\n");
-    }
-
-Exit:
-    fclose(File);
-    return (Status);
- }
 #endif
 
 
@@ -539,7 +225,7 @@ AcpiDbGetTableFromFile (
     BOOLEAN                 IsAmlTable = TRUE;
 
 
-    Status = AcpiDbReadTableFromFile (Filename, &Table);
+    Status = AcpiUtReadTableFromFile (Filename, &Table);
     if (ACPI_FAILURE (Status))
     {
         return (Status);
index d88372b..33ee4e4 100644 (file)
@@ -1042,6 +1042,7 @@ AcpiDbEvaluateOnePredefinedName (
     Status = AcpiGetObjectInfo (ObjHandle, &ObjInfo);
     if (ACPI_FAILURE (Status))
     {
+        ACPI_FREE (Pathname);
         return (Status);
     }
 
index 85f0618..739fb44 100644 (file)
@@ -71,6 +71,8 @@ AcpiDmPldBuffer (
     UINT8                   *ByteData,
     UINT32                  ByteCount);
 
+#define ACPI_BUFFER_BYTES_PER_LINE      8
+
 
 /*******************************************************************************
  *
@@ -94,6 +96,9 @@ AcpiDmDisasmByteList (
     UINT32                  ByteCount)
 {
     UINT32                  i;
+    UINT32                  j;
+    UINT32                  CurrentIndex;
+    UINT8                   BufChar;
 
 
     if (!ByteCount)
@@ -101,39 +106,68 @@ AcpiDmDisasmByteList (
         return;
     }
 
-    /* Dump the byte list */
-
-    for (i = 0; i < ByteCount; i++)
+    for (i = 0; i < ByteCount; i += ACPI_BUFFER_BYTES_PER_LINE)
     {
-        /* New line every 8 bytes */
+        /* Line indent and offset prefix for each new line */
+
+        AcpiDmIndent (Level);
+        if (ByteCount > ACPI_BUFFER_BYTES_PER_LINE)
+        {
+            AcpiOsPrintf ("/* %04X */ ", i);
+        }
+
+        /* Dump the actual hex values */
 
-        if (((i % 8) == 0) && (i < ByteCount))
+        for (j = 0; j < ACPI_BUFFER_BYTES_PER_LINE; j++)
         {
-            if (i > 0)
+            CurrentIndex = i + j;
+            if (CurrentIndex >= ByteCount)
             {
-                AcpiOsPrintf ("\n");
+                /* Dump fill spaces */
+
+                AcpiOsPrintf ("      ");
+                continue;
             }
 
-            AcpiDmIndent (Level);
-            if (ByteCount > 8)
+            AcpiOsPrintf (" 0x%2.2X", ByteData[CurrentIndex]);
+
+            /* Add comma if there are more bytes to display */
+
+            if (CurrentIndex < (ByteCount - 1))
             {
-                AcpiOsPrintf ("/* %04X */  ", i);
+                AcpiOsPrintf (",");
+            }
+            else
+            {
+                AcpiOsPrintf (" ");
             }
         }
 
-        AcpiOsPrintf (" 0x%2.2X", (UINT32) ByteData[i]);
-
-        /* Add comma if there are more bytes to display */
+        /* Dump the ASCII equivalents within a comment */
 
-        if (i < (ByteCount -1))
+        AcpiOsPrintf ("  /* ");
+        for (j = 0; j < ACPI_BUFFER_BYTES_PER_LINE; j++)
         {
-            AcpiOsPrintf (",");
+            CurrentIndex = i + j;
+            if (CurrentIndex >= ByteCount)
+            {
+                break;
+            }
+
+            BufChar = ByteData[CurrentIndex];
+            if (ACPI_IS_PRINT (BufChar))
+            {
+                AcpiOsPrintf ("%c", BufChar);
+            }
+            else
+            {
+                AcpiOsPrintf (".");
+            }
         }
-    }
 
-    if (Level)
-    {
-        AcpiOsPrintf ("\n");
+        /* Finished with this line */
+
+        AcpiOsPrintf (" */\n");
     }
 }
 
index 3cf74b3..0aa3052 100644 (file)
@@ -957,6 +957,13 @@ AcpiDmAscendingOp (
             return (AE_OK);
         }
 
+        /*
+         * The parent Op is guaranteed to be valid because of the flag
+         * ACPI_PARSEOP_PARAMLIST -- which means that this op is part of
+         * a parameter list and thus has a valid parent.
+         */
+        ParentOp = Op->Common.Parent;
+
         /*
          * Just completed a parameter node for something like "Buffer (param)".
          * Close the paren and open up the term list block with a brace
@@ -965,25 +972,24 @@ AcpiDmAscendingOp (
         {
             AcpiOsPrintf (")");
 
-            /* Emit description comment for Name() with a predefined ACPI name */
-
-            ParentOp = Op->Common.Parent;
-            if (ParentOp)
+            /*
+             * Emit a description comment for a Name() operator that is a
+             * predefined ACPI name. Must check the grandparent.
+             */
+            ParentOp = ParentOp->Common.Parent;
+            if (ParentOp &&
+                (ParentOp->Asl.AmlOpcode == AML_NAME_OP))
             {
-                ParentOp = ParentOp->Common.Parent;
-                if (ParentOp && ParentOp->Asl.AmlOpcode == AML_NAME_OP)
-                {
-                    AcpiDmPredefinedDescription (ParentOp);
-                }
+                AcpiDmPredefinedDescription (ParentOp);
             }
+
             AcpiOsPrintf ("\n");
             AcpiDmIndent (Level - 1);
             AcpiOsPrintf ("{\n");
         }
         else
         {
-            Op->Common.Parent->Common.DisasmFlags |=
-                                    ACPI_PARSEOP_EMPTY_TERMLIST;
+            ParentOp->Common.DisasmFlags |= ACPI_PARSEOP_EMPTY_TERMLIST;
             AcpiOsPrintf (") {");
         }
     }
index aedc8d9..a1de0ca 100644 (file)
 #include "accommon.h"
 #include "acdispat.h"
 #include "acinterp.h"
+#include "amlcode.h"
 
 
 #define _COMPONENT          ACPI_EXECUTER
         ACPI_MODULE_NAME    ("exfield")
 
+/* Local prototypes */
+
+static UINT32
+AcpiExGetSerialAccessLength (
+    UINT32                  AccessorType,
+    UINT32                  AccessLength);
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiExGetSerialAccessLength
+ *
+ * PARAMETERS:  AccessorType    - The type of the protocol indicated by region
+ *                                field access attributes
+ *              AccessLength    - The access length of the region field
+ *
+ * RETURN:      Decoded access length
+ *
+ * DESCRIPTION: This routine returns the length of the GenericSerialBus
+ *              protocol bytes
+ *
+ ******************************************************************************/
+
+static UINT32
+AcpiExGetSerialAccessLength (
+    UINT32                  AccessorType,
+    UINT32                  AccessLength)
+{
+    UINT32                  Length;
+
+
+    switch (AccessorType)
+    {
+    case AML_FIELD_ATTRIB_QUICK:
+
+        Length = 0;
+        break;
+
+    case AML_FIELD_ATTRIB_SEND_RCV:
+    case AML_FIELD_ATTRIB_BYTE:
+
+        Length = 1;
+        break;
+
+    case AML_FIELD_ATTRIB_WORD:
+    case AML_FIELD_ATTRIB_WORD_CALL:
+
+        Length = 2;
+        break;
+
+    case AML_FIELD_ATTRIB_MULTIBYTE:
+    case AML_FIELD_ATTRIB_RAW_BYTES:
+    case AML_FIELD_ATTRIB_RAW_PROCESS:
+
+        Length = AccessLength;
+        break;
+
+    case AML_FIELD_ATTRIB_BLOCK:
+    case AML_FIELD_ATTRIB_BLOCK_CALL:
+    default:
+
+        Length = ACPI_GSBUS_BUFFER_SIZE - 2;
+        break;
+    }
+
+    return (Length);
+}
+
 
 /*******************************************************************************
  *
@@ -80,6 +149,7 @@ AcpiExReadDataFromField (
     ACPI_SIZE               Length;
     void                    *Buffer;
     UINT32                  Function;
+    UINT16                  AccessorType;
 
 
     ACPI_FUNCTION_TRACE_PTR (ExReadDataFromField, ObjDesc);
@@ -129,8 +199,20 @@ AcpiExReadDataFromField (
         }
         else if (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_GSBUS)
         {
-            Length = ACPI_GSBUS_BUFFER_SIZE;
-            Function = ACPI_READ | (ObjDesc->Field.Attribute << 16);
+            AccessorType = ObjDesc->Field.Attribute;
+            Length = AcpiExGetSerialAccessLength (AccessorType,
+                ObjDesc->Field.AccessLength);
+
+           /*
+             * Add additional 2 bytes for modeled GenericSerialBus data buffer:
+             * typedef struct {
+             *     BYTEStatus; // Byte 0 of the data buffer
+             *     BYTELength; // Byte 1 of the data buffer
+             *     BYTE[x-1]Data; // Bytes 2-x of the arbitrary length data buffer,
+             * }
+            */
+            Length += 2;
+            Function = ACPI_READ | (AccessorType << 16);
         }
         else /* IPMI */
         {
@@ -251,6 +333,7 @@ AcpiExWriteDataToField (
     void                    *Buffer;
     ACPI_OPERAND_OBJECT     *BufferDesc;
     UINT32                  Function;
+    UINT16                  AccessorType;
 
 
     ACPI_FUNCTION_TRACE_PTR (ExWriteDataToField, ObjDesc);
@@ -310,8 +393,20 @@ AcpiExWriteDataToField (
         }
         else if (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_GSBUS)
         {
-            Length = ACPI_GSBUS_BUFFER_SIZE;
-            Function = ACPI_WRITE | (ObjDesc->Field.Attribute << 16);
+            AccessorType = ObjDesc->Field.Attribute;
+            Length = AcpiExGetSerialAccessLength (AccessorType,
+                ObjDesc->Field.AccessLength);
+
+           /*
+             * Add additional 2 bytes for modeled GenericSerialBus data buffer:
+             * typedef struct {
+             *     BYTEStatus; // Byte 0 of the data buffer
+             *     BYTELength; // Byte 1 of the data buffer
+             *     BYTE[x-1]Data; // Bytes 2-x of the arbitrary length data buffer,
+             * }
+            */
+            Length += 2;
+            Function = ACPI_WRITE | (AccessorType << 16);
         }
         else /* IPMI */
         {
index a24fc5c..94c508a 100644 (file)
@@ -310,17 +310,19 @@ AcpiHwClearAcpiStatus (
 
     Status = AcpiHwRegisterWrite (ACPI_REGISTER_PM1_STATUS,
                 ACPI_BITMASK_ALL_FIXED_STATUS);
+
+    AcpiOsReleaseLock (AcpiGbl_HardwareLock, LockFlags);
+
     if (ACPI_FAILURE (Status))
     {
-        goto UnlockAndExit;
+        goto Exit;
     }
 
     /* Clear the GPE Bits in all GPE registers in all GPE blocks */
 
     Status = AcpiEvWalkGpeList (AcpiHwClearGpeBlock, NULL);
 
-UnlockAndExit:
-    AcpiOsReleaseLock (AcpiGbl_HardwareLock, LockFlags);
+Exit:
     return_ACPI_STATUS (Status);
 }
 
index 3317591..9221ac0 100644 (file)
@@ -265,6 +265,17 @@ AcpiNsDetachObject (
         }
     }
 
+    /*
+     * Detach the object from any data objects (which are still held by
+     * the namespace node)
+     */
+
+    if (ObjDesc->Common.NextObject &&
+       ((ObjDesc->Common.NextObject)->Common.Type == ACPI_TYPE_LOCAL_DATA))
+    {
+       ObjDesc->Common.NextObject = NULL;
+    }
+
     /* Reset the node type to untyped */
 
     Node->Type = ACPI_TYPE_ANY;
index 549c555..e0c5f3a 100644 (file)
@@ -352,7 +352,43 @@ AcpiTbInvalidateTable (
 
 /******************************************************************************
  *
- * FUNCTION:    AcpiTbVerifyTable
+ * FUNCTION:    AcpiTbValidateTempTable
+ *
+ * PARAMETERS:  TableDesc           - Table descriptor
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: This function is called to validate the table, the returned
+ *              table descriptor is in "VALIDATED" state.
+ *
+ *****************************************************************************/
+
+ACPI_STATUS
+AcpiTbValidateTempTable (
+    ACPI_TABLE_DESC         *TableDesc)
+{
+
+    if (!TableDesc->Pointer && !AcpiGbl_VerifyTableChecksum)
+    {
+        /*
+         * Only validates the header of the table.
+         * Note that Length contains the size of the mapping after invoking
+         * this work around, this value is required by
+         * AcpiTbReleaseTempTable().
+         * We can do this because in AcpiInitTableDescriptor(), the Length
+         * field of the installed descriptor is filled with the actual
+         * table length obtaining from the table header.
+         */
+        TableDesc->Length = sizeof (ACPI_TABLE_HEADER);
+    }
+
+    return (AcpiTbValidateTable (TableDesc));
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION:    AcpiTbVerifyTempTable
  *
  * PARAMETERS:  TableDesc           - Table descriptor
  *              Signature           - Table signature to verify
@@ -365,19 +401,19 @@ AcpiTbInvalidateTable (
  *****************************************************************************/
 
 ACPI_STATUS
-AcpiTbVerifyTable (
+AcpiTbVerifyTempTable (
     ACPI_TABLE_DESC         *TableDesc,
     char                    *Signature)
 {
     ACPI_STATUS             Status = AE_OK;
 
 
-    ACPI_FUNCTION_TRACE (TbVerifyTable);
+    ACPI_FUNCTION_TRACE (TbVerifyTempTable);
 
 
     /* Validate the table */
 
-    Status = AcpiTbValidateTable (TableDesc);
+    Status = AcpiTbValidateTempTable (TableDesc);
     if (ACPI_FAILURE (Status))
     {
         return_ACPI_STATUS (AE_NO_MEMORY);
@@ -397,16 +433,19 @@ AcpiTbVerifyTable (
 
     /* Verify the checksum */
 
-    Status = AcpiTbVerifyChecksum (TableDesc->Pointer, TableDesc->Length);
-    if (ACPI_FAILURE (Status))
+    if (AcpiGbl_VerifyTableChecksum)
     {
-        ACPI_EXCEPTION ((AE_INFO, AE_NO_MEMORY,
-            "%4.4s " ACPI_PRINTF_UINT
-            " Attempted table install failed",
-            AcpiUtValidAcpiName (TableDesc->Signature.Ascii) ?
-                TableDesc->Signature.Ascii : "????",
-            ACPI_FORMAT_TO_UINT (TableDesc->Address)));
-        goto InvalidateAndExit;
+        Status = AcpiTbVerifyChecksum (TableDesc->Pointer, TableDesc->Length);
+        if (ACPI_FAILURE (Status))
+        {
+            ACPI_EXCEPTION ((AE_INFO, AE_NO_MEMORY,
+                "%4.4s " ACPI_PRINTF_UINT
+                " Attempted table install failed",
+                AcpiUtValidAcpiName (TableDesc->Signature.Ascii) ?
+                    TableDesc->Signature.Ascii : "????",
+                ACPI_FORMAT_TO_UINT (TableDesc->Address)));
+            goto InvalidateAndExit;
+        }
     }
 
     return_ACPI_STATUS (AE_OK);
index 9dcaa91..791979c 100644 (file)
@@ -210,7 +210,7 @@ AcpiTbInstallFixedTable (
 
     /* Validate and verify a table before installation */
 
-    Status = AcpiTbVerifyTable (&NewTableDesc, Signature);
+    Status = AcpiTbVerifyTempTable (&NewTableDesc, Signature);
     if (ACPI_FAILURE (Status))
     {
         goto ReleaseAndExit;
@@ -290,7 +290,7 @@ AcpiTbInstallStandardTable (
 
     /* Validate and verify a table before installation */
 
-    Status = AcpiTbVerifyTable (&NewTableDesc, NULL);
+    Status = AcpiTbVerifyTempTable (&NewTableDesc, NULL);
     if (ACPI_FAILURE (Status))
     {
         goto ReleaseAndExit;
@@ -455,7 +455,7 @@ FinishOverride:
 
     /* Validate and verify a table before overriding */
 
-    Status = AcpiTbVerifyTable (&NewTableDesc, NULL);
+    Status = AcpiTbVerifyTempTable (&NewTableDesc, NULL);
     if (ACPI_FAILURE (Status))
     {
         return;
@@ -477,7 +477,7 @@ FinishOverride:
      */
     AcpiTbInitTableDescriptor (OldTableDesc, NewTableDesc.Address,
         NewTableDesc.Flags, NewTableDesc.Pointer);
-    AcpiTbValidateTable (OldTableDesc);
+    AcpiTbValidateTempTable (OldTableDesc);
 
     /* Release the temporary table descriptor */
 
index 4b207d9..56fd46d 100644 (file)
@@ -427,10 +427,6 @@ NextTable:
         TableEntry += TableEntrySize;
     }
 
-    /*
-     * It is not possible to map more than one entry in some environments,
-     * so unmap the root table here before mapping other tables
-     */
     AcpiOsUnmapMemory (Table, Length);
 
     return_ACPI_STATUS (AE_OK);
index 6b110f5..a946aab 100644 (file)
@@ -218,3 +218,138 @@ AcpiUtDebugDumpBuffer (
 
     AcpiUtDumpBuffer (Buffer, Count, Display, 0);
 }
+
+
+#ifdef ACPI_APPLICATION
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiUtDumpBufferToFile
+ *
+ * PARAMETERS:  File                - File descriptor
+ *              Buffer              - Buffer to dump
+ *              Count               - Amount to dump, in bytes
+ *              Display             - BYTE, WORD, DWORD, or QWORD display:
+ *                                      DB_BYTE_DISPLAY
+ *                                      DB_WORD_DISPLAY
+ *                                      DB_DWORD_DISPLAY
+ *                                      DB_QWORD_DISPLAY
+ *              BaseOffset          - Beginning buffer offset (display only)
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Generic dump buffer in both hex and ascii to a file.
+ *
+ ******************************************************************************/
+
+void
+AcpiUtDumpBufferToFile (
+    ACPI_FILE               File,
+    UINT8                   *Buffer,
+    UINT32                  Count,
+    UINT32                  Display,
+    UINT32                  BaseOffset)
+{
+    UINT32                  i = 0;
+    UINT32                  j;
+    UINT32                  Temp32;
+    UINT8                   BufChar;
+
+
+    if (!Buffer)
+    {
+        AcpiUtFilePrintf (File, "Null Buffer Pointer in DumpBuffer!\n");
+        return;
+    }
+
+    if ((Count < 4) || (Count & 0x01))
+    {
+        Display = DB_BYTE_DISPLAY;
+    }
+
+    /* Nasty little dump buffer routine! */
+
+    while (i < Count)
+    {
+        /* Print current offset */
+
+        AcpiUtFilePrintf (File, "%6.4X: ", (BaseOffset + i));
+
+        /* Print 16 hex chars */
+
+        for (j = 0; j < 16;)
+        {
+            if (i + j >= Count)
+            {
+                /* Dump fill spaces */
+
+                AcpiUtFilePrintf (File, "%*s", ((Display * 2) + 1), " ");
+                j += Display;
+                continue;
+            }
+
+            switch (Display)
+            {
+            case DB_BYTE_DISPLAY:
+            default:    /* Default is BYTE display */
+
+                AcpiUtFilePrintf (File, "%02X ", Buffer[(ACPI_SIZE) i + j]);
+                break;
+
+            case DB_WORD_DISPLAY:
+
+                ACPI_MOVE_16_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]);
+                AcpiUtFilePrintf (File, "%04X ", Temp32);
+                break;
+
+            case DB_DWORD_DISPLAY:
+
+                ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]);
+                AcpiUtFilePrintf (File, "%08X ", Temp32);
+                break;
+
+            case DB_QWORD_DISPLAY:
+
+                ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]);
+                AcpiUtFilePrintf (File, "%08X", Temp32);
+
+                ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j + 4]);
+                AcpiUtFilePrintf (File, "%08X ", Temp32);
+                break;
+            }
+
+            j += Display;
+        }
+
+        /*
+         * Print the ASCII equivalent characters but watch out for the bad
+         * unprintable ones (printable chars are 0x20 through 0x7E)
+         */
+        AcpiUtFilePrintf (File, " ");
+        for (j = 0; j < 16; j++)
+        {
+            if (i + j >= Count)
+            {
+                AcpiUtFilePrintf (File, "\n");
+                return;
+            }
+
+            BufChar = Buffer[(ACPI_SIZE) i + j];
+            if (ACPI_IS_PRINT (BufChar))
+            {
+                AcpiUtFilePrintf (File, "%c", BufChar);
+            }
+            else
+            {
+                AcpiUtFilePrintf (File, ".");
+            }
+        }
+
+        /* Done with that line. */
+
+        AcpiUtFilePrintf (File, "\n");
+        i += 16;
+    }
+
+    return;
+}
+#endif
index 33bf350..7892df4 100644 (file)
@@ -308,8 +308,6 @@ AcpiUtStrcmp (
 }
 
 
-#ifdef ACPI_FUTURE_IMPLEMENTATION
-/* Not used at this time */
 /*******************************************************************************
  *
  * FUNCTION:    AcpiUtStrchr (strchr)
@@ -334,13 +332,13 @@ AcpiUtStrchr (
     {
         if ((*String) == (char) ch)
         {
-            return ((char *) String);
+            return (__DECONST(char *, String));
         }
     }
 
     return (NULL);
 }
-#endif
+
 
 /*******************************************************************************
  *
index 26eb878..6ab8709 100644 (file)
@@ -1063,5 +1063,12 @@ AcpiUtCopyIobjectToIobject (
         Status = AcpiUtCopySimpleObject (SourceDesc, *DestDesc);
     }
 
+    /* Delete the allocated object if copy failed */
+
+    if (ACPI_FAILURE (Status))
+    {
+        AcpiUtRemoveReference(*DestDesc);
+    }
+
     return_ACPI_STATUS (Status);
 }
index 4a25fb2..973d4ec 100644 (file)
@@ -636,3 +636,33 @@ AcpiUtPtrExit (
 }
 
 #endif
+
+
+#ifdef ACPI_APPLICATION
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiLogError
+ *
+ * PARAMETERS:  Format              - Printf format field
+ *              ...                 - Optional printf arguments
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Print error message to the console, used by applications.
+ *
+ ******************************************************************************/
+
+void  ACPI_INTERNAL_VAR_XFACE
+AcpiLogError (
+    const char              *Format,
+    ...)
+{
+    va_list                 Args;
+
+    va_start (Args, Format);
+    (void) AcpiUtFileVprintf (ACPI_FILE_ERR, Format, Args);
+    va_end (Args);
+}
+
+ACPI_EXPORT_SYMBOL (AcpiLogError)
+#endif
@@ -1,7 +1,6 @@
 /*******************************************************************************
  *
- * Module Name: dbfileio - Debugger file I/O commands. These can't usually
- *              be used when running the debugger in Ring 0 (Kernel mode)
+ * Module Name: utfileio - simple file I/O routines
  *
  ******************************************************************************/
 
 
 #include "acpi.h"
 #include "accommon.h"
-#include "acdebug.h"
-
-#ifdef ACPI_APPLICATION
 #include "actables.h"
-#endif
+#include "acapps.h"
 
 #ifdef ACPI_ASL_COMPILER
 #include "aslcompiler.h"
 #endif
 
-#if (defined ACPI_DEBUGGER || defined ACPI_DISASSEMBLER)
 
 #define _COMPONENT          ACPI_CA_DEBUGGER
-        ACPI_MODULE_NAME    ("dbfileio")
-
-#ifdef ACPI_DEBUGGER
+        ACPI_MODULE_NAME    ("utfileio")
 
-/* Local prototypes */
 
 #ifdef ACPI_APPLICATION
 
+/* Local prototypes */
+
 static ACPI_STATUS
-AcpiDbCheckTextModeCorruption (
+AcpiUtCheckTextModeCorruption (
     UINT8                   *Table,
     UINT32                  TableLength,
     UINT32                  FileLength);
 
-#endif
-
-/*******************************************************************************
- *
- * FUNCTION:    AcpiDbCloseDebugFile
- *
- * PARAMETERS:  None
- *
- * RETURN:      None
- *
- * DESCRIPTION: If open, close the current debug output file
- *
- ******************************************************************************/
-
-void
-AcpiDbCloseDebugFile (
-    void)
-{
-
-#ifdef ACPI_APPLICATION
-
-    if (AcpiGbl_DebugFile)
-    {
-       fclose (AcpiGbl_DebugFile);
-       AcpiGbl_DebugFile = NULL;
-       AcpiGbl_DbOutputToFile = FALSE;
-       AcpiOsPrintf ("Debug output file %s closed\n", AcpiGbl_DbDebugFilename);
-    }
-#endif
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION:    AcpiDbOpenDebugFile
- *
- * PARAMETERS:  Name                - Filename to open
- *
- * RETURN:      None
- *
- * DESCRIPTION: Open a file where debug output will be directed.
- *
- ******************************************************************************/
-
-void
-AcpiDbOpenDebugFile (
-    char                    *Name)
-{
-
-#ifdef ACPI_APPLICATION
-
-    AcpiDbCloseDebugFile ();
-    AcpiGbl_DebugFile = fopen (Name, "w+");
-    if (!AcpiGbl_DebugFile)
-    {
-        AcpiOsPrintf ("Could not open debug file %s\n", Name);
-        return;
-    }
-
-    AcpiOsPrintf ("Debug output file %s opened\n", Name);
-    ACPI_STRNCPY (AcpiGbl_DbDebugFilename, Name,
-        sizeof (AcpiGbl_DbDebugFilename));
-    AcpiGbl_DbOutputToFile = TRUE;
-
-#endif
-}
-#endif
-
+static ACPI_STATUS
+AcpiUtReadTable (
+    FILE                    *fp,
+    ACPI_TABLE_HEADER       **Table,
+    UINT32                  *TableLength);
 
-#ifdef ACPI_APPLICATION
-#include "acapps.h"
 
 /*******************************************************************************
  *
- * FUNCTION:    AcpiDbCheckTextModeCorruption
+ * FUNCTION:    AcpiUtCheckTextModeCorruption
  *
  * PARAMETERS:  Table           - Table buffer
  *              TableLength     - Length of table from the table header
@@ -161,7 +90,7 @@ AcpiDbOpenDebugFile (
  ******************************************************************************/
 
 static ACPI_STATUS
-AcpiDbCheckTextModeCorruption (
+AcpiUtCheckTextModeCorruption (
     UINT8                   *Table,
     UINT32                  TableLength,
     UINT32                  FileLength)
@@ -221,7 +150,7 @@ AcpiDbCheckTextModeCorruption (
 
 /*******************************************************************************
  *
- * FUNCTION:    AcpiDbReadTable
+ * FUNCTION:    AcpiUtReadTable
  *
  * PARAMETERS:  fp              - File that contains table
  *              Table           - Return value, buffer with table
@@ -234,7 +163,7 @@ AcpiDbCheckTextModeCorruption (
  ******************************************************************************/
 
 static ACPI_STATUS
-AcpiDbReadTable (
+AcpiUtReadTable (
     FILE                    *fp,
     ACPI_TABLE_HEADER       **Table,
     UINT32                  *TableLength)
@@ -244,7 +173,7 @@ AcpiDbReadTable (
     ACPI_STATUS             Status;
     UINT32                  FileSize;
     BOOLEAN                 StandardHeader = TRUE;
-
+    INT32                   Count;
 
     /* Get the file size */
 
@@ -261,31 +190,24 @@ AcpiDbReadTable (
 
     /* Read the signature */
 
-    if (fread (&TableHeader, 1, 4, fp) != 4)
+    fseek (fp, 0, SEEK_SET);
+
+    Count = fread (&TableHeader, 1, sizeof (ACPI_TABLE_HEADER), fp);
+    if (Count != sizeof (ACPI_TABLE_HEADER))
     {
-        AcpiOsPrintf ("Could not read the table signature\n");
+        AcpiOsPrintf ("Could not read the table header\n");
         return (AE_BAD_HEADER);
     }
 
-    fseek (fp, 0, SEEK_SET);
-
     /* The RSDP table does not have standard ACPI header */
 
-    if (ACPI_COMPARE_NAME (TableHeader.Signature, "RSD "))
+    if (ACPI_VALIDATE_RSDP_SIG (TableHeader.Signature))
     {
         *TableLength = FileSize;
         StandardHeader = FALSE;
     }
     else
     {
-        /* Read the table header */
-
-        if (fread (&TableHeader, 1, sizeof (ACPI_TABLE_HEADER), fp) !=
-                sizeof (ACPI_TABLE_HEADER))
-        {
-            AcpiOsPrintf ("Could not read the table header\n");
-            return (AE_BAD_HEADER);
-        }
 
 #if 0
         /* Validate the table header/length */
@@ -360,7 +282,7 @@ AcpiDbReadTable (
 
             if (Status == AE_BAD_CHECKSUM)
             {
-                Status = AcpiDbCheckTextModeCorruption ((UINT8 *) *Table,
+                Status = AcpiUtCheckTextModeCorruption ((UINT8 *) *Table,
                             FileSize, (*Table)->Length);
                 return (Status);
             }
@@ -385,82 +307,7 @@ AcpiDbReadTable (
 
 /*******************************************************************************
  *
- * FUNCTION:    AeLocalLoadTable
- *
- * PARAMETERS:  Table           - pointer to a buffer containing the entire
- *                                table to be loaded
- *
- * RETURN:      Status
- *
- * DESCRIPTION: This function is called to load a table from the caller's
- *              buffer. The buffer must contain an entire ACPI Table including
- *              a valid header. The header fields will be verified, and if it
- *              is determined that the table is invalid, the call will fail.
- *
- ******************************************************************************/
-
-static ACPI_STATUS
-AeLocalLoadTable (
-    ACPI_TABLE_HEADER       *Table)
-{
-    ACPI_STATUS             Status = AE_OK;
-/*    ACPI_TABLE_DESC         TableInfo; */
-
-
-    ACPI_FUNCTION_TRACE (AeLocalLoadTable);
-#if 0
-
-
-    if (!Table)
-    {
-        return_ACPI_STATUS (AE_BAD_PARAMETER);
-    }
-
-    TableInfo.Pointer = Table;
-    Status = AcpiTbRecognizeTable (&TableInfo, ACPI_TABLE_ALL);
-    if (ACPI_FAILURE (Status))
-    {
-        return_ACPI_STATUS (Status);
-    }
-
-    /* Install the new table into the local data structures */
-
-    Status = AcpiTbInitTableDescriptor (&TableInfo);
-    if (ACPI_FAILURE (Status))
-    {
-        if (Status == AE_ALREADY_EXISTS)
-        {
-            /* Table already exists, no error */
-
-            Status = AE_OK;
-        }
-
-        /* Free table allocated by AcpiTbGetTable */
-
-        AcpiTbDeleteSingleTable (&TableInfo);
-        return_ACPI_STATUS (Status);
-    }
-
-#if (!defined (ACPI_NO_METHOD_EXECUTION) && !defined (ACPI_CONSTANT_EVAL_ONLY))
-
-    Status = AcpiNsLoadTable (TableInfo.InstalledDesc, AcpiGbl_RootNode);
-    if (ACPI_FAILURE (Status))
-    {
-        /* Uninstall table and free the buffer */
-
-        AcpiTbDeleteTablesByType (ACPI_TABLE_ID_DSDT);
-        return_ACPI_STATUS (Status);
-    }
-#endif
-#endif
-
-    return_ACPI_STATUS (Status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION:    AcpiDbReadTableFromFile
+ * FUNCTION:    AcpiUtReadTableFromFile
  *
  * PARAMETERS:  Filename         - File where table is located
  *              Table            - Where a pointer to the table is returned
@@ -472,7 +319,7 @@ AeLocalLoadTable (
  ******************************************************************************/
 
 ACPI_STATUS
-AcpiDbReadTableFromFile (
+AcpiUtReadTableFromFile (
     char                    *Filename,
     ACPI_TABLE_HEADER       **Table)
 {
@@ -502,7 +349,7 @@ AcpiDbReadTableFromFile (
     fprintf (stderr, "Loading Acpi table from file %10s - Length %.8u (%06X)\n",
         Filename, FileSize, FileSize);
 
-    Status = AcpiDbReadTable (File, Table, &TableLength);
+    Status = AcpiUtReadTable (File, Table, &TableLength);
     if (ACPI_FAILURE (Status))
     {
         AcpiOsPrintf ("Could not get table from the file\n");
@@ -511,81 +358,6 @@ AcpiDbReadTableFromFile (
 Exit:
     fclose(File);
     return (Status);
- }
-#endif
-
-
-/*******************************************************************************
- *
- * FUNCTION:    AcpiDbGetTableFromFile
- *
- * PARAMETERS:  Filename        - File where table is located
- *              ReturnTable     - Where a pointer to the table is returned
- *
- * RETURN:      Status
- *
- * DESCRIPTION: Load an ACPI table from a file
- *
- ******************************************************************************/
-
-ACPI_STATUS
-AcpiDbGetTableFromFile (
-    char                    *Filename,
-    ACPI_TABLE_HEADER       **ReturnTable)
-{
-#ifdef ACPI_APPLICATION
-    ACPI_STATUS             Status;
-    ACPI_TABLE_HEADER       *Table;
-    BOOLEAN                 IsAmlTable = TRUE;
-
-
-    Status = AcpiDbReadTableFromFile (Filename, &Table);
-    if (ACPI_FAILURE (Status))
-    {
-        return (Status);
-    }
-
-#ifdef ACPI_DATA_TABLE_DISASSEMBLY
-    IsAmlTable = AcpiUtIsAmlTable (Table);
-#endif
-
-    if (IsAmlTable)
-    {
-        /* Attempt to recognize and install the table */
-
-        Status = AeLocalLoadTable (Table);
-        if (ACPI_FAILURE (Status))
-        {
-            if (Status == AE_ALREADY_EXISTS)
-            {
-                AcpiOsPrintf ("Table %4.4s is already installed\n",
-                    Table->Signature);
-            }
-            else
-            {
-                AcpiOsPrintf ("Could not install table, %s\n",
-                    AcpiFormatException (Status));
-            }
-
-            return (Status);
-        }
-
-        AcpiTbPrintTableHeader (0, Table);
-
-        fprintf (stderr,
-            "Acpi table [%4.4s] successfully installed and loaded\n",
-            Table->Signature);
-    }
-
-    AcpiGbl_AcpiHardwarePresent = FALSE;
-    if (ReturnTable)
-    {
-        *ReturnTable = Table;
-    }
-
-
-#endif  /* ACPI_APPLICATION */
-    return (AE_OK);
 }
 
-#endif  /* ACPI_DEBUGGER */
+#endif
index c89d414..3504348 100644 (file)
@@ -173,163 +173,6 @@ ACPI_FIXED_EVENT_INFO       AcpiGbl_FixedEventInfo[ACPI_NUM_FIXED_EVENTS] =
 };
 #endif /* !ACPI_REDUCED_HARDWARE */
 
-
-/*******************************************************************************
- *
- * FUNCTION:    AcpiUtInitGlobals
- *
- * PARAMETERS:  None
- *
- * RETURN:      Status
- *
- * DESCRIPTION: Initialize ACPICA globals. All globals that require specific
- *              initialization should be initialized here. This allows for
- *              a warm restart.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-AcpiUtInitGlobals (
-    void)
-{
-    ACPI_STATUS             Status;
-    UINT32                  i;
-
-
-    ACPI_FUNCTION_TRACE (UtInitGlobals);
-
-
-    /* Create all memory caches */
-
-    Status = AcpiUtCreateCaches ();
-    if (ACPI_FAILURE (Status))
-    {
-        return_ACPI_STATUS (Status);
-    }
-
-    /* Address Range lists */
-
-    for (i = 0; i < ACPI_ADDRESS_RANGE_MAX; i++)
-    {
-        AcpiGbl_AddressRangeList[i] = NULL;
-    }
-
-    /* Mutex locked flags */
-
-    for (i = 0; i < ACPI_NUM_MUTEX; i++)
-    {
-        AcpiGbl_MutexInfo[i].Mutex          = NULL;
-        AcpiGbl_MutexInfo[i].ThreadId       = ACPI_MUTEX_NOT_ACQUIRED;
-        AcpiGbl_MutexInfo[i].UseCount       = 0;
-    }
-
-    for (i = 0; i < ACPI_NUM_OWNERID_MASKS; i++)
-    {
-        AcpiGbl_OwnerIdMask[i]              = 0;
-    }
-
-    /* Last OwnerID is never valid */
-
-    AcpiGbl_OwnerIdMask[ACPI_NUM_OWNERID_MASKS - 1] = 0x80000000;
-
-    /* Event counters */
-
-    AcpiMethodCount                     = 0;
-    AcpiSciCount                        = 0;
-    AcpiGpeCount                        = 0;
-
-    for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++)
-    {
-        AcpiFixedEventCount[i]              = 0;
-    }
-
-#if (!ACPI_REDUCED_HARDWARE)
-
-    /* GPE/SCI support */
-
-    AcpiGbl_AllGpesInitialized          = FALSE;
-    AcpiGbl_GpeXruptListHead            = NULL;
-    AcpiGbl_GpeFadtBlocks[0]            = NULL;
-    AcpiGbl_GpeFadtBlocks[1]            = NULL;
-    AcpiCurrentGpeCount                 = 0;
-
-    AcpiGbl_GlobalEventHandler          = NULL;
-    AcpiGbl_SciHandlerList              = NULL;
-
-#endif /* !ACPI_REDUCED_HARDWARE */
-
-    /* Global handlers */
-
-    AcpiGbl_GlobalNotify[0].Handler     = NULL;
-    AcpiGbl_GlobalNotify[1].Handler     = NULL;
-    AcpiGbl_ExceptionHandler            = NULL;
-    AcpiGbl_InitHandler                 = NULL;
-    AcpiGbl_TableHandler                = NULL;
-    AcpiGbl_InterfaceHandler            = NULL;
-
-    /* Global Lock support */
-
-    AcpiGbl_GlobalLockSemaphore         = NULL;
-    AcpiGbl_GlobalLockMutex             = NULL;
-    AcpiGbl_GlobalLockAcquired          = FALSE;
-    AcpiGbl_GlobalLockHandle            = 0;
-    AcpiGbl_GlobalLockPresent           = FALSE;
-
-    /* Miscellaneous variables */
-
-    AcpiGbl_DSDT                        = NULL;
-    AcpiGbl_CmSingleStep                = FALSE;
-    AcpiGbl_Shutdown                    = FALSE;
-    AcpiGbl_NsLookupCount               = 0;
-    AcpiGbl_PsFindCount                 = 0;
-    AcpiGbl_AcpiHardwarePresent         = TRUE;
-    AcpiGbl_LastOwnerIdIndex            = 0;
-    AcpiGbl_NextOwnerIdOffset           = 0;
-    AcpiGbl_TraceDbgLevel               = 0;
-    AcpiGbl_TraceDbgLayer               = 0;
-    AcpiGbl_DebuggerConfiguration       = DEBUGGER_THREADING;
-    AcpiGbl_DbOutputFlags               = ACPI_DB_CONSOLE_OUTPUT;
-    AcpiGbl_OsiMutex                    = NULL;
-    AcpiGbl_RegMethodsExecuted          = FALSE;
-
-    /* Hardware oriented */
-
-    AcpiGbl_EventsInitialized           = FALSE;
-    AcpiGbl_SystemAwakeAndRunning       = TRUE;
-
-    /* Namespace */
-
-    AcpiGbl_ModuleCodeList              = NULL;
-    AcpiGbl_RootNode                    = NULL;
-    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;
-
-
-#ifdef ACPI_DISASSEMBLER
-    AcpiGbl_ExternalList                = NULL;
-    AcpiGbl_NumExternalMethods          = 0;
-    AcpiGbl_ResolvedExternalMethods     = 0;
-#endif
-
-#ifdef ACPI_DEBUG_OUTPUT
-    AcpiGbl_LowestStackPointer          = ACPI_CAST_PTR (ACPI_SIZE, ACPI_SIZE_MAX);
-#endif
-
-#ifdef ACPI_DBG_TRACK_ALLOCATIONS
-    AcpiGbl_DisplayFinalMemStats        = FALSE;
-    AcpiGbl_DisableMemTracking          = FALSE;
-#endif
-
-    ACPI_DEBUGGER_EXEC (AcpiGbl_DbTerminateThreads = FALSE);
-
-    return_ACPI_STATUS (AE_OK);
-}
-
 /* Public globals */
 
 ACPI_EXPORT_SYMBOL (AcpiGbl_FADT)
index f2de225..17030be 100644 (file)
@@ -116,6 +116,162 @@ AcpiUtFreeGpeLists (
 #endif /* !ACPI_REDUCED_HARDWARE */
 
 
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiUtInitGlobals
+ *
+ * PARAMETERS:  None
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Initialize ACPICA globals. All globals that require specific
+ *              initialization should be initialized here. This allows for
+ *              a warm restart.
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiUtInitGlobals (
+    void)
+{
+    ACPI_STATUS             Status;
+    UINT32                  i;
+
+
+    ACPI_FUNCTION_TRACE (UtInitGlobals);
+
+
+    /* Create all memory caches */
+
+    Status = AcpiUtCreateCaches ();
+    if (ACPI_FAILURE (Status))
+    {
+        return_ACPI_STATUS (Status);
+    }
+
+    /* Address Range lists */
+
+    for (i = 0; i < ACPI_ADDRESS_RANGE_MAX; i++)
+    {
+        AcpiGbl_AddressRangeList[i] = NULL;
+    }
+
+    /* Mutex locked flags */
+
+    for (i = 0; i < ACPI_NUM_MUTEX; i++)
+    {
+        AcpiGbl_MutexInfo[i].Mutex          = NULL;
+        AcpiGbl_MutexInfo[i].ThreadId       = ACPI_MUTEX_NOT_ACQUIRED;
+        AcpiGbl_MutexInfo[i].UseCount       = 0;
+    }
+
+    for (i = 0; i < ACPI_NUM_OWNERID_MASKS; i++)
+    {
+        AcpiGbl_OwnerIdMask[i]              = 0;
+    }
+
+    /* Last OwnerID is never valid */
+
+    AcpiGbl_OwnerIdMask[ACPI_NUM_OWNERID_MASKS - 1] = 0x80000000;
+
+    /* Event counters */
+
+    AcpiMethodCount                     = 0;
+    AcpiSciCount                        = 0;
+    AcpiGpeCount                        = 0;
+
+    for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++)
+    {
+        AcpiFixedEventCount[i]              = 0;
+    }
+
+#if (!ACPI_REDUCED_HARDWARE)
+
+    /* GPE/SCI support */
+
+    AcpiGbl_AllGpesInitialized          = FALSE;
+    AcpiGbl_GpeXruptListHead            = NULL;
+    AcpiGbl_GpeFadtBlocks[0]            = NULL;
+    AcpiGbl_GpeFadtBlocks[1]            = NULL;
+    AcpiCurrentGpeCount                 = 0;
+
+    AcpiGbl_GlobalEventHandler          = NULL;
+    AcpiGbl_SciHandlerList              = NULL;
+
+#endif /* !ACPI_REDUCED_HARDWARE */
+
+    /* Global handlers */
+
+    AcpiGbl_GlobalNotify[0].Handler     = NULL;
+    AcpiGbl_GlobalNotify[1].Handler     = NULL;
+    AcpiGbl_ExceptionHandler            = NULL;
+    AcpiGbl_InitHandler                 = NULL;
+    AcpiGbl_TableHandler                = NULL;
+    AcpiGbl_InterfaceHandler            = NULL;
+
+    /* Global Lock support */
+
+    AcpiGbl_GlobalLockSemaphore         = NULL;
+    AcpiGbl_GlobalLockMutex             = NULL;
+    AcpiGbl_GlobalLockAcquired          = FALSE;
+    AcpiGbl_GlobalLockHandle            = 0;
+    AcpiGbl_GlobalLockPresent           = FALSE;
+
+    /* Miscellaneous variables */
+
+    AcpiGbl_DSDT                        = NULL;
+    AcpiGbl_CmSingleStep                = FALSE;
+    AcpiGbl_Shutdown                    = FALSE;
+    AcpiGbl_NsLookupCount               = 0;
+    AcpiGbl_PsFindCount                 = 0;
+    AcpiGbl_AcpiHardwarePresent         = TRUE;
+    AcpiGbl_LastOwnerIdIndex            = 0;
+    AcpiGbl_NextOwnerIdOffset           = 0;
+    AcpiGbl_TraceDbgLevel               = 0;
+    AcpiGbl_TraceDbgLayer               = 0;
+    AcpiGbl_DebuggerConfiguration       = DEBUGGER_THREADING;
+    AcpiGbl_OsiMutex                    = NULL;
+    AcpiGbl_RegMethodsExecuted          = FALSE;
+
+    /* Hardware oriented */
+
+    AcpiGbl_EventsInitialized           = FALSE;
+    AcpiGbl_SystemAwakeAndRunning       = TRUE;
+
+    /* Namespace */
+
+    AcpiGbl_ModuleCodeList              = NULL;
+    AcpiGbl_RootNode                    = NULL;
+    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;
+
+
+#ifdef ACPI_DISASSEMBLER
+    AcpiGbl_ExternalList                = NULL;
+    AcpiGbl_NumExternalMethods          = 0;
+    AcpiGbl_ResolvedExternalMethods     = 0;
+#endif
+
+#ifdef ACPI_DEBUG_OUTPUT
+    AcpiGbl_LowestStackPointer          = ACPI_CAST_PTR (ACPI_SIZE, ACPI_SIZE_MAX);
+#endif
+
+#ifdef ACPI_DBG_TRACK_ALLOCATIONS
+    AcpiGbl_DisplayFinalMemStats        = FALSE;
+    AcpiGbl_DisableMemTracking          = FALSE;
+#endif
+
+    ACPI_DEBUGGER_EXEC (AcpiGbl_DbTerminateThreads = FALSE);
+
+    return_ACPI_STATUS (AE_OK);
+}
+
+
 /******************************************************************************
  *
  * FUNCTION:    AcpiUtTerminate
diff --git a/sys/contrib/dev/acpica/source/components/utilities/utprint.c b/sys/contrib/dev/acpica/source/components/utilities/utprint.c
new file mode 100644 (file)
index 0000000..0194d56
--- /dev/null
@@ -0,0 +1,796 @@
+/******************************************************************************
+ *
+ * Module Name: utprint - Formatted printing routines
+ *
+ *****************************************************************************/
+
+/*
+ * Copyright (C) 2000 - 2014, Intel Corp.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions, and the following disclaimer,
+ *    without modification.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ *    substantially similar to the "NO WARRANTY" disclaimer below
+ *    ("Disclaimer") and any redistribution must be conditioned upon
+ *    including a substantially similar Disclaimer requirement for further
+ *    binary redistribution.
+ * 3. Neither the names of the above-listed copyright holders nor the names
+ *    of any contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * NO WARRANTY
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGES.
+ */
+
+#include "acpi.h"
+#include "accommon.h"
+
+#define _COMPONENT          ACPI_UTILITIES
+        ACPI_MODULE_NAME    ("utprint")
+
+
+#define ACPI_FORMAT_SIGN            0x01
+#define ACPI_FORMAT_SIGN_PLUS       0x02
+#define ACPI_FORMAT_SIGN_PLUS_SPACE 0x04
+#define ACPI_FORMAT_ZERO            0x08
+#define ACPI_FORMAT_LEFT            0x10
+#define ACPI_FORMAT_UPPER           0x20
+#define ACPI_FORMAT_PREFIX          0x40
+
+
+/* Local prototypes */
+
+static ACPI_SIZE
+AcpiUtBoundStringLength (
+    const char              *String,
+    ACPI_SIZE               Count);
+
+static char *
+AcpiUtBoundStringOutput (
+    char                    *String,
+    const char              *End,
+    char                    c);
+
+static char *
+AcpiUtFormatNumber (
+    char                    *String,
+    char                    *End,
+    UINT64                  Number,
+    UINT8                   Base,
+    INT32                   Width,
+    INT32                   Precision,
+    UINT8                   Type);
+
+static char *
+AcpiUtPutNumber (
+    char                    *String,
+    UINT64                  Number,
+    UINT8                   Base,
+    BOOLEAN                 Upper);
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiUtBoundStringLength
+ *
+ * PARAMETERS:  String              - String with boundary
+ *              Count               - Boundary of the string
+ *
+ * RETURN:      Length of the string.
+ *
+ * DESCRIPTION: Calculate the length of a string with boundary.
+ *
+ ******************************************************************************/
+
+static ACPI_SIZE
+AcpiUtBoundStringLength (
+    const char              *String,
+    ACPI_SIZE               Count)
+{
+    UINT32                  Length = 0;
+
+
+    while (*String && Count)
+    {
+        Length++;
+        String++;
+        Count--;
+    }
+
+    return (Length);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiUtBoundStringOutput
+ *
+ * PARAMETERS:  String              - String with boundary
+ *              End                 - Boundary of the string
+ *              c                   - Character to be output to the string
+ *
+ * RETURN:      Updated position for next valid character
+ *
+ * DESCRIPTION: Output a character into a string with boundary check.
+ *
+ ******************************************************************************/
+
+static char *
+AcpiUtBoundStringOutput (
+    char                    *String,
+    const char              *End,
+    char                    c)
+{
+
+    if (String < End)
+    {
+        *String = c;
+    }
+    ++String;
+
+    return (String);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiUtPutNumber
+ *
+ * PARAMETERS:  String              - Buffer to hold reverse-ordered string
+ *              Number              - Integer to be converted
+ *              Base                - Base of the integer
+ *              Upper               - Whether or not using upper cased digits
+ *
+ * RETURN:      Updated position for next valid character
+ *
+ * DESCRIPTION: Convert an integer into a string, note that, the string holds a
+ *              reversed ordered number without the trailing zero.
+ *
+ ******************************************************************************/
+
+static char *
+AcpiUtPutNumber (
+    char                    *String,
+    UINT64                  Number,
+    UINT8                   Base,
+    BOOLEAN                 Upper)
+{
+    const char              LowerDigits[] = "0123456789abcdef";
+    const char              UpperDigits[] = "0123456789ABCDEF";
+    const char              *Digits;
+    UINT64                  DigitIndex;
+    char                    *Pos;
+
+
+    Pos = String;
+    Digits = Upper ? UpperDigits : LowerDigits;
+
+    if (Number == 0)
+    {
+        *(Pos++) = '0';
+    }
+    else
+    {
+        while (Number)
+        {
+            (void) AcpiUtDivide (Number, Base, &Number, &DigitIndex);
+            *(Pos++) = Digits[DigitIndex];
+        }
+    }
+    /* *(Pos++) = '0'; */
+
+    return (Pos);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiUtScanNumber
+ *
+ * PARAMETERS:  String              - String buffer
+ *              NumberPtr           - Where the number is returned
+ *
+ * RETURN:      Updated position for next valid character
+ *
+ * DESCRIPTION: Scan a string for a decimal integer.
+ *
+ ******************************************************************************/
+
+const char *
+AcpiUtScanNumber (
+    const char              *String,
+    UINT64                  *NumberPtr)
+{
+    UINT64                  Number = 0;
+
+
+    while (ACPI_IS_DIGIT (*String))
+    {
+        Number *= 10;
+        Number += *(String++) - '0';
+    }
+    *NumberPtr = Number;
+
+    return (String);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiUtPrintNumber
+ *
+ * PARAMETERS:  String              - String buffer
+ *              Number              - The number to be converted
+ *
+ * RETURN:      Updated position for next valid character
+ *
+ * DESCRIPTION: Print a decimal integer into a string.
+ *
+ ******************************************************************************/
+
+const char *
+AcpiUtPrintNumber (
+    char                    *String,
+    UINT64                  Number)
+{
+    char                    AsciiString[20];
+    const char              *Pos1;
+    char                    *Pos2;
+
+
+    Pos1 = AcpiUtPutNumber (AsciiString, Number, 10, FALSE);
+    Pos2 = String;
+
+    while (Pos1 != AsciiString)
+    {
+        *(Pos2++) = *(--Pos1);
+    }
+    *Pos2 = 0;
+
+    return (String);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiUtFormatNumber
+ *
+ * PARAMETERS:  String              - String buffer with boundary
+ *              End                 - Boundary of the string
+ *              Number              - The number to be converted
+ *              Base                - Base of the integer
+ *              Width               - Field width
+ *              Precision           - Precision of the integer
+ *              Type                - Special printing flags
+ *
+ * RETURN:      Updated position for next valid character
+ *
+ * DESCRIPTION: Print an integer into a string with any base and any precision.
+ *
+ ******************************************************************************/
+
+static char *
+AcpiUtFormatNumber (
+    char                    *String,
+    char                    *End,
+    UINT64                  Number,
+    UINT8                   Base,
+    INT32                   Width,
+    INT32                   Precision,
+    UINT8                   Type)
+{
+    char                    Sign;
+    char                    Zero;
+    BOOLEAN                 NeedPrefix;
+    BOOLEAN                 Upper;
+    INT32                   i;
+    char                    ReversedString[66];
+
+
+    /* Perform sanity checks */
+
+    if (Base < 2 || Base > 16)
+    {
+        return NULL;
+    }
+    if (Type & ACPI_FORMAT_LEFT)
+    {
+        Type &= ~ACPI_FORMAT_ZERO;
+    }
+
+    NeedPrefix = ((Type & ACPI_FORMAT_PREFIX) && Base != 10) ? TRUE : FALSE;
+    Upper = (Type & ACPI_FORMAT_UPPER) ? TRUE : FALSE;
+    Zero = (Type & ACPI_FORMAT_ZERO) ? '0' : ' ';
+
+    /* Calculate size according to sign and prefix */
+
+    Sign = '\0';
+    if (Type & ACPI_FORMAT_SIGN)
+    {
+        if ((INT64) Number < 0)
+        {
+            Sign = '-';
+            Number = - (INT64) Number;
+            Width--;
+        }
+        else if (Type & ACPI_FORMAT_SIGN_PLUS)
+        {
+            Sign = '+';
+            Width--;
+        }
+        else if (Type & ACPI_FORMAT_SIGN_PLUS_SPACE)
+        {
+            Sign = ' ';
+            Width--;
+        }
+    }
+    if (NeedPrefix)
+    {
+        Width--;
+        if (Base == 16)
+        {
+            Width--;
+        }
+    }
+
+    /* Generate full string in reverse order */
+
+    i = ACPI_PTR_DIFF (
+            AcpiUtPutNumber (ReversedString, Number, Base, Upper),
+           ReversedString);
+
+    /* Printing 100 using %2d gives "100", not "00" */
+
+    if (i > Precision)
+    {
+        Precision = i;
+    }
+    Width -= Precision;
+
+    /* Output the string */
+
+    if (!(Type & (ACPI_FORMAT_ZERO | ACPI_FORMAT_LEFT)))
+    {
+        while (--Width >= 0)
+        {
+            String = AcpiUtBoundStringOutput (String, End, ' ');
+        }
+    }
+    if (Sign)
+    {
+        String = AcpiUtBoundStringOutput (String, End, Sign);
+    }
+    if (NeedPrefix)
+    {
+        String = AcpiUtBoundStringOutput (String, End, '0');
+        if (Base == 16)
+        {
+            String = AcpiUtBoundStringOutput (String, End,
+                        Upper ? 'X' : 'x');
+       }
+    }
+    if (!(Type & ACPI_FORMAT_LEFT))
+    {
+        while (--Width >= 0)
+        {
+            String = AcpiUtBoundStringOutput (String, End, Zero);
+        }
+    }
+    while (i <= --Precision)
+    {
+        String = AcpiUtBoundStringOutput (String, End, '0');
+    }
+    while (--i >= 0)
+    {
+        String = AcpiUtBoundStringOutput (String, End,
+                    ReversedString[i]);
+    }
+    while (--Width >= 0)
+    {
+        String = AcpiUtBoundStringOutput (String, End, ' ');
+    }
+
+    return (String);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiUtVsnprintf
+ *
+ * PARAMETERS:  String              - String with boundary
+ *              Size                - Boundary of the string
+ *              Format              - Standard printf format
+ *              Args                - Argument list
+ *
+ * RETURN:      Size of successfully output bytes
+ *
+ * DESCRIPTION: Formatted output to a string using argument list pointer.
+ *
+ ******************************************************************************/
+
+int
+AcpiUtVsnprintf (
+    char                    *String,
+    ACPI_SIZE               Size,
+    const char              *Format,
+    va_list                 Args)
+{
+    UINT8                   Base = 10;
+    UINT8                   Type = 0;
+    INT32                   Width = -1;
+    INT32                   Precision = -1;
+    char                    Qualifier = 0;
+    UINT64                  Number;
+    char                    *Pos;
+    char                    *End;
+    char                    c;
+    const char              *s;
+    const void              *p;
+    INT32                   Length;
+    int                     i;
+
+
+    Pos = String;
+    End = String + Size;
+
+    for (; *Format ; ++Format)
+    {
+        if (*Format != '%')
+        {
+            Pos = AcpiUtBoundStringOutput (Pos, End, *Format);
+            continue;
+        }
+
+        /* Process sign */
+
+        do
+        {
+            ++Format;
+            if (*Format == '#')
+            {
+                Type |= ACPI_FORMAT_PREFIX;
+            }
+            else if (*Format == '0')
+            {
+                Type |= ACPI_FORMAT_ZERO;
+            }
+            else if (*Format == '+')
+            {
+                Type |= ACPI_FORMAT_SIGN_PLUS;
+            }
+            else if (*Format == ' ')
+            {
+                Type |= ACPI_FORMAT_SIGN_PLUS_SPACE;
+            }
+            else if (*Format == '-')
+            {
+                Type |= ACPI_FORMAT_LEFT;
+            }
+            else
+            {
+                break;
+            }
+        } while (1);
+
+        /* Process width */
+
+        if (ACPI_IS_DIGIT (*Format))
+        {
+            Format = AcpiUtScanNumber (Format, &Number);
+            Width = (INT32) Number;
+        }
+        else if (*Format == '*')
+        {
+            ++Format;
+            Width = va_arg(Args, int);
+            if (Width < 0)
+            {
+                Width = -Width;
+                Type |= ACPI_FORMAT_LEFT;
+            }
+        }
+
+        /* Process precision */
+
+        if (*Format == '.')
+        {
+            ++Format;
+            if (ACPI_IS_DIGIT(*Format))
+            {
+                Format = AcpiUtScanNumber (Format, &Number);
+                Precision = (INT32) Number;
+            }
+            else if (*Format == '*')
+            {
+                ++Format;
+                Precision = va_arg(Args, int);
+            }
+            if (Precision < 0)
+            {
+                Precision = 0;
+            }
+        }
+
+        /* Process qualifier */
+
+        if (*Format == 'h' || *Format == 'l' || *Format == 'L')
+        {
+            Qualifier = *Format;
+            ++Format;
+            if (Qualifier == 'l' && *Format == 'l')
+            {
+                Qualifier = 'L';
+                ++Format;
+            }
+        }
+
+        switch (*Format)
+        {
+        case '%':
+
+            Pos = AcpiUtBoundStringOutput (Pos, End, '%');
+            continue;
+
+        case 'c':
+
+            if (!(Type & ACPI_FORMAT_LEFT))
+            {
+                while (--Width > 0)
+                {
+                    Pos = AcpiUtBoundStringOutput (Pos, End, ' ');
+                }
+            }
+            c = (char) va_arg (Args, int);
+            Pos = AcpiUtBoundStringOutput (Pos, End, c);
+            while (--Width > 0)
+            {
+                Pos = AcpiUtBoundStringOutput (Pos, End, ' ');
+            }
+            continue;
+
+        case 's':
+
+            s = va_arg (Args, char *);
+            if (!s)
+            {
+                s = "<NULL>";
+            }
+            Length = AcpiUtBoundStringLength (s, Precision);
+            if (!(Type & ACPI_FORMAT_LEFT))
+            {
+                while (Length < Width--)
+                {
+                    Pos = AcpiUtBoundStringOutput (Pos, End, ' ');
+                }
+            }
+            for (i = 0; i < Length; ++i)
+            {
+                Pos = AcpiUtBoundStringOutput (Pos, End, *s);
+                ++s;
+            }
+            while (Length < Width--)
+            {
+                Pos = AcpiUtBoundStringOutput (Pos, End, ' ');
+            }
+            continue;
+
+        case 'o':
+
+            Base = 8;
+            break;
+
+        case 'X':
+
+            Type |= ACPI_FORMAT_UPPER;
+
+        case 'x':
+
+            Base = 16;
+            break;
+
+        case 'd':
+        case 'i':
+
+            Type |= ACPI_FORMAT_SIGN;
+
+        case 'u':
+
+            break;
+
+        case 'p':
+
+            if (Width == -1)
+            {
+                Width = 2 * sizeof (void *);
+                Type |= ACPI_FORMAT_ZERO;
+            }
+            p = va_arg (Args, void *);
+            Pos = AcpiUtFormatNumber (Pos, End,
+                    ACPI_TO_INTEGER (p),
+                    16, Width, Precision, Type);
+            continue;
+
+        default:
+
+            Pos = AcpiUtBoundStringOutput (Pos, End, '%');
+            if (*Format)
+            {
+                Pos = AcpiUtBoundStringOutput (Pos, End, *Format);
+            }
+            else
+            {
+                --Format;
+            }
+            continue;
+        }
+
+        if (Qualifier == 'L')
+        {
+            Number = va_arg (Args, UINT64);
+            if (Type & ACPI_FORMAT_SIGN)
+            {
+                Number = (INT64) Number;
+            }
+        }
+        else if (Qualifier == 'l')
+        {
+            Number = va_arg (Args, unsigned long);
+            if (Type & ACPI_FORMAT_SIGN)
+            {
+                Number = (INT32) Number;
+            }
+        }
+        else if (Qualifier == 'h')
+        {
+            Number = (UINT16) va_arg (Args, int);
+            if (Type & ACPI_FORMAT_SIGN)
+            {
+                Number = (INT16) Number;
+            }
+        }
+        else
+        {
+            Number = va_arg (Args, unsigned int);
+            if (Type & ACPI_FORMAT_SIGN)
+            {
+                Number = (signed int) Number;
+            }
+        }
+        Pos = AcpiUtFormatNumber(Pos, End, Number, Base,
+                Width, Precision, Type);
+    }
+
+    if (Size > 0)
+    {
+        if (Pos < End)
+        {
+            *Pos = '\0';
+        }
+        else
+        {
+            End[-1] = '\0';
+        }
+    }
+
+    return (ACPI_PTR_DIFF (Pos, String));
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiUtSnprintf
+ *
+ * PARAMETERS:  String              - String with boundary
+ *              Size                - Boundary of the string
+ *              Format, ...         - Standard printf format
+ *
+ * RETURN:      Size of successfully output bytes
+ *
+ * DESCRIPTION: Formatted output to a string.
+ *
+ ******************************************************************************/
+
+int
+AcpiUtSnprintf (
+    char                    *String,
+    ACPI_SIZE               Size,
+    const char              *Format,
+    ...)
+{
+    va_list                 Args;
+    int                     Length;
+
+
+    va_start (Args, Format);
+    Length = AcpiUtVsnprintf (String, Size, Format, Args);
+    va_end (Args);
+
+    return (Length);
+}
+
+
+#ifdef ACPI_APPLICATION
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiUtFileVprintf
+ *
+ * PARAMETERS:  File                - File descriptor
+ *              Format              - Standard printf format
+ *              Args                - Argument list
+ *
+ * RETURN:      Size of successfully output bytes
+ *
+ * DESCRIPTION: Formatted output to a file using argument list pointer.
+ *
+ ******************************************************************************/
+
+int
+AcpiUtFileVprintf (
+    ACPI_FILE               File,
+    const char              *Format,
+    va_list                 Args)
+{
+    ACPI_CPU_FLAGS          Flags;
+    int                     Length;
+
+
+    Flags = AcpiOsAcquireLock (AcpiGbl_PrintLock);
+    Length = AcpiUtVsnprintf(AcpiGbl_PrintBuffer,
+                sizeof (AcpiGbl_PrintBuffer), Format, Args);
+    (void) AcpiOsWriteFile (File, AcpiGbl_PrintBuffer, Length, 1);
+    AcpiOsReleaseLock (AcpiGbl_PrintLock, Flags);
+
+    return (Length);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiUtFilePrintf
+ *
+ * PARAMETERS:  File                - File descriptor
+ *              Format, ...         - Standard printf format
+ *
+ * RETURN:      Size of successfully output bytes
+ *
+ * DESCRIPTION: Formatted output to a file.
+ *
+ ******************************************************************************/
+
+int
+AcpiUtFilePrintf (
+    ACPI_FILE               File,
+    const char              *Format,
+    ...)
+{
+    va_list                 Args;
+    int                     Length;
+
+
+    va_start (Args, Format);
+    Length = AcpiUtFileVprintf (File, Format, Args);
+    va_end (Args);
+
+    return (Length);
+}
+#endif
index fa8e386..f754789 100644 (file)
 /* Macros for usage messages */
 
 #define ACPI_USAGE_HEADER(Usage) \
-    printf ("Usage: %s\nOptions:\n", Usage);
+    AcpiOsPrintf ("Usage: %s\nOptions:\n", Usage);
+
+#define ACPI_USAGE_TEXT(Description) \
+    AcpiOsPrintf (Description);
 
 #define ACPI_OPTION(Name, Description) \
-    printf ("  %-18s%s\n", Name, Description);
+    AcpiOsPrintf ("  %-18s%s\n", Name, Description);
 
 
 #define FILE_SUFFIX_DISASSEMBLY     "dsl"
@@ -119,7 +122,7 @@ extern char                 *AcpiGbl_Optarg;
  */
 UINT32
 CmGetFileSize (
-    FILE                    *File);
+    ACPI_FILE               File);
 
 
 #ifndef ACPI_DUMP_APP
index f85ec01..a856257 100644 (file)
@@ -377,11 +377,6 @@ AcpiDbGetTableFromFile (
     char                    *Filename,
     ACPI_TABLE_HEADER       **Table);
 
-ACPI_STATUS
-AcpiDbReadTableFromFile (
-    char                    *Filename,
-    ACPI_TABLE_HEADER       **Table);
-
 
 /*
  * dbhistry - debugger HISTORY command
index 06225c1..a83f8c3 100644 (file)
@@ -301,7 +301,7 @@ ACPI_GLOBAL (UINT32,                    AcpiGbl_TraceDbgLayer);
  *
  ****************************************************************************/
 
-ACPI_GLOBAL (UINT8,                     AcpiGbl_DbOutputFlags);
+ACPI_INIT_GLOBAL (UINT8,                AcpiGbl_DbOutputFlags, ACPI_DB_CONSOLE_OUTPUT);
 
 #ifdef ACPI_DISASSEMBLER
 
@@ -367,6 +367,12 @@ ACPI_GLOBAL (UINT32,                    AcpiGbl_NumObjects);
 #ifdef ACPI_APPLICATION
 
 ACPI_INIT_GLOBAL (ACPI_FILE,            AcpiGbl_DebugFile, NULL);
+ACPI_INIT_GLOBAL (ACPI_FILE,            AcpiGbl_OutputFile, NULL);
+
+/* Print buffer */
+
+ACPI_GLOBAL (ACPI_SPINLOCK,             AcpiGbl_PrintLock);     /* For print buffer */
+ACPI_GLOBAL (char,                      AcpiGbl_PrintBuffer[1024]);
 
 #endif /* ACPI_APPLICATION */
 
index 3db143c..f5daace 100644 (file)
@@ -55,7 +55,6 @@
 #define METHOD_NAME__HID        "_HID"
 #define METHOD_NAME__INI        "_INI"
 #define METHOD_NAME__PLD        "_PLD"
-#define METHOD_NAME__PRP        "_PRP"
 #define METHOD_NAME__PRS        "_PRS"
 #define METHOD_NAME__PRT        "_PRT"
 #define METHOD_NAME__PRW        "_PRW"
index 8c65613..fb1f565 100644 (file)
@@ -62,8 +62,6 @@
 #include "acrestyp.h"           /* Resource Descriptor structs */
 #include "acpiosxf.h"           /* OSL interfaces (ACPICA-to-OS) */
 #include "acpixf.h"             /* ACPI core subsystem external interfaces */
-#ifdef ACPI_NATIVE_INTERFACE_HEADER
-#include ACPI_NATIVE_INTERFACE_HEADER
-#endif
+#include "platform/acenvex.h"   /* Extra environment-specific items */
 
 #endif /* __ACPI_H__ */
index 3fb6ea5..a006759 100644 (file)
@@ -582,4 +582,53 @@ AcpiOsCloseDirectory (
 #endif
 
 
+/*
+ * File I/O and related support
+ */
+#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsOpenFile
+ACPI_FILE
+AcpiOsOpenFile (
+    const char              *Path,
+    UINT8                   Modes);
+#endif
+
+#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCloseFile
+void
+AcpiOsCloseFile (
+    ACPI_FILE               File);
+#endif
+
+#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadFile
+int
+AcpiOsReadFile (
+    ACPI_FILE               File,
+    void                    *Buffer,
+    ACPI_SIZE               Size,
+    ACPI_SIZE               Count);
+#endif
+
+#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWriteFile
+int
+AcpiOsWriteFile (
+    ACPI_FILE               File,
+    void                    *Buffer,
+    ACPI_SIZE               Size,
+    ACPI_SIZE               Count);
+#endif
+
+#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetFileOffset
+long
+AcpiOsGetFileOffset (
+    ACPI_FILE               File);
+#endif
+
+#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSetFileOffset
+ACPI_STATUS
+AcpiOsSetFileOffset (
+    ACPI_FILE               File,
+    long                    Offset,
+    UINT8                   From);
+#endif
+
+
 #endif /* __ACPIOSXF_H__ */
index 53d2c1f..31adb70 100644 (file)
@@ -46,7 +46,7 @@
 
 /* Current ACPICA subsystem version in YYYYMMDD format */
 
-#define ACPI_CA_VERSION                 0x20140424
+#define ACPI_CA_VERSION                 0x20140627
 
 #include "acconfig.h"
 #include "actypes.h"
@@ -161,6 +161,15 @@ ACPI_INIT_GLOBAL (UINT8,            AcpiGbl_CreateOsiMethod, TRUE);
  */
 ACPI_INIT_GLOBAL (UINT8,            AcpiGbl_UseDefaultRegisterWidths, TRUE);
 
+/*
+ * Whether or not to verify the table checksum before installation. Set
+ * this to TRUE to verify the table checksum before install it to the table
+ * manager. Note that enabling this option causes errors to happen in some
+ * OSPMs during early initialization stages. Default behavior is to do such
+ * verification.
+ */
+ACPI_INIT_GLOBAL (UINT8,            AcpiGbl_VerifyTableChecksum, TRUE);
+
 /*
  * Optionally enable output from the AML Debug Object.
  */
@@ -334,6 +343,24 @@ ACPI_GLOBAL (BOOLEAN,               AcpiGbl_SystemAwakeAndRunning);
 #endif /* ACPI_DEBUG_OUTPUT */
 
 
+/*
+ * Application prototypes
+ *
+ * All interfaces used by application will be configured
+ * out of the ACPICA build unless the ACPI_APPLICATION
+ * flag is defined.
+ */
+#ifdef ACPI_APPLICATION
+#define ACPI_APP_DEPENDENT_RETURN_VOID(Prototype) \
+    Prototype;
+
+#else
+#define ACPI_APP_DEPENDENT_RETURN_VOID(Prototype) \
+    static ACPI_INLINE Prototype {return;}
+
+#endif /* ACPI_APPLICATION */
+
+
 /*****************************************************************************
  *
  * ACPICA public interface prototypes
@@ -1136,4 +1163,11 @@ AcpiDebugPrintRaw (
     const char              *Format,
     ...))
 
+ACPI_APP_DEPENDENT_RETURN_VOID (
+ACPI_PRINTF_LIKE(1)
+void ACPI_INTERNAL_VAR_XFACE
+AcpiLogError (
+    const char              *Format,
+    ...))
+
 #endif /* __ACXFACE_H__ */
index d7af2db..3ab4ae0 100644 (file)
@@ -688,12 +688,6 @@ const ACPI_PREDEFINED_INFO          AcpiGbl_PredefinedMethods[] =
                 METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */
                     PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0,0,0),
 
-    {{"_PRP",   METHOD_0ARGS,
-                METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each: 1 Str, 1 Int/Str/Pkg */
-                    PACKAGE_INFO (ACPI_PTYPE2, ACPI_RTYPE_STRING, 1,
-                        ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING |
-                        ACPI_RTYPE_PACKAGE | ACPI_RTYPE_REFERENCE, 1,0),
-
     {{"_PRS",   METHOD_0ARGS,
                 METHOD_RETURNS (ACPI_RTYPE_BUFFER)}},
 
index 672b6b4..e266924 100644 (file)
@@ -86,6 +86,15 @@ void
 AcpiTbReleaseTempTable (
     ACPI_TABLE_DESC         *TableDesc);
 
+ACPI_STATUS
+AcpiTbValidateTempTable (
+    ACPI_TABLE_DESC         *TableDesc);
+
+ACPI_STATUS
+AcpiTbVerifyTempTable (
+    ACPI_TABLE_DESC         *TableDesc,
+    char                    *Signature);
+
 BOOLEAN
 AcpiTbIsTableLoaded (
     UINT32                  TableIndex);
@@ -135,11 +144,6 @@ void
 AcpiTbInvalidateTable (
     ACPI_TABLE_DESC         *TableDesc);
 
-ACPI_STATUS
-AcpiTbVerifyTable (
-    ACPI_TABLE_DESC         *TableDesc,
-    char                    *Signature);
-
 void
 AcpiTbOverrideTable (
     ACPI_TABLE_DESC         *OldTableDesc);
index 7a8d5c5..5e1c307 100644 (file)
 typedef unsigned char                   BOOLEAN;
 typedef unsigned char                   UINT8;
 typedef unsigned short                  UINT16;
+typedef short                           INT16;
 typedef COMPILER_DEPENDENT_UINT64       UINT64;
 typedef COMPILER_DEPENDENT_INT64        INT64;
 
@@ -1336,4 +1337,19 @@ typedef struct acpi_memory_list
 #define ACPI_OSI_WIN_8                  0x0C
 
 
+/* Definitions of file IO */
+
+#define ACPI_FILE_READING               0x01
+#define ACPI_FILE_WRITING               0x02
+#define ACPI_FILE_BINARY                0x04
+
+#define ACPI_FILE_BEGIN                 0x01
+#define ACPI_FILE_END                   0x02
+
+
+/* Definitions of getopt */
+
+#define ACPI_OPT_END                    -1
+
+
 #endif /* __ACTYPES_H__ */
index 5c87313..b006234 100644 (file)
@@ -96,7 +96,6 @@ extern const char                       *AcpiGbl_PtDecode[];
 #ifdef ACPI_ASL_COMPILER
 
 #include <stdio.h>
-extern FILE                 *AcpiGbl_OutputFile;
 
 #define ACPI_MSG_REDIRECT_BEGIN \
     FILE                    *OutputFile = AcpiGbl_OutputFile; \
@@ -252,6 +251,11 @@ ACPI_SIZE
 AcpiUtStrlen (
     const char              *String);
 
+char *
+AcpiUtStrchr (
+    const char              *String,
+    int                     ch);
+
 char *
 AcpiUtStrcpy (
     char                    *DstString,
@@ -340,7 +344,7 @@ extern const UINT8 _acpi_ctype[];
 #define ACPI_IS_XDIGIT(c) (_acpi_ctype[(unsigned char)(c)] & (_ACPI_XD))
 #define ACPI_IS_UPPER(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_UP))
 #define ACPI_IS_LOWER(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_LO))
-#define ACPI_IS_PRINT(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_LO | _ACPI_UP | _ACPI_DI | _ACPI_SP | _ACPI_PU))
+#define ACPI_IS_PRINT(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_LO | _ACPI_UP | _ACPI_DI | _ACPI_XS | _ACPI_PU))
 #define ACPI_IS_ALPHA(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_LO | _ACPI_UP))
 
 #endif /* !ACPI_USE_SYSTEM_CLIBRARY */
@@ -482,6 +486,16 @@ AcpiUtDumpBuffer (
     UINT32                  Display,
     UINT32                  Offset);
 
+#ifdef ACPI_APPLICATION
+void
+AcpiUtDumpBufferToFile (
+    ACPI_FILE               File,
+    UINT8                   *Buffer,
+    UINT32                  Count,
+    UINT32                  Display,
+    UINT32                  BaseOffset);
+#endif
+
 void
 AcpiUtReportError (
     char                    *ModuleName,
@@ -550,6 +564,17 @@ AcpiUtExecutePowerMethods (
     UINT8                   *OutValues);
 
 
+/*
+ * utfileio - file operations
+ */
+#ifdef ACPI_APPLICATION
+ACPI_STATUS
+AcpiUtReadTableFromFile (
+    char                    *Filename,
+    ACPI_TABLE_HEADER       **Table);
+#endif
+
+
 /*
  * utids - device ID support
  */
@@ -1110,4 +1135,45 @@ const AH_DEVICE_ID *
 AcpiAhMatchHardwareId (
     char                    *Hid);
 
+/*
+ * utprint - printf/vprintf output functions
+ */
+const char *
+AcpiUtScanNumber (
+    const char              *String,
+    UINT64                  *NumberPtr);
+
+const char *
+AcpiUtPrintNumber (
+    char                    *String,
+    UINT64                  Number);
+
+int
+AcpiUtVsnprintf (
+    char                    *String,
+    ACPI_SIZE               Size,
+    const char              *Format,
+    va_list                 Args);
+
+int
+AcpiUtSnprintf (
+    char                    *String,
+    ACPI_SIZE               Size,
+    const char              *Format,
+    ...);
+
+#ifdef ACPI_APPLICATION
+int
+AcpiUtFileVprintf (
+    ACPI_FILE               File,
+    const char              *Format,
+    va_list                 Args);
+
+int
+AcpiUtFilePrintf (
+    ACPI_FILE               File,
+    const char              *Format,
+    ...);
+#endif
+
 #endif /* _ACUTILS_H */
index cf8a2a3..09581c4 100644 (file)
 
 
 /*
- * The vsnprintf function is defined by c99, but cygwin/gcc does not
- * enable this prototype when the -ansi flag is set. Also related to
- * __STRICT_ANSI__. So, we just declare the prototype here.
+ * The vsnprintf/snprintf functions are defined by c99, but cygwin/gcc
+ * does not enable this prototype when the -ansi flag is set. Also related
+ * to __STRICT_ANSI__. So, we just declare the prototype here.
  */
 int
 vsnprintf (char *s, size_t n, const char *format, va_list ap);
 
+int
+snprintf (char *s, size_t n, const char *format, ...);
+
 #endif /* __ACCYGWIN_H__ */
index 1fafeb4..cc24fbb 100644 (file)
 #ifndef __ACEFI_H__
 #define __ACEFI_H__
 
+#include <stdarg.h>
+#if defined(_GNU_EFI)
+#include <stdint.h>
+#include <unistd.h>
+#endif
 #include <efi.h>
 #include <efistdarg.h>
 #include <efilib.h>
 
 
+/* AED EFI definitions */
+
+#if defined(_AED_EFI)
+
 /* _int64 works for both IA32 and IA64 */
 
 #define COMPILER_DEPENDENT_INT64   __int64
 
 #pragma warning(disable:4142)
 
+#endif
+
+
+/* GNU EFI definitions */
+
+#if defined(_GNU_EFI)
+
+/* Using GCC for GNU EFI */
+
+#include "acgcc.h"
+
+#undef ACPI_USE_SYSTEM_CLIBRARY
+#undef ACPI_USE_STANDARD_HEADERS
+#undef ACPI_USE_NATIVE_DIVIDE
+#define ACPI_USE_SYSTEM_INTTYPES
+
+#define ACPI_FILE           SIMPLE_TEXT_OUTPUT_INTERFACE *
+#define ACPI_FILE_OUT       ST->ConOut
+#define ACPI_FILE_ERR       ST->ConOut
+
+/*
+ * Math helpers
+ */
+#define ACPI_DIV_64_BY_32(n_hi, n_lo, d32, q32, r32) \
+    do {                                             \
+        UINT64 __n = ((UINT64) n_hi) << 32 | (n_lo); \
+        (q32) = DivU64x32 ((__n), (d32), &(r32));    \
+    } while (0)
+
+#define ACPI_SHIFT_RIGHT_64(n_hi, n_lo) \
+    do {                                \
+        (n_lo) >>= 1;                   \
+        (n_lo) |= (((n_hi) & 1) << 31); \
+        (n_hi) >>= 1;                   \
+    } while (0)
+
+/*
+ * EFI specific prototypes
+ */
+EFI_STATUS
+efi_main (
+    EFI_HANDLE              Image,
+    EFI_SYSTEM_TABLE        *SystemTab);
+
+int
+acpi_main (
+    int                     argc,
+    char                    *argv[]);
+
+
+#endif
+
 
 #endif /* __ACEFI_H__ */
index 1a9ef38..a73d56f 100644 (file)
 #define ACPI_DBG_TRACK_ALLOCATIONS
 #endif
 
-/* AcpiNames configuration. Single threaded with debugger output enabled. */
-
-#ifdef ACPI_NAMES_APP
-#define ACPI_DEBUGGER
-#define ACPI_APPLICATION
-#define ACPI_SINGLE_THREADED
-#endif
-
 /*
- * AcpiBin/AcpiDump/AcpiSrc/AcpiXtract/Example configuration. All single
- * threaded, with no debug output.
+ * AcpiBin/AcpiDump/AcpiHelp/AcpiNames/AcpiSrc/AcpiXtract/Example configuration.
+ * All single threaded.
  */
 #if (defined ACPI_BIN_APP)      || \
     (defined ACPI_DUMP_APP)     || \
+    (defined ACPI_HELP_APP)     || \
+    (defined ACPI_NAMES_APP)    || \
     (defined ACPI_SRC_APP)      || \
     (defined ACPI_XTRACT_APP)   || \
     (defined ACPI_EXAMPLE_APP)
 #define ACPI_SINGLE_THREADED
 #endif
 
+/* AcpiHelp configuration. Error messages disabled. */
+
 #ifdef ACPI_HELP_APP
-#define ACPI_APPLICATION
-#define ACPI_SINGLE_THREADED
 #define ACPI_NO_ERROR_MESSAGES
 #endif
 
+/* AcpiNames configuration. Debug output enabled. */
+
+#ifdef ACPI_NAMES_APP
+#define ACPI_DEBUG_OUTPUT
+#endif
+
+/* AcpiExec/AcpiNames/Example configuration. Native RSDP used. */
+
+#if (defined ACPI_EXEC_APP)     || \
+    (defined ACPI_EXAMPLE_APP)  || \
+    (defined ACPI_NAMES_APP)
+#define ACPI_USE_NATIVE_RSDP_POINTER
+#endif
+
+/* AcpiDump configuration. Native mapping used if provied by OSPMs */
+
+#ifdef ACPI_DUMP_APP
+#define ACPI_USE_NATIVE_MEMORY_MAPPING
+#define USE_NATIVE_ALLOCATE_ZEROED
+#endif
+
+/* AcpiNames/Example configuration. Hardware disabled */
+
+#if (defined ACPI_EXAMPLE_APP)  || \
+    (defined ACPI_NAMES_APP)
+#define ACPI_REDUCED_HARDWARE 1
+#endif
+
 /* Linkable ACPICA library */
 
 #ifdef ACPI_LIBRARY
 #elif defined(_AED_EFI)
 #include "acefi.h"
 
+#elif defined(_GNU_EFI)
+#include "acefi.h"
+
 #elif defined(__HAIKU__)
 #include "achaiku.h"
 
@@ -404,8 +429,12 @@ typedef char *va_list;
 #ifdef ACPI_APPLICATION
 #include <stdio.h>
 #define ACPI_FILE              FILE *
+#define ACPI_FILE_OUT          stdout
+#define ACPI_FILE_ERR          stderr
 #else
 #define ACPI_FILE              void *
+#define ACPI_FILE_OUT          NULL
+#define ACPI_FILE_ERR          NULL
 #endif /* ACPI_APPLICATION */
 #endif /* ACPI_FILE */
 
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- * Name: acefi.h - OS specific defines, etc.
+ * Name: acenvex.h - Extra host and compiler configuration
  *
  *****************************************************************************/
 
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-#ifndef __ACEFI_H__
-#define __ACEFI_H__
+#ifndef __ACENVEX_H__
+#define __ACENVEX_H__
 
-#include <efi.h>
-#include <efistdarg.h>
-#include <efilib.h>
+/*! [Begin] no source code translation */
 
-
-/* _int64 works for both IA32 and IA64 */
-
-#define COMPILER_DEPENDENT_INT64   __int64
-#define COMPILER_DEPENDENT_UINT64  unsigned __int64
-
-/*
- * Calling conventions:
+/******************************************************************************
  *
- * ACPI_SYSTEM_XFACE        - Interfaces to host OS (handlers, threads)
- * ACPI_EXTERNAL_XFACE      - External ACPI interfaces
- * ACPI_INTERNAL_XFACE      - Internal ACPI interfaces
- * ACPI_INTERNAL_VAR_XFACE  - Internal variable-parameter list interfaces
- */
-#define ACPI_SYSTEM_XFACE
-#define ACPI_EXTERNAL_XFACE
-#define ACPI_INTERNAL_XFACE
-#define ACPI_INTERNAL_VAR_XFACE
+ * Extra host configuration files. All ACPICA headers are included before
+ * including these files.
+ *
+ *****************************************************************************/
 
-/* warn C4142: redefinition of type */
+#if defined(_LINUX) || defined(__linux__)
+#include "aclinuxex.h"
 
-#pragma warning(disable:4142)
+#endif
 
+/*! [End] no source code translation !*/
 
-#endif /* __ACEFI_H__ */
+#endif /* __ACENVEX_H__ */
index a57f7f0..a51f288 100644 (file)
 
 #define ACPI_USE_SYSTEM_CLIBRARY
 #define ACPI_USE_DO_WHILE_0
-#define ACPI_MUTEX_TYPE             ACPI_BINARY_SEMAPHORE
 
 
 #ifdef __KERNEL__
 
 #define ACPI_USE_SYSTEM_INTTYPES
 
+/* Compile for reduced hardware mode only with this kernel config */
+
+#ifdef CONFIG_ACPI_REDUCED_HARDWARE_ONLY
+#define ACPI_REDUCED_HARDWARE 1
+#endif
+
 #include <linux/string.h>
 #include <linux/kernel.h>
 #include <linux/ctype.h>
@@ -66,7 +71,7 @@
 #ifdef EXPORT_ACPI_INTERFACES
 #include <linux/export.h>
 #endif
-#include <asm/acpi.h>
+#include <asm/acenv.h>
 
 #ifndef CONFIG_ACPI
 
 #define ACPI_SPINLOCK               spinlock_t *
 #define ACPI_CPU_FLAGS              unsigned long
 
+/* Use native linux version of AcpiOsAllocateZeroed */
+
+#define USE_NATIVE_ALLOCATE_ZEROED
+
+/*
+ * Overrides for in-kernel ACPICA
+ */
+#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsInitialize
+#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTerminate
+#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAllocate
+#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAllocateZeroed
+#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsFree
+#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireObject
+#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetThreadId
+#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateLock
+#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsMapMemory
+#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsUnmapMemory
+
+/*
+ * OSL interfaces used by debugger/disassembler
+ */
+#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadable
+#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritable
+
+/*
+ * OSL interfaces used by utilities
+ */
+#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsRedirectOutput
+#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetLine
+#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByName
+#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByIndex
+#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByAddress
+#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsOpenDirectory
+#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetNextFilename
+#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCloseDirectory
+
 #else /* !__KERNEL__ */
 
 #include <stdarg.h>
 
 #include "acgcc.h"
 
-
-#ifdef __KERNEL__
-
-/*
- * FIXME: Inclusion of actypes.h
- * Linux kernel need this before defining inline OSL interfaces as
- * actypes.h need to be included to find ACPICA type definitions.
- * Since from ACPICA's perspective, the actypes.h should be included after
- * acenv.h (aclinux.h), this leads to a inclusion mis-ordering issue.
- */
-#include <acpi/actypes.h>
-
-/*
- * Overrides for in-kernel ACPICA
- */
-ACPI_STATUS __init AcpiOsInitialize (
-    void);
-#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsInitialize
-
-ACPI_STATUS AcpiOsTerminate (
-    void);
-#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTerminate
-
-/*
- * Memory allocation/deallocation
- */
-
-/*
- * The irqs_disabled() check is for resume from RAM.
- * Interrupts are off during resume, just like they are for boot.
- * However, boot has  (system_state != SYSTEM_RUNNING)
- * to quiet __might_sleep() in kmalloc() and resume does not.
- */
-static inline void *
-AcpiOsAllocate (
-    ACPI_SIZE               Size)
-{
-    return kmalloc (Size, irqs_disabled () ? GFP_ATOMIC : GFP_KERNEL);
-}
-#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAllocate
-
-/* Use native linux version of AcpiOsAllocateZeroed */
-
-static inline void *
-AcpiOsAllocateZeroed (
-    ACPI_SIZE               Size)
-{
-    return kzalloc (Size, irqs_disabled () ? GFP_ATOMIC : GFP_KERNEL);
-}
-#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAllocateZeroed
-#define USE_NATIVE_ALLOCATE_ZEROED
-
-static inline void
-AcpiOsFree (
-    void                   *Memory)
-{
-    kfree (Memory);
-}
-#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsFree
-
-static inline void *
-AcpiOsAcquireObject (
-    ACPI_CACHE_T           *Cache)
-{
-    return kmem_cache_zalloc (Cache,
-        irqs_disabled () ? GFP_ATOMIC : GFP_KERNEL);
-}
-#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireObject
-
-static inline ACPI_THREAD_ID
-AcpiOsGetThreadId (
-    void)
-{
-    return (ACPI_THREAD_ID) (unsigned long) current;
-}
-#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetThreadId
-
-#ifndef CONFIG_PREEMPT
-
-/*
- * Used within ACPICA to show where it is safe to preempt execution
- * when CONFIG_PREEMPT=n
- */
-#define ACPI_PREEMPTION_POINT() \
-    do { \
-        if (!irqs_disabled()) \
-            cond_resched(); \
-    } while (0)
-
-#endif
-
-/*
- * When lockdep is enabled, the spin_lock_init() macro stringifies it's
- * argument and uses that as a name for the lock in debugging.
- * By executing spin_lock_init() in a macro the key changes from "lock" for
- * all locks to the name of the argument of acpi_os_create_lock(), which
- * prevents lockdep from reporting false positives for ACPICA locks.
- */
-#define AcpiOsCreateLock(__Handle) \
-    ({ \
-        spinlock_t *Lock = ACPI_ALLOCATE(sizeof(*Lock)); \
-        if (Lock) { \
-            *(__Handle) = Lock; \
-            spin_lock_init(*(__Handle)); \
-        } \
-        Lock ? AE_OK : AE_NO_MEMORY; \
-    })
-#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateLock
-
-void __iomem *
-AcpiOsMapMemory (
-    ACPI_PHYSICAL_ADDRESS   Where,
-    ACPI_SIZE               Length);
-#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsMapMemory
-
-void
-AcpiOsUnmapMemory (
-    void __iomem            *LogicalAddress,
-    ACPI_SIZE               Size);
-#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsUnmapMemory
-
-/*
- * OSL interfaces used by debugger/disassembler
- */
-#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadable
-#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritable
-
-/*
- * OSL interfaces used by utilities
- */
-#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsRedirectOutput
-#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetLine
-#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByName
-#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByIndex
-#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByAddress
-#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsOpenDirectory
-#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetNextFilename
-#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCloseDirectory
-
-/*
- * OSL interfaces added by Linux
- */
-void
-EarlyAcpiOsUnmapMemory (
-    void __iomem            *Virt,
-    ACPI_SIZE               Size);
-
-#endif /* __KERNEL__ */
-
 #endif /* __ACLINUX_H__ */
diff --git a/sys/contrib/dev/acpica/source/include/platform/aclinuxex.h b/sys/contrib/dev/acpica/source/include/platform/aclinuxex.h
new file mode 100644 (file)
index 0000000..87d4391
--- /dev/null
@@ -0,0 +1,137 @@
+/******************************************************************************
+ *
+ * Name: aclinuxex.h - Extra OS specific defines, etc. for Linux
+ *
+ *****************************************************************************/
+
+/*
+ * Copyright (C) 2000 - 2014, Intel Corp.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions, and the following disclaimer,
+ *    without modification.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ *    substantially similar to the "NO WARRANTY" disclaimer below
+ *    ("Disclaimer") and any redistribution must be conditioned upon
+ *    including a substantially similar Disclaimer requirement for further
+ *    binary redistribution.
+ * 3. Neither the names of the above-listed copyright holders nor the names
+ *    of any contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * NO WARRANTY
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGES.
+ */
+
+#ifndef __ACLINUXEX_H__
+#define __ACLINUXEX_H__
+
+#ifdef __KERNEL__
+
+/*
+ * Overrides for in-kernel ACPICA
+ */
+ACPI_STATUS __init AcpiOsInitialize (
+    void);
+
+ACPI_STATUS AcpiOsTerminate (
+    void);
+
+/*
+ * The irqs_disabled() check is for resume from RAM.
+ * Interrupts are off during resume, just like they are for boot.
+ * However, boot has  (system_state != SYSTEM_RUNNING)
+ * to quiet __might_sleep() in kmalloc() and resume does not.
+ */
+static inline void *
+AcpiOsAllocate (
+    ACPI_SIZE               Size)
+{
+    return kmalloc (Size, irqs_disabled () ? GFP_ATOMIC : GFP_KERNEL);
+}
+
+static inline void *
+AcpiOsAllocateZeroed (
+    ACPI_SIZE               Size)
+{
+    return kzalloc (Size, irqs_disabled () ? GFP_ATOMIC : GFP_KERNEL);
+}
+
+static inline void
+AcpiOsFree (
+    void                   *Memory)
+{
+    kfree (Memory);
+}
+
+static inline void *
+AcpiOsAcquireObject (
+    ACPI_CACHE_T           *Cache)
+{
+    return kmem_cache_zalloc (Cache,
+        irqs_disabled () ? GFP_ATOMIC : GFP_KERNEL);
+}
+
+static inline ACPI_THREAD_ID
+AcpiOsGetThreadId (
+    void)
+{
+    return (ACPI_THREAD_ID) (unsigned long) current;
+}
+
+/*
+ * When lockdep is enabled, the spin_lock_init() macro stringifies it's
+ * argument and uses that as a name for the lock in debugging.
+ * By executing spin_lock_init() in a macro the key changes from "lock" for
+ * all locks to the name of the argument of acpi_os_create_lock(), which
+ * prevents lockdep from reporting false positives for ACPICA locks.
+ */
+#define AcpiOsCreateLock(__Handle) \
+    ({ \
+        spinlock_t *Lock = ACPI_ALLOCATE(sizeof(*Lock)); \
+        if (Lock) { \
+            *(__Handle) = Lock; \
+            spin_lock_init(*(__Handle)); \
+        } \
+        Lock ? AE_OK : AE_NO_MEMORY; \
+    })
+
+void __iomem *
+AcpiOsMapMemory (
+    ACPI_PHYSICAL_ADDRESS   Where,
+    ACPI_SIZE               Length);
+
+void
+AcpiOsUnmapMemory (
+    void __iomem            *LogicalAddress,
+    ACPI_SIZE               Size);
+
+/*
+ * OSL interfaces added by Linux
+ */
+void
+EarlyAcpiOsUnmapMemory (
+    void __iomem            *Virt,
+    ACPI_SIZE               Size);
+
+#endif /* __KERNEL__ */
+
+#endif /* __ACLINUXEX_H__ */
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- * Module Name: oslinuxtbl - Linux OSL for obtaining ACPI tables
+ * Module Name: osefitbl - EFI OSL for obtaining ACPI tables
  *
  *****************************************************************************/
 
@@ -45,7 +45,7 @@
 
 
 #define _COMPONENT          ACPI_OS_SERVICES
-        ACPI_MODULE_NAME    ("oslinuxtbl")
+        ACPI_MODULE_NAME    ("osefitbl")
 
 
 #ifndef PATH_MAX
@@ -69,24 +69,11 @@ static ACPI_STATUS
 OslTableInitialize (
     void);
 
-static ACPI_STATUS
-OslTableNameFromFile (
-    char                    *Filename,
-    char                    *Signature,
-    UINT32                  *Instance);
-
 static ACPI_STATUS
 OslAddTableToList (
     char                    *Signature,
     UINT32                  Instance);
 
-static ACPI_STATUS
-OslReadTableFromFile (
-    char                    *Filename,
-    ACPI_SIZE               FileOffset,
-    char                    *Signature,
-    ACPI_TABLE_HEADER       **Table);
-
 static ACPI_STATUS
 OslMapTable (
     ACPI_SIZE               Address,
@@ -97,52 +84,26 @@ static void
 OslUnmapTable (
     ACPI_TABLE_HEADER       *Table);
 
-static ACPI_PHYSICAL_ADDRESS
-OslFindRsdpViaEfi (
-    void);
-
 static ACPI_STATUS
 OslLoadRsdp (
     void);
 
 static ACPI_STATUS
-OslListCustomizedTables (
-    char                    *Directory);
-
-static ACPI_STATUS
-OslGetCustomizedTable (
-    char                    *Pathname,
-    char                    *Signature,
-    UINT32                  Instance,
-    ACPI_TABLE_HEADER       **Table,
-    ACPI_PHYSICAL_ADDRESS   *Address);
-
-static ACPI_STATUS
-OslListBiosTables (
+OslListTables (
     void);
 
 static ACPI_STATUS
-OslGetBiosTable (
+OslGetTable (
     char                    *Signature,
     UINT32                  Instance,
     ACPI_TABLE_HEADER       **Table,
     ACPI_PHYSICAL_ADDRESS   *Address);
 
-static ACPI_STATUS
-OslGetLastStatus (
-    ACPI_STATUS             DefaultStatus);
-
 
 /* File locations */
 
-#define DYNAMIC_TABLE_DIR   "/sys/firmware/acpi/tables/dynamic"
-#define STATIC_TABLE_DIR    "/sys/firmware/acpi/tables"
 #define EFI_SYSTAB          "/sys/firmware/efi/systab"
 
-/* Should we get dynamically loaded SSDTs from DYNAMIC_TABLE_DIR? */
-
-UINT8                   Gbl_DumpDynamicTables = TRUE;
-
 /* Initialization flags */
 
 UINT8                   Gbl_TableListInitialized = FALSE;
@@ -167,45 +128,6 @@ OSL_TABLE_INFO          *Gbl_TableListHead = NULL;
 UINT32                  Gbl_TableCount = 0;
 
 
-/******************************************************************************
- *
- * FUNCTION:    OslGetLastStatus
- *
- * PARAMETERS:  DefaultStatus   - Default error status to return
- *
- * RETURN:      Status; Converted from errno.
- *
- * DESCRIPTION: Get last errno and conver it to ACPI_STATUS.
- *
- *****************************************************************************/
-
-static ACPI_STATUS
-OslGetLastStatus (
-    ACPI_STATUS             DefaultStatus)
-{
-
-    switch (errno)
-    {
-    case EACCES:
-    case EPERM:
-
-        return (AE_ACCESS);
-
-    case ENOENT:
-
-        return (AE_NOT_FOUND);
-
-    case ENOMEM:
-
-        return (AE_NO_MEMORY);
-
-    default:
-
-        return (DefaultStatus);
-    }
-}
-
-
 /******************************************************************************
  *
  * FUNCTION:    AcpiOsGetTableByAddress
@@ -256,7 +178,7 @@ AcpiOsGetTableByAddress (
         goto Exit;
     }
 
-    LocalTable = calloc (1, TableLength);
+    LocalTable = ACPI_ALLOCATE_ZEROED (TableLength);
     if (!LocalTable)
     {
         Status = AE_NO_MEMORY;
@@ -315,25 +237,13 @@ AcpiOsGetTableByName (
     {
         /* Attempt to get the table from the memory */
 
-        Status = OslGetBiosTable (Signature, Instance, Table, Address);
+        Status = OslGetTable (Signature, Instance, Table, Address);
     }
     else
     {
         /* Attempt to get the table from the static directory */
 
-        Status = OslGetCustomizedTable (STATIC_TABLE_DIR, Signature,
-            Instance, Table, Address);
-    }
-
-    if (ACPI_FAILURE (Status) && Status == AE_LIMIT)
-    {
-        if (Gbl_DumpDynamicTables)
-        {
-            /* Attempt to get a dynamic table */
-
-            Status = OslGetCustomizedTable (DYNAMIC_TABLE_DIR, Signature,
-                Instance, Table, Address);
-        }
+        Status = AE_SUPPORT;
     }
 
     return (Status);
@@ -365,7 +275,7 @@ OslAddTableToList (
     BOOLEAN                 Found = FALSE;
 
 
-    NewInfo = calloc (1, sizeof (OSL_TABLE_INFO));
+    NewInfo = ACPI_ALLOCATE_ZEROED (sizeof (OSL_TABLE_INFO));
     if (!NewInfo)
     {
         return (AE_NO_MEMORY);
@@ -407,7 +317,7 @@ OslAddTableToList (
     {
         if (Instance)
         {
-            fprintf (stderr,
+            AcpiLogError (
                 "%4.4s: Warning unmatched table instance %d, expected %d\n",
                 Signature, Instance, NextInstance);
         }
@@ -488,44 +398,6 @@ AcpiOsGetTableByIndex (
 }
 
 
-/******************************************************************************
- *
- * FUNCTION:    OslFindRsdpViaEfi
- *
- * PARAMETERS:  None
- *
- * RETURN:      RSDP address if found
- *
- * DESCRIPTION: Find RSDP address via EFI.
- *
- *****************************************************************************/
-
-static ACPI_PHYSICAL_ADDRESS
-OslFindRsdpViaEfi (
-    void)
-{
-    FILE                    *File;
-    char                    Buffer[80];
-    unsigned long           Address = 0;
-
-
-    File = fopen (EFI_SYSTAB, "r");
-    if (File)
-    {
-        while (fgets (Buffer, 80, File))
-        {
-            if (sscanf (Buffer, "ACPI20=0x%lx", &Address) == 1)
-            {
-                break;
-            }
-        }
-        fclose (File);
-    }
-
-    return ((ACPI_PHYSICAL_ADDRESS) (Address));
-}
-
-
 /******************************************************************************
  *
  * FUNCTION:    OslLoadRsdp
@@ -557,7 +429,7 @@ OslLoadRsdp (
     }
     else
     {
-        RsdpBase = OslFindRsdpViaEfi ();
+        RsdpBase = AcpiOsGetRootPointer ();
     }
 
     if (!RsdpBase)
@@ -569,7 +441,7 @@ OslLoadRsdp (
     RsdpAddress = AcpiOsMapMemory (RsdpBase, RsdpSize);
     if (!RsdpAddress)
     {
-        return (OslGetLastStatus (AE_BAD_ADDRESS));
+        return (AE_BAD_ADDRESS);
     }
 
     /* Search low memory for the RSDP */
@@ -660,12 +532,12 @@ OslTableInitialize (
     {
         if (Gbl_Xsdt)
         {
-            free (Gbl_Xsdt);
+            ACPI_FREE (Gbl_Xsdt);
             Gbl_Xsdt = NULL;
         }
 
         Gbl_Revision = 2;
-        Status = OslGetBiosTable (ACPI_SIG_XSDT, 0,
+        Status = OslGetTable (ACPI_SIG_XSDT, 0,
             ACPI_CAST_PTR (ACPI_TABLE_HEADER *, &Gbl_Xsdt), &Address);
         if (ACPI_FAILURE (Status))
         {
@@ -679,11 +551,11 @@ OslTableInitialize (
     {
         if (Gbl_Rsdt)
         {
-            free (Gbl_Rsdt);
+            ACPI_FREE (Gbl_Rsdt);
             Gbl_Rsdt = NULL;
         }
 
-        Status = OslGetBiosTable (ACPI_SIG_RSDT, 0,
+        Status = OslGetTable (ACPI_SIG_RSDT, 0,
             ACPI_CAST_PTR (ACPI_TABLE_HEADER *, &Gbl_Rsdt), &Address);
         if (ACPI_FAILURE (Status))
         {
@@ -695,11 +567,11 @@ OslTableInitialize (
 
     if (Gbl_Fadt)
     {
-        free (Gbl_Fadt);
+        ACPI_FREE (Gbl_Fadt);
         Gbl_Fadt = NULL;
     }
 
-    Status = OslGetBiosTable (ACPI_SIG_FADT, 0,
+    Status = OslGetTable (ACPI_SIG_FADT, 0,
         ACPI_CAST_PTR (ACPI_TABLE_HEADER *, &Gbl_Fadt), &Gbl_FadtAddress);
     if (ACPI_FAILURE (Status))
     {
@@ -745,7 +617,7 @@ OslTableInitialize (
 
         /* Add all tables found in the memory */
 
-        Status = OslListBiosTables ();
+        Status = OslListTables ();
         if (ACPI_FAILURE (Status))
         {
             return (Status);
@@ -755,22 +627,7 @@ OslTableInitialize (
     {
         /* Add all tables found in the static directory */
 
-        Status = OslListCustomizedTables (STATIC_TABLE_DIR);
-        if (ACPI_FAILURE (Status))
-        {
-            return (Status);
-        }
-    }
-
-    if (Gbl_DumpDynamicTables)
-    {
-        /* Add all dynamically loaded tables in the dynamic directory */
-
-        Status = OslListCustomizedTables (DYNAMIC_TABLE_DIR);
-        if (ACPI_FAILURE (Status))
-        {
-            return (Status);
-        }
+        Status = AE_SUPPORT;
     }
 
     Gbl_TableListInitialized = TRUE;
@@ -780,7 +637,7 @@ OslTableInitialize (
 
 /******************************************************************************
  *
- * FUNCTION:    OslListBiosTables
+ * FUNCTION:    OslListTables
  *
  * PARAMETERS:  None
  *
@@ -788,13 +645,10 @@ OslTableInitialize (
  *
  * DESCRIPTION: Add ACPI tables to the table list from memory.
  *
- * NOTE:        This works on Linux as table customization does not modify the
- *              addresses stored in RSDP/RSDT/XSDT/FADT.
- *
  *****************************************************************************/
 
 static ACPI_STATUS
-OslListBiosTables (
+OslListTables (
     void)
 {
     ACPI_TABLE_HEADER       *MappedTable = NULL;
@@ -861,7 +715,7 @@ OslListBiosTables (
 
 /******************************************************************************
  *
- * FUNCTION:    OslGetBiosTable
+ * FUNCTION:    OslGetTable
  *
  * PARAMETERS:  Signature       - ACPI Signature for common table. Must be
  *                                a null terminated 4-character string.
@@ -881,7 +735,7 @@ OslListBiosTables (
  *****************************************************************************/
 
 static ACPI_STATUS
-OslGetBiosTable (
+OslGetTable (
     char                    *Signature,
     UINT32                  Instance,
     ACPI_TABLE_HEADER       **Table,
@@ -1050,7 +904,7 @@ OslGetBiosTable (
 
     /* Copy table to local buffer and return it */
 
-    LocalTable = calloc (1, TableLength);
+    LocalTable = ACPI_ALLOCATE_ZEROED (TableLength);
     if (!LocalTable)
     {
         Status = AE_NO_MEMORY;
@@ -1067,66 +921,6 @@ Exit:
 }
 
 
-/******************************************************************************
- *
- * FUNCTION:    OslListCustomizedTables
- *
- * PARAMETERS:  Directory           - Directory that contains the tables
- *
- * RETURN:      Status; Table list is initialized if AE_OK.
- *
- * DESCRIPTION: Add ACPI tables to the table list from a directory.
- *
- *****************************************************************************/
-
-static ACPI_STATUS
-OslListCustomizedTables (
-    char                    *Directory)
-{
-    void                    *TableDir;
-    UINT32                  Instance;
-    char                    TempName[ACPI_NAME_SIZE];
-    char                    *Filename;
-    ACPI_STATUS             Status = AE_OK;
-
-
-    /* Open the requested directory */
-
-    TableDir = AcpiOsOpenDirectory (Directory, "*", REQUEST_FILE_ONLY);
-    if (!TableDir)
-    {
-        return (OslGetLastStatus (AE_NOT_FOUND));
-    }
-
-    /* Examine all entries in this directory */
-
-    while ((Filename = AcpiOsGetNextFilename (TableDir)))
-    {
-        /* Extract table name and instance number */
-
-        Status = OslTableNameFromFile (Filename, TempName, &Instance);
-
-        /* Ignore meaningless files */
-
-        if (ACPI_FAILURE (Status))
-        {
-            continue;
-        }
-
-        /* Add new info node to global table list */
-
-        Status = OslAddTableToList (TempName, Instance);
-        if (ACPI_FAILURE (Status))
-        {
-            break;
-        }
-    }
-
-    AcpiOsCloseDirectory (TableDir);
-    return (Status);
-}
-
-
 /******************************************************************************
  *
  * FUNCTION:    OslMapTable
@@ -1168,9 +962,9 @@ OslMapTable (
     MappedTable = AcpiOsMapMemory (Address, sizeof (ACPI_TABLE_HEADER));
     if (!MappedTable)
     {
-        fprintf (stderr, "Could not map table header at 0x%8.8X%8.8X\n",
+        AcpiLogError ("Could not map table header at 0x%8.8X%8.8X\n",
             ACPI_FORMAT_UINT64 (Address));
-        return (OslGetLastStatus (AE_BAD_ADDRESS));
+        return (AE_BAD_ADDRESS);
     }
 
     /* If specified, signature must match */
@@ -1204,9 +998,9 @@ OslMapTable (
     MappedTable = AcpiOsMapMemory (Address, Length);
     if (!MappedTable)
     {
-        fprintf (stderr, "Could not map table at 0x%8.8X%8.8X length %8.8X\n",
+        AcpiLogError ("Could not map table at 0x%8.8X%8.8X length %8.8X\n",
             ACPI_FORMAT_UINT64 (Address), Length);
-        return (OslGetLastStatus (AE_INVALID_TABLE_LENGTH));
+        return (AE_INVALID_TABLE_LENGTH);
     }
 
     (void) ApIsValidChecksum (MappedTable);
@@ -1237,266 +1031,3 @@ OslUnmapTable (
         AcpiOsUnmapMemory (Table, ApGetTableLength (Table));
     }
 }
-
-
-/******************************************************************************
- *
- * FUNCTION:    OslTableNameFromFile
- *
- * PARAMETERS:  Filename            - File that contains the desired table
- *              Signature           - Pointer to 4-character buffer to store
- *                                    extracted table signature.
- *              Instance            - Pointer to integer to store extracted
- *                                    table instance number.
- *
- * RETURN:      Status; Table name is extracted if AE_OK.
- *
- * DESCRIPTION: Extract table signature and instance number from a table file
- *              name.
- *
- *****************************************************************************/
-
-static ACPI_STATUS
-OslTableNameFromFile (
-    char                    *Filename,
-    char                    *Signature,
-    UINT32                  *Instance)
-{
-
-    /* Ignore meaningless files */
-
-    if (strlen (Filename) < ACPI_NAME_SIZE)
-    {
-        return (AE_BAD_SIGNATURE);
-    }
-
-    /* Extract instance number */
-
-    if (isdigit ((int) Filename[ACPI_NAME_SIZE]))
-    {
-        sscanf (&Filename[ACPI_NAME_SIZE], "%d", Instance);
-    }
-    else if (strlen (Filename) != ACPI_NAME_SIZE)
-    {
-        return (AE_BAD_SIGNATURE);
-    }
-    else
-    {
-        *Instance = 0;
-    }
-
-    /* Extract signature */
-
-    ACPI_MOVE_NAME (Signature, Filename);
-    return (AE_OK);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION:    OslReadTableFromFile
- *
- * PARAMETERS:  Filename            - File that contains the desired table
- *              FileOffset          - Offset of the table in file
- *              Signature           - Optional ACPI Signature for desired table.
- *                                    A null terminated 4-character string.
- *              Table               - Where a pointer to the table is returned
- *
- * RETURN:      Status; Table buffer is returned if AE_OK.
- *
- * DESCRIPTION: Read a ACPI table from a file.
- *
- *****************************************************************************/
-
-static ACPI_STATUS
-OslReadTableFromFile (
-    char                    *Filename,
-    ACPI_SIZE               FileOffset,
-    char                    *Signature,
-    ACPI_TABLE_HEADER       **Table)
-{
-    FILE                    *TableFile;
-    ACPI_TABLE_HEADER       Header;
-    ACPI_TABLE_HEADER       *LocalTable = NULL;
-    UINT32                  TableLength;
-    INT32                   Count;
-    ACPI_STATUS             Status = AE_OK;
-
-
-    /* Open the file */
-
-    TableFile = fopen (Filename, "rb");
-    if (TableFile == NULL)
-    {
-        fprintf (stderr, "Could not open table file: %s\n", Filename);
-        return (OslGetLastStatus (AE_NOT_FOUND));
-    }
-
-    fseek (TableFile, FileOffset, SEEK_SET);
-
-    /* Read the Table header to get the table length */
-
-    Count = fread (&Header, 1, sizeof (ACPI_TABLE_HEADER), TableFile);
-    if (Count != sizeof (ACPI_TABLE_HEADER))
-    {
-        fprintf (stderr, "Could not read table header: %s\n", Filename);
-        Status = AE_BAD_HEADER;
-        goto Exit;
-    }
-
-    /* If signature is specified, it must match the table */
-
-    if (Signature)
-    {
-        if (ACPI_VALIDATE_RSDP_SIG (Signature))
-        {
-            if (!ACPI_VALIDATE_RSDP_SIG (Header.Signature)) {
-                fprintf (stderr, "Incorrect RSDP signature: found %8.8s\n",
-                    Header.Signature);
-                Status = AE_BAD_SIGNATURE;
-                goto Exit;
-            }
-        }
-        else if (!ACPI_COMPARE_NAME (Signature, Header.Signature))
-        {
-            fprintf (stderr, "Incorrect signature: Expecting %4.4s, found %4.4s\n",
-                Signature, Header.Signature);
-            Status = AE_BAD_SIGNATURE;
-            goto Exit;
-        }
-    }
-
-    TableLength = ApGetTableLength (&Header);
-    if (TableLength == 0)
-    {
-        Status = AE_BAD_HEADER;
-        goto Exit;
-    }
-
-    /* Read the entire table into a local buffer */
-
-    LocalTable = calloc (1, TableLength);
-    if (!LocalTable)
-    {
-        fprintf (stderr,
-            "%4.4s: Could not allocate buffer for table of length %X\n",
-            Header.Signature, TableLength);
-        Status = AE_NO_MEMORY;
-        goto Exit;
-    }
-
-    fseek (TableFile, FileOffset, SEEK_SET);
-
-    Count = fread (LocalTable, 1, TableLength, TableFile);
-    if (Count != TableLength)
-    {
-        fprintf (stderr, "%4.4s: Could not read table content\n",
-            Header.Signature);
-        Status = AE_INVALID_TABLE_LENGTH;
-        goto Exit;
-    }
-
-    /* Validate checksum */
-
-    (void) ApIsValidChecksum (LocalTable);
-
-Exit:
-    fclose (TableFile);
-    *Table = LocalTable;
-    return (Status);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION:    OslGetCustomizedTable
- *
- * PARAMETERS:  Pathname        - Directory to find Linux customized table
- *              Signature       - ACPI Signature for desired table. Must be
- *                                a null terminated 4-character string.
- *              Instance        - Multiple table support for SSDT/UEFI (0...n)
- *                                Must be 0 for other tables.
- *              Table           - Where a pointer to the table is returned
- *              Address         - Where the table physical address is returned
- *
- * RETURN:      Status; Table buffer is returned if AE_OK.
- *              AE_LIMIT: Instance is beyond valid limit
- *              AE_NOT_FOUND: A table with the signature was not found
- *
- * DESCRIPTION: Get an OS customized table.
- *
- *****************************************************************************/
-
-static ACPI_STATUS
-OslGetCustomizedTable (
-    char                    *Pathname,
-    char                    *Signature,
-    UINT32                  Instance,
-    ACPI_TABLE_HEADER       **Table,
-    ACPI_PHYSICAL_ADDRESS   *Address)
-{
-    void                    *TableDir;
-    UINT32                  CurrentInstance = 0;
-    char                    TempName[ACPI_NAME_SIZE];
-    char                    TableFilename[PATH_MAX];
-    char                    *Filename;
-    ACPI_STATUS             Status;
-
-
-    /* Open the directory for customized tables */
-
-    TableDir = AcpiOsOpenDirectory (Pathname, "*", REQUEST_FILE_ONLY);
-    if (!TableDir)
-    {
-        return (OslGetLastStatus (AE_NOT_FOUND));
-    }
-
-    /* Attempt to find the table in the directory */
-
-    while ((Filename = AcpiOsGetNextFilename (TableDir)))
-    {
-        /* Ignore meaningless files */
-
-        if (!ACPI_COMPARE_NAME (Filename, Signature))
-        {
-            continue;
-        }
-
-        /* Extract table name and instance number */
-
-        Status = OslTableNameFromFile (Filename, TempName, &CurrentInstance);
-
-        /* Ignore meaningless files */
-
-        if (ACPI_FAILURE (Status) || CurrentInstance != Instance)
-        {
-            continue;
-        }
-
-        /* Create the table pathname */
-
-        if (Instance != 0)
-        {
-            sprintf (TableFilename, "%s/%4.4s%d", Pathname, TempName, Instance);
-        }
-        else
-        {
-            sprintf (TableFilename, "%s/%4.4s", Pathname, TempName);
-        }
-        break;
-    }
-
-    AcpiOsCloseDirectory (TableDir);
-
-    if (!Filename)
-    {
-        return (AE_LIMIT);
-    }
-
-    /* There is no physical address saved for customized tables, use zero */
-
-    *Address = 0;
-    Status = OslReadTableFromFile (TableFilename, 0, NULL, Table);
-
-    return (Status);
-}
diff --git a/sys/contrib/dev/acpica/source/os_specific/service_layers/osefixf.c b/sys/contrib/dev/acpica/source/os_specific/service_layers/osefixf.c
new file mode 100644 (file)
index 0000000..3f6c5da
--- /dev/null
@@ -0,0 +1,1300 @@
+/******************************************************************************
+ *
+ * Module Name: osefixf - EFI OSL interfaces
+ *
+ *****************************************************************************/
+
+/*
+ * Copyright (C) 2000 - 2014, Intel Corp.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions, and the following disclaimer,
+ *    without modification.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ *    substantially similar to the "NO WARRANTY" disclaimer below
+ *    ("Disclaimer") and any redistribution must be conditioned upon
+ *    including a substantially similar Disclaimer requirement for further
+ *    binary redistribution.
+ * 3. Neither the names of the above-listed copyright holders nor the names
+ *    of any contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * NO WARRANTY
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGES.
+ */
+
+
+#include "acpi.h"
+#include "accommon.h"
+#include "acapps.h"
+
+
+/* Local definitions */
+
+#define ACPI_EFI_PRINT_LENGTH   256
+
+
+/* Local definitions */
+
+typedef struct acpi_efi_memory_descriptor {
+    EFI_MEMORY_DESCRIPTOR   *Descriptor;
+    UINTN                   EntryCount;
+    UINTN                   EntrySize;
+    UINTN                   Cookie;
+    UINT32                  Version;
+} ACPI_EFI_MEMORY_DESCRIPTOR;
+
+
+/* Local prototypes */
+
+static void *
+AcpiEfiAllocatePool (
+    ACPI_SIZE               Size);
+
+static ACPI_STATUS
+AcpiEfiArgify (
+    char                    *String,
+    int                     *ArgcPtr,
+    char                    ***ArgvPtr);
+
+static BOOLEAN
+AcpiEfiCompareGuid (
+    EFI_GUID                *Guid1,
+    EFI_GUID                *Guid2);
+
+static ACPI_STATUS
+AcpiEfiConvertArgcv (
+    CHAR16                  *LoadOpt,
+    UINT32                  LoadOptSize,
+    int                     *ArgcPtr,
+    char                    ***ArgvPtr,
+    char                    **BufferPtr);
+
+static ACPI_PHYSICAL_ADDRESS
+AcpiEfiGetRsdpViaGuid (
+    EFI_GUID                *Guid);
+
+static CHAR16 *
+AcpiEfiFlushFile (
+    ACPI_FILE               File,
+    CHAR16                  *Begin,
+    CHAR16                  *End,
+    CHAR16                  *Pos,
+    BOOLEAN                 FlushAll);
+
+static void
+AcpiEfiFreePool (
+    void                    *Mem);
+
+static ACPI_STATUS
+AcpiEfiInitializeMemoryMap (
+    void);
+
+static void
+AcpiEfiTerminateMemoryMap (
+    void);
+
+
+/* Local variables */
+
+static EFI_FILE_HANDLE      AcpiGbl_EfiCurrentVolume = NULL;
+static ACPI_EFI_MEMORY_DESCRIPTOR       AcpiGbl_EfiMemoryMap;
+static BOOLEAN                          AcpiGbl_EfiMemoryInitialized = FALSE;
+static UINTN                            AcpiGbl_EfiPoolAllocation = EfiBootServicesData;
+
+
+/******************************************************************************
+ *
+ * FUNCTION:    AcpiEfiGetRsdpViaGuid
+ *
+ * PARAMETERS:  Guid1               - GUID to compare
+ *              Guid2               - GUID to compare
+ *
+ * RETURN:      TRUE if Guid1 == Guid2
+ *
+ * DESCRIPTION: Compares two GUIDs
+ *
+ *****************************************************************************/
+
+static BOOLEAN
+AcpiEfiCompareGuid (
+    EFI_GUID                *Guid1,
+    EFI_GUID                *Guid2)
+{
+    INT32                   *g1;
+    INT32                   *g2;
+    INT32                   r;
+
+
+    g1 = (INT32 *) Guid1;
+    g2 = (INT32 *) Guid2;
+
+    r  = g1[0] - g2[0];
+    r |= g1[1] - g2[1];
+    r |= g1[2] - g2[2];
+    r |= g1[3] - g2[3];
+
+    return (r ? FALSE : TRUE);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION:    AcpiEfiInitializeMemoryMap
+ *
+ * PARAMETERS:  None
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Initialize EFI memory map.
+ *
+ *****************************************************************************/
+
+static ACPI_STATUS
+AcpiEfiInitializeMemoryMap (
+    void)
+{
+    EFI_STATUS              Status;
+    ACPI_EFI_MEMORY_DESCRIPTOR *Map;
+    UINT32                  Length;
+
+
+    if (AcpiGbl_EfiMemoryInitialized)
+    {
+        return (AE_OK);
+    }
+
+    /* Initialize */
+
+    Map = &AcpiGbl_EfiMemoryMap;
+    Length = sizeof (EFI_MEMORY_DESCRIPTOR);
+    Map->Descriptor = NULL;
+    Status = EFI_BUFFER_TOO_SMALL;
+
+    /* Allocation and GetMemoryMap() loop */
+
+    while (!AcpiGbl_EfiMemoryInitialized &&
+           Status == EFI_BUFFER_TOO_SMALL)
+    {
+        Map->Descriptor = AcpiEfiAllocatePool (Length);
+        if (!Map->Descriptor)
+        {
+            return (AE_NO_MEMORY);
+        }
+        Status = uefi_call_wrapper (BS->GetMemoryMap, 5,
+                    &Length, Map->Descriptor,
+                    &Map->Cookie, &Map->EntrySize, &Map->Version);
+        if (!EFI_ERROR (Status))
+        {
+            AcpiGbl_EfiMemoryInitialized = TRUE;
+        }
+        else if (Status == EFI_BUFFER_TOO_SMALL)
+        {
+            AcpiEfiFreePool (Map->Descriptor);
+        }
+    }
+
+    /* Finalize */
+
+    if (!AcpiGbl_EfiMemoryInitialized)
+    {
+        if (Map->Descriptor)
+        {
+            AcpiEfiFreePool (Map->Descriptor);
+            Map->Descriptor = NULL;
+        }
+        return (AE_ERROR);
+    }
+    else
+    {
+        Map->EntryCount = Length / sizeof (EFI_MEMORY_DESCRIPTOR);
+    }
+
+    return (AE_OK);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION:    AcpiEfiTerminateMemoryMap
+ *
+ * PARAMETERS:  None
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Terminate EFI memory map.
+ *
+ *****************************************************************************/
+
+static void
+AcpiEfiTerminateMemoryMap (
+    void)
+{
+
+    if (AcpiGbl_EfiMemoryInitialized)
+    {
+        AcpiEfiFreePool (AcpiGbl_EfiMemoryMap.Descriptor);
+        AcpiGbl_EfiMemoryInitialized = FALSE;
+    }
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION:    AcpiEfiGetRsdpViaGuid
+ *
+ * PARAMETERS:  None
+ *
+ * RETURN:      RSDP address if found
+ *
+ * DESCRIPTION: Find RSDP address via EFI using specified GUID.
+ *
+ *****************************************************************************/
+
+static ACPI_PHYSICAL_ADDRESS
+AcpiEfiGetRsdpViaGuid (
+    EFI_GUID                *Guid)
+{
+    unsigned long           Address = 0;
+    int                     i;
+
+
+    for (i = 0; i < ST->NumberOfTableEntries; i++)
+    {
+        if (AcpiEfiCompareGuid (&ST->ConfigurationTable[i].VendorGuid, Guid))
+        {
+            Address = (ACPI_PHYSICAL_ADDRESS)
+                    ST->ConfigurationTable[i].VendorTable;
+            break;
+        }
+    }
+
+    return ((ACPI_PHYSICAL_ADDRESS) (Address));
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION:    AcpiEfiAllocatePool
+ *
+ * PARAMETERS:  Size                - Amount to allocate, in bytes
+ *
+ * RETURN:      Pointer to the new allocation. Null on error.
+ *
+ * DESCRIPTION: Allocate pool memory.
+ *
+ *****************************************************************************/
+
+static void *
+AcpiEfiAllocatePool (
+    ACPI_SIZE               Size)
+{
+    EFI_STATUS              EfiStatus;
+    void                    *Mem;
+
+
+    EfiStatus = uefi_call_wrapper (BS->AllocatePool, 3,
+        AcpiGbl_EfiPoolAllocation, Size, &Mem);
+    if (EFI_ERROR (EfiStatus))
+    {
+        AcpiLogError ("EFI_BOOT_SERVICES->AllocatePool(EfiLoaderData) failure.\n");
+        return (NULL);
+    }
+
+    return (Mem);
+}
+
+/******************************************************************************
+ *
+ * FUNCTION:    AcpiEfiFreePool
+ *
+ * PARAMETERS:  Mem                 - Pointer to previously allocated memory
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Free memory allocated via AcpiEfiAllocatePool
+ *
+ *****************************************************************************/
+
+static void
+AcpiEfiFreePool (
+    void                    *Mem)
+{
+
+    uefi_call_wrapper (BS->FreePool, 1, Mem);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION:    AcpiOsGetRootPointer
+ *
+ * PARAMETERS:  None
+ *
+ * RETURN:      RSDP physical address
+ *
+ * DESCRIPTION: Gets the ACPI root pointer (RSDP)
+ *
+ *****************************************************************************/
+
+ACPI_PHYSICAL_ADDRESS
+AcpiOsGetRootPointer (
+    void)
+{
+    ACPI_PHYSICAL_ADDRESS   Address;
+    EFI_GUID                Guid10 = ACPI_TABLE_GUID;
+    EFI_GUID                Guid20 = ACPI_20_TABLE_GUID;
+
+
+    Address = AcpiEfiGetRsdpViaGuid (&Guid20);
+    if (!Address)
+    {
+        Address = AcpiEfiGetRsdpViaGuid (&Guid10);
+    }
+
+    return (Address);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION:    AcpiOsMapMemory
+ *
+ * PARAMETERS:  where               - Physical address of memory to be mapped
+ *              length              - How much memory to map
+ *
+ * RETURN:      Pointer to mapped memory. Null on error.
+ *
+ * DESCRIPTION: Map physical memory into caller's address space
+ *
+ *****************************************************************************/
+
+void *
+AcpiOsMapMemory (
+    ACPI_PHYSICAL_ADDRESS   where,
+    ACPI_SIZE               length)
+{
+    UINTN                   i;
+    EFI_MEMORY_DESCRIPTOR   *p;
+    UINT64                  Size;
+    EFI_PHYSICAL_ADDRESS    End;
+
+
+    for (i = 0, p = AcpiGbl_EfiMemoryMap.Descriptor;
+         i < AcpiGbl_EfiMemoryMap.EntryCount;
+         i++, p = ACPI_ADD_PTR (EFI_MEMORY_DESCRIPTOR, p, AcpiGbl_EfiMemoryMap.EntrySize))
+    {
+        Size = p->NumberOfPages << EFI_PAGE_SHIFT;
+        End = p->PhysicalStart + Size;
+
+        if (!(p->Attribute & EFI_MEMORY_RUNTIME) || !p->VirtualStart)
+        {
+            continue;
+        }
+
+        if (where >= p->PhysicalStart && where < End)
+        {
+            where += p->VirtualStart - p->PhysicalStart;
+            break;
+        }
+    }
+
+    /* Default to use the physical address */
+
+    return (ACPI_TO_POINTER ((ACPI_SIZE) where));
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION:    AcpiOsUnmapMemory
+ *
+ * PARAMETERS:  where               - Logical address of memory to be unmapped
+ *              length              - How much memory to unmap
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Delete a previously created mapping. Where and Length must
+ *              correspond to a previous mapping exactly.
+ *
+ *****************************************************************************/
+
+void
+AcpiOsUnmapMemory (
+    void                    *where,
+    ACPI_SIZE               length)
+{
+
+    return;
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION:    Spinlock interfaces
+ *
+ * DESCRIPTION: No-op on single threaded BIOS
+ *
+ *****************************************************************************/
+
+ACPI_STATUS
+AcpiOsCreateLock (
+    ACPI_SPINLOCK           *OutHandle)
+{
+    return (AE_OK);
+}
+
+void
+AcpiOsDeleteLock (
+    ACPI_SPINLOCK           Handle)
+{
+}
+
+ACPI_CPU_FLAGS
+AcpiOsAcquireLock (
+    ACPI_SPINLOCK           Handle)
+{
+    return (0);
+}
+
+void
+AcpiOsReleaseLock (
+    ACPI_SPINLOCK           Handle,
+    ACPI_CPU_FLAGS          Flags)
+{
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION:    AcpiOsAllocate
+ *
+ * PARAMETERS:  Size                - Amount to allocate, in bytes
+ *
+ * RETURN:      Pointer to the new allocation. Null on error.
+ *
+ * DESCRIPTION: Allocate memory. Algorithm is dependent on the OS.
+ *
+ *****************************************************************************/
+
+void *
+AcpiOsAllocate (
+    ACPI_SIZE               Size)
+{
+    EFI_STATUS              EfiStatus;
+    void                    *Mem;
+
+
+    EfiStatus = uefi_call_wrapper (BS->AllocatePool, 3,
+        EfiLoaderData, Size, &Mem);
+    if (EFI_ERROR (EfiStatus))
+    {
+        AcpiLogError ("EFI_BOOT_SERVICES->AllocatePool(EfiLoaderData) failure.\n");
+        return (NULL);
+    }
+
+    return (Mem);
+}
+
+
+#ifdef USE_NATIVE_ALLOCATE_ZEROED
+/******************************************************************************
+ *
+ * FUNCTION:    AcpiOsAllocateZeroed
+ *
+ * PARAMETERS:  Size                - Amount to allocate, in bytes
+ *
+ * RETURN:      Pointer to the new allocation. Null on error.
+ *
+ * DESCRIPTION: Allocate and zero memory. Algorithm is dependent on the OS.
+ *
+ *****************************************************************************/
+
+void *
+AcpiOsAllocateZeroed (
+    ACPI_SIZE               Size)
+{
+    void                    *Mem;
+
+
+    Mem = AcpiOsAllocate (Size);
+    if (Mem)
+    {
+        ACPI_MEMSET (Mem, 0, Size);
+    }
+
+    return (Mem);
+}
+#endif
+
+
+/******************************************************************************
+ *
+ * FUNCTION:    AcpiOsFree
+ *
+ * PARAMETERS:  Mem                 - Pointer to previously allocated memory
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Free memory allocated via AcpiOsAllocate
+ *
+ *****************************************************************************/
+
+void
+AcpiOsFree (
+    void                    *Mem)
+{
+
+    uefi_call_wrapper (BS->FreePool, 1, Mem);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiOsOpenFile
+ *
+ * PARAMETERS:  Path                - File path
+ *              Modes               - File operation type
+ *
+ * RETURN:      File descriptor
+ *
+ * DESCRIPTION: Open a file for reading (ACPI_FILE_READING) or/and writing
+ *              (ACPI_FILE_WRITING).
+ *
+ ******************************************************************************/
+
+ACPI_FILE
+AcpiOsOpenFile (
+    const char              *Path,
+    UINT8                   Modes)
+{
+    EFI_STATUS              EfiStatus = EFI_SUCCESS;
+    UINT64                  OpenModes;
+    EFI_FILE_HANDLE         EfiFile = NULL;
+    CHAR16                  *Path16 = NULL;
+    CHAR16                  *Pos16;
+    const char              *Pos;
+    INTN                    Count, i;
+
+
+    if (!Path)
+    {
+        return (NULL);
+    }
+
+    /* Convert modes */
+
+    OpenModes = EFI_FILE_MODE_READ;
+    if (Modes & ACPI_FILE_WRITING)
+    {
+        OpenModes |= (EFI_FILE_MODE_WRITE | EFI_FILE_MODE_CREATE);
+    }
+
+    /* Allocate path buffer */
+
+    Count = ACPI_STRLEN (Path);
+    Path16 = ACPI_ALLOCATE_ZEROED ((Count + 1) * sizeof (CHAR16));
+    if (!Path16)
+    {
+        EfiStatus = EFI_BAD_BUFFER_SIZE;
+        goto ErrorExit;
+    }
+    Pos = Path;
+    Pos16 = Path16;
+    while (*Pos == '/' || *Pos == '\\')
+    {
+        Pos++;
+        Count--;
+    }
+    for (i = 0; i < Count; i++)
+    {
+        if (*Pos == '/')
+        {
+            *Pos16++ = '\\';
+            Pos++;
+        }
+        else
+        {
+            *Pos16++ = *Pos++;
+        }
+    }
+    *Pos16 = '\0';
+
+    EfiStatus = uefi_call_wrapper (AcpiGbl_EfiCurrentVolume->Open, 5,
+        AcpiGbl_EfiCurrentVolume, &EfiFile, Path16, OpenModes, 0);
+    if (EFI_ERROR (EfiStatus))
+    {
+        AcpiLogError ("EFI_FILE_HANDLE->Open() failure.\n");
+        goto ErrorExit;
+    }
+
+ErrorExit:
+
+    if (Path16)
+    {
+        ACPI_FREE (Path16);
+    }
+
+    return ((ACPI_FILE) EfiFile);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiOsCloseFile
+ *
+ * PARAMETERS:  File                - File descriptor
+ *
+ * RETURN:      None.
+ *
+ * DESCRIPTION: Close a file.
+ *
+ ******************************************************************************/
+
+void
+AcpiOsCloseFile (
+    ACPI_FILE               File)
+{
+    EFI_FILE_HANDLE         EfiFile;
+
+
+    if (File == ACPI_FILE_OUT ||
+        File == ACPI_FILE_ERR)
+    {
+        return;
+    }
+    EfiFile = (EFI_FILE_HANDLE) File;
+    (void) uefi_call_wrapper (AcpiGbl_EfiCurrentVolume->Close, 1, EfiFile);
+
+    return;
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiOsReadFile
+ *
+ * PARAMETERS:  File                - File descriptor
+ *              Buffer              - Data buffer
+ *              Size                - Data block size
+ *              Count               - Number of data blocks
+ *
+ * RETURN:      Size of successfully read buffer
+ *
+ * DESCRIPTION: Read from a file.
+ *
+ ******************************************************************************/
+
+int
+AcpiOsReadFile (
+    ACPI_FILE               File,
+    void                    *Buffer,
+    ACPI_SIZE               Size,
+    ACPI_SIZE               Count)
+{
+    int                     Length = -1;
+    EFI_FILE_HANDLE         EfiFile;
+    UINTN                   ReadSize;
+    EFI_STATUS              EfiStatus;
+
+
+    if (File == ACPI_FILE_OUT ||
+        File == ACPI_FILE_ERR)
+    {
+    }
+    else
+    {
+        EfiFile = (EFI_FILE_HANDLE) File;
+        if (!EfiFile)
+        {
+            goto ErrorExit;
+        }
+        ReadSize = Size * Count;
+
+        EfiStatus = uefi_call_wrapper (AcpiGbl_EfiCurrentVolume->Read, 3,
+            EfiFile, &ReadSize, Buffer);
+        if (EFI_ERROR (EfiStatus))
+        {
+            AcpiLogError ("EFI_FILE_HANDLE->Read() failure.\n");
+            goto ErrorExit;
+        }
+        Length = ReadSize;
+    }
+
+ErrorExit:
+
+    return (Length);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiEfiFlushFile
+ *
+ * PARAMETERS:  File                - File descriptor
+ *              Begin               - String with boundary
+ *              End                 - Boundary of the string
+ *              Pos                 - Current position
+ *              FlushAll            - Whether checking boundary before flushing
+ *
+ * RETURN:      Updated position
+ *
+ * DESCRIPTION: Flush cached buffer to the file.
+ *
+ ******************************************************************************/
+
+static CHAR16 *
+AcpiEfiFlushFile (
+    ACPI_FILE               File,
+    CHAR16                  *Begin,
+    CHAR16                  *End,
+    CHAR16                  *Pos,
+    BOOLEAN                 FlushAll)
+{
+
+    if (FlushAll || Pos >= (End - 1))
+    {
+        *Pos = 0;
+        uefi_call_wrapper (File->OutputString, 2, File, Begin);
+        Pos = Begin;
+    }
+
+    return (Pos);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiOsWriteFile
+ *
+ * PARAMETERS:  File                - File descriptor
+ *              Buffer              - Data buffer
+ *              Size                - Data block size
+ *              Count               - Number of data blocks
+ *
+ * RETURN:      Size of successfully written buffer
+ *
+ * DESCRIPTION: Write to a file.
+ *
+ ******************************************************************************/
+
+int
+AcpiOsWriteFile (
+    ACPI_FILE               File,
+    void                    *Buffer,
+    ACPI_SIZE               Size,
+    ACPI_SIZE               Count)
+{
+    int                     Length = -1;
+    CHAR16                  String[ACPI_EFI_PRINT_LENGTH];
+    const char              *Ascii;
+    CHAR16                  *End;
+    CHAR16                  *Pos;
+    int                     i, j;
+    EFI_FILE_HANDLE         EfiFile;
+    UINTN                   WriteSize;
+    EFI_STATUS              EfiStatus;
+
+
+    if (File == ACPI_FILE_OUT ||
+        File == ACPI_FILE_ERR)
+    {
+        Pos = String;
+        End = String + ACPI_EFI_PRINT_LENGTH - 1;
+        Ascii = ACPI_CAST_PTR (const char, Buffer);
+        Length = 0;
+
+        for (j = 0; j < Count; j++)
+        {
+            for (i = 0; i < Size; i++)
+            {
+                if (*Ascii == '\n')
+                {
+                    *Pos++ = '\r';
+                    Pos = AcpiEfiFlushFile (File, String,
+                            End, Pos, FALSE);
+                }
+                *Pos++ = *Ascii++;
+                Length++;
+                Pos = AcpiEfiFlushFile (File, String,
+                        End, Pos, FALSE);
+            }
+        }
+        Pos = AcpiEfiFlushFile (File, String, End, Pos, TRUE);
+    }
+    else
+    {
+        EfiFile = (EFI_FILE_HANDLE) File;
+        if (!EfiFile)
+        {
+            goto ErrorExit;
+        }
+        WriteSize = Size * Count;
+
+        EfiStatus = uefi_call_wrapper (AcpiGbl_EfiCurrentVolume->Write, 3,
+            EfiFile, &WriteSize, Buffer);
+        if (EFI_ERROR (EfiStatus))
+        {
+            AcpiLogError ("EFI_FILE_HANDLE->Write() failure.\n");
+            goto ErrorExit;
+        }
+        Length = WriteSize;
+    }
+
+ErrorExit:
+
+    return (Length);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiOsGetFileOffset
+ *
+ * PARAMETERS:  File                - File descriptor
+ *
+ * RETURN:      Size of current position
+ *
+ * DESCRIPTION: Get current file offset.
+ *
+ ******************************************************************************/
+
+long
+AcpiOsGetFileOffset (
+    ACPI_FILE               File)
+{
+    long                    Offset = -1;
+
+
+    return (Offset);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiOsSetFileOffset
+ *
+ * PARAMETERS:  File                - File descriptor
+ *              Offset              - File offset
+ *              From                - From begin/end of file
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Set current file offset.
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiOsSetFileOffset (
+    ACPI_FILE               File,
+    long                    Offset,
+    UINT8                   From)
+{
+
+    return (AE_SUPPORT);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION:    AcpiOsPrintf
+ *
+ * PARAMETERS:  Format, ...         - Standard printf format
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Formatted output.
+ *
+ *****************************************************************************/
+
+void ACPI_INTERNAL_VAR_XFACE
+AcpiOsPrintf (
+    const char              *Format,
+    ...)
+{
+    va_list                 Args;
+
+
+    va_start (Args, Format);
+    AcpiOsVprintf (Format, Args);
+    va_end (Args);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION:    AcpiOsVprintf
+ *
+ * PARAMETERS:  Format              - Standard printf format
+ *              Args                - Argument list
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Formatted output with arguments list pointer.
+ *
+ *****************************************************************************/
+
+void
+AcpiOsVprintf (
+    const char              *Format,
+    va_list                 Args)
+{
+
+    (void) AcpiUtFileVprintf (ACPI_FILE_OUT, Format, Args);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION:    AcpiOsInitialize
+ *
+ * PARAMETERS:  None
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Initialize this module.
+ *
+ *****************************************************************************/
+
+ACPI_STATUS
+AcpiOsInitialize (
+    void)
+{
+
+    return (AE_OK);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION:    AcpiEfiArgify
+ *
+ * PARAMETERS:  String              - Pointer to command line argument strings
+ *                                    which are seperated with spaces
+ *              ArgcPtr             - Return number of the arguments
+ *              ArgvPtr             - Return vector of the arguments
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Convert EFI arguments into C arguments.
+ *
+ *****************************************************************************/
+
+static ACPI_STATUS
+AcpiEfiArgify (
+    char                    *String,
+    int                     *ArgcPtr,
+    char                    ***ArgvPtr)
+{
+    char                    *CopyBuffer;
+    int                     MaxArgc = *ArgcPtr;
+    int                     Argc = 0;
+    char                    **Argv = *ArgvPtr;
+    char                    *Arg;
+    BOOLEAN                 IsSingleQuote = FALSE;
+    BOOLEAN                 IsDoubleQuote = FALSE;
+    BOOLEAN                 IsEscape = FALSE;
+
+
+    if (String == NULL)
+    {
+        return (AE_BAD_PARAMETER);
+    }
+
+    CopyBuffer = String;
+
+    while (*String != '\0')
+    {
+        while (ACPI_IS_SPACE (*String))
+        {
+            *String++ = '\0';
+        }
+        Arg = CopyBuffer;
+        while (*String != '\0')
+        {
+            if (ACPI_IS_SPACE (*String) &&
+                !IsSingleQuote && !IsDoubleQuote && !IsEscape)
+            {
+                *Arg++ = '\0';
+                String++;
+                break;
+            }
+            if (IsEscape)
+            {
+                IsEscape = FALSE;
+                *Arg++ = *String;
+            }
+            else if (*String == '\\')
+            {
+                IsEscape = TRUE;
+            }
+            else if (IsSingleQuote)
+            {
+                if (*String == '\'')
+                {
+                    IsSingleQuote = FALSE;
+                    *Arg++ = '\0';
+                }
+                else
+                {
+                    *Arg++ = *String;
+                }
+            }
+            else if (IsDoubleQuote)
+            {
+                if (*String == '"')
+                {
+                    IsDoubleQuote = FALSE;
+                    *Arg = '\0';
+                }
+                else
+                {
+                    *Arg++ = *String;
+                }
+            }
+            else
+            {
+                if (*String == '\'')
+                {
+                    IsSingleQuote = TRUE;
+                }
+                else if (*String == '"')
+                {
+                    IsDoubleQuote = TRUE;
+                }
+                else
+                {
+                    *Arg++ = *String;
+                }
+            }
+            String++;
+        }
+        if (Argv && Argc < MaxArgc)
+        {
+            Argv[Argc] = CopyBuffer;
+        }
+        Argc++;
+        CopyBuffer = Arg;
+    }
+    if (Argv && Argc < MaxArgc)
+    {
+        Argv[Argc] = NULL;
+    }
+
+    *ArgcPtr = Argc;
+    *ArgvPtr = Argv;
+
+    return ((MaxArgc < Argc) ? AE_NO_MEMORY : AE_OK);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION:    AcpiEfiConvertArgcv
+ *
+ * PARAMETERS:  LoadOptions         - Pointer to the EFI options buffer, which
+ *                                    is NULL terminated
+ *              LoadOptionsSize     - Size of the EFI options buffer
+ *              ArgcPtr             - Return number of the arguments
+ *              ArgvPtr             - Return vector of the arguments
+ *              BufferPtr           - Buffer to contain the argument strings
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Convert EFI arguments into C arguments.
+ *
+ *****************************************************************************/
+
+static ACPI_STATUS
+AcpiEfiConvertArgcv (
+    CHAR16                  *LoadOptions,
+    UINT32                  LoadOptionsSize,
+    int                     *ArgcPtr,
+    char                    ***ArgvPtr,
+    char                    **BufferPtr)
+{
+    ACPI_STATUS             Status = AE_OK;
+    UINT32                  Count = LoadOptionsSize / sizeof (CHAR16);
+    UINT32                  i;
+    CHAR16                  *From;
+    char                    *To;
+    int                     Argc = 0;
+    char                    **Argv = NULL;
+    char                    *Buffer;
+
+
+    /* Prepare a buffer to contain the argument strings */
+
+    Buffer = ACPI_ALLOCATE_ZEROED (Count);
+    if (!Buffer)
+    {
+        Status = AE_NO_MEMORY;
+        goto ErrorExit;
+    }
+
+TryAgain:
+
+    /* Extend the argument vector */
+
+    if (Argv)
+    {
+        ACPI_FREE (Argv);
+        Argv = NULL;
+    }
+    if (Argc > 0)
+    {
+        Argv = ACPI_ALLOCATE_ZEROED (sizeof (char *) * (Argc + 1));
+        if (!Argv)
+        {
+            Status = AE_NO_MEMORY;
+            goto ErrorExit;
+        }
+    }
+
+    /*
+     * Note: As AcpiEfiArgify() will modify the content of the buffer, so
+     *       we need to restore it each time before invoking
+     *       AcpiEfiArgify().
+     */
+    From = LoadOptions;
+    To = ACPI_CAST_PTR (char, Buffer);
+    for (i = 0; i < Count; i++)
+    {
+        *To++ = (char) *From++;
+    }
+
+    /*
+     * The "Buffer" will contain NULL terminated strings after invoking
+     * AcpiEfiArgify(). The number of the strings are saved in Argc and the
+     * pointers of the strings are saved in Argv.
+     */
+    Status = AcpiEfiArgify (Buffer, &Argc, &Argv);
+    if (ACPI_FAILURE (Status))
+    {
+        if (Status == AE_NO_MEMORY)
+        {
+            goto TryAgain;
+        }
+    }
+
+ErrorExit:
+
+    if (ACPI_FAILURE (Status))
+    {
+        ACPI_FREE (Buffer);
+        ACPI_FREE (Argv);
+    }
+    else
+    {
+        *ArgcPtr = Argc;
+        *ArgvPtr = Argv;
+        *BufferPtr = Buffer;
+    }
+    return (Status);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION:    efi_main
+ *
+ * PARAMETERS:  Image               - EFI image handle
+ *              SystemTab           - EFI system table
+ *
+ * RETURN:      EFI Status
+ *
+ * DESCRIPTION: Entry point of EFI executable
+ *
+ *****************************************************************************/
+
+EFI_STATUS
+efi_main (
+    EFI_HANDLE              Image,
+    EFI_SYSTEM_TABLE        *SystemTab)
+{
+    EFI_LOADED_IMAGE        *Info;
+    EFI_STATUS              EfiStatus = EFI_SUCCESS;
+    ACPI_STATUS             Status;
+    int                     argc;
+    char                    **argv = NULL;
+    char                    *OptBuffer = NULL;
+    EFI_FILE_IO_INTERFACE   *Volume = NULL;
+
+
+    /* Initialize EFI library */
+
+    InitializeLib (Image, SystemTab);
+
+    /* Retrieve image information */
+
+    EfiStatus = uefi_call_wrapper (BS->HandleProtocol, 3,
+        Image, &LoadedImageProtocol, ACPI_CAST_PTR (VOID, &Info));
+    if (EFI_ERROR (EfiStatus))
+    {
+        AcpiLogError ("EFI_BOOT_SERVICES->HandleProtocol(LoadedImageProtocol) failure.\n");
+        return (EfiStatus);
+    }
+    AcpiGbl_EfiPoolAllocation = Info->ImageDataType;
+    EfiStatus = uefi_call_wrapper (BS->HandleProtocol, 3,
+        Info->DeviceHandle, &FileSystemProtocol, (void **) &Volume);
+    if (EFI_ERROR (EfiStatus))
+    {
+        AcpiLogError ("EFI_BOOT_SERVICES->HandleProtocol(FileSystemProtocol) failure.\n");
+        return (EfiStatus);
+    }
+    EfiStatus = uefi_call_wrapper (Volume->OpenVolume, 2,
+        Volume, &AcpiGbl_EfiCurrentVolume);
+    if (EFI_ERROR (EfiStatus))
+    {
+        AcpiLogError ("EFI_FILE_IO_INTERFACE->OpenVolume() failure.\n");
+        return (EfiStatus);
+    }
+    Status = AcpiEfiInitializeMemoryMap ();
+    if (ACPI_FAILURE (Status))
+    {
+        EfiStatus = EFI_DEVICE_ERROR;
+        goto ErrorAlloc;
+    }
+
+    Status = AcpiEfiConvertArgcv (Info->LoadOptions,
+        Info->LoadOptionsSize, &argc, &argv, &OptBuffer);
+    if (ACPI_FAILURE (Status))
+    {
+        EfiStatus = EFI_DEVICE_ERROR;
+        goto ErrorAlloc;
+    }
+
+    acpi_main (argc, argv);
+
+ErrorAlloc:
+
+    if (argv)
+    {
+        ACPI_FREE (argv);
+    }
+    if (OptBuffer)
+    {
+        ACPI_FREE (OptBuffer);
+    }
+    AcpiEfiTerminateMemoryMap ();
+
+    return (EfiStatus);
+}
diff --git a/sys/contrib/dev/acpica/source/os_specific/service_layers/oslibcfs.c b/sys/contrib/dev/acpica/source/os_specific/service_layers/oslibcfs.c
new file mode 100644 (file)
index 0000000..3bb55bb
--- /dev/null
@@ -0,0 +1,251 @@
+/******************************************************************************
+ *
+ * Module Name: oslibcfs - C library OSL for file IO
+ *
+ *****************************************************************************/
+
+/*
+ * Copyright (C) 2000 - 2014, Intel Corp.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions, and the following disclaimer,
+ *    without modification.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ *    substantially similar to the "NO WARRANTY" disclaimer below
+ *    ("Disclaimer") and any redistribution must be conditioned upon
+ *    including a substantially similar Disclaimer requirement for further
+ *    binary redistribution.
+ * 3. Neither the names of the above-listed copyright holders nor the names
+ *    of any contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * NO WARRANTY
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGES.
+ */
+
+#include "acpi.h"
+#include <stdio.h>
+#include <stdarg.h>
+
+#define _COMPONENT          ACPI_OS_SERVICES
+        ACPI_MODULE_NAME    ("oslibcfs")
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiOsOpenFile
+ *
+ * PARAMETERS:  Path                - File path
+ *              Modes               - File operation type
+ *
+ * RETURN:      File descriptor.
+ *
+ * DESCRIPTION: Open a file for reading (ACPI_FILE_READING) or/and writing
+ *              (ACPI_FILE_WRITING).
+ *
+ ******************************************************************************/
+
+ACPI_FILE
+AcpiOsOpenFile (
+    const char              *Path,
+    UINT8                   Modes)
+{
+    ACPI_FILE               File;
+    char                    ModesStr[4];
+    UINT32                  i = 0;
+
+    if (Modes & ACPI_FILE_READING)
+    {
+        ModesStr[i++] = 'r';
+    }
+    if (Modes & ACPI_FILE_WRITING)
+    {
+        ModesStr[i++] = 'w';
+    }
+    if (Modes & ACPI_FILE_BINARY)
+    {
+        ModesStr[i++] = 'b';
+    }
+    ModesStr[i++] = '\0';
+
+    File = fopen (Path, ModesStr);
+    if (!File)
+    {
+        perror ("Could not open file");
+    }
+
+    return (File);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiOsCloseFile
+ *
+ * PARAMETERS:  File                - File descriptor
+ *
+ * RETURN:      None.
+ *
+ * DESCRIPTION: Close a file.
+ *
+ ******************************************************************************/
+
+void
+AcpiOsCloseFile (
+    ACPI_FILE               File)
+{
+    fclose (File);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiOsReadFile
+ *
+ * PARAMETERS:  File                - File descriptor
+ *              Buffer              - Data buffer
+ *              Size                - Data block size
+ *              Count               - Number of data blocks
+ *
+ * RETURN:      Size of successfully read buffer.
+ *
+ * DESCRIPTION: Read a file.
+ *
+ ******************************************************************************/
+
+int
+AcpiOsReadFile (
+    ACPI_FILE               File,
+    void                    *Buffer,
+    ACPI_SIZE               Size,
+    ACPI_SIZE               Count)
+{
+    int                     Length;
+
+    Length = fread (Buffer, Size, Count, File);
+    if (Length < 0)
+    {
+        perror ("Error reading file");
+    }
+
+    return (Length);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiOsWriteFile
+ *
+ * PARAMETERS:  File                - File descriptor
+ *              Buffer              - Data buffer
+ *              Size                - Data block size
+ *              Count               - Number of data blocks
+ *
+ * RETURN:      Size of successfully written buffer.
+ *
+ * DESCRIPTION: Write a file.
+ *
+ ******************************************************************************/
+
+int
+AcpiOsWriteFile (
+    ACPI_FILE               File,
+    void                    *Buffer,
+    ACPI_SIZE               Size,
+    ACPI_SIZE               Count)
+{
+    int                     Length;
+
+    Length = fwrite (Buffer, Size, Count, File);
+    if (Length < 0)
+    {
+        perror ("Error writing file");
+    }
+
+    return (Length);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiOsGetFileOffset
+ *
+ * PARAMETERS:  File                - File descriptor
+ *
+ * RETURN:      Size of current position.
+ *
+ * DESCRIPTION: Get current file offset.
+ *
+ ******************************************************************************/
+
+long
+AcpiOsGetFileOffset (
+    ACPI_FILE               File)
+{
+    long                    Offset;
+
+    Offset = ftell (File);
+
+    return (Offset);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiOsSetFileOffset
+ *
+ * PARAMETERS:  File                - File descriptor
+ *              Offset              - File offset
+ *              From                - From begin/end of file
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Set current file offset.
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiOsSetFileOffset (
+    ACPI_FILE               File,
+    long                    Offset,
+    UINT8                   From)
+{
+    int                     Ret = 0;
+
+
+    if (From == ACPI_FILE_BEGIN)
+    {
+        Ret = fseek (File, Offset, SEEK_SET);
+    }
+    if (From == ACPI_FILE_END)
+    {
+        Ret = fseek (File, Offset, SEEK_END);
+    }
+
+    if (Ret < 0)
+    {
+        return (AE_ERROR);
+    }
+    else
+    {
+        return (AE_OK);
+    }
+}
index aee929e..aae9332 100644 (file)
@@ -97,6 +97,11 @@ static void
 OslUnmapTable (
     ACPI_TABLE_HEADER       *Table);
 
+static ACPI_PHYSICAL_ADDRESS
+OslFindRsdpViaEfiByKeyword (
+    FILE                    *File,
+    const char              *Keyword);
+
 static ACPI_PHYSICAL_ADDRESS
 OslFindRsdpViaEfi (
     void);
@@ -488,6 +493,44 @@ AcpiOsGetTableByIndex (
 }
 
 
+/******************************************************************************
+ *
+ * FUNCTION:    OslFindRsdpViaEfiByKeyword
+ *
+ * PARAMETERS:  Keyword         - Character string indicating ACPI GUID version
+ *                                in the EFI table
+ *
+ * RETURN:      RSDP address if found
+ *
+ * DESCRIPTION: Find RSDP address via EFI using keyword indicating the ACPI
+ *              GUID version.
+ *
+ *****************************************************************************/
+
+static ACPI_PHYSICAL_ADDRESS
+OslFindRsdpViaEfiByKeyword (
+    FILE                    *File,
+    const char              *Keyword)
+{
+    char                    Buffer[80];
+    unsigned long long      Address = 0;
+    char                    Format[32];
+
+
+    snprintf (Format, 32, "%s=%s", Keyword, "%llx");
+    fseek (File, 0, SEEK_SET);
+    while (fgets (Buffer, 80, File))
+    {
+        if (sscanf (Buffer, Format, &Address) == 1)
+        {
+            break;
+        }
+    }
+
+    return ((ACPI_PHYSICAL_ADDRESS) (Address));
+}
+
+
 /******************************************************************************
  *
  * FUNCTION:    OslFindRsdpViaEfi
@@ -505,24 +548,21 @@ OslFindRsdpViaEfi (
     void)
 {
     FILE                    *File;
-    char                    Buffer[80];
-    unsigned long           Address = 0;
+    ACPI_PHYSICAL_ADDRESS   Address = 0;
 
 
     File = fopen (EFI_SYSTAB, "r");
     if (File)
     {
-        while (fgets (Buffer, 80, File))
+        Address = OslFindRsdpViaEfiByKeyword (File, "ACPI20");
+        if (!Address)
         {
-            if (sscanf (Buffer, "ACPI20=0x%lx", &Address) == 1)
-            {
-                break;
-            }
+            Address = OslFindRsdpViaEfiByKeyword (File, "ACPI");
         }
         fclose (File);
     }
 
-    return ((ACPI_PHYSICAL_ADDRESS) (Address));
+    return (Address);
 }
 
 
@@ -907,6 +947,11 @@ OslGetBiosTable (
         ACPI_COMPARE_NAME (Signature, ACPI_SIG_DSDT) ||
         ACPI_COMPARE_NAME (Signature, ACPI_SIG_FACS))
     {
+        if (Instance > 0)
+        {
+            return (AE_LIMIT);
+        }
+
         /*
          * Get the appropriate address, either 32-bit or 64-bit. Be very
          * careful about the FADT length and validate table addresses.
index dd151ee..eb088b9 100644 (file)
         ACPI_MODULE_NAME    ("osunixxf")
 
 
-FILE                           *AcpiGbl_OutputFile;
 BOOLEAN                        AcpiGbl_DebugTimeout = FALSE;
 
 
 /* Upcalls to AcpiExec */
 
-ACPI_PHYSICAL_ADDRESS
-AeLocalGetRootPointer (
-    void);
-
 void
 AeTableOverride (
     ACPI_TABLE_HEADER       *ExistingTable,
@@ -214,10 +209,19 @@ ACPI_STATUS
 AcpiOsInitialize (
     void)
 {
+    ACPI_STATUS            Status;
+
 
     AcpiGbl_OutputFile = stdout;
 
     OsEnterLineEditMode ();
+
+    Status = AcpiOsCreateLock (&AcpiGbl_PrintLock);
+    if (ACPI_FAILURE (Status))
+    {
+        return (Status);
+    }
+
     return (AE_OK);
 }
 
@@ -231,6 +235,7 @@ AcpiOsTerminate (
 }
 
 
+#ifndef ACPI_USE_NATIVE_RSDP_POINTER
 /******************************************************************************
  *
  * FUNCTION:    AcpiOsGetRootPointer
@@ -248,8 +253,9 @@ AcpiOsGetRootPointer (
     void)
 {
 
-    return (AeLocalGetRootPointer ());
+    return (0);
 }
+#endif
 
 
 /******************************************************************************
@@ -548,6 +554,7 @@ AcpiOsGetLine (
 #endif
 
 
+#ifndef ACPI_USE_NATIVE_MEMORY_MAPPING
 /******************************************************************************
  *
  * FUNCTION:    AcpiOsMapMemory
@@ -593,6 +600,7 @@ AcpiOsUnmapMemory (
 
     return;
 }
+#endif
 
 
 /******************************************************************************
@@ -619,6 +627,32 @@ AcpiOsAllocate (
 }
 
 
+#ifdef USE_NATIVE_ALLOCATE_ZEROED
+/******************************************************************************
+ *
+ * FUNCTION:    AcpiOsAllocateZeroed
+ *
+ * PARAMETERS:  Size                - Amount to allocate, in bytes
+ *
+ * RETURN:      Pointer to the new allocation. Null on error.
+ *
+ * DESCRIPTION: Allocate and zero memory. Algorithm is dependent on the OS.
+ *
+ *****************************************************************************/
+
+void *
+AcpiOsAllocateZeroed (
+    ACPI_SIZE               size)
+{
+    void                    *Mem;
+
+
+    Mem = (void *) calloc (1, (size_t) size);
+    return (Mem);
+}
+#endif
+
+
 /******************************************************************************
  *
  * FUNCTION:    AcpiOsFree
@@ -1454,6 +1488,26 @@ AcpiOsExecute (
     return (0);
 }
 
+#else /* ACPI_SINGLE_THREADED */
+ACPI_THREAD_ID
+AcpiOsGetThreadId (
+    void)
+{
+    return (1);
+}
+
+ACPI_STATUS
+AcpiOsExecute (
+    ACPI_EXECUTE_TYPE       Type,
+    ACPI_OSD_EXEC_CALLBACK  Function,
+    void                    *Context)
+{
+
+    Function (Context);
+
+    return (AE_OK);
+}
+
 #endif /* ACPI_SINGLE_THREADED */
 
 
index 667a9f9..140bfdb 100644 (file)
@@ -64,7 +64,6 @@
         ACPI_MODULE_NAME    ("oswinxf")
 
 
-FILE                        *AcpiGbl_OutputFile;
 UINT64                      TimerFrequency;
 char                        TableName[ACPI_NAME_SIZE + 1];
 
@@ -73,10 +72,6 @@ char                        TableName[ACPI_NAME_SIZE + 1];
 
 /* Upcalls to AcpiExec application */
 
-ACPI_PHYSICAL_ADDRESS
-AeLocalGetRootPointer (
-    void);
-
 void
 AeTableOverride (
     ACPI_TABLE_HEADER       *ExistingTable,
@@ -143,6 +138,7 @@ ACPI_STATUS
 AcpiOsInitialize (
     void)
 {
+    ACPI_STATUS             Status;
     LARGE_INTEGER           LocalTimerFrequency;
 
 
@@ -164,10 +160,17 @@ AcpiOsInitialize (
         TimerFrequency = LocalTimerFrequency.QuadPart;
     }
 
+    Status = AcpiOsCreateLock (&AcpiGbl_PrintLock);
+    if (ACPI_FAILURE (Status))
+    {
+        return (Status);
+    }
+
     return (AE_OK);
 }
 
 
+#ifndef ACPI_USE_NATIVE_RSDP_POINTER
 /******************************************************************************
  *
  * FUNCTION:    AcpiOsGetRootPointer
@@ -185,8 +188,9 @@ AcpiOsGetRootPointer (
     void)
 {
 
-    return (AeLocalGetRootPointer ());
+    return (0);
 }
+#endif
 
 
 /******************************************************************************
@@ -554,6 +558,7 @@ AcpiOsGetLine (
 }
 
 
+#ifndef ACPI_USE_NATIVE_MEMORY_MAPPING
 /******************************************************************************
  *
  * FUNCTION:    AcpiOsMapMemory
@@ -599,6 +604,7 @@ AcpiOsUnmapMemory (
 
     return;
 }
+#endif
 
 
 /******************************************************************************
@@ -626,6 +632,33 @@ AcpiOsAllocate (
 }
 
 
+#ifdef USE_NATIVE_ALLOCATE_ZEROED
+/******************************************************************************
+ *
+ * FUNCTION:    AcpiOsAllocateZeroed
+ *
+ * PARAMETERS:  Size                - Amount to allocate, in bytes
+ *
+ * RETURN:      Pointer to the new allocation. Null on error.
+ *
+ * DESCRIPTION: Allocate and zero memory. Algorithm is dependent on the OS.
+ *
+ *****************************************************************************/
+
+void *
+AcpiOsAllocateZeroed (
+    ACPI_SIZE               Size)
+{
+    void                    *Mem;
+
+
+    Mem = (void *) calloc (1, (size_t) Size);
+
+    return (Mem);
+}
+#endif
+
+
 /******************************************************************************
  *
  * FUNCTION:    AcpiOsFree
@@ -1486,6 +1519,26 @@ AcpiOsExecute (
     return (0);
 }
 
+#else /* ACPI_SINGLE_THREADED */
+ACPI_THREAD_ID
+AcpiOsGetThreadId (
+    void)
+{
+    return (1);
+}
+
+ACPI_STATUS
+AcpiOsExecute (
+    ACPI_EXECUTE_TYPE       Type,
+    ACPI_OSD_EXEC_CALLBACK  Function,
+    void                    *Context)
+{
+
+    Function (Context);
+
+    return (AE_OK);
+}
+
 #endif /* ACPI_SINGLE_THREADED */
 
 
index d843400..84eb3c2 100644 (file)
@@ -77,10 +77,6 @@ AbPrintHeadersInfo (
     ACPI_TABLE_HEADER       *Header,
     ACPI_TABLE_HEADER       *Header2);
 
-ACPI_PHYSICAL_ADDRESS
-AeLocalGetRootPointer (
-    void);
-
 
 /******************************************************************************
  *
@@ -628,26 +624,3 @@ Exit1:
  * DESCRIPTION: For linkage
  *
  ******************************************************************************/
-
-ACPI_PHYSICAL_ADDRESS
-AeLocalGetRootPointer (
-    void)
-{
-    return (AE_OK);
-}
-
-ACPI_THREAD_ID
-AcpiOsGetThreadId (
-    void)
-{
-    return (0xFFFF);
-}
-
-ACPI_STATUS
-AcpiOsExecute (
-    ACPI_EXECUTE_TYPE       Type,
-    ACPI_OSD_EXEC_CALLBACK  Function,
-    void                    *Context)
-{
-    return (AE_SUPPORT);
-}
index d8c740c..d6b1acd 100644 (file)
@@ -119,7 +119,7 @@ main (
 
     /* Command line options */
 
-    while ((j = AcpiGetopt (argc, argv, AB_SUPPORTED_OPTIONS)) != EOF) switch(j)
+    while ((j = AcpiGetopt (argc, argv, AB_SUPPORTED_OPTIONS)) != ACPI_OPT_END) switch(j)
     {
     case 'c':   /* Compare Files */
 
index 1064eb4..f5c021a 100644 (file)
@@ -48,7 +48,6 @@
 #ifdef _DECLARE_GLOBALS
 #define EXTERN
 #define INIT_GLOBAL(a,b)        a=b
-#define DEFINE_ACPI_GLOBALS     1
 #else
 #define EXTERN                  extern
 #define INIT_GLOBAL(a,b)        a
@@ -71,7 +70,7 @@ EXTERN BOOLEAN              INIT_GLOBAL (Gbl_VerboseMode, FALSE);
 EXTERN BOOLEAN              INIT_GLOBAL (Gbl_BinaryMode, FALSE);
 EXTERN BOOLEAN              INIT_GLOBAL (Gbl_DumpCustomizedTables, FALSE);
 EXTERN BOOLEAN              INIT_GLOBAL (Gbl_DoNotDumpXsdt, FALSE);
-EXTERN FILE                 INIT_GLOBAL (*Gbl_OutputFile, NULL);
+EXTERN ACPI_FILE            INIT_GLOBAL (Gbl_OutputFile, NULL);
 EXTERN char                 INIT_GLOBAL (*Gbl_OutputFilename, NULL);
 EXTERN UINT64               INIT_GLOBAL (Gbl_RsdpBase, 0);
 
index 0bd0294..ab5c32c 100644 (file)
@@ -76,7 +76,7 @@ ApIsValidHeader (
 
         if (!AcpiUtValidAcpiName (Table->Signature))
         {
-            fprintf (stderr, "Table signature (0x%8.8X) is invalid\n",
+            AcpiLogError ("Table signature (0x%8.8X) is invalid\n",
                 *(UINT32 *) Table->Signature);
             return (FALSE);
         }
@@ -85,7 +85,7 @@ ApIsValidHeader (
 
         if (Table->Length < sizeof (ACPI_TABLE_HEADER))
         {
-            fprintf (stderr, "Table length (0x%8.8X) is invalid\n",
+            AcpiLogError ("Table length (0x%8.8X) is invalid\n",
                 Table->Length);
             return (FALSE);
         }
@@ -131,7 +131,7 @@ ApIsValidChecksum (
 
     if (ACPI_FAILURE (Status))
     {
-        fprintf (stderr, "%4.4s: Warning: wrong checksum in table\n",
+        AcpiLogError ("%4.4s: Warning: wrong checksum in table\n",
             Table->Signature);
     }
 
@@ -223,12 +223,13 @@ ApDumpTableBuffer (
      * Note: simplest to just always emit a 64-bit address. AcpiXtract
      * utility can handle this.
      */
-    printf ("%4.4s @ 0x%8.8X%8.8X\n", Table->Signature,
-        ACPI_FORMAT_UINT64 (Address));
+    AcpiUtFilePrintf (Gbl_OutputFile, "%4.4s @ 0x%8.8X%8.8X\n",
+        Table->Signature, ACPI_FORMAT_UINT64 (Address));
 
-    AcpiUtDumpBuffer (ACPI_CAST_PTR (UINT8, Table), TableLength,
+    AcpiUtDumpBufferToFile (Gbl_OutputFile,
+        ACPI_CAST_PTR (UINT8, Table), TableLength,
         DB_BYTE_DISPLAY, 0);
-    printf ("\n");
+    AcpiUtFilePrintf (Gbl_OutputFile, "\n");
     return (0);
 }
 
@@ -273,20 +274,20 @@ ApDumpAllTables (
             }
             else if (i == 0)
             {
-                fprintf (stderr, "Could not get ACPI tables, %s\n",
+                AcpiLogError ("Could not get ACPI tables, %s\n",
                     AcpiFormatException (Status));
                 return (-1);
             }
             else
             {
-                fprintf (stderr, "Could not get ACPI table at index %u, %s\n",
+                AcpiLogError ("Could not get ACPI table at index %u, %s\n",
                     i, AcpiFormatException (Status));
                 continue;
             }
         }
 
         TableStatus = ApDumpTableBuffer (Table, Instance, Address);
-        free (Table);
+        ACPI_FREE (Table);
 
         if (TableStatus)
         {
@@ -328,7 +329,7 @@ ApDumpTableByAddress (
     Status = AcpiUtStrtoul64 (AsciiAddress, 0, &LongAddress);
     if (ACPI_FAILURE (Status))
     {
-        fprintf (stderr, "%s: Could not convert to a physical address\n",
+        AcpiLogError ("%s: Could not convert to a physical address\n",
             AsciiAddress);
         return (-1);
     }
@@ -337,14 +338,14 @@ ApDumpTableByAddress (
     Status = AcpiOsGetTableByAddress (Address, &Table);
     if (ACPI_FAILURE (Status))
     {
-        fprintf (stderr, "Could not get table at 0x%8.8X%8.8X, %s\n",
+        AcpiLogError ("Could not get table at 0x%8.8X%8.8X, %s\n",
             ACPI_FORMAT_UINT64 (Address),
             AcpiFormatException (Status));
         return (-1);
     }
 
     TableStatus = ApDumpTableBuffer (Table, 0, Address);
-    free (Table);
+    ACPI_FREE (Table);
     return (TableStatus);
 }
 
@@ -374,9 +375,9 @@ ApDumpTableByName (
     int                     TableStatus;
 
 
-    if (strlen (Signature) != ACPI_NAME_SIZE)
+    if (ACPI_STRLEN (Signature) != ACPI_NAME_SIZE)
     {
-        fprintf (stderr,
+        AcpiLogError (
             "Invalid table signature [%s]: must be exactly 4 characters\n",
             Signature);
         return (-1);
@@ -384,18 +385,18 @@ ApDumpTableByName (
 
     /* Table signatures are expected to be uppercase */
 
-    strcpy (LocalSignature, Signature);
+    ACPI_STRCPY (LocalSignature, Signature);
     AcpiUtStrupr (LocalSignature);
 
     /* To be friendly, handle tables whose signatures do not match the name */
 
     if (ACPI_COMPARE_NAME (LocalSignature, "FADT"))
     {
-        strcpy (LocalSignature, ACPI_SIG_FADT);
+        ACPI_STRCPY (LocalSignature, ACPI_SIG_FADT);
     }
     else if (ACPI_COMPARE_NAME (LocalSignature, "MADT"))
     {
-        strcpy (LocalSignature, ACPI_SIG_MADT);
+        ACPI_STRCPY (LocalSignature, ACPI_SIG_MADT);
     }
 
     /* Dump all instances of this signature (to handle multiple SSDTs) */
@@ -413,14 +414,14 @@ ApDumpTableByName (
                 return (0);
             }
 
-            fprintf (stderr,
+            AcpiLogError (
                 "Could not get ACPI table with signature [%s], %s\n",
                 LocalSignature, AcpiFormatException (Status));
             return (-1);
         }
 
         TableStatus = ApDumpTableBuffer (Table, Instance, Address);
-        free (Table);
+        ACPI_FREE (Table);
 
         if (TableStatus)
         {
@@ -467,7 +468,7 @@ ApDumpTableFromFile (
 
     if (Table->Length > FileSize)
     {
-        fprintf (stderr,
+        AcpiLogError (
             "Table length (0x%X) is too large for input file (0x%X) %s\n",
             Table->Length, FileSize, Pathname);
         goto Exit;
@@ -475,7 +476,7 @@ ApDumpTableFromFile (
 
     if (Gbl_VerboseMode)
     {
-        fprintf (stderr,
+        AcpiLogError (
             "Input file:  %s contains table [%4.4s], 0x%X (%u) bytes\n",
             Pathname, Table->Signature, FileSize, FileSize);
     }
@@ -483,35 +484,6 @@ ApDumpTableFromFile (
     TableStatus = ApDumpTableBuffer (Table, 0, 0);
 
 Exit:
-    free (Table);
+    ACPI_FREE (Table);
     return (TableStatus);
 }
-
-
-/******************************************************************************
- *
- * FUNCTION:    AcpiOs* print functions
- *
- * DESCRIPTION: Used for linkage with ACPICA modules
- *
- ******************************************************************************/
-
-void ACPI_INTERNAL_VAR_XFACE
-AcpiOsPrintf (
-    const char              *Fmt,
-    ...)
-{
-    va_list                 Args;
-
-    va_start (Args, Fmt);
-    vfprintf (stdout, Fmt, Args);
-    va_end (Args);
-}
-
-void
-AcpiOsVprintf (
-    const char              *Fmt,
-    va_list                 Args)
-{
-    vfprintf (stdout, Fmt, Args);
-}
index 1588f2e..6633ce9 100644 (file)
 #include "acapps.h"
 
 
+/* Local prototypes */
+
+static int
+ApIsExistingFile (
+    char                    *Pathname);
+
+
+static int
+ApIsExistingFile (
+    char                    *Pathname)
+{
+#ifndef _GNU_EFI
+    struct stat             StatInfo;
+
+
+    if (!stat (Pathname, &StatInfo))
+    {
+        AcpiLogError ("Target path already exists, overwrite? [y|n] ");
+
+        if (getchar () != 'y')
+        {
+            return (-1);
+        }
+    }
+#endif
+
+    return 0;
+}
+
+
 /******************************************************************************
  *
  * FUNCTION:    ApOpenOutputFile
@@ -62,28 +92,22 @@ int
 ApOpenOutputFile (
     char                    *Pathname)
 {
-    struct stat             StatInfo;
-    FILE                    *File;
+    ACPI_FILE               File;
 
 
     /* If file exists, prompt for overwrite */
 
-    if (!stat (Pathname, &StatInfo))
+    if (ApIsExistingFile (Pathname) != 0)
     {
-        fprintf (stderr, "Target path already exists, overwrite? [y|n] ");
-
-        if (getchar () != 'y')
-        {
-            return (-1);
-        }
+        return (-1);
     }
 
     /* Point stdout to the file */
 
-    File = freopen (Pathname, "w", stdout);
+    File = AcpiOsOpenFile (Pathname, ACPI_FILE_WRITING);
     if (!File)
     {
-        perror ("Could not open output file");
+        AcpiLogError ("Could not open output file: %s\n", Pathname);
         return (-1);
     }
 
@@ -116,7 +140,7 @@ ApWriteToBinaryFile (
 {
     char                    Filename[ACPI_NAME_SIZE + 16];
     char                    InstanceStr [16];
-    FILE                    *File;
+    ACPI_FILE               File;
     size_t                  Actual;
     UINT32                  TableLength;
 
@@ -145,37 +169,38 @@ ApWriteToBinaryFile (
 
     if (Instance > 0)
     {
-        sprintf (InstanceStr, "%u", Instance);
-        strcat (Filename, InstanceStr);
+        AcpiUtSnprintf (InstanceStr, sizeof (InstanceStr), "%u", Instance);
+        ACPI_STRCAT (Filename, InstanceStr);
     }
 
-    strcat (Filename, ACPI_TABLE_FILE_SUFFIX);
+    ACPI_STRCAT (Filename, ACPI_TABLE_FILE_SUFFIX);
 
     if (Gbl_VerboseMode)
     {
-        fprintf (stderr,
+        AcpiLogError (
             "Writing [%4.4s] to binary file: %s 0x%X (%u) bytes\n",
             Table->Signature, Filename, Table->Length, Table->Length);
     }
 
     /* Open the file and dump the entire table in binary mode */
 
-    File = fopen (Filename, "wb");
+    File = AcpiOsOpenFile (Filename,
+        ACPI_FILE_WRITING | ACPI_FILE_BINARY);
     if (!File)
     {
-        perror ("Could not open output file");
+        AcpiLogError ("Could not open output file: %s\n", Filename);
         return (-1);
     }
 
-    Actual = fwrite (Table, 1, TableLength, File);
+    Actual = AcpiOsWriteFile (File, Table, 1, TableLength);
     if (Actual != TableLength)
     {
-        perror ("Error writing binary output file");
-        fclose (File);
+        AcpiLogError ("Error writing binary output file: %s\n", Filename);
+        AcpiOsCloseFile (File);
         return (-1);
     }
 
-    fclose (File);
+    AcpiOsCloseFile (File);
     return (0);
 }
 
@@ -199,17 +224,17 @@ ApGetTableFromFile (
     UINT32                  *OutFileSize)
 {
     ACPI_TABLE_HEADER       *Buffer = NULL;
-    FILE                    *File;
+    ACPI_FILE               File;
     UINT32                  FileSize;
     size_t                  Actual;
 
 
     /* Must use binary mode */
 
-    File = fopen (Pathname, "rb");
+    File = AcpiOsOpenFile (Pathname, ACPI_FILE_READING | ACPI_FILE_BINARY);
     if (!File)
     {
-        perror ("Could not open input file");
+        AcpiLogError ("Could not open input file: %s\n", Pathname);
         return (NULL);
     }
 
@@ -218,29 +243,29 @@ ApGetTableFromFile (
     FileSize = CmGetFileSize (File);
     if (FileSize == ACPI_UINT32_MAX)
     {
-        fprintf (stderr,
+        AcpiLogError (
             "Could not get input file size: %s\n", Pathname);
         goto Cleanup;
     }
 
     /* Allocate a buffer for the entire file */
 
-    Buffer = calloc (1, FileSize);
+    Buffer = ACPI_ALLOCATE_ZEROED (FileSize);
     if (!Buffer)
     {
-        fprintf (stderr,
+        AcpiLogError (
             "Could not allocate file buffer of size: %u\n", FileSize);
         goto Cleanup;
     }
 
     /* Read the entire file */
 
-    Actual = fread (Buffer, 1, FileSize, File);
+    Actual = AcpiOsReadFile (File, Buffer, 1, FileSize);
     if (Actual != FileSize)
     {
-        fprintf (stderr,
+        AcpiLogError (
             "Could not read input file: %s\n", Pathname);
-        free (Buffer);
+        ACPI_FREE (Buffer);
         Buffer = NULL;
         goto Cleanup;
     }
@@ -248,6 +273,6 @@ ApGetTableFromFile (
     *OutFileSize = FileSize;
 
 Cleanup:
-    fclose (File);
+    AcpiOsCloseFile (File);
     return (Buffer);
 }
index 8929b0f..ffd1a2a 100644 (file)
@@ -79,7 +79,7 @@ ApDoOptions (
     int                     argc,
     char                    **argv);
 
-static void
+static int
 ApInsertAction (
     char                    *Argument,
     UINT32                  ToBeDone);
@@ -119,7 +119,7 @@ ApDisplayUsage (
     ACPI_OPTION ("-v",                      "Display version information");
     ACPI_OPTION ("-z",                      "Verbose mode");
 
-    printf ("\nTable Options:\n");
+    ACPI_USAGE_TEXT ("\nTable Options:\n");
 
     ACPI_OPTION ("-a <Address>",            "Get table via a physical address");
     ACPI_OPTION ("-f <BinaryFile>",         "Get table via a binary file");
@@ -127,7 +127,7 @@ ApDisplayUsage (
     ACPI_OPTION ("-x",                      "Do not use but dump XSDT");
     ACPI_OPTION ("-x -x",                   "Do not use or dump XSDT");
 
-    printf (
+    ACPI_USAGE_TEXT (
         "\n"
         "Invocation without parameters dumps all available tables\n"
         "Multiple mixed instances of -a, -f, and -n are supported\n\n");
@@ -141,13 +141,13 @@ ApDisplayUsage (
  * PARAMETERS:  Argument            - Pointer to the argument for this action
  *              ToBeDone            - What to do to process this action
  *
- * RETURN:      None. Exits program if action table becomes full.
+ * RETURN:      Status
  *
  * DESCRIPTION: Add an action item to the action table
  *
  ******************************************************************************/
 
-static void
+static int
 ApInsertAction (
     char                    *Argument,
     UINT32                  ToBeDone)
@@ -161,9 +161,11 @@ ApInsertAction (
     CurrentAction++;
     if (CurrentAction > AP_MAX_ACTIONS)
     {
-        fprintf (stderr, "Too many table options (max %u)\n", AP_MAX_ACTIONS);
-        exit (-1);
+        AcpiLogError ("Too many table options (max %u)\n", AP_MAX_ACTIONS);
+        return (-1);
     }
+
+    return (0);
 }
 
 
@@ -191,7 +193,7 @@ ApDoOptions (
 
     /* Command line options */
 
-    while ((j = AcpiGetopt (argc, argv, AP_SUPPORTED_OPTIONS)) != EOF) switch (j)
+    while ((j = AcpiGetopt (argc, argv, AP_SUPPORTED_OPTIONS)) != ACPI_OPT_END) switch (j)
     {
     /*
      * Global options
@@ -210,13 +212,13 @@ ApDoOptions (
     case '?':
 
         ApDisplayUsage ();
-        exit (0);
+        return (1);
 
     case 'o':   /* Redirect output to a single file */
 
         if (ApOpenOutputFile (AcpiGbl_Optarg))
         {
-            exit (-1);
+            return (-1);
         }
         continue;
 
@@ -225,9 +227,9 @@ ApDoOptions (
         Status = AcpiUtStrtoul64 (AcpiGbl_Optarg, 0, &Gbl_RsdpBase);
         if (ACPI_FAILURE (Status))
         {
-            fprintf (stderr, "%s: Could not convert to a physical address\n",
+            AcpiLogError ("%s: Could not convert to a physical address\n",
                 AcpiGbl_Optarg);
-            exit (-1);
+            return (-1);
         }
         continue;
 
@@ -250,13 +252,13 @@ ApDoOptions (
 
     case 'v':   /* Revision/version */
 
-        printf (ACPI_COMMON_SIGNON (AP_UTILITY_NAME));
-        exit (0);
+        AcpiOsPrintf (ACPI_COMMON_SIGNON (AP_UTILITY_NAME));
+        return (1);
 
     case 'z':   /* Verbose mode */
 
         Gbl_VerboseMode = TRUE;
-        fprintf (stderr, ACPI_COMMON_SIGNON (AP_UTILITY_NAME));
+        AcpiLogError (ACPI_COMMON_SIGNON (AP_UTILITY_NAME));
         continue;
 
     /*
@@ -264,30 +266,42 @@ ApDoOptions (
      */
     case 'a':   /* Get table by physical address */
 
-        ApInsertAction (AcpiGbl_Optarg, AP_DUMP_TABLE_BY_ADDRESS);
+        if (ApInsertAction (AcpiGbl_Optarg, AP_DUMP_TABLE_BY_ADDRESS))
+        {
+            return (-1);
+        }
         break;
 
     case 'f':   /* Get table from a file */
 
-        ApInsertAction (AcpiGbl_Optarg, AP_DUMP_TABLE_BY_FILE);
+        if (ApInsertAction (AcpiGbl_Optarg, AP_DUMP_TABLE_BY_FILE))
+        {
+            return (-1);
+        }
         break;
 
     case 'n':   /* Get table by input name (signature) */
 
-        ApInsertAction (AcpiGbl_Optarg, AP_DUMP_TABLE_BY_NAME);
+        if (ApInsertAction (AcpiGbl_Optarg, AP_DUMP_TABLE_BY_NAME))
+        {
+            return (-1);
+        }
         break;
 
     default:
 
         ApDisplayUsage ();
-        exit (-1);
+        return (-1);
     }
 
     /* If there are no actions, this means "get/dump all tables" */
 
     if (CurrentAction == 0)
     {
-        ApInsertAction (NULL, AP_DUMP_ALL_TABLES);
+        if (ApInsertAction (NULL, AP_DUMP_ALL_TABLES))
+        {
+            return (-1);
+        }
     }
 
     return (0);
@@ -306,10 +320,17 @@ ApDoOptions (
  *
  ******************************************************************************/
 
+#ifndef _GNU_EFI
 int ACPI_SYSTEM_XFACE
 main (
     int                     argc,
     char                    *argv[])
+#else
+int ACPI_SYSTEM_XFACE
+acpi_main (
+    int                     argc,
+    char                    *argv[])
+#endif
 {
     int                     Status = 0;
     AP_DUMP_ACTION          *Action;
@@ -318,12 +339,19 @@ main (
 
 
     ACPI_DEBUG_INITIALIZE (); /* For debug version only */
+    AcpiOsInitialize ();
+    Gbl_OutputFile = ACPI_FILE_OUT;
 
     /* Process command line options */
 
-    if (ApDoOptions (argc, argv))
+    Status = ApDoOptions (argc, argv);
+    if (Status > 0)
     {
-        return (-1);
+        return (0);
+    }
+    if (Status < 0)
+    {
+        return (Status);
     }
 
     /* Get/dump ACPI table(s) as requested */
@@ -355,7 +383,7 @@ main (
 
         default:
 
-            fprintf (stderr, "Internal error, invalid action: 0x%X\n",
+            AcpiLogError ("Internal error, invalid action: 0x%X\n",
                 Action->ToBeDone);
             return (-1);
         }
@@ -366,18 +394,18 @@ main (
         }
     }
 
-    if (Gbl_OutputFile)
+    if (Gbl_OutputFilename)
     {
         if (Gbl_VerboseMode)
         {
             /* Summary for the output file */
 
             FileSize = CmGetFileSize (Gbl_OutputFile);
-            fprintf (stderr, "Output file %s contains 0x%X (%u) bytes\n\n",
+            AcpiLogError ("Output file %s contains 0x%X (%u) bytes\n\n",
                 Gbl_OutputFilename, FileSize, FileSize);
         }
 
-        fclose (Gbl_OutputFile);
+        AcpiOsCloseFile (Gbl_OutputFile);
     }
 
     return (Status);
index 5ad24e9..1280ff6 100644 (file)
@@ -1055,11 +1055,21 @@ AeInstallEarlyHandlers (
         Status = AcpiDetachData (Handle, AeAttachedDataHandler);
         AE_CHECK_OK (AcpiDetachData, Status);
 
-        Status = AcpiAttachData (Handle, AeAttachedDataHandler, Handle);
+        /* Test attach data at the root object */
+
+        Status = AcpiAttachData (ACPI_ROOT_OBJECT, AeAttachedDataHandler,
+            AcpiGbl_RootNode);
+        AE_CHECK_OK (AcpiAttachData, Status);
+
+        Status = AcpiAttachData (ACPI_ROOT_OBJECT, AeAttachedDataHandler2,
+            AcpiGbl_RootNode);
         AE_CHECK_OK (AcpiAttachData, Status);
 
         /* Test support for multiple attaches */
 
+        Status = AcpiAttachData (Handle, AeAttachedDataHandler, Handle);
+        AE_CHECK_OK (AcpiAttachData, Status);
+
         Status = AcpiAttachData (Handle, AeAttachedDataHandler2, Handle);
         AE_CHECK_OK (AcpiAttachData, Status);
     }
@@ -1305,6 +1315,10 @@ AeRegionHandler (
             switch (Function >> 16)
             {
             case AML_FIELD_ATTRIB_QUICK:
+
+                Length = 0;
+                break;
+
             case AML_FIELD_ATTRIB_SEND_RCV:
             case AML_FIELD_ATTRIB_BYTE:
 
index 3aa9343..99dd1a2 100644 (file)
@@ -166,7 +166,7 @@ AeDoOptions (
     int                     j;
 
 
-    while ((j = AcpiGetopt (argc, argv, AE_SUPPORTED_OPTIONS)) != EOF) switch (j)
+    while ((j = AcpiGetopt (argc, argv, AE_SUPPORTED_OPTIONS)) != ACPI_OPT_END) switch (j)
     {
     case 'b':
 
@@ -375,22 +375,14 @@ main (
 
 
     ACPI_DEBUG_INITIALIZE (); /* For debug version only */
-
-    printf (ACPI_COMMON_SIGNON (ACPIEXEC_NAME));
-    if (argc < 2)
-    {
-        usage ();
-        return (0);
-    }
-
     signal (SIGINT, AeCtrlCHandler);
 
-    /* Init globals */
+    /* Init debug globals */
 
     AcpiDbgLevel = ACPI_NORMAL_DEFAULT;
     AcpiDbgLayer = 0xFFFFFFFF;
 
-    /* Init ACPI and start debugger thread */
+    /* Init ACPICA and start debugger thread */
 
     Status = AcpiInitializeSubsystem ();
     AE_CHECK_OK (AcpiInitializeSubsystem, Status);
@@ -399,6 +391,13 @@ main (
         goto ErrorExit;
     }
 
+    printf (ACPI_COMMON_SIGNON (ACPIEXEC_NAME));
+    if (argc < 2)
+    {
+        usage ();
+        return (0);
+    }
+
     /* Get the command line options */
 
     if (AeDoOptions (argc, argv))
@@ -422,7 +421,7 @@ main (
     {
         /* Get one entire table */
 
-        Status = AcpiDbReadTableFromFile (argv[AcpiGbl_Optind], &Table);
+        Status = AcpiUtReadTableFromFile (argv[AcpiGbl_Optind], &Table);
         if (ACPI_FAILURE (Status))
         {
             printf ("**** Could not get table from file %s, %s\n",
index e873b48..a9becc2 100644 (file)
@@ -60,10 +60,6 @@ AeTableOverride (
     ACPI_TABLE_HEADER       *ExistingTable,
     ACPI_TABLE_HEADER       **NewTable);
 
-ACPI_PHYSICAL_ADDRESS
-AeLocalGetRootPointer (
-    void);
-
 /* User table (DSDT) */
 
 static ACPI_TABLE_HEADER        *DsdtToInstallOverride;
@@ -545,7 +541,7 @@ AeInstallTables (
 
 /******************************************************************************
  *
- * FUNCTION:    AeLocalGetRootPointer
+ * FUNCTION:    AcpiOsGetRootPointer
  *
  * PARAMETERS:  Flags       - not used
  *              Address     - Where the root pointer is returned
@@ -558,7 +554,7 @@ AeInstallTables (
  *****************************************************************************/
 
 ACPI_PHYSICAL_ADDRESS
-AeLocalGetRootPointer (
+AcpiOsGetRootPointer (
     void)
 {
 
index a340598..9be1f3b 100644 (file)
@@ -71,26 +71,26 @@ AhDisplayUsage (
     ACPI_OPTION ("-h",                      "Display help");
     ACPI_OPTION ("-v",                      "Display version information");
 
-    printf ("\nAML (ACPI Machine Language) Names and Encodings:\n");
+    ACPI_USAGE_TEXT ("\nAML (ACPI Machine Language) Names and Encodings:\n");
     ACPI_OPTION ("-a [Name/Prefix]",        "Find/Display both ASL operator and AML opcode name(s)");
     ACPI_OPTION ("-m [Name/Prefix]",        "Find/Display AML opcode name(s)");
 
-    printf ("\nASL (ACPI Source Language) Names and Symbols:\n");
+    ACPI_USAGE_TEXT ("\nASL (ACPI Source Language) Names and Symbols:\n");
     ACPI_OPTION ("-k [Name/Prefix]",        "Find/Display ASL non-operator keyword(s)");
     ACPI_OPTION ("-p [Name/Prefix]",        "Find/Display ASL predefined method name(s)");
     ACPI_OPTION ("-s [Name/Prefix]",        "Find/Display ASL operator name(s)");
 
-    printf ("\nOther ACPI Names:\n");
+    ACPI_USAGE_TEXT ("\nOther ACPI Names:\n");
     ACPI_OPTION ("-i [Name/Prefix]",        "Find/Display ACPI/PNP Hardware ID(s)");
 
-    printf ("\nACPI Values:\n");
+    ACPI_USAGE_TEXT ("\nACPI Values:\n");
     ACPI_OPTION ("-e [HexValue]",           "Decode ACPICA exception code");
     ACPI_OPTION ("-o [HexValue]",           "Decode hex AML opcode");
 
-    printf ("\nName/Prefix or HexValue not specified means \"Display All\"\n");
-    printf ("\nDefault search with valid Name/Prefix and no options:\n");
-    printf ("    Find ASL/AML operator names - if NamePrefix does not start with underscore\n");
-    printf ("    Find ASL predefined method names - if NamePrefix starts with underscore\n");
+    ACPI_USAGE_TEXT ("\nName/Prefix or HexValue not specified means \"Display All\"\n");
+    ACPI_USAGE_TEXT ("\nDefault search with valid Name/Prefix and no options:\n");
+    ACPI_USAGE_TEXT ("    Find ASL/AML operator names - if NamePrefix does not start with underscore\n");
+    ACPI_USAGE_TEXT ("    Find ASL predefined method names - if NamePrefix starts with underscore\n");
 }
 
 
@@ -112,6 +112,7 @@ main (
     int                     j;
 
 
+    AcpiOsInitialize ();
     ACPI_DEBUG_INITIALIZE (); /* For debug version only */
     printf (ACPI_COMMON_SIGNON (AH_UTILITY_NAME));
     DecodeType = AH_DECODE_DEFAULT;
@@ -124,7 +125,7 @@ main (
 
     /* Command line options */
 
-    while ((j = AcpiGetopt (argc, argv, AH_SUPPORTED_OPTIONS)) != EOF) switch (j)
+    while ((j = AcpiGetopt (argc, argv, AH_SUPPORTED_OPTIONS)) != ACPI_OPT_END) switch (j)
     {
     case 'a':
 
index e65e6e9..a7ea9a9 100644 (file)
@@ -105,7 +105,7 @@ NsDumpEntireNamespace (
 
     /* Open the binary AML file and read the entire table */
 
-    Status = AcpiDbReadTableFromFile (AmlFilename, &Table);
+    Status = AcpiUtReadTableFromFile (AmlFilename, &Table);
     if (ACPI_FAILURE (Status))
     {
         printf ("**** Could not get input table %s, %s\n", AmlFilename,
@@ -241,25 +241,29 @@ main (
 
 
     ACPI_DEBUG_INITIALIZE (); /* For debug version only */
-    printf (ACPI_COMMON_SIGNON (AN_UTILITY_NAME));
 
-    if (argc < 2)
-    {
-        usage ();
-        return (0);
-    }
-
-    /* Init globals and ACPICA */
+    /* Init debug globals and ACPICA */
 
-    AcpiDbgLevel = ACPI_NORMAL_DEFAULT | ACPI_LV_TABLES;
+    AcpiDbgLevel = ACPI_LV_TABLES;
     AcpiDbgLayer = 0xFFFFFFFF;
 
     Status = AcpiInitializeSubsystem ();
     AE_CHECK_OK (AcpiInitializeSubsystem, Status);
+    if (ACPI_FAILURE (Status))
+    {
+        return (-1);
+    }
+
+    printf (ACPI_COMMON_SIGNON (AN_UTILITY_NAME));
+    if (argc < 2)
+    {
+        usage ();
+        return (0);
+    }
 
     /* Get the command line options */
 
-    while ((j = AcpiGetopt (argc, argv, AN_SUPPORTED_OPTIONS)) != EOF) switch(j)
+    while ((j = AcpiGetopt (argc, argv, AN_SUPPORTED_OPTIONS)) != ACPI_OPT_END) switch(j)
     {
     case 'v': /* -v: (Version): signon already emitted, just exit */
 
index dedc40f..5933be3 100644 (file)
 
 /* Utilities */
 
-void
-AcpiUtSubsystemShutdown (
-    void)
-{
-}
-
-ACPI_STATUS
-AcpiUtExecute_STA (
-    ACPI_NAMESPACE_NODE     *DeviceNode,
-    UINT32                  *StatusFlags)
-{
-    return (AE_NOT_IMPLEMENTED);
-}
-
-ACPI_STATUS
-AcpiUtExecute_HID (
-    ACPI_NAMESPACE_NODE     *DeviceNode,
-    ACPI_PNP_DEVICE_ID      **ReturnId)
-{
-    return (AE_NOT_IMPLEMENTED);
-}
-
-ACPI_STATUS
-AcpiUtExecute_CID (
-    ACPI_NAMESPACE_NODE     *DeviceNode,
-    ACPI_PNP_DEVICE_ID_LIST **ReturnCidList)
-{
-    return (AE_NOT_IMPLEMENTED);
-}
-
-ACPI_STATUS
-AcpiUtExecute_UID (
-    ACPI_NAMESPACE_NODE     *DeviceNode,
-    ACPI_PNP_DEVICE_ID      **ReturnId)
-{
-    return (AE_NOT_IMPLEMENTED);
-}
-
-ACPI_STATUS
-AcpiUtExecute_SUB (
-    ACPI_NAMESPACE_NODE     *DeviceNode,
-    ACPI_PNP_DEVICE_ID      **ReturnId)
-{
-    return (AE_NOT_IMPLEMENTED);
-}
-
-ACPI_STATUS
-AcpiUtExecutePowerMethods (
-    ACPI_NAMESPACE_NODE     *DeviceNode,
-    const char              **MethodNames,
-    UINT8                   MethodCount,
-    UINT8                   *OutValues)
-{
-    return (AE_NOT_IMPLEMENTED);
-}
-
-ACPI_STATUS
-AcpiUtEvaluateNumericObject (
-    char                    *ObjectName,
-    ACPI_NAMESPACE_NODE     *DeviceNode,
-    UINT64                  *Value)
-{
-    return (AE_NOT_IMPLEMENTED);
-}
-
 ACPI_STATUS
 AcpiUtCopyIobjectToEobject (
     ACPI_OPERAND_OBJECT     *Obj,
@@ -151,32 +86,8 @@ AcpiUtCopyIobjectToIobject (
 }
 
 
-/* Hardware manager */
-
-UINT32
-AcpiHwGetMode (
-    void)
-{
-    return (0);
-}
-
-
 /* Event manager */
 
-ACPI_STATUS
-AcpiEvInstallXruptHandlers (
-    void)
-{
-    return (AE_OK);
-}
-
-ACPI_STATUS
-AcpiEvInitializeEvents (
-    void)
-{
-    return (AE_OK);
-}
-
 ACPI_STATUS
 AcpiEvInstallRegionHandlers (
     void)
@@ -199,37 +110,9 @@ AcpiEvInitializeRegion (
     return (AE_OK);
 }
 
-#if (!ACPI_REDUCED_HARDWARE)
-ACPI_STATUS
-AcpiEvDeleteGpeBlock (
-    ACPI_GPE_BLOCK_INFO     *GpeBlock)
-{
-    return (AE_OK);
-}
-
-ACPI_STATUS
-AcpiEnable (
-    void)
-{
-    return (AE_OK);
-}
-#endif /* !ACPI_REDUCED_HARDWARE */
-
 
 /* AML Interpreter */
 
-void
-AcpiExUnlinkMutex (
-    ACPI_OPERAND_OBJECT     *ObjDesc)
-{
-}
-
-void
-AcpiExReleaseAllMutexes (
-    ACPI_THREAD_STATE       *Thread)
-{
-}
-
 ACPI_STATUS
 AcpiExReadDataFromField (
     ACPI_WALK_STATE         *WalkState,
@@ -255,22 +138,6 @@ AcpiExPrepFieldValue (
     return (AE_OK);
 }
 
-ACPI_STATUS
-AcpiExAcquireMutexObject (
-    UINT16                  Timeout,
-    ACPI_OPERAND_OBJECT     *ObjDesc,
-    ACPI_THREAD_ID          ThreadId)
-{
-    return (AE_OK);
-}
-
-ACPI_STATUS
-AcpiExReleaseMutexObject (
-    ACPI_OPERAND_OBJECT     *ObjDesc)
-{
-    return (AE_OK);
-}
-
 ACPI_STATUS
 AcpiExStoreObjectToNode (
     ACPI_OPERAND_OBJECT     *SourceDesc,
@@ -406,44 +273,3 @@ AcpiDsExecEndOp (
 {
     return (AE_NOT_IMPLEMENTED);
 }
-
-
-/* AML Debugger */
-
-void
-AcpiDbDisplayArgumentObject (
-    ACPI_OPERAND_OBJECT     *ObjDesc,
-    ACPI_WALK_STATE         *WalkState)
-{
-}
-
-ACPI_STATUS
-AcpiDbInitialize (
-    void)
-{
-    return (AE_OK);
-}
-
-void
-AcpiDbTerminate (
-    void)
-{
-}
-
-/* OSL interfaces */
-
-ACPI_THREAD_ID
-AcpiOsGetThreadId (
-    void)
-{
-    return (0xFFFF);
-}
-
-ACPI_STATUS
-AcpiOsExecute (
-    ACPI_EXECUTE_TYPE       Type,
-    ACPI_OSD_EXEC_CALLBACK  Function,
-    void                    *Context)
-{
-    return (AE_SUPPORT);
-}
index 8ad3c5c..b91b425 100644 (file)
 
 /* Local prototypes */
 
-ACPI_PHYSICAL_ADDRESS
-AeLocalGetRootPointer (
-    void);
-
 /* Non-AML tables that are constructed locally and installed */
 
 static ACPI_TABLE_RSDP          LocalRSDP;
@@ -284,7 +280,7 @@ AeBuildLocalTables (
 
 /******************************************************************************
  *
- * FUNCTION:    AeLocalGetRootPointer
+ * FUNCTION:    AcpiOsGetRootPointer
  *
  * PARAMETERS:  None
  *
@@ -296,7 +292,7 @@ AeBuildLocalTables (
  *****************************************************************************/
 
 ACPI_PHYSICAL_ADDRESS
-AeLocalGetRootPointer (
+AcpiOsGetRootPointer (
     void)
 {
 
index 8c75769..8b26ebc 100644 (file)
@@ -297,7 +297,7 @@ AsDisplayUsage (
     ACPI_OPTION ("-l",          "Generate Linux version of the source");
     ACPI_OPTION ("-u",          "Generate Custom source translation");
 
-    printf ("\n");
+    ACPI_USAGE_TEXT ("\n");
     ACPI_OPTION ("-d",          "Leave debug statements in code");
     ACPI_OPTION ("-s",          "Generate source statistics only");
     ACPI_OPTION ("-v",          "Display version information");
@@ -327,6 +327,7 @@ main (
 
 
     ACPI_DEBUG_INITIALIZE (); /* For debug version only */
+    AcpiOsInitialize ();
     printf (ACPI_COMMON_SIGNON (AS_UTILITY_NAME));
 
     if (argc < 2)
@@ -337,7 +338,7 @@ main (
 
     /* Command line options */
 
-    while ((j = AcpiGetopt (argc, argv, AS_SUPPORTED_OPTIONS)) != EOF) switch(j)
+    while ((j = AcpiGetopt (argc, argv, AS_SUPPORTED_OPTIONS)) != ACPI_OPT_END) switch(j)
     {
     case 'l':
 
index 9e127a4..7f25988 100644 (file)
@@ -253,6 +253,9 @@ ACPI_TYPED_IDENTIFIER_TABLE           AcpiIdentifiers[] = {
     {"ACPI_INTERPRETER_MODE",               SRC_TYPE_SIMPLE},
     {"ACPI_IO_ADDRESS",                     SRC_TYPE_SIMPLE},
     {"ACPI_IO_ATTRIBUTE",                   SRC_TYPE_STRUCT},
+    {"ACPI_LPIT_HEADER",                    SRC_TYPE_STRUCT},
+    {"ACPI_LPIT_IO",                        SRC_TYPE_STRUCT},
+    {"ACPI_LPIT_NATIVE",                    SRC_TYPE_STRUCT},
     {"ACPI_MEM_SPACE_CONTEXT",              SRC_TYPE_STRUCT},
     {"ACPI_MEMORY_ATTRIBUTE",               SRC_TYPE_STRUCT},
     {"ACPI_MEMORY_LIST",                    SRC_TYPE_STRUCT},
@@ -400,6 +403,7 @@ ACPI_TYPED_IDENTIFIER_TABLE           AcpiIdentifiers[] = {
     {"ACPI_TABLE_HEADER",                   SRC_TYPE_STRUCT},
     {"ACPI_TABLE_INFO",                     SRC_TYPE_STRUCT},
     {"ACPI_TABLE_LIST",                     SRC_TYPE_STRUCT},
+    {"ACPI_TABLE_LPIT",                     SRC_TYPE_STRUCT},
     {"ACPI_TABLE_MTMR",                     SRC_TYPE_STRUCT},
     {"ACPI_TABLE_SUPPORT",                  SRC_TYPE_STRUCT},
     {"ACPI_TABLE_TYPE",                     SRC_TYPE_SIMPLE},
@@ -720,8 +724,10 @@ ACPI_STRING_TABLE           LinuxSpecialStrings[] = {
     {"\"actbl3.h\"",            "<acpi/actbl3.h>",&nbs