summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjkim <jkim@FreeBSD.org>2013-05-17 23:13:40 +0000
committerjkim <jkim@FreeBSD.org>2013-05-17 23:13:40 +0000
commitaf69f95bba3597db53a980597cfd371c9f6ee7cf (patch)
tree740dae2325e162bb086ea6e7e5d481c4b669e232
parent00f95aec269522bc092cf85fe57fcfc19efecec9 (diff)
downloadFreeBSD-src-af69f95bba3597db53a980597cfd371c9f6ee7cf.zip
FreeBSD-src-af69f95bba3597db53a980597cfd371c9f6ee7cf.tar.gz
Import ACPICA 20130517.
-rw-r--r--changes.txt104
-rwxr-xr-xgenerate/release/build.sh3
-rw-r--r--generate/unix/Makefile.common85
-rw-r--r--generate/unix/Makefile.config54
-rw-r--r--generate/unix/Makefile.rules2
-rw-r--r--generate/unix/acpibin/Makefile2
-rw-r--r--generate/unix/acpidump/Makefile53
-rw-r--r--generate/unix/acpiexec/Makefile9
-rw-r--r--generate/unix/acpinames/Makefile2
-rw-r--r--generate/unix/iasl/Makefile4
-rw-r--r--source/common/adisasm.c3
-rw-r--r--source/common/adwalk.c7
-rw-r--r--source/common/dmextern.c1
-rw-r--r--source/common/dmrestag.c2
-rw-r--r--source/common/dmtable.c33
-rw-r--r--source/common/dmtbdump.c83
-rw-r--r--source/common/getopt.c68
-rw-r--r--source/compiler/aslanalyze.c2
-rw-r--r--source/compiler/aslbtypes.c38
-rw-r--r--source/compiler/aslcodegen.c5
-rw-r--r--source/compiler/aslcompile.c7
-rw-r--r--source/compiler/aslcompiler.h27
-rw-r--r--source/compiler/aslerror.c135
-rw-r--r--source/compiler/aslfold.c9
-rw-r--r--source/compiler/aslglobal.h3
-rw-r--r--source/compiler/aslhex.c2
-rw-r--r--source/compiler/asllength.c2
-rw-r--r--source/compiler/asllisting.c20
-rw-r--r--source/compiler/asllistsup.c4
-rw-r--r--source/compiler/aslload.c6
-rw-r--r--source/compiler/asllookup.c2
-rw-r--r--source/compiler/aslmain.c774
-rw-r--r--source/compiler/aslmessages.h86
-rw-r--r--source/compiler/aslmethod.c87
-rw-r--r--source/compiler/aslnamesp.c21
-rw-r--r--source/compiler/asloffset.c122
-rw-r--r--source/compiler/aslopcodes.c3
-rw-r--r--source/compiler/asloperands.c23
-rw-r--r--source/compiler/asloptions.c791
-rw-r--r--source/compiler/aslpredef.c22
-rw-r--r--source/compiler/aslresource.c45
-rw-r--r--source/compiler/aslrestype1i.c1
-rw-r--r--source/compiler/aslrestype2s.c4
-rw-r--r--source/compiler/aslstartup.c1
-rw-r--r--source/compiler/aslsupport.l15
-rw-r--r--source/compiler/asltransform.c9
-rw-r--r--source/compiler/asltree.c50
-rw-r--r--source/compiler/asltypes.h11
-rw-r--r--source/compiler/aslutils.c6
-rw-r--r--source/compiler/aslwalks.c10
-rw-r--r--source/compiler/aslxref.c12
-rw-r--r--source/compiler/dtexpress.c19
-rw-r--r--source/compiler/dtfield.c9
-rw-r--r--source/compiler/dtio.c32
-rw-r--r--source/compiler/dtsubtable.c3
-rw-r--r--source/compiler/dttable.c81
-rw-r--r--source/compiler/dtutils.c43
-rw-r--r--source/compiler/prscan.c46
-rw-r--r--source/components/debugger/dbcmds.c5
-rw-r--r--source/components/debugger/dbconvert.c4
-rw-r--r--source/components/debugger/dbdisply.c14
-rw-r--r--source/components/debugger/dbexec.c2
-rw-r--r--source/components/debugger/dbhistry.c38
-rw-r--r--source/components/debugger/dbinput.c59
-rw-r--r--source/components/debugger/dbmethod.c6
-rw-r--r--source/components/debugger/dbnames.c2
-rw-r--r--source/components/debugger/dbstats.c4
-rw-r--r--source/components/debugger/dbutils.c8
-rw-r--r--source/components/debugger/dbxface.c18
-rw-r--r--source/components/disassembler/dmbuffer.c1
-rw-r--r--source/components/disassembler/dmdeferred.c2
-rw-r--r--source/components/disassembler/dmnames.c4
-rw-r--r--source/components/disassembler/dmobject.c16
-rw-r--r--source/components/disassembler/dmopcode.c27
-rw-r--r--source/components/disassembler/dmresrc.c1
-rw-r--r--source/components/disassembler/dmresrcl.c12
-rw-r--r--source/components/disassembler/dmresrcl2.c4
-rw-r--r--source/components/disassembler/dmwalk.c8
-rw-r--r--source/components/dispatcher/dscontrol.c12
-rw-r--r--source/components/dispatcher/dsfield.c4
-rw-r--r--source/components/dispatcher/dsinit.c4
-rw-r--r--source/components/dispatcher/dsmthdat.c2
-rw-r--r--source/components/dispatcher/dsobject.c12
-rw-r--r--source/components/dispatcher/dsopcode.c1
-rw-r--r--source/components/dispatcher/dsutils.c8
-rw-r--r--source/components/dispatcher/dswexec.c14
-rw-r--r--source/components/dispatcher/dswload.c8
-rw-r--r--source/components/dispatcher/dswload2.c11
-rw-r--r--source/components/events/evglock.c1
-rw-r--r--source/components/events/evgpe.c4
-rw-r--r--source/components/events/evgpeblk.c2
-rw-r--r--source/components/events/evgpeinit.c3
-rw-r--r--source/components/events/evhandler.c7
-rw-r--r--source/components/events/evmisc.c3
-rw-r--r--source/components/events/evrgnini.c2
-rw-r--r--source/components/events/evxfgpe.c6
-rw-r--r--source/components/events/evxfregn.c1
-rw-r--r--source/components/executer/exconfig.c3
-rw-r--r--source/components/executer/exconvrt.c25
-rw-r--r--source/components/executer/excreate.c3
-rw-r--r--source/components/executer/exdebug.c2
-rw-r--r--source/components/executer/exdump.c30
-rw-r--r--source/components/executer/exfield.c4
-rw-r--r--source/components/executer/exfldio.c7
-rw-r--r--source/components/executer/exmisc.c23
-rw-r--r--source/components/executer/exnames.c5
-rw-r--r--source/components/executer/exoparg1.c43
-rw-r--r--source/components/executer/exoparg2.c9
-rw-r--r--source/components/executer/exoparg3.c3
-rw-r--r--source/components/executer/exoparg6.c7
-rw-r--r--source/components/executer/exprep.c9
-rw-r--r--source/components/executer/exregion.c19
-rw-r--r--source/components/executer/exresnte.c7
-rw-r--r--source/components/executer/exresolv.c18
-rw-r--r--source/components/executer/exresop.c21
-rw-r--r--source/components/executer/exstore.c12
-rw-r--r--source/components/executer/exstoren.c6
-rw-r--r--source/components/hardware/hwacpi.c2
-rw-r--r--source/components/hardware/hwgpe.c3
-rw-r--r--source/components/hardware/hwregs.c16
-rw-r--r--source/components/hardware/hwxface.c3
-rw-r--r--source/components/hardware/hwxfsleep.c13
-rw-r--r--source/components/namespace/nsaccess.c4
-rw-r--r--source/components/namespace/nsconvert.c3
-rw-r--r--source/components/namespace/nsdump.c25
-rw-r--r--source/components/namespace/nsinit.c9
-rw-r--r--source/components/namespace/nspredef.c14
-rw-r--r--source/components/namespace/nsprepkg.c16
-rw-r--r--source/components/namespace/nsrepair.c1
-rw-r--r--source/components/namespace/nsrepair2.c304
-rw-r--r--source/components/namespace/nsutils.c3
-rw-r--r--source/components/namespace/nsxfeval.c1
-rw-r--r--source/components/parser/psargs.c17
-rw-r--r--source/components/parser/psloop.c2
-rw-r--r--source/components/parser/psobject.c6
-rw-r--r--source/components/parser/psparse.c9
-rw-r--r--source/components/parser/pstree.c6
-rw-r--r--source/components/resources/rscalc.c7
-rw-r--r--source/components/resources/rscreate.c30
-rw-r--r--source/components/resources/rsdump.c10
-rw-r--r--source/components/resources/rsmisc.c57
-rw-r--r--source/components/resources/rsutils.c5
-rw-r--r--source/components/resources/rsxface.c1
-rw-r--r--source/components/tables/tbinstal.c5
-rw-r--r--source/components/tables/tbprint.c265
-rw-r--r--source/components/tables/tbutils.c213
-rw-r--r--source/components/tables/tbxfload.c12
-rw-r--r--source/components/utilities/utbuffer.c220
-rw-r--r--source/components/utilities/utcopy.c23
-rw-r--r--source/components/utilities/utdebug.c167
-rw-r--r--source/components/utilities/utdelete.c13
-rw-r--r--source/components/utilities/uterror.c327
-rw-r--r--source/components/utilities/uteval.c5
-rw-r--r--source/components/utilities/utexcep.c1
-rw-r--r--source/components/utilities/utids.c3
-rw-r--r--source/components/utilities/utmisc.c2
-rw-r--r--source/components/utilities/utobject.c11
-rw-r--r--source/components/utilities/utstring.c18
-rw-r--r--source/components/utilities/uttrack.c8
-rw-r--r--source/components/utilities/utxferror.c317
-rw-r--r--source/include/acapps.h8
-rw-r--r--source/include/acglobal.h6
-rw-r--r--source/include/acpiosxf.h22
-rw-r--r--source/include/acpixf.h3
-rw-r--r--source/include/actypes.h8
-rw-r--r--source/include/acutils.h45
-rw-r--r--source/include/platform/acenv.h8
-rw-r--r--source/include/platform/acmacosx.h58
-rw-r--r--source/include/platform/acmsvc.h18
-rw-r--r--source/os_specific/service_layers/oslinuxtbl.c137
-rw-r--r--source/os_specific/service_layers/osunixxf.c17
-rw-r--r--source/os_specific/service_layers/oswindir.c1
-rw-r--r--source/os_specific/service_layers/oswintbl.c259
-rw-r--r--source/os_specific/service_layers/oswinxf.c27
-rw-r--r--source/tools/acpibin/abcompare.c71
-rw-r--r--source/tools/acpibin/abmain.c7
-rw-r--r--source/tools/acpidump/acpidump.h139
-rw-r--r--source/tools/acpidump/apdump.c423
-rw-r--r--source/tools/acpidump/apfiles.c277
-rw-r--r--source/tools/acpidump/apmain.c351
-rw-r--r--source/tools/acpiexec/aehandlers.c84
-rw-r--r--source/tools/acpiexec/aemain.c56
-rw-r--r--source/tools/acpihelp/ahmain.c17
-rw-r--r--source/tools/acpinames/anmain.c2
-rw-r--r--source/tools/acpisrc/asconvrt.c3
-rw-r--r--source/tools/acpisrc/asfile.c19
-rw-r--r--source/tools/acpisrc/asmain.c11
-rw-r--r--source/tools/acpixtract/acpixtract.c1
-rw-r--r--source/tools/acpixtract/axmain.c8
-rw-r--r--source/tools/examples/examples.c1
190 files changed, 5586 insertions, 2377 deletions
diff --git a/changes.txt b/changes.txt
index 04bd6e9..a16fc69 100644
--- a/changes.txt
+++ b/changes.txt
@@ -1,8 +1,108 @@
----------------------------------------
-18 April 2013. Summary of changes for version 20130418:
+17 May 2013. Summary of changes for version 20130517:
+
+1) ACPICA kernel-resident subsystem:
-This release is available at https://acpica.org/downloads
+Fixed a regression introduced in version 20130328 for _INI methods. This
+change fixes a problem introduced in 20130328 where _INI methods are no
+longer executed properly because of a memory block that was not
+initialized correctly. ACPICA BZ 1016. Tomasz Nowicki
+<tomasz.nowicki@linaro.org>.
+
+Fixed a possible problem with the new extended sleep registers in the ACPI
+5.0 FADT. Do not use these registers (even if populated) unless the HW-
+reduced bit is set in the FADT (as per the ACPI specification). ACPICA BZ
+1020. Lv Zheng.
+
+Implemented return value repair code for _CST predefined objects: Sort the
+list and detect/remove invalid entries. ACPICA BZ 890. Lv Zheng.
+
+Implemented a debug-only option to disable loading of SSDTs from the
+RSDT/XSDT during ACPICA initialization. This can be useful for debugging
+ACPI problems on some machines. Set AcpiGbl_DisableSsdtTableLoad in
+acglobal.h - ACPICA BZ 1005. Lv Zheng.
+
+Fixed some issues in the ACPICA initialization and termination code:
+Tomasz Nowicki <tomasz.nowicki@linaro.org>
+1) Clear events initialized flag upon event component termination. ACPICA
+BZ 1013.
+2) Fixed a possible memory leak in GPE init error path. ACPICA BZ 1018.
+3) Delete global lock pending lock during termination. ACPICA BZ 1012.
+4) Clear debug buffer global on termination to prevent possible multiple
+delete. ACPICA BZ 1010.
+
+Standardized all switch() blocks across the entire source base. After many
+years, different formatting for switch() had crept in. This change makes
+the formatting of every switch block identical. ACPICA BZ 997. Chao Guan.
+
+Split some files to enhance ACPICA modularity and configurability:
+1) Split buffer dump routines into utilities/utbuffer.c
+2) Split internal error message routines into utilities/uterror.c
+3) Split table print utilities into tables/tbprint.c
+4) Split iASL command-line option processing into asloptions.c
+
+Makefile enhancements:
+1) Support for all new files above.
+2) Abort make on errors from any subcomponent. Chao Guan.
+3) Add build support for Apple Mac OS X. Liang Qi.
+
+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: 96.0K Code, 27.0K Data, 123.0K Total
+ Debug Version: 184.1K Code, 76.8K Data, 260.9K Total
+ Previous Release:
+ Non-Debug Version: 95.6K Code, 26.8K Data, 122.4K Total
+ Debug Version: 183.5K Code, 76.6K Data, 260.1K Total
+
+
+2) iASL Compiler/Disassembler and Tools:
+
+New utility: Implemented an easily portable version of the acpidump
+utility to extract ACPI tables from the system (or a file) in an ASCII hex
+dump format. The top-level code implements the various command line
+options, file I/O, and table dump routines. To port to a new host, only
+three functions need to be implemented to get tables -- since this
+functionality is OS-dependent. See the tools/acpidump/apmain.c module and
+the ACPICA reference for porting instructions. ACPICA BZ 859. Notes:
+1) The Windows version obtains the ACPI tables from the Registry.
+2) The Linux version is under development.
+3) Other hosts - If an OS-dependent module is submitted, it will be
+distributed with ACPICA.
+
+iASL: Fixed a regression for -D preprocessor option (define symbol). A
+restructuring/change to the initialization sequence caused this option to
+no longer work properly.
+
+iASL: Implemented a mechanism to disable specific warnings and remarks.
+Adds a new command line option, "-vw <messageid> as well as "#pragma
+disable <messageid>". ACPICA BZ 989. Chao Guan, Bob Moore.
+
+iASL: Fix for too-strict package object validation. The package object
+validation for return values from the predefined names is a bit too
+strict, it does not allow names references within the package (which will
+be resolved at runtime.) These types of references cannot be validated at
+compile time. This change ignores named references within package objects
+for names that return or define static packages.
+
+Debugger: Fixed the 80-character command line limitation for the History
+command. Now allows lines of arbitrary length. ACPICA BZ 1000. Chao Guan.
+
+iASL: Added control method and package support for the -so option
+(generates AML offset table for BIOS support.)
+
+iASL: issue a remark if a non-serialized method creates named objects. If
+a thread blocks within the method for any reason, and another thread
+enters the method, the method will fail because an attempt will be made to
+create the same (named) object twice. In this case, issue a remark that
+the method should be marked serialized. NOTE: may become a warning later.
+ACPICA BZ 909.
+
+----------------------------------------
+18 April 2013. Summary of changes for version 20130418:
1) ACPICA kernel-resident subsystem:
diff --git a/generate/release/build.sh b/generate/release/build.sh
index dccad34..5b8cd75 100755
--- a/generate/release/build.sh
+++ b/generate/release/build.sh
@@ -213,6 +213,7 @@ generate_source_package ()
mkdir $TEMP_DIR/generate/release
mkdir $TEMP_DIR/generate/unix
mkdir $TEMP_DIR/generate/unix/acpibin
+ mkdir $TEMP_DIR/generate/unix/acpidump
mkdir $TEMP_DIR/generate/unix/acpiexec
mkdir $TEMP_DIR/generate/unix/acpihelp
mkdir $TEMP_DIR/generate/unix/acpinames
@@ -258,6 +259,7 @@ generate_source_package ()
cp generate/unix/readme.txt $TEMP_DIR/generate/unix/readme.txt
cp generate/unix/Makefile* $TEMP_DIR/generate/unix
cp generate/unix/acpibin/Makefile $TEMP_DIR/generate/unix/acpibin
+ cp generate/unix/acpidump/Makefile $TEMP_DIR/generate/unix/acpidump
cp generate/unix/acpiexec/Makefile $TEMP_DIR/generate/unix/acpiexec
cp generate/unix/acpihelp/Makefile $TEMP_DIR/generate/unix/acpihelp
cp generate/unix/acpinames/Makefile $TEMP_DIR/generate/unix/acpinames
@@ -405,6 +407,7 @@ generate_binary_package()
cp -r documents/changes.txt $TEMP_DIR/changes.txt
cp documents/aslcompiler.pdf $TEMP_DIR
cp libraries/acpibin.exe $TEMP_DIR
+ cp libraries/acpidump.exe $TEMP_DIR
cp libraries/acpiexec.exe $TEMP_DIR
cp libraries/acpihelp.exe $TEMP_DIR
cp libraries/acpinames.exe $TEMP_DIR
diff --git a/generate/unix/Makefile.common b/generate/unix/Makefile.common
index 69e9806..a0e26ba 100644
--- a/generate/unix/Makefile.common
+++ b/generate/unix/Makefile.common
@@ -7,7 +7,6 @@
# string will be treated as a 64-bit OS. Otherwise, the default is 32-bit.
#
HARDWARE_NAME := $(shell uname -m)
-BITS=0
#
# Main rule will only generate versions that are appropriate for the running
@@ -16,73 +15,54 @@ BITS=0
all: ${PROGS}
${PROGS}: FORCE
@cd $(BUILD_DIRECTORY_PATH)/$@; \
- if [ $(BITS) -eq 32 ]; then \
- echo "Forced 32-bit generation of $@"; \
- mkdir -p obj32; \
- make BITS=32; \
- echo "32-bit version of $@:"; \
- ls -al ../bin32/$@; \
- elif [ $(findstring 64,$(HARDWARE_NAME)) ]; then \
- mkdir -p obj64; \
- make BITS=64; \
+ mkdir -p obj; \
+ make || exit "$$?"; \
+ if [ $(findstring 64,$(HARDWARE_NAME)) ]; then \
echo "64-bit version of $@:"; \
- ls -al ../bin64/$@; \
else \
- mkdir -p obj32; \
- make BITS=32; \
echo "32-bit version of $@:"; \
- ls -al ../bin32/$@; \
- fi;
-
-#
-# Make 32-bit and 64-bit versions of all the tools
-#
-both: 32 64
+ fi; \
+ ls -al ../bin/$@; \
+ echo "";
#
-# Make only 32-bit versions of all the tools
+# Simple clean removes all .obj files, but leaves the executables
+# in the local bin directory
#
-32: FORCE
+clean: FORCE
@for toolname in ${PROGS}; do \
(cd $(BUILD_DIRECTORY_PATH)/$$toolname; \
- pwd; \
- mkdir -p obj32; \
- make BITS=32; \
- echo "32-bit version of $$toolname:"; \
- ls -al obj32/$$toolname \
+ if [ -d "obj" ] ; then \
+ echo "Removing $$toolname:"; \
+ pwd; \
+ make clean; \
+ rmdir obj; \
+ echo ""; \
+ fi; \
); \
done;
#
-# Make only 64-bit versions of all the tools
+# Very clean removes all executables and the local bin directory
#
-64: FORCE
+veryclean: FORCE
@for toolname in ${PROGS}; do \
(cd $(BUILD_DIRECTORY_PATH)/$$toolname; \
- pwd; \
- mkdir -p obj64; \
- make BITS=64; \
- echo "64-bit version of $$toolname:"; \
- ls -al obj64/$$toolname \
- ); \
- done;
-
-clean: FORCE
- @for toolname in ${PROGS}; do \
- (cd $(BUILD_DIRECTORY_PATH)/$$toolname; \
- echo "Removing $$toolname"; \
- pwd; \
- if [ -d "obj32" ] ; then \
- make BITS=32 clean; \
- rmdir obj32; \
+ if [ -d "obj" ] ; then \
+ echo "Removing $$toolname:"; \
+ pwd; \
+ make clean; \
+ rmdir obj; \
+ echo ""; \
fi; \
- if [ -d "obj64" ] ; then \
- make BITS=64 clean; \
- rmdir obj64; \
- fi; \
- echo ""; \
); \
- done;
+ if [ -e "$(BUILD_DIRECTORY_PATH)/bin/$$toolname" ] ; then \
+ rm $(BUILD_DIRECTORY_PATH)/bin/$$toolname; \
+ fi; \
+ done; \
+ if [ -d "bin" ] ; then \
+ rmdir bin; \
+ fi;
#
# Install all tools, either 32-bit or 64-bit as appropriate for the host OS
@@ -91,11 +71,10 @@ install: FORCE
@for toolname in ${PROGS}; do \
(cd $(BUILD_DIRECTORY_PATH)/$$toolname; \
pwd; \
+ make PROG=$$toolname install; \
if [ $(findstring 64,$(HARDWARE_NAME)) ]; then \
- make BITS=64 PROG=$$toolname install; \
echo "Installed 64-bit version of $$toolname"; \
else \
- make BITS=32 PROG=$$toolname install; \
echo "Installed 32-bit version of $$toolname"; \
fi; \
echo ""; \
diff --git a/generate/unix/Makefile.config b/generate/unix/Makefile.config
index f5f046e..390a464 100644
--- a/generate/unix/Makefile.config
+++ b/generate/unix/Makefile.config
@@ -24,25 +24,36 @@
# adding OPT_CFLAGS="..." to the invocation.
#
# Notes:
-# $(BITS) must be set to either 32 or 64
# gcc should be version 4 or greater, otherwise some of the options
-# used will not be recognized.
+# used will not be recognized.
+# Optional: Change HOST to an appropriate value (_LINUX, __FreeBSD__, etc.)
+# See include/platform/acenv.h for supported values.
+# Note: HOST is not nearly as important for applications as it
+# is for the kernel-resident version of ACPICA, and it may
+# not be necessary to change it.
#
.SUFFIXES :
-PROGS = acpibin acpiexec acpihelp acpinames acpisrc acpixtract iasl
-HOST = _CYGWIN
+PROGS = acpibin acpidump acpiexec acpihelp acpinames acpisrc acpixtract iasl
+HOST ?= _CYGWIN
CC = gcc
#
# Common defines
#
-OBJDIR = obj$(BITS)
-BINDIR = bin$(BITS)
-BITSFLAG = -m$(BITS)
+OBJDIR = obj
+BINDIR = bin
COMPILEOBJ = $(CC) -c $(CFLAGS) $(OPT_CFLAGS) -o $@ $<
LINKPROG = $(CC) $(OBJECTS) -o $(PROG) $(LDFLAGS)
-INSTALLDIR = /usr/bin
-INSTALLPROG = install -D ../$(BINDIR)/$(PROG) $(DESTDIR)$(INSTALLDIR)/$(PROG)
+PREFIX ?= /usr
+INSTALLDIR = $(PREFIX)/bin
+
+ifneq ($(HOST), _APPLE)
+ INSTALLPROG = install -D ../$(BINDIR)/$(PROG) $(DESTDIR)$(INSTALLDIR)/$(PROG)
+else
+ INSTALLPROG = \
+ test -d $(DESTDIR)$(INSTALLDIR) || mkdir -p $(DESTDIR)$(INSTALLDIR); \
+ cp -f ../$(BINDIR)/$(PROG) $(DESTDIR)$(INSTALLDIR)/$(PROG)
+endif
#
# Rename a .exe file if necessary
@@ -54,11 +65,11 @@ RENAMEPROG = \
fi;
#
-# Copy the final file to the local bin[32|64] directory
+# Copy the final executable to the local bin directory
#
COPYPROG = \
@mkdir -p ../$(BINDIR); \
- cp --remove-destination $(PROG) ../$(BINDIR); \
+ cp -f $(PROG) ../$(BINDIR); \
echo "Copied $(PROG) to $(FINAL_PROG)";
#
@@ -86,6 +97,7 @@ ACPICA_UTILITIES = $(ACPICA_CORE)/utilities
# ACPICA tool and utility source directories
#
ACPIBIN = $(ACPICA_TOOLS)/acpibin
+ACPIDUMP = $(ACPICA_TOOLS)/acpidump
ACPIEXEC = $(ACPICA_TOOLS)/acpiexec
ACPIHELP = $(ACPICA_TOOLS)/acpihelp
ACPINAMES = $(ACPICA_TOOLS)/acpinames
@@ -113,13 +125,10 @@ OPT_CFLAGS ?= \
$(CWARNINGFLAGS)
CFLAGS += \
- $(BITSFLAG)\
-D$(HOST)\
-D_GNU_SOURCE\
-I$(ACPICA_INCLUDE)
-LDFLAGS += $(BITSFLAG)
-
#
# Common compiler warning flags. The warning flags in addition
# to -Wall are not automatically included in -Wall.
@@ -140,22 +149,29 @@ CWARNINGFLAGS = \
-Wundef
#
-# Additional gcc 4+ warning flags
+# Common gcc 4+ warning flags
#
CWARNINGFLAGS += \
-Waddress\
-Waggregate-return\
-Wchar-subscripts\
-Wempty-body\
- -Wlogical-op\
-Wmissing-declarations\
-Wmissing-field-initializers\
- -Wmissing-parameter-type\
-Wnested-externs\
- -Wold-style-declaration\
-Wold-style-definition\
- -Wredundant-decls\
+ -Wredundant-decls
+
+#
+# Additional gcc 4+ flags
+#
+ifneq ($(HOST), _APPLE)
+CWARNINGFLAGS += \
+ -Wlogical-op\
+ -Wmissing-parameter-type\
+ -Wold-style-declaration\
-Wtype-limits
+endif
#
# Extra warning flags (for possible future use)
diff --git a/generate/unix/Makefile.rules b/generate/unix/Makefile.rules
index 2ec8b8b..788b56a 100644
--- a/generate/unix/Makefile.rules
+++ b/generate/unix/Makefile.rules
@@ -1,7 +1,7 @@
#
# Common rules for generation of ACPICA utilities
#
-# FINAL_PROG - Copies the utility to the local binXX directory (32/64)
+# FINAL_PROG - Copies the utility to the local bin directory
# PROG - Builds the utility (links the object files)
#
# Note: $(INTERMEDIATES) and $(MISC) are used for iASL compiler only.
diff --git a/generate/unix/acpibin/Makefile b/generate/unix/acpibin/Makefile
index 1f6eb80..2a5aff6 100644
--- a/generate/unix/acpibin/Makefile
+++ b/generate/unix/acpibin/Makefile
@@ -30,8 +30,8 @@ OBJECTS = \
$(OBJDIR)/abcompare.o\
$(OBJDIR)/abmain.o\
$(OBJDIR)/utalloc.o\
+ $(OBJDIR)/utbuffer.o\
$(OBJDIR)/utcache.o\
- $(OBJDIR)/utdebug.o\
$(OBJDIR)/utdecode.o\
$(OBJDIR)/utexcep.o\
$(OBJDIR)/utglobal.o\
diff --git a/generate/unix/acpidump/Makefile b/generate/unix/acpidump/Makefile
new file mode 100644
index 0000000..637ef33
--- /dev/null
+++ b/generate/unix/acpidump/Makefile
@@ -0,0 +1,53 @@
+#
+# acpidump - ACPI table dump utility (binary to ascii hex)
+#
+
+#
+# Note: This makefile is intended to be used from within the native
+# ACPICA directory structure, from under generate/unix. It specifically
+# places all object files in a generate/unix subdirectory, not within
+# the various ACPICA source directories. This prevents collisions
+# between different compilations of the same source file with different
+# compile options, and prevents pollution of the source code.
+#
+include ../Makefile.config
+FINAL_PROG = ../$(BINDIR)/acpidump
+PROG = $(OBJDIR)/acpidump
+
+#
+# Search paths for source files
+#
+vpath %.c \
+ $(ACPIDUMP)\
+ $(ACPICA_TABLES)\
+ $(ACPICA_UTILITIES)\
+ $(ACPICA_COMMON)\
+ $(ACPICA_OSL)
+
+HEADERS = \
+ $(wildcard $(ACPIDUMP)/*.h)
+
+OBJECTS = \
+ $(OBJDIR)/apdump.o\
+ $(OBJDIR)/apfiles.o\
+ $(OBJDIR)/apmain.o\
+ $(OBJDIR)/tbprint.o\
+ $(OBJDIR)/utbuffer.o\
+ $(OBJDIR)/utexcep.o\
+ $(OBJDIR)/utmath.o\
+ $(OBJDIR)/utstring.o\
+ $(OBJDIR)/utxferror.o\
+ $(OBJDIR)/oslinuxtbl.o\
+ $(OBJDIR)/getopt.o
+
+#
+# Flags specific to acpidump
+#
+CFLAGS += \
+ -DACPI_DUMP_APP\
+ -I$(ACPIDUMP)
+
+#
+# Common Rules
+#
+include ../Makefile.rules
diff --git a/generate/unix/acpiexec/Makefile b/generate/unix/acpiexec/Makefile
index 4fdb353..706ec41 100644
--- a/generate/unix/acpiexec/Makefile
+++ b/generate/unix/acpiexec/Makefile
@@ -180,17 +180,20 @@ OBJECTS = \
$(OBJDIR)/tbfadt.o\
$(OBJDIR)/tbfind.o\
$(OBJDIR)/tbinstal.o\
+ $(OBJDIR)/tbprint.o\
$(OBJDIR)/tbutils.o\
$(OBJDIR)/tbxface.o\
$(OBJDIR)/tbxfload.o\
$(OBJDIR)/tbxfroot.o\
$(OBJDIR)/utaddress.o\
$(OBJDIR)/utalloc.o\
+ $(OBJDIR)/utbuffer.o\
$(OBJDIR)/utcache.o\
$(OBJDIR)/utcopy.o\
$(OBJDIR)/utdebug.o\
$(OBJDIR)/utdecode.o\
$(OBJDIR)/utdelete.o\
+ $(OBJDIR)/uterror.o\
$(OBJDIR)/uteval.o\
$(OBJDIR)/utexcep.o\
$(OBJDIR)/utglobal.o\
@@ -220,7 +223,11 @@ CFLAGS += \
-DACPI_EXEC_APP\
-I$(ACPIEXEC)
-LDFLAGS += -lpthread -lrt
+LDFLAGS += -lpthread
+
+ifneq ($(HOST),_APPLE)
+LDFLAGS += -lrt
+endif
#
# Common Rules
diff --git a/generate/unix/acpinames/Makefile b/generate/unix/acpinames/Makefile
index 98d9586..1438200 100644
--- a/generate/unix/acpinames/Makefile
+++ b/generate/unix/acpinames/Makefile
@@ -82,6 +82,7 @@ OBJECTS = \
$(OBJDIR)/tbfadt.o\
$(OBJDIR)/tbfind.o\
$(OBJDIR)/tbinstal.o\
+ $(OBJDIR)/tbprint.o\
$(OBJDIR)/tbutils.o\
$(OBJDIR)/tbxface.o\
$(OBJDIR)/tbxfload.o\
@@ -92,6 +93,7 @@ OBJECTS = \
$(OBJDIR)/utdebug.o\
$(OBJDIR)/utdecode.o\
$(OBJDIR)/utdelete.o\
+ $(OBJDIR)/uterror.o\
$(OBJDIR)/utexcep.o\
$(OBJDIR)/utglobal.o\
$(OBJDIR)/utlock.o\
diff --git a/generate/unix/iasl/Makefile b/generate/unix/iasl/Makefile
index e7761c2..931620a 100644
--- a/generate/unix/iasl/Makefile
+++ b/generate/unix/iasl/Makefile
@@ -69,6 +69,7 @@ OBJECTS = \
$(OBJDIR)/aslopcodes.o\
$(OBJDIR)/asloperands.o\
$(OBJDIR)/aslopt.o\
+ $(OBJDIR)/asloptions.o\
$(OBJDIR)/aslpredef.o\
$(OBJDIR)/aslprepkg.o\
$(OBJDIR)/aslresource.o\
@@ -172,15 +173,18 @@ OBJECTS = \
$(OBJDIR)/pswalk.o\
$(OBJDIR)/tbfadt.o\
$(OBJDIR)/tbinstal.o\
+ $(OBJDIR)/tbprint.o\
$(OBJDIR)/tbutils.o\
$(OBJDIR)/tbxface.o\
$(OBJDIR)/utaddress.o\
$(OBJDIR)/utalloc.o\
+ $(OBJDIR)/utbuffer.o\
$(OBJDIR)/utcache.o\
$(OBJDIR)/utcopy.o\
$(OBJDIR)/utdebug.o\
$(OBJDIR)/utdecode.o\
$(OBJDIR)/utdelete.o\
+ $(OBJDIR)/uterror.o\
$(OBJDIR)/utexcep.o\
$(OBJDIR)/utglobal.o\
$(OBJDIR)/utinit.o\
diff --git a/source/common/adisasm.c b/source/common/adisasm.c
index 511366f..fd20a22 100644
--- a/source/common/adisasm.c
+++ b/source/common/adisasm.c
@@ -628,10 +628,12 @@ AdCreateTableHeader (
switch (Table->Revision)
{
case 0:
+
AcpiOsPrintf (" **** Invalid Revision");
break;
case 1:
+
/* Revision of DSDT controls the ACPI integer width */
if (ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_DSDT))
@@ -641,6 +643,7 @@ AdCreateTableHeader (
break;
default:
+
break;
}
AcpiOsPrintf ("\n");
diff --git a/source/common/adwalk.c b/source/common/adwalk.c
index 0a3a848..5ba7922 100644
--- a/source/common/adwalk.c
+++ b/source/common/adwalk.c
@@ -375,14 +375,17 @@ AcpiDmDumpDescending (
case AML_BYTE_OP:
case AML_WORD_OP:
case AML_DWORD_OP:
+
AcpiOsPrintf ("%X", (UINT32) Op->Common.Value.Integer);
break;
case AML_QWORD_OP:
+
AcpiOsPrintf ("%8.8X%8.8X", ACPI_FORMAT_UINT64 (Op->Common.Value.Integer));
break;
case AML_INT_NAMEPATH_OP:
+
if (Op->Common.Value.String)
{
AcpiNsExternalizeName (ACPI_UINT32_MAX, Op->Common.Value.String,
@@ -400,10 +403,12 @@ AcpiDmDumpDescending (
case AML_METHOD_OP:
case AML_DEVICE_OP:
case AML_INT_NAMEDFIELD_OP:
+
AcpiOsPrintf ("%4.4s", ACPI_CAST_PTR (char, &Op->Named.Name));
break;
default:
+
break;
}
@@ -450,6 +455,7 @@ AcpiDmFindOrphanDescending (
{
#ifdef ACPI_UNDER_DEVELOPMENT
case AML_ADD_OP:
+
ChildOp = Op->Common.Value.Arg;
if ((ChildOp->Common.AmlOpcode == AML_INT_NAMEPATH_OP) &&
!ChildOp->Common.Node)
@@ -556,6 +562,7 @@ AcpiDmFindOrphanDescending (
break;
default:
+
break;
}
diff --git a/source/common/dmextern.c b/source/common/dmextern.c
index 7825ab1..5baa462 100644
--- a/source/common/dmextern.c
+++ b/source/common/dmextern.c
@@ -594,6 +594,7 @@ AcpiDmAddExternalsToNamespace (
break;
default:
+
break;
}
diff --git a/source/common/dmrestag.c b/source/common/dmrestag.c
index 1c7de99..d72ecad 100644
--- a/source/common/dmrestag.c
+++ b/source/common/dmrestag.c
@@ -798,7 +798,6 @@ AcpiDmGetResourceTag (
case ACPI_RESOURCE_NAME_ADDRESS32:
case ACPI_RESOURCE_NAME_ADDRESS64:
case ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64:
-
/*
* Subtype differentiation is the flags.
* Kindof brute force, but just blindly search for an index match
@@ -846,6 +845,7 @@ AcpiDmGetResourceTag (
break;
default:
+
break;
}
diff --git a/source/common/dmtable.c b/source/common/dmtable.c
index 0c1c39b..46d7b67 100644
--- a/source/common/dmtable.c
+++ b/source/common/dmtable.c
@@ -697,48 +697,71 @@ AcpiDmDumpTable (
case ACPI_DMT_EINJINST:
case ACPI_DMT_ERSTACT:
case ACPI_DMT_ERSTINST:
+
ByteLength = 1;
break;
+
case ACPI_DMT_UINT16:
case ACPI_DMT_DMAR:
case ACPI_DMT_HEST:
+
ByteLength = 2;
break;
+
case ACPI_DMT_UINT24:
+
ByteLength = 3;
break;
+
case ACPI_DMT_UINT32:
case ACPI_DMT_NAME4:
case ACPI_DMT_SIG:
case ACPI_DMT_SLIC:
+
ByteLength = 4;
break;
+
case ACPI_DMT_UINT40:
+
ByteLength = 5;
break;
+
case ACPI_DMT_UINT48:
case ACPI_DMT_NAME6:
+
ByteLength = 6;
break;
+
case ACPI_DMT_UINT56:
case ACPI_DMT_BUF7:
+
ByteLength = 7;
break;
+
case ACPI_DMT_UINT64:
case ACPI_DMT_NAME8:
+
ByteLength = 8;
break;
+
case ACPI_DMT_BUF16:
case ACPI_DMT_UUID:
+
ByteLength = 16;
break;
+
case ACPI_DMT_BUF128:
+
ByteLength = 128;
break;
+
case ACPI_DMT_STRING:
+
ByteLength = ACPI_STRLEN (ACPI_CAST_PTR (char, Target)) + 1;
break;
+
case ACPI_DMT_GAS:
+
if (!LastOutputBlankLine)
{
AcpiOsPrintf ("\n");
@@ -746,7 +769,9 @@ AcpiDmDumpTable (
}
ByteLength = sizeof (ACPI_GENERIC_ADDRESS);
break;
+
case ACPI_DMT_HESTNTFY:
+
if (!LastOutputBlankLine)
{
AcpiOsPrintf ("\n");
@@ -754,7 +779,9 @@ AcpiDmDumpTable (
}
ByteLength = sizeof (ACPI_HEST_NOTIFY);
break;
+
default:
+
ByteLength = 0;
break;
}
@@ -837,7 +864,6 @@ AcpiDmDumpTable (
case ACPI_DMT_BUF7:
case ACPI_DMT_BUF16:
case ACPI_DMT_BUF128:
-
/*
* Buffer: Size depends on the opcode and was set above.
* Each hex byte is separated with a space.
@@ -1146,16 +1172,19 @@ AcpiDmDumpTable (
switch (Temp8)
{
case ACPI_IVRS_TYPE_HARDWARE:
+
Name = AcpiDmIvrsSubnames[0];
break;
case ACPI_IVRS_TYPE_MEMORY1:
case ACPI_IVRS_TYPE_MEMORY2:
case ACPI_IVRS_TYPE_MEMORY3:
+
Name = AcpiDmIvrsSubnames[1];
break;
default:
+
Name = AcpiDmIvrsSubnames[2];
break;
}
@@ -1164,9 +1193,11 @@ AcpiDmDumpTable (
break;
case ACPI_DMT_EXIT:
+
return (AE_OK);
default:
+
ACPI_ERROR ((AE_INFO,
"**** Invalid table opcode [0x%X] ****\n", Info->Opcode));
return (AE_SUPPORT);
diff --git a/source/common/dmtbdump.c b/source/common/dmtbdump.c
index b5e052e..57c160d 100644
--- a/source/common/dmtbdump.c
+++ b/source/common/dmtbdump.c
@@ -349,27 +349,33 @@ AcpiDmValidateFadtLength (
switch (Revision)
{
case 0:
+
AcpiOsPrintf ("// ACPI Warning: Invalid FADT revision: 0\n");
return;
case 1:
+
ExpectedLength = ACPI_FADT_V1_SIZE;
break;
case 2:
+
ExpectedLength = ACPI_FADT_V2_SIZE;
break;
case 3:
case 4:
+
ExpectedLength = ACPI_FADT_V3_SIZE;
break;
case 5:
+
ExpectedLength = ACPI_FADT_V5_SIZE;
break;
default:
+
return;
}
@@ -434,10 +440,12 @@ AcpiDmDumpAsf (
switch (Type)
{
case ACPI_ASF_TYPE_INFO:
+
InfoTable = AcpiDmTableInfoAsf0;
break;
case ACPI_ASF_TYPE_ALERT:
+
InfoTable = AcpiDmTableInfoAsf1;
DataInfoTable = AcpiDmTableInfoAsf1a;
DataTable = ACPI_ADD_PTR (UINT8, SubTable, sizeof (ACPI_ASF_ALERT));
@@ -447,6 +455,7 @@ AcpiDmDumpAsf (
break;
case ACPI_ASF_TYPE_CONTROL:
+
InfoTable = AcpiDmTableInfoAsf2;
DataInfoTable = AcpiDmTableInfoAsf2a;
DataTable = ACPI_ADD_PTR (UINT8, SubTable, sizeof (ACPI_ASF_REMOTE));
@@ -456,10 +465,12 @@ AcpiDmDumpAsf (
break;
case ACPI_ASF_TYPE_BOOT:
+
InfoTable = AcpiDmTableInfoAsf3;
break;
case ACPI_ASF_TYPE_ADDRESS:
+
InfoTable = AcpiDmTableInfoAsf4;
DataTable = ACPI_ADD_PTR (UINT8, SubTable, sizeof (ACPI_ASF_ADDRESS));
DataLength = ACPI_CAST_PTR (ACPI_ASF_ADDRESS, SubTable)->Devices;
@@ -467,6 +478,7 @@ AcpiDmDumpAsf (
break;
default:
+
AcpiOsPrintf ("\n**** Unknown ASF sub-table type 0x%X\n", SubTable->Header.Type);
return;
}
@@ -523,6 +535,7 @@ AcpiDmDumpAsf (
break;
default:
+
break;
}
@@ -863,22 +876,31 @@ AcpiDmDumpDmar (
switch (SubTable->Type)
{
case ACPI_DMAR_TYPE_HARDWARE_UNIT:
+
InfoTable = AcpiDmTableInfoDmar0;
ScopeOffset = sizeof (ACPI_DMAR_HARDWARE_UNIT);
break;
+
case ACPI_DMAR_TYPE_RESERVED_MEMORY:
+
InfoTable = AcpiDmTableInfoDmar1;
ScopeOffset = sizeof (ACPI_DMAR_RESERVED_MEMORY);
break;
+
case ACPI_DMAR_TYPE_ATSR:
+
InfoTable = AcpiDmTableInfoDmar2;
ScopeOffset = sizeof (ACPI_DMAR_ATSR);
break;
+
case ACPI_DMAR_HARDWARE_AFFINITY:
+
InfoTable = AcpiDmTableInfoDmar3;
ScopeOffset = sizeof (ACPI_DMAR_RHSA);
break;
+
default:
+
AcpiOsPrintf ("\n**** Unknown DMAR sub-table type 0x%X\n\n", SubTable->Type);
return;
}
@@ -1086,12 +1108,17 @@ AcpiDmDumpFpdt (
switch (SubTable->Type)
{
case ACPI_FPDT_TYPE_BOOT:
+
InfoTable = AcpiDmTableInfoFpdt0;
break;
+
case ACPI_FPDT_TYPE_S3PERF:
+
InfoTable = AcpiDmTableInfoFpdt1;
break;
+
default:
+
AcpiOsPrintf ("\n**** Unknown FPDT sub-table type 0x%X\n\n", SubTable->Type);
/* Attempt to continue */
@@ -1164,6 +1191,7 @@ AcpiDmDumpHest (
switch (SubTable->Type)
{
case ACPI_HEST_TYPE_IA32_CHECK:
+
InfoTable = AcpiDmTableInfoHest0;
SubTableLength = sizeof (ACPI_HEST_IA_MACHINE_CHECK);
BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_MACHINE_CHECK,
@@ -1171,6 +1199,7 @@ AcpiDmDumpHest (
break;
case ACPI_HEST_TYPE_IA32_CORRECTED_CHECK:
+
InfoTable = AcpiDmTableInfoHest1;
SubTableLength = sizeof (ACPI_HEST_IA_CORRECTED);
BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_CORRECTED,
@@ -1178,31 +1207,37 @@ AcpiDmDumpHest (
break;
case ACPI_HEST_TYPE_IA32_NMI:
+
InfoTable = AcpiDmTableInfoHest2;
SubTableLength = sizeof (ACPI_HEST_IA_NMI);
break;
case ACPI_HEST_TYPE_AER_ROOT_PORT:
+
InfoTable = AcpiDmTableInfoHest6;
SubTableLength = sizeof (ACPI_HEST_AER_ROOT);
break;
case ACPI_HEST_TYPE_AER_ENDPOINT:
+
InfoTable = AcpiDmTableInfoHest7;
SubTableLength = sizeof (ACPI_HEST_AER);
break;
case ACPI_HEST_TYPE_AER_BRIDGE:
+
InfoTable = AcpiDmTableInfoHest8;
SubTableLength = sizeof (ACPI_HEST_AER_BRIDGE);
break;
case ACPI_HEST_TYPE_GENERIC_ERROR:
+
InfoTable = AcpiDmTableInfoHest9;
SubTableLength = sizeof (ACPI_HEST_GENERIC);
break;
default:
+
/* Cannot continue on unknown type - no length */
AcpiOsPrintf ("\n**** Unknown HEST sub-table type 0x%X\n", SubTable->Type);
@@ -1304,14 +1339,19 @@ AcpiDmDumpIvrs (
switch (SubTable->Type)
{
case ACPI_IVRS_TYPE_HARDWARE:
+
InfoTable = AcpiDmTableInfoIvrs0;
break;
+
case ACPI_IVRS_TYPE_MEMORY1:
case ACPI_IVRS_TYPE_MEMORY2:
case ACPI_IVRS_TYPE_MEMORY3:
+
InfoTable = AcpiDmTableInfoIvrs1;
break;
+
default:
+
AcpiOsPrintf ("\n**** Unknown IVRS sub-table type 0x%X\n",
SubTable->Type);
@@ -1473,45 +1513,72 @@ AcpiDmDumpMadt (
switch (SubTable->Type)
{
case ACPI_MADT_TYPE_LOCAL_APIC:
+
InfoTable = AcpiDmTableInfoMadt0;
break;
+
case ACPI_MADT_TYPE_IO_APIC:
+
InfoTable = AcpiDmTableInfoMadt1;
break;
+
case ACPI_MADT_TYPE_INTERRUPT_OVERRIDE:
+
InfoTable = AcpiDmTableInfoMadt2;
break;
+
case ACPI_MADT_TYPE_NMI_SOURCE:
+
InfoTable = AcpiDmTableInfoMadt3;
break;
+
case ACPI_MADT_TYPE_LOCAL_APIC_NMI:
+
InfoTable = AcpiDmTableInfoMadt4;
break;
+
case ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE:
+
InfoTable = AcpiDmTableInfoMadt5;
break;
+
case ACPI_MADT_TYPE_IO_SAPIC:
+
InfoTable = AcpiDmTableInfoMadt6;
break;
+
case ACPI_MADT_TYPE_LOCAL_SAPIC:
+
InfoTable = AcpiDmTableInfoMadt7;
break;
+
case ACPI_MADT_TYPE_INTERRUPT_SOURCE:
+
InfoTable = AcpiDmTableInfoMadt8;
break;
+
case ACPI_MADT_TYPE_LOCAL_X2APIC:
+
InfoTable = AcpiDmTableInfoMadt9;
break;
+
case ACPI_MADT_TYPE_LOCAL_X2APIC_NMI:
+
InfoTable = AcpiDmTableInfoMadt10;
break;
+
case ACPI_MADT_TYPE_GENERIC_INTERRUPT:
+
InfoTable = AcpiDmTableInfoMadt11;
break;
+
case ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR:
+
InfoTable = AcpiDmTableInfoMadt12;
break;
+
default:
+
AcpiOsPrintf ("\n**** Unknown MADT sub-table type 0x%X\n\n", SubTable->Type);
/* Attempt to continue */
@@ -2152,12 +2219,17 @@ AcpiDmDumpS3pt (
switch (SubTable->Type)
{
case ACPI_S3PT_TYPE_RESUME:
+
InfoTable = AcpiDmTableInfoS3pt0;
break;
+
case ACPI_S3PT_TYPE_SUSPEND:
+
InfoTable = AcpiDmTableInfoS3pt1;
break;
+
default:
+
AcpiOsPrintf ("\n**** Unknown S3PT sub-table type 0x%X\n", SubTable->Type);
/* Attempt to continue */
@@ -2229,12 +2301,17 @@ AcpiDmDumpSlic (
switch (SubTable->Type)
{
case ACPI_SLIC_TYPE_PUBLIC_KEY:
+
InfoTable = AcpiDmTableInfoSlic0;
break;
+
case ACPI_SLIC_TYPE_WINDOWS_MARKER:
+
InfoTable = AcpiDmTableInfoSlic1;
break;
+
default:
+
AcpiOsPrintf ("\n**** Unknown SLIC sub-table type 0x%X\n", SubTable->Type);
/* Attempt to continue */
@@ -2390,14 +2467,20 @@ AcpiDmDumpSrat (
switch (SubTable->Type)
{
case ACPI_SRAT_TYPE_CPU_AFFINITY:
+
InfoTable = AcpiDmTableInfoSrat0;
break;
+
case ACPI_SRAT_TYPE_MEMORY_AFFINITY:
+
InfoTable = AcpiDmTableInfoSrat1;
break;
+
case ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY:
+
InfoTable = AcpiDmTableInfoSrat2;
break;
+
default:
AcpiOsPrintf ("\n**** Unknown SRAT sub-table type 0x%X\n", SubTable->Type);
diff --git a/source/common/getopt.c b/source/common/getopt.c
index 5a69da0..f1921ee 100644
--- a/source/common/getopt.c
+++ b/source/common/getopt.c
@@ -41,6 +41,15 @@
* POSSIBILITY OF SUCH DAMAGES.
*/
+/*
+ * ACPICA getopt() implementation
+ *
+ * Option strings:
+ * "f" - Option has no arguments
+ * "f:" - Option requires an argument
+ * "f^" - Option has optional single-char sub-options
+ * "f|" - Option has required single-char sub-options
+ */
#include <stdio.h>
#include <string.h>
@@ -52,9 +61,59 @@
if (AcpiGbl_Opterr) {fprintf (stderr, "%s%c\n", msg, badchar);}
-int AcpiGbl_Opterr = 1;
-int AcpiGbl_Optind = 1;
-char *AcpiGbl_Optarg;
+int AcpiGbl_Opterr = 1;
+int AcpiGbl_Optind = 1;
+int AcpiGbl_SubOptChar = 0;
+char *AcpiGbl_Optarg;
+
+static int CurrentCharPtr = 1;
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiGetoptArgument
+ *
+ * PARAMETERS: argc, argv - from main
+ *
+ * RETURN: 0 if an argument was found, -1 otherwise. Sets AcpiGbl_Optarg
+ * to point to the next argument.
+ *
+ * DESCRIPTION: Get the next argument. Used to obtain arguments for the
+ * two-character options after the original call to AcpiGetopt.
+ * Note: Either the argument starts at the next character after
+ * the option, or it is pointed to by the next argv entry.
+ * (After call to AcpiGetopt, we need to backup to the previous
+ * argv entry).
+ *
+ ******************************************************************************/
+
+int
+AcpiGetoptArgument (
+ int argc,
+ char **argv)
+{
+ AcpiGbl_Optind--;
+ CurrentCharPtr++;
+
+ if (argv[AcpiGbl_Optind][(int) (CurrentCharPtr+1)] != '\0')
+ {
+ AcpiGbl_Optarg = &argv[AcpiGbl_Optind++][(int) (CurrentCharPtr+1)];
+ }
+ else if (++AcpiGbl_Optind >= argc)
+ {
+ ACPI_OPTION_ERROR ("Option requires an argument: -", 'v');
+
+ CurrentCharPtr = 1;
+ return (-1);
+ }
+ else
+ {
+ AcpiGbl_Optarg = argv[AcpiGbl_Optind++];
+ }
+
+ CurrentCharPtr = 1;
+ return (0);
+}
/*******************************************************************************
@@ -76,7 +135,6 @@ AcpiGetopt(
char **argv,
char *opts)
{
- static int CurrentCharPtr = 1;
int CurrentChar;
char *OptsPtr;
@@ -152,6 +210,7 @@ AcpiGetopt(
AcpiGbl_Optarg = "^";
}
+ AcpiGbl_SubOptChar = AcpiGbl_Optarg[0];
AcpiGbl_Optind++;
CurrentCharPtr = 1;
}
@@ -172,6 +231,7 @@ AcpiGetopt(
return ('?');
}
+ AcpiGbl_SubOptChar = AcpiGbl_Optarg[0];
AcpiGbl_Optind++;
CurrentCharPtr = 1;
}
diff --git a/source/compiler/aslanalyze.c b/source/compiler/aslanalyze.c
index f0ec1af..a80c90d 100644
--- a/source/compiler/aslanalyze.c
+++ b/source/compiler/aslanalyze.c
@@ -381,6 +381,7 @@ AnIsResultUsed (
return (TRUE);
default:
+
break;
}
@@ -411,6 +412,7 @@ AnIsResultUsed (
return (FALSE);
default:
+
/* Any other type of parent means that the result is used */
return (TRUE);
diff --git a/source/compiler/aslbtypes.c b/source/compiler/aslbtypes.c
index b2f7512..f9dc107 100644
--- a/source/compiler/aslbtypes.c
+++ b/source/compiler/aslbtypes.c
@@ -83,15 +83,19 @@ AnMapArgTypeToBtype (
/* Simple types */
case ARGI_ANYTYPE:
+
return (ACPI_BTYPE_OBJECTS_AND_REFS);
case ARGI_PACKAGE:
+
return (ACPI_BTYPE_PACKAGE);
case ARGI_EVENT:
+
return (ACPI_BTYPE_EVENT);
case ARGI_MUTEX:
+
return (ACPI_BTYPE_MUTEX);
case ARGI_DDBHANDLE:
@@ -111,31 +115,36 @@ AnMapArgTypeToBtype (
case ARGI_BUFFER:
case ARGI_BUFFER_OR_STRING:
case ARGI_COMPUTEDATA:
+
return (ACPI_BTYPE_COMPUTE_DATA);
/* References */
case ARGI_INTEGER_REF:
+
return (ACPI_BTYPE_INTEGER);
case ARGI_OBJECT_REF:
+
return (ACPI_BTYPE_ALL_OBJECTS);
case ARGI_DEVICE_REF:
+
return (ACPI_BTYPE_DEVICE_OBJECTS);
case ARGI_REFERENCE:
+
return (ACPI_BTYPE_REFERENCE);
case ARGI_TARGETREF:
case ARGI_FIXED_TARGET:
case ARGI_SIMPLE_TARGET:
+
return (ACPI_BTYPE_OBJECTS_AND_REFS);
/* Complex types */
case ARGI_DATAOBJECT:
-
/*
* Buffer, string, package or reference to a Op -
* Used only by SizeOf operator
@@ -150,6 +159,7 @@ AnMapArgTypeToBtype (
return (ACPI_BTYPE_STRING | ACPI_BTYPE_BUFFER | ACPI_BTYPE_PACKAGE);
case ARGI_REF_OR_STRING:
+
return (ACPI_BTYPE_STRING | ACPI_BTYPE_REFERENCE);
case ARGI_REGION_OR_BUFFER:
@@ -159,10 +169,12 @@ AnMapArgTypeToBtype (
return (ACPI_BTYPE_REGION | ACPI_BTYPE_BUFFER | ACPI_BTYPE_FIELD_UNIT);
case ARGI_DATAREFOBJ:
+
return (ACPI_BTYPE_INTEGER |ACPI_BTYPE_STRING | ACPI_BTYPE_BUFFER |
ACPI_BTYPE_PACKAGE | ACPI_BTYPE_REFERENCE | ACPI_BTYPE_DDB_HANDLE);
default:
+
break;
}
@@ -207,22 +219,28 @@ AnMapEtypeToBtype (
switch (Etype)
{
case ACPI_TYPE_INTEGER:
+
return (ACPI_BTYPE_COMPUTE_DATA | ACPI_BTYPE_DDB_HANDLE);
case ACPI_TYPE_STRING:
case ACPI_TYPE_BUFFER:
+
return (ACPI_BTYPE_COMPUTE_DATA);
case ACPI_TYPE_PACKAGE:
+
return (ACPI_BTYPE_PACKAGE);
case ACPI_TYPE_FIELD_UNIT:
+
return (ACPI_BTYPE_COMPUTE_DATA | ACPI_BTYPE_FIELD_UNIT);
case ACPI_TYPE_BUFFER_FIELD:
+
return (ACPI_BTYPE_COMPUTE_DATA | ACPI_BTYPE_BUFFER_FIELD);
case ACPI_TYPE_DDB_HANDLE:
+
return (ACPI_BTYPE_INTEGER | ACPI_BTYPE_DDB_HANDLE);
case ACPI_BTYPE_DEBUG_OBJECT:
@@ -232,6 +250,7 @@ AnMapEtypeToBtype (
return (0);
default:
+
return (1 << (Etype - 1));
}
}
@@ -259,6 +278,7 @@ AnMapEtypeToBtype (
return (ACPI_BTYPE_REFERENCE);
default:
+
printf ("Unhandled encoded type: %X\n", Etype);
return (0);
}
@@ -438,51 +458,67 @@ AnMapObjTypeToBtype (
switch (Op->Asl.ParseOpcode)
{
case PARSEOP_OBJECTTYPE_BFF: /* "BuffFieldObj" */
+
return (ACPI_BTYPE_BUFFER_FIELD);
case PARSEOP_OBJECTTYPE_BUF: /* "BuffObj" */
+
return (ACPI_BTYPE_BUFFER);
case PARSEOP_OBJECTTYPE_DDB: /* "DDBHandleObj" */
+
return (ACPI_BTYPE_DDB_HANDLE);
case PARSEOP_OBJECTTYPE_DEV: /* "DeviceObj" */
+
return (ACPI_BTYPE_DEVICE);
case PARSEOP_OBJECTTYPE_EVT: /* "EventObj" */
+
return (ACPI_BTYPE_EVENT);
case PARSEOP_OBJECTTYPE_FLD: /* "FieldUnitObj" */
+
return (ACPI_BTYPE_FIELD_UNIT);
case PARSEOP_OBJECTTYPE_INT: /* "IntObj" */
+
return (ACPI_BTYPE_INTEGER);
case PARSEOP_OBJECTTYPE_MTH: /* "MethodObj" */
+
return (ACPI_BTYPE_METHOD);
case PARSEOP_OBJECTTYPE_MTX: /* "MutexObj" */
+
return (ACPI_BTYPE_MUTEX);
case PARSEOP_OBJECTTYPE_OPR: /* "OpRegionObj" */
+
return (ACPI_BTYPE_REGION);
case PARSEOP_OBJECTTYPE_PKG: /* "PkgObj" */
+
return (ACPI_BTYPE_PACKAGE);
case PARSEOP_OBJECTTYPE_POW: /* "PowerResObj" */
+
return (ACPI_BTYPE_POWER);
case PARSEOP_OBJECTTYPE_STR: /* "StrObj" */
+
return (ACPI_BTYPE_STRING);
case PARSEOP_OBJECTTYPE_THZ: /* "ThermalZoneObj" */
+
return (ACPI_BTYPE_THERMAL);
case PARSEOP_OBJECTTYPE_UNK: /* "UnknownObj" */
+
return (ACPI_BTYPE_OBJECTS_AND_REFS);
default:
+
return (0);
}
}
diff --git a/source/compiler/aslcodegen.c b/source/compiler/aslcodegen.c
index 1171d34..1230f59 100644
--- a/source/compiler/aslcodegen.c
+++ b/source/compiler/aslcodegen.c
@@ -284,6 +284,7 @@ CgWriteAmlOpcode (
break;
default:
+
Aml.Opcode = Op->Asl.AmlOpcode;
break;
}
@@ -382,7 +383,9 @@ CgWriteAmlOpcode (
break;
default:
+
/* All data opcodes must appear above */
+
break;
}
}
@@ -560,7 +563,9 @@ CgWriteNode (
return;
default:
+
/* Internal data opcodes must all appear above */
+
break;
}
diff --git a/source/compiler/aslcompile.c b/source/compiler/aslcompile.c
index 73b6732..bbd8ab9 100644
--- a/source/compiler/aslcompile.c
+++ b/source/compiler/aslcompile.c
@@ -133,7 +133,9 @@ AslCompilerSignon (
break;
default:
+
/* No other output types supported */
+
break;
}
@@ -207,7 +209,9 @@ AslCompilerFileHeader (
break;
default:
+
/* No other output types supported */
+
break;
}
@@ -226,11 +230,14 @@ AslCompilerFileHeader (
case ASL_FILE_C_SOURCE_OUTPUT:
case ASL_FILE_C_OFFSET_OUTPUT:
case ASL_FILE_C_INCLUDE_OUTPUT:
+
FlPrintFile (FileId, " */\n");
break;
default:
+
/* Nothing to do for other output types */
+
break;
}
}
diff --git a/source/compiler/aslcompiler.h b/source/compiler/aslcompiler.h
index cfe3ecf..1ffbf92 100644
--- a/source/compiler/aslcompiler.h
+++ b/source/compiler/aslcompiler.h
@@ -291,6 +291,15 @@ AslError (
ACPI_PARSE_OBJECT *Op,
char *ExtraMessage);
+ACPI_STATUS
+AslDisableException (
+ char *MessageIdString);
+
+BOOLEAN
+AslIsExceptionDisabled (
+ UINT8 Level,
+ UINT8 MessageId);
+
void
AslCoreSubsystemError (
ACPI_PARSE_OBJECT *Op,
@@ -791,6 +800,17 @@ void
LkFindUnreferencedObjects (
void);
+/*
+ * aslmain - startup
+ */
+void
+Usage (
+ void);
+
+void
+AslFilenameHelp (
+ void);
+
/*
* aslnamesp - namespace output file generation
@@ -803,6 +823,13 @@ void
NsSetupNamespaceListing (
void *Handle);
+/*
+ * asloptions - command line processing
+ */
+int
+AslCommandLine (
+ int argc,
+ char **argv);
/*
* aslxref - namespace cross reference
diff --git a/source/compiler/aslerror.c b/source/compiler/aslerror.c
index 5b3b483..0616040 100644
--- a/source/compiler/aslerror.c
+++ b/source/compiler/aslerror.c
@@ -201,6 +201,7 @@ AePrintException (
switch (Enode->Level)
{
case ASL_REMARK:
+
if (!Gbl_DisplayRemarks)
{
return;
@@ -208,6 +209,7 @@ AePrintException (
break;
case ASL_OPTIMIZATION:
+
if (!Gbl_DisplayOptimizations)
{
return;
@@ -215,6 +217,7 @@ AePrintException (
break;
default:
+
break;
}
}
@@ -676,6 +679,113 @@ AslCommonError (
/*******************************************************************************
*
+ * FUNCTION: AslDisableException
+ *
+ * PARAMETERS: MessageIdString - ID to be disabled
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Enter a message ID into the global disabled messages table
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AslDisableException (
+ char *MessageIdString)
+{
+ UINT32 MessageId;
+
+
+ /* Convert argument to an integer and validate it */
+
+ MessageId = (UINT32) strtoul (MessageIdString, NULL, 0);
+
+ if ((MessageId < 2000) || (MessageId > 5999))
+ {
+ printf ("\"%s\" is not a valid warning/remark ID\n",
+ MessageIdString);
+ return (AE_BAD_PARAMETER);
+ }
+
+ /* Insert value into the global disabled message array */
+
+ if (Gbl_DisabledMessagesIndex >= ASL_MAX_DISABLED_MESSAGES)
+ {
+ printf ("Too many messages have been disabled (max %u)\n",
+ ASL_MAX_DISABLED_MESSAGES);
+ return (AE_LIMIT);
+ }
+
+ Gbl_DisabledMessages[Gbl_DisabledMessagesIndex] = MessageId;
+ Gbl_DisabledMessagesIndex++;
+ return (AE_OK);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AslIsExceptionDisabled
+ *
+ * PARAMETERS: Level - Seriousness (Warning/error, etc.)
+ * MessageId - Index into global message buffer
+ *
+ * RETURN: TRUE if exception/message should be ignored
+ *
+ * DESCRIPTION: Check if the user has specified options such that this
+ * exception should be ignored
+ *
+ ******************************************************************************/
+
+BOOLEAN
+AslIsExceptionDisabled (
+ UINT8 Level,
+ UINT8 MessageId)
+{
+ UINT32 EncodedMessageId;
+ UINT32 i;
+
+
+ switch (Level)
+ {
+ case ASL_WARNING2:
+ case ASL_WARNING3:
+
+ /* Check for global disable via -w1/-w2/-w3 options */
+
+ if (Level > Gbl_WarningLevel)
+ {
+ return (TRUE);
+ }
+ /* Fall through */
+
+ case ASL_WARNING:
+ case ASL_REMARK:
+ /*
+ * Ignore this warning/remark if it has been disabled by
+ * the user (-vw option)
+ */
+ EncodedMessageId = MessageId + ((Level + 1) * 1000);
+ for (i = 0; i < Gbl_DisabledMessagesIndex; i++)
+ {
+ /* Simple implementation via fixed array */
+
+ if (EncodedMessageId == Gbl_DisabledMessages[i])
+ {
+ return (TRUE);
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ return (FALSE);
+}
+
+
+/*******************************************************************************
+ *
* FUNCTION: AslError
*
* PARAMETERS: Level - Seriousness (Warning/error, etc.)
@@ -698,32 +808,25 @@ AslError (
char *ExtraMessage)
{
- switch (Level)
- {
- case ASL_WARNING2:
- case ASL_WARNING3:
- if (Gbl_WarningLevel < Level)
- {
- return;
- }
- break;
+ /* Check if user wants to ignore this exception */
- default:
- break;
+ if (AslIsExceptionDisabled (Level, MessageId))
+ {
+ return;
}
if (Op)
{
AslCommonError (Level, MessageId, Op->Asl.LineNumber,
- Op->Asl.LogicalLineNumber,
- Op->Asl.LogicalByteOffset,
- Op->Asl.Column,
- Op->Asl.Filename, ExtraMessage);
+ Op->Asl.LogicalLineNumber,
+ Op->Asl.LogicalByteOffset,
+ Op->Asl.Column,
+ Op->Asl.Filename, ExtraMessage);
}
else
{
AslCommonError (Level, MessageId, 0,
- 0, 0, 0, NULL, ExtraMessage);
+ 0, 0, 0, NULL, ExtraMessage);
}
}
diff --git a/source/compiler/aslfold.c b/source/compiler/aslfold.c
index d25c7ff..9a041a5 100644
--- a/source/compiler/aslfold.c
+++ b/source/compiler/aslfold.c
@@ -441,7 +441,6 @@ OpcAmlConstantWalk (
ACPI_FORMAT_UINT64 (Op->Common.Value.Integer));
break;
-
case ACPI_TYPE_STRING:
Op->Asl.ParseOpcode = PARSEOP_STRING_LITERAL;
@@ -455,7 +454,6 @@ OpcAmlConstantWalk (
break;
-
case ACPI_TYPE_BUFFER:
Op->Asl.ParseOpcode = PARSEOP_BUFFER;
@@ -493,8 +491,8 @@ OpcAmlConstantWalk (
ObjDesc->Buffer.Length);
break;
-
default:
+
printf ("Unsupported return type: %s\n",
AcpiUtGetObjectTypeName (ObjDesc));
break;
@@ -536,27 +534,32 @@ OpcUpdateIntegerNode (
switch (Op->Asl.AmlLength)
{
case 1:
+
TrUpdateNode (PARSEOP_BYTECONST, Op);
Op->Asl.AmlOpcode = AML_RAW_DATA_BYTE;
break;
case 2:
+
TrUpdateNode (PARSEOP_WORDCONST, Op);
Op->Asl.AmlOpcode = AML_RAW_DATA_WORD;
break;
case 4:
+
TrUpdateNode (PARSEOP_DWORDCONST, Op);
Op->Asl.AmlOpcode = AML_RAW_DATA_DWORD;
break;
case 8:
+
TrUpdateNode (PARSEOP_QWORDCONST, Op);
Op->Asl.AmlOpcode = AML_RAW_DATA_QWORD;
break;
case 0:
default:
+
OpcSetOptimalIntegerSize (Op);
TrUpdateNode (PARSEOP_INTEGER, Op);
break;
diff --git a/source/compiler/aslglobal.h b/source/compiler/aslglobal.h
index c15c669..e1be4ae 100644
--- a/source/compiler/aslglobal.h
+++ b/source/compiler/aslglobal.h
@@ -110,6 +110,7 @@ extern char *AslCompilertext;
#define ASL_DEFAULT_LINE_BUFFER_SIZE (1024 * 32) /* 32K */
#define ASL_MSG_BUFFER_SIZE 4096
+#define ASL_MAX_DISABLED_MESSAGES 32
#define HEX_TABLE_LINE_SIZE 8
#define HEX_LISTING_LINE_SIZE 8
@@ -224,6 +225,7 @@ ASL_EXTERN char *Gbl_TemplateSignature;
ASL_EXTERN UINT32 ASL_INIT_GLOBAL (Gbl_CurrentHexColumn, 0);
ASL_EXTERN UINT32 ASL_INIT_GLOBAL (Gbl_CurrentAmlOffset, 0);
ASL_EXTERN UINT32 ASL_INIT_GLOBAL (Gbl_CurrentLine, 0);
+ASL_EXTERN UINT32 ASL_INIT_GLOBAL (Gbl_DisabledMessagesIndex, 0);
ASL_EXTERN UINT8 ASL_INIT_GLOBAL (Gbl_HexBytesWereWritten, FALSE);
ASL_EXTERN UINT32 ASL_INIT_GLOBAL (Gbl_NumNamespaceObjects, 0);
ASL_EXTERN UINT32 ASL_INIT_GLOBAL (Gbl_ReservedMethods, 0);
@@ -250,6 +252,7 @@ ASL_EXTERN UINT8 Gbl_AmlBuffer[HEX_LISTING_LINE_SIZE];
ASL_EXTERN char MsgBuffer[ASL_MSG_BUFFER_SIZE];
ASL_EXTERN char StringBuffer[ASL_MSG_BUFFER_SIZE];
ASL_EXTERN char StringBuffer2[ASL_MSG_BUFFER_SIZE];
+ASL_EXTERN UINT32 Gbl_DisabledMessages[ASL_MAX_DISABLED_MESSAGES];
#endif /* __ASLGLOBAL_H */
diff --git a/source/compiler/aslhex.c b/source/compiler/aslhex.c
index 863c0a3..cc2ba6f 100644
--- a/source/compiler/aslhex.c
+++ b/source/compiler/aslhex.c
@@ -107,7 +107,9 @@ HxDoHexOutput (
break;
default:
+
/* No other output types supported */
+
break;
}
}
diff --git a/source/compiler/asllength.c b/source/compiler/asllength.c
index fae6768..69d4d22 100644
--- a/source/compiler/asllength.c
+++ b/source/compiler/asllength.c
@@ -258,6 +258,7 @@ CgGenerateAmlOpcodeLength (
break;
default:
+
/* All data opcodes must be above */
break;
}
@@ -326,6 +327,7 @@ CgGenerateAmlLengths (
return;
default:
+
break;
}
diff --git a/source/compiler/asllisting.c b/source/compiler/asllisting.c
index 04c5179..c8e2a6e 100644
--- a/source/compiler/asllisting.c
+++ b/source/compiler/asllisting.c
@@ -157,6 +157,8 @@ LsGenerateListing (
if (FileId == ASL_FILE_C_OFFSET_OUTPUT)
{
+ Gbl_CurrentAmlOffset = 0;
+
/* Offset table file has a special header and footer */
LsDoOffsetTableHeader (FileId);
@@ -265,9 +267,10 @@ LsTreeWriteWalk (
DbgPrint (ASL_TREE_OUTPUT,
"%5.5d [%2d]", Op->Asl.LogicalLineNumber, Level);
+
UtPrintFormattedName (Op->Asl.ParseOpcode, Level);
- DbgPrint (ASL_TREE_OUTPUT, "\n");
+ DbgPrint (ASL_TREE_OUTPUT, " (%.4X)\n", Op->Asl.ParseOpcode);
return (AE_OK);
}
@@ -319,16 +322,20 @@ LsWriteNodeToListing (
break;
default:
+
switch (OpClass)
{
case AML_CLASS_NAMED_OBJECT:
+
switch (Op->Asl.AmlOpcode)
{
case AML_SCOPE_OP:
case AML_ALIAS_OP:
+
break;
default:
+
if (Op->Asl.ExternalName)
{
LsFlushListingBuffer (FileId);
@@ -339,7 +346,9 @@ LsWriteNodeToListing (
break;
default:
+
/* Don't care about other objects */
+
break;
}
break;
@@ -427,7 +436,9 @@ LsWriteNodeToListing (
default:
+
/* All other opcodes have an AML opcode */
+
break;
}
@@ -443,7 +454,6 @@ LsWriteNodeToListing (
break;
-
case AML_CLASS_NAMED_OBJECT:
switch (Op->Asl.AmlOpcode)
@@ -451,7 +461,6 @@ LsWriteNodeToListing (
case AML_FIELD_OP:
case AML_INDEX_FIELD_OP:
case AML_BANK_FIELD_OP:
-
/*
* For fields, we want to dump all the AML after the
* entire definition
@@ -479,6 +488,7 @@ LsWriteNodeToListing (
break;
default:
+
LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.LogicalLineNumber,
FileId);
break;
@@ -503,7 +513,6 @@ LsWriteNodeToListing (
case ASL_FILE_C_SOURCE_OUTPUT:
case ASL_FILE_ASM_INCLUDE_OUTPUT:
case ASL_FILE_C_INCLUDE_OUTPUT:
-
/*
* For named objects, we will create a valid symbol so that the
* AML code can be referenced from C or ASM
@@ -558,7 +567,9 @@ LsWriteNodeToListing (
break;
default:
+
/* Nothing to do for listing file */
+
break;
}
}
@@ -579,6 +590,7 @@ LsWriteNodeToListing (
break;
case AML_CLASS_UNKNOWN:
+
break;
}
}
diff --git a/source/compiler/asllistsup.c b/source/compiler/asllistsup.c
index 4156dcc..d3bf39f 100644
--- a/source/compiler/asllistsup.c
+++ b/source/compiler/asllistsup.c
@@ -251,7 +251,9 @@ LsWriteListingHexBytes (
break;
default:
+
/* No other types supported */
+
return;
}
}
@@ -617,7 +619,9 @@ LsFlushListingBuffer (
break;
default:
+
/* No other types supported */
+
return;
}
diff --git a/source/compiler/aslload.c b/source/compiler/aslload.c
index e581df2..7f3ce1d 100644
--- a/source/compiler/aslload.c
+++ b/source/compiler/aslload.c
@@ -177,7 +177,9 @@ LdLoadFieldElements (
break;
default:
+
/* No other opcodes should arrive here */
+
return (AE_BAD_PARAMETER);
}
@@ -374,6 +376,7 @@ LdNamespace1Begin (
default:
/* All other opcodes go below */
+
break;
}
@@ -422,7 +425,6 @@ LdNamespace1Begin (
case PARSEOP_EXTERNAL:
-
/*
* "External" simply enters a name and type into the namespace.
* We must be careful to not open a new scope, however, no matter
@@ -466,7 +468,6 @@ LdNamespace1Begin (
case PARSEOP_SCOPE:
-
/*
* The name referenced by Scope(Name) must already exist at this point.
* In other words, forward references for Scope() are not supported.
@@ -521,7 +522,6 @@ LdNamespace1Begin (
case ACPI_TYPE_INTEGER:
case ACPI_TYPE_STRING:
case ACPI_TYPE_BUFFER:
-
/*
* These types we will allow, but we will change the type.
* This enables some existing code of the form:
diff --git a/source/compiler/asllookup.c b/source/compiler/asllookup.c
index 7db805f..e965f18 100644
--- a/source/compiler/asllookup.c
+++ b/source/compiler/asllookup.c
@@ -144,9 +144,11 @@ LkIsObjectUsed (
case ACPI_TYPE_PROCESSOR:
case ACPI_TYPE_POWER:
case ACPI_TYPE_LOCAL_RESOURCE:
+
return (AE_OK);
default:
+
break;
}
diff --git a/source/compiler/aslmain.c b/source/compiler/aslmain.c
index 4cc63fa..a75a6fd 100644
--- a/source/compiler/aslmain.c
+++ b/source/compiler/aslmain.c
@@ -41,7 +41,6 @@
* POSSIBILITY OF SUCH DAMAGES.
*/
-
#define _DECLARE_GLOBALS
#include "aslcompiler.h"
@@ -49,26 +48,11 @@
#include "acdisasm.h"
#include <signal.h>
-#ifdef _DEBUG
-#include <crtdbg.h>
-#endif
-
#define _COMPONENT ACPI_COMPILER
ACPI_MODULE_NAME ("aslmain")
-/* Local prototypes */
-
-static void
-Options (
- void);
-
-static void
-FilenameHelp (
- void);
-static void
-Usage (
- void);
+/* Local prototypes */
static void ACPI_SYSTEM_XFACE
AslSignalHandler (
@@ -78,34 +62,10 @@ static void
AslInitialize (
void);
-static int
-AslCommandLine (
- int argc,
- char **argv);
-
-static int
-AslDoOptions (
- int argc,
- char **argv,
- BOOLEAN IsResponseFile);
-
-static void
-AslMergeOptionTokens (
- char *InBuffer,
- char *OutBuffer);
-
-static int
-AslDoResponseFile (
- char *Filename);
-
-
-#define ASL_TOKEN_SEPARATORS " \t\n"
-#define ASL_SUPPORTED_OPTIONS "@:b|c|d^D:e:fgh^i|I:l^m:no|p:P^r:s|t|T:G^v^w|x:z"
-
/*******************************************************************************
*
- * FUNCTION: Options
+ * FUNCTION: Usage
*
* PARAMETERS: None
*
@@ -116,10 +76,12 @@ AslDoResponseFile (
*
******************************************************************************/
-static void
-Options (
+void
+Usage (
void)
{
+ printf ("%s\n\n", ASL_COMPLIANCE);
+ ACPI_USAGE_HEADER ("iasl [Options] [Files]");
printf ("\nGlobal:\n");
ACPI_OPTION ("-@ <file>", "Specify command file");
@@ -140,6 +102,7 @@ Options (
ACPI_OPTION ("-vo", "Enable optimization comments");
ACPI_OPTION ("-vr", "Disable remarks");
ACPI_OPTION ("-vs", "Disable signon");
+ ACPI_OPTION ("-vw <messageid>", "Disable specific warning or remark");
ACPI_OPTION ("-w1 -w2 -w3", "Set warning reporting level");
ACPI_OPTION ("-we", "Report warnings as errors");
@@ -209,8 +172,8 @@ Options (
*
******************************************************************************/
-static void
-FilenameHelp (
+void
+AslFilenameHelp (
void)
{
@@ -225,29 +188,6 @@ FilenameHelp (
}
-/*******************************************************************************
- *
- * FUNCTION: Usage
- *
- * PARAMETERS: None
- *
- * RETURN: None
- *
- * DESCRIPTION: Display usage and option message
- *
- ******************************************************************************/
-
-static void
-Usage (
- void)
-{
-
- printf ("%s\n\n", ASL_COMPLIANCE);
- ACPI_USAGE_HEADER ("iasl [Options] [Files]");
- Options ();
-}
-
-
/******************************************************************************
*
* FUNCTION: AslSignalHandler
@@ -310,11 +250,6 @@ AslInitialize (
UINT32 i;
-#ifdef _DEBUG
- _CrtSetDbgFlag (_CRTDBG_CHECK_ALWAYS_DF | _CrtSetDbgFlag(0));
-#endif
-
-
for (i = 0; i < ASL_NUM_FILES; i++)
{
Gbl_Files[i].Handle = NULL;
@@ -326,675 +261,6 @@ AslInitialize (
Gbl_Files[ASL_FILE_STDERR].Handle = stderr;
Gbl_Files[ASL_FILE_STDERR].Filename = "STDERR";
-
- /* Allocate the line buffer(s) */
-
- Gbl_LineBufferSize /= 2;
- UtExpandLineBuffers ();
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: AslMergeOptionTokens
- *
- * PARAMETERS: InBuffer - Input containing an option string
- * OutBuffer - Merged output buffer
- *
- * RETURN: None
- *
- * DESCRIPTION: Remove all whitespace from an option string.
- *
- ******************************************************************************/
-
-static void
-AslMergeOptionTokens (
- char *InBuffer,
- char *OutBuffer)
-{
- char *Token;
-
-
- *OutBuffer = 0;
-
- Token = strtok (InBuffer, ASL_TOKEN_SEPARATORS);
- while (Token)
- {
- strcat (OutBuffer, Token);
- Token = strtok (NULL, ASL_TOKEN_SEPARATORS);
- }
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: AslDoResponseFile
- *
- * PARAMETERS: Filename - Name of the response file
- *
- * RETURN: Status
- *
- * DESCRIPTION: Open a response file and process all options within.
- *
- ******************************************************************************/
-
-static int
-AslDoResponseFile (
- char *Filename)
-{
- char *argv = StringBuffer2;
- FILE *ResponseFile;
- int OptStatus = 0;
- int Opterr;
- int Optind;
-
-
- ResponseFile = fopen (Filename, "r");
- if (!ResponseFile)
- {
- printf ("Could not open command file %s, %s\n",
- Filename, strerror (errno));
- return (-1);
- }
-
- /* Must save the current GetOpt globals */
-
- Opterr = AcpiGbl_Opterr;
- Optind = AcpiGbl_Optind;
-
- /*
- * Process all lines in the response file. There must be one complete
- * option per line
- */
- while (fgets (StringBuffer, ASL_MSG_BUFFER_SIZE, ResponseFile))
- {
- /* Compress all tokens, allowing us to use a single argv entry */
-
- AslMergeOptionTokens (StringBuffer, StringBuffer2);
-
- /* Process the option */
-
- AcpiGbl_Opterr = 0;
- AcpiGbl_Optind = 0;
-
- OptStatus = AslDoOptions (1, &argv, TRUE);
- if (OptStatus)
- {
- printf ("Invalid option in command file %s: %s\n",
- Filename, StringBuffer);
- break;
- }
- }
-
- /* Restore the GetOpt globals */
-
- AcpiGbl_Opterr = Opterr;
- AcpiGbl_Optind = Optind;
-
- fclose (ResponseFile);
- return (OptStatus);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: AslDoOptions
- *
- * PARAMETERS: argc/argv - Standard argc/argv
- * IsResponseFile - TRUE if executing a response file.
- *
- * RETURN: Status
- *
- * DESCRIPTION: Command line option processing
- *
- ******************************************************************************/
-
-static int
-AslDoOptions (
- int argc,
- char **argv,
- BOOLEAN IsResponseFile)
-{
- int j;
- ACPI_STATUS Status;
-
-
- /* Get the command line options */
-
- while ((j = AcpiGetopt (argc, argv, ASL_SUPPORTED_OPTIONS)) != EOF) switch (j)
- {
- case '@': /* Begin a response file */
-
- if (IsResponseFile)
- {
- printf ("Nested command files are not supported\n");
- return (-1);
- }
-
- if (AslDoResponseFile (AcpiGbl_Optarg))
- {
- return (-1);
- }
- break;
-
-
- case 'b': /* Debug output options */
- switch (AcpiGbl_Optarg[0])
- {
- case 'f':
- AslCompilerdebug = 1; /* same as yydebug */
- DtParserdebug = 1;
- PrParserdebug = 1;
- break;
-
- case 't':
- break;
-
- default:
- printf ("Unknown option: -b%s\n", AcpiGbl_Optarg);
- return (-1);
- }
-
- /* Produce debug output file */
-
- Gbl_DebugFlag = TRUE;
- break;
-
-
- case 'c':
- switch (AcpiGbl_Optarg[0])
- {
- case 'r':
- Gbl_NoResourceChecking = TRUE;
- break;
-
- default:
- printf ("Unknown option: -c%s\n", AcpiGbl_Optarg);
- return (-1);
- }
- break;
-
-
- case 'd': /* Disassembler */
- switch (AcpiGbl_Optarg[0])
- {
- case '^':
- Gbl_DoCompile = FALSE;
- break;
-
- case 'a':
- Gbl_DoCompile = FALSE;
- Gbl_DisassembleAll = TRUE;
- break;
-
- case 'b': /* Do not convert buffers to resource descriptors */
- AcpiGbl_NoResourceDisassembly = TRUE;
- break;
-
- case 'c':
- break;
-
- default:
- printf ("Unknown option: -d%s\n", AcpiGbl_Optarg);
- return (-1);
- }
-
- Gbl_DisasmFlag = TRUE;
- break;
-
-
- case 'D': /* Define a symbol */
- PrAddDefine (AcpiGbl_Optarg, NULL, TRUE);
- break;
-
-
- case 'e': /* External files for disassembler */
- Status = AcpiDmAddToExternalFileList (AcpiGbl_Optarg);
- if (ACPI_FAILURE (Status))
- {
- printf ("Could not add %s to external list\n", AcpiGbl_Optarg);
- return (-1);
- }
- break;
-
-
- case 'f': /* Ignore errors and force creation of aml file */
- Gbl_IgnoreErrors = TRUE;
- break;
-
-
- case 'G':
- Gbl_CompileGeneric = TRUE;
- break;
-
-
- case 'g': /* Get all ACPI tables */
-
- Gbl_GetAllTables = TRUE;
- Gbl_DoCompile = FALSE;
- break;
-
-
- case 'h':
- switch (AcpiGbl_Optarg[0])
- {
- case '^':
- Usage ();
- exit (0);
-
- case 'c':
- UtDisplayConstantOpcodes ();
- exit (0);
-
- case 'f':
- FilenameHelp ();
- exit (0);
-
- case 'r':
- /* reserved names */
-
- ApDisplayReservedNames ();
- exit (0);
-
- case 't':
- UtDisplaySupportedTables ();
- exit (0);
-
- default:
- printf ("Unknown option: -h%s\n", AcpiGbl_Optarg);
- return (-1);
- }
-
-
- case 'I': /* Add an include file search directory */
- FlAddIncludeDirectory (AcpiGbl_Optarg);
- break;
-
-
- case 'i': /* Output AML as an include file */
- switch (AcpiGbl_Optarg[0])
- {
- case 'a':
-
- /* Produce assembly code include file */
-
- Gbl_AsmIncludeOutputFlag = TRUE;
- break;
-
- case 'c':
-
- /* Produce C include file */
-
- Gbl_C_IncludeOutputFlag = TRUE;
- break;
-
- case 'n':
-
- /* Compiler/Disassembler: Ignore the NOOP operator */
-
- AcpiGbl_IgnoreNoopOperator = TRUE;
- break;
-
- default:
- printf ("Unknown option: -i%s\n", AcpiGbl_Optarg);
- return (-1);
- }
- break;
-
-
- case 'l': /* Listing files */
- switch (AcpiGbl_Optarg[0])
- {
- case '^':
- /* Produce listing file (Mixed source/aml) */
-
- Gbl_ListingFlag = TRUE;
- break;
-
- case 'i':
- /* Produce preprocessor output file */
-
- Gbl_PreprocessorOutputFlag = TRUE;
- break;
-
- case 'n':
- /* Produce namespace file */
-
- Gbl_NsOutputFlag = TRUE;
- break;
-
- case 's':
- /* Produce combined source file */
-
- Gbl_SourceOutputFlag = TRUE;
- break;
-
- default:
- printf ("Unknown option: -l%s\n", AcpiGbl_Optarg);
- return (-1);
- }
- break;
-
-
- case 'm': /* Set line buffer size */
- Gbl_LineBufferSize = (UINT32) strtoul (AcpiGbl_Optarg, NULL, 0) * 1024;
- if (Gbl_LineBufferSize < ASL_DEFAULT_LINE_BUFFER_SIZE)
- {
- Gbl_LineBufferSize = ASL_DEFAULT_LINE_BUFFER_SIZE;
- }
- printf ("Line Buffer Size: %u\n", Gbl_LineBufferSize);
- break;
-
-
- case 'n': /* Parse only */
- Gbl_ParseOnlyFlag = TRUE;
- break;
-
-
- case 'o': /* Control compiler AML optimizations */
- switch (AcpiGbl_Optarg[0])
- {
- case 'a':
-
- /* Disable all optimizations */
-
- Gbl_FoldConstants = FALSE;
- Gbl_IntegerOptimizationFlag = FALSE;
- Gbl_ReferenceOptimizationFlag = FALSE;
- break;
-
- case 'f':
-
- /* Disable folding on "normal" expressions */
-
- Gbl_FoldConstants = FALSE;
- break;
-
- case 'i':
-
- /* Disable integer optimization to constants */
-
- Gbl_IntegerOptimizationFlag = FALSE;
- break;
-
- case 'n':
-
- /* Disable named reference optimization */
-
- Gbl_ReferenceOptimizationFlag = FALSE;
- break;
-
- case 't':
-
- /* Display compile time(s) */
-
- Gbl_CompileTimesFlag = TRUE;
- break;
-
- default:
- printf ("Unknown option: -c%s\n", AcpiGbl_Optarg);
- return (-1);
- }
- break;
-
-
- case 'P': /* Preprocessor options */
- switch (AcpiGbl_Optarg[0])
- {
- case '^': /* Proprocess only, emit (.i) file */
- Gbl_PreprocessOnly = TRUE;
- Gbl_PreprocessorOutputFlag = TRUE;
- break;
-
- case 'n': /* Disable preprocessor */
- Gbl_PreprocessFlag = FALSE;
- break;
-
- default:
- printf ("Unknown option: -P%s\n", AcpiGbl_Optarg);
- return (-1);
- }
- break;
-
-
- case 'p': /* Override default AML output filename */
- Gbl_OutputFilenamePrefix = AcpiGbl_Optarg;
- Gbl_UseDefaultAmlFilename = FALSE;
- break;
-
-
- case 'r': /* Override revision found in table header */
- Gbl_RevisionOverride = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0);
- break;
-
-
- case 's': /* Create AML in a source code file */
- switch (AcpiGbl_Optarg[0])
- {
- case 'a':
-
- /* Produce assembly code output file */
-
- Gbl_AsmOutputFlag = TRUE;
- break;
-
- case 'c':
-
- /* Produce C hex output file */
-
- Gbl_C_OutputFlag = TRUE;
- break;
-
- case 'o':
-
- /* Produce AML offset table in C */
-
- Gbl_C_OffsetTableFlag = TRUE;
- break;
-
- default:
- printf ("Unknown option: -s%s\n", AcpiGbl_Optarg);
- return (-1);
- }
- break;
-
-
- case 't': /* Produce hex table output file */
- switch (AcpiGbl_Optarg[0])
- {
- case 'a':
- Gbl_HexOutputFlag = HEX_OUTPUT_ASM;
- break;
-
- case 'c':
- Gbl_HexOutputFlag = HEX_OUTPUT_C;
- break;
-
- case 's':
- Gbl_HexOutputFlag = HEX_OUTPUT_ASL;
- break;
-
- default:
- printf ("Unknown option: -t%s\n", AcpiGbl_Optarg);
- return (-1);
- }
- break;
-
-
- case 'T': /* Create a ACPI table template file */
- Gbl_DoTemplates = TRUE;
- Gbl_TemplateSignature = AcpiGbl_Optarg;
- break;
-
-
- case 'v': /* Version and verbosity settings */
- switch (AcpiGbl_Optarg[0])
- {
- case '^':
- printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME));
- exit (0);
-
- case 'a':
- /* Disable All error/warning messages */
-
- Gbl_NoErrors = TRUE;
- break;
-
- case 'i':
- /*
- * Support for integrated development environment(s).
- *
- * 1) No compiler signon
- * 2) Send stderr messages to stdout
- * 3) Less verbose error messages (single line only for each)
- * 4) Error/warning messages are formatted appropriately to
- * be recognized by MS Visual Studio
- */
- Gbl_VerboseErrors = FALSE;
- Gbl_DoSignon = FALSE;
- Gbl_Files[ASL_FILE_STDERR].Handle = stdout;
- break;
-
- case 'o':
- Gbl_DisplayOptimizations = TRUE;
- break;
-
- case 'r':
- Gbl_DisplayRemarks = FALSE;
- break;
-
- case 's':
- Gbl_DoSignon = FALSE;
- break;
-
- case 't':
- Gbl_VerboseTemplates = TRUE;
- break;
-
- default:
- printf ("Unknown option: -v%s\n", AcpiGbl_Optarg);
- return (-1);
- }
- break;
-
-
- case 'w': /* Set warning levels */
- switch (AcpiGbl_Optarg[0])
- {
- case '1':
- Gbl_WarningLevel = ASL_WARNING;
- break;
-
- case '2':
- Gbl_WarningLevel = ASL_WARNING2;
- break;
-
- case '3':
- Gbl_WarningLevel = ASL_WARNING3;
- break;
-
- case 'e':
- Gbl_WarningsAsErrors = TRUE;
- break;
-
- default:
- printf ("Unknown option: -w%s\n", AcpiGbl_Optarg);
- return (-1);
- }
- break;
-
-
- case 'x': /* Set debug print output level */
- AcpiDbgLevel = strtoul (AcpiGbl_Optarg, NULL, 16);
- break;
-
-
- case 'z':
- Gbl_UseOriginalCompilerId = TRUE;
- break;
-
-
- default:
- return (-1);
- }
-
- return (0);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: AslCommandLine
- *
- * PARAMETERS: argc/argv
- *
- * RETURN: Last argv index
- *
- * DESCRIPTION: Command line processing
- *
- ******************************************************************************/
-
-static int
-AslCommandLine (
- int argc,
- char **argv)
-{
- int BadCommandLine = 0;
- ACPI_STATUS Status;
-
-
- /* Minimum command line contains at least the command and an input file */
-
- if (argc < 2)
- {
- printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME));
- Usage ();
- exit (1);
- }
-
- /* Process all command line options */
-
- BadCommandLine = AslDoOptions (argc, argv, FALSE);
-
- if (Gbl_DoTemplates)
- {
- Status = DtCreateTemplates (Gbl_TemplateSignature);
- if (ACPI_FAILURE (Status))
- {
- exit (-1);
- }
- exit (1);
- }
-
- /* Next parameter must be the input filename */
-
- if (!argv[AcpiGbl_Optind] &&
- !Gbl_DisasmFlag &&
- !Gbl_GetAllTables)
- {
- printf ("Missing input filename\n");
- BadCommandLine = TRUE;
- }
-
- if (Gbl_DoSignon)
- {
- printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME));
- if (Gbl_IgnoreErrors)
- {
- printf ("Ignoring all errors, forcing AML file generation\n\n");
- }
- }
-
- /* Abort if anything went wrong on the command line */
-
- if (BadCommandLine)
- {
- printf ("\n");
- Usage ();
- exit (1);
- }
-
- return (AcpiGbl_Optind);
}
@@ -1021,24 +287,24 @@ main (
int Index2;
- signal (SIGINT, AslSignalHandler);
+ ACPI_DEBUG_INITIALIZE (); /* For debug version only */
+ /* Initialize preprocessor and compiler before command line processing */
+
+ signal (SIGINT, AslSignalHandler);
AcpiGbl_ExternalFileList = NULL;
AcpiDbgLevel = 0;
-
-#ifdef _DEBUG
- _CrtSetDbgFlag (_CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_LEAK_CHECK_DF |
- _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG));
-#endif
-
- /* Init and command line */
+ PrInitializePreprocessor ();
+ AslInitialize ();
Index1 = Index2 = AslCommandLine (argc, argv);
- AslInitialize ();
- PrInitializePreprocessor ();
+ /* Allocate the line buffer(s), must be after command line */
+
+ Gbl_LineBufferSize /= 2;
+ UtExpandLineBuffers ();
- /* Options that have no additional parameters or pathnames */
+ /* Perform global actions first/only */
if (Gbl_GetAllTables)
{
diff --git a/source/compiler/aslmessages.h b/source/compiler/aslmessages.h
index 102148d..a104a44 100644
--- a/source/compiler/aslmessages.h
+++ b/source/compiler/aslmessages.h
@@ -46,17 +46,52 @@
#define __ASLMESSAGES_H
-#define ASL_WARNING 0
-#define ASL_WARNING2 1
-#define ASL_WARNING3 2
-#define ASL_ERROR 3
-#define ASL_REMARK 4
-#define ASL_OPTIMIZATION 5
-#define ASL_NUM_REPORT_LEVELS 6
+typedef enum
+{
+ ASL_OPTIMIZATION = 0,
+ ASL_REMARK,
+ ASL_WARNING,
+ ASL_WARNING2,
+ ASL_WARNING3,
+ ASL_ERROR,
+ ASL_NUM_REPORT_LEVELS
+
+} ASL_MESSAGE_TYPES;
+
+#ifdef ASL_EXCEPTIONS
+
+/* Strings for message reporting levels, must match values above */
+const char *AslErrorLevel [ASL_NUM_REPORT_LEVELS] = {
+ "Optimize",
+ "Remark ",
+ "Warning ",
+ "Warning ",
+ "Warning ",
+ "Error "
+};
-/* Values for all compiler messages */
+/* All lowercase versions for IDEs */
+const char *AslErrorLevelIde [ASL_NUM_REPORT_LEVELS] = {
+ "optimize",
+ "remark ",
+ "warning ",
+ "warning ",
+ "warning ",
+ "error "
+};
+
+#define ASL_ERROR_LEVEL_LENGTH 8 /* Length of strings above */
+#endif
+
+/*
+ * Values for all compiler messages.
+ *
+ * NOTE: With the introduction of the -vw option to disable specific messages,
+ * new messages should only be added to the end of this list, so that values
+ * for existing messages are not disturbed.
+ */
typedef enum
{
ASL_MSG_RESERVED = 0,
@@ -180,6 +215,7 @@ typedef enum
ASL_MSG_SCOPE_TYPE,
ASL_MSG_SEEK,
ASL_MSG_SERIALIZED,
+ ASL_MSG_SERIALIZED_REQUIRED,
ASL_MSG_SINGLE_NAME_OPTIMIZATION,
ASL_MSG_SOME_NO_RETVAL,
ASL_MSG_STRING_LENGTH,
@@ -235,9 +271,15 @@ typedef enum
#ifdef ASL_EXCEPTIONS
-/* Actual message strings for each compiler message */
-
-char *AslMessages [] = {
+/*
+ * Actual message strings for each compiler message.
+ *
+ * NOTE: With the introduction of the -vw option to disable specific messages,
+ * new messages should only be added to the end of this list, so that values
+ * for existing messages are not disturbed.
+ */
+char *AslMessages [] =
+{
/* The zeroth message is reserved */ "",
/* ASL_MSG_ALIGNMENT */ "Must be a multiple of alignment/granularity value",
/* ASL_MSG_ALPHANUMERIC_STRING */ "String must be entirely alphanumeric",
@@ -358,6 +400,7 @@ char *AslMessages [] = {
/* ASL_MSG_SCOPE_TYPE */ "Existing object has invalid type for Scope operator",
/* ASL_MSG_SEEK */ "Could not seek file",
/* ASL_MSG_SERIALIZED */ "Control Method marked Serialized",
+/* ASL_MSG_SERIALIZED_REQUIRED */ "Control Method should be made Serialized",
/* ASL_MSG_SINGLE_NAME_OPTIMIZATION */ "NamePath optimized to NameSeg (uses run-time search path)",
/* ASL_MSG_SOME_NO_RETVAL */ "Called method may not always return a value",
/* ASL_MSG_STRING_LENGTH */ "String literal too long",
@@ -408,27 +451,6 @@ char *AslMessages [] = {
/* ASL_MSG_ZERO_VALUE */ "Value must be non-zero"
};
-
-const char *AslErrorLevel [ASL_NUM_REPORT_LEVELS] = {
- "Warning ",
- "Warning ",
- "Warning ",
- "Error ",
- "Remark ",
- "Optimize"
-};
-
-const char *AslErrorLevelIde [ASL_NUM_REPORT_LEVELS] = {
- "warning ",
- "warning ",
- "warning ",
- "error ",
- "remark ",
- "optimize"
-};
-
-#define ASL_ERROR_LEVEL_LENGTH 8 /* Length of strings above */
-
#endif /* ASL_EXCEPTIONS */
#endif /* __ASLMESSAGES_H */
diff --git a/source/compiler/aslmethod.c b/source/compiler/aslmethod.c
index f191991..94e73d3 100644
--- a/source/compiler/aslmethod.c
+++ b/source/compiler/aslmethod.c
@@ -44,12 +44,22 @@
#include "aslcompiler.h"
#include "aslcompiler.y.h"
+#include "acparser.h"
+#include "amlcode.h"
#define _COMPONENT ACPI_COMPILER
ACPI_MODULE_NAME ("aslmethod")
+/* Local prototypes */
+
+void
+MtCheckNamedObjectInMethod (
+ ACPI_PARSE_OBJECT *Op,
+ ASL_METHOD_INFO *MethodInfo);
+
+
/*******************************************************************************
*
* FUNCTION: MtMethodAnalysisWalkBegin
@@ -111,6 +121,8 @@ MtMethodAnalysisWalkBegin (
/* Get the SerializeRule and SyncLevel nodes, ignored here */
Next = Next->Asl.Next;
+ MethodInfo->ShouldBeSerialized = (UINT8) Next->Asl.Value.Integer;
+
Next = Next->Asl.Next;
ArgNode = Next;
@@ -181,7 +193,6 @@ MtMethodAnalysisWalkBegin (
}
break;
-
case PARSEOP_METHODCALL:
if (MethodInfo &&
@@ -191,7 +202,6 @@ MtMethodAnalysisWalkBegin (
}
break;
-
case PARSEOP_LOCAL0:
case PARSEOP_LOCAL1:
case PARSEOP_LOCAL2:
@@ -236,7 +246,6 @@ MtMethodAnalysisWalkBegin (
}
break;
-
case PARSEOP_ARG0:
case PARSEOP_ARG1:
case PARSEOP_ARG2:
@@ -287,7 +296,6 @@ MtMethodAnalysisWalkBegin (
}
break;
-
case PARSEOP_RETURN:
if (!MethodInfo)
@@ -320,7 +328,6 @@ MtMethodAnalysisWalkBegin (
}
break;
-
case PARSEOP_BREAK:
case PARSEOP_CONTINUE:
@@ -340,7 +347,6 @@ MtMethodAnalysisWalkBegin (
}
break;
-
case PARSEOP_STALL:
/* We can range check if the argument is an integer */
@@ -352,7 +358,6 @@ MtMethodAnalysisWalkBegin (
}
break;
-
case PARSEOP_DEVICE:
case PARSEOP_EVENT:
case PARSEOP_MUTEX:
@@ -372,7 +377,6 @@ MtMethodAnalysisWalkBegin (
}
break;
-
case PARSEOP_NAME:
/* Typecheck any predefined names statically defined with Name() */
@@ -410,17 +414,76 @@ MtMethodAnalysisWalkBegin (
}
break;
-
default:
+
break;
}
+ /* Check for named object creation within a non-serialized method */
+
+ MtCheckNamedObjectInMethod (Op, MethodInfo);
return (AE_OK);
}
/*******************************************************************************
*
+ * FUNCTION: MtCheckNamedObjectInMethod
+ *
+ * PARAMETERS: Op - Current parser op
+ * MethodInfo - Info for method being parsed
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Detect if a non-serialized method is creating a named object,
+ * which could possibly cause problems if two threads execute
+ * the method concurrently. Emit a remark in this case.
+ *
+ ******************************************************************************/
+
+void
+MtCheckNamedObjectInMethod (
+ ACPI_PARSE_OBJECT *Op,
+ ASL_METHOD_INFO *MethodInfo)
+{
+ const ACPI_OPCODE_INFO *OpInfo;
+
+
+ /* We don't care about actual method declarations */
+
+ if (Op->Asl.AmlOpcode == AML_METHOD_OP)
+ {
+ return;
+ }
+
+ /* Determine if we are creating a named object */
+
+ OpInfo = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode);
+ if (OpInfo->Class == AML_CLASS_NAMED_OBJECT)
+ {
+ /*
+ * If we have a named object created within a non-serialized method,
+ * emit a remark that the method should be serialized.
+ *
+ * Reason: If a thread blocks within the method for any reason, and
+ * another thread enters the method, the method will fail because an
+ * attempt will be made to create the same object twice.
+ */
+ if (MethodInfo && !MethodInfo->ShouldBeSerialized)
+ {
+ AslError (ASL_REMARK, ASL_MSG_SERIALIZED_REQUIRED, MethodInfo->Op,
+ "due to creation of named objects within");
+
+ /* Emit message only ONCE per method */
+
+ MethodInfo->ShouldBeSerialized = TRUE;
+ }
+ }
+}
+
+
+/*******************************************************************************
+ *
* FUNCTION: MtMethodAnalysisWalkEnd
*
* PARAMETERS: ASL_WALK_CALLBACK
@@ -446,6 +509,7 @@ MtMethodAnalysisWalkEnd (
{
case PARSEOP_METHOD:
case PARSEOP_RETURN:
+
if (!MethodInfo)
{
printf ("No method info for method! [%s]\n", Op->Asl.Namepath);
@@ -458,6 +522,7 @@ MtMethodAnalysisWalkEnd (
break;
default:
+
break;
}
@@ -534,7 +599,6 @@ MtMethodAnalysisWalkEnd (
ACPI_FREE (MethodInfo);
break;
-
case PARSEOP_NAME:
/* Special check for two names like _L01 and _E01 in same scope */
@@ -542,7 +606,6 @@ MtMethodAnalysisWalkEnd (
ApCheckForGpeNameConflict (Op);
break;
-
case PARSEOP_RETURN:
/*
@@ -572,7 +635,6 @@ MtMethodAnalysisWalkEnd (
}
break;
-
case PARSEOP_IF:
if ((Op->Asl.CompileFlags & NODE_HAS_NO_EXIT) &&
@@ -588,7 +650,6 @@ MtMethodAnalysisWalkEnd (
}
break;
-
case PARSEOP_ELSE:
if ((Op->Asl.CompileFlags & NODE_HAS_NO_EXIT) &&
diff --git a/source/compiler/aslnamesp.c b/source/compiler/aslnamesp.c
index 724f830..3fc5f39 100644
--- a/source/compiler/aslnamesp.c
+++ b/source/compiler/aslnamesp.c
@@ -194,7 +194,6 @@ NsDoOneNamespaceObject (
ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
break;
-
case ACPI_TYPE_STRING:
FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT,
@@ -203,7 +202,9 @@ NsDoOneNamespaceObject (
break;
default:
+
/* Nothing to do for other types */
+
break;
}
@@ -228,7 +229,6 @@ NsDoOneNamespaceObject (
ACPI_FORMAT_UINT64 (Op->Asl.Value.Integer));
break;
-
case ACPI_TYPE_STRING:
if (Op->Asl.ParseOpcode == PARSEOP_NAME)
@@ -245,7 +245,6 @@ NsDoOneNamespaceObject (
Op->Asl.Value.String);
break;
-
case ACPI_TYPE_LOCAL_REGION_FIELD:
if ((Op->Asl.ParseOpcode == PARSEOP_NAMESEG) ||
@@ -258,42 +257,47 @@ NsDoOneNamespaceObject (
Op->Asl.Parent->Asl.ExtraValue, (UINT32) Op->Asl.Value.Integer);
break;
-
case ACPI_TYPE_BUFFER_FIELD:
switch (Op->Asl.ParseOpcode)
{
case PARSEOP_CREATEBYTEFIELD:
+
FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [BYTE ( 8 bit)]");
break;
case PARSEOP_CREATEDWORDFIELD:
+
FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [DWORD (32 bit)]");
break;
case PARSEOP_CREATEQWORDFIELD:
+
FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [QWORD (64 bit)]");
break;
case PARSEOP_CREATEWORDFIELD:
+
FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [WORD (16 bit)]");
break;
case PARSEOP_CREATEBITFIELD:
+
FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [BIT ( 1 bit)]");
break;
case PARSEOP_CREATEFIELD:
+
FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [Arbitrary Bit Field]");
break;
default:
+
break;
}
break;
-
case ACPI_TYPE_PACKAGE:
if (Op->Asl.ParseOpcode == PARSEOP_NAME)
@@ -316,7 +320,6 @@ NsDoOneNamespaceObject (
}
break;
-
case ACPI_TYPE_BUFFER:
if (Op->Asl.ParseOpcode == PARSEOP_NAME)
@@ -338,7 +341,6 @@ NsDoOneNamespaceObject (
}
break;
-
case ACPI_TYPE_METHOD:
FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT,
@@ -346,14 +348,12 @@ NsDoOneNamespaceObject (
Op->Asl.AmlSubtreeLength);
break;
-
case ACPI_TYPE_LOCAL_RESOURCE:
FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT,
" [Desc Offset 0x%.4X Bytes]", Node->Value);
break;
-
case ACPI_TYPE_LOCAL_RESOURCE_FIELD:
FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT,
@@ -372,9 +372,10 @@ NsDoOneNamespaceObject (
}
break;
-
default:
+
/* Nothing to do for other types */
+
break;
}
}
diff --git a/source/compiler/asloffset.c b/source/compiler/asloffset.c
index 190b92a..25e5b0f 100644
--- a/source/compiler/asloffset.c
+++ b/source/compiler/asloffset.c
@@ -58,7 +58,6 @@ LsEmitOffsetTableEntry (
UINT32 FileId,
ACPI_NAMESPACE_NODE *Node,
UINT32 Offset,
- UINT32 Length,
char *OpName,
UINT64 Value,
UINT8 AmlOpcode);
@@ -77,7 +76,9 @@ LsEmitOffsetTableEntry (
* Three types of objects are currently emitted to the offset table:
* 1) Tagged (named) resource descriptors
* 2) Named integer objects with constant integer values
- * 3) Operation Regions that have constant Offset (address) parameters
+ * 3) Named package objects
+ * 4) Operation Regions that have constant Offset (address) parameters
+ * 5) Control methods
*
* The offset table allows the BIOS to dynamically update the values of these
* objects at boot time.
@@ -94,7 +95,7 @@ LsAmlOffsetWalk (
ACPI_NAMESPACE_NODE *Node;
UINT32 Length;
UINT32 OffsetOfOpcode;
- ACPI_PARSE_OBJECT *AddressOp;
+ ACPI_PARSE_OBJECT *NextOp;
/* Ignore actual data blocks for resource descriptors */
@@ -119,13 +120,17 @@ LsAmlOffsetWalk (
(Op->Asl.CompileFlags & NODE_IS_RESOURCE_DESC))
{
LsEmitOffsetTableEntry (FileId, Node, Gbl_CurrentAmlOffset,
- Op->Asl.FinalAmlLength, Op->Asl.ParseOpName, 0, Op->Asl.Extra);
+ Op->Asl.ParseOpName, 0, Op->Asl.Extra);
+ Gbl_CurrentAmlOffset += Op->Asl.FinalAmlLength;
+ return (AE_OK);
}
- /* Named object -- Name (NameString, DataRefObject) */
-
- else if (Op->Asl.AmlOpcode == AML_NAME_OP)
+ switch (Op->Asl.AmlOpcode)
{
+ case AML_NAME_OP:
+
+ /* Named object -- Name (NameString, DataRefObject) */
+
if (!Op->Asl.Child)
{
FlPrintFile (FileId, "%s NO CHILD!\n", MsgBuffer);
@@ -154,39 +159,50 @@ LsAmlOffsetWalk (
case AML_DWORD_OP:
case AML_QWORD_OP:
- /* The +1/-1 is to handle the integer size prefix (opcode) */
+ /* The +1 is to handle the integer size prefix (opcode) */
LsEmitOffsetTableEntry (FileId, Node,
(Gbl_CurrentAmlOffset + OffsetOfOpcode + 1),
- (Op->Asl.FinalAmlLength - 1), Op->Asl.ParseOpName,
- Op->Asl.Value.Integer, (UINT8) Op->Asl.AmlOpcode);
+ Op->Asl.ParseOpName, Op->Asl.Value.Integer,
+ (UINT8) Op->Asl.AmlOpcode);
break;
- default:
+ case AML_PACKAGE_OP:
+ case AML_VAR_PACKAGE_OP:
+
+ NextOp = Op->Asl.Child;
+
+ LsEmitOffsetTableEntry (FileId, Node,
+ (Gbl_CurrentAmlOffset + OffsetOfOpcode),
+ Op->Asl.ParseOpName,
+ NextOp->Asl.Value.Integer,
+ (UINT8) Op->Asl.AmlOpcode);
break;
+
+ default:
+ break;
}
Gbl_CurrentAmlOffset += Length;
return (AE_OK);
- }
- /* OperationRegion (NameString, RegionSpace, RegionOffset, RegionLength) */
+ case AML_REGION_OP:
+
+ /* OperationRegion (NameString, RegionSpace, RegionOffset, RegionLength) */
- else if (Op->Asl.AmlOpcode == AML_REGION_OP)
- {
Length = Op->Asl.FinalAmlLength;
/* Get the name/namepath node */
- AddressOp = Op->Asl.Child;
- OffsetOfOpcode = Length + AddressOp->Asl.FinalAmlLength + 1;
+ NextOp = Op->Asl.Child;
+ OffsetOfOpcode = Length + NextOp->Asl.FinalAmlLength + 1;
/* Get the SpaceId node, then the Offset (address) node */
- AddressOp = AddressOp->Asl.Next;
- AddressOp = AddressOp->Asl.Next;
+ NextOp = NextOp->Asl.Next;
+ NextOp = NextOp->Asl.Next;
- switch (AddressOp->Asl.AmlOpcode)
+ switch (NextOp->Asl.AmlOpcode)
{
/*
* We are only interested in integer constants that can be changed
@@ -198,12 +214,10 @@ LsAmlOffsetWalk (
case AML_DWORD_OP:
case AML_QWORD_OP:
- /* The +1/-1 is to handle the integer size prefix (opcode) */
-
LsEmitOffsetTableEntry (FileId, Node,
(Gbl_CurrentAmlOffset + OffsetOfOpcode + 1),
- (AddressOp->Asl.FinalAmlLength - 1), Op->Asl.ParseOpName,
- AddressOp->Asl.Value.Integer, (UINT8) AddressOp->Asl.AmlOpcode);
+ Op->Asl.ParseOpName, NextOp->Asl.Value.Integer,
+ (UINT8) NextOp->Asl.AmlOpcode);
Gbl_CurrentAmlOffset += Length;
return (AE_OK);
@@ -211,6 +225,31 @@ LsAmlOffsetWalk (
default:
break;
}
+ break;
+
+ case AML_METHOD_OP:
+
+ /* Method (Namepath, ...) */
+
+ Length = Op->Asl.FinalAmlLength;
+
+ /* Get the NameSeg/NamePath Op */
+
+ NextOp = Op->Asl.Child;
+
+ /* Point to the *last* nameseg in the namepath */
+
+ OffsetOfOpcode = NextOp->Asl.FinalAmlLength - ACPI_NAME_SIZE;
+
+ LsEmitOffsetTableEntry (FileId, Node,
+ (Gbl_CurrentAmlOffset + OffsetOfOpcode + Length),
+ Op->Asl.ParseOpName,
+ *((UINT32 *) &NextOp->Asl.Value.Buffer[OffsetOfOpcode]),
+ (UINT8) Op->Asl.AmlOpcode);
+ break;
+
+ default:
+ break;
}
Gbl_CurrentAmlOffset += Op->Asl.FinalAmlLength;
@@ -225,7 +264,6 @@ LsAmlOffsetWalk (
* PARAMETERS: FileId - ID of current listing file
* Node - Namespace node associated with the name
* Offset - Offset of the value within the AML table
- * Length - Length in bytes of the value
* OpName - Name of the AML opcode
* Value - Current value of the AML field
* AmlOpcode - Opcode associated with the field
@@ -241,7 +279,6 @@ LsEmitOffsetTableEntry (
UINT32 FileId,
ACPI_NAMESPACE_NODE *Node,
UINT32 Offset,
- UINT32 Length,
char *OpName,
UINT64 Value,
UINT8 AmlOpcode)
@@ -293,8 +330,6 @@ LsDoOffsetTableHeader (
UINT32 FileId)
{
- Gbl_CurrentAmlOffset = 0;
-
FlPrintFile (FileId,
"#ifndef __AML_OFFSET_TABLE_H\n"
"#define __AML_OFFSET_TABLE_H\n\n");
@@ -302,14 +337,41 @@ LsDoOffsetTableHeader (
FlPrintFile (FileId, "typedef struct {\n"
" char *Pathname;\n"
" unsigned long Offset;\n"
- " unsigned char AmlOpcode;\n"
- " unsigned long long AmlValue;\n"
+ " unsigned char Opcode;\n"
+ " unsigned long long Value;\n"
"} AML_OFFSET_TABLE_ENTRY;\n\n");
FlPrintFile (FileId,
"#endif /* __AML_OFFSET_TABLE_H */\n\n");
FlPrintFile (FileId,
+ "/*\n"
+ " * Information about supported object types:\n"
+ " *\n"
+ " * Integers:\n"
+ " * Offset points to the actual integer data\n"
+ " * Opcode is the integer prefix, indicates length of the data\n"
+ " * Value is the existing value in the AML\n"
+ " *\n"
+ " * Packages:\n"
+ " * Offset points to the package opcode\n"
+ " * Opcode is the package or var_package opcode\n"
+ " * Value is the package element cound\n"
+ " *\n"
+ " * Operation Regions:\n"
+ " * Offset points to the region address data\n"
+ " * Opcode is the address integer prefix, indicates length of the data\n"
+ " * Value is the existing address value in the AML\n"
+ " *\n"
+ " * Control Methods:\n"
+ " * Offset points to the first byte of the namepath\n"
+ " *\n"
+ " * Resource Descriptors:\n"
+ " * Offset points to the start of the descriptor\n"
+ " * Opcode is the descriptor type\n"
+ " */\n");
+
+ FlPrintFile (FileId,
"AML_OFFSET_TABLE_ENTRY %s_%s_OffsetTable[] =\n{\n",
Gbl_TableSignature, Gbl_TableId);
}
diff --git a/source/compiler/aslopcodes.c b/source/compiler/aslopcodes.c
index d3a49f3..332def7 100644
--- a/source/compiler/aslopcodes.c
+++ b/source/compiler/aslopcodes.c
@@ -266,6 +266,7 @@ OpcSetOptimalIntegerSize (
break;
default:
+
break;
}
}
@@ -811,7 +812,9 @@ OpcGenerateAmlOpcode (
break;
default:
+
/* Nothing to do for other opcodes */
+
break;
}
diff --git a/source/compiler/asloperands.c b/source/compiler/asloperands.c
index f281701..deb4bd4 100644
--- a/source/compiler/asloperands.c
+++ b/source/compiler/asloperands.c
@@ -298,7 +298,6 @@ OpnDoFieldCommon (
/* Nothing additional to do */
break;
-
case PARSEOP_OFFSET:
/* New offset into the field */
@@ -342,7 +341,6 @@ OpnDoFieldCommon (
}
break;
-
case PARSEOP_NAMESEG:
case PARSEOP_RESERVED_BYTES:
@@ -360,6 +358,7 @@ OpnDoFieldCommon (
case AML_FIELD_ACCESS_BYTE:
case AML_FIELD_ACCESS_BUFFER:
default:
+
MinimumLength = 8;
break;
@@ -380,7 +379,9 @@ OpnDoFieldCommon (
break;
default:
+
/* All supported field opcodes must appear above */
+
break;
}
@@ -610,7 +611,6 @@ OpnDoBuffer (
}
break;
-
case PARSEOP_STRING_LITERAL:
/*
@@ -624,18 +624,16 @@ OpnDoBuffer (
InitializerOp->Asl.ParseOpcode = PARSEOP_RAW_DATA;
break;
-
case PARSEOP_RAW_DATA:
/* Buffer nodes are already initialized (e.g. Unicode operator) */
return;
-
case PARSEOP_DEFAULT_ARG:
break;
-
default:
+
AslError (ASL_ERROR, ASL_MSG_INVALID_OPERAND, InitializerOp,
"Unknown buffer initializer opcode");
printf ("Unknown buffer initializer opcode [%s]\n",
@@ -1092,6 +1090,7 @@ OpnAttachNameToNode (
return;
default:
+
return;
}
@@ -1130,42 +1129,52 @@ OpnGenerateAmlOperands (
switch (Op->Asl.ParseOpcode)
{
case PARSEOP_DEFINITIONBLOCK:
+
OpnDoDefinitionBlock (Op);
break;
case PARSEOP_METHOD:
+
OpnDoMethod (Op);
break;
case PARSEOP_MUTEX:
+
OpnDoMutex (Op);
break;
case PARSEOP_FIELD:
+
OpnDoField (Op);
break;
case PARSEOP_INDEXFIELD:
+
OpnDoIndexField (Op);
break;
case PARSEOP_BANKFIELD:
+
OpnDoBankField (Op);
break;
case PARSEOP_BUFFER:
+
OpnDoBuffer (Op);
break;
case PARSEOP_LOADTABLE:
+
OpnDoLoadTable (Op);
break;
case PARSEOP_OPERATIONREGION:
+
OpnDoRegion (Op);
break;
case PARSEOP_RESOURCETEMPLATE:
+
RsDoResourceTemplate (Op);
break;
@@ -1173,9 +1182,11 @@ OpnGenerateAmlOperands (
case PARSEOP_NAMESTRING:
case PARSEOP_METHODCALL:
case PARSEOP_STRING_LITERAL:
+
break;
default:
+
break;
}
diff --git a/source/compiler/asloptions.c b/source/compiler/asloptions.c
new file mode 100644
index 0000000..bfb3d75
--- /dev/null
+++ b/source/compiler/asloptions.c
@@ -0,0 +1,791 @@
+/******************************************************************************
+ *
+ * Module Name: asloptions - compiler command line processing
+ *
+ *****************************************************************************/
+
+/*
+ * Copyright (C) 2000 - 2013, 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 "aslcompiler.h"
+#include "acapps.h"
+#include "acdisasm.h"
+
+#define _COMPONENT ACPI_COMPILER
+ ACPI_MODULE_NAME ("asloption")
+
+
+/* Local prototypes */
+
+static int
+AslDoOptions (
+ int argc,
+ char **argv,
+ BOOLEAN IsResponseFile);
+
+static void
+AslMergeOptionTokens (
+ char *InBuffer,
+ char *OutBuffer);
+
+static int
+AslDoResponseFile (
+ char *Filename);
+
+
+#define ASL_TOKEN_SEPARATORS " \t\n"
+#define ASL_SUPPORTED_OPTIONS "@:b|c|d^D:e:fgh^i|I:l^m:no|p:P^r:s|t|T:G^v^w|x:z"
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AslCommandLine
+ *
+ * PARAMETERS: argc/argv
+ *
+ * RETURN: Last argv index
+ *
+ * DESCRIPTION: Command line processing
+ *
+ ******************************************************************************/
+
+int
+AslCommandLine (
+ int argc,
+ char **argv)
+{
+ int BadCommandLine = 0;
+ ACPI_STATUS Status;
+
+
+ /* Minimum command line contains at least the command and an input file */
+
+ if (argc < 2)
+ {
+ printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME));
+ Usage ();
+ exit (1);
+ }
+
+ /* Process all command line options */
+
+ BadCommandLine = AslDoOptions (argc, argv, FALSE);
+
+ if (Gbl_DoTemplates)
+ {
+ Status = DtCreateTemplates (Gbl_TemplateSignature);
+ if (ACPI_FAILURE (Status))
+ {
+ exit (-1);
+ }
+ exit (1);
+ }
+
+ /* Next parameter must be the input filename */
+
+ if (!argv[AcpiGbl_Optind] &&
+ !Gbl_DisasmFlag &&
+ !Gbl_GetAllTables)
+ {
+ printf ("Missing input filename\n");
+ BadCommandLine = TRUE;
+ }
+
+ if (Gbl_DoSignon)
+ {
+ printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME));
+ if (Gbl_IgnoreErrors)
+ {
+ printf ("Ignoring all errors, forcing AML file generation\n\n");
+ }
+ }
+
+ if (BadCommandLine)
+ {
+ printf ("\n");
+ Usage ();
+ exit (1);
+ }
+
+ return (AcpiGbl_Optind);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AslDoOptions
+ *
+ * PARAMETERS: argc/argv - Standard argc/argv
+ * IsResponseFile - TRUE if executing a response file.
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Command line option processing
+ *
+ ******************************************************************************/
+
+static int
+AslDoOptions (
+ int argc,
+ char **argv,
+ BOOLEAN IsResponseFile)
+{
+ ACPI_STATUS Status;
+ UINT32 j;
+
+
+ /* Get the command line options */
+
+ while ((j = AcpiGetopt (argc, argv, ASL_SUPPORTED_OPTIONS)) != EOF) switch (j)
+ {
+ case '@': /* Begin a response file */
+
+ if (IsResponseFile)
+ {
+ printf ("Nested command files are not supported\n");
+ return (-1);
+ }
+
+ if (AslDoResponseFile (AcpiGbl_Optarg))
+ {
+ return (-1);
+ }
+ break;
+
+ case 'b': /* Debug output options */
+
+ switch (AcpiGbl_Optarg[0])
+ {
+ case 'f':
+
+ AslCompilerdebug = 1; /* same as yydebug */
+ DtParserdebug = 1;
+ PrParserdebug = 1;
+ break;
+
+ case 't':
+
+ break;
+
+ default:
+
+ printf ("Unknown option: -b%s\n", AcpiGbl_Optarg);
+ return (-1);
+ }
+
+ /* Produce debug output file */
+
+ Gbl_DebugFlag = TRUE;
+ break;
+
+ case 'c':
+
+ switch (AcpiGbl_Optarg[0])
+ {
+ case 'r':
+
+ Gbl_NoResourceChecking = TRUE;
+ break;
+
+ default:
+
+ printf ("Unknown option: -c%s\n", AcpiGbl_Optarg);
+ return (-1);
+ }
+ break;
+
+ case 'd': /* Disassembler */
+
+ switch (AcpiGbl_Optarg[0])
+ {
+ case '^':
+
+ Gbl_DoCompile = FALSE;
+ break;
+
+ case 'a':
+
+ Gbl_DoCompile = FALSE;
+ Gbl_DisassembleAll = TRUE;
+ break;
+
+ case 'b': /* Do not convert buffers to resource descriptors */
+
+ AcpiGbl_NoResourceDisassembly = TRUE;
+ break;
+
+ case 'c':
+
+ break;
+
+ default:
+
+ printf ("Unknown option: -d%s\n", AcpiGbl_Optarg);
+ return (-1);
+ }
+
+ Gbl_DisasmFlag = TRUE;
+ break;
+
+ case 'D': /* Define a symbol */
+
+ PrAddDefine (AcpiGbl_Optarg, NULL, TRUE);
+ break;
+
+ case 'e': /* External files for disassembler */
+
+ Status = AcpiDmAddToExternalFileList (AcpiGbl_Optarg);
+ if (ACPI_FAILURE (Status))
+ {
+ printf ("Could not add %s to external list\n", AcpiGbl_Optarg);
+ return (-1);
+ }
+ break;
+
+ case 'f': /* Ignore errors and force creation of aml file */
+
+ Gbl_IgnoreErrors = TRUE;
+ break;
+
+ case 'G':
+
+ Gbl_CompileGeneric = TRUE;
+ break;
+
+ case 'g': /* Get all ACPI tables */
+
+ Gbl_GetAllTables = TRUE;
+ Gbl_DoCompile = FALSE;
+ break;
+
+ case 'h':
+
+ switch (AcpiGbl_Optarg[0])
+ {
+ case '^':
+
+ Usage ();
+ exit (0);
+
+ case 'c':
+
+ UtDisplayConstantOpcodes ();
+ exit (0);
+
+ case 'f':
+
+ AslFilenameHelp ();
+ exit (0);
+
+ case 'r':
+
+ /* reserved names */
+
+ ApDisplayReservedNames ();
+ exit (0);
+
+ case 't':
+
+ UtDisplaySupportedTables ();
+ exit (0);
+
+ default:
+
+ printf ("Unknown option: -h%s\n", AcpiGbl_Optarg);
+ return (-1);
+ }
+
+ case 'I': /* Add an include file search directory */
+
+ FlAddIncludeDirectory (AcpiGbl_Optarg);
+ break;
+
+ case 'i': /* Output AML as an include file */
+
+ switch (AcpiGbl_Optarg[0])
+ {
+ case 'a':
+
+ /* Produce assembly code include file */
+
+ Gbl_AsmIncludeOutputFlag = TRUE;
+ break;
+
+ case 'c':
+
+ /* Produce C include file */
+
+ Gbl_C_IncludeOutputFlag = TRUE;
+ break;
+
+ case 'n':
+
+ /* Compiler/Disassembler: Ignore the NOOP operator */
+
+ AcpiGbl_IgnoreNoopOperator = TRUE;
+ break;
+
+ default:
+
+ printf ("Unknown option: -i%s\n", AcpiGbl_Optarg);
+ return (-1);
+ }
+ break;
+
+ case 'l': /* Listing files */
+
+ switch (AcpiGbl_Optarg[0])
+ {
+ case '^':
+
+ /* Produce listing file (Mixed source/aml) */
+
+ Gbl_ListingFlag = TRUE;
+ break;
+
+ case 'i':
+
+ /* Produce preprocessor output file */
+
+ Gbl_PreprocessorOutputFlag = TRUE;
+ break;
+
+ case 'n':
+
+ /* Produce namespace file */
+
+ Gbl_NsOutputFlag = TRUE;
+ break;
+
+ case 's':
+
+ /* Produce combined source file */
+
+ Gbl_SourceOutputFlag = TRUE;
+ break;
+
+ default:
+
+ printf ("Unknown option: -l%s\n", AcpiGbl_Optarg);
+ return (-1);
+ }
+ break;
+
+ case 'm': /* Set line buffer size */
+
+ Gbl_LineBufferSize = (UINT32) strtoul (AcpiGbl_Optarg, NULL, 0) * 1024;
+ if (Gbl_LineBufferSize < ASL_DEFAULT_LINE_BUFFER_SIZE)
+ {
+ Gbl_LineBufferSize = ASL_DEFAULT_LINE_BUFFER_SIZE;
+ }
+ printf ("Line Buffer Size: %u\n", Gbl_LineBufferSize);
+ break;
+
+ case 'n': /* Parse only */
+
+ Gbl_ParseOnlyFlag = TRUE;
+ break;
+
+ case 'o': /* Control compiler AML optimizations */
+
+ switch (AcpiGbl_Optarg[0])
+ {
+ case 'a':
+
+ /* Disable all optimizations */
+
+ Gbl_FoldConstants = FALSE;
+ Gbl_IntegerOptimizationFlag = FALSE;
+ Gbl_ReferenceOptimizationFlag = FALSE;
+ break;
+
+ case 'f':
+
+ /* Disable folding on "normal" expressions */
+
+ Gbl_FoldConstants = FALSE;
+ break;
+
+ case 'i':
+
+ /* Disable integer optimization to constants */
+
+ Gbl_IntegerOptimizationFlag = FALSE;
+ break;
+
+ case 'n':
+
+ /* Disable named reference optimization */
+
+ Gbl_ReferenceOptimizationFlag = FALSE;
+ break;
+
+ case 't':
+
+ /* Display compile time(s) */
+
+ Gbl_CompileTimesFlag = TRUE;
+ break;
+
+ default:
+
+ printf ("Unknown option: -c%s\n", AcpiGbl_Optarg);
+ return (-1);
+ }
+ break;
+
+ case 'P': /* Preprocessor options */
+
+ switch (AcpiGbl_Optarg[0])
+ {
+ case '^': /* Proprocess only, emit (.i) file */
+
+ Gbl_PreprocessOnly = TRUE;
+ Gbl_PreprocessorOutputFlag = TRUE;
+ break;
+
+ case 'n': /* Disable preprocessor */
+
+ Gbl_PreprocessFlag = FALSE;
+ break;
+
+ default:
+
+ printf ("Unknown option: -P%s\n", AcpiGbl_Optarg);
+ return (-1);
+ }
+ break;
+
+ case 'p': /* Override default AML output filename */
+
+ Gbl_OutputFilenamePrefix = AcpiGbl_Optarg;
+ Gbl_UseDefaultAmlFilename = FALSE;
+ break;
+
+ case 'r': /* Override revision found in table header */
+
+ Gbl_RevisionOverride = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0);
+ break;
+
+ case 's': /* Create AML in a source code file */
+
+ switch (AcpiGbl_Optarg[0])
+ {
+ case 'a':
+
+ /* Produce assembly code output file */
+
+ Gbl_AsmOutputFlag = TRUE;
+ break;
+
+ case 'c':
+
+ /* Produce C hex output file */
+
+ Gbl_C_OutputFlag = TRUE;
+ break;
+
+ case 'o':
+
+ /* Produce AML offset table in C */
+
+ Gbl_C_OffsetTableFlag = TRUE;
+ break;
+
+ default:
+
+ printf ("Unknown option: -s%s\n", AcpiGbl_Optarg);
+ return (-1);
+ }
+ break;
+
+ case 't': /* Produce hex table output file */
+
+ switch (AcpiGbl_Optarg[0])
+ {
+ case 'a':
+
+ Gbl_HexOutputFlag = HEX_OUTPUT_ASM;
+ break;
+
+ case 'c':
+
+ Gbl_HexOutputFlag = HEX_OUTPUT_C;
+ break;
+
+ case 's':
+
+ Gbl_HexOutputFlag = HEX_OUTPUT_ASL;
+ break;
+
+ default:
+
+ printf ("Unknown option: -t%s\n", AcpiGbl_Optarg);
+ return (-1);
+ }
+ break;
+
+ case 'T': /* Create a ACPI table template file */
+
+ Gbl_DoTemplates = TRUE;
+ Gbl_TemplateSignature = AcpiGbl_Optarg;
+ break;
+
+ case 'v': /* Version and verbosity settings */
+
+ switch (AcpiGbl_Optarg[0])
+ {
+ case '^':
+
+ printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME));
+ exit (0);
+
+ case 'a':
+
+ /* Disable All error/warning messages */
+
+ Gbl_NoErrors = TRUE;
+ break;
+
+ case 'i':
+ /*
+ * Support for integrated development environment(s).
+ *
+ * 1) No compiler signon
+ * 2) Send stderr messages to stdout
+ * 3) Less verbose error messages (single line only for each)
+ * 4) Error/warning messages are formatted appropriately to
+ * be recognized by MS Visual Studio
+ */
+ Gbl_VerboseErrors = FALSE;
+ Gbl_DoSignon = FALSE;
+ Gbl_Files[ASL_FILE_STDERR].Handle = stdout;
+ break;
+
+ case 'o':
+
+ Gbl_DisplayOptimizations = TRUE;
+ break;
+
+ case 'r':
+
+ Gbl_DisplayRemarks = FALSE;
+ break;
+
+ case 's':
+
+ Gbl_DoSignon = FALSE;
+ break;
+
+ case 't':
+
+ Gbl_VerboseTemplates = TRUE;
+ break;
+
+ case 'w':
+
+ /* Get the required argument */
+
+ if (AcpiGetoptArgument (argc, argv))
+ {
+ return (-1);
+ }
+
+ Status = AslDisableException (AcpiGbl_Optarg);
+ if (ACPI_FAILURE (Status))
+ {
+ return (-1);
+ }
+ break;
+
+ default:
+
+ printf ("Unknown option: -v%s\n", AcpiGbl_Optarg);
+ return (-1);
+ }
+ break;
+
+ case 'w': /* Set warning levels */
+
+ switch (AcpiGbl_Optarg[0])
+ {
+ case '1':
+
+ Gbl_WarningLevel = ASL_WARNING;
+ break;
+
+ case '2':
+
+ Gbl_WarningLevel = ASL_WARNING2;
+ break;
+
+ case '3':
+
+ Gbl_WarningLevel = ASL_WARNING3;
+ break;
+
+ case 'e':
+
+ Gbl_WarningsAsErrors = TRUE;
+ break;
+
+ default:
+
+ printf ("Unknown option: -w%s\n", AcpiGbl_Optarg);
+ return (-1);
+ }
+ break;
+
+ case 'x': /* Set debug print output level */
+
+ AcpiDbgLevel = strtoul (AcpiGbl_Optarg, NULL, 16);
+ break;
+
+ case 'z':
+
+ Gbl_UseOriginalCompilerId = TRUE;
+ break;
+
+ default:
+
+ return (-1);
+ }
+
+ return (0);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AslMergeOptionTokens
+ *
+ * PARAMETERS: InBuffer - Input containing an option string
+ * OutBuffer - Merged output buffer
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Remove all whitespace from an option string.
+ *
+ ******************************************************************************/
+
+static void
+AslMergeOptionTokens (
+ char *InBuffer,
+ char *OutBuffer)
+{
+ char *Token;
+
+
+ *OutBuffer = 0;
+
+ Token = strtok (InBuffer, ASL_TOKEN_SEPARATORS);
+ while (Token)
+ {
+ strcat (OutBuffer, Token);
+ Token = strtok (NULL, ASL_TOKEN_SEPARATORS);
+ }
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AslDoResponseFile
+ *
+ * PARAMETERS: Filename - Name of the response file
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Open a response file and process all options within.
+ *
+ ******************************************************************************/
+
+static int
+AslDoResponseFile (
+ char *Filename)
+{
+ char *argv = StringBuffer2;
+ FILE *ResponseFile;
+ int OptStatus = 0;
+ int Opterr;
+ int Optind;
+
+
+ ResponseFile = fopen (Filename, "r");
+ if (!ResponseFile)
+ {
+ printf ("Could not open command file %s, %s\n",
+ Filename, strerror (errno));
+ return (-1);
+ }
+
+ /* Must save the current GetOpt globals */
+
+ Opterr = AcpiGbl_Opterr;
+ Optind = AcpiGbl_Optind;
+
+ /*
+ * Process all lines in the response file. There must be one complete
+ * option per line
+ */
+ while (fgets (StringBuffer, ASL_MSG_BUFFER_SIZE, ResponseFile))
+ {
+ /* Compress all tokens, allowing us to use a single argv entry */
+
+ AslMergeOptionTokens (StringBuffer, StringBuffer2);
+
+ /* Process the option */
+
+ AcpiGbl_Opterr = 0;
+ AcpiGbl_Optind = 0;
+
+ OptStatus = AslDoOptions (1, &argv, TRUE);
+ if (OptStatus)
+ {
+ printf ("Invalid option in command file %s: %s\n",
+ Filename, StringBuffer);
+ break;
+ }
+ }
+
+ /* Restore the GetOpt globals */
+
+ AcpiGbl_Opterr = Opterr;
+ AcpiGbl_Optind = Optind;
+
+ fclose (ResponseFile);
+ return (OptStatus);
+}
diff --git a/source/compiler/aslpredef.c b/source/compiler/aslpredef.c
index 3895681..60b5269 100644
--- a/source/compiler/aslpredef.c
+++ b/source/compiler/aslpredef.c
@@ -310,7 +310,6 @@ ApCheckPredefinedReturnValue (
break;
default:
-
/*
* All other ops are very difficult or impossible to typecheck at
* compile time. These include all Localx, Argx, and method
@@ -379,6 +378,7 @@ ApCheckForPredefinedObject (
return;
default:
+
break;
}
@@ -624,33 +624,53 @@ ApCheckObjectType (
case PARSEOP_ONE:
case PARSEOP_ONES:
case PARSEOP_INTEGER:
+
ReturnBtype = ACPI_RTYPE_INTEGER;
TypeName = "Integer";
break;
case PARSEOP_STRING_LITERAL:
+
ReturnBtype = ACPI_RTYPE_STRING;
TypeName = "String";
break;
case PARSEOP_BUFFER:
+
ReturnBtype = ACPI_RTYPE_BUFFER;
TypeName = "Buffer";
break;
case PARSEOP_PACKAGE:
case PARSEOP_VAR_PACKAGE:
+
ReturnBtype = ACPI_RTYPE_PACKAGE;
TypeName = "Package";
break;
case PARSEOP_NAMESEG:
case PARSEOP_NAMESTRING:
+ /*
+ * Ignore any named references within a package object.
+ *
+ * For Package objects, references are allowed instead of any of the
+ * standard data types (Integer/String/Buffer/Package). These
+ * references are resolved at runtime. NAMESEG and NAMESTRING are
+ * impossible to typecheck at compile time because the type of
+ * any named object can be changed at runtime (for example,
+ * CopyObject will change the type of the target object).
+ */
+ if (PackageIndex != ACPI_NOT_PACKAGE_ELEMENT)
+ {
+ return (AE_OK);
+ }
+
ReturnBtype = ACPI_RTYPE_REFERENCE;
TypeName = "Reference";
break;
default:
+
/* Not one of the supported object types */
TypeName = UtGetOpName (Op->Asl.ParseOpcode);
diff --git a/source/compiler/aslresource.c b/source/compiler/aslresource.c
index 272f9b0..d7f829f 100644
--- a/source/compiler/aslresource.c
+++ b/source/compiler/aslresource.c
@@ -319,6 +319,7 @@ RsLargeAddressCheck (
case ACPI_RESOURCE_FLAG_MIF:
case ACPI_RESOURCE_FLAG_MAF:
default:
+
AslError (ASL_ERROR, ASL_MSG_INVALID_ADDR_FLAGS, LengthOp, NULL);
}
}
@@ -364,6 +365,7 @@ RsLargeAddressCheck (
case (ACPI_RESOURCE_FLAG_MIF | ACPI_RESOURCE_FLAG_MAF):
default:
+
AslError (ASL_ERROR, ASL_MSG_INVALID_ADDR_FLAGS, LengthOp, NULL);
}
}
@@ -655,45 +657,54 @@ RsDoOneResourceDescriptor (
switch (DescriptorTypeOp->Asl.ParseOpcode)
{
case PARSEOP_DMA:
+
Rnode = RsDoDmaDescriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_FIXEDDMA:
+
Rnode = RsDoFixedDmaDescriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_DWORDIO:
+
Rnode = RsDoDwordIoDescriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_DWORDMEMORY:
+
Rnode = RsDoDwordMemoryDescriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_DWORDSPACE:
+
Rnode = RsDoDwordSpaceDescriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_ENDDEPENDENTFN:
+
switch (*State)
{
case ACPI_RSTATE_NORMAL:
+
AslError (ASL_ERROR, ASL_MSG_MISSING_STARTDEPENDENT,
DescriptorTypeOp, NULL);
break;
case ACPI_RSTATE_START_DEPENDENT:
+
AslError (ASL_ERROR, ASL_MSG_DEPENDENT_NESTING,
DescriptorTypeOp, NULL);
break;
case ACPI_RSTATE_DEPENDENT_LIST:
default:
+
break;
}
@@ -703,89 +714,107 @@ RsDoOneResourceDescriptor (
break;
case PARSEOP_ENDTAG:
+
Rnode = RsDoEndTagDescriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_EXTENDEDIO:
+
Rnode = RsDoExtendedIoDescriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_EXTENDEDMEMORY:
+
Rnode = RsDoExtendedMemoryDescriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_EXTENDEDSPACE:
+
Rnode = RsDoExtendedSpaceDescriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_FIXEDIO:
+
Rnode = RsDoFixedIoDescriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_INTERRUPT:
+
Rnode = RsDoInterruptDescriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_IO:
+
Rnode = RsDoIoDescriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_IRQ:
+
Rnode = RsDoIrqDescriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_IRQNOFLAGS:
+
Rnode = RsDoIrqNoFlagsDescriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_MEMORY24:
+
Rnode = RsDoMemory24Descriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_MEMORY32:
+
Rnode = RsDoMemory32Descriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_MEMORY32FIXED:
+
Rnode = RsDoMemory32FixedDescriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_QWORDIO:
+
Rnode = RsDoQwordIoDescriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_QWORDMEMORY:
+
Rnode = RsDoQwordMemoryDescriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_QWORDSPACE:
+
Rnode = RsDoQwordSpaceDescriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_REGISTER:
+
Rnode = RsDoGeneralRegisterDescriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_STARTDEPENDENTFN:
+
switch (*State)
{
case ACPI_RSTATE_START_DEPENDENT:
+
AslError (ASL_ERROR, ASL_MSG_DEPENDENT_NESTING,
DescriptorTypeOp, NULL);
break;
@@ -793,6 +822,7 @@ RsDoOneResourceDescriptor (
case ACPI_RSTATE_NORMAL:
case ACPI_RSTATE_DEPENDENT_LIST:
default:
+
break;
}
@@ -803,9 +833,11 @@ RsDoOneResourceDescriptor (
break;
case PARSEOP_STARTDEPENDENTFN_NOPRI:
+
switch (*State)
{
case ACPI_RSTATE_START_DEPENDENT:
+
AslError (ASL_ERROR, ASL_MSG_DEPENDENT_NESTING,
DescriptorTypeOp, NULL);
break;
@@ -813,6 +845,7 @@ RsDoOneResourceDescriptor (
case ACPI_RSTATE_NORMAL:
case ACPI_RSTATE_DEPENDENT_LIST:
default:
+
break;
}
@@ -823,60 +856,72 @@ RsDoOneResourceDescriptor (
break;
case PARSEOP_VENDORLONG:
+
Rnode = RsDoVendorLargeDescriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_VENDORSHORT:
+
Rnode = RsDoVendorSmallDescriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_WORDBUSNUMBER:
+
Rnode = RsDoWordBusNumberDescriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_WORDIO:
+
Rnode = RsDoWordIoDescriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_WORDSPACE:
+
Rnode = RsDoWordSpaceDescriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_GPIO_INT:
+
Rnode = RsDoGpioIntDescriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_GPIO_IO:
+
Rnode = RsDoGpioIoDescriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_I2C_SERIALBUS:
+
Rnode = RsDoI2cSerialBusDescriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_SPI_SERIALBUS:
+
Rnode = RsDoSpiSerialBusDescriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_UART_SERIALBUS:
+
Rnode = RsDoUartSerialBusDescriptor (DescriptorTypeOp,
CurrentByteOffset);
break;
case PARSEOP_DEFAULT_ARG:
+
/* Just ignore any of these, they are used as fillers/placeholders */
break;
default:
+
printf ("Unknown resource descriptor type [%s]\n",
DescriptorTypeOp->Asl.ParseOpName);
break;
diff --git a/source/compiler/aslrestype1i.c b/source/compiler/aslrestype1i.c
index 01fe136..d8a6bd9 100644
--- a/source/compiler/aslrestype1i.c
+++ b/source/compiler/aslrestype1i.c
@@ -245,6 +245,7 @@ RsDoFixedDmaDescriptor (
break;
default: /* Ignore any extra nodes */
+
break;
}
diff --git a/source/compiler/aslrestype2s.c b/source/compiler/aslrestype2s.c
index 4bdcef8..a7472b1 100644
--- a/source/compiler/aslrestype2s.c
+++ b/source/compiler/aslrestype2s.c
@@ -617,7 +617,6 @@ RsDoGpioIoDescriptor (
break;
case 9: /* Vendor Data (Optional - Buffer of BYTEs) (_VEN) */
-
/*
* Always set the VendorOffset even if there is no Vendor Data.
* This field is required in order to calculate the length
@@ -812,6 +811,7 @@ RsDoI2cSerialBusDescriptor (
break;
default: /* Ignore any extra nodes */
+
break;
}
@@ -986,6 +986,7 @@ RsDoSpiSerialBusDescriptor (
break;
default: /* Ignore any extra nodes */
+
break;
}
@@ -1177,6 +1178,7 @@ RsDoUartSerialBusDescriptor (
break;
default: /* Ignore any extra nodes */
+
break;
}
diff --git a/source/compiler/aslstartup.c b/source/compiler/aslstartup.c
index ad9a2bb..0168fd0 100644
--- a/source/compiler/aslstartup.c
+++ b/source/compiler/aslstartup.c
@@ -534,6 +534,7 @@ AslDoOneFile (
return (AE_ERROR);
default:
+
printf ("Unknown file type %X\n", Gbl_FileType);
return (AE_ERROR);
}
diff --git a/source/compiler/aslsupport.l b/source/compiler/aslsupport.l
index 52389ee..e7d2b1f 100644
--- a/source/compiler/aslsupport.l
+++ b/source/compiler/aslsupport.l
@@ -395,16 +395,19 @@ count (
switch (Type)
{
case 2:
+
TotalKeywords++;
TotalNamedObjects++;
break;
case 3:
+
TotalKeywords++;
TotalExecutableOpcodes++;
break;
default:
+
break;
}
@@ -594,6 +597,7 @@ DoCharacter:
goto CompletedString;
default:
+
break;
}
break;
@@ -605,34 +609,42 @@ DoCharacter:
switch (StringChar)
{
case 'a':
+
StringChar = 0x07; /* BELL */
break;
case 'b':
+
StringChar = 0x08; /* BACKSPACE */
break;
case 'f':
+
StringChar = 0x0C; /* FORMFEED */
break;
case 'n':
+
StringChar = 0x0A; /* LINEFEED */
break;
case 'r':
+
StringChar = 0x0D; /* CARRIAGE RETURN*/
break;
case 't':
+
StringChar = 0x09; /* HORIZONTAL TAB */
break;
case 'v':
+
StringChar = 0x0B; /* VERTICAL TAB */
break;
case 'x':
+
State = ASL_HEX_CONSTANT;
i = 0;
continue;
@@ -640,6 +652,7 @@ DoCharacter:
case '\'': /* Single Quote */
case '\"': /* Double Quote */
case '\\': /* Backslash */
+
break;
default:
@@ -709,7 +722,6 @@ DoCharacter:
i++;
continue;
-
case ASL_HEX_CONSTANT:
/* Up to two hex digits allowed */
@@ -755,6 +767,7 @@ DoCharacter:
continue;
default:
+
break;
}
diff --git a/source/compiler/asltransform.c b/source/compiler/asltransform.c
index 4617713..c1a2526 100644
--- a/source/compiler/asltransform.c
+++ b/source/compiler/asltransform.c
@@ -299,15 +299,16 @@ TrTransformSubtree (
switch (Op->Asl.ParseOpcode)
{
case PARSEOP_DEFINITIONBLOCK:
+
TrDoDefinitionBlock (Op);
break;
case PARSEOP_SWITCH:
+
TrDoSwitch (Op);
break;
case PARSEOP_METHOD:
-
/*
* TBD: Zero the tempname (_T_x) count. Probably shouldn't be a global,
* however
@@ -316,7 +317,9 @@ TrTransformSubtree (
break;
default:
+
/* Nothing to do here for other opcodes */
+
break;
}
}
@@ -700,18 +703,21 @@ TrDoSwitch (
switch (Btype)
{
case ACPI_BTYPE_INTEGER:
+
NewOp2->Asl.Next = TrCreateValuedLeafNode (PARSEOP_ZERO,
(UINT64) 0);
TrAmlInitLineNumbers (NewOp2->Asl.Next, NewOp);
break;
case ACPI_BTYPE_STRING:
+
NewOp2->Asl.Next = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL,
(UINT64) ACPI_TO_INTEGER (""));
TrAmlInitLineNumbers (NewOp2->Asl.Next, NewOp);
break;
case ACPI_BTYPE_BUFFER:
+
(void) TrLinkPeerNode (NewOp2, TrCreateValuedLeafNode (PARSEOP_BUFFER,
(UINT64) 0));
Next = NewOp2->Asl.Next;
@@ -728,6 +734,7 @@ TrDoSwitch (
break;
default:
+
break;
}
diff --git a/source/compiler/asltree.c b/source/compiler/asltree.c
index f275061..ca88071 100644
--- a/source/compiler/asltree.c
+++ b/source/compiler/asltree.c
@@ -185,20 +185,24 @@ TrUpdateNode (
switch (ParseOpcode)
{
case PARSEOP_BYTECONST:
+
Op->Asl.Value.Integer = ACPI_UINT8_MAX;
break;
case PARSEOP_WORDCONST:
+
Op->Asl.Value.Integer = ACPI_UINT16_MAX;
break;
case PARSEOP_DWORDCONST:
+
Op->Asl.Value.Integer = ACPI_UINT32_MAX;
break;
/* Don't need to do the QWORD case */
default:
+
/* Don't care about others */
break;
}
@@ -214,22 +218,27 @@ TrUpdateNode (
switch (ParseOpcode)
{
case PARSEOP_BYTECONST:
+
UtCheckIntegerRange (Op, 0x00, ACPI_UINT8_MAX);
Op->Asl.Value.Integer &= ACPI_UINT8_MAX;
break;
case PARSEOP_WORDCONST:
+
UtCheckIntegerRange (Op, 0x00, ACPI_UINT16_MAX);
Op->Asl.Value.Integer &= ACPI_UINT16_MAX;
break;
case PARSEOP_DWORDCONST:
+
UtCheckIntegerRange (Op, 0x00, ACPI_UINT32_MAX);
Op->Asl.Value.Integer &= ACPI_UINT32_MAX;
break;
default:
+
/* Don't care about others, don't need to check QWORD */
+
break;
}
@@ -257,54 +266,71 @@ TrGetNodeFlagName (
switch (Flags)
{
case NODE_VISITED:
+
return ("NODE_VISITED");
case NODE_AML_PACKAGE:
+
return ("NODE_AML_PACKAGE");
case NODE_IS_TARGET:
+
return ("NODE_IS_TARGET");
case NODE_IS_RESOURCE_DESC:
+
return ("NODE_IS_RESOURCE_DESC");
case NODE_IS_RESOURCE_FIELD:
+
return ("NODE_IS_RESOURCE_FIELD");
case NODE_HAS_NO_EXIT:
+
return ("NODE_HAS_NO_EXIT");
case NODE_IF_HAS_NO_EXIT:
+
return ("NODE_IF_HAS_NO_EXIT");
case NODE_NAME_INTERNALIZED:
+
return ("NODE_NAME_INTERNALIZED");
case NODE_METHOD_NO_RETVAL:
+
return ("NODE_METHOD_NO_RETVAL");
case NODE_METHOD_SOME_NO_RETVAL:
+
return ("NODE_METHOD_SOME_NO_RETVAL");
case NODE_RESULT_NOT_USED:
+
return ("NODE_RESULT_NOT_USED");
case NODE_METHOD_TYPED:
+
return ("NODE_METHOD_TYPED");
case NODE_COMPILE_TIME_CONST:
+
return ("NODE_COMPILE_TIME_CONST");
case NODE_IS_TERM_ARG:
+
return ("NODE_IS_TERM_ARG");
case NODE_WAS_ONES_OP:
+
return ("NODE_WAS_ONES_OP");
case NODE_IS_NAME_DECLARATION:
+
return ("NODE_IS_NAME_DECLARATION");
default:
+
return ("Multiple Flags (or unknown flag) set");
}
}
@@ -470,11 +496,13 @@ TrCreateConstantLeafNode (
switch (ParseOpcode)
{
case PARSEOP___LINE__:
+
Op = TrAllocateNode (PARSEOP_INTEGER);
Op->Asl.Value.Integer = Op->Asl.LineNumber;
break;
case PARSEOP___PATH__:
+
Op = TrAllocateNode (PARSEOP_STRING_LITERAL);
/* Op.Asl.Filename contains the full pathname to the file */
@@ -483,6 +511,7 @@ TrCreateConstantLeafNode (
break;
case PARSEOP___FILE__:
+
Op = TrAllocateNode (PARSEOP_STRING_LITERAL);
/* Get the simple filename from the full path */
@@ -493,6 +522,7 @@ TrCreateConstantLeafNode (
break;
case PARSEOP___DATE__:
+
Op = TrAllocateNode (PARSEOP_STRING_LITERAL);
/* Get a copy of the current time */
@@ -507,6 +537,7 @@ TrCreateConstantLeafNode (
break;
default: /* This would be an internal error */
+
return (NULL);
}
@@ -551,30 +582,37 @@ TrCreateValuedLeafNode (
switch (ParseOpcode)
{
case PARSEOP_STRING_LITERAL:
+
DbgPrint (ASL_PARSE_OUTPUT, "STRING->%s", Value);
break;
case PARSEOP_NAMESEG:
+
DbgPrint (ASL_PARSE_OUTPUT, "NAMESEG->%s", Value);
break;
case PARSEOP_NAMESTRING:
+
DbgPrint (ASL_PARSE_OUTPUT, "NAMESTRING->%s", Value);
break;
case PARSEOP_EISAID:
+
DbgPrint (ASL_PARSE_OUTPUT, "EISAID->%s", Value);
break;
case PARSEOP_METHOD:
+
DbgPrint (ASL_PARSE_OUTPUT, "METHOD");
break;
case PARSEOP_INTEGER:
+
DbgPrint (ASL_PARSE_OUTPUT, "INTEGER");
break;
default:
+
break;
}
@@ -628,20 +666,25 @@ TrCreateNode (
switch (ParseOpcode)
{
case PARSEOP_DEFINITIONBLOCK:
+
RootNode = Op;
DbgPrint (ASL_PARSE_OUTPUT, "DEFINITION_BLOCK (Tree Completed)->");
break;
case PARSEOP_OPERATIONREGION:
+
DbgPrint (ASL_PARSE_OUTPUT, "OPREGION->");
break;
case PARSEOP_OR:
+
DbgPrint (ASL_PARSE_OUTPUT, "OR->");
break;
default:
+
/* Nothing to do for other opcodes */
+
break;
}
@@ -746,20 +789,25 @@ TrLinkChildren (
switch (Op->Asl.ParseOpcode)
{
case PARSEOP_DEFINITIONBLOCK:
+
RootNode = Op;
DbgPrint (ASL_PARSE_OUTPUT, "DEFINITION_BLOCK (Tree Completed)->");
break;
case PARSEOP_OPERATIONREGION:
+
DbgPrint (ASL_PARSE_OUTPUT, "OPREGION->");
break;
case PARSEOP_OR:
+
DbgPrint (ASL_PARSE_OUTPUT, "OR->");
break;
default:
+
/* Nothing to do for other opcodes */
+
break;
}
@@ -1106,7 +1154,6 @@ TrWalkParseTree (
}
break;
-
case ASL_WALK_VISIT_UPWARD:
while (Op)
@@ -1161,7 +1208,6 @@ TrWalkParseTree (
}
break;
-
case ASL_WALK_VISIT_TWICE:
while (Op)
diff --git a/source/compiler/asltypes.h b/source/compiler/asltypes.h
index 6f2fb88..5ca17b3 100644
--- a/source/compiler/asltypes.h
+++ b/source/compiler/asltypes.h
@@ -81,16 +81,17 @@
typedef struct asl_method_info
{
- UINT8 NumArguments;
- UINT8 LocalInitialized[ACPI_METHOD_NUM_LOCALS];
- UINT8 ArgInitialized[ACPI_METHOD_NUM_ARGS];
+ ACPI_PARSE_OBJECT *Op;
+ struct asl_method_info *Next;
UINT32 ValidArgTypes[ACPI_METHOD_NUM_ARGS];
UINT32 ValidReturnTypes;
UINT32 NumReturnNoValue;
UINT32 NumReturnWithValue;
- ACPI_PARSE_OBJECT *Op;
- struct asl_method_info *Next;
+ UINT8 NumArguments;
+ UINT8 LocalInitialized[ACPI_METHOD_NUM_LOCALS];
+ UINT8 ArgInitialized[ACPI_METHOD_NUM_ARGS];
UINT8 HasBeenTyped;
+ UINT8 ShouldBeSerialized;
} ASL_METHOD_INFO;
diff --git a/source/compiler/aslutils.c b/source/compiler/aslutils.c
index a3690b1..8174eeb 100644
--- a/source/compiler/aslutils.c
+++ b/source/compiler/aslutils.c
@@ -956,6 +956,7 @@ UtStrtoul64 (
case 8:
case 10:
case 16:
+
break;
default:
@@ -1090,19 +1091,24 @@ ErrorExit:
switch (Base)
{
case 8:
+
Status = AE_BAD_OCTAL_CONSTANT;
break;
case 10:
+
Status = AE_BAD_DECIMAL_CONSTANT;
break;
case 16:
+
Status = AE_BAD_HEX_CONSTANT;
break;
default:
+
/* Base validated above */
+
break;
}
diff --git a/source/compiler/aslwalks.c b/source/compiler/aslwalks.c
index 20adf5e..5abda23 100644
--- a/source/compiler/aslwalks.c
+++ b/source/compiler/aslwalks.c
@@ -122,6 +122,7 @@ AnMethodTypingWalkEnd (
break;
default:
+
break;
}
@@ -176,6 +177,7 @@ AnOperandTypecheckWalkEnd (
return (AE_OK);
default:
+
break;
}
@@ -252,6 +254,7 @@ AnOperandTypecheckWalkEnd (
return (AE_OK);
default:
+
break;
}
@@ -379,11 +382,13 @@ AnOperandTypecheckWalkEnd (
break;
case PARSEOP_DEBUG:
+
break;
case PARSEOP_REFOF:
case PARSEOP_INDEX:
default:
+
break;
}
@@ -391,6 +396,7 @@ AnOperandTypecheckWalkEnd (
case ARGI_INTEGER:
default:
+
break;
}
@@ -434,6 +440,7 @@ AnOperandTypecheckWalkEnd (
break;
default:
+
break;
}
@@ -520,9 +527,11 @@ AnOtherSemanticAnalysisWalkBegin (
case PARSEOP_ACQUIRE:
case PARSEOP_WAIT:
case PARSEOP_LOADTABLE:
+
break;
default:
+
AslError (ASL_ERROR, ASL_MSG_RESULT_NOT_USED,
Op, Op->Asl.ExternalName);
break;
@@ -661,6 +670,7 @@ AnOtherSemanticAnalysisWalkBegin (
break;
default:
+
break;
}
diff --git a/source/compiler/aslxref.c b/source/compiler/aslxref.c
index 5c98c2a..a04fefb 100644
--- a/source/compiler/aslxref.c
+++ b/source/compiler/aslxref.c
@@ -533,27 +533,33 @@ XfNamespaceLocateBegin (
break;
case AML_CREATE_BIT_FIELD_OP:
+
FieldBitLength = 1;
break;
case AML_CREATE_BYTE_FIELD_OP:
case AML_INDEX_OP:
+
FieldBitLength = 8;
break;
case AML_CREATE_WORD_FIELD_OP:
+
FieldBitLength = 16;
break;
case AML_CREATE_DWORD_FIELD_OP:
+
FieldBitLength = 32;
break;
case AML_CREATE_QWORD_FIELD_OP:
+
FieldBitLength = 64;
break;
default:
+
FieldBitLength = 0;
break;
}
@@ -595,6 +601,7 @@ XfNamespaceLocateBegin (
break;
default:
+
break;
}
@@ -728,18 +735,22 @@ XfNamespaceLocateBegin (
case AML_FIELD_ACCESS_BYTE:
case AML_FIELD_ACCESS_BUFFER:
default:
+
MinimumLength = 1;
break;
case AML_FIELD_ACCESS_WORD:
+
MinimumLength = 2;
break;
case AML_FIELD_ACCESS_DWORD:
+
MinimumLength = 4;
break;
case AML_FIELD_ACCESS_QWORD:
+
MinimumLength = 8;
break;
}
@@ -784,6 +795,7 @@ XfNamespaceLocateBegin (
default:
/* Nothing to do for other address spaces */
+
break;
}
}
diff --git a/source/compiler/dtexpress.c b/source/compiler/dtexpress.c
index 1120d7b..a3f9c8c 100644
--- a/source/compiler/dtexpress.c
+++ b/source/compiler/dtexpress.c
@@ -127,18 +127,22 @@ DtDoOperator (
switch (Operator)
{
case EXPOP_ONES_COMPLIMENT:
+
Result = ~RightValue;
break;
case EXPOP_LOGICAL_NOT:
+
Result = !RightValue;
break;
case EXPOP_MULTIPLY:
+
Result = LeftValue * RightValue;
break;
case EXPOP_DIVIDE:
+
if (!RightValue)
{
DtError (ASL_ERROR, ASL_MSG_DIVIDE_BY_ZERO,
@@ -149,6 +153,7 @@ DtDoOperator (
break;
case EXPOP_MODULO:
+
if (!RightValue)
{
DtError (ASL_ERROR, ASL_MSG_DIVIDE_BY_ZERO,
@@ -163,58 +168,72 @@ DtDoOperator (
break;
case EXPOP_SUBTRACT:
+
Result = LeftValue - RightValue;
break;
case EXPOP_SHIFT_RIGHT:
+
Result = LeftValue >> RightValue;
break;
case EXPOP_SHIFT_LEFT:
+
Result = LeftValue << RightValue;
break;
case EXPOP_LESS:
+
Result = LeftValue < RightValue;
break;
case EXPOP_GREATER:
+
Result = LeftValue > RightValue;
break;
case EXPOP_LESS_EQUAL:
+
Result = LeftValue <= RightValue;
break;
case EXPOP_GREATER_EQUAL:
+
Result = LeftValue >= RightValue;
break;
case EXPOP_EQUAL:
+
Result = LeftValue == RightValue;
break;
case EXPOP_NOT_EQUAL:
+
Result = LeftValue != RightValue;
break;
case EXPOP_AND:
+
Result = LeftValue & RightValue;
break;
case EXPOP_XOR:
+
Result = LeftValue ^ RightValue;
break;
case EXPOP_OR:
+
Result = LeftValue | RightValue;
break;
case EXPOP_LOGICAL_AND:
+
Result = LeftValue && RightValue;
break;
case EXPOP_LOGICAL_OR:
+
Result = LeftValue || RightValue;
break;
diff --git a/source/compiler/dtfield.c b/source/compiler/dtfield.c
index 275f22f..697b277 100644
--- a/source/compiler/dtfield.c
+++ b/source/compiler/dtfield.c
@@ -104,14 +104,17 @@ DtCompileOneField (
switch (Type)
{
case DT_FIELD_TYPE_INTEGER:
+
DtCompileInteger (Buffer, Field, ByteLength, Flags);
break;
case DT_FIELD_TYPE_STRING:
+
DtCompileString (Buffer, Field, ByteLength);
break;
case DT_FIELD_TYPE_UUID:
+
Status = DtCompileUuid (Buffer, Field, ByteLength);
if (ACPI_SUCCESS (Status))
{
@@ -121,17 +124,21 @@ DtCompileOneField (
/* Fall through. */
case DT_FIELD_TYPE_BUFFER:
+
DtCompileBuffer (Buffer, Field->Value, Field, ByteLength);
break;
case DT_FIELD_TYPE_UNICODE:
+
DtCompileUnicode (Buffer, Field, ByteLength);
break;
case DT_FIELD_TYPE_DEVICE_PATH:
+
break;
default:
+
DtFatal (ASL_MSG_COMPILER_INTERNAL, Field, "Invalid field type");
break;
}
@@ -382,10 +389,12 @@ DtNormalizeBuffer (
case ']':
case ' ':
case ',':
+
Separator = TRUE;
break;
default:
+
if (Separator)
{
/* Insert blank as the standard separator */
diff --git a/source/compiler/dtio.c b/source/compiler/dtio.c
index 7876552..c26b2b8 100644
--- a/source/compiler/dtio.c
+++ b/source/compiler/dtio.c
@@ -426,7 +426,7 @@ DtGetNextLine (
UINT32 State = DT_NORMAL_TEXT;
UINT32 CurrentLineOffset;
UINT32 i;
- char c;
+ int c;
for (i = 0; ;)
@@ -440,7 +440,7 @@ DtGetNextLine (
UtExpandLineBuffers ();
}
- c = (char) getc (Handle);
+ c = getc (Handle);
if (c == EOF)
{
switch (State)
@@ -452,6 +452,7 @@ DtGetNextLine (
break;
default:
+
break;
}
@@ -479,14 +480,16 @@ DtGetNextLine (
/* Normal text, insert char into line buffer */
- Gbl_CurrentLineBuffer[i] = c;
+ Gbl_CurrentLineBuffer[i] = (char) c;
switch (c)
{
case '/':
+
State = DT_START_COMMENT;
break;
case '"':
+
State = DT_START_QUOTED_STRING;
LineNotAllBlanks = TRUE;
i++;
@@ -501,6 +504,7 @@ DtGetNextLine (
break;
case '\n':
+
CurrentLineOffset = Gbl_NextLineOffset;
Gbl_NextLineOffset = (UINT32) ftell (Handle);
Gbl_CurrentLineNumber++;
@@ -527,6 +531,7 @@ DtGetNextLine (
break;
default:
+
if (c != ' ')
{
LineNotAllBlanks = TRUE;
@@ -541,26 +546,30 @@ DtGetNextLine (
/* Insert raw chars until end of quoted string */
- Gbl_CurrentLineBuffer[i] = c;
+ Gbl_CurrentLineBuffer[i] = (char) c;
i++;
switch (c)
{
case '"':
+
State = DT_NORMAL_TEXT;
break;
case '\\':
+
State = DT_ESCAPE_SEQUENCE;
break;
case '\n':
+
AcpiOsPrintf ("ERROR at line %u: Unterminated quoted string\n",
Gbl_CurrentLineNumber++);
State = DT_NORMAL_TEXT;
break;
default: /* Get next character */
+
break;
}
break;
@@ -569,7 +578,7 @@ DtGetNextLine (
/* Just copy the escaped character. TBD: sufficient for table compiler? */
- Gbl_CurrentLineBuffer[i] = c;
+ Gbl_CurrentLineBuffer[i] = (char) c;
i++;
State = DT_START_QUOTED_STRING;
break;
@@ -581,21 +590,24 @@ DtGetNextLine (
switch (c)
{
case '*':
+
State = DT_SLASH_ASTERISK_COMMENT;
break;
case '/':
+
State = DT_SLASH_SLASH_COMMENT;
break;
default: /* Not a comment */
+
i++; /* Save the preceding slash */
if (i >= Gbl_LineBufferSize)
{
UtExpandLineBuffers ();
}
- Gbl_CurrentLineBuffer[i] = c;
+ Gbl_CurrentLineBuffer[i] = (char) c;
i++;
State = DT_NORMAL_TEXT;
break;
@@ -609,15 +621,18 @@ DtGetNextLine (
switch (c)
{
case '\n':
+
Gbl_NextLineOffset = (UINT32) ftell (Handle);
Gbl_CurrentLineNumber++;
break;
case '*':
+
State = DT_END_COMMENT;
break;
default:
+
break;
}
break;
@@ -642,20 +657,24 @@ DtGetNextLine (
switch (c)
{
case '/':
+
State = DT_NORMAL_TEXT;
break;
case '\n':
+
CurrentLineOffset = Gbl_NextLineOffset;
Gbl_NextLineOffset = (UINT32) ftell (Handle);
Gbl_CurrentLineNumber++;
break;
case '*':
+
/* Consume all adjacent asterisks */
break;
default:
+
State = DT_SLASH_ASTERISK_COMMENT;
break;
}
@@ -694,6 +713,7 @@ DtGetNextLine (
break;
default:
+
DtFatal (ASL_MSG_COMPILER_INTERNAL, NULL, "Unknown input state");
return (ASL_EOF);
}
diff --git a/source/compiler/dtsubtable.c b/source/compiler/dtsubtable.c
index f49c205..275d67a 100644
--- a/source/compiler/dtsubtable.c
+++ b/source/compiler/dtsubtable.c
@@ -312,14 +312,17 @@ DtGetSubtableLength (
switch (Info->Opcode)
{
case ACPI_DMT_GAS:
+
Step = 5;
break;
case ACPI_DMT_HESTNTFY:
+
Step = 9;
break;
default:
+
Step = 1;
break;
}
diff --git a/source/compiler/dttable.c b/source/compiler/dttable.c
index b3ce5de..4236c6c 100644
--- a/source/compiler/dttable.c
+++ b/source/compiler/dttable.c
@@ -280,26 +280,32 @@ DtCompileAsf (
switch (AsfTable->Header.Type & 0x7F) /* Mask off top bit */
{
case ACPI_ASF_TYPE_INFO:
+
InfoTable = AcpiDmTableInfoAsf0;
break;
case ACPI_ASF_TYPE_ALERT:
+
InfoTable = AcpiDmTableInfoAsf1;
break;
case ACPI_ASF_TYPE_CONTROL:
+
InfoTable = AcpiDmTableInfoAsf2;
break;
case ACPI_ASF_TYPE_BOOT:
+
InfoTable = AcpiDmTableInfoAsf3;
break;
case ACPI_ASF_TYPE_ADDRESS:
+
InfoTable = AcpiDmTableInfoAsf4;
break;
default:
+
DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "ASF!");
return (AE_ERROR);
}
@@ -316,10 +322,12 @@ DtCompileAsf (
switch (AsfTable->Header.Type & 0x7F) /* Mask off top bit */
{
case ACPI_ASF_TYPE_INFO:
+
DataInfoTable = NULL;
break;
case ACPI_ASF_TYPE_ALERT:
+
DataInfoTable = AcpiDmTableInfoAsf1a;
DataCount = ACPI_CAST_PTR (ACPI_ASF_ALERT,
ACPI_SUB_PTR (UINT8, Subtable->Buffer,
@@ -327,6 +335,7 @@ DtCompileAsf (
break;
case ACPI_ASF_TYPE_CONTROL:
+
DataInfoTable = AcpiDmTableInfoAsf2a;
DataCount = ACPI_CAST_PTR (ACPI_ASF_REMOTE,
ACPI_SUB_PTR (UINT8, Subtable->Buffer,
@@ -334,10 +343,12 @@ DtCompileAsf (
break;
case ACPI_ASF_TYPE_BOOT:
+
DataInfoTable = NULL;
break;
case ACPI_ASF_TYPE_ADDRESS:
+
DataInfoTable = TableInfoAsfAddress;
DataCount = ACPI_CAST_PTR (ACPI_ASF_ADDRESS,
ACPI_SUB_PTR (UINT8, Subtable->Buffer,
@@ -345,6 +356,7 @@ DtCompileAsf (
break;
default:
+
DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "ASF!");
return (AE_ERROR);
}
@@ -574,18 +586,27 @@ DtCompileDmar (
switch (DmarHeader->Type)
{
case ACPI_DMAR_TYPE_HARDWARE_UNIT:
+
InfoTable = AcpiDmTableInfoDmar0;
break;
+
case ACPI_DMAR_TYPE_RESERVED_MEMORY:
+
InfoTable = AcpiDmTableInfoDmar1;
break;
+
case ACPI_DMAR_TYPE_ATSR:
+
InfoTable = AcpiDmTableInfoDmar2;
break;
+
case ACPI_DMAR_HARDWARE_AFFINITY:
+
InfoTable = AcpiDmTableInfoDmar3;
break;
+
default:
+
DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "DMAR");
return (AE_ERROR);
}
@@ -810,14 +831,17 @@ DtCompileFpdt (
switch (FpdtHeader->Type)
{
case ACPI_FPDT_TYPE_BOOT:
+
InfoTable = AcpiDmTableInfoFpdt0;
break;
case ACPI_FPDT_TYPE_S3PERF:
+
InfoTable = AcpiDmTableInfoFpdt1;
break;
default:
+
DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "FPDT");
return (AE_ERROR);
break;
@@ -884,34 +908,42 @@ DtCompileHest (
switch (Type)
{
case ACPI_HEST_TYPE_IA32_CHECK:
+
InfoTable = AcpiDmTableInfoHest0;
break;
case ACPI_HEST_TYPE_IA32_CORRECTED_CHECK:
+
InfoTable = AcpiDmTableInfoHest1;
break;
case ACPI_HEST_TYPE_IA32_NMI:
+
InfoTable = AcpiDmTableInfoHest2;
break;
case ACPI_HEST_TYPE_AER_ROOT_PORT:
+
InfoTable = AcpiDmTableInfoHest6;
break;
case ACPI_HEST_TYPE_AER_ENDPOINT:
+
InfoTable = AcpiDmTableInfoHest7;
break;
case ACPI_HEST_TYPE_AER_BRIDGE:
+
InfoTable = AcpiDmTableInfoHest8;
break;
case ACPI_HEST_TYPE_GENERIC_ERROR:
+
InfoTable = AcpiDmTableInfoHest9;
break;
default:
+
/* Cannot continue on unknown type */
DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "HEST");
@@ -933,16 +965,19 @@ DtCompileHest (
switch (Type)
{
case ACPI_HEST_TYPE_IA32_CHECK:
+
BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_MACHINE_CHECK,
Subtable->Buffer))->NumHardwareBanks;
break;
case ACPI_HEST_TYPE_IA32_CORRECTED_CHECK:
+
BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_CORRECTED,
Subtable->Buffer))->NumHardwareBanks;
break;
default:
+
break;
}
@@ -1019,16 +1054,19 @@ DtCompileIvrs (
switch (IvrsHeader->Type)
{
case ACPI_IVRS_TYPE_HARDWARE:
+
InfoTable = AcpiDmTableInfoIvrs0;
break;
case ACPI_IVRS_TYPE_MEMORY1:
case ACPI_IVRS_TYPE_MEMORY2:
case ACPI_IVRS_TYPE_MEMORY3:
+
InfoTable = AcpiDmTableInfoIvrs1;
break;
default:
+
DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "IVRS");
return (AE_ERROR);
}
@@ -1088,6 +1126,7 @@ DtCompileIvrs (
break;
default:
+
DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart,
"IVRS Device Entry");
return (AE_ERROR);
@@ -1165,45 +1204,72 @@ DtCompileMadt (
switch (MadtHeader->Type)
{
case ACPI_MADT_TYPE_LOCAL_APIC:
+
InfoTable = AcpiDmTableInfoMadt0;
break;
+
case ACPI_MADT_TYPE_IO_APIC:
+
InfoTable = AcpiDmTableInfoMadt1;
break;
+
case ACPI_MADT_TYPE_INTERRUPT_OVERRIDE:
+
InfoTable = AcpiDmTableInfoMadt2;
break;
+
case ACPI_MADT_TYPE_NMI_SOURCE:
+
InfoTable = AcpiDmTableInfoMadt3;
break;
+
case ACPI_MADT_TYPE_LOCAL_APIC_NMI:
+
InfoTable = AcpiDmTableInfoMadt4;
break;
+
case ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE:
+
InfoTable = AcpiDmTableInfoMadt5;
break;
+
case ACPI_MADT_TYPE_IO_SAPIC:
+
InfoTable = AcpiDmTableInfoMadt6;
break;
+
case ACPI_MADT_TYPE_LOCAL_SAPIC:
+
InfoTable = AcpiDmTableInfoMadt7;
break;
+
case ACPI_MADT_TYPE_INTERRUPT_SOURCE:
+
InfoTable = AcpiDmTableInfoMadt8;
break;
+
case ACPI_MADT_TYPE_LOCAL_X2APIC:
+
InfoTable = AcpiDmTableInfoMadt9;
break;
+
case ACPI_MADT_TYPE_LOCAL_X2APIC_NMI:
+
InfoTable = AcpiDmTableInfoMadt10;
break;
+
case ACPI_MADT_TYPE_GENERIC_INTERRUPT:
+
InfoTable = AcpiDmTableInfoMadt11;
break;
+
case ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR:
+
InfoTable = AcpiDmTableInfoMadt12;
break;
+
default:
+
DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "MADT");
return (AE_ERROR);
}
@@ -1665,14 +1731,17 @@ DtCompileS3pt (
switch (S3ptHeader->Type)
{
case ACPI_S3PT_TYPE_RESUME:
+
InfoTable = AcpiDmTableInfoS3pt0;
break;
case ACPI_S3PT_TYPE_SUSPEND:
+
InfoTable = AcpiDmTableInfoS3pt1;
break;
default:
+
DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "S3PT");
return (AE_ERROR);
}
@@ -1736,12 +1805,17 @@ DtCompileSlic (
switch (SlicHeader->Type)
{
case ACPI_SLIC_TYPE_PUBLIC_KEY:
+
InfoTable = AcpiDmTableInfoSlic0;
break;
+
case ACPI_SLIC_TYPE_WINDOWS_MARKER:
+
InfoTable = AcpiDmTableInfoSlic1;
break;
+
default:
+
DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "SLIC");
return (AE_ERROR);
}
@@ -1871,15 +1945,22 @@ DtCompileSrat (
switch (SratHeader->Type)
{
case ACPI_SRAT_TYPE_CPU_AFFINITY:
+
InfoTable = AcpiDmTableInfoSrat0;
break;
+
case ACPI_SRAT_TYPE_MEMORY_AFFINITY:
+
InfoTable = AcpiDmTableInfoSrat1;
break;
+
case ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY:
+
InfoTable = AcpiDmTableInfoSrat2;
break;
+
default:
+
DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "SRAT");
return (AE_ERROR);
}
diff --git a/source/compiler/dtutils.c b/source/compiler/dtutils.c
index 18ea93e..1f4207a 100644
--- a/source/compiler/dtutils.c
+++ b/source/compiler/dtutils.c
@@ -82,18 +82,11 @@ DtError (
char *ExtraMessage)
{
- switch (Level)
- {
- case ASL_WARNING2:
- case ASL_WARNING3:
- if (Gbl_WarningLevel < Level)
- {
- return;
- }
- break;
+ /* Check if user wants to ignore this exception */
- default:
- break;
+ if (AslIsExceptionDisabled (Level, MessageId))
+ {
+ return;
}
if (FieldObject)
@@ -140,6 +133,7 @@ DtNameError (
{
case ASL_WARNING2:
case ASL_WARNING3:
+
if (Gbl_WarningLevel < Level)
{
return;
@@ -147,6 +141,7 @@ DtNameError (
break;
default:
+
break;
}
@@ -387,6 +382,7 @@ DtGetFieldType (
case ACPI_DMT_FLAGS1:
case ACPI_DMT_FLAGS2:
case ACPI_DMT_FLAGS4:
+
Type = DT_FIELD_TYPE_FLAG;
break;
@@ -395,6 +391,7 @@ DtGetFieldType (
case ACPI_DMT_NAME6:
case ACPI_DMT_NAME8:
case ACPI_DMT_STRING:
+
Type = DT_FIELD_TYPE_STRING;
break;
@@ -403,31 +400,38 @@ DtGetFieldType (
case ACPI_DMT_BUF16:
case ACPI_DMT_BUF128:
case ACPI_DMT_PCI_PATH:
+
Type = DT_FIELD_TYPE_BUFFER;
break;
case ACPI_DMT_GAS:
case ACPI_DMT_HESTNTFY:
+
Type = DT_FIELD_TYPE_INLINE_SUBTABLE;
break;
case ACPI_DMT_UNICODE:
+
Type = DT_FIELD_TYPE_UNICODE;
break;
case ACPI_DMT_UUID:
+
Type = DT_FIELD_TYPE_UUID;
break;
case ACPI_DMT_DEVICE_PATH:
+
Type = DT_FIELD_TYPE_DEVICE_PATH;
break;
case ACPI_DMT_LABEL:
+
Type = DT_FIELD_TYPE_LABEL;
break;
default:
+
Type = DT_FIELD_TYPE_INTEGER;
break;
}
@@ -517,6 +521,7 @@ DtGetFieldLength (
case ACPI_DMT_FLAGS4:
case ACPI_DMT_LABEL:
case ACPI_DMT_EXTRA_TEXT:
+
ByteLength = 0;
break;
@@ -535,6 +540,7 @@ DtGetFieldLength (
case ACPI_DMT_EINJINST:
case ACPI_DMT_ERSTACT:
case ACPI_DMT_ERSTINST:
+
ByteLength = 1;
break;
@@ -542,10 +548,12 @@ DtGetFieldLength (
case ACPI_DMT_DMAR:
case ACPI_DMT_HEST:
case ACPI_DMT_PCI_PATH:
+
ByteLength = 2;
break;
case ACPI_DMT_UINT24:
+
ByteLength = 3;
break;
@@ -553,29 +561,35 @@ DtGetFieldLength (
case ACPI_DMT_NAME4:
case ACPI_DMT_SLIC:
case ACPI_DMT_SIG:
+
ByteLength = 4;
break;
case ACPI_DMT_UINT40:
+
ByteLength = 5;
break;
case ACPI_DMT_UINT48:
case ACPI_DMT_NAME6:
+
ByteLength = 6;
break;
case ACPI_DMT_UINT56:
case ACPI_DMT_BUF7:
+
ByteLength = 7;
break;
case ACPI_DMT_UINT64:
case ACPI_DMT_NAME8:
+
ByteLength = 8;
break;
case ACPI_DMT_STRING:
+
Value = DtGetFieldValue (Field);
if (Value)
{
@@ -591,14 +605,17 @@ DtGetFieldLength (
break;
case ACPI_DMT_GAS:
+
ByteLength = sizeof (ACPI_GENERIC_ADDRESS);
break;
case ACPI_DMT_HESTNTFY:
+
ByteLength = sizeof (ACPI_HEST_NOTIFY);
break;
case ACPI_DMT_BUFFER:
+
Value = DtGetFieldValue (Field);
if (Value)
{
@@ -615,14 +632,17 @@ DtGetFieldLength (
case ACPI_DMT_BUF16:
case ACPI_DMT_UUID:
+
ByteLength = 16;
break;
case ACPI_DMT_BUF128:
+
ByteLength = 128;
break;
case ACPI_DMT_UNICODE:
+
Value = DtGetFieldValue (Field);
/* TBD: error if Value is NULL? (as below?) */
@@ -631,6 +651,7 @@ DtGetFieldLength (
break;
default:
+
DtFatal (ASL_MSG_COMPILER_INTERNAL, Field, "Invalid table opcode");
return (0);
}
diff --git a/source/compiler/prscan.c b/source/compiler/prscan.c
index f781deb..cc9b3ce 100644
--- a/source/compiler/prscan.c
+++ b/source/compiler/prscan.c
@@ -477,6 +477,7 @@ PrDoDirective (
switch (Directive)
{
case PR_DIRECTIVE_ELIF:
+
*IgnoringThisCodeBlock = !(*IgnoringThisCodeBlock);
if (*IgnoringThisCodeBlock == TRUE)
{
@@ -493,10 +494,12 @@ PrDoDirective (
break;
case PR_DIRECTIVE_ELSE:
+
*IgnoringThisCodeBlock = !(*IgnoringThisCodeBlock);
return;
case PR_DIRECTIVE_ENDIF:
+
*IgnoringThisCodeBlock = FALSE;
Gbl_IfDepth--;
if (Gbl_IfDepth < 0)
@@ -508,6 +511,7 @@ PrDoDirective (
return;
default:
+
break;
}
@@ -590,6 +594,7 @@ PrDoDirective (
break;
case PR_DIRECTIVE_ERROR:
+
/* TBD compiler should abort */
/* Note: No macro expansion */
@@ -598,6 +603,7 @@ PrDoDirective (
break;
case PR_DIRECTIVE_IF:
+
TokenOffset = Token - Gbl_MainTokenBuffer;
/* Need to expand #define macros in the expression string first */
@@ -623,6 +629,7 @@ PrDoDirective (
break;
case PR_DIRECTIVE_IFDEF:
+
if (!PrMatchDefine (Token))
{
*IgnoringThisCodeBlock = TRUE;
@@ -635,6 +642,7 @@ PrDoDirective (
break;
case PR_DIRECTIVE_IFNDEF:
+
if (PrMatchDefine (Token))
{
*IgnoringThisCodeBlock = TRUE;
@@ -647,6 +655,7 @@ PrDoDirective (
break;
case PR_DIRECTIVE_INCLUDE:
+
Token = PrGetNextToken (NULL, " \"<>", Next);
if (!Token)
{
@@ -661,6 +670,7 @@ PrDoDirective (
break;
case PR_DIRECTIVE_LINE:
+
TokenOffset = Token - Gbl_MainTokenBuffer;
Status = PrResolveIntegerExpression (
@@ -686,26 +696,40 @@ PrDoDirective (
break;
case PR_DIRECTIVE_PRAGMA:
- /* Only "#pragma message" supported at this time */
- if (strcmp (Token, "message"))
+ if (!strcmp (Token, "disable"))
{
- PrError (ASL_ERROR, ASL_MSG_UNKNOWN_PRAGMA,
- THIS_TOKEN_OFFSET (Token));
- return;
+ Token = PrGetNextToken (NULL, PR_TOKEN_SEPARATORS, Next);
+ if (!Token)
+ {
+ goto SyntaxError;
+ }
+
+ TokenOffset = Token - Gbl_MainTokenBuffer;
+ AslDisableException (&Gbl_CurrentLineBuffer[TokenOffset]);
}
+ else if (!strcmp (Token, "message"))
+ {
+ Token = PrGetNextToken (NULL, PR_TOKEN_SEPARATORS, Next);
+ if (!Token)
+ {
+ goto SyntaxError;
+ }
- Token = PrGetNextToken (NULL, PR_TOKEN_SEPARATORS, Next);
- if (!Token)
+ TokenOffset = Token - Gbl_MainTokenBuffer;
+ AcpiOsPrintf ("%s\n", &Gbl_CurrentLineBuffer[TokenOffset]);
+ }
+ else
{
- goto SyntaxError;
+ PrError (ASL_ERROR, ASL_MSG_UNKNOWN_PRAGMA,
+ THIS_TOKEN_OFFSET (Token));
+ return;
}
- TokenOffset = Token - Gbl_MainTokenBuffer;
- AcpiOsPrintf ("%s\n", &Gbl_CurrentLineBuffer[TokenOffset]);
break;
case PR_DIRECTIVE_UNDEF:
+
DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID
"#undef: %s\n", Gbl_CurrentLineNumber, Token);
@@ -713,11 +737,13 @@ PrDoDirective (
break;
case PR_DIRECTIVE_WARNING:
+
PrError (ASL_WARNING, ASL_MSG_ERROR_DIRECTIVE,
THIS_TOKEN_OFFSET (Token));
break;
default:
+
/* Should never get here */
DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID
"Unrecognized directive: %u\n",
diff --git a/source/components/debugger/dbcmds.c b/source/components/debugger/dbcmds.c
index 3a1afa2..5700441 100644
--- a/source/components/debugger/dbcmds.c
+++ b/source/components/debugger/dbcmds.c
@@ -361,22 +361,27 @@ AcpiDbDisplayTableInfo (
switch (TableDesc->Flags & ACPI_TABLE_ORIGIN_MASK)
{
case ACPI_TABLE_ORIGIN_UNKNOWN:
+
AcpiOsPrintf ("Unknown ");
break;
case ACPI_TABLE_ORIGIN_MAPPED:
+
AcpiOsPrintf ("Mapped ");
break;
case ACPI_TABLE_ORIGIN_ALLOCATED:
+
AcpiOsPrintf ("Allocated ");
break;
case ACPI_TABLE_ORIGIN_OVERRIDE:
+
AcpiOsPrintf ("Override ");
break;
default:
+
AcpiOsPrintf ("INVALID ");
break;
}
diff --git a/source/components/debugger/dbconvert.c b/source/components/debugger/dbconvert.c
index e30aba0..098a9719 100644
--- a/source/components/debugger/dbconvert.c
+++ b/source/components/debugger/dbconvert.c
@@ -304,20 +304,24 @@ AcpiDbConvertToObject (
switch (Type)
{
case ACPI_TYPE_STRING:
+
Object->Type = ACPI_TYPE_STRING;
Object->String.Pointer = String;
Object->String.Length = (UINT32) ACPI_STRLEN (String);
break;
case ACPI_TYPE_BUFFER:
+
Status = AcpiDbConvertToBuffer (String, Object);
break;
case ACPI_TYPE_PACKAGE:
+
Status = AcpiDbConvertToPackage (String, Object);
break;
default:
+
Object->Type = ACPI_TYPE_INTEGER;
Status = AcpiUtStrtoul64 (String, 16, &Object->Integer.Value);
break;
diff --git a/source/components/debugger/dbdisply.c b/source/components/debugger/dbdisply.c
index 9fc9cf5..c453d57 100644
--- a/source/components/debugger/dbdisply.c
+++ b/source/components/debugger/dbdisply.c
@@ -265,7 +265,6 @@ AcpiDbDecodeAndDisplayObject (
Node = ObjPtr;
goto DumpNode;
-
case ACPI_DESC_TYPE_OPERAND:
/* This is a ACPI OPERAND OBJECT */
@@ -282,7 +281,6 @@ AcpiDbDecodeAndDisplayObject (
AcpiExDumpObjectDescriptor (ObjPtr, 1);
break;
-
case ACPI_DESC_TYPE_PARSER:
/* This is a Parser Op object */
@@ -299,7 +297,6 @@ AcpiDbDecodeAndDisplayObject (
AcpiDbDumpParserDescriptor ((ACPI_PARSE_OBJECT *) ObjPtr);
break;
-
default:
/* Is not a recognizeable object */
@@ -446,6 +443,7 @@ AcpiDbDisplayMethodInfo (
switch (OpInfo->Class)
{
case AML_CLASS_ARGUMENT:
+
if (CountRemaining)
{
NumRemainingOperands++;
@@ -455,11 +453,13 @@ AcpiDbDisplayMethodInfo (
break;
case AML_CLASS_UNKNOWN:
+
/* Bad opcode or ASCII character */
continue;
default:
+
if (CountRemaining)
{
NumRemainingOperators++;
@@ -931,15 +931,21 @@ AcpiDbDisplayGpes (
switch (GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK)
{
case ACPI_GPE_DISPATCH_NONE:
+
AcpiOsPrintf ("NotUsed");
break;
+
case ACPI_GPE_DISPATCH_METHOD:
+
AcpiOsPrintf ("Method");
break;
case ACPI_GPE_DISPATCH_HANDLER:
+
AcpiOsPrintf ("Handler");
break;
+
case ACPI_GPE_DISPATCH_NOTIFY:
+
Count = 0;
Notify = GpeEventInfo->Dispatch.NotifyList;
while (Notify)
@@ -949,7 +955,9 @@ AcpiDbDisplayGpes (
}
AcpiOsPrintf ("Implicit Notify on %u devices", Count);
break;
+
default:
+
AcpiOsPrintf ("UNKNOWN: %X",
GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK);
break;
diff --git a/source/components/debugger/dbexec.c b/source/components/debugger/dbexec.c
index 3b5f651..dff3c79 100644
--- a/source/components/debugger/dbexec.c
+++ b/source/components/debugger/dbexec.c
@@ -109,6 +109,7 @@ AcpiDbDeleteObjects (
switch (Objects[i].Type)
{
case ACPI_TYPE_BUFFER:
+
ACPI_FREE (Objects[i].Buffer.Pointer);
break;
@@ -125,6 +126,7 @@ AcpiDbDeleteObjects (
break;
default:
+
break;
}
}
diff --git a/source/components/debugger/dbhistry.c b/source/components/debugger/dbhistry.c
index c3933d3..ff11604 100644
--- a/source/components/debugger/dbhistry.c
+++ b/source/components/debugger/dbhistry.c
@@ -54,12 +54,12 @@
#define HI_NO_HISTORY 0
#define HI_RECORD_HISTORY 1
-#define HISTORY_SIZE 20
+#define HISTORY_SIZE 40
typedef struct HistoryInfo
{
- char Command[80];
+ char *Command;
UINT32 CmdNum;
} HISTORY_INFO;
@@ -88,13 +88,35 @@ void
AcpiDbAddToHistory (
char *CommandLine)
{
+ UINT16 CmdLen;
+ UINT16 BufferLen;
/* Put command into the next available slot */
+ CmdLen = (UINT16) ACPI_STRLEN (CommandLine);
+ if (AcpiGbl_HistoryBuffer[AcpiGbl_NextHistoryIndex].Command != NULL)
+ {
+ BufferLen = (UINT16) ACPI_STRLEN (
+ AcpiGbl_HistoryBuffer[AcpiGbl_NextHistoryIndex].Command);
+ if (CmdLen > BufferLen)
+ {
+ AcpiOsFree (AcpiGbl_HistoryBuffer[AcpiGbl_NextHistoryIndex].
+ Command);
+ AcpiGbl_HistoryBuffer[AcpiGbl_NextHistoryIndex].Command =
+ AcpiOsAllocate (CmdLen + 1);
+ }
+ }
+ else
+ {
+ AcpiGbl_HistoryBuffer[AcpiGbl_NextHistoryIndex].Command =
+ AcpiOsAllocate (CmdLen + 1);
+ }
+
ACPI_STRCPY (AcpiGbl_HistoryBuffer[AcpiGbl_NextHistoryIndex].Command,
CommandLine);
- AcpiGbl_HistoryBuffer[AcpiGbl_NextHistoryIndex].CmdNum = AcpiGbl_NextCmdNum;
+ AcpiGbl_HistoryBuffer[AcpiGbl_NextHistoryIndex].CmdNum =
+ AcpiGbl_NextCmdNum;
/* Adjust indexes */
@@ -148,8 +170,12 @@ AcpiDbDisplayHistory (
for (i = 0; i < AcpiGbl_NumHistory; i++)
{
- AcpiOsPrintf ("%ld %s\n", AcpiGbl_HistoryBuffer[HistoryIndex].CmdNum,
- AcpiGbl_HistoryBuffer[HistoryIndex].Command);
+ if (AcpiGbl_HistoryBuffer[HistoryIndex].Command)
+ {
+ AcpiOsPrintf ("%3ld %s\n",
+ AcpiGbl_HistoryBuffer[HistoryIndex].CmdNum,
+ AcpiGbl_HistoryBuffer[HistoryIndex].Command);
+ }
HistoryIndex++;
if (HistoryIndex >= HISTORY_SIZE)
@@ -199,7 +225,7 @@ AcpiDbGetFromHistory (
{
if (AcpiGbl_HistoryBuffer[HistoryIndex].CmdNum == CmdNum)
{
- /* Found the commnad, return it */
+ /* Found the command, return it */
return (AcpiGbl_HistoryBuffer[HistoryIndex].Command);
}
diff --git a/source/components/debugger/dbinput.c b/source/components/debugger/dbinput.c
index d891872..1e3ebff 100644
--- a/source/components/debugger/dbinput.c
+++ b/source/components/debugger/dbinput.c
@@ -753,6 +753,7 @@ AcpiDbCommandDispatch (
switch (CommandIndex)
{
case CMD_NULL:
+
if (Op)
{
return (AE_OK);
@@ -768,41 +769,50 @@ AcpiDbCommandDispatch (
case CMD_ARGS:
case CMD_ARGUMENTS:
+
AcpiDbDisplayArguments ();
break;
case CMD_BATCH:
+
AcpiDbBatchExecute (AcpiGbl_DbArgs[1]);
break;
case CMD_BREAKPOINT:
+
AcpiDbSetMethodBreakpoint (AcpiGbl_DbArgs[1], WalkState, Op);
break;
case CMD_BUSINFO:
+
AcpiDbGetBusInfo ();
break;
case CMD_CALL:
+
AcpiDbSetMethodCallBreakpoint (Op);
Status = AE_OK;
break;
case CMD_CLOSE:
+
AcpiDbCloseDebugFile ();
break;
case CMD_DEBUG:
+
AcpiDbExecute (AcpiGbl_DbArgs[1],
&AcpiGbl_DbArgs[2], &AcpiGbl_DbArgTypes[2], EX_SINGLE_STEP);
break;
case CMD_DISASSEMBLE:
case CMD_DISASM:
+
(void) AcpiDbDisassembleMethod (AcpiGbl_DbArgs[1]);
break;
case CMD_DUMP:
+
AcpiDbDecodeAndDisplayObject (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]);
break;
@@ -819,45 +829,55 @@ AcpiDbCommandDispatch (
break;
case CMD_EVENT:
+
AcpiOsPrintf ("Event command not implemented\n");
break;
case CMD_EVALUATE:
case CMD_EXECUTE:
+
AcpiDbExecute (AcpiGbl_DbArgs[1],
&AcpiGbl_DbArgs[2], &AcpiGbl_DbArgTypes[2], EX_NO_SINGLE_STEP);
break;
case CMD_FIND:
+
Status = AcpiDbFindNameInNamespace (AcpiGbl_DbArgs[1]);
break;
case CMD_GO:
+
AcpiGbl_CmSingleStep = FALSE;
return (AE_OK);
case CMD_GPE:
+
AcpiDbGenerateGpe (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]);
break;
case CMD_GPES:
+
AcpiDbDisplayGpes ();
break;
case CMD_HANDLERS:
+
AcpiDbDisplayHandlers ();
break;
case CMD_HELP:
case CMD_HELP2:
+
AcpiDbDisplayHelp (AcpiGbl_DbArgs[1]);
break;
case CMD_HISTORY:
+
AcpiDbDisplayHistory ();
break;
- case CMD_HISTORY_EXE:
+ case CMD_HISTORY_EXE: /* ! command */
+
CommandLine = AcpiDbGetFromHistory (AcpiGbl_DbArgs[1]);
if (!CommandLine)
{
@@ -867,7 +887,8 @@ AcpiDbCommandDispatch (
Status = AcpiDbCommandDispatch (CommandLine, WalkState, Op);
return (Status);
- case CMD_HISTORY_LAST:
+ case CMD_HISTORY_LAST: /* !! command */
+
CommandLine = AcpiDbGetFromHistory (NULL);
if (!CommandLine)
{
@@ -878,14 +899,17 @@ AcpiDbCommandDispatch (
return (Status);
case CMD_INFORMATION:
+
AcpiDbDisplayMethodInfo (Op);
break;
case CMD_INTEGRITY:
+
AcpiDbCheckIntegrity ();
break;
case CMD_INTO:
+
if (Op)
{
AcpiGbl_CmSingleStep = TRUE;
@@ -894,6 +918,7 @@ AcpiDbCommandDispatch (
break;
case CMD_LEVEL:
+
if (ParamCount == 0)
{
AcpiOsPrintf ("Current debug level for file output is: %8.8lX\n",
@@ -921,96 +946,119 @@ AcpiDbCommandDispatch (
break;
case CMD_LIST:
+
AcpiDbDisassembleAml (AcpiGbl_DbArgs[1], Op);
break;
case CMD_LOAD:
+
Status = AcpiDbGetTableFromFile (AcpiGbl_DbArgs[1], NULL);
break;
case CMD_LOCKS:
+
AcpiDbDisplayLocks ();
break;
case CMD_LOCALS:
+
AcpiDbDisplayLocals ();
break;
case CMD_METHODS:
+
Status = AcpiDbDisplayObjects ("METHOD", AcpiGbl_DbArgs[1]);
break;
case CMD_NAMESPACE:
+
AcpiDbDumpNamespace (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]);
break;
case CMD_NOTIFY:
+
Temp = ACPI_STRTOUL (AcpiGbl_DbArgs[2], NULL, 0);
AcpiDbSendNotify (AcpiGbl_DbArgs[1], Temp);
break;
case CMD_OBJECT:
+
AcpiUtStrupr (AcpiGbl_DbArgs[1]);
Status = AcpiDbDisplayObjects (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]);
break;
case CMD_OPEN:
+
AcpiDbOpenDebugFile (AcpiGbl_DbArgs[1]);
break;
case CMD_OSI:
+
AcpiDbDisplayInterfaces (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]);
break;
case CMD_OWNER:
+
AcpiDbDumpNamespaceByOwner (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]);
break;
case CMD_PREDEFINED:
+
AcpiDbCheckPredefinedNames ();
break;
case CMD_PREFIX:
+
AcpiDbSetScope (AcpiGbl_DbArgs[1]);
break;
case CMD_REFERENCES:
+
AcpiDbFindReferences (AcpiGbl_DbArgs[1]);
break;
case CMD_RESOURCES:
+
AcpiDbDisplayResources (AcpiGbl_DbArgs[1]);
break;
case CMD_RESULTS:
+
AcpiDbDisplayResults ();
break;
case CMD_SET:
+
AcpiDbSetMethodData (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2],
AcpiGbl_DbArgs[3]);
break;
case CMD_SLEEP:
+
Status = AcpiDbSleep (AcpiGbl_DbArgs[1]);
break;
case CMD_STATS:
+
Status = AcpiDbDisplayStatistics (AcpiGbl_DbArgs[1]);
break;
case CMD_STOP:
+
return (AE_NOT_IMPLEMENTED);
case CMD_TABLES:
+
AcpiDbDisplayTableInfo (AcpiGbl_DbArgs[1]);
break;
case CMD_TEMPLATE:
+
AcpiDbDisplayTemplate (AcpiGbl_DbArgs[1]);
break;
case CMD_TERMINATE:
+
AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT);
AcpiUtSubsystemShutdown ();
@@ -1023,28 +1071,34 @@ AcpiDbCommandDispatch (
break;
case CMD_THREADS:
+
AcpiDbCreateExecutionThreads (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2],
AcpiGbl_DbArgs[3]);
break;
case CMD_TRACE:
+
(void) AcpiDebugTrace (AcpiGbl_DbArgs[1],0,0,1);
break;
case CMD_TREE:
+
AcpiDbDisplayCallingTree ();
break;
case CMD_TYPE:
+
AcpiDbDisplayObjectType (AcpiGbl_DbArgs[1]);
break;
case CMD_UNLOAD:
+
AcpiDbUnloadAcpiTable (AcpiGbl_DbArgs[1]);
break;
case CMD_EXIT:
case CMD_QUIT:
+
if (Op)
{
AcpiOsPrintf ("Method execution terminated\n");
@@ -1062,6 +1116,7 @@ AcpiDbCommandDispatch (
case CMD_NOT_FOUND:
default:
+
AcpiOsPrintf ("Unknown Command\n");
return (AE_CTRL_TRUE);
}
diff --git a/source/components/debugger/dbmethod.c b/source/components/debugger/dbmethod.c
index 6b25f62..fe1c3d5 100644
--- a/source/components/debugger/dbmethod.c
+++ b/source/components/debugger/dbmethod.c
@@ -271,6 +271,7 @@ AcpiDbSetMethodData (
break;
default:
+
break;
}
@@ -501,25 +502,30 @@ AcpiDbWalkForExecute (
switch (ArgType)
{
case ACPI_TYPE_INTEGER:
+
ThisParam->Integer.Value = 1;
break;
case ACPI_TYPE_STRING:
+
ThisParam->String.Pointer = "This is the default argument string";
ThisParam->String.Length = ACPI_STRLEN (ThisParam->String.Pointer);
break;
case ACPI_TYPE_BUFFER:
+
ThisParam->Buffer.Pointer = (UINT8 *) Params; /* just a garbage buffer */
ThisParam->Buffer.Length = 48;
break;
case ACPI_TYPE_PACKAGE:
+
ThisParam->Package.Elements = NULL;
ThisParam->Package.Count = 0;
break;
default:
+
AcpiOsPrintf ("%s: Unsupported argument type: %u\n",
Pathname, ArgType);
break;
diff --git a/source/components/debugger/dbnames.c b/source/components/debugger/dbnames.c
index bbe6896..b414a40 100644
--- a/source/components/debugger/dbnames.c
+++ b/source/components/debugger/dbnames.c
@@ -671,7 +671,7 @@ AcpiDbIntegrityWalk (
return (AE_OK);
}
- if (!AcpiUtValidAcpiName (Node->Name.Integer))
+ if (!AcpiUtValidAcpiName (Node->Name.Ascii))
{
AcpiOsPrintf ("Invalid AcpiName for Node %p\n", Node);
return (AE_OK);
diff --git a/source/components/debugger/dbstats.c b/source/components/debugger/dbstats.c
index d9226f9..181efbf 100644
--- a/source/components/debugger/dbstats.c
+++ b/source/components/debugger/dbstats.c
@@ -267,6 +267,7 @@ AcpiDbEnumerateObject (
break;
default:
+
break;
}
}
@@ -479,7 +480,6 @@ AcpiDbDisplayStatistics (
}
break;
-
case CMD_STAT_SIZES:
AcpiOsPrintf ("\nInternal object sizes:\n\n");
@@ -530,7 +530,6 @@ AcpiDbDisplayStatistics (
AcpiOsPrintf ("Notify Info %3d\n", sizeof (ACPI_NOTIFY_INFO));
break;
-
case CMD_STAT_STACK:
#if defined(ACPI_DEBUG_OUTPUT)
@@ -545,6 +544,7 @@ AcpiDbDisplayStatistics (
break;
default:
+
break;
}
diff --git a/source/components/debugger/dbutils.c b/source/components/debugger/dbutils.c
index 83d60d5..268a496 100644
--- a/source/components/debugger/dbutils.c
+++ b/source/components/debugger/dbutils.c
@@ -179,14 +179,12 @@ AcpiDbDumpExternalObject (
AcpiOsPrintf ("[Null Object] (Type=0)\n");
break;
-
case ACPI_TYPE_INTEGER:
AcpiOsPrintf ("[Integer] = %8.8X%8.8X\n",
ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
break;
-
case ACPI_TYPE_STRING:
AcpiOsPrintf ("[String] Length %.2X = ", ObjDesc->String.Length);
@@ -194,7 +192,6 @@ AcpiDbDumpExternalObject (
AcpiOsPrintf ("\n");
break;
-
case ACPI_TYPE_BUFFER:
AcpiOsPrintf ("[Buffer] Length %.2X = ", ObjDesc->Buffer.Length);
@@ -213,7 +210,6 @@ AcpiDbDumpExternalObject (
}
break;
-
case ACPI_TYPE_PACKAGE:
AcpiOsPrintf ("[Package] Contains %u Elements:\n",
@@ -225,26 +221,22 @@ AcpiDbDumpExternalObject (
}
break;
-
case ACPI_TYPE_LOCAL_REFERENCE:
AcpiOsPrintf ("[Object Reference] = ");
AcpiDmDisplayInternalObject (ObjDesc->Reference.Handle, NULL);
break;
-
case ACPI_TYPE_PROCESSOR:
AcpiOsPrintf ("[Processor]\n");
break;
-
case ACPI_TYPE_POWER:
AcpiOsPrintf ("[Power Resource]\n");
break;
-
default:
AcpiOsPrintf ("[Unknown Type] %X\n", ObjDesc->Type);
diff --git a/source/components/debugger/dbxface.c b/source/components/debugger/dbxface.c
index a6a5423..3c1df5b 100644
--- a/source/components/debugger/dbxface.c
+++ b/source/components/debugger/dbxface.c
@@ -232,9 +232,11 @@ AcpiDbSingleStep (
{
case AML_CLASS_UNKNOWN:
case AML_CLASS_ARGUMENT: /* constants, literals, etc. do nothing */
+
return (AE_OK);
default:
+
/* All other opcodes -- continue */
break;
}
@@ -408,6 +410,9 @@ AcpiDbInitialize (
ACPI_STATUS Status;
+ ACPI_FUNCTION_TRACE (DbInitialize);
+
+
/* Init globals */
AcpiGbl_DbBuffer = NULL;
@@ -427,7 +432,7 @@ AcpiDbInitialize (
AcpiGbl_DbBuffer = AcpiOsAllocate (ACPI_DEBUG_BUFFER_SIZE);
if (!AcpiGbl_DbBuffer)
{
- return (AE_NO_MEMORY);
+ return_ACPI_STATUS (AE_NO_MEMORY);
}
ACPI_MEMSET (AcpiGbl_DbBuffer, 0, ACPI_DEBUG_BUFFER_SIZE);
@@ -450,14 +455,14 @@ AcpiDbInitialize (
if (ACPI_FAILURE (Status))
{
AcpiOsPrintf ("Could not get debugger mutex\n");
- return (Status);
+ return_ACPI_STATUS (Status);
}
Status = AcpiUtAcquireMutex (ACPI_MTX_DEBUG_CMD_READY);
if (ACPI_FAILURE (Status))
{
AcpiOsPrintf ("Could not get debugger mutex\n");
- return (Status);
+ return_ACPI_STATUS (Status);
}
/* Create the debug execution thread to execute commands */
@@ -465,8 +470,8 @@ AcpiDbInitialize (
Status = AcpiOsExecute (OSL_DEBUGGER_THREAD, AcpiDbExecuteThread, NULL);
if (ACPI_FAILURE (Status))
{
- AcpiOsPrintf ("Could not start debugger thread\n");
- return (Status);
+ ACPI_EXCEPTION ((AE_INFO, Status, "Could not start debugger thread"));
+ return_ACPI_STATUS (Status);
}
}
@@ -476,7 +481,7 @@ AcpiDbInitialize (
AcpiGbl_DbOpt_stats = FALSE;
}
- return (AE_OK);
+ return_ACPI_STATUS (AE_OK);
}
@@ -500,6 +505,7 @@ AcpiDbTerminate (
if (AcpiGbl_DbBuffer)
{
AcpiOsFree (AcpiGbl_DbBuffer);
+ AcpiGbl_DbBuffer = NULL;
}
}
diff --git a/source/components/disassembler/dmbuffer.c b/source/components/disassembler/dmbuffer.c
index 89102ab..d0f57ce 100644
--- a/source/components/disassembler/dmbuffer.c
+++ b/source/components/disassembler/dmbuffer.c
@@ -194,7 +194,6 @@ AcpiDmByteList (
case ACPI_DASM_BUFFER:
default:
-
/*
* Not a resource, string, or unicode string.
* Just dump the buffer
diff --git a/source/components/disassembler/dmdeferred.c b/source/components/disassembler/dmdeferred.c
index 7102ea7..38e4134 100644
--- a/source/components/disassembler/dmdeferred.c
+++ b/source/components/disassembler/dmdeferred.c
@@ -128,6 +128,7 @@ AcpiDmParseDeferredOps (
break;
default:
+
ACPI_ERROR ((AE_INFO, "Unhandled deferred AML opcode [0x%.4X]",
Op->Common.AmlOpcode));
break;
@@ -265,6 +266,7 @@ AcpiDmDeferredParse (
break;
default:
+
break;
}
diff --git a/source/components/disassembler/dmnames.c b/source/components/disassembler/dmnames.c
index 22f045c..0fc7751 100644
--- a/source/components/disassembler/dmnames.c
+++ b/source/components/disassembler/dmnames.c
@@ -237,20 +237,24 @@ AcpiDmNamestring (
switch (ACPI_GET8 (Name))
{
case 0:
+
SegCount = 0;
break;
case AML_DUAL_NAME_PREFIX:
+
SegCount = 2;
Name++;
break;
case AML_MULTI_NAME_PREFIX_OP:
+
SegCount = (UINT32) ACPI_GET8 (Name + 1);
Name += 2;
break;
default:
+
SegCount = 1;
break;
}
diff --git a/source/components/disassembler/dmobject.c b/source/components/disassembler/dmobject.c
index f6c681d..ab1d744 100644
--- a/source/components/disassembler/dmobject.c
+++ b/source/components/disassembler/dmobject.c
@@ -214,7 +214,6 @@ AcpiDmDecodeInternalObject (
ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
break;
-
case ACPI_TYPE_STRING:
AcpiOsPrintf ("(%u) \"%.24s",
@@ -230,7 +229,6 @@ AcpiDmDecodeInternalObject (
}
break;
-
case ACPI_TYPE_BUFFER:
AcpiOsPrintf ("(%u)", ObjDesc->Buffer.Length);
@@ -240,7 +238,6 @@ AcpiDmDecodeInternalObject (
}
break;
-
default:
AcpiOsPrintf (" %p", ObjDesc);
@@ -283,14 +280,17 @@ AcpiDmDecodeNode (
/* These types have no attached object */
case ACPI_TYPE_DEVICE:
+
AcpiOsPrintf (" Device");
break;
case ACPI_TYPE_THERMAL:
+
AcpiOsPrintf (" Thermal Zone");
break;
default:
+
AcpiDmDecodeInternalObject (AcpiNsGetAttachedObject (Node));
break;
}
@@ -335,13 +335,11 @@ AcpiDmDisplayInternalObject (
AcpiOsPrintf ("<Parser> ");
break;
-
case ACPI_DESC_TYPE_NAMED:
AcpiDmDecodeNode ((ACPI_NAMESPACE_NODE *) ObjDesc);
break;
-
case ACPI_DESC_TYPE_OPERAND:
Type = ObjDesc->Common.Type;
@@ -375,7 +373,6 @@ AcpiDmDisplayInternalObject (
}
break;
-
case ACPI_REFCLASS_ARG:
AcpiOsPrintf ("%X ", ObjDesc->Reference.Value);
@@ -388,7 +385,6 @@ AcpiDmDisplayInternalObject (
}
break;
-
case ACPI_REFCLASS_INDEX:
switch (ObjDesc->Reference.TargetType)
@@ -420,7 +416,6 @@ AcpiDmDisplayInternalObject (
}
break;
-
case ACPI_REFCLASS_REFOF:
if (!ObjDesc->Reference.Object)
@@ -446,20 +441,17 @@ AcpiDmDisplayInternalObject (
}
break;
-
case ACPI_REFCLASS_NAME:
AcpiDmDecodeNode (ObjDesc->Reference.Node);
break;
-
case ACPI_REFCLASS_DEBUG:
case ACPI_REFCLASS_TABLE:
AcpiOsPrintf ("\n");
break;
-
default: /* Unknown reference class */
AcpiOsPrintf ("%2.2X\n", ObjDesc->Reference.Class);
@@ -467,7 +459,6 @@ AcpiDmDisplayInternalObject (
}
break;
-
default:
AcpiOsPrintf ("<Obj> ");
@@ -476,7 +467,6 @@ AcpiDmDisplayInternalObject (
}
break;
-
default:
AcpiOsPrintf ("<Not a valid ACPI Object Descriptor> [%s]",
diff --git a/source/components/disassembler/dmopcode.c b/source/components/disassembler/dmopcode.c
index ad69531..490fa8c 100644
--- a/source/components/disassembler/dmopcode.c
+++ b/source/components/disassembler/dmopcode.c
@@ -121,6 +121,7 @@ AcpiDmPredefinedDescription (
switch (NameString[1])
{
case 'A':
+
if ((NameString[2] == 'C') && (LastCharIsDigit))
{
NameString = "_ACx";
@@ -132,6 +133,7 @@ AcpiDmPredefinedDescription (
break;
case 'E':
+
if ((NameString[2] == 'J') && (LastCharIsDigit))
{
NameString = "_EJx";
@@ -143,6 +145,7 @@ AcpiDmPredefinedDescription (
break;
case 'L':
+
if (LastCharsAreHex)
{
NameString = "_Lxx";
@@ -150,6 +153,7 @@ AcpiDmPredefinedDescription (
break;
case 'Q':
+
if (LastCharsAreHex)
{
NameString = "_Qxx";
@@ -157,6 +161,7 @@ AcpiDmPredefinedDescription (
break;
case 'T':
+
if (NameString[2] == '_')
{
NameString = "_T_x";
@@ -164,6 +169,7 @@ AcpiDmPredefinedDescription (
break;
case 'W':
+
if (LastCharsAreHex)
{
NameString = "_Wxx";
@@ -171,6 +177,7 @@ AcpiDmPredefinedDescription (
break;
default:
+
break;
}
@@ -536,21 +543,26 @@ AcpiDmDisassembleOneOp (
return;
case ACPI_DASM_LNOT_SUFFIX:
+
switch (Op->Common.AmlOpcode)
{
case AML_LEQUAL_OP:
+
AcpiOsPrintf ("LNotEqual");
break;
case AML_LGREATER_OP:
+
AcpiOsPrintf ("LLessEqual");
break;
case AML_LLESS_OP:
+
AcpiOsPrintf ("LGreaterEqual");
break;
default:
+
break;
}
Op->Common.DisasmOpcode = 0;
@@ -589,7 +601,6 @@ AcpiDmDisassembleOneOp (
AcpiOsPrintf ("0x%2.2X", (UINT32) Op->Common.Value.Integer);
break;
-
case AML_WORD_OP:
if (Op->Common.DisasmOpcode == ACPI_DASM_EISAID)
@@ -602,7 +613,6 @@ AcpiDmDisassembleOneOp (
}
break;
-
case AML_DWORD_OP:
if (Op->Common.DisasmOpcode == ACPI_DASM_EISAID)
@@ -615,22 +625,18 @@ AcpiDmDisassembleOneOp (
}
break;
-
case AML_QWORD_OP:
AcpiOsPrintf ("0x%8.8X%8.8X",
ACPI_FORMAT_UINT64 (Op->Common.Value.Integer));
break;
-
case AML_STRING_OP:
AcpiUtPrintString (Op->Common.Value.String, ACPI_UINT8_MAX);
break;
-
case AML_BUFFER_OP:
-
/*
* Determine the type of buffer. We can have one of the following:
*
@@ -680,7 +686,6 @@ AcpiDmDisassembleOneOp (
}
break;
-
case AML_INT_STATICSTRING_OP:
if (Op->Common.Value.String)
@@ -693,13 +698,11 @@ AcpiDmDisassembleOneOp (
}
break;
-
case AML_INT_NAMEPATH_OP:
AcpiDmNamestring (Op->Common.Value.Name);
break;
-
case AML_INT_NAMEDFIELD_OP:
Length = AcpiDmDumpName (Op->Named.Name);
@@ -710,7 +713,6 @@ AcpiDmDisassembleOneOp (
Info->BitOffset += (UINT32) Op->Common.Value.Integer;
break;
-
case AML_INT_RESERVEDFIELD_OP:
/* Offset() -- Must account for previous offsets */
@@ -730,7 +732,6 @@ AcpiDmDisassembleOneOp (
AcpiDmCommaIfFieldMember (Op);
break;
-
case AML_INT_ACCESSFIELD_OP:
case AML_INT_EXTACCESSFIELD_OP:
@@ -748,9 +749,7 @@ AcpiDmDisassembleOneOp (
AcpiDmCommaIfFieldMember (Op);
break;
-
case AML_INT_CONNECTION_OP:
-
/*
* Two types of Connection() - one with a buffer object, the
* other with a namestring that points to a buffer object.
@@ -790,7 +789,6 @@ AcpiDmDisassembleOneOp (
AcpiDmByteList (Info, Op);
break;
-
case AML_INT_METHODCALL_OP:
Op = AcpiPsGetDepthNext (NULL, Op);
@@ -799,7 +797,6 @@ AcpiDmDisassembleOneOp (
AcpiDmNamestring (Op->Common.Value.Name);
break;
-
default:
/* Just get the opcode name and print it */
diff --git a/source/components/disassembler/dmresrc.c b/source/components/disassembler/dmresrc.c
index 5041e88..44111e1 100644
--- a/source/components/disassembler/dmresrc.c
+++ b/source/components/disassembler/dmresrc.c
@@ -337,6 +337,7 @@ AcpiDmResourceTemplate (
return;
default:
+
break;
}
diff --git a/source/components/disassembler/dmresrcl.c b/source/components/disassembler/dmresrcl.c
index 1b7c50b..e35b1b4 100644
--- a/source/components/disassembler/dmresrcl.c
+++ b/source/components/disassembler/dmresrcl.c
@@ -153,16 +153,19 @@ AcpiDmMemoryFields (
switch (Type)
{
case 16:
+
AcpiDmDumpInteger16 (ACPI_CAST_PTR (UINT16, Source)[i],
AcpiDmMemoryNames[i]);
break;
case 32:
+
AcpiDmDumpInteger32 (ACPI_CAST_PTR (UINT32, Source)[i],
AcpiDmMemoryNames[i]);
break;
default:
+
return;
}
}
@@ -201,21 +204,25 @@ AcpiDmAddressFields (
switch (Type)
{
case 16:
+
AcpiDmDumpInteger16 (ACPI_CAST_PTR (UINT16, Source)[i],
AcpiDmAddressNames[i]);
break;
case 32:
+
AcpiDmDumpInteger32 (ACPI_CAST_PTR (UINT32, Source)[i],
AcpiDmAddressNames[i]);
break;
case 64:
+
AcpiDmDumpInteger64 (ACPI_CAST_PTR (UINT64, Source)[i],
AcpiDmAddressNames[i]);
break;
default:
+
return;
}
}
@@ -242,22 +249,27 @@ AcpiDmAddressPrefix (
switch (Type)
{
case ACPI_RESOURCE_TYPE_ADDRESS16:
+
AcpiOsPrintf ("Word");
break;
case ACPI_RESOURCE_TYPE_ADDRESS32:
+
AcpiOsPrintf ("DWord");
break;
case ACPI_RESOURCE_TYPE_ADDRESS64:
+
AcpiOsPrintf ("QWord");
break;
case ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64:
+
AcpiOsPrintf ("Extended");
break;
default:
+
return;
}
}
diff --git a/source/components/disassembler/dmresrcl2.c b/source/components/disassembler/dmresrcl2.c
index 5db2062..1e26f61 100644
--- a/source/components/disassembler/dmresrcl2.c
+++ b/source/components/disassembler/dmresrcl2.c
@@ -376,14 +376,17 @@ AcpiDmGpioDescriptor (
switch (ConnectionType)
{
case AML_RESOURCE_GPIO_TYPE_INT:
+
AcpiDmGpioIntDescriptor (Resource, Length, Level);
break;
case AML_RESOURCE_GPIO_TYPE_IO:
+
AcpiDmGpioIoDescriptor (Resource, Length, Level);
break;
default:
+
AcpiOsPrintf ("Unknown GPIO type\n");
break;
}
@@ -443,6 +446,7 @@ AcpiDmDumpSerialBusVendorData (
break;
default:
+
return;
}
diff --git a/source/components/disassembler/dmwalk.c b/source/components/disassembler/dmwalk.c
index 02c92a3..863471a 100644
--- a/source/components/disassembler/dmwalk.c
+++ b/source/components/disassembler/dmwalk.c
@@ -461,6 +461,7 @@ AcpiDmDescendingOp (
/* Fallthrough */
default:
+
AcpiDmIndent (Level);
break;
}
@@ -699,7 +700,6 @@ AcpiDmDescendingOp (
AcpiDmFieldFlags (NextOp);
break;
-
case AML_BUFFER_OP:
/* The next op is the size parameter */
@@ -737,7 +737,6 @@ AcpiDmDescendingOp (
NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMLIST;
return (AE_OK);
-
case AML_VAR_PACKAGE_OP:
case AML_IF_OP:
case AML_WHILE_OP:
@@ -751,7 +750,6 @@ AcpiDmDescendingOp (
}
return (AE_OK);
-
case AML_PACKAGE_OP:
/* The next op is the size parameter */
@@ -763,13 +761,11 @@ AcpiDmDescendingOp (
}
return (AE_OK);
-
case AML_MATCH_OP:
AcpiDmMatchOp (Op);
break;
-
default:
break;
@@ -866,7 +862,6 @@ AcpiDmAscendingOp (
}
break;
-
case BLOCK_BRACE:
case (BLOCK_BRACE | BLOCK_PAREN):
@@ -906,7 +901,6 @@ AcpiDmAscendingOp (
}
break;
-
case BLOCK_NONE:
default:
diff --git a/source/components/dispatcher/dscontrol.c b/source/components/dispatcher/dscontrol.c
index 39bb178..32efe10 100644
--- a/source/components/dispatcher/dscontrol.c
+++ b/source/components/dispatcher/dscontrol.c
@@ -86,7 +86,6 @@ AcpiDsExecBeginControlOp (
switch (Op->Common.AmlOpcode)
{
case AML_WHILE_OP:
-
/*
* If this is an additional iteration of a while loop, continue.
* There is no need to allocate a new control state.
@@ -107,7 +106,6 @@ AcpiDsExecBeginControlOp (
/*lint -fallthrough */
case AML_IF_OP:
-
/*
* IF/WHILE: Create a new control state to manage these
* constructs. We need to manage these as a stack, in order
@@ -150,6 +148,7 @@ AcpiDsExecBeginControlOp (
break;
default:
+
break;
}
@@ -204,12 +203,10 @@ AcpiDsExecEndControlOp (
AcpiUtDeleteGenericState (ControlState);
break;
-
case AML_ELSE_OP:
break;
-
case AML_WHILE_OP:
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "[WHILE_OP] Op=%p\n", Op));
@@ -252,7 +249,6 @@ AcpiDsExecEndControlOp (
AcpiUtDeleteGenericState (ControlState);
break;
-
case AML_RETURN_OP:
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
@@ -348,12 +344,11 @@ AcpiDsExecEndControlOp (
Status = AE_CTRL_TERMINATE;
break;
-
case AML_NOOP_OP:
/* Just do nothing! */
- break;
+ break;
case AML_BREAK_POINT_OP:
@@ -373,11 +368,9 @@ AcpiDsExecEndControlOp (
"Executed AML Breakpoint opcode");
break;
-
case AML_BREAK_OP:
case AML_CONTINUE_OP: /* ACPI 2.0 */
-
/* Pop and delete control states until we find a while */
while (WalkState->ControlState &&
@@ -410,7 +403,6 @@ AcpiDsExecEndControlOp (
}
break;
-
default:
ACPI_ERROR ((AE_INFO, "Unknown control opcode=0x%X Op=%p",
diff --git a/source/components/dispatcher/dsfield.c b/source/components/dispatcher/dsfield.c
index ac2e847..2fb4f0e 100644
--- a/source/components/dispatcher/dsfield.c
+++ b/source/components/dispatcher/dsfield.c
@@ -599,21 +599,25 @@ AcpiDsInitFieldObjects (
switch (WalkState->Opcode)
{
case AML_FIELD_OP:
+
Arg = AcpiPsGetArg (Op, 2);
Type = ACPI_TYPE_LOCAL_REGION_FIELD;
break;
case AML_BANK_FIELD_OP:
+
Arg = AcpiPsGetArg (Op, 4);
Type = ACPI_TYPE_LOCAL_BANK_FIELD;
break;
case AML_INDEX_FIELD_OP:
+
Arg = AcpiPsGetArg (Op, 3);
Type = ACPI_TYPE_LOCAL_INDEX_FIELD;
break;
default:
+
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
diff --git a/source/components/dispatcher/dsinit.c b/source/components/dispatcher/dsinit.c
index 65ff5cb..a00e1b4 100644
--- a/source/components/dispatcher/dsinit.c
+++ b/source/components/dispatcher/dsinit.c
@@ -128,20 +128,18 @@ AcpiDsInitOneObject (
Info->OpRegionCount++;
break;
-
case ACPI_TYPE_METHOD:
Info->MethodCount++;
break;
-
case ACPI_TYPE_DEVICE:
Info->DeviceCount++;
break;
-
default:
+
break;
}
diff --git a/source/components/dispatcher/dsmthdat.c b/source/components/dispatcher/dsmthdat.c
index ded1eb7..e5578f6 100644
--- a/source/components/dispatcher/dsmthdat.c
+++ b/source/components/dispatcher/dsmthdat.c
@@ -315,6 +315,7 @@ AcpiDsMethodDataGetNode (
break;
default:
+
ACPI_ERROR ((AE_INFO, "Type %u is invalid", Type));
return_ACPI_STATUS (AE_TYPE);
}
@@ -472,7 +473,6 @@ AcpiDsMethodDataGetValue (
return_ACPI_STATUS (AE_AML_UNINITIALIZED_ARG);
case ACPI_REFCLASS_LOCAL:
-
/*
* No error message for this case, will be trapped again later to
* detect and ignore cases of Store(LocalX,LocalX)
diff --git a/source/components/dispatcher/dsobject.c b/source/components/dispatcher/dsobject.c
index 870b9b1..77cc582 100644
--- a/source/components/dispatcher/dsobject.c
+++ b/source/components/dispatcher/dsobject.c
@@ -677,7 +677,6 @@ AcpiDsInitObjectFromOp (
switch (ObjDesc->Common.Type)
{
case ACPI_TYPE_BUFFER:
-
/*
* Defer evaluation of Buffer TermArg operand
*/
@@ -687,9 +686,7 @@ AcpiDsInitObjectFromOp (
ObjDesc->Buffer.AmlLength = Op->Named.Length;
break;
-
case ACPI_TYPE_PACKAGE:
-
/*
* Defer evaluation of Package TermArg operand
*/
@@ -699,7 +696,6 @@ AcpiDsInitObjectFromOp (
ObjDesc->Package.AmlLength = Op->Named.Length;
break;
-
case ACPI_TYPE_INTEGER:
switch (OpInfo->Type)
@@ -752,7 +748,6 @@ AcpiDsInitObjectFromOp (
}
break;
-
case AML_TYPE_LITERAL:
ObjDesc->Integer.Value = Op->Common.Value.Integer;
@@ -770,8 +765,8 @@ AcpiDsInitObjectFromOp (
#endif
break;
-
default:
+
ACPI_ERROR ((AE_INFO, "Unknown Integer type 0x%X",
OpInfo->Type));
Status = AE_AML_OPERAND_TYPE;
@@ -779,7 +774,6 @@ AcpiDsInitObjectFromOp (
}
break;
-
case ACPI_TYPE_STRING:
ObjDesc->String.Pointer = Op->Common.Value.String;
@@ -792,11 +786,9 @@ AcpiDsInitObjectFromOp (
ObjDesc->Common.Flags |= AOPOBJ_STATIC_POINTER;
break;
-
case ACPI_TYPE_METHOD:
break;
-
case ACPI_TYPE_LOCAL_REFERENCE:
switch (OpInfo->Type)
@@ -816,7 +808,6 @@ AcpiDsInitObjectFromOp (
#endif
break;
-
case AML_TYPE_METHOD_ARGUMENT:
/* Arg ID (0-6) is (AML opcode - base AML_ARG_OP) */
@@ -860,7 +851,6 @@ AcpiDsInitObjectFromOp (
}
break;
-
default:
ACPI_ERROR ((AE_INFO, "Unimplemented data type: 0x%X",
diff --git a/source/components/dispatcher/dsopcode.c b/source/components/dispatcher/dsopcode.c
index 8415bec..63c20a3 100644
--- a/source/components/dispatcher/dsopcode.c
+++ b/source/components/dispatcher/dsopcode.c
@@ -680,6 +680,7 @@ AcpiDsEvalDataObjectOperands (
break;
default:
+
return_ACPI_STATUS (AE_AML_BAD_OPCODE);
}
diff --git a/source/components/dispatcher/dsutils.c b/source/components/dispatcher/dsutils.c
index a7cc232..9fedbe6 100644
--- a/source/components/dispatcher/dsutils.c
+++ b/source/components/dispatcher/dsutils.c
@@ -264,7 +264,6 @@ AcpiDsIsResultUsed (
case AML_IF_OP:
case AML_WHILE_OP:
-
/*
* If we are executing the predicate AND this is the predicate op,
* we will use the return value
@@ -277,7 +276,9 @@ AcpiDsIsResultUsed (
break;
default:
+
/* Ignore other control opcodes */
+
break;
}
@@ -285,16 +286,13 @@ AcpiDsIsResultUsed (
goto ResultNotUsed;
-
case AML_CLASS_CREATE:
-
/*
* These opcodes allow TermArg(s) as operands and therefore
* the operands can be method calls. The result is used.
*/
goto ResultUsed;
-
case AML_CLASS_NAMED_OBJECT:
if ((Op->Common.Parent->Common.AmlOpcode == AML_REGION_OP) ||
@@ -314,9 +312,7 @@ AcpiDsIsResultUsed (
goto ResultNotUsed;
-
default:
-
/*
* In all other cases. the parent will actually use the return
* object, so keep it.
diff --git a/source/components/dispatcher/dswexec.c b/source/components/dispatcher/dswexec.c
index 0336635..25de7f7 100644
--- a/source/components/dispatcher/dswexec.c
+++ b/source/components/dispatcher/dswexec.c
@@ -318,7 +318,6 @@ AcpiDsExecBeginOp (
Status = AcpiDsExecBeginControlOp (WalkState, Op);
break;
-
case AML_CLASS_NAMED_OBJECT:
if (WalkState->WalkType & ACPI_WALK_METHOD)
@@ -350,14 +349,13 @@ AcpiDsExecBeginOp (
}
break;
-
case AML_CLASS_EXECUTE:
case AML_CLASS_CREATE:
break;
-
default:
+
break;
}
@@ -441,7 +439,6 @@ AcpiDsExecEndOp (
}
break;
-
case AML_CLASS_EXECUTE: /* Most operators with arguments */
/* Build resolved operand stack */
@@ -514,7 +511,6 @@ AcpiDsExecEndOp (
}
break;
-
default:
switch (OpType)
@@ -527,9 +523,7 @@ AcpiDsExecEndOp (
break;
-
case AML_TYPE_METHOD_CALL:
-
/*
* If the method is referenced from within a package
* declaration, it is not a invocation of the method, just
@@ -596,7 +590,6 @@ AcpiDsExecEndOp (
*/
return_ACPI_STATUS (Status);
-
case AML_TYPE_CREATE_FIELD:
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
@@ -620,7 +613,6 @@ AcpiDsExecEndOp (
switch (Op->Common.Parent->Common.AmlOpcode)
{
case AML_NAME_OP:
-
/*
* Put the Node on the object stack (Contains the ACPI Name
* of this object)
@@ -661,7 +653,6 @@ AcpiDsExecEndOp (
}
break;
-
case AML_TYPE_NAMED_FIELD:
case AML_TYPE_NAMED_COMPLEX:
case AML_TYPE_NAMED_SIMPLE:
@@ -708,14 +699,12 @@ AcpiDsExecEndOp (
}
break;
-
case AML_TYPE_UNDEFINED:
ACPI_ERROR ((AE_INFO,
"Undefined opcode type Op=%p", Op));
return_ACPI_STATUS (AE_NOT_IMPLEMENTED);
-
case AML_TYPE_BOGUS:
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
@@ -723,7 +712,6 @@ AcpiDsExecEndOp (
WalkState->Opcode, Op));
break;
-
default:
ACPI_ERROR ((AE_INFO,
diff --git a/source/components/dispatcher/dswload.c b/source/components/dispatcher/dswload.c
index 10ff07a..7050c87 100644
--- a/source/components/dispatcher/dswload.c
+++ b/source/components/dispatcher/dswload.c
@@ -81,6 +81,7 @@ AcpiDsInitCallbacks (
switch (PassNumber)
{
case 1:
+
WalkState->ParseFlags = ACPI_PARSE_LOAD_PASS1 |
ACPI_PARSE_DELETE_TREE;
WalkState->DescendingCallback = AcpiDsLoad1BeginOp;
@@ -88,6 +89,7 @@ AcpiDsInitCallbacks (
break;
case 2:
+
WalkState->ParseFlags = ACPI_PARSE_LOAD_PASS1 |
ACPI_PARSE_DELETE_TREE;
WalkState->DescendingCallback = AcpiDsLoad2BeginOp;
@@ -95,6 +97,7 @@ AcpiDsInitCallbacks (
break;
case 3:
+
#ifndef ACPI_NO_METHOD_EXECUTION
WalkState->ParseFlags |= ACPI_PARSE_EXECUTE |
ACPI_PARSE_DELETE_TREE;
@@ -104,6 +107,7 @@ AcpiDsInitCallbacks (
break;
default:
+
return (AE_BAD_PARAMETER);
}
@@ -174,7 +178,6 @@ AcpiDsLoad1BeginOp (
switch (WalkState->Opcode)
{
case AML_SCOPE_OP:
-
/*
* The target name of the Scope() operator must exist at this point so
* that we can actually open the scope to enter new names underneath it.
@@ -221,7 +224,6 @@ AcpiDsLoad1BeginOp (
case ACPI_TYPE_INTEGER:
case ACPI_TYPE_STRING:
case ACPI_TYPE_BUFFER:
-
/*
* These types we will allow, but we will change the type.
* This enables some existing code of the form:
@@ -242,7 +244,6 @@ AcpiDsLoad1BeginOp (
break;
case ACPI_TYPE_METHOD:
-
/*
* Allow scope change to root during execution of module-level
* code. Root is typed METHOD during this time.
@@ -268,7 +269,6 @@ AcpiDsLoad1BeginOp (
}
break;
-
default:
/*
* For all other named opcodes, we will enter the name into
diff --git a/source/components/dispatcher/dswload2.c b/source/components/dispatcher/dswload2.c
index a305564..07bd35e 100644
--- a/source/components/dispatcher/dswload2.c
+++ b/source/components/dispatcher/dswload2.c
@@ -496,7 +496,6 @@ AcpiDsLoad2EndOp (
Status = AcpiDsCreateBufferField (Op, WalkState);
break;
-
case AML_TYPE_NAMED_FIELD:
/*
* If we are executing a method, initialize the field
@@ -525,12 +524,12 @@ AcpiDsLoad2EndOp (
break;
default:
+
/* All NAMED_FIELD opcodes must be handled above */
break;
}
break;
-
case AML_TYPE_NAMED_SIMPLE:
Status = AcpiDsCreateOperands (WalkState, Arg);
@@ -561,13 +560,13 @@ AcpiDsLoad2EndOp (
Status = AcpiExCreateEvent (WalkState);
break;
-
case AML_ALIAS_OP:
Status = AcpiExCreateAlias (WalkState);
break;
default:
+
/* Unknown opcode */
Status = AE_OK;
@@ -652,13 +651,11 @@ AcpiDsLoad2EndOp (
}
break;
-
case AML_NAME_OP:
Status = AcpiDsCreateNode (WalkState, Node, Op);
break;
-
case AML_METHOD_OP:
/*
* MethodOp PkgLength NameString MethodFlags TermList
@@ -696,18 +693,17 @@ AcpiDsLoad2EndOp (
#endif /* ACPI_NO_METHOD_EXECUTION */
default:
+
/* All NAMED_COMPLEX opcodes must be handled above */
break;
}
break;
-
case AML_CLASS_INTERNAL:
/* case AML_INT_NAMEPATH_OP: */
break;
-
case AML_CLASS_METHOD_CALL:
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
@@ -747,6 +743,7 @@ AcpiDsLoad2EndOp (
default:
+
break;
}
diff --git a/source/components/events/evglock.c b/source/components/events/evglock.c
index 591bb7c..fffe8dd 100644
--- a/source/components/events/evglock.c
+++ b/source/components/events/evglock.c
@@ -144,6 +144,7 @@ AcpiEvRemoveGlobalLockHandler (
Status = AcpiRemoveFixedEventHandler (ACPI_EVENT_GLOBAL,
AcpiEvGlobalLockHandler);
+ AcpiOsDeleteLock (AcpiGbl_GlobalLockPendingLock);
return_ACPI_STATUS (Status);
}
diff --git a/source/components/events/evgpe.c b/source/components/events/evgpe.c
index 47c8c75..9b80f08 100644
--- a/source/components/events/evgpe.c
+++ b/source/components/events/evgpe.c
@@ -578,7 +578,6 @@ AcpiEvAsynchExecuteGpeMethod (
switch (LocalGpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK)
{
case ACPI_GPE_DISPATCH_NOTIFY:
-
/*
* Implicit notify.
* Dispatch a DEVICE_WAKE notify to the appropriate handler.
@@ -631,6 +630,7 @@ AcpiEvAsynchExecuteGpeMethod (
break;
default:
+
return_VOID; /* Should never happen */
}
@@ -817,7 +817,6 @@ AcpiEvGpeDispatch (
case ACPI_GPE_DISPATCH_METHOD:
case ACPI_GPE_DISPATCH_NOTIFY:
-
/*
* Execute the method associated with the GPE
* NOTE: Level-triggered GPEs are cleared after the method completes.
@@ -833,7 +832,6 @@ AcpiEvGpeDispatch (
break;
default:
-
/*
* No handler or method to run!
* 03/2010: This case should no longer be possible. We will not allow
diff --git a/source/components/events/evgpeblk.c b/source/components/events/evgpeblk.c
index 64c8194..ccbe6a61 100644
--- a/source/components/events/evgpeblk.c
+++ b/source/components/events/evgpeblk.c
@@ -420,6 +420,8 @@ AcpiEvCreateGpeBlock (
Status = AcpiEvInstallGpeBlock (GpeBlock, InterruptNumber);
if (ACPI_FAILURE (Status))
{
+ ACPI_FREE (GpeBlock->RegisterInfo);
+ ACPI_FREE (GpeBlock->EventInfo);
ACPI_FREE (GpeBlock);
return_ACPI_STATUS (Status);
}
diff --git a/source/components/events/evgpeinit.c b/source/components/events/evgpeinit.c
index af1ec64..44a1378 100644
--- a/source/components/events/evgpeinit.c
+++ b/source/components/events/evgpeinit.c
@@ -382,14 +382,17 @@ AcpiEvMatchGpeMethod (
switch (Name[1])
{
case 'L':
+
Type = ACPI_GPE_LEVEL_TRIGGERED;
break;
case 'E':
+
Type = ACPI_GPE_EDGE_TRIGGERED;
break;
default:
+
/* Unknown method type, just ignore it */
ACPI_DEBUG_PRINT ((ACPI_DB_LOAD,
diff --git a/source/components/events/evhandler.c b/source/components/events/evhandler.c
index 355a248..9444b06 100644
--- a/source/components/events/evhandler.c
+++ b/source/components/events/evhandler.c
@@ -393,36 +393,43 @@ AcpiEvInstallSpaceHandler (
switch (SpaceId)
{
case ACPI_ADR_SPACE_SYSTEM_MEMORY:
+
Handler = AcpiExSystemMemorySpaceHandler;
Setup = AcpiEvSystemMemoryRegionSetup;
break;
case ACPI_ADR_SPACE_SYSTEM_IO:
+
Handler = AcpiExSystemIoSpaceHandler;
Setup = AcpiEvIoSpaceRegionSetup;
break;
case ACPI_ADR_SPACE_PCI_CONFIG:
+
Handler = AcpiExPciConfigSpaceHandler;
Setup = AcpiEvPciConfigRegionSetup;
break;
case ACPI_ADR_SPACE_CMOS:
+
Handler = AcpiExCmosSpaceHandler;
Setup = AcpiEvCmosRegionSetup;
break;
case ACPI_ADR_SPACE_PCI_BAR_TARGET:
+
Handler = AcpiExPciBarSpaceHandler;
Setup = AcpiEvPciBarRegionSetup;
break;
case ACPI_ADR_SPACE_DATA_TABLE:
+
Handler = AcpiExDataTableSpaceHandler;
Setup = NULL;
break;
default:
+
Status = AE_BAD_PARAMETER;
goto UnlockAndExit;
}
diff --git a/source/components/events/evmisc.c b/source/components/events/evmisc.c
index 1a971bf..1990a41 100644
--- a/source/components/events/evmisc.c
+++ b/source/components/events/evmisc.c
@@ -86,6 +86,7 @@ AcpiEvIsNotifyObject (
return (TRUE);
default:
+
return (FALSE);
}
}
@@ -306,6 +307,8 @@ AcpiEvTerminate (
ACPI_ERROR ((AE_INFO,
"Could not remove Global Lock handler"));
}
+
+ AcpiGbl_EventsInitialized = FALSE;
}
/* Deallocate all handler objects installed within GPE info structs */
diff --git a/source/components/events/evrgnini.c b/source/components/events/evrgnini.c
index 4bb7c9f..b8a632e 100644
--- a/source/components/events/evrgnini.c
+++ b/source/components/events/evrgnini.c
@@ -664,7 +664,9 @@ AcpiEvInitializeRegion (
break;
default:
+
/* Ignore other objects */
+
break;
}
diff --git a/source/components/events/evxfgpe.c b/source/components/events/evxfgpe.c
index b8d7e37..1deff5b 100644
--- a/source/components/events/evxfgpe.c
+++ b/source/components/events/evxfgpe.c
@@ -250,14 +250,17 @@ AcpiSetGpe (
switch (Action)
{
case ACPI_GPE_ENABLE:
+
Status = AcpiEvEnableGpe (GpeEventInfo);
break;
case ACPI_GPE_DISABLE:
+
Status = AcpiHwLowSetGpe (GpeEventInfo, ACPI_GPE_DISABLE);
break;
default:
+
Status = AE_BAD_PARAMETER;
break;
}
@@ -487,14 +490,17 @@ AcpiSetGpeWakeMask (
switch (Action)
{
case ACPI_GPE_ENABLE:
+
ACPI_SET_BIT (GpeRegisterInfo->EnableForWake, (UINT8) RegisterBit);
break;
case ACPI_GPE_DISABLE:
+
ACPI_CLEAR_BIT (GpeRegisterInfo->EnableForWake, (UINT8) RegisterBit);
break;
default:
+
ACPI_ERROR ((AE_INFO, "%u, Invalid action", Action));
Status = AE_BAD_PARAMETER;
break;
diff --git a/source/components/events/evxfregn.c b/source/components/events/evxfregn.c
index 330de61..4b5b3d0 100644
--- a/source/components/events/evxfregn.c
+++ b/source/components/events/evxfregn.c
@@ -149,6 +149,7 @@ AcpiInstallAddressSpaceHandler (
break;
default:
+
break;
}
diff --git a/source/components/executer/exconfig.c b/source/components/executer/exconfig.c
index 7d72a5f..3e9f12b 100644
--- a/source/components/executer/exconfig.c
+++ b/source/components/executer/exconfig.c
@@ -483,7 +483,6 @@ AcpiExLoadOp (
TableDesc.Address = ObjDesc->Region.Address;
break;
-
case ACPI_TYPE_BUFFER: /* Buffer or resolved RegionField */
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
@@ -526,8 +525,8 @@ AcpiExLoadOp (
TableDesc.Address = ACPI_TO_INTEGER (TableDesc.Pointer);
break;
-
default:
+
return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
}
diff --git a/source/components/executer/exconvrt.c b/source/components/executer/exconvrt.c
index 2ba2e3e..6f803c0 100644
--- a/source/components/executer/exconvrt.c
+++ b/source/components/executer/exconvrt.c
@@ -114,6 +114,7 @@ AcpiExConvertToInteger (
break;
default:
+
return_ACPI_STATUS (AE_TYPE);
}
@@ -133,7 +134,6 @@ AcpiExConvertToInteger (
switch (ObjDesc->Common.Type)
{
case ACPI_TYPE_STRING:
-
/*
* Convert string to an integer - for most cases, the string must be
* hexadecimal as per the ACPI specification. The only exception (as
@@ -147,7 +147,6 @@ AcpiExConvertToInteger (
}
break;
-
case ACPI_TYPE_BUFFER:
/* Check for zero-length buffer */
@@ -179,10 +178,10 @@ AcpiExConvertToInteger (
}
break;
-
default:
/* No other types can get here */
+
break;
}
@@ -242,7 +241,6 @@ AcpiExConvertToBuffer (
case ACPI_TYPE_INTEGER:
-
/*
* Create a new Buffer object.
* Need enough space for one integer
@@ -261,9 +259,7 @@ AcpiExConvertToBuffer (
AcpiGbl_IntegerByteWidth);
break;
-
case ACPI_TYPE_STRING:
-
/*
* Create a new Buffer object
* Size will be the string length
@@ -287,8 +283,8 @@ AcpiExConvertToBuffer (
ObjDesc->String.Length);
break;
-
default:
+
return_ACPI_STATUS (AE_TYPE);
}
@@ -344,15 +340,18 @@ AcpiExConvertToAscii (
switch (DataWidth)
{
case 1:
+
DecimalLength = ACPI_MAX8_DECIMAL_DIGITS;
break;
case 4:
+
DecimalLength = ACPI_MAX32_DECIMAL_DIGITS;
break;
case 8:
default:
+
DecimalLength = ACPI_MAX64_DECIMAL_DIGITS;
break;
}
@@ -461,7 +460,6 @@ AcpiExConvertToString (
*ResultDesc = ObjDesc;
return_ACPI_STATUS (AE_OK);
-
case ACPI_TYPE_INTEGER:
switch (Type)
@@ -505,7 +503,6 @@ AcpiExConvertToString (
NewBuf [StringLength] = 0;
break;
-
case ACPI_TYPE_BUFFER:
/* Setup string length, base, and separator */
@@ -604,6 +601,7 @@ AcpiExConvertToString (
break;
default:
+
return_ACPI_STATUS (AE_TYPE);
}
@@ -663,6 +661,7 @@ AcpiExConvertToTargetType (
break;
default:
+
/* No conversion allowed for these types */
if (DestinationType != SourceDesc->Common.Type)
@@ -676,7 +675,6 @@ AcpiExConvertToTargetType (
}
break;
-
case ARGI_TARGETREF:
switch (DestinationType)
@@ -693,7 +691,6 @@ AcpiExConvertToTargetType (
16);
break;
-
case ACPI_TYPE_STRING:
/*
* The operand must be a String. We can convert an
@@ -703,7 +700,6 @@ AcpiExConvertToTargetType (
ACPI_IMPLICIT_CONVERT_HEX);
break;
-
case ACPI_TYPE_BUFFER:
/*
* The operand must be a Buffer. We can convert an
@@ -712,8 +708,8 @@ AcpiExConvertToTargetType (
Status = AcpiExConvertToBuffer (SourceDesc, ResultDesc);
break;
-
default:
+
ACPI_ERROR ((AE_INFO, "Bad destination type during conversion: 0x%X",
DestinationType));
Status = AE_AML_INTERNAL;
@@ -721,15 +717,14 @@ AcpiExConvertToTargetType (
}
break;
-
case ARGI_REFERENCE:
/*
* CreateXxxxField cases - we are storing the field object into the name
*/
break;
-
default:
+
ACPI_ERROR ((AE_INFO,
"Unknown Target type ID 0x%X AmlOpcode 0x%X DestType %s",
GET_CURRENT_ARG_TYPE (WalkState->OpInfo->RuntimeArgs),
diff --git a/source/components/executer/excreate.c b/source/components/executer/excreate.c
index 822f2a5..376e1fd 100644
--- a/source/components/executer/excreate.c
+++ b/source/components/executer/excreate.c
@@ -113,7 +113,6 @@ AcpiExCreateAlias (
case ACPI_TYPE_BUFFER:
case ACPI_TYPE_PACKAGE:
case ACPI_TYPE_BUFFER_FIELD:
-
/*
* These types open a new scope, so we need the NS node in order to access
* any children.
@@ -123,7 +122,6 @@ AcpiExCreateAlias (
case ACPI_TYPE_PROCESSOR:
case ACPI_TYPE_THERMAL:
case ACPI_TYPE_LOCAL_SCOPE:
-
/*
* The new alias has the type ALIAS and points to the original
* NS node, not the object itself.
@@ -133,7 +131,6 @@ AcpiExCreateAlias (
break;
case ACPI_TYPE_METHOD:
-
/*
* Control method aliases need to be differentiated
*/
diff --git a/source/components/executer/exdebug.c b/source/components/executer/exdebug.c
index 923d2ce..9db779f 100644
--- a/source/components/executer/exdebug.c
+++ b/source/components/executer/exdebug.c
@@ -208,6 +208,7 @@ AcpiExDoDebugObject (
return_VOID;
default:
+
break;
}
@@ -241,6 +242,7 @@ AcpiExDoDebugObject (
break;
default:
+
AcpiExDoDebugObject ((SourceDesc->Reference.Node)->Object,
Level+4, 0);
break;
diff --git a/source/components/executer/exdump.c b/source/components/executer/exdump.c
index 48ff6e3..333168ec 100644
--- a/source/components/executer/exdump.c
+++ b/source/components/executer/exdump.c
@@ -380,6 +380,7 @@ AcpiExDumpObject (
switch (Info->Opcode)
{
case ACPI_EXD_INIT:
+
break;
case ACPI_EXD_TYPE:
@@ -541,19 +542,16 @@ AcpiExDumpOperand (
AcpiOsPrintf ("\n");
break;
-
case ACPI_REFCLASS_INDEX:
AcpiOsPrintf ("%p\n", ObjDesc->Reference.Object);
break;
-
case ACPI_REFCLASS_TABLE:
AcpiOsPrintf ("Table Index %X\n", ObjDesc->Reference.Value);
break;
-
case ACPI_REFCLASS_REFOF:
AcpiOsPrintf ("%p [%s]\n", ObjDesc->Reference.Object,
@@ -561,20 +559,17 @@ AcpiExDumpOperand (
ObjDesc->Reference.Object)->Common.Type));
break;
-
case ACPI_REFCLASS_NAME:
AcpiOsPrintf ("- [%4.4s]\n", ObjDesc->Reference.Node->Name.Ascii);
break;
-
case ACPI_REFCLASS_ARG:
case ACPI_REFCLASS_LOCAL:
AcpiOsPrintf ("%X\n", ObjDesc->Reference.Value);
break;
-
default: /* Unknown reference class */
AcpiOsPrintf ("%2.2X\n", ObjDesc->Reference.Class);
@@ -582,7 +577,6 @@ AcpiExDumpOperand (
}
break;
-
case ACPI_TYPE_BUFFER:
AcpiOsPrintf ("Buffer length %.2X @ %p\n",
@@ -604,14 +598,12 @@ AcpiExDumpOperand (
}
break;
-
case ACPI_TYPE_INTEGER:
AcpiOsPrintf ("Integer %8.8X%8.8X\n",
ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
break;
-
case ACPI_TYPE_PACKAGE:
AcpiOsPrintf ("Package [Len %X] ElementArray %p\n",
@@ -632,7 +624,6 @@ AcpiExDumpOperand (
}
break;
-
case ACPI_TYPE_REGION:
AcpiOsPrintf ("Region %s (%X)",
@@ -655,7 +646,6 @@ AcpiExDumpOperand (
}
break;
-
case ACPI_TYPE_STRING:
AcpiOsPrintf ("String length %X @ %p ",
@@ -666,13 +656,11 @@ AcpiExDumpOperand (
AcpiOsPrintf ("\n");
break;
-
case ACPI_TYPE_LOCAL_BANK_FIELD:
AcpiOsPrintf ("BankField\n");
break;
-
case ACPI_TYPE_LOCAL_REGION_FIELD:
AcpiOsPrintf ("RegionField: Bits=%X AccWidth=%X Lock=%X Update=%X at "
@@ -687,13 +675,11 @@ AcpiExDumpOperand (
AcpiExDumpOperand (ObjDesc->Field.RegionObj, Depth+1);
break;
-
case ACPI_TYPE_LOCAL_INDEX_FIELD:
AcpiOsPrintf ("IndexField\n");
break;
-
case ACPI_TYPE_BUFFER_FIELD:
AcpiOsPrintf ("BufferField: %X bits at byte %X bit %X of\n",
@@ -716,13 +702,11 @@ AcpiExDumpOperand (
}
break;
-
case ACPI_TYPE_EVENT:
AcpiOsPrintf ("Event\n");
break;
-
case ACPI_TYPE_METHOD:
AcpiOsPrintf ("Method(%X) @ %p:%X\n",
@@ -731,38 +715,33 @@ AcpiExDumpOperand (
ObjDesc->Method.AmlLength);
break;
-
case ACPI_TYPE_MUTEX:
AcpiOsPrintf ("Mutex\n");
break;
-
case ACPI_TYPE_DEVICE:
AcpiOsPrintf ("Device\n");
break;
-
case ACPI_TYPE_POWER:
AcpiOsPrintf ("Power\n");
break;
-
case ACPI_TYPE_PROCESSOR:
AcpiOsPrintf ("Processor\n");
break;
-
case ACPI_TYPE_THERMAL:
AcpiOsPrintf ("Thermal\n");
break;
-
default:
+
/* Unknown Type */
AcpiOsPrintf ("Unknown Type %X\n", ObjDesc->Common.Type);
@@ -1005,7 +984,6 @@ AcpiExDumpPackageObj (
ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
break;
-
case ACPI_TYPE_STRING:
AcpiOsPrintf ("[String] Value: ");
@@ -1013,7 +991,6 @@ AcpiExDumpPackageObj (
AcpiOsPrintf ("\n");
break;
-
case ACPI_TYPE_BUFFER:
AcpiOsPrintf ("[Buffer] Length %.2X = ", ObjDesc->Buffer.Length);
@@ -1028,7 +1005,6 @@ AcpiExDumpPackageObj (
}
break;
-
case ACPI_TYPE_PACKAGE:
AcpiOsPrintf ("[Package] Contains %u Elements:\n",
@@ -1040,7 +1016,6 @@ AcpiExDumpPackageObj (
}
break;
-
case ACPI_TYPE_LOCAL_REFERENCE:
AcpiOsPrintf ("[Object Reference] Type [%s] %2.2X",
@@ -1049,7 +1024,6 @@ AcpiExDumpPackageObj (
AcpiExDumpReferenceObj (ObjDesc);
break;
-
default:
AcpiOsPrintf ("[Unknown Type] %X\n", ObjDesc->Common.Type);
diff --git a/source/components/executer/exfield.c b/source/components/executer/exfield.c
index 18021c5..2b4f5f7 100644
--- a/source/components/executer/exfield.c
+++ b/source/components/executer/exfield.c
@@ -360,21 +360,25 @@ AcpiExWriteDataToField (
switch (SourceDesc->Common.Type)
{
case ACPI_TYPE_INTEGER:
+
Buffer = &SourceDesc->Integer.Value;
Length = sizeof (SourceDesc->Integer.Value);
break;
case ACPI_TYPE_BUFFER:
+
Buffer = SourceDesc->Buffer.Pointer;
Length = SourceDesc->Buffer.Length;
break;
case ACPI_TYPE_STRING:
+
Buffer = SourceDesc->String.Pointer;
Length = SourceDesc->String.Length;
break;
default:
+
return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
}
diff --git a/source/components/executer/exfldio.c b/source/components/executer/exfldio.c
index 85da123..cd3c40f 100644
--- a/source/components/executer/exfldio.c
+++ b/source/components/executer/exfldio.c
@@ -480,9 +480,7 @@ AcpiExFieldDatumIo (
Status = AE_OK;
break;
-
case ACPI_TYPE_LOCAL_BANK_FIELD:
-
/*
* Ensure that the BankValue is not beyond the capacity of
* the register
@@ -512,7 +510,6 @@ AcpiExFieldDatumIo (
/*lint -fallthrough */
-
case ACPI_TYPE_LOCAL_REGION_FIELD:
/*
* For simple RegionFields, we just directly access the owning
@@ -522,10 +519,7 @@ AcpiExFieldDatumIo (
ReadWrite);
break;
-
case ACPI_TYPE_LOCAL_INDEX_FIELD:
-
-
/*
* Ensure that the IndexValue is not beyond the capacity of
* the register
@@ -575,7 +569,6 @@ AcpiExFieldDatumIo (
}
break;
-
default:
ACPI_ERROR ((AE_INFO, "Wrong object type in field I/O %u",
diff --git a/source/components/executer/exmisc.c b/source/components/executer/exmisc.c
index e527514..7520c9b 100644
--- a/source/components/executer/exmisc.c
+++ b/source/components/executer/exmisc.c
@@ -115,16 +115,13 @@ AcpiExGetObjectReference (
}
break;
-
case ACPI_DESC_TYPE_NAMED:
-
/*
* A named reference that has already been resolved to a Node
*/
ReferencedObj = ObjDesc;
break;
-
default:
ACPI_ERROR ((AE_INFO, "Invalid descriptor type 0x%X",
@@ -286,19 +283,23 @@ AcpiExDoConcatenate (
switch (Operand0->Common.Type)
{
case ACPI_TYPE_INTEGER:
+
Status = AcpiExConvertToInteger (Operand1, &LocalOperand1, 16);
break;
case ACPI_TYPE_STRING:
+
Status = AcpiExConvertToString (Operand1, &LocalOperand1,
ACPI_IMPLICIT_CONVERT_HEX);
break;
case ACPI_TYPE_BUFFER:
+
Status = AcpiExConvertToBuffer (Operand1, &LocalOperand1);
break;
default:
+
ACPI_ERROR ((AE_INFO, "Invalid object type: 0x%X",
Operand0->Common.Type));
Status = AE_AML_INTERNAL;
@@ -450,37 +451,30 @@ AcpiExDoMathOp (
return (Integer0 + Integer1);
-
case AML_BIT_AND_OP: /* And (Integer0, Integer1, Result) */
return (Integer0 & Integer1);
-
case AML_BIT_NAND_OP: /* NAnd (Integer0, Integer1, Result) */
return (~(Integer0 & Integer1));
-
case AML_BIT_OR_OP: /* Or (Integer0, Integer1, Result) */
return (Integer0 | Integer1);
-
case AML_BIT_NOR_OP: /* NOr (Integer0, Integer1, Result) */
return (~(Integer0 | Integer1));
-
case AML_BIT_XOR_OP: /* XOr (Integer0, Integer1, Result) */
return (Integer0 ^ Integer1);
-
case AML_MULTIPLY_OP: /* Multiply (Integer0, Integer1, Result) */
return (Integer0 * Integer1);
-
case AML_SHIFT_LEFT_OP: /* ShiftLeft (Operand, ShiftCount, Result)*/
/*
@@ -493,7 +487,6 @@ AcpiExDoMathOp (
}
return (Integer0 << Integer1);
-
case AML_SHIFT_RIGHT_OP: /* ShiftRight (Operand, ShiftCount, Result) */
/*
@@ -506,7 +499,6 @@ AcpiExDoMathOp (
}
return (Integer0 >> Integer1);
-
case AML_SUBTRACT_OP: /* Subtract (Integer0, Integer1, Result) */
return (Integer0 - Integer1);
@@ -571,6 +563,7 @@ AcpiExDoLogicalNumericOp (
break;
default:
+
Status = AE_AML_INTERNAL;
break;
}
@@ -638,19 +631,23 @@ AcpiExDoLogicalOp (
switch (Operand0->Common.Type)
{
case ACPI_TYPE_INTEGER:
+
Status = AcpiExConvertToInteger (Operand1, &LocalOperand1, 16);
break;
case ACPI_TYPE_STRING:
+
Status = AcpiExConvertToString (Operand1, &LocalOperand1,
ACPI_IMPLICIT_CONVERT_HEX);
break;
case ACPI_TYPE_BUFFER:
+
Status = AcpiExConvertToBuffer (Operand1, &LocalOperand1);
break;
default:
+
Status = AE_AML_INTERNAL;
break;
}
@@ -699,6 +696,7 @@ AcpiExDoLogicalOp (
break;
default:
+
Status = AE_AML_INTERNAL;
break;
}
@@ -776,6 +774,7 @@ AcpiExDoLogicalOp (
break;
default:
+
Status = AE_AML_INTERNAL;
break;
}
diff --git a/source/components/executer/exnames.c b/source/components/executer/exnames.c
index fee4e5c..ac12e1a 100644
--- a/source/components/executer/exnames.c
+++ b/source/components/executer/exnames.c
@@ -334,7 +334,6 @@ AcpiExGetNameString (
HasPrefix = TRUE;
break;
-
case AML_PARENT_PREFIX:
/* Increment past possibly multiple parent prefixes */
@@ -352,7 +351,6 @@ AcpiExGetNameString (
HasPrefix = TRUE;
break;
-
default:
/* Not a prefix character */
@@ -388,7 +386,6 @@ AcpiExGetNameString (
}
break;
-
case AML_MULTI_NAME_PREFIX_OP:
ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "MultiNamePrefix at %p\n",
@@ -420,7 +417,6 @@ AcpiExGetNameString (
break;
-
case 0:
/* NullName valid as of 8-12-98 ASL/AML Grammar Update */
@@ -443,7 +439,6 @@ AcpiExGetNameString (
break;
-
default:
/* Name segment string */
diff --git a/source/components/executer/exoparg1.c b/source/components/executer/exoparg1.c
index 73fc026..ff8dee2 100644
--- a/source/components/executer/exoparg1.c
+++ b/source/components/executer/exoparg1.c
@@ -180,37 +180,31 @@ AcpiExOpcode_1A_0T_0R (
Status = AcpiExReleaseMutex (Operand[0], WalkState);
break;
-
case AML_RESET_OP: /* Reset (EventObject) */
Status = AcpiExSystemResetEvent (Operand[0]);
break;
-
case AML_SIGNAL_OP: /* Signal (EventObject) */
Status = AcpiExSystemSignalEvent (Operand[0]);
break;
-
case AML_SLEEP_OP: /* Sleep (MsecTime) */
Status = AcpiExSystemDoSleep (Operand[0]->Integer.Value);
break;
-
case AML_STALL_OP: /* Stall (UsecTime) */
Status = AcpiExSystemDoStall ((UINT32) Operand[0]->Integer.Value);
break;
-
case AML_UNLOAD_OP: /* Unload (Handle) */
Status = AcpiExUnloadTable (Operand[0]);
break;
-
default: /* Unknown opcode */
ACPI_ERROR ((AE_INFO, "Unknown AML opcode 0x%X",
@@ -330,7 +324,6 @@ AcpiExOpcode_1A_1T_1R (
ReturnDesc->Integer.Value = ~Operand[0]->Integer.Value;
break;
-
case AML_FIND_SET_LEFT_BIT_OP: /* FindSetLeftBit (Operand, Result) */
ReturnDesc->Integer.Value = Operand[0]->Integer.Value;
@@ -348,7 +341,6 @@ AcpiExOpcode_1A_1T_1R (
ReturnDesc->Integer.Value = Temp32;
break;
-
case AML_FIND_SET_RIGHT_BIT_OP: /* FindSetRightBit (Operand, Result) */
ReturnDesc->Integer.Value = Operand[0]->Integer.Value;
@@ -369,9 +361,7 @@ AcpiExOpcode_1A_1T_1R (
Temp32 == 0 ? 0 : (ACPI_INTEGER_BIT_SIZE + 1) - Temp32;
break;
-
case AML_FROM_BCD_OP: /* FromBcd (BCDValue, Result) */
-
/*
* The 64-bit ACPI integer can hold 16 4-bit BCD characters
* (if table is 32-bit, integer can hold 8 BCD characters)
@@ -416,7 +406,6 @@ AcpiExOpcode_1A_1T_1R (
}
break;
-
case AML_TO_BCD_OP: /* ToBcd (Operand, Result) */
ReturnDesc->Integer.Value = 0;
@@ -448,9 +437,7 @@ AcpiExOpcode_1A_1T_1R (
}
break;
-
case AML_COND_REF_OF_OP: /* CondRefOf (SourceObject, Result) */
-
/*
* This op is a little strange because the internal return value is
* different than the return value stored in the result descriptor
@@ -485,14 +472,14 @@ AcpiExOpcode_1A_1T_1R (
default:
+
/* No other opcodes get here */
+
break;
}
break;
-
case AML_STORE_OP: /* Store (Source, Target) */
-
/*
* A store operand is typically a number, string, buffer or lvalue
* Be careful about deleting the source object,
@@ -519,7 +506,6 @@ AcpiExOpcode_1A_1T_1R (
}
return_ACPI_STATUS (Status);
-
/*
* ACPI 2.0 Opcodes
*/
@@ -529,7 +515,6 @@ AcpiExOpcode_1A_1T_1R (
WalkState);
break;
-
case AML_TO_DECSTRING_OP: /* ToDecimalString (Data, Result) */
Status = AcpiExConvertToString (Operand[0], &ReturnDesc,
@@ -541,7 +526,6 @@ AcpiExOpcode_1A_1T_1R (
}
break;
-
case AML_TO_HEXSTRING_OP: /* ToHexString (Data, Result) */
Status = AcpiExConvertToString (Operand[0], &ReturnDesc,
@@ -553,7 +537,6 @@ AcpiExOpcode_1A_1T_1R (
}
break;
-
case AML_TO_BUFFER_OP: /* ToBuffer (Data, Result) */
Status = AcpiExConvertToBuffer (Operand[0], &ReturnDesc);
@@ -564,7 +547,6 @@ AcpiExOpcode_1A_1T_1R (
}
break;
-
case AML_TO_INTEGER_OP: /* ToInteger (Data, Result) */
Status = AcpiExConvertToInteger (Operand[0], &ReturnDesc,
@@ -576,7 +558,6 @@ AcpiExOpcode_1A_1T_1R (
}
break;
-
case AML_SHIFT_LEFT_BIT_OP: /* ShiftLeftBit (Source, BitNum) */
case AML_SHIFT_RIGHT_BIT_OP: /* ShiftRightBit (Source, BitNum) */
@@ -588,7 +569,6 @@ AcpiExOpcode_1A_1T_1R (
Status = AE_SUPPORT;
goto Cleanup;
-
default: /* Unknown opcode */
ACPI_ERROR ((AE_INFO, "Unknown AML opcode 0x%X",
@@ -676,10 +656,8 @@ AcpiExOpcode_1A_0T_1R (
}
break;
-
case AML_DECREMENT_OP: /* Decrement (Operand) */
case AML_INCREMENT_OP: /* Increment (Operand) */
-
/*
* Create a new integer. Can't just get the base integer and
* increment it because it may be an Arg or Field.
@@ -744,9 +722,7 @@ AcpiExOpcode_1A_0T_1R (
Status = AcpiExStore (ReturnDesc, Operand[0], WalkState);
break;
-
case AML_TYPE_OP: /* ObjectType (SourceObject) */
-
/*
* Note: The operand is not resolved at this point because we want to
* get the associated object, not its value. For example, we don't
@@ -772,9 +748,7 @@ AcpiExOpcode_1A_0T_1R (
}
break;
-
case AML_SIZE_OF_OP: /* SizeOf (SourceObject) */
-
/*
* Note: The operand is not resolved at this point because we want to
* get the associated object, not its value.
@@ -801,10 +775,12 @@ AcpiExOpcode_1A_0T_1R (
switch (Type)
{
case ACPI_TYPE_INTEGER:
+
Value = AcpiGbl_IntegerByteWidth;
break;
case ACPI_TYPE_STRING:
+
Value = TempDesc->String.Length;
break;
@@ -825,6 +801,7 @@ AcpiExOpcode_1A_0T_1R (
break;
default:
+
ACPI_ERROR ((AE_INFO,
"Operand must be Buffer/Integer/String/Package - found type %s",
AcpiUtGetTypeName (Type)));
@@ -932,9 +909,11 @@ AcpiExOpcode_1A_0T_1R (
break;
case ACPI_TYPE_STRING:
+
break;
default:
+
Status = AE_AML_OPERAND_TYPE;
goto Cleanup;
}
@@ -993,7 +972,6 @@ AcpiExOpcode_1A_0T_1R (
switch (Operand[0]->Reference.Class)
{
case ACPI_REFCLASS_INDEX:
-
/*
* The target type for the Index operator must be
* either a Buffer or a Package
@@ -1025,9 +1003,7 @@ AcpiExOpcode_1A_0T_1R (
}
break;
-
case ACPI_TYPE_PACKAGE:
-
/*
* Return the referenced element of the package. We must
* add another reference to the referenced object, however.
@@ -1039,7 +1015,6 @@ AcpiExOpcode_1A_0T_1R (
}
break;
-
default:
ACPI_ERROR ((AE_INFO,
@@ -1050,7 +1025,6 @@ AcpiExOpcode_1A_0T_1R (
}
break;
-
case ACPI_REFCLASS_REFOF:
ReturnDesc = Operand[0]->Reference.Object;
@@ -1067,8 +1041,8 @@ AcpiExOpcode_1A_0T_1R (
AcpiUtAddReference (ReturnDesc);
break;
-
default:
+
ACPI_ERROR ((AE_INFO,
"Unknown class in reference(%p) - 0x%2.2X",
Operand[0], Operand[0]->Reference.Class));
@@ -1079,7 +1053,6 @@ AcpiExOpcode_1A_0T_1R (
}
break;
-
default:
ACPI_ERROR ((AE_INFO, "Unknown AML opcode 0x%X",
diff --git a/source/components/executer/exoparg2.c b/source/components/executer/exoparg2.c
index 6151fa8..ff1d8bb 100644
--- a/source/components/executer/exoparg2.c
+++ b/source/components/executer/exoparg2.c
@@ -144,7 +144,6 @@ AcpiExOpcode_2A_0T_0R (
Status = AcpiEvQueueNotifyRequest (Node, Value);
break;
-
default:
ACPI_ERROR ((AE_INFO, "Unknown AML opcode 0x%X",
@@ -217,7 +216,6 @@ AcpiExOpcode_2A_2T_1R (
}
break;
-
default:
ACPI_ERROR ((AE_INFO, "Unknown AML opcode 0x%X",
@@ -331,16 +329,13 @@ AcpiExOpcode_2A_1T_1R (
&ReturnDesc->Integer.Value);
break;
-
case AML_CONCAT_OP: /* Concatenate (Data1, Data2, Result) */
Status = AcpiExDoConcatenate (Operand[0], Operand[1],
&ReturnDesc, WalkState);
break;
-
case AML_TO_STRING_OP: /* ToString (Buffer, Length, Result) (ACPI 2.0) */
-
/*
* Input object is guaranteed to be a buffer at this point (it may have
* been converted.) Copy the raw buffer data to a new object of
@@ -380,7 +375,6 @@ AcpiExOpcode_2A_1T_1R (
Operand[0]->Buffer.Pointer, Length);
break;
-
case AML_CONCAT_RES_OP:
/* ConcatenateResTemplate (Buffer, Buffer, Result) (ACPI 2.0) */
@@ -389,7 +383,6 @@ AcpiExOpcode_2A_1T_1R (
&ReturnDesc, WalkState);
break;
-
case AML_INDEX_OP: /* Index (Source Index Result) */
/* Create the internal return object */
@@ -479,7 +472,6 @@ AcpiExOpcode_2A_1T_1R (
WalkState->ResultObj = ReturnDesc;
goto Cleanup;
-
default:
ACPI_ERROR ((AE_INFO, "Unknown AML opcode 0x%X",
@@ -602,7 +594,6 @@ AcpiExOpcode_2A_0T_1R (
}
break;
-
default:
ACPI_ERROR ((AE_INFO, "Unknown AML opcode 0x%X",
diff --git a/source/components/executer/exoparg3.c b/source/components/executer/exoparg3.c
index a7d4431..b850485 100644
--- a/source/components/executer/exoparg3.c
+++ b/source/components/executer/exoparg3.c
@@ -129,7 +129,6 @@ AcpiExOpcode_3A_0T_0R (
ACPI_FREE (Fatal);
break;
-
default:
ACPI_ERROR ((AE_INFO, "Unknown AML opcode 0x%X",
@@ -176,7 +175,6 @@ AcpiExOpcode_3A_1T_1R (
switch (WalkState->Opcode)
{
case AML_MID_OP: /* Mid (Source[0], Index[1], Length[2], Result[3]) */
-
/*
* Create the return object. The Source operand is guaranteed to be
* either a String or a Buffer, so just use its type.
@@ -268,7 +266,6 @@ AcpiExOpcode_3A_1T_1R (
ReturnDesc->Buffer.Flags |= AOPOBJ_DATA_VALID;
break;
-
default:
ACPI_ERROR ((AE_INFO, "Unknown AML opcode 0x%X",
diff --git a/source/components/executer/exoparg6.c b/source/components/executer/exoparg6.c
index 6b04784..974d4c8 100644
--- a/source/components/executer/exoparg6.c
+++ b/source/components/executer/exoparg6.c
@@ -130,7 +130,6 @@ AcpiExDoMatch (
break;
case MATCH_MEQ:
-
/*
* True if equal: (P[i] == M)
* Change to: (M == P[i])
@@ -144,7 +143,6 @@ AcpiExDoMatch (
break;
case MATCH_MLE:
-
/*
* True if less than or equal: (P[i] <= M) (P[i] NotGreater than M)
* Change to: (M >= P[i]) (M NotLess than P[i])
@@ -159,7 +157,6 @@ AcpiExDoMatch (
break;
case MATCH_MLT:
-
/*
* True if less than: (P[i] < M)
* Change to: (M > P[i])
@@ -173,7 +170,6 @@ AcpiExDoMatch (
break;
case MATCH_MGE:
-
/*
* True if greater than or equal: (P[i] >= M) (P[i] NotLess than M)
* Change to: (M <= P[i]) (M NotGreater than P[i])
@@ -188,7 +184,6 @@ AcpiExDoMatch (
break;
case MATCH_MGT:
-
/*
* True if greater than: (P[i] > M)
* Change to: (M < P[i])
@@ -328,13 +323,11 @@ AcpiExOpcode_6A_0T_1R (
}
break;
-
case AML_LOAD_TABLE_OP:
Status = AcpiExLoadTableOp (WalkState, &ReturnDesc);
break;
-
default:
ACPI_ERROR ((AE_INFO, "Unknown AML opcode 0x%X",
diff --git a/source/components/executer/exprep.c b/source/components/executer/exprep.c
index 90687a5..c629224 100644
--- a/source/components/executer/exprep.c
+++ b/source/components/executer/exprep.c
@@ -267,26 +267,31 @@ AcpiExDecodeFieldAccess (
case AML_FIELD_ACCESS_BYTE:
case AML_FIELD_ACCESS_BUFFER: /* ACPI 2.0 (SMBus Buffer) */
+
ByteAlignment = 1;
BitLength = 8;
break;
case AML_FIELD_ACCESS_WORD:
+
ByteAlignment = 2;
BitLength = 16;
break;
case AML_FIELD_ACCESS_DWORD:
+
ByteAlignment = 4;
BitLength = 32;
break;
case AML_FIELD_ACCESS_QWORD: /* ACPI 2.0 */
+
ByteAlignment = 8;
BitLength = 64;
break;
default:
+
/* Invalid field access type */
ACPI_ERROR ((AE_INFO,
@@ -536,7 +541,6 @@ AcpiExPrepFieldValue (
ObjDesc->Field.AccessByteWidth, ObjDesc->Field.RegionObj));
break;
-
case ACPI_TYPE_LOCAL_BANK_FIELD:
ObjDesc->BankField.Value = Info->BankValue;
@@ -571,7 +575,6 @@ AcpiExPrepFieldValue (
break;
-
case ACPI_TYPE_LOCAL_INDEX_FIELD:
/* Get the Index and Data registers */
@@ -625,7 +628,9 @@ AcpiExPrepFieldValue (
break;
default:
+
/* No other types should get here */
+
break;
}
diff --git a/source/components/executer/exregion.c b/source/components/executer/exregion.c
index 1092a42..304cfe6 100644
--- a/source/components/executer/exregion.c
+++ b/source/components/executer/exregion.c
@@ -99,22 +99,27 @@ AcpiExSystemMemorySpaceHandler (
switch (BitWidth)
{
case 8:
+
Length = 1;
break;
case 16:
+
Length = 2;
break;
case 32:
+
Length = 4;
break;
case 64:
+
Length = 8;
break;
default:
+
ACPI_ERROR ((AE_INFO, "Invalid SystemMemory width %u",
BitWidth));
return_ACPI_STATUS (AE_AML_OPERAND_VALUE);
@@ -231,23 +236,29 @@ AcpiExSystemMemorySpaceHandler (
switch (BitWidth)
{
case 8:
+
*Value = (UINT64) ACPI_GET8 (LogicalAddrPtr);
break;
case 16:
+
*Value = (UINT64) ACPI_GET16 (LogicalAddrPtr);
break;
case 32:
+
*Value = (UINT64) ACPI_GET32 (LogicalAddrPtr);
break;
case 64:
+
*Value = (UINT64) ACPI_GET64 (LogicalAddrPtr);
break;
default:
+
/* BitWidth was already validated */
+
break;
}
break;
@@ -257,28 +268,35 @@ AcpiExSystemMemorySpaceHandler (
switch (BitWidth)
{
case 8:
+
ACPI_SET8 (LogicalAddrPtr, *Value);
break;
case 16:
+
ACPI_SET16 (LogicalAddrPtr, *Value);
break;
case 32:
+
ACPI_SET32 (LogicalAddrPtr, *Value);
break;
case 64:
+
ACPI_SET64 (LogicalAddrPtr, *Value);
break;
default:
+
/* BitWidth was already validated */
+
break;
}
break;
default:
+
Status = AE_BAD_PARAMETER;
break;
}
@@ -343,6 +361,7 @@ AcpiExSystemIoSpaceHandler (
break;
default:
+
Status = AE_BAD_PARAMETER;
break;
}
diff --git a/source/components/executer/exresnte.c b/source/components/executer/exresnte.c
index fae97db..c26cbb9 100644
--- a/source/components/executer/exresnte.c
+++ b/source/components/executer/exresnte.c
@@ -164,7 +164,6 @@ AcpiExResolveNodeToValue (
}
break;
-
case ACPI_TYPE_BUFFER:
if (SourceDesc->Common.Type != ACPI_TYPE_BUFFER)
@@ -184,7 +183,6 @@ AcpiExResolveNodeToValue (
}
break;
-
case ACPI_TYPE_STRING:
if (SourceDesc->Common.Type != ACPI_TYPE_STRING)
@@ -200,7 +198,6 @@ AcpiExResolveNodeToValue (
AcpiUtAddReference (ObjDesc);
break;
-
case ACPI_TYPE_INTEGER:
if (SourceDesc->Common.Type != ACPI_TYPE_INTEGER)
@@ -216,7 +213,6 @@ AcpiExResolveNodeToValue (
AcpiUtAddReference (ObjDesc);
break;
-
case ACPI_TYPE_BUFFER_FIELD:
case ACPI_TYPE_LOCAL_REGION_FIELD:
case ACPI_TYPE_LOCAL_BANK_FIELD:
@@ -252,7 +248,6 @@ AcpiExResolveNodeToValue (
return_ACPI_STATUS (AE_AML_OPERAND_TYPE); /* Cannot be AE_TYPE */
-
case ACPI_TYPE_LOCAL_REFERENCE:
switch (SourceDesc->Reference.Class)
@@ -268,6 +263,7 @@ AcpiExResolveNodeToValue (
break;
default:
+
/* No named references are allowed here */
ACPI_ERROR ((AE_INFO,
@@ -278,7 +274,6 @@ AcpiExResolveNodeToValue (
}
break;
-
default:
/* Default case is for unknown types */
diff --git a/source/components/executer/exresolv.c b/source/components/executer/exresolv.c
index e68ea05..e99d46c 100644
--- a/source/components/executer/exresolv.c
+++ b/source/components/executer/exresolv.c
@@ -176,7 +176,6 @@ AcpiExResolveObjectToValue (
{
case ACPI_REFCLASS_LOCAL:
case ACPI_REFCLASS_ARG:
-
/*
* Get the local from the method's state info
* Note: this increments the local's object reference count
@@ -199,7 +198,6 @@ AcpiExResolveObjectToValue (
*StackPtr = ObjDesc;
break;
-
case ACPI_REFCLASS_INDEX:
switch (StackDesc->Reference.TargetType)
@@ -209,7 +207,6 @@ AcpiExResolveObjectToValue (
/* Just return - do not dereference */
break;
-
case ACPI_TYPE_PACKAGE:
/* If method call or CopyObject - do not dereference */
@@ -247,7 +244,6 @@ AcpiExResolveObjectToValue (
}
break;
-
default:
/* Invalid reference object */
@@ -260,7 +256,6 @@ AcpiExResolveObjectToValue (
}
break;
-
case ACPI_REFCLASS_REFOF:
case ACPI_REFCLASS_DEBUG:
case ACPI_REFCLASS_TABLE:
@@ -300,19 +295,16 @@ AcpiExResolveObjectToValue (
}
break;
-
case ACPI_TYPE_BUFFER:
Status = AcpiDsGetBufferArguments (StackDesc);
break;
-
case ACPI_TYPE_PACKAGE:
Status = AcpiDsGetPackageArguments (StackDesc);
break;
-
case ACPI_TYPE_BUFFER_FIELD:
case ACPI_TYPE_LOCAL_REGION_FIELD:
case ACPI_TYPE_LOCAL_BANK_FIELD:
@@ -330,6 +322,7 @@ AcpiExResolveObjectToValue (
break;
default:
+
break;
}
@@ -374,10 +367,12 @@ AcpiExResolveMultiple (
switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc))
{
case ACPI_DESC_TYPE_OPERAND:
+
Type = ObjDesc->Common.Type;
break;
case ACPI_DESC_TYPE_NAMED:
+
Type = ((ACPI_NAMESPACE_NODE *) ObjDesc)->Type;
ObjDesc = AcpiNsGetAttachedObject ((ACPI_NAMESPACE_NODE *) ObjDesc);
@@ -454,7 +449,6 @@ AcpiExResolveMultiple (
}
break;
-
case ACPI_REFCLASS_INDEX:
/* Get the type of this reference (index into another object) */
@@ -482,13 +476,11 @@ AcpiExResolveMultiple (
}
break;
-
case ACPI_REFCLASS_TABLE:
Type = ACPI_TYPE_DDB_HANDLE;
goto Exit;
-
case ACPI_REFCLASS_LOCAL:
case ACPI_REFCLASS_ARG:
@@ -520,7 +512,6 @@ AcpiExResolveMultiple (
}
break;
-
case ACPI_REFCLASS_DEBUG:
/* The Debug Object is of type "DebugObject" */
@@ -528,7 +519,6 @@ AcpiExResolveMultiple (
Type = ACPI_TYPE_DEBUG_OBJECT;
goto Exit;
-
default:
ACPI_ERROR ((AE_INFO,
@@ -564,7 +554,9 @@ Exit:
break;
default:
+
/* No change to Type required */
+
break;
}
diff --git a/source/components/executer/exresop.c b/source/components/executer/exresop.c
index 96410b2..59602ba 100644
--- a/source/components/executer/exresop.c
+++ b/source/components/executer/exresop.c
@@ -224,7 +224,6 @@ AcpiExResolveOperands (
}
break;
-
case ACPI_DESC_TYPE_OPERAND:
/* ACPI internal object */
@@ -277,7 +276,6 @@ AcpiExResolveOperands (
}
break;
-
default:
/* Invalid descriptor */
@@ -324,7 +322,6 @@ AcpiExResolveOperands (
case ARGI_TARGETREF: /* Allows implicit conversion rules before store */
case ARGI_FIXED_TARGET: /* No implicit conversion before store to target */
case ARGI_SIMPLE_TARGET: /* Name, Local, or Arg - no implicit conversion */
-
/*
* Need an operand of type ACPI_TYPE_LOCAL_REFERENCE
* A Namespace Node is OK as-is
@@ -342,9 +339,7 @@ AcpiExResolveOperands (
}
goto NextOperand;
-
case ARGI_DATAREFOBJ: /* Store operator only */
-
/*
* We don't want to resolve IndexOp reference objects during
* a store because this would be an implicit DeRefOf operation.
@@ -360,7 +355,9 @@ AcpiExResolveOperands (
break;
default:
+
/* All cases covered above */
+
break;
}
@@ -453,9 +450,7 @@ AcpiExResolveOperands (
}
goto NextOperand;
-
case ARGI_BUFFER:
-
/*
* Need an operand of type ACPI_TYPE_BUFFER,
* But we can implicitly convert from a STRING or INTEGER
@@ -482,9 +477,7 @@ AcpiExResolveOperands (
}
goto NextOperand;
-
case ARGI_STRING:
-
/*
* Need an operand of type ACPI_TYPE_STRING,
* But we can implicitly convert from a BUFFER or INTEGER
@@ -512,7 +505,6 @@ AcpiExResolveOperands (
}
goto NextOperand;
-
case ARGI_COMPUTEDATA:
/* Need an operand of type INTEGER, STRING or BUFFER */
@@ -535,7 +527,6 @@ AcpiExResolveOperands (
}
goto NextOperand;
-
case ARGI_BUFFER_OR_STRING:
/* Need an operand of type STRING or BUFFER */
@@ -573,7 +564,6 @@ AcpiExResolveOperands (
}
goto NextOperand;
-
case ARGI_DATAOBJECT:
/*
* ARGI_DATAOBJECT is only used by the SizeOf operator.
@@ -593,6 +583,7 @@ AcpiExResolveOperands (
break;
default:
+
ACPI_ERROR ((AE_INFO,
"Needed [Buffer/String/Package/Reference], found [%s] %p",
AcpiUtGetObjectTypeName (ObjDesc), ObjDesc));
@@ -601,7 +592,6 @@ AcpiExResolveOperands (
}
goto NextOperand;
-
case ARGI_COMPLEXOBJ:
/* Need a buffer or package or (ACPI 2.0) String */
@@ -616,6 +606,7 @@ AcpiExResolveOperands (
break;
default:
+
ACPI_ERROR ((AE_INFO,
"Needed [Buffer/String/Package], found [%s] %p",
AcpiUtGetObjectTypeName (ObjDesc), ObjDesc));
@@ -624,7 +615,6 @@ AcpiExResolveOperands (
}
goto NextOperand;
-
case ARGI_REGION_OR_BUFFER: /* Used by Load() only */
/* Need an operand of type REGION or a BUFFER (which could be a resolved region field) */
@@ -638,6 +628,7 @@ AcpiExResolveOperands (
break;
default:
+
ACPI_ERROR ((AE_INFO,
"Needed [Region/Buffer], found [%s] %p",
AcpiUtGetObjectTypeName (ObjDesc), ObjDesc));
@@ -646,7 +637,6 @@ AcpiExResolveOperands (
}
goto NextOperand;
-
case ARGI_DATAREFOBJ:
/* Used by the Store() operator only */
@@ -694,7 +684,6 @@ AcpiExResolveOperands (
}
goto NextOperand;
-
default:
/* Unknown type */
diff --git a/source/components/executer/exstore.c b/source/components/executer/exstore.c
index 98c3eca..2ec392e 100644
--- a/source/components/executer/exstore.c
+++ b/source/components/executer/exstore.c
@@ -124,6 +124,7 @@ AcpiExStore (
switch (DestDesc->Common.Type)
{
case ACPI_TYPE_LOCAL_REFERENCE:
+
break;
case ACPI_TYPE_INTEGER:
@@ -167,7 +168,6 @@ AcpiExStore (
WalkState, ACPI_IMPLICIT_CONVERSION);
break;
-
case ACPI_REFCLASS_INDEX:
/* Storing to an Index (pointer into a packager or buffer) */
@@ -175,7 +175,6 @@ AcpiExStore (
Status = AcpiExStoreObjectToIndex (SourceDesc, RefDesc, WalkState);
break;
-
case ACPI_REFCLASS_LOCAL:
case ACPI_REFCLASS_ARG:
@@ -185,9 +184,7 @@ AcpiExStore (
RefDesc->Reference.Value, SourceDesc, WalkState);
break;
-
case ACPI_REFCLASS_DEBUG:
-
/*
* Storing to the Debug object causes the value stored to be
* displayed and otherwise has no effect -- see ACPI Specification
@@ -199,7 +196,6 @@ AcpiExStore (
ACPI_DEBUG_OBJECT (SourceDesc, 0, 0);
break;
-
default:
ACPI_ERROR ((AE_INFO, "Unknown Reference Class 0x%2.2X",
@@ -308,9 +304,7 @@ AcpiExStoreObjectToIndex (
break;
-
case ACPI_TYPE_BUFFER_FIELD:
-
/*
* Store into a Buffer or String (not actually a real BufferField)
* at a location defined by an Index.
@@ -368,7 +362,6 @@ AcpiExStoreObjectToIndex (
ObjDesc->Buffer.Pointer[IndexDesc->Reference.Value] = Value;
break;
-
default:
ACPI_ERROR ((AE_INFO,
"Target is not a Package or BufferField"));
@@ -473,11 +466,9 @@ AcpiExStoreObjectToNode (
&WalkState->ResultObj);
break;
-
case ACPI_TYPE_INTEGER:
case ACPI_TYPE_STRING:
case ACPI_TYPE_BUFFER:
-
/*
* These target types are all of type Integer/String/Buffer, and
* therefore support implicit conversion before the store.
@@ -511,7 +502,6 @@ AcpiExStoreObjectToNode (
}
break;
-
default:
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
diff --git a/source/components/executer/exstoren.c b/source/components/executer/exstoren.c
index ae36296..a21d8b9e 100644
--- a/source/components/executer/exstoren.c
+++ b/source/components/executer/exstoren.c
@@ -94,11 +94,9 @@ AcpiExResolveObject (
* These cases all require only Integers or values that
* can be converted to Integers (Strings or Buffers)
*/
-
case ACPI_TYPE_INTEGER:
case ACPI_TYPE_STRING:
case ACPI_TYPE_BUFFER:
-
/*
* Stores into a Field/Region or into a Integer/Buffer/String
* are all essentially the same. This case handles the
@@ -140,10 +138,8 @@ AcpiExResolveObject (
}
break;
-
case ACPI_TYPE_LOCAL_ALIAS:
case ACPI_TYPE_LOCAL_METHOD_ALIAS:
-
/*
* All aliases should have been resolved earlier, during the
* operand resolution phase.
@@ -152,10 +148,8 @@ AcpiExResolveObject (
Status = AE_AML_INTERNAL;
break;
-
case ACPI_TYPE_PACKAGE:
default:
-
/*
* All other types than Alias and the various Fields come here,
* including the untyped case - ACPI_TYPE_ANY.
diff --git a/source/components/hardware/hwacpi.c b/source/components/hardware/hwacpi.c
index d4d5b55..deb2dfb 100644
--- a/source/components/hardware/hwacpi.c
+++ b/source/components/hardware/hwacpi.c
@@ -120,7 +120,6 @@ AcpiHwSetMode (
break;
case ACPI_SYS_MODE_LEGACY:
-
/*
* BIOS should clear all fixed status bits and restore fixed event
* enable bits to default
@@ -132,6 +131,7 @@ AcpiHwSetMode (
break;
default:
+
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
diff --git a/source/components/hardware/hwgpe.c b/source/components/hardware/hwgpe.c
index efeba2b..4f123bc 100644
--- a/source/components/hardware/hwgpe.c
+++ b/source/components/hardware/hwgpe.c
@@ -142,14 +142,17 @@ AcpiHwLowSetGpe (
/*lint -fallthrough */
case ACPI_GPE_ENABLE:
+
ACPI_SET_BIT (EnableMask, RegisterBit);
break;
case ACPI_GPE_DISABLE:
+
ACPI_CLEAR_BIT (EnableMask, RegisterBit);
break;
default:
+
ACPI_ERROR ((AE_INFO, "Invalid GPE Action, %u", Action));
return (AE_BAD_PARAMETER);
}
diff --git a/source/components/hardware/hwregs.c b/source/components/hardware/hwregs.c
index ca2f48b..88f8b4e 100644
--- a/source/components/hardware/hwregs.c
+++ b/source/components/hardware/hwregs.c
@@ -430,7 +430,6 @@ AcpiHwRegisterRead (
&AcpiGbl_XPm1bStatus);
break;
-
case ACPI_REGISTER_PM1_ENABLE: /* PM1 A/B: 16-bit access each */
Status = AcpiHwReadMultiple (&Value,
@@ -438,7 +437,6 @@ AcpiHwRegisterRead (
&AcpiGbl_XPm1bEnable);
break;
-
case ACPI_REGISTER_PM1_CONTROL: /* PM1 A/B: 16-bit access each */
Status = AcpiHwReadMultiple (&Value,
@@ -453,26 +451,23 @@ AcpiHwRegisterRead (
Value &= ~ACPI_PM1_CONTROL_WRITEONLY_BITS;
break;
-
case ACPI_REGISTER_PM2_CONTROL: /* 8-bit access */
Status = AcpiHwRead (&Value, &AcpiGbl_FADT.XPm2ControlBlock);
break;
-
case ACPI_REGISTER_PM_TIMER: /* 32-bit access */
Status = AcpiHwRead (&Value, &AcpiGbl_FADT.XPmTimerBlock);
break;
-
case ACPI_REGISTER_SMI_COMMAND_BLOCK: /* 8-bit access */
Status = AcpiHwReadPort (AcpiGbl_FADT.SmiCommand, &Value, 8);
break;
-
default:
+
ACPI_ERROR ((AE_INFO, "Unknown Register ID: 0x%X",
RegisterId));
Status = AE_BAD_PARAMETER;
@@ -546,7 +541,6 @@ AcpiHwRegisterWrite (
&AcpiGbl_XPm1bStatus);
break;
-
case ACPI_REGISTER_PM1_ENABLE: /* PM1 A/B: 16-bit access each */
Status = AcpiHwWriteMultiple (Value,
@@ -554,9 +548,7 @@ AcpiHwRegisterWrite (
&AcpiGbl_XPm1bEnable);
break;
-
case ACPI_REGISTER_PM1_CONTROL: /* PM1 A/B: 16-bit access each */
-
/*
* Perform a read first to preserve certain bits (per ACPI spec)
* Note: This includes SCI_EN, we never want to change this bit
@@ -580,9 +572,7 @@ AcpiHwRegisterWrite (
&AcpiGbl_FADT.XPm1bControlBlock);
break;
-
case ACPI_REGISTER_PM2_CONTROL: /* 8-bit access */
-
/*
* For control registers, all reserved bits must be preserved,
* as per the ACPI spec.
@@ -600,13 +590,11 @@ AcpiHwRegisterWrite (
Status = AcpiHwWrite (Value, &AcpiGbl_FADT.XPm2ControlBlock);
break;
-
case ACPI_REGISTER_PM_TIMER: /* 32-bit access */
Status = AcpiHwWrite (Value, &AcpiGbl_FADT.XPmTimerBlock);
break;
-
case ACPI_REGISTER_SMI_COMMAND_BLOCK: /* 8-bit access */
/* SMI_CMD is currently always in IO space */
@@ -614,8 +602,8 @@ AcpiHwRegisterWrite (
Status = AcpiHwWritePort (AcpiGbl_FADT.SmiCommand, Value, 8);
break;
-
default:
+
ACPI_ERROR ((AE_INFO, "Unknown Register ID: 0x%X",
RegisterId));
Status = AE_BAD_PARAMETER;
diff --git a/source/components/hardware/hwxface.c b/source/components/hardware/hwxface.c
index 6f26c79..25ad60a 100644
--- a/source/components/hardware/hwxface.c
+++ b/source/components/hardware/hwxface.c
@@ -592,10 +592,12 @@ AcpiGetSleepTypeData (
switch (Info->ReturnObject->Package.Count)
{
case 0:
+
Status = AE_AML_PACKAGE_LIMIT;
break;
case 1:
+
if (Elements[0]->Common.Type != ACPI_TYPE_INTEGER)
{
Status = AE_AML_OPERAND_TYPE;
@@ -610,6 +612,7 @@ AcpiGetSleepTypeData (
case 2:
default:
+
if ((Elements[0]->Common.Type != ACPI_TYPE_INTEGER) ||
(Elements[1]->Common.Type != ACPI_TYPE_INTEGER))
{
diff --git a/source/components/hardware/hwxfsleep.c b/source/components/hardware/hwxfsleep.c
index 42f0543..8259f01 100644
--- a/source/components/hardware/hwxfsleep.c
+++ b/source/components/hardware/hwxfsleep.c
@@ -267,13 +267,14 @@ AcpiHwSleepDispatch (
#if (!ACPI_REDUCED_HARDWARE)
-
/*
* If the Hardware Reduced flag is set (from the FADT), we must
- * use the extended sleep registers
+ * use the extended sleep registers (FADT). Note: As per the ACPI
+ * specification, these extended registers are to be used for HW-reduced
+ * platforms only. They are not general-purpose replacements for the
+ * legacy PM register sleep support.
*/
- if (AcpiGbl_ReducedHardware ||
- AcpiGbl_FADT.SleepControl.Address)
+ if (AcpiGbl_ReducedHardware)
{
Status = SleepFunctions->ExtendedFunction (SleepState);
}
@@ -351,20 +352,24 @@ AcpiEnterSleepStatePrep (
switch (SleepState)
{
case ACPI_STATE_S0:
+
SstValue = ACPI_SST_WORKING;
break;
case ACPI_STATE_S1:
case ACPI_STATE_S2:
case ACPI_STATE_S3:
+
SstValue = ACPI_SST_SLEEPING;
break;
case ACPI_STATE_S4:
+
SstValue = ACPI_SST_SLEEP_CONTEXT;
break;
default:
+
SstValue = ACPI_SST_INDICATOR_OFF; /* Default is off */
break;
}
diff --git a/source/components/namespace/nsaccess.c b/source/components/namespace/nsaccess.c
index 609256b..ad94f6c 100644
--- a/source/components/namespace/nsaccess.c
+++ b/source/components/namespace/nsaccess.c
@@ -167,6 +167,7 @@ AcpiNsRootInitialize (
switch (InitVal->Type)
{
case ACPI_TYPE_METHOD:
+
ObjDesc->Method.ParamCount = (UINT8) ACPI_TO_INTEGER (Val);
ObjDesc->Common.Flags |= AOPOBJ_DATA_VALID;
@@ -188,7 +189,6 @@ AcpiNsRootInitialize (
ObjDesc->Integer.Value = ACPI_TO_INTEGER (Val);
break;
-
case ACPI_TYPE_STRING:
/* Build an object around the static string */
@@ -198,7 +198,6 @@ AcpiNsRootInitialize (
ObjDesc->Common.Flags |= AOPOBJ_STATIC_POINTER;
break;
-
case ACPI_TYPE_MUTEX:
ObjDesc->Mutex.Node = NewNode;
@@ -231,7 +230,6 @@ AcpiNsRootInitialize (
}
break;
-
default:
ACPI_ERROR ((AE_INFO, "Unsupported initial type value 0x%X",
diff --git a/source/components/namespace/nsconvert.c b/source/components/namespace/nsconvert.c
index e3ff375..11aca36 100644
--- a/source/components/namespace/nsconvert.c
+++ b/source/components/namespace/nsconvert.c
@@ -111,6 +111,7 @@ AcpiNsConvertToInteger (
break;
default:
+
return (AE_AML_OPERAND_TYPE);
}
@@ -208,6 +209,7 @@ AcpiNsConvertToString (
break;
default:
+
return (AE_AML_OPERAND_TYPE);
}
@@ -317,6 +319,7 @@ AcpiNsConvertToBuffer (
break;
default:
+
return (AE_AML_OPERAND_TYPE);
}
diff --git a/source/components/namespace/nsdump.c b/source/components/namespace/nsdump.c
index ac7b679..be780f2 100644
--- a/source/components/namespace/nsdump.c
+++ b/source/components/namespace/nsdump.c
@@ -282,10 +282,12 @@ AcpiNsDumpOneObject (
case ACPI_TYPE_BUFFER:
case ACPI_TYPE_STRING:
case ACPI_TYPE_METHOD:
+
AcpiOsPrintf ("<No attached object>");
break;
default:
+
break;
}
@@ -302,13 +304,11 @@ AcpiNsDumpOneObject (
ACPI_CAST_PTR (void, ObjDesc->Processor.Address));
break;
-
case ACPI_TYPE_DEVICE:
AcpiOsPrintf ("Notify Object: %p\n", ObjDesc);
break;
-
case ACPI_TYPE_METHOD:
AcpiOsPrintf ("Args %X Len %.4X Aml %p\n",
@@ -316,14 +316,12 @@ AcpiNsDumpOneObject (
ObjDesc->Method.AmlLength, ObjDesc->Method.AmlStart);
break;
-
case ACPI_TYPE_INTEGER:
AcpiOsPrintf ("= %8.8X%8.8X\n",
ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
break;
-
case ACPI_TYPE_PACKAGE:
if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID)
@@ -337,7 +335,6 @@ AcpiNsDumpOneObject (
}
break;
-
case ACPI_TYPE_BUFFER:
if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID)
@@ -363,7 +360,6 @@ AcpiNsDumpOneObject (
}
break;
-
case ACPI_TYPE_STRING:
AcpiOsPrintf ("Len %.2X ", ObjDesc->String.Length);
@@ -371,7 +367,6 @@ AcpiNsDumpOneObject (
AcpiOsPrintf ("\n");
break;
-
case ACPI_TYPE_REGION:
AcpiOsPrintf ("[%s]",
@@ -388,13 +383,11 @@ AcpiNsDumpOneObject (
}
break;
-
case ACPI_TYPE_LOCAL_REFERENCE:
AcpiOsPrintf ("[%s]\n", AcpiUtGetReferenceName (ObjDesc));
break;
-
case ACPI_TYPE_BUFFER_FIELD:
if (ObjDesc->BufferField.BufferObj &&
@@ -406,7 +399,6 @@ AcpiNsDumpOneObject (
}
break;
-
case ACPI_TYPE_LOCAL_REGION_FIELD:
AcpiOsPrintf ("Rgn [%4.4s]",
@@ -414,7 +406,6 @@ AcpiNsDumpOneObject (
ObjDesc->CommonField.RegionObj->Region.Node));
break;
-
case ACPI_TYPE_LOCAL_BANK_FIELD:
AcpiOsPrintf ("Rgn [%4.4s] Bnk [%4.4s]",
@@ -424,7 +415,6 @@ AcpiNsDumpOneObject (
ObjDesc->BankField.BankObj->CommonField.Node));
break;
-
case ACPI_TYPE_LOCAL_INDEX_FIELD:
AcpiOsPrintf ("Idx [%4.4s] Dat [%4.4s]",
@@ -434,7 +424,6 @@ AcpiNsDumpOneObject (
ObjDesc->IndexField.DataObj->CommonField.Node));
break;
-
case ACPI_TYPE_LOCAL_ALIAS:
case ACPI_TYPE_LOCAL_METHOD_ALIAS:
@@ -465,11 +454,11 @@ AcpiNsDumpOneObject (
break;
default:
+
break;
}
break;
-
case ACPI_DISPLAY_OBJECTS:
AcpiOsPrintf ("O:%p", ObjDesc);
@@ -518,7 +507,6 @@ AcpiNsDumpOneObject (
}
break;
-
default:
AcpiOsPrintf ("\n");
break;
@@ -605,30 +593,37 @@ AcpiNsDumpOneObject (
goto Cleanup;
case ACPI_TYPE_BUFFER_FIELD:
+
ObjDesc = (ACPI_OPERAND_OBJECT *) ObjDesc->BufferField.BufferObj;
break;
case ACPI_TYPE_PACKAGE:
+
ObjDesc = (void *) ObjDesc->Package.Elements;
break;
case ACPI_TYPE_METHOD:
+
ObjDesc = (void *) ObjDesc->Method.AmlStart;
break;
case ACPI_TYPE_LOCAL_REGION_FIELD:
+
ObjDesc = (void *) ObjDesc->Field.RegionObj;
break;
case ACPI_TYPE_LOCAL_BANK_FIELD:
+
ObjDesc = (void *) ObjDesc->BankField.RegionObj;
break;
case ACPI_TYPE_LOCAL_INDEX_FIELD:
+
ObjDesc = (void *) ObjDesc->IndexField.IndexObj;
break;
default:
+
goto Cleanup;
}
diff --git a/source/components/namespace/nsinit.c b/source/components/namespace/nsinit.c
index 7e7764c..05d78c1 100644
--- a/source/components/namespace/nsinit.c
+++ b/source/components/namespace/nsinit.c
@@ -296,28 +296,34 @@ AcpiNsInitOneObject (
switch (Type)
{
case ACPI_TYPE_REGION:
+
Info->OpRegionCount++;
break;
case ACPI_TYPE_BUFFER_FIELD:
+
Info->FieldCount++;
break;
case ACPI_TYPE_LOCAL_BANK_FIELD:
+
Info->FieldCount++;
break;
case ACPI_TYPE_BUFFER:
+
Info->BufferCount++;
break;
case ACPI_TYPE_PACKAGE:
+
Info->PackageCount++;
break;
default:
/* No init required, just exit now */
+
return (AE_OK);
}
@@ -369,7 +375,9 @@ AcpiNsInitOneObject (
break;
default:
+
/* No other types can get here */
+
break;
}
@@ -456,6 +464,7 @@ AcpiNsFindIniMethods (
break;
default:
+
break;
}
diff --git a/source/components/namespace/nspredef.c b/source/components/namespace/nspredef.c
index aff90d8..7122e7a 100644
--- a/source/components/namespace/nspredef.c
+++ b/source/components/namespace/nspredef.c
@@ -175,7 +175,13 @@ AcpiNsCheckReturnValue (
Status = AcpiNsCheckPackage (Info, ReturnObjectPtr);
if (ACPI_FAILURE (Status))
{
- goto Exit;
+ /* We might be able to fix some errors */
+
+ if ((Status != AE_AML_OPERAND_TYPE) &&
+ (Status != AE_AML_OPERAND_VALUE))
+ {
+ goto Exit;
+ }
}
}
@@ -377,26 +383,32 @@ AcpiNsGetBitmappedType (
switch (ReturnObject->Common.Type)
{
case ACPI_TYPE_INTEGER:
+
ReturnBtype = ACPI_RTYPE_INTEGER;
break;
case ACPI_TYPE_BUFFER:
+
ReturnBtype = ACPI_RTYPE_BUFFER;
break;
case ACPI_TYPE_STRING:
+
ReturnBtype = ACPI_RTYPE_STRING;
break;
case ACPI_TYPE_PACKAGE:
+
ReturnBtype = ACPI_RTYPE_PACKAGE;
break;
case ACPI_TYPE_LOCAL_REFERENCE:
+
ReturnBtype = ACPI_RTYPE_REFERENCE;
break;
default:
+
/* Not one of the supported objects, must be incorrect */
ReturnBtype = ACPI_RTYPE_ANY;
diff --git a/source/components/namespace/nsprepkg.c b/source/components/namespace/nsprepkg.c
index 5177c3d..6d74d57 100644
--- a/source/components/namespace/nsprepkg.c
+++ b/source/components/namespace/nsprepkg.c
@@ -149,7 +149,6 @@ AcpiNsCheckPackage (
switch (Package->RetInfo.Type)
{
case ACPI_PTYPE1_FIXED:
-
/*
* The package count is fixed and there are no sub-packages
*
@@ -176,9 +175,7 @@ AcpiNsCheckPackage (
Package->RetInfo.ObjectType2, Package->RetInfo.Count2, 0);
break;
-
case ACPI_PTYPE1_VAR:
-
/*
* The package count is variable, there are no sub-packages, and all
* elements must be of the same type
@@ -195,9 +192,7 @@ AcpiNsCheckPackage (
}
break;
-
case ACPI_PTYPE1_OPTION:
-
/*
* The package count is variable, there are no sub-packages. There are
* a fixed number of required elements, and a variable number of
@@ -241,7 +236,6 @@ AcpiNsCheckPackage (
}
break;
-
case ACPI_PTYPE2_REV_FIXED:
/* First element is the (Integer) revision */
@@ -261,7 +255,6 @@ AcpiNsCheckPackage (
Status = AcpiNsCheckPackageList (Info, Package, Elements, Count);
break;
-
case ACPI_PTYPE2_PKG_COUNT:
/* First element is the (Integer) count of sub-packages to follow */
@@ -291,13 +284,11 @@ AcpiNsCheckPackage (
Status = AcpiNsCheckPackageList (Info, Package, Elements, Count);
break;
-
case ACPI_PTYPE2:
case ACPI_PTYPE2_FIXED:
case ACPI_PTYPE2_MIN:
case ACPI_PTYPE2_COUNT:
case ACPI_PTYPE2_FIX_VAR:
-
/*
* These types all return a single Package that consists of a
* variable number of sub-Packages.
@@ -330,7 +321,6 @@ AcpiNsCheckPackage (
Status = AcpiNsCheckPackageList (Info, Package, Elements, Count);
break;
-
default:
/* Should not get here if predefined info table is correct */
@@ -438,7 +428,6 @@ AcpiNsCheckPackageList (
}
break;
-
case ACPI_PTYPE2_FIX_VAR:
/*
* Each subpackage has a fixed number of elements and an
@@ -461,7 +450,6 @@ AcpiNsCheckPackageList (
}
break;
-
case ACPI_PTYPE2_FIXED:
/* Each sub-package has a fixed length */
@@ -485,7 +473,6 @@ AcpiNsCheckPackageList (
}
break;
-
case ACPI_PTYPE2_MIN:
/* Each sub-package has a variable but minimum length */
@@ -507,9 +494,7 @@ AcpiNsCheckPackageList (
}
break;
-
case ACPI_PTYPE2_COUNT:
-
/*
* First element is the (Integer) count of elements, including
* the count field (the ACPI name is NumElements)
@@ -558,7 +543,6 @@ AcpiNsCheckPackageList (
}
break;
-
default: /* Should not get here, type was validated by caller */
return (AE_AML_INTERNAL);
diff --git a/source/components/namespace/nsrepair.c b/source/components/namespace/nsrepair.c
index 893ebe5..45b4660 100644
--- a/source/components/namespace/nsrepair.c
+++ b/source/components/namespace/nsrepair.c
@@ -510,6 +510,7 @@ AcpiNsRemoveNullElements (
case ACPI_PTYPE2_MIN:
case ACPI_PTYPE2_REV_FIXED:
case ACPI_PTYPE2_FIX_VAR:
+
break;
default:
diff --git a/source/components/namespace/nsrepair2.c b/source/components/namespace/nsrepair2.c
index 63fb36d..0dcfaad 100644
--- a/source/components/namespace/nsrepair2.c
+++ b/source/components/namespace/nsrepair2.c
@@ -86,6 +86,11 @@ AcpiNsRepair_CID (
ACPI_OPERAND_OBJECT **ReturnObjectPtr);
static ACPI_STATUS
+AcpiNsRepair_CST (
+ ACPI_EVALUATE_INFO *Info,
+ ACPI_OPERAND_OBJECT **ReturnObjectPtr);
+
+static ACPI_STATUS
AcpiNsRepair_FDE (
ACPI_EVALUATE_INFO *Info,
ACPI_OPERAND_OBJECT **ReturnObjectPtr);
@@ -96,6 +101,11 @@ AcpiNsRepair_HID (
ACPI_OPERAND_OBJECT **ReturnObjectPtr);
static ACPI_STATUS
+AcpiNsRepair_PRT (
+ ACPI_EVALUATE_INFO *Info,
+ ACPI_OPERAND_OBJECT **ReturnObjectPtr);
+
+static ACPI_STATUS
AcpiNsRepair_PSS (
ACPI_EVALUATE_INFO *Info,
ACPI_OPERAND_OBJECT **ReturnObjectPtr);
@@ -109,11 +119,22 @@ static ACPI_STATUS
AcpiNsCheckSortedList (
ACPI_EVALUATE_INFO *Info,
ACPI_OPERAND_OBJECT *ReturnObject,
+ UINT32 StartIndex,
UINT32 ExpectedCount,
UINT32 SortIndex,
UINT8 SortDirection,
char *SortKeyName);
+/* Values for SortDirection above */
+
+#define ACPI_SORT_ASCENDING 0
+#define ACPI_SORT_DESCENDING 1
+
+static void
+AcpiNsRemoveElement (
+ ACPI_OPERAND_OBJECT *ObjDesc,
+ UINT32 Index);
+
static void
AcpiNsSortList (
ACPI_OPERAND_OBJECT **Elements,
@@ -121,11 +142,6 @@ AcpiNsSortList (
UINT32 Index,
UINT8 SortDirection);
-/* Values for SortDirection above */
-
-#define ACPI_SORT_ASCENDING 0
-#define ACPI_SORT_DESCENDING 1
-
/*
* This table contains the names of the predefined methods for which we can
@@ -135,9 +151,11 @@ AcpiNsSortList (
*
* _ALR: Sort the list ascending by AmbientIlluminance
* _CID: Strings: uppercase all, remove any leading asterisk
+ * _CST: Sort the list ascending by C state type
* _FDE: Convert Buffer of BYTEs to a Buffer of DWORDs
* _GTM: Convert Buffer of BYTEs to a Buffer of DWORDs
* _HID: Strings: uppercase all, remove any leading asterisk
+ * _PRT: Fix reversed SourceName and SourceIndex
* _PSS: Sort the list descending by Power
* _TSS: Sort the list descending by Power
*
@@ -152,9 +170,11 @@ static const ACPI_REPAIR_INFO AcpiNsRepairableNames[] =
{
{"_ALR", AcpiNsRepair_ALR},
{"_CID", AcpiNsRepair_CID},
+ {"_CST", AcpiNsRepair_CST},
{"_FDE", AcpiNsRepair_FDE},
{"_GTM", AcpiNsRepair_FDE}, /* _GTM has same repair as _FDE */
{"_HID", AcpiNsRepair_HID},
+ {"_PRT", AcpiNsRepair_PRT},
{"_PSS", AcpiNsRepair_PSS},
{"_TSS", AcpiNsRepair_TSS},
{{0,0,0,0}, NULL} /* Table terminator */
@@ -267,7 +287,7 @@ AcpiNsRepair_ALR (
ACPI_STATUS Status;
- Status = AcpiNsCheckSortedList (Info, ReturnObject, 2, 1,
+ Status = AcpiNsCheckSortedList (Info, ReturnObject, 0, 2, 1,
ACPI_SORT_ASCENDING, "AmbientIlluminance");
return (Status);
@@ -354,6 +374,7 @@ AcpiNsRepair_FDE (
break;
default:
+
return (AE_AML_OPERAND_TYPE);
}
@@ -446,6 +467,97 @@ AcpiNsRepair_CID (
/******************************************************************************
*
+ * FUNCTION: AcpiNsRepair_CST
+ *
+ * PARAMETERS: Info - Method execution information block
+ * ReturnObjectPtr - Pointer to the object returned from the
+ * evaluation of a method or object
+ *
+ * RETURN: Status. AE_OK if object is OK or was repaired successfully
+ *
+ * DESCRIPTION: Repair for the _CST object:
+ * 1. Sort the list ascending by C state type
+ * 2. Ensure type cannot be zero
+ * 3. A sub-package count of zero means _CST is meaningless
+ * 4. Count must match the number of C state sub-packages
+ *
+ *****************************************************************************/
+
+static ACPI_STATUS
+AcpiNsRepair_CST (
+ ACPI_EVALUATE_INFO *Info,
+ ACPI_OPERAND_OBJECT **ReturnObjectPtr)
+{
+ ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr;
+ ACPI_OPERAND_OBJECT **OuterElements;
+ UINT32 OuterElementCount;
+ ACPI_OPERAND_OBJECT *ObjDesc;
+ ACPI_STATUS Status;
+ BOOLEAN Removing;
+ UINT32 i;
+
+
+ ACPI_FUNCTION_NAME (NsRepair_CST);
+
+
+ /*
+ * Entries (subpackages) in the _CST Package must be sorted by the
+ * C-state type, in ascending order.
+ */
+ Status = AcpiNsCheckSortedList (Info, ReturnObject, 1, 4, 1,
+ ACPI_SORT_ASCENDING, "C-State Type");
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+
+ /*
+ * We now know the list is correctly sorted by C-state type. Check if
+ * the C-state type values are proportional.
+ */
+ OuterElementCount = ReturnObject->Package.Count - 1;
+ i = 0;
+ while (i < OuterElementCount)
+ {
+ OuterElements = &ReturnObject->Package.Elements[i + 1];
+ Removing = FALSE;
+
+ if ((*OuterElements)->Package.Count == 0)
+ {
+ ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags,
+ "SubPackage[%u] - removing entry due to zero count", i));
+ Removing = TRUE;
+ }
+
+ ObjDesc = (*OuterElements)->Package.Elements[1]; /* Index1 = Type */
+ if ((UINT32) ObjDesc->Integer.Value == 0)
+ {
+ ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags,
+ "SubPackage[%u] - removing entry due to invalid Type(0)", i));
+ Removing = TRUE;
+ }
+
+ if (Removing)
+ {
+ AcpiNsRemoveElement (ReturnObject, i + 1);
+ OuterElementCount--;
+ }
+ else
+ {
+ i++;
+ }
+ }
+
+ /* Update top-level package count, Type "Integer" checked elsewhere */
+
+ ObjDesc = ReturnObject->Package.Elements[0];
+ ObjDesc->Integer.Value = OuterElementCount;
+ return (AE_OK);
+}
+
+
+/******************************************************************************
+ *
* FUNCTION: AcpiNsRepair_HID
*
* PARAMETERS: Info - Method execution information block
@@ -536,7 +648,7 @@ AcpiNsRepair_HID (
/******************************************************************************
*
- * FUNCTION: AcpiNsRepair_TSS
+ * FUNCTION: AcpiNsRepair_PRT
*
* PARAMETERS: Info - Method execution information block
* ReturnObjectPtr - Pointer to the object returned from the
@@ -544,40 +656,57 @@ AcpiNsRepair_HID (
*
* RETURN: Status. AE_OK if object is OK or was repaired successfully
*
- * DESCRIPTION: Repair for the _TSS object. If necessary, sort the object list
- * descending by the power dissipation values.
+ * DESCRIPTION: Repair for the _PRT object. If necessary, fix reversed
+ * SourceName and SourceIndex field, a common BIOS bug.
*
*****************************************************************************/
static ACPI_STATUS
-AcpiNsRepair_TSS (
+AcpiNsRepair_PRT (
ACPI_EVALUATE_INFO *Info,
ACPI_OPERAND_OBJECT **ReturnObjectPtr)
{
- ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr;
- ACPI_STATUS Status;
- ACPI_NAMESPACE_NODE *Node;
+ ACPI_OPERAND_OBJECT *PackageObject = *ReturnObjectPtr;
+ ACPI_OPERAND_OBJECT **TopObjectList;
+ ACPI_OPERAND_OBJECT **SubObjectList;
+ ACPI_OPERAND_OBJECT *ObjDesc;
+ UINT32 ElementCount;
+ UINT32 Index;
- /*
- * We can only sort the _TSS return package if there is no _PSS in the
- * same scope. This is because if _PSS is present, the ACPI specification
- * dictates that the _TSS Power Dissipation field is to be ignored, and
- * therefore some BIOSs leave garbage values in the _TSS Power field(s).
- * In this case, it is best to just return the _TSS package as-is.
- * (May, 2011)
- */
- Status = AcpiNsGetNode (Info->Node, "^_PSS",
- ACPI_NS_NO_UPSEARCH, &Node);
- if (ACPI_SUCCESS (Status))
+ /* Each element in the _PRT package is a subpackage */
+
+ TopObjectList = PackageObject->Package.Elements;
+ ElementCount = PackageObject->Package.Count;
+
+ for (Index = 0; Index < ElementCount; Index++)
{
- return (AE_OK);
- }
+ SubObjectList = (*TopObjectList)->Package.Elements;
- Status = AcpiNsCheckSortedList (Info, ReturnObject, 5, 1,
- ACPI_SORT_DESCENDING, "PowerDissipation");
+ /*
+ * If the BIOS has erroneously reversed the _PRT SourceName (index 2)
+ * and the SourceIndex (index 3), fix it. _PRT is important enough to
+ * workaround this BIOS error. This also provides compatibility with
+ * other ACPI implementations.
+ */
+ ObjDesc = SubObjectList[3];
+ if (!ObjDesc || (ObjDesc->Common.Type != ACPI_TYPE_INTEGER))
+ {
+ SubObjectList[3] = SubObjectList[2];
+ SubObjectList[2] = ObjDesc;
+ Info->ReturnFlags |= ACPI_OBJECT_REPAIRED;
- return (Status);
+ ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags,
+ "PRT[%X]: Fixed reversed SourceName and SourceIndex",
+ Index));
+ }
+
+ /* Point to the next ACPI_OPERAND_OBJECT in the top level package */
+
+ TopObjectList++;
+ }
+
+ return (AE_OK);
}
@@ -619,7 +748,7 @@ AcpiNsRepair_PSS (
* incorrectly sorted, sort it. We sort by CpuFrequency, since this
* should be proportional to the power.
*/
- Status =AcpiNsCheckSortedList (Info, ReturnObject, 6, 0,
+ Status =AcpiNsCheckSortedList (Info, ReturnObject, 0, 6, 0,
ACPI_SORT_DESCENDING, "CpuFrequency");
if (ACPI_FAILURE (Status))
{
@@ -656,10 +785,58 @@ AcpiNsRepair_PSS (
/******************************************************************************
*
+ * FUNCTION: AcpiNsRepair_TSS
+ *
+ * PARAMETERS: Info - Method execution information block
+ * ReturnObjectPtr - Pointer to the object returned from the
+ * evaluation of a method or object
+ *
+ * RETURN: Status. AE_OK if object is OK or was repaired successfully
+ *
+ * DESCRIPTION: Repair for the _TSS object. If necessary, sort the object list
+ * descending by the power dissipation values.
+ *
+ *****************************************************************************/
+
+static ACPI_STATUS
+AcpiNsRepair_TSS (
+ ACPI_EVALUATE_INFO *Info,
+ ACPI_OPERAND_OBJECT **ReturnObjectPtr)
+{
+ ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr;
+ ACPI_STATUS Status;
+ ACPI_NAMESPACE_NODE *Node;
+
+
+ /*
+ * We can only sort the _TSS return package if there is no _PSS in the
+ * same scope. This is because if _PSS is present, the ACPI specification
+ * dictates that the _TSS Power Dissipation field is to be ignored, and
+ * therefore some BIOSs leave garbage values in the _TSS Power field(s).
+ * In this case, it is best to just return the _TSS package as-is.
+ * (May, 2011)
+ */
+ Status = AcpiNsGetNode (Info->Node, "^_PSS",
+ ACPI_NS_NO_UPSEARCH, &Node);
+ if (ACPI_SUCCESS (Status))
+ {
+ return (AE_OK);
+ }
+
+ Status = AcpiNsCheckSortedList (Info, ReturnObject, 0, 5, 1,
+ ACPI_SORT_DESCENDING, "PowerDissipation");
+
+ return (Status);
+}
+
+
+/******************************************************************************
+ *
* FUNCTION: AcpiNsCheckSortedList
*
* PARAMETERS: Info - Method execution information block
* ReturnObject - Pointer to the top-level returned object
+ * StartIndex - Index of the first sub-package
* ExpectedCount - Minimum length of each sub-package
* SortIndex - Sub-package entry to sort on
* SortDirection - Ascending or descending
@@ -677,6 +854,7 @@ static ACPI_STATUS
AcpiNsCheckSortedList (
ACPI_EVALUATE_INFO *Info,
ACPI_OPERAND_OBJECT *ReturnObject,
+ UINT32 StartIndex,
UINT32 ExpectedCount,
UINT32 SortIndex,
UINT8 SortDirection,
@@ -705,13 +883,15 @@ AcpiNsCheckSortedList (
* Any NULL elements should have been removed by earlier call
* to AcpiNsRemoveNullElements.
*/
- OuterElements = ReturnObject->Package.Elements;
OuterElementCount = ReturnObject->Package.Count;
- if (!OuterElementCount)
+ if (!OuterElementCount || StartIndex >= OuterElementCount)
{
return (AE_AML_PACKAGE_LIMIT);
}
+ OuterElements = &ReturnObject->Package.Elements[StartIndex];
+ OuterElementCount -= StartIndex;
+
PreviousValue = 0;
if (SortDirection == ACPI_SORT_DESCENDING)
{
@@ -753,7 +933,7 @@ AcpiNsCheckSortedList (
((SortDirection == ACPI_SORT_DESCENDING) &&
(ObjDesc->Integer.Value > PreviousValue)))
{
- AcpiNsSortList (ReturnObject->Package.Elements,
+ AcpiNsSortList (&ReturnObject->Package.Elements[StartIndex],
OuterElementCount, SortIndex, SortDirection);
Info->ReturnFlags |= ACPI_OBJECT_REPAIRED;
@@ -826,3 +1006,61 @@ AcpiNsSortList (
}
}
}
+
+
+/******************************************************************************
+ *
+ * FUNCTION: AcpiNsRemoveElement
+ *
+ * PARAMETERS: ObjDesc - Package object element list
+ * Index - Index of element to remove
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Remove the requested element of a package and delete it.
+ *
+ *****************************************************************************/
+
+static void
+AcpiNsRemoveElement (
+ ACPI_OPERAND_OBJECT *ObjDesc,
+ UINT32 Index)
+{
+ ACPI_OPERAND_OBJECT **Source;
+ ACPI_OPERAND_OBJECT **Dest;
+ UINT32 Count;
+ UINT32 NewCount;
+ UINT32 i;
+
+
+ ACPI_FUNCTION_NAME (NsRemoveElement);
+
+
+ Count = ObjDesc->Package.Count;
+ NewCount = Count - 1;
+
+ Source = ObjDesc->Package.Elements;
+ Dest = Source;
+
+ /* Examine all elements of the package object, remove matched index */
+
+ for (i = 0; i < Count; i++)
+ {
+ if (i == Index)
+ {
+ AcpiUtRemoveReference (*Source); /* Remove one ref for being in pkg */
+ AcpiUtRemoveReference (*Source);
+ }
+ else
+ {
+ *Dest = *Source;
+ Dest++;
+ }
+ Source++;
+ }
+
+ /* NULL terminate list and update the package count */
+
+ *Dest = NULL;
+ ObjDesc->Package.Count = NewCount;
+}
diff --git a/source/components/namespace/nsutils.c b/source/components/namespace/nsutils.c
index 16a6bdb..f2cf74f 100644
--- a/source/components/namespace/nsutils.c
+++ b/source/components/namespace/nsutils.c
@@ -497,10 +497,12 @@ AcpiNsExternalizeName (
switch (InternalName[0])
{
case AML_ROOT_PREFIX:
+
PrefixLength = 1;
break;
case AML_PARENT_PREFIX:
+
for (i = 0; i < InternalNameLength; i++)
{
if (ACPI_IS_PARENT_PREFIX (InternalName[i]))
@@ -521,6 +523,7 @@ AcpiNsExternalizeName (
break;
default:
+
break;
}
diff --git a/source/components/namespace/nsxfeval.c b/source/components/namespace/nsxfeval.c
index 57cc038..6a2649a 100644
--- a/source/components/namespace/nsxfeval.c
+++ b/source/components/namespace/nsxfeval.c
@@ -550,6 +550,7 @@ AcpiNsResolveReferences (
break;
default:
+
return;
}
diff --git a/source/components/parser/psargs.c b/source/components/parser/psargs.c
index 2bf7be7..42436fe 100644
--- a/source/components/parser/psargs.c
+++ b/source/components/parser/psargs.c
@@ -447,7 +447,6 @@ AcpiPsGetNextSimpleArg (
Length = 1;
break;
-
case ARGP_WORDDATA:
/* Get 2 bytes from the AML stream */
@@ -457,7 +456,6 @@ AcpiPsGetNextSimpleArg (
Length = 2;
break;
-
case ARGP_DWORDDATA:
/* Get 4 bytes from the AML stream */
@@ -467,7 +465,6 @@ AcpiPsGetNextSimpleArg (
Length = 4;
break;
-
case ARGP_QWORDDATA:
/* Get 8 bytes from the AML stream */
@@ -477,7 +474,6 @@ AcpiPsGetNextSimpleArg (
Length = 8;
break;
-
case ARGP_CHARLIST:
/* Get a pointer to the string, point past the string */
@@ -495,7 +491,6 @@ AcpiPsGetNextSimpleArg (
Length++;
break;
-
case ARGP_NAME:
case ARGP_NAMESTRING:
@@ -503,7 +498,6 @@ AcpiPsGetNextSimpleArg (
Arg->Common.Value.Name = AcpiPsGetNextNamestring (ParserState);
return_VOID;
-
default:
ACPI_ERROR ((AE_INFO, "Invalid ArgType 0x%X", ArgType));
@@ -685,21 +679,25 @@ AcpiPsGetNextField (
switch (Opcode)
{
case AML_BYTE_OP: /* AML_BYTEDATA_ARG */
+
BufferLength = ACPI_GET8 (ParserState->Aml);
ParserState->Aml += 1;
break;
case AML_WORD_OP: /* AML_WORDDATA_ARG */
+
BufferLength = ACPI_GET16 (ParserState->Aml);
ParserState->Aml += 2;
break;
case AML_DWORD_OP: /* AML_DWORDATA_ARG */
+
BufferLength = ACPI_GET32 (ParserState->Aml);
ParserState->Aml += 4;
break;
default:
+
BufferLength = 0;
break;
}
@@ -796,7 +794,6 @@ AcpiPsGetNextArg (
AcpiPsGetNextSimpleArg (ParserState, ArgType, Arg);
break;
-
case ARGP_PKGLENGTH:
/* Package length, nothing returned */
@@ -804,7 +801,6 @@ AcpiPsGetNextArg (
ParserState->PkgEnd = AcpiPsGetNextPackageEnd (ParserState);
break;
-
case ARGP_FIELDLIST:
if (ParserState->Aml < ParserState->PkgEnd)
@@ -836,7 +832,6 @@ AcpiPsGetNextArg (
}
break;
-
case ARGP_BYTELIST:
if (ParserState->Aml < ParserState->PkgEnd)
@@ -861,7 +856,6 @@ AcpiPsGetNextArg (
}
break;
-
case ARGP_TARGET:
case ARGP_SUPERNAME:
case ARGP_SIMPLENAME:
@@ -909,7 +903,6 @@ AcpiPsGetNextArg (
}
break;
-
case ARGP_DATAOBJ:
case ARGP_TERMARG:
@@ -918,7 +911,6 @@ AcpiPsGetNextArg (
WalkState->ArgCount = 1;
break;
-
case ARGP_DATAOBJLIST:
case ARGP_TERMLIST:
case ARGP_OBJLIST:
@@ -931,7 +923,6 @@ AcpiPsGetNextArg (
}
break;
-
default:
ACPI_ERROR ((AE_INFO, "Invalid ArgType: 0x%X", ArgType));
diff --git a/source/components/parser/psloop.c b/source/components/parser/psloop.c
index df7bd11..0afcb4c 100644
--- a/source/components/parser/psloop.c
+++ b/source/components/parser/psloop.c
@@ -174,7 +174,6 @@ AcpiPsGetArguments (
case AML_IF_OP:
case AML_ELSE_OP:
case AML_WHILE_OP:
-
/*
* Currently supported module-level opcodes are:
* IF/ELSE/WHILE. These appear to be the most common,
@@ -280,6 +279,7 @@ AcpiPsGetArguments (
default:
/* No action for all other opcodes */
+
break;
}
diff --git a/source/components/parser/psobject.c b/source/components/parser/psobject.c
index 78ee74c..f507e8e 100644
--- a/source/components/parser/psobject.c
+++ b/source/components/parser/psobject.c
@@ -436,8 +436,8 @@ AcpiPsCompleteOp (
switch (Status)
{
case AE_OK:
- break;
+ break;
case AE_CTRL_TRANSFER:
@@ -447,7 +447,6 @@ AcpiPsCompleteOp (
WalkState->PrevArgTypes = WalkState->ArgTypes;
return_ACPI_STATUS (Status);
-
case AE_CTRL_END:
AcpiPsPopScope (&(WalkState->ParserState), Op,
@@ -472,7 +471,6 @@ AcpiPsCompleteOp (
Status = AE_OK;
break;
-
case AE_CTRL_BREAK:
case AE_CTRL_CONTINUE:
@@ -502,7 +500,6 @@ AcpiPsCompleteOp (
Status = AE_OK;
break;
-
case AE_CTRL_TERMINATE:
/* Clean up */
@@ -527,7 +524,6 @@ AcpiPsCompleteOp (
return_ACPI_STATUS (AE_OK);
-
default: /* All other non-AE_OK status */
do
diff --git a/source/components/parser/psparse.c b/source/components/parser/psparse.c
index a6a2ad9..925fa56 100644
--- a/source/components/parser/psparse.c
+++ b/source/components/parser/psparse.c
@@ -191,10 +191,10 @@ AcpiPsCompleteThisOp (
switch (ParentInfo->Class)
{
case AML_CLASS_CONTROL:
+
break;
case AML_CLASS_CREATE:
-
/*
* These opcodes contain TermArg operands. The current
* op must be replaced by a placeholder return op
@@ -207,7 +207,6 @@ AcpiPsCompleteThisOp (
break;
case AML_CLASS_NAMED_OBJECT:
-
/*
* These opcodes contain TermArg operands. The current
* op must be replaced by a placeholder return op
@@ -352,7 +351,6 @@ AcpiPsNextParseState (
Status = AE_CTRL_TERMINATE;
break;
-
case AE_CTRL_BREAK:
ParserState->Aml = WalkState->AmlLastWhile;
@@ -360,14 +358,12 @@ AcpiPsNextParseState (
Status = AE_CTRL_BREAK;
break;
-
case AE_CTRL_CONTINUE:
ParserState->Aml = WalkState->AmlLastWhile;
Status = AE_CTRL_CONTINUE;
break;
-
case AE_CTRL_PENDING:
ParserState->Aml = WalkState->AmlLastWhile;
@@ -390,7 +386,6 @@ AcpiPsNextParseState (
Status = AE_CTRL_PENDING;
break;
-
case AE_CTRL_FALSE:
/*
* Either an IF/WHILE Predicate was false or we encountered a BREAK
@@ -407,7 +402,6 @@ AcpiPsNextParseState (
Status = AE_CTRL_END;
break;
-
case AE_CTRL_TRANSFER:
/* A method call (invocation) -- transfer control */
@@ -422,7 +416,6 @@ AcpiPsNextParseState (
WalkState->ReturnUsed = AcpiDsIsResultUsed (Op, WalkState);
break;
-
default:
Status = CallbackStatus;
diff --git a/source/components/parser/pstree.c b/source/components/parser/pstree.c
index 5a72b3b..6b67013 100644
--- a/source/components/parser/pstree.c
+++ b/source/components/parser/pstree.c
@@ -322,7 +322,6 @@ AcpiPsGetChild (
Child = AcpiPsGetArg (Op, 0);
break;
-
case AML_BUFFER_OP:
case AML_PACKAGE_OP:
case AML_METHOD_OP:
@@ -333,23 +332,22 @@ AcpiPsGetChild (
Child = AcpiPsGetArg (Op, 1);
break;
-
case AML_POWER_RES_OP:
case AML_INDEX_FIELD_OP:
Child = AcpiPsGetArg (Op, 2);
break;
-
case AML_PROCESSOR_OP:
case AML_BANK_FIELD_OP:
Child = AcpiPsGetArg (Op, 3);
break;
-
default:
+
/* All others have no children */
+
break;
}
diff --git a/source/components/resources/rscalc.c b/source/components/resources/rscalc.c
index 5c373ec..a6e8b38 100644
--- a/source/components/resources/rscalc.c
+++ b/source/components/resources/rscalc.c
@@ -371,8 +371,8 @@ AcpiRsGetAmlLength (
break;
-
default:
+
break;
}
@@ -562,6 +562,7 @@ AcpiRsGetListLength (
break;
default:
+
break;
}
@@ -676,7 +677,9 @@ AcpiRsGetPciRoutingTableLength (
NameFound = FALSE;
- for (TableIndex = 0; TableIndex < 4 && !NameFound; TableIndex++)
+ for (TableIndex = 0;
+ TableIndex < PackageElement->Package.Count && !NameFound;
+ TableIndex++)
{
if (*SubObjectList && /* Null object allowed */
diff --git a/source/components/resources/rscreate.c b/source/components/resources/rscreate.c
index 72202c6..209b503 100644
--- a/source/components/resources/rscreate.c
+++ b/source/components/resources/rscreate.c
@@ -297,16 +297,6 @@ AcpiRsCreatePciRoutingTable (
*/
UserPrt->Length = (sizeof (ACPI_PCI_ROUTING_TABLE) - 4);
- /* Each element of the top-level package must also be a package */
-
- if ((*TopObjectList)->Common.Type != ACPI_TYPE_PACKAGE)
- {
- ACPI_ERROR ((AE_INFO,
- "(PRT[%u]) Need sub-package, found %s",
- Index, AcpiUtGetObjectTypeName (*TopObjectList)));
- return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
- }
-
/* Each sub-package must be of length 4 */
if ((*TopObjectList)->Package.Count != 4)
@@ -349,23 +339,6 @@ AcpiRsCreatePciRoutingTable (
UserPrt->Pin = (UINT32) ObjDesc->Integer.Value;
/*
- * If the BIOS has erroneously reversed the _PRT SourceName (index 2)
- * and the SourceIndex (index 3), fix it. _PRT is important enough to
- * workaround this BIOS error. This also provides compatibility with
- * other ACPI implementations.
- */
- ObjDesc = SubObjectList[3];
- if (!ObjDesc || (ObjDesc->Common.Type != ACPI_TYPE_INTEGER))
- {
- SubObjectList[3] = SubObjectList[2];
- SubObjectList[2] = ObjDesc;
-
- ACPI_WARNING ((AE_INFO,
- "(PRT[%X].Source) SourceName and SourceIndex are reversed, fixed",
- Index));
- }
-
- /*
* 3) Third subobject: Dereference the PRT.SourceName
* The name may be unresolved (slack mode), so allow a null object
*/
@@ -400,7 +373,6 @@ AcpiRsCreatePciRoutingTable (
UserPrt->Length += (UINT32) ACPI_STRLEN (UserPrt->Source) + 1;
break;
-
case ACPI_TYPE_STRING:
ACPI_STRCPY (UserPrt->Source, ObjDesc->String.Pointer);
@@ -412,7 +384,6 @@ AcpiRsCreatePciRoutingTable (
UserPrt->Length += ObjDesc->String.Length + 1;
break;
-
case ACPI_TYPE_INTEGER:
/*
* If this is a number, then the Source Name is NULL, since the
@@ -423,7 +394,6 @@ AcpiRsCreatePciRoutingTable (
UserPrt->Length += sizeof (UINT32);
break;
-
default:
ACPI_ERROR ((AE_INFO,
diff --git a/source/components/resources/rsdump.c b/source/components/resources/rsdump.c
index 063be02..4f72cdf 100644
--- a/source/components/resources/rsdump.c
+++ b/source/components/resources/rsdump.c
@@ -168,16 +168,19 @@ AcpiRsDumpDescriptor (
/* Strings */
case ACPI_RSD_LITERAL:
+
AcpiRsOutString (Name, ACPI_CAST_PTR (char, Table->Pointer));
break;
case ACPI_RSD_STRING:
+
AcpiRsOutString (Name, ACPI_CAST_PTR (char, Target));
break;
/* Data items, 8/16/32/64 bit */
case ACPI_RSD_UINT8:
+
if (Table->Pointer)
{
AcpiRsOutString (Name, ACPI_CAST_PTR (char,
@@ -190,30 +193,36 @@ AcpiRsDumpDescriptor (
break;
case ACPI_RSD_UINT16:
+
AcpiRsOutInteger16 (Name, ACPI_GET16 (Target));
break;
case ACPI_RSD_UINT32:
+
AcpiRsOutInteger32 (Name, ACPI_GET32 (Target));
break;
case ACPI_RSD_UINT64:
+
AcpiRsOutInteger64 (Name, ACPI_GET64 (Target));
break;
/* Flags: 1-bit and 2-bit flags supported */
case ACPI_RSD_1BITFLAG:
+
AcpiRsOutString (Name, ACPI_CAST_PTR (char,
Table->Pointer [*Target & 0x01]));
break;
case ACPI_RSD_2BITFLAG:
+
AcpiRsOutString (Name, ACPI_CAST_PTR (char,
Table->Pointer [*Target & 0x03]));
break;
case ACPI_RSD_3BITFLAG:
+
AcpiRsOutString (Name, ACPI_CAST_PTR (char,
Table->Pointer [*Target & 0x07]));
break;
@@ -293,6 +302,7 @@ AcpiRsDumpDescriptor (
break;
default:
+
AcpiOsPrintf ("**** Invalid table opcode [%X] ****\n",
Table->Opcode);
return;
diff --git a/source/components/resources/rsmisc.c b/source/components/resources/rsmisc.c
index c17d64b..f3e02a1 100644
--- a/source/components/resources/rsmisc.c
+++ b/source/components/resources/rsmisc.c
@@ -137,17 +137,14 @@ AcpiRsConvertAmlToResource (
Resource->Length = INIT_RESOURCE_LENGTH (Info);
break;
-
case ACPI_RSC_INITSET:
break;
-
case ACPI_RSC_FLAGINIT:
FlagsMode = TRUE;
break;
-
case ACPI_RSC_1BITFLAG:
/*
* Mask and shift the flag bit
@@ -156,7 +153,6 @@ AcpiRsConvertAmlToResource (
((ACPI_GET8 (Source) >> Info->Value) & 0x01));
break;
-
case ACPI_RSC_2BITFLAG:
/*
* Mask and shift the flag bits
@@ -165,7 +161,6 @@ AcpiRsConvertAmlToResource (
((ACPI_GET8 (Source) >> Info->Value) & 0x03));
break;
-
case ACPI_RSC_3BITFLAG:
/*
* Mask and shift the flag bits
@@ -174,7 +169,6 @@ AcpiRsConvertAmlToResource (
((ACPI_GET8 (Source) >> Info->Value) & 0x07));
break;
-
case ACPI_RSC_COUNT:
ItemCount = ACPI_GET8 (Source);
@@ -184,7 +178,6 @@ AcpiRsConvertAmlToResource (
(Info->Value * (ItemCount - 1));
break;
-
case ACPI_RSC_COUNT16:
ItemCount = AmlResourceLength;
@@ -194,7 +187,6 @@ AcpiRsConvertAmlToResource (
(Info->Value * (ItemCount - 1));
break;
-
case ACPI_RSC_COUNT_GPIO_PIN:
Target = ACPI_ADD_PTR (void, Aml, Info->Value);
@@ -205,7 +197,6 @@ AcpiRsConvertAmlToResource (
ACPI_SET16 (Destination, ItemCount);
break;
-
case ACPI_RSC_COUNT_GPIO_VEN:
ItemCount = ACPI_GET8 (Source);
@@ -215,9 +206,7 @@ AcpiRsConvertAmlToResource (
(Info->Value * ItemCount);
break;
-
case ACPI_RSC_COUNT_GPIO_RES:
-
/*
* Vendor data is optional (length/offset may both be zero)
* Examine vendor data length field first
@@ -243,7 +232,6 @@ AcpiRsConvertAmlToResource (
ACPI_SET16 (Destination, ItemCount);
break;
-
case ACPI_RSC_COUNT_SERIAL_VEN:
ItemCount = ACPI_GET16 (Source) - Info->Value;
@@ -252,7 +240,6 @@ AcpiRsConvertAmlToResource (
ACPI_SET16 (Destination, ItemCount);
break;
-
case ACPI_RSC_COUNT_SERIAL_RES:
ItemCount = (AmlResourceLength +
@@ -263,13 +250,11 @@ AcpiRsConvertAmlToResource (
ACPI_SET16 (Destination, ItemCount);
break;
-
case ACPI_RSC_LENGTH:
Resource->Length = Resource->Length + Info->Value;
break;
-
case ACPI_RSC_MOVE8:
case ACPI_RSC_MOVE16:
case ACPI_RSC_MOVE32:
@@ -285,7 +270,6 @@ AcpiRsConvertAmlToResource (
AcpiRsMoveData (Destination, Source, ItemCount, Info->Opcode);
break;
-
case ACPI_RSC_MOVE_GPIO_PIN:
/* Generate and set the PIN data pointer */
@@ -300,7 +284,6 @@ AcpiRsConvertAmlToResource (
AcpiRsMoveData (Target, Source, ItemCount, Info->Opcode);
break;
-
case ACPI_RSC_MOVE_GPIO_RES:
/* Generate and set the ResourceSource string pointer */
@@ -315,7 +298,6 @@ AcpiRsConvertAmlToResource (
AcpiRsMoveData (Target, Source, ItemCount, Info->Opcode);
break;
-
case ACPI_RSC_MOVE_SERIAL_VEN:
/* Generate and set the Vendor Data pointer */
@@ -330,7 +312,6 @@ AcpiRsConvertAmlToResource (
AcpiRsMoveData (Target, Source, ItemCount, Info->Opcode);
break;
-
case ACPI_RSC_MOVE_SERIAL_RES:
/* Generate and set the ResourceSource string pointer */
@@ -345,20 +326,17 @@ AcpiRsConvertAmlToResource (
AcpiRsMoveData (Target, Source, ItemCount, Info->Opcode);
break;
-
case ACPI_RSC_SET8:
ACPI_MEMSET (Destination, Info->AmlOffset, Info->Value);
break;
-
case ACPI_RSC_DATA8:
Target = ACPI_ADD_PTR (char, Resource, Info->Value);
ACPI_MEMCPY (Destination, Source, ACPI_GET16 (Target));
break;
-
case ACPI_RSC_ADDRESS:
/*
* Common handler for address descriptor flags
@@ -369,7 +347,6 @@ AcpiRsConvertAmlToResource (
}
break;
-
case ACPI_RSC_SOURCE:
/*
* Optional ResourceSource (Index and String)
@@ -379,7 +356,6 @@ AcpiRsConvertAmlToResource (
Destination, Aml, NULL);
break;
-
case ACPI_RSC_SOURCEX:
/*
* Optional ResourceSource (Index and String). This is the more
@@ -394,7 +370,6 @@ AcpiRsConvertAmlToResource (
Destination, Aml, Target);
break;
-
case ACPI_RSC_BITMASK:
/*
* 8-bit encoded bitmask (DMA macro)
@@ -409,7 +384,6 @@ AcpiRsConvertAmlToResource (
ACPI_SET8 (Target, ItemCount);
break;
-
case ACPI_RSC_BITMASK16:
/*
* 16-bit encoded bitmask (IRQ macro)
@@ -426,7 +400,6 @@ AcpiRsConvertAmlToResource (
ACPI_SET8 (Target, ItemCount);
break;
-
case ACPI_RSC_EXIT_NE:
/*
* Control - Exit conversion if not equal
@@ -434,6 +407,7 @@ AcpiRsConvertAmlToResource (
switch (Info->ResourceOffset)
{
case ACPI_RSC_COMPARE_AML_LENGTH:
+
if (AmlResourceLength != Info->Value)
{
goto Exit;
@@ -441,6 +415,7 @@ AcpiRsConvertAmlToResource (
break;
case ACPI_RSC_COMPARE_VALUE:
+
if (ACPI_GET8 (Source) != Info->Value)
{
goto Exit;
@@ -454,7 +429,6 @@ AcpiRsConvertAmlToResource (
}
break;
-
default:
ACPI_ERROR ((AE_INFO, "Invalid conversion opcode"));
@@ -538,11 +512,9 @@ AcpiRsConvertResourceToAml (
AcpiRsSetResourceHeader (INIT_RESOURCE_TYPE (Info), AmlLength, Aml);
break;
-
case ACPI_RSC_INITGET:
break;
-
case ACPI_RSC_FLAGINIT:
/*
* Clear the flag byte
@@ -550,7 +522,6 @@ AcpiRsConvertResourceToAml (
ACPI_SET8 (Destination, 0);
break;
-
case ACPI_RSC_1BITFLAG:
/*
* Mask and shift the flag bit
@@ -559,7 +530,6 @@ AcpiRsConvertResourceToAml (
((ACPI_GET8 (Source) & 0x01) << Info->Value));
break;
-
case ACPI_RSC_2BITFLAG:
/*
* Mask and shift the flag bits
@@ -568,7 +538,6 @@ AcpiRsConvertResourceToAml (
((ACPI_GET8 (Source) & 0x03) << Info->Value));
break;
-
case ACPI_RSC_3BITFLAG:
/*
* Mask and shift the flag bits
@@ -577,7 +546,6 @@ AcpiRsConvertResourceToAml (
((ACPI_GET8 (Source) & 0x07) << Info->Value));
break;
-
case ACPI_RSC_COUNT:
ItemCount = ACPI_GET8 (Source);
@@ -586,7 +554,6 @@ AcpiRsConvertResourceToAml (
AmlLength = (UINT16) (AmlLength + (Info->Value * (ItemCount - 1)));
break;
-
case ACPI_RSC_COUNT16:
ItemCount = ACPI_GET16 (Source);
@@ -594,7 +561,6 @@ AcpiRsConvertResourceToAml (
AcpiRsSetResourceLength (AmlLength, Aml);
break;
-
case ACPI_RSC_COUNT_GPIO_PIN:
ItemCount = ACPI_GET16 (Source);
@@ -606,7 +572,6 @@ AcpiRsConvertResourceToAml (
AcpiRsSetResourceLength (AmlLength, Aml);
break;
-
case ACPI_RSC_COUNT_GPIO_VEN:
ItemCount = ACPI_GET16 (Source);
@@ -616,7 +581,6 @@ AcpiRsConvertResourceToAml (
AcpiRsSetResourceLength (AmlLength, Aml);
break;
-
case ACPI_RSC_COUNT_GPIO_RES:
/* Set resource source string length */
@@ -639,7 +603,6 @@ AcpiRsConvertResourceToAml (
AcpiRsSetResourceLength (AmlLength, Aml);
break;
-
case ACPI_RSC_COUNT_SERIAL_VEN:
ItemCount = ACPI_GET16 (Source);
@@ -648,7 +611,6 @@ AcpiRsConvertResourceToAml (
AcpiRsSetResourceLength (AmlLength, Aml);
break;
-
case ACPI_RSC_COUNT_SERIAL_RES:
ItemCount = ACPI_GET16 (Source);
@@ -656,13 +618,11 @@ AcpiRsConvertResourceToAml (
AcpiRsSetResourceLength (AmlLength, Aml);
break;
-
case ACPI_RSC_LENGTH:
AcpiRsSetResourceLength (Info->Value, Aml);
break;
-
case ACPI_RSC_MOVE8:
case ACPI_RSC_MOVE16:
case ACPI_RSC_MOVE32:
@@ -675,7 +635,6 @@ AcpiRsConvertResourceToAml (
AcpiRsMoveData (Destination, Source, ItemCount, Info->Opcode);
break;
-
case ACPI_RSC_MOVE_GPIO_PIN:
Destination = (char *) ACPI_ADD_PTR (void, Aml,
@@ -684,7 +643,6 @@ AcpiRsConvertResourceToAml (
AcpiRsMoveData (Destination, Source, ItemCount, Info->Opcode);
break;
-
case ACPI_RSC_MOVE_GPIO_RES:
/* Used for both ResourceSource string and VendorData */
@@ -695,7 +653,6 @@ AcpiRsConvertResourceToAml (
AcpiRsMoveData (Destination, Source, ItemCount, Info->Opcode);
break;
-
case ACPI_RSC_MOVE_SERIAL_VEN:
Destination = (char *) ACPI_ADD_PTR (void, Aml,
@@ -704,7 +661,6 @@ AcpiRsConvertResourceToAml (
AcpiRsMoveData (Destination, Source, ItemCount, Info->Opcode);
break;
-
case ACPI_RSC_MOVE_SERIAL_RES:
Destination = (char *) ACPI_ADD_PTR (void, Aml,
@@ -713,7 +669,6 @@ AcpiRsConvertResourceToAml (
AcpiRsMoveData (Destination, Source, ItemCount, Info->Opcode);
break;
-
case ACPI_RSC_ADDRESS:
/* Set the Resource Type, General Flags, and Type-Specific Flags */
@@ -721,7 +676,6 @@ AcpiRsConvertResourceToAml (
AcpiRsSetAddressCommon (Aml, Resource);
break;
-
case ACPI_RSC_SOURCEX:
/*
* Optional ResourceSource (Index and String)
@@ -731,7 +685,6 @@ AcpiRsConvertResourceToAml (
AcpiRsSetResourceLength (AmlLength, Aml);
break;
-
case ACPI_RSC_SOURCE:
/*
* Optional ResourceSource (Index and String). This is the more
@@ -741,7 +694,6 @@ AcpiRsConvertResourceToAml (
AcpiRsSetResourceLength (AmlLength, Aml);
break;
-
case ACPI_RSC_BITMASK:
/*
* 8-bit encoded bitmask (DMA macro)
@@ -751,7 +703,6 @@ AcpiRsConvertResourceToAml (
*ACPI_ADD_PTR (UINT8, Resource, Info->Value)));
break;
-
case ACPI_RSC_BITMASK16:
/*
* 16-bit encoded bitmask (IRQ macro)
@@ -761,7 +712,6 @@ AcpiRsConvertResourceToAml (
ACPI_MOVE_16_TO_16 (Destination, &Temp16);
break;
-
case ACPI_RSC_EXIT_LE:
/*
* Control - Exit conversion if less than or equal
@@ -772,7 +722,6 @@ AcpiRsConvertResourceToAml (
}
break;
-
case ACPI_RSC_EXIT_NE:
/*
* Control - Exit conversion if not equal
@@ -795,7 +744,6 @@ AcpiRsConvertResourceToAml (
}
break;
-
case ACPI_RSC_EXIT_EQ:
/*
* Control - Exit conversion if equal
@@ -807,7 +755,6 @@ AcpiRsConvertResourceToAml (
}
break;
-
default:
ACPI_ERROR ((AE_INFO, "Invalid conversion opcode"));
diff --git a/source/components/resources/rsutils.c b/source/components/resources/rsutils.c
index fd54dab..a453efe 100644
--- a/source/components/resources/rsutils.c
+++ b/source/components/resources/rsutils.c
@@ -176,6 +176,7 @@ AcpiRsMoveData (
case ACPI_RSC_MOVE_GPIO_RES:
case ACPI_RSC_MOVE_SERIAL_VEN:
case ACPI_RSC_MOVE_SERIAL_RES:
+
ACPI_MEMCPY (Destination, Source, ItemCount);
return;
@@ -186,21 +187,25 @@ AcpiRsMoveData (
*/
case ACPI_RSC_MOVE16:
case ACPI_RSC_MOVE_GPIO_PIN:
+
ACPI_MOVE_16_TO_16 (&ACPI_CAST_PTR (UINT16, Destination)[i],
&ACPI_CAST_PTR (UINT16, Source)[i]);
break;
case ACPI_RSC_MOVE32:
+
ACPI_MOVE_32_TO_32 (&ACPI_CAST_PTR (UINT32, Destination)[i],
&ACPI_CAST_PTR (UINT32, Source)[i]);
break;
case ACPI_RSC_MOVE64:
+
ACPI_MOVE_64_TO_64 (&ACPI_CAST_PTR (UINT64, Destination)[i],
&ACPI_CAST_PTR (UINT64, Source)[i]);
break;
default:
+
return;
}
}
diff --git a/source/components/resources/rsxface.c b/source/components/resources/rsxface.c
index 36edc81..0523f5b 100644
--- a/source/components/resources/rsxface.c
+++ b/source/components/resources/rsxface.c
@@ -452,6 +452,7 @@ AcpiResourceToAddress64 (
break;
default:
+
return (AE_BAD_PARAMETER);
}
diff --git a/source/components/tables/tbinstal.c b/source/components/tables/tbinstal.c
index e4a0610..e480749 100644
--- a/source/components/tables/tbinstal.c
+++ b/source/components/tables/tbinstal.c
@@ -160,7 +160,7 @@ AcpiTbAddTable (
ACPI_BIOS_ERROR ((AE_INFO,
"Table has invalid signature [%4.4s] (0x%8.8X), "
"must be SSDT or OEMx",
- AcpiUtValidAcpiName (*(UINT32 *) TableDesc->Pointer->Signature) ?
+ AcpiUtValidAcpiName (TableDesc->Pointer->Signature) ?
TableDesc->Pointer->Signature : "????",
*(UINT32 *) TableDesc->Pointer->Signature));
@@ -514,16 +514,19 @@ AcpiTbDeleteTable (
switch (TableDesc->Flags & ACPI_TABLE_ORIGIN_MASK)
{
case ACPI_TABLE_ORIGIN_MAPPED:
+
AcpiOsUnmapMemory (TableDesc->Pointer, TableDesc->Length);
break;
case ACPI_TABLE_ORIGIN_ALLOCATED:
+
ACPI_FREE (TableDesc->Pointer);
break;
/* Not mapped or allocated, there is nothing we can do */
default:
+
return;
}
diff --git a/source/components/tables/tbprint.c b/source/components/tables/tbprint.c
new file mode 100644
index 0000000..7823ffc
--- /dev/null
+++ b/source/components/tables/tbprint.c
@@ -0,0 +1,265 @@
+/******************************************************************************
+ *
+ * Module Name: tbprint - Table output utilities
+ *
+ *****************************************************************************/
+
+/*
+ * Copyright (C) 2000 - 2013, 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.
+ */
+
+#define __TBPRINT_C__
+
+#include "acpi.h"
+#include "accommon.h"
+#include "actables.h"
+
+#define _COMPONENT ACPI_TABLES
+ ACPI_MODULE_NAME ("tbprint")
+
+
+/* Local prototypes */
+
+static void
+AcpiTbFixString (
+ char *String,
+ ACPI_SIZE Length);
+
+static void
+AcpiTbCleanupTableHeader (
+ ACPI_TABLE_HEADER *OutHeader,
+ ACPI_TABLE_HEADER *Header);
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiTbFixString
+ *
+ * PARAMETERS: String - String to be repaired
+ * Length - Maximum length
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Replace every non-printable or non-ascii byte in the string
+ * with a question mark '?'.
+ *
+ ******************************************************************************/
+
+static void
+AcpiTbFixString (
+ char *String,
+ ACPI_SIZE Length)
+{
+
+ while (Length && *String)
+ {
+ if (!ACPI_IS_PRINT (*String))
+ {
+ *String = '?';
+ }
+ String++;
+ Length--;
+ }
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiTbCleanupTableHeader
+ *
+ * PARAMETERS: OutHeader - Where the cleaned header is returned
+ * Header - Input ACPI table header
+ *
+ * RETURN: Returns the cleaned header in OutHeader
+ *
+ * DESCRIPTION: Copy the table header and ensure that all "string" fields in
+ * the header consist of printable characters.
+ *
+ ******************************************************************************/
+
+static void
+AcpiTbCleanupTableHeader (
+ ACPI_TABLE_HEADER *OutHeader,
+ ACPI_TABLE_HEADER *Header)
+{
+
+ ACPI_MEMCPY (OutHeader, Header, sizeof (ACPI_TABLE_HEADER));
+
+ AcpiTbFixString (OutHeader->Signature, ACPI_NAME_SIZE);
+ AcpiTbFixString (OutHeader->OemId, ACPI_OEM_ID_SIZE);
+ AcpiTbFixString (OutHeader->OemTableId, ACPI_OEM_TABLE_ID_SIZE);
+ AcpiTbFixString (OutHeader->AslCompilerId, ACPI_NAME_SIZE);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiTbPrintTableHeader
+ *
+ * PARAMETERS: Address - Table physical address
+ * Header - Table header
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Print an ACPI table header. Special cases for FACS and RSDP.
+ *
+ ******************************************************************************/
+
+void
+AcpiTbPrintTableHeader (
+ ACPI_PHYSICAL_ADDRESS Address,
+ ACPI_TABLE_HEADER *Header)
+{
+ ACPI_TABLE_HEADER LocalHeader;
+
+
+ /*
+ * The reason that the Address is cast to a void pointer is so that we
+ * can use %p which will work properly on both 32-bit and 64-bit hosts.
+ */
+ if (ACPI_COMPARE_NAME (Header->Signature, ACPI_SIG_FACS))
+ {
+ /* FACS only has signature and length fields */
+
+ ACPI_INFO ((AE_INFO, "%4.4s %p %05X",
+ Header->Signature, ACPI_CAST_PTR (void, Address),
+ Header->Length));
+ }
+ else if (ACPI_COMPARE_NAME (Header->Signature, ACPI_SIG_RSDP))
+ {
+ /* RSDP has no common fields */
+
+ ACPI_MEMCPY (LocalHeader.OemId,
+ ACPI_CAST_PTR (ACPI_TABLE_RSDP, Header)->OemId, ACPI_OEM_ID_SIZE);
+ AcpiTbFixString (LocalHeader.OemId, ACPI_OEM_ID_SIZE);
+
+ ACPI_INFO ((AE_INFO, "RSDP %p %05X (v%.2d %6.6s)",
+ ACPI_CAST_PTR (void, Address),
+ (ACPI_CAST_PTR (ACPI_TABLE_RSDP, Header)->Revision > 0) ?
+ ACPI_CAST_PTR (ACPI_TABLE_RSDP, Header)->Length : 20,
+ ACPI_CAST_PTR (ACPI_TABLE_RSDP, Header)->Revision,
+ LocalHeader.OemId));
+ }
+ else
+ {
+ /* Standard ACPI table with full common header */
+
+ AcpiTbCleanupTableHeader (&LocalHeader, Header);
+
+ ACPI_INFO ((AE_INFO,
+ "%4.4s %p %05X (v%.2d %6.6s %8.8s %08X %4.4s %08X)",
+ LocalHeader.Signature, ACPI_CAST_PTR (void, Address),
+ LocalHeader.Length, LocalHeader.Revision, LocalHeader.OemId,
+ LocalHeader.OemTableId, LocalHeader.OemRevision,
+ LocalHeader.AslCompilerId, LocalHeader.AslCompilerRevision));
+ }
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiTbValidateChecksum
+ *
+ * PARAMETERS: Table - ACPI table to verify
+ * Length - Length of entire table
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Verifies that the table checksums to zero. Optionally returns
+ * exception on bad checksum.
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiTbVerifyChecksum (
+ ACPI_TABLE_HEADER *Table,
+ UINT32 Length)
+{
+ UINT8 Checksum;
+
+
+ /* Compute the checksum on the table */
+
+ Checksum = AcpiTbChecksum (ACPI_CAST_PTR (UINT8, Table), Length);
+
+ /* Checksum ok? (should be zero) */
+
+ if (Checksum)
+ {
+ ACPI_BIOS_WARNING ((AE_INFO,
+ "Incorrect checksum in table [%4.4s] - 0x%2.2X, "
+ "should be 0x%2.2X",
+ Table->Signature, Table->Checksum,
+ (UINT8) (Table->Checksum - Checksum)));
+
+#if (ACPI_CHECKSUM_ABORT)
+ return (AE_BAD_CHECKSUM);
+#endif
+ }
+
+ return (AE_OK);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiTbChecksum
+ *
+ * PARAMETERS: Buffer - Pointer to memory region to be checked
+ * Length - Length of this memory region
+ *
+ * RETURN: Checksum (UINT8)
+ *
+ * DESCRIPTION: Calculates circular checksum of memory region.
+ *
+ ******************************************************************************/
+
+UINT8
+AcpiTbChecksum (
+ UINT8 *Buffer,
+ UINT32 Length)
+{
+ UINT8 Sum = 0;
+ UINT8 *End = Buffer + Length;
+
+
+ while (Buffer < End)
+ {
+ Sum = (UINT8) (Sum + *(Buffer++));
+ }
+
+ return (Sum);
+}
diff --git a/source/components/tables/tbutils.c b/source/components/tables/tbutils.c
index 0ea5edd..7c84d5e 100644
--- a/source/components/tables/tbutils.c
+++ b/source/components/tables/tbutils.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Module Name: tbutils - table utilities
+ * Module Name: tbutils - ACPI Table utilities
*
*****************************************************************************/
@@ -53,16 +53,6 @@
/* Local prototypes */
-static void
-AcpiTbFixString (
- char *String,
- ACPI_SIZE Length);
-
-static void
-AcpiTbCleanupTableHeader (
- ACPI_TABLE_HEADER *OutHeader,
- ACPI_TABLE_HEADER *Header);
-
static ACPI_PHYSICAL_ADDRESS
AcpiTbGetRootTableEntry (
UINT8 *TableEntry,
@@ -134,207 +124,6 @@ AcpiTbTablesLoaded (
/*******************************************************************************
*
- * FUNCTION: AcpiTbFixString
- *
- * PARAMETERS: String - String to be repaired
- * Length - Maximum length
- *
- * RETURN: None
- *
- * DESCRIPTION: Replace every non-printable or non-ascii byte in the string
- * with a question mark '?'.
- *
- ******************************************************************************/
-
-static void
-AcpiTbFixString (
- char *String,
- ACPI_SIZE Length)
-{
-
- while (Length && *String)
- {
- if (!ACPI_IS_PRINT (*String))
- {
- *String = '?';
- }
- String++;
- Length--;
- }
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: AcpiTbCleanupTableHeader
- *
- * PARAMETERS: OutHeader - Where the cleaned header is returned
- * Header - Input ACPI table header
- *
- * RETURN: Returns the cleaned header in OutHeader
- *
- * DESCRIPTION: Copy the table header and ensure that all "string" fields in
- * the header consist of printable characters.
- *
- ******************************************************************************/
-
-static void
-AcpiTbCleanupTableHeader (
- ACPI_TABLE_HEADER *OutHeader,
- ACPI_TABLE_HEADER *Header)
-{
-
- ACPI_MEMCPY (OutHeader, Header, sizeof (ACPI_TABLE_HEADER));
-
- AcpiTbFixString (OutHeader->Signature, ACPI_NAME_SIZE);
- AcpiTbFixString (OutHeader->OemId, ACPI_OEM_ID_SIZE);
- AcpiTbFixString (OutHeader->OemTableId, ACPI_OEM_TABLE_ID_SIZE);
- AcpiTbFixString (OutHeader->AslCompilerId, ACPI_NAME_SIZE);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: AcpiTbPrintTableHeader
- *
- * PARAMETERS: Address - Table physical address
- * Header - Table header
- *
- * RETURN: None
- *
- * DESCRIPTION: Print an ACPI table header. Special cases for FACS and RSDP.
- *
- ******************************************************************************/
-
-void
-AcpiTbPrintTableHeader (
- ACPI_PHYSICAL_ADDRESS Address,
- ACPI_TABLE_HEADER *Header)
-{
- ACPI_TABLE_HEADER LocalHeader;
-
-
- /*
- * The reason that the Address is cast to a void pointer is so that we
- * can use %p which will work properly on both 32-bit and 64-bit hosts.
- */
- if (ACPI_COMPARE_NAME (Header->Signature, ACPI_SIG_FACS))
- {
- /* FACS only has signature and length fields */
-
- ACPI_INFO ((AE_INFO, "%4.4s %p %05X",
- Header->Signature, ACPI_CAST_PTR (void, Address),
- Header->Length));
- }
- else if (ACPI_COMPARE_NAME (Header->Signature, ACPI_SIG_RSDP))
- {
- /* RSDP has no common fields */
-
- ACPI_MEMCPY (LocalHeader.OemId,
- ACPI_CAST_PTR (ACPI_TABLE_RSDP, Header)->OemId, ACPI_OEM_ID_SIZE);
- AcpiTbFixString (LocalHeader.OemId, ACPI_OEM_ID_SIZE);
-
- ACPI_INFO ((AE_INFO, "RSDP %p %05X (v%.2d %6.6s)",
- ACPI_CAST_PTR (void, Address),
- (ACPI_CAST_PTR (ACPI_TABLE_RSDP, Header)->Revision > 0) ?
- ACPI_CAST_PTR (ACPI_TABLE_RSDP, Header)->Length : 20,
- ACPI_CAST_PTR (ACPI_TABLE_RSDP, Header)->Revision,
- LocalHeader.OemId));
- }
- else
- {
- /* Standard ACPI table with full common header */
-
- AcpiTbCleanupTableHeader (&LocalHeader, Header);
-
- ACPI_INFO ((AE_INFO,
- "%4.4s %p %05X (v%.2d %6.6s %8.8s %08X %4.4s %08X)",
- LocalHeader.Signature, ACPI_CAST_PTR (void, Address),
- LocalHeader.Length, LocalHeader.Revision, LocalHeader.OemId,
- LocalHeader.OemTableId, LocalHeader.OemRevision,
- LocalHeader.AslCompilerId, LocalHeader.AslCompilerRevision));
- }
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: AcpiTbValidateChecksum
- *
- * PARAMETERS: Table - ACPI table to verify
- * Length - Length of entire table
- *
- * RETURN: Status
- *
- * DESCRIPTION: Verifies that the table checksums to zero. Optionally returns
- * exception on bad checksum.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-AcpiTbVerifyChecksum (
- ACPI_TABLE_HEADER *Table,
- UINT32 Length)
-{
- UINT8 Checksum;
-
-
- /* Compute the checksum on the table */
-
- Checksum = AcpiTbChecksum (ACPI_CAST_PTR (UINT8, Table), Length);
-
- /* Checksum ok? (should be zero) */
-
- if (Checksum)
- {
- ACPI_BIOS_WARNING ((AE_INFO,
- "Incorrect checksum in table [%4.4s] - 0x%2.2X, "
- "should be 0x%2.2X",
- Table->Signature, Table->Checksum,
- (UINT8) (Table->Checksum - Checksum)));
-
-#if (ACPI_CHECKSUM_ABORT)
- return (AE_BAD_CHECKSUM);
-#endif
- }
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: AcpiTbChecksum
- *
- * PARAMETERS: Buffer - Pointer to memory region to be checked
- * Length - Length of this memory region
- *
- * RETURN: Checksum (UINT8)
- *
- * DESCRIPTION: Calculates circular checksum of memory region.
- *
- ******************************************************************************/
-
-UINT8
-AcpiTbChecksum (
- UINT8 *Buffer,
- UINT32 Length)
-{
- UINT8 Sum = 0;
- UINT8 *End = Buffer + Length;
-
-
- while (Buffer < End)
- {
- Sum = (UINT8) (Sum + *(Buffer++));
- }
-
- return (Sum);
-}
-
-
-/*******************************************************************************
- *
* FUNCTION: AcpiTbCheckDsdtHeader
*
* PARAMETERS: None
diff --git a/source/components/tables/tbxfload.c b/source/components/tables/tbxfload.c
index 3beafe9..2ebaab9 100644
--- a/source/components/tables/tbxfload.c
+++ b/source/components/tables/tbxfload.c
@@ -192,6 +192,18 @@ AcpiTbLoadNamespace (
continue;
}
+ /*
+ * Optionally do not load any SSDTs from the RSDT/XSDT. This can
+ * be useful for debugging ACPI problems on some machines.
+ */
+ if (AcpiGbl_DisableSsdtTableLoad)
+ {
+ ACPI_INFO ((AE_INFO, "Ignoring %4.4s at %p",
+ AcpiGbl_RootTableList.Tables[i].Signature.Ascii,
+ ACPI_CAST_PTR (void, AcpiGbl_RootTableList.Tables[i].Address)));
+ continue;
+ }
+
/* Ignore errors while loading tables, get as many as possible */
(void) AcpiUtReleaseMutex (ACPI_MTX_TABLES);
diff --git a/source/components/utilities/utbuffer.c b/source/components/utilities/utbuffer.c
new file mode 100644
index 0000000..e1b56d5
--- /dev/null
+++ b/source/components/utilities/utbuffer.c
@@ -0,0 +1,220 @@
+/******************************************************************************
+ *
+ * Module Name: utbuffer - Buffer dump routines
+ *
+ *****************************************************************************/
+
+/*
+ * Copyright (C) 2000 - 2013, 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.
+ */
+
+#define __UTBUFFER_C__
+
+#include "acpi.h"
+#include "accommon.h"
+
+#define _COMPONENT ACPI_UTILITIES
+ ACPI_MODULE_NAME ("utbuffer")
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiUtDumpBuffer
+ *
+ * PARAMETERS: 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.
+ *
+ ******************************************************************************/
+
+void
+AcpiUtDumpBuffer (
+ UINT8 *Buffer,
+ UINT32 Count,
+ UINT32 Display,
+ UINT32 BaseOffset)
+{
+ UINT32 i = 0;
+ UINT32 j;
+ UINT32 Temp32;
+ UINT8 BufChar;
+
+
+ if (!Buffer)
+ {
+ AcpiOsPrintf ("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 */
+
+ AcpiOsPrintf ("%6.4X: ", (BaseOffset + i));
+
+ /* Print 16 hex chars */
+
+ for (j = 0; j < 16;)
+ {
+ if (i + j >= Count)
+ {
+ /* Dump fill spaces */
+
+ AcpiOsPrintf ("%*s", ((Display * 2) + 1), " ");
+ j += Display;
+ continue;
+ }
+
+ switch (Display)
+ {
+ case DB_BYTE_DISPLAY:
+ default: /* Default is BYTE display */
+
+ AcpiOsPrintf ("%02X ", Buffer[(ACPI_SIZE) i + j]);
+ break;
+
+ case DB_WORD_DISPLAY:
+
+ ACPI_MOVE_16_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]);
+ AcpiOsPrintf ("%04X ", Temp32);
+ break;
+
+ case DB_DWORD_DISPLAY:
+
+ ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]);
+ AcpiOsPrintf ("%08X ", Temp32);
+ break;
+
+ case DB_QWORD_DISPLAY:
+
+ ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]);
+ AcpiOsPrintf ("%08X", Temp32);
+
+ ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j + 4]);
+ AcpiOsPrintf ("%08X ", Temp32);
+ break;
+ }
+
+ j += Display;
+ }
+
+ /*
+ * Print the ASCII equivalent characters but watch out for the bad
+ * unprintable ones (printable chars are 0x20 through 0x7E)
+ */
+ AcpiOsPrintf (" ");
+ for (j = 0; j < 16; j++)
+ {
+ if (i + j >= Count)
+ {
+ AcpiOsPrintf ("\n");
+ return;
+ }
+
+ BufChar = Buffer[(ACPI_SIZE) i + j];
+ if (ACPI_IS_PRINT (BufChar))
+ {
+ AcpiOsPrintf ("%c", BufChar);
+ }
+ else
+ {
+ AcpiOsPrintf (".");
+ }
+ }
+
+ /* Done with that line. */
+
+ AcpiOsPrintf ("\n");
+ i += 16;
+ }
+
+ return;
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiUtDebugDumpBuffer
+ *
+ * PARAMETERS: 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
+ * ComponentID - Caller's component ID
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Generic dump buffer in both hex and ascii.
+ *
+ ******************************************************************************/
+
+void
+AcpiUtDebugDumpBuffer (
+ UINT8 *Buffer,
+ UINT32 Count,
+ UINT32 Display,
+ UINT32 ComponentId)
+{
+
+ /* Only dump the buffer if tracing is enabled */
+
+ if (!((ACPI_LV_TABLES & AcpiDbgLevel) &&
+ (ComponentId & AcpiDbgLayer)))
+ {
+ return;
+ }
+
+ AcpiUtDumpBuffer (Buffer, Count, Display, 0);
+}
diff --git a/source/components/utilities/utcopy.c b/source/components/utilities/utcopy.c
index 13ffdb2..a251c06 100644
--- a/source/components/utilities/utcopy.c
+++ b/source/components/utilities/utcopy.c
@@ -172,7 +172,6 @@ AcpiUtCopyIsimpleToEsimple (
(ACPI_SIZE) InternalObject->String.Length + 1);
break;
-
case ACPI_TYPE_BUFFER:
ExternalObject->Buffer.Pointer = DataSpace;
@@ -185,13 +184,11 @@ AcpiUtCopyIsimpleToEsimple (
InternalObject->Buffer.Length);
break;
-
case ACPI_TYPE_INTEGER:
ExternalObject->Integer.Value = InternalObject->Integer.Value;
break;
-
case ACPI_TYPE_LOCAL_REFERENCE:
/* This is an object reference. */
@@ -199,7 +196,6 @@ AcpiUtCopyIsimpleToEsimple (
switch (InternalObject->Reference.Class)
{
case ACPI_REFCLASS_NAME:
-
/*
* For namepath, return the object handle ("reference")
* We are referring to the namespace node
@@ -218,7 +214,6 @@ AcpiUtCopyIsimpleToEsimple (
}
break;
-
case ACPI_TYPE_PROCESSOR:
ExternalObject->Processor.ProcId =
@@ -229,7 +224,6 @@ AcpiUtCopyIsimpleToEsimple (
InternalObject->Processor.Length;
break;
-
case ACPI_TYPE_POWER:
ExternalObject->PowerResource.SystemLevel =
@@ -239,7 +233,6 @@ AcpiUtCopyIsimpleToEsimple (
InternalObject->PowerResource.ResourceOrder;
break;
-
default:
/*
* There is no corresponding external object type
@@ -291,7 +284,6 @@ AcpiUtCopyIelementToEelement (
switch (ObjectType)
{
case ACPI_COPY_TYPE_SIMPLE:
-
/*
* This is a simple or null object
*/
@@ -303,9 +295,7 @@ AcpiUtCopyIelementToEelement (
}
break;
-
case ACPI_COPY_TYPE_PACKAGE:
-
/*
* Build the package object
*/
@@ -328,8 +318,8 @@ AcpiUtCopyIelementToEelement (
sizeof (ACPI_OBJECT));
break;
-
default:
+
return (AE_BAD_PARAMETER);
}
@@ -514,6 +504,7 @@ AcpiUtCopyEsimpleToIsimple (
return_ACPI_STATUS (AE_OK);
default:
+
/* All other types are not supported */
ACPI_ERROR ((AE_INFO,
@@ -546,7 +537,6 @@ AcpiUtCopyEsimpleToIsimple (
InternalObject->String.Length = ExternalObject->String.Length;
break;
-
case ACPI_TYPE_BUFFER:
InternalObject->Buffer.Pointer =
@@ -567,7 +557,6 @@ AcpiUtCopyEsimpleToIsimple (
InternalObject->Buffer.Flags |= AOPOBJ_DATA_VALID;
break;
-
case ACPI_TYPE_INTEGER:
InternalObject->Integer.Value = ExternalObject->Integer.Value;
@@ -582,7 +571,9 @@ AcpiUtCopyEsimpleToIsimple (
break;
default:
+
/* Other types can't get here */
+
break;
}
@@ -855,7 +846,9 @@ AcpiUtCopySimpleObject (
break;
default:
+
/* Nothing to do for other simple objects */
+
break;
}
@@ -929,9 +922,7 @@ AcpiUtCopyIelementToIelement (
}
break;
-
case ACPI_COPY_TYPE_PACKAGE:
-
/*
* This object is a package - go down another nesting level
* Create and build the package object
@@ -953,8 +944,8 @@ AcpiUtCopyIelementToIelement (
*ThisTargetPtr = TargetObject;
break;
-
default:
+
return (AE_BAD_PARAMETER);
}
diff --git a/source/components/utilities/utdebug.c b/source/components/utilities/utdebug.c
index 9e749fb..e879967 100644
--- a/source/components/utilities/utdebug.c
+++ b/source/components/utilities/utdebug.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Module Name: utdebug - Debug print routines
+ * Module Name: utdebug - Debug print/trace routines
*
*****************************************************************************/
@@ -613,168 +613,3 @@ AcpiUtPtrExit (
}
#endif
-
-
-/*******************************************************************************
- *
- * FUNCTION: AcpiUtDumpBuffer
- *
- * PARAMETERS: Buffer - Buffer to dump
- * Count - Amount to dump, in bytes
- * Display - BYTE, WORD, DWORD, or QWORD display
- * Offset - Beginning buffer offset (display only)
- *
- * RETURN: None
- *
- * DESCRIPTION: Generic dump buffer in both hex and ascii.
- *
- ******************************************************************************/
-
-void
-AcpiUtDumpBuffer (
- UINT8 *Buffer,
- UINT32 Count,
- UINT32 Display,
- UINT32 BaseOffset)
-{
- UINT32 i = 0;
- UINT32 j;
- UINT32 Temp32;
- UINT8 BufChar;
-
-
- if (!Buffer)
- {
- AcpiOsPrintf ("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 */
-
- AcpiOsPrintf ("%6.4X: ", (BaseOffset + i));
-
- /* Print 16 hex chars */
-
- for (j = 0; j < 16;)
- {
- if (i + j >= Count)
- {
- /* Dump fill spaces */
-
- AcpiOsPrintf ("%*s", ((Display * 2) + 1), " ");
- j += Display;
- continue;
- }
-
- switch (Display)
- {
- case DB_BYTE_DISPLAY:
- default: /* Default is BYTE display */
-
- AcpiOsPrintf ("%02X ", Buffer[(ACPI_SIZE) i + j]);
- break;
-
-
- case DB_WORD_DISPLAY:
-
- ACPI_MOVE_16_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]);
- AcpiOsPrintf ("%04X ", Temp32);
- break;
-
-
- case DB_DWORD_DISPLAY:
-
- ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]);
- AcpiOsPrintf ("%08X ", Temp32);
- break;
-
-
- case DB_QWORD_DISPLAY:
-
- ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]);
- AcpiOsPrintf ("%08X", Temp32);
-
- ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j + 4]);
- AcpiOsPrintf ("%08X ", Temp32);
- break;
- }
-
- j += Display;
- }
-
- /*
- * Print the ASCII equivalent characters but watch out for the bad
- * unprintable ones (printable chars are 0x20 through 0x7E)
- */
- AcpiOsPrintf (" ");
- for (j = 0; j < 16; j++)
- {
- if (i + j >= Count)
- {
- AcpiOsPrintf ("\n");
- return;
- }
-
- BufChar = Buffer[(ACPI_SIZE) i + j];
- if (ACPI_IS_PRINT (BufChar))
- {
- AcpiOsPrintf ("%c", BufChar);
- }
- else
- {
- AcpiOsPrintf (".");
- }
- }
-
- /* Done with that line. */
-
- AcpiOsPrintf ("\n");
- i += 16;
- }
-
- return;
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: AcpiUtDebugDumpBuffer
- *
- * PARAMETERS: Buffer - Buffer to dump
- * Count - Amount to dump, in bytes
- * Display - BYTE, WORD, DWORD, or QWORD display
- * ComponentID - Caller's component ID
- *
- * RETURN: None
- *
- * DESCRIPTION: Generic dump buffer in both hex and ascii.
- *
- ******************************************************************************/
-
-void
-AcpiUtDebugDumpBuffer (
- UINT8 *Buffer,
- UINT32 Count,
- UINT32 Display,
- UINT32 ComponentId)
-{
-
- /* Only dump the buffer if tracing is enabled */
-
- if (!((ACPI_LV_TABLES & AcpiDbgLevel) &&
- (ComponentId & AcpiDbgLayer)))
- {
- return;
- }
-
- AcpiUtDumpBuffer (Buffer, Count, Display, 0);
-}
diff --git a/source/components/utilities/utdelete.c b/source/components/utilities/utdelete.c
index f18d556..5047bc1 100644
--- a/source/components/utilities/utdelete.c
+++ b/source/components/utilities/utdelete.c
@@ -118,7 +118,6 @@ AcpiUtDeleteInternalObj (
}
break;
-
case ACPI_TYPE_BUFFER:
ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "**** Buffer %p, ptr %p\n",
@@ -134,7 +133,6 @@ AcpiUtDeleteInternalObj (
}
break;
-
case ACPI_TYPE_PACKAGE:
ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, " **** Package of count %X\n",
@@ -150,7 +148,6 @@ AcpiUtDeleteInternalObj (
ObjPointer = Object->Package.Elements;
break;
-
/*
* These objects have a possible list of notify handlers.
* Device object also may have a GPE block.
@@ -178,7 +175,6 @@ AcpiUtDeleteInternalObj (
}
break;
-
case ACPI_TYPE_MUTEX:
ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS,
@@ -202,7 +198,6 @@ AcpiUtDeleteInternalObj (
}
break;
-
case ACPI_TYPE_EVENT:
ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS,
@@ -213,7 +208,6 @@ AcpiUtDeleteInternalObj (
Object->Event.OsSemaphore = NULL;
break;
-
case ACPI_TYPE_METHOD:
ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS,
@@ -229,7 +223,6 @@ AcpiUtDeleteInternalObj (
}
break;
-
case ACPI_TYPE_REGION:
ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS,
@@ -298,7 +291,6 @@ AcpiUtDeleteInternalObj (
}
break;
-
case ACPI_TYPE_BUFFER_FIELD:
ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS,
@@ -311,7 +303,6 @@ AcpiUtDeleteInternalObj (
}
break;
-
case ACPI_TYPE_LOCAL_BANK_FIELD:
ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS,
@@ -324,8 +315,8 @@ AcpiUtDeleteInternalObj (
}
break;
-
default:
+
break;
}
@@ -557,7 +548,6 @@ AcpiUtUpdateObjectReference (
case ACPI_TYPE_PROCESSOR:
case ACPI_TYPE_POWER:
case ACPI_TYPE_THERMAL:
-
/*
* Update the notify objects for these types (if present)
* Two lists, system and device notify handlers.
@@ -668,6 +658,7 @@ AcpiUtUpdateObjectReference (
case ACPI_TYPE_REGION:
default:
+
break; /* No subobjects for all other types */
}
diff --git a/source/components/utilities/uterror.c b/source/components/utilities/uterror.c
new file mode 100644
index 0000000..73e2568
--- /dev/null
+++ b/source/components/utilities/uterror.c
@@ -0,0 +1,327 @@
+/*******************************************************************************
+ *
+ * Module Name: uterror - Various internal error/warning output functions
+ *
+ ******************************************************************************/
+
+/*
+ * Copyright (C) 2000 - 2013, 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.
+ */
+
+#define __UTERROR_C__
+
+#include "acpi.h"
+#include "accommon.h"
+#include "acnamesp.h"
+
+
+#define _COMPONENT ACPI_UTILITIES
+ ACPI_MODULE_NAME ("uterror")
+
+
+/*
+ * This module contains internal error functions that may
+ * be configured out.
+ */
+#if !defined (ACPI_NO_ERROR_MESSAGES)
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiUtPredefinedWarning
+ *
+ * PARAMETERS: ModuleName - Caller's module name (for error output)
+ * LineNumber - Caller's line number (for error output)
+ * Pathname - Full pathname to the node
+ * NodeFlags - From Namespace node for the method/object
+ * Format - Printf format string + additional args
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Warnings for the predefined validation module. Messages are
+ * only emitted the first time a problem with a particular
+ * method/object is detected. This prevents a flood of error
+ * messages for methods that are repeatedly evaluated.
+ *
+ ******************************************************************************/
+
+void ACPI_INTERNAL_VAR_XFACE
+AcpiUtPredefinedWarning (
+ const char *ModuleName,
+ UINT32 LineNumber,
+ char *Pathname,
+ UINT8 NodeFlags,
+ const char *Format,
+ ...)
+{
+ va_list ArgList;
+
+
+ /*
+ * Warning messages for this method/object will be disabled after the
+ * first time a validation fails or an object is successfully repaired.
+ */
+ if (NodeFlags & ANOBJ_EVALUATED)
+ {
+ return;
+ }
+
+ AcpiOsPrintf (ACPI_MSG_WARNING "%s: ", Pathname);
+
+ va_start (ArgList, Format);
+ AcpiOsVprintf (Format, ArgList);
+ ACPI_MSG_SUFFIX;
+ va_end (ArgList);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiUtPredefinedInfo
+ *
+ * PARAMETERS: ModuleName - Caller's module name (for error output)
+ * LineNumber - Caller's line number (for error output)
+ * Pathname - Full pathname to the node
+ * NodeFlags - From Namespace node for the method/object
+ * Format - Printf format string + additional args
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Info messages for the predefined validation module. Messages
+ * are only emitted the first time a problem with a particular
+ * method/object is detected. This prevents a flood of
+ * messages for methods that are repeatedly evaluated.
+ *
+ ******************************************************************************/
+
+void ACPI_INTERNAL_VAR_XFACE
+AcpiUtPredefinedInfo (
+ const char *ModuleName,
+ UINT32 LineNumber,
+ char *Pathname,
+ UINT8 NodeFlags,
+ const char *Format,
+ ...)
+{
+ va_list ArgList;
+
+
+ /*
+ * Warning messages for this method/object will be disabled after the
+ * first time a validation fails or an object is successfully repaired.
+ */
+ if (NodeFlags & ANOBJ_EVALUATED)
+ {
+ return;
+ }
+
+ AcpiOsPrintf (ACPI_MSG_INFO "%s: ", Pathname);
+
+ va_start (ArgList, Format);
+ AcpiOsVprintf (Format, ArgList);
+ ACPI_MSG_SUFFIX;
+ va_end (ArgList);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiUtPredefinedBiosError
+ *
+ * PARAMETERS: ModuleName - Caller's module name (for error output)
+ * LineNumber - Caller's line number (for error output)
+ * Pathname - Full pathname to the node
+ * NodeFlags - From Namespace node for the method/object
+ * Format - Printf format string + additional args
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: BIOS error message for predefined names. Messages
+ * are only emitted the first time a problem with a particular
+ * method/object is detected. This prevents a flood of
+ * messages for methods that are repeatedly evaluated.
+ *
+ ******************************************************************************/
+
+void ACPI_INTERNAL_VAR_XFACE
+AcpiUtPredefinedBiosError (
+ const char *ModuleName,
+ UINT32 LineNumber,
+ char *Pathname,
+ UINT8 NodeFlags,
+ const char *Format,
+ ...)
+{
+ va_list ArgList;
+
+
+ /*
+ * Warning messages for this method/object will be disabled after the
+ * first time a validation fails or an object is successfully repaired.
+ */
+ if (NodeFlags & ANOBJ_EVALUATED)
+ {
+ return;
+ }
+
+ AcpiOsPrintf (ACPI_MSG_BIOS_ERROR "%s: ", Pathname);
+
+ va_start (ArgList, Format);
+ AcpiOsVprintf (Format, ArgList);
+ ACPI_MSG_SUFFIX;
+ va_end (ArgList);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiUtNamespaceError
+ *
+ * PARAMETERS: ModuleName - Caller's module name (for error output)
+ * LineNumber - Caller's line number (for error output)
+ * InternalName - Name or path of the namespace node
+ * LookupStatus - Exception code from NS lookup
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Print error message with the full pathname for the NS node.
+ *
+ ******************************************************************************/
+
+void
+AcpiUtNamespaceError (
+ const char *ModuleName,
+ UINT32 LineNumber,
+ const char *InternalName,
+ ACPI_STATUS LookupStatus)
+{
+ ACPI_STATUS Status;
+ UINT32 BadName;
+ char *Name = NULL;
+
+
+ ACPI_MSG_REDIRECT_BEGIN;
+ AcpiOsPrintf (ACPI_MSG_ERROR);
+
+ if (LookupStatus == AE_BAD_CHARACTER)
+ {
+ /* There is a non-ascii character in the name */
+
+ ACPI_MOVE_32_TO_32 (&BadName, ACPI_CAST_PTR (UINT32, InternalName));
+ AcpiOsPrintf ("[0x%.8X] (NON-ASCII)", BadName);
+ }
+ else
+ {
+ /* Convert path to external format */
+
+ Status = AcpiNsExternalizeName (ACPI_UINT32_MAX,
+ InternalName, NULL, &Name);
+
+ /* Print target name */
+
+ if (ACPI_SUCCESS (Status))
+ {
+ AcpiOsPrintf ("[%s]", Name);
+ }
+ else
+ {
+ AcpiOsPrintf ("[COULD NOT EXTERNALIZE NAME]");
+ }
+
+ if (Name)
+ {
+ ACPI_FREE (Name);
+ }
+ }
+
+ AcpiOsPrintf (" Namespace lookup failure, %s",
+ AcpiFormatException (LookupStatus));
+
+ ACPI_MSG_SUFFIX;
+ ACPI_MSG_REDIRECT_END;
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiUtMethodError
+ *
+ * PARAMETERS: ModuleName - Caller's module name (for error output)
+ * LineNumber - Caller's line number (for error output)
+ * Message - Error message to use on failure
+ * PrefixNode - Prefix relative to the path
+ * Path - Path to the node (optional)
+ * MethodStatus - Execution status
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Print error message with the full pathname for the method.
+ *
+ ******************************************************************************/
+
+void
+AcpiUtMethodError (
+ const char *ModuleName,
+ UINT32 LineNumber,
+ const char *Message,
+ ACPI_NAMESPACE_NODE *PrefixNode,
+ const char *Path,
+ ACPI_STATUS MethodStatus)
+{
+ ACPI_STATUS Status;
+ ACPI_NAMESPACE_NODE *Node = PrefixNode;
+
+
+ ACPI_MSG_REDIRECT_BEGIN;
+ AcpiOsPrintf (ACPI_MSG_ERROR);
+
+ if (Path)
+ {
+ Status = AcpiNsGetNode (PrefixNode, Path, ACPI_NS_NO_UPSEARCH,
+ &Node);
+ if (ACPI_FAILURE (Status))
+ {
+ AcpiOsPrintf ("[Could not get node by pathname]");
+ }
+ }
+
+ AcpiNsPrintNodePathname (Node, Message);
+ AcpiOsPrintf (", %s", AcpiFormatException (MethodStatus));
+
+ ACPI_MSG_SUFFIX;
+ ACPI_MSG_REDIRECT_END;
+}
+
+#endif /* ACPI_NO_ERROR_MESSAGES */
diff --git a/source/components/utilities/uteval.c b/source/components/utilities/uteval.c
index 82f2b79f..e24f2a2 100644
--- a/source/components/utilities/uteval.c
+++ b/source/components/utilities/uteval.c
@@ -136,22 +136,27 @@ AcpiUtEvaluateObject (
switch ((Info->ReturnObject)->Common.Type)
{
case ACPI_TYPE_INTEGER:
+
ReturnBtype = ACPI_BTYPE_INTEGER;
break;
case ACPI_TYPE_BUFFER:
+
ReturnBtype = ACPI_BTYPE_BUFFER;
break;
case ACPI_TYPE_STRING:
+
ReturnBtype = ACPI_BTYPE_STRING;
break;
case ACPI_TYPE_PACKAGE:
+
ReturnBtype = ACPI_BTYPE_PACKAGE;
break;
default:
+
ReturnBtype = 0;
break;
}
diff --git a/source/components/utilities/utexcep.c b/source/components/utilities/utexcep.c
index 1aead78..75258d9 100644
--- a/source/components/utilities/utexcep.c
+++ b/source/components/utilities/utexcep.c
@@ -167,6 +167,7 @@ AcpiUtValidateException (
break;
default:
+
break;
}
diff --git a/source/components/utilities/utids.c b/source/components/utilities/utids.c
index 86c8a64..831875b 100644
--- a/source/components/utilities/utids.c
+++ b/source/components/utilities/utids.c
@@ -375,14 +375,17 @@ AcpiUtExecute_CID (
switch (CidObjects[i]->Common.Type)
{
case ACPI_TYPE_INTEGER:
+
StringAreaSize += ACPI_EISAID_STRING_SIZE;
break;
case ACPI_TYPE_STRING:
+
StringAreaSize += CidObjects[i]->String.Length + 1;
break;
default:
+
Status = AE_TYPE;
goto Cleanup;
}
diff --git a/source/components/utilities/utmisc.c b/source/components/utilities/utmisc.c
index 84fec46..6553d28 100644
--- a/source/components/utilities/utmisc.c
+++ b/source/components/utilities/utmisc.c
@@ -429,10 +429,12 @@ AcpiUtDisplayInitPathname (
switch (Type)
{
case ACPI_TYPE_METHOD:
+
AcpiOsPrintf ("Executing ");
break;
default:
+
AcpiOsPrintf ("Initializing ");
break;
}
diff --git a/source/components/utilities/utobject.c b/source/components/utilities/utobject.c
index a219798..32b31d3 100644
--- a/source/components/utilities/utobject.c
+++ b/source/components/utilities/utobject.c
@@ -140,6 +140,7 @@ AcpiUtCreateInternalObjectDbg (
break;
default:
+
/* All others have no secondary object */
break;
}
@@ -397,6 +398,7 @@ AcpiUtValidInternalObject (
return (TRUE);
default:
+
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
"%p is not not an ACPI operand obj [%s]\n",
Object, AcpiUtGetDescriptorName (Object)));
@@ -556,13 +558,11 @@ AcpiUtGetSimpleObjectSize (
Length += (ACPI_SIZE) InternalObject->String.Length + 1;
break;
-
case ACPI_TYPE_BUFFER:
Length += (ACPI_SIZE) InternalObject->Buffer.Length;
break;
-
case ACPI_TYPE_INTEGER:
case ACPI_TYPE_PROCESSOR:
case ACPI_TYPE_POWER:
@@ -571,13 +571,11 @@ AcpiUtGetSimpleObjectSize (
break;
-
case ACPI_TYPE_LOCAL_REFERENCE:
switch (InternalObject->Reference.Class)
{
case ACPI_REFCLASS_NAME:
-
/*
* Get the actual length of the full pathname to this object.
* The reference will be converted to the pathname to the object
@@ -592,7 +590,6 @@ AcpiUtGetSimpleObjectSize (
break;
default:
-
/*
* No other reference opcodes are supported.
* Notably, Locals and Args are not supported, but this may be
@@ -607,7 +604,6 @@ AcpiUtGetSimpleObjectSize (
}
break;
-
default:
ACPI_ERROR ((AE_INFO, "Cannot convert to external object - "
@@ -656,7 +652,6 @@ AcpiUtGetElementLength (
switch (ObjectType)
{
case ACPI_COPY_TYPE_SIMPLE:
-
/*
* Simple object - just get the size (Null object/entry is handled
* here also) and sum it into the running package length
@@ -670,7 +665,6 @@ AcpiUtGetElementLength (
Info->Length += ObjectSpace;
break;
-
case ACPI_COPY_TYPE_PACKAGE:
/* Package object - nothing much to do here, let the walk handle it */
@@ -679,7 +673,6 @@ AcpiUtGetElementLength (
State->Pkg.ThisTargetObj = NULL;
break;
-
default:
/* No other types allowed */
diff --git a/source/components/utilities/utstring.c b/source/components/utilities/utstring.c
index 4d35429..9e58908 100644
--- a/source/components/utilities/utstring.c
+++ b/source/components/utilities/utstring.c
@@ -220,10 +220,13 @@ AcpiUtStrtoul64 (
{
case ACPI_ANY_BASE:
case 16:
+
break;
default:
+
/* Invalid Base */
+
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
@@ -423,36 +426,44 @@ AcpiUtPrintString (
switch (String[i])
{
case 0x07:
+
AcpiOsPrintf ("\\a"); /* BELL */
break;
case 0x08:
+
AcpiOsPrintf ("\\b"); /* BACKSPACE */
break;
case 0x0C:
+
AcpiOsPrintf ("\\f"); /* FORMFEED */
break;
case 0x0A:
+
AcpiOsPrintf ("\\n"); /* LINEFEED */
break;
case 0x0D:
+
AcpiOsPrintf ("\\r"); /* CARRIAGE RETURN*/
break;
case 0x09:
+
AcpiOsPrintf ("\\t"); /* HORIZONTAL TAB */
break;
case 0x0B:
+
AcpiOsPrintf ("\\v"); /* VERTICAL TAB */
break;
case '\'': /* Single Quote */
case '\"': /* Double Quote */
case '\\': /* Backslash */
+
AcpiOsPrintf ("\\%c", (int) String[i]);
break;
@@ -530,7 +541,8 @@ AcpiUtValidAcpiChar (
*
* FUNCTION: AcpiUtValidAcpiName
*
- * PARAMETERS: Name - The name to be examined
+ * PARAMETERS: Name - The name to be examined. Does not have to
+ * be NULL terminated string.
*
* RETURN: TRUE if the name is valid, FALSE otherwise
*
@@ -543,7 +555,7 @@ AcpiUtValidAcpiChar (
BOOLEAN
AcpiUtValidAcpiName (
- UINT32 Name)
+ char *Name)
{
UINT32 i;
@@ -553,7 +565,7 @@ AcpiUtValidAcpiName (
for (i = 0; i < ACPI_NAME_SIZE; i++)
{
- if (!AcpiUtValidAcpiChar ((ACPI_CAST_PTR (char, &Name))[i], i))
+ if (!AcpiUtValidAcpiChar (Name[i], i))
{
return (FALSE);
}
diff --git a/source/components/utilities/uttrack.c b/source/components/utilities/uttrack.c
index c7484ec..6cf9bdf 100644
--- a/source/components/utilities/uttrack.c
+++ b/source/components/utilities/uttrack.c
@@ -675,6 +675,7 @@ AcpiUtDumpAllocations (
switch (ACPI_GET_DESCRIPTOR_TYPE (Descriptor))
{
case ACPI_DESC_TYPE_OPERAND:
+
if (Element->Size == sizeof (ACPI_OPERAND_OBJECT))
{
DescriptorType = ACPI_DESC_TYPE_OPERAND;
@@ -682,6 +683,7 @@ AcpiUtDumpAllocations (
break;
case ACPI_DESC_TYPE_PARSER:
+
if (Element->Size == sizeof (ACPI_PARSE_OBJECT))
{
DescriptorType = ACPI_DESC_TYPE_PARSER;
@@ -689,6 +691,7 @@ AcpiUtDumpAllocations (
break;
case ACPI_DESC_TYPE_NAMED:
+
if (Element->Size == sizeof (ACPI_NAMESPACE_NODE))
{
DescriptorType = ACPI_DESC_TYPE_NAMED;
@@ -696,6 +699,7 @@ AcpiUtDumpAllocations (
break;
default:
+
break;
}
@@ -704,22 +708,26 @@ AcpiUtDumpAllocations (
switch (DescriptorType)
{
case ACPI_DESC_TYPE_OPERAND:
+
AcpiOsPrintf ("%12.12s RefCount 0x%04X\n",
AcpiUtGetTypeName (Descriptor->Object.Common.Type),
Descriptor->Object.Common.ReferenceCount);
break;
case ACPI_DESC_TYPE_PARSER:
+
AcpiOsPrintf ("AmlOpcode 0x%04hX\n",
Descriptor->Op.Asl.AmlOpcode);
break;
case ACPI_DESC_TYPE_NAMED:
+
AcpiOsPrintf ("%4.4s\n",
AcpiUtGetNodeName (&Descriptor->Node));
break;
default:
+
AcpiOsPrintf ( "\n");
break;
}
diff --git a/source/components/utilities/utxferror.c b/source/components/utilities/utxferror.c
index 8454f8b..a01b5b0 100644
--- a/source/components/utilities/utxferror.c
+++ b/source/components/utilities/utxferror.c
@@ -45,7 +45,6 @@
#include "acpi.h"
#include "accommon.h"
-#include "acnamesp.h"
#define _COMPONENT ACPI_UTILITIES
@@ -54,48 +53,7 @@
/*
* This module is used for the in-kernel ACPICA as well as the ACPICA
* tools/applications.
- *
- * For the iASL compiler case, the output is redirected to stderr so that
- * any of the various ACPI errors and warnings do not appear in the output
- * files, for either the compiler or disassembler portions of the tool.
- */
-#ifdef ACPI_ASL_COMPILER
-#include <stdio.h>
-
-extern FILE *AcpiGbl_OutputFile;
-
-#define ACPI_MSG_REDIRECT_BEGIN \
- FILE *OutputFile = AcpiGbl_OutputFile; \
- AcpiOsRedirectOutput (stderr);
-
-#define ACPI_MSG_REDIRECT_END \
- AcpiOsRedirectOutput (OutputFile);
-
-#else
-/*
- * non-iASL case - no redirection, nothing to do
- */
-#define ACPI_MSG_REDIRECT_BEGIN
-#define ACPI_MSG_REDIRECT_END
-#endif
-
-/*
- * Common message prefixes
*/
-#define ACPI_MSG_ERROR "ACPI Error: "
-#define ACPI_MSG_EXCEPTION "ACPI Exception: "
-#define ACPI_MSG_WARNING "ACPI Warning: "
-#define ACPI_MSG_INFO "ACPI: "
-
-#define ACPI_MSG_BIOS_ERROR "ACPI BIOS Error (bug): "
-#define ACPI_MSG_BIOS_WARNING "ACPI BIOS Warning (bug): "
-
-/*
- * Common message suffix
- */
-#define ACPI_MSG_SUFFIX \
- AcpiOsPrintf (" (%8.8X/%s-%u)\n", ACPI_CA_VERSION, ModuleName, LineNumber)
-
/*******************************************************************************
*
@@ -331,278 +289,3 @@ AcpiBiosWarning (
}
ACPI_EXPORT_SYMBOL (AcpiBiosWarning)
-
-
-/*
- * The remainder of this module contains internal error functions that may
- * be configured out.
- */
-#if !defined (ACPI_NO_ERROR_MESSAGES) && !defined (ACPI_BIN_APP)
-
-/*******************************************************************************
- *
- * FUNCTION: AcpiUtPredefinedWarning
- *
- * PARAMETERS: ModuleName - Caller's module name (for error output)
- * LineNumber - Caller's line number (for error output)
- * Pathname - Full pathname to the node
- * NodeFlags - From Namespace node for the method/object
- * Format - Printf format string + additional args
- *
- * RETURN: None
- *
- * DESCRIPTION: Warnings for the predefined validation module. Messages are
- * only emitted the first time a problem with a particular
- * method/object is detected. This prevents a flood of error
- * messages for methods that are repeatedly evaluated.
- *
- ******************************************************************************/
-
-void ACPI_INTERNAL_VAR_XFACE
-AcpiUtPredefinedWarning (
- const char *ModuleName,
- UINT32 LineNumber,
- char *Pathname,
- UINT8 NodeFlags,
- const char *Format,
- ...)
-{
- va_list ArgList;
-
-
- /*
- * Warning messages for this method/object will be disabled after the
- * first time a validation fails or an object is successfully repaired.
- */
- if (NodeFlags & ANOBJ_EVALUATED)
- {
- return;
- }
-
- AcpiOsPrintf (ACPI_MSG_WARNING "%s: ", Pathname);
-
- va_start (ArgList, Format);
- AcpiOsVprintf (Format, ArgList);
- ACPI_MSG_SUFFIX;
- va_end (ArgList);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: AcpiUtPredefinedInfo
- *
- * PARAMETERS: ModuleName - Caller's module name (for error output)
- * LineNumber - Caller's line number (for error output)
- * Pathname - Full pathname to the node
- * NodeFlags - From Namespace node for the method/object
- * Format - Printf format string + additional args
- *
- * RETURN: None
- *
- * DESCRIPTION: Info messages for the predefined validation module. Messages
- * are only emitted the first time a problem with a particular
- * method/object is detected. This prevents a flood of
- * messages for methods that are repeatedly evaluated.
- *
- ******************************************************************************/
-
-void ACPI_INTERNAL_VAR_XFACE
-AcpiUtPredefinedInfo (
- const char *ModuleName,
- UINT32 LineNumber,
- char *Pathname,
- UINT8 NodeFlags,
- const char *Format,
- ...)
-{
- va_list ArgList;
-
-
- /*
- * Warning messages for this method/object will be disabled after the
- * first time a validation fails or an object is successfully repaired.
- */
- if (NodeFlags & ANOBJ_EVALUATED)
- {
- return;
- }
-
- AcpiOsPrintf (ACPI_MSG_INFO "%s: ", Pathname);
-
- va_start (ArgList, Format);
- AcpiOsVprintf (Format, ArgList);
- ACPI_MSG_SUFFIX;
- va_end (ArgList);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: AcpiUtPredefinedBiosError
- *
- * PARAMETERS: ModuleName - Caller's module name (for error output)
- * LineNumber - Caller's line number (for error output)
- * Pathname - Full pathname to the node
- * NodeFlags - From Namespace node for the method/object
- * Format - Printf format string + additional args
- *
- * RETURN: None
- *
- * DESCRIPTION: BIOS error message for predefined names. Messages
- * are only emitted the first time a problem with a particular
- * method/object is detected. This prevents a flood of
- * messages for methods that are repeatedly evaluated.
- *
- ******************************************************************************/
-
-void ACPI_INTERNAL_VAR_XFACE
-AcpiUtPredefinedBiosError (
- const char *ModuleName,
- UINT32 LineNumber,
- char *Pathname,
- UINT8 NodeFlags,
- const char *Format,
- ...)
-{
- va_list ArgList;
-
-
- /*
- * Warning messages for this method/object will be disabled after the
- * first time a validation fails or an object is successfully repaired.
- */
- if (NodeFlags & ANOBJ_EVALUATED)
- {
- return;
- }
-
- AcpiOsPrintf (ACPI_MSG_BIOS_ERROR "%s: ", Pathname);
-
- va_start (ArgList, Format);
- AcpiOsVprintf (Format, ArgList);
- ACPI_MSG_SUFFIX;
- va_end (ArgList);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: AcpiUtNamespaceError
- *
- * PARAMETERS: ModuleName - Caller's module name (for error output)
- * LineNumber - Caller's line number (for error output)
- * InternalName - Name or path of the namespace node
- * LookupStatus - Exception code from NS lookup
- *
- * RETURN: None
- *
- * DESCRIPTION: Print error message with the full pathname for the NS node.
- *
- ******************************************************************************/
-
-void
-AcpiUtNamespaceError (
- const char *ModuleName,
- UINT32 LineNumber,
- const char *InternalName,
- ACPI_STATUS LookupStatus)
-{
- ACPI_STATUS Status;
- UINT32 BadName;
- char *Name = NULL;
-
-
- ACPI_MSG_REDIRECT_BEGIN;
- AcpiOsPrintf (ACPI_MSG_ERROR);
-
- if (LookupStatus == AE_BAD_CHARACTER)
- {
- /* There is a non-ascii character in the name */
-
- ACPI_MOVE_32_TO_32 (&BadName, ACPI_CAST_PTR (UINT32, InternalName));
- AcpiOsPrintf ("[0x%.8X] (NON-ASCII)", BadName);
- }
- else
- {
- /* Convert path to external format */
-
- Status = AcpiNsExternalizeName (ACPI_UINT32_MAX,
- InternalName, NULL, &Name);
-
- /* Print target name */
-
- if (ACPI_SUCCESS (Status))
- {
- AcpiOsPrintf ("[%s]", Name);
- }
- else
- {
- AcpiOsPrintf ("[COULD NOT EXTERNALIZE NAME]");
- }
-
- if (Name)
- {
- ACPI_FREE (Name);
- }
- }
-
- AcpiOsPrintf (" Namespace lookup failure, %s",
- AcpiFormatException (LookupStatus));
-
- ACPI_MSG_SUFFIX;
- ACPI_MSG_REDIRECT_END;
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: AcpiUtMethodError
- *
- * PARAMETERS: ModuleName - Caller's module name (for error output)
- * LineNumber - Caller's line number (for error output)
- * Message - Error message to use on failure
- * PrefixNode - Prefix relative to the path
- * Path - Path to the node (optional)
- * MethodStatus - Execution status
- *
- * RETURN: None
- *
- * DESCRIPTION: Print error message with the full pathname for the method.
- *
- ******************************************************************************/
-
-void
-AcpiUtMethodError (
- const char *ModuleName,
- UINT32 LineNumber,
- const char *Message,
- ACPI_NAMESPACE_NODE *PrefixNode,
- const char *Path,
- ACPI_STATUS MethodStatus)
-{
- ACPI_STATUS Status;
- ACPI_NAMESPACE_NODE *Node = PrefixNode;
-
-
- ACPI_MSG_REDIRECT_BEGIN;
- AcpiOsPrintf (ACPI_MSG_ERROR);
-
- if (Path)
- {
- Status = AcpiNsGetNode (PrefixNode, Path, ACPI_NS_NO_UPSEARCH,
- &Node);
- if (ACPI_FAILURE (Status))
- {
- AcpiOsPrintf ("[Could not get node by pathname]");
- }
- }
-
- AcpiNsPrintNodePathname (Node, Message);
- AcpiOsPrintf (", %s", AcpiFormatException (MethodStatus));
-
- ACPI_MSG_SUFFIX;
- ACPI_MSG_REDIRECT_END;
-}
-
-#endif /* ACPI_NO_ERROR_MESSAGES */
diff --git a/source/include/acapps.h b/source/include/acapps.h
index 8266d49..0d6bf9f 100644
--- a/source/include/acapps.h
+++ b/source/include/acapps.h
@@ -103,11 +103,18 @@ AcpiGetopt(
char **argv,
char *opts);
+int
+AcpiGetoptArgument (
+ int argc,
+ char **argv);
+
extern int AcpiGbl_Optind;
extern int AcpiGbl_Opterr;
+extern int AcpiGbl_SubOptChar;
extern char *AcpiGbl_Optarg;
+#ifndef ACPI_DUMP_APP
/*
* adisasm
*/
@@ -212,5 +219,6 @@ AdWriteTable (
UINT32 Length,
char *TableName,
char *OemTableId);
+#endif
#endif /* _ACAPPS */
diff --git a/source/include/acglobal.h b/source/include/acglobal.h
index 91661d6..32ae55f 100644
--- a/source/include/acglobal.h
+++ b/source/include/acglobal.h
@@ -134,6 +134,12 @@ UINT8 ACPI_INIT_GLOBAL (AcpiGbl_TruncateIoAddresses, FALSE);
*/
UINT8 ACPI_INIT_GLOBAL (AcpiGbl_DisableAutoRepair, FALSE);
+/*
+ * Optionally do not load any SSDTs from the RSDT/XSDT during initialization.
+ * This can be useful for debugging ACPI problems on some machines.
+ */
+UINT8 ACPI_INIT_GLOBAL (AcpiGbl_DisableSsdtTableLoad, FALSE);
+
/* AcpiGbl_FADT is a local copy of the FADT, converted to a common format. */
diff --git a/source/include/acpiosxf.h b/source/include/acpiosxf.h
index a1acbd1..a1ac1d9 100644
--- a/source/include/acpiosxf.h
+++ b/source/include/acpiosxf.h
@@ -391,6 +391,28 @@ AcpiOsGetLine (
/*
+ * Obtain ACPI table(s)
+ */
+ACPI_STATUS
+AcpiOsGetTableByName (
+ char *Signature,
+ UINT32 Instance,
+ ACPI_TABLE_HEADER **Table,
+ ACPI_PHYSICAL_ADDRESS *Address);
+
+ACPI_STATUS
+AcpiOsGetTableByIndex (
+ UINT32 Index,
+ ACPI_TABLE_HEADER **Table,
+ ACPI_PHYSICAL_ADDRESS *Address);
+
+ACPI_STATUS
+AcpiOsGetTableByAddress (
+ ACPI_PHYSICAL_ADDRESS Address,
+ ACPI_TABLE_HEADER **Table);
+
+
+/*
* Directory manipulation
*/
void *
diff --git a/source/include/acpixf.h b/source/include/acpixf.h
index 88b1ce0..9f94e52 100644
--- a/source/include/acpixf.h
+++ b/source/include/acpixf.h
@@ -47,7 +47,7 @@
/* Current ACPICA subsystem version in YYYYMMDD format */
-#define ACPI_CA_VERSION 0x20130418
+#define ACPI_CA_VERSION 0x20130517
#include "acconfig.h"
#include "actypes.h"
@@ -79,6 +79,7 @@ extern UINT8 AcpiGbl_EnableAmlDebugObject;
extern UINT8 AcpiGbl_CopyDsdtLocally;
extern UINT8 AcpiGbl_TruncateIoAddresses;
extern UINT8 AcpiGbl_DisableAutoRepair;
+extern UINT8 AcpiGbl_DisableSsdtTableLoad;
/*
diff --git a/source/include/actypes.h b/source/include/actypes.h
index 9c8ec7d..840c146 100644
--- a/source/include/actypes.h
+++ b/source/include/actypes.h
@@ -310,6 +310,14 @@ typedef UINT32 ACPI_PHYSICAL_ADDRESS;
#define ACPI_EXPORT_SYMBOL(Symbol)
#endif
+/*
+ * Compiler/Clibrary-dependent debug initialization. Used for ACPICA
+ * utilities only.
+ */
+#ifndef ACPI_DEBUG_INITIALIZE
+#define ACPI_DEBUG_INITIALIZE()
+#endif
+
/******************************************************************************
*
diff --git a/source/include/acutils.h b/source/include/acutils.h
index b4ea7e5..c79240c 100644
--- a/source/include/acutils.h
+++ b/source/include/acutils.h
@@ -88,6 +88,49 @@ extern const char *AcpiGbl_FcDecode[];
extern const char *AcpiGbl_PtDecode[];
#endif
+/*
+ * For the iASL compiler case, the output is redirected to stderr so that
+ * any of the various ACPI errors and warnings do not appear in the output
+ * files, for either the compiler or disassembler portions of the tool.
+ */
+#ifdef ACPI_ASL_COMPILER
+
+#include <stdio.h>
+extern FILE *AcpiGbl_OutputFile;
+
+#define ACPI_MSG_REDIRECT_BEGIN \
+ FILE *OutputFile = AcpiGbl_OutputFile; \
+ AcpiOsRedirectOutput (stderr);
+
+#define ACPI_MSG_REDIRECT_END \
+ AcpiOsRedirectOutput (OutputFile);
+
+#else
+/*
+ * non-iASL case - no redirection, nothing to do
+ */
+#define ACPI_MSG_REDIRECT_BEGIN
+#define ACPI_MSG_REDIRECT_END
+#endif
+
+/*
+ * Common error message prefixes
+ */
+#define ACPI_MSG_ERROR "ACPI Error: "
+#define ACPI_MSG_EXCEPTION "ACPI Exception: "
+#define ACPI_MSG_WARNING "ACPI Warning: "
+#define ACPI_MSG_INFO "ACPI: "
+
+#define ACPI_MSG_BIOS_ERROR "ACPI BIOS Error (bug): "
+#define ACPI_MSG_BIOS_WARNING "ACPI BIOS Warning (bug): "
+
+/*
+ * Common message suffix
+ */
+#define ACPI_MSG_SUFFIX \
+ AcpiOsPrintf (" (%8.8X/%s-%u)\n", ACPI_CA_VERSION, ModuleName, LineNumber)
+
+
/* Types for Resource descriptor entries */
#define ACPI_INVALID_RESOURCE 0
@@ -868,7 +911,7 @@ UtConvertBackslashes (
BOOLEAN
AcpiUtValidAcpiName (
- UINT32 Name);
+ char *Name);
BOOLEAN
AcpiUtValidAcpiChar (
diff --git a/source/include/platform/acenv.h b/source/include/platform/acenv.h
index a9e78a8..8895ceb 100644
--- a/source/include/platform/acenv.h
+++ b/source/include/platform/acenv.h
@@ -97,10 +97,11 @@
#endif
/*
- * AcpiBin/AcpiHelp/AcpiSrc configuration. All single threaded, with
- * no debug output.
+ * AcpiBin/AcpiDump/AcpiSrc/AcpiXtract configuration. All single
+ * threaded, with no debug output.
*/
#if (defined ACPI_BIN_APP) || \
+ (defined ACPI_DUMP_APP) || \
(defined ACPI_SRC_APP) || \
(defined ACPI_XTRACT_APP)
#define ACPI_APPLICATION
@@ -147,6 +148,9 @@
#if defined(_LINUX) || defined(__linux__)
#include "aclinux.h"
+#elif defined(_APPLE) || defined(__APPLE__)
+#include "acmacosx.h"
+
#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
#include "acfreebsd.h"
diff --git a/source/include/platform/acmacosx.h b/source/include/platform/acmacosx.h
new file mode 100644
index 0000000..91afeb6
--- /dev/null
+++ b/source/include/platform/acmacosx.h
@@ -0,0 +1,58 @@
+/******************************************************************************
+ *
+ * Name: acmacosx.h - OS specific defines, etc. for Mac OS X
+ *
+ *****************************************************************************/
+
+/*
+ * Copyright (C) 2000 - 2013, 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 __ACMACOSX_H__
+#define __ACMACOSX_H__
+
+#include "aclinux.h"
+
+#ifdef __APPLE__
+#define sem_destroy sem_close
+#define ACPI_USE_ALTERNATE_TIMEOUT
+#endif /* __APPLE__ */
+
+#ifdef __clang__
+#pragma clang diagnostic ignored "-Wformat-nonliteral"
+#endif
+
+#endif /* __ACMACOSX_H__ */
diff --git a/source/include/platform/acmsvc.h b/source/include/platform/acmsvc.h
index 799dfdb0a..d552f7d 100644
--- a/source/include/platform/acmsvc.h
+++ b/source/include/platform/acmsvc.h
@@ -146,4 +146,22 @@
#pragma warning( disable : 4295 ) /* needed for acpredef.h array */
#endif
+
+/* Debug support. Must be last in this file, do not move. */
+
+#ifdef _DEBUG
+#include <crtdbg.h>
+
+/*
+ * Debugging memory corruption issues with windows:
+ * Add #include <crtdbg.h> to accommon.h if necessary.
+ * Add _ASSERTE(_CrtCheckMemory()); where needed to test memory integrity.
+ * This can quickly localize the memory corruption.
+ */
+#define ACPI_DEBUG_INITIALIZE() \
+ _CrtSetDbgFlag (_CRTDBG_CHECK_ALWAYS_DF | \
+ _CRTDBG_ALLOC_MEM_DF | _CRTDBG_CHECK_CRT_DF | \
+ _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG))
+#endif
+
#endif /* __ACMSVC_H__ */
diff --git a/source/os_specific/service_layers/oslinuxtbl.c b/source/os_specific/service_layers/oslinuxtbl.c
new file mode 100644
index 0000000..2d1be3f
--- /dev/null
+++ b/source/os_specific/service_layers/oslinuxtbl.c
@@ -0,0 +1,137 @@
+/******************************************************************************
+ *
+ * Module Name: oslinuxtbl - Linux OSL for obtaining ACPI tables
+ *
+ *****************************************************************************/
+
+/*
+ * Copyright (C) 2000 - 2013, 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 <stdlib.h>
+
+#define _COMPONENT ACPI_OS_SERVICES
+ ACPI_MODULE_NAME ("oslinuxtbl")
+
+
+/******************************************************************************
+ *
+ * FUNCTION: AcpiOsGetTableByAddress
+ *
+ * PARAMETERS: Address - Physical address of the ACPI table
+ * Table - Where a pointer to the table is returned
+ *
+ * RETURN: Status; Table buffer is returned if AE_OK.
+ * AE_NOT_FOUND: A valid table was not found at the address
+ *
+ * DESCRIPTION: Get an ACPI table via a physical memory address.
+ *
+ *****************************************************************************/
+
+ACPI_STATUS
+AcpiOsGetTableByAddress (
+ ACPI_PHYSICAL_ADDRESS Address,
+ ACPI_TABLE_HEADER **Table)
+{
+
+ fprintf (stderr, "Linux version not implemented yet\n");
+ return (AE_SUPPORT);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION: AcpiOsGetTableByIndex
+ *
+ * PARAMETERS: Index - Which table to get
+ * Table - Where a pointer to the table is returned
+ * Address - Where the table physical address is returned
+ *
+ * RETURN: Status; Table buffer and physical address returned if AE_OK.
+ * AE_LIMIT: Index is beyond valid limit
+ *
+ * DESCRIPTION: Get an ACPI table via an index value (0 through n). Returns
+ * AE_LIMIT when an invalid index is reached. Index is not
+ * necessarily an index into the RSDT/XSDT.
+ *
+ *****************************************************************************/
+
+ACPI_STATUS
+AcpiOsGetTableByIndex (
+ UINT32 Index,
+ ACPI_TABLE_HEADER **Table,
+ ACPI_PHYSICAL_ADDRESS *Address)
+{
+
+ fprintf (stderr, "Linux version not implemented yet\n");
+ return (AE_SUPPORT);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION: AcpiOsGetTableByName
+ *
+ * PARAMETERS: Signature - ACPI Signature for desired table. Must be
+ * a null terminated 4-character string.
+ * Instance - For SSDTs (0...n)
+ * Table - Where a pointer to the table is returned
+ * Address - Where the table physical address is returned
+ *
+ * RETURN: Status; Table buffer and physical address returned if AE_OK.
+ *
+ * RETURN: Status; Table buffer and physical address returned if AE_OK.
+ * AE_LIMIT: Instance is beyond valid limit
+ * AE_NOT_FOUND: A table with the signature was not found
+ *
+ * NOTE: Assumes the input signature is uppercase.
+ *
+ *****************************************************************************/
+
+ACPI_STATUS
+AcpiOsGetTableByName (
+ char *Signature,
+ UINT32 Instance,
+ ACPI_TABLE_HEADER **Table,
+ ACPI_PHYSICAL_ADDRESS *Address)
+{
+
+ fprintf (stderr, "Linux version not implemented yet\n");
+ return (AE_SUPPORT);
+}
diff --git a/source/os_specific/service_layers/osunixxf.c b/source/os_specific/service_layers/osunixxf.c
index 2afc54e..f77d70e 100644
--- a/source/os_specific/service_layers/osunixxf.c
+++ b/source/os_specific/service_layers/osunixxf.c
@@ -45,8 +45,6 @@
/*
* These interfaces are required in order to compile the ASL compiler and the
* various ACPICA tools under Linux or other Unix-like system.
- *
- * Note: Use #define __APPLE__ for OS X generation.
*/
#include "acpi.h"
#include "accommon.h"
@@ -88,12 +86,6 @@ typedef void* (*PTHREAD_CALLBACK) (void *);
#define ACPI_VPRINTF_BUFFER_SIZE 512
-/* Apple-specific */
-
-#ifdef __APPLE__
-#define sem_destroy sem_close
-#endif
-
/******************************************************************************
*
@@ -1086,18 +1078,22 @@ AcpiOsReadPort (
switch (Width)
{
case 8:
+
*Value = 0xFF;
break;
case 16:
+
*Value = 0xFFFF;
break;
case 32:
+
*Value = 0xFFFFFFFF;
break;
default:
+
return (AE_BAD_PARAMETER);
}
@@ -1158,10 +1154,12 @@ AcpiOsReadMemory (
case 16:
case 32:
case 64:
+
*Value = 0;
break;
default:
+
return (AE_BAD_PARAMETER);
}
return (AE_OK);
@@ -1261,12 +1259,15 @@ AcpiOsSignal (
switch (Function)
{
case ACPI_SIGNAL_FATAL:
+
break;
case ACPI_SIGNAL_BREAKPOINT:
+
break;
default:
+
break;
}
diff --git a/source/os_specific/service_layers/oswindir.c b/source/os_specific/service_layers/oswindir.c
index d7ead1c..dc8916a 100644
--- a/source/os_specific/service_layers/oswindir.c
+++ b/source/os_specific/service_layers/oswindir.c
@@ -214,6 +214,7 @@ AcpiOsGetNextFilename (
break;
default:
+
return (NULL);
}
}
diff --git a/source/os_specific/service_layers/oswintbl.c b/source/os_specific/service_layers/oswintbl.c
index 6dcd554..347927f 100644
--- a/source/os_specific/service_layers/oswintbl.c
+++ b/source/os_specific/service_layers/oswintbl.c
@@ -41,8 +41,8 @@
* POSSIBILITY OF SUCH DAMAGES.
*/
-
#include "acpi.h"
+#include <stdio.h>
#ifdef WIN32
#pragma warning(disable:4115) /* warning C4115: (caused by rpcasync.h) */
@@ -55,21 +55,57 @@
#define _COMPONENT ACPI_OS_SERVICES
ACPI_MODULE_NAME ("oswintbl")
+/* Local prototypes */
+
+static char *
+WindowsFormatException (
+ LONG WinStatus);
+
+/* Globals */
+
+#define LOCAL_BUFFER_SIZE 64
+
+static char KeyBuffer[LOCAL_BUFFER_SIZE];
+static char ErrorBuffer[LOCAL_BUFFER_SIZE];
+
+/*
+ * Tables supported in the Windows registry. SSDTs are not placed into
+ * the registry, a limitation.
+ */
+static char *SupportedTables[] =
+{
+ "DSDT",
+ "RSDT",
+ "FACS",
+ "FACP"
+};
+
+/* Max index for table above */
-static char KeyBuffer[64];
-static char ErrorBuffer[64];
+#define ACPI_OS_MAX_TABLE_INDEX 3
-/* Little front-end to win FormatMessage */
+/******************************************************************************
+ *
+ * FUNCTION: WindowsFormatException
+ *
+ * PARAMETERS: WinStatus - Status from a Windows system call
+ *
+ * RETURN: Formatted (ascii) exception code. Front-end to Windows
+ * FormatMessage interface.
+ *
+ * DESCRIPTION: Decode a windows exception
+ *
+ *****************************************************************************/
-char *
-OsFormatException (
- LONG Status)
+static char *
+WindowsFormatException (
+ LONG WinStatus)
{
ErrorBuffer[0] = 0;
- FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM, NULL, Status, 0,
- ErrorBuffer, 64, NULL);
+ FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM, NULL, WinStatus, 0,
+ ErrorBuffer, LOCAL_BUFFER_SIZE, NULL);
return (ErrorBuffer);
}
@@ -77,31 +113,121 @@ OsFormatException (
/******************************************************************************
*
- * FUNCTION: OsGetTable
+ * FUNCTION: AcpiOsGetTableByAddress
+ *
+ * PARAMETERS: Address - Physical address of the ACPI table
+ * Table - Where a pointer to the table is returned
*
- * PARAMETERS: Signature - ACPI Signature for desired table. must be
- * a null terminated string.
+ * RETURN: Status; Table buffer is returned if AE_OK.
+ * AE_NOT_FOUND: A valid table was not found at the address
*
- * RETURN: Pointer to the table. NULL if failure.
+ * DESCRIPTION: Get an ACPI table via a physical memory address.
*
- * DESCRIPTION: Get an ACPI table from the Windows registry.
+ * NOTE: Cannot be implemented without a Windows device driver.
*
*****************************************************************************/
-ACPI_TABLE_HEADER *
-OsGetTable (
- char *Signature)
+ACPI_STATUS
+AcpiOsGetTableByAddress (
+ ACPI_PHYSICAL_ADDRESS Address,
+ ACPI_TABLE_HEADER **Table)
{
- HKEY Handle = NULL;
- ULONG i;
- LONG Status;
- ULONG Type;
- ULONG NameSize;
- ULONG DataSize;
- HKEY SubKey;
- ACPI_TABLE_HEADER *ReturnTable;
+
+ fprintf (stderr, "Get table by address is not supported on Windows\n");
+ return (AE_SUPPORT);
+}
+/******************************************************************************
+ *
+ * FUNCTION: AcpiOsGetTableByIndex
+ *
+ * PARAMETERS: Index - Which table to get
+ * Table - Where a pointer to the table is returned
+ * Address - Where the table physical address is returned
+ *
+ * RETURN: Status; Table buffer and physical address returned if AE_OK.
+ * AE_LIMIT: Index is beyond valid limit
+ *
+ * DESCRIPTION: Get an ACPI table via an index value (0 through n). Returns
+ * AE_LIMIT when an invalid index is reached. Index is not
+ * necessarily an index into the RSDT/XSDT.
+ * Table is obtained from the Windows registry.
+ *
+ * NOTE: Cannot get the physical address from the windows registry;
+ * zero is returned instead.
+ *
+ *****************************************************************************/
+
+ACPI_STATUS
+AcpiOsGetTableByIndex (
+ UINT32 Index,
+ ACPI_TABLE_HEADER **Table,
+ ACPI_PHYSICAL_ADDRESS *Address)
+{
+ ACPI_STATUS Status;
+
+
+ if (Index > ACPI_OS_MAX_TABLE_INDEX)
+ {
+ return (AE_LIMIT);
+ }
+
+ Status = AcpiOsGetTableByName (SupportedTables[Index], 0, Table, Address);
+ return (Status);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION: AcpiOsGetTableByName
+ *
+ * PARAMETERS: Signature - ACPI Signature for desired table. Must be
+ * a null terminated 4-character string.
+ * Instance - For SSDTs (0...n). Use 0 otherwise.
+ * Table - Where a pointer to the table is returned
+ * Address - Where the table physical address is returned
+ *
+ * RETURN: Status; Table buffer and physical address 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 ACPI table via a table signature (4 ASCII characters).
+ * Returns AE_LIMIT when an invalid instance is reached.
+ * Table is obtained from the Windows registry.
+ *
+ * NOTE: Assumes the input signature is uppercase.
+ * Cannot get the physical address from the windows registry;
+ * zero is returned instead.
+ *
+ *****************************************************************************/
+
+ACPI_STATUS
+AcpiOsGetTableByName (
+ char *Signature,
+ UINT32 Instance,
+ ACPI_TABLE_HEADER **Table,
+ ACPI_PHYSICAL_ADDRESS *Address)
+{
+ HKEY Handle = NULL;
+ LONG WinStatus;
+ ULONG Type;
+ ULONG NameSize;
+ ULONG DataSize;
+ HKEY SubKey;
+ ULONG i;
+ ACPI_TABLE_HEADER *ReturnTable;
+
+
+ /*
+ * Windows has no SSDTs in the registry, so multiple instances are
+ * not supported.
+ */
+ if (Instance > 0)
+ {
+ return (AE_LIMIT);
+ }
+
/* Get a handle to the table key */
while (1)
@@ -109,10 +235,10 @@ OsGetTable (
ACPI_STRCPY (KeyBuffer, "HARDWARE\\ACPI\\");
ACPI_STRCAT (KeyBuffer, Signature);
- Status = RegOpenKeyEx (HKEY_LOCAL_MACHINE, KeyBuffer,
- 0L, KEY_READ, &Handle);
+ WinStatus = RegOpenKeyEx (HKEY_LOCAL_MACHINE, KeyBuffer,
+ 0L, KEY_READ, &Handle);
- if (Status != ERROR_SUCCESS)
+ if (WinStatus != ERROR_SUCCESS)
{
/*
* Somewhere along the way, MS changed the registry entry for
@@ -126,12 +252,16 @@ OsGetTable (
{
Signature = "FADT";
}
+ else if (ACPI_COMPARE_NAME (Signature, "XSDT"))
+ {
+ Signature = "RSDT";
+ }
else
{
- AcpiOsPrintf (
- "Could not find %s in registry at %s: %s (Status=0x%X)\n",
- Signature, KeyBuffer, OsFormatException (Status), Status);
- return (NULL);
+ fprintf (stderr,
+ "Could not find %s in registry at %s: %s (WinStatus=0x%X)\n",
+ Signature, KeyBuffer, WindowsFormatException (WinStatus), WinStatus);
+ return (AE_NOT_FOUND);
}
}
else
@@ -140,23 +270,23 @@ OsGetTable (
}
}
- /* Actual data for table is down a couple levels */
+ /* Actual data for the table is down a couple levels */
for (i = 0; ;)
{
- Status = RegEnumKey (Handle, i, KeyBuffer, sizeof (KeyBuffer));
- i += 1;
- if (Status == ERROR_NO_MORE_ITEMS)
+ WinStatus = RegEnumKey (Handle, i, KeyBuffer, sizeof (KeyBuffer));
+ i++;
+ if (WinStatus == ERROR_NO_MORE_ITEMS)
{
break;
}
- Status = RegOpenKey (Handle, KeyBuffer, &SubKey);
- if (Status != ERROR_SUCCESS)
+ WinStatus = RegOpenKey (Handle, KeyBuffer, &SubKey);
+ if (WinStatus != ERROR_SUCCESS)
{
- AcpiOsPrintf ("Could not open %s entry: %s\n",
- Signature, OsFormatException (Status));
- return (NULL);
+ fprintf (stderr, "Could not open %s entry: %s\n",
+ Signature, WindowsFormatException (WinStatus));
+ return (AE_ERROR);
}
RegCloseKey (Handle);
@@ -166,38 +296,38 @@ OsGetTable (
/* Find the (binary) table entry */
- for (i = 0; ;)
+ for (i = 0; ; i++)
{
NameSize = sizeof (KeyBuffer);
- Status = RegEnumValue (Handle, i, KeyBuffer, &NameSize,
- NULL, &Type, NULL, 0);
- if (Status != ERROR_SUCCESS)
+ WinStatus = RegEnumValue (Handle, i, KeyBuffer, &NameSize, NULL,
+ &Type, NULL, 0);
+ if (WinStatus != ERROR_SUCCESS)
{
- AcpiOsPrintf ("Could not get %s registry entry: %s\n",
- Signature, OsFormatException (Status));
- return (NULL);
+ fprintf (stderr, "Could not get %s registry entry: %s\n",
+ Signature, WindowsFormatException (WinStatus));
+ return (AE_ERROR);
}
if (Type == REG_BINARY)
{
break;
}
- i += 1;
}
/* Get the size of the table */
- Status = RegQueryValueEx (Handle, KeyBuffer, NULL, NULL, NULL, &DataSize);
- if (Status != ERROR_SUCCESS)
+ WinStatus = RegQueryValueEx (Handle, KeyBuffer, NULL, NULL,
+ NULL, &DataSize);
+ if (WinStatus != ERROR_SUCCESS)
{
- AcpiOsPrintf ("Could not read the %s table size: %s\n",
- Signature, OsFormatException (Status));
- return (NULL);
+ fprintf (stderr, "Could not read the %s table size: %s\n",
+ Signature, WindowsFormatException (WinStatus));
+ return (AE_ERROR);
}
/* Allocate a new buffer for the table */
- ReturnTable = AcpiOsAllocate (DataSize);
+ ReturnTable = malloc (DataSize);
if (!ReturnTable)
{
goto Cleanup;
@@ -205,17 +335,20 @@ OsGetTable (
/* Get the actual table from the registry */
- Status = RegQueryValueEx (Handle, KeyBuffer, NULL, NULL,
- (UCHAR *) ReturnTable, &DataSize);
- if (Status != ERROR_SUCCESS)
+ WinStatus = RegQueryValueEx (Handle, KeyBuffer, NULL, NULL,
+ (UCHAR *) ReturnTable, &DataSize);
+ if (WinStatus != ERROR_SUCCESS)
{
- AcpiOsPrintf ("Could not read %s data: %s\n",
- Signature, OsFormatException (Status));
- AcpiOsFree (ReturnTable);
- return (NULL);
+ fprintf (stderr, "Could not read %s data: %s\n",
+ Signature, WindowsFormatException (WinStatus));
+ free (ReturnTable);
+ return (AE_ERROR);
}
Cleanup:
RegCloseKey (Handle);
- return (ReturnTable);
+
+ *Table = ReturnTable;
+ *Address = 0;
+ return (AE_OK);
}
diff --git a/source/os_specific/service_layers/oswinxf.c b/source/os_specific/service_layers/oswinxf.c
index 8a769cb..f1c567c 100644
--- a/source/os_specific/service_layers/oswinxf.c
+++ b/source/os_specific/service_layers/oswinxf.c
@@ -74,7 +74,7 @@ char TableName[ACPI_NAME_SIZE + 1];
#define ACPI_OS_DEBUG_TIMEOUT 30000 /* 30 seconds */
-/* Upcalls to application */
+/* Upcalls to AcpiExec application */
ACPI_PHYSICAL_ADDRESS
AeLocalGetRootPointer (
@@ -85,11 +85,6 @@ AeTableOverride (
ACPI_TABLE_HEADER *ExistingTable,
ACPI_TABLE_HEADER **NewTable);
-ACPI_TABLE_HEADER *
-OsGetTable (
- char *Signature);
-
-
/*
* Real semaphores are only used for a multi-threaded application
*/
@@ -245,6 +240,10 @@ AcpiOsTableOverride (
ACPI_TABLE_HEADER *ExistingTable,
ACPI_TABLE_HEADER **NewTable)
{
+#ifdef ACPI_ASL_COMPILER
+ ACPI_STATUS Status;
+ ACPI_PHYSICAL_ADDRESS Address;
+#endif
if (!ExistingTable || !NewTable)
{
@@ -271,15 +270,16 @@ AcpiOsTableOverride (
ACPI_MOVE_NAME (TableName, ExistingTable->Signature);
TableName[ACPI_NAME_SIZE] = 0;
- *NewTable = OsGetTable (TableName);
- if (*NewTable)
+ Status = AcpiOsGetTableByName (TableName, 0, NewTable, &Address);
+ if (ACPI_SUCCESS (Status))
{
AcpiOsPrintf ("Table [%s] obtained from registry, %u bytes\n",
TableName, (*NewTable)->Length);
}
else
{
- AcpiOsPrintf ("Could not read table %s from registry\n", TableName);
+ AcpiOsPrintf ("Could not read table %s from registry (%s)\n",
+ TableName, AcpiFormatException (Status));
}
#endif
@@ -1224,18 +1224,22 @@ AcpiOsReadPort (
switch (Width)
{
case 8:
+
*Value = 0xFF;
break;
case 16:
+
*Value = 0xFFFF;
break;
case 32:
+
*Value = 0xFFFFFFFF;
break;
default:
+
ACPI_ERROR ((AE_INFO, "Bad width parameter: %X", Width));
return (AE_BAD_PARAMETER);
}
@@ -1305,10 +1309,12 @@ AcpiOsReadMemory (
case 16:
case 32:
case 64:
+
*Value = 0;
break;
default:
+
return (AE_BAD_PARAMETER);
break;
}
@@ -1364,12 +1370,15 @@ AcpiOsSignal (
switch (Function)
{
case ACPI_SIGNAL_FATAL:
+
break;
case ACPI_SIGNAL_BREAKPOINT:
+
break;
default:
+
break;
}
diff --git a/source/tools/acpibin/abcompare.c b/source/tools/acpibin/abcompare.c
index 59fc971..dc21a4e 100644
--- a/source/tools/acpibin/abcompare.c
+++ b/source/tools/acpibin/abcompare.c
@@ -69,6 +69,10 @@ AbGetFile (
char *Filename,
UINT32 *FileSize);
+static UINT32
+AbGetFileSize (
+ FILE *File);
+
static void
AbPrintHeaderInfo (
ACPI_TABLE_HEADER *Header);
@@ -158,7 +162,7 @@ AbValidateHeader (
ACPI_TABLE_HEADER *Header)
{
- if (!AcpiUtValidAcpiName (* (UINT32 *) &Header->Signature))
+ if (!AcpiUtValidAcpiName (Header->Signature))
{
printf ("Header signature is invalid\n");
return (FALSE);
@@ -528,6 +532,42 @@ AbCompareAmlFiles (
/******************************************************************************
*
+ * FUNCTION: AbGetFileSize
+ *
+ * DESCRIPTION: Get the size of an open file
+ *
+ ******************************************************************************/
+
+static UINT32
+AbGetFileSize (
+ FILE *File)
+{
+ UINT32 FileSize;
+ long Offset;
+
+
+ Offset = ftell (File);
+
+ if (fseek (File, 0, SEEK_END))
+ {
+ return (0);
+ }
+
+ FileSize = (UINT32) ftell (File);
+
+ /* Restore file pointer */
+
+ if (fseek (File, Offset, SEEK_SET))
+ {
+ return (0);
+ }
+
+ return (FileSize);
+}
+
+
+/******************************************************************************
+ *
* FUNCTION: AbGetFile
*
* DESCRIPTION: Open a file and read it entirely into a new buffer
@@ -542,8 +582,6 @@ AbGetFile (
FILE *File;
UINT32 Size;
char *Buffer = NULL;
- int Seek1;
- int Seek2;
size_t Actual;
@@ -558,11 +596,8 @@ AbGetFile (
/* Need file size to allocate a buffer */
- Seek1 = fseek (File, 0L, SEEK_END);
- Size = ftell (File);
- Seek2 = fseek (File, 0L, SEEK_SET);
-
- if (Seek1 || Seek2 || (Size == -1))
+ Size = AbGetFileSize (File);
+ if (!Size)
{
printf ("Could not get file size (seek) for %s\n", Filename);
goto ErrorExit;
@@ -610,14 +645,20 @@ AbDumpAmlFile (
char *File2Path)
{
char *FileBuffer;
- UINT32 FileSize = 0;
FILE *FileOutHandle;
+ UINT32 FileSize = 0;
/* Get the entire AML file, validate header */
FileBuffer = AbGetFile (File1Path, &FileSize);
- printf ("File %s contains 0x%X bytes\n\n", File1Path, FileSize);
+ if (!FileBuffer)
+ {
+ return (-1);
+ }
+
+ printf ("Input file: %s contains %u (0x%X) bytes\n",
+ File1Path, FileSize, FileSize);
FileOutHandle = fopen (File2Path, "wb");
if (!FileOutHandle)
@@ -639,9 +680,13 @@ AbDumpAmlFile (
AcpiOsPrintf ("%4.4s @ 0x%8.8X\n",
((ACPI_TABLE_HEADER *) FileBuffer)->Signature, 0);
- AcpiDbgLevel = ACPI_UINT32_MAX;
- AcpiUtDebugDumpBuffer ((UINT8 *) FileBuffer, FileSize,
- DB_BYTE_DISPLAY, ACPI_UINT32_MAX);
+ AcpiUtDumpBuffer ((UINT8 *) FileBuffer, FileSize, DB_BYTE_DISPLAY, 0);
+
+ /* Summary for the output file */
+
+ FileSize = AbGetFileSize (FileOutHandle);
+ printf ("Output file: %s contains %u (0x%X) bytes\n\n",
+ File2Path, FileSize, FileSize);
return (0);
}
diff --git a/source/tools/acpibin/abmain.c b/source/tools/acpibin/abmain.c
index 6ce6040..67fbc24 100644
--- a/source/tools/acpibin/abmain.c
+++ b/source/tools/acpibin/abmain.c
@@ -99,8 +99,10 @@ main (
int Status = AE_OK;
+ ACPI_DEBUG_INITIALIZE (); /* For debug version only */
+
AcpiGbl_DebugFile = NULL;
- AcpiGbl_DbOutputFlags = DB_CONSOLE_OUTPUT ;
+ AcpiGbl_DbOutputFlags = DB_CONSOLE_OUTPUT;
AcpiOsInitialize ();
printf (ACPI_COMMON_SIGNON ("ACPI Binary AML File Utility"));
@@ -177,9 +179,10 @@ main (
break;
default:
+
AbDisplayUsage (0);
return (-1);
}
- return Status;
+ return (Status);
}
diff --git a/source/tools/acpidump/acpidump.h b/source/tools/acpidump/acpidump.h
new file mode 100644
index 0000000..c76ec87
--- /dev/null
+++ b/source/tools/acpidump/acpidump.h
@@ -0,0 +1,139 @@
+/******************************************************************************
+ *
+ * Module Name: acpidump.h - Include file for AcpiDump utility
+ *
+ *****************************************************************************/
+
+/*
+ * Copyright (C) 2000 - 2013, 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 "actables.h"
+
+#include <stdio.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <sys/stat.h>
+
+/*
+ * Global variables. Defined in main.c only, externed in all other files
+ */
+#ifdef _DECLARE_GLOBALS
+#define EXTERN
+#define INIT_GLOBAL(a,b) a=b
+#else
+#define EXTERN extern
+#define INIT_GLOBAL(a,b) a
+#endif
+
+
+/* Globals */
+
+EXTERN BOOLEAN INIT_GLOBAL (Gbl_SummaryMode, FALSE);
+EXTERN BOOLEAN INIT_GLOBAL (Gbl_VerboseMode, FALSE);
+EXTERN BOOLEAN INIT_GLOBAL (Gbl_BinaryMode, FALSE);
+EXTERN UINT32 INIT_GLOBAL (Gbl_SsdtCount, 0);
+EXTERN FILE INIT_GLOBAL (*Gbl_OutputFile, NULL);
+EXTERN char INIT_GLOBAL (*Gbl_OutputFilename, NULL);
+
+/* Globals required for use with ACPICA modules */
+
+#ifdef _DECLARE_GLOBALS
+UINT8 AcpiGbl_EnableInterpreterSlack = FALSE;
+UINT8 AcpiGbl_IntegerByteWidth = 8;
+UINT32 AcpiDbgLevel = 0;
+UINT32 AcpiDbgLayer = 0;
+#endif
+
+/* Action table used to defer requested options */
+
+typedef struct ap_dump_action
+{
+ char *Argument;
+ UINT32 ToBeDone;
+
+} AP_DUMP_ACTION;
+
+#define AP_MAX_ACTIONS 32
+
+#define AP_DUMP_ALL_TABLES 0
+#define AP_DUMP_TABLE_BY_ADDRESS 1
+#define AP_DUMP_TABLE_BY_NAME 2
+#define AP_DUMP_TABLE_BY_FILE 3
+
+#define AP_MAX_ACPI_FILES 256 /* Prevent infinite loops */
+
+/*
+ * apdump - Table get/dump routines
+ */
+int
+ApDumpTableFromFile (
+ char *Pathname);
+
+int
+ApDumpTableByName (
+ char *Signature);
+
+int
+ApDumpTableByAddress (
+ char *AsciiAddress);
+
+int
+ApDumpAllTables (
+ void);
+
+
+/*
+ * apfiles - File I/O utilities
+ */
+UINT32
+ApGetFileSize (
+ FILE *File);
+
+int
+ApOpenOutputFile (
+ char *Pathname);
+
+int
+ApWriteToBinaryFile (
+ ACPI_TABLE_HEADER *Table);
+
+ACPI_TABLE_HEADER *
+ApGetTableFromFile (
+ char *Pathname,
+ UINT32 *FileSize);
diff --git a/source/tools/acpidump/apdump.c b/source/tools/acpidump/apdump.c
new file mode 100644
index 0000000..c229ba5
--- /dev/null
+++ b/source/tools/acpidump/apdump.c
@@ -0,0 +1,423 @@
+/******************************************************************************
+ *
+ * Module Name: apdump - Dump routines for ACPI tables (acpidump)
+ *
+ *****************************************************************************/
+
+/*
+ * Copyright (C) 2000 - 2013, 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 "acpidump.h"
+
+
+/* Local prototypes */
+
+static BOOLEAN
+ApIsValidHeader (
+ ACPI_TABLE_HEADER *Table);
+
+static int
+ApDumpTableBuffer (
+ ACPI_TABLE_HEADER *Table,
+ ACPI_PHYSICAL_ADDRESS Address);
+
+
+/******************************************************************************
+ *
+ * FUNCTION: ApIsValidHeader
+ *
+ * PARAMETERS: Table - Pointer to table to be validated
+ *
+ * RETURN: TRUE if the header appears to be valid. FALSE otherwise
+ *
+ * DESCRIPTION: Check for a valid ACPI table header
+ *
+ ******************************************************************************/
+
+static BOOLEAN
+ApIsValidHeader (
+ ACPI_TABLE_HEADER *Table)
+{
+
+ /* Make sure signature is all ASCII and a valid ACPI name */
+
+ if (!AcpiUtValidAcpiName (Table->Signature))
+ {
+ fprintf (stderr, "Table signature (0x%X) is invalid\n",
+ *(UINT32 *) Table->Signature);
+ return (FALSE);
+ }
+
+ /* Check for minimum table length */
+
+ if (Table->Length <= sizeof (ACPI_TABLE_HEADER))
+ {
+ fprintf (stderr, "Table length (0x%X) is invalid\n",
+ Table->Length);
+ return (FALSE);
+ }
+
+ return (TRUE);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION: ApDumpTableBuffer
+ *
+ * PARAMETERS: Table - ACPI table to be dumped
+ * Address - Physical address of the table
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Dump an ACPI table in standard ASCII hex format, with a
+ * header that is compatible with the AcpiXtract utility.
+ *
+ ******************************************************************************/
+
+static int
+ApDumpTableBuffer (
+ ACPI_TABLE_HEADER *Table,
+ ACPI_PHYSICAL_ADDRESS Address)
+{
+
+ /* Check if the table header appears to be valid */
+
+ if (!ApIsValidHeader (Table))
+ {
+ return (-1);
+ }
+
+ /* Validate the table checksum (except FACS - has no checksum) */
+
+ if (!ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_FACS))
+ {
+ (void) AcpiTbVerifyChecksum (Table, Table->Length);
+ }
+
+ /* Print only the header if requested */
+
+ if (Gbl_SummaryMode)
+ {
+ AcpiTbPrintTableHeader (Address, Table);
+ return (0);
+ }
+
+ /* Dump to binary file if requested */
+
+ if (Gbl_BinaryMode)
+ {
+ return (ApWriteToBinaryFile (Table));
+ }
+
+ /*
+ * Dump the table with header for use with acpixtract utility
+ * 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));
+
+ AcpiUtDumpBuffer (ACPI_CAST_PTR (UINT8, Table), Table->Length,
+ DB_BYTE_DISPLAY, 0);
+ printf ("\n");
+ return (0);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION: ApDumpAllTables
+ *
+ * PARAMETERS: None
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Get all tables from the RSDT/XSDT (or at least all of the
+ * tables that we can possibly get).
+ *
+ ******************************************************************************/
+
+int
+ApDumpAllTables (
+ void)
+{
+ ACPI_TABLE_HEADER *Table;
+ ACPI_PHYSICAL_ADDRESS Address;
+ ACPI_STATUS Status;
+ UINT32 i;
+
+
+ /* Get and dump all available ACPI tables */
+
+ for (i = 0; i < AP_MAX_ACPI_FILES; i++)
+ {
+ Status = AcpiOsGetTableByIndex (i, &Table, &Address);
+ if (ACPI_FAILURE (Status))
+ {
+ /* AE_LIMIT means that no more tables are available */
+
+ if (Status == AE_LIMIT)
+ {
+ return (0);
+ }
+ else if (i == 0)
+ {
+ fprintf (stderr, "Could not get ACPI tables, %s\n",
+ AcpiFormatException (Status));
+ return (-1);
+ }
+ else
+ {
+ fprintf (stderr, "Could not get ACPI table at index %u, %s\n",
+ i, AcpiFormatException (Status));
+ continue;
+ }
+ }
+
+ if (ApDumpTableBuffer (Table, Address))
+ {
+ return (-1);
+ }
+ free (Table);
+ }
+
+ /* Something seriously bad happened if the loop terminates here */
+
+ return (-1);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION: ApDumpTableByAddress
+ *
+ * PARAMETERS: AsciiAddress - Address for requested ACPI table
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Get an ACPI table via a physical address and dump it.
+ *
+ ******************************************************************************/
+
+int
+ApDumpTableByAddress (
+ char *AsciiAddress)
+{
+ ACPI_PHYSICAL_ADDRESS Address;
+ ACPI_TABLE_HEADER *Table;
+ ACPI_STATUS Status;
+ int TableStatus;
+ UINT64 LongAddress;
+
+
+ /* Convert argument to an integer physical address */
+
+ Status = AcpiUtStrtoul64 (AsciiAddress, 0, &LongAddress);
+ if (ACPI_FAILURE (Status))
+ {
+ fprintf (stderr, "%s: Could not convert to a physical address\n",
+ AsciiAddress);
+ return (-1);
+ }
+
+ Address = (ACPI_PHYSICAL_ADDRESS) LongAddress;
+ Status = AcpiOsGetTableByAddress (Address, &Table);
+ if (ACPI_FAILURE (Status))
+ {
+ fprintf (stderr, "Could not get table at 0x%8.8X%8.8X, %s\n",
+ ACPI_FORMAT_UINT64 (Address),
+ AcpiFormatException (Status));
+ return (-1);
+ }
+
+ TableStatus = ApDumpTableBuffer (Table, Address);
+ free (Table);
+ return (TableStatus);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION: ApDumpTableByName
+ *
+ * PARAMETERS: Signature - Requested ACPI table signature
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Get an ACPI table via a signature and dump it. Handles
+ * multiple tables with the same signature (SSDTs).
+ *
+ ******************************************************************************/
+
+int
+ApDumpTableByName (
+ char *Signature)
+{
+ char LocalSignature [ACPI_NAME_SIZE + 1];
+ UINT32 Instance;
+ ACPI_TABLE_HEADER *Table;
+ ACPI_PHYSICAL_ADDRESS Address;
+ ACPI_STATUS Status;
+
+
+ if (strlen (Signature) > ACPI_NAME_SIZE)
+ {
+ fprintf (stderr,
+ "Invalid table signature [%s]: too long (4 chars max)\n",
+ Signature);
+ return (-1);
+ }
+
+ /* Table signatures are expected to be uppercase */
+
+ strcpy (LocalSignature, Signature);
+ AcpiUtStrupr (LocalSignature);
+
+ /* Dump all instances of this signature (to handle multiple SSDTs) */
+
+ for (Instance = 0; Instance < AP_MAX_ACPI_FILES; Instance++)
+ {
+ Status = AcpiOsGetTableByName (LocalSignature, Instance,
+ &Table, &Address);
+ if (ACPI_FAILURE (Status))
+ {
+ /* AE_LIMIT means that no more tables are available */
+
+ if (Status == AE_LIMIT)
+ {
+ return (0);
+ }
+
+ fprintf (stderr,
+ "Could not get ACPI table with signature [%s], %s\n",
+ LocalSignature, AcpiFormatException (Status));
+ return (-1);
+ }
+
+ if (ApDumpTableBuffer (Table, Address))
+ {
+ return (-1);
+ }
+ free (Table);
+ }
+
+ /* Something seriously bad happened if the loop terminates here */
+
+ return (-1);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION: ApDumpTableFromFile
+ *
+ * PARAMETERS: Pathname - File containing the binary ACPI table
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Dump an ACPI table from a binary file
+ *
+ ******************************************************************************/
+
+int
+ApDumpTableFromFile (
+ char *Pathname)
+{
+ ACPI_TABLE_HEADER *Table;
+ UINT32 FileSize = 0;
+ int TableStatus;
+
+
+ /* Get the entire ACPI table from the file */
+
+ Table = ApGetTableFromFile (Pathname, &FileSize);
+ if (!Table)
+ {
+ return (-1);
+ }
+
+ /* File must be at least as long as the table length */
+
+ if (Table->Length > FileSize)
+ {
+ fprintf (stderr,
+ "Table length (0x%X) is too large for input file (0x%X) %s\n",
+ Table->Length, FileSize, Pathname);
+ return (-1);
+ }
+
+ if (Gbl_VerboseMode)
+ {
+ fprintf (stderr,
+ "Input file: %s contains table [%4.4s], 0x%X (%u) bytes\n",
+ Pathname, Table->Signature, FileSize, FileSize);
+ }
+
+ TableStatus = ApDumpTableBuffer (Table, 0);
+ 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);
+}
diff --git a/source/tools/acpidump/apfiles.c b/source/tools/acpidump/apfiles.c
new file mode 100644
index 0000000..fd17423
--- /dev/null
+++ b/source/tools/acpidump/apfiles.c
@@ -0,0 +1,277 @@
+/******************************************************************************
+ *
+ * Module Name: apfiles - File-related functions for acpidump utility
+ *
+ *****************************************************************************/
+
+/*
+ * Copyright (C) 2000 - 2013, 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 "acpidump.h"
+#include "acapps.h"
+
+
+/******************************************************************************
+ *
+ * FUNCTION: ApOpenOutputFile
+ *
+ * PARAMETERS: Pathname - Output filename
+ *
+ * RETURN: Open file handle
+ *
+ * DESCRIPTION: Open a text output file for acpidump. Checks if file already
+ * exists.
+ *
+ ******************************************************************************/
+
+int
+ApOpenOutputFile (
+ char *Pathname)
+{
+ struct stat StatInfo;
+ FILE *File;
+
+
+ /* If file exists, prompt for overwrite */
+
+ if (!stat (Pathname, &StatInfo))
+ {
+ fprintf (stderr, "Target path already exists, overwrite? [y|n] ");
+
+ if (getchar () != 'y')
+ {
+ return (-1);
+ }
+ }
+
+ /* Point stdout to the file */
+
+ File = freopen (Pathname, "w", stdout);
+ if (!File)
+ {
+ perror ("Could not open output file");
+ return (-1);
+ }
+
+ /* Save the file and path */
+
+ Gbl_OutputFile = File;
+ Gbl_OutputFilename = Pathname;
+ return (0);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION: ApWriteToBinaryFile
+ *
+ * PARAMETERS: Table - ACPI table to be written
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Write an ACPI table to a binary file. Builds the output
+ * filename from the table signature.
+ *
+ ******************************************************************************/
+
+int
+ApWriteToBinaryFile (
+ ACPI_TABLE_HEADER *Table)
+{
+ char Filename[ACPI_NAME_SIZE + 16];
+ char SsdtInstance [16];
+ FILE *File;
+ size_t Actual;
+
+
+ /* Construct lower-case filename from the table signature */
+
+ Filename[0] = (char) ACPI_TOLOWER (Table->Signature[0]);
+ Filename[1] = (char) ACPI_TOLOWER (Table->Signature[1]);
+ Filename[2] = (char) ACPI_TOLOWER (Table->Signature[2]);
+ Filename[3] = (char) ACPI_TOLOWER (Table->Signature[3]);
+ Filename[ACPI_NAME_SIZE] = 0;
+
+ /* Handle multiple SSDTs - create different filenames for each */
+
+ if (ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_SSDT))
+ {
+ sprintf (SsdtInstance, "%u", Gbl_SsdtCount);
+ strcat (Filename, SsdtInstance);
+ Gbl_SsdtCount++;
+ }
+
+ strcat (Filename, ACPI_TABLE_FILE_SUFFIX);
+
+ if (Gbl_VerboseMode)
+ {
+ fprintf (stderr,
+ "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");
+ if (!File)
+ {
+ perror ("Could not open output file");
+ return (-1);
+ }
+
+ Actual = fwrite (Table, 1, Table->Length, File);
+ if (Actual != Table->Length)
+ {
+ perror ("Error writing binary output file");
+ fclose (File);
+ return (-1);
+ }
+
+ fclose (File);
+ return (0);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION: ApGetTableFromFile
+ *
+ * PARAMETERS: Pathname - File containing the binary ACPI table
+ * OutFileSize - Where the file size is returned
+ *
+ * RETURN: Buffer containing the ACPI table. NULL on error.
+ *
+ * DESCRIPTION: Open a file and read it entirely into a new buffer
+ *
+ ******************************************************************************/
+
+ACPI_TABLE_HEADER *
+ApGetTableFromFile (
+ char *Pathname,
+ UINT32 *OutFileSize)
+{
+ ACPI_TABLE_HEADER *Buffer = NULL;
+ FILE *File;
+ UINT32 FileSize;
+ size_t Actual;
+
+
+ /* Must use binary mode */
+
+ File = fopen (Pathname, "rb");
+ if (!File)
+ {
+ perror ("Could not open input file");
+ return (NULL);
+ }
+
+ /* Need file size to allocate a buffer */
+
+ FileSize = ApGetFileSize (File);
+ if (!FileSize)
+ {
+ fprintf (stderr,
+ "Could not get input file size: %s\n", Pathname);
+ goto Cleanup;
+ }
+
+ /* Allocate a buffer for the entire file */
+
+ Buffer = calloc (1, FileSize);
+ if (!Buffer)
+ {
+ fprintf (stderr,
+ "Could not allocate file buffer of size: %u\n", FileSize);
+ goto Cleanup;
+ }
+
+ /* Read the entire file */
+
+ Actual = fread (Buffer, 1, FileSize, File);
+ if (Actual != FileSize)
+ {
+ fprintf (stderr,
+ "Could not read input file: %s\n", Pathname);
+ free (Buffer);
+ Buffer = NULL;
+ goto Cleanup;
+ }
+
+ *OutFileSize = FileSize;
+
+Cleanup:
+ fclose (File);
+ return (Buffer);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION: ApGetFileSize
+ *
+ * PARAMETERS: File - Open file descriptor
+ *
+ * RETURN: File size in bytes
+ *
+ * DESCRIPTION: Get the size of an open file
+ *
+ ******************************************************************************/
+
+UINT32
+ApGetFileSize (
+ FILE *File)
+{
+ UINT32 FileSize;
+ long Offset;
+
+
+ Offset = ftell (File);
+ if (fseek (File, 0, SEEK_END))
+ {
+ return (0);
+ }
+
+ /* Get size and restore file pointer */
+
+ FileSize = (UINT32) ftell (File);
+ if (fseek (File, Offset, SEEK_SET))
+ {
+ return (0);
+ }
+
+ return (FileSize);
+}
diff --git a/source/tools/acpidump/apmain.c b/source/tools/acpidump/apmain.c
new file mode 100644
index 0000000..9ee4f46
--- /dev/null
+++ b/source/tools/acpidump/apmain.c
@@ -0,0 +1,351 @@
+/******************************************************************************
+ *
+ * Module Name: apmain - Main module for the acpidump utility
+ *
+ *****************************************************************************/
+
+/*
+ * Copyright (C) 2000 - 2013, 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.
+ */
+
+#define _DECLARE_GLOBALS
+#include "acpidump.h"
+#include "acapps.h"
+
+
+/*
+ * acpidump - A portable utility for obtaining system ACPI tables and dumping
+ * them in an ASCII hex format suitable for binary extraction via acpixtract.
+ *
+ * Obtaining the system ACPI tables is an OS-specific operation.
+ *
+ * This utility can be ported to any host operating system by providing a
+ * module containing system-specific versions of these interfaces:
+ *
+ * AcpiOsGetTableByAddress
+ * AcpiOsGetTableByIndex
+ * AcpiOsGetTableByName
+ *
+ * See the ACPICA Reference Guide for the exact definitions of these
+ * interfaces. Also, see these ACPICA source code modules for example
+ * implementations:
+ *
+ * source/os_specific/service_layers/oswintbl.c
+ * source/os_specific/service_layers/oslinuxtbl.c
+ */
+
+
+/* Local prototypes */
+
+static void
+ApDisplayUsage (
+ void);
+
+static int
+ApDoOptions (
+ int argc,
+ char **argv);
+
+static void
+ApInsertAction (
+ char *Argument,
+ UINT32 ToBeDone);
+
+
+/* Table for deferred actions from command line options */
+
+AP_DUMP_ACTION ActionTable [AP_MAX_ACTIONS];
+UINT32 CurrentAction = 0;
+
+
+#define AP_UTILITY_NAME "ACPI Binary Table Dump Utility"
+#define AP_SUPPORTED_OPTIONS "?a:bf:hn:o:rsv"
+
+
+/******************************************************************************
+ *
+ * FUNCTION: ApDisplayUsage
+ *
+ * DESCRIPTION: Usage message for the AcpiDump utility
+ *
+ ******************************************************************************/
+
+static void
+ApDisplayUsage (
+ void)
+{
+
+ ACPI_USAGE_HEADER ("acpidump [options]");
+
+ ACPI_OPTION ("-b", "Dump tables to binary files");
+ ACPI_OPTION ("-h -?", "This help message");
+ ACPI_OPTION ("-o <File>", "Redirect output to file");
+ ACPI_OPTION ("-r", "Revision (version)");
+ ACPI_OPTION ("-s", "Print table summaries only");
+ ACPI_OPTION ("-v", "Verbose mode");
+
+ printf ("\nTable Options:\n");
+
+ ACPI_OPTION ("-a <Address>", "Get table via physical address");
+ ACPI_OPTION ("-f <BinaryFile>", "Get table via binary file");
+ ACPI_OPTION ("-n <Signature>", "Get table via name/signature");
+
+ printf (
+ "\n"
+ "Invocation without parameters dumps all available tables\n"
+ "Multiple mixed instances of -a, -f, and -n are supported\n\n");
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION: ApInsertAction
+ *
+ * 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.
+ *
+ * DESCRIPTION: Add an action item to the action table
+ *
+ ******************************************************************************/
+
+static void
+ApInsertAction (
+ char *Argument,
+ UINT32 ToBeDone)
+{
+
+ /* Insert action and check for table overflow */
+
+ ActionTable [CurrentAction].Argument = Argument;
+ ActionTable [CurrentAction].ToBeDone = ToBeDone;
+
+ CurrentAction++;
+ if (CurrentAction > AP_MAX_ACTIONS)
+ {
+ fprintf (stderr, "Too many table options (max %u)\n", AP_MAX_ACTIONS);
+ exit (-1);
+ }
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION: ApDoOptions
+ *
+ * PARAMETERS: argc/argv - Standard argc/argv
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Command line option processing. The main actions for getting
+ * and dumping tables are deferred via the action table.
+ *
+ *****************************************************************************/
+
+static int
+ApDoOptions (
+ int argc,
+ char **argv)
+{
+ int j;
+
+
+ /* Command line options */
+
+ while ((j = AcpiGetopt (argc, argv, AP_SUPPORTED_OPTIONS)) != EOF) switch (j)
+ {
+ /*
+ * Global options
+ */
+ case 'b': /* Dump all input tables to binary files */
+
+ Gbl_BinaryMode = TRUE;
+ continue;
+
+ case 'h':
+ case '?':
+
+ ApDisplayUsage ();
+ exit (0);
+
+ case 'o': /* Redirect output to a single file */
+
+ if (ApOpenOutputFile (AcpiGbl_Optarg))
+ {
+ exit (-1);
+ }
+ continue;
+
+ case 'r': /* Revision/version */
+
+ printf (ACPI_COMMON_SIGNON (AP_UTILITY_NAME));
+ exit (0);
+
+ case 's': /* Print table summaries only */
+
+ Gbl_SummaryMode = TRUE;
+ continue;
+
+ case 'v': /* Verbose mode */
+
+ Gbl_VerboseMode = TRUE;
+ fprintf (stderr, ACPI_COMMON_SIGNON (AP_UTILITY_NAME));
+ continue;
+
+ /*
+ * Table options
+ */
+ case 'a': /* Get table by physical address */
+
+ ApInsertAction (AcpiGbl_Optarg, AP_DUMP_TABLE_BY_ADDRESS);
+ break;
+
+ case 'f': /* Get table from a file */
+
+ ApInsertAction (AcpiGbl_Optarg, AP_DUMP_TABLE_BY_FILE);
+ break;
+
+ case 'n': /* Get table by input name (signature) */
+
+ ApInsertAction (AcpiGbl_Optarg, AP_DUMP_TABLE_BY_NAME);
+ break;
+
+ default:
+
+ ApDisplayUsage ();
+ exit (-1);
+ }
+
+ /* If there are no actions, this means "get/dump all tables" */
+
+ if (CurrentAction == 0)
+ {
+ ApInsertAction (NULL, AP_DUMP_ALL_TABLES);
+ }
+
+ return (0);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION: main
+ *
+ * PARAMETERS: argc/argv - Standard argc/argv
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: C main function for acpidump utility
+ *
+ ******************************************************************************/
+
+int ACPI_SYSTEM_XFACE
+main (
+ int argc,
+ char *argv[])
+{
+ int Status = 0;
+ AP_DUMP_ACTION *Action;
+ UINT32 FileSize;
+ UINT32 i;
+
+
+ ACPI_DEBUG_INITIALIZE (); /* For debug version only */
+
+ /* Process command line options */
+
+ if (ApDoOptions (argc, argv))
+ {
+ return (-1);
+ }
+
+ /* Get/dump ACPI table(s) as requested */
+
+ for (i = 0; i < CurrentAction; i++)
+ {
+ Action = &ActionTable[i];
+ switch (Action->ToBeDone)
+ {
+ case AP_DUMP_ALL_TABLES:
+
+ Status = ApDumpAllTables ();
+ break;
+
+ case AP_DUMP_TABLE_BY_ADDRESS:
+
+ Status = ApDumpTableByAddress (Action->Argument);
+ break;
+
+ case AP_DUMP_TABLE_BY_NAME:
+
+ Status = ApDumpTableByName (Action->Argument);
+ break;
+
+ case AP_DUMP_TABLE_BY_FILE:
+
+ Status = ApDumpTableFromFile (Action->Argument);
+ break;
+
+ default:
+
+ fprintf (stderr, "Internal error, invalid action: 0x%X\n",
+ Action->ToBeDone);
+ return (-1);
+ }
+
+ if (Status)
+ {
+ return (Status);
+ }
+ }
+
+ if (Gbl_OutputFile)
+ {
+ if (Gbl_VerboseMode)
+ {
+ /* Summary for the output file */
+
+ FileSize = ApGetFileSize (Gbl_OutputFile);
+ fprintf (stderr, "Output file %s contains 0x%X (%u) bytes\n\n",
+ Gbl_OutputFilename, FileSize, FileSize);
+ }
+
+ fclose (Gbl_OutputFile);
+ }
+
+ return (Status);
+}
diff --git a/source/tools/acpiexec/aehandlers.c b/source/tools/acpiexec/aehandlers.c
index 077c52c..7f704ef 100644
--- a/source/tools/acpiexec/aehandlers.c
+++ b/source/tools/acpiexec/aehandlers.c
@@ -104,14 +104,21 @@ AeInterfaceHandler (
UINT32 Supported);
static ACPI_STATUS
-AeInstallOneEcHandler (
+AeInstallEcHandler (
ACPI_HANDLE ObjHandle,
UINT32 Level,
void *Context,
void **ReturnValue);
static ACPI_STATUS
-AeInstallEcHandlers (
+AeInstallPciHandler (
+ ACPI_HANDLE ObjHandle,
+ UINT32 Level,
+ void *Context,
+ void **ReturnValue);
+
+static ACPI_STATUS
+AeInstallDeviceHandlers (
void);
#if (!ACPI_REDUCED_HARDWARE)
@@ -259,6 +266,7 @@ AeCommonNotifyHandler (
{
#if 0
case 0:
+
printf ("[AcpiExec] Method Error 0x%X: Results not equal\n", Value);
if (AcpiGbl_DebugFile)
{
@@ -266,8 +274,8 @@ AeCommonNotifyHandler (
}
break;
-
case 1:
+
printf ("[AcpiExec] Method Error: Incorrect numeric result\n");
if (AcpiGbl_DebugFile)
{
@@ -275,8 +283,8 @@ AeCommonNotifyHandler (
}
break;
-
case 2:
+
printf ("[AcpiExec] Method Error: An operand was overwritten\n");
if (AcpiGbl_DebugFile)
{
@@ -287,6 +295,7 @@ AeCommonNotifyHandler (
#endif
default:
+
printf ("[AcpiExec] Handler %u: Received a %s Notify on [%4.4s] %p Value 0x%2.2X (%s)\n",
HandlerId, Type, AcpiUtGetNodeName (Device), Device, Value,
AcpiUtGetNotifyName (Value));
@@ -554,14 +563,17 @@ AeGlobalEventHandler (
switch (Type)
{
case ACPI_EVENT_TYPE_GPE:
+
TypeName = "GPE";
break;
case ACPI_EVENT_TYPE_FIXED:
+
TypeName = "FixedEvent";
break;
default:
+
TypeName = "UNKNOWN";
break;
}
@@ -665,7 +677,8 @@ AeRegionInit (
/*******************************************************************************
*
- * FUNCTION: AeInstallEcHandlers, AeInstallOneEcHandler
+ * FUNCTION: AeInstallDeviceHandlers, AeInstallEcHandler,
+ * AeInstallPciHandler
*
* PARAMETERS: ACPI_WALK_NAMESPACE callback
*
@@ -677,7 +690,7 @@ AeRegionInit (
******************************************************************************/
static ACPI_STATUS
-AeInstallOneEcHandler (
+AeInstallEcHandler (
ACPI_HANDLE ObjHandle,
UINT32 Level,
void *Context,
@@ -701,13 +714,50 @@ AeInstallOneEcHandler (
}
static ACPI_STATUS
-AeInstallEcHandlers (
+AeInstallPciHandler (
+ ACPI_HANDLE ObjHandle,
+ UINT32 Level,
+ void *Context,
+ void **ReturnValue)
+{
+ ACPI_STATUS Status;
+
+
+ /* Install memory and I/O handlers for the PCI device */
+
+ Status = AcpiInstallAddressSpaceHandler (ObjHandle, ACPI_ADR_SPACE_SYSTEM_IO,
+ AeRegionHandler, AeRegionInit, &AeMyContext);
+ if (ACPI_FAILURE (Status))
+ {
+ ACPI_EXCEPTION ((AE_INFO, Status,
+ "Could not install an OpRegion handler for PCI device (%p)",
+ ObjHandle));
+ }
+
+ Status = AcpiInstallAddressSpaceHandler (ObjHandle, ACPI_ADR_SPACE_SYSTEM_MEMORY,
+ AeRegionHandler, AeRegionInit, &AeMyContext);
+ if (ACPI_FAILURE (Status))
+ {
+ ACPI_EXCEPTION ((AE_INFO, Status,
+ "Could not install an OpRegion handler for PCI device (%p)",
+ ObjHandle));
+ }
+
+ return (AE_CTRL_TERMINATE);
+}
+
+static ACPI_STATUS
+AeInstallDeviceHandlers (
void)
{
/* Find all Embedded Controller devices */
- AcpiGetDevices ("PNP0C09", AeInstallOneEcHandler, NULL, NULL);
+ AcpiGetDevices ("PNP0C09", AeInstallEcHandler, NULL, NULL);
+
+ /* Install a PCI handler */
+
+ AcpiGetDevices ("PNP0A08", AeInstallPciHandler, NULL, NULL);
return (AE_OK);
}
@@ -751,9 +801,10 @@ AeInstallLateHandlers (
/*
* We will install a handler for each EC device, directly under the EC
* device definition. This is unlike the other handlers which we install
- * at the root node.
+ * at the root node. Also install memory and I/O handlers at any PCI
+ * devices.
*/
- AeInstallEcHandlers ();
+ AeInstallDeviceHandlers ();
/*
* Install handlers for some of the "device driver" address spaces
@@ -1110,6 +1161,7 @@ AeRegionHandler (
break;
default:
+
Status = AE_BAD_PARAMETER;
break;
}
@@ -1134,25 +1186,28 @@ AeRegionHandler (
switch (Function & ACPI_IO_MASK)
{
case ACPI_READ:
+
switch (Function >> 16)
{
case AML_FIELD_ATTRIB_QUICK:
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_BLOCK:
case AML_FIELD_ATTRIB_BLOCK_CALL:
+
Length = 32;
break;
-
case AML_FIELD_ATTRIB_MULTIBYTE:
case AML_FIELD_ATTRIB_RAW_BYTES:
case AML_FIELD_ATTRIB_RAW_PROCESS:
@@ -1162,11 +1217,13 @@ AeRegionHandler (
break;
default:
+
break;
}
break;
case ACPI_WRITE:
+
switch (Function >> 16)
{
case AML_FIELD_ATTRIB_QUICK:
@@ -1174,6 +1231,7 @@ AeRegionHandler (
case AML_FIELD_ATTRIB_BYTE:
case AML_FIELD_ATTRIB_WORD:
case AML_FIELD_ATTRIB_BLOCK:
+
Length = 0;
break;
@@ -1194,11 +1252,13 @@ AeRegionHandler (
break;
default:
+
break;
}
break;
default:
+
break;
}
@@ -1397,6 +1457,7 @@ DoFunction:
break;
default:
+
return (AE_BAD_PARAMETER);
}
@@ -1427,6 +1488,7 @@ DoFunction:
break;
default:
+
break;
}
}
diff --git a/source/tools/acpiexec/aemain.c b/source/tools/acpiexec/aemain.c
index 20afe30..2764b58 100644
--- a/source/tools/acpiexec/aemain.c
+++ b/source/tools/acpiexec/aemain.c
@@ -43,13 +43,10 @@
#include "aecommon.h"
-#ifdef _DEBUG
-#include <crtdbg.h>
-#endif
-
#define _COMPONENT ACPI_TOOLS
ACPI_MODULE_NAME ("aemain")
+
/* Local prototypes */
static int
@@ -94,7 +91,7 @@ static char BatchBuffer[AE_BUFFER_SIZE]; /* Batch command buf
static char *FileList[ASL_MAX_FILES];
static AE_TABLE_DESC *AeTableListHead = NULL;
-#define AE_SUPPORTED_OPTIONS "?b:d:e:f:gm^orv:x:"
+#define AE_SUPPORTED_OPTIONS "?b:d:e:f:ghm^orv:x:"
/******************************************************************************
@@ -116,8 +113,8 @@ usage (
ACPI_USAGE_HEADER ("acpiexec [options] AMLfile1 AMLfile2 ...");
- ACPI_OPTION ("-?", "Display this message");
ACPI_OPTION ("-b \"CommandLine\"", "Batch mode command line execution (cmd1;cmd2;...)");
+ ACPI_OPTION ("-h -?", "Display this help message");
ACPI_OPTION ("-m [Method]", "Batch mode method execution. Default=MAIN");
printf ("\n");
@@ -166,6 +163,7 @@ AeDoOptions (
while ((j = AcpiGetopt (argc, argv, AE_SUPPORTED_OPTIONS)) != EOF) switch (j)
{
case 'b':
+
if (strlen (AcpiGbl_Optarg) > (AE_BUFFER_SIZE -1))
{
printf ("**** The length of command line (%u) exceeded maximum (%u)\n",
@@ -177,128 +175,159 @@ AeDoOptions (
break;
case 'd':
+
switch (AcpiGbl_Optarg[0])
{
case 'a':
+
AcpiGbl_IgnoreErrors = TRUE;
break;
case 'i':
+
AcpiGbl_DbOpt_ini_methods = FALSE;
break;
case 'o':
+
AcpiGbl_DbOpt_NoRegionSupport = TRUE;
break;
case 'r':
+
AcpiGbl_DisableAutoRepair = TRUE;
break;
case 't':
+
#ifdef ACPI_DBG_TRACK_ALLOCATIONS
AcpiGbl_DisableMemTracking = TRUE;
#endif
break;
default:
+
printf ("Unknown option: -d%s\n", AcpiGbl_Optarg);
return (-1);
}
break;
case 'e':
+
switch (AcpiGbl_Optarg[0])
{
case 'f':
+
#ifdef ACPI_DBG_TRACK_ALLOCATIONS
AcpiGbl_DisplayFinalMemStats = TRUE;
#endif
break;
case 'i':
+
AcpiGbl_DoInterfaceTests = TRUE;
break;
case 'm':
+
AcpiGbl_AllMethodsSerialized = TRUE;
printf ("Enabling AML Interpreter serialized mode\n");
break;
case 's':
+
AcpiGbl_EnableInterpreterSlack = TRUE;
printf ("Enabling AML Interpreter slack mode\n");
break;
case 't':
+
AcpiGbl_DebugTimeout = TRUE;
break;
default:
+
printf ("Unknown option: -e%s\n", AcpiGbl_Optarg);
return (-1);
}
break;
case 'f':
+
AcpiGbl_RegionFillValue = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0);
break;
case 'g':
+
AcpiGbl_DbOpt_tables = TRUE;
AcpiGbl_DbFilename = NULL;
break;
+ case 'h':
+ case '?':
+
+ usage();
+ return (0);
+
case 'm':
+
AcpiGbl_ExecutionMode = AE_MODE_BATCH_SINGLE;
switch (AcpiGbl_Optarg[0])
{
case '^':
+
strcpy (BatchBuffer, "MAIN");
break;
default:
+
strcpy (BatchBuffer, AcpiGbl_Optarg);
break;
}
break;
case 'o':
+
AcpiGbl_DbOpt_disasm = TRUE;
AcpiGbl_DbOpt_stats = TRUE;
break;
case 'r':
+
AcpiGbl_UseHwReducedFadt = TRUE;
printf ("Using ACPI 5.0 Hardware Reduced Mode via version 5 FADT\n");
break;
case 'v':
+
switch (AcpiGbl_Optarg[0])
{
case 'i':
+
AcpiDbgLevel |= ACPI_LV_INIT_NAMES;
break;
case 'r':
+
AcpiGbl_DisplayRegionAccess = TRUE;
break;
default:
+
printf ("Unknown option: -v%s\n", AcpiGbl_Optarg);
return (-1);
}
break;
case 'x':
+
AcpiDbgLevel = strtoul (AcpiGbl_Optarg, NULL, 0);
AcpiGbl_DbConsoleDebugLevel = AcpiDbgLevel;
printf ("Debug Level: 0x%8.8X\n", AcpiDbgLevel);
break;
- case '?':
- case 'h':
default:
+
usage();
return (-1);
}
@@ -335,18 +364,9 @@ main (
char *FullPathname;
-#ifdef _DEBUG
- _CrtSetDbgFlag (_CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_LEAK_CHECK_DF |
- _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG));
-/*
- * Debugging memory corruption issues with windows:
- * Add #include <crtdbg.h> to accommon.h
- * Add _ASSERTE(_CrtCheckMemory()); where needed to test memory integrity
- */
-#endif
+ ACPI_DEBUG_INITIALIZE (); /* For debug version only */
printf (ACPI_COMMON_SIGNON ("AML Execution/Debug Utility"));
-
if (argc < 2)
{
usage ();
diff --git a/source/tools/acpihelp/ahmain.c b/source/tools/acpihelp/ahmain.c
index 5f46ec3..31748b2 100644
--- a/source/tools/acpihelp/ahmain.c
+++ b/source/tools/acpihelp/ahmain.c
@@ -103,6 +103,7 @@ main (
int j;
+ ACPI_DEBUG_INITIALIZE (); /* For debug version only */
printf (ACPI_COMMON_SIGNON ("ACPI Help Utility"));
DecodeType = AH_DECODE_DEFAULT;
@@ -117,35 +118,43 @@ main (
while ((j = AcpiGetopt (argc, argv, "ehikmops")) != EOF) switch (j)
{
case 'e':
+
DecodeType = AH_DECODE_EXCEPTION;
break;
case 'i':
+
DecodeType = AH_DISPLAY_DEVICE_IDS;
break;
case 'k':
+
DecodeType = AH_DECODE_ASL_KEYWORD;
break;
case 'm':
+
DecodeType = AH_DECODE_AML;
break;
case 'o':
+
DecodeType = AH_DECODE_AML_OPCODE;
break;
case 'p':
+
DecodeType = AH_DECODE_PREDEFINED_NAME;
break;
case 's':
+
DecodeType = AH_DECODE_ASL;
break;
case 'h':
default:
+
AhDisplayUsage ();
return (-1);
}
@@ -157,34 +166,42 @@ main (
switch (DecodeType)
{
case AH_DECODE_AML:
+
AhFindAmlOpcode (Name);
break;
case AH_DECODE_AML_OPCODE:
+
AhDecodeAmlOpcode (Name);
break;
case AH_DECODE_PREDEFINED_NAME:
+
AhFindPredefinedNames (Name);
break;
case AH_DECODE_ASL:
+
AhFindAslOperators (Name);
break;
case AH_DECODE_ASL_KEYWORD:
+
AhFindAslKeywords (Name);
break;
case AH_DISPLAY_DEVICE_IDS:
+
AhDisplayDeviceIds ();
break;
case AH_DECODE_EXCEPTION:
+
AhDecodeException (Name);
break;
default:
+
if (!Name)
{
AhFindAslOperators (Name);
diff --git a/source/tools/acpinames/anmain.c b/source/tools/acpinames/anmain.c
index 5cd1a3e..2bc4c6e 100644
--- a/source/tools/acpinames/anmain.c
+++ b/source/tools/acpinames/anmain.c
@@ -239,6 +239,7 @@ main (
int j;
+ ACPI_DEBUG_INITIALIZE (); /* For debug version only */
printf (ACPI_COMMON_SIGNON ("ACPI Namespace Dump Utility"));
if (argc < 2)
@@ -262,6 +263,7 @@ main (
case '?':
case 'h':
default:
+
usage();
return (0);
}
diff --git a/source/tools/acpisrc/asconvrt.c b/source/tools/acpisrc/asconvrt.c
index 22eee86..0f2da2b 100644
--- a/source/tools/acpisrc/asconvrt.c
+++ b/source/tools/acpisrc/asconvrt.c
@@ -1333,14 +1333,17 @@ AsInsertPrefix (
switch (Type)
{
case SRC_TYPE_STRUCT:
+
InsertString = "struct ";
break;
case SRC_TYPE_UNION:
+
InsertString = "union ";
break;
default:
+
return;
}
diff --git a/source/tools/acpisrc/asfile.c b/source/tools/acpisrc/asfile.c
index c21703c..9b8ec2f 100644
--- a/source/tools/acpisrc/asfile.c
+++ b/source/tools/acpisrc/asfile.c
@@ -143,6 +143,7 @@ AsDoWildcard (
break;
default:
+
break;
}
}
@@ -311,6 +312,7 @@ AsConvertFile (
switch (FileType)
{
case FILE_TYPE_SOURCE:
+
Functions = ConversionTable->SourceFunctions;
StringTable = ConversionTable->SourceStringTable;
LineTable = ConversionTable->SourceLineTable;
@@ -320,6 +322,7 @@ AsConvertFile (
break;
case FILE_TYPE_HEADER:
+
Functions = ConversionTable->HeaderFunctions;
StringTable = ConversionTable->HeaderStringTable;
LineTable = ConversionTable->HeaderLineTable;
@@ -329,6 +332,7 @@ AsConvertFile (
break;
default:
+
printf ("Unknown file type, cannot process\n");
return;
}
@@ -406,89 +410,76 @@ AsConvertFile (
switch ((1 << i) & Functions)
{
case 0:
+
/* This function not configured */
break;
-
case CVT_COUNT_TABS:
AsCountTabs (FileBuffer, Filename);
break;
-
case CVT_COUNT_NON_ANSI_COMMENTS:
AsCountNonAnsiComments (FileBuffer, Filename);
break;
-
case CVT_CHECK_BRACES:
AsCheckForBraces (FileBuffer, Filename);
break;
-
case CVT_TRIM_LINES:
AsTrimLines (FileBuffer, Filename);
break;
-
case CVT_COUNT_LINES:
AsCountSourceLines (FileBuffer, Filename);
break;
-
case CVT_BRACES_ON_SAME_LINE:
AsBracesOnSameLine (FileBuffer);
break;
-
case CVT_MIXED_CASE_TO_UNDERSCORES:
AsMixedCaseToUnderscores (FileBuffer, Filename);
break;
-
case CVT_LOWER_CASE_IDENTIFIERS:
AsLowerCaseIdentifiers (FileBuffer);
break;
-
case CVT_REMOVE_DEBUG_MACROS:
AsRemoveDebugMacros (FileBuffer);
break;
-
case CVT_TRIM_WHITESPACE:
AsTrimWhitespace (FileBuffer);
break;
-
case CVT_REMOVE_EMPTY_BLOCKS:
AsRemoveEmptyBlocks (FileBuffer, Filename);
break;
-
case CVT_REDUCE_TYPEDEFS:
AsReduceTypedefs (FileBuffer, "typedef union");
AsReduceTypedefs (FileBuffer, "typedef struct");
break;
-
case CVT_SPACES_TO_TABS4:
AsTabify4 (FileBuffer);
break;
-
case CVT_SPACES_TO_TABS8:
AsTabify8 (FileBuffer);
diff --git a/source/tools/acpisrc/asmain.c b/source/tools/acpisrc/asmain.c
index d3c68c5..ee2f3a9 100644
--- a/source/tools/acpisrc/asmain.c
+++ b/source/tools/acpisrc/asmain.c
@@ -320,6 +320,7 @@ main (
UINT32 FileType;
+ ACPI_DEBUG_INITIALIZE (); /* For debug version only */
printf (ACPI_COMMON_SIGNON ("ACPI Source Code Conversion Utility"));
if (argc < 2)
@@ -333,6 +334,7 @@ main (
while ((j = AcpiGetopt (argc, argv, "cdhlqsuvy")) != EOF) switch(j)
{
case 'l':
+
/* Linux code generation */
printf ("Creating Linux source code\n");
@@ -342,6 +344,7 @@ main (
break;
case 'c':
+
/* Cleanup code */
printf ("Code cleanup\n");
@@ -350,6 +353,7 @@ main (
break;
case 'h':
+
/* Inject Dual-license header */
printf ("Inserting Dual-license header to all modules\n");
@@ -357,11 +361,13 @@ main (
break;
case 's':
+
/* Statistics only */
break;
case 'u':
+
/* custom conversion */
printf ("Custom source translation\n");
@@ -369,30 +375,35 @@ main (
break;
case 'v':
+
/* Verbose mode */
Gbl_VerboseMode = TRUE;
break;
case 'y':
+
/* Batch mode */
Gbl_BatchMode = TRUE;
break;
case 'd':
+
/* Leave debug statements in */
Gbl_DebugStatementsMode = TRUE;
break;
case 'q':
+
/* Quiet mode */
Gbl_QuietMode = TRUE;
break;
default:
+
AsDisplayUsage ();
return (-1);
}
diff --git a/source/tools/acpixtract/acpixtract.c b/source/tools/acpixtract/acpixtract.c
index 7f279e9..efed936 100644
--- a/source/tools/acpixtract/acpixtract.c
+++ b/source/tools/acpixtract/acpixtract.c
@@ -606,6 +606,7 @@ AxExtractTables (
continue;
default:
+
Status = -1;
goto CleanupAndExit;
}
diff --git a/source/tools/acpixtract/axmain.c b/source/tools/acpixtract/axmain.c
index bbf8a70..b0cadfc 100644
--- a/source/tools/acpixtract/axmain.c
+++ b/source/tools/acpixtract/axmain.c
@@ -117,6 +117,7 @@ main (
int j;
+ ACPI_DEBUG_INITIALIZE (); /* For debug version only */
printf (ACPI_COMMON_SIGNON ("ACPI Binary Table Extraction Utility"));
if (argc < 2)
@@ -130,19 +131,23 @@ main (
while ((j = AcpiGetopt (argc, argv, "ahls:")) != EOF) switch (j)
{
case 'a':
+
AxAction = AX_EXTRACT_ALL; /* Extract all tables found */
break;
case 'l':
+
AxAction = AX_LIST_ALL; /* List tables only, do not extract */
break;
case 's':
+
AxAction = AX_EXTRACT_SIGNATURE; /* Extract only tables with this sig */
break;
case 'h':
default:
+
DisplayUsage ();
return (0);
}
@@ -161,14 +166,17 @@ main (
switch (AxAction)
{
case AX_EXTRACT_ALL:
+
Status = AxExtractTables (Filename, NULL, AX_OPTIONAL_TABLES);
break;
case AX_LIST_ALL:
+
Status = AxListTables (Filename);
break;
case AX_EXTRACT_SIGNATURE:
+
Status = AxExtractTables (Filename, AcpiGbl_Optarg, AX_REQUIRED_TABLE);
break;
diff --git a/source/tools/examples/examples.c b/source/tools/examples/examples.c
index 2c7191a..d90715d 100644
--- a/source/tools/examples/examples.c
+++ b/source/tools/examples/examples.c
@@ -119,6 +119,7 @@ main (
ACPI_FUNCTION_NAME (Examples-main);
+ ACPI_DEBUG_INITIALIZE (); /* For debug version only */
InitializeFullAcpi ();
/* Enable debug output, example debug print */
OpenPOWER on IntegriCloud