Sync ACPICA with Intel's version 20160108.
authorSascha Wildner <saw@online.de>
Fri, 8 Jan 2016 18:17:15 +0000 (19:17 +0100)
committerSascha Wildner <saw@online.de>
Fri, 8 Jan 2016 18:17:15 +0000 (19:17 +0100)
This includes the 20151218 upgrade which we had to revert again because
of a bug found by tkusumi. The only major change in 20160108 is a fix
for this bug.

20151218 changes:

* Execute "module-level code" as ACPI tables are loaded into the
  namespace during initialization and install the default operation
  region handlers for the SystemMemory, SystemIO and PCI_Config
  address spaces before any ACPI tables are loaded (in order to
  enable module-level code to access these address spaces). Also,
  several changes to the internal _REG support and to utilities
  in conjunction with these changes.

20160108 changes:

* Fixed a regression introduced in version 20151218 concerning the
  execution of so-called module-level ASL/AML code. Namespace objects
  created under a module-level If() construct were not properly/fully
  entered into the namespace and could cause an interpreter fault when
  accessed.

* Fixed a problem with the compilation of the GpioIo and GpioInt resource
  descriptors. The _PIN field name was incorrectly defined to be an array
  of 32-bit values, but the _PIN values are in fact 16 bits each. This
  would cause incorrect bit width warnings when using Word (16-bit) fields
  to access the descriptors.

Additionally, some minor fixes, features etc. were added.

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

Tested-by: tkusumi
400 files changed:
share/man/man4/acpi.4
sys/contrib/dev/acpica/changes.txt
sys/contrib/dev/acpica/source/common/acfileio.c
sys/contrib/dev/acpica/source/common/acgetline.c
sys/contrib/dev/acpica/source/common/adfile.c
sys/contrib/dev/acpica/source/common/adisasm.c
sys/contrib/dev/acpica/source/common/adwalk.c
sys/contrib/dev/acpica/source/common/ahids.c
sys/contrib/dev/acpica/source/common/ahpredef.c
sys/contrib/dev/acpica/source/common/ahtable.c
sys/contrib/dev/acpica/source/common/ahuuids.c
sys/contrib/dev/acpica/source/common/cmfsize.c
sys/contrib/dev/acpica/source/common/dmextern.c
sys/contrib/dev/acpica/source/common/dmrestag.c
sys/contrib/dev/acpica/source/common/dmtable.c
sys/contrib/dev/acpica/source/common/dmtables.c
sys/contrib/dev/acpica/source/common/dmtbdump.c
sys/contrib/dev/acpica/source/common/dmtbinfo.c
sys/contrib/dev/acpica/source/common/getopt.c
sys/contrib/dev/acpica/source/compiler/aslanalyze.c
sys/contrib/dev/acpica/source/compiler/aslascii.c
sys/contrib/dev/acpica/source/compiler/aslbtypes.c
sys/contrib/dev/acpica/source/compiler/aslcodegen.c
sys/contrib/dev/acpica/source/compiler/aslcompile.c
sys/contrib/dev/acpica/source/compiler/aslcompiler.h
sys/contrib/dev/acpica/source/compiler/aslcompiler.l
sys/contrib/dev/acpica/source/compiler/aslcstyle.y
sys/contrib/dev/acpica/source/compiler/asldefine.h
sys/contrib/dev/acpica/source/compiler/aslerror.c
sys/contrib/dev/acpica/source/compiler/aslfileio.c
sys/contrib/dev/acpica/source/compiler/aslfiles.c
sys/contrib/dev/acpica/source/compiler/aslfold.c
sys/contrib/dev/acpica/source/compiler/aslglobal.h
sys/contrib/dev/acpica/source/compiler/aslhex.c
sys/contrib/dev/acpica/source/compiler/asllength.c
sys/contrib/dev/acpica/source/compiler/asllisting.c
sys/contrib/dev/acpica/source/compiler/asllistsup.c
sys/contrib/dev/acpica/source/compiler/aslload.c
sys/contrib/dev/acpica/source/compiler/asllookup.c
sys/contrib/dev/acpica/source/compiler/aslmain.c
sys/contrib/dev/acpica/source/compiler/aslmap.c
sys/contrib/dev/acpica/source/compiler/aslmapenter.c
sys/contrib/dev/acpica/source/compiler/aslmapoutput.c
sys/contrib/dev/acpica/source/compiler/aslmaputils.c
sys/contrib/dev/acpica/source/compiler/aslmessages.c
sys/contrib/dev/acpica/source/compiler/aslmessages.h
sys/contrib/dev/acpica/source/compiler/aslmethod.c
sys/contrib/dev/acpica/source/compiler/aslnamesp.c
sys/contrib/dev/acpica/source/compiler/asloffset.c
sys/contrib/dev/acpica/source/compiler/aslopcodes.c
sys/contrib/dev/acpica/source/compiler/asloperands.c
sys/contrib/dev/acpica/source/compiler/aslopt.c
sys/contrib/dev/acpica/source/compiler/asloptions.c
sys/contrib/dev/acpica/source/compiler/aslparser.y
sys/contrib/dev/acpica/source/compiler/aslpredef.c
sys/contrib/dev/acpica/source/compiler/aslprepkg.c
sys/contrib/dev/acpica/source/compiler/aslprintf.c
sys/contrib/dev/acpica/source/compiler/aslprune.c
sys/contrib/dev/acpica/source/compiler/aslresource.c
sys/contrib/dev/acpica/source/compiler/aslresources.y
sys/contrib/dev/acpica/source/compiler/aslrestype1.c
sys/contrib/dev/acpica/source/compiler/aslrestype1i.c
sys/contrib/dev/acpica/source/compiler/aslrestype2.c
sys/contrib/dev/acpica/source/compiler/aslrestype2d.c
sys/contrib/dev/acpica/source/compiler/aslrestype2e.c
sys/contrib/dev/acpica/source/compiler/aslrestype2q.c
sys/contrib/dev/acpica/source/compiler/aslrestype2s.c
sys/contrib/dev/acpica/source/compiler/aslrestype2w.c
sys/contrib/dev/acpica/source/compiler/aslrules.y
sys/contrib/dev/acpica/source/compiler/aslstartup.c
sys/contrib/dev/acpica/source/compiler/aslstubs.c
sys/contrib/dev/acpica/source/compiler/aslsupport.l
sys/contrib/dev/acpica/source/compiler/aslsupport.y
sys/contrib/dev/acpica/source/compiler/asltokens.y
sys/contrib/dev/acpica/source/compiler/asltransform.c
sys/contrib/dev/acpica/source/compiler/asltree.c
sys/contrib/dev/acpica/source/compiler/asltypes.h
sys/contrib/dev/acpica/source/compiler/asltypes.y
sys/contrib/dev/acpica/source/compiler/aslutils.c
sys/contrib/dev/acpica/source/compiler/asluuid.c
sys/contrib/dev/acpica/source/compiler/aslwalks.c
sys/contrib/dev/acpica/source/compiler/aslxref.c
sys/contrib/dev/acpica/source/compiler/dtcompile.c
sys/contrib/dev/acpica/source/compiler/dtcompiler.h
sys/contrib/dev/acpica/source/compiler/dtexpress.c
sys/contrib/dev/acpica/source/compiler/dtfield.c
sys/contrib/dev/acpica/source/compiler/dtio.c
sys/contrib/dev/acpica/source/compiler/dtparser.l
sys/contrib/dev/acpica/source/compiler/dtparser.y
sys/contrib/dev/acpica/source/compiler/dtsubtable.c
sys/contrib/dev/acpica/source/compiler/dttable.c
sys/contrib/dev/acpica/source/compiler/dttable1.c
sys/contrib/dev/acpica/source/compiler/dttable2.c
sys/contrib/dev/acpica/source/compiler/dttemplate.c
sys/contrib/dev/acpica/source/compiler/dttemplate.h
sys/contrib/dev/acpica/source/compiler/dtutils.c
sys/contrib/dev/acpica/source/compiler/preprocess.h
sys/contrib/dev/acpica/source/compiler/prexpress.c
sys/contrib/dev/acpica/source/compiler/prmacros.c
sys/contrib/dev/acpica/source/compiler/prparser.l
sys/contrib/dev/acpica/source/compiler/prparser.y
sys/contrib/dev/acpica/source/compiler/prscan.c
sys/contrib/dev/acpica/source/compiler/prutils.c
sys/contrib/dev/acpica/source/components/debugger/dbcmds.c
sys/contrib/dev/acpica/source/components/debugger/dbconvert.c
sys/contrib/dev/acpica/source/components/debugger/dbdisply.c
sys/contrib/dev/acpica/source/components/debugger/dbexec.c
sys/contrib/dev/acpica/source/components/debugger/dbfileio.c
sys/contrib/dev/acpica/source/components/debugger/dbhistry.c
sys/contrib/dev/acpica/source/components/debugger/dbinput.c
sys/contrib/dev/acpica/source/components/debugger/dbmethod.c
sys/contrib/dev/acpica/source/components/debugger/dbnames.c
sys/contrib/dev/acpica/source/components/debugger/dbobject.c
sys/contrib/dev/acpica/source/components/debugger/dbstats.c
sys/contrib/dev/acpica/source/components/debugger/dbtest.c
sys/contrib/dev/acpica/source/components/debugger/dbutils.c
sys/contrib/dev/acpica/source/components/debugger/dbxface.c
sys/contrib/dev/acpica/source/components/disassembler/dmbuffer.c
sys/contrib/dev/acpica/source/components/disassembler/dmcstyle.c
sys/contrib/dev/acpica/source/components/disassembler/dmdeferred.c
sys/contrib/dev/acpica/source/components/disassembler/dmnames.c
sys/contrib/dev/acpica/source/components/disassembler/dmopcode.c
sys/contrib/dev/acpica/source/components/disassembler/dmresrc.c
sys/contrib/dev/acpica/source/components/disassembler/dmresrcl.c
sys/contrib/dev/acpica/source/components/disassembler/dmresrcl2.c
sys/contrib/dev/acpica/source/components/disassembler/dmresrcs.c
sys/contrib/dev/acpica/source/components/disassembler/dmutils.c
sys/contrib/dev/acpica/source/components/disassembler/dmwalk.c
sys/contrib/dev/acpica/source/components/dispatcher/dsargs.c
sys/contrib/dev/acpica/source/components/dispatcher/dscontrol.c
sys/contrib/dev/acpica/source/components/dispatcher/dsdebug.c
sys/contrib/dev/acpica/source/components/dispatcher/dsfield.c
sys/contrib/dev/acpica/source/components/dispatcher/dsinit.c
sys/contrib/dev/acpica/source/components/dispatcher/dsmethod.c
sys/contrib/dev/acpica/source/components/dispatcher/dsmthdat.c
sys/contrib/dev/acpica/source/components/dispatcher/dsobject.c
sys/contrib/dev/acpica/source/components/dispatcher/dsopcode.c
sys/contrib/dev/acpica/source/components/dispatcher/dsutils.c
sys/contrib/dev/acpica/source/components/dispatcher/dswexec.c
sys/contrib/dev/acpica/source/components/dispatcher/dswload.c
sys/contrib/dev/acpica/source/components/dispatcher/dswload2.c
sys/contrib/dev/acpica/source/components/dispatcher/dswscope.c
sys/contrib/dev/acpica/source/components/dispatcher/dswstate.c
sys/contrib/dev/acpica/source/components/events/evevent.c
sys/contrib/dev/acpica/source/components/events/evglock.c
sys/contrib/dev/acpica/source/components/events/evgpe.c
sys/contrib/dev/acpica/source/components/events/evgpeblk.c
sys/contrib/dev/acpica/source/components/events/evgpeinit.c
sys/contrib/dev/acpica/source/components/events/evgpeutil.c
sys/contrib/dev/acpica/source/components/events/evhandler.c
sys/contrib/dev/acpica/source/components/events/evmisc.c
sys/contrib/dev/acpica/source/components/events/evregion.c
sys/contrib/dev/acpica/source/components/events/evrgnini.c
sys/contrib/dev/acpica/source/components/events/evsci.c
sys/contrib/dev/acpica/source/components/events/evxface.c
sys/contrib/dev/acpica/source/components/events/evxfevnt.c
sys/contrib/dev/acpica/source/components/events/evxfgpe.c
sys/contrib/dev/acpica/source/components/events/evxfregn.c
sys/contrib/dev/acpica/source/components/executer/exconfig.c
sys/contrib/dev/acpica/source/components/executer/exconvrt.c
sys/contrib/dev/acpica/source/components/executer/excreate.c
sys/contrib/dev/acpica/source/components/executer/exdebug.c
sys/contrib/dev/acpica/source/components/executer/exdump.c
sys/contrib/dev/acpica/source/components/executer/exfield.c
sys/contrib/dev/acpica/source/components/executer/exfldio.c
sys/contrib/dev/acpica/source/components/executer/exmisc.c
sys/contrib/dev/acpica/source/components/executer/exmutex.c
sys/contrib/dev/acpica/source/components/executer/exnames.c
sys/contrib/dev/acpica/source/components/executer/exoparg1.c
sys/contrib/dev/acpica/source/components/executer/exoparg2.c
sys/contrib/dev/acpica/source/components/executer/exoparg3.c
sys/contrib/dev/acpica/source/components/executer/exoparg6.c
sys/contrib/dev/acpica/source/components/executer/exprep.c
sys/contrib/dev/acpica/source/components/executer/exregion.c
sys/contrib/dev/acpica/source/components/executer/exresnte.c
sys/contrib/dev/acpica/source/components/executer/exresolv.c
sys/contrib/dev/acpica/source/components/executer/exresop.c
sys/contrib/dev/acpica/source/components/executer/exstore.c
sys/contrib/dev/acpica/source/components/executer/exstoren.c
sys/contrib/dev/acpica/source/components/executer/exstorob.c
sys/contrib/dev/acpica/source/components/executer/exsystem.c
sys/contrib/dev/acpica/source/components/executer/extrace.c
sys/contrib/dev/acpica/source/components/executer/exutils.c
sys/contrib/dev/acpica/source/components/hardware/hwacpi.c
sys/contrib/dev/acpica/source/components/hardware/hwesleep.c
sys/contrib/dev/acpica/source/components/hardware/hwgpe.c
sys/contrib/dev/acpica/source/components/hardware/hwpci.c
sys/contrib/dev/acpica/source/components/hardware/hwregs.c
sys/contrib/dev/acpica/source/components/hardware/hwsleep.c
sys/contrib/dev/acpica/source/components/hardware/hwtimer.c
sys/contrib/dev/acpica/source/components/hardware/hwvalid.c
sys/contrib/dev/acpica/source/components/hardware/hwxface.c
sys/contrib/dev/acpica/source/components/hardware/hwxfsleep.c
sys/contrib/dev/acpica/source/components/namespace/nsaccess.c
sys/contrib/dev/acpica/source/components/namespace/nsalloc.c
sys/contrib/dev/acpica/source/components/namespace/nsarguments.c
sys/contrib/dev/acpica/source/components/namespace/nsconvert.c
sys/contrib/dev/acpica/source/components/namespace/nsdump.c
sys/contrib/dev/acpica/source/components/namespace/nsdumpdv.c
sys/contrib/dev/acpica/source/components/namespace/nseval.c
sys/contrib/dev/acpica/source/components/namespace/nsinit.c
sys/contrib/dev/acpica/source/components/namespace/nsload.c
sys/contrib/dev/acpica/source/components/namespace/nsnames.c
sys/contrib/dev/acpica/source/components/namespace/nsobject.c
sys/contrib/dev/acpica/source/components/namespace/nsparse.c
sys/contrib/dev/acpica/source/components/namespace/nspredef.c
sys/contrib/dev/acpica/source/components/namespace/nsprepkg.c
sys/contrib/dev/acpica/source/components/namespace/nsrepair.c
sys/contrib/dev/acpica/source/components/namespace/nsrepair2.c
sys/contrib/dev/acpica/source/components/namespace/nssearch.c
sys/contrib/dev/acpica/source/components/namespace/nsutils.c
sys/contrib/dev/acpica/source/components/namespace/nswalk.c
sys/contrib/dev/acpica/source/components/namespace/nsxfeval.c
sys/contrib/dev/acpica/source/components/namespace/nsxfname.c
sys/contrib/dev/acpica/source/components/namespace/nsxfobj.c
sys/contrib/dev/acpica/source/components/parser/psargs.c
sys/contrib/dev/acpica/source/components/parser/psloop.c
sys/contrib/dev/acpica/source/components/parser/psobject.c
sys/contrib/dev/acpica/source/components/parser/psopcode.c
sys/contrib/dev/acpica/source/components/parser/psopinfo.c
sys/contrib/dev/acpica/source/components/parser/psparse.c
sys/contrib/dev/acpica/source/components/parser/psscope.c
sys/contrib/dev/acpica/source/components/parser/pstree.c
sys/contrib/dev/acpica/source/components/parser/psutils.c
sys/contrib/dev/acpica/source/components/parser/pswalk.c
sys/contrib/dev/acpica/source/components/parser/psxface.c
sys/contrib/dev/acpica/source/components/resources/rsaddr.c
sys/contrib/dev/acpica/source/components/resources/rscalc.c
sys/contrib/dev/acpica/source/components/resources/rscreate.c
sys/contrib/dev/acpica/source/components/resources/rsdump.c
sys/contrib/dev/acpica/source/components/resources/rsdumpinfo.c
sys/contrib/dev/acpica/source/components/resources/rsinfo.c
sys/contrib/dev/acpica/source/components/resources/rsio.c
sys/contrib/dev/acpica/source/components/resources/rsirq.c
sys/contrib/dev/acpica/source/components/resources/rslist.c
sys/contrib/dev/acpica/source/components/resources/rsmemory.c
sys/contrib/dev/acpica/source/components/resources/rsmisc.c
sys/contrib/dev/acpica/source/components/resources/rsserial.c
sys/contrib/dev/acpica/source/components/resources/rsutils.c
sys/contrib/dev/acpica/source/components/resources/rsxface.c
sys/contrib/dev/acpica/source/components/tables/tbdata.c
sys/contrib/dev/acpica/source/components/tables/tbfadt.c
sys/contrib/dev/acpica/source/components/tables/tbfind.c
sys/contrib/dev/acpica/source/components/tables/tbinstal.c
sys/contrib/dev/acpica/source/components/tables/tbprint.c
sys/contrib/dev/acpica/source/components/tables/tbutils.c
sys/contrib/dev/acpica/source/components/tables/tbxface.c
sys/contrib/dev/acpica/source/components/tables/tbxfload.c
sys/contrib/dev/acpica/source/components/tables/tbxfroot.c
sys/contrib/dev/acpica/source/components/utilities/utaddress.c
sys/contrib/dev/acpica/source/components/utilities/utalloc.c
sys/contrib/dev/acpica/source/components/utilities/utbuffer.c
sys/contrib/dev/acpica/source/components/utilities/utcache.c
sys/contrib/dev/acpica/source/components/utilities/utclib.c
sys/contrib/dev/acpica/source/components/utilities/utcopy.c
sys/contrib/dev/acpica/source/components/utilities/utdebug.c
sys/contrib/dev/acpica/source/components/utilities/utdecode.c
sys/contrib/dev/acpica/source/components/utilities/utdelete.c
sys/contrib/dev/acpica/source/components/utilities/uterror.c
sys/contrib/dev/acpica/source/components/utilities/uteval.c
sys/contrib/dev/acpica/source/components/utilities/utexcep.c
sys/contrib/dev/acpica/source/components/utilities/utglobal.c
sys/contrib/dev/acpica/source/components/utilities/uthex.c
sys/contrib/dev/acpica/source/components/utilities/utids.c
sys/contrib/dev/acpica/source/components/utilities/utinit.c
sys/contrib/dev/acpica/source/components/utilities/utlock.c
sys/contrib/dev/acpica/source/components/utilities/utmath.c
sys/contrib/dev/acpica/source/components/utilities/utmisc.c
sys/contrib/dev/acpica/source/components/utilities/utmutex.c
sys/contrib/dev/acpica/source/components/utilities/utnonansi.c
sys/contrib/dev/acpica/source/components/utilities/utobject.c
sys/contrib/dev/acpica/source/components/utilities/utosi.c
sys/contrib/dev/acpica/source/components/utilities/utownerid.c
sys/contrib/dev/acpica/source/components/utilities/utpredef.c
sys/contrib/dev/acpica/source/components/utilities/utprint.c
sys/contrib/dev/acpica/source/components/utilities/utresrc.c
sys/contrib/dev/acpica/source/components/utilities/utstate.c
sys/contrib/dev/acpica/source/components/utilities/utstring.c
sys/contrib/dev/acpica/source/components/utilities/uttrack.c
sys/contrib/dev/acpica/source/components/utilities/utuuid.c
sys/contrib/dev/acpica/source/components/utilities/utxface.c
sys/contrib/dev/acpica/source/components/utilities/utxferror.c
sys/contrib/dev/acpica/source/components/utilities/utxfinit.c
sys/contrib/dev/acpica/source/components/utilities/utxfmutex.c
sys/contrib/dev/acpica/source/include/acapps.h
sys/contrib/dev/acpica/source/include/acbuffer.h
sys/contrib/dev/acpica/source/include/acclib.h
sys/contrib/dev/acpica/source/include/accommon.h
sys/contrib/dev/acpica/source/include/acconfig.h
sys/contrib/dev/acpica/source/include/acdebug.h
sys/contrib/dev/acpica/source/include/acdisasm.h
sys/contrib/dev/acpica/source/include/acdispat.h
sys/contrib/dev/acpica/source/include/acevents.h
sys/contrib/dev/acpica/source/include/acexcep.h
sys/contrib/dev/acpica/source/include/acglobal.h
sys/contrib/dev/acpica/source/include/achware.h
sys/contrib/dev/acpica/source/include/acinterp.h
sys/contrib/dev/acpica/source/include/aclocal.h
sys/contrib/dev/acpica/source/include/acmacros.h
sys/contrib/dev/acpica/source/include/acnames.h
sys/contrib/dev/acpica/source/include/acnamesp.h
sys/contrib/dev/acpica/source/include/acobject.h
sys/contrib/dev/acpica/source/include/acopcode.h
sys/contrib/dev/acpica/source/include/acoutput.h
sys/contrib/dev/acpica/source/include/acparser.h
sys/contrib/dev/acpica/source/include/acpi.h
sys/contrib/dev/acpica/source/include/acpiosxf.h
sys/contrib/dev/acpica/source/include/acpixf.h
sys/contrib/dev/acpica/source/include/acpredef.h
sys/contrib/dev/acpica/source/include/acresrc.h
sys/contrib/dev/acpica/source/include/acrestyp.h
sys/contrib/dev/acpica/source/include/acstruct.h
sys/contrib/dev/acpica/source/include/actables.h
sys/contrib/dev/acpica/source/include/actbl.h
sys/contrib/dev/acpica/source/include/actbl1.h
sys/contrib/dev/acpica/source/include/actbl2.h
sys/contrib/dev/acpica/source/include/actbl3.h
sys/contrib/dev/acpica/source/include/actypes.h
sys/contrib/dev/acpica/source/include/acutils.h
sys/contrib/dev/acpica/source/include/acuuid.h
sys/contrib/dev/acpica/source/include/amlcode.h
sys/contrib/dev/acpica/source/include/amlresrc.h
sys/contrib/dev/acpica/source/include/platform/accygwin.h
sys/contrib/dev/acpica/source/include/platform/acdragonfly.h
sys/contrib/dev/acpica/source/include/platform/acdragonflyex.h
sys/contrib/dev/acpica/source/include/platform/acefi.h
sys/contrib/dev/acpica/source/include/platform/acefiex.h
sys/contrib/dev/acpica/source/include/platform/acenv.h
sys/contrib/dev/acpica/source/include/platform/acenvex.h
sys/contrib/dev/acpica/source/include/platform/acfreebsd.h
sys/contrib/dev/acpica/source/include/platform/acgcc.h
sys/contrib/dev/acpica/source/include/platform/achaiku.h
sys/contrib/dev/acpica/source/include/platform/acintel.h
sys/contrib/dev/acpica/source/include/platform/aclinux.h
sys/contrib/dev/acpica/source/include/platform/aclinuxex.h
sys/contrib/dev/acpica/source/include/platform/acmacosx.h
sys/contrib/dev/acpica/source/include/platform/acmsvc.h
sys/contrib/dev/acpica/source/include/platform/acmsvcex.h
sys/contrib/dev/acpica/source/include/platform/acnetbsd.h
sys/contrib/dev/acpica/source/include/platform/acos2.h
sys/contrib/dev/acpica/source/include/platform/acwin.h
sys/contrib/dev/acpica/source/include/platform/acwin64.h
sys/contrib/dev/acpica/source/include/platform/acwinex.h
sys/contrib/dev/acpica/source/os_specific/service_layers/osbsdtbl.c
sys/contrib/dev/acpica/source/os_specific/service_layers/osefitbl.c
sys/contrib/dev/acpica/source/os_specific/service_layers/osefixf.c
sys/contrib/dev/acpica/source/os_specific/service_layers/oslibcfs.c
sys/contrib/dev/acpica/source/os_specific/service_layers/oslinuxtbl.c
sys/contrib/dev/acpica/source/os_specific/service_layers/osunixdir.c
sys/contrib/dev/acpica/source/os_specific/service_layers/osunixmap.c
sys/contrib/dev/acpica/source/os_specific/service_layers/osunixxf.c
sys/contrib/dev/acpica/source/os_specific/service_layers/oswindir.c
sys/contrib/dev/acpica/source/os_specific/service_layers/oswintbl.c
sys/contrib/dev/acpica/source/os_specific/service_layers/oswinxf.c
sys/contrib/dev/acpica/source/tools/acpibin/abcompare.c
sys/contrib/dev/acpica/source/tools/acpibin/abmain.c
sys/contrib/dev/acpica/source/tools/acpibin/acpibin.h
sys/contrib/dev/acpica/source/tools/acpidump/acpidump.h
sys/contrib/dev/acpica/source/tools/acpidump/apdump.c
sys/contrib/dev/acpica/source/tools/acpidump/apfiles.c
sys/contrib/dev/acpica/source/tools/acpidump/apmain.c
sys/contrib/dev/acpica/source/tools/acpiexec/aecommon.h
sys/contrib/dev/acpica/source/tools/acpiexec/aeexec.c
sys/contrib/dev/acpica/source/tools/acpiexec/aehandlers.c
sys/contrib/dev/acpica/source/tools/acpiexec/aeinitfile.c
sys/contrib/dev/acpica/source/tools/acpiexec/aemain.c
sys/contrib/dev/acpica/source/tools/acpiexec/aeregion.c
sys/contrib/dev/acpica/source/tools/acpiexec/aetables.c
sys/contrib/dev/acpica/source/tools/acpiexec/aetables.h
sys/contrib/dev/acpica/source/tools/acpihelp/acpihelp.h
sys/contrib/dev/acpica/source/tools/acpihelp/ahamlops.c
sys/contrib/dev/acpica/source/tools/acpihelp/ahaslkey.c
sys/contrib/dev/acpica/source/tools/acpihelp/ahaslops.c
sys/contrib/dev/acpica/source/tools/acpihelp/ahdecode.c
sys/contrib/dev/acpica/source/tools/acpihelp/ahmain.c
sys/contrib/dev/acpica/source/tools/acpinames/acpinames.h
sys/contrib/dev/acpica/source/tools/acpinames/anmain.c
sys/contrib/dev/acpica/source/tools/acpinames/anstubs.c
sys/contrib/dev/acpica/source/tools/acpinames/antables.c
sys/contrib/dev/acpica/source/tools/acpisrc/acpisrc.h
sys/contrib/dev/acpica/source/tools/acpisrc/ascase.c
sys/contrib/dev/acpica/source/tools/acpisrc/asconvrt.c
sys/contrib/dev/acpica/source/tools/acpisrc/asfile.c
sys/contrib/dev/acpica/source/tools/acpisrc/asmain.c
sys/contrib/dev/acpica/source/tools/acpisrc/asremove.c
sys/contrib/dev/acpica/source/tools/acpisrc/astable.c
sys/contrib/dev/acpica/source/tools/acpisrc/asutils.c
sys/contrib/dev/acpica/source/tools/acpixtract/acpixtract.c
sys/contrib/dev/acpica/source/tools/acpixtract/acpixtract.h
sys/contrib/dev/acpica/source/tools/acpixtract/axmain.c
sys/contrib/dev/acpica/source/tools/acpixtract/axutils.c
sys/contrib/dev/acpica/source/tools/examples/examples.c
sys/contrib/dev/acpica/source/tools/examples/examples.h
sys/contrib/dev/acpica/source/tools/examples/exstubs.c
sys/contrib/dev/acpica/source/tools/examples/extables.c
sys/contrib/dev/acpica/tests/misc/grammar.asl
sys/dev/acpica/acpi.c
usr.sbin/acpi/acpibin/acpibin.8
usr.sbin/acpi/acpiexec/acpiexec.8
usr.sbin/acpi/iasl/iasl.8

index 99a350b..ea644f4 100644 (file)
@@ -25,7 +25,7 @@
 .\"
 .\" $FreeBSD: src/share/man/man4/acpi.4,v 1.61.8.1 2009/04/15 03:14:26 kensmith Exp $
 .\"
-.Dd November 21, 2015
+.Dd January 8, 2016
 .Dt ACPI 4
 .Os
 .Sh NAME
@@ -216,6 +216,11 @@ debugging purposes.
 Favor 32-bit FACS table addresses over the 64-bit addresses.
 .It Va debug.acpi.fadt_addr32
 Favor 32-bit FADT register addresses over the 64-bit addresses.
+.It Va debug.acpi.group_module_level_code
+Group the execution of module-level code after all of the tables have
+been loaded instead of executing it as tables are loaded into the namespace
+during ACPICA initialization.
+The default is to not group.
 .It Va debug.acpi.ignore_xsdt
 Ignore the XSDT, forcing the use of the RSDT.
 .It Va debug.acpi.interpreter_slack
index f995856..1d3ec5a 100644 (file)
@@ -1,8 +1,199 @@
 ----------------------------------------
-24 November 2015. Summary of changes for version 20151124:
+8 January 2016. Summary of changes for version 20160108:
 
-This release is available at https://acpica.org/downloads
+1) ACPICA kernel-resident subsystem:
+
+Updated all ACPICA copyrights and signons to 2016: Added the 2016 
+copyright to all source code module headers and utility/tool signons. 
+This includes the standard Linux dual-license header. This affects 
+virtually every file in the ACPICA core subsystem, iASL compiler, all 
+ACPICA utilities, and the ACPICA test suite.
+
+Fixed a regression introduced in version 20151218 concerning the 
+execution of so-called module-level ASL/AML code. Namespace objects 
+created under a module-level If() construct were not properly/fully 
+entered into the namespace and could cause an interpreter fault when 
+accessed.
 
+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: 102.7K Code, 28.4K Data, 131.1K Total
+    Debug Version:     200.4K Code, 81.9K Data, 282.4K Total
+  Previous Release:
+    Non-Debug Version: 102.6K Code, 28.4K Data, 131.0K Total
+    Debug Version:     200.3K Code, 81.9K Data, 282.3K Total
+
+
+2) iASL Compiler/Disassembler and Tools:
+
+Fixed a problem with the compilation of the GpioIo and GpioInt resource 
+descriptors. The _PIN field name was incorrectly defined to be an array 
+of 32-bit values, but the _PIN values are in fact 16 bits each. This 
+would cause incorrect bit width warnings when using Word (16-bit) fields 
+to access the descriptors.
+
+
+----------------------------------------
+18 December 2015. Summary of changes for version 20151218:
+
+1) ACPICA kernel-resident subsystem:
+
+Implemented per-AML-table execution of "module-level code" as individual 
+ACPI tables are loaded into the namespace during ACPICA initialization. 
+In other words, any module-level code within an AML table is executed 
+immediately after the table is loaded, instead of batched and executed 
+after all of the tables have been loaded. This provides compatibility 
+with other ACPI implementations. ACPICA BZ 1219. Bob Moore, Lv Zheng, 
+David Box.
+
+To fully support the feature above, the default operation region handlers 
+for the SystemMemory, SystemIO, and PCI_Config address spaces are now 
+installed before any ACPI tables are loaded. This enables module-level 
+code to access these address spaces during the table load and module-
+level code execution phase. ACPICA BZ 1220. Bob Moore, Lv Zheng, David 
+Box.
+
+Implemented several changes to the internal _REG support in conjunction 
+with the changes above. Also, changes to the AcpiExec/AcpiNames/Examples 
+utilities for the changes above. Although these tools were changed, host 
+operating systems that simply use the default handlers for SystemMemory, 
+SystemIO, and PCI_Config spaces should not require any update. Lv Zheng.
+
+For example, in the code below, DEV1 is conditionally added to the 
+namespace by the DSDT via module-level code that accesses an operation 
+region. The SSDT references DEV1 via the Scope operator. DEV1 must be 
+created immediately after the DSDT is loaded in order for the SSDT to 
+successfully reference DEV1. Previously, this code would cause an 
+AE_NOT_EXIST exception during the load of the SSDT. Now, this code is 
+fully supported by ACPICA.
+
+    DefinitionBlock ("", "DSDT", 2, "Intel", "DSDT1", 1)
+    {
+        OperationRegion (OPR1, SystemMemory, 0x400, 32)
+        Field (OPR1, AnyAcc, NoLock, Preserve)
+        {
+            FLD1, 1
+        }
+        If (FLD1)
+        {
+            Device (\DEV1)
+            {
+            }
+        }
+    }
+    DefinitionBlock ("", "SSDT", 2, "Intel", "SSDT1", 1)
+    {
+        External (\DEV1, DeviceObj)
+        Scope (\DEV1)
+        {
+        }
+    }
+
+Fixed an AML interpreter problem where control method invocations were 
+not handled correctly when the invocation was itself a SuperName argument 
+to another ASL operator. In these cases, the method was not invoked. 
+ACPICA BZ 1002. Affects the following ASL operators that have a SuperName 
+argument:
+    Store
+    Acquire, Wait
+    CondRefOf, RefOf
+    Decrement, Increment
+    Load, Unload
+    Notify
+    Signal, Release, Reset
+    SizeOf
+
+Implemented automatic String-to-ObjectReference conversion support for 
+packages returned by predefined names (such as _DEP). A common BIOS error 
+is to add double quotes around an ObjectReference namepath, which turns 
+the reference into an unexpected string object. This support detects the 
+problem and corrects it before the package is returned to the caller that 
+invoked the method. Lv Zheng.
+
+Implemented extensions to the Concatenate operator. Concatenate now 
+accepts any type of object, it is not restricted to simply 
+Integer/String/Buffer. For objects other than these 3 basic data types, 
+the argument is treated as a string containing the name of the object 
+type. This expands the utility of Concatenate and the Printf/Fprintf 
+macros. ACPICA BZ 1222.
+
+Cleaned up the output of the ASL Debug object. The timer() value is now 
+optional and no longer emitted by default. Also, the basic data types of 
+Integer/String/Buffer are simply emitted as their values, without a data 
+type string -- since the data type is obvious from the output. ACPICA BZ 
+1221.
+
+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: 102.6K Code, 28.4K Data, 131.0K Total
+    Debug Version:     200.3K Code, 81.9K Data, 282.3K Total
+  Previous Release:
+    Non-Debug Version: 102.0K Code, 28.3K Data, 130.3K Total
+    Debug Version:     199.6K Code, 81.8K Data, 281.4K Total
+
+
+2) iASL Compiler/Disassembler and Tools:
+
+iASL: Fixed some issues with the ASL Include() operator. This operator 
+was incorrectly defined in the iASL parser rules, causing a new scope to 
+be opened for the code within the include file. This could lead to 
+several issues, including allowing ASL code that is technically illegal 
+and not supported by AML interpreters. Note, this does not affect the 
+related #include preprocessor operator. ACPICA BZ 1212.
+
+iASL/Disassembler: Implemented support for the ASL ElseIf operator. This 
+operator is essentially an ASL macro since there is no AML opcode 
+associated with it. The code emitted by the iASL compiler for ElseIf is 
+an Else opcode followed immediately by an If opcode. The disassembler 
+will now emit an ElseIf if it finds an Else immediately followed by an 
+If. This simplifies the decoded ASL, especially for deeply nested 
+If..Else and large Switch constructs. Thus, the disassembled code more 
+closely follows the original source ASL. ACPICA BZ 1211. Example:
+
+    Old disassembly:
+        Else
+        {
+            If (Arg0 == 0x02)
+            {
+                Local0 = 0x05
+            }
+        }
+
+    New disassembly:
+        ElseIf (Arg0 == 0x02)
+        {
+            Local0 = 0x05
+        }
+
+AcpiExec: Added support for the new module level code behavior and the 
+early region installation. This required a small change to the 
+initialization, since AcpiExec must install its own operation region 
+handlers.
+
+AcpiExec: Added support to make the debug object timer optional. Default 
+is timer disabled. This cleans up the debug object output -- the timer 
+data is rarely used.
+
+AcpiExec: Multiple ACPI tables are now loaded in the order that they 
+appear on the command line. This can be important when there are 
+interdependencies/references between the tables.
+
+iASL/Templates. Add support to generate template files with multiple 
+SSDTs within a single output file. Also added ommand line support to 
+specify the number of SSDTs (in addition to a single DSDT). ACPICA BZ 
+1223, 1225.
+
+
+----------------------------------------
+24 November 2015. Summary of changes for version 20151124:
 
 1) ACPICA kernel-resident subsystem:
 
@@ -79,6 +270,7 @@ object defined in an SSDT. The DSDT is always loaded into the namespace
 first, so any attempt to open a Scope on an SSDT object will fail at 
 runtime.
 
+
 ----------------------------------------
 30 September 2015. Summary of changes for version 20150930:
 
@@ -171,6 +363,7 @@ possible compiler output files when building the test suite -- thus
 exercising these features of the compiler. These files are automatically 
 deleted when the test suite exits.
 
+
 ----------------------------------------
 18 August 2015. Summary of changes for version 20150818:
 
@@ -255,6 +448,7 @@ the command is entered with no arguments.
 
 AcpiNames: Add -x option to specify debug level, similar to AcpiExec.
 
+
 ----------------------------------------
 17 July 2015. Summary of changes for version 20150717:
 
@@ -511,6 +705,7 @@ directives.
 AcpiHelp: Added a new option, -t, to display all known/supported ACPI 
 tables.
 
+
 ----------------------------------------
 10 April 2015. Summary of changes for version 20150410:
 
@@ -518,6 +713,7 @@ Reverted a change introduced in version 20150408 that caused
 a regression in the disassembler where incorrect operator
 symbols could be emitted.
 
+
 ----------------------------------------
 08 April 2015. Summary of changes for version 20150408:
 
@@ -590,6 +786,7 @@ Debugger: Removed some unused global variables.
 
 Tests: Updated the makefile for proper generation of the AAPITS suite.
 
+
 ----------------------------------------
 04 February 2015. Summary of changes for version 20150204:
 
@@ -630,7 +827,8 @@ David Box
     Non-Debug Version: 101.7K Code, 27.9K Data, 129.6K Total
     Debug Version:     199.2K Code, 82.4K Data, 281.6K Total
 
-----------------------------------------
+--
+--------------------------------------
 07 November 2014. Summary of changes for version 20141107:
 
 This release is available at https://acpica.org/downloads
@@ -1134,6 +1332,7 @@ Disassembler: Cleaned up a block of code that extracts a parent Op
 object. Added a comment that explains that the parent is guaranteed to be 
 valid in this case. ACPICA BZ 1069.
 
+
 ----------------------------------------
 24 April 2014. Summary of changes for version 20140424:
 
@@ -1201,6 +1400,7 @@ checking and take care not to reset terminal attributes on exit if they
 were never set. This should help guarantee that the terminal is always 
 left in the previous state on program exit.
 
+
 ----------------------------------------
 25 March 2014. Summary of changes for version 20140325:
 
@@ -1301,6 +1501,7 @@ AcpiBin utility:
 is made obsolete by the AcpiXtract utility.
 2) General cleanup of open files and allocated buffers.
 
+
 ----------------------------------------
 14 February 2014. Summary of changes for version 20140214:
 
@@ -1366,6 +1567,7 @@ iASL: Removed the obsolete -g option to obtain ACPI tables from the
 Windows registry. This feature has been superseded by the acpidump 
 utility. 
 
+
 ----------------------------------------
 14 January 2014. Summary of changes for version 20140114:
 
@@ -1442,6 +1644,7 @@ Debugger: Added the "test predefined" command. This change makes this
 test public and puts it under the new "test" command. The test executes 
 each and every predefined name within the current namespace.
 
+
 ----------------------------------------
 18 December 2013. Summary of changes for version 20131218:
 
@@ -1544,6 +1747,7 @@ that it builds to an actual working program, not just example code. Added
 ACPI tables and execution of an example control method in the DSDT. Added 
 makefile support for Unix generation.
 
+
 ----------------------------------------
 15 November 2013. Summary of changes for version 20131115:
 
index b94adf8..2c69c23 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
 /* Local prototypes */
 
 static ACPI_STATUS
-AcpiAcGetOneTableFromFile (
+AcGetOneTableFromFile (
     char                    *Filename,
     FILE                    *File,
     UINT8                   GetOnlyAmlTables,
     ACPI_TABLE_HEADER       **Table);
 
 static ACPI_STATUS
-AcpiAcCheckTextModeCorruption (
+AcCheckTextModeCorruption (
     ACPI_TABLE_HEADER       *Table);
 
 
 /*******************************************************************************
  *
- * FUNCTION:    AcpiAcGetAllTablesFromFile
+ * FUNCTION:    AcGetAllTablesFromFile
  *
  * PARAMETERS:  Filename            - Table filename
  *              GetOnlyAmlTables    - TRUE if the tables must be AML tables
@@ -81,7 +81,7 @@ AcpiAcCheckTextModeCorruption (
  ******************************************************************************/
 
 ACPI_STATUS
-AcpiAcGetAllTablesFromFile (
+AcGetAllTablesFromFile (
     char                    *Filename,
     UINT8                   GetOnlyAmlTables,
     ACPI_NEW_TABLE_DESC     **ReturnListHead)
@@ -115,19 +115,36 @@ AcpiAcGetAllTablesFromFile (
         return (AE_ERROR);
     }
 
-    if (FileSize < 4)
+    fprintf (stderr,
+        "Input file %s, Length 0x%X (%u) bytes\n",
+        Filename, FileSize, FileSize);
+
+    /* We must have at least one ACPI table header */
+
+    if (FileSize < sizeof (ACPI_TABLE_HEADER))
     {
         return (AE_BAD_HEADER);
     }
 
+    /* Check for an non-binary file */
+
+    if (!AcIsFileBinary (File))
+    {
+        fprintf (stderr,
+            "    %s: File does not appear to contain a valid AML table\n",
+            Filename);
+        return (AE_TYPE);
+    }
+
     /* Read all tables within the file */
 
     while (ACPI_SUCCESS (Status))
     {
         /* Get one entire ACPI table */
 
-        Status = AcpiAcGetOneTableFromFile (
+        Status = AcGetOneTableFromFile (
             Filename, File, GetOnlyAmlTables, &Table);
+
         if (Status == AE_CTRL_TERMINATE)
         {
             Status = AE_OK;
@@ -135,13 +152,20 @@ AcpiAcGetAllTablesFromFile (
         }
         else if (Status == AE_TYPE)
         {
-            continue;
+            return (AE_OK);
         }
         else if (ACPI_FAILURE (Status))
         {
             return (Status);
         }
 
+        /* Print table header for iASL/disassembler only */
+
+#ifdef ACPI_ASL_COMPILER
+
+            AcpiTbPrintTableHeader (0, Table);
+#endif
+
         /* Allocate and link a table descriptor */
 
         TableDesc = AcpiOsAllocate (sizeof (ACPI_NEW_TABLE_DESC));
@@ -186,7 +210,7 @@ AcpiAcGetAllTablesFromFile (
 
 /*******************************************************************************
  *
- * FUNCTION:    AcpiAcGetOneTableFromFile
+ * FUNCTION:    AcGetOneTableFromFile
  *
  * PARAMETERS:  Filename            - File where table is located
  *              File                - Open FILE pointer to Filename
@@ -204,7 +228,7 @@ AcpiAcGetAllTablesFromFile (
  ******************************************************************************/
 
 static ACPI_STATUS
-AcpiAcGetOneTableFromFile (
+AcGetOneTableFromFile (
     char                    *Filename,
     FILE                    *File,
     UINT8                   GetOnlyAmlTables,
@@ -214,21 +238,28 @@ AcpiAcGetOneTableFromFile (
     ACPI_TABLE_HEADER       TableHeader;
     ACPI_TABLE_HEADER       *Table;
     INT32                   Count;
-    long                    Position;
+    long                    TableOffset;
 
 
     *ReturnTable = NULL;
 
+    /* Get the table header to examine signature and length */
 
-    /* Get just the table header to get signature and length */
-
-    Position = ftell (File);
+    TableOffset = ftell (File);
     Count = fread (&TableHeader, 1, sizeof (ACPI_TABLE_HEADER), File);
     if (Count != sizeof (ACPI_TABLE_HEADER))
     {
         return (AE_CTRL_TERMINATE);
     }
 
+    /* Validate the table signature/header (limited ASCII chars) */
+
+    Status = AcValidateTableHeader (File, TableOffset);
+    if (ACPI_FAILURE (Status))
+    {
+        return (Status);
+    }
+
     if (GetOnlyAmlTables)
     {
         /* Table must be an AML table (DSDT/SSDT) or FADT */
@@ -237,7 +268,7 @@ AcpiAcGetOneTableFromFile (
             !AcpiUtIsAmlTable (&TableHeader))
         {
             fprintf (stderr,
-                "    %s: [%4.4s] is not an AML table - ignoring\n",
+                "    %s: Table [%4.4s] is not an AML table - ignoring\n",
                 Filename, TableHeader.Signature);
 
             return (AE_TYPE);
@@ -252,9 +283,9 @@ AcpiAcGetOneTableFromFile (
         return (AE_NO_MEMORY);
     }
 
-    /* Now read the entire table */
+    /* Read the entire ACPI table, including header */
 
-    fseek (File, Position, SEEK_SET);
+    fseek (File, TableOffset, SEEK_SET);
 
     Count = fread (Table, 1, TableHeader.Length, File);
     if (Count != (INT32) TableHeader.Length)
@@ -268,18 +299,13 @@ AcpiAcGetOneTableFromFile (
     Status = AcpiTbVerifyChecksum (Table, TableHeader.Length);
     if (ACPI_FAILURE (Status))
     {
-        Status = AcpiAcCheckTextModeCorruption (Table);
+        Status = AcCheckTextModeCorruption (Table);
         if (ACPI_FAILURE (Status))
         {
             goto ErrorExit;
         }
     }
 
-    fprintf (stderr,
-        "Loading ACPI table [%4.4s] from file %12s - Length 0x%06X (%u)\n",
-        TableHeader.Signature, Filename,
-        TableHeader.Length, TableHeader.Length);
-
     *ReturnTable = Table;
     return (AE_OK);
 
@@ -292,7 +318,159 @@ ErrorExit:
 
 /*******************************************************************************
  *
- * FUNCTION:    AcpiAcCheckTextModeCorruption
+ * FUNCTION:    AcIsFileBinary
+ *
+ * PARAMETERS:  File                - Open input file
+ *
+ * RETURN:      TRUE if file appears to be binary
+ *
+ * DESCRIPTION: Scan a file for any non-ASCII bytes.
+ *
+ * Note: Maintains current file position.
+ *
+ ******************************************************************************/
+
+BOOLEAN
+AcIsFileBinary (
+    FILE                    *File)
+{
+    UINT8                   Byte;
+    BOOLEAN                 IsBinary = FALSE;
+    long                    FileOffset;
+
+
+    /* Scan entire file for any non-ASCII bytes */
+
+    FileOffset = ftell (File);
+    while (fread (&Byte, 1, 1, File) == 1)
+    {
+        if (!isprint (Byte) && !isspace (Byte))
+        {
+            IsBinary = TRUE;
+            goto Exit;
+        }
+    }
+
+Exit:
+    fseek (File, FileOffset, SEEK_SET);
+    return (IsBinary);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcValidateTableHeader
+ *
+ * PARAMETERS:  File                - Open input file
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Determine if a file seems to contain one or more binary ACPI
+ *              tables, via the
+ *              following checks on what would be the table header:
+ *              1) File must be at least as long as an ACPI_TABLE_HEADER
+ *              2) There must be enough room in the file to hold entire table
+ *              3) Signature, OemId, OemTableId, AslCompilerId must be ASCII
+ *
+ * Note: There can be multiple definition blocks per file, so we cannot
+ * expect/compare the file size to be equal to the table length. 12/2015.
+ *
+ * Note: Maintains current file position.
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcValidateTableHeader (
+    FILE                    *File,
+    long                    TableOffset)
+{
+    ACPI_TABLE_HEADER       TableHeader;
+    size_t                  Actual;
+    long                    OriginalOffset;
+    UINT32                  FileSize;
+    UINT32                  i;
+
+
+    ACPI_FUNCTION_TRACE ("AcValidateTableHeader");
+
+
+    /* Read a potential table header */
+
+    OriginalOffset = ftell (File);
+    fseek (File, TableOffset, SEEK_SET);
+
+    Actual = fread (&TableHeader, 1, sizeof (ACPI_TABLE_HEADER), File);
+    fseek (File, OriginalOffset, SEEK_SET);
+
+    if (Actual < sizeof (ACPI_TABLE_HEADER))
+    {
+        return (AE_ERROR);
+    }
+
+    /* Validate the signature (limited ASCII chars) */
+
+    if (!AcpiIsValidSignature (TableHeader.Signature))
+    {
+        fprintf (stderr, "Invalid table signature: 0x%8.8X\n",
+            *ACPI_CAST_PTR (UINT32, TableHeader.Signature));
+        return (AE_BAD_SIGNATURE);
+    }
+
+    /* Validate table length against bytes remaining in the file */
+
+    FileSize = CmGetFileSize (File);
+    if (TableHeader.Length > (UINT32) (FileSize - TableOffset))
+    {
+        fprintf (stderr, "Table [%4.4s] is too long for file - "
+            "needs: 0x%.2X, remaining in file: 0x%.2X\n",
+            TableHeader.Signature, TableHeader.Length,
+            (UINT32) (FileSize - TableOffset));
+        return (AE_BAD_HEADER);
+    }
+
+    /*
+     * These fields must be ASCII: OemId, OemTableId, AslCompilerId.
+     * We allow a NULL terminator in OemId and OemTableId.
+     */
+    for (i = 0; i < ACPI_NAME_SIZE; i++)
+    {
+        if (!ACPI_IS_ASCII ((UINT8) TableHeader.AslCompilerId[i]))
+        {
+            goto BadCharacters;
+        }
+    }
+
+    for (i = 0; (i < ACPI_OEM_ID_SIZE) && (TableHeader.OemId[i]); i++)
+    {
+        if (!ACPI_IS_ASCII ((UINT8) TableHeader.OemId[i]))
+        {
+            goto BadCharacters;
+        }
+    }
+
+    for (i = 0; (i < ACPI_OEM_TABLE_ID_SIZE) && (TableHeader.OemTableId[i]); i++)
+    {
+        if (!ACPI_IS_ASCII ((UINT8) TableHeader.OemTableId[i]))
+        {
+            goto BadCharacters;
+        }
+    }
+
+    return (AE_OK);
+
+
+BadCharacters:
+
+    ACPI_WARNING ((AE_INFO,
+        "Table header for [%4.4s] has invalid ASCII character(s)",
+        TableHeader.Signature));
+    return (AE_OK);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcCheckTextModeCorruption
  *
  * PARAMETERS:  Table           - Table buffer starting with table header
  *
@@ -305,7 +483,7 @@ ErrorExit:
  ******************************************************************************/
 
 static ACPI_STATUS
-AcpiAcCheckTextModeCorruption (
+AcCheckTextModeCorruption (
     ACPI_TABLE_HEADER       *Table)
 {
     UINT32                  i;
index 2273db4..b08fb63 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 902521f..78f29fd 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 33500d6..bb83ab6 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -192,10 +192,12 @@ AdAmlDisassemble (
     {
         /* Get the list of all AML tables in the file */
 
-        Status = AcpiAcGetAllTablesFromFile (Filename,
+        Status = AcGetAllTablesFromFile (Filename,
             ACPI_GET_ALL_TABLES, &ListHead);
         if (ACPI_FAILURE (Status))
         {
+            AcpiOsPrintf ("Could not get ACPI tables from %s, %s\n",
+                Filename, AcpiFormatException (Status));
             return (Status);
         }
 
@@ -281,13 +283,12 @@ AdAmlDisassemble (
 
 Cleanup:
 
-// check!
-#if 0
-    if (Table && !AcpiGbl_ForceAmlDisassembly && !AcpiUtIsAmlTable (Table))
+    if (Table &&
+        !AcpiGbl_ForceAmlDisassembly &&
+        !AcpiUtIsAmlTable (Table))
     {
         ACPI_FREE (Table);
     }
-#endif
 
     if (File)
     {
@@ -592,7 +593,7 @@ AdDoExternalFileList (
         AcpiOsPrintf ("External object resolution file %16s\n",
             ExternalFilename);
 
-        Status = AcpiAcGetAllTablesFromFile (
+        Status = AcGetAllTablesFromFile (
             ExternalFilename, ACPI_GET_ONLY_AML_TABLES, &ExternalListHead);
         if (ACPI_FAILURE (Status))
         {
index 4149909..daa3929 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 0c0fc41..2a5fdc7 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 8518249..845e685 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 3b1d544..beb64c8 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index a264ccb..ec75624 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index cc100b4..d9df6bc 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index e09550b..403e684 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index d051660..310ddac 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index b66734c..b66f2d8 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 0313068..5df4457 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 2ae3ca7..3c5ce77 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 3a02566..5ccea2a 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index e5b7217..f747e0d 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -47,6 +47,7 @@
  * Option strings:
  *    "f"       - Option has no arguments
  *    "f:"      - Option requires an argument
+ *    "f+"      - Option has an optional argument
  *    "f^"      - Option has optional single-char sub-options
  *    "f|"      - Option has required single-char sub-options
  */
index fd71763..45ca35c 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index f164e98..8a1d57d 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -42,6 +42,7 @@
  */
 
 #include "aslcompiler.h"
+#include <actables.h>
 #include <acapps.h>
 
 #define _COMPONENT          ACPI_COMPILER
@@ -63,90 +64,7 @@ FlConsumeNewComment (
 
 /*******************************************************************************
  *
- * FUNCTION:    FlCheckForAcpiTable
- *
- * PARAMETERS:  Handle              - Open input file
- *
- * RETURN:      Status
- *
- * DESCRIPTION: Determine if a file seems to be a binary ACPI table, via the
- *              following checks on what would be the table header:
- *              0) File must be at least as long as an ACPI_TABLE_HEADER
- *              1) The header length field must match the file size
- *              2) Signature, OemId, OemTableId, AslCompilerId must be ASCII
- *
- ******************************************************************************/
-
-ACPI_STATUS
-FlCheckForAcpiTable (
-    FILE                    *Handle)
-{
-    ACPI_TABLE_HEADER       Table;
-    UINT32                  FileSize;
-    size_t                  Actual;
-    UINT32                  i;
-
-
-    /* Read a potential table header */
-
-    Actual = fread (&Table, 1, sizeof (ACPI_TABLE_HEADER), Handle);
-    fseek (Handle, 0, SEEK_SET);
-
-    if (Actual < sizeof (ACPI_TABLE_HEADER))
-    {
-        return (AE_ERROR);
-    }
-
-    /* Header length field must match the file size */
-
-    FileSize = CmGetFileSize (Handle);
-    if (Table.Length != FileSize)
-    {
-        return (AE_ERROR);
-    }
-
-    /*
-     * These fields must be ASCII:
-     * Signature, OemId, OemTableId, AslCompilerId.
-     * We allow a NULL terminator in OemId and OemTableId.
-     */
-    for (i = 0; i < ACPI_NAME_SIZE; i++)
-    {
-        if (!ACPI_IS_ASCII ((UINT8) Table.Signature[i]))
-        {
-            return (AE_ERROR);
-        }
-
-        if (!ACPI_IS_ASCII ((UINT8) Table.AslCompilerId[i]))
-        {
-            return (AE_ERROR);
-        }
-    }
-
-    for (i = 0; (i < ACPI_OEM_ID_SIZE) && (Table.OemId[i]); i++)
-    {
-        if (!ACPI_IS_ASCII ((UINT8) Table.OemId[i]))
-        {
-            return (AE_ERROR);
-        }
-    }
-
-    for (i = 0; (i < ACPI_OEM_TABLE_ID_SIZE) && (Table.OemTableId[i]); i++)
-    {
-        if (!ACPI_IS_ASCII ((UINT8) Table.OemTableId[i]))
-        {
-            return (AE_ERROR);
-        }
-    }
-
-    printf ("Binary file appears to be a valid ACPI table, disassembling\n");
-    return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION:    FlCheckForAscii
+ * FUNCTION:    FlIsFileAsciiSource
  *
  * PARAMETERS:  Filename            - Full input filename
  *              DisplayErrors       - TRUE if error messages desired
@@ -163,7 +81,7 @@ FlCheckForAcpiTable (
  ******************************************************************************/
 
 ACPI_STATUS
-FlCheckForAscii (
+FlIsFileAsciiSource (
     char                    *Filename,
     BOOLEAN                 DisplayErrors)
 {
index ed54635..7ac4ca7 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index cb3a4a5..08fcc37 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index a564f86..4b8f15e 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index dfe80c1..721abe4 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -167,11 +167,7 @@ CmDeleteCaches (
  * aslascii - ascii support
  */
 ACPI_STATUS
-FlCheckForAcpiTable (
-    FILE                    *Handle);
-
-ACPI_STATUS
-FlCheckForAscii (
+FlIsFileAsciiSource (
     char                    *Filename,
     BOOLEAN                 DisplayErrors);
 
@@ -740,6 +736,10 @@ void
 TrSetEndLineNumber (
     ACPI_PARSE_OBJECT       *Op);
 
+void
+TrSetCurrentFilename (
+    ACPI_PARSE_OBJECT       *Op);
+
 void
 TrWalkTree (
     void);
@@ -923,6 +923,10 @@ DbgPrint (
 #define ASL_PARSE_OUTPUT    1
 #define ASL_TREE_OUTPUT     2
 
+BOOLEAN
+UtQueryForOverwrite (
+    char                    *Pathname);
+
 void
 UtDisplaySupportedTables (
     void);
@@ -1281,6 +1285,6 @@ DtDoCompile(
 
 ACPI_STATUS
 DtCreateTemplates (
-    char                    *Signature);
+    char                    **argv);
 
 #endif /*  __ASLCOMPILER_H */
index b9796a6..a34387c 100644 (file)
@@ -6,7 +6,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 70524fd..62a7b65 100644 (file)
@@ -6,7 +6,7 @@ NoEcho('
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 64ecff3..b42bae2 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
 
 /* Types for input files */
 
-#define ASL_INPUT_TYPE_BINARY       0
-#define ASL_INPUT_TYPE_ACPI_TABLE   1
-#define ASL_INPUT_TYPE_ASCII_ASL    2
-#define ASL_INPUT_TYPE_ASCII_DATA   3
+#define ASL_INPUT_TYPE_BINARY               0
+#define ASL_INPUT_TYPE_BINARY_ACPI_TABLE    1
+#define ASL_INPUT_TYPE_ASCII_ASL            2
+#define ASL_INPUT_TYPE_ASCII_DATA           3
 
 
 /* Misc */
index 2c0516a..dfb6676 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 676eaf1..40f3562 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 3ef1be0..0d1c794 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -336,6 +336,7 @@ FlOpenIncludeWithPrefix (
      */
     Gbl_CurrentLineNumber--;
     OriginalLineNumber = Gbl_CurrentLineNumber;
+
     while (DtGetNextLine (IncludeFile, DT_ALLOW_MULTILINE_QUOTES) != ASL_EOF)
     {
         if (Gbl_CurrentLineBuffer[0] == '#')
@@ -344,6 +345,7 @@ FlOpenIncludeWithPrefix (
                 Op, "use #include instead");
         }
     }
+
     Gbl_CurrentLineNumber = OriginalLineNumber;
 
     /* Must seek back to the start of the file */
@@ -570,7 +572,7 @@ FlOpenMiscOutputFiles (
 
     /* All done for disassembler */
 
-    if (Gbl_FileType == ASL_INPUT_TYPE_ACPI_TABLE)
+    if (Gbl_FileType == ASL_INPUT_TYPE_BINARY_ACPI_TABLE)
     {
         return (AE_OK);
     }
index 276b963..9f219d9 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index e78e58f..1fb7935 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -197,6 +197,7 @@ ASL_EXTERN char                     ASL_INIT_GLOBAL (*Gbl_OutputFilenamePrefix,
 ASL_EXTERN ASL_INCLUDE_DIR          ASL_INIT_GLOBAL (*Gbl_IncludeDirList, NULL);
 ASL_EXTERN char                     *Gbl_CurrentInputFilename;
 ASL_EXTERN char                     ASL_INIT_GLOBAL (*Gbl_ExternalRefFilename, NULL);
+ASL_EXTERN char                     ASL_INIT_GLOBAL (*Gbl_PreviousIncludeFilename, NULL);
 
 ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_HasIncludeFiles, FALSE);
 
@@ -246,7 +247,6 @@ ASL_EXTERN ASL_LISTING_NODE         ASL_INIT_GLOBAL (*Gbl_ListingNode, NULL);
 ASL_EXTERN ACPI_PARSE_OBJECT        *Gbl_FirstLevelInsertionNode;
 ASL_EXTERN UINT8                    ASL_INIT_GLOBAL (Gbl_FileType, 0);
 ASL_EXTERN char                     ASL_INIT_GLOBAL (*Gbl_Signature, NULL);
-ASL_EXTERN char                     *Gbl_TemplateSignature;
 
 ASL_EXTERN UINT32                   ASL_INIT_GLOBAL (Gbl_CurrentHexColumn, 0);
 ASL_EXTERN UINT32                   ASL_INIT_GLOBAL (Gbl_CurrentAmlOffset, 0);
index 185845c..afa395e 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 0399124..0cea63c 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 91ddcac..4923b73 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -277,6 +277,34 @@ LsTreeWriteWalk (
 
     UtPrintFormattedName (Op->Asl.ParseOpcode, Level);
 
+    if (Op->Asl.ParseOpcode == PARSEOP_NAMESEG)
+    {
+        DbgPrint (ASL_TREE_OUTPUT,
+            "%10.4s      ", Op->Asl.Value.Name);
+    }
+    else if ((Op->Asl.ParseOpcode == PARSEOP_NAMESTRING) ||
+        (Op->Asl.ParseOpcode == PARSEOP_METHODCALL))
+    {
+        DbgPrint (ASL_TREE_OUTPUT,
+            "%10.32s      ", Op->Asl.Value.String);
+    }
+    else if (Op->Asl.ParseOpcode == PARSEOP_INCLUDE)
+    {
+        DbgPrint (ASL_TREE_OUTPUT,
+            "Open: %s\n", Op->Asl.Value.String);
+        return (AE_OK);
+    }
+    else if (Op->Asl.ParseOpcode == PARSEOP_INCLUDE_END)
+    {
+        DbgPrint (ASL_TREE_OUTPUT,
+            "Close: %s\n", Op->Asl.Filename);
+        return (AE_OK);
+    }
+    else
+    {
+        DbgPrint (ASL_TREE_OUTPUT, "                ");
+    }
+
     DbgPrint (ASL_TREE_OUTPUT, "    (%.4X) Flags %8.8X",
         Op->Asl.ParseOpcode, Op->Asl.CompileFlags);
     TrPrintNodeCompileFlags (Op->Asl.CompileFlags);
@@ -428,7 +456,7 @@ LsWriteNodeToListing (
 
         /* Create a new listing node and push it */
 
-        LsPushNode (Op->Asl.Child->Asl.Value.String);
+        LsPushNode (Op->Asl.Value.String);
         return;
 
 
index c073c1f..daae21b 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 8da8b80..f36bee8 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 49b4901..c10959f 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index c0a3d3f..cc7764a 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -127,7 +127,8 @@ Usage (
     printf ("\nGeneral:\n");
     ACPI_OPTION ("-@ <file>",       "Specify command file");
     ACPI_OPTION ("-I <dir>",        "Specify additional include directory");
-    ACPI_OPTION ("-T <sig>|ALL|*",  "Create table template file for ACPI <Sig>");
+    ACPI_OPTION ("-T <sig list>|ALL",   "Create ACPI table template/example files");
+    ACPI_OPTION ("-T <count>",      "Emit DSDT and <count> SSDTs to same file");
     ACPI_OPTION ("-p <prefix>",     "Specify path/filename prefix for all output files");
     ACPI_OPTION ("-v",              "Display compiler version");
     ACPI_OPTION ("-vo",             "Enable optimization comments");
index a69d5c0..dec6320 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -313,7 +313,7 @@ const ASL_MAPPING_ENTRY     AslKeywordMapping [] =
 /* NOR */                       OP_TABLE_ENTRY (AML_BIT_NOR_OP,             0,                              0,                  ACPI_BTYPE_INTEGER),
 /* NOT */                       OP_TABLE_ENTRY (AML_BIT_NOT_OP,             0,                              0,                  ACPI_BTYPE_INTEGER),
 /* NOTIFY */                    OP_TABLE_ENTRY (AML_NOTIFY_OP,              0,                              0,                  0),
-/* OBJECTTYPE */                OP_TABLE_ENTRY (AML_TYPE_OP,                0,                              0,                  ACPI_BTYPE_INTEGER),
+/* OBJECTTYPE */                OP_TABLE_ENTRY (AML_OBJECT_TYPE_OP,         0,                              0,                  ACPI_BTYPE_INTEGER),
 /* OBJECTTYPE_BFF */            OP_TABLE_ENTRY (AML_BYTE_OP,                ACPI_TYPE_BUFFER_FIELD,         0,                  0),
 /* OBJECTTYPE_BUF */            OP_TABLE_ENTRY (AML_BYTE_OP,                ACPI_TYPE_BUFFER,               0,                  0),
 /* OBJECTTYPE_DDB */            OP_TABLE_ENTRY (AML_BYTE_OP,                ACPI_TYPE_DDB_HANDLE,           0,                  0),
index 06a8623..e4ab4f2 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 4d2e0e9..c17b69c 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 2920d85..ebdab7d 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 244e72e..8cf0e78 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 440513f..0ee063f 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index bf3a683..a5c02b1 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 4be3981..9a2bc14 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index b1e6f5a..0e55c6b 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 29e9d79..fcc6113 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -1510,7 +1510,6 @@ OpcGenerateAmlOpcode (
 
     case PARSEOP_INCLUDE:
 
-        Op->Asl.Child->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG;
         Gbl_HasIncludeFiles = TRUE;
         break;
 
index cdef7fa..2d33514 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 05af0be..d39e2cb 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 2473a8d..ca392b6 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -107,7 +107,7 @@ AslCommandLine (
 
     if (Gbl_DoTemplates)
     {
-        Status = DtCreateTemplates (Gbl_TemplateSignature);
+        Status = DtCreateTemplates (argv);
         if (ACPI_FAILURE (Status))
         {
             exit (-1);
@@ -662,7 +662,6 @@ AslDoOptions (
     case 'T':   /* Create a ACPI table template file */
 
         Gbl_DoTemplates = TRUE;
-        Gbl_TemplateSignature = AcpiGbl_Optarg;
         break;
 
     case 'v':   /* Version and verbosity settings */
index d80316c..00718e4 100644 (file)
@@ -6,7 +6,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 7dd10b5..f18befa 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index ff80b57..f82b4e3 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index fc32d0f..c27114c 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index a797d2e..f15c17a 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 895d69c..001d110 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 5e8ccde..fcde7e5 100644 (file)
@@ -6,7 +6,7 @@ NoEcho('
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 3f967ca..4bd9059 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 07fc146..0f38e40 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 4a01795..b75c118 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index caca601..c7841b0 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index eec1247..fc07366 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 229daae..c8d8cab 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index c7d5455..dcf0d7b 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -435,7 +435,7 @@ RsDoGpioIntDescriptor (
 
         default:
             /*
-             * PINs come through here, repeatedly. Each PIN must be a DWORD.
+             * PINs come through here, repeatedly. Each PIN must be a WORD.
              * NOTE: there is no "length" field for this, so from ACPI spec:
              *  The number of pins in the table can be calculated from:
              *  PinCount = (Resource Source Name Offset - Pin Table Offset) / 2
@@ -464,7 +464,7 @@ RsDoGpioIntDescriptor (
 
                 /* Create a named field at the start of the list */
 
-                RsCreateDwordField (InitializerOp, ACPI_RESTAG_PIN,
+                RsCreateWordField (InitializerOp, ACPI_RESTAG_PIN,
                     CurrentByteOffset + Descriptor->Gpio.PinTableOffset);
             }
             break;
@@ -649,7 +649,7 @@ RsDoGpioIoDescriptor (
 
         default:
             /*
-             * PINs come through here, repeatedly. Each PIN must be a DWORD.
+             * PINs come through here, repeatedly. Each PIN must be a WORD.
              * NOTE: there is no "length" field for this, so from ACPI spec:
              *  The number of pins in the table can be calculated from:
              *  PinCount = (Resource Source Name Offset - Pin Table Offset) / 2
@@ -678,7 +678,7 @@ RsDoGpioIoDescriptor (
 
                 /* Create a named field at the start of the list */
 
-                RsCreateDwordField (InitializerOp, ACPI_RESTAG_PIN,
+                RsCreateWordField (InitializerOp, ACPI_RESTAG_PIN,
                     CurrentByteOffset + Descriptor->Gpio.PinTableOffset);
             }
             break;
index 98257ad..0b88c70 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 79accf4..dcf3c22 100644 (file)
@@ -6,7 +6,7 @@ NoEcho('
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -427,6 +427,7 @@ String
 
 CompilerDirective
     : IncludeTerm                   {}
+    | IncludeEndTerm                {}
     | ExternalTerm                  {}
     ;
 
@@ -1033,14 +1034,13 @@ IfTerm
     ;
 
 IncludeTerm
-    : PARSEOP_INCLUDE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_INCLUDE);}
-        String  ')'                 {TrLinkChildren ($<n>3,1,$4);FlOpenIncludeFile ($4);}
-        TermList
-        IncludeEndTerm              {$$ = TrLinkPeerNodes (3,$<n>3,$7,$8);}
+    : PARSEOP_INCLUDE '('
+        String  ')'                 {$$ = TrUpdateNode (PARSEOP_INCLUDE, $3);
+                                        FlOpenIncludeFile ($3);}
     ;
 
 IncludeEndTerm
-    : PARSEOP_INCLUDE_END           {$$ = TrCreateLeafNode (PARSEOP_INCLUDE_END);}
+    : PARSEOP_INCLUDE_END           {$<n>$ = TrCreateLeafNode (PARSEOP_INCLUDE_END); TrSetCurrentFilename ($$);}
     ;
 
 IncTerm
index c04ae9c..df90ae5 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -144,62 +144,63 @@ AslDetectSourceFileType (
     ASL_FILE_INFO           *Info)
 {
     char                    *FileChar;
-    UINT8                   Type;
+    UINT8                   Type = ASL_INPUT_TYPE_ASCII_DATA; /* default */
     ACPI_STATUS             Status;
 
 
-    /* Check for a valid binary ACPI table */
+    /* Check for 100% ASCII source file (comments are ignored) */
 
-    Status = FlCheckForAcpiTable (Info->Handle);
+    Status = FlIsFileAsciiSource (Info->Filename, FALSE);
     if (ACPI_SUCCESS (Status))
     {
-        Type = ASL_INPUT_TYPE_ACPI_TABLE;
-        goto Cleanup;
-    }
+        /*
+         * File contains ASCII source code. Determine if this is an ASL
+         * file or an ACPI data table file.
+         */
+        while (fgets (Gbl_CurrentLineBuffer, Gbl_LineBufferSize, Info->Handle))
+        {
+            /* Uppercase the buffer for caseless compare */
 
-    /* Check for 100% ASCII source file (comments are ignored) */
+            FileChar = Gbl_CurrentLineBuffer;
+            while (*FileChar)
+            {
+                *FileChar = (char) toupper ((int) *FileChar);
+                FileChar++;
+            }
 
-    Status = FlCheckForAscii (Info->Filename, TRUE);
-    if (ACPI_FAILURE (Status))
-    {
-        printf ("Invalid characters in input file - %s\n", Info->Filename);
+            /* Presence of "DefinitionBlock" indicates actual ASL code */
 
-        if (!Gbl_IgnoreErrors)
-        {
-            Type = ASL_INPUT_TYPE_BINARY;
-            goto Cleanup;
+            if (strstr (Gbl_CurrentLineBuffer, "DEFINITIONBLOCK"))
+            {
+                /* Appears to be an ASL file */
+
+                Type = ASL_INPUT_TYPE_ASCII_ASL;
+                goto Cleanup;
+            }
         }
-    }
 
-    /*
-     * File is ASCII. Determine if this is an ASL file or an ACPI data
-     * table file.
-     */
-    while (fgets (Gbl_CurrentLineBuffer, Gbl_LineBufferSize, Info->Handle))
-    {
-        /* Uppercase the buffer for caseless compare */
+        /* Appears to be an ASCII data table source file */
 
-        FileChar = Gbl_CurrentLineBuffer;
-        while (*FileChar)
-        {
-            *FileChar = (char) toupper ((int) *FileChar);
-            FileChar++;
-        }
+        Type = ASL_INPUT_TYPE_ASCII_DATA;
+        goto Cleanup;
+    }
 
-        /* Presence of "DefinitionBlock" indicates actual ASL code */
+    /* We have some sort of binary table, check for valid ACPI table */
 
-        if (strstr (Gbl_CurrentLineBuffer, "DEFINITIONBLOCK"))
-        {
-            /* Appears to be an ASL file */
+    fseek (Info->Handle, 0, SEEK_SET);
 
-            Type = ASL_INPUT_TYPE_ASCII_ASL;
-            goto Cleanup;
-        }
+    Status = AcValidateTableHeader (Info->Handle, 0);
+    if (ACPI_SUCCESS (Status))
+    {
+        fprintf (stderr,
+            "Binary file appears to be a valid ACPI table, disassembling\n");
+
+        Type = ASL_INPUT_TYPE_BINARY_ACPI_TABLE;
+        goto Cleanup;
     }
 
-    /* Not an ASL source file, default to a data table source file */
+    Type = ASL_INPUT_TYPE_BINARY;
 
-    Type = ASL_INPUT_TYPE_ASCII_DATA;
 
 Cleanup:
 
@@ -248,7 +249,7 @@ AslDoDisassembly (
 
     /* Handle additional output files for disassembler */
 
-    Gbl_FileType = ASL_INPUT_TYPE_ACPI_TABLE;
+    Gbl_FileType = ASL_INPUT_TYPE_BINARY_ACPI_TABLE;
     Status = FlOpenMiscOutputFiles (Gbl_OutputFilenamePrefix);
 
     /* This is where the disassembly happens */
@@ -454,7 +455,7 @@ AslDoOneFile (
     /*
      * Binary ACPI table was auto-detected, disassemble it
      */
-    case ASL_INPUT_TYPE_ACPI_TABLE:
+    case ASL_INPUT_TYPE_BINARY_ACPI_TABLE:
 
         /* We have what appears to be an ACPI table, disassemble it */
 
index cd92033..e57df5e 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 0016626..deb9e9a 100644 (file)
@@ -6,7 +6,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -196,9 +196,13 @@ AslPopInputFileStack (
     ASL_FILE_NODE           *Fnode;
 
 
+    Gbl_PreviousIncludeFilename = Gbl_Files[ASL_FILE_INPUT].Filename;
     Fnode = Gbl_IncludeFileStack;
     DbgPrint (ASL_PARSE_OUTPUT,
-        "\nPop InputFile Stack, Fnode %p\n\n", Fnode);
+        "\nPop InputFile Stack, Fnode %p\n", Fnode);
+
+    DbgPrint (ASL_PARSE_OUTPUT,
+        "Include: Closing \"%s\"\n\n", Gbl_Files[ASL_FILE_INPUT].Filename);
 
     if (!Fnode)
     {
index ba81b7d..cd2605b 100644 (file)
@@ -6,7 +6,7 @@ NoEcho('
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 17ae28d..e7b161e 100644 (file)
@@ -6,7 +6,7 @@ NoEcho('
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index b2a0f39..607b1bb 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 0d80065..c6eb57b 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -155,12 +155,32 @@ TrReleaseNode (
 }
 
 
+/*******************************************************************************
+ *
+ * FUNCTION:    TrSetCurrentFilename
+ *
+ * PARAMETERS:  Op                  - An existing parse node
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Save the include file filename. Used for debug output only.
+ *
+ ******************************************************************************/
+
+void
+TrSetCurrentFilename (
+    ACPI_PARSE_OBJECT       *Op)
+{
+    Op->Asl.Filename = Gbl_PreviousIncludeFilename;
+}
+
+
 /*******************************************************************************
  *
  * FUNCTION:    TrUpdateNode
  *
  * PARAMETERS:  ParseOpcode         - New opcode to be assigned to the node
- *              Op                - An existing parse node
+ *              Op                  - An existing parse node
  *
  * RETURN:      The updated node
  *
index 4211767..a3a714b 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 7fa24a8..8d9c4d2 100644 (file)
@@ -6,7 +6,7 @@ NoEcho('
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 47851bd..82862af 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -46,7 +46,9 @@
 #include "acdisasm.h"
 #include "acnamesp.h"
 #include "amlcode.h"
-#include <acapps.h>
+#include "acapps.h"
+#include <sys/stat.h>
+
 
 #define _COMPONENT          ACPI_COMPILER
         ACPI_MODULE_NAME    ("aslutils")
@@ -65,6 +67,40 @@ UtAttachNameseg (
     char                    *Name);
 
 
+/******************************************************************************
+ *
+ * FUNCTION:    UtQueryForOverwrite
+ *
+ * PARAMETERS:  Pathname            - Output filename
+ *
+ * RETURN:      TRUE if file does not exist or overwrite is authorized
+ *
+ * DESCRIPTION: Query for file overwrite if it already exists.
+ *
+ ******************************************************************************/
+
+BOOLEAN
+UtQueryForOverwrite (
+    char                    *Pathname)
+{
+    struct stat             StatInfo;
+
+
+    if (!stat (Pathname, &StatInfo))
+    {
+        fprintf (stderr, "Target file \"%s\" already exists, overwrite? [y|n] ",
+            Pathname);
+
+        if (getchar () != 'y')
+        {
+            return (FALSE);
+        }
+    }
+
+    return (TRUE);
+}
+
+
 /*******************************************************************************
  *
  * FUNCTION:    UtDisplaySupportedTables
@@ -449,9 +485,11 @@ UtDisplaySummary (
             if (Gbl_Files[ASL_FILE_AML_OUTPUT].Handle)
             {
                 FlPrintFile (FileId,
-                    "%-14s %s - %u bytes, %u named objects, %u executable opcodes\n",
+                    "%-14s %s - %u bytes, %u named objects, "
+                    "%u executable opcodes\n",
                     "AML Output:",
-                    Gbl_Files[ASL_FILE_AML_OUTPUT].Filename, Gbl_TableLength,
+                    Gbl_Files[ASL_FILE_AML_OUTPUT].Filename,
+                    FlGetFileSize (ASL_FILE_AML_OUTPUT),
                     TotalNamedObjects, TotalExecutableOpcodes);
             }
         }
index ebb72c4..9a0fc5c 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 9485a0a..aa4f6ea 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -859,21 +859,8 @@ AnAnalyzeStoreOperator (
     case PARSEOP_DEREFOF:
     case PARSEOP_REFOF:
     case PARSEOP_INDEX:
-
-        return;
-
     case PARSEOP_METHODCALL:
-        /*
-         * A target is not allowed to be a method call.
-         * It is technically allowed to be a method call, but this only
-         * makes sense in one case: if the method returns a reference object,
-         * which will then allow the Store to complete successfully.
-         * However, this is not supported by the ACPICA interpreter,
-         * and not supported by the MS ASL compiler
-         * at this time. (09/2015)
-         */
-        AslError (ASL_ERROR, ASL_MSG_UNSUPPORTED,
-            TargetOperandOp, "Method invocation cannot be a target");
+
         return;
 
     default:
index 9a830e1..74038d9 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index a3f5ea7..704b55f 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index df7078d..8102e82 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 2ed6306..278b14f 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 72abe40..a34b8e1 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 25e60ba..a24ad34 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 3f4c2f3..f3a307a 100644 (file)
@@ -6,7 +6,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index f8bafbb..c4578e1 100644 (file)
@@ -6,7 +6,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 0d77483..f63082a 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index d482e8e..7b33e4d 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 1c3b0f2..353d84a 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index ec2a36f..9ebe3e5 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 622e201..0d286c0 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -56,15 +56,28 @@ static BOOLEAN
 AcpiUtIsSpecialTable (
     char                    *Signature);
 
+static ACPI_STATUS
+DtCreateOneTemplateFile (
+    char                    *Signature,
+    UINT32                  TableCount);
+
 static ACPI_STATUS
 DtCreateOneTemplate (
     char                    *Signature,
+    UINT32                  TableCount,
     const ACPI_DMTABLE_DATA *TableData);
 
 static ACPI_STATUS
 DtCreateAllTemplates (
     void);
 
+static int
+DtEmitDefinitionBlock (
+    FILE                    *File,
+    char                    *Filename,
+    char                    *Signature,
+    UINT32                  Instance);
+
 
 /*******************************************************************************
  *
@@ -101,7 +114,7 @@ AcpiUtIsSpecialTable (
  *
  * FUNCTION:    DtCreateTemplates
  *
- * PARAMETERS:  Signature           - ACPI table signature
+ * PARAMETERS:  argv                - Standard command line arguments
  *
  * RETURN:      Status
  *
@@ -111,32 +124,115 @@ AcpiUtIsSpecialTable (
 
 ACPI_STATUS
 DtCreateTemplates (
-    char                    *Signature)
+    char                    **argv)
 {
-    const ACPI_DMTABLE_DATA *TableData;
-    ACPI_STATUS             Status;
+    char                    *Signature;
+    char                    *End;
+    unsigned long           TableCount;
+    ACPI_STATUS             Status = AE_OK;
 
 
     AslInitializeGlobals ();
 
-    /* Default (no signature) is DSDT */
+    Status = AdInitialize ();
+    if (ACPI_FAILURE (Status))
+    {
+        return (Status);
+    }
+
+    /*
+     * Special cases for DSDT, ALL, and '*'
+     */
+
+    /* Default (no signature option) is DSDT */
 
-    if (!Signature)
+    if (AcpiGbl_Optind < 3)
     {
-        Signature = "DSDT";
-        goto GetTemplate;
+        Status = DtCreateOneTemplateFile (ACPI_SIG_DSDT, 0);
+        goto Exit;
     }
 
+    AcpiGbl_Optind--;
+    Signature = argv[AcpiGbl_Optind];
     AcpiUtStrupr (Signature);
-    if (!strcmp (Signature, "ALL") ||
-        !strcmp (Signature, "*"))
+
+    /*
+     * Multiple SSDT support (-T <ssdt count>)
+     */
+    TableCount = strtoul (Signature, &End, 0);
+    if (Signature != End)
+    {
+        /* The count is used for table ID and method name - max is 254(+1) */
+
+        if (TableCount > 254)
+        {
+            fprintf (stderr, "%u SSDTs requested, maximum is 254\n",
+                (unsigned int) TableCount);
+
+            Status = AE_LIMIT;
+            goto Exit;
+        }
+
+        Status = DtCreateOneTemplateFile (ACPI_SIG_DSDT, TableCount);
+        goto Exit;
+    }
+
+    if (!strcmp (Signature, "ALL"))
     {
         /* Create all available/known templates */
 
         Status = DtCreateAllTemplates ();
-        return (Status);
+        goto Exit;
+    }
+
+    /*
+     * Normal case: Create template for each signature
+     */
+    while (argv[AcpiGbl_Optind])
+    {
+        Signature = argv[AcpiGbl_Optind];
+        AcpiUtStrupr (Signature);
+
+        Status = DtCreateOneTemplateFile (Signature, 0);
+        if (ACPI_FAILURE (Status))
+        {
+            goto Exit;
+        }
+
+        AcpiGbl_Optind++;
     }
 
+
+Exit:
+    /* Shutdown ACPICA subsystem */
+
+    (void) AcpiTerminate ();
+    CmDeleteCaches ();
+    return (Status);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    DtCreateOneTemplateFile
+ *
+ * PARAMETERS:  Signature           - ACPI table signature
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Create one template file of the requested signature.
+ *
+ ******************************************************************************/
+
+static ACPI_STATUS
+DtCreateOneTemplateFile (
+    char                    *Signature,
+    UINT32                  TableCount)
+{
+    const ACPI_DMTABLE_DATA *TableData;
+    ACPI_STATUS             Status;
+
+
     /*
      * Validate signature and get the template data:
      *  1) Signature must be 4 characters
@@ -146,8 +242,8 @@ DtCreateTemplates (
     if (strlen (Signature) != ACPI_NAME_SIZE)
     {
         fprintf (stderr,
-            "%s: Invalid ACPI table signature (length must be 4 characters)\n",
-            Signature);
+            "%s: Invalid ACPI table signature "
+            "(length must be 4 characters)\n", Signature);
         return (AE_ERROR);
     }
 
@@ -164,7 +260,8 @@ DtCreateTemplates (
         Signature = "FACP";
     }
 
-GetTemplate:
+    /* TableData will point to the template */
+
     TableData = AcpiDmGetTableData (Signature);
     if (TableData)
     {
@@ -181,18 +278,7 @@ GetTemplate:
         return (AE_ERROR);
     }
 
-    Status = AdInitialize ();
-    if (ACPI_FAILURE (Status))
-    {
-        return (Status);
-    }
-
-    Status = DtCreateOneTemplate (Signature, TableData);
-
-    /* Shutdown ACPICA subsystem */
-
-    (void) AcpiTerminate ();
-    CmDeleteCaches ();
+    Status = DtCreateOneTemplate (Signature, TableCount, TableData);
     return (Status);
 }
 
@@ -217,12 +303,6 @@ DtCreateAllTemplates (
     ACPI_STATUS             Status;
 
 
-    Status = AdInitialize ();
-    if (ACPI_FAILURE (Status))
-    {
-        return (Status);
-    }
-
     fprintf (stderr, "Creating all supported Template files\n");
 
     /* Walk entire ACPI table data structure */
@@ -234,7 +314,7 @@ DtCreateAllTemplates (
         if (TableData->Template)
         {
             Status = DtCreateOneTemplate (TableData->Signature,
-                TableData);
+                0, TableData);
             if (ACPI_FAILURE (Status))
             {
                 return (Status);
@@ -247,25 +327,31 @@ DtCreateAllTemplates (
      * 1) DSDT/SSDT are AML tables, not data tables
      * 2) FACS and RSDP have non-standard headers
      */
-    Status = DtCreateOneTemplate (ACPI_SIG_DSDT, NULL);
+    Status = DtCreateOneTemplate (ACPI_SIG_DSDT, 0, NULL);
     if (ACPI_FAILURE (Status))
     {
         return (Status);
     }
 
-    Status = DtCreateOneTemplate (ACPI_SIG_SSDT, NULL);
+    Status = DtCreateOneTemplate (ACPI_SIG_SSDT, 0, NULL);
     if (ACPI_FAILURE (Status))
     {
         return (Status);
     }
 
-    Status = DtCreateOneTemplate (ACPI_SIG_FACS, NULL);
+    Status = DtCreateOneTemplate (ACPI_SIG_OSDT, 0, NULL);
     if (ACPI_FAILURE (Status))
     {
         return (Status);
     }
 
-    Status = DtCreateOneTemplate (ACPI_RSDP_NAME, NULL);
+    Status = DtCreateOneTemplate (ACPI_SIG_FACS, 0, NULL);
+    if (ACPI_FAILURE (Status))
+    {
+        return (Status);
+    }
+
+    Status = DtCreateOneTemplate (ACPI_RSDP_NAME, 0, NULL);
     if (ACPI_FAILURE (Status))
     {
         return (Status);
@@ -280,6 +366,7 @@ DtCreateAllTemplates (
  * FUNCTION:    DtCreateOneTemplate
  *
  * PARAMETERS:  Signature           - ACPI signature, NULL terminated.
+ *              TableCount          - Used for SSDTs in same file as DSDT
  *              TableData           - Entry in ACPI table data structure.
  *                                    NULL if a special ACPI table.
  *
@@ -292,12 +379,14 @@ DtCreateAllTemplates (
 static ACPI_STATUS
 DtCreateOneTemplate (
     char                    *Signature,
+    UINT32                  TableCount,
     const ACPI_DMTABLE_DATA  *TableData)
 {
     char                    *DisasmFilename;
     FILE                    *File;
     ACPI_STATUS             Status = AE_OK;
-    ACPI_SIZE               Actual;
+    int                     Actual;
+    UINT32                  i;
 
 
     /* New file will have a .asl suffix */
@@ -310,13 +399,17 @@ DtCreateOneTemplate (
         return (AE_ERROR);
     }
 
-    /* Probably should prompt to overwrite the file */
-
     AcpiUtStrlwr (DisasmFilename);
+    if (!UtQueryForOverwrite (DisasmFilename))
+    {
+        return (AE_ERROR);
+    }
+
     File = fopen (DisasmFilename, "w+");
     if (!File)
     {
-        fprintf (stderr, "Could not open output file %s\n", DisasmFilename);
+        fprintf (stderr, "Could not open output file %s\n",
+            DisasmFilename);
         return (AE_ERROR);
     }
 
@@ -327,8 +420,16 @@ DtCreateOneTemplate (
     AcpiOsPrintf ("/*\n");
     AcpiOsPrintf (ACPI_COMMON_HEADER ("iASL Compiler/Disassembler", " * "));
 
-    AcpiOsPrintf (" * Template for [%4.4s] ACPI Table",
-        Signature);
+    if (TableCount == 0)
+    {
+        AcpiOsPrintf (" * Template for [%4.4s] ACPI Table",
+            Signature);
+    }
+    else
+    {
+        AcpiOsPrintf (" * Template for [%4.4s] and %u [SSDT] ACPI Tables",
+            Signature, TableCount);
+    }
 
     /* Dump the actual ACPI table */
 
@@ -354,45 +455,55 @@ DtCreateOneTemplate (
     }
     else
     {
-        /* Special ACPI tables - DSDT, SSDT, OSDT, FADT, RSDP */
+        /* Special ACPI tables - DSDT, SSDT, OSDT, FACS, RSDP */
 
         AcpiOsPrintf (" (AML byte code table)\n");
-
         AcpiOsPrintf (" */\n");
+
         if (ACPI_COMPARE_NAME (Signature, ACPI_SIG_DSDT))
         {
-            Actual = fwrite (TemplateDsdt, 1, sizeof (TemplateDsdt) -1, File);
-            if (Actual != sizeof (TemplateDsdt) -1)
+            Actual = DtEmitDefinitionBlock (
+                File, DisasmFilename, ACPI_SIG_DSDT, 1);
+            if (Actual < 0)
             {
-                fprintf (stderr,
-                    "Could not write to output file %s\n", DisasmFilename);
                 Status = AE_ERROR;
                 goto Cleanup;
             }
+
+            /* Emit any requested SSDTs into the same file */
+
+            for (i = 1; i <= TableCount; i++)
+            {
+                Actual = DtEmitDefinitionBlock (
+                    File, DisasmFilename, ACPI_SIG_SSDT, i + 1);
+                if (Actual < 0)
+                {
+                    Status = AE_ERROR;
+                    goto Cleanup;
+                }
+            }
         }
         else if (ACPI_COMPARE_NAME (Signature, ACPI_SIG_SSDT))
         {
-            Actual = fwrite (TemplateSsdt, 1, sizeof (TemplateSsdt) -1, File);
-            if (Actual != sizeof (TemplateSsdt) -1)
+            Actual = DtEmitDefinitionBlock (
+                File, DisasmFilename, ACPI_SIG_SSDT, 1);
+            if (Actual < 0)
             {
-                fprintf (stderr,
-                    "Could not write to output file %s\n", DisasmFilename);
                 Status = AE_ERROR;
                 goto Cleanup;
             }
         }
         else if (ACPI_COMPARE_NAME (Signature, ACPI_SIG_OSDT))
         {
-            Actual = fwrite (TemplateOsdt, 1, sizeof (TemplateOsdt) -1, File);
-            if (Actual != sizeof (TemplateOsdt) -1)
+            Actual = DtEmitDefinitionBlock (
+                File, DisasmFilename, ACPI_SIG_OSDT, 1);
+            if (Actual < 0)
             {
-                fprintf (stderr,
-                    "Could not write to output file %s\n", DisasmFilename);
                 Status = AE_ERROR;
                 goto Cleanup;
             }
         }
-        else if (ACPI_COMPARE_NAME (Signature, ACPI_SIG_FACS)) /* FADT */
+        else if (ACPI_COMPARE_NAME (Signature, ACPI_SIG_FACS))
         {
             AcpiDmDumpDataTable (ACPI_CAST_PTR (ACPI_TABLE_HEADER,
                 TemplateFacs));
@@ -411,12 +522,72 @@ DtCreateOneTemplate (
         }
     }
 
-    fprintf (stderr,
-        "Created ACPI table template for [%4.4s], written to \"%s\"\n",
-        Signature, DisasmFilename);
+    if (TableCount == 0)
+    {
+        fprintf (stderr,
+            "Created ACPI table template for [%4.4s], "
+            "written to \"%s\"\n",
+            Signature, DisasmFilename);
+    }
+    else
+    {
+        fprintf (stderr,
+            "Created ACPI table templates for [%4.4s] "
+            "and %u [SSDT], written to \"%s\"\n",
+            Signature, TableCount, DisasmFilename);
+    }
 
 Cleanup:
     fclose (File);
     AcpiOsRedirectOutput (stdout);
     return (Status);
 }
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    DtEmitDefinitionBlock
+ *
+ * PARAMETERS:  File                - An open file for the block
+ *              Filename            - Filename for same, for error msg(s)
+ *              Signature           - ACPI signature for the block
+ *              Instance            - Used for multiple SSDTs in the same file
+ *
+ * RETURN:      Status from fprintf
+ *
+ * DESCRIPTION: Emit the raw ASL for a complete Definition Block (DSDT or SSDT)
+ *
+ * Note: The AMLFileName parameter for DefinitionBlock is left as a NULL
+ * string. This allows the compiler to create the output AML filename from
+ * the input filename.
+ *
+ ******************************************************************************/
+
+static int
+DtEmitDefinitionBlock (
+    FILE                    *File,
+    char                    *Filename,
+    char                    *Signature,
+    UINT32                  Instance)
+{
+    int                     Status;
+
+
+    Status = fprintf (File,
+        "DefinitionBlock (\"\", \"%4.4s\", 2, \"Intel\", \"_%4.4s_%.2X\", 0x00000001)\n"
+        "{\n"
+        "    Method (%2.2s%.2X)\n"
+        "    {\n"
+        "    }\n"
+        "}\n\n",
+        Signature, Signature, Instance, Signature, Instance);
+
+    if (Status < 0)
+    {
+        fprintf (stderr,
+            "Could not write %4.4s to output file %s\n",
+            Signature, Filename);
+    }
+
+    return (Status);
+}
index 6f3ed64..c93b761 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
 #define __DTTEMPLATE_H
 
 
-/* Special templates for the ASL/AML tables: DSDT, SSDT, and OSDT */
-
-const char TemplateDsdt[] =
-    "DefinitionBlock (\"dsdt.aml\", \"DSDT\", 2, \"Intel\", \"Template\", 0x00000001)\n"
-    "{\n"
-    "    Method (MAIN, 0, NotSerialized)\n"
-    "    {\n"
-    "        Return (Zero)\n"
-    "    }\n"
-    "}\n\n";
-
-const char TemplateSsdt[] =
-    "DefinitionBlock (\"ssdt.aml\", \"SSDT\", 2, \"Intel\", \"Template\", 0x00000001)\n"
-    "{\n"
-    "    Method (MAIN, 0, NotSerialized)\n"
-    "    {\n"
-    "        Return (Zero)\n"
-    "    }\n"
-    "}\n\n";
-
-const char TemplateOsdt[] =
-    "DefinitionBlock (\"osdt.aml\", \"OSDT\", 2, \"Intel\", \"Template\", 0x00000001)\n"
-    "{\n"
-    "    Method (MAIN, 0, NotSerialized)\n"
-    "    {\n"
-    "        Return (Zero)\n"
-    "    }\n"
-    "}\n\n";
-
-
 /* Templates for ACPI data tables */
 
 const unsigned char TemplateAsf[] =
index 95f005d..c9756da 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 9dc2bdb..50759b5 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index ca18c35..b6bc801 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 89a553f..8ad9236 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 3ef0f45..3056699 100644 (file)
@@ -6,7 +6,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 5ed30f5..0819769 100644 (file)
@@ -6,7 +6,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 1ba58d1..e96fba5 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index c9e260c..ec9bf66 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -414,7 +414,6 @@ PrPushInputFileStack (
 
     /* Emit a new #line directive for the include file */
 
-    Gbl_CurrentLineNumber = 1;
     FlPrintFile (ASL_FILE_PREPROCESSOR, "#line %u \"%s\"\n", 1, Filename);
 }
 
index d8e8874..2b8e7de 100644 (file)
@@ -5,7 +5,7 @@
  ******************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 22aa353..3e22cf3 100644 (file)
@@ -5,7 +5,7 @@
  ******************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index c734a59..c0c4b89 100644 (file)
@@ -5,7 +5,7 @@
  ******************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -48,6 +48,7 @@
 #include "acnamesp.h"
 #include "acparser.h"
 #include "acinterp.h"
+#include "acevents.h"
 #include "acdebug.h"
 
 
@@ -670,13 +671,15 @@ void
 AcpiDbDisplayObjectType (
     char                    *ObjectArg)
 {
+    ACPI_SIZE               Arg;
     ACPI_HANDLE             Handle;
     ACPI_DEVICE_INFO        *Info;
     ACPI_STATUS             Status;
     UINT32                  i;
 
 
-    Handle = ACPI_TO_POINTER (strtoul (ObjectArg, NULL, 16));
+    Arg = strtoul (ObjectArg, NULL, 16);
+    Handle = ACPI_TO_POINTER (Arg);
 
     Status = AcpiGetObjectInfo (Handle, &Info);
     if (ACPI_FAILURE (Status))
@@ -1036,26 +1039,21 @@ AcpiDbDisplayHandlers (
         for (i = 0; i < ACPI_ARRAY_LENGTH (AcpiGbl_SpaceIdList); i++)
         {
             SpaceId = AcpiGbl_SpaceIdList[i];
-            HandlerObj = ObjDesc->Device.Handler;
 
             AcpiOsPrintf (ACPI_PREDEFINED_PREFIX,
                 AcpiUtGetRegionName ((UINT8) SpaceId), SpaceId);
 
-            while (HandlerObj)
+            HandlerObj = AcpiEvFindRegionHandler (
+                SpaceId, ObjDesc->CommonNotify.Handler);
+            if (HandlerObj)
             {
-                if (AcpiGbl_SpaceIdList[i] ==
-                    HandlerObj->AddressSpace.SpaceId)
-                {
-                    AcpiOsPrintf (ACPI_HANDLER_PRESENT_STRING,
-                        (HandlerObj->AddressSpace.HandlerFlags &
-                            ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) ?
-                            "Default" : "User",
-                        HandlerObj->AddressSpace.Handler);
-
-                    goto FoundHandler;
-                }
+                AcpiOsPrintf (ACPI_HANDLER_PRESENT_STRING,
+                    (HandlerObj->AddressSpace.HandlerFlags &
+                        ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) ?
+                        "Default" : "User",
+                    HandlerObj->AddressSpace.Handler);
 
-                HandlerObj = HandlerObj->AddressSpace.Next;
+                goto FoundHandler;
             }
 
             /* There is no handler for this SpaceId */
@@ -1067,7 +1065,7 @@ AcpiDbDisplayHandlers (
 
         /* Find all handlers for user-defined SpaceIDs */
 
-        HandlerObj = ObjDesc->Device.Handler;
+        HandlerObj = ObjDesc->CommonNotify.Handler;
         while (HandlerObj)
         {
             if (HandlerObj->AddressSpace.SpaceId >= ACPI_USER_REGION_BEGIN)
@@ -1178,7 +1176,7 @@ AcpiDbDisplayNonRootHandlers (
 
     /* Display all handlers associated with this device */
 
-    HandlerObj = ObjDesc->Device.Handler;
+    HandlerObj = ObjDesc->CommonNotify.Handler;
     while (HandlerObj)
     {
         AcpiOsPrintf (ACPI_PREDEFINED_PREFIX,
index ff68c46..4efb607 100644 (file)
@@ -5,7 +5,7 @@
  ******************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 21c0d22..e4aba5a 100644 (file)
@@ -6,7 +6,7 @@
  ******************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 7b01009..8e092e1 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index f2e0c0c..d77ec11 100644 (file)
@@ -5,7 +5,7 @@
  ******************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -1124,7 +1124,7 @@ AcpiDbCommandDispatch (
         {
             ACPI_NEW_TABLE_DESC     *ListHead = NULL;
 
-            Status = AcpiAcGetAllTablesFromFile (AcpiGbl_DbArgs[1],
+            Status = AcGetAllTablesFromFile (AcpiGbl_DbArgs[1],
                 ACPI_GET_ALL_TABLES, &ListHead);
             if (ACPI_SUCCESS (Status))
             {
index cd8328c..076a6c8 100644 (file)
@@ -5,7 +5,7 @@
  ******************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 5ac8448..e405acd 100644 (file)
@@ -5,7 +5,7 @@
  ******************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 54efeca..421aeba 100644 (file)
@@ -5,7 +5,7 @@
  ******************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index a733003..a939be9 100644 (file)
@@ -5,7 +5,7 @@
  ******************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 3b26500..8e385f8 100644 (file)
@@ -5,7 +5,7 @@
  ******************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 403452a..a9cdf37 100644 (file)
@@ -5,7 +5,7 @@
  ******************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 9dc3f91..9000695 100644 (file)
@@ -5,7 +5,7 @@
  ******************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index cd80274..6f1f344 100644 (file)
@@ -5,7 +5,7 @@
  ******************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 3dff1b7..2c5a043 100644 (file)
@@ -5,7 +5,7 @@
  ******************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index c8bf5f1..387980b 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index c51c223..8eef6cd 100644 (file)
@@ -5,7 +5,7 @@
  ******************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index c148e37..d9b10ef 100644 (file)
@@ -5,7 +5,7 @@
  ******************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -61,6 +61,10 @@ static void
 AcpiDmMatchKeyword (
     ACPI_PARSE_OBJECT       *Op);
 
+static void
+AcpiDmConvertToElseIf (
+    ACPI_PARSE_OBJECT       *Op);
+
 
 /*******************************************************************************
  *
@@ -684,6 +688,11 @@ AcpiDmDisassembleOneOp (
         return;
     }
 
+    if (Op->Common.DisasmFlags & ACPI_PARSEOP_ELSEIF)
+    {
+        return; /* ElseIf macro was already emitted */
+    }
+
     switch (Op->Common.DisasmOpcode)
     {
     case ACPI_DASM_MATCHOP:
@@ -956,6 +965,11 @@ AcpiDmDisassembleOneOp (
         AcpiDmNamestring (Op->Common.Value.Name);
         break;
 
+    case AML_ELSE_OP:
+
+        AcpiDmConvertToElseIf (Op);
+        break;
+
     default:
 
         /* Just get the opcode name and print it */
@@ -981,4 +995,114 @@ AcpiDmDisassembleOneOp (
     }
 }
 
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiDmConvertToElseIf
+ *
+ * PARAMETERS:  OriginalElseOp          - ELSE Object to be examined
+ *
+ * RETURN:      None. Emits either an "Else" or an "ElseIf" ASL operator.
+ *
+ * DESCRIPTION: Detect and convert an If..Else..If sequence to If..ElseIf
+ *
+ * EXAMPLE:
+ *
+ * This If..Else..If nested sequence:
+ *
+ *        If (Arg0 == 1)
+ *        {
+ *            Local0 = 4
+ *        }
+ *        Else
+ *        {
+ *            If (Arg0 == 2)
+ *            {
+ *                Local0 = 5
+ *            }
+ *        }
+ *
+ * Is converted to this simpler If..ElseIf sequence:
+ *
+ *        If (Arg0 == 1)
+ *        {
+ *            Local0 = 4
+ *        }
+ *        ElseIf (Arg0 == 2)
+ *        {
+ *            Local0 = 5
+ *        }
+ *
+ * NOTE: There is no actual ElseIf AML opcode. ElseIf is essentially an ASL
+ * macro that emits an Else opcode followed by an If opcode. This function
+ * reverses these AML sequences back to an ElseIf macro where possible. This
+ * can make the disassembled ASL code simpler and more like the original code.
+ *
+ ******************************************************************************/
+
+static void
+AcpiDmConvertToElseIf (
+    ACPI_PARSE_OBJECT       *OriginalElseOp)
+{
+    ACPI_PARSE_OBJECT       *IfOp;
+    ACPI_PARSE_OBJECT       *ElseOp;
+
+
+    /* Examine the first child of the Else */
+
+    IfOp = OriginalElseOp->Common.Value.Arg;
+    if (!IfOp || (IfOp->Common.AmlOpcode != AML_IF_OP))
+    {
+        /* Not an Else..If sequence, cannot convert to ElseIf */
+
+        AcpiOsPrintf ("%s", "Else");
+        return;
+    }
+
+    /* Emit ElseIf, mark the IF as now an ELSEIF */
+
+    AcpiOsPrintf ("%s", "ElseIf");
+    IfOp->Common.DisasmFlags |= ACPI_PARSEOP_ELSEIF;
+
+    /* The IF parent will now be the same as the original ELSE parent */
+
+    IfOp->Common.Parent = OriginalElseOp->Common.Parent;
+
+    /*
+     * Update the NEXT pointers to restructure the parse tree, essentially
+     * promoting an If..Else block up to the same level as the original
+     * Else.
+     *
+     * Check if the IF has a corresponding ELSE peer
+     */
+    ElseOp = IfOp->Common.Next;
+    if (ElseOp &&
+        (ElseOp->Common.AmlOpcode == AML_ELSE_OP))
+    {
+        /* If an ELSE matches the IF, promote it also */
+
+        ElseOp->Common.Parent = OriginalElseOp->Common.Parent;
+        ElseOp->Common.Next = OriginalElseOp->Common.Next;
+    }
+    else
+    {
+        /* Otherwise, set the IF NEXT to the original ELSE NEXT */
+
+        IfOp->Common.Next = OriginalElseOp->Common.Next;
+    }
+
+    /* Detach the child IF block from the original ELSE */
+
+    OriginalElseOp->Common.Value.Arg = NULL;
+
+    /* Ignore the original ELSE from now on */
+
+    OriginalElseOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
+    OriginalElseOp->Common.DisasmOpcode = ACPI_DASM_LNOT_PREFIX;
+
+    /* Insert IF (now ELSEIF) as next peer of the original ELSE */
+
+    OriginalElseOp->Common.Next = IfOp;
+}
+
 #endif  /* ACPI_DISASSEMBLER */
index e9b65fd..103c05d 100644 (file)
@@ -5,7 +5,7 @@
  ******************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 1443f50..8124765 100644 (file)
@@ -5,7 +5,7 @@
  ******************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index ddc756d..6bc2af3 100644 (file)
@@ -5,7 +5,7 @@
  ******************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 1683bf0..e232835 100644 (file)
@@ -5,7 +5,7 @@
  ******************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index cf8cf4a..8e10067 100644 (file)
@@ -5,7 +5,7 @@
  ******************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 6a5527e..7f039a3 100644 (file)
@@ -5,7 +5,7 @@
  ******************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -490,39 +490,40 @@ AcpiDmDescendingOp (
     }
     else if ((AcpiDmBlockType (Op->Common.Parent) & BLOCK_BRACE) &&
          (!(Op->Common.DisasmFlags & ACPI_PARSEOP_PARAMLIST)) &&
+         (!(Op->Common.DisasmFlags & ACPI_PARSEOP_ELSEIF)) &&
          (Op->Common.AmlOpcode != AML_INT_BYTELIST_OP))
     {
+        /*
+         * This is a first-level element of a term list,
+         * indent a new line
+         */
+        switch (Op->Common.AmlOpcode)
+        {
+        case AML_NOOP_OP:
             /*
-             * This is a first-level element of a term list,
-             * indent a new line
+             * Optionally just ignore this opcode. Some tables use
+             * NoOp opcodes for "padding" out packages that the BIOS
+             * changes dynamically. This can leave hundreds or
+             * thousands of NoOp opcodes that if disassembled,
+             * cannot be compiled because they are syntactically
+             * incorrect.
              */
-            switch (Op->Common.AmlOpcode)
+            if (AcpiGbl_IgnoreNoopOperator)
             {
-            case AML_NOOP_OP:
-                /*
-                 * Optionally just ignore this opcode. Some tables use
-                 * NoOp opcodes for "padding" out packages that the BIOS
-                 * changes dynamically. This can leave hundreds or
-                 * thousands of NoOp opcodes that if disassembled,
-                 * cannot be compiled because they are syntactically
-                 * incorrect.
-                 */
-                if (AcpiGbl_IgnoreNoopOperator)
-                {
-                    Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
-                    return (AE_OK);
-                }
+                Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
+                return (AE_OK);
+            }
 
-                /* Fallthrough */
+            /* Fallthrough */
 
-            default:
+        default:
 
-                AcpiDmIndent (Level);
-                break;
-            }
+            AcpiDmIndent (Level);
+            break;
+        }
 
-            Info->LastLevel = Level;
-            Info->Count = 0;
+        Info->LastLevel = Level;
+        Info->Count = 0;
     }
 
     /*
index 353d9c1..5e5e93b 100644 (file)
@@ -6,7 +6,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index f5344e8..3509f16 100644 (file)
@@ -6,7 +6,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 87c31c2..adeb448 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index c4477fa..2516c13 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 573d0dd..74e974d 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -266,7 +266,7 @@ AcpiDsInitializeObjects (
     /* Summary of objects initialized */
 
     ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT,
-        "Table [%4.4s:%8.8s] (id %.2X) - %4u Objects with %3u Devices, "
+        "Table [%4.4s: %-8.8s] (id %.2X) - %4u Objects with %3u Devices, "
         "%3u Regions, %4u Methods (%u/%u/%u Serial/Non/Cvt)\n",
         Table->Signature, Table->OemTableId, OwnerId, Info.ObjectCount,
         Info.DeviceCount,Info.OpRegionCount, Info.MethodCount,
index 0da02fd..356739a 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 2040a33..32f9850 100644 (file)
@@ -5,7 +5,7 @@
  ******************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 8c22423..452c66b 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 68de21c..1c6b342 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index a32b3d4..f41f6b2 100644 (file)
@@ -5,7 +5,7 @@
  ******************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index d604b74..307af60 100644 (file)
@@ -6,7 +6,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 0c6d848..db55661 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 4c73920..2c099ef 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index f67f2c4..a2497cf 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 8b7aa74..f56f393 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index d7c38cd..98b3da5 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index ce13734..caafa97 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 04a1f1e..d683bfd 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 8d266bf..21f0692 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index dc421d5..b62f91a 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index e4431bf..ff4b1cd 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index e2d5955..d63cad8 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -60,6 +60,7 @@ AcpiEvInstallHandler (
     void                    *Context,
     void                    **ReturnValue);
 
+
 /* These are the address spaces that will get default handlers */
 
 UINT8        AcpiGbl_DefaultAddressSpaces[ACPI_NUM_DEFAULT_SPACES] =
@@ -175,7 +176,7 @@ AcpiEvHasDefaultHandler (
     ObjDesc = AcpiNsGetAttachedObject (Node);
     if (ObjDesc)
     {
-        HandlerObj = ObjDesc->Device.Handler;
+        HandlerObj = ObjDesc->CommonNotify.Handler;
 
         /* Walk the linked list of handlers for this object */
 
@@ -276,33 +277,25 @@ AcpiEvInstallHandler (
     {
         /* Check if this Device already has a handler for this address space */
 
-        NextHandlerObj = ObjDesc->Device.Handler;
-        while (NextHandlerObj)
+        NextHandlerObj = AcpiEvFindRegionHandler (
+            HandlerObj->AddressSpace.SpaceId, ObjDesc->CommonNotify.Handler);
+        if (NextHandlerObj)
         {
             /* Found a handler, is it for the same address space? */
 
-            if (NextHandlerObj->AddressSpace.SpaceId ==
-                HandlerObj->AddressSpace.SpaceId)
-            {
-                ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION,
-                    "Found handler for region [%s] in device %p(%p) "
-                    "handler %p\n",
-                    AcpiUtGetRegionName (HandlerObj->AddressSpace.SpaceId),
-                    ObjDesc, NextHandlerObj, HandlerObj));
-
-                /*
-                 * Since the object we found it on was a device, then it
-                 * means that someone has already installed a handler for
-                 * the branch of the namespace from this device on. Just
-                 * bail out telling the walk routine to not traverse this
-                 * branch. This preserves the scoping rule for handlers.
-                 */
-                return (AE_CTRL_DEPTH);
-            }
-
-            /* Walk the linked list of handlers attached to this device */
-
-            NextHandlerObj = NextHandlerObj->AddressSpace.Next;
+            ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION,
+                "Found handler for region [%s] in device %p(%p) handler %p\n",
+                AcpiUtGetRegionName (HandlerObj->AddressSpace.SpaceId),
+                ObjDesc, NextHandlerObj, HandlerObj));
+
+            /*
+             * Since the object we found it on was a device, then it means
+             * that someone has already installed a handler for the branch
+             * of the namespace from this device on. Just bail out telling
+             * the walk routine to not traverse this branch. This preserves
+             * the scoping rule for handlers.
+             */
+            return (AE_CTRL_DEPTH);
         }
 
         /*
@@ -335,6 +328,46 @@ AcpiEvInstallHandler (
 }
 
 
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiEvFindRegionHandler
+ *
+ * PARAMETERS:  SpaceId         - The address space ID
+ *              HandlerObj      - Head of the handler object list
+ *
+ * RETURN:      Matching handler object. NULL if space ID not matched
+ *
+ * DESCRIPTION: Search a handler object list for a match on the address
+ *              space ID.
+ *
+ ******************************************************************************/
+
+ACPI_OPERAND_OBJECT *
+AcpiEvFindRegionHandler (
+    ACPI_ADR_SPACE_TYPE     SpaceId,
+    ACPI_OPERAND_OBJECT     *HandlerObj)
+{
+
+    /* Walk the handler list for this device */
+
+    while (HandlerObj)
+    {
+        /* Same SpaceId indicates a handler is installed */
+
+        if (HandlerObj->AddressSpace.SpaceId == SpaceId)
+        {
+            return (HandlerObj);
+        }
+
+        /* Next handler object */
+
+        HandlerObj = HandlerObj->AddressSpace.Next;
+    }
+
+    return (NULL);
+}
+
+
 /*******************************************************************************
  *
  * FUNCTION:    AcpiEvInstallSpaceHandler
@@ -362,17 +395,17 @@ AcpiEvInstallSpaceHandler (
 {
     ACPI_OPERAND_OBJECT     *ObjDesc;
     ACPI_OPERAND_OBJECT     *HandlerObj;
-    ACPI_STATUS             Status;
+    ACPI_STATUS             Status = AE_OK;
     ACPI_OBJECT_TYPE        Type;
-    UINT8                  Flags = 0;
+    UINT8                   Flags = 0;
 
 
     ACPI_FUNCTION_TRACE (EvInstallSpaceHandler);
 
 
     /*
-     * This registration is valid for only the types below and the root. This
-     * is where the default handlers get placed.
+     * This registration is valid for only the types below and the root.
+     * The root node is where the default handlers get installed.
      */
     if ((Node->Type != ACPI_TYPE_DEVICE)     &&
         (Node->Type != ACPI_TYPE_PROCESSOR)  &&
@@ -445,47 +478,39 @@ AcpiEvInstallSpaceHandler (
     if (ObjDesc)
     {
         /*
-         * The attached device object already exists. Make sure the handler
-         * is not already installed.
+         * The attached device object already exists. Now make sure
+         * the handler is not already installed.
          */
-        HandlerObj = ObjDesc->Device.Handler;
+        HandlerObj = AcpiEvFindRegionHandler (SpaceId,
+            ObjDesc->CommonNotify.Handler);
 
-        /* Walk the handler list for this device */
-
-        while (HandlerObj)
+        if (HandlerObj)
         {
-            /* Same SpaceId indicates a handler already installed */
-
-            if (HandlerObj->AddressSpace.SpaceId == SpaceId)
+            if (HandlerObj->AddressSpace.Handler == Handler)
             {
-                if (HandlerObj->AddressSpace.Handler == Handler)
-                {
-                    /*
-                     * It is (relatively) OK to attempt to install the SAME
-                     * handler twice. This can easily happen with the
-                     * PCI_Config space.
-                     */
-                    Status = AE_SAME_HANDLER;
-                    goto UnlockAndExit;
-                }
-                else
-                {
-                    /* A handler is already installed */
-
-                    Status = AE_ALREADY_EXISTS;
-                }
+                /*
+                 * It is (relatively) OK to attempt to install the SAME
+                 * handler twice. This can easily happen with the
+                 * PCI_Config space.
+                 */
+                Status = AE_SAME_HANDLER;
                 goto UnlockAndExit;
             }
+            else
+            {
+                /* A handler is already installed */
 
-            /* Walk the linked list of handlers */
+                Status = AE_ALREADY_EXISTS;
+            }
 
-            HandlerObj = HandlerObj->AddressSpace.Next;
+            goto UnlockAndExit;
         }
     }
     else
     {
         ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION,
-            "Creating object on Device %p while installing handler\n", Node));
+            "Creating object on Device %p while installing handler\n",
+            Node));
 
         /* ObjDesc does not exist, create one */
 
@@ -524,7 +549,8 @@ AcpiEvInstallSpaceHandler (
     }
 
     ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION,
-        "Installing address handler for region %s(%X) on Device %4.4s %p(%p)\n",
+        "Installing address handler for region %s(%X) "
+        "on Device %4.4s %p(%p)\n",
         AcpiUtGetRegionName (SpaceId), SpaceId,
         AcpiUtGetNodeName (Node), Node, ObjDesc));
 
@@ -549,33 +575,31 @@ AcpiEvInstallSpaceHandler (
     HandlerObj->AddressSpace.Node = Node;
     HandlerObj->AddressSpace.Handler = Handler;
     HandlerObj->AddressSpace.Context = Context;
-    HandlerObj->AddressSpace.Setup  = Setup;
+    HandlerObj->AddressSpace.Setup = Setup;
 
     /* Install at head of Device.AddressSpace list */
 
-    HandlerObj->AddressSpace.Next = ObjDesc->Device.Handler;
+    HandlerObj->AddressSpace.Next = ObjDesc->CommonNotify.Handler;
 
     /*
      * The Device object is the first reference on the HandlerObj.
      * Each region that uses the handler adds a reference.
      */
-    ObjDesc->Device.Handler = HandlerObj;
+    ObjDesc->CommonNotify.Handler = HandlerObj;
 
     /*
-     * Walk the namespace finding all of the regions this
-     * handler will manage.
+     * Walk the namespace finding all of the regions this handler will
+     * manage.
      *
-     * Start at the device and search the branch toward
-     * the leaf nodes until either the leaf is encountered or
-     * a device is detected that has an address handler of the
-     * same type.
+     * Start at the device and search the branch toward the leaf nodes
+     * until either the leaf is encountered or a device is detected that
+     * has an address handler of the same type.
      *
-     * In either case, back up and search down the remainder
-     * of the branch
+     * In either case, back up and search down the remainder of the branch
      */
-    Status = AcpiNsWalkNamespace (ACPI_TYPE_ANY, Node, ACPI_UINT32_MAX,
-        ACPI_NS_WALK_UNLOCK, AcpiEvInstallHandler, NULL,
-        HandlerObj, NULL);
+    Status = AcpiNsWalkNamespace (ACPI_TYPE_ANY, Node,
+        ACPI_UINT32_MAX, ACPI_NS_WALK_UNLOCK,
+        AcpiEvInstallHandler, NULL, HandlerObj, NULL);
 
 UnlockAndExit:
     return_ACPI_STATUS (Status);
index 0a69c23..30fc6f0 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index c2f2292..db4080a 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -99,6 +99,7 @@ AcpiEvInitializeOpRegions (
 
     /* Run the _REG methods for OpRegions in each default address space */
 
+    AcpiGbl_RegMethodsEnabled = TRUE;
     for (i = 0; i < ACPI_NUM_DEFAULT_SPACES; i++)
     {
         /*
@@ -109,13 +110,11 @@ AcpiEvInitializeOpRegions (
         if (AcpiEvHasDefaultHandler (AcpiGbl_RootNode,
                AcpiGbl_DefaultAddressSpaces[i]))
         {
-            Status = AcpiEvExecuteRegMethods (AcpiGbl_RootNode,
-                AcpiGbl_DefaultAddressSpaces[i]);
+            AcpiEvExecuteRegMethods (AcpiGbl_RootNode,
+                AcpiGbl_DefaultAddressSpaces[i], ACPI_REG_CONNECT);
         }
     }
 
-    AcpiGbl_RegMethodsExecuted = TRUE;
-
     (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
     return_ACPI_STATUS (Status);
 }
@@ -138,6 +137,12 @@ AcpiEvInitializeOpRegions (
  * DESCRIPTION: Dispatch an address space or operation region access to
  *              a previously installed handler.
  *
+ * NOTE: During early initialization, we always install the default region
+ * handlers for Memory, I/O and PCI_Config. This ensures that these operation
+ * region address spaces are always available as per the ACPI specification.
+ * This is especially needed in order to support the execution of
+ * module-level AML code during loading of the ACPI tables.
+ *
  ******************************************************************************/
 
 ACPI_STATUS
@@ -320,7 +325,7 @@ AcpiEvAddressSpaceDispatch (
          * We just returned from a non-default handler, we must re-enter the
          * interpreter
          */
-       AcpiExEnterInterpreter ();
+        AcpiExEnterInterpreter ();
     }
 
     return_ACPI_STATUS (Status);
@@ -342,7 +347,7 @@ AcpiEvAddressSpaceDispatch (
  ******************************************************************************/
 
 void
-AcpiEvDetachRegion(
+AcpiEvDetachRegion (
     ACPI_OPERAND_OBJECT     *RegionObj,
     BOOLEAN                 AcpiNsIsLocked)
 {
@@ -521,6 +526,13 @@ AcpiEvAttachRegion (
     ACPI_FUNCTION_TRACE (EvAttachRegion);
 
 
+    /* Install the region's handler */
+
+    if (RegionObj->Region.Handler)
+    {
+        return_ACPI_STATUS (AE_ALREADY_EXISTS);
+    }
+
     ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION,
         "Adding Region [%4.4s] %p to address handler %p [%s]\n",
         AcpiUtGetNodeName (RegionObj->Region.Node),
@@ -531,18 +543,62 @@ AcpiEvAttachRegion (
 
     RegionObj->Region.Next = HandlerObj->AddressSpace.RegionList;
     HandlerObj->AddressSpace.RegionList = RegionObj;
+    RegionObj->Region.Handler = HandlerObj;
+    AcpiUtAddReference (HandlerObj);
 
-    /* Install the region's handler */
+    return_ACPI_STATUS (AE_OK);
+}
 
-    if (RegionObj->Region.Handler)
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiEvAssociateRegMethod
+ *
+ * PARAMETERS:  RegionObj           - Region object
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Find and associate _REG method to a region
+ *
+ ******************************************************************************/
+
+void
+AcpiEvAssociateRegMethod (
+    ACPI_OPERAND_OBJECT     *RegionObj)
+{
+    ACPI_NAME               *RegNamePtr = (ACPI_NAME *) METHOD_NAME__REG;
+    ACPI_NAMESPACE_NODE     *MethodNode;
+    ACPI_NAMESPACE_NODE     *Node;
+    ACPI_OPERAND_OBJECT     *RegionObj2;
+    ACPI_STATUS             Status;
+
+
+    ACPI_FUNCTION_TRACE (EvAssociateRegMethod);
+
+
+    RegionObj2 = AcpiNsGetSecondaryObject (RegionObj);
+    if (!RegionObj2)
     {
-        return_ACPI_STATUS (AE_ALREADY_EXISTS);
+        return_VOID;
     }
 
-    RegionObj->Region.Handler = HandlerObj;
-    AcpiUtAddReference (HandlerObj);
+    Node = RegionObj->Region.Node->Parent;
 
-    return_ACPI_STATUS (AE_OK);
+    /* Find any "_REG" method associated with this region definition */
+
+    Status = AcpiNsSearchOneScope (
+        *RegNamePtr, Node, ACPI_TYPE_METHOD, &MethodNode);
+    if (ACPI_SUCCESS (Status))
+    {
+        /*
+         * The _REG method is optional and there can be only one per region
+         * definition. This will be executed when the handler is attached
+         * or removed
+         */
+        RegionObj2->Extra.Method_REG = MethodNode;
+    }
+
+    return_VOID;
 }
 
 
@@ -579,7 +635,19 @@ AcpiEvExecuteRegMethod (
         return_ACPI_STATUS (AE_NOT_EXIST);
     }
 
-    if (RegionObj2->Extra.Method_REG == NULL)
+    if (RegionObj2->Extra.Method_REG == NULL ||
+        RegionObj->Region.Handler == NULL ||
+        !AcpiGbl_RegMethodsEnabled)
+    {
+        return_ACPI_STATUS (AE_OK);
+    }
+
+    /* _REG(DISCONNECT) should be paired with _REG(CONNECT) */
+
+    if ((Function == ACPI_REG_CONNECT &&
+        RegionObj->Common.Flags & AOPOBJ_REG_CONNECTED) ||
+        (Function == ACPI_REG_DISCONNECT &&
+         !(RegionObj->Common.Flags & AOPOBJ_REG_CONNECTED)))
     {
         return_ACPI_STATUS (AE_OK);
     }
@@ -631,6 +699,20 @@ AcpiEvExecuteRegMethod (
     Status = AcpiNsEvaluate (Info);
     AcpiUtRemoveReference (Args[1]);
 
+    if (ACPI_FAILURE (Status))
+    {
+        goto Cleanup2;
+    }
+
+    if (Function == ACPI_REG_CONNECT)
+    {
+        RegionObj->Common.Flags |= AOPOBJ_REG_CONNECTED;
+    }
+    else
+    {
+        RegionObj->Common.Flags &= ~AOPOBJ_REG_CONNECTED;
+    }
+
 Cleanup2:
     AcpiUtRemoveReference (Args[0]);
 
@@ -646,26 +728,28 @@ Cleanup1:
  *
  * PARAMETERS:  Node            - Namespace node for the device
  *              SpaceId         - The address space ID
+ *              Function        - Passed to _REG: On (1) or Off (0)
  *
- * RETURN:      Status
+ * RETURN:      None
  *
  * DESCRIPTION: Run all _REG methods for the input Space ID;
  *              Note: assumes namespace is locked, or system init time.
  *
  ******************************************************************************/
 
-ACPI_STATUS
+void
 AcpiEvExecuteRegMethods (
     ACPI_NAMESPACE_NODE     *Node,
-    ACPI_ADR_SPACE_TYPE     SpaceId)
+    ACPI_ADR_SPACE_TYPE     SpaceId,
+    UINT32                  Function)
 {
-    ACPI_STATUS             Status;
     ACPI_REG_WALK_INFO      Info;
 
 
     ACPI_FUNCTION_TRACE (EvExecuteRegMethods);
 
     Info.SpaceId = SpaceId;
+    Info.Function = Function;
     Info.RegRunCount = 0;
 
     ACPI_DEBUG_PRINT_RAW ((ACPI_DB_NAMES,
@@ -678,7 +762,7 @@ AcpiEvExecuteRegMethods (
      * regions and _REG methods. (i.e. handlers must be installed for all
      * regions of this Space ID before we can run any _REG methods)
      */
-    Status = AcpiNsWalkNamespace (ACPI_TYPE_ANY, Node, ACPI_UINT32_MAX,
+    (void) AcpiNsWalkNamespace (ACPI_TYPE_ANY, Node, ACPI_UINT32_MAX,
         ACPI_NS_WALK_UNLOCK, AcpiEvRegRun, NULL, &Info, NULL);
 
     /* Special case for EC: handle "orphan" _REG methods with no region */
@@ -692,7 +776,7 @@ AcpiEvExecuteRegMethods (
         "    Executed %u _REG methods for SpaceId %s\n",
         Info.RegRunCount, AcpiUtGetRegionName (Info.SpaceId)));
 
-    return_ACPI_STATUS (Status);
+    return_VOID;
 }
 
 
@@ -759,7 +843,7 @@ AcpiEvRegRun (
     }
 
     Info->RegRunCount++;
-    Status = AcpiEvExecuteRegMethod (ObjDesc, ACPI_REG_CONNECT);
+    Status = AcpiEvExecuteRegMethod (ObjDesc, Info->Function);
     return (Status);
 }
 
index cc0240d..5bb177a 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -567,9 +567,6 @@ AcpiEvInitializeRegion (
     ACPI_ADR_SPACE_TYPE     SpaceId;
     ACPI_NAMESPACE_NODE     *Node;
     ACPI_STATUS             Status;
-    ACPI_NAMESPACE_NODE     *MethodNode;
-    ACPI_NAME               *RegNamePtr = (ACPI_NAME *) METHOD_NAME__REG;
-    ACPI_OPERAND_OBJECT     *RegionObj2;
 
 
     ACPI_FUNCTION_TRACE_U32 (EvInitializeRegion, AcpiNsLocked);
@@ -585,39 +582,15 @@ AcpiEvInitializeRegion (
         return_ACPI_STATUS (AE_OK);
     }
 
-    RegionObj2 = AcpiNsGetSecondaryObject (RegionObj);
-    if (!RegionObj2)
-    {
-        return_ACPI_STATUS (AE_NOT_EXIST);
-    }
+    AcpiEvAssociateRegMethod (RegionObj);
+    RegionObj->Common.Flags |= AOPOBJ_OBJECT_INITIALIZED;
 
     Node = RegionObj->Region.Node->Parent;
     SpaceId = RegionObj->Region.SpaceId;
 
-    /* Setup defaults */
-
-    RegionObj->Region.Handler = NULL;
-    RegionObj2->Extra.Method_REG = NULL;
-    RegionObj->Common.Flags &= ~(AOPOBJ_SETUP_COMPLETE);
-    RegionObj->Common.Flags |= AOPOBJ_OBJECT_INITIALIZED;
-
-    /* Find any "_REG" method associated with this region definition */
-
-    Status = AcpiNsSearchOneScope (
-        *RegNamePtr, Node, ACPI_TYPE_METHOD, &MethodNode);
-    if (ACPI_SUCCESS (Status))
-    {
-        /*
-         * The _REG method is optional and there can be only one per region
-         * definition. This will be executed when the handler is attached
-         * or removed
-         */
-        RegionObj2->Extra.Method_REG = MethodNode;
-    }
-
     /*
      * The following loop depends upon the root Node having no parent
-     * ie: AcpiGbl_RootNode->ParentEntry being set to NULL
+     * ie: AcpiGbl_RootNode->Parent being set to NULL
      */
     while (Node)
     {
@@ -632,18 +605,10 @@ AcpiEvInitializeRegion (
             switch (Node->Type)
             {
             case ACPI_TYPE_DEVICE:
-
-                HandlerObj = ObjDesc->Device.Handler;
-                break;
-
             case ACPI_TYPE_PROCESSOR:
-
-                HandlerObj = ObjDesc->Processor.Handler;
-                break;
-
             case ACPI_TYPE_THERMAL:
 
-                HandlerObj = ObjDesc->ThermalZone.Handler;
+                HandlerObj = ObjDesc->CommonNotify.Handler;
                 break;
 
             case ACPI_TYPE_METHOD:
@@ -667,51 +632,43 @@ AcpiEvInitializeRegion (
                 break;
             }
 
-            while (HandlerObj)
+            HandlerObj = AcpiEvFindRegionHandler (SpaceId, HandlerObj);
+            if (HandlerObj)
             {
-                /* Is this handler of the correct type? */
-
-                if (HandlerObj->AddressSpace.SpaceId == SpaceId)
-                {
-                    /* Found correct handler */
+                /* Found correct handler */
 
-                    ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION,
-                        "Found handler %p for region %p in obj %p\n",
-                        HandlerObj, RegionObj, ObjDesc));
+                ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION,
+                    "Found handler %p for region %p in obj %p\n",
+                    HandlerObj, RegionObj, ObjDesc));
 
-                    Status = AcpiEvAttachRegion (HandlerObj, RegionObj,
-                        AcpiNsLocked);
+                Status = AcpiEvAttachRegion (HandlerObj, RegionObj,
+                    AcpiNsLocked);
 
-                    /*
-                     * Tell all users that this region is usable by
-                     * running the _REG method
-                     */
-                    if (AcpiNsLocked)
+                /*
+                 * Tell all users that this region is usable by
+                 * running the _REG method
+                 */
+                if (AcpiNsLocked)
+                {
+                    Status = AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
+                    if (ACPI_FAILURE (Status))
                     {
-                        Status = AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
-                        if (ACPI_FAILURE (Status))
-                        {
-                            return_ACPI_STATUS (Status);
-                        }
+                        return_ACPI_STATUS (Status);
                     }
+                }
 
-                    Status = AcpiEvExecuteRegMethod (RegionObj, ACPI_REG_CONNECT);
+                Status = AcpiEvExecuteRegMethod (RegionObj, ACPI_REG_CONNECT);
 
-                    if (AcpiNsLocked)
+                if (AcpiNsLocked)
+                {
+                    Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
+                    if (ACPI_FAILURE (Status))
                     {
-                        Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
-                        if (ACPI_FAILURE (Status))
-                        {
-                            return_ACPI_STATUS (Status);
-                        }
+                        return_ACPI_STATUS (Status);
                     }
-
-                    return_ACPI_STATUS (AE_OK);
                 }
 
-                /* Try next handler in the list */
-
-                HandlerObj = HandlerObj->AddressSpace.Next;
+                return_ACPI_STATUS (AE_OK);
             }
         }