From 7bcb6caf98d72e1e5fd653428e604ea1bcc79dd6 Mon Sep 17 00:00:00 2001 From: Sascha Wildner Date: Wed, 16 May 2018 18:50:43 +0200 Subject: [PATCH] Sync ACPICA with Intel's version 20180508 (from previously 20170831). Tons of fixes and improvements. For detailed list, please see sys/contrib/dev/acpica/changes.txt. --- sys/contrib/dev/acpica/changes.txt | 404 ++ .../dev/acpica/generate/unix/Makefile.config | 2 +- .../dev/acpica/generate/unix/acpiexec/Makefile | 3 + .../dev/acpica/generate/unix/acpinames/Makefile | 1 + sys/contrib/dev/acpica/generate/unix/iasl/Makefile | 8 + sys/contrib/dev/acpica/source/common/acfileio.c | 2 +- sys/contrib/dev/acpica/source/common/acgetline.c | 2 +- sys/contrib/dev/acpica/source/common/adfile.c | 62 +- sys/contrib/dev/acpica/source/common/adisasm.c | 6 +- sys/contrib/dev/acpica/source/common/adwalk.c | 2 +- sys/contrib/dev/acpica/source/common/ahids.c | 2 +- sys/contrib/dev/acpica/source/common/ahpredef.c | 2 +- sys/contrib/dev/acpica/source/common/ahtable.c | 4 +- sys/contrib/dev/acpica/source/common/ahuuids.c | 2 +- sys/contrib/dev/acpica/source/common/cmfsize.c | 2 +- sys/contrib/dev/acpica/source/common/dmextern.c | 2 +- sys/contrib/dev/acpica/source/common/dmrestag.c | 2 +- sys/contrib/dev/acpica/source/common/dmswitch.c | 6 +- sys/contrib/dev/acpica/source/common/dmtable.c | 73 +- sys/contrib/dev/acpica/source/common/dmtables.c | 6 +- .../debugger/dbutils.c => common/dmtbdump.c} | 584 ++- sys/contrib/dev/acpica/source/common/dmtbdump1.c | 1542 ++++++++ sys/contrib/dev/acpica/source/common/dmtbdump2.c | 2074 +++++++++++ sys/contrib/dev/acpica/source/common/dmtbdump3.c | 693 ++++ sys/contrib/dev/acpica/source/common/dmtbinfo.c | 3872 +++----------------- sys/contrib/dev/acpica/source/common/dmtbinfo1.c | 1200 ++++++ sys/contrib/dev/acpica/source/common/dmtbinfo2.c | 1541 ++++++++ sys/contrib/dev/acpica/source/common/dmtbinfo3.c | 733 ++++ sys/contrib/dev/acpica/source/common/getopt.c | 2 +- .../source/compiler/{prparser.l => aslallocate.c} | 233 +- .../dev/acpica/source/compiler/aslanalyze.c | 2 +- sys/contrib/dev/acpica/source/compiler/aslascii.c | 2 +- sys/contrib/dev/acpica/source/compiler/aslbtypes.c | 3 +- .../events/evevent.c => compiler/aslcache.c} | 395 +- .../dev/acpica/source/compiler/aslcodegen.c | 21 +- .../dev/acpica/source/compiler/aslcompile.c | 70 +- .../dev/acpica/source/compiler/aslcompiler.h | 82 +- .../dev/acpica/source/compiler/aslcompiler.l | 6 +- sys/contrib/dev/acpica/source/compiler/aslcstyle.y | 2 +- sys/contrib/dev/acpica/source/compiler/asldebug.c | 6 +- sys/contrib/dev/acpica/source/compiler/asldefine.h | 4 +- sys/contrib/dev/acpica/source/compiler/aslerror.c | 791 ++-- .../dev/acpica/source/compiler/aslexternal.c | 2 +- sys/contrib/dev/acpica/source/compiler/aslfileio.c | 2 +- sys/contrib/dev/acpica/source/compiler/aslfiles.c | 11 +- sys/contrib/dev/acpica/source/compiler/aslfold.c | 56 +- sys/contrib/dev/acpica/source/compiler/aslglobal.h | 5 +- sys/contrib/dev/acpica/source/compiler/aslhelp.c | 3 +- .../dev/acpica/source/compiler/aslhelpers.y | 2 +- sys/contrib/dev/acpica/source/compiler/aslhex.c | 25 +- .../dev/acpica/source/compiler/aslkeywords.y | 2 +- sys/contrib/dev/acpica/source/compiler/asllength.c | 2 +- .../dev/acpica/source/compiler/asllisting.c | 2 +- .../dev/acpica/source/compiler/asllistsup.c | 2 +- sys/contrib/dev/acpica/source/compiler/aslload.c | 104 +- sys/contrib/dev/acpica/source/compiler/asllookup.c | 2 +- sys/contrib/dev/acpica/source/compiler/aslmain.c | 2 +- sys/contrib/dev/acpica/source/compiler/aslmap.c | 2 +- .../dev/acpica/source/compiler/aslmapenter.c | 6 +- .../dev/acpica/source/compiler/aslmapoutput.c | 2 +- .../dev/acpica/source/compiler/aslmaputils.c | 6 +- .../dev/acpica/source/compiler/aslmessages.c | 14 +- .../dev/acpica/source/compiler/aslmessages.h | 8 +- sys/contrib/dev/acpica/source/compiler/aslmethod.c | 45 +- sys/contrib/dev/acpica/source/compiler/aslnamesp.c | 2 +- sys/contrib/dev/acpica/source/compiler/asloffset.c | 2 +- .../dev/acpica/source/compiler/aslopcodes.c | 2 +- .../dev/acpica/source/compiler/asloperands.c | 21 +- sys/contrib/dev/acpica/source/compiler/aslopt.c | 4 +- .../dev/acpica/source/compiler/asloptions.c | 31 +- .../dev/acpica/source/compiler/aslparseop.c | 63 +- sys/contrib/dev/acpica/source/compiler/aslparser.y | 2 +- sys/contrib/dev/acpica/source/compiler/aslpld.c | 2 +- sys/contrib/dev/acpica/source/compiler/aslpredef.c | 2 +- sys/contrib/dev/acpica/source/compiler/aslprepkg.c | 2 +- .../dev/acpica/source/compiler/aslprimaries.y | 2 +- sys/contrib/dev/acpica/source/compiler/aslprintf.c | 6 +- sys/contrib/dev/acpica/source/compiler/aslprune.c | 2 +- .../dev/acpica/source/compiler/aslresource.c | 2 +- .../dev/acpica/source/compiler/aslresources.y | 2 +- .../dev/acpica/source/compiler/aslrestype1.c | 2 +- .../dev/acpica/source/compiler/aslrestype1i.c | 2 +- .../dev/acpica/source/compiler/aslrestype2.c | 2 +- .../dev/acpica/source/compiler/aslrestype2d.c | 2 +- .../dev/acpica/source/compiler/aslrestype2e.c | 2 +- .../dev/acpica/source/compiler/aslrestype2q.c | 2 +- .../dev/acpica/source/compiler/aslrestype2s.c | 2 +- .../dev/acpica/source/compiler/aslrestype2w.c | 2 +- sys/contrib/dev/acpica/source/compiler/aslrules.y | 2 +- .../dev/acpica/source/compiler/aslstartup.c | 10 +- sys/contrib/dev/acpica/source/compiler/aslstubs.c | 2 +- .../dev/acpica/source/compiler/aslsupport.l | 24 +- .../dev/acpica/source/compiler/aslsupport.y | 2 +- sys/contrib/dev/acpica/source/compiler/asltokens.y | 2 +- .../dev/acpica/source/compiler/asltransform.c | 2 +- sys/contrib/dev/acpica/source/compiler/asltree.c | 10 +- sys/contrib/dev/acpica/source/compiler/asltypes.h | 14 +- sys/contrib/dev/acpica/source/compiler/asltypes.y | 2 +- sys/contrib/dev/acpica/source/compiler/aslutils.c | 316 +- sys/contrib/dev/acpica/source/compiler/asluuid.c | 2 +- sys/contrib/dev/acpica/source/compiler/aslwalks.c | 2 +- sys/contrib/dev/acpica/source/compiler/aslxref.c | 222 +- .../dev/acpica/source/compiler/aslxrefout.c | 2 +- .../dev/acpica/source/compiler/cvcompiler.c | 28 +- sys/contrib/dev/acpica/source/compiler/cvdisasm.c | 6 +- sys/contrib/dev/acpica/source/compiler/cvparser.c | 10 +- sys/contrib/dev/acpica/source/compiler/dtcompile.c | 38 +- .../dev/acpica/source/compiler/dtcompiler.h | 38 +- sys/contrib/dev/acpica/source/compiler/dtexpress.c | 45 +- sys/contrib/dev/acpica/source/compiler/dtfield.c | 3 +- sys/contrib/dev/acpica/source/compiler/dtio.c | 7 +- sys/contrib/dev/acpica/source/compiler/dtparser.l | 60 +- sys/contrib/dev/acpica/source/compiler/dtparser.y | 105 +- .../dev/acpica/source/compiler/dtsubtable.c | 5 +- sys/contrib/dev/acpica/source/compiler/dttable.c | 19 +- sys/contrib/dev/acpica/source/compiler/dttable1.c | 131 +- sys/contrib/dev/acpica/source/compiler/dttable2.c | 478 ++- .../dev/acpica/source/compiler/dttemplate.c | 5 +- .../dev/acpica/source/compiler/dttemplate.h | 117 +- sys/contrib/dev/acpica/source/compiler/dtutils.c | 155 +- .../dev/acpica/source/compiler/preprocess.h | 2 +- sys/contrib/dev/acpica/source/compiler/prexpress.c | 4 +- sys/contrib/dev/acpica/source/compiler/prmacros.c | 4 +- sys/contrib/dev/acpica/source/compiler/prparser.l | 2 +- sys/contrib/dev/acpica/source/compiler/prparser.y | 3 +- sys/contrib/dev/acpica/source/compiler/prscan.c | 5 +- sys/contrib/dev/acpica/source/compiler/prutils.c | 6 +- .../dev/acpica/source/components/debugger/dbcmds.c | 2 +- .../acpica/source/components/debugger/dbconvert.c | 2 +- .../acpica/source/components/debugger/dbdisply.c | 7 +- .../dev/acpica/source/components/debugger/dbexec.c | 126 +- .../acpica/source/components/debugger/dbfileio.c | 4 +- .../acpica/source/components/debugger/dbhistry.c | 2 +- .../acpica/source/components/debugger/dbinput.c | 207 +- .../acpica/source/components/debugger/dbmethod.c | 2 +- .../acpica/source/components/debugger/dbnames.c | 15 +- .../acpica/source/components/debugger/dbobject.c | 2 +- .../acpica/source/components/debugger/dbstats.c | 2 +- .../dev/acpica/source/components/debugger/dbtest.c | 69 +- .../acpica/source/components/debugger/dbutils.c | 2 +- .../acpica/source/components/debugger/dbxface.c | 2 +- .../source/components/disassembler/dmbuffer.c | 2 +- .../source/components/disassembler/dmcstyle.c | 2 +- .../source/components/disassembler/dmdeferred.c | 2 +- .../source/components/disassembler/dmnames.c | 2 +- .../source/components/disassembler/dmopcode.c | 2 +- .../source/components/disassembler/dmresrc.c | 2 +- .../source/components/disassembler/dmresrcl.c | 2 +- .../source/components/disassembler/dmresrcl2.c | 2 +- .../source/components/disassembler/dmresrcs.c | 2 +- .../source/components/disassembler/dmutils.c | 2 +- .../acpica/source/components/disassembler/dmwalk.c | 8 +- .../acpica/source/components/dispatcher/dsargs.c | 3 +- .../source/components/dispatcher/dscontrol.c | 19 +- .../acpica/source/components/dispatcher/dsdebug.c | 2 +- .../acpica/source/components/dispatcher/dsfield.c | 29 +- .../acpica/source/components/dispatcher/dsinit.c | 2 +- .../acpica/source/components/dispatcher/dsmethod.c | 2 +- .../acpica/source/components/dispatcher/dsmthdat.c | 2 +- .../acpica/source/components/dispatcher/dsobject.c | 5 +- .../acpica/source/components/dispatcher/dsopcode.c | 6 +- .../source/components/dispatcher/dspkginit.c | 185 +- .../acpica/source/components/dispatcher/dsutils.c | 5 +- .../acpica/source/components/dispatcher/dswexec.c | 6 +- .../acpica/source/components/dispatcher/dswload.c | 8 +- .../acpica/source/components/dispatcher/dswload2.c | 14 +- .../acpica/source/components/dispatcher/dswscope.c | 11 +- .../acpica/source/components/dispatcher/dswstate.c | 2 +- .../dev/acpica/source/components/events/evevent.c | 11 +- .../dev/acpica/source/components/events/evglock.c | 2 +- .../dev/acpica/source/components/events/evgpe.c | 240 +- .../dev/acpica/source/components/events/evgpeblk.c | 22 +- .../acpica/source/components/events/evgpeinit.c | 2 +- .../acpica/source/components/events/evgpeutil.c | 2 +- .../acpica/source/components/events/evhandler.c | 2 +- .../dev/acpica/source/components/events/evmisc.c | 2 +- .../dev/acpica/source/components/events/evregion.c | 13 +- .../dev/acpica/source/components/events/evrgnini.c | 7 +- .../dev/acpica/source/components/events/evsci.c | 2 +- .../dev/acpica/source/components/events/evxface.c | 11 +- .../dev/acpica/source/components/events/evxfevnt.c | 2 +- .../dev/acpica/source/components/events/evxfgpe.c | 33 +- .../dev/acpica/source/components/events/evxfregn.c | 2 +- .../acpica/source/components/executer/exconcat.c | 2 +- .../acpica/source/components/executer/exconfig.c | 12 +- .../acpica/source/components/executer/exconvrt.c | 3 +- .../acpica/source/components/executer/excreate.c | 2 +- .../acpica/source/components/executer/exdebug.c | 9 +- .../dev/acpica/source/components/executer/exdump.c | 8 +- .../acpica/source/components/executer/exfield.c | 2 +- .../acpica/source/components/executer/exfldio.c | 2 +- .../dev/acpica/source/components/executer/exmisc.c | 2 +- .../acpica/source/components/executer/exmutex.c | 2 +- .../acpica/source/components/executer/exnames.c | 9 +- .../acpica/source/components/executer/exoparg1.c | 2 +- .../acpica/source/components/executer/exoparg2.c | 2 +- .../acpica/source/components/executer/exoparg3.c | 2 +- .../acpica/source/components/executer/exoparg6.c | 2 +- .../dev/acpica/source/components/executer/exprep.c | 2 +- .../acpica/source/components/executer/exregion.c | 2 +- .../acpica/source/components/executer/exresnte.c | 2 +- .../acpica/source/components/executer/exresolv.c | 2 +- .../acpica/source/components/executer/exresop.c | 3 +- .../acpica/source/components/executer/exstore.c | 2 +- .../acpica/source/components/executer/exstoren.c | 2 +- .../acpica/source/components/executer/exstorob.c | 2 +- .../acpica/source/components/executer/exsystem.c | 2 +- .../acpica/source/components/executer/extrace.c | 2 +- .../acpica/source/components/executer/exutils.c | 2 +- .../dev/acpica/source/components/hardware/hwacpi.c | 2 +- .../acpica/source/components/hardware/hwesleep.c | 2 +- .../dev/acpica/source/components/hardware/hwgpe.c | 3 +- .../dev/acpica/source/components/hardware/hwpci.c | 2 +- .../dev/acpica/source/components/hardware/hwregs.c | 2 +- .../acpica/source/components/hardware/hwsleep.c | 14 +- .../acpica/source/components/hardware/hwtimer.c | 29 +- .../acpica/source/components/hardware/hwvalid.c | 19 +- .../acpica/source/components/hardware/hwxface.c | 2 +- .../acpica/source/components/hardware/hwxfsleep.c | 4 +- .../acpica/source/components/namespace/nsaccess.c | 16 +- .../acpica/source/components/namespace/nsalloc.c | 2 +- .../source/components/namespace/nsarguments.c | 2 +- .../acpica/source/components/namespace/nsconvert.c | 5 +- .../acpica/source/components/namespace/nsdump.c | 2 +- .../acpica/source/components/namespace/nsdumpdv.c | 7 +- .../acpica/source/components/namespace/nseval.c | 37 +- .../acpica/source/components/namespace/nsinit.c | 81 +- .../acpica/source/components/namespace/nsload.c | 26 +- .../acpica/source/components/namespace/nsnames.c | 177 +- .../acpica/source/components/namespace/nsobject.c | 2 +- .../acpica/source/components/namespace/nsparse.c | 36 +- .../acpica/source/components/namespace/nspredef.c | 2 +- .../acpica/source/components/namespace/nsprepkg.c | 2 +- .../acpica/source/components/namespace/nsrepair.c | 2 +- .../acpica/source/components/namespace/nsrepair2.c | 2 +- .../acpica/source/components/namespace/nssearch.c | 3 +- .../acpica/source/components/namespace/nsutils.c | 2 +- .../acpica/source/components/namespace/nswalk.c | 2 +- .../acpica/source/components/namespace/nsxfeval.c | 20 +- .../acpica/source/components/namespace/nsxfname.c | 24 +- .../acpica/source/components/namespace/nsxfobj.c | 2 +- .../dev/acpica/source/components/parser/psargs.c | 14 +- .../dev/acpica/source/components/parser/psloop.c | 30 +- .../dev/acpica/source/components/parser/psobject.c | 17 +- .../dev/acpica/source/components/parser/psopcode.c | 2 +- .../dev/acpica/source/components/parser/psopinfo.c | 2 +- .../dev/acpica/source/components/parser/psparse.c | 4 +- .../dev/acpica/source/components/parser/psscope.c | 2 +- .../dev/acpica/source/components/parser/pstree.c | 3 +- .../dev/acpica/source/components/parser/psutils.c | 12 +- .../dev/acpica/source/components/parser/pswalk.c | 2 +- .../dev/acpica/source/components/parser/psxface.c | 2 +- .../acpica/source/components/resources/rsaddr.c | 2 +- .../acpica/source/components/resources/rscalc.c | 2 +- .../acpica/source/components/resources/rscreate.c | 2 +- .../acpica/source/components/resources/rsdump.c | 4 +- .../source/components/resources/rsdumpinfo.c | 2 +- .../acpica/source/components/resources/rsinfo.c | 2 +- .../dev/acpica/source/components/resources/rsio.c | 2 +- .../dev/acpica/source/components/resources/rsirq.c | 2 +- .../acpica/source/components/resources/rslist.c | 2 +- .../acpica/source/components/resources/rsmemory.c | 2 +- .../acpica/source/components/resources/rsmisc.c | 2 +- .../acpica/source/components/resources/rsserial.c | 2 +- .../acpica/source/components/resources/rsutils.c | 2 +- .../acpica/source/components/resources/rsxface.c | 2 +- .../dev/acpica/source/components/tables/tbdata.c | 20 +- .../dev/acpica/source/components/tables/tbfadt.c | 2 +- .../dev/acpica/source/components/tables/tbfind.c | 2 +- .../dev/acpica/source/components/tables/tbinstal.c | 10 +- .../dev/acpica/source/components/tables/tbprint.c | 2 +- .../dev/acpica/source/components/tables/tbutils.c | 2 +- .../dev/acpica/source/components/tables/tbxface.c | 2 +- .../dev/acpica/source/components/tables/tbxfload.c | 15 +- .../dev/acpica/source/components/tables/tbxfroot.c | 2 +- .../acpica/source/components/utilities/utaddress.c | 2 +- .../acpica/source/components/utilities/utalloc.c | 2 +- .../acpica/source/components/utilities/utascii.c | 2 +- .../acpica/source/components/utilities/utbuffer.c | 6 +- .../acpica/source/components/utilities/utcache.c | 7 +- .../acpica/source/components/utilities/utclib.c | 2 +- .../acpica/source/components/utilities/utcopy.c | 2 +- .../acpica/source/components/utilities/utdebug.c | 21 +- .../acpica/source/components/utilities/utdecode.c | 13 +- .../acpica/source/components/utilities/utdelete.c | 18 +- .../acpica/source/components/utilities/uterror.c | 80 +- .../acpica/source/components/utilities/uteval.c | 2 +- .../acpica/source/components/utilities/utexcep.c | 2 +- .../acpica/source/components/utilities/utglobal.c | 2 +- .../dev/acpica/source/components/utilities/uthex.c | 2 +- .../dev/acpica/source/components/utilities/utids.c | 2 +- .../acpica/source/components/utilities/utinit.c | 3 +- .../acpica/source/components/utilities/utlock.c | 2 +- .../acpica/source/components/utilities/utmath.c | 6 +- .../acpica/source/components/utilities/utmisc.c | 2 +- .../acpica/source/components/utilities/utmutex.c | 9 +- .../acpica/source/components/utilities/utnonansi.c | 17 +- .../acpica/source/components/utilities/utobject.c | 2 +- .../dev/acpica/source/components/utilities/utosi.c | 5 +- .../acpica/source/components/utilities/utownerid.c | 2 +- .../acpica/source/components/utilities/utpredef.c | 2 +- .../acpica/source/components/utilities/utprint.c | 3 +- .../source/components/utilities/utresdecode.c | 2 +- .../acpica/source/components/utilities/utresrc.c | 2 +- .../acpica/source/components/utilities/utstate.c | 2 +- .../acpica/source/components/utilities/utstring.c | 4 +- .../source/components/utilities/utstrsuppt.c | 36 +- .../source/components/utilities/utstrtoul64.c | 2 +- .../acpica/source/components/utilities/uttrack.c | 7 +- .../acpica/source/components/utilities/utuuid.c | 2 +- .../acpica/source/components/utilities/utxface.c | 2 +- .../acpica/source/components/utilities/utxferror.c | 10 +- .../acpica/source/components/utilities/utxfinit.c | 50 +- .../acpica/source/components/utilities/utxfmutex.c | 2 +- sys/contrib/dev/acpica/source/include/acapps.h | 11 +- sys/contrib/dev/acpica/source/include/acbuffer.h | 2 +- sys/contrib/dev/acpica/source/include/acclib.h | 2 +- sys/contrib/dev/acpica/source/include/accommon.h | 2 +- sys/contrib/dev/acpica/source/include/acconfig.h | 6 +- sys/contrib/dev/acpica/source/include/acconvert.h | 2 +- sys/contrib/dev/acpica/source/include/acdebug.h | 8 +- sys/contrib/dev/acpica/source/include/acdisasm.h | 30 +- sys/contrib/dev/acpica/source/include/acdispat.h | 2 +- sys/contrib/dev/acpica/source/include/acevents.h | 23 +- sys/contrib/dev/acpica/source/include/acexcep.h | 12 +- sys/contrib/dev/acpica/source/include/acglobal.h | 123 +- sys/contrib/dev/acpica/source/include/achware.h | 2 +- sys/contrib/dev/acpica/source/include/acinterp.h | 2 +- sys/contrib/dev/acpica/source/include/aclocal.h | 28 +- sys/contrib/dev/acpica/source/include/acmacros.h | 8 +- sys/contrib/dev/acpica/source/include/acnames.h | 9 +- sys/contrib/dev/acpica/source/include/acnamesp.h | 13 +- sys/contrib/dev/acpica/source/include/acobject.h | 2 +- sys/contrib/dev/acpica/source/include/acopcode.h | 16 +- sys/contrib/dev/acpica/source/include/acoutput.h | 2 +- sys/contrib/dev/acpica/source/include/acparser.h | 2 +- sys/contrib/dev/acpica/source/include/acpi.h | 2 +- sys/contrib/dev/acpica/source/include/acpiosxf.h | 2 +- sys/contrib/dev/acpica/source/include/acpixf.h | 29 +- sys/contrib/dev/acpica/source/include/acpredef.h | 2 +- sys/contrib/dev/acpica/source/include/acresrc.h | 2 +- sys/contrib/dev/acpica/source/include/acrestyp.h | 2 +- sys/contrib/dev/acpica/source/include/acstruct.h | 2 +- sys/contrib/dev/acpica/source/include/actables.h | 2 +- sys/contrib/dev/acpica/source/include/actbinfo.h | 411 +++ sys/contrib/dev/acpica/source/include/actbl.h | 2 +- sys/contrib/dev/acpica/source/include/actbl1.h | 2419 ++++++------ .../acpica/source/include/{actbl1.h => actbl2.h} | 1905 +++++----- sys/contrib/dev/acpica/source/include/actbl3.h | 1138 +++--- sys/contrib/dev/acpica/source/include/actypes.h | 43 +- sys/contrib/dev/acpica/source/include/acutils.h | 24 +- sys/contrib/dev/acpica/source/include/acuuid.h | 2 +- sys/contrib/dev/acpica/source/include/amlcode.h | 23 +- sys/contrib/dev/acpica/source/include/amlresrc.h | 2 +- .../dev/acpica/source/include/platform/accygwin.h | 2 +- .../acpica/source/include/platform/acdragonflyex.h | 2 +- .../dev/acpica/source/include/platform/acefi.h | 2 +- .../dev/acpica/source/include/platform/acefiex.h | 2 +- .../dev/acpica/source/include/platform/acenv.h | 2 +- .../dev/acpica/source/include/platform/acenvex.h | 2 +- .../dev/acpica/source/include/platform/acfreebsd.h | 2 +- .../dev/acpica/source/include/platform/acgcc.h | 2 +- .../dev/acpica/source/include/platform/acgccex.h | 2 +- .../dev/acpica/source/include/platform/achaiku.h | 2 +- .../dev/acpica/source/include/platform/acintel.h | 2 +- .../dev/acpica/source/include/platform/aclinux.h | 6 +- .../dev/acpica/source/include/platform/aclinuxex.h | 2 +- .../dev/acpica/source/include/platform/acmacosx.h | 2 +- .../dev/acpica/source/include/platform/acmsvc.h | 2 +- .../dev/acpica/source/include/platform/acmsvcex.h | 2 +- .../dev/acpica/source/include/platform/acnetbsd.h | 2 +- .../dev/acpica/source/include/platform/acos2.h | 2 +- .../dev/acpica/source/include/platform/acqnx.h | 2 +- .../dev/acpica/source/include/platform/acwin.h | 2 +- .../dev/acpica/source/include/platform/acwin64.h | 2 +- .../source/os_specific/service_layers/osbsdtbl.c | 2 +- .../source/os_specific/service_layers/osgendbg.c | 5 +- .../source/os_specific/service_layers/oslinuxtbl.c | 2 +- .../source/os_specific/service_layers/osunixdir.c | 2 +- .../source/os_specific/service_layers/osunixmap.c | 2 +- .../source/os_specific/service_layers/osunixxf.c | 2 +- .../source/os_specific/service_layers/oswindir.c | 2 +- .../source/os_specific/service_layers/oswintbl.c | 2 +- .../source/os_specific/service_layers/oswinxf.c | 2 +- .../dev/acpica/source/tools/acpibin/abcompare.c | 2 +- .../dev/acpica/source/tools/acpibin/abmain.c | 24 +- .../dev/acpica/source/tools/acpibin/acpibin.h | 2 +- .../dev/acpica/source/tools/acpidump/acpidump.h | 2 +- .../dev/acpica/source/tools/acpidump/apdump.c | 2 +- .../dev/acpica/source/tools/acpidump/apfiles.c | 2 +- .../dev/acpica/source/tools/acpidump/apmain.c | 28 +- .../dev/acpica/source/tools/acpiexec/aecommon.h | 83 +- .../dev/acpica/source/tools/acpiexec/aeexception.c | 24 +- .../dev/acpica/source/tools/acpiexec/aeexec.c | 512 +-- .../dev/acpica/source/tools/acpiexec/aehandlers.c | 18 +- .../dev/acpica/source/tools/acpiexec/aeinitfile.c | 2 +- .../osgendbg.c => tools/acpiexec/aeinstall.c} | 423 +-- .../dev/acpica/source/tools/acpiexec/aemain.c | 150 +- .../dev/acpica/source/tools/acpiexec/aeregion.c | 280 +- .../dev/acpica/source/tools/acpiexec/aetables.c | 18 +- .../dev/acpica/source/tools/acpiexec/aetables.h | 2 +- .../source/tools/acpiexec/{aeexec.c => aetests.c} | 683 +--- .../dev/acpica/source/tools/acpihelp/acpihelp.h | 4 +- .../dev/acpica/source/tools/acpihelp/ahaml.c | 2 +- .../dev/acpica/source/tools/acpihelp/ahamlops.c | 2 +- .../dev/acpica/source/tools/acpihelp/ahasl.c | 2 +- .../dev/acpica/source/tools/acpihelp/ahaslkey.c | 2 +- .../dev/acpica/source/tools/acpihelp/ahaslops.c | 2 +- .../dev/acpica/source/tools/acpihelp/ahdecode.c | 4 +- .../dev/acpica/source/tools/acpihelp/ahgrammar.c | 2 +- .../dev/acpica/source/tools/acpihelp/ahmain.c | 23 +- .../dev/acpica/source/tools/acpinames/acpinames.h | 2 +- .../dev/acpica/source/tools/acpinames/anmain.c | 65 +- .../dev/acpica/source/tools/acpinames/anstubs.c | 45 +- .../dev/acpica/source/tools/acpinames/antables.c | 8 +- .../dev/acpica/source/tools/acpisrc/acpisrc.h | 12 +- .../dev/acpica/source/tools/acpisrc/ascase.c | 2 +- .../dev/acpica/source/tools/acpisrc/asconvrt.c | 41 +- .../dev/acpica/source/tools/acpisrc/asfile.c | 9 +- .../dev/acpica/source/tools/acpisrc/asmain.c | 8 +- .../dev/acpica/source/tools/acpisrc/asremove.c | 2 +- .../dev/acpica/source/tools/acpisrc/astable.c | 34 +- .../dev/acpica/source/tools/acpisrc/asutils.c | 11 +- .../acpica/source/tools/acpixtract/acpixtract.c | 246 +- .../acpica/source/tools/acpixtract/acpixtract.h | 39 +- .../dev/acpica/source/tools/acpixtract/axmain.c | 32 +- .../dev/acpica/source/tools/acpixtract/axutils.c | 419 ++- .../dev/acpica/source/tools/efihello/efihello.c | 2 +- .../dev/acpica/source/tools/examples/examples.c | 16 +- .../dev/acpica/source/tools/examples/examples.h | 2 +- .../dev/acpica/source/tools/examples/exstubs.c | 2 +- .../dev/acpica/source/tools/examples/extables.c | 2 +- sys/contrib/dev/acpica/tests/misc/badcode.asl | 1 - .../dev/acpica/tests/misc/converterSample.asl | 3 +- sys/contrib/dev/acpica/tests/misc/grammar.asl | 33 +- sys/dev/acpica/acpi.c | 42 +- usr.sbin/acpi/acpibin/acpibin.8 | 8 +- usr.sbin/acpi/acpidump/acpidump.8 | 4 +- usr.sbin/acpi/acpiexec/Makefile | 5 +- usr.sbin/acpi/acpiexec/acpiexec.8 | 16 +- usr.sbin/acpi/acpihelp/acpihelp.8 | 4 +- usr.sbin/acpi/acpinames/Makefile | 1 + usr.sbin/acpi/acpinames/acpinames.8 | 4 +- usr.sbin/acpi/acpixtract/acpixtract.8 | 6 +- usr.sbin/acpi/iasl/Makefile | 8 + 445 files changed, 17638 insertions(+), 11250 deletions(-) copy sys/contrib/dev/acpica/source/{components/debugger/dbutils.c => common/dmtbdump.c} (52%) create mode 100644 sys/contrib/dev/acpica/source/common/dmtbdump1.c create mode 100644 sys/contrib/dev/acpica/source/common/dmtbdump2.c create mode 100644 sys/contrib/dev/acpica/source/common/dmtbdump3.c rewrite sys/contrib/dev/acpica/source/common/dmtbinfo.c (86%) create mode 100644 sys/contrib/dev/acpica/source/common/dmtbinfo1.c create mode 100644 sys/contrib/dev/acpica/source/common/dmtbinfo2.c create mode 100644 sys/contrib/dev/acpica/source/common/dmtbinfo3.c copy sys/contrib/dev/acpica/source/compiler/{prparser.l => aslallocate.c} (72%) copy sys/contrib/dev/acpica/source/{components/events/evevent.c => compiler/aslcache.c} (55%) create mode 100644 sys/contrib/dev/acpica/source/include/actbinfo.h copy sys/contrib/dev/acpica/source/include/{actbl1.h => actbl2.h} (51%) copy sys/contrib/dev/acpica/source/{os_specific/service_layers/osgendbg.c => tools/acpiexec/aeinstall.c} (60%) copy sys/contrib/dev/acpica/source/tools/acpiexec/{aeexec.c => aetests.c} (66%) diff --git a/sys/contrib/dev/acpica/changes.txt b/sys/contrib/dev/acpica/changes.txt index db25f7e5fb..8273d37b26 100644 --- a/sys/contrib/dev/acpica/changes.txt +++ b/sys/contrib/dev/acpica/changes.txt @@ -1,4 +1,408 @@ ---------------------------------------- +8 May 2018. Summary of changes for version 20180508: + + +1) ACPICA kernel-resident subsystem: + +Completed the new (recently deployed) package resolution mechanism for +the Load and LoadTable ASL/AML operators. This fixes a regression that +was introduced in version 20180209 that could result in an +AE_AML_INTERNAL exception during the loading of a dynamic ACPI/AML table +(SSDT) that contains package objects. + + +2) iASL Compiler/Disassembler and Tools: + +AcpiDump and AcpiXtract: Implemented support for ACPI tables larger than +1 MB. This change allows for table offsets within the acpidump file to be +up to 8 characters. These changes are backwards compatible with existing +acpidump files. + + +---------------------------------------- +27 April 2018. Summary of changes for version 20180427: + + +1) ACPICA kernel-resident subsystem: + +Debugger: Added support for Package objects in the "Test Objects" +command. This command walks the entire namespace and evaluates all named +data objects (Integers, Strings, Buffers, and now Packages). + +Improved error messages for the namespace root node. Originally, the root +was referred to by the confusing string "\___". This has been replaced by +"Namespace Root" for clarification. + +Fixed a potential infinite loop in the AcpiRsDumpByteList function. Colin +Ian King . + + +2) iASL Compiler/Disassembler and Tools: + +iASL: Implemented support to detect and flag illegal forward references. +For compatibility with other ACPI implementations, these references are +now illegal at the root level of the DSDT or SSDTs. Forward references +have always been illegal within control methods. This change should not +affect existing ASL/AML code because of the fact that these references +have always been illegal in the other ACPI implementation. + +iASL: Added error messages for the case where a table OEM ID and OEM +TABLE ID strings are longer than the ACPI-defined length. Previously, +these strings were simply silently truncated. + +iASL: Enhanced the -tc option (which creates an AML hex file in C, +suitable for import into a firmware project): + 1) Create a unique name for the table, to simplify use of multiple +SSDTs. + 2) Add a protection #ifdef in the file, similar to a .h header file. +With assistance from Sami Mujawar, sami.mujawar@arm.com and Evan Lloyd, +evan.lloyd@arm.com + +AcpiExec: Added a new option, -df, to disable the local fault handler. +This is useful during debugging, where it may be desired to drop into a +debugger on a fault. + +---------------------------------------- +13 March 2018. Summary of changes for version 20180313: + + +1) ACPICA kernel-resident subsystem: + +Implemented various improvements to the GPE support: + +1) Dispatch all active GPEs at initialization time so that no GPEs are +lost. +2) Enable runtime GPEs earlier. Some systems expect GPEs to be enabled +before devices are enumerated. +3) Don't unconditionally clear ACPI IRQs during suspend/resume, so that +IRQs are not lost. +4) Add parallel GPE handling to eliminate the possibility of dispatching +the same GPE twice. +5) Dispatch any pending GPEs after enabling for the first time. + +AcpiGetObjectInfo - removed support for the _STA method. This was causing +problems on some platforms. + +Added a new _OSI string, "Windows 2017.2". + +Cleaned up and simplified the module-level code support. These changes +are in preparation for the eventual removal of the legacy MLC support +(deferred execution), replaced by the new MLC architecture which executes +the MLC as a table is loaded (DSDT/SSDTs). + +Changed a compile-time option to a runtime option. Changes the option to +ignore ACPI table load-time package resolution errors into a runtime +option. Used only for platforms that generate many AE_NOT_FOUND errors +during boot. AcpiGbl_IgnorePackageResolutionErrors. + +Fixed the ACPI_ERROR_NAMESPACE macro. This change involves putting some +ACPI_ERROR_NAMESPACE parameters inside macros. By doing so, we avoid +compilation errors from unused variables (seen with some compilers). + + +2) iASL Compiler/Disassembler and Tools: + +ASLTS: parallelized execution in order to achieve an (approximately) 2X +performance increase. + +ASLTS: Updated to use the iASL __LINE__ and __METHOD__ macros. Improves +error reporting. + +---------------------------------------- +09 February 2018. Summary of changes for version 20180209: + + +1) ACPICA kernel-resident subsystem: + +Completed the final integration of the recent changes to Package Object +handling and the module-level AML code support. This allows forward +references from individual package elements when the package object is +declared from within module-level code blocks. Provides compatibility +with other ACPI implementations. + +The new architecture for the AML module-level code has been completed and +is now the default for the ACPICA code. This new architecture executes +the module-level code in-line as the ACPI table is loaded/parsed instead +of the previous architecture which deferred this code until after the +table was fully loaded. This solves some ASL code ordering issues and +provides compatibility with other ACPI implementations. At this time, +there is an option to fallback to the earlier architecture, but this +support is deprecated and is planned to be completely removed later this +year. + +Added a compile-time option to ignore AE_NOT_FOUND exceptions during +resolution of named reference elements within Package objects. Although +this is potentially a serious problem, it can generate a lot of +noise/errors on platforms whose firmware carries around a bunch of unused +Package objects. To disable these errors, define +ACPI_IGNORE_PACKAGE_RESOLUTION_ERRORS in the OS-specific header. All +errors are always reported for ACPICA applications such as AcpiExec. + +Fixed a regression related to the explicit type-conversion AML operators +(ToXXXX). The regression was introduced early in 2017 but was not seen +until recently because these operators are not fully supported by other +ACPI implementations and are thus rarely used by firmware developers. The +operators are defined by the ACPI specification to not implement the +"implicit result object conversion". The regression incorrectly +introduced this object conversion for the following explicit conversion +operators: + ToInteger + ToString + ToBuffer + ToDecimalString + ToHexString + ToBCD + FromBCD + + +2) iASL Compiler/Disassembler and Tools: + +iASL: Fixed a problem with the compiler constant folding feature as +related to the ToXXXX explicit conversion operators. These operators do +not support the "implicit result object conversion" by definition. Thus, +ASL expressions that use these operators cannot be folded to a simple +Store operator because Store implements the implicit conversion. This +change uses the CopyObject operator for the ToXXXX operator folding +instead. CopyObject is defined to not implement implicit result +conversions and is thus appropriate for folding the ToXXXX operators. + +iASL: Changed the severity of an error condition to a simple warning for +the case where a symbol is declared both locally and as an external +symbol. This accommodates existing ASL code. + +AcpiExec: The -ep option to enable the new architecture for module-level +code has been removed. It is replaced by the -dp option which instead has +the opposite effect: it disables the new architecture (the default) and +enables the legacy architecture. When the legacy code is removed in the +future, the -dp option will be removed also. + +---------------------------------------- +05 January 2018. Summary of changes for version 20180105: + + +1) ACPICA kernel-resident subsystem: + +Updated all copyrights to 2018. This affects all source code modules. + +Fixed a possible build error caused by an unresolved reference to the +AcpiUtSafeStrncpy function. + +Removed NULL pointer arithmetic in the various pointer manipulation +macros. All "(void *) NULL" constructs are converted to "(void *) 0". +This eliminates warnings/errors in newer C compilers. Jung-uk Kim. + +Added support for A32 ABI compilation, which uses the ILP32 model. Anuj +Mittal. + + +2) iASL Compiler/Disassembler and Tools: + +ASLTS: Updated all copyrights to 2018. + +Tools: Updated all signon copyrights to 2018. + +AcpiXtract: Fixed a regression related to ACPI table signatures where the +signature was truncated to 3 characters (instead of 4). + +AcpiExec: Restore the original terminal mode after the use of the -v and +-vd options. + +ASLTS: Deployed the iASL __METHOD__ macro across the test suite. + +---------------------------------------- +14 December 2017. Summary of changes for version 20171214: + + +1) ACPICA kernel-resident subsystem: + +Fixed a regression in the external (public) AcpiEvaluateObjectTyped +interface where the optional "pathname" argument had inadvertently become +a required argument returning an error if omitted (NULL pointer +argument). + +Fixed two possible memory leaks related to the recently developed "late +resolution" of reference objects within ASL Package Object definitions. + +Added two recently defined _OSI strings: "Windows 2016" and "Windows +2017". Mario Limonciello. + +Implemented and deployed a safer version of the C library function +strncpy: AcpiUtSafeStrncpy. The intent is to at least prevent the +creation of unterminated strings as a possible result of a standard +strncpy. + +Cleaned up and restructured the global variable file (acglobal.h). There +are many changes, but no functional changes. + + +2) iASL Compiler/Disassembler and Tools: + +iASL Table Compiler: Fixed a problem with the DBG2 ACPI table where the +optional OemData field at the end of the table was incorrectly required +for proper compilation. It is now correctly an optional field. + +ASLTS: The entire suite was converted from standard ASL to the ASL+ +language, using the ASL-to-ASL+ converter which is integrated into the +iASL compiler. A binary compare of all output files has verified the +correctness of the conversion. + +iASL: Fixed the source code build for platforms where "char" is unsigned. +This affected the iASL lexer only. Jung-uk Kim. + +---------------------------------------- +10 November 2017. Summary of changes for version 20171110: + + +1) ACPICA kernel-resident subsystem: + +This release implements full support for ACPI 6.2A: + NFIT - Added a new subtable, "Platform Capabilities Structure" +No other changes to ACPICA were required, since ACPI 6.2A is primarily an +errata release of the specification. + +Other ACPI table changes: + IORT: Added the SMMUv3 Device ID mapping index. Hanjun Guo + PPTT: Added cache attribute flag definitions to actbl1.h. Jeremy +Linton + +Utilities: Modified the string/integer conversion functions to use +internal 64-bit divide support instead of a native divide. On 32-bit +platforms, a 64-bit divide typically requires a library function which +may not be present in the build (kernel or otherwise). + +Implemented a targeted error message for timeouts returned from the +Embedded Controller device driver. This is seen frequently enough to +special-case an AE_TIME returned from an EC operation region access: + "Timeout from EC hardware or EC device driver" + +Changed the "ACPI Exception" message prefix to "ACPI Error" so that all +runtime error messages have the identical prefix. + + +2) iASL Compiler/Disassembler and Tools: + +AcpiXtract: Fixed a problem with table header detection within the +acpidump file. Processing a table could be ended early if a 0x40 (@) +appears in the original binary table, resulting in the @ symbol appearing +in the decoded ASCII field at the end of the acpidump text line. The +symbol caused acpixtract to incorrectly think it had reached the end of +the current table and the beginning of a new table. + +AcpiXtract: Added an option (-f) to ignore some errors during table +extraction. This initial implementation ignores non-ASCII and non- +printable characters found in the acpidump text file. + +TestSuite(ASLTS)/AcpiExec: Fixed and restored the memory usage statistics +for ASLTS. This feature is used to track memory allocations from +different memory caches within the ACPICA code. At the end of an ASLTS +run, these memory statistics are recorded and stored in a log file. + +Debugger (user-space version): Implemented a simple "Background" command. +Creates a new thread to execute a control method in the background, while +control returns to the debugger prompt to allow additional commands. + Syntax: Background [Arguments] + +---------------------------------------- +29 September 2017. Summary of changes for version 20170929: + + +1) ACPICA kernel-resident subsystem: + +Redesigned and implemented an improved ASL While() loop timeout +mechanism. This mechanism is used to prevent infinite loops in the kernel +AML interpreter caused by either non-responsive hardware or incorrect AML +code. The new implementation uses AcpiOsGetTimer instead of a simple +maximum loop count, and is thus more accurate and constant across +different machines. The default timeout is currently 30 seconds, but this +may be adjusted later. + +Renamed the ACPI_AML_INFINITE_LOOP exception to AE_AML_LOOP_TIMEOUT to +better reflect the new implementation of the loop timeout mechanism. + +Updated the AcpiGetTimerDuration interface to cleanup the 64-bit support +and to fix an off-by-one error. Jung-uk Kim. + +Fixed an EFI build problem by updating the makefiles to for a new file +that was added, utstrsuppt.c + + +2) iASL Compiler/Disassembler and Tools: + +Implemented full support for the PDTT, SDEV, and TPM2 ACPI tables. This +includes support in the table disassembler, compiler, and template +generator. + +iASL: Added an exception for an illegal type of recursive method +invocation. If a method creates named objects, the first recursive call +will fail at runtime. This change adds an error detection at compile time +to catch the problem up front. Note: Marking such a method as +"serialized" will not help with this problem, because the same thread can +acquire the method mutex more than once. Example compiler and runtime +output: + + Method (MTH1) + { + Name (INT1, 1) + MTH1 () + } + + dsdt.asl 22: MTH1 () + Error 6152 - ^ Illegal recursive call to method + that creates named objects (MTH1) + +Previous runtime exception: + ACPI Error: [INT1] Namespace lookup failure, + AE_ALREADY_EXISTS (20170831/dswload2-465) + +iASL: Updated support for External() opcodes to improve namespace +management and error detection. These changes are related to issues seen +with multiple-segment namespace pathnames within External declarations, +such as below: + + External(\_SB.PCI0.GFX0, DeviceObj) + External(\_SB.PCI0.GFX0.ALSI) + +iASL: Implemented support for multi-line error/warning messages. This +enables more detailed and helpful error messages as below, from the +initial deployment for the duplicate names error: + + DSDT.iiii 1692: Device(PEG2) { + Error 6074 - ^ Name already exists in scope +(PEG2) + + Original name creation/declaration below: + DSDT.iiii 93: External(\_SB.PCI0.PEG2, DeviceObj) + +AcpiXtract: Added additional flexibility to support differing input hex +dump formats. Specifically, hex dumps that contain partial disassembly +and/or comments within the ACPI table data definition. There exist some +dump utilities seen in the field that create this type of hex dump (such +as Simics). For example: + + DSDT @ 0xdfffd0c0 (10999 bytes) + Signature DSDT + Length 10999 + Revision 1 + Checksum 0xf3 (Ok) + OEM_ID BXPC + OEM_table_id BXDSDT + OEM_revision 1 + Creator_id 1280593481 + Creator_revision 537399345 + 0000: 44 53 44 54 f7 2a 00 00 01 f3 42 58 50 43 00 00 + ... + 2af0: 5f 4c 30 46 00 a4 01 + +Test suite: Miscellaneous changes/fixes: + More cleanup and simplification of makefiles + Continue compilation of test cases after a compile failure + Do not perform binary compare unless both files actually exist + +iASL: Performed some code/module restructuring. Moved all memory +allocation functions to new modules. Two new files, aslallocate.c and +aslcache.c + +---------------------------------------- 31 August 2017. Summary of changes for version 20170831: diff --git a/sys/contrib/dev/acpica/generate/unix/Makefile.config b/sys/contrib/dev/acpica/generate/unix/Makefile.config index 9707be32d2..a8f9fed04e 100644 --- a/sys/contrib/dev/acpica/generate/unix/Makefile.config +++ b/sys/contrib/dev/acpica/generate/unix/Makefile.config @@ -35,7 +35,7 @@ .SUFFIXES : PROGS = acpibin acpidump acpiexamples acpiexec acpihelp acpinames acpisrc acpixtract iasl HOST ?= _CYGWIN -CC = gcc +CC ?= gcc # # Common defines diff --git a/sys/contrib/dev/acpica/generate/unix/acpiexec/Makefile b/sys/contrib/dev/acpica/generate/unix/acpiexec/Makefile index 681442c375..9118397d5d 100644 --- a/sys/contrib/dev/acpica/generate/unix/acpiexec/Makefile +++ b/sys/contrib/dev/acpica/generate/unix/acpiexec/Makefile @@ -45,9 +45,11 @@ OBJECTS = \ $(OBJDIR)/aeexception.o\ $(OBJDIR)/aehandlers.o\ $(OBJDIR)/aeinitfile.o\ + $(OBJDIR)/aeinstall.o\ $(OBJDIR)/aemain.o\ $(OBJDIR)/aeregion.o\ $(OBJDIR)/aetables.o\ + $(OBJDIR)/aetests.o\ $(OBJDIR)/ahids.o\ $(OBJDIR)/ahuuids.o\ $(OBJDIR)/cmfsize.o\ @@ -140,6 +142,7 @@ OBJECTS = \ $(OBJDIR)/hwpci.o\ $(OBJDIR)/hwregs.o\ $(OBJDIR)/hwsleep.o\ + $(OBJDIR)/hwtimer.o\ $(OBJDIR)/hwvalid.o\ $(OBJDIR)/hwxface.o\ $(OBJDIR)/hwxfsleep.o\ diff --git a/sys/contrib/dev/acpica/generate/unix/acpinames/Makefile b/sys/contrib/dev/acpica/generate/unix/acpinames/Makefile index 7bc69e86e5..db87d8840e 100644 --- a/sys/contrib/dev/acpica/generate/unix/acpinames/Makefile +++ b/sys/contrib/dev/acpica/generate/unix/acpinames/Makefile @@ -113,6 +113,7 @@ OBJECTS = \ $(OBJDIR)/utmath.o\ $(OBJDIR)/utmisc.o\ $(OBJDIR)/utmutex.o\ + $(OBJDIR)/utnonansi.o\ $(OBJDIR)/utobject.o\ $(OBJDIR)/utosi.o\ $(OBJDIR)/utownerid.o\ diff --git a/sys/contrib/dev/acpica/generate/unix/iasl/Makefile b/sys/contrib/dev/acpica/generate/unix/iasl/Makefile index 02390ea1c9..98dac7131d 100644 --- a/sys/contrib/dev/acpica/generate/unix/iasl/Makefile +++ b/sys/contrib/dev/acpica/generate/unix/iasl/Makefile @@ -51,9 +51,11 @@ OBJECTS = \ $(OBJDIR)/ahpredef.o\ $(OBJDIR)/ahtable.o\ $(OBJDIR)/ahuuids.o\ + $(OBJDIR)/aslallocate.o\ $(OBJDIR)/aslanalyze.o\ $(OBJDIR)/aslascii.o\ $(OBJDIR)/aslbtypes.o\ + $(OBJDIR)/aslcache.o\ $(OBJDIR)/aslcodegen.o\ $(OBJDIR)/aslcompile.o\ $(OBJDIR)/asldebug.o\ @@ -126,7 +128,13 @@ OBJECTS = \ $(OBJDIR)/dmtable.o\ $(OBJDIR)/dmtables.o\ $(OBJDIR)/dmtbdump.o\ + $(OBJDIR)/dmtbdump1.o\ + $(OBJDIR)/dmtbdump2.o\ + $(OBJDIR)/dmtbdump3.o\ $(OBJDIR)/dmtbinfo.o\ + $(OBJDIR)/dmtbinfo1.o\ + $(OBJDIR)/dmtbinfo2.o\ + $(OBJDIR)/dmtbinfo3.o\ $(OBJDIR)/dmutils.o\ $(OBJDIR)/dmwalk.o\ $(OBJDIR)/dsargs.o\ diff --git a/sys/contrib/dev/acpica/source/common/acfileio.c b/sys/contrib/dev/acpica/source/common/acfileio.c index a4e227a67b..8aabeb4369 100644 --- a/sys/contrib/dev/acpica/source/common/acfileio.c +++ b/sys/contrib/dev/acpica/source/common/acfileio.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/common/acgetline.c b/sys/contrib/dev/acpica/source/common/acgetline.c index eda4ea7094..d0e1e0a756 100644 --- a/sys/contrib/dev/acpica/source/common/acgetline.c +++ b/sys/contrib/dev/acpica/source/common/acgetline.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/common/adfile.c b/sys/contrib/dev/acpica/source/common/adfile.c index ac96156db2..5e6dd893df 100644 --- a/sys/contrib/dev/acpica/source/common/adfile.c +++ b/sys/contrib/dev/acpica/source/common/adfile.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -314,7 +314,7 @@ FlGenerateFilename ( * Copy the original filename to a new buffer. Leave room for the worst * case where we append the suffix, an added dot and the null terminator. */ - NewFilename = UtStringCacheCalloc ((ACPI_SIZE) + NewFilename = UtLocalCacheCalloc ((ACPI_SIZE) strlen (InputFilename) + strlen (Suffix) + 2); strcpy (NewFilename, InputFilename); @@ -358,7 +358,7 @@ FlStrdup ( char *NewString; - NewString = UtStringCacheCalloc ((ACPI_SIZE) strlen (String) + 1); + NewString = UtLocalCacheCalloc ((ACPI_SIZE) strlen (String) + 1); strcpy (NewString, String); return (NewString); } @@ -454,3 +454,59 @@ FlSplitInputPathname ( return (AE_OK); } + + +/******************************************************************************* + * + * FUNCTION: FlGetFileBasename + * + * PARAMETERS: FilePathname - File path to be split + * + * RETURN: The extracted base name of the file, in upper case + * + * DESCRIPTION: Extract the file base name (the file name with no extension) + * from the input pathname. + * + * Note: Any backslashes in the pathname should be previously + * converted to forward slashes before calling this function. + * + ******************************************************************************/ + +char * +FlGetFileBasename ( + char *FilePathname) +{ + char *FileBasename; + char *Substring; + + + /* Backup to last slash or colon */ + + Substring = strrchr (FilePathname, '/'); + if (!Substring) + { + Substring = strrchr (FilePathname, ':'); + } + + /* Extract the full filename (base + extension) */ + + if (Substring) + { + FileBasename = FlStrdup (Substring + 1); + } + else + { + FileBasename = FlStrdup (FilePathname); + } + + /* Remove the filename extension if present */ + + Substring = strchr (FileBasename, '.'); + if (Substring) + { + *Substring = 0; + } + + AcpiUtStrupr (FileBasename); + return (FileBasename); +} diff --git a/sys/contrib/dev/acpica/source/common/adisasm.c b/sys/contrib/dev/acpica/source/common/adisasm.c index e6f0e0f91e..883039a410 100644 --- a/sys/contrib/dev/acpica/source/common/adisasm.c +++ b/sys/contrib/dev/acpica/source/common/adisasm.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -457,9 +457,9 @@ AdDisassembleOneTable ( * (.xxx) file produced from the converter in case if * it fails to get deleted. */ - if (Gbl_CaptureComments) + if (AcpiGbl_CaptureComments) { - strncpy (Table->Signature, AcpiGbl_TableSig, 4); + strncpy (Table->Signature, AcpiGbl_TableSig, ACPI_NAME_SIZE); } #endif diff --git a/sys/contrib/dev/acpica/source/common/adwalk.c b/sys/contrib/dev/acpica/source/common/adwalk.c index e7bb924b39..6463ee51e1 100644 --- a/sys/contrib/dev/acpica/source/common/adwalk.c +++ b/sys/contrib/dev/acpica/source/common/adwalk.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/common/ahids.c b/sys/contrib/dev/acpica/source/common/ahids.c index 701d9f40b6..c519aa643b 100644 --- a/sys/contrib/dev/acpica/source/common/ahids.c +++ b/sys/contrib/dev/acpica/source/common/ahids.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/common/ahpredef.c b/sys/contrib/dev/acpica/source/common/ahpredef.c index 5cd1064c65..0a5587227e 100644 --- a/sys/contrib/dev/acpica/source/common/ahpredef.c +++ b/sys/contrib/dev/acpica/source/common/ahpredef.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/common/ahtable.c b/sys/contrib/dev/acpica/source/common/ahtable.c index 7aee3c669b..740ab538b3 100644 --- a/sys/contrib/dev/acpica/source/common/ahtable.c +++ b/sys/contrib/dev/acpica/source/common/ahtable.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -232,6 +232,7 @@ const AH_TABLE Gbl_AcpiSupportedTables[] = {ACPI_SIG_MTMR, "MID Timer Table"}, {ACPI_SIG_NFIT, "NVDIMM Firmware Interface Table"}, {ACPI_SIG_PCCT, "Platform Communications Channel Table"}, + {ACPI_SIG_PDTT, "Platform Debug Trigger Table"}, {ACPI_SIG_PMTT, "Platform Memory Topology Table"}, {ACPI_SIG_PPTT, "Processor Properties Topology Table"}, {ACPI_SIG_RASF, "RAS Features Table"}, @@ -240,6 +241,7 @@ const AH_TABLE Gbl_AcpiSupportedTables[] = {ACPI_SIG_S3PT, "S3 Performance Table"}, {ACPI_SIG_SBST, "Smart Battery Specification Table"}, {ACPI_SIG_SDEI, "Software Delegated Exception Interface Table"}, + {ACPI_SIG_SDEV, "Secure Devices table"}, {ACPI_SIG_SLIC, "Software Licensing Description Table"}, {ACPI_SIG_SLIT, "System Locality Information Table"}, {ACPI_SIG_SPCR, "Serial Port Console Redirection table"}, diff --git a/sys/contrib/dev/acpica/source/common/ahuuids.c b/sys/contrib/dev/acpica/source/common/ahuuids.c index 6e018a302c..f99578c7b7 100644 --- a/sys/contrib/dev/acpica/source/common/ahuuids.c +++ b/sys/contrib/dev/acpica/source/common/ahuuids.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/common/cmfsize.c b/sys/contrib/dev/acpica/source/common/cmfsize.c index 2e3197cdac..a385464268 100644 --- a/sys/contrib/dev/acpica/source/common/cmfsize.c +++ b/sys/contrib/dev/acpica/source/common/cmfsize.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/common/dmextern.c b/sys/contrib/dev/acpica/source/common/dmextern.c index 6ae3c3793a..8aab4807e2 100644 --- a/sys/contrib/dev/acpica/source/common/dmextern.c +++ b/sys/contrib/dev/acpica/source/common/dmextern.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/common/dmrestag.c b/sys/contrib/dev/acpica/source/common/dmrestag.c index 5ba0f6b4fe..f3b08b6ed7 100644 --- a/sys/contrib/dev/acpica/source/common/dmrestag.c +++ b/sys/contrib/dev/acpica/source/common/dmrestag.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/common/dmswitch.c b/sys/contrib/dev/acpica/source/common/dmswitch.c index 1641cbf9ad..f04ec7434c 100644 --- a/sys/contrib/dev/acpica/source/common/dmswitch.c +++ b/sys/contrib/dev/acpica/source/common/dmswitch.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -543,6 +543,10 @@ AcpiDmIsSwitchBlock ( * statement, so check for it. */ CurrentOp = StoreOp->Common.Next->Common.Next; + if (!CurrentOp) + { + return (FALSE); + } if (CurrentOp->Common.AmlOpcode == AML_ELSE_OP) { CurrentOp = CurrentOp->Common.Next; diff --git a/sys/contrib/dev/acpica/source/common/dmtable.c b/sys/contrib/dev/acpica/source/common/dmtable.c index 38248c2c45..07df5d32c0 100644 --- a/sys/contrib/dev/acpica/source/common/dmtable.c +++ b/sys/contrib/dev/acpica/source/common/dmtable.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -154,7 +154,6 @@ #include "acdisasm.h" #include "actables.h" #include "aslcompiler.h" -#include "dtcompiler.h" /* This module used for application-level code only */ @@ -290,9 +289,9 @@ static const char *AcpiDmHestSubnames[] = "IA-32 Machine Check Exception", "IA-32 Corrected Machine Check", "IA-32 Non-Maskable Interrupt", - "Unknown SubTable Type", /* 3 - Reserved */ - "Unknown SubTable Type", /* 4 - Reserved */ - "Unknown SubTable Type", /* 5 - Reserved */ + "Unknown Subtable Type", /* 3 - Reserved */ + "Unknown Subtable Type", /* 4 - Reserved */ + "Unknown Subtable Type", /* 5 - Reserved */ "PCI Express Root Port AER", "PCI Express AER (AER Endpoint)", "PCI Express/PCI-X Bridge AER", @@ -357,6 +356,7 @@ static const char *AcpiDmNfitSubnames[] = "NVDIMM Control Region", /* ACPI_NFIT_TYPE_CONTROL_REGION */ "NVDIMM Block Data Window Region", /* ACPI_NFIT_TYPE_DATA_REGION */ "Flush Hint Address", /* ACPI_NFIT_TYPE_FLUSH_ADDRESS */ + "Platform Capabilities", /* ACPI_NFIT_TYPE_CAPABILITIES */ "Unknown Subtable Type" /* Reserved */ }; @@ -374,7 +374,7 @@ static const char *AcpiDmPmttSubnames[] = { "Socket", /* ACPI_PMTT_TYPE_SOCKET */ "Memory Controller", /* ACPI_PMTT_TYPE_CONTROLLER */ - "Physical Component (DIMM)", /* ACPI_PMTT_TYPE_DIMM */ + "Physical Component (DIMM)", /* ACPI_PMTT_TYPE_DIMM */ "Unknown Subtable Type" /* Reserved */ }; @@ -382,7 +382,14 @@ static const char *AcpiDmPpttSubnames[] = { "Processor Hierarchy Node", /* ACPI_PPTT_TYPE_PROCESSOR */ "Cache Type", /* ACPI_PPTT_TYPE_CACHE */ - "ID", /* ACPI_PMTT_TYPE_ID */ + "ID", /* ACPI_PPTT_TYPE_ID */ + "Unknown Subtable Type" /* Reserved */ +}; + +static const char *AcpiDmSdevSubnames[] = +{ + "Namespace Device", /* ACPI_SDEV_TYPE_NAMESPACE_DEVICE */ + "PCIe Endpoint Device", /* ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE */ "Unknown Subtable Type" /* Reserved */ }; @@ -396,6 +403,23 @@ static const char *AcpiDmSratSubnames[] = "Unknown Subtable Type" /* Reserved */ }; +static const char *AcpiDmTpm2Subnames[] = +{ + "Illegal Start Method value", + "Reserved", + "ACPI Start Method", + "Reserved", + "Reserved", + "Reserved", + "Memory Mapped I/O", + "Command Response Buffer", + "Command Response Buffer with ACPI Start Method", + "Reserved", + "Reserved", + "Command Response Buffer with ARM SMC", + "Unknown Subtable Type" /* Reserved */ +}; + static const char *AcpiDmIvrsSubnames[] = { "Hardware Definition Block", @@ -487,6 +511,7 @@ const ACPI_DMTABLE_DATA AcpiDmTableData[] = {ACPI_SIG_MTMR, NULL, AcpiDmDumpMtmr, DtCompileMtmr, TemplateMtmr}, {ACPI_SIG_NFIT, AcpiDmTableInfoNfit, AcpiDmDumpNfit, DtCompileNfit, TemplateNfit}, {ACPI_SIG_PCCT, AcpiDmTableInfoPcct, AcpiDmDumpPcct, DtCompilePcct, TemplatePcct}, + {ACPI_SIG_PDTT, AcpiDmTableInfoPdtt, AcpiDmDumpPdtt, DtCompilePdtt, TemplatePdtt}, {ACPI_SIG_PMTT, NULL, AcpiDmDumpPmtt, DtCompilePmtt, TemplatePmtt}, {ACPI_SIG_PPTT, NULL, AcpiDmDumpPptt, DtCompilePptt, TemplatePptt}, {ACPI_SIG_RASF, AcpiDmTableInfoRasf, NULL, NULL, TemplateRasf}, @@ -494,6 +519,7 @@ const ACPI_DMTABLE_DATA AcpiDmTableData[] = {ACPI_SIG_S3PT, NULL, NULL, NULL, TemplateS3pt}, {ACPI_SIG_SBST, AcpiDmTableInfoSbst, NULL, NULL, TemplateSbst}, {ACPI_SIG_SDEI, AcpiDmTableInfoSdei, NULL, NULL, TemplateSdei}, + {ACPI_SIG_SDEV, AcpiDmTableInfoSdev, AcpiDmDumpSdev, DtCompileSdev, TemplateSdev}, {ACPI_SIG_SLIC, NULL, AcpiDmDumpSlic, DtCompileSlic, TemplateSlic}, {ACPI_SIG_SLIT, NULL, AcpiDmDumpSlit, DtCompileSlit, TemplateSlit}, {ACPI_SIG_SPCR, AcpiDmTableInfoSpcr, NULL, NULL, TemplateSpcr}, @@ -501,7 +527,7 @@ const ACPI_DMTABLE_DATA AcpiDmTableData[] = {ACPI_SIG_SRAT, NULL, AcpiDmDumpSrat, DtCompileSrat, TemplateSrat}, {ACPI_SIG_STAO, NULL, AcpiDmDumpStao, DtCompileStao, TemplateStao}, {ACPI_SIG_TCPA, NULL, AcpiDmDumpTcpa, DtCompileTcpa, TemplateTcpa}, - {ACPI_SIG_TPM2, AcpiDmTableInfoTpm2, NULL, NULL, TemplateTpm2}, + {ACPI_SIG_TPM2, AcpiDmTableInfoTpm2, AcpiDmDumpTpm2, DtCompileTpm2, TemplateTpm2}, {ACPI_SIG_UEFI, AcpiDmTableInfoUefi, NULL, DtCompileUefi, TemplateUefi}, {ACPI_SIG_VRTC, AcpiDmTableInfoVrtc, AcpiDmDumpVrtc, DtCompileVrtc, TemplateVrtc}, {ACPI_SIG_WAET, AcpiDmTableInfoWaet, NULL, NULL, TemplateWaet}, @@ -917,6 +943,7 @@ AcpiDmDumpTable ( case ACPI_DMT_PCCT: case ACPI_DMT_PMTT: case ACPI_DMT_PPTT: + case ACPI_DMT_SDEV: case ACPI_DMT_SRAT: case ACPI_DMT_ASF: case ACPI_DMT_HESTNTYP: @@ -948,6 +975,7 @@ AcpiDmDumpTable ( case ACPI_DMT_NAME4: case ACPI_DMT_SIG: case ACPI_DMT_LPIT: + case ACPI_DMT_TPM2: ByteLength = 4; break; @@ -1583,6 +1611,20 @@ AcpiDmDumpTable ( CurrentOffset, NULL); break; + case ACPI_DMT_SDEV: + + /* SDEV subtable types */ + + Temp8 = *Target; + if (Temp8 > ACPI_SDEV_TYPE_RESERVED) + { + Temp8 = ACPI_SDEV_TYPE_RESERVED; + } + + AcpiOsPrintf (UINT8_FORMAT, *Target, + AcpiDmSdevSubnames[Temp8]); + break; + case ACPI_DMT_SRAT: /* SRAT subtable types */ @@ -1597,6 +1639,21 @@ AcpiDmDumpTable ( AcpiDmSratSubnames[Temp8]); break; + case ACPI_DMT_TPM2: + + /* TPM2 Start Method types */ + + Temp8 = *Target; + if (Temp8 > ACPI_TPM2_RESERVED) + { + Temp8 = ACPI_TPM2_RESERVED; + } + + AcpiOsPrintf (UINT8_FORMAT, *Target, + AcpiDmTpm2Subnames[Temp8]); + break; + + case ACPI_DMT_FADTPM: /* FADT Preferred PM Profile names */ diff --git a/sys/contrib/dev/acpica/source/common/dmtables.c b/sys/contrib/dev/acpica/source/common/dmtables.c index 0ec69aba73..293b3d8beb 100644 --- a/sys/contrib/dev/acpica/source/common/dmtables.c +++ b/sys/contrib/dev/acpica/source/common/dmtables.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -314,7 +314,7 @@ AdCreateTableHeader ( /* * Print comments that come before this definition block. */ - if (Gbl_CaptureComments) + if (AcpiGbl_CaptureComments) { ASL_CV_PRINT_ONE_COMMENT(AcpiGbl_ParseOpRoot,AML_COMMENT_STANDARD, NULL, 0); } @@ -517,7 +517,7 @@ AdParseTable ( } #ifdef ACPI_ASL_COMPILER - if (Gbl_CaptureComments) + if (AcpiGbl_CaptureComments) { AcpiGbl_ParseOpRoot->Common.CvFilename = AcpiGbl_FileTreeRoot->Filename; } diff --git a/sys/contrib/dev/acpica/source/components/debugger/dbutils.c b/sys/contrib/dev/acpica/source/common/dmtbdump.c similarity index 52% copy from sys/contrib/dev/acpica/source/components/debugger/dbutils.c copy to sys/contrib/dev/acpica/source/common/dmtbdump.c index 32ceefd5be..cf2ed6d670 100644 --- a/sys/contrib/dev/acpica/source/components/debugger/dbutils.c +++ b/sys/contrib/dev/acpica/source/common/dmtbdump.c @@ -1,14 +1,14 @@ -/******************************************************************************* +/****************************************************************************** * - * Module Name: dbutils - AML debugger utilities + * Module Name: dmtbdump - Dump ACPI data tables that contain no AML code * - ******************************************************************************/ + *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -151,475 +151,455 @@ #include "acpi.h" #include "accommon.h" -#include "acnamesp.h" -#include "acdebug.h" - +#include "acdisasm.h" +#include "actables.h" -#ifdef ACPI_DEBUGGER +/* This module used for application-level code only */ -#define _COMPONENT ACPI_CA_DEBUGGER - ACPI_MODULE_NAME ("dbutils") +#define _COMPONENT ACPI_CA_DISASSEMBLER + ACPI_MODULE_NAME ("dmtbdump") /* Local prototypes */ -#ifdef ACPI_OBSOLETE_FUNCTIONS -ACPI_STATUS -AcpiDbSecondPassParse ( - ACPI_PARSE_OBJECT *Root); - -void -AcpiDbDumpBuffer ( - UINT32 Address); -#endif +static void +AcpiDmValidateFadtLength ( + UINT32 Revision, + UINT32 Length); /******************************************************************************* * - * FUNCTION: AcpiDbMatchArgument + * FUNCTION: AcpiDmDumpBuffer * - * PARAMETERS: UserArgument - User command line - * Arguments - Array of commands to match against + * PARAMETERS: Table - ACPI Table or subtable + * BufferOffset - Offset of buffer from Table above + * Length - Length of the buffer + * AbsoluteOffset - Offset of buffer in the main ACPI table + * Header - Name of the buffer field (printed on the + * first line only.) * - * RETURN: Index into command array or ACPI_TYPE_NOT_FOUND if not found + * RETURN: None * - * DESCRIPTION: Search command array for a command match + * DESCRIPTION: Format the contents of an arbitrary length data buffer (in the + * disassembler output format.) * ******************************************************************************/ -ACPI_OBJECT_TYPE -AcpiDbMatchArgument ( - char *UserArgument, - ACPI_DB_ARGUMENT_INFO *Arguments) +void +AcpiDmDumpBuffer ( + void *Table, + UINT32 BufferOffset, + UINT32 Length, + UINT32 AbsoluteOffset, + char *Header) { + UINT8 *Buffer; UINT32 i; - if (!UserArgument || UserArgument[0] == 0) + if (!Length) { - return (ACPI_TYPE_NOT_FOUND); + return; } - for (i = 0; Arguments[i].Name; i++) + Buffer = ACPI_CAST_PTR (UINT8, Table) + BufferOffset; + i = 0; + + while (i < Length) { - if (strstr ( - ACPI_CAST_PTR (char, Arguments[i].Name), - ACPI_CAST_PTR (char, UserArgument)) == Arguments[i].Name) + if (!(i % 16)) { - return (i); + /* Insert a backslash - line continuation character */ + + if (Length > 16) + { + AcpiOsPrintf ("\\\n "); + } } - } - /* Argument not recognized */ + AcpiOsPrintf ("%.02X ", *Buffer); + i++; + Buffer++; + AbsoluteOffset++; + } - return (ACPI_TYPE_NOT_FOUND); + AcpiOsPrintf ("\n"); } /******************************************************************************* * - * FUNCTION: AcpiDbSetOutputDestination + * FUNCTION: AcpiDmDumpUnicode * - * PARAMETERS: OutputFlags - Current flags word + * PARAMETERS: Table - ACPI Table or subtable + * BufferOffset - Offset of buffer from Table above + * ByteLength - Length of the buffer * * RETURN: None * - * DESCRIPTION: Set the current destination for debugger output. Also sets - * the debug output level accordingly. + * DESCRIPTION: Validate and dump the contents of a buffer that contains + * unicode data. The output is a standard ASCII string. If it + * appears that the data is not unicode, the buffer is dumped + * as hex characters. * ******************************************************************************/ void -AcpiDbSetOutputDestination ( - UINT32 OutputFlags) +AcpiDmDumpUnicode ( + void *Table, + UINT32 BufferOffset, + UINT32 ByteLength) { + UINT8 *Buffer; + UINT32 Length; + UINT32 i; + + + Buffer = ((UINT8 *) Table) + BufferOffset; + Length = ByteLength - 2; /* Last two bytes are the null terminator */ - AcpiGbl_DbOutputFlags = (UINT8) OutputFlags; + /* Ensure all low bytes are entirely printable ASCII */ - if ((OutputFlags & ACPI_DB_REDIRECTABLE_OUTPUT) && - AcpiGbl_DbOutputToFile) + for (i = 0; i < Length; i += 2) { - AcpiDbgLevel = AcpiGbl_DbDebugLevel; + if (!isprint (Buffer[i])) + { + goto DumpRawBuffer; + } } - else + + /* Ensure all high bytes are zero */ + + for (i = 1; i < Length; i += 2) + { + if (Buffer[i]) + { + goto DumpRawBuffer; + } + } + + /* Dump the buffer as a normal string */ + + AcpiOsPrintf ("\""); + for (i = 0; i < Length; i += 2) { - AcpiDbgLevel = AcpiGbl_DbConsoleDebugLevel; + AcpiOsPrintf ("%c", Buffer[i]); } + + AcpiOsPrintf ("\"\n"); + return; + +DumpRawBuffer: + AcpiDmDumpBuffer (Table, BufferOffset, ByteLength, + BufferOffset, NULL); + AcpiOsPrintf ("\n"); } /******************************************************************************* * - * FUNCTION: AcpiDbDumpExternalObject + * FUNCTION: AcpiDmDumpRsdp * - * PARAMETERS: ObjDesc - External ACPI object to dump - * Level - Nesting level. + * PARAMETERS: Table - A RSDP * - * RETURN: None + * RETURN: Length of the table (there is not always a length field, + * use revision or length if available (ACPI 2.0+)) * - * DESCRIPTION: Dump the contents of an ACPI external object + * DESCRIPTION: Format the contents of a RSDP * ******************************************************************************/ -void -AcpiDbDumpExternalObject ( - ACPI_OBJECT *ObjDesc, - UINT32 Level) +UINT32 +AcpiDmDumpRsdp ( + ACPI_TABLE_HEADER *Table) { - UINT32 i; + ACPI_TABLE_RSDP *Rsdp = ACPI_CAST_PTR (ACPI_TABLE_RSDP, Table); + UINT32 Length = sizeof (ACPI_RSDP_COMMON); + UINT8 Checksum; + ACPI_STATUS Status; - if (!ObjDesc) - { - AcpiOsPrintf ("[Null Object]\n"); - return; - } + /* Dump the common ACPI 1.0 portion */ - for (i = 0; i < Level; i++) + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoRsdp1); + if (ACPI_FAILURE (Status)) { - AcpiOsPrintf (" "); + return (Length); } - switch (ObjDesc->Type) - { - case ACPI_TYPE_ANY: + /* Validate the first checksum */ - AcpiOsPrintf ("[Null Object] (Type=0)\n"); - break; - - case ACPI_TYPE_INTEGER: - - AcpiOsPrintf ("[Integer] = %8.8X%8.8X\n", - ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); - break; - - case ACPI_TYPE_STRING: - - AcpiOsPrintf ("[String] Length %.2X = ", ObjDesc->String.Length); - AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX); - AcpiOsPrintf ("\n"); - break; - - case ACPI_TYPE_BUFFER: + Checksum = AcpiDmGenerateChecksum (Rsdp, sizeof (ACPI_RSDP_COMMON), + Rsdp->Checksum); + if (Checksum != Rsdp->Checksum) + { + AcpiOsPrintf ("/* Incorrect Checksum above, should be 0x%2.2X */\n", + Checksum); + } - AcpiOsPrintf ("[Buffer] Length %.2X = ", ObjDesc->Buffer.Length); - if (ObjDesc->Buffer.Length) - { - if (ObjDesc->Buffer.Length > 16) - { - AcpiOsPrintf ("\n"); - } + /* The RSDP for ACPI 2.0+ contains more data and has a Length field */ - AcpiUtDebugDumpBuffer ( - ACPI_CAST_PTR (UINT8, ObjDesc->Buffer.Pointer), - ObjDesc->Buffer.Length, DB_BYTE_DISPLAY, _COMPONENT); - } - else + if (Rsdp->Revision > 0) + { + Length = Rsdp->Length; + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoRsdp2); + if (ACPI_FAILURE (Status)) { - AcpiOsPrintf ("\n"); + return (Length); } - break; - - case ACPI_TYPE_PACKAGE: - AcpiOsPrintf ("[Package] Contains %u Elements:\n", - ObjDesc->Package.Count); + /* Validate the extended checksum over entire RSDP */ - for (i = 0; i < ObjDesc->Package.Count; i++) + Checksum = AcpiDmGenerateChecksum (Rsdp, sizeof (ACPI_TABLE_RSDP), + Rsdp->ExtendedChecksum); + if (Checksum != Rsdp->ExtendedChecksum) { - AcpiDbDumpExternalObject ( - &ObjDesc->Package.Elements[i], Level+1); + AcpiOsPrintf ( + "/* Incorrect Extended Checksum above, should be 0x%2.2X */\n", + Checksum); } - break; - - case ACPI_TYPE_LOCAL_REFERENCE: - - AcpiOsPrintf ("[Object Reference] = "); - AcpiDbDisplayInternalObject (ObjDesc->Reference.Handle, NULL); - break; - - case ACPI_TYPE_PROCESSOR: - - AcpiOsPrintf ("[Processor]\n"); - break; - - case ACPI_TYPE_POWER: - - AcpiOsPrintf ("[Power Resource]\n"); - break; - - default: - - AcpiOsPrintf ("[Unknown Type] %X\n", ObjDesc->Type); - break; } + + return (Length); } /******************************************************************************* * - * FUNCTION: AcpiDbPrepNamestring + * FUNCTION: AcpiDmDumpRsdt * - * PARAMETERS: Name - String to prepare + * PARAMETERS: Table - A RSDT * * RETURN: None * - * DESCRIPTION: Translate all forward slashes and dots to backslashes. + * DESCRIPTION: Format the contents of a RSDT * ******************************************************************************/ void -AcpiDbPrepNamestring ( - char *Name) +AcpiDmDumpRsdt ( + ACPI_TABLE_HEADER *Table) { + UINT32 *Array; + UINT32 Entries; + UINT32 Offset; + UINT32 i; - if (!Name) - { - return; - } - - AcpiUtStrupr (Name); - - /* Convert a leading forward slash to a backslash */ - if (*Name == '/') - { - *Name = '\\'; - } + /* Point to start of table pointer array */ - /* Ignore a leading backslash, this is the root prefix */ + Array = ACPI_CAST_PTR (ACPI_TABLE_RSDT, Table)->TableOffsetEntry; + Offset = sizeof (ACPI_TABLE_HEADER); - if (ACPI_IS_ROOT_PREFIX (*Name)) - { - Name++; - } + /* RSDT uses 32-bit pointers */ - /* Convert all slash path separators to dots */ + Entries = (Table->Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT32); - while (*Name) + for (i = 0; i < Entries; i++) { - if ((*Name == '/') || - (*Name == '\\')) - { - *Name = '.'; - } - - Name++; + AcpiDmLineHeader2 (Offset, sizeof (UINT32), "ACPI Table Address", i); + AcpiOsPrintf ("%8.8X\n", Array[i]); + Offset += sizeof (UINT32); } } /******************************************************************************* * - * FUNCTION: AcpiDbLocalNsLookup - * - * PARAMETERS: Name - Name to lookup + * FUNCTION: AcpiDmDumpXsdt * - * RETURN: Pointer to a namespace node, null on failure + * PARAMETERS: Table - A XSDT * - * DESCRIPTION: Lookup a name in the ACPI namespace + * RETURN: None * - * Note: Currently begins search from the root. Could be enhanced to use - * the current prefix (scope) node as the search beginning point. + * DESCRIPTION: Format the contents of a XSDT * ******************************************************************************/ -ACPI_NAMESPACE_NODE * -AcpiDbLocalNsLookup ( - char *Name) +void +AcpiDmDumpXsdt ( + ACPI_TABLE_HEADER *Table) { - char *InternalPath; - ACPI_STATUS Status; - ACPI_NAMESPACE_NODE *Node = NULL; + UINT64 *Array; + UINT32 Entries; + UINT32 Offset; + UINT32 i; - AcpiDbPrepNamestring (Name); + /* Point to start of table pointer array */ - /* Build an internal namestring */ + Array = ACPI_CAST_PTR (ACPI_TABLE_XSDT, Table)->TableOffsetEntry; + Offset = sizeof (ACPI_TABLE_HEADER); - Status = AcpiNsInternalizeName (Name, &InternalPath); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("Invalid namestring: %s\n", Name); - return (NULL); - } + /* XSDT uses 64-bit pointers */ - /* - * Lookup the name. - * (Uses root node as the search starting point) - */ - Status = AcpiNsLookup (NULL, InternalPath, ACPI_TYPE_ANY, - ACPI_IMODE_EXECUTE, ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE, - NULL, &Node); - if (ACPI_FAILURE (Status)) + Entries = (Table->Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT64); + + for (i = 0; i < Entries; i++) { - AcpiOsPrintf ("Could not locate name: %s, %s\n", - Name, AcpiFormatException (Status)); + AcpiDmLineHeader2 (Offset, sizeof (UINT64), "ACPI Table Address", i); + AcpiOsPrintf ("%8.8X%8.8X\n", ACPI_FORMAT_UINT64 (Array[i])); + Offset += sizeof (UINT64); } - - ACPI_FREE (InternalPath); - return (Node); } /******************************************************************************* * - * FUNCTION: AcpiDbUint32ToHexString + * FUNCTION: AcpiDmDumpFadt * - * PARAMETERS: Value - The value to be converted to string - * Buffer - Buffer for result (not less than 11 bytes) + * PARAMETERS: Table - A FADT * * RETURN: None * - * DESCRIPTION: Convert the unsigned 32-bit value to the hexadecimal image + * DESCRIPTION: Format the contents of a FADT * - * NOTE: It is the caller's responsibility to ensure that the length of buffer - * is sufficient. + * NOTE: We cannot depend on the FADT version to indicate the actual + * contents of the FADT because of BIOS bugs. The table length + * is the only reliable indicator. * ******************************************************************************/ void -AcpiDbUint32ToHexString ( - UINT32 Value, - char *Buffer) +AcpiDmDumpFadt ( + ACPI_TABLE_HEADER *Table) { - int i; + ACPI_STATUS Status; + + /* Always dump the minimum FADT revision 1 fields (ACPI 1.0) */ - if (Value == 0) + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, + AcpiDmTableInfoFadt1); + if (ACPI_FAILURE (Status)) { - strcpy (Buffer, "0"); return; } - Buffer[8] = '\0'; + /* Check for FADT revision 2 fields (ACPI 1.0B MS extensions) */ - for (i = 7; i >= 0; i--) + if ((Table->Length > ACPI_FADT_V1_SIZE) && + (Table->Length <= ACPI_FADT_V2_SIZE)) { - Buffer[i] = AcpiGbl_UpperHexDigits [Value & 0x0F]; - Value = Value >> 4; + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, + AcpiDmTableInfoFadt2); + if (ACPI_FAILURE (Status)) + { + return; + } } -} - - -#ifdef ACPI_OBSOLETE_FUNCTIONS -/******************************************************************************* - * - * FUNCTION: AcpiDbSecondPassParse - * - * PARAMETERS: Root - Root of the parse tree - * - * RETURN: Status - * - * DESCRIPTION: Second pass parse of the ACPI tables. We need to wait until - * second pass to parse the control methods - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDbSecondPassParse ( - ACPI_PARSE_OBJECT *Root) -{ - ACPI_PARSE_OBJECT *Op = Root; - ACPI_PARSE_OBJECT *Method; - ACPI_PARSE_OBJECT *SearchOp; - ACPI_PARSE_OBJECT *StartOp; - ACPI_STATUS Status = AE_OK; - UINT32 BaseAmlOffset; - ACPI_WALK_STATE *WalkState; - - - ACPI_FUNCTION_ENTRY (); + /* Check for FADT revision 3/4 fields and up (ACPI 2.0+ extended data) */ - AcpiOsPrintf ("Pass two parse ....\n"); - - while (Op) + else if (Table->Length > ACPI_FADT_V2_SIZE) { - if (Op->Common.AmlOpcode == AML_METHOD_OP) + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, + AcpiDmTableInfoFadt3); + if (ACPI_FAILURE (Status)) { - Method = Op; + return; + } - /* Create a new walk state for the parse */ + /* Check for FADT revision 5 fields and up (ACPI 5.0+) */ - WalkState = AcpiDsCreateWalkState (0, NULL, NULL, NULL); - if (!WalkState) + if (Table->Length > ACPI_FADT_V3_SIZE) + { + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, + AcpiDmTableInfoFadt5); + if (ACPI_FAILURE (Status)) { - return (AE_NO_MEMORY); + return; } + } - /* Init the Walk State */ - - WalkState->ParserState.Aml = - WalkState->ParserState.AmlStart = Method->Named.Data; - WalkState->ParserState.AmlEnd = - WalkState->ParserState.PkgEnd = Method->Named.Data + - Method->Named.Length; - WalkState->ParserState.StartScope = Op; - - WalkState->DescendingCallback = AcpiDsLoad1BeginOp; - WalkState->AscendingCallback = AcpiDsLoad1EndOp; - - /* Perform the AML parse */ - - Status = AcpiPsParseAml (WalkState); - - BaseAmlOffset = (Method->Common.Value.Arg)->Common.AmlOffset + 1; - StartOp = (Method->Common.Value.Arg)->Common.Next; - SearchOp = StartOp; + /* Check for FADT revision 6 fields and up (ACPI 6.0+) */ - while (SearchOp) + if (Table->Length > ACPI_FADT_V3_SIZE) + { + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, + AcpiDmTableInfoFadt6); + if (ACPI_FAILURE (Status)) { - SearchOp->Common.AmlOffset += BaseAmlOffset; - SearchOp = AcpiPsGetDepthNext (StartOp, SearchOp); + return; } } + } - if (Op->Common.AmlOpcode == AML_REGION_OP) - { - /* TBD: [Investigate] this isn't quite the right thing to do! */ - /* - * - * Method = (ACPI_DEFERRED_OP *) Op; - * Status = AcpiPsParseAml (Op, Method->Body, Method->BodyLength); - */ - } + /* Validate various fields in the FADT, including length */ - if (ACPI_FAILURE (Status)) - { - break; - } + AcpiTbCreateLocalFadt (Table, Table->Length); - Op = AcpiPsGetDepthNext (Root, Op); - } + /* Validate FADT length against the revision */ - return (Status); + AcpiDmValidateFadtLength (Table->Revision, Table->Length); } /******************************************************************************* * - * FUNCTION: AcpiDbDumpBuffer + * FUNCTION: AcpiDmValidateFadtLength * - * PARAMETERS: Address - Pointer to the buffer + * PARAMETERS: Revision - FADT revision (Header->Revision) + * Length - FADT length (Header->Length * * RETURN: None * - * DESCRIPTION: Print a portion of a buffer + * DESCRIPTION: Check the FADT revision against the expected table length for + * that revision. Issue a warning if the length is not what was + * expected. This seems to be such a common BIOS bug that the + * FADT revision has been rendered virtually meaningless. * ******************************************************************************/ -void -AcpiDbDumpBuffer ( - UINT32 Address) +static void +AcpiDmValidateFadtLength ( + UINT32 Revision, + UINT32 Length) { + UINT32 ExpectedLength; - AcpiOsPrintf ("\nLocation %X:\n", Address); - AcpiDbgLevel |= ACPI_LV_TABLES; - AcpiUtDebugDumpBuffer (ACPI_TO_POINTER (Address), 64, DB_BYTE_DISPLAY, - ACPI_UINT32_MAX); -} -#endif + switch (Revision) + { + case 0: + + AcpiOsPrintf ("// ACPI Warning: Invalid FADT revision: 0\n"); + return; + + case 1: + + ExpectedLength = ACPI_FADT_V1_SIZE; + break; + + case 2: + + ExpectedLength = ACPI_FADT_V2_SIZE; + break; + + case 3: + case 4: + + ExpectedLength = ACPI_FADT_V3_SIZE; + break; + + case 5: + + ExpectedLength = ACPI_FADT_V5_SIZE; + break; -#endif /* ACPI_DEBUGGER */ + default: + + return; + } + + if (Length == ExpectedLength) + { + return; + } + + AcpiOsPrintf ( + "\n// ACPI Warning: FADT revision %X does not match length: " + "found %X expected %X\n", + Revision, Length, ExpectedLength); +} diff --git a/sys/contrib/dev/acpica/source/common/dmtbdump1.c b/sys/contrib/dev/acpica/source/common/dmtbdump1.c new file mode 100644 index 0000000000..4495ba4a63 --- /dev/null +++ b/sys/contrib/dev/acpica/source/common/dmtbdump1.c @@ -0,0 +1,1542 @@ +/****************************************************************************** + * + * Module Name: dmtbdump1 - Dump ACPI data tables that contain no AML code + * + *****************************************************************************/ + +/****************************************************************************** + * + * 1. Copyright Notice + * + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. + * All rights reserved. + * + * 2. License + * + * 2.1. This is your license from Intel Corp. under its intellectual property + * rights. You may have additional license terms from the party that provided + * you this software, covering your right to use that party's intellectual + * property rights. + * + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a + * copy of the source code appearing in this file ("Covered Code") an + * irrevocable, perpetual, worldwide license under Intel's copyrights in the + * base code distributed originally by Intel ("Original Intel Code") to copy, + * make derivatives, distribute, use and display any portion of the Covered + * Code in any form, with the right to sublicense such rights; and + * + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent + * license (with the right to sublicense), under only those claims of Intel + * patents that are infringed by the Original Intel Code, to make, use, sell, + * offer to sell, and import the Covered Code and derivative works thereof + * solely to the minimum extent necessary to exercise the above copyright + * license, and in no event shall the patent license extend to any additions + * to or modifications of the Original Intel Code. No other license or right + * is granted directly or by implication, estoppel or otherwise; + * + * The above copyright and patent license is granted only if the following + * conditions are met: + * + * 3. Conditions + * + * 3.1. Redistribution of Source with Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification with rights to further distribute source must include + * the above Copyright Notice, the above License, this list of Conditions, + * and the following Disclaimer and Export Compliance provision. In addition, + * Licensee must cause all Covered Code to which Licensee contributes to + * contain a file documenting the changes Licensee made to create that Covered + * Code and the date of any change. Licensee must include in that file the + * documentation of any changes made by any predecessor Licensee. Licensee + * must include a prominent statement that the modification is derived, + * directly or indirectly, from Original Intel Code. + * + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification without rights to further distribute source must + * include the following Disclaimer and Export Compliance provision in the + * documentation and/or other materials provided with distribution. In + * addition, Licensee may not authorize further sublicense of source of any + * portion of the Covered Code, and must include terms to the effect that the + * license from Licensee to its licensee is limited to the intellectual + * property embodied in the software Licensee provides to its licensee, and + * not to intellectual property embodied in modifications its licensee may + * make. + * + * 3.3. Redistribution of Executable. Redistribution in executable form of any + * substantial portion of the Covered Code or modification must reproduce the + * above Copyright Notice, and the following Disclaimer and Export Compliance + * provision in the documentation and/or other materials provided with the + * distribution. + * + * 3.4. Intel retains all right, title, and interest in and to the Original + * Intel Code. + * + * 3.5. Neither the name Intel nor any other trademark owned or controlled by + * Intel shall be used in advertising or otherwise to promote the sale, use or + * other dealings in products derived from or relating to the Covered Code + * without prior written authorization from Intel. + * + * 4. Disclaimer and Export Compliance + * + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A + * PARTICULAR PURPOSE. + * + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY + * LIMITED REMEDY. + * + * 4.3. Licensee shall not export, either directly or indirectly, any of this + * software or system incorporating such software without first obtaining any + * required license or other approval from the U. S. Department of Commerce or + * any other agency or department of the United States Government. In the + * event Licensee exports any such software from the United States or + * re-exports any such software from a foreign destination, Licensee shall + * ensure that the distribution and export/re-export of the software is in + * compliance with all laws, regulations, orders, or other restrictions of the + * U.S. Export Administration Regulations. Licensee agrees that neither it nor + * any of its subsidiaries will export/re-export any technical data, process, + * software, or service, directly or indirectly, to any country for which the + * United States government or any agency thereof requires an export license, + * other governmental approval, or letter of assurance, without first obtaining + * such license, approval or letter. + * + ***************************************************************************** + * + * Alternatively, you may choose to be licensed under the terms of the + * following license: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Alternatively, you may choose to be licensed under the terms of the + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. + * + *****************************************************************************/ + +#include "acpi.h" +#include "accommon.h" +#include "acdisasm.h" +#include "actables.h" + +/* This module used for application-level code only */ + +#define _COMPONENT ACPI_CA_DISASSEMBLER + ACPI_MODULE_NAME ("dmtbdump1") + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpAsf + * + * PARAMETERS: Table - A ASF table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a ASF table + * + ******************************************************************************/ + +void +AcpiDmDumpAsf ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + UINT32 Offset = sizeof (ACPI_TABLE_HEADER); + ACPI_ASF_INFO *Subtable; + ACPI_DMTABLE_INFO *InfoTable; + ACPI_DMTABLE_INFO *DataInfoTable = NULL; + UINT8 *DataTable = NULL; + UINT32 DataCount = 0; + UINT32 DataLength = 0; + UINT32 DataOffset = 0; + UINT32 i; + UINT8 Type; + + + /* No main table, only subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_ASF_INFO, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + Subtable->Header.Length, AcpiDmTableInfoAsfHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* The actual type is the lower 7 bits of Type */ + + Type = (UINT8) (Subtable->Header.Type & 0x7F); + + switch (Type) + { + case ACPI_ASF_TYPE_INFO: + + InfoTable = AcpiDmTableInfoAsf0; + break; + + case ACPI_ASF_TYPE_ALERT: + + InfoTable = AcpiDmTableInfoAsf1; + DataInfoTable = AcpiDmTableInfoAsf1a; + DataTable = ACPI_ADD_PTR (UINT8, Subtable, sizeof (ACPI_ASF_ALERT)); + DataCount = ACPI_CAST_PTR (ACPI_ASF_ALERT, Subtable)->Alerts; + DataLength = ACPI_CAST_PTR (ACPI_ASF_ALERT, Subtable)->DataLength; + DataOffset = Offset + sizeof (ACPI_ASF_ALERT); + break; + + case ACPI_ASF_TYPE_CONTROL: + + InfoTable = AcpiDmTableInfoAsf2; + DataInfoTable = AcpiDmTableInfoAsf2a; + DataTable = ACPI_ADD_PTR (UINT8, Subtable, sizeof (ACPI_ASF_REMOTE)); + DataCount = ACPI_CAST_PTR (ACPI_ASF_REMOTE, Subtable)->Controls; + DataLength = ACPI_CAST_PTR (ACPI_ASF_REMOTE, Subtable)->DataLength; + DataOffset = Offset + sizeof (ACPI_ASF_REMOTE); + break; + + case ACPI_ASF_TYPE_BOOT: + + InfoTable = AcpiDmTableInfoAsf3; + break; + + case ACPI_ASF_TYPE_ADDRESS: + + InfoTable = AcpiDmTableInfoAsf4; + DataTable = ACPI_ADD_PTR (UINT8, Subtable, sizeof (ACPI_ASF_ADDRESS)); + DataLength = ACPI_CAST_PTR (ACPI_ASF_ADDRESS, Subtable)->Devices; + DataOffset = Offset + sizeof (ACPI_ASF_ADDRESS); + break; + + default: + + AcpiOsPrintf ("\n**** Unknown ASF subtable type 0x%X\n", + Subtable->Header.Type); + return; + } + + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + Subtable->Header.Length, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Dump variable-length extra data */ + + switch (Type) + { + case ACPI_ASF_TYPE_ALERT: + case ACPI_ASF_TYPE_CONTROL: + + for (i = 0; i < DataCount; i++) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, DataOffset, + DataTable, DataLength, DataInfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + + DataTable = ACPI_ADD_PTR (UINT8, DataTable, DataLength); + DataOffset += DataLength; + } + break; + + case ACPI_ASF_TYPE_ADDRESS: + + for (i = 0; i < DataLength; i++) + { + if (!(i % 16)) + { + AcpiDmLineHeader (DataOffset, 1, "Addresses"); + } + + AcpiOsPrintf ("%2.2X ", *DataTable); + DataTable++; + DataOffset++; + + if (DataOffset > Table->Length) + { + AcpiOsPrintf ( + "**** ACPI table terminates in the middle of a " + "data structure! (ASF! table)\n"); + return; + } + } + + AcpiOsPrintf ("\n"); + break; + + default: + + break; + } + + AcpiOsPrintf ("\n"); + + /* Point to next subtable */ + + if (!Subtable->Header.Length) + { + AcpiOsPrintf ("Invalid zero subtable header length\n"); + return; + } + + Offset += Subtable->Header.Length; + Subtable = ACPI_ADD_PTR (ACPI_ASF_INFO, Subtable, + Subtable->Header.Length); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpCpep + * + * PARAMETERS: Table - A CPEP table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a CPEP. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpCpep ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_CPEP_POLLING *Subtable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_CPEP); + + + /* Main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoCpep); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Table, Offset); + while (Offset < Table->Length) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Header.Length, AcpiDmTableInfoCpep0); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Point to next subtable */ + + Offset += Subtable->Header.Length; + Subtable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Subtable, + Subtable->Header.Length); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpCsrt + * + * PARAMETERS: Table - A CSRT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a CSRT. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpCsrt ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_CSRT_GROUP *Subtable; + ACPI_CSRT_SHARED_INFO *SharedInfoTable; + ACPI_CSRT_DESCRIPTOR *SubSubtable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_CSRT); + UINT32 SubOffset; + UINT32 SubSubOffset; + UINT32 InfoLength; + + + /* The main table only contains the ACPI header, thus already handled */ + + /* Subtables (Resource Groups) */ + + Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Table, Offset); + while (Offset < Table->Length) + { + /* Resource group subtable */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoCsrt0); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Shared info subtable (One per resource group) */ + + SubOffset = sizeof (ACPI_CSRT_GROUP); + SharedInfoTable = ACPI_ADD_PTR (ACPI_CSRT_SHARED_INFO, Table, + Offset + SubOffset); + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset + SubOffset, SharedInfoTable, + sizeof (ACPI_CSRT_SHARED_INFO), AcpiDmTableInfoCsrt1); + if (ACPI_FAILURE (Status)) + { + return; + } + + SubOffset += Subtable->SharedInfoLength; + + /* Sub-Subtables (Resource Descriptors) */ + + SubSubtable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, Table, + Offset + SubOffset); + + while ((SubOffset < Subtable->Length) && + ((Offset + SubOffset) < Table->Length)) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset + SubOffset, SubSubtable, + SubSubtable->Length, AcpiDmTableInfoCsrt2); + if (ACPI_FAILURE (Status)) + { + return; + } + + SubSubOffset = sizeof (ACPI_CSRT_DESCRIPTOR); + + /* Resource-specific info buffer */ + + InfoLength = SubSubtable->Length - SubSubOffset; + if (InfoLength) + { + Status = AcpiDmDumpTable (Length, + Offset + SubOffset + SubSubOffset, Table, + InfoLength, AcpiDmTableInfoCsrt2a); + if (ACPI_FAILURE (Status)) + { + return; + } + SubSubOffset += InfoLength; + } + + /* Point to next sub-subtable */ + + SubOffset += SubSubtable->Length; + SubSubtable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, SubSubtable, + SubSubtable->Length); + } + + /* Point to next subtable */ + + Offset += Subtable->Length; + Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Subtable, + Subtable->Length); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpDbg2 + * + * PARAMETERS: Table - A DBG2 table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a DBG2. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpDbg2 ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_DBG2_DEVICE *Subtable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_DBG2); + UINT32 i; + UINT32 ArrayOffset; + UINT32 AbsoluteOffset; + UINT8 *Array; + + + /* Main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDbg2); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Table, Offset); + while (Offset < Table->Length) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoDbg2Device); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Dump the BaseAddress array */ + + for (i = 0; i < Subtable->RegisterCount; i++) + { + ArrayOffset = Subtable->BaseAddressOffset + + (sizeof (ACPI_GENERIC_ADDRESS) * i); + AbsoluteOffset = Offset + ArrayOffset; + Array = (UINT8 *) Subtable + ArrayOffset; + + Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array, + Subtable->Length, AcpiDmTableInfoDbg2Addr); + if (ACPI_FAILURE (Status)) + { + return; + } + } + + /* Dump the AddressSize array */ + + for (i = 0; i < Subtable->RegisterCount; i++) + { + ArrayOffset = Subtable->AddressSizeOffset + + (sizeof (UINT32) * i); + AbsoluteOffset = Offset + ArrayOffset; + Array = (UINT8 *) Subtable + ArrayOffset; + + Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array, + Subtable->Length, AcpiDmTableInfoDbg2Size); + if (ACPI_FAILURE (Status)) + { + return; + } + } + + /* Dump the Namestring (required) */ + + AcpiOsPrintf ("\n"); + ArrayOffset = Subtable->NamepathOffset; + AbsoluteOffset = Offset + ArrayOffset; + Array = (UINT8 *) Subtable + ArrayOffset; + + Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array, + Subtable->Length, AcpiDmTableInfoDbg2Name); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Dump the OemData (optional) */ + + if (Subtable->OemDataOffset) + { + Status = AcpiDmDumpTable (Length, Offset + Subtable->OemDataOffset, + Table, Subtable->OemDataLength, + AcpiDmTableInfoDbg2OemData); + if (ACPI_FAILURE (Status)) + { + return; + } + } + + /* Point to next subtable */ + + Offset += Subtable->Length; + Subtable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Subtable, + Subtable->Length); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpDmar + * + * PARAMETERS: Table - A DMAR table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a DMAR. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpDmar ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_DMAR_HEADER *Subtable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_DMAR); + ACPI_DMTABLE_INFO *InfoTable; + ACPI_DMAR_DEVICE_SCOPE *ScopeTable; + UINT32 ScopeOffset; + UINT8 *PciPath; + UINT32 PathOffset; + + + /* Main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDmar); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoDmarHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + AcpiOsPrintf ("\n"); + + switch (Subtable->Type) + { + case ACPI_DMAR_TYPE_HARDWARE_UNIT: + + InfoTable = AcpiDmTableInfoDmar0; + ScopeOffset = sizeof (ACPI_DMAR_HARDWARE_UNIT); + break; + + case ACPI_DMAR_TYPE_RESERVED_MEMORY: + + InfoTable = AcpiDmTableInfoDmar1; + ScopeOffset = sizeof (ACPI_DMAR_RESERVED_MEMORY); + break; + + case ACPI_DMAR_TYPE_ROOT_ATS: + + InfoTable = AcpiDmTableInfoDmar2; + ScopeOffset = sizeof (ACPI_DMAR_ATSR); + break; + + case ACPI_DMAR_TYPE_HARDWARE_AFFINITY: + + InfoTable = AcpiDmTableInfoDmar3; + ScopeOffset = sizeof (ACPI_DMAR_RHSA); + break; + + case ACPI_DMAR_TYPE_NAMESPACE: + + InfoTable = AcpiDmTableInfoDmar4; + ScopeOffset = sizeof (ACPI_DMAR_ANDD); + break; + + default: + + AcpiOsPrintf ("\n**** Unknown DMAR subtable type 0x%X\n\n", + Subtable->Type); + return; + } + + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Length, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* + * Dump the optional device scope entries + */ + if ((Subtable->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) || + (Subtable->Type == ACPI_DMAR_TYPE_NAMESPACE)) + { + /* These types do not support device scopes */ + + goto NextSubtable; + } + + ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, Subtable, ScopeOffset); + while (ScopeOffset < Subtable->Length) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset + ScopeOffset, ScopeTable, + ScopeTable->Length, AcpiDmTableInfoDmarScope); + if (ACPI_FAILURE (Status)) + { + return; + } + AcpiOsPrintf ("\n"); + + /* Dump the PCI Path entries for this device scope */ + + PathOffset = sizeof (ACPI_DMAR_DEVICE_SCOPE); /* Path entries start at this offset */ + + PciPath = ACPI_ADD_PTR (UINT8, ScopeTable, + sizeof (ACPI_DMAR_DEVICE_SCOPE)); + + while (PathOffset < ScopeTable->Length) + { + AcpiDmLineHeader ((PathOffset + ScopeOffset + Offset), 2, + "PCI Path"); + AcpiOsPrintf ("%2.2X,%2.2X\n", PciPath[0], PciPath[1]); + + /* Point to next PCI Path entry */ + + PathOffset += 2; + PciPath += 2; + AcpiOsPrintf ("\n"); + } + + /* Point to next device scope entry */ + + ScopeOffset += ScopeTable->Length; + ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, + ScopeTable, ScopeTable->Length); + } + +NextSubtable: + /* Point to next subtable */ + + Offset += Subtable->Length; + Subtable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Subtable, + Subtable->Length); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpDrtm + * + * PARAMETERS: Table - A DRTM table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a DRTM. + * + ******************************************************************************/ + +void +AcpiDmDumpDrtm ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + UINT32 Offset; + ACPI_DRTM_VTABLE_LIST *DrtmVtl; + ACPI_DRTM_RESOURCE_LIST *DrtmRl; + ACPI_DRTM_DPS_ID *DrtmDps; + UINT32 Count; + + + /* Main table */ + + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, + AcpiDmTableInfoDrtm); + if (ACPI_FAILURE (Status)) + { + return; + } + + Offset = sizeof (ACPI_TABLE_DRTM); + + /* Sub-tables */ + + /* Dump ValidatedTable length */ + + DrtmVtl = ACPI_ADD_PTR (ACPI_DRTM_VTABLE_LIST, Table, Offset); + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, + DrtmVtl, ACPI_OFFSET (ACPI_DRTM_VTABLE_LIST, ValidatedTables), + AcpiDmTableInfoDrtm0); + if (ACPI_FAILURE (Status)) + { + return; + } + + Offset += ACPI_OFFSET (ACPI_DRTM_VTABLE_LIST, ValidatedTables); + + /* Dump Validated table addresses */ + + Count = 0; + while ((Offset < Table->Length) && + (DrtmVtl->ValidatedTableCount > Count)) + { + Status = AcpiDmDumpTable (Table->Length, Offset, + ACPI_ADD_PTR (void, Table, Offset), sizeof (UINT64), + AcpiDmTableInfoDrtm0a); + if (ACPI_FAILURE (Status)) + { + return; + } + + Offset += sizeof (UINT64); + Count++; + } + + /* Dump ResourceList length */ + + DrtmRl = ACPI_ADD_PTR (ACPI_DRTM_RESOURCE_LIST, Table, Offset); + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, + DrtmRl, ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST, Resources), + AcpiDmTableInfoDrtm1); + if (ACPI_FAILURE (Status)) + { + return; + } + + Offset += ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST, Resources); + + /* Dump the Resource List */ + + Count = 0; + while ((Offset < Table->Length) && + (DrtmRl->ResourceCount > Count)) + { + Status = AcpiDmDumpTable (Table->Length, Offset, + ACPI_ADD_PTR (void, Table, Offset), + sizeof (ACPI_DRTM_RESOURCE), AcpiDmTableInfoDrtm1a); + if (ACPI_FAILURE (Status)) + { + return; + } + + Offset += sizeof (ACPI_DRTM_RESOURCE); + Count++; + } + + /* Dump DPS */ + + DrtmDps = ACPI_ADD_PTR (ACPI_DRTM_DPS_ID, Table, Offset); + AcpiOsPrintf ("\n"); + (void) AcpiDmDumpTable (Table->Length, Offset, + DrtmDps, sizeof (ACPI_DRTM_DPS_ID), AcpiDmTableInfoDrtm2); +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpEinj + * + * PARAMETERS: Table - A EINJ table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a EINJ. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpEinj ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_WHEA_HEADER *Subtable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_EINJ); + + + /* Main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoEinj); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset); + while (Offset < Table->Length) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, + sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoEinj0); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Point to next subtable (each subtable is of fixed length) */ + + Offset += sizeof (ACPI_WHEA_HEADER); + Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Subtable, + sizeof (ACPI_WHEA_HEADER)); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpErst + * + * PARAMETERS: Table - A ERST table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a ERST. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpErst ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_WHEA_HEADER *Subtable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_ERST); + + + /* Main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoErst); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset); + while (Offset < Table->Length) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, + sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoErst0); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Point to next subtable (each subtable is of fixed length) */ + + Offset += sizeof (ACPI_WHEA_HEADER); + Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Subtable, + sizeof (ACPI_WHEA_HEADER)); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpFpdt + * + * PARAMETERS: Table - A FPDT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a FPDT. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpFpdt ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_FPDT_HEADER *Subtable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_FPDT); + ACPI_DMTABLE_INFO *InfoTable; + + + /* There is no main table (other than the standard ACPI header) */ + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoFpdtHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + switch (Subtable->Type) + { + case ACPI_FPDT_TYPE_BOOT: + + InfoTable = AcpiDmTableInfoFpdt0; + break; + + case ACPI_FPDT_TYPE_S3PERF: + + InfoTable = AcpiDmTableInfoFpdt1; + break; + + default: + + AcpiOsPrintf ("\n**** Unknown FPDT subtable type 0x%X\n\n", + Subtable->Type); + + /* Attempt to continue */ + + if (!Subtable->Length) + { + AcpiOsPrintf ("Invalid zero length subtable\n"); + return; + } + goto NextSubtable; + } + + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Length, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + +NextSubtable: + /* Point to next subtable */ + + Offset += Subtable->Length; + Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Subtable, + Subtable->Length); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpGtdt + * + * PARAMETERS: Table - A GTDT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a GTDT. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpGtdt ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_GTDT_HEADER *Subtable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_GTDT); + ACPI_DMTABLE_INFO *InfoTable; + UINT32 SubtableLength; + UINT32 GtCount; + ACPI_GTDT_TIMER_ENTRY *GtxTable; + + + /* Main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoGtdt); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoGtdtHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + GtCount = 0; + switch (Subtable->Type) + { + case ACPI_GTDT_TYPE_TIMER_BLOCK: + + SubtableLength = sizeof (ACPI_GTDT_TIMER_BLOCK); + GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK, + Subtable))->TimerCount; + + InfoTable = AcpiDmTableInfoGtdt0; + break; + + case ACPI_GTDT_TYPE_WATCHDOG: + + SubtableLength = sizeof (ACPI_GTDT_WATCHDOG); + + InfoTable = AcpiDmTableInfoGtdt1; + break; + + default: + + /* Cannot continue on unknown type - no length */ + + AcpiOsPrintf ("\n**** Unknown GTDT subtable type 0x%X\n", + Subtable->Type); + return; + } + + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Length, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Point to end of current subtable (each subtable above is of fixed length) */ + + Offset += SubtableLength; + + /* If there are any Gt Timer Blocks from above, dump them now */ + + if (GtCount) + { + GtxTable = ACPI_ADD_PTR ( + ACPI_GTDT_TIMER_ENTRY, Subtable, SubtableLength); + SubtableLength += GtCount * sizeof (ACPI_GTDT_TIMER_ENTRY); + + while (GtCount) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, GtxTable, + sizeof (ACPI_GTDT_TIMER_ENTRY), AcpiDmTableInfoGtdt0a); + if (ACPI_FAILURE (Status)) + { + return; + } + Offset += sizeof (ACPI_GTDT_TIMER_ENTRY); + GtxTable++; + GtCount--; + } + } + + /* Point to next subtable */ + + Subtable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Subtable, SubtableLength); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpHest + * + * PARAMETERS: Table - A HEST table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a HEST. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpHest ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_HEST_HEADER *Subtable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_HEST); + ACPI_DMTABLE_INFO *InfoTable; + UINT32 SubtableLength; + UINT32 BankCount; + ACPI_HEST_IA_ERROR_BANK *BankTable; + + + /* Main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoHest); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Table, Offset); + while (Offset < Table->Length) + { + BankCount = 0; + switch (Subtable->Type) + { + case ACPI_HEST_TYPE_IA32_CHECK: + + InfoTable = AcpiDmTableInfoHest0; + SubtableLength = sizeof (ACPI_HEST_IA_MACHINE_CHECK); + BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_MACHINE_CHECK, + Subtable))->NumHardwareBanks; + break; + + case ACPI_HEST_TYPE_IA32_CORRECTED_CHECK: + + InfoTable = AcpiDmTableInfoHest1; + SubtableLength = sizeof (ACPI_HEST_IA_CORRECTED); + BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_CORRECTED, + Subtable))->NumHardwareBanks; + break; + + case ACPI_HEST_TYPE_IA32_NMI: + + InfoTable = AcpiDmTableInfoHest2; + SubtableLength = sizeof (ACPI_HEST_IA_NMI); + break; + + case ACPI_HEST_TYPE_AER_ROOT_PORT: + + InfoTable = AcpiDmTableInfoHest6; + SubtableLength = sizeof (ACPI_HEST_AER_ROOT); + break; + + case ACPI_HEST_TYPE_AER_ENDPOINT: + + InfoTable = AcpiDmTableInfoHest7; + SubtableLength = sizeof (ACPI_HEST_AER); + break; + + case ACPI_HEST_TYPE_AER_BRIDGE: + + InfoTable = AcpiDmTableInfoHest8; + SubtableLength = sizeof (ACPI_HEST_AER_BRIDGE); + break; + + case ACPI_HEST_TYPE_GENERIC_ERROR: + + InfoTable = AcpiDmTableInfoHest9; + SubtableLength = sizeof (ACPI_HEST_GENERIC); + break; + + case ACPI_HEST_TYPE_GENERIC_ERROR_V2: + + InfoTable = AcpiDmTableInfoHest10; + SubtableLength = sizeof (ACPI_HEST_GENERIC_V2); + break; + + case ACPI_HEST_TYPE_IA32_DEFERRED_CHECK: + + InfoTable = AcpiDmTableInfoHest11; + SubtableLength = sizeof (ACPI_HEST_IA_DEFERRED_CHECK); + BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_DEFERRED_CHECK, + Subtable))->NumHardwareBanks; + break; + + default: + + /* Cannot continue on unknown type - no length */ + + AcpiOsPrintf ("\n**** Unknown HEST subtable type 0x%X\n", + Subtable->Type); + return; + } + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, + SubtableLength, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Point to end of current subtable (each subtable above is of fixed length) */ + + Offset += SubtableLength; + + /* If there are any (fixed-length) Error Banks from above, dump them now */ + + if (BankCount) + { + BankTable = ACPI_ADD_PTR (ACPI_HEST_IA_ERROR_BANK, Subtable, + SubtableLength); + SubtableLength += BankCount * sizeof (ACPI_HEST_IA_ERROR_BANK); + + while (BankCount) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, BankTable, + sizeof (ACPI_HEST_IA_ERROR_BANK), AcpiDmTableInfoHestBank); + if (ACPI_FAILURE (Status)) + { + return; + } + + Offset += sizeof (ACPI_HEST_IA_ERROR_BANK); + BankTable++; + BankCount--; + } + } + + /* Point to next subtable */ + + Subtable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Subtable, SubtableLength); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpHmat + * + * PARAMETERS: Table - A HMAT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a HMAT. + * + ******************************************************************************/ + +void +AcpiDmDumpHmat ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_HMAT_STRUCTURE *HmatStruct; + ACPI_HMAT_LOCALITY *HmatLocality; + ACPI_HMAT_CACHE *HmatCache; + UINT32 Offset; + UINT32 SubtableOffset; + UINT32 Length; + ACPI_DMTABLE_INFO *InfoTable; + UINT32 i, j; + + + /* Main table */ + + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoHmat); + if (ACPI_FAILURE (Status)) + { + return; + } + Offset = sizeof (ACPI_TABLE_HMAT); + + while (Offset < Table->Length) + { + AcpiOsPrintf ("\n"); + SubtableOffset = 0; + + /* Dump HMAT structure header */ + + HmatStruct = ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, Table, Offset); + if (HmatStruct->Length < sizeof (ACPI_HMAT_STRUCTURE)) + { + AcpiOsPrintf ("Invalid HMAT structure length\n"); + return; + } + Status = AcpiDmDumpTable (Table->Length, Offset, HmatStruct, + HmatStruct->Length, AcpiDmTableInfoHmatHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + switch (HmatStruct->Type) + { + case ACPI_HMAT_TYPE_ADDRESS_RANGE: + + InfoTable = AcpiDmTableInfoHmat0; + Length = sizeof (ACPI_HMAT_ADDRESS_RANGE); + break; + + case ACPI_HMAT_TYPE_LOCALITY: + + InfoTable = AcpiDmTableInfoHmat1; + Length = sizeof (ACPI_HMAT_LOCALITY); + break; + + case ACPI_HMAT_TYPE_CACHE: + + InfoTable = AcpiDmTableInfoHmat2; + Length = sizeof (ACPI_HMAT_CACHE); + break; + + default: + + AcpiOsPrintf ("\n**** Unknown HMAT structure type 0x%X\n", + HmatStruct->Type); + + /* Attempt to continue */ + + goto NextSubtable; + } + + /* Dump HMAT structure body */ + + if (HmatStruct->Length < Length) + { + AcpiOsPrintf ("Invalid HMAT structure length\n"); + return; + } + Status = AcpiDmDumpTable (Table->Length, Offset, HmatStruct, + HmatStruct->Length, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Dump HMAT structure additionals */ + + switch (HmatStruct->Type) + { + case ACPI_HMAT_TYPE_LOCALITY: + + HmatLocality = ACPI_CAST_PTR (ACPI_HMAT_LOCALITY, HmatStruct); + SubtableOffset = sizeof (ACPI_HMAT_LOCALITY); + + /* Dump initiator proximity domains */ + + if ((UINT32)(HmatStruct->Length - SubtableOffset) < + (UINT32)(HmatLocality->NumberOfInitiatorPDs * 4)) + { + AcpiOsPrintf ("Invalid initiator proximity domain number\n"); + return; + } + for (i = 0; i < HmatLocality->NumberOfInitiatorPDs; i++) + { + Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, + ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), + 4, AcpiDmTableInfoHmat1a); + SubtableOffset += 4; + } + + /* Dump target proximity domains */ + + if ((UINT32)(HmatStruct->Length - SubtableOffset) < + (UINT32)(HmatLocality->NumberOfTargetPDs * 4)) + { + AcpiOsPrintf ("Invalid target proximity domain number\n"); + return; + } + for (i = 0; i < HmatLocality->NumberOfTargetPDs; i++) + { + Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, + ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), + 4, AcpiDmTableInfoHmat1b); + SubtableOffset += 4; + } + + /* Dump latency/bandwidth entris */ + + if ((UINT32)(HmatStruct->Length - SubtableOffset) < + (UINT32)(HmatLocality->NumberOfInitiatorPDs * + HmatLocality->NumberOfTargetPDs * 2)) + { + AcpiOsPrintf ("Invalid latency/bandwidth entry number\n"); + return; + } + for (i = 0; i < HmatLocality->NumberOfInitiatorPDs; i++) + { + for (j = 0; j < HmatLocality->NumberOfTargetPDs; j++) + { + Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, + ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), + 2, AcpiDmTableInfoHmat1c); + SubtableOffset += 2; + } + } + break; + + case ACPI_HMAT_TYPE_CACHE: + + HmatCache = ACPI_CAST_PTR (ACPI_HMAT_CACHE, HmatStruct); + SubtableOffset = sizeof (ACPI_HMAT_CACHE); + + /* Dump SMBIOS handles */ + + if ((UINT32)(HmatStruct->Length - SubtableOffset) < + (UINT32)(HmatCache->NumberOfSMBIOSHandles * 2)) + { + AcpiOsPrintf ("Invalid SMBIOS handle number\n"); + return; + } + for (i = 0; i < HmatCache->NumberOfSMBIOSHandles; i++) + { + Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, + ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), + 2, AcpiDmTableInfoHmat2a); + SubtableOffset += 2; + } + break; + + default: + + break; + } + +NextSubtable: + /* Point to next HMAT structure subtable */ + + Offset += (HmatStruct->Length); + } +} diff --git a/sys/contrib/dev/acpica/source/common/dmtbdump2.c b/sys/contrib/dev/acpica/source/common/dmtbdump2.c new file mode 100644 index 0000000000..d2c584bbb7 --- /dev/null +++ b/sys/contrib/dev/acpica/source/common/dmtbdump2.c @@ -0,0 +1,2074 @@ +/****************************************************************************** + * + * Module Name: dmtbdump2 - Dump ACPI data tables that contain no AML code + * + *****************************************************************************/ + +/****************************************************************************** + * + * 1. Copyright Notice + * + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. + * All rights reserved. + * + * 2. License + * + * 2.1. This is your license from Intel Corp. under its intellectual property + * rights. You may have additional license terms from the party that provided + * you this software, covering your right to use that party's intellectual + * property rights. + * + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a + * copy of the source code appearing in this file ("Covered Code") an + * irrevocable, perpetual, worldwide license under Intel's copyrights in the + * base code distributed originally by Intel ("Original Intel Code") to copy, + * make derivatives, distribute, use and display any portion of the Covered + * Code in any form, with the right to sublicense such rights; and + * + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent + * license (with the right to sublicense), under only those claims of Intel + * patents that are infringed by the Original Intel Code, to make, use, sell, + * offer to sell, and import the Covered Code and derivative works thereof + * solely to the minimum extent necessary to exercise the above copyright + * license, and in no event shall the patent license extend to any additions + * to or modifications of the Original Intel Code. No other license or right + * is granted directly or by implication, estoppel or otherwise; + * + * The above copyright and patent license is granted only if the following + * conditions are met: + * + * 3. Conditions + * + * 3.1. Redistribution of Source with Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification with rights to further distribute source must include + * the above Copyright Notice, the above License, this list of Conditions, + * and the following Disclaimer and Export Compliance provision. In addition, + * Licensee must cause all Covered Code to which Licensee contributes to + * contain a file documenting the changes Licensee made to create that Covered + * Code and the date of any change. Licensee must include in that file the + * documentation of any changes made by any predecessor Licensee. Licensee + * must include a prominent statement that the modification is derived, + * directly or indirectly, from Original Intel Code. + * + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification without rights to further distribute source must + * include the following Disclaimer and Export Compliance provision in the + * documentation and/or other materials provided with distribution. In + * addition, Licensee may not authorize further sublicense of source of any + * portion of the Covered Code, and must include terms to the effect that the + * license from Licensee to its licensee is limited to the intellectual + * property embodied in the software Licensee provides to its licensee, and + * not to intellectual property embodied in modifications its licensee may + * make. + * + * 3.3. Redistribution of Executable. Redistribution in executable form of any + * substantial portion of the Covered Code or modification must reproduce the + * above Copyright Notice, and the following Disclaimer and Export Compliance + * provision in the documentation and/or other materials provided with the + * distribution. + * + * 3.4. Intel retains all right, title, and interest in and to the Original + * Intel Code. + * + * 3.5. Neither the name Intel nor any other trademark owned or controlled by + * Intel shall be used in advertising or otherwise to promote the sale, use or + * other dealings in products derived from or relating to the Covered Code + * without prior written authorization from Intel. + * + * 4. Disclaimer and Export Compliance + * + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A + * PARTICULAR PURPOSE. + * + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY + * LIMITED REMEDY. + * + * 4.3. Licensee shall not export, either directly or indirectly, any of this + * software or system incorporating such software without first obtaining any + * required license or other approval from the U. S. Department of Commerce or + * any other agency or department of the United States Government. In the + * event Licensee exports any such software from the United States or + * re-exports any such software from a foreign destination, Licensee shall + * ensure that the distribution and export/re-export of the software is in + * compliance with all laws, regulations, orders, or other restrictions of the + * U.S. Export Administration Regulations. Licensee agrees that neither it nor + * any of its subsidiaries will export/re-export any technical data, process, + * software, or service, directly or indirectly, to any country for which the + * United States government or any agency thereof requires an export license, + * other governmental approval, or letter of assurance, without first obtaining + * such license, approval or letter. + * + ***************************************************************************** + * + * Alternatively, you may choose to be licensed under the terms of the + * following license: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Alternatively, you may choose to be licensed under the terms of the + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. + * + *****************************************************************************/ + +#include "acpi.h" +#include "accommon.h" +#include "acdisasm.h" +#include "actables.h" + +/* This module used for application-level code only */ + +#define _COMPONENT ACPI_CA_DISASSEMBLER + ACPI_MODULE_NAME ("dmtbdump2") + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpIort + * + * PARAMETERS: Table - A IORT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a IORT + * + ******************************************************************************/ + +void +AcpiDmDumpIort ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_TABLE_IORT *Iort; + ACPI_IORT_NODE *IortNode; + ACPI_IORT_ITS_GROUP *IortItsGroup = NULL; + ACPI_IORT_SMMU *IortSmmu = NULL; + UINT32 Offset; + UINT32 NodeOffset; + UINT32 Length; + ACPI_DMTABLE_INFO *InfoTable; + char *String; + UINT32 i; + + + /* Main table */ + + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIort); + if (ACPI_FAILURE (Status)) + { + return; + } + + Iort = ACPI_CAST_PTR (ACPI_TABLE_IORT, Table); + Offset = sizeof (ACPI_TABLE_IORT); + + /* Dump the OptionalPadding (optional) */ + + if (Iort->NodeOffset > Offset) + { + Status = AcpiDmDumpTable (Table->Length, Offset, Table, + Iort->NodeOffset - Offset, AcpiDmTableInfoIortPad); + if (ACPI_FAILURE (Status)) + { + return; + } + } + + Offset = Iort->NodeOffset; + while (Offset < Table->Length) + { + /* Common subtable header */ + + IortNode = ACPI_ADD_PTR (ACPI_IORT_NODE, Table, Offset); + AcpiOsPrintf ("\n"); + Length = ACPI_OFFSET (ACPI_IORT_NODE, NodeData); + Status = AcpiDmDumpTable (Table->Length, Offset, + IortNode, Length, AcpiDmTableInfoIortHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + NodeOffset = Length; + + switch (IortNode->Type) + { + case ACPI_IORT_NODE_ITS_GROUP: + + InfoTable = AcpiDmTableInfoIort0; + Length = ACPI_OFFSET (ACPI_IORT_ITS_GROUP, Identifiers); + IortItsGroup = ACPI_ADD_PTR (ACPI_IORT_ITS_GROUP, IortNode, NodeOffset); + break; + + case ACPI_IORT_NODE_NAMED_COMPONENT: + + InfoTable = AcpiDmTableInfoIort1; + Length = ACPI_OFFSET (ACPI_IORT_NAMED_COMPONENT, DeviceName); + String = ACPI_ADD_PTR (char, IortNode, NodeOffset + Length); + Length += strlen (String) + 1; + break; + + case ACPI_IORT_NODE_PCI_ROOT_COMPLEX: + + InfoTable = AcpiDmTableInfoIort2; + Length = IortNode->Length - NodeOffset; + break; + + case ACPI_IORT_NODE_SMMU: + + InfoTable = AcpiDmTableInfoIort3; + Length = ACPI_OFFSET (ACPI_IORT_SMMU, Interrupts); + IortSmmu = ACPI_ADD_PTR (ACPI_IORT_SMMU, IortNode, NodeOffset); + break; + + case ACPI_IORT_NODE_SMMU_V3: + + InfoTable = AcpiDmTableInfoIort4; + Length = IortNode->Length - NodeOffset; + break; + + default: + + AcpiOsPrintf ("\n**** Unknown IORT node type 0x%X\n", + IortNode->Type); + + /* Attempt to continue */ + + if (!IortNode->Length) + { + AcpiOsPrintf ("Invalid zero length IORT node\n"); + return; + } + goto NextSubtable; + } + + /* Dump the node subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, + ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), + Length, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + + NodeOffset += Length; + + /* Dump the node specific data */ + + switch (IortNode->Type) + { + case ACPI_IORT_NODE_ITS_GROUP: + + /* Validate IortItsGroup to avoid compiler warnings */ + + if (IortItsGroup) + { + for (i = 0; i < IortItsGroup->ItsCount; i++) + { + Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, + ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), + 4, AcpiDmTableInfoIort0a); + NodeOffset += 4; + } + } + break; + + case ACPI_IORT_NODE_NAMED_COMPONENT: + + /* Dump the Padding (optional) */ + + if (IortNode->Length > NodeOffset) + { + Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, + Table, IortNode->Length - NodeOffset, + AcpiDmTableInfoIort1a); + if (ACPI_FAILURE (Status)) + { + return; + } + } + break; + + case ACPI_IORT_NODE_SMMU: + + AcpiOsPrintf ("\n"); + + /* Validate IortSmmu to avoid compiler warnings */ + + if (IortSmmu) + { + Length = 2 * sizeof (UINT64); + NodeOffset = IortSmmu->GlobalInterruptOffset; + Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, + ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), + Length, AcpiDmTableInfoIort3a); + if (ACPI_FAILURE (Status)) + { + return; + } + + NodeOffset = IortSmmu->ContextInterruptOffset; + for (i = 0; i < IortSmmu->ContextInterruptCount; i++) + { + Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, + ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), + 8, AcpiDmTableInfoIort3b); + if (ACPI_FAILURE (Status)) + { + return; + } + + NodeOffset += 8; + } + + NodeOffset = IortSmmu->PmuInterruptOffset; + for (i = 0; i < IortSmmu->PmuInterruptCount; i++) + { + Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, + ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), + 8, AcpiDmTableInfoIort3c); + if (ACPI_FAILURE (Status)) + { + return; + } + + NodeOffset += 8; + } + } + break; + + default: + + break; + } + + /* Dump the ID mappings */ + + NodeOffset = IortNode->MappingOffset; + for (i = 0; i < IortNode->MappingCount; i++) + { + AcpiOsPrintf ("\n"); + Length = sizeof (ACPI_IORT_ID_MAPPING); + Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, + ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), + Length, AcpiDmTableInfoIortMap); + if (ACPI_FAILURE (Status)) + { + return; + } + + NodeOffset += Length; + } + +NextSubtable: + /* Point to next node subtable */ + + Offset += IortNode->Length; + IortNode = ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, IortNode->Length); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpIvrs + * + * PARAMETERS: Table - A IVRS table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a IVRS + * + ******************************************************************************/ + +static UINT8 EntrySizes[] = {4,8,16,32}; + +void +AcpiDmDumpIvrs ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + UINT32 Offset = sizeof (ACPI_TABLE_IVRS); + UINT32 EntryOffset; + UINT32 EntryLength; + UINT32 EntryType; + ACPI_IVRS_DE_HEADER *DeviceEntry; + ACPI_IVRS_HEADER *Subtable; + ACPI_DMTABLE_INFO *InfoTable; + + + /* Main table */ + + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIvrs); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoIvrsHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + switch (Subtable->Type) + { + case ACPI_IVRS_TYPE_HARDWARE: + + InfoTable = AcpiDmTableInfoIvrs0; + break; + + case ACPI_IVRS_TYPE_MEMORY1: + case ACPI_IVRS_TYPE_MEMORY2: + case ACPI_IVRS_TYPE_MEMORY3: + + InfoTable = AcpiDmTableInfoIvrs1; + break; + + default: + + AcpiOsPrintf ("\n**** Unknown IVRS subtable type 0x%X\n", + Subtable->Type); + + /* Attempt to continue */ + + if (!Subtable->Length) + { + AcpiOsPrintf ("Invalid zero length subtable\n"); + return; + } + goto NextSubtable; + } + + /* Dump the subtable */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + Subtable->Length, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* The hardware subtable can contain multiple device entries */ + + if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE) + { + EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE); + DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable, + sizeof (ACPI_IVRS_HARDWARE)); + + while (EntryOffset < (Offset + Subtable->Length)) + { + AcpiOsPrintf ("\n"); + /* + * Upper 2 bits of Type encode the length of the device entry + * + * 00 = 4 byte + * 01 = 8 byte + * 10 = 16 byte - currently no entries defined + * 11 = 32 byte - currently no entries defined + */ + EntryType = DeviceEntry->Type; + EntryLength = EntrySizes [EntryType >> 6]; + + switch (EntryType) + { + /* 4-byte device entries */ + + case ACPI_IVRS_TYPE_PAD4: + case ACPI_IVRS_TYPE_ALL: + case ACPI_IVRS_TYPE_SELECT: + case ACPI_IVRS_TYPE_START: + case ACPI_IVRS_TYPE_END: + + InfoTable = AcpiDmTableInfoIvrs4; + break; + + /* 8-byte entries, type A */ + + case ACPI_IVRS_TYPE_ALIAS_SELECT: + case ACPI_IVRS_TYPE_ALIAS_START: + + InfoTable = AcpiDmTableInfoIvrs8a; + break; + + /* 8-byte entries, type B */ + + case ACPI_IVRS_TYPE_PAD8: + case ACPI_IVRS_TYPE_EXT_SELECT: + case ACPI_IVRS_TYPE_EXT_START: + + InfoTable = AcpiDmTableInfoIvrs8b; + break; + + /* 8-byte entries, type C */ + + case ACPI_IVRS_TYPE_SPECIAL: + + InfoTable = AcpiDmTableInfoIvrs8c; + break; + + default: + InfoTable = AcpiDmTableInfoIvrs4; + AcpiOsPrintf ( + "\n**** Unknown IVRS device entry type/length: " + "0x%.2X/0x%X at offset 0x%.4X: (header below)\n", + EntryType, EntryLength, EntryOffset); + break; + } + + /* Dump the Device Entry */ + + Status = AcpiDmDumpTable (Table->Length, EntryOffset, + DeviceEntry, EntryLength, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + + EntryOffset += EntryLength; + DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, DeviceEntry, + EntryLength); + } + } + +NextSubtable: + /* Point to next subtable */ + + Offset += Subtable->Length; + Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Subtable, Subtable->Length); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpLpit + * + * PARAMETERS: Table - A LPIT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a LPIT. This table type consists + * of an open-ended number of subtables. Note: There are no + * entries in the main table. An LPIT consists of the table + * header and then subtables only. + * + ******************************************************************************/ + +void +AcpiDmDumpLpit ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_LPIT_HEADER *Subtable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_LPIT); + ACPI_DMTABLE_INFO *InfoTable; + UINT32 SubtableLength; + + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + Status = AcpiDmDumpTable (Length, Offset, Subtable, + sizeof (ACPI_LPIT_HEADER), AcpiDmTableInfoLpitHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + switch (Subtable->Type) + { + case ACPI_LPIT_TYPE_NATIVE_CSTATE: + + InfoTable = AcpiDmTableInfoLpit0; + SubtableLength = sizeof (ACPI_LPIT_NATIVE); + break; + + default: + + /* Cannot continue on unknown type - no length */ + + AcpiOsPrintf ("\n**** Unknown LPIT subtable type 0x%X\n", + Subtable->Type); + return; + } + + Status = AcpiDmDumpTable (Length, Offset, Subtable, + SubtableLength, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + + AcpiOsPrintf ("\n"); + + /* Point to next subtable */ + + Offset += SubtableLength; + Subtable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Subtable, SubtableLength); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpMadt + * + * PARAMETERS: Table - A MADT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a MADT. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpMadt ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_SUBTABLE_HEADER *Subtable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_MADT); + ACPI_DMTABLE_INFO *InfoTable; + + + /* Main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoMadt); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoMadtHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + switch (Subtable->Type) + { + case ACPI_MADT_TYPE_LOCAL_APIC: + + InfoTable = AcpiDmTableInfoMadt0; + break; + + case ACPI_MADT_TYPE_IO_APIC: + + InfoTable = AcpiDmTableInfoMadt1; + break; + + case ACPI_MADT_TYPE_INTERRUPT_OVERRIDE: + + InfoTable = AcpiDmTableInfoMadt2; + break; + + case ACPI_MADT_TYPE_NMI_SOURCE: + + InfoTable = AcpiDmTableInfoMadt3; + break; + + case ACPI_MADT_TYPE_LOCAL_APIC_NMI: + + InfoTable = AcpiDmTableInfoMadt4; + break; + + case ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE: + + InfoTable = AcpiDmTableInfoMadt5; + break; + + case ACPI_MADT_TYPE_IO_SAPIC: + + InfoTable = AcpiDmTableInfoMadt6; + break; + + case ACPI_MADT_TYPE_LOCAL_SAPIC: + + InfoTable = AcpiDmTableInfoMadt7; + break; + + case ACPI_MADT_TYPE_INTERRUPT_SOURCE: + + InfoTable = AcpiDmTableInfoMadt8; + break; + + case ACPI_MADT_TYPE_LOCAL_X2APIC: + + InfoTable = AcpiDmTableInfoMadt9; + break; + + case ACPI_MADT_TYPE_LOCAL_X2APIC_NMI: + + InfoTable = AcpiDmTableInfoMadt10; + break; + + case ACPI_MADT_TYPE_GENERIC_INTERRUPT: + + InfoTable = AcpiDmTableInfoMadt11; + break; + + case ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR: + + InfoTable = AcpiDmTableInfoMadt12; + break; + + case ACPI_MADT_TYPE_GENERIC_MSI_FRAME: + + InfoTable = AcpiDmTableInfoMadt13; + break; + + case ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR: + + InfoTable = AcpiDmTableInfoMadt14; + break; + + case ACPI_MADT_TYPE_GENERIC_TRANSLATOR: + + InfoTable = AcpiDmTableInfoMadt15; + break; + + default: + + AcpiOsPrintf ("\n**** Unknown MADT subtable type 0x%X\n\n", + Subtable->Type); + + /* Attempt to continue */ + + if (!Subtable->Length) + { + AcpiOsPrintf ("Invalid zero length subtable\n"); + return; + } + + goto NextSubtable; + } + + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Length, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + +NextSubtable: + /* Point to next subtable */ + + Offset += Subtable->Length; + Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, + Subtable->Length); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpMcfg + * + * PARAMETERS: Table - A MCFG Table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a MCFG table + * + ******************************************************************************/ + +void +AcpiDmDumpMcfg ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + UINT32 Offset = sizeof (ACPI_TABLE_MCFG); + ACPI_MCFG_ALLOCATION *Subtable; + + + /* Main table */ + + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMcfg); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Table, Offset); + while (Offset < Table->Length) + { + if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > Table->Length) + { + AcpiOsPrintf ("Warning: there are %u invalid trailing bytes\n", + sizeof (ACPI_MCFG_ALLOCATION) - (Offset - Table->Length)); + return; + } + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + sizeof (ACPI_MCFG_ALLOCATION), AcpiDmTableInfoMcfg0); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Point to next subtable (each subtable is of fixed length) */ + + Offset += sizeof (ACPI_MCFG_ALLOCATION); + Subtable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Subtable, + sizeof (ACPI_MCFG_ALLOCATION)); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpMpst + * + * PARAMETERS: Table - A MPST Table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a MPST table + * + ******************************************************************************/ + +void +AcpiDmDumpMpst ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + UINT32 Offset = sizeof (ACPI_TABLE_MPST); + ACPI_MPST_POWER_NODE *Subtable0; + ACPI_MPST_POWER_STATE *Subtable0A; + ACPI_MPST_COMPONENT *Subtable0B; + ACPI_MPST_DATA_HDR *Subtable1; + ACPI_MPST_POWER_DATA *Subtable2; + UINT16 SubtableCount; + UINT32 PowerStateCount; + UINT32 ComponentCount; + + + /* Main table */ + + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMpst); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtable: Memory Power Node(s) */ + + SubtableCount = (ACPI_CAST_PTR (ACPI_TABLE_MPST, Table))->PowerNodeCount; + Subtable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Table, Offset); + + while ((Offset < Table->Length) && SubtableCount) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0, + sizeof (ACPI_MPST_POWER_NODE), AcpiDmTableInfoMpst0); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Extract the sub-subtable counts */ + + PowerStateCount = Subtable0->NumPowerStates; + ComponentCount = Subtable0->NumPhysicalComponents; + Offset += sizeof (ACPI_MPST_POWER_NODE); + + /* Sub-subtables - Memory Power State Structure(s) */ + + Subtable0A = ACPI_ADD_PTR (ACPI_MPST_POWER_STATE, Subtable0, + sizeof (ACPI_MPST_POWER_NODE)); + + while (PowerStateCount) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0A, + sizeof (ACPI_MPST_POWER_STATE), AcpiDmTableInfoMpst0A); + if (ACPI_FAILURE (Status)) + { + return; + } + + Subtable0A++; + PowerStateCount--; + Offset += sizeof (ACPI_MPST_POWER_STATE); + } + + /* Sub-subtables - Physical Component ID Structure(s) */ + + Subtable0B = ACPI_CAST_PTR (ACPI_MPST_COMPONENT, Subtable0A); + + if (ComponentCount) + { + AcpiOsPrintf ("\n"); + } + + while (ComponentCount) + { + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0B, + sizeof (ACPI_MPST_COMPONENT), AcpiDmTableInfoMpst0B); + if (ACPI_FAILURE (Status)) + { + return; + } + + Subtable0B++; + ComponentCount--; + Offset += sizeof (ACPI_MPST_COMPONENT); + } + + /* Point to next Memory Power Node subtable */ + + SubtableCount--; + Subtable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Subtable0, + sizeof (ACPI_MPST_POWER_NODE) + + (sizeof (ACPI_MPST_POWER_STATE) * Subtable0->NumPowerStates) + + (sizeof (ACPI_MPST_COMPONENT) * Subtable0->NumPhysicalComponents)); + } + + /* Subtable: Count of Memory Power State Characteristic structures */ + + AcpiOsPrintf ("\n"); + Subtable1 = ACPI_CAST_PTR (ACPI_MPST_DATA_HDR, Subtable0); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable1, + sizeof (ACPI_MPST_DATA_HDR), AcpiDmTableInfoMpst1); + if (ACPI_FAILURE (Status)) + { + return; + } + + SubtableCount = Subtable1->CharacteristicsCount; + Offset += sizeof (ACPI_MPST_DATA_HDR); + + /* Subtable: Memory Power State Characteristics structure(s) */ + + Subtable2 = ACPI_ADD_PTR (ACPI_MPST_POWER_DATA, Subtable1, + sizeof (ACPI_MPST_DATA_HDR)); + + while ((Offset < Table->Length) && SubtableCount) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable2, + sizeof (ACPI_MPST_POWER_DATA), AcpiDmTableInfoMpst2); + if (ACPI_FAILURE (Status)) + { + return; + } + + Subtable2++; + SubtableCount--; + Offset += sizeof (ACPI_MPST_POWER_DATA); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpMsct + * + * PARAMETERS: Table - A MSCT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a MSCT + * + ******************************************************************************/ + +void +AcpiDmDumpMsct ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + UINT32 Offset = sizeof (ACPI_TABLE_MSCT); + ACPI_MSCT_PROXIMITY *Subtable; + + + /* Main table */ + + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMsct); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + sizeof (ACPI_MSCT_PROXIMITY), AcpiDmTableInfoMsct0); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Point to next subtable */ + + Offset += sizeof (ACPI_MSCT_PROXIMITY); + Subtable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Subtable, + sizeof (ACPI_MSCT_PROXIMITY)); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpMtmr + * + * PARAMETERS: Table - A MTMR table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a MTMR + * + ******************************************************************************/ + +void +AcpiDmDumpMtmr ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + UINT32 Offset = sizeof (ACPI_TABLE_MTMR); + ACPI_MTMR_ENTRY *Subtable; + + + /* Main table */ + + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMtmr); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + sizeof (ACPI_MTMR_ENTRY), AcpiDmTableInfoMtmr0); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Point to next subtable */ + + Offset += sizeof (ACPI_MTMR_ENTRY); + Subtable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, Subtable, + sizeof (ACPI_MTMR_ENTRY)); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpNfit + * + * PARAMETERS: Table - A NFIT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of an NFIT. + * + ******************************************************************************/ + +void +AcpiDmDumpNfit ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + UINT32 Offset = sizeof (ACPI_TABLE_NFIT); + UINT32 FieldOffset = 0; + UINT32 Length; + ACPI_NFIT_HEADER *Subtable; + ACPI_DMTABLE_INFO *InfoTable; + ACPI_NFIT_INTERLEAVE *Interleave = NULL; + ACPI_NFIT_SMBIOS *SmbiosInfo = NULL; + ACPI_NFIT_FLUSH_ADDRESS *Hint = NULL; + UINT32 i; + + + /* Main table */ + + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoNfit); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Table, Offset); + while (Offset < Table->Length) + { + /* NFIT subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoNfitHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + switch (Subtable->Type) + { + case ACPI_NFIT_TYPE_SYSTEM_ADDRESS: + + InfoTable = AcpiDmTableInfoNfit0; + break; + + case ACPI_NFIT_TYPE_MEMORY_MAP: + + InfoTable = AcpiDmTableInfoNfit1; + break; + + case ACPI_NFIT_TYPE_INTERLEAVE: + + /* Has a variable number of 32-bit values at the end */ + + InfoTable = AcpiDmTableInfoNfit2; + Interleave = ACPI_CAST_PTR (ACPI_NFIT_INTERLEAVE, Subtable); + FieldOffset = sizeof (ACPI_NFIT_INTERLEAVE); + break; + + case ACPI_NFIT_TYPE_SMBIOS: + + SmbiosInfo = ACPI_CAST_PTR (ACPI_NFIT_SMBIOS, Subtable); + InfoTable = AcpiDmTableInfoNfit3; + break; + + case ACPI_NFIT_TYPE_CONTROL_REGION: + + InfoTable = AcpiDmTableInfoNfit4; + break; + + case ACPI_NFIT_TYPE_DATA_REGION: + + InfoTable = AcpiDmTableInfoNfit5; + break; + + case ACPI_NFIT_TYPE_FLUSH_ADDRESS: + + /* Has a variable number of 64-bit addresses at the end */ + + InfoTable = AcpiDmTableInfoNfit6; + Hint = ACPI_CAST_PTR (ACPI_NFIT_FLUSH_ADDRESS, Subtable); + FieldOffset = sizeof (ACPI_NFIT_FLUSH_ADDRESS) - sizeof (UINT64); + break; + + case ACPI_NFIT_TYPE_CAPABILITIES: /* ACPI 6.0A */ + + InfoTable = AcpiDmTableInfoNfit7; + break; + + default: + AcpiOsPrintf ("\n**** Unknown NFIT subtable type 0x%X\n", + Subtable->Type); + + /* Attempt to continue */ + + if (!Subtable->Length) + { + AcpiOsPrintf ("Invalid zero length subtable\n"); + return; + } + goto NextSubtable; + } + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + Subtable->Length, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Per-subtable variable-length fields */ + + switch (Subtable->Type) + { + case ACPI_NFIT_TYPE_INTERLEAVE: + + for (i = 0; i < Interleave->LineCount; i++) + { + Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset, + &Interleave->LineOffset[i], + sizeof (UINT32), AcpiDmTableInfoNfit2a); + if (ACPI_FAILURE (Status)) + { + return; + } + + FieldOffset += sizeof (UINT32); + } + break; + + case ACPI_NFIT_TYPE_SMBIOS: + + Length = Subtable->Length - + sizeof (ACPI_NFIT_SMBIOS) + sizeof (UINT8); + + if (Length) + { + Status = AcpiDmDumpTable (Table->Length, + sizeof (ACPI_NFIT_SMBIOS) - sizeof (UINT8), + SmbiosInfo, + Length, AcpiDmTableInfoNfit3a); + if (ACPI_FAILURE (Status)) + { + return; + } + } + + break; + + case ACPI_NFIT_TYPE_FLUSH_ADDRESS: + + for (i = 0; i < Hint->HintCount; i++) + { + Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset, + &Hint->HintAddress[i], + sizeof (UINT64), AcpiDmTableInfoNfit6a); + if (ACPI_FAILURE (Status)) + { + return; + } + + FieldOffset += sizeof (UINT64); + } + break; + + default: + break; + } + +NextSubtable: + /* Point to next subtable */ + + Offset += Subtable->Length; + Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Subtable, Subtable->Length); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpPcct + * + * PARAMETERS: Table - A PCCT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a PCCT. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpPcct ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_PCCT_SUBSPACE *Subtable; + ACPI_DMTABLE_INFO *InfoTable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_PCCT); + + + /* Main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPcct); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Header.Length, AcpiDmTableInfoPcctHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + switch (Subtable->Header.Type) + { + case ACPI_PCCT_TYPE_GENERIC_SUBSPACE: + + InfoTable = AcpiDmTableInfoPcct0; + break; + + case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE: + + InfoTable = AcpiDmTableInfoPcct1; + break; + + case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2: + + InfoTable = AcpiDmTableInfoPcct2; + break; + + case ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE: + + InfoTable = AcpiDmTableInfoPcct3; + break; + + case ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE: + + InfoTable = AcpiDmTableInfoPcct4; + break; + + default: + + AcpiOsPrintf ( + "\n**** Unexpected or unknown PCCT subtable type 0x%X\n\n", + Subtable->Header.Type); + return; + } + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Header.Length, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Point to next subtable */ + + Offset += Subtable->Header.Length; + Subtable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Subtable, + Subtable->Header.Length); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpPdtt + * + * PARAMETERS: Table - A PDTT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a Pdtt. This is a variable-length + * table that contains an open-ended number of IDs + * at the end of the table. + * + ******************************************************************************/ + +void +AcpiDmDumpPdtt ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_PDTT_CHANNEL *Subtable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_PDTT); + + + /* Main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPdtt); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables. Currently there is only one type, but can be multiples */ + + Subtable = ACPI_ADD_PTR (ACPI_PDTT_CHANNEL, Table, Offset); + while (Offset < Table->Length) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, + sizeof (ACPI_PDTT_CHANNEL), AcpiDmTableInfoPdtt0); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Point to next subtable */ + + Offset += sizeof (ACPI_PDTT_CHANNEL); + Subtable = ACPI_ADD_PTR (ACPI_PDTT_CHANNEL, Subtable, + sizeof (ACPI_PDTT_CHANNEL)); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpPmtt + * + * PARAMETERS: Table - A PMTT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a PMTT. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpPmtt ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_PMTT_HEADER *Subtable; + ACPI_PMTT_HEADER *MemSubtable; + ACPI_PMTT_HEADER *DimmSubtable; + ACPI_PMTT_DOMAIN *DomainArray; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_PMTT); + UINT32 MemOffset; + UINT32 DimmOffset; + UINT32 DomainOffset; + UINT32 DomainCount; + + + /* Main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPmtt); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoPmttHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Only Socket subtables are expected at this level */ + + if (Subtable->Type != ACPI_PMTT_TYPE_SOCKET) + { + AcpiOsPrintf ( + "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n", + Subtable->Type); + return; + } + + /* Dump the fixed-length portion of the subtable */ + + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoPmtt0); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Walk the memory controller subtables */ + + MemOffset = sizeof (ACPI_PMTT_SOCKET); + MemSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Subtable, + sizeof (ACPI_PMTT_SOCKET)); + + while (((Offset + MemOffset) < Table->Length) && + (MemOffset < Subtable->Length)) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, + Offset + MemOffset, MemSubtable, + MemSubtable->Length, AcpiDmTableInfoPmttHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Only memory controller subtables are expected at this level */ + + if (MemSubtable->Type != ACPI_PMTT_TYPE_CONTROLLER) + { + AcpiOsPrintf ( + "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n", + MemSubtable->Type); + return; + } + + /* Dump the fixed-length portion of the controller subtable */ + + Status = AcpiDmDumpTable (Length, + Offset + MemOffset, MemSubtable, + MemSubtable->Length, AcpiDmTableInfoPmtt1); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Walk the variable count of proximity domains */ + + DomainCount = ((ACPI_PMTT_CONTROLLER *) MemSubtable)->DomainCount; + DomainOffset = sizeof (ACPI_PMTT_CONTROLLER); + DomainArray = ACPI_ADD_PTR (ACPI_PMTT_DOMAIN, MemSubtable, + sizeof (ACPI_PMTT_CONTROLLER)); + + while (((Offset + MemOffset + DomainOffset) < Table->Length) && + ((MemOffset + DomainOffset) < Subtable->Length) && + DomainCount) + { + Status = AcpiDmDumpTable (Length, + Offset + MemOffset + DomainOffset, DomainArray, + sizeof (ACPI_PMTT_DOMAIN), AcpiDmTableInfoPmtt1a); + if (ACPI_FAILURE (Status)) + { + return; + } + + DomainOffset += sizeof (ACPI_PMTT_DOMAIN); + DomainArray++; + DomainCount--; + } + + if (DomainCount) + { + AcpiOsPrintf ( + "\n**** DomainCount exceeds subtable length\n\n"); + } + + /* Walk the physical component (DIMM) subtables */ + + DimmOffset = DomainOffset; + DimmSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, MemSubtable, + DomainOffset); + + while (((Offset + MemOffset + DimmOffset) < Table->Length) && + (DimmOffset < MemSubtable->Length)) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, + Offset + MemOffset + DimmOffset, DimmSubtable, + DimmSubtable->Length, AcpiDmTableInfoPmttHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Only DIMM subtables are expected at this level */ + + if (DimmSubtable->Type != ACPI_PMTT_TYPE_DIMM) + { + AcpiOsPrintf ( + "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n", + DimmSubtable->Type); + return; + } + + /* Dump the fixed-length DIMM subtable */ + + Status = AcpiDmDumpTable (Length, + Offset + MemOffset + DimmOffset, DimmSubtable, + DimmSubtable->Length, AcpiDmTableInfoPmtt2); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Point to next DIMM subtable */ + + DimmOffset += DimmSubtable->Length; + DimmSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, + DimmSubtable, DimmSubtable->Length); + } + + /* Point to next Controller subtable */ + + MemOffset += MemSubtable->Length; + MemSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, + MemSubtable, MemSubtable->Length); + } + + /* Point to next Socket subtable */ + + Offset += Subtable->Length; + Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, + Subtable, Subtable->Length); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpPptt + * + * PARAMETERS: Table - A PMTT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a PPTT. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpPptt ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_SUBTABLE_HEADER *Subtable; + ACPI_PPTT_PROCESSOR *PpttProcessor; + UINT8 Length; + UINT8 SubtableOffset; + UINT32 Offset = sizeof (ACPI_TABLE_FPDT); + ACPI_DMTABLE_INFO *InfoTable; + UINT32 i; + + + /* There is no main table (other than the standard ACPI header) */ + + /* Subtables */ + + Offset = sizeof (ACPI_TABLE_HEADER); + while (Offset < Table->Length) + { + AcpiOsPrintf ("\n"); + + /* Common subtable header */ + + Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset); + if (Subtable->Length < sizeof (ACPI_SUBTABLE_HEADER)) + { + AcpiOsPrintf ("Invalid subtable length\n"); + return; + } + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoPpttHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + switch (Subtable->Type) + { + case ACPI_PPTT_TYPE_PROCESSOR: + + InfoTable = AcpiDmTableInfoPptt0; + Length = sizeof (ACPI_PPTT_PROCESSOR); + break; + + case ACPI_PPTT_TYPE_CACHE: + + InfoTable = AcpiDmTableInfoPptt1; + Length = sizeof (ACPI_PPTT_CACHE); + break; + + case ACPI_PPTT_TYPE_ID: + + InfoTable = AcpiDmTableInfoPptt2; + Length = sizeof (ACPI_PPTT_ID); + break; + + default: + + AcpiOsPrintf ("\n**** Unknown PPTT subtable type 0x%X\n\n", + Subtable->Type); + + /* Attempt to continue */ + + goto NextSubtable; + } + + if (Subtable->Length < Length) + { + AcpiOsPrintf ("Invalid subtable length\n"); + return; + } + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + Subtable->Length, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + SubtableOffset = Length; + + switch (Subtable->Type) + { + case ACPI_PPTT_TYPE_PROCESSOR: + + PpttProcessor = ACPI_CAST_PTR (ACPI_PPTT_PROCESSOR, Subtable); + + /* Dump SMBIOS handles */ + + if ((UINT8)(Subtable->Length - SubtableOffset) < + (UINT8)(PpttProcessor->NumberOfPrivResources * 4)) + { + AcpiOsPrintf ("Invalid private resource number\n"); + return; + } + for (i = 0; i < PpttProcessor->NumberOfPrivResources; i++) + { + Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, + ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, SubtableOffset), + 4, AcpiDmTableInfoPptt0a); + SubtableOffset += 4; + } + break; + + default: + + break; + } + +NextSubtable: + /* Point to next subtable */ + + Offset += Subtable->Length; + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpS3pt + * + * PARAMETERS: Table - A S3PT table + * + * RETURN: Length of the table + * + * DESCRIPTION: Format the contents of a S3PT + * + ******************************************************************************/ + +UINT32 +AcpiDmDumpS3pt ( + ACPI_TABLE_HEADER *Tables) +{ + ACPI_STATUS Status; + UINT32 Offset = sizeof (ACPI_TABLE_S3PT); + ACPI_FPDT_HEADER *Subtable; + ACPI_DMTABLE_INFO *InfoTable; + ACPI_TABLE_S3PT *S3ptTable = ACPI_CAST_PTR (ACPI_TABLE_S3PT, Tables); + + + /* Main table */ + + Status = AcpiDmDumpTable (Offset, 0, S3ptTable, 0, AcpiDmTableInfoS3pt); + if (ACPI_FAILURE (Status)) + { + return 0; + } + + Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, S3ptTable, Offset); + while (Offset < S3ptTable->Length) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (S3ptTable->Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoS3ptHdr); + if (ACPI_FAILURE (Status)) + { + return 0; + } + + switch (Subtable->Type) + { + case ACPI_S3PT_TYPE_RESUME: + + InfoTable = AcpiDmTableInfoS3pt0; + break; + + case ACPI_S3PT_TYPE_SUSPEND: + + InfoTable = AcpiDmTableInfoS3pt1; + break; + + default: + + AcpiOsPrintf ("\n**** Unknown S3PT subtable type 0x%X\n", + Subtable->Type); + + /* Attempt to continue */ + + if (!Subtable->Length) + { + AcpiOsPrintf ("Invalid zero length subtable\n"); + return 0; + } + goto NextSubtable; + } + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (S3ptTable->Length, Offset, Subtable, + Subtable->Length, InfoTable); + if (ACPI_FAILURE (Status)) + { + return 0; + } + +NextSubtable: + /* Point to next subtable */ + + Offset += Subtable->Length; + Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Subtable, Subtable->Length); + } + + return (S3ptTable->Length); +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpSdev + * + * PARAMETERS: Table - A SDEV table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a SDEV. This is a variable-length + * table that contains variable strings and vendor data. + * + ******************************************************************************/ + +void +AcpiDmDumpSdev ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_SDEV_HEADER *Subtable; + ACPI_SDEV_PCIE *Pcie; + ACPI_SDEV_NAMESPACE *Namesp; + ACPI_DMTABLE_INFO *InfoTable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_SDEV); + UINT16 PathOffset; + UINT16 PathLength; + UINT16 VendorDataOffset; + UINT16 VendorDataLength; + + + /* Main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoSdev); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_SDEV_HEADER, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoSdevHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + switch (Subtable->Type) + { + case ACPI_SDEV_TYPE_NAMESPACE_DEVICE: + + InfoTable = AcpiDmTableInfoSdev0; + break; + + case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE: + + InfoTable = AcpiDmTableInfoSdev1; + break; + + default: + goto NextSubtable; + } + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + Subtable->Length, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + + switch (Subtable->Type) + { + case ACPI_SDEV_TYPE_NAMESPACE_DEVICE: + + /* Dump the PCIe device ID(s) */ + + Namesp = ACPI_CAST_PTR (ACPI_SDEV_NAMESPACE, Subtable); + PathOffset = Namesp->DeviceIdOffset; + PathLength = Namesp->DeviceIdLength; + + if (PathLength) + { + Status = AcpiDmDumpTable (Table->Length, 0, + ACPI_ADD_PTR (UINT8, Namesp, PathOffset), + PathLength, AcpiDmTableInfoSdev0a); + if (ACPI_FAILURE (Status)) + { + return; + } + } + + /* Dump the vendor-specific data */ + + VendorDataLength = + Namesp->VendorDataLength; + VendorDataOffset = + Namesp->DeviceIdOffset + Namesp->DeviceIdLength; + + if (VendorDataLength) + { + Status = AcpiDmDumpTable (Table->Length, 0, + ACPI_ADD_PTR (UINT8, Namesp, VendorDataOffset), + VendorDataLength, AcpiDmTableInfoSdev1b); + if (ACPI_FAILURE (Status)) + { + return; + } + } + break; + + case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE: + + /* PCI path substructures */ + + Pcie = ACPI_CAST_PTR (ACPI_SDEV_PCIE, Subtable); + PathOffset = Pcie->PathOffset; + PathLength = Pcie->PathLength; + + while (PathLength) + { + Status = AcpiDmDumpTable (Table->Length, + PathOffset + Offset, + ACPI_ADD_PTR (UINT8, Pcie, PathOffset), + sizeof (ACPI_SDEV_PCIE_PATH), AcpiDmTableInfoSdev1a); + if (ACPI_FAILURE (Status)) + { + return; + } + + PathOffset += sizeof (ACPI_SDEV_PCIE_PATH); + PathLength -= sizeof (ACPI_SDEV_PCIE_PATH); + } + + /* VendorData */ + + VendorDataLength = Pcie->VendorDataLength; + VendorDataOffset = Pcie->PathOffset + Pcie->PathLength; + + if (VendorDataLength) + { + Status = AcpiDmDumpTable (Table->Length, 0, + ACPI_ADD_PTR (UINT8, Pcie, VendorDataOffset), + VendorDataLength, AcpiDmTableInfoSdev1b); + } + break; + + default: + goto NextSubtable; + } + +NextSubtable: + /* Point to next subtable */ + + Offset += Subtable->Length; + Subtable = ACPI_ADD_PTR (ACPI_SDEV_HEADER, Subtable, + Subtable->Length); + } +} diff --git a/sys/contrib/dev/acpica/source/common/dmtbdump3.c b/sys/contrib/dev/acpica/source/common/dmtbdump3.c new file mode 100644 index 0000000000..3c1dea6c82 --- /dev/null +++ b/sys/contrib/dev/acpica/source/common/dmtbdump3.c @@ -0,0 +1,693 @@ +/****************************************************************************** + * + * Module Name: dmtbdump3 - Dump ACPI data tables that contain no AML code + * + *****************************************************************************/ + +/****************************************************************************** + * + * 1. Copyright Notice + * + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. + * All rights reserved. + * + * 2. License + * + * 2.1. This is your license from Intel Corp. under its intellectual property + * rights. You may have additional license terms from the party that provided + * you this software, covering your right to use that party's intellectual + * property rights. + * + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a + * copy of the source code appearing in this file ("Covered Code") an + * irrevocable, perpetual, worldwide license under Intel's copyrights in the + * base code distributed originally by Intel ("Original Intel Code") to copy, + * make derivatives, distribute, use and display any portion of the Covered + * Code in any form, with the right to sublicense such rights; and + * + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent + * license (with the right to sublicense), under only those claims of Intel + * patents that are infringed by the Original Intel Code, to make, use, sell, + * offer to sell, and import the Covered Code and derivative works thereof + * solely to the minimum extent necessary to exercise the above copyright + * license, and in no event shall the patent license extend to any additions + * to or modifications of the Original Intel Code. No other license or right + * is granted directly or by implication, estoppel or otherwise; + * + * The above copyright and patent license is granted only if the following + * conditions are met: + * + * 3. Conditions + * + * 3.1. Redistribution of Source with Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification with rights to further distribute source must include + * the above Copyright Notice, the above License, this list of Conditions, + * and the following Disclaimer and Export Compliance provision. In addition, + * Licensee must cause all Covered Code to which Licensee contributes to + * contain a file documenting the changes Licensee made to create that Covered + * Code and the date of any change. Licensee must include in that file the + * documentation of any changes made by any predecessor Licensee. Licensee + * must include a prominent statement that the modification is derived, + * directly or indirectly, from Original Intel Code. + * + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification without rights to further distribute source must + * include the following Disclaimer and Export Compliance provision in the + * documentation and/or other materials provided with distribution. In + * addition, Licensee may not authorize further sublicense of source of any + * portion of the Covered Code, and must include terms to the effect that the + * license from Licensee to its licensee is limited to the intellectual + * property embodied in the software Licensee provides to its licensee, and + * not to intellectual property embodied in modifications its licensee may + * make. + * + * 3.3. Redistribution of Executable. Redistribution in executable form of any + * substantial portion of the Covered Code or modification must reproduce the + * above Copyright Notice, and the following Disclaimer and Export Compliance + * provision in the documentation and/or other materials provided with the + * distribution. + * + * 3.4. Intel retains all right, title, and interest in and to the Original + * Intel Code. + * + * 3.5. Neither the name Intel nor any other trademark owned or controlled by + * Intel shall be used in advertising or otherwise to promote the sale, use or + * other dealings in products derived from or relating to the Covered Code + * without prior written authorization from Intel. + * + * 4. Disclaimer and Export Compliance + * + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A + * PARTICULAR PURPOSE. + * + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY + * LIMITED REMEDY. + * + * 4.3. Licensee shall not export, either directly or indirectly, any of this + * software or system incorporating such software without first obtaining any + * required license or other approval from the U. S. Department of Commerce or + * any other agency or department of the United States Government. In the + * event Licensee exports any such software from the United States or + * re-exports any such software from a foreign destination, Licensee shall + * ensure that the distribution and export/re-export of the software is in + * compliance with all laws, regulations, orders, or other restrictions of the + * U.S. Export Administration Regulations. Licensee agrees that neither it nor + * any of its subsidiaries will export/re-export any technical data, process, + * software, or service, directly or indirectly, to any country for which the + * United States government or any agency thereof requires an export license, + * other governmental approval, or letter of assurance, without first obtaining + * such license, approval or letter. + * + ***************************************************************************** + * + * Alternatively, you may choose to be licensed under the terms of the + * following license: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Alternatively, you may choose to be licensed under the terms of the + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. + * + *****************************************************************************/ + +#include "acpi.h" +#include "accommon.h" +#include "acdisasm.h" +#include "actables.h" + +/* This module used for application-level code only */ + +#define _COMPONENT ACPI_CA_DISASSEMBLER + ACPI_MODULE_NAME ("dmtbdump3") + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpSlic + * + * PARAMETERS: Table - A SLIC table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a SLIC + * + ******************************************************************************/ + +void +AcpiDmDumpSlic ( + ACPI_TABLE_HEADER *Table) +{ + + (void) AcpiDmDumpTable (Table->Length, sizeof (ACPI_TABLE_HEADER), Table, + Table->Length - sizeof (*Table), AcpiDmTableInfoSlic); +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpSlit + * + * PARAMETERS: Table - An SLIT + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a SLIT + * + ******************************************************************************/ + +void +AcpiDmDumpSlit ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + UINT32 Offset; + UINT8 *Row; + UINT32 Localities; + UINT32 i; + UINT32 j; + + + /* Main table */ + + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSlit); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Display the Locality NxN Matrix */ + + Localities = (UINT32) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->LocalityCount; + Offset = ACPI_OFFSET (ACPI_TABLE_SLIT, Entry[0]); + Row = (UINT8 *) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->Entry; + + for (i = 0; i < Localities; i++) + { + /* Display one row of the matrix */ + + AcpiDmLineHeader2 (Offset, Localities, "Locality", i); + for (j = 0; j < Localities; j++) + { + /* Check for beyond EOT */ + + if (Offset >= Table->Length) + { + AcpiOsPrintf ( + "\n**** Not enough room in table for all localities\n"); + return; + } + + AcpiOsPrintf ("%2.2X", Row[j]); + Offset++; + + /* Display up to 16 bytes per output row */ + + if ((j+1) < Localities) + { + AcpiOsPrintf (" "); + + if (j && (((j+1) % 16) == 0)) + { + AcpiOsPrintf ("\\\n"); /* With line continuation char */ + AcpiDmLineHeader (Offset, 0, NULL); + } + } + } + + /* Point to next row */ + + AcpiOsPrintf ("\n"); + Row += Localities; + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpSrat + * + * PARAMETERS: Table - A SRAT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a SRAT + * + ******************************************************************************/ + +void +AcpiDmDumpSrat ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + UINT32 Offset = sizeof (ACPI_TABLE_SRAT); + ACPI_SUBTABLE_HEADER *Subtable; + ACPI_DMTABLE_INFO *InfoTable; + + + /* Main table */ + + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSrat); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoSratHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + switch (Subtable->Type) + { + case ACPI_SRAT_TYPE_CPU_AFFINITY: + + InfoTable = AcpiDmTableInfoSrat0; + break; + + case ACPI_SRAT_TYPE_MEMORY_AFFINITY: + + InfoTable = AcpiDmTableInfoSrat1; + break; + + case ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY: + + InfoTable = AcpiDmTableInfoSrat2; + break; + + case ACPI_SRAT_TYPE_GICC_AFFINITY: + + InfoTable = AcpiDmTableInfoSrat3; + break; + + case ACPI_SRAT_TYPE_GIC_ITS_AFFINITY: + + InfoTable = AcpiDmTableInfoSrat4; + break; + + default: + AcpiOsPrintf ("\n**** Unknown SRAT subtable type 0x%X\n", + Subtable->Type); + + /* Attempt to continue */ + + if (!Subtable->Length) + { + AcpiOsPrintf ("Invalid zero length subtable\n"); + return; + } + goto NextSubtable; + } + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + Subtable->Length, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + +NextSubtable: + /* Point to next subtable */ + + Offset += Subtable->Length; + Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, + Subtable->Length); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpStao + * + * PARAMETERS: Table - A STAO table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a STAO. This is a variable-length + * table that contains an open-ended number of ASCII strings + * at the end of the table. + * + ******************************************************************************/ + +void +AcpiDmDumpStao ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + char *Namepath; + UINT32 Length = Table->Length; + UINT32 StringLength; + UINT32 Offset = sizeof (ACPI_TABLE_STAO); + + + /* Main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoStao); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* The rest of the table consists of Namepath strings */ + + while (Offset < Table->Length) + { + Namepath = ACPI_ADD_PTR (char, Table, Offset); + StringLength = strlen (Namepath) + 1; + + AcpiDmLineHeader (Offset, StringLength, "Namestring"); + AcpiOsPrintf ("\"%s\"\n", Namepath); + + /* Point to next namepath */ + + Offset += StringLength; + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpTcpa + * + * PARAMETERS: Table - A TCPA table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a TCPA. + * + * NOTE: There are two versions of the table with the same signature: + * the client version and the server version. The common + * PlatformClass field is used to differentiate the two types of + * tables. + * + ******************************************************************************/ + +void +AcpiDmDumpTcpa ( + ACPI_TABLE_HEADER *Table) +{ + UINT32 Offset = sizeof (ACPI_TABLE_TCPA_HDR); + ACPI_TABLE_TCPA_HDR *CommonHeader = ACPI_CAST_PTR ( + ACPI_TABLE_TCPA_HDR, Table); + ACPI_TABLE_TCPA_HDR *Subtable = ACPI_ADD_PTR ( + ACPI_TABLE_TCPA_HDR, Table, Offset); + ACPI_STATUS Status; + + + /* Main table */ + + Status = AcpiDmDumpTable (Table->Length, 0, Table, + 0, AcpiDmTableInfoTcpaHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* + * Examine the PlatformClass field to determine the table type. + * Either a client or server table. Only one. + */ + switch (CommonHeader->PlatformClass) + { + case ACPI_TCPA_CLIENT_TABLE: + + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + Table->Length - Offset, AcpiDmTableInfoTcpaClient); + break; + + case ACPI_TCPA_SERVER_TABLE: + + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + Table->Length - Offset, AcpiDmTableInfoTcpaServer); + break; + + default: + + AcpiOsPrintf ("\n**** Unknown TCPA Platform Class 0x%X\n", + CommonHeader->PlatformClass); + Status = AE_ERROR; + break; + } + + if (ACPI_FAILURE (Status)) + { + AcpiOsPrintf ("\n**** Cannot disassemble TCPA table\n"); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpTpm2 + * + * PARAMETERS: Table - A TPM2 table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a TPM2. + * + ******************************************************************************/ + +void +AcpiDmDumpTpm2 ( + ACPI_TABLE_HEADER *Table) +{ + UINT32 Offset = sizeof (ACPI_TABLE_TPM2); + ACPI_TABLE_TPM2 *CommonHeader = ACPI_CAST_PTR (ACPI_TABLE_TPM2, Table); + ACPI_TPM2_TRAILER *Subtable = ACPI_ADD_PTR (ACPI_TPM2_TRAILER, Table, Offset); + ACPI_TPM2_ARM_SMC *ArmSubtable; + ACPI_STATUS Status; + + + /* Main table */ + + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoTpm2); + if (ACPI_FAILURE (Status)) + { + return; + } + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + Table->Length - Offset, AcpiDmTableInfoTpm2a); + if (ACPI_FAILURE (Status)) + { + return; + } + + switch (CommonHeader->StartMethod) + { + case ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC: + + ArmSubtable = ACPI_ADD_PTR (ACPI_TPM2_ARM_SMC, Subtable, + sizeof (ACPI_TPM2_TRAILER)); + Offset += sizeof (ACPI_TPM2_TRAILER); + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, ArmSubtable, + Table->Length - Offset, AcpiDmTableInfoTpm211); + break; + + default: + break; + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpVrtc + * + * PARAMETERS: Table - A VRTC table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a VRTC + * + ******************************************************************************/ + +void +AcpiDmDumpVrtc ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + UINT32 Offset = sizeof (ACPI_TABLE_VRTC); + ACPI_VRTC_ENTRY *Subtable; + + + /* Main table */ + + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoVrtc); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + sizeof (ACPI_VRTC_ENTRY), AcpiDmTableInfoVrtc0); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Point to next subtable */ + + Offset += sizeof (ACPI_VRTC_ENTRY); + Subtable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, Subtable, + sizeof (ACPI_VRTC_ENTRY)); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpWdat + * + * PARAMETERS: Table - A WDAT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a WDAT + * + ******************************************************************************/ + +void +AcpiDmDumpWdat ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + UINT32 Offset = sizeof (ACPI_TABLE_WDAT); + ACPI_WDAT_ENTRY *Subtable; + + + /* Main table */ + + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoWdat); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + sizeof (ACPI_WDAT_ENTRY), AcpiDmTableInfoWdat0); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Point to next subtable */ + + Offset += sizeof (ACPI_WDAT_ENTRY); + Subtable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Subtable, + sizeof (ACPI_WDAT_ENTRY)); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpWpbt + * + * PARAMETERS: Table - A WPBT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a WPBT. This table type consists + * of an open-ended arguments buffer at the end of the table. + * + ******************************************************************************/ + +void +AcpiDmDumpWpbt ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_TABLE_WPBT *Subtable; + UINT32 Length = Table->Length; + UINT16 ArgumentsLength; + + + /* Dump the main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoWpbt); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Extract the arguments buffer length from the main table */ + + Subtable = ACPI_CAST_PTR (ACPI_TABLE_WPBT, Table); + ArgumentsLength = Subtable->ArgumentsLength; + + /* Dump the arguments buffer */ + + (void) AcpiDmDumpTable (Table->Length, 0, Table, ArgumentsLength, + AcpiDmTableInfoWpbt0); +} diff --git a/sys/contrib/dev/acpica/source/common/dmtbinfo.c b/sys/contrib/dev/acpica/source/common/dmtbinfo.c dissimilarity index 86% index 5180b4db07..2e1c54f84a 100644 --- a/sys/contrib/dev/acpica/source/common/dmtbinfo.c +++ b/sys/contrib/dev/acpica/source/common/dmtbinfo.c @@ -1,3446 +1,426 @@ -/****************************************************************************** - * - * Module Name: dmtbinfo - Table info for non-AML tables - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - ***************************************************************************** - * - * Alternatively, you may choose to be licensed under the terms of the - * following license: - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions, and the following disclaimer, - * without modification. - * 2. Redistributions in binary form must reproduce at minimum a disclaimer - * substantially similar to the "NO WARRANTY" disclaimer below - * ("Disclaimer") and any redistribution must be conditioned upon - * including a substantially similar Disclaimer requirement for further - * binary redistribution. - * 3. Neither the names of the above-listed copyright holders nor the names - * of any contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Alternatively, you may choose to be licensed under the terms of the - * GNU General Public License ("GPL") version 2 as published by the Free - * Software Foundation. - * - *****************************************************************************/ - -#include "acpi.h" -#include "accommon.h" -#include "acdisasm.h" - -/* This module used for application-level code only */ - -#define _COMPONENT ACPI_CA_DISASSEMBLER - ACPI_MODULE_NAME ("dmtbinfo") - -/* - * How to add a new table: - * - * - Add the C table definition to the actbl1.h or actbl2.h header. - * - Add ACPI_xxxx_OFFSET macro(s) for the table (and subtables) to list below. - * - Define the table in this file (for the disassembler). If any - * new data types are required (ACPI_DMT_*), see below. - * - Add an external declaration for the new table definition (AcpiDmTableInfo*) - * in acdisam.h - * - Add new table definition to the dispatch table in dmtable.c (AcpiDmTableData) - * If a simple table (with no subtables), no disassembly code is needed. - * Otherwise, create the AcpiDmDump* function for to disassemble the table - * and add it to the dmtbdump.c file. - * - Add an external declaration for the new AcpiDmDump* function in acdisasm.h - * - Add the new AcpiDmDump* function to the dispatch table in dmtable.c - * - Create a template for the new table - * - Add data table compiler support - * - * How to add a new data type (ACPI_DMT_*): - * - * - Add new type at the end of the ACPI_DMT list in acdisasm.h - * - Add length and implementation cases in dmtable.c (disassembler) - * - Add type and length cases in dtutils.c (DT compiler) - */ - -/* - * Macros used to generate offsets to specific table fields - */ -#define ACPI_FACS_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_FACS,f) -#define ACPI_GAS_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GENERIC_ADDRESS,f) -#define ACPI_HDR_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_HEADER,f) -#define ACPI_RSDP_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_RSDP,f) -#define ACPI_BERT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_BERT,f) -#define ACPI_BGRT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_BGRT,f) -#define ACPI_BOOT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_BOOT,f) -#define ACPI_CPEP_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_CPEP,f) -#define ACPI_DBG2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_DBG2,f) -#define ACPI_DBGP_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_DBGP,f) -#define ACPI_DMAR_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_DMAR,f) -#define ACPI_DRTM_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_DRTM,f) -#define ACPI_ECDT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_ECDT,f) -#define ACPI_EINJ_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_EINJ,f) -#define ACPI_ERST_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_ERST,f) -#define ACPI_GTDT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_GTDT,f) -#define ACPI_HEST_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_HEST,f) -#define ACPI_HPET_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_HPET,f) -#define ACPI_HMAT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_HMAT,f) -#define ACPI_IORT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_IORT,f) -#define ACPI_IVRS_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_IVRS,f) -#define ACPI_MADT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_MADT,f) -#define ACPI_MCFG_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_MCFG,f) -#define ACPI_MCHI_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_MCHI,f) -#define ACPI_MPST_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_MPST,f) -#define ACPI_MSCT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_MSCT,f) -#define ACPI_NFIT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_NFIT,f) -#define ACPI_PCCT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_PCCT,f) -#define ACPI_PMTT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_PMTT,f) -#define ACPI_RASF_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_RASF,f) -#define ACPI_S3PT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_S3PT,f) -#define ACPI_SBST_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_SBST,f) -#define ACPI_SDEI_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_SDEI,f) -#define ACPI_SLIT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_SLIT,f) -#define ACPI_SPCR_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_SPCR,f) -#define ACPI_SPMI_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_SPMI,f) -#define ACPI_SRAT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_SRAT,f) -#define ACPI_STAO_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_STAO,f) -#define ACPI_TCPA_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_HDR,f) -#define ACPI_TPM2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TPM2,f) -#define ACPI_UEFI_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_UEFI,f) -#define ACPI_WAET_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WAET,f) -#define ACPI_WDAT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WDAT,f) -#define ACPI_WDDT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WDDT,f) -#define ACPI_WDRT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WDRT,f) -#define ACPI_WPBT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WPBT,f) -#define ACPI_WSMT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WSMT,f) -#define ACPI_XENV_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_XENV,f) - -/* Subtables */ - -#define ACPI_ASF0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_INFO,f) -#define ACPI_ASF1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_ALERT,f) -#define ACPI_ASF1a_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_ALERT_DATA,f) -#define ACPI_ASF2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_REMOTE,f) -#define ACPI_ASF2a_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_CONTROL_DATA,f) -#define ACPI_ASF3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_RMCP,f) -#define ACPI_ASF4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_ADDRESS,f) -#define ACPI_CPEP0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CPEP_POLLING,f) -#define ACPI_CSRT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CSRT_GROUP,f) -#define ACPI_CSRT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CSRT_SHARED_INFO,f) -#define ACPI_CSRT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CSRT_DESCRIPTOR,f) -#define ACPI_DBG20_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DBG2_DEVICE,f) -#define ACPI_DMARS_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_DEVICE_SCOPE,f) -#define ACPI_DMAR0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_HARDWARE_UNIT,f) -#define ACPI_DMAR1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_RESERVED_MEMORY,f) -#define ACPI_DMAR2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_ATSR,f) -#define ACPI_DMAR3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_RHSA,f) -#define ACPI_DMAR4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_ANDD,f) -#define ACPI_DRTM0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DRTM_VTABLE_LIST,f) -#define ACPI_DRTM1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST,f) -#define ACPI_DRTM1a_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DRTM_RESOURCE,f) -#define ACPI_DRTM2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DRTM_DPS_ID,f) -#define ACPI_EINJ0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_WHEA_HEADER,f) -#define ACPI_ERST0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_WHEA_HEADER,f) -#define ACPI_FPDTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_FPDT_HEADER,f) -#define ACPI_FPDT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_FPDT_BOOT_POINTER,f) -#define ACPI_FPDT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_FPDT_S3PT_POINTER,f) -#define ACPI_GTDT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GTDT_TIMER_BLOCK,f) -#define ACPI_GTDT0a_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GTDT_TIMER_ENTRY,f) -#define ACPI_GTDT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GTDT_WATCHDOG,f) -#define ACPI_GTDTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GTDT_HEADER,f) -#define ACPI_HEST0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_IA_MACHINE_CHECK,f) -#define ACPI_HEST1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_IA_CORRECTED,f) -#define ACPI_HEST2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_IA_NMI,f) -#define ACPI_HEST6_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_AER_ROOT,f) -#define ACPI_HEST7_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_AER,f) -#define ACPI_HEST8_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_AER_BRIDGE,f) -#define ACPI_HEST9_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_GENERIC,f) -#define ACPI_HEST10_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_GENERIC_V2,f) -#define ACPI_HEST11_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_IA_DEFERRED_CHECK,f) -#define ACPI_HESTN_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_NOTIFY,f) -#define ACPI_HESTB_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_IA_ERROR_BANK,f) -#define ACPI_HMAT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HMAT_ADDRESS_RANGE,f) -#define ACPI_HMAT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HMAT_LOCALITY,f) -#define ACPI_HMAT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HMAT_CACHE,f) -#define ACPI_HMATH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HMAT_STRUCTURE,f) -#define ACPI_IORT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_ITS_GROUP,f) -#define ACPI_IORT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_NAMED_COMPONENT,f) -#define ACPI_IORT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_ROOT_COMPLEX,f) -#define ACPI_IORT3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_SMMU,f) -#define ACPI_IORT3A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_SMMU_GSI,f) -#define ACPI_IORT4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_SMMU_V3,f) -#define ACPI_IORTA_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_MEMORY_ACCESS,f) -#define ACPI_IORTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_NODE,f) -#define ACPI_IORTM_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_ID_MAPPING,f) -#define ACPI_IVRSH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_HEADER,f) -#define ACPI_IVRS0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_HARDWARE,f) -#define ACPI_IVRS1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_MEMORY,f) -#define ACPI_IVRSD_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_DE_HEADER,f) -#define ACPI_IVRS8A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_DEVICE8A,f) -#define ACPI_IVRS8B_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_DEVICE8B,f) -#define ACPI_IVRS8C_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_DEVICE8C,f) -#define ACPI_LPITH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_LPIT_HEADER,f) -#define ACPI_LPIT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_LPIT_NATIVE,f) -#define ACPI_MADT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_APIC,f) -#define ACPI_MADT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_IO_APIC,f) -#define ACPI_MADT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_INTERRUPT_OVERRIDE,f) -#define ACPI_MADT3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_NMI_SOURCE,f) -#define ACPI_MADT4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_APIC_NMI,f) -#define ACPI_MADT5_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_APIC_OVERRIDE,f) -#define ACPI_MADT6_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_IO_SAPIC,f) -#define ACPI_MADT7_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_SAPIC,f) -#define ACPI_MADT8_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_INTERRUPT_SOURCE,f) -#define ACPI_MADT9_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_X2APIC,f) -#define ACPI_MADT10_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_X2APIC_NMI,f) -#define ACPI_MADT11_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_INTERRUPT,f) -#define ACPI_MADT12_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_DISTRIBUTOR,f) -#define ACPI_MADT13_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_MSI_FRAME,f) -#define ACPI_MADT14_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_REDISTRIBUTOR,f) -#define ACPI_MADT15_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_TRANSLATOR,f) -#define ACPI_MADTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SUBTABLE_HEADER,f) -#define ACPI_MCFG0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MCFG_ALLOCATION,f) -#define ACPI_MPST0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MPST_POWER_NODE,f) -#define ACPI_MPST0A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MPST_POWER_STATE,f) -#define ACPI_MPST0B_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MPST_COMPONENT,f) -#define ACPI_MPST1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MPST_DATA_HDR,f) -#define ACPI_MPST2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MPST_POWER_DATA,f) -#define ACPI_MSCT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MSCT_PROXIMITY,f) -#define ACPI_MTMR0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MTMR_ENTRY,f) -#define ACPI_NFITH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_HEADER,f) -#define ACPI_NFIT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_SYSTEM_ADDRESS,f) -#define ACPI_NFIT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_MEMORY_MAP,f) -#define ACPI_NFIT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_INTERLEAVE,f) -#define ACPI_NFIT3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_SMBIOS,f) -#define ACPI_NFIT4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_CONTROL_REGION,f) -#define ACPI_NFIT5_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_DATA_REGION,f) -#define ACPI_NFIT6_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_FLUSH_ADDRESS,f) -#define ACPI_PCCT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_SUBSPACE,f) -#define ACPI_PCCT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_HW_REDUCED,f) -#define ACPI_PCCT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_HW_REDUCED_TYPE2,f) -#define ACPI_PCCT3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_EXT_PCC_MASTER,f) -#define ACPI_PCCT4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_EXT_PCC_SLAVE,f) -#define ACPI_PMTT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_SOCKET,f) -#define ACPI_PMTT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_CONTROLLER,f) -#define ACPI_PMTT1A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_DOMAIN,f) -#define ACPI_PMTT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_PHYSICAL_COMPONENT,f) -#define ACPI_PMTTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_HEADER,f) -#define ACPI_PPTTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SUBTABLE_HEADER,f) -#define ACPI_PPTT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PPTT_PROCESSOR,f) -#define ACPI_PPTT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PPTT_CACHE,f) -#define ACPI_PPTT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PPTT_ID,f) -#define ACPI_S3PTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_FPDT_HEADER,f) -#define ACPI_S3PT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_S3PT_RESUME,f) -#define ACPI_S3PT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_S3PT_SUSPEND,f) -#define ACPI_SLIC_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_SLIC,f) -#define ACPI_SRATH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SUBTABLE_HEADER,f) -#define ACPI_SRAT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SRAT_CPU_AFFINITY,f) -#define ACPI_SRAT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SRAT_MEM_AFFINITY,f) -#define ACPI_SRAT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SRAT_X2APIC_CPU_AFFINITY,f) -#define ACPI_SRAT3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SRAT_GICC_AFFINITY,f) -#define ACPI_SRAT4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SRAT_GIC_ITS_AFFINITY,f) -#define ACPI_TCPA_CLIENT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_CLIENT,f) -#define ACPI_TCPA_SERVER_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_SERVER,f) -#define ACPI_VRTC0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_VRTC_ENTRY,f) -#define ACPI_WDAT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_WDAT_ENTRY,f) - -/* - * Simplify access to flag fields by breaking them up into bytes - */ -#define ACPI_FLAG_OFFSET(d,f,o) (UINT16) (ACPI_OFFSET (d,f) + o) - -/* Flags */ - -#define ACPI_BGRT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_BGRT,f,o) -#define ACPI_DRTM_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_DRTM,f,o) -#define ACPI_DRTM1a_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_DRTM_RESOURCE,f,o) -#define ACPI_FADT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_FADT,f,o) -#define ACPI_FACS_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_FACS,f,o) -#define ACPI_HPET_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_HPET,f,o) -#define ACPI_PPTT0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PPTT_PROCESSOR,f,o) -#define ACPI_PPTT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PPTT_CACHE,f,o) -#define ACPI_SRAT0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_SRAT_CPU_AFFINITY,f,o) -#define ACPI_SRAT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_SRAT_MEM_AFFINITY,f,o) -#define ACPI_SRAT2_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_SRAT_X2APIC_CPU_AFFINITY,f,o) -#define ACPI_SRAT3_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_SRAT_GICC_AFFINITY,f,o) -#define ACPI_GTDT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_GTDT,f,o) -#define ACPI_GTDT0a_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_GTDT_TIMER_ENTRY,f,o) -#define ACPI_GTDT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_GTDT_WATCHDOG,f,o) -#define ACPI_HMAT0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_HMAT_ADDRESS_RANGE,f,o) -#define ACPI_HMAT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_HMAT_LOCALITY,f,o) -#define ACPI_HMAT2_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_HMAT_CACHE,f,o) -#define ACPI_IORT3_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_SMMU,f,o) -#define ACPI_IORT3a_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_SMMU_GSI,f,o) -#define ACPI_IORT4_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_SMMU_V3,f,o) -#define ACPI_IORTA_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_MEMORY_ACCESS,f,o) -#define ACPI_IORTM_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_ID_MAPPING,f,o) -#define ACPI_LPITH_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_LPIT_HEADER,f,o) -#define ACPI_MADT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_MADT,f,o) -#define ACPI_MADT0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_APIC,f,o) -#define ACPI_MADT2_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_INTERRUPT_OVERRIDE,f,o) -#define ACPI_MADT3_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_NMI_SOURCE,f,o) -#define ACPI_MADT4_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_APIC_NMI,f,o) -#define ACPI_MADT7_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_SAPIC,f,o) -#define ACPI_MADT8_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_INTERRUPT_SOURCE,f,o) -#define ACPI_MADT9_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_X2APIC,f,o) -#define ACPI_MADT10_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_X2APIC_NMI,f,o) -#define ACPI_MADT11_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_GENERIC_INTERRUPT,f,o) -#define ACPI_MADT13_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_GENERIC_MSI_FRAME,f,o) -#define ACPI_MPST0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MPST_POWER_NODE,f,o) -#define ACPI_MPST2_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MPST_POWER_DATA,f,o) -#define ACPI_NFIT0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_NFIT_SYSTEM_ADDRESS,f,o) -#define ACPI_NFIT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_NFIT_MEMORY_MAP,f,o) -#define ACPI_NFIT4_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_NFIT_CONTROL_REGION,f,o) -#define ACPI_PCCT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_PCCT,f,o) -#define ACPI_PCCT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PCCT_HW_REDUCED,f,o) -#define ACPI_PCCT2_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PCCT_HW_REDUCED_TYPE2,f,o) -#define ACPI_PCCT3_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PCCT_EXT_PCC_MASTER,f,o) -#define ACPI_PCCT4_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PCCT_EXT_PCC_SLAVE,f,o) -#define ACPI_PMTTH_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PMTT_HEADER,f,o) -#define ACPI_WDDT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_WDDT,f,o) -#define ACPI_WSMT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_WSMT,f,o) -#define ACPI_EINJ0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_WHEA_HEADER,f,o) -#define ACPI_ERST0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_WHEA_HEADER,f,o) -#define ACPI_HEST0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_HEST_IA_MACHINE_CHECK,f,o) -#define ACPI_HEST1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_HEST_IA_CORRECTED,f,o) -#define ACPI_HEST6_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_HEST_AER_ROOT,f,o) -#define ACPI_HEST11_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_HEST_IA_DEFERRED_CHECK,f,o) - -/* - * Required terminator for all tables below - */ -#define ACPI_DMT_TERMINATOR {ACPI_DMT_EXIT, 0, NULL, 0} -#define ACPI_DMT_NEW_LINE {ACPI_DMT_EXTRA_TEXT, 0, "\n", 0} - - -/* - * ACPI Table Information, used to dump formatted ACPI tables - * - * Each entry is of the form: - */ - -/******************************************************************************* - * - * Common ACPI table header - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHeader[] = -{ - {ACPI_DMT_SIG, ACPI_HDR_OFFSET (Signature[0]), "Signature", 0}, - {ACPI_DMT_UINT32, ACPI_HDR_OFFSET (Length), "Table Length", DT_LENGTH}, - {ACPI_DMT_UINT8, ACPI_HDR_OFFSET (Revision), "Revision", 0}, - {ACPI_DMT_CHKSUM, ACPI_HDR_OFFSET (Checksum), "Checksum", 0}, - {ACPI_DMT_NAME6, ACPI_HDR_OFFSET (OemId[0]), "Oem ID", 0}, - {ACPI_DMT_NAME8, ACPI_HDR_OFFSET (OemTableId[0]), "Oem Table ID", 0}, - {ACPI_DMT_UINT32, ACPI_HDR_OFFSET (OemRevision), "Oem Revision", 0}, - {ACPI_DMT_NAME4, ACPI_HDR_OFFSET (AslCompilerId[0]), "Asl Compiler ID", 0}, - {ACPI_DMT_UINT32, ACPI_HDR_OFFSET (AslCompilerRevision), "Asl Compiler Revision", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * GAS - Generic Address Structure - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoGas[] = -{ - {ACPI_DMT_SPACEID, ACPI_GAS_OFFSET (SpaceId), "Space ID", 0}, - {ACPI_DMT_UINT8, ACPI_GAS_OFFSET (BitWidth), "Bit Width", 0}, - {ACPI_DMT_UINT8, ACPI_GAS_OFFSET (BitOffset), "Bit Offset", 0}, - {ACPI_DMT_ACCWIDTH, ACPI_GAS_OFFSET (AccessWidth), "Encoded Access Width", 0}, - {ACPI_DMT_UINT64, ACPI_GAS_OFFSET (Address), "Address", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * RSDP - Root System Description Pointer (Signature is "RSD PTR ") - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoRsdp1[] = -{ - {ACPI_DMT_NAME8, ACPI_RSDP_OFFSET (Signature[0]), "Signature", 0}, - {ACPI_DMT_UINT8, ACPI_RSDP_OFFSET (Checksum), "Checksum", 0}, - {ACPI_DMT_NAME6, ACPI_RSDP_OFFSET (OemId[0]), "Oem ID", 0}, - {ACPI_DMT_UINT8, ACPI_RSDP_OFFSET (Revision), "Revision", 0}, - {ACPI_DMT_UINT32, ACPI_RSDP_OFFSET (RsdtPhysicalAddress), "RSDT Address", 0}, - ACPI_DMT_TERMINATOR -}; - -/* ACPI 2.0+ Extensions */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoRsdp2[] = -{ - {ACPI_DMT_UINT32, ACPI_RSDP_OFFSET (Length), "Length", DT_LENGTH}, - {ACPI_DMT_UINT64, ACPI_RSDP_OFFSET (XsdtPhysicalAddress), "XSDT Address", 0}, - {ACPI_DMT_UINT8, ACPI_RSDP_OFFSET (ExtendedChecksum), "Extended Checksum", 0}, - {ACPI_DMT_UINT24, ACPI_RSDP_OFFSET (Reserved[0]), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * FACS - Firmware ACPI Control Structure - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoFacs[] = -{ - {ACPI_DMT_NAME4, ACPI_FACS_OFFSET (Signature[0]), "Signature", 0}, - {ACPI_DMT_UINT32, ACPI_FACS_OFFSET (Length), "Length", DT_LENGTH}, - {ACPI_DMT_UINT32, ACPI_FACS_OFFSET (HardwareSignature), "Hardware Signature", 0}, - {ACPI_DMT_UINT32, ACPI_FACS_OFFSET (FirmwareWakingVector), "32 Firmware Waking Vector", 0}, - {ACPI_DMT_UINT32, ACPI_FACS_OFFSET (GlobalLock), "Global Lock", 0}, - {ACPI_DMT_UINT32, ACPI_FACS_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_FACS_FLAG_OFFSET (Flags,0), "S4BIOS Support Present", 0}, - {ACPI_DMT_FLAG1, ACPI_FACS_FLAG_OFFSET (Flags,0), "64-bit Wake Supported (V2)", 0}, - {ACPI_DMT_UINT64, ACPI_FACS_OFFSET (XFirmwareWakingVector), "64 Firmware Waking Vector", 0}, - {ACPI_DMT_UINT8, ACPI_FACS_OFFSET (Version), "Version", 0}, - {ACPI_DMT_UINT24, ACPI_FACS_OFFSET (Reserved[0]), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_FACS_OFFSET (OspmFlags), "OspmFlags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_FACS_FLAG_OFFSET (OspmFlags,0), "64-bit Wake Env Required (V2)", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * FADT - Fixed ACPI Description Table (Signature is FACP) - * - ******************************************************************************/ - -/* ACPI 1.0 FADT (Version 1) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoFadt1[] = -{ - {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Facs), "FACS Address", 0}, - {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Dsdt), "DSDT Address", DT_NON_ZERO}, - {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (Model), "Model", 0}, - {ACPI_DMT_FADTPM, ACPI_FADT_OFFSET (PreferredProfile), "PM Profile", 0}, - {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (SciInterrupt), "SCI Interrupt", 0}, - {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (SmiCommand), "SMI Command Port", 0}, - {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (AcpiEnable), "ACPI Enable Value", 0}, - {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (AcpiDisable), "ACPI Disable Value", 0}, - {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (S4BiosRequest), "S4BIOS Command", 0}, - {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (PstateControl), "P-State Control", 0}, - {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Pm1aEventBlock), "PM1A Event Block Address", 0}, - {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Pm1bEventBlock), "PM1B Event Block Address", 0}, - {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Pm1aControlBlock), "PM1A Control Block Address", 0}, - {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Pm1bControlBlock), "PM1B Control Block Address", 0}, - {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Pm2ControlBlock), "PM2 Control Block Address", 0}, - {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (PmTimerBlock), "PM Timer Block Address", 0}, - {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Gpe0Block), "GPE0 Block Address", 0}, - {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Gpe1Block), "GPE1 Block Address", 0}, - {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (Pm1EventLength), "PM1 Event Block Length", 0}, - {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (Pm1ControlLength), "PM1 Control Block Length", 0}, - {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (Pm2ControlLength), "PM2 Control Block Length", 0}, - {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (PmTimerLength), "PM Timer Block Length", 0}, - {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (Gpe0BlockLength), "GPE0 Block Length", 0}, - {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (Gpe1BlockLength), "GPE1 Block Length", 0}, - {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (Gpe1Base), "GPE1 Base Offset", 0}, - {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (CstControl), "_CST Support", 0}, - {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (C2Latency), "C2 Latency", 0}, - {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (C3Latency), "C3 Latency", 0}, - {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (FlushSize), "CPU Cache Size", 0}, - {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (FlushStride), "Cache Flush Stride", 0}, - {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (DutyOffset), "Duty Cycle Offset", 0}, - {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (DutyWidth), "Duty Cycle Width", 0}, - {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (DayAlarm), "RTC Day Alarm Index", 0}, - {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (MonthAlarm), "RTC Month Alarm Index", 0}, - {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (Century), "RTC Century Index", 0}, - {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (BootFlags), "Boot Flags (decoded below)", DT_FLAG}, - - /* Boot Architecture Flags byte 0 */ - - {ACPI_DMT_FLAG0, ACPI_FADT_FLAG_OFFSET (BootFlags,0), "Legacy Devices Supported (V2)", 0}, - {ACPI_DMT_FLAG1, ACPI_FADT_FLAG_OFFSET (BootFlags,0), "8042 Present on ports 60/64 (V2)", 0}, - {ACPI_DMT_FLAG2, ACPI_FADT_FLAG_OFFSET (BootFlags,0), "VGA Not Present (V4)", 0}, - {ACPI_DMT_FLAG3, ACPI_FADT_FLAG_OFFSET (BootFlags,0), "MSI Not Supported (V4)", 0}, - {ACPI_DMT_FLAG4, ACPI_FADT_FLAG_OFFSET (BootFlags,0), "PCIe ASPM Not Supported (V4)", 0}, - {ACPI_DMT_FLAG5, ACPI_FADT_FLAG_OFFSET (BootFlags,0), "CMOS RTC Not Present (V5)", 0}, - - {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - - /* Flags byte 0 */ - - {ACPI_DMT_FLAG0, ACPI_FADT_FLAG_OFFSET (Flags,0), "WBINVD instruction is operational (V1)", 0}, - {ACPI_DMT_FLAG1, ACPI_FADT_FLAG_OFFSET (Flags,0), "WBINVD flushes all caches (V1)", 0}, - {ACPI_DMT_FLAG2, ACPI_FADT_FLAG_OFFSET (Flags,0), "All CPUs support C1 (V1)", 0}, - {ACPI_DMT_FLAG3, ACPI_FADT_FLAG_OFFSET (Flags,0), "C2 works on MP system (V1)", 0}, - {ACPI_DMT_FLAG4, ACPI_FADT_FLAG_OFFSET (Flags,0), "Control Method Power Button (V1)", 0}, - {ACPI_DMT_FLAG5, ACPI_FADT_FLAG_OFFSET (Flags,0), "Control Method Sleep Button (V1)", 0}, - {ACPI_DMT_FLAG6, ACPI_FADT_FLAG_OFFSET (Flags,0), "RTC wake not in fixed reg space (V1)", 0}, - {ACPI_DMT_FLAG7, ACPI_FADT_FLAG_OFFSET (Flags,0), "RTC can wake system from S4 (V1)", 0}, - - /* Flags byte 1 */ - - {ACPI_DMT_FLAG0, ACPI_FADT_FLAG_OFFSET (Flags,1), "32-bit PM Timer (V1)", 0}, - {ACPI_DMT_FLAG1, ACPI_FADT_FLAG_OFFSET (Flags,1), "Docking Supported (V1)", 0}, - {ACPI_DMT_FLAG2, ACPI_FADT_FLAG_OFFSET (Flags,1), "Reset Register Supported (V2)", 0}, - {ACPI_DMT_FLAG3, ACPI_FADT_FLAG_OFFSET (Flags,1), "Sealed Case (V3)", 0}, - {ACPI_DMT_FLAG4, ACPI_FADT_FLAG_OFFSET (Flags,1), "Headless - No Video (V3)", 0}, - {ACPI_DMT_FLAG5, ACPI_FADT_FLAG_OFFSET (Flags,1), "Use native instr after SLP_TYPx (V3)", 0}, - {ACPI_DMT_FLAG6, ACPI_FADT_FLAG_OFFSET (Flags,1), "PCIEXP_WAK Bits Supported (V4)", 0}, - {ACPI_DMT_FLAG7, ACPI_FADT_FLAG_OFFSET (Flags,1), "Use Platform Timer (V4)", 0}, - - /* Flags byte 2 */ - - {ACPI_DMT_FLAG0, ACPI_FADT_FLAG_OFFSET (Flags,2), "RTC_STS valid on S4 wake (V4)", 0}, - {ACPI_DMT_FLAG1, ACPI_FADT_FLAG_OFFSET (Flags,2), "Remote Power-on capable (V4)", 0}, - {ACPI_DMT_FLAG2, ACPI_FADT_FLAG_OFFSET (Flags,2), "Use APIC Cluster Model (V4)", 0}, - {ACPI_DMT_FLAG3, ACPI_FADT_FLAG_OFFSET (Flags,2), "Use APIC Physical Destination Mode (V4)", 0}, - {ACPI_DMT_FLAG4, ACPI_FADT_FLAG_OFFSET (Flags,2), "Hardware Reduced (V5)", 0}, - {ACPI_DMT_FLAG5, ACPI_FADT_FLAG_OFFSET (Flags,2), "Low Power S0 Idle (V5)", 0}, - ACPI_DMT_TERMINATOR -}; - -/* ACPI 1.0 MS Extensions (FADT version 2) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoFadt2[] = -{ - {ACPI_DMT_GAS, ACPI_FADT_OFFSET (ResetRegister), "Reset Register", 0}, - {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (ResetValue), "Value to cause reset", 0}, - {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (ArmBootFlags), "Reserved", 0}, - {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (MinorRevision), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* ACPI 2.0+ Extensions (FADT version 3, 4, and 5) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoFadt3[] = -{ - {ACPI_DMT_GAS, ACPI_FADT_OFFSET (ResetRegister), "Reset Register", 0}, - {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (ResetValue), "Value to cause reset", 0}, - {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (ArmBootFlags), "ARM Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_FADT_FLAG_OFFSET(ArmBootFlags,0), "PSCI Compliant", 0}, - {ACPI_DMT_FLAG1, ACPI_FADT_FLAG_OFFSET(ArmBootFlags,0), "Must use HVC for PSCI", 0}, - ACPI_DMT_NEW_LINE, - {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (MinorRevision), "FADT Minor Revision", 0}, - {ACPI_DMT_UINT64, ACPI_FADT_OFFSET (XFacs), "FACS Address", 0}, - {ACPI_DMT_UINT64, ACPI_FADT_OFFSET (XDsdt), "DSDT Address", 0}, - {ACPI_DMT_GAS, ACPI_FADT_OFFSET (XPm1aEventBlock), "PM1A Event Block", 0}, - {ACPI_DMT_GAS, ACPI_FADT_OFFSET (XPm1bEventBlock), "PM1B Event Block", 0}, - {ACPI_DMT_GAS, ACPI_FADT_OFFSET (XPm1aControlBlock), "PM1A Control Block", 0}, - {ACPI_DMT_GAS, ACPI_FADT_OFFSET (XPm1bControlBlock), "PM1B Control Block", 0}, - {ACPI_DMT_GAS, ACPI_FADT_OFFSET (XPm2ControlBlock), "PM2 Control Block", 0}, - {ACPI_DMT_GAS, ACPI_FADT_OFFSET (XPmTimerBlock), "PM Timer Block", 0}, - {ACPI_DMT_GAS, ACPI_FADT_OFFSET (XGpe0Block), "GPE0 Block", 0}, - {ACPI_DMT_GAS, ACPI_FADT_OFFSET (XGpe1Block), "GPE1 Block", 0}, - ACPI_DMT_TERMINATOR -}; - -/* ACPI 5.0 Extensions (FADT version 5) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoFadt5[] = -{ - {ACPI_DMT_GAS, ACPI_FADT_OFFSET (SleepControl), "Sleep Control Register", 0}, - {ACPI_DMT_GAS, ACPI_FADT_OFFSET (SleepStatus), "Sleep Status Register", 0}, - ACPI_DMT_TERMINATOR -}; - -/* ACPI 6.0 Extensions (FADT version 6) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoFadt6[] = -{ - {ACPI_DMT_UINT64, ACPI_FADT_OFFSET (HypervisorId), "Hypervisor ID", 0}, - ACPI_DMT_TERMINATOR -}; - - -/* - * Remaining tables are not consumed directly by the ACPICA subsystem - */ - -/******************************************************************************* - * - * ASF - Alert Standard Format table (Signature "ASF!") - * - ******************************************************************************/ - -/* Common Subtable header (one per Subtable) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoAsfHdr[] = -{ - {ACPI_DMT_ASF, ACPI_ASF0_OFFSET (Header.Type), "Subtable Type", 0}, - {ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (Header.Reserved), "Reserved", 0}, - {ACPI_DMT_UINT16, ACPI_ASF0_OFFSET (Header.Length), "Length", DT_LENGTH}, - ACPI_DMT_TERMINATOR -}; - -/* 0: ASF Information */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoAsf0[] = -{ - {ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (MinResetValue), "Minimum Reset Value", 0}, - {ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (MinPollInterval), "Minimum Polling Interval", 0}, - {ACPI_DMT_UINT16, ACPI_ASF0_OFFSET (SystemId), "System ID", 0}, - {ACPI_DMT_UINT32, ACPI_ASF0_OFFSET (MfgId), "Manufacturer ID", 0}, - {ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (Flags), "Flags", 0}, - {ACPI_DMT_UINT24, ACPI_ASF0_OFFSET (Reserved2[0]), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 1: ASF Alerts */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoAsf1[] = -{ - {ACPI_DMT_UINT8, ACPI_ASF1_OFFSET (AssertMask), "AssertMask", 0}, - {ACPI_DMT_UINT8, ACPI_ASF1_OFFSET (DeassertMask), "DeassertMask", 0}, - {ACPI_DMT_UINT8, ACPI_ASF1_OFFSET (Alerts), "Alert Count", 0}, - {ACPI_DMT_UINT8, ACPI_ASF1_OFFSET (DataLength), "Alert Data Length", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 1a: ASF Alert data */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoAsf1a[] = -{ - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Address), "Address", 0}, - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Command), "Command", 0}, - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Mask), "Mask", 0}, - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Value), "Value", 0}, - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (SensorType), "SensorType", 0}, - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Type), "Type", 0}, - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Offset), "Offset", 0}, - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (SourceType), "SourceType", 0}, - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Severity), "Severity", 0}, - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (SensorNumber), "SensorNumber", 0}, - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Entity), "Entity", 0}, - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Instance), "Instance", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 2: ASF Remote Control */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoAsf2[] = -{ - {ACPI_DMT_UINT8, ACPI_ASF2_OFFSET (Controls), "Control Count", 0}, - {ACPI_DMT_UINT8, ACPI_ASF2_OFFSET (DataLength), "Control Data Length", 0}, - {ACPI_DMT_UINT16, ACPI_ASF2_OFFSET (Reserved2), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 2a: ASF Control data */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoAsf2a[] = -{ - {ACPI_DMT_UINT8, ACPI_ASF2a_OFFSET (Function), "Function", 0}, - {ACPI_DMT_UINT8, ACPI_ASF2a_OFFSET (Address), "Address", 0}, - {ACPI_DMT_UINT8, ACPI_ASF2a_OFFSET (Command), "Command", 0}, - {ACPI_DMT_UINT8, ACPI_ASF2a_OFFSET (Value), "Value", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 3: ASF RMCP Boot Options */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoAsf3[] = -{ - {ACPI_DMT_BUF7, ACPI_ASF3_OFFSET (Capabilities[0]), "Capabilities", 0}, - {ACPI_DMT_UINT8, ACPI_ASF3_OFFSET (CompletionCode), "Completion Code", 0}, - {ACPI_DMT_UINT32, ACPI_ASF3_OFFSET (EnterpriseId), "Enterprise ID", 0}, - {ACPI_DMT_UINT8, ACPI_ASF3_OFFSET (Command), "Command", 0}, - {ACPI_DMT_UINT16, ACPI_ASF3_OFFSET (Parameter), "Parameter", 0}, - {ACPI_DMT_UINT16, ACPI_ASF3_OFFSET (BootOptions), "Boot Options", 0}, - {ACPI_DMT_UINT16, ACPI_ASF3_OFFSET (OemParameters), "Oem Parameters", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 4: ASF Address */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoAsf4[] = -{ - {ACPI_DMT_UINT8, ACPI_ASF4_OFFSET (EpromAddress), "Eprom Address", 0}, - {ACPI_DMT_UINT8, ACPI_ASF4_OFFSET (Devices), "Device Count", DT_COUNT}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * BERT - Boot Error Record table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoBert[] = -{ - {ACPI_DMT_UINT32, ACPI_BERT_OFFSET (RegionLength), "Boot Error Region Length", 0}, - {ACPI_DMT_UINT64, ACPI_BERT_OFFSET (Address), "Boot Error Region Address", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * BGRT - Boot Graphics Resource Table (ACPI 5.0) - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoBgrt[] = -{ - {ACPI_DMT_UINT16, ACPI_BGRT_OFFSET (Version), "Version", 0}, - {ACPI_DMT_UINT8, ACPI_BGRT_OFFSET (Status), "Status (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_BGRT_FLAG_OFFSET (Status, 0), "Displayed", 0}, - {ACPI_DMT_FLAGS1, ACPI_BGRT_FLAG_OFFSET (Status, 0), "Orientation Offset", 0}, - - {ACPI_DMT_UINT8, ACPI_BGRT_OFFSET (ImageType), "Image Type", 0}, - {ACPI_DMT_UINT64, ACPI_BGRT_OFFSET (ImageAddress), "Image Address", 0}, - {ACPI_DMT_UINT32, ACPI_BGRT_OFFSET (ImageOffsetX), "Image OffsetX", 0}, - {ACPI_DMT_UINT32, ACPI_BGRT_OFFSET (ImageOffsetY), "Image OffsetY", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * BOOT - Simple Boot Flag Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoBoot[] = -{ - {ACPI_DMT_UINT8, ACPI_BOOT_OFFSET (CmosIndex), "Boot Register Index", 0}, - {ACPI_DMT_UINT24, ACPI_BOOT_OFFSET (Reserved[0]), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * CPEP - Corrected Platform Error Polling table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoCpep[] = -{ - {ACPI_DMT_UINT64, ACPI_CPEP_OFFSET (Reserved), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoCpep0[] = -{ - {ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Header.Type), "Subtable Type", 0}, - {ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Header.Length), "Length", DT_LENGTH}, - {ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Id), "Processor ID", 0}, - {ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Eid), "Processor EID", 0}, - {ACPI_DMT_UINT32, ACPI_CPEP0_OFFSET (Interval), "Polling Interval", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * CSRT - Core System Resource Table - * - ******************************************************************************/ - -/* Main table consists only of the standard ACPI table header */ - -/* Resource Group subtable */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt0[] = -{ - {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (Length), "Length", DT_LENGTH}, - {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (VendorId), "Vendor ID", 0}, - {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (SubvendorId), "Subvendor ID", 0}, - {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (DeviceId), "Device ID", 0}, - {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (SubdeviceId), "Subdevice ID", 0}, - {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (Revision), "Revision", 0}, - {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (SharedInfoLength), "Shared Info Length", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Shared Info subtable */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt1[] = -{ - {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (MajorVersion), "Major Version", 0}, - {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (MinorVersion), "Minor Version", 0}, - {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (MmioBaseLow), "MMIO Base Address Low", 0}, - {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (MmioBaseHigh), "MMIO Base Address High", 0}, - {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (GsiInterrupt), "GSI Interrupt", 0}, - {ACPI_DMT_UINT8, ACPI_CSRT1_OFFSET (InterruptPolarity), "Interrupt Polarity", 0}, - {ACPI_DMT_UINT8, ACPI_CSRT1_OFFSET (InterruptMode), "Interrupt Mode", 0}, - {ACPI_DMT_UINT8, ACPI_CSRT1_OFFSET (NumChannels), "Num Channels", 0}, - {ACPI_DMT_UINT8, ACPI_CSRT1_OFFSET (DmaAddressWidth), "DMA Address Width", 0}, - {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (BaseRequestLine), "Base Request Line", 0}, - {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (NumHandshakeSignals), "Num Handshake Signals", 0}, - {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (MaxBlockSize), "Max Block Size", 0}, - ACPI_DMT_TERMINATOR -}; - - -/* Resource Descriptor subtable */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt2[] = -{ - {ACPI_DMT_UINT32, ACPI_CSRT2_OFFSET (Length), "Length", DT_LENGTH}, - {ACPI_DMT_UINT16, ACPI_CSRT2_OFFSET (Type), "Type", 0}, - {ACPI_DMT_UINT16, ACPI_CSRT2_OFFSET (Subtype), "Subtype", 0}, - {ACPI_DMT_UINT32, ACPI_CSRT2_OFFSET (Uid), "UID", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt2a[] = -{ - {ACPI_DMT_RAW_BUFFER, 0, "ResourceInfo", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * DBG2 - Debug Port Table 2 - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2[] = -{ - {ACPI_DMT_UINT32, ACPI_DBG2_OFFSET (InfoOffset), "Info Offset", 0}, - {ACPI_DMT_UINT32, ACPI_DBG2_OFFSET (InfoCount), "Info Count", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Debug Device Information Subtable */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Device[] = -{ - {ACPI_DMT_UINT8, ACPI_DBG20_OFFSET (Revision), "Revision", 0}, - {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (Length), "Length", DT_LENGTH}, - {ACPI_DMT_UINT8, ACPI_DBG20_OFFSET (RegisterCount), "Register Count", 0}, - {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (NamepathLength), "Namepath Length", 0}, - {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (NamepathOffset), "Namepath Offset", 0}, - {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (OemDataLength), "OEM Data Length", DT_DESCRIBES_OPTIONAL}, - {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (OemDataOffset), "OEM Data Offset", DT_DESCRIBES_OPTIONAL}, - {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (PortType), "Port Type", 0}, - {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (PortSubtype), "Port Subtype", 0}, - {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (BaseAddressOffset), "Base Address Offset", 0}, - {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (AddressSizeOffset), "Address Size Offset", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Variable-length data for the subtable */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Addr[] = -{ - {ACPI_DMT_GAS, 0, "Base Address Register", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Size[] = -{ - {ACPI_DMT_UINT32, 0, "Address Size", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Name[] = -{ - {ACPI_DMT_STRING, 0, "Namepath", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2OemData[] = -{ - {ACPI_DMT_RAW_BUFFER, 0, "OEM Data", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * DBGP - Debug Port - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoDbgp[] = -{ - {ACPI_DMT_UINT8, ACPI_DBGP_OFFSET (Type), "Interface Type", 0}, - {ACPI_DMT_UINT24, ACPI_DBGP_OFFSET (Reserved[0]), "Reserved", 0}, - {ACPI_DMT_GAS, ACPI_DBGP_OFFSET (DebugPort), "Debug Port Register", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * DMAR - DMA Remapping table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoDmar[] = -{ - {ACPI_DMT_UINT8, ACPI_DMAR_OFFSET (Width), "Host Address Width", 0}, - {ACPI_DMT_UINT8, ACPI_DMAR_OFFSET (Flags), "Flags", 0}, - {ACPI_DMT_BUF10, ACPI_DMAR_OFFSET (Reserved[0]), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Common Subtable header (one per Subtable) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoDmarHdr[] = -{ - {ACPI_DMT_DMAR, ACPI_DMAR0_OFFSET (Header.Type), "Subtable Type", 0}, - {ACPI_DMT_UINT16, ACPI_DMAR0_OFFSET (Header.Length), "Length", DT_LENGTH}, - ACPI_DMT_TERMINATOR -}; - -/* Common device scope entry */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoDmarScope[] = -{ - {ACPI_DMT_DMAR_SCOPE, ACPI_DMARS_OFFSET (EntryType), "Device Scope Type", 0}, - {ACPI_DMT_UINT8, ACPI_DMARS_OFFSET (Length), "Entry Length", DT_LENGTH}, - {ACPI_DMT_UINT16, ACPI_DMARS_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT8, ACPI_DMARS_OFFSET (EnumerationId), "Enumeration ID", 0}, - {ACPI_DMT_UINT8, ACPI_DMARS_OFFSET (Bus), "PCI Bus Number", 0}, - ACPI_DMT_TERMINATOR -}; - -/* DMAR Subtables */ - -/* 0: Hardware Unit Definition */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoDmar0[] = -{ - {ACPI_DMT_UINT8, ACPI_DMAR0_OFFSET (Flags), "Flags", 0}, - {ACPI_DMT_UINT8, ACPI_DMAR0_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT16, ACPI_DMAR0_OFFSET (Segment), "PCI Segment Number", 0}, - {ACPI_DMT_UINT64, ACPI_DMAR0_OFFSET (Address), "Register Base Address", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 1: Reserved Memory Definition */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoDmar1[] = -{ - {ACPI_DMT_UINT16, ACPI_DMAR1_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT16, ACPI_DMAR1_OFFSET (Segment), "PCI Segment Number", 0}, - {ACPI_DMT_UINT64, ACPI_DMAR1_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT64, ACPI_DMAR1_OFFSET (EndAddress), "End Address (limit)", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 2: Root Port ATS Capability Definition */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoDmar2[] = -{ - {ACPI_DMT_UINT8, ACPI_DMAR2_OFFSET (Flags), "Flags", 0}, - {ACPI_DMT_UINT8, ACPI_DMAR2_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT16, ACPI_DMAR2_OFFSET (Segment), "PCI Segment Number", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 3: Remapping Hardware Static Affinity Structure */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoDmar3[] = -{ - {ACPI_DMT_UINT32, ACPI_DMAR3_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_DMAR3_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT32, ACPI_DMAR3_OFFSET (ProximityDomain), "Proximity Domain", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 4: ACPI Namespace Device Declaration Structure */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoDmar4[] = -{ - {ACPI_DMT_UINT24, ACPI_DMAR4_OFFSET (Reserved[0]), "Reserved", 0}, - {ACPI_DMT_UINT8, ACPI_DMAR4_OFFSET (DeviceNumber), "Device Number", 0}, - {ACPI_DMT_STRING, ACPI_DMAR4_OFFSET (DeviceName[0]), "Device Name", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * DRTM - Dynamic Root of Trust for Measurement table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm[] = -{ - {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (EntryBaseAddress), "Entry Base Address", 0}, - {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (EntryLength), "Entry Length", 0}, - {ACPI_DMT_UINT32, ACPI_DRTM_OFFSET (EntryAddress32), "Entry 32", 0}, - {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (EntryAddress64), "Entry 64", 0}, - {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (ExitAddress), "Exit Address", 0}, - {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (LogAreaAddress), "Log Area Start", 0}, - {ACPI_DMT_UINT32, ACPI_DRTM_OFFSET (LogAreaLength), "Log Area Length", 0}, - {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (ArchDependentAddress), "Arch Dependent Address", 0}, - {ACPI_DMT_UINT32, ACPI_DRTM_OFFSET (Flags), "Flags (decoded below)", 0}, - {ACPI_DMT_FLAG0, ACPI_DRTM_FLAG_OFFSET (Flags, 0), "Namespace in TCB", 0}, - {ACPI_DMT_FLAG1, ACPI_DRTM_FLAG_OFFSET (Flags, 0), "Gap Code on S3 Resume", 0}, - {ACPI_DMT_FLAG2, ACPI_DRTM_FLAG_OFFSET (Flags, 0), "Gap Code on DLME_Exit", 0}, - {ACPI_DMT_FLAG3, ACPI_DRTM_FLAG_OFFSET (Flags, 0), "PCR_Authorities Changed", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm0[] = -{ - {ACPI_DMT_UINT32, ACPI_DRTM0_OFFSET (ValidatedTableCount), "Validated Table Count", DT_COUNT}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm0a[] = -{ - {ACPI_DMT_UINT64, 0, "Table Address", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm1[] = -{ - {ACPI_DMT_UINT32, ACPI_DRTM1_OFFSET (ResourceCount), "Resource Count", DT_COUNT}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm1a[] = -{ - {ACPI_DMT_UINT56, ACPI_DRTM1a_OFFSET (Size[0]), "Size", DT_OPTIONAL}, - {ACPI_DMT_UINT8, ACPI_DRTM1a_OFFSET (Type), "Type", 0}, - {ACPI_DMT_FLAG0, ACPI_DRTM1a_FLAG_OFFSET (Type, 0), "Resource Type", 0}, - {ACPI_DMT_FLAG7, ACPI_DRTM1a_FLAG_OFFSET (Type, 0), "Protections", 0}, - {ACPI_DMT_UINT64, ACPI_DRTM1a_OFFSET (Address), "Address", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm2[] = -{ - {ACPI_DMT_UINT32, ACPI_DRTM2_OFFSET (DpsIdLength), "DLME Platform Id Length", DT_COUNT}, - {ACPI_DMT_BUF16, ACPI_DRTM2_OFFSET (DpsId), "DLME Platform Id", DT_COUNT}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * ECDT - Embedded Controller Boot Resources Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoEcdt[] = -{ - {ACPI_DMT_GAS, ACPI_ECDT_OFFSET (Control), "Command/Status Register", 0}, - {ACPI_DMT_GAS, ACPI_ECDT_OFFSET (Data), "Data Register", 0}, - {ACPI_DMT_UINT32, ACPI_ECDT_OFFSET (Uid), "UID", 0}, - {ACPI_DMT_UINT8, ACPI_ECDT_OFFSET (Gpe), "GPE Number", 0}, - {ACPI_DMT_STRING, ACPI_ECDT_OFFSET (Id[0]), "Namepath", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * EINJ - Error Injection table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoEinj[] = -{ - {ACPI_DMT_UINT32, ACPI_EINJ_OFFSET (HeaderLength), "Injection Header Length", 0}, - {ACPI_DMT_UINT8, ACPI_EINJ_OFFSET (Flags), "Flags", 0}, - {ACPI_DMT_UINT24, ACPI_EINJ_OFFSET (Reserved[0]), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_EINJ_OFFSET (Entries), "Injection Entry Count", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoEinj0[] = -{ - {ACPI_DMT_EINJACT, ACPI_EINJ0_OFFSET (Action), "Action", 0}, - {ACPI_DMT_EINJINST, ACPI_EINJ0_OFFSET (Instruction), "Instruction", 0}, - {ACPI_DMT_UINT8, ACPI_EINJ0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_EINJ0_FLAG_OFFSET (Flags,0), "Preserve Register Bits", 0}, - - {ACPI_DMT_UINT8, ACPI_EINJ0_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_GAS, ACPI_EINJ0_OFFSET (RegisterRegion), "Register Region", 0}, - {ACPI_DMT_UINT64, ACPI_EINJ0_OFFSET (Value), "Value", 0}, - {ACPI_DMT_UINT64, ACPI_EINJ0_OFFSET (Mask), "Mask", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * ERST - Error Record Serialization table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoErst[] = -{ - {ACPI_DMT_UINT32, ACPI_ERST_OFFSET (HeaderLength), "Serialization Header Length", 0}, - {ACPI_DMT_UINT32, ACPI_ERST_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_ERST_OFFSET (Entries), "Instruction Entry Count", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoErst0[] = -{ - {ACPI_DMT_ERSTACT, ACPI_ERST0_OFFSET (Action), "Action", 0}, - {ACPI_DMT_ERSTINST, ACPI_ERST0_OFFSET (Instruction), "Instruction", 0}, - {ACPI_DMT_UINT8, ACPI_ERST0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_ERST0_FLAG_OFFSET (Flags,0), "Preserve Register Bits", 0}, - - {ACPI_DMT_UINT8, ACPI_ERST0_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_GAS, ACPI_ERST0_OFFSET (RegisterRegion), "Register Region", 0}, - {ACPI_DMT_UINT64, ACPI_ERST0_OFFSET (Value), "Value", 0}, - {ACPI_DMT_UINT64, ACPI_ERST0_OFFSET (Mask), "Mask", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * FPDT - Firmware Performance Data Table (ACPI 5.0) - * - ******************************************************************************/ - -/* Main table consists of only the standard ACPI header - subtables follow */ - -/* FPDT subtable header */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoFpdtHdr[] = -{ - {ACPI_DMT_UINT16, ACPI_FPDTH_OFFSET (Type), "Subtable Type", 0}, - {ACPI_DMT_UINT8, ACPI_FPDTH_OFFSET (Length), "Length", DT_LENGTH}, - {ACPI_DMT_UINT8, ACPI_FPDTH_OFFSET (Revision), "Revision", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 0: Firmware Basic Boot Performance Record */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt0[] = -{ - {ACPI_DMT_UINT32, ACPI_FPDT0_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_FPDT1_OFFSET (Address), "FPDT Boot Record Address", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 1: S3 Performance Table Pointer Record */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt1[] = -{ - {ACPI_DMT_UINT32, ACPI_FPDT1_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_FPDT1_OFFSET (Address), "S3PT Record Address", 0}, - ACPI_DMT_TERMINATOR -}; - -#if 0 - /* Boot Performance Record, not supported at this time. */ - {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (ResetEnd), "Reset End", 0}, - {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (LoadStart), "Load Image Start", 0}, - {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (StartupStart), "Start Image Start", 0}, - {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (ExitServicesEntry), "Exit Services Entry", 0}, - {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (ExitServicesExit), "Exit Services Exit", 0}, -#endif - -/******************************************************************************* - * - * GTDT - Generic Timer Description Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt[] = -{ - {ACPI_DMT_UINT64, ACPI_GTDT_OFFSET (CounterBlockAddresss), "Counter Block Address", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (Reserved), "Reserved", 0}, - ACPI_DMT_NEW_LINE, - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (SecureEl1Interrupt), "Secure EL1 Interrupt", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (SecureEl1Flags), "EL1 Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0), "Trigger Mode", 0}, - {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0), "Polarity", 0}, - {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0), "Always On", 0}, - ACPI_DMT_NEW_LINE, - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl1Interrupt), "Non-Secure EL1 Interrupt", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl1Flags), "NEL1 Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Trigger Mode", 0}, - {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Polarity", 0}, - {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Always On", 0}, - ACPI_DMT_NEW_LINE, - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (VirtualTimerInterrupt), "Virtual Timer Interrupt", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (VirtualTimerFlags), "VT Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Trigger Mode", 0}, - {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Polarity", 0}, - {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Always On", 0}, - ACPI_DMT_NEW_LINE, - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl2Interrupt), "Non-Secure EL2 Interrupt", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl2Flags), "NEL2 Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Trigger Mode", 0}, - {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Polarity", 0}, - {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Always On", 0}, - {ACPI_DMT_UINT64, ACPI_GTDT_OFFSET (CounterReadBlockAddress), "Counter Read Block Address", 0}, - ACPI_DMT_NEW_LINE, - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (PlatformTimerCount), "Platform Timer Count", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (PlatformTimerOffset), "Platform Timer Offset", 0}, - ACPI_DMT_TERMINATOR -}; - -/* GTDT Subtable header (one per Subtable) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoGtdtHdr[] = -{ - {ACPI_DMT_GTDT, ACPI_GTDTH_OFFSET (Type), "Subtable Type", 0}, - {ACPI_DMT_UINT16, ACPI_GTDTH_OFFSET (Length), "Length", DT_LENGTH}, - ACPI_DMT_TERMINATOR -}; - -/* GTDT Subtables */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt0[] = -{ - {ACPI_DMT_UINT8, ACPI_GTDT0_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_GTDT0_OFFSET (BlockAddress), "Block Address", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT0_OFFSET (TimerCount), "Timer Count", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT0_OFFSET (TimerOffset), "Timer Offset", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt0a[] = -{ - {ACPI_DMT_UINT8 , ACPI_GTDT0a_OFFSET (FrameNumber), "Frame Number", 0}, - {ACPI_DMT_UINT24, ACPI_GTDT0a_OFFSET (Reserved[0]), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_GTDT0a_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT64, ACPI_GTDT0a_OFFSET (El0BaseAddress), "EL0 Base Address", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (TimerInterrupt), "Timer Interrupt", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (TimerFlags), "Timer Flags (decoded below)", 0}, - {ACPI_DMT_FLAG0, ACPI_GTDT0a_FLAG_OFFSET (TimerFlags,0), "Trigger Mode", 0}, - {ACPI_DMT_FLAG1, ACPI_GTDT0a_FLAG_OFFSET (TimerFlags,0), "Polarity", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (VirtualTimerInterrupt), "Virtual Timer Interrupt", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (VirtualTimerFlags), "Virtual Timer Flags (decoded below)", 0}, - {ACPI_DMT_FLAG0, ACPI_GTDT0a_FLAG_OFFSET (VirtualTimerFlags,0), "Trigger Mode", 0}, - {ACPI_DMT_FLAG1, ACPI_GTDT0a_FLAG_OFFSET (VirtualTimerFlags,0), "Polarity", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (CommonFlags), "Common Flags (decoded below)", 0}, - {ACPI_DMT_FLAG0, ACPI_GTDT0a_FLAG_OFFSET (CommonFlags,0), "Secure", 0}, - {ACPI_DMT_FLAG1, ACPI_GTDT0a_FLAG_OFFSET (CommonFlags,0), "Always On", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt1[] = -{ - {ACPI_DMT_UINT8, ACPI_GTDT1_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_GTDT1_OFFSET (RefreshFrameAddress), "Refresh Frame Address", 0}, - {ACPI_DMT_UINT64, ACPI_GTDT1_OFFSET (ControlFrameAddress), "Control Frame Address", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT1_OFFSET (TimerInterrupt), "Timer Interrupt", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT1_OFFSET (TimerFlags), "Timer Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0), "Trigger Mode", 0}, - {ACPI_DMT_FLAG1, ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0), "Polarity", 0}, - {ACPI_DMT_FLAG2, ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0), "Security", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * HEST - Hardware Error Source table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHest[] = -{ - {ACPI_DMT_UINT32, ACPI_HEST_OFFSET (ErrorSourceCount), "Error Source Count", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Common HEST structures for subtables */ - -#define ACPI_DM_HEST_HEADER \ - {ACPI_DMT_HEST, ACPI_HEST0_OFFSET (Header.Type), "Subtable Type", 0}, \ - {ACPI_DMT_UINT16, ACPI_HEST0_OFFSET (Header.SourceId), "Source Id", 0} - -#define ACPI_DM_HEST_AER \ - {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Reserved1), "Reserved", 0}, \ - {ACPI_DMT_UINT8, ACPI_HEST6_OFFSET (Aer.Flags), "Flags (decoded below)", DT_FLAG}, \ - {ACPI_DMT_FLAG0, ACPI_HEST6_FLAG_OFFSET (Aer.Flags,0), "Firmware First", 0}, \ - {ACPI_DMT_FLAG0, ACPI_HEST6_FLAG_OFFSET (Aer.Flags,0), "Global", 0}, \ - {ACPI_DMT_UINT8, ACPI_HEST6_OFFSET (Aer.Enabled), "Enabled", 0}, \ - {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.RecordsToPreallocate), "Records To Preallocate", 0}, \ - {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.MaxSectionsPerRecord), "Max Sections Per Record", 0}, \ - {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.Bus), "Bus", 0}, \ - {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Device), "Device", 0}, \ - {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Function), "Function", 0}, \ - {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.DeviceControl), "DeviceControl", 0}, \ - {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Reserved2), "Reserved", 0}, \ - {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.UncorrectableMask), "Uncorrectable Mask", 0}, \ - {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.UncorrectableSeverity), "Uncorrectable Severity", 0}, \ - {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.CorrectableMask), "Correctable Mask", 0}, \ - {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.AdvancedCapabilities), "Advanced Capabilities", 0} - - -/* HEST Subtables */ - -/* 0: IA32 Machine Check Exception */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHest0[] = -{ - ACPI_DM_HEST_HEADER, - {ACPI_DMT_UINT16, ACPI_HEST0_OFFSET (Reserved1), "Reserved1", 0}, - {ACPI_DMT_UINT8, ACPI_HEST0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_HEST0_FLAG_OFFSET (Flags,0), "Firmware First", 0}, - {ACPI_DMT_FLAG2, ACPI_HEST0_FLAG_OFFSET (Flags,0), "GHES Assist", 0}, - - {ACPI_DMT_UINT8, ACPI_HEST0_OFFSET (Enabled), "Enabled", 0}, - {ACPI_DMT_UINT32, ACPI_HEST0_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, - {ACPI_DMT_UINT32, ACPI_HEST0_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, - {ACPI_DMT_UINT64, ACPI_HEST0_OFFSET (GlobalCapabilityData), "Global Capability Data", 0}, - {ACPI_DMT_UINT64, ACPI_HEST0_OFFSET (GlobalControlData), "Global Control Data", 0}, - {ACPI_DMT_UINT8, ACPI_HEST0_OFFSET (NumHardwareBanks), "Num Hardware Banks", 0}, - {ACPI_DMT_UINT56, ACPI_HEST0_OFFSET (Reserved3[0]), "Reserved2", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 1: IA32 Corrected Machine Check */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHest1[] = -{ - ACPI_DM_HEST_HEADER, - {ACPI_DMT_UINT16, ACPI_HEST1_OFFSET (Reserved1), "Reserved1", 0}, - {ACPI_DMT_UINT8, ACPI_HEST1_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_HEST1_FLAG_OFFSET (Flags,0), "Firmware First", 0}, - {ACPI_DMT_FLAG2, ACPI_HEST1_FLAG_OFFSET (Flags,0), "GHES Assist", 0}, - - {ACPI_DMT_UINT8, ACPI_HEST1_OFFSET (Enabled), "Enabled", 0}, - {ACPI_DMT_UINT32, ACPI_HEST1_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, - {ACPI_DMT_UINT32, ACPI_HEST1_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, - {ACPI_DMT_HESTNTFY, ACPI_HEST1_OFFSET (Notify), "Notify", 0}, - {ACPI_DMT_UINT8, ACPI_HEST1_OFFSET (NumHardwareBanks), "Num Hardware Banks", 0}, - {ACPI_DMT_UINT24, ACPI_HEST1_OFFSET (Reserved2[0]), "Reserved2", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 2: IA32 Non-Maskable Interrupt */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHest2[] = -{ - ACPI_DM_HEST_HEADER, - {ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, - {ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, - {ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (MaxRawDataLength), "Max Raw Data Length", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 6: PCI Express Root Port AER */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHest6[] = -{ - ACPI_DM_HEST_HEADER, - ACPI_DM_HEST_AER, - {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (RootErrorCommand), "Root Error Command", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 7: PCI Express AER (AER Endpoint) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHest7[] = -{ - ACPI_DM_HEST_HEADER, - ACPI_DM_HEST_AER, - ACPI_DMT_TERMINATOR -}; - -/* 8: PCI Express/PCI-X Bridge AER */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHest8[] = -{ - ACPI_DM_HEST_HEADER, - ACPI_DM_HEST_AER, - {ACPI_DMT_UINT32, ACPI_HEST8_OFFSET (UncorrectableMask2), "2nd Uncorrectable Mask", 0}, - {ACPI_DMT_UINT32, ACPI_HEST8_OFFSET (UncorrectableSeverity2), "2nd Uncorrectable Severity", 0}, - {ACPI_DMT_UINT32, ACPI_HEST8_OFFSET (AdvancedCapabilities2), "2nd Advanced Capabilities", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 9: Generic Hardware Error Source */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHest9[] = -{ - ACPI_DM_HEST_HEADER, - {ACPI_DMT_UINT16, ACPI_HEST9_OFFSET (RelatedSourceId), "Related Source Id", 0}, - {ACPI_DMT_UINT8, ACPI_HEST9_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT8, ACPI_HEST9_OFFSET (Enabled), "Enabled", 0}, - {ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, - {ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, - {ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (MaxRawDataLength), "Max Raw Data Length", 0}, - {ACPI_DMT_GAS, ACPI_HEST9_OFFSET (ErrorStatusAddress), "Error Status Address", 0}, - {ACPI_DMT_HESTNTFY, ACPI_HEST9_OFFSET (Notify), "Notify", 0}, - {ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (ErrorBlockLength), "Error Status Block Length", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 10: Generic Hardware Error Source - Version 2 */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHest10[] = -{ - ACPI_DM_HEST_HEADER, - {ACPI_DMT_UINT16, ACPI_HEST10_OFFSET (RelatedSourceId), "Related Source Id", 0}, - {ACPI_DMT_UINT8, ACPI_HEST10_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT8, ACPI_HEST10_OFFSET (Enabled), "Enabled", 0}, - {ACPI_DMT_UINT32, ACPI_HEST10_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, - {ACPI_DMT_UINT32, ACPI_HEST10_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, - {ACPI_DMT_UINT32, ACPI_HEST10_OFFSET (MaxRawDataLength), "Max Raw Data Length", 0}, - {ACPI_DMT_GAS, ACPI_HEST10_OFFSET (ErrorStatusAddress), "Error Status Address", 0}, - {ACPI_DMT_HESTNTFY, ACPI_HEST10_OFFSET (Notify), "Notify", 0}, - {ACPI_DMT_UINT32, ACPI_HEST10_OFFSET (ErrorBlockLength), "Error Status Block Length", 0}, - {ACPI_DMT_GAS, ACPI_HEST10_OFFSET (ReadAckRegister), "Read Ack Register", 0}, - {ACPI_DMT_UINT64, ACPI_HEST10_OFFSET (ReadAckPreserve), "Read Ack Preserve", 0}, - {ACPI_DMT_UINT64, ACPI_HEST10_OFFSET (ReadAckWrite), "Read Ack Write", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 11: IA32 Deferred Machine Check */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHest11[] = -{ - ACPI_DM_HEST_HEADER, - {ACPI_DMT_UINT16, ACPI_HEST11_OFFSET (Reserved1), "Reserved1", 0}, - {ACPI_DMT_UINT8, ACPI_HEST11_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_HEST11_FLAG_OFFSET (Flags,0), "Firmware First", 0}, - {ACPI_DMT_FLAG2, ACPI_HEST11_FLAG_OFFSET (Flags,0), "GHES Assist", 0}, - - {ACPI_DMT_UINT8, ACPI_HEST11_OFFSET (Enabled), "Enabled", 0}, - {ACPI_DMT_UINT32, ACPI_HEST11_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, - {ACPI_DMT_UINT32, ACPI_HEST11_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, - {ACPI_DMT_HESTNTFY, ACPI_HEST11_OFFSET (Notify), "Notify", 0}, - {ACPI_DMT_UINT8, ACPI_HEST11_OFFSET (NumHardwareBanks), "Num Hardware Banks", 0}, - {ACPI_DMT_UINT24, ACPI_HEST11_OFFSET (Reserved2[0]), "Reserved2", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Notification Structure */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHestNotify[] = -{ - {ACPI_DMT_HESTNTYP, ACPI_HESTN_OFFSET (Type), "Notify Type", 0}, - {ACPI_DMT_UINT8, ACPI_HESTN_OFFSET (Length), "Notify Length", DT_LENGTH}, - {ACPI_DMT_UINT16, ACPI_HESTN_OFFSET (ConfigWriteEnable), "Configuration Write Enable", 0}, - {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (PollInterval), "PollInterval", 0}, - {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (Vector), "Vector", 0}, - {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (PollingThresholdValue), "Polling Threshold Value", 0}, - {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (PollingThresholdWindow), "Polling Threshold Window", 0}, - {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (ErrorThresholdValue), "Error Threshold Value", 0}, - {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (ErrorThresholdWindow), "Error Threshold Window", 0}, - ACPI_DMT_TERMINATOR -}; - - -/* - * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and - * ACPI_HEST_IA_CORRECTED structures. - */ -ACPI_DMTABLE_INFO AcpiDmTableInfoHestBank[] = -{ - {ACPI_DMT_UINT8, ACPI_HESTB_OFFSET (BankNumber), "Bank Number", 0}, - {ACPI_DMT_UINT8, ACPI_HESTB_OFFSET (ClearStatusOnInit), "Clear Status On Init", 0}, - {ACPI_DMT_UINT8, ACPI_HESTB_OFFSET (StatusFormat), "Status Format", 0}, - {ACPI_DMT_UINT8, ACPI_HESTB_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_HESTB_OFFSET (ControlRegister), "Control Register", 0}, - {ACPI_DMT_UINT64, ACPI_HESTB_OFFSET (ControlData), "Control Data", 0}, - {ACPI_DMT_UINT32, ACPI_HESTB_OFFSET (StatusRegister), "Status Register", 0}, - {ACPI_DMT_UINT32, ACPI_HESTB_OFFSET (AddressRegister), "Address Register", 0}, - {ACPI_DMT_UINT32, ACPI_HESTB_OFFSET (MiscRegister), "Misc Register", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * HPET - High Precision Event Timer table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHpet[] = -{ - {ACPI_DMT_UINT32, ACPI_HPET_OFFSET (Id), "Hardware Block ID", 0}, - {ACPI_DMT_GAS, ACPI_HPET_OFFSET (Address), "Timer Block Register", 0}, - {ACPI_DMT_UINT8, ACPI_HPET_OFFSET (Sequence), "Sequence Number", 0}, - {ACPI_DMT_UINT16, ACPI_HPET_OFFSET (MinimumTick), "Minimum Clock Ticks", 0}, - {ACPI_DMT_UINT8, ACPI_HPET_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_HPET_FLAG_OFFSET (Flags,0), "4K Page Protect", 0}, - {ACPI_DMT_FLAG1, ACPI_HPET_FLAG_OFFSET (Flags,0), "64K Page Protect", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * HMAT - Heterogeneous Memory Attributes Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHmat[] = -{ - {ACPI_DMT_UINT32, ACPI_HMAT_OFFSET (Reserved), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Common HMAT structure header (one per Subtable) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHmatHdr[] = -{ - {ACPI_DMT_HMAT, ACPI_HMATH_OFFSET (Type), "Structure Type", 0}, - {ACPI_DMT_UINT16, ACPI_HMATH_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_HMATH_OFFSET (Length), "Length", 0}, - ACPI_DMT_TERMINATOR -}; - -/* HMAT subtables */ - -/* 0x00: Memory Subsystem Address Range */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHmat0[] = -{ - {ACPI_DMT_UINT16, ACPI_HMAT0_OFFSET (Flags), "Flags (decoded below)", 0}, - {ACPI_DMT_FLAG0, ACPI_HMAT0_FLAG_OFFSET (Flags,0), "Processor Proximity Domain Valid", 0}, - {ACPI_DMT_FLAG1, ACPI_HMAT0_FLAG_OFFSET (Flags,0), "Memory Proximity Domain Valid", 0}, - {ACPI_DMT_FLAG2, ACPI_HMAT0_FLAG_OFFSET (Flags,0), "Reservation Hint", 0}, - {ACPI_DMT_UINT16, ACPI_HMAT0_OFFSET (Reserved1), "Reserved1", 0}, - {ACPI_DMT_UINT32, ACPI_HMAT0_OFFSET (ProcessorPD), "Processor Proximity Domain", 0}, - {ACPI_DMT_UINT32, ACPI_HMAT0_OFFSET (MemoryPD), "Memory Proximity Domain", 0}, - {ACPI_DMT_UINT32, ACPI_HMAT0_OFFSET (Reserved2), "Reserved2", 0}, - {ACPI_DMT_UINT64, ACPI_HMAT0_OFFSET (PhysicalAddressBase), "Physical Address Range Base", 0}, - {ACPI_DMT_UINT64, ACPI_HMAT0_OFFSET (PhysicalAddressLength), "Physical Address Range Size", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 0x01: System Locality Latency and Bandwidth Information */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1[] = -{ - {ACPI_DMT_UINT8, ACPI_HMAT1_OFFSET (Flags), "Flags (decoded below)", 0}, - {ACPI_DMT_FLAGS4_0, ACPI_HMAT1_FLAG_OFFSET (Flags,0), "Memory Hierarchy", 0}, - {ACPI_DMT_UINT8, ACPI_HMAT1_OFFSET (DataType), "Data Type", 0}, - {ACPI_DMT_UINT16, ACPI_HMAT1_OFFSET (Reserved1), "Reserved1", 0}, - {ACPI_DMT_UINT32, ACPI_HMAT1_OFFSET (NumberOfInitiatorPDs), "Initiator Proximity Domains #", 0}, - {ACPI_DMT_UINT32, ACPI_HMAT1_OFFSET (NumberOfTargetPDs), "Target Proximity Domains #", 0}, - {ACPI_DMT_UINT32, ACPI_HMAT1_OFFSET (Reserved2), "Reserved2", 0}, - {ACPI_DMT_UINT64, ACPI_HMAT1_OFFSET (EntryBaseUnit), "Entry Base Unit", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1a[] = -{ - {ACPI_DMT_UINT32, 0, "Initiator Proximity Domain List", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1b[] = -{ - {ACPI_DMT_UINT32, 0, "Target Proximity Domain List", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1c[] = -{ - {ACPI_DMT_UINT16, 0, "Entry", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - -/* 0x02: Memory Side Cache Information */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHmat2[] = -{ - {ACPI_DMT_UINT32, ACPI_HMAT2_OFFSET (MemoryPD), "Memory Proximity Domain", 0}, - {ACPI_DMT_UINT32, ACPI_HMAT2_OFFSET (Reserved1), "Reserved1", 0}, - {ACPI_DMT_UINT64, ACPI_HMAT2_OFFSET (CacheSize), "Memory Side Cache Size", 0}, - {ACPI_DMT_UINT32, ACPI_HMAT2_OFFSET (CacheAttributes), "Cache Attributes (decoded below)", 0}, - {ACPI_DMT_FLAGS4_0, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Total Cache Levels", 0}, - {ACPI_DMT_FLAGS4_4, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Cache Level", 0}, - {ACPI_DMT_FLAGS4_8, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Cache Associativity", 0}, - {ACPI_DMT_FLAGS4_12, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Write Policy", 0}, - {ACPI_DMT_FLAGS16_16, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Cache Line Size", 0}, - {ACPI_DMT_UINT16, ACPI_HMAT2_OFFSET (Reserved2), "Reserved2", 0}, - {ACPI_DMT_UINT16, ACPI_HMAT2_OFFSET (NumberOfSMBIOSHandles), "SMBIOS Handle #", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoHmat2a[] = -{ - {ACPI_DMT_UINT16, 0, "SMBIOS Handle", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * IORT - IO Remapping Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIort[] = -{ - {ACPI_DMT_UINT32, ACPI_IORT_OFFSET (NodeCount), "Node Count", 0}, - {ACPI_DMT_UINT32, ACPI_IORT_OFFSET (NodeOffset), "Node Offset", 0}, - {ACPI_DMT_UINT32, ACPI_IORT_OFFSET (Reserved), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Optional padding field */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIortPad[] = -{ - {ACPI_DMT_RAW_BUFFER, 0, "Optional Padding", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - -/* Common Subtable header (one per Subtable) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIortHdr[] = -{ - {ACPI_DMT_UINT8, ACPI_IORTH_OFFSET (Type), "Type", 0}, - {ACPI_DMT_UINT16, ACPI_IORTH_OFFSET (Length), "Length", DT_LENGTH}, - {ACPI_DMT_UINT8, ACPI_IORTH_OFFSET (Revision), "Revision", 0}, - {ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (MappingCount), "Mapping Count", 0}, - {ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (MappingOffset), "Mapping Offset", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoIortMap[] = -{ - {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (InputBase), "Input base", DT_OPTIONAL}, - {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (IdCount), "ID Count", 0}, - {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (OutputBase), "Output Base", 0}, - {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (OutputReference), "Output Reference", 0}, - {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (Flags), "Flags (decoded below)", 0}, - {ACPI_DMT_FLAG0, ACPI_IORTM_FLAG_OFFSET (Flags, 0), "Single Mapping", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoIortAcc[] = -{ - {ACPI_DMT_UINT32, ACPI_IORTA_OFFSET (CacheCoherency), "Cache Coherency", 0}, - {ACPI_DMT_UINT8, ACPI_IORTA_OFFSET (Hints), "Hints (decoded below)", 0}, - {ACPI_DMT_FLAG0, ACPI_IORTA_FLAG_OFFSET (Hints, 0), "Transient", 0}, - {ACPI_DMT_FLAG1, ACPI_IORTA_FLAG_OFFSET (Hints, 0), "Write Allocate", 0}, - {ACPI_DMT_FLAG2, ACPI_IORTA_FLAG_OFFSET (Hints, 0), "Read Allocate", 0}, - {ACPI_DMT_FLAG3, ACPI_IORTA_FLAG_OFFSET (Hints, 0), "Override", 0}, - {ACPI_DMT_UINT16, ACPI_IORTA_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT8, ACPI_IORTA_OFFSET (MemoryFlags), "Memory Flags (decoded below)", 0}, - {ACPI_DMT_FLAG0, ACPI_IORTA_FLAG_OFFSET (MemoryFlags, 0), "Coherency", 0}, - {ACPI_DMT_FLAG1, ACPI_IORTA_FLAG_OFFSET (MemoryFlags, 0), "Device Attribute", 0}, - ACPI_DMT_TERMINATOR -}; - -/* IORT subtables */ - -/* 0x00: ITS Group */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIort0[] = -{ - {ACPI_DMT_UINT32, ACPI_IORT0_OFFSET (ItsCount), "ItsCount", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoIort0a[] = -{ - {ACPI_DMT_UINT32, 0, "Identifiers", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - -/* 0x01: Named Component */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIort1[] = -{ - {ACPI_DMT_UINT32, ACPI_IORT1_OFFSET (NodeFlags), "Node Flags", 0}, - {ACPI_DMT_IORTMEM, ACPI_IORT1_OFFSET (MemoryProperties), "Memory Properties", 0}, - {ACPI_DMT_UINT8, ACPI_IORT1_OFFSET (MemoryAddressLimit), "Memory Size Limit", 0}, - {ACPI_DMT_STRING, ACPI_IORT1_OFFSET (DeviceName[0]), "Device Name", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoIort1a[] = -{ - {ACPI_DMT_RAW_BUFFER, 0, "Padding", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - -/* 0x02: PCI Root Complex */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIort2[] = -{ - {ACPI_DMT_IORTMEM, ACPI_IORT2_OFFSET (MemoryProperties), "Memory Properties", 0}, - {ACPI_DMT_UINT32, ACPI_IORT2_OFFSET (AtsAttribute), "ATS Attribute", 0}, - {ACPI_DMT_UINT32, ACPI_IORT2_OFFSET (PciSegmentNumber), "PCI Segment Number", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 0x03: SMMUv1/2 */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIort3[] = -{ - {ACPI_DMT_UINT64, ACPI_IORT3_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT64, ACPI_IORT3_OFFSET (Span), "Span", 0}, - {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (Model), "Model", 0}, - {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (Flags), "Flags (decoded below)", 0}, - {ACPI_DMT_FLAG0, ACPI_IORT3_FLAG_OFFSET (Flags, 0), "DVM Supported", 0}, - {ACPI_DMT_FLAG1, ACPI_IORT3_FLAG_OFFSET (Flags, 0), "Coherent Walk", 0}, - {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (GlobalInterruptOffset), "Global Interrupt Offset", 0}, - {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (ContextInterruptCount), "Context Interrupt Count", 0}, - {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (ContextInterruptOffset), "Context Interrupt Offset", 0}, - {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (PmuInterruptCount), "PMU Interrupt Count", 0}, - {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (PmuInterruptOffset), "PMU Interrupt Offset", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoIort3a[] = -{ - {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgIrpt), "NSgIrpt", 0}, - {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgIrptFlags), "NSgIrpt Flags (decoded below)", 0}, - {ACPI_DMT_FLAG0, ACPI_IORT3a_FLAG_OFFSET (NSgIrptFlags, 0), "Edge Triggered", 0}, - {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgCfgIrpt), "NSgCfgIrpt", 0}, - {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgCfgIrptFlags), "NSgCfgIrpt Flags (decoded below)", 0}, - {ACPI_DMT_FLAG0, ACPI_IORT3a_FLAG_OFFSET (NSgCfgIrptFlags, 0), "Edge Triggered", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoIort3b[] = -{ - {ACPI_DMT_UINT64, 0, "Context Interrupt", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoIort3c[] = -{ - {ACPI_DMT_UINT64, 0, "PMU Interrupt", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - -/* 0x04: SMMUv3 */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIort4[] = -{ - {ACPI_DMT_UINT64, ACPI_IORT4_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (Flags), "Flags (decoded below)", 0}, - {ACPI_DMT_FLAG0, ACPI_IORT4_FLAG_OFFSET (Flags, 0), "COHACC Override", 0}, - {ACPI_DMT_FLAG1, ACPI_IORT4_FLAG_OFFSET (Flags, 0), "HTTU Override", 0}, - {ACPI_DMT_FLAG3, ACPI_IORT4_FLAG_OFFSET (Flags, 0), "Proximity Domain Valid", 0}, - {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_IORT4_OFFSET (VatosAddress), "VATOS Address", 0}, - {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (Model), "Model", 0}, - {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (EventGsiv), "Event GSIV", 0}, - {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (PriGsiv), "PRI GSIV", 0}, - {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (GerrGsiv), "GERR GSIV", 0}, - {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (SyncGsiv), "Sync GSIV", 0}, - {ACPI_DMT_UINT8, ACPI_IORT4_OFFSET (Pxm), "Proximity Domain", 0}, - {ACPI_DMT_UINT8, ACPI_IORT4_OFFSET (Reserved1), "Reserved", 0}, - {ACPI_DMT_UINT16, ACPI_IORT4_OFFSET (Reserved2), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/******************************************************************************* - * - * IVRS - I/O Virtualization Reporting Structure - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs[] = -{ - {ACPI_DMT_UINT32, ACPI_IVRS_OFFSET (Info), "Virtualization Info", 0}, - {ACPI_DMT_UINT64, ACPI_IVRS_OFFSET (Reserved), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Common Subtable header (one per Subtable) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIvrsHdr[] = -{ - {ACPI_DMT_IVRS, ACPI_IVRSH_OFFSET (Type), "Subtable Type", 0}, - {ACPI_DMT_UINT8, ACPI_IVRSH_OFFSET (Flags), "Flags", 0}, - {ACPI_DMT_UINT16, ACPI_IVRSH_OFFSET (Length), "Length", DT_LENGTH}, - {ACPI_DMT_UINT16, ACPI_IVRSH_OFFSET (DeviceId), "DeviceId", 0}, - ACPI_DMT_TERMINATOR -}; - -/* IVRS subtables */ - -/* 0x10: I/O Virtualization Hardware Definition (IVHD) Block */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs0[] = -{ - {ACPI_DMT_UINT16, ACPI_IVRS0_OFFSET (CapabilityOffset), "Capability Offset", 0}, - {ACPI_DMT_UINT64, ACPI_IVRS0_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT16, ACPI_IVRS0_OFFSET (PciSegmentGroup), "PCI Segment Group", 0}, - {ACPI_DMT_UINT16, ACPI_IVRS0_OFFSET (Info), "Virtualization Info", 0}, - {ACPI_DMT_UINT32, ACPI_IVRS0_OFFSET (Reserved), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition (IVMD) Block */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs1[] = -{ - {ACPI_DMT_UINT16, ACPI_IVRS1_OFFSET (AuxData), "Auxiliary Data", 0}, - {ACPI_DMT_UINT64, ACPI_IVRS1_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_IVRS1_OFFSET (StartAddress), "Start Address", 0}, - {ACPI_DMT_UINT64, ACPI_IVRS1_OFFSET (MemoryLength), "Memory Length", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Device entry header for IVHD block */ - -#define ACPI_DMT_IVRS_DE_HEADER \ - {ACPI_DMT_UINT8, ACPI_IVRSD_OFFSET (Type), "Entry Type", 0}, \ - {ACPI_DMT_UINT16, ACPI_IVRSD_OFFSET (Id), "Device ID", 0}, \ - {ACPI_DMT_UINT8, ACPI_IVRSD_OFFSET (DataSetting), "Data Setting", 0} - -/* 4-byte device entry */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs4[] = -{ - ACPI_DMT_IVRS_DE_HEADER, - {ACPI_DMT_EXIT, 0, NULL, 0}, -}; - -/* 8-byte device entry */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8a[] = -{ - ACPI_DMT_IVRS_DE_HEADER, - {ACPI_DMT_UINT8, ACPI_IVRS8A_OFFSET (Reserved1), "Reserved", 0}, - {ACPI_DMT_UINT16, ACPI_IVRS8A_OFFSET (UsedId), "Source Used Device ID", 0}, - {ACPI_DMT_UINT8, ACPI_IVRS8A_OFFSET (Reserved2), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 8-byte device entry */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8b[] = -{ - ACPI_DMT_IVRS_DE_HEADER, - {ACPI_DMT_UINT32, ACPI_IVRS8B_OFFSET (ExtendedData), "Extended Data", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 8-byte device entry */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8c[] = -{ - ACPI_DMT_IVRS_DE_HEADER, - {ACPI_DMT_UINT8, ACPI_IVRS8C_OFFSET (Handle), "Handle", 0}, - {ACPI_DMT_UINT16, ACPI_IVRS8C_OFFSET (UsedId), "Source Used Device ID", 0}, - {ACPI_DMT_UINT8, ACPI_IVRS8C_OFFSET (Variety), "Variety", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * LPIT - Low Power Idle Table - * - ******************************************************************************/ - -/* Main table consists only of the standard ACPI table header */ - -/* Common Subtable header (one per Subtable) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoLpitHdr[] = -{ - {ACPI_DMT_LPIT, ACPI_LPITH_OFFSET (Type), "Subtable Type", 0}, - {ACPI_DMT_UINT32, ACPI_LPITH_OFFSET (Length), "Length", DT_LENGTH}, - {ACPI_DMT_UINT16, ACPI_LPITH_OFFSET (UniqueId), "Unique ID", 0}, - {ACPI_DMT_UINT16, ACPI_LPITH_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_LPITH_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_LPITH_FLAG_OFFSET (Flags, 0), "State Disabled", 0}, - {ACPI_DMT_FLAG1, ACPI_LPITH_FLAG_OFFSET (Flags, 0), "No Counter", 0}, - ACPI_DMT_TERMINATOR -}; - -/* LPIT Subtables */ - -/* 0: Native C-state */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoLpit0[] = -{ - {ACPI_DMT_GAS, ACPI_LPIT0_OFFSET (EntryTrigger), "Entry Trigger", 0}, - {ACPI_DMT_UINT32, ACPI_LPIT0_OFFSET (Residency), "Residency", 0}, - {ACPI_DMT_UINT32, ACPI_LPIT0_OFFSET (Latency), "Latency", 0}, - {ACPI_DMT_GAS, ACPI_LPIT0_OFFSET (ResidencyCounter), "Residency Counter", 0}, - {ACPI_DMT_UINT64, ACPI_LPIT0_OFFSET (CounterFrequency), "Counter Frequency", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * MADT - Multiple APIC Description Table and subtables - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt[] = -{ - {ACPI_DMT_UINT32, ACPI_MADT_OFFSET (Address), "Local Apic Address", 0}, - {ACPI_DMT_UINT32, ACPI_MADT_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_MADT_FLAG_OFFSET (Flags,0), "PC-AT Compatibility", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Common Subtable header (one per Subtable) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadtHdr[] = -{ - {ACPI_DMT_MADT, ACPI_MADTH_OFFSET (Type), "Subtable Type", 0}, - {ACPI_DMT_UINT8, ACPI_MADTH_OFFSET (Length), "Length", DT_LENGTH}, - ACPI_DMT_TERMINATOR -}; - -/* MADT Subtables */ - -/* 0: processor APIC */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt0[] = -{ - {ACPI_DMT_UINT8, ACPI_MADT0_OFFSET (ProcessorId), "Processor ID", 0}, - {ACPI_DMT_UINT8, ACPI_MADT0_OFFSET (Id), "Local Apic ID", 0}, - {ACPI_DMT_UINT32, ACPI_MADT0_OFFSET (LapicFlags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_MADT0_FLAG_OFFSET (LapicFlags,0), "Processor Enabled", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 1: IO APIC */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt1[] = -{ - {ACPI_DMT_UINT8, ACPI_MADT1_OFFSET (Id), "I/O Apic ID", 0}, - {ACPI_DMT_UINT8, ACPI_MADT1_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_MADT1_OFFSET (Address), "Address", 0}, - {ACPI_DMT_UINT32, ACPI_MADT1_OFFSET (GlobalIrqBase), "Interrupt", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 2: Interrupt Override */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt2[] = -{ - {ACPI_DMT_UINT8, ACPI_MADT2_OFFSET (Bus), "Bus", 0}, - {ACPI_DMT_UINT8, ACPI_MADT2_OFFSET (SourceIrq), "Source", 0}, - {ACPI_DMT_UINT32, ACPI_MADT2_OFFSET (GlobalIrq), "Interrupt", 0}, - {ACPI_DMT_UINT16, ACPI_MADT2_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAGS0, ACPI_MADT2_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, - {ACPI_DMT_FLAGS2, ACPI_MADT2_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 3: NMI Sources */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt3[] = -{ - {ACPI_DMT_UINT16, ACPI_MADT3_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAGS0, ACPI_MADT3_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, - {ACPI_DMT_FLAGS2, ACPI_MADT3_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, - {ACPI_DMT_UINT32, ACPI_MADT3_OFFSET (GlobalIrq), "Interrupt", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 4: Local APIC NMI */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt4[] = -{ - {ACPI_DMT_UINT8, ACPI_MADT4_OFFSET (ProcessorId), "Processor ID", 0}, - {ACPI_DMT_UINT16, ACPI_MADT4_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAGS0, ACPI_MADT4_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, - {ACPI_DMT_FLAGS2, ACPI_MADT4_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, - {ACPI_DMT_UINT8, ACPI_MADT4_OFFSET (Lint), "Interrupt Input LINT", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 5: Address Override */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt5[] = -{ - {ACPI_DMT_UINT16, ACPI_MADT5_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_MADT5_OFFSET (Address), "APIC Address", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 6: I/O Sapic */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt6[] = -{ - {ACPI_DMT_UINT8, ACPI_MADT6_OFFSET (Id), "I/O Sapic ID", 0}, - {ACPI_DMT_UINT8, ACPI_MADT6_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_MADT6_OFFSET (GlobalIrqBase), "Interrupt Base", 0}, - {ACPI_DMT_UINT64, ACPI_MADT6_OFFSET (Address), "Address", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 7: Local Sapic */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt7[] = -{ - {ACPI_DMT_UINT8, ACPI_MADT7_OFFSET (ProcessorId), "Processor ID", 0}, - {ACPI_DMT_UINT8, ACPI_MADT7_OFFSET (Id), "Local Sapic ID", 0}, - {ACPI_DMT_UINT8, ACPI_MADT7_OFFSET (Eid), "Local Sapic EID", 0}, - {ACPI_DMT_UINT24, ACPI_MADT7_OFFSET (Reserved[0]), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_MADT7_OFFSET (LapicFlags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_MADT7_FLAG_OFFSET (LapicFlags,0), "Processor Enabled", 0}, - {ACPI_DMT_UINT32, ACPI_MADT7_OFFSET (Uid), "Processor UID", 0}, - {ACPI_DMT_STRING, ACPI_MADT7_OFFSET (UidString[0]), "Processor UID String", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 8: Platform Interrupt Source */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt8[] = -{ - {ACPI_DMT_UINT16, ACPI_MADT8_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAGS0, ACPI_MADT8_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, - {ACPI_DMT_FLAGS2, ACPI_MADT8_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, - {ACPI_DMT_UINT8, ACPI_MADT8_OFFSET (Type), "InterruptType", 0}, - {ACPI_DMT_UINT8, ACPI_MADT8_OFFSET (Id), "Processor ID", 0}, - {ACPI_DMT_UINT8, ACPI_MADT8_OFFSET (Eid), "Processor EID", 0}, - {ACPI_DMT_UINT8, ACPI_MADT8_OFFSET (IoSapicVector), "I/O Sapic Vector", 0}, - {ACPI_DMT_UINT32, ACPI_MADT8_OFFSET (GlobalIrq), "Interrupt", 0}, - {ACPI_DMT_UINT32, ACPI_MADT8_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_MADT8_OFFSET (Flags), "CPEI Override", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 9: Processor Local X2_APIC (ACPI 4.0) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt9[] = -{ - {ACPI_DMT_UINT16, ACPI_MADT9_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_MADT9_OFFSET (LocalApicId), "Processor x2Apic ID", 0}, - {ACPI_DMT_UINT32, ACPI_MADT9_OFFSET (LapicFlags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_MADT9_FLAG_OFFSET (LapicFlags,0), "Processor Enabled", 0}, - {ACPI_DMT_UINT32, ACPI_MADT9_OFFSET (Uid), "Processor UID", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 10: Local X2_APIC NMI (ACPI 4.0) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt10[] = -{ - {ACPI_DMT_UINT16, ACPI_MADT10_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAGS0, ACPI_MADT10_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, - {ACPI_DMT_FLAGS2, ACPI_MADT10_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, - {ACPI_DMT_UINT32, ACPI_MADT10_OFFSET (Uid), "Processor UID", 0}, - {ACPI_DMT_UINT8, ACPI_MADT10_OFFSET (Lint), "Interrupt Input LINT", 0}, - {ACPI_DMT_UINT24, ACPI_MADT10_OFFSET (Reserved[0]), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 11: Generic Interrupt Controller (ACPI 5.0) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt11[] = -{ - {ACPI_DMT_UINT16, ACPI_MADT11_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (CpuInterfaceNumber), "CPU Interface Number", 0}, - {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (Uid), "Processor UID", 0}, - {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Processor Enabled", 0}, - {ACPI_DMT_FLAG1, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Performance Interrupt Trigger Mode", 0}, - {ACPI_DMT_FLAG2, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Virtual GIC Interrupt Trigger Mode", 0}, - {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (ParkingVersion), "Parking Protocol Version", 0}, - {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (PerformanceInterrupt), "Performance Interrupt", 0}, - {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (ParkedAddress), "Parked Address", 0}, - {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GicvBaseAddress), "Virtual GIC Base Address", 0}, - {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GichBaseAddress), "Hypervisor GIC Base Address", 0}, - {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (VgicInterrupt), "Virtual GIC Interrupt", 0}, - {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GicrBaseAddress), "Redistributor Base Address", 0}, - {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (ArmMpidr), "ARM MPIDR", 0}, - {ACPI_DMT_UINT8, ACPI_MADT11_OFFSET (EfficiencyClass), "Efficiency Class", 0}, - {ACPI_DMT_UINT24, ACPI_MADT11_OFFSET (Reserved2[0]), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 12: Generic Interrupt Distributor (ACPI 5.0) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt12[] = -{ - {ACPI_DMT_UINT16, ACPI_MADT12_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_MADT12_OFFSET (GicId), "Local GIC Hardware ID", 0}, - {ACPI_DMT_UINT64, ACPI_MADT12_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT32, ACPI_MADT12_OFFSET (GlobalIrqBase), "Interrupt Base", 0}, - {ACPI_DMT_UINT8, ACPI_MADT12_OFFSET (Version), "Version", 0}, - {ACPI_DMT_UINT24, ACPI_MADT12_OFFSET (Reserved2[0]), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 13: Generic MSI Frame (ACPI 5.1) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt13[] = -{ - {ACPI_DMT_UINT16, ACPI_MADT13_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_MADT13_OFFSET (MsiFrameId), "MSI Frame ID", 0}, - {ACPI_DMT_UINT64, ACPI_MADT13_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT32, ACPI_MADT13_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_MADT13_FLAG_OFFSET (Flags,0), "Select SPI", 0}, - {ACPI_DMT_UINT16, ACPI_MADT13_OFFSET (SpiCount), "SPI Count", 0}, - {ACPI_DMT_UINT16, ACPI_MADT13_OFFSET (SpiBase), "SPI Base", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 14: Generic Redistributor (ACPI 5.1) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt14[] = -{ - {ACPI_DMT_UINT16, ACPI_MADT14_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_MADT14_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT32, ACPI_MADT14_OFFSET (Length), "Length", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 15: Generic Translator (ACPI 6.0) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt15[] = -{ - {ACPI_DMT_UINT16, ACPI_MADT15_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_MADT15_OFFSET (TranslationId), "Translation ID", 0}, - {ACPI_DMT_UINT64, ACPI_MADT15_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT32, ACPI_MADT15_OFFSET (Reserved2), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/******************************************************************************* - * - * MCFG - PCI Memory Mapped Configuration table and Subtable - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMcfg[] = -{ - {ACPI_DMT_UINT64, ACPI_MCFG_OFFSET (Reserved[0]), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoMcfg0[] = -{ - {ACPI_DMT_UINT64, ACPI_MCFG0_OFFSET (Address), "Base Address", 0}, - {ACPI_DMT_UINT16, ACPI_MCFG0_OFFSET (PciSegment), "Segment Group Number", 0}, - {ACPI_DMT_UINT8, ACPI_MCFG0_OFFSET (StartBusNumber), "Start Bus Number", 0}, - {ACPI_DMT_UINT8, ACPI_MCFG0_OFFSET (EndBusNumber), "End Bus Number", 0}, - {ACPI_DMT_UINT32, ACPI_MCFG0_OFFSET (Reserved), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * MCHI - Management Controller Host Interface table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMchi[] = -{ - {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (InterfaceType), "Interface Type", 0}, - {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (Protocol), "Protocol", 0}, - {ACPI_DMT_UINT64, ACPI_MCHI_OFFSET (ProtocolData), "Protocol Data", 0}, - {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (InterruptType), "Interrupt Type", 0}, - {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (Gpe), "Gpe", 0}, - {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciDeviceFlag), "Pci Device Flag", 0}, - {ACPI_DMT_UINT32, ACPI_MCHI_OFFSET (GlobalInterrupt), "Global Interrupt", 0}, - {ACPI_DMT_GAS, ACPI_MCHI_OFFSET (ControlRegister), "Control Register", 0}, - {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciSegment), "Pci Segment", 0}, - {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciBus), "Pci Bus", 0}, - {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciDevice), "Pci Device", 0}, - {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciFunction), "Pci Function", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * MPST - Memory Power State Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMpst[] = -{ - {ACPI_DMT_UINT8, ACPI_MPST_OFFSET (ChannelId), "Channel ID", 0}, - {ACPI_DMT_UINT24, ACPI_MPST_OFFSET (Reserved1[0]), "Reserved", 0}, - {ACPI_DMT_UINT16, ACPI_MPST_OFFSET (PowerNodeCount), "Power Node Count", 0}, - {ACPI_DMT_UINT16, ACPI_MPST_OFFSET (Reserved2), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* MPST subtables */ - -/* 0: Memory Power Node Structure */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMpst0[] = -{ - {ACPI_DMT_UINT8, ACPI_MPST0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_MPST0_FLAG_OFFSET (Flags,0), "Node Enabled", 0}, - {ACPI_DMT_FLAG1, ACPI_MPST0_FLAG_OFFSET (Flags,0), "Power Managed", 0}, - {ACPI_DMT_FLAG2, ACPI_MPST0_FLAG_OFFSET (Flags,0), "Hot Plug Capable", 0}, - - {ACPI_DMT_UINT8, ACPI_MPST0_OFFSET (Reserved1), "Reserved", 0}, - {ACPI_DMT_UINT16, ACPI_MPST0_OFFSET (NodeId), "Node ID", 0}, - {ACPI_DMT_UINT32, ACPI_MPST0_OFFSET (Length), "Length", 0}, - {ACPI_DMT_UINT64, ACPI_MPST0_OFFSET (RangeAddress), "Range Address", 0}, - {ACPI_DMT_UINT64, ACPI_MPST0_OFFSET (RangeLength), "Range Length", 0}, - {ACPI_DMT_UINT32, ACPI_MPST0_OFFSET (NumPowerStates), "Num Power States", 0}, - {ACPI_DMT_UINT32, ACPI_MPST0_OFFSET (NumPhysicalComponents), "Num Physical Components", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 0A: Sub-subtable - Memory Power State Structure (follows Memory Power Node above) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMpst0A[] = -{ - {ACPI_DMT_UINT8, ACPI_MPST0A_OFFSET (PowerState), "Power State", 0}, - {ACPI_DMT_UINT8, ACPI_MPST0A_OFFSET (InfoIndex), "InfoIndex", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 0B: Sub-subtable - Physical Component ID Structure (follows Memory Power State(s) above) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMpst0B[] = -{ - {ACPI_DMT_UINT16, ACPI_MPST0B_OFFSET (ComponentId), "Component Id", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 01: Power Characteristics Count (follows all Power Node(s) above) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMpst1[] = -{ - {ACPI_DMT_UINT16, ACPI_MPST1_OFFSET (CharacteristicsCount), "Characteristics Count", 0}, - {ACPI_DMT_UINT16, ACPI_MPST1_OFFSET (Reserved), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 02: Memory Power State Characteristics Structure */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMpst2[] = -{ - {ACPI_DMT_UINT8, ACPI_MPST2_OFFSET (StructureId), "Structure ID", 0}, - {ACPI_DMT_UINT8, ACPI_MPST2_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_MPST2_FLAG_OFFSET (Flags,0), "Memory Preserved", 0}, - {ACPI_DMT_FLAG1, ACPI_MPST2_FLAG_OFFSET (Flags,0), "Auto Entry", 0}, - {ACPI_DMT_FLAG2, ACPI_MPST2_FLAG_OFFSET (Flags,0), "Auto Exit", 0}, - - {ACPI_DMT_UINT16, ACPI_MPST2_OFFSET (Reserved1), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_MPST2_OFFSET (AveragePower), "Average Power", 0}, - {ACPI_DMT_UINT32, ACPI_MPST2_OFFSET (PowerSaving), "Power Saving", 0}, - {ACPI_DMT_UINT64, ACPI_MPST2_OFFSET (ExitLatency), "Exit Latency", 0}, - {ACPI_DMT_UINT64, ACPI_MPST2_OFFSET (Reserved2), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * MSCT - Maximum System Characteristics Table (ACPI 4.0) - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMsct[] = -{ - {ACPI_DMT_UINT32, ACPI_MSCT_OFFSET (ProximityOffset), "Proximity Offset", 0}, - {ACPI_DMT_UINT32, ACPI_MSCT_OFFSET (MaxProximityDomains), "Max Proximity Domains", 0}, - {ACPI_DMT_UINT32, ACPI_MSCT_OFFSET (MaxClockDomains), "Max Clock Domains", 0}, - {ACPI_DMT_UINT64, ACPI_MSCT_OFFSET (MaxAddress), "Max Physical Address", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Subtable - Maximum Proximity Domain Information. Version 1 */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMsct0[] = -{ - {ACPI_DMT_UINT8, ACPI_MSCT0_OFFSET (Revision), "Revision", 0}, - {ACPI_DMT_UINT8, ACPI_MSCT0_OFFSET (Length), "Length", DT_LENGTH}, - {ACPI_DMT_UINT32, ACPI_MSCT0_OFFSET (RangeStart), "Domain Range Start", 0}, - {ACPI_DMT_UINT32, ACPI_MSCT0_OFFSET (RangeEnd), "Domain Range End", 0}, - {ACPI_DMT_UINT32, ACPI_MSCT0_OFFSET (ProcessorCapacity), "Processor Capacity", 0}, - {ACPI_DMT_UINT64, ACPI_MSCT0_OFFSET (MemoryCapacity), "Memory Capacity", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * MTMR - MID Timer Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMtmr[] = -{ - ACPI_DMT_TERMINATOR -}; - -/* MTMR Subtables - MTMR Entry */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMtmr0[] = -{ - {ACPI_DMT_GAS, ACPI_MTMR0_OFFSET (PhysicalAddress), "PhysicalAddress", 0}, - {ACPI_DMT_UINT32, ACPI_MTMR0_OFFSET (Frequency), "Frequency", 0}, - {ACPI_DMT_UINT32, ACPI_MTMR0_OFFSET (Irq), "IRQ", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * NFIT - NVDIMM Firmware Interface Table and Subtables - (ACPI 6.0) - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit[] = -{ - {ACPI_DMT_UINT32, ACPI_NFIT_OFFSET (Reserved), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Common Subtable header */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoNfitHdr[] = -{ - {ACPI_DMT_NFIT, ACPI_NFITH_OFFSET (Type), "Subtable Type", 0}, - {ACPI_DMT_UINT16, ACPI_NFITH_OFFSET (Length), "Length", DT_LENGTH}, - ACPI_DMT_TERMINATOR -}; - -/* 0: System Physical Address Range Structure */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit0[] = -{ - {ACPI_DMT_UINT16, ACPI_NFIT0_OFFSET (RangeIndex), "Range Index", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_NFIT0_FLAG_OFFSET (Flags,0), "Add/Online Operation Only", 0}, - {ACPI_DMT_FLAG1, ACPI_NFIT0_FLAG_OFFSET (Flags,0), "Proximity Domain Valid", 0}, - {ACPI_DMT_UINT32, ACPI_NFIT0_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_NFIT0_OFFSET (ProximityDomain), "Proximity Domain", 0}, - {ACPI_DMT_UUID, ACPI_NFIT0_OFFSET (RangeGuid[0]), "Address Range GUID", 0}, - {ACPI_DMT_UINT64, ACPI_NFIT0_OFFSET (Address), "Address Range Base", 0}, - {ACPI_DMT_UINT64, ACPI_NFIT0_OFFSET (Length), "Address Range Length", 0}, - {ACPI_DMT_UINT64, ACPI_NFIT0_OFFSET (MemoryMapping), "Memory Map Attribute", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 1: Memory Device to System Address Range Map Structure */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit1[] = -{ - {ACPI_DMT_UINT32, ACPI_NFIT1_OFFSET (DeviceHandle), "Device Handle", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (PhysicalId), "Physical Id", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (RegionId), "Region Id", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (RangeIndex), "Range Index", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (RegionIndex), "Control Region Index", 0}, - {ACPI_DMT_UINT64, ACPI_NFIT1_OFFSET (RegionSize), "Region Size", 0}, - {ACPI_DMT_UINT64, ACPI_NFIT1_OFFSET (RegionOffset), "Region Offset", 0}, - {ACPI_DMT_UINT64, ACPI_NFIT1_OFFSET (Address), "Address Region Base", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (InterleaveIndex), "Interleave Index", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (InterleaveWays), "Interleave Ways", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (Flags), "Flags", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Save to device failed", 0}, - {ACPI_DMT_FLAG1, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Restore from device failed", 0}, - {ACPI_DMT_FLAG2, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Platform flush failed", 0}, - {ACPI_DMT_FLAG3, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Device not armed", 0}, - {ACPI_DMT_FLAG4, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Health events observed", 0}, - {ACPI_DMT_FLAG5, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Health events enabled", 0}, - {ACPI_DMT_FLAG6, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Mapping failed", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (Reserved), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 2: Interleave Structure */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit2[] = -{ - {ACPI_DMT_UINT16, ACPI_NFIT2_OFFSET (InterleaveIndex), "Interleave Index", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT2_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_NFIT2_OFFSET (LineCount), "Line Count", 0}, - {ACPI_DMT_UINT32, ACPI_NFIT2_OFFSET (LineSize), "Line Size", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit2a[] = -{ - {ACPI_DMT_UINT32, 0, "Line Offset", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - -/* 3: SMBIOS Management Information Structure */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit3[] = -{ - {ACPI_DMT_UINT32, ACPI_NFIT3_OFFSET (Reserved), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit3a[] = -{ - {ACPI_DMT_RAW_BUFFER, 0, "SMBIOS Table Entries", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - -/* 4: NVDIMM Control Region Structure */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit4[] = -{ - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (RegionIndex), "Region Index", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (VendorId), "Vendor Id", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (DeviceId), "Device Id", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (RevisionId), "Revision Id", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (SubsystemVendorId), "Subsystem Vendor Id", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (SubsystemDeviceId), "Subsystem Device Id", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (SubsystemRevisionId), "Subsystem Revision Id", 0}, - {ACPI_DMT_UINT8, ACPI_NFIT4_OFFSET (ValidFields), "Valid Fields", 0}, - {ACPI_DMT_UINT8, ACPI_NFIT4_OFFSET (ManufacturingLocation), "Manufacturing Location", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (ManufacturingDate), "Manufacturing Date", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Reserved[0]), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_NFIT4_OFFSET (SerialNumber), "Serial Number", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Code), "Code", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Windows), "Window Count", 0}, - {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (WindowSize), "Window Size", 0}, - {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (CommandOffset), "Command Offset", 0}, - {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (CommandSize), "Command Size", 0}, - {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (StatusOffset), "Status Offset", 0}, - {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (StatusSize), "Status Size", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Flags), "Flags", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_NFIT4_FLAG_OFFSET (Flags,0), "Windows buffered", 0}, - {ACPI_DMT_UINT48, ACPI_NFIT4_OFFSET (Reserved1[0]), "Reserved1", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 5: NVDIMM Block Data Window Region Structure */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit5[] = -{ - {ACPI_DMT_UINT16, ACPI_NFIT5_OFFSET (RegionIndex), "Region Index", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT5_OFFSET (Windows), "Window Count", 0}, - {ACPI_DMT_UINT64, ACPI_NFIT5_OFFSET (Offset), "Offset", 0}, - {ACPI_DMT_UINT64, ACPI_NFIT5_OFFSET (Size), "Size", 0}, - {ACPI_DMT_UINT64, ACPI_NFIT5_OFFSET (Capacity), "Capacity", 0}, - {ACPI_DMT_UINT64, ACPI_NFIT5_OFFSET (StartAddress), "Start Address", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 6: Flush Hint Address Structure */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit6[] = -{ - {ACPI_DMT_UINT32, ACPI_NFIT6_OFFSET (DeviceHandle), "Device Handle", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT6_OFFSET (HintCount), "Hint Count", 0}, - {ACPI_DMT_UINT48, ACPI_NFIT6_OFFSET (Reserved[0]), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit6a[] = -{ - {ACPI_DMT_UINT64, 0, "Hint Address", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * PCCT - Platform Communications Channel Table (ACPI 5.0) - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPcct[] = -{ - {ACPI_DMT_UINT32, ACPI_PCCT_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_PCCT_FLAG_OFFSET (Flags,0), "Platform", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT_OFFSET (Reserved), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* PCCT subtables */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPcctHdr[] = -{ - {ACPI_DMT_PCCT, ACPI_PCCT0_OFFSET (Header.Type), "Subtable Type", 0}, - {ACPI_DMT_UINT8, ACPI_PCCT0_OFFSET (Header.Length), "Length", DT_LENGTH}, - ACPI_DMT_TERMINATOR -}; - -/* 0: Generic Communications Subspace */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPcct0[] = -{ - {ACPI_DMT_UINT48, ACPI_PCCT0_OFFSET (Reserved[0]), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT0_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT0_OFFSET (Length), "Address Length", 0}, - {ACPI_DMT_GAS, ACPI_PCCT0_OFFSET (DoorbellRegister), "Doorbell Register", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT0_OFFSET (PreserveMask), "Preserve Mask", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT0_OFFSET (WriteMask), "Write Mask", 0}, - {ACPI_DMT_UINT32, ACPI_PCCT0_OFFSET (Latency), "Command Latency", 0}, - {ACPI_DMT_UINT32, ACPI_PCCT0_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, - {ACPI_DMT_UINT16, ACPI_PCCT0_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 1: HW-reduced Communications Subspace (ACPI 5.1) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPcct1[] = -{ - {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (PlatformInterrupt), "Platform Interrupt", 0}, - {ACPI_DMT_UINT8, ACPI_PCCT1_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_PCCT1_FLAG_OFFSET (Flags,0), "Polarity", 0}, - {ACPI_DMT_FLAG1, ACPI_PCCT1_FLAG_OFFSET (Flags,0), "Mode", 0}, - {ACPI_DMT_UINT8, ACPI_PCCT1_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (Length), "Address Length", 0}, - {ACPI_DMT_GAS, ACPI_PCCT1_OFFSET (DoorbellRegister), "Doorbell Register", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (PreserveMask), "Preserve Mask", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (WriteMask), "Write Mask", 0}, - {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (Latency), "Command Latency", 0}, - {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, - {ACPI_DMT_UINT16, ACPI_PCCT1_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPcct2[] = -{ - {ACPI_DMT_UINT32, ACPI_PCCT2_OFFSET (PlatformInterrupt), "Platform Interrupt", 0}, - {ACPI_DMT_UINT8, ACPI_PCCT2_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_PCCT2_FLAG_OFFSET (Flags,0), "Polarity", 0}, - {ACPI_DMT_FLAG1, ACPI_PCCT2_FLAG_OFFSET (Flags,0), "Mode", 0}, - {ACPI_DMT_UINT8, ACPI_PCCT2_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (Length), "Address Length", 0}, - {ACPI_DMT_GAS, ACPI_PCCT2_OFFSET (DoorbellRegister), "Doorbell Register", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (PreserveMask), "Preserve Mask", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (WriteMask), "Write Mask", 0}, - {ACPI_DMT_UINT32, ACPI_PCCT2_OFFSET (Latency), "Command Latency", 0}, - {ACPI_DMT_UINT32, ACPI_PCCT2_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, - {ACPI_DMT_UINT16, ACPI_PCCT2_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, - {ACPI_DMT_GAS, ACPI_PCCT2_OFFSET (PlatformAckRegister), "Platform ACK Register", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (AckPreserveMask), "ACK Preserve Mask", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (AckWriteMask), "ACK Write Mask", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPcct3[] = -{ - {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (PlatformInterrupt), "Platform Interrupt", 0}, - {ACPI_DMT_UINT8, ACPI_PCCT3_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_PCCT3_FLAG_OFFSET (Flags,0), "Polarity", 0}, - {ACPI_DMT_FLAG1, ACPI_PCCT3_FLAG_OFFSET (Flags,0), "Mode", 0}, - {ACPI_DMT_UINT8, ACPI_PCCT3_OFFSET (Reserved1), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (Length), "Address Length", 0}, - {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (DoorbellRegister), "Doorbell Register", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (PreserveMask), "Preserve Mask", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (WriteMask), "Write Mask", 0}, - {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (Latency), "Command Latency", 0}, - {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, - {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, - {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (PlatformAckRegister), "Platform ACK Register", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (AckPreserveMask), "ACK Preserve Mask", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (AckSetMask), "ACK Set Mask", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (Reserved2), "Reserved", 0}, - {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (CmdCompleteRegister), "Command Complete Register", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (CmdCompleteMask), "Command Complete Check Mask", 0}, - {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (CmdUpdateRegister), "Command Update Register", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (CmdUpdatePreserveMask), "Command Update Preserve Mask", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (CmdUpdateSetMask), "Command Update Set Mask", 0}, - {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (ErrorStatusRegister), "Error Status Register", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (ErrorStatusMask), "Error Status Mask", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPcct4[] = -{ - {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (PlatformInterrupt), "Platform Interrupt", 0}, - {ACPI_DMT_UINT8, ACPI_PCCT4_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_PCCT4_FLAG_OFFSET (Flags,0), "Polarity", 0}, - {ACPI_DMT_FLAG1, ACPI_PCCT4_FLAG_OFFSET (Flags,0), "Mode", 0}, - {ACPI_DMT_UINT8, ACPI_PCCT4_OFFSET (Reserved1), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (Length), "Address Length", 0}, - {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (DoorbellRegister), "Doorbell Register", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (PreserveMask), "Preserve Mask", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (WriteMask), "Write Mask", 0}, - {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (Latency), "Command Latency", 0}, - {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, - {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, - {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (PlatformAckRegister), "Platform ACK Register", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (AckPreserveMask), "ACK Preserve Mask", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (AckSetMask), "ACK Set Mask", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (Reserved2), "Reserved", 0}, - {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (CmdCompleteRegister), "Command Complete Register", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (CmdCompleteMask), "Command Complete Check Mask", 0}, - {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (CmdUpdateRegister), "Command Update Register", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (CmdUpdatePreserveMask), "Command Update Preserve Mask", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (CmdUpdateSetMask), "Command Update Set Mask", 0}, - {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (ErrorStatusRegister), "Error Status Register", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (ErrorStatusMask), "Error Status Mask", 0}, - ACPI_DMT_TERMINATOR -}; - -/******************************************************************************* - * - * PMTT - Platform Memory Topology Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt[] = -{ - {ACPI_DMT_UINT32, ACPI_PMTT_OFFSET (Reserved), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Common Subtable header (one per Subtable) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPmttHdr[] = -{ - {ACPI_DMT_PMTT, ACPI_PMTTH_OFFSET (Type), "Subtable Type", 0}, - {ACPI_DMT_UINT8, ACPI_PMTTH_OFFSET (Reserved1), "Reserved", 0}, - {ACPI_DMT_UINT16, ACPI_PMTTH_OFFSET (Length), "Length", DT_LENGTH}, - {ACPI_DMT_UINT16, ACPI_PMTTH_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_PMTTH_FLAG_OFFSET (Flags,0), "Top-level Device", 0}, - {ACPI_DMT_FLAG1, ACPI_PMTTH_FLAG_OFFSET (Flags,0), "Physical Element", 0}, - {ACPI_DMT_FLAGS2, ACPI_PMTTH_FLAG_OFFSET (Flags,0), "Memory Type", 0}, - {ACPI_DMT_UINT16, ACPI_PMTTH_OFFSET (Reserved2), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* PMTT Subtables */ - -/* 0: Socket */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt0[] = -{ - {ACPI_DMT_UINT16, ACPI_PMTT0_OFFSET (SocketId), "Socket ID", 0}, - {ACPI_DMT_UINT16, ACPI_PMTT0_OFFSET (Reserved), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 1: Memory Controller */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt1[] = -{ - {ACPI_DMT_UINT32, ACPI_PMTT1_OFFSET (ReadLatency), "Read Latency", 0}, - {ACPI_DMT_UINT32, ACPI_PMTT1_OFFSET (WriteLatency), "Write Latency", 0}, - {ACPI_DMT_UINT32, ACPI_PMTT1_OFFSET (ReadBandwidth), "Read Bandwidth", 0}, - {ACPI_DMT_UINT32, ACPI_PMTT1_OFFSET (WriteBandwidth), "Write Bandwidth", 0}, - {ACPI_DMT_UINT16, ACPI_PMTT1_OFFSET (AccessWidth), "Access Width", 0}, - {ACPI_DMT_UINT16, ACPI_PMTT1_OFFSET (Alignment), "Alignment", 0}, - {ACPI_DMT_UINT16, ACPI_PMTT1_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT16, ACPI_PMTT1_OFFSET (DomainCount), "Domain Count", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 1a: Proximity Domain */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt1a[] = -{ - {ACPI_DMT_UINT32, ACPI_PMTT1A_OFFSET (ProximityDomain), "Proximity Domain", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 2: Physical Component */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt2[] = -{ - {ACPI_DMT_UINT16, ACPI_PMTT2_OFFSET (ComponentId), "Component ID", 0}, - {ACPI_DMT_UINT16, ACPI_PMTT2_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_PMTT2_OFFSET (MemorySize), "Memory Size", 0}, - {ACPI_DMT_UINT32, ACPI_PMTT2_OFFSET (BiosHandle), "Bios Handle", 0}, - ACPI_DMT_TERMINATOR -}; - -/******************************************************************************* - * - * SDEI - Software Delegated Execption Interface Descriptor Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoSdei[] = -{ - ACPI_DMT_TERMINATOR -}; - -/******************************************************************************* - * - * PPTT - Processor Properties Topology Table (ACPI 6.2) - * - ******************************************************************************/ - -/* Main table consists of only the standard ACPI header - subtables follow */ - -/* Common Subtable header (one per Subtable) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPpttHdr[] = -{ - {ACPI_DMT_PPTT, ACPI_PPTTH_OFFSET (Type), "Subtable Type", 0}, - {ACPI_DMT_UINT8, ACPI_PPTTH_OFFSET (Length), "Length", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 0: Processor hierarchy node */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPptt0[] = -{ - {ACPI_DMT_UINT16, ACPI_PPTT0_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (Flags), "Flags", 0}, - {ACPI_DMT_FLAG0, ACPI_PPTT0_FLAG_OFFSET (Flags,0), "Physical package", 0}, - {ACPI_DMT_FLAG1, ACPI_PPTT0_FLAG_OFFSET (Flags,0), "ACPI Processor ID valid", 0}, - {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (Parent), "Parent", 0}, - {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (AcpiProcessorId), "ACPI Processor ID", 0}, - {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (NumberOfPrivResources), "Private Resource Number", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoPptt0a[] = -{ - {ACPI_DMT_UINT32, 0, "Private Resource", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - -/* 1: Cache type */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPptt1[] = -{ - {ACPI_DMT_UINT16, ACPI_PPTT1_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (Flags), "Flags", 0}, - {ACPI_DMT_FLAG0, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Size valid", 0}, - {ACPI_DMT_FLAG1, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Number of Sets valid", 0}, - {ACPI_DMT_FLAG2, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Associativity valid", 0}, - {ACPI_DMT_FLAG3, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Allocation Type valid", 0}, - {ACPI_DMT_FLAG4, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Cache Type valid", 0}, - {ACPI_DMT_FLAG5, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Write Policy valid", 0}, - {ACPI_DMT_FLAG6, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Line Size valid", 0}, - {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (NextLevelOfCache), "Next Level of Cache", 0}, - {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (Size), "Size", 0}, - {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (NumberOfSets), "Number of Sets", 0}, - {ACPI_DMT_UINT8, ACPI_PPTT1_OFFSET (Associativity), "Associativity", 0}, - {ACPI_DMT_UINT8, ACPI_PPTT1_OFFSET (Attributes), "Attributes", 0}, - {ACPI_DMT_FLAGS0, ACPI_PPTT1_OFFSET (Attributes), "Allocation Type", 0}, - {ACPI_DMT_FLAGS2, ACPI_PPTT1_OFFSET (Attributes), "Cache Type", 0}, - {ACPI_DMT_FLAG4, ACPI_PPTT1_OFFSET (Attributes), "Write Policy", 0}, - {ACPI_DMT_UINT16, ACPI_PPTT1_OFFSET (LineSize), "Line Size", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 2: ID */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPptt2[] = -{ - {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_PPTT2_OFFSET (VendorId), "VENDOR_ID", 0}, - {ACPI_DMT_UINT64, ACPI_PPTT2_OFFSET (Level1Id), "LEVEL_1_ID", 0}, - {ACPI_DMT_UINT64, ACPI_PPTT2_OFFSET (Level2Id), "LEVEL_2_ID", 0}, - {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (MajorRev), "MAJOR_REV", 0}, - {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (MinorRev), "MINOR_REV", 0}, - {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (SpinRev), "SPIN_REV", 0}, - ACPI_DMT_TERMINATOR -}; - -/******************************************************************************* - * - * RASF - RAS Feature table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoRasf[] = -{ - {ACPI_DMT_BUF12, ACPI_RASF_OFFSET (ChannelId[0]), "Channel ID", 0}, - ACPI_DMT_TERMINATOR -}; - -/******************************************************************************* - * - * S3PT - S3 Performance Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoS3pt[] = -{ - {ACPI_DMT_SIG, ACPI_S3PT_OFFSET (Signature[0]), "Signature", 0}, - {ACPI_DMT_UINT32, ACPI_S3PT_OFFSET (Length), "Length", DT_LENGTH}, - ACPI_DMT_TERMINATOR -}; - -/* S3PT subtable header */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoS3ptHdr[] = -{ - {ACPI_DMT_UINT16, ACPI_S3PTH_OFFSET (Type), "Type", 0}, - {ACPI_DMT_UINT8, ACPI_S3PTH_OFFSET (Length), "Length", DT_LENGTH}, - {ACPI_DMT_UINT8, ACPI_S3PTH_OFFSET (Revision), "Revision", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 0: Basic S3 Resume Performance Record */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoS3pt0[] = -{ - {ACPI_DMT_UINT32, ACPI_S3PT0_OFFSET (ResumeCount), "Resume Count", 0}, - {ACPI_DMT_UINT64, ACPI_S3PT0_OFFSET (FullResume), "Full Resume", 0}, - {ACPI_DMT_UINT64, ACPI_S3PT0_OFFSET (AverageResume), "Average Resume", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 1: Basic S3 Suspend Performance Record */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoS3pt1[] = -{ - {ACPI_DMT_UINT64, ACPI_S3PT1_OFFSET (SuspendStart), "Suspend Start", 0}, - {ACPI_DMT_UINT64, ACPI_S3PT1_OFFSET (SuspendEnd), "Suspend End", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * SBST - Smart Battery Specification Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoSbst[] = -{ - {ACPI_DMT_UINT32, ACPI_SBST_OFFSET (WarningLevel), "Warning Level", 0}, - {ACPI_DMT_UINT32, ACPI_SBST_OFFSET (LowLevel), "Low Level", 0}, - {ACPI_DMT_UINT32, ACPI_SBST_OFFSET (CriticalLevel), "Critical Level", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * SLIC - Software Licensing Description Table. This table contains the standard - * ACPI header followed by proprietary data structures - * - ******************************************************************************/ - -/* Single subtable, a proprietary format, so treat it as a buffer */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoSlic[] = -{ - {ACPI_DMT_RAW_BUFFER, 0, "Software Licensing Structure", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * SLIT - System Locality Information Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoSlit[] = -{ - {ACPI_DMT_UINT64, ACPI_SLIT_OFFSET (LocalityCount), "Localities", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * SPCR - Serial Port Console Redirection table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoSpcr[] = -{ - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (InterfaceType), "Interface Type", 0}, - {ACPI_DMT_UINT24, ACPI_SPCR_OFFSET (Reserved[0]), "Reserved", 0}, - {ACPI_DMT_GAS, ACPI_SPCR_OFFSET (SerialPort), "Serial Port Register", 0}, - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (InterruptType), "Interrupt Type", 0}, - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PcInterrupt), "PCAT-compatible IRQ", 0}, - {ACPI_DMT_UINT32, ACPI_SPCR_OFFSET (Interrupt), "Interrupt", 0}, - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (BaudRate), "Baud Rate", 0}, - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (Parity), "Parity", 0}, - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (StopBits), "Stop Bits", 0}, - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (FlowControl), "Flow Control", 0}, - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (TerminalType), "Terminal Type", 0}, - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (Reserved2), "Reserved", 0}, - {ACPI_DMT_UINT16, ACPI_SPCR_OFFSET (PciDeviceId), "PCI Device ID", 0}, - {ACPI_DMT_UINT16, ACPI_SPCR_OFFSET (PciVendorId), "PCI Vendor ID", 0}, - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PciBus), "PCI Bus", 0}, - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PciDevice), "PCI Device", 0}, - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PciFunction), "PCI Function", 0}, - {ACPI_DMT_UINT32, ACPI_SPCR_OFFSET (PciFlags), "PCI Flags", 0}, - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PciSegment), "PCI Segment", 0}, - {ACPI_DMT_UINT32, ACPI_SPCR_OFFSET (Reserved2), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * SPMI - Server Platform Management Interface table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoSpmi[] = -{ - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (InterfaceType), "Interface Type", 0}, - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (Reserved), "Reserved", DT_NON_ZERO}, /* Value must be 1 */ - {ACPI_DMT_UINT16, ACPI_SPMI_OFFSET (SpecRevision), "IPMI Spec Version", 0}, - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (InterruptType), "Interrupt Type", 0}, - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (GpeNumber), "GPE Number", 0}, - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (Reserved1), "Reserved", 0}, - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciDeviceFlag), "PCI Device Flag", 0}, - {ACPI_DMT_UINT32, ACPI_SPMI_OFFSET (Interrupt), "Interrupt", 0}, - {ACPI_DMT_GAS, ACPI_SPMI_OFFSET (IpmiRegister), "IPMI Register", 0}, - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciSegment), "PCI Segment", 0}, - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciBus), "PCI Bus", 0}, - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciDevice), "PCI Device", 0}, - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciFunction), "PCI Function", 0}, - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (Reserved2), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * SRAT - System Resource Affinity Table and Subtables - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoSrat[] = -{ - {ACPI_DMT_UINT32, ACPI_SRAT_OFFSET (TableRevision), "Table Revision", 0}, - {ACPI_DMT_UINT64, ACPI_SRAT_OFFSET (Reserved), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Common Subtable header (one per Subtable) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoSratHdr[] = -{ - {ACPI_DMT_SRAT, ACPI_SRATH_OFFSET (Type), "Subtable Type", 0}, - {ACPI_DMT_UINT8, ACPI_SRATH_OFFSET (Length), "Length", DT_LENGTH}, - ACPI_DMT_TERMINATOR -}; - -/* SRAT Subtables */ - -/* 0: Processor Local APIC/SAPIC Affinity */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoSrat0[] = -{ - {ACPI_DMT_UINT8, ACPI_SRAT0_OFFSET (ProximityDomainLo), "Proximity Domain Low(8)", 0}, - {ACPI_DMT_UINT8, ACPI_SRAT0_OFFSET (ApicId), "Apic ID", 0}, - {ACPI_DMT_UINT32, ACPI_SRAT0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_SRAT0_FLAG_OFFSET (Flags,0), "Enabled", 0}, - {ACPI_DMT_UINT8, ACPI_SRAT0_OFFSET (LocalSapicEid), "Local Sapic EID", 0}, - {ACPI_DMT_UINT24, ACPI_SRAT0_OFFSET (ProximityDomainHi[0]), "Proximity Domain High(24)", 0}, - {ACPI_DMT_UINT32, ACPI_SRAT0_OFFSET (ClockDomain), "Clock Domain", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 1: Memory Affinity */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoSrat1[] = -{ - {ACPI_DMT_UINT32, ACPI_SRAT1_OFFSET (ProximityDomain), "Proximity Domain", 0}, - {ACPI_DMT_UINT16, ACPI_SRAT1_OFFSET (Reserved), "Reserved1", 0}, - {ACPI_DMT_UINT64, ACPI_SRAT1_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT64, ACPI_SRAT1_OFFSET (Length), "Address Length", 0}, - {ACPI_DMT_UINT32, ACPI_SRAT1_OFFSET (Reserved1), "Reserved2", 0}, - {ACPI_DMT_UINT32, ACPI_SRAT1_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_SRAT1_FLAG_OFFSET (Flags,0), "Enabled", 0}, - {ACPI_DMT_FLAG1, ACPI_SRAT1_FLAG_OFFSET (Flags,0), "Hot Pluggable", 0}, - {ACPI_DMT_FLAG2, ACPI_SRAT1_FLAG_OFFSET (Flags,0), "Non-Volatile", 0}, - {ACPI_DMT_UINT64, ACPI_SRAT1_OFFSET (Reserved2), "Reserved3", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoSrat2[] = -{ - {ACPI_DMT_UINT16, ACPI_SRAT2_OFFSET (Reserved), "Reserved1", 0}, - {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (ProximityDomain), "Proximity Domain", 0}, - {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (ApicId), "Apic ID", 0}, - {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_SRAT2_FLAG_OFFSET (Flags,0), "Enabled", 0}, - {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (ClockDomain), "Clock Domain", 0}, - {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (Reserved2), "Reserved2", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 3: GICC Affinity (ACPI 5.1) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoSrat3[] = -{ - {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (ProximityDomain), "Proximity Domain", 0}, - {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (AcpiProcessorUid), "Acpi Processor UID", 0}, - {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_SRAT3_FLAG_OFFSET (Flags,0), "Enabled", 0}, - {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (ClockDomain), "Clock Domain", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 4: GCC ITS Affinity (ACPI 6.2) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoSrat4[] = -{ - {ACPI_DMT_UINT32, ACPI_SRAT4_OFFSET (ProximityDomain), "Proximity Domain", 0}, - {ACPI_DMT_UINT16, ACPI_SRAT4_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_SRAT4_OFFSET (ItsId), "ITS ID", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * STAO - Status Override Table (_STA override) - ACPI 6.0 - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoStao[] = -{ - {ACPI_DMT_UINT8, ACPI_STAO_OFFSET (IgnoreUart), "Ignore UART", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoStaoStr[] = -{ - {ACPI_DMT_STRING, 0, "Namepath", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * TCPA - Trusted Computing Platform Alliance table (Client) - * - * NOTE: There are two versions of the table with the same signature -- - * the client version and the server version. The common PlatformClass - * field is used to differentiate the two types of tables. - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaHdr[] = -{ - {ACPI_DMT_UINT16, ACPI_TCPA_OFFSET (PlatformClass), "Platform Class", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaClient[] = -{ - {ACPI_DMT_UINT32, ACPI_TCPA_CLIENT_OFFSET (MinimumLogLength), "Min Event Log Length", 0}, - {ACPI_DMT_UINT64, ACPI_TCPA_CLIENT_OFFSET (LogAddress), "Event Log Address", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaServer[] = -{ - {ACPI_DMT_UINT16, ACPI_TCPA_SERVER_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_TCPA_SERVER_OFFSET (MinimumLogLength), "Min Event Log Length", 0}, - {ACPI_DMT_UINT64, ACPI_TCPA_SERVER_OFFSET (LogAddress), "Event Log Address", 0}, - {ACPI_DMT_UINT16, ACPI_TCPA_SERVER_OFFSET (SpecRevision), "Specification Revision", 0}, - {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Device Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Pci Device", 0}, - {ACPI_DMT_FLAG1, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Bus is Pnp", 0}, - {ACPI_DMT_FLAG2, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Address Valid", 0}, - {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Interrupt Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Mode", 0}, - {ACPI_DMT_FLAG1, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Polarity", 0}, - {ACPI_DMT_FLAG2, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "GPE SCI Triggered", 0}, - {ACPI_DMT_FLAG3, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Global System Interrupt", 0}, - {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (GpeNumber), "Gpe Number", 0}, - {ACPI_DMT_UINT24, ACPI_TCPA_SERVER_OFFSET (Reserved2[0]), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_TCPA_SERVER_OFFSET (GlobalInterrupt), "Global Interrupt", 0}, - {ACPI_DMT_GAS, ACPI_TCPA_SERVER_OFFSET (Address), "Address", 0}, - {ACPI_DMT_UINT32, ACPI_TCPA_SERVER_OFFSET (Reserved3), "Reserved", 0}, - {ACPI_DMT_GAS, ACPI_TCPA_SERVER_OFFSET (ConfigAddress), "Configuration Address", 0}, - {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Group), "Pci Group", 0}, - {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Bus), "Pci Bus", 0}, - {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Device), "Pci Device", 0}, - {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Function), "Pci Function", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoTpm2[] = -{ - {ACPI_DMT_UINT16, ACPI_TPM2_OFFSET (PlatformClass), "Platform Class", 0}, - {ACPI_DMT_UINT16, ACPI_TPM2_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_TPM2_OFFSET (ControlAddress), "Control Address", 0}, - {ACPI_DMT_UINT32, ACPI_TPM2_OFFSET (StartMethod), "Start Method", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * UEFI - UEFI Boot optimization Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoUefi[] = -{ - {ACPI_DMT_UUID, ACPI_UEFI_OFFSET (Identifier[0]), "UUID Identifier", 0}, - {ACPI_DMT_UINT16, ACPI_UEFI_OFFSET (DataOffset), "Data Offset", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * VRTC - Virtual Real Time Clock Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoVrtc[] = -{ - ACPI_DMT_TERMINATOR -}; - -/* VRTC Subtables - VRTC Entry */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoVrtc0[] = -{ - {ACPI_DMT_GAS, ACPI_VRTC0_OFFSET (PhysicalAddress), "PhysicalAddress", 0}, - {ACPI_DMT_UINT32, ACPI_VRTC0_OFFSET (Irq), "IRQ", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * WAET - Windows ACPI Emulated devices Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoWaet[] = -{ - {ACPI_DMT_UINT32, ACPI_WAET_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_WAET_OFFSET (Flags), "RTC needs no INT ack", 0}, - {ACPI_DMT_FLAG1, ACPI_WAET_OFFSET (Flags), "PM timer, one read only", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * WDAT - Watchdog Action Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoWdat[] = -{ - {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (HeaderLength), "Header Length", DT_LENGTH}, - {ACPI_DMT_UINT16, ACPI_WDAT_OFFSET (PciSegment), "PCI Segment", 0}, - {ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (PciBus), "PCI Bus", 0}, - {ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (PciDevice), "PCI Device", 0}, - {ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (PciFunction), "PCI Function", 0}, - {ACPI_DMT_UINT24, ACPI_WDAT_OFFSET (Reserved[0]), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (TimerPeriod), "Timer Period", 0}, - {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (MaxCount), "Max Count", 0}, - {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (MinCount), "Min Count", 0}, - {ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_WDAT_OFFSET (Flags), "Enabled", 0}, - {ACPI_DMT_FLAG7, ACPI_WDAT_OFFSET (Flags), "Stopped When Asleep", 0}, - {ACPI_DMT_UINT24, ACPI_WDAT_OFFSET (Reserved2[0]), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (Entries), "Watchdog Entry Count", 0}, - ACPI_DMT_TERMINATOR -}; - -/* WDAT Subtables - Watchdog Instruction Entries */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoWdat0[] = -{ - {ACPI_DMT_UINT8, ACPI_WDAT0_OFFSET (Action), "Watchdog Action", 0}, - {ACPI_DMT_UINT8, ACPI_WDAT0_OFFSET (Instruction), "Instruction", 0}, - {ACPI_DMT_UINT16, ACPI_WDAT0_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_GAS, ACPI_WDAT0_OFFSET (RegisterRegion), "Register Region", 0}, - {ACPI_DMT_UINT32, ACPI_WDAT0_OFFSET (Value), "Value", 0}, - {ACPI_DMT_UINT32, ACPI_WDAT0_OFFSET (Mask), "Register Mask", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * WDDT - Watchdog Description Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoWddt[] = -{ - {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (SpecVersion), "Specification Version", 0}, - {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (TableVersion), "Table Version", 0}, - {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (PciVendorId), "PCI Vendor ID", 0}, - {ACPI_DMT_GAS, ACPI_WDDT_OFFSET (Address), "Timer Register", 0}, - {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (MaxCount), "Max Count", 0}, - {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (MinCount), "Min Count", 0}, - {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (Period), "Period", 0}, - {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (Status), "Status (decoded below)", 0}, - - /* Status Flags byte 0 */ - - {ACPI_DMT_FLAG0, ACPI_WDDT_FLAG_OFFSET (Status,0), "Available", 0}, - {ACPI_DMT_FLAG1, ACPI_WDDT_FLAG_OFFSET (Status,0), "Active", 0}, - {ACPI_DMT_FLAG2, ACPI_WDDT_FLAG_OFFSET (Status,0), "OS Owns", 0}, - - /* Status Flags byte 1 */ - - {ACPI_DMT_FLAG3, ACPI_WDDT_FLAG_OFFSET (Status,1), "User Reset", 0}, - {ACPI_DMT_FLAG4, ACPI_WDDT_FLAG_OFFSET (Status,1), "Timeout Reset", 0}, - {ACPI_DMT_FLAG5, ACPI_WDDT_FLAG_OFFSET (Status,1), "Power Fail Reset", 0}, - {ACPI_DMT_FLAG6, ACPI_WDDT_FLAG_OFFSET (Status,1), "Unknown Reset", 0}, - - {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (Capability), "Capability (decoded below)", 0}, - - /* Capability Flags byte 0 */ - - {ACPI_DMT_FLAG0, ACPI_WDDT_FLAG_OFFSET (Capability,0), "Auto Reset", 0}, - {ACPI_DMT_FLAG1, ACPI_WDDT_FLAG_OFFSET (Capability,0), "Timeout Alert", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * WDRT - Watchdog Resource Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoWdrt[] = -{ - {ACPI_DMT_GAS, ACPI_WDRT_OFFSET (ControlRegister), "Control Register", 0}, - {ACPI_DMT_GAS, ACPI_WDRT_OFFSET (CountRegister), "Count Register", 0}, - {ACPI_DMT_UINT16, ACPI_WDRT_OFFSET (PciDeviceId), "PCI Device ID", 0}, - {ACPI_DMT_UINT16, ACPI_WDRT_OFFSET (PciVendorId), "PCI Vendor ID", 0}, - {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciBus), "PCI Bus", 0}, - {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciDevice), "PCI Device", 0}, - {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciFunction), "PCI Function", 0}, - {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciSegment), "PCI Segment", 0}, - {ACPI_DMT_UINT16, ACPI_WDRT_OFFSET (MaxCount), "Max Count", 0}, - {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (Units), "Counter Units", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * WPBT - Windows Platform Environment Table (ACPI 6.0) - * Version 1 - * - * Conforms to "Windows Platform Binary Table (WPBT)" 29 November 2011 - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt[] = -{ - {ACPI_DMT_UINT32, ACPI_WPBT_OFFSET (HandoffSize), "Handoff Size", 0}, - {ACPI_DMT_UINT64, ACPI_WPBT_OFFSET (HandoffAddress), "Handoff Address", 0}, - {ACPI_DMT_UINT8, ACPI_WPBT_OFFSET (Layout), "Layout", 0}, - {ACPI_DMT_UINT8, ACPI_WPBT_OFFSET (Type), "Type", 0}, - {ACPI_DMT_UINT16, ACPI_WPBT_OFFSET (ArgumentsLength), "Arguments Length", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt0[] = -{ - {ACPI_DMT_UNICODE, sizeof (ACPI_TABLE_WPBT), "Command-line Arguments", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * WSMT - Windows SMM Security Migrations Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoWsmt[] = -{ - {ACPI_DMT_UINT32, ACPI_WSMT_OFFSET (ProtectionFlags), "Protection Flags", 0}, - {ACPI_DMT_FLAG0, ACPI_WSMT_FLAG_OFFSET (ProtectionFlags,0), "FIXED_COMM_BUFFERS", 0}, - {ACPI_DMT_FLAG1, ACPI_WSMT_FLAG_OFFSET (ProtectionFlags,0), "COMM_BUFFER_NESTED_PTR_PROTECTION", 0}, - {ACPI_DMT_FLAG2, ACPI_WSMT_FLAG_OFFSET (ProtectionFlags,0), "SYSTEM_RESOURCE_PROTECTION", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * XENV - Xen Environment table (ACPI 6.0) - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoXenv[] = -{ - {ACPI_DMT_UINT64, ACPI_XENV_OFFSET (GrantTableAddress), "Grant Table Address", 0}, - {ACPI_DMT_UINT64, ACPI_XENV_OFFSET (GrantTableSize), "Grant Table Size", 0}, - {ACPI_DMT_UINT32, ACPI_XENV_OFFSET (EventInterrupt), "Event Interrupt", 0}, - {ACPI_DMT_UINT8, ACPI_XENV_OFFSET (EventFlags), "Event Flags", 0}, - ACPI_DMT_TERMINATOR -}; - - -/*! [Begin] no source code translation */ - -/* - * Generic types (used in UEFI and custom tables) - * - * Examples: - * - * Buffer : cc 04 ff bb - * UINT8 : 11 - * UINT16 : 1122 - * UINT24 : 112233 - * UINT32 : 11223344 - * UINT56 : 11223344556677 - * UINT64 : 1122334455667788 - * - * String : "This is string" - * Unicode : "This string encoded to Unicode" - * - * GUID : 11223344-5566-7788-99aa-bbccddeeff00 - * DevicePath : "\PciRoot(0)\Pci(0x1f,1)\Usb(0,0)" - */ - -#define ACPI_DM_GENERIC_ENTRY(FieldType, FieldName) \ - {{FieldType, 0, FieldName, 0}, ACPI_DMT_TERMINATOR} - -ACPI_DMTABLE_INFO AcpiDmTableInfoGeneric[][2] = -{ - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT8, "UINT8"), - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT16, "UINT16"), - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT24, "UINT24"), - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT32, "UINT32"), - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT40, "UINT40"), - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT48, "UINT48"), - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT56, "UINT56"), - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT64, "UINT64"), - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_STRING, "String"), - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UNICODE, "Unicode"), - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_BUFFER, "Buffer"), - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UUID, "GUID"), - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_STRING, "DevicePath"), - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_LABEL, "Label"), - {ACPI_DMT_TERMINATOR} -}; -/*! [End] no source code translation !*/ +/****************************************************************************** + * + * Module Name: dmtbinfo - Table info for non-AML tables + * + *****************************************************************************/ + +/****************************************************************************** + * + * 1. Copyright Notice + * + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. + * All rights reserved. + * + * 2. License + * + * 2.1. This is your license from Intel Corp. under its intellectual property + * rights. You may have additional license terms from the party that provided + * you this software, covering your right to use that party's intellectual + * property rights. + * + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a + * copy of the source code appearing in this file ("Covered Code") an + * irrevocable, perpetual, worldwide license under Intel's copyrights in the + * base code distributed originally by Intel ("Original Intel Code") to copy, + * make derivatives, distribute, use and display any portion of the Covered + * Code in any form, with the right to sublicense such rights; and + * + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent + * license (with the right to sublicense), under only those claims of Intel + * patents that are infringed by the Original Intel Code, to make, use, sell, + * offer to sell, and import the Covered Code and derivative works thereof + * solely to the minimum extent necessary to exercise the above copyright + * license, and in no event shall the patent license extend to any additions + * to or modifications of the Original Intel Code. No other license or right + * is granted directly or by implication, estoppel or otherwise; + * + * The above copyright and patent license is granted only if the following + * conditions are met: + * + * 3. Conditions + * + * 3.1. Redistribution of Source with Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification with rights to further distribute source must include + * the above Copyright Notice, the above License, this list of Conditions, + * and the following Disclaimer and Export Compliance provision. In addition, + * Licensee must cause all Covered Code to which Licensee contributes to + * contain a file documenting the changes Licensee made to create that Covered + * Code and the date of any change. Licensee must include in that file the + * documentation of any changes made by any predecessor Licensee. Licensee + * must include a prominent statement that the modification is derived, + * directly or indirectly, from Original Intel Code. + * + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification without rights to further distribute source must + * include the following Disclaimer and Export Compliance provision in the + * documentation and/or other materials provided with distribution. In + * addition, Licensee may not authorize further sublicense of source of any + * portion of the Covered Code, and must include terms to the effect that the + * license from Licensee to its licensee is limited to the intellectual + * property embodied in the software Licensee provides to its licensee, and + * not to intellectual property embodied in modifications its licensee may + * make. + * + * 3.3. Redistribution of Executable. Redistribution in executable form of any + * substantial portion of the Covered Code or modification must reproduce the + * above Copyright Notice, and the following Disclaimer and Export Compliance + * provision in the documentation and/or other materials provided with the + * distribution. + * + * 3.4. Intel retains all right, title, and interest in and to the Original + * Intel Code. + * + * 3.5. Neither the name Intel nor any other trademark owned or controlled by + * Intel shall be used in advertising or otherwise to promote the sale, use or + * other dealings in products derived from or relating to the Covered Code + * without prior written authorization from Intel. + * + * 4. Disclaimer and Export Compliance + * + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A + * PARTICULAR PURPOSE. + * + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY + * LIMITED REMEDY. + * + * 4.3. Licensee shall not export, either directly or indirectly, any of this + * software or system incorporating such software without first obtaining any + * required license or other approval from the U. S. Department of Commerce or + * any other agency or department of the United States Government. In the + * event Licensee exports any such software from the United States or + * re-exports any such software from a foreign destination, Licensee shall + * ensure that the distribution and export/re-export of the software is in + * compliance with all laws, regulations, orders, or other restrictions of the + * U.S. Export Administration Regulations. Licensee agrees that neither it nor + * any of its subsidiaries will export/re-export any technical data, process, + * software, or service, directly or indirectly, to any country for which the + * United States government or any agency thereof requires an export license, + * other governmental approval, or letter of assurance, without first obtaining + * such license, approval or letter. + * + ***************************************************************************** + * + * Alternatively, you may choose to be licensed under the terms of the + * following license: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Alternatively, you may choose to be licensed under the terms of the + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. + * + *****************************************************************************/ + +#include "acpi.h" +#include "accommon.h" +#include "acdisasm.h" +#include "actbinfo.h" + +/* This module used for application-level code only */ + +#define _COMPONENT ACPI_CA_DISASSEMBLER + ACPI_MODULE_NAME ("dmtbinfo") + +/* + * How to add a new table: + * + * - Add the C table definition to the actbl1.h or actbl2.h header. + * - Add ACPI_xxxx_OFFSET macro(s) for the table (and subtables) to list below. + * - Define the table in this file (for the disassembler). If any + * new data types are required (ACPI_DMT_*), see below. + * - Add an external declaration for the new table definition (AcpiDmTableInfo*) + * in acdisam.h + * - Add new table definition to the dispatch table in dmtable.c (AcpiDmTableData) + * If a simple table (with no subtables), no disassembly code is needed. + * Otherwise, create the AcpiDmDump* function for to disassemble the table + * and add it to the dmtbdump.c file. + * - Add an external declaration for the new AcpiDmDump* function in acdisasm.h + * - Add the new AcpiDmDump* function to the dispatch table in dmtable.c + * - Create a template for the new table + * - Add data table compiler support + * + * How to add a new data type (ACPI_DMT_*): + * + * - Add new type at the end of the ACPI_DMT list in acdisasm.h + * - Add length and implementation cases in dmtable.c (disassembler) + * - Add type and length cases in dtutils.c (DT compiler) + */ + +/* + * ACPI Table Information, used to dump formatted ACPI tables + * + * Each entry is of the form: + */ + +/******************************************************************************* + * + * Common ACPI table header + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHeader[] = +{ + {ACPI_DMT_SIG, ACPI_HDR_OFFSET (Signature[0]), "Signature", 0}, + {ACPI_DMT_UINT32, ACPI_HDR_OFFSET (Length), "Table Length", DT_LENGTH}, + {ACPI_DMT_UINT8, ACPI_HDR_OFFSET (Revision), "Revision", 0}, + {ACPI_DMT_CHKSUM, ACPI_HDR_OFFSET (Checksum), "Checksum", 0}, + {ACPI_DMT_NAME6, ACPI_HDR_OFFSET (OemId[0]), "Oem ID", 0}, + {ACPI_DMT_NAME8, ACPI_HDR_OFFSET (OemTableId[0]), "Oem Table ID", 0}, + {ACPI_DMT_UINT32, ACPI_HDR_OFFSET (OemRevision), "Oem Revision", 0}, + {ACPI_DMT_NAME4, ACPI_HDR_OFFSET (AslCompilerId[0]), "Asl Compiler ID", 0}, + {ACPI_DMT_UINT32, ACPI_HDR_OFFSET (AslCompilerRevision), "Asl Compiler Revision", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * GAS - Generic Address Structure + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoGas[] = +{ + {ACPI_DMT_SPACEID, ACPI_GAS_OFFSET (SpaceId), "Space ID", 0}, + {ACPI_DMT_UINT8, ACPI_GAS_OFFSET (BitWidth), "Bit Width", 0}, + {ACPI_DMT_UINT8, ACPI_GAS_OFFSET (BitOffset), "Bit Offset", 0}, + {ACPI_DMT_ACCWIDTH, ACPI_GAS_OFFSET (AccessWidth), "Encoded Access Width", 0}, + {ACPI_DMT_UINT64, ACPI_GAS_OFFSET (Address), "Address", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * RSDP - Root System Description Pointer (Signature is "RSD PTR ") + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoRsdp1[] = +{ + {ACPI_DMT_NAME8, ACPI_RSDP_OFFSET (Signature[0]), "Signature", 0}, + {ACPI_DMT_UINT8, ACPI_RSDP_OFFSET (Checksum), "Checksum", 0}, + {ACPI_DMT_NAME6, ACPI_RSDP_OFFSET (OemId[0]), "Oem ID", 0}, + {ACPI_DMT_UINT8, ACPI_RSDP_OFFSET (Revision), "Revision", 0}, + {ACPI_DMT_UINT32, ACPI_RSDP_OFFSET (RsdtPhysicalAddress), "RSDT Address", 0}, + ACPI_DMT_TERMINATOR +}; + +/* ACPI 2.0+ Extensions */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoRsdp2[] = +{ + {ACPI_DMT_UINT32, ACPI_RSDP_OFFSET (Length), "Length", DT_LENGTH}, + {ACPI_DMT_UINT64, ACPI_RSDP_OFFSET (XsdtPhysicalAddress), "XSDT Address", 0}, + {ACPI_DMT_UINT8, ACPI_RSDP_OFFSET (ExtendedChecksum), "Extended Checksum", 0}, + {ACPI_DMT_UINT24, ACPI_RSDP_OFFSET (Reserved[0]), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * FACS - Firmware ACPI Control Structure + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoFacs[] = +{ + {ACPI_DMT_NAME4, ACPI_FACS_OFFSET (Signature[0]), "Signature", 0}, + {ACPI_DMT_UINT32, ACPI_FACS_OFFSET (Length), "Length", DT_LENGTH}, + {ACPI_DMT_UINT32, ACPI_FACS_OFFSET (HardwareSignature), "Hardware Signature", 0}, + {ACPI_DMT_UINT32, ACPI_FACS_OFFSET (FirmwareWakingVector), "32 Firmware Waking Vector", 0}, + {ACPI_DMT_UINT32, ACPI_FACS_OFFSET (GlobalLock), "Global Lock", 0}, + {ACPI_DMT_UINT32, ACPI_FACS_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_FACS_FLAG_OFFSET (Flags,0), "S4BIOS Support Present", 0}, + {ACPI_DMT_FLAG1, ACPI_FACS_FLAG_OFFSET (Flags,0), "64-bit Wake Supported (V2)", 0}, + {ACPI_DMT_UINT64, ACPI_FACS_OFFSET (XFirmwareWakingVector), "64 Firmware Waking Vector", 0}, + {ACPI_DMT_UINT8, ACPI_FACS_OFFSET (Version), "Version", 0}, + {ACPI_DMT_UINT24, ACPI_FACS_OFFSET (Reserved[0]), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_FACS_OFFSET (OspmFlags), "OspmFlags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_FACS_FLAG_OFFSET (OspmFlags,0), "64-bit Wake Env Required (V2)", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * FADT - Fixed ACPI Description Table (Signature is FACP) + * + ******************************************************************************/ + +/* ACPI 1.0 FADT (Version 1) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoFadt1[] = +{ + {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Facs), "FACS Address", 0}, + {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Dsdt), "DSDT Address", DT_NON_ZERO}, + {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (Model), "Model", 0}, + {ACPI_DMT_FADTPM, ACPI_FADT_OFFSET (PreferredProfile), "PM Profile", 0}, + {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (SciInterrupt), "SCI Interrupt", 0}, + {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (SmiCommand), "SMI Command Port", 0}, + {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (AcpiEnable), "ACPI Enable Value", 0}, + {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (AcpiDisable), "ACPI Disable Value", 0}, + {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (S4BiosRequest), "S4BIOS Command", 0}, + {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (PstateControl), "P-State Control", 0}, + {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Pm1aEventBlock), "PM1A Event Block Address", 0}, + {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Pm1bEventBlock), "PM1B Event Block Address", 0}, + {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Pm1aControlBlock), "PM1A Control Block Address", 0}, + {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Pm1bControlBlock), "PM1B Control Block Address", 0}, + {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Pm2ControlBlock), "PM2 Control Block Address", 0}, + {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (PmTimerBlock), "PM Timer Block Address", 0}, + {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Gpe0Block), "GPE0 Block Address", 0}, + {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Gpe1Block), "GPE1 Block Address", 0}, + {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (Pm1EventLength), "PM1 Event Block Length", 0}, + {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (Pm1ControlLength), "PM1 Control Block Length", 0}, + {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (Pm2ControlLength), "PM2 Control Block Length", 0}, + {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (PmTimerLength), "PM Timer Block Length", 0}, + {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (Gpe0BlockLength), "GPE0 Block Length", 0}, + {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (Gpe1BlockLength), "GPE1 Block Length", 0}, + {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (Gpe1Base), "GPE1 Base Offset", 0}, + {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (CstControl), "_CST Support", 0}, + {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (C2Latency), "C2 Latency", 0}, + {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (C3Latency), "C3 Latency", 0}, + {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (FlushSize), "CPU Cache Size", 0}, + {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (FlushStride), "Cache Flush Stride", 0}, + {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (DutyOffset), "Duty Cycle Offset", 0}, + {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (DutyWidth), "Duty Cycle Width", 0}, + {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (DayAlarm), "RTC Day Alarm Index", 0}, + {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (MonthAlarm), "RTC Month Alarm Index", 0}, + {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (Century), "RTC Century Index", 0}, + {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (BootFlags), "Boot Flags (decoded below)", DT_FLAG}, + + /* Boot Architecture Flags byte 0 */ + + {ACPI_DMT_FLAG0, ACPI_FADT_FLAG_OFFSET (BootFlags,0), "Legacy Devices Supported (V2)", 0}, + {ACPI_DMT_FLAG1, ACPI_FADT_FLAG_OFFSET (BootFlags,0), "8042 Present on ports 60/64 (V2)", 0}, + {ACPI_DMT_FLAG2, ACPI_FADT_FLAG_OFFSET (BootFlags,0), "VGA Not Present (V4)", 0}, + {ACPI_DMT_FLAG3, ACPI_FADT_FLAG_OFFSET (BootFlags,0), "MSI Not Supported (V4)", 0}, + {ACPI_DMT_FLAG4, ACPI_FADT_FLAG_OFFSET (BootFlags,0), "PCIe ASPM Not Supported (V4)", 0}, + {ACPI_DMT_FLAG5, ACPI_FADT_FLAG_OFFSET (BootFlags,0), "CMOS RTC Not Present (V5)", 0}, + + {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + + /* Flags byte 0 */ + + {ACPI_DMT_FLAG0, ACPI_FADT_FLAG_OFFSET (Flags,0), "WBINVD instruction is operational (V1)", 0}, + {ACPI_DMT_FLAG1, ACPI_FADT_FLAG_OFFSET (Flags,0), "WBINVD flushes all caches (V1)", 0}, + {ACPI_DMT_FLAG2, ACPI_FADT_FLAG_OFFSET (Flags,0), "All CPUs support C1 (V1)", 0}, + {ACPI_DMT_FLAG3, ACPI_FADT_FLAG_OFFSET (Flags,0), "C2 works on MP system (V1)", 0}, + {ACPI_DMT_FLAG4, ACPI_FADT_FLAG_OFFSET (Flags,0), "Control Method Power Button (V1)", 0}, + {ACPI_DMT_FLAG5, ACPI_FADT_FLAG_OFFSET (Flags,0), "Control Method Sleep Button (V1)", 0}, + {ACPI_DMT_FLAG6, ACPI_FADT_FLAG_OFFSET (Flags,0), "RTC wake not in fixed reg space (V1)", 0}, + {ACPI_DMT_FLAG7, ACPI_FADT_FLAG_OFFSET (Flags,0), "RTC can wake system from S4 (V1)", 0}, + + /* Flags byte 1 */ + + {ACPI_DMT_FLAG0, ACPI_FADT_FLAG_OFFSET (Flags,1), "32-bit PM Timer (V1)", 0}, + {ACPI_DMT_FLAG1, ACPI_FADT_FLAG_OFFSET (Flags,1), "Docking Supported (V1)", 0}, + {ACPI_DMT_FLAG2, ACPI_FADT_FLAG_OFFSET (Flags,1), "Reset Register Supported (V2)", 0}, + {ACPI_DMT_FLAG3, ACPI_FADT_FLAG_OFFSET (Flags,1), "Sealed Case (V3)", 0}, + {ACPI_DMT_FLAG4, ACPI_FADT_FLAG_OFFSET (Flags,1), "Headless - No Video (V3)", 0}, + {ACPI_DMT_FLAG5, ACPI_FADT_FLAG_OFFSET (Flags,1), "Use native instr after SLP_TYPx (V3)", 0}, + {ACPI_DMT_FLAG6, ACPI_FADT_FLAG_OFFSET (Flags,1), "PCIEXP_WAK Bits Supported (V4)", 0}, + {ACPI_DMT_FLAG7, ACPI_FADT_FLAG_OFFSET (Flags,1), "Use Platform Timer (V4)", 0}, + + /* Flags byte 2 */ + + {ACPI_DMT_FLAG0, ACPI_FADT_FLAG_OFFSET (Flags,2), "RTC_STS valid on S4 wake (V4)", 0}, + {ACPI_DMT_FLAG1, ACPI_FADT_FLAG_OFFSET (Flags,2), "Remote Power-on capable (V4)", 0}, + {ACPI_DMT_FLAG2, ACPI_FADT_FLAG_OFFSET (Flags,2), "Use APIC Cluster Model (V4)", 0}, + {ACPI_DMT_FLAG3, ACPI_FADT_FLAG_OFFSET (Flags,2), "Use APIC Physical Destination Mode (V4)", 0}, + {ACPI_DMT_FLAG4, ACPI_FADT_FLAG_OFFSET (Flags,2), "Hardware Reduced (V5)", 0}, + {ACPI_DMT_FLAG5, ACPI_FADT_FLAG_OFFSET (Flags,2), "Low Power S0 Idle (V5)", 0}, + ACPI_DMT_TERMINATOR +}; + +/* ACPI 1.0 MS Extensions (FADT version 2) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoFadt2[] = +{ + {ACPI_DMT_GAS, ACPI_FADT_OFFSET (ResetRegister), "Reset Register", 0}, + {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (ResetValue), "Value to cause reset", 0}, + {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (ArmBootFlags), "Reserved", 0}, + {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (MinorRevision), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* ACPI 2.0+ Extensions (FADT version 3, 4, and 5) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoFadt3[] = +{ + {ACPI_DMT_GAS, ACPI_FADT_OFFSET (ResetRegister), "Reset Register", 0}, + {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (ResetValue), "Value to cause reset", 0}, + {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (ArmBootFlags), "ARM Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_FADT_FLAG_OFFSET(ArmBootFlags,0), "PSCI Compliant", 0}, + {ACPI_DMT_FLAG1, ACPI_FADT_FLAG_OFFSET(ArmBootFlags,0), "Must use HVC for PSCI", 0}, + ACPI_DMT_NEW_LINE, + {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (MinorRevision), "FADT Minor Revision", 0}, + {ACPI_DMT_UINT64, ACPI_FADT_OFFSET (XFacs), "FACS Address", 0}, + {ACPI_DMT_UINT64, ACPI_FADT_OFFSET (XDsdt), "DSDT Address", 0}, + {ACPI_DMT_GAS, ACPI_FADT_OFFSET (XPm1aEventBlock), "PM1A Event Block", 0}, + {ACPI_DMT_GAS, ACPI_FADT_OFFSET (XPm1bEventBlock), "PM1B Event Block", 0}, + {ACPI_DMT_GAS, ACPI_FADT_OFFSET (XPm1aControlBlock), "PM1A Control Block", 0}, + {ACPI_DMT_GAS, ACPI_FADT_OFFSET (XPm1bControlBlock), "PM1B Control Block", 0}, + {ACPI_DMT_GAS, ACPI_FADT_OFFSET (XPm2ControlBlock), "PM2 Control Block", 0}, + {ACPI_DMT_GAS, ACPI_FADT_OFFSET (XPmTimerBlock), "PM Timer Block", 0}, + {ACPI_DMT_GAS, ACPI_FADT_OFFSET (XGpe0Block), "GPE0 Block", 0}, + {ACPI_DMT_GAS, ACPI_FADT_OFFSET (XGpe1Block), "GPE1 Block", 0}, + ACPI_DMT_TERMINATOR +}; + +/* ACPI 5.0 Extensions (FADT version 5) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoFadt5[] = +{ + {ACPI_DMT_GAS, ACPI_FADT_OFFSET (SleepControl), "Sleep Control Register", 0}, + {ACPI_DMT_GAS, ACPI_FADT_OFFSET (SleepStatus), "Sleep Status Register", 0}, + ACPI_DMT_TERMINATOR +}; + +/* ACPI 6.0 Extensions (FADT version 6) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoFadt6[] = +{ + {ACPI_DMT_UINT64, ACPI_FADT_OFFSET (HypervisorId), "Hypervisor ID", 0}, + ACPI_DMT_TERMINATOR +}; diff --git a/sys/contrib/dev/acpica/source/common/dmtbinfo1.c b/sys/contrib/dev/acpica/source/common/dmtbinfo1.c new file mode 100644 index 0000000000..a7a3d48436 --- /dev/null +++ b/sys/contrib/dev/acpica/source/common/dmtbinfo1.c @@ -0,0 +1,1200 @@ +/****************************************************************************** + * + * Module Name: dmtbinfo1 - Table info for non-AML tables + * + *****************************************************************************/ + +/****************************************************************************** + * + * 1. Copyright Notice + * + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. + * All rights reserved. + * + * 2. License + * + * 2.1. This is your license from Intel Corp. under its intellectual property + * rights. You may have additional license terms from the party that provided + * you this software, covering your right to use that party's intellectual + * property rights. + * + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a + * copy of the source code appearing in this file ("Covered Code") an + * irrevocable, perpetual, worldwide license under Intel's copyrights in the + * base code distributed originally by Intel ("Original Intel Code") to copy, + * make derivatives, distribute, use and display any portion of the Covered + * Code in any form, with the right to sublicense such rights; and + * + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent + * license (with the right to sublicense), under only those claims of Intel + * patents that are infringed by the Original Intel Code, to make, use, sell, + * offer to sell, and import the Covered Code and derivative works thereof + * solely to the minimum extent necessary to exercise the above copyright + * license, and in no event shall the patent license extend to any additions + * to or modifications of the Original Intel Code. No other license or right + * is granted directly or by implication, estoppel or otherwise; + * + * The above copyright and patent license is granted only if the following + * conditions are met: + * + * 3. Conditions + * + * 3.1. Redistribution of Source with Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification with rights to further distribute source must include + * the above Copyright Notice, the above License, this list of Conditions, + * and the following Disclaimer and Export Compliance provision. In addition, + * Licensee must cause all Covered Code to which Licensee contributes to + * contain a file documenting the changes Licensee made to create that Covered + * Code and the date of any change. Licensee must include in that file the + * documentation of any changes made by any predecessor Licensee. Licensee + * must include a prominent statement that the modification is derived, + * directly or indirectly, from Original Intel Code. + * + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification without rights to further distribute source must + * include the following Disclaimer and Export Compliance provision in the + * documentation and/or other materials provided with distribution. In + * addition, Licensee may not authorize further sublicense of source of any + * portion of the Covered Code, and must include terms to the effect that the + * license from Licensee to its licensee is limited to the intellectual + * property embodied in the software Licensee provides to its licensee, and + * not to intellectual property embodied in modifications its licensee may + * make. + * + * 3.3. Redistribution of Executable. Redistribution in executable form of any + * substantial portion of the Covered Code or modification must reproduce the + * above Copyright Notice, and the following Disclaimer and Export Compliance + * provision in the documentation and/or other materials provided with the + * distribution. + * + * 3.4. Intel retains all right, title, and interest in and to the Original + * Intel Code. + * + * 3.5. Neither the name Intel nor any other trademark owned or controlled by + * Intel shall be used in advertising or otherwise to promote the sale, use or + * other dealings in products derived from or relating to the Covered Code + * without prior written authorization from Intel. + * + * 4. Disclaimer and Export Compliance + * + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A + * PARTICULAR PURPOSE. + * + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY + * LIMITED REMEDY. + * + * 4.3. Licensee shall not export, either directly or indirectly, any of this + * software or system incorporating such software without first obtaining any + * required license or other approval from the U. S. Department of Commerce or + * any other agency or department of the United States Government. In the + * event Licensee exports any such software from the United States or + * re-exports any such software from a foreign destination, Licensee shall + * ensure that the distribution and export/re-export of the software is in + * compliance with all laws, regulations, orders, or other restrictions of the + * U.S. Export Administration Regulations. Licensee agrees that neither it nor + * any of its subsidiaries will export/re-export any technical data, process, + * software, or service, directly or indirectly, to any country for which the + * United States government or any agency thereof requires an export license, + * other governmental approval, or letter of assurance, without first obtaining + * such license, approval or letter. + * + ***************************************************************************** + * + * Alternatively, you may choose to be licensed under the terms of the + * following license: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Alternatively, you may choose to be licensed under the terms of the + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. + * + *****************************************************************************/ + +#include "acpi.h" +#include "accommon.h" +#include "acdisasm.h" +#include "actbinfo.h" + +/* This module used for application-level code only */ + +#define _COMPONENT ACPI_CA_DISASSEMBLER + ACPI_MODULE_NAME ("dmtbinfo1") + +/* + * How to add a new table: + * + * - Add the C table definition to the actbl1.h or actbl2.h header. + * - Add ACPI_xxxx_OFFSET macro(s) for the table (and subtables) to list below. + * - Define the table in this file (for the disassembler). If any + * new data types are required (ACPI_DMT_*), see below. + * - Add an external declaration for the new table definition (AcpiDmTableInfo*) + * in acdisam.h + * - Add new table definition to the dispatch table in dmtable.c (AcpiDmTableData) + * If a simple table (with no subtables), no disassembly code is needed. + * Otherwise, create the AcpiDmDump* function for to disassemble the table + * and add it to the dmtbdump.c file. + * - Add an external declaration for the new AcpiDmDump* function in acdisasm.h + * - Add the new AcpiDmDump* function to the dispatch table in dmtable.c + * - Create a template for the new table + * - Add data table compiler support + * + * How to add a new data type (ACPI_DMT_*): + * + * - Add new type at the end of the ACPI_DMT list in acdisasm.h + * - Add length and implementation cases in dmtable.c (disassembler) + * - Add type and length cases in dtutils.c (DT compiler) + */ + +/* + * ACPI Table Information, used to dump formatted ACPI tables + * + * Each entry is of the form: + */ + + +/******************************************************************************* + * + * ASF - Alert Standard Format table (Signature "ASF!") + * + ******************************************************************************/ + +/* Common Subtable header (one per Subtable) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoAsfHdr[] = +{ + {ACPI_DMT_ASF, ACPI_ASF0_OFFSET (Header.Type), "Subtable Type", 0}, + {ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (Header.Reserved), "Reserved", 0}, + {ACPI_DMT_UINT16, ACPI_ASF0_OFFSET (Header.Length), "Length", DT_LENGTH}, + ACPI_DMT_TERMINATOR +}; + +/* 0: ASF Information */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoAsf0[] = +{ + {ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (MinResetValue), "Minimum Reset Value", 0}, + {ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (MinPollInterval), "Minimum Polling Interval", 0}, + {ACPI_DMT_UINT16, ACPI_ASF0_OFFSET (SystemId), "System ID", 0}, + {ACPI_DMT_UINT32, ACPI_ASF0_OFFSET (MfgId), "Manufacturer ID", 0}, + {ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (Flags), "Flags", 0}, + {ACPI_DMT_UINT24, ACPI_ASF0_OFFSET (Reserved2[0]), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 1: ASF Alerts */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoAsf1[] = +{ + {ACPI_DMT_UINT8, ACPI_ASF1_OFFSET (AssertMask), "AssertMask", 0}, + {ACPI_DMT_UINT8, ACPI_ASF1_OFFSET (DeassertMask), "DeassertMask", 0}, + {ACPI_DMT_UINT8, ACPI_ASF1_OFFSET (Alerts), "Alert Count", 0}, + {ACPI_DMT_UINT8, ACPI_ASF1_OFFSET (DataLength), "Alert Data Length", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 1a: ASF Alert data */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoAsf1a[] = +{ + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Address), "Address", 0}, + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Command), "Command", 0}, + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Mask), "Mask", 0}, + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Value), "Value", 0}, + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (SensorType), "SensorType", 0}, + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Type), "Type", 0}, + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Offset), "Offset", 0}, + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (SourceType), "SourceType", 0}, + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Severity), "Severity", 0}, + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (SensorNumber), "SensorNumber", 0}, + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Entity), "Entity", 0}, + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Instance), "Instance", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 2: ASF Remote Control */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoAsf2[] = +{ + {ACPI_DMT_UINT8, ACPI_ASF2_OFFSET (Controls), "Control Count", 0}, + {ACPI_DMT_UINT8, ACPI_ASF2_OFFSET (DataLength), "Control Data Length", 0}, + {ACPI_DMT_UINT16, ACPI_ASF2_OFFSET (Reserved2), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 2a: ASF Control data */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoAsf2a[] = +{ + {ACPI_DMT_UINT8, ACPI_ASF2a_OFFSET (Function), "Function", 0}, + {ACPI_DMT_UINT8, ACPI_ASF2a_OFFSET (Address), "Address", 0}, + {ACPI_DMT_UINT8, ACPI_ASF2a_OFFSET (Command), "Command", 0}, + {ACPI_DMT_UINT8, ACPI_ASF2a_OFFSET (Value), "Value", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 3: ASF RMCP Boot Options */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoAsf3[] = +{ + {ACPI_DMT_BUF7, ACPI_ASF3_OFFSET (Capabilities[0]), "Capabilities", 0}, + {ACPI_DMT_UINT8, ACPI_ASF3_OFFSET (CompletionCode), "Completion Code", 0}, + {ACPI_DMT_UINT32, ACPI_ASF3_OFFSET (EnterpriseId), "Enterprise ID", 0}, + {ACPI_DMT_UINT8, ACPI_ASF3_OFFSET (Command), "Command", 0}, + {ACPI_DMT_UINT16, ACPI_ASF3_OFFSET (Parameter), "Parameter", 0}, + {ACPI_DMT_UINT16, ACPI_ASF3_OFFSET (BootOptions), "Boot Options", 0}, + {ACPI_DMT_UINT16, ACPI_ASF3_OFFSET (OemParameters), "Oem Parameters", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 4: ASF Address */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoAsf4[] = +{ + {ACPI_DMT_UINT8, ACPI_ASF4_OFFSET (EpromAddress), "Eprom Address", 0}, + {ACPI_DMT_UINT8, ACPI_ASF4_OFFSET (Devices), "Device Count", DT_COUNT}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * BERT - Boot Error Record table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoBert[] = +{ + {ACPI_DMT_UINT32, ACPI_BERT_OFFSET (RegionLength), "Boot Error Region Length", 0}, + {ACPI_DMT_UINT64, ACPI_BERT_OFFSET (Address), "Boot Error Region Address", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * BGRT - Boot Graphics Resource Table (ACPI 5.0) + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoBgrt[] = +{ + {ACPI_DMT_UINT16, ACPI_BGRT_OFFSET (Version), "Version", 0}, + {ACPI_DMT_UINT8, ACPI_BGRT_OFFSET (Status), "Status (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_BGRT_FLAG_OFFSET (Status, 0), "Displayed", 0}, + {ACPI_DMT_FLAGS1, ACPI_BGRT_FLAG_OFFSET (Status, 0), "Orientation Offset", 0}, + + {ACPI_DMT_UINT8, ACPI_BGRT_OFFSET (ImageType), "Image Type", 0}, + {ACPI_DMT_UINT64, ACPI_BGRT_OFFSET (ImageAddress), "Image Address", 0}, + {ACPI_DMT_UINT32, ACPI_BGRT_OFFSET (ImageOffsetX), "Image OffsetX", 0}, + {ACPI_DMT_UINT32, ACPI_BGRT_OFFSET (ImageOffsetY), "Image OffsetY", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * BOOT - Simple Boot Flag Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoBoot[] = +{ + {ACPI_DMT_UINT8, ACPI_BOOT_OFFSET (CmosIndex), "Boot Register Index", 0}, + {ACPI_DMT_UINT24, ACPI_BOOT_OFFSET (Reserved[0]), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * CPEP - Corrected Platform Error Polling table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoCpep[] = +{ + {ACPI_DMT_UINT64, ACPI_CPEP_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoCpep0[] = +{ + {ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Header.Type), "Subtable Type", 0}, + {ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Header.Length), "Length", DT_LENGTH}, + {ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Id), "Processor ID", 0}, + {ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Eid), "Processor EID", 0}, + {ACPI_DMT_UINT32, ACPI_CPEP0_OFFSET (Interval), "Polling Interval", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * CSRT - Core System Resource Table + * + ******************************************************************************/ + +/* Main table consists only of the standard ACPI table header */ + +/* Resource Group subtable */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt0[] = +{ + {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (Length), "Length", DT_LENGTH}, + {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (VendorId), "Vendor ID", 0}, + {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (SubvendorId), "Subvendor ID", 0}, + {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (DeviceId), "Device ID", 0}, + {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (SubdeviceId), "Subdevice ID", 0}, + {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (Revision), "Revision", 0}, + {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (SharedInfoLength), "Shared Info Length", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Shared Info subtable */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt1[] = +{ + {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (MajorVersion), "Major Version", 0}, + {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (MinorVersion), "Minor Version", 0}, + {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (MmioBaseLow), "MMIO Base Address Low", 0}, + {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (MmioBaseHigh), "MMIO Base Address High", 0}, + {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (GsiInterrupt), "GSI Interrupt", 0}, + {ACPI_DMT_UINT8, ACPI_CSRT1_OFFSET (InterruptPolarity), "Interrupt Polarity", 0}, + {ACPI_DMT_UINT8, ACPI_CSRT1_OFFSET (InterruptMode), "Interrupt Mode", 0}, + {ACPI_DMT_UINT8, ACPI_CSRT1_OFFSET (NumChannels), "Num Channels", 0}, + {ACPI_DMT_UINT8, ACPI_CSRT1_OFFSET (DmaAddressWidth), "DMA Address Width", 0}, + {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (BaseRequestLine), "Base Request Line", 0}, + {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (NumHandshakeSignals), "Num Handshake Signals", 0}, + {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (MaxBlockSize), "Max Block Size", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Resource Descriptor subtable */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt2[] = +{ + {ACPI_DMT_UINT32, ACPI_CSRT2_OFFSET (Length), "Length", DT_LENGTH}, + {ACPI_DMT_UINT16, ACPI_CSRT2_OFFSET (Type), "Type", 0}, + {ACPI_DMT_UINT16, ACPI_CSRT2_OFFSET (Subtype), "Subtype", 0}, + {ACPI_DMT_UINT32, ACPI_CSRT2_OFFSET (Uid), "UID", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt2a[] = +{ + {ACPI_DMT_RAW_BUFFER, 0, "ResourceInfo", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * DBG2 - Debug Port Table 2 + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2[] = +{ + {ACPI_DMT_UINT32, ACPI_DBG2_OFFSET (InfoOffset), "Info Offset", 0}, + {ACPI_DMT_UINT32, ACPI_DBG2_OFFSET (InfoCount), "Info Count", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Debug Device Information Subtable */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Device[] = +{ + {ACPI_DMT_UINT8, ACPI_DBG20_OFFSET (Revision), "Revision", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (Length), "Length", DT_LENGTH}, + {ACPI_DMT_UINT8, ACPI_DBG20_OFFSET (RegisterCount), "Register Count", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (NamepathLength), "Namepath Length", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (NamepathOffset), "Namepath Offset", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (OemDataLength), "OEM Data Length", DT_DESCRIBES_OPTIONAL}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (OemDataOffset), "OEM Data Offset", DT_DESCRIBES_OPTIONAL}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (PortType), "Port Type", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (PortSubtype), "Port Subtype", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (BaseAddressOffset), "Base Address Offset", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (AddressSizeOffset), "Address Size Offset", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Variable-length data for the subtable */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Addr[] = +{ + {ACPI_DMT_GAS, 0, "Base Address Register", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Size[] = +{ + {ACPI_DMT_UINT32, 0, "Address Size", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Name[] = +{ + {ACPI_DMT_STRING, 0, "Namepath", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2OemData[] = +{ + {ACPI_DMT_RAW_BUFFER, 0, "OEM Data", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * DBGP - Debug Port + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDbgp[] = +{ + {ACPI_DMT_UINT8, ACPI_DBGP_OFFSET (Type), "Interface Type", 0}, + {ACPI_DMT_UINT24, ACPI_DBGP_OFFSET (Reserved[0]), "Reserved", 0}, + {ACPI_DMT_GAS, ACPI_DBGP_OFFSET (DebugPort), "Debug Port Register", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * DMAR - DMA Remapping table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDmar[] = +{ + {ACPI_DMT_UINT8, ACPI_DMAR_OFFSET (Width), "Host Address Width", 0}, + {ACPI_DMT_UINT8, ACPI_DMAR_OFFSET (Flags), "Flags", 0}, + {ACPI_DMT_BUF10, ACPI_DMAR_OFFSET (Reserved[0]), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Common Subtable header (one per Subtable) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDmarHdr[] = +{ + {ACPI_DMT_DMAR, ACPI_DMAR0_OFFSET (Header.Type), "Subtable Type", 0}, + {ACPI_DMT_UINT16, ACPI_DMAR0_OFFSET (Header.Length), "Length", DT_LENGTH}, + ACPI_DMT_TERMINATOR +}; + +/* Common device scope entry */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDmarScope[] = +{ + {ACPI_DMT_DMAR_SCOPE, ACPI_DMARS_OFFSET (EntryType), "Device Scope Type", 0}, + {ACPI_DMT_UINT8, ACPI_DMARS_OFFSET (Length), "Entry Length", DT_LENGTH}, + {ACPI_DMT_UINT16, ACPI_DMARS_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT8, ACPI_DMARS_OFFSET (EnumerationId), "Enumeration ID", 0}, + {ACPI_DMT_UINT8, ACPI_DMARS_OFFSET (Bus), "PCI Bus Number", 0}, + ACPI_DMT_TERMINATOR +}; + +/* DMAR Subtables */ + +/* 0: Hardware Unit Definition */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDmar0[] = +{ + {ACPI_DMT_UINT8, ACPI_DMAR0_OFFSET (Flags), "Flags", 0}, + {ACPI_DMT_UINT8, ACPI_DMAR0_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT16, ACPI_DMAR0_OFFSET (Segment), "PCI Segment Number", 0}, + {ACPI_DMT_UINT64, ACPI_DMAR0_OFFSET (Address), "Register Base Address", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 1: Reserved Memory Definition */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDmar1[] = +{ + {ACPI_DMT_UINT16, ACPI_DMAR1_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT16, ACPI_DMAR1_OFFSET (Segment), "PCI Segment Number", 0}, + {ACPI_DMT_UINT64, ACPI_DMAR1_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT64, ACPI_DMAR1_OFFSET (EndAddress), "End Address (limit)", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 2: Root Port ATS Capability Definition */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDmar2[] = +{ + {ACPI_DMT_UINT8, ACPI_DMAR2_OFFSET (Flags), "Flags", 0}, + {ACPI_DMT_UINT8, ACPI_DMAR2_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT16, ACPI_DMAR2_OFFSET (Segment), "PCI Segment Number", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 3: Remapping Hardware Static Affinity Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDmar3[] = +{ + {ACPI_DMT_UINT32, ACPI_DMAR3_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_DMAR3_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT32, ACPI_DMAR3_OFFSET (ProximityDomain), "Proximity Domain", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 4: ACPI Namespace Device Declaration Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDmar4[] = +{ + {ACPI_DMT_UINT24, ACPI_DMAR4_OFFSET (Reserved[0]), "Reserved", 0}, + {ACPI_DMT_UINT8, ACPI_DMAR4_OFFSET (DeviceNumber), "Device Number", 0}, + {ACPI_DMT_STRING, ACPI_DMAR4_OFFSET (DeviceName[0]), "Device Name", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * DRTM - Dynamic Root of Trust for Measurement table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm[] = +{ + {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (EntryBaseAddress), "Entry Base Address", 0}, + {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (EntryLength), "Entry Length", 0}, + {ACPI_DMT_UINT32, ACPI_DRTM_OFFSET (EntryAddress32), "Entry 32", 0}, + {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (EntryAddress64), "Entry 64", 0}, + {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (ExitAddress), "Exit Address", 0}, + {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (LogAreaAddress), "Log Area Start", 0}, + {ACPI_DMT_UINT32, ACPI_DRTM_OFFSET (LogAreaLength), "Log Area Length", 0}, + {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (ArchDependentAddress), "Arch Dependent Address", 0}, + {ACPI_DMT_UINT32, ACPI_DRTM_OFFSET (Flags), "Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_DRTM_FLAG_OFFSET (Flags, 0), "Namespace in TCB", 0}, + {ACPI_DMT_FLAG1, ACPI_DRTM_FLAG_OFFSET (Flags, 0), "Gap Code on S3 Resume", 0}, + {ACPI_DMT_FLAG2, ACPI_DRTM_FLAG_OFFSET (Flags, 0), "Gap Code on DLME_Exit", 0}, + {ACPI_DMT_FLAG3, ACPI_DRTM_FLAG_OFFSET (Flags, 0), "PCR_Authorities Changed", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm0[] = +{ + {ACPI_DMT_UINT32, ACPI_DRTM0_OFFSET (ValidatedTableCount), "Validated Table Count", DT_COUNT}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm0a[] = +{ + {ACPI_DMT_UINT64, 0, "Table Address", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm1[] = +{ + {ACPI_DMT_UINT32, ACPI_DRTM1_OFFSET (ResourceCount), "Resource Count", DT_COUNT}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm1a[] = +{ + {ACPI_DMT_UINT56, ACPI_DRTM1a_OFFSET (Size[0]), "Size", DT_OPTIONAL}, + {ACPI_DMT_UINT8, ACPI_DRTM1a_OFFSET (Type), "Type", 0}, + {ACPI_DMT_FLAG0, ACPI_DRTM1a_FLAG_OFFSET (Type, 0), "Resource Type", 0}, + {ACPI_DMT_FLAG7, ACPI_DRTM1a_FLAG_OFFSET (Type, 0), "Protections", 0}, + {ACPI_DMT_UINT64, ACPI_DRTM1a_OFFSET (Address), "Address", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm2[] = +{ + {ACPI_DMT_UINT32, ACPI_DRTM2_OFFSET (DpsIdLength), "DLME Platform Id Length", DT_COUNT}, + {ACPI_DMT_BUF16, ACPI_DRTM2_OFFSET (DpsId), "DLME Platform Id", DT_COUNT}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * ECDT - Embedded Controller Boot Resources Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoEcdt[] = +{ + {ACPI_DMT_GAS, ACPI_ECDT_OFFSET (Control), "Command/Status Register", 0}, + {ACPI_DMT_GAS, ACPI_ECDT_OFFSET (Data), "Data Register", 0}, + {ACPI_DMT_UINT32, ACPI_ECDT_OFFSET (Uid), "UID", 0}, + {ACPI_DMT_UINT8, ACPI_ECDT_OFFSET (Gpe), "GPE Number", 0}, + {ACPI_DMT_STRING, ACPI_ECDT_OFFSET (Id[0]), "Namepath", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * EINJ - Error Injection table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoEinj[] = +{ + {ACPI_DMT_UINT32, ACPI_EINJ_OFFSET (HeaderLength), "Injection Header Length", 0}, + {ACPI_DMT_UINT8, ACPI_EINJ_OFFSET (Flags), "Flags", 0}, + {ACPI_DMT_UINT24, ACPI_EINJ_OFFSET (Reserved[0]), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_EINJ_OFFSET (Entries), "Injection Entry Count", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoEinj0[] = +{ + {ACPI_DMT_EINJACT, ACPI_EINJ0_OFFSET (Action), "Action", 0}, + {ACPI_DMT_EINJINST, ACPI_EINJ0_OFFSET (Instruction), "Instruction", 0}, + {ACPI_DMT_UINT8, ACPI_EINJ0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_EINJ0_FLAG_OFFSET (Flags,0), "Preserve Register Bits", 0}, + + {ACPI_DMT_UINT8, ACPI_EINJ0_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_GAS, ACPI_EINJ0_OFFSET (RegisterRegion), "Register Region", 0}, + {ACPI_DMT_UINT64, ACPI_EINJ0_OFFSET (Value), "Value", 0}, + {ACPI_DMT_UINT64, ACPI_EINJ0_OFFSET (Mask), "Mask", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * ERST - Error Record Serialization table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoErst[] = +{ + {ACPI_DMT_UINT32, ACPI_ERST_OFFSET (HeaderLength), "Serialization Header Length", 0}, + {ACPI_DMT_UINT32, ACPI_ERST_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_ERST_OFFSET (Entries), "Instruction Entry Count", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoErst0[] = +{ + {ACPI_DMT_ERSTACT, ACPI_ERST0_OFFSET (Action), "Action", 0}, + {ACPI_DMT_ERSTINST, ACPI_ERST0_OFFSET (Instruction), "Instruction", 0}, + {ACPI_DMT_UINT8, ACPI_ERST0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_ERST0_FLAG_OFFSET (Flags,0), "Preserve Register Bits", 0}, + + {ACPI_DMT_UINT8, ACPI_ERST0_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_GAS, ACPI_ERST0_OFFSET (RegisterRegion), "Register Region", 0}, + {ACPI_DMT_UINT64, ACPI_ERST0_OFFSET (Value), "Value", 0}, + {ACPI_DMT_UINT64, ACPI_ERST0_OFFSET (Mask), "Mask", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * FPDT - Firmware Performance Data Table (ACPI 5.0) + * + ******************************************************************************/ + +/* Main table consists of only the standard ACPI header - subtables follow */ + +/* FPDT subtable header */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoFpdtHdr[] = +{ + {ACPI_DMT_UINT16, ACPI_FPDTH_OFFSET (Type), "Subtable Type", 0}, + {ACPI_DMT_UINT8, ACPI_FPDTH_OFFSET (Length), "Length", DT_LENGTH}, + {ACPI_DMT_UINT8, ACPI_FPDTH_OFFSET (Revision), "Revision", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 0: Firmware Basic Boot Performance Record */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt0[] = +{ + {ACPI_DMT_UINT32, ACPI_FPDT0_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_FPDT1_OFFSET (Address), "FPDT Boot Record Address", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 1: S3 Performance Table Pointer Record */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt1[] = +{ + {ACPI_DMT_UINT32, ACPI_FPDT1_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_FPDT1_OFFSET (Address), "S3PT Record Address", 0}, + ACPI_DMT_TERMINATOR +}; + +#if 0 + /* Boot Performance Record, not supported at this time. */ + {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (ResetEnd), "Reset End", 0}, + {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (LoadStart), "Load Image Start", 0}, + {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (StartupStart), "Start Image Start", 0}, + {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (ExitServicesEntry), "Exit Services Entry", 0}, + {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (ExitServicesExit), "Exit Services Exit", 0}, +#endif + + +/******************************************************************************* + * + * GTDT - Generic Timer Description Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt[] = +{ + {ACPI_DMT_UINT64, ACPI_GTDT_OFFSET (CounterBlockAddresss), "Counter Block Address", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_NEW_LINE, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (SecureEl1Interrupt), "Secure EL1 Interrupt", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (SecureEl1Flags), "EL1 Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0), "Trigger Mode", 0}, + {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0), "Polarity", 0}, + {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0), "Always On", 0}, + ACPI_DMT_NEW_LINE, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl1Interrupt), "Non-Secure EL1 Interrupt", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl1Flags), "NEL1 Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Trigger Mode", 0}, + {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Polarity", 0}, + {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Always On", 0}, + ACPI_DMT_NEW_LINE, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (VirtualTimerInterrupt), "Virtual Timer Interrupt", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (VirtualTimerFlags), "VT Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Trigger Mode", 0}, + {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Polarity", 0}, + {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Always On", 0}, + ACPI_DMT_NEW_LINE, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl2Interrupt), "Non-Secure EL2 Interrupt", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl2Flags), "NEL2 Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Trigger Mode", 0}, + {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Polarity", 0}, + {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Always On", 0}, + {ACPI_DMT_UINT64, ACPI_GTDT_OFFSET (CounterReadBlockAddress), "Counter Read Block Address", 0}, + ACPI_DMT_NEW_LINE, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (PlatformTimerCount), "Platform Timer Count", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (PlatformTimerOffset), "Platform Timer Offset", 0}, + ACPI_DMT_TERMINATOR +}; + +/* GTDT Subtable header (one per Subtable) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoGtdtHdr[] = +{ + {ACPI_DMT_GTDT, ACPI_GTDTH_OFFSET (Type), "Subtable Type", 0}, + {ACPI_DMT_UINT16, ACPI_GTDTH_OFFSET (Length), "Length", DT_LENGTH}, + ACPI_DMT_TERMINATOR +}; + +/* GTDT Subtables */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt0[] = +{ + {ACPI_DMT_UINT8, ACPI_GTDT0_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_GTDT0_OFFSET (BlockAddress), "Block Address", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT0_OFFSET (TimerCount), "Timer Count", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT0_OFFSET (TimerOffset), "Timer Offset", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt0a[] = +{ + {ACPI_DMT_UINT8 , ACPI_GTDT0a_OFFSET (FrameNumber), "Frame Number", 0}, + {ACPI_DMT_UINT24, ACPI_GTDT0a_OFFSET (Reserved[0]), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_GTDT0a_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT64, ACPI_GTDT0a_OFFSET (El0BaseAddress), "EL0 Base Address", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (TimerInterrupt), "Timer Interrupt", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (TimerFlags), "Timer Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_GTDT0a_FLAG_OFFSET (TimerFlags,0), "Trigger Mode", 0}, + {ACPI_DMT_FLAG1, ACPI_GTDT0a_FLAG_OFFSET (TimerFlags,0), "Polarity", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (VirtualTimerInterrupt), "Virtual Timer Interrupt", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (VirtualTimerFlags), "Virtual Timer Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_GTDT0a_FLAG_OFFSET (VirtualTimerFlags,0), "Trigger Mode", 0}, + {ACPI_DMT_FLAG1, ACPI_GTDT0a_FLAG_OFFSET (VirtualTimerFlags,0), "Polarity", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (CommonFlags), "Common Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_GTDT0a_FLAG_OFFSET (CommonFlags,0), "Secure", 0}, + {ACPI_DMT_FLAG1, ACPI_GTDT0a_FLAG_OFFSET (CommonFlags,0), "Always On", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt1[] = +{ + {ACPI_DMT_UINT8, ACPI_GTDT1_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_GTDT1_OFFSET (RefreshFrameAddress), "Refresh Frame Address", 0}, + {ACPI_DMT_UINT64, ACPI_GTDT1_OFFSET (ControlFrameAddress), "Control Frame Address", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT1_OFFSET (TimerInterrupt), "Timer Interrupt", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT1_OFFSET (TimerFlags), "Timer Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0), "Trigger Mode", 0}, + {ACPI_DMT_FLAG1, ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0), "Polarity", 0}, + {ACPI_DMT_FLAG2, ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0), "Security", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * HEST - Hardware Error Source table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHest[] = +{ + {ACPI_DMT_UINT32, ACPI_HEST_OFFSET (ErrorSourceCount), "Error Source Count", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Common HEST structures for subtables */ + +#define ACPI_DM_HEST_HEADER \ + {ACPI_DMT_HEST, ACPI_HEST0_OFFSET (Header.Type), "Subtable Type", 0}, \ + {ACPI_DMT_UINT16, ACPI_HEST0_OFFSET (Header.SourceId), "Source Id", 0} + +#define ACPI_DM_HEST_AER \ + {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Reserved1), "Reserved", 0}, \ + {ACPI_DMT_UINT8, ACPI_HEST6_OFFSET (Aer.Flags), "Flags (decoded below)", DT_FLAG}, \ + {ACPI_DMT_FLAG0, ACPI_HEST6_FLAG_OFFSET (Aer.Flags,0), "Firmware First", 0}, \ + {ACPI_DMT_FLAG0, ACPI_HEST6_FLAG_OFFSET (Aer.Flags,0), "Global", 0}, \ + {ACPI_DMT_UINT8, ACPI_HEST6_OFFSET (Aer.Enabled), "Enabled", 0}, \ + {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.RecordsToPreallocate), "Records To Preallocate", 0}, \ + {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.MaxSectionsPerRecord), "Max Sections Per Record", 0}, \ + {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.Bus), "Bus", 0}, \ + {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Device), "Device", 0}, \ + {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Function), "Function", 0}, \ + {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.DeviceControl), "DeviceControl", 0}, \ + {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Reserved2), "Reserved", 0}, \ + {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.UncorrectableMask), "Uncorrectable Mask", 0}, \ + {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.UncorrectableSeverity), "Uncorrectable Severity", 0}, \ + {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.CorrectableMask), "Correctable Mask", 0}, \ + {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.AdvancedCapabilities), "Advanced Capabilities", 0} + + +/* HEST Subtables */ + +/* 0: IA32 Machine Check Exception */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHest0[] = +{ + ACPI_DM_HEST_HEADER, + {ACPI_DMT_UINT16, ACPI_HEST0_OFFSET (Reserved1), "Reserved1", 0}, + {ACPI_DMT_UINT8, ACPI_HEST0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_HEST0_FLAG_OFFSET (Flags,0), "Firmware First", 0}, + {ACPI_DMT_FLAG2, ACPI_HEST0_FLAG_OFFSET (Flags,0), "GHES Assist", 0}, + + {ACPI_DMT_UINT8, ACPI_HEST0_OFFSET (Enabled), "Enabled", 0}, + {ACPI_DMT_UINT32, ACPI_HEST0_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, + {ACPI_DMT_UINT32, ACPI_HEST0_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, + {ACPI_DMT_UINT64, ACPI_HEST0_OFFSET (GlobalCapabilityData), "Global Capability Data", 0}, + {ACPI_DMT_UINT64, ACPI_HEST0_OFFSET (GlobalControlData), "Global Control Data", 0}, + {ACPI_DMT_UINT8, ACPI_HEST0_OFFSET (NumHardwareBanks), "Num Hardware Banks", 0}, + {ACPI_DMT_UINT56, ACPI_HEST0_OFFSET (Reserved3[0]), "Reserved2", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 1: IA32 Corrected Machine Check */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHest1[] = +{ + ACPI_DM_HEST_HEADER, + {ACPI_DMT_UINT16, ACPI_HEST1_OFFSET (Reserved1), "Reserved1", 0}, + {ACPI_DMT_UINT8, ACPI_HEST1_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_HEST1_FLAG_OFFSET (Flags,0), "Firmware First", 0}, + {ACPI_DMT_FLAG2, ACPI_HEST1_FLAG_OFFSET (Flags,0), "GHES Assist", 0}, + + {ACPI_DMT_UINT8, ACPI_HEST1_OFFSET (Enabled), "Enabled", 0}, + {ACPI_DMT_UINT32, ACPI_HEST1_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, + {ACPI_DMT_UINT32, ACPI_HEST1_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, + {ACPI_DMT_HESTNTFY, ACPI_HEST1_OFFSET (Notify), "Notify", 0}, + {ACPI_DMT_UINT8, ACPI_HEST1_OFFSET (NumHardwareBanks), "Num Hardware Banks", 0}, + {ACPI_DMT_UINT24, ACPI_HEST1_OFFSET (Reserved2[0]), "Reserved2", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 2: IA32 Non-Maskable Interrupt */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHest2[] = +{ + ACPI_DM_HEST_HEADER, + {ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, + {ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, + {ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (MaxRawDataLength), "Max Raw Data Length", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 6: PCI Express Root Port AER */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHest6[] = +{ + ACPI_DM_HEST_HEADER, + ACPI_DM_HEST_AER, + {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (RootErrorCommand), "Root Error Command", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 7: PCI Express AER (AER Endpoint) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHest7[] = +{ + ACPI_DM_HEST_HEADER, + ACPI_DM_HEST_AER, + ACPI_DMT_TERMINATOR +}; + +/* 8: PCI Express/PCI-X Bridge AER */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHest8[] = +{ + ACPI_DM_HEST_HEADER, + ACPI_DM_HEST_AER, + {ACPI_DMT_UINT32, ACPI_HEST8_OFFSET (UncorrectableMask2), "2nd Uncorrectable Mask", 0}, + {ACPI_DMT_UINT32, ACPI_HEST8_OFFSET (UncorrectableSeverity2), "2nd Uncorrectable Severity", 0}, + {ACPI_DMT_UINT32, ACPI_HEST8_OFFSET (AdvancedCapabilities2), "2nd Advanced Capabilities", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 9: Generic Hardware Error Source */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHest9[] = +{ + ACPI_DM_HEST_HEADER, + {ACPI_DMT_UINT16, ACPI_HEST9_OFFSET (RelatedSourceId), "Related Source Id", 0}, + {ACPI_DMT_UINT8, ACPI_HEST9_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT8, ACPI_HEST9_OFFSET (Enabled), "Enabled", 0}, + {ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, + {ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, + {ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (MaxRawDataLength), "Max Raw Data Length", 0}, + {ACPI_DMT_GAS, ACPI_HEST9_OFFSET (ErrorStatusAddress), "Error Status Address", 0}, + {ACPI_DMT_HESTNTFY, ACPI_HEST9_OFFSET (Notify), "Notify", 0}, + {ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (ErrorBlockLength), "Error Status Block Length", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 10: Generic Hardware Error Source - Version 2 */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHest10[] = +{ + ACPI_DM_HEST_HEADER, + {ACPI_DMT_UINT16, ACPI_HEST10_OFFSET (RelatedSourceId), "Related Source Id", 0}, + {ACPI_DMT_UINT8, ACPI_HEST10_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT8, ACPI_HEST10_OFFSET (Enabled), "Enabled", 0}, + {ACPI_DMT_UINT32, ACPI_HEST10_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, + {ACPI_DMT_UINT32, ACPI_HEST10_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, + {ACPI_DMT_UINT32, ACPI_HEST10_OFFSET (MaxRawDataLength), "Max Raw Data Length", 0}, + {ACPI_DMT_GAS, ACPI_HEST10_OFFSET (ErrorStatusAddress), "Error Status Address", 0}, + {ACPI_DMT_HESTNTFY, ACPI_HEST10_OFFSET (Notify), "Notify", 0}, + {ACPI_DMT_UINT32, ACPI_HEST10_OFFSET (ErrorBlockLength), "Error Status Block Length", 0}, + {ACPI_DMT_GAS, ACPI_HEST10_OFFSET (ReadAckRegister), "Read Ack Register", 0}, + {ACPI_DMT_UINT64, ACPI_HEST10_OFFSET (ReadAckPreserve), "Read Ack Preserve", 0}, + {ACPI_DMT_UINT64, ACPI_HEST10_OFFSET (ReadAckWrite), "Read Ack Write", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 11: IA32 Deferred Machine Check */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHest11[] = +{ + ACPI_DM_HEST_HEADER, + {ACPI_DMT_UINT16, ACPI_HEST11_OFFSET (Reserved1), "Reserved1", 0}, + {ACPI_DMT_UINT8, ACPI_HEST11_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_HEST11_FLAG_OFFSET (Flags,0), "Firmware First", 0}, + {ACPI_DMT_FLAG2, ACPI_HEST11_FLAG_OFFSET (Flags,0), "GHES Assist", 0}, + + {ACPI_DMT_UINT8, ACPI_HEST11_OFFSET (Enabled), "Enabled", 0}, + {ACPI_DMT_UINT32, ACPI_HEST11_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, + {ACPI_DMT_UINT32, ACPI_HEST11_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, + {ACPI_DMT_HESTNTFY, ACPI_HEST11_OFFSET (Notify), "Notify", 0}, + {ACPI_DMT_UINT8, ACPI_HEST11_OFFSET (NumHardwareBanks), "Num Hardware Banks", 0}, + {ACPI_DMT_UINT24, ACPI_HEST11_OFFSET (Reserved2[0]), "Reserved2", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Notification Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHestNotify[] = +{ + {ACPI_DMT_HESTNTYP, ACPI_HESTN_OFFSET (Type), "Notify Type", 0}, + {ACPI_DMT_UINT8, ACPI_HESTN_OFFSET (Length), "Notify Length", DT_LENGTH}, + {ACPI_DMT_UINT16, ACPI_HESTN_OFFSET (ConfigWriteEnable), "Configuration Write Enable", 0}, + {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (PollInterval), "PollInterval", 0}, + {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (Vector), "Vector", 0}, + {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (PollingThresholdValue), "Polling Threshold Value", 0}, + {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (PollingThresholdWindow), "Polling Threshold Window", 0}, + {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (ErrorThresholdValue), "Error Threshold Value", 0}, + {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (ErrorThresholdWindow), "Error Threshold Window", 0}, + ACPI_DMT_TERMINATOR +}; + + +/* + * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and + * ACPI_HEST_IA_CORRECTED structures. + */ +ACPI_DMTABLE_INFO AcpiDmTableInfoHestBank[] = +{ + {ACPI_DMT_UINT8, ACPI_HESTB_OFFSET (BankNumber), "Bank Number", 0}, + {ACPI_DMT_UINT8, ACPI_HESTB_OFFSET (ClearStatusOnInit), "Clear Status On Init", 0}, + {ACPI_DMT_UINT8, ACPI_HESTB_OFFSET (StatusFormat), "Status Format", 0}, + {ACPI_DMT_UINT8, ACPI_HESTB_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_HESTB_OFFSET (ControlRegister), "Control Register", 0}, + {ACPI_DMT_UINT64, ACPI_HESTB_OFFSET (ControlData), "Control Data", 0}, + {ACPI_DMT_UINT32, ACPI_HESTB_OFFSET (StatusRegister), "Status Register", 0}, + {ACPI_DMT_UINT32, ACPI_HESTB_OFFSET (AddressRegister), "Address Register", 0}, + {ACPI_DMT_UINT32, ACPI_HESTB_OFFSET (MiscRegister), "Misc Register", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * HMAT - Heterogeneous Memory Attributes Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat[] = +{ + {ACPI_DMT_UINT32, ACPI_HMAT_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Common HMAT structure header (one per Subtable) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHmatHdr[] = +{ + {ACPI_DMT_HMAT, ACPI_HMATH_OFFSET (Type), "Structure Type", 0}, + {ACPI_DMT_UINT16, ACPI_HMATH_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_HMATH_OFFSET (Length), "Length", 0}, + ACPI_DMT_TERMINATOR +}; + +/* HMAT subtables */ + +/* 0x00: Memory Subsystem Address Range */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat0[] = +{ + {ACPI_DMT_UINT16, ACPI_HMAT0_OFFSET (Flags), "Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_HMAT0_FLAG_OFFSET (Flags,0), "Processor Proximity Domain Valid", 0}, + {ACPI_DMT_FLAG1, ACPI_HMAT0_FLAG_OFFSET (Flags,0), "Memory Proximity Domain Valid", 0}, + {ACPI_DMT_FLAG2, ACPI_HMAT0_FLAG_OFFSET (Flags,0), "Reservation Hint", 0}, + {ACPI_DMT_UINT16, ACPI_HMAT0_OFFSET (Reserved1), "Reserved1", 0}, + {ACPI_DMT_UINT32, ACPI_HMAT0_OFFSET (ProcessorPD), "Processor Proximity Domain", 0}, + {ACPI_DMT_UINT32, ACPI_HMAT0_OFFSET (MemoryPD), "Memory Proximity Domain", 0}, + {ACPI_DMT_UINT32, ACPI_HMAT0_OFFSET (Reserved2), "Reserved2", 0}, + {ACPI_DMT_UINT64, ACPI_HMAT0_OFFSET (PhysicalAddressBase), "Physical Address Range Base", 0}, + {ACPI_DMT_UINT64, ACPI_HMAT0_OFFSET (PhysicalAddressLength), "Physical Address Range Size", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 0x01: System Locality Latency and Bandwidth Information */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1[] = +{ + {ACPI_DMT_UINT8, ACPI_HMAT1_OFFSET (Flags), "Flags (decoded below)", 0}, + {ACPI_DMT_FLAGS4_0, ACPI_HMAT1_FLAG_OFFSET (Flags,0), "Memory Hierarchy", 0}, + {ACPI_DMT_UINT8, ACPI_HMAT1_OFFSET (DataType), "Data Type", 0}, + {ACPI_DMT_UINT16, ACPI_HMAT1_OFFSET (Reserved1), "Reserved1", 0}, + {ACPI_DMT_UINT32, ACPI_HMAT1_OFFSET (NumberOfInitiatorPDs), "Initiator Proximity Domains #", 0}, + {ACPI_DMT_UINT32, ACPI_HMAT1_OFFSET (NumberOfTargetPDs), "Target Proximity Domains #", 0}, + {ACPI_DMT_UINT32, ACPI_HMAT1_OFFSET (Reserved2), "Reserved2", 0}, + {ACPI_DMT_UINT64, ACPI_HMAT1_OFFSET (EntryBaseUnit), "Entry Base Unit", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1a[] = +{ + {ACPI_DMT_UINT32, 0, "Initiator Proximity Domain List", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1b[] = +{ + {ACPI_DMT_UINT32, 0, "Target Proximity Domain List", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1c[] = +{ + {ACPI_DMT_UINT16, 0, "Entry", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + +/* 0x02: Memory Side Cache Information */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat2[] = +{ + {ACPI_DMT_UINT32, ACPI_HMAT2_OFFSET (MemoryPD), "Memory Proximity Domain", 0}, + {ACPI_DMT_UINT32, ACPI_HMAT2_OFFSET (Reserved1), "Reserved1", 0}, + {ACPI_DMT_UINT64, ACPI_HMAT2_OFFSET (CacheSize), "Memory Side Cache Size", 0}, + {ACPI_DMT_UINT32, ACPI_HMAT2_OFFSET (CacheAttributes), "Cache Attributes (decoded below)", 0}, + {ACPI_DMT_FLAGS4_0, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Total Cache Levels", 0}, + {ACPI_DMT_FLAGS4_4, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Cache Level", 0}, + {ACPI_DMT_FLAGS4_8, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Cache Associativity", 0}, + {ACPI_DMT_FLAGS4_12, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Write Policy", 0}, + {ACPI_DMT_FLAGS16_16, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Cache Line Size", 0}, + {ACPI_DMT_UINT16, ACPI_HMAT2_OFFSET (Reserved2), "Reserved2", 0}, + {ACPI_DMT_UINT16, ACPI_HMAT2_OFFSET (NumberOfSMBIOSHandles), "SMBIOS Handle #", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat2a[] = +{ + {ACPI_DMT_UINT16, 0, "SMBIOS Handle", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * HPET - High Precision Event Timer table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHpet[] = +{ + {ACPI_DMT_UINT32, ACPI_HPET_OFFSET (Id), "Hardware Block ID", 0}, + {ACPI_DMT_GAS, ACPI_HPET_OFFSET (Address), "Timer Block Register", 0}, + {ACPI_DMT_UINT8, ACPI_HPET_OFFSET (Sequence), "Sequence Number", 0}, + {ACPI_DMT_UINT16, ACPI_HPET_OFFSET (MinimumTick), "Minimum Clock Ticks", 0}, + {ACPI_DMT_UINT8, ACPI_HPET_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_HPET_FLAG_OFFSET (Flags,0), "4K Page Protect", 0}, + {ACPI_DMT_FLAG1, ACPI_HPET_FLAG_OFFSET (Flags,0), "64K Page Protect", 0}, + ACPI_DMT_TERMINATOR +}; +/*! [End] no source code translation !*/ diff --git a/sys/contrib/dev/acpica/source/common/dmtbinfo2.c b/sys/contrib/dev/acpica/source/common/dmtbinfo2.c new file mode 100644 index 0000000000..1efd3fd92a --- /dev/null +++ b/sys/contrib/dev/acpica/source/common/dmtbinfo2.c @@ -0,0 +1,1541 @@ +/****************************************************************************** + * + * Module Name: dmtbinfo2 - Table info for non-AML tables + * + *****************************************************************************/ + +/****************************************************************************** + * + * 1. Copyright Notice + * + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. + * All rights reserved. + * + * 2. License + * + * 2.1. This is your license from Intel Corp. under its intellectual property + * rights. You may have additional license terms from the party that provided + * you this software, covering your right to use that party's intellectual + * property rights. + * + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a + * copy of the source code appearing in this file ("Covered Code") an + * irrevocable, perpetual, worldwide license under Intel's copyrights in the + * base code distributed originally by Intel ("Original Intel Code") to copy, + * make derivatives, distribute, use and display any portion of the Covered + * Code in any form, with the right to sublicense such rights; and + * + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent + * license (with the right to sublicense), under only those claims of Intel + * patents that are infringed by the Original Intel Code, to make, use, sell, + * offer to sell, and import the Covered Code and derivative works thereof + * solely to the minimum extent necessary to exercise the above copyright + * license, and in no event shall the patent license extend to any additions + * to or modifications of the Original Intel Code. No other license or right + * is granted directly or by implication, estoppel or otherwise; + * + * The above copyright and patent license is granted only if the following + * conditions are met: + * + * 3. Conditions + * + * 3.1. Redistribution of Source with Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification with rights to further distribute source must include + * the above Copyright Notice, the above License, this list of Conditions, + * and the following Disclaimer and Export Compliance provision. In addition, + * Licensee must cause all Covered Code to which Licensee contributes to + * contain a file documenting the changes Licensee made to create that Covered + * Code and the date of any change. Licensee must include in that file the + * documentation of any changes made by any predecessor Licensee. Licensee + * must include a prominent statement that the modification is derived, + * directly or indirectly, from Original Intel Code. + * + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification without rights to further distribute source must + * include the following Disclaimer and Export Compliance provision in the + * documentation and/or other materials provided with distribution. In + * addition, Licensee may not authorize further sublicense of source of any + * portion of the Covered Code, and must include terms to the effect that the + * license from Licensee to its licensee is limited to the intellectual + * property embodied in the software Licensee provides to its licensee, and + * not to intellectual property embodied in modifications its licensee may + * make. + * + * 3.3. Redistribution of Executable. Redistribution in executable form of any + * substantial portion of the Covered Code or modification must reproduce the + * above Copyright Notice, and the following Disclaimer and Export Compliance + * provision in the documentation and/or other materials provided with the + * distribution. + * + * 3.4. Intel retains all right, title, and interest in and to the Original + * Intel Code. + * + * 3.5. Neither the name Intel nor any other trademark owned or controlled by + * Intel shall be used in advertising or otherwise to promote the sale, use or + * other dealings in products derived from or relating to the Covered Code + * without prior written authorization from Intel. + * + * 4. Disclaimer and Export Compliance + * + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A + * PARTICULAR PURPOSE. + * + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY + * LIMITED REMEDY. + * + * 4.3. Licensee shall not export, either directly or indirectly, any of this + * software or system incorporating such software without first obtaining any + * required license or other approval from the U. S. Department of Commerce or + * any other agency or department of the United States Government. In the + * event Licensee exports any such software from the United States or + * re-exports any such software from a foreign destination, Licensee shall + * ensure that the distribution and export/re-export of the software is in + * compliance with all laws, regulations, orders, or other restrictions of the + * U.S. Export Administration Regulations. Licensee agrees that neither it nor + * any of its subsidiaries will export/re-export any technical data, process, + * software, or service, directly or indirectly, to any country for which the + * United States government or any agency thereof requires an export license, + * other governmental approval, or letter of assurance, without first obtaining + * such license, approval or letter. + * + ***************************************************************************** + * + * Alternatively, you may choose to be licensed under the terms of the + * following license: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Alternatively, you may choose to be licensed under the terms of the + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. + * + *****************************************************************************/ + +#include "acpi.h" +#include "accommon.h" +#include "acdisasm.h" +#include "actbinfo.h" + +/* This module used for application-level code only */ + +#define _COMPONENT ACPI_CA_DISASSEMBLER + ACPI_MODULE_NAME ("dmtbinfo2") + +/* + * How to add a new table: + * + * - Add the C table definition to the actbl1.h or actbl2.h header. + * - Add ACPI_xxxx_OFFSET macro(s) for the table (and subtables) to list below. + * - Define the table in this file (for the disassembler). If any + * new data types are required (ACPI_DMT_*), see below. + * - Add an external declaration for the new table definition (AcpiDmTableInfo*) + * in acdisam.h + * - Add new table definition to the dispatch table in dmtable.c (AcpiDmTableData) + * If a simple table (with no subtables), no disassembly code is needed. + * Otherwise, create the AcpiDmDump* function for to disassemble the table + * and add it to the dmtbdump.c file. + * - Add an external declaration for the new AcpiDmDump* function in acdisasm.h + * - Add the new AcpiDmDump* function to the dispatch table in dmtable.c + * - Create a template for the new table + * - Add data table compiler support + * + * How to add a new data type (ACPI_DMT_*): + * + * - Add new type at the end of the ACPI_DMT list in acdisasm.h + * - Add length and implementation cases in dmtable.c (disassembler) + * - Add type and length cases in dtutils.c (DT compiler) + */ + +/* + * Remaining tables are not consumed directly by the ACPICA subsystem + */ + + +/******************************************************************************* + * + * IORT - IO Remapping Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIort[] = +{ + {ACPI_DMT_UINT32, ACPI_IORT_OFFSET (NodeCount), "Node Count", 0}, + {ACPI_DMT_UINT32, ACPI_IORT_OFFSET (NodeOffset), "Node Offset", 0}, + {ACPI_DMT_UINT32, ACPI_IORT_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Optional padding field */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIortPad[] = +{ + {ACPI_DMT_RAW_BUFFER, 0, "Optional Padding", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + +/* Common Subtable header (one per Subtable) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIortHdr[] = +{ + {ACPI_DMT_UINT8, ACPI_IORTH_OFFSET (Type), "Type", 0}, + {ACPI_DMT_UINT16, ACPI_IORTH_OFFSET (Length), "Length", DT_LENGTH}, + {ACPI_DMT_UINT8, ACPI_IORTH_OFFSET (Revision), "Revision", 0}, + {ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (MappingCount), "Mapping Count", 0}, + {ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (MappingOffset), "Mapping Offset", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoIortMap[] = +{ + {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (InputBase), "Input base", DT_OPTIONAL}, + {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (IdCount), "ID Count", 0}, + {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (OutputBase), "Output Base", 0}, + {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (OutputReference), "Output Reference", 0}, + {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (Flags), "Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_IORTM_FLAG_OFFSET (Flags, 0), "Single Mapping", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoIortAcc[] = +{ + {ACPI_DMT_UINT32, ACPI_IORTA_OFFSET (CacheCoherency), "Cache Coherency", 0}, + {ACPI_DMT_UINT8, ACPI_IORTA_OFFSET (Hints), "Hints (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_IORTA_FLAG_OFFSET (Hints, 0), "Transient", 0}, + {ACPI_DMT_FLAG1, ACPI_IORTA_FLAG_OFFSET (Hints, 0), "Write Allocate", 0}, + {ACPI_DMT_FLAG2, ACPI_IORTA_FLAG_OFFSET (Hints, 0), "Read Allocate", 0}, + {ACPI_DMT_FLAG3, ACPI_IORTA_FLAG_OFFSET (Hints, 0), "Override", 0}, + {ACPI_DMT_UINT16, ACPI_IORTA_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT8, ACPI_IORTA_OFFSET (MemoryFlags), "Memory Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_IORTA_FLAG_OFFSET (MemoryFlags, 0), "Coherency", 0}, + {ACPI_DMT_FLAG1, ACPI_IORTA_FLAG_OFFSET (MemoryFlags, 0), "Device Attribute", 0}, + ACPI_DMT_TERMINATOR +}; + +/* IORT subtables */ + +/* 0x00: ITS Group */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIort0[] = +{ + {ACPI_DMT_UINT32, ACPI_IORT0_OFFSET (ItsCount), "ItsCount", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoIort0a[] = +{ + {ACPI_DMT_UINT32, 0, "Identifiers", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + +/* 0x01: Named Component */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIort1[] = +{ + {ACPI_DMT_UINT32, ACPI_IORT1_OFFSET (NodeFlags), "Node Flags", 0}, + {ACPI_DMT_IORTMEM, ACPI_IORT1_OFFSET (MemoryProperties), "Memory Properties", 0}, + {ACPI_DMT_UINT8, ACPI_IORT1_OFFSET (MemoryAddressLimit), "Memory Size Limit", 0}, + {ACPI_DMT_STRING, ACPI_IORT1_OFFSET (DeviceName[0]), "Device Name", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoIort1a[] = +{ + {ACPI_DMT_RAW_BUFFER, 0, "Padding", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + +/* 0x02: PCI Root Complex */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIort2[] = +{ + {ACPI_DMT_IORTMEM, ACPI_IORT2_OFFSET (MemoryProperties), "Memory Properties", 0}, + {ACPI_DMT_UINT32, ACPI_IORT2_OFFSET (AtsAttribute), "ATS Attribute", 0}, + {ACPI_DMT_UINT32, ACPI_IORT2_OFFSET (PciSegmentNumber), "PCI Segment Number", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 0x03: SMMUv1/2 */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIort3[] = +{ + {ACPI_DMT_UINT64, ACPI_IORT3_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT64, ACPI_IORT3_OFFSET (Span), "Span", 0}, + {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (Model), "Model", 0}, + {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (Flags), "Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_IORT3_FLAG_OFFSET (Flags, 0), "DVM Supported", 0}, + {ACPI_DMT_FLAG1, ACPI_IORT3_FLAG_OFFSET (Flags, 0), "Coherent Walk", 0}, + {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (GlobalInterruptOffset), "Global Interrupt Offset", 0}, + {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (ContextInterruptCount), "Context Interrupt Count", 0}, + {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (ContextInterruptOffset), "Context Interrupt Offset", 0}, + {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (PmuInterruptCount), "PMU Interrupt Count", 0}, + {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (PmuInterruptOffset), "PMU Interrupt Offset", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoIort3a[] = +{ + {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgIrpt), "NSgIrpt", 0}, + {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgIrptFlags), "NSgIrpt Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_IORT3a_FLAG_OFFSET (NSgIrptFlags, 0), "Edge Triggered", 0}, + {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgCfgIrpt), "NSgCfgIrpt", 0}, + {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgCfgIrptFlags), "NSgCfgIrpt Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_IORT3a_FLAG_OFFSET (NSgCfgIrptFlags, 0), "Edge Triggered", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoIort3b[] = +{ + {ACPI_DMT_UINT64, 0, "Context Interrupt", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoIort3c[] = +{ + {ACPI_DMT_UINT64, 0, "PMU Interrupt", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + +/* 0x04: SMMUv3 */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIort4[] = +{ + {ACPI_DMT_UINT64, ACPI_IORT4_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (Flags), "Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_IORT4_FLAG_OFFSET (Flags, 0), "COHACC Override", 0}, + {ACPI_DMT_FLAG1, ACPI_IORT4_FLAG_OFFSET (Flags, 0), "HTTU Override", 0}, + {ACPI_DMT_FLAG3, ACPI_IORT4_FLAG_OFFSET (Flags, 0), "Proximity Domain Valid", 0}, + {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_IORT4_OFFSET (VatosAddress), "VATOS Address", 0}, + {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (Model), "Model", 0}, + {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (EventGsiv), "Event GSIV", 0}, + {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (PriGsiv), "PRI GSIV", 0}, + {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (GerrGsiv), "GERR GSIV", 0}, + {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (SyncGsiv), "Sync GSIV", 0}, + {ACPI_DMT_UINT8, ACPI_IORT4_OFFSET (Pxm), "Proximity Domain", 0}, + {ACPI_DMT_UINT8, ACPI_IORT4_OFFSET (Reserved1), "Reserved", 0}, + {ACPI_DMT_UINT16, ACPI_IORT4_OFFSET (Reserved2), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (IdMappingIndex), "Device ID Mapping Index", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * IVRS - I/O Virtualization Reporting Structure + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs[] = +{ + {ACPI_DMT_UINT32, ACPI_IVRS_OFFSET (Info), "Virtualization Info", 0}, + {ACPI_DMT_UINT64, ACPI_IVRS_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Common Subtable header (one per Subtable) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIvrsHdr[] = +{ + {ACPI_DMT_IVRS, ACPI_IVRSH_OFFSET (Type), "Subtable Type", 0}, + {ACPI_DMT_UINT8, ACPI_IVRSH_OFFSET (Flags), "Flags", 0}, + {ACPI_DMT_UINT16, ACPI_IVRSH_OFFSET (Length), "Length", DT_LENGTH}, + {ACPI_DMT_UINT16, ACPI_IVRSH_OFFSET (DeviceId), "DeviceId", 0}, + ACPI_DMT_TERMINATOR +}; + +/* IVRS subtables */ + +/* 0x10: I/O Virtualization Hardware Definition (IVHD) Block */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs0[] = +{ + {ACPI_DMT_UINT16, ACPI_IVRS0_OFFSET (CapabilityOffset), "Capability Offset", 0}, + {ACPI_DMT_UINT64, ACPI_IVRS0_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT16, ACPI_IVRS0_OFFSET (PciSegmentGroup), "PCI Segment Group", 0}, + {ACPI_DMT_UINT16, ACPI_IVRS0_OFFSET (Info), "Virtualization Info", 0}, + {ACPI_DMT_UINT32, ACPI_IVRS0_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition (IVMD) Block */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs1[] = +{ + {ACPI_DMT_UINT16, ACPI_IVRS1_OFFSET (AuxData), "Auxiliary Data", 0}, + {ACPI_DMT_UINT64, ACPI_IVRS1_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_IVRS1_OFFSET (StartAddress), "Start Address", 0}, + {ACPI_DMT_UINT64, ACPI_IVRS1_OFFSET (MemoryLength), "Memory Length", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Device entry header for IVHD block */ + +#define ACPI_DMT_IVRS_DE_HEADER \ + {ACPI_DMT_UINT8, ACPI_IVRSD_OFFSET (Type), "Entry Type", 0}, \ + {ACPI_DMT_UINT16, ACPI_IVRSD_OFFSET (Id), "Device ID", 0}, \ + {ACPI_DMT_UINT8, ACPI_IVRSD_OFFSET (DataSetting), "Data Setting", 0} + +/* 4-byte device entry */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs4[] = +{ + ACPI_DMT_IVRS_DE_HEADER, + {ACPI_DMT_EXIT, 0, NULL, 0}, +}; + +/* 8-byte device entry */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8a[] = +{ + ACPI_DMT_IVRS_DE_HEADER, + {ACPI_DMT_UINT8, ACPI_IVRS8A_OFFSET (Reserved1), "Reserved", 0}, + {ACPI_DMT_UINT16, ACPI_IVRS8A_OFFSET (UsedId), "Source Used Device ID", 0}, + {ACPI_DMT_UINT8, ACPI_IVRS8A_OFFSET (Reserved2), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 8-byte device entry */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8b[] = +{ + ACPI_DMT_IVRS_DE_HEADER, + {ACPI_DMT_UINT32, ACPI_IVRS8B_OFFSET (ExtendedData), "Extended Data", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 8-byte device entry */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8c[] = +{ + ACPI_DMT_IVRS_DE_HEADER, + {ACPI_DMT_UINT8, ACPI_IVRS8C_OFFSET (Handle), "Handle", 0}, + {ACPI_DMT_UINT16, ACPI_IVRS8C_OFFSET (UsedId), "Source Used Device ID", 0}, + {ACPI_DMT_UINT8, ACPI_IVRS8C_OFFSET (Variety), "Variety", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * LPIT - Low Power Idle Table + * + ******************************************************************************/ + +/* Main table consists only of the standard ACPI table header */ + +/* Common Subtable header (one per Subtable) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoLpitHdr[] = +{ + {ACPI_DMT_LPIT, ACPI_LPITH_OFFSET (Type), "Subtable Type", 0}, + {ACPI_DMT_UINT32, ACPI_LPITH_OFFSET (Length), "Length", DT_LENGTH}, + {ACPI_DMT_UINT16, ACPI_LPITH_OFFSET (UniqueId), "Unique ID", 0}, + {ACPI_DMT_UINT16, ACPI_LPITH_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_LPITH_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_LPITH_FLAG_OFFSET (Flags, 0), "State Disabled", 0}, + {ACPI_DMT_FLAG1, ACPI_LPITH_FLAG_OFFSET (Flags, 0), "No Counter", 0}, + ACPI_DMT_TERMINATOR +}; + +/* LPIT Subtables */ + +/* 0: Native C-state */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoLpit0[] = +{ + {ACPI_DMT_GAS, ACPI_LPIT0_OFFSET (EntryTrigger), "Entry Trigger", 0}, + {ACPI_DMT_UINT32, ACPI_LPIT0_OFFSET (Residency), "Residency", 0}, + {ACPI_DMT_UINT32, ACPI_LPIT0_OFFSET (Latency), "Latency", 0}, + {ACPI_DMT_GAS, ACPI_LPIT0_OFFSET (ResidencyCounter), "Residency Counter", 0}, + {ACPI_DMT_UINT64, ACPI_LPIT0_OFFSET (CounterFrequency), "Counter Frequency", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * MADT - Multiple APIC Description Table and subtables + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt[] = +{ + {ACPI_DMT_UINT32, ACPI_MADT_OFFSET (Address), "Local Apic Address", 0}, + {ACPI_DMT_UINT32, ACPI_MADT_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_MADT_FLAG_OFFSET (Flags,0), "PC-AT Compatibility", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Common Subtable header (one per Subtable) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadtHdr[] = +{ + {ACPI_DMT_MADT, ACPI_MADTH_OFFSET (Type), "Subtable Type", 0}, + {ACPI_DMT_UINT8, ACPI_MADTH_OFFSET (Length), "Length", DT_LENGTH}, + ACPI_DMT_TERMINATOR +}; + +/* MADT Subtables */ + +/* 0: processor APIC */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt0[] = +{ + {ACPI_DMT_UINT8, ACPI_MADT0_OFFSET (ProcessorId), "Processor ID", 0}, + {ACPI_DMT_UINT8, ACPI_MADT0_OFFSET (Id), "Local Apic ID", 0}, + {ACPI_DMT_UINT32, ACPI_MADT0_OFFSET (LapicFlags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_MADT0_FLAG_OFFSET (LapicFlags,0), "Processor Enabled", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 1: IO APIC */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt1[] = +{ + {ACPI_DMT_UINT8, ACPI_MADT1_OFFSET (Id), "I/O Apic ID", 0}, + {ACPI_DMT_UINT8, ACPI_MADT1_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_MADT1_OFFSET (Address), "Address", 0}, + {ACPI_DMT_UINT32, ACPI_MADT1_OFFSET (GlobalIrqBase), "Interrupt", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 2: Interrupt Override */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt2[] = +{ + {ACPI_DMT_UINT8, ACPI_MADT2_OFFSET (Bus), "Bus", 0}, + {ACPI_DMT_UINT8, ACPI_MADT2_OFFSET (SourceIrq), "Source", 0}, + {ACPI_DMT_UINT32, ACPI_MADT2_OFFSET (GlobalIrq), "Interrupt", 0}, + {ACPI_DMT_UINT16, ACPI_MADT2_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAGS0, ACPI_MADT2_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, + {ACPI_DMT_FLAGS2, ACPI_MADT2_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 3: NMI Sources */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt3[] = +{ + {ACPI_DMT_UINT16, ACPI_MADT3_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAGS0, ACPI_MADT3_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, + {ACPI_DMT_FLAGS2, ACPI_MADT3_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, + {ACPI_DMT_UINT32, ACPI_MADT3_OFFSET (GlobalIrq), "Interrupt", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 4: Local APIC NMI */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt4[] = +{ + {ACPI_DMT_UINT8, ACPI_MADT4_OFFSET (ProcessorId), "Processor ID", 0}, + {ACPI_DMT_UINT16, ACPI_MADT4_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAGS0, ACPI_MADT4_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, + {ACPI_DMT_FLAGS2, ACPI_MADT4_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, + {ACPI_DMT_UINT8, ACPI_MADT4_OFFSET (Lint), "Interrupt Input LINT", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 5: Address Override */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt5[] = +{ + {ACPI_DMT_UINT16, ACPI_MADT5_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_MADT5_OFFSET (Address), "APIC Address", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 6: I/O Sapic */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt6[] = +{ + {ACPI_DMT_UINT8, ACPI_MADT6_OFFSET (Id), "I/O Sapic ID", 0}, + {ACPI_DMT_UINT8, ACPI_MADT6_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_MADT6_OFFSET (GlobalIrqBase), "Interrupt Base", 0}, + {ACPI_DMT_UINT64, ACPI_MADT6_OFFSET (Address), "Address", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 7: Local Sapic */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt7[] = +{ + {ACPI_DMT_UINT8, ACPI_MADT7_OFFSET (ProcessorId), "Processor ID", 0}, + {ACPI_DMT_UINT8, ACPI_MADT7_OFFSET (Id), "Local Sapic ID", 0}, + {ACPI_DMT_UINT8, ACPI_MADT7_OFFSET (Eid), "Local Sapic EID", 0}, + {ACPI_DMT_UINT24, ACPI_MADT7_OFFSET (Reserved[0]), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_MADT7_OFFSET (LapicFlags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_MADT7_FLAG_OFFSET (LapicFlags,0), "Processor Enabled", 0}, + {ACPI_DMT_UINT32, ACPI_MADT7_OFFSET (Uid), "Processor UID", 0}, + {ACPI_DMT_STRING, ACPI_MADT7_OFFSET (UidString[0]), "Processor UID String", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 8: Platform Interrupt Source */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt8[] = +{ + {ACPI_DMT_UINT16, ACPI_MADT8_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAGS0, ACPI_MADT8_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, + {ACPI_DMT_FLAGS2, ACPI_MADT8_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, + {ACPI_DMT_UINT8, ACPI_MADT8_OFFSET (Type), "InterruptType", 0}, + {ACPI_DMT_UINT8, ACPI_MADT8_OFFSET (Id), "Processor ID", 0}, + {ACPI_DMT_UINT8, ACPI_MADT8_OFFSET (Eid), "Processor EID", 0}, + {ACPI_DMT_UINT8, ACPI_MADT8_OFFSET (IoSapicVector), "I/O Sapic Vector", 0}, + {ACPI_DMT_UINT32, ACPI_MADT8_OFFSET (GlobalIrq), "Interrupt", 0}, + {ACPI_DMT_UINT32, ACPI_MADT8_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_MADT8_OFFSET (Flags), "CPEI Override", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 9: Processor Local X2_APIC (ACPI 4.0) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt9[] = +{ + {ACPI_DMT_UINT16, ACPI_MADT9_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_MADT9_OFFSET (LocalApicId), "Processor x2Apic ID", 0}, + {ACPI_DMT_UINT32, ACPI_MADT9_OFFSET (LapicFlags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_MADT9_FLAG_OFFSET (LapicFlags,0), "Processor Enabled", 0}, + {ACPI_DMT_UINT32, ACPI_MADT9_OFFSET (Uid), "Processor UID", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 10: Local X2_APIC NMI (ACPI 4.0) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt10[] = +{ + {ACPI_DMT_UINT16, ACPI_MADT10_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAGS0, ACPI_MADT10_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, + {ACPI_DMT_FLAGS2, ACPI_MADT10_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, + {ACPI_DMT_UINT32, ACPI_MADT10_OFFSET (Uid), "Processor UID", 0}, + {ACPI_DMT_UINT8, ACPI_MADT10_OFFSET (Lint), "Interrupt Input LINT", 0}, + {ACPI_DMT_UINT24, ACPI_MADT10_OFFSET (Reserved[0]), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 11: Generic Interrupt Controller (ACPI 5.0) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt11[] = +{ + {ACPI_DMT_UINT16, ACPI_MADT11_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (CpuInterfaceNumber), "CPU Interface Number", 0}, + {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (Uid), "Processor UID", 0}, + {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Processor Enabled", 0}, + {ACPI_DMT_FLAG1, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Performance Interrupt Trigger Mode", 0}, + {ACPI_DMT_FLAG2, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Virtual GIC Interrupt Trigger Mode", 0}, + {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (ParkingVersion), "Parking Protocol Version", 0}, + {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (PerformanceInterrupt), "Performance Interrupt", 0}, + {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (ParkedAddress), "Parked Address", 0}, + {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GicvBaseAddress), "Virtual GIC Base Address", 0}, + {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GichBaseAddress), "Hypervisor GIC Base Address", 0}, + {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (VgicInterrupt), "Virtual GIC Interrupt", 0}, + {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GicrBaseAddress), "Redistributor Base Address", 0}, + {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (ArmMpidr), "ARM MPIDR", 0}, + {ACPI_DMT_UINT8, ACPI_MADT11_OFFSET (EfficiencyClass), "Efficiency Class", 0}, + {ACPI_DMT_UINT24, ACPI_MADT11_OFFSET (Reserved2[0]), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 12: Generic Interrupt Distributor (ACPI 5.0) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt12[] = +{ + {ACPI_DMT_UINT16, ACPI_MADT12_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_MADT12_OFFSET (GicId), "Local GIC Hardware ID", 0}, + {ACPI_DMT_UINT64, ACPI_MADT12_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT32, ACPI_MADT12_OFFSET (GlobalIrqBase), "Interrupt Base", 0}, + {ACPI_DMT_UINT8, ACPI_MADT12_OFFSET (Version), "Version", 0}, + {ACPI_DMT_UINT24, ACPI_MADT12_OFFSET (Reserved2[0]), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 13: Generic MSI Frame (ACPI 5.1) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt13[] = +{ + {ACPI_DMT_UINT16, ACPI_MADT13_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_MADT13_OFFSET (MsiFrameId), "MSI Frame ID", 0}, + {ACPI_DMT_UINT64, ACPI_MADT13_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT32, ACPI_MADT13_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_MADT13_FLAG_OFFSET (Flags,0), "Select SPI", 0}, + {ACPI_DMT_UINT16, ACPI_MADT13_OFFSET (SpiCount), "SPI Count", 0}, + {ACPI_DMT_UINT16, ACPI_MADT13_OFFSET (SpiBase), "SPI Base", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 14: Generic Redistributor (ACPI 5.1) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt14[] = +{ + {ACPI_DMT_UINT16, ACPI_MADT14_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_MADT14_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT32, ACPI_MADT14_OFFSET (Length), "Length", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 15: Generic Translator (ACPI 6.0) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt15[] = +{ + {ACPI_DMT_UINT16, ACPI_MADT15_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_MADT15_OFFSET (TranslationId), "Translation ID", 0}, + {ACPI_DMT_UINT64, ACPI_MADT15_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT32, ACPI_MADT15_OFFSET (Reserved2), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * MCFG - PCI Memory Mapped Configuration table and Subtable + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMcfg[] = +{ + {ACPI_DMT_UINT64, ACPI_MCFG_OFFSET (Reserved[0]), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoMcfg0[] = +{ + {ACPI_DMT_UINT64, ACPI_MCFG0_OFFSET (Address), "Base Address", 0}, + {ACPI_DMT_UINT16, ACPI_MCFG0_OFFSET (PciSegment), "Segment Group Number", 0}, + {ACPI_DMT_UINT8, ACPI_MCFG0_OFFSET (StartBusNumber), "Start Bus Number", 0}, + {ACPI_DMT_UINT8, ACPI_MCFG0_OFFSET (EndBusNumber), "End Bus Number", 0}, + {ACPI_DMT_UINT32, ACPI_MCFG0_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * MCHI - Management Controller Host Interface table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMchi[] = +{ + {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (InterfaceType), "Interface Type", 0}, + {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (Protocol), "Protocol", 0}, + {ACPI_DMT_UINT64, ACPI_MCHI_OFFSET (ProtocolData), "Protocol Data", 0}, + {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (InterruptType), "Interrupt Type", 0}, + {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (Gpe), "Gpe", 0}, + {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciDeviceFlag), "Pci Device Flag", 0}, + {ACPI_DMT_UINT32, ACPI_MCHI_OFFSET (GlobalInterrupt), "Global Interrupt", 0}, + {ACPI_DMT_GAS, ACPI_MCHI_OFFSET (ControlRegister), "Control Register", 0}, + {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciSegment), "Pci Segment", 0}, + {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciBus), "Pci Bus", 0}, + {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciDevice), "Pci Device", 0}, + {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciFunction), "Pci Function", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * MPST - Memory Power State Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMpst[] = +{ + {ACPI_DMT_UINT8, ACPI_MPST_OFFSET (ChannelId), "Channel ID", 0}, + {ACPI_DMT_UINT24, ACPI_MPST_OFFSET (Reserved1[0]), "Reserved", 0}, + {ACPI_DMT_UINT16, ACPI_MPST_OFFSET (PowerNodeCount), "Power Node Count", 0}, + {ACPI_DMT_UINT16, ACPI_MPST_OFFSET (Reserved2), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* MPST subtables */ + +/* 0: Memory Power Node Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMpst0[] = +{ + {ACPI_DMT_UINT8, ACPI_MPST0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_MPST0_FLAG_OFFSET (Flags,0), "Node Enabled", 0}, + {ACPI_DMT_FLAG1, ACPI_MPST0_FLAG_OFFSET (Flags,0), "Power Managed", 0}, + {ACPI_DMT_FLAG2, ACPI_MPST0_FLAG_OFFSET (Flags,0), "Hot Plug Capable", 0}, + + {ACPI_DMT_UINT8, ACPI_MPST0_OFFSET (Reserved1), "Reserved", 0}, + {ACPI_DMT_UINT16, ACPI_MPST0_OFFSET (NodeId), "Node ID", 0}, + {ACPI_DMT_UINT32, ACPI_MPST0_OFFSET (Length), "Length", 0}, + {ACPI_DMT_UINT64, ACPI_MPST0_OFFSET (RangeAddress), "Range Address", 0}, + {ACPI_DMT_UINT64, ACPI_MPST0_OFFSET (RangeLength), "Range Length", 0}, + {ACPI_DMT_UINT32, ACPI_MPST0_OFFSET (NumPowerStates), "Num Power States", 0}, + {ACPI_DMT_UINT32, ACPI_MPST0_OFFSET (NumPhysicalComponents), "Num Physical Components", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 0A: Sub-subtable - Memory Power State Structure (follows Memory Power Node above) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMpst0A[] = +{ + {ACPI_DMT_UINT8, ACPI_MPST0A_OFFSET (PowerState), "Power State", 0}, + {ACPI_DMT_UINT8, ACPI_MPST0A_OFFSET (InfoIndex), "InfoIndex", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 0B: Sub-subtable - Physical Component ID Structure (follows Memory Power State(s) above) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMpst0B[] = +{ + {ACPI_DMT_UINT16, ACPI_MPST0B_OFFSET (ComponentId), "Component Id", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 01: Power Characteristics Count (follows all Power Node(s) above) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMpst1[] = +{ + {ACPI_DMT_UINT16, ACPI_MPST1_OFFSET (CharacteristicsCount), "Characteristics Count", 0}, + {ACPI_DMT_UINT16, ACPI_MPST1_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 02: Memory Power State Characteristics Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMpst2[] = +{ + {ACPI_DMT_UINT8, ACPI_MPST2_OFFSET (StructureId), "Structure ID", 0}, + {ACPI_DMT_UINT8, ACPI_MPST2_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_MPST2_FLAG_OFFSET (Flags,0), "Memory Preserved", 0}, + {ACPI_DMT_FLAG1, ACPI_MPST2_FLAG_OFFSET (Flags,0), "Auto Entry", 0}, + {ACPI_DMT_FLAG2, ACPI_MPST2_FLAG_OFFSET (Flags,0), "Auto Exit", 0}, + + {ACPI_DMT_UINT16, ACPI_MPST2_OFFSET (Reserved1), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_MPST2_OFFSET (AveragePower), "Average Power", 0}, + {ACPI_DMT_UINT32, ACPI_MPST2_OFFSET (PowerSaving), "Power Saving", 0}, + {ACPI_DMT_UINT64, ACPI_MPST2_OFFSET (ExitLatency), "Exit Latency", 0}, + {ACPI_DMT_UINT64, ACPI_MPST2_OFFSET (Reserved2), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * MSCT - Maximum System Characteristics Table (ACPI 4.0) + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMsct[] = +{ + {ACPI_DMT_UINT32, ACPI_MSCT_OFFSET (ProximityOffset), "Proximity Offset", 0}, + {ACPI_DMT_UINT32, ACPI_MSCT_OFFSET (MaxProximityDomains), "Max Proximity Domains", 0}, + {ACPI_DMT_UINT32, ACPI_MSCT_OFFSET (MaxClockDomains), "Max Clock Domains", 0}, + {ACPI_DMT_UINT64, ACPI_MSCT_OFFSET (MaxAddress), "Max Physical Address", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Subtable - Maximum Proximity Domain Information. Version 1 */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMsct0[] = +{ + {ACPI_DMT_UINT8, ACPI_MSCT0_OFFSET (Revision), "Revision", 0}, + {ACPI_DMT_UINT8, ACPI_MSCT0_OFFSET (Length), "Length", DT_LENGTH}, + {ACPI_DMT_UINT32, ACPI_MSCT0_OFFSET (RangeStart), "Domain Range Start", 0}, + {ACPI_DMT_UINT32, ACPI_MSCT0_OFFSET (RangeEnd), "Domain Range End", 0}, + {ACPI_DMT_UINT32, ACPI_MSCT0_OFFSET (ProcessorCapacity), "Processor Capacity", 0}, + {ACPI_DMT_UINT64, ACPI_MSCT0_OFFSET (MemoryCapacity), "Memory Capacity", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * MTMR - MID Timer Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMtmr[] = +{ + ACPI_DMT_TERMINATOR +}; + +/* MTMR Subtables - MTMR Entry */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMtmr0[] = +{ + {ACPI_DMT_GAS, ACPI_MTMR0_OFFSET (PhysicalAddress), "PhysicalAddress", 0}, + {ACPI_DMT_UINT32, ACPI_MTMR0_OFFSET (Frequency), "Frequency", 0}, + {ACPI_DMT_UINT32, ACPI_MTMR0_OFFSET (Irq), "IRQ", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * NFIT - NVDIMM Firmware Interface Table and Subtables - (ACPI 6.0) + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit[] = +{ + {ACPI_DMT_UINT32, ACPI_NFIT_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Common Subtable header */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNfitHdr[] = +{ + {ACPI_DMT_NFIT, ACPI_NFITH_OFFSET (Type), "Subtable Type", 0}, + {ACPI_DMT_UINT16, ACPI_NFITH_OFFSET (Length), "Length", DT_LENGTH}, + ACPI_DMT_TERMINATOR +}; + +/* 0: System Physical Address Range Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit0[] = +{ + {ACPI_DMT_UINT16, ACPI_NFIT0_OFFSET (RangeIndex), "Range Index", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_NFIT0_FLAG_OFFSET (Flags,0), "Add/Online Operation Only", 0}, + {ACPI_DMT_FLAG1, ACPI_NFIT0_FLAG_OFFSET (Flags,0), "Proximity Domain Valid", 0}, + {ACPI_DMT_UINT32, ACPI_NFIT0_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_NFIT0_OFFSET (ProximityDomain), "Proximity Domain", 0}, + {ACPI_DMT_UUID, ACPI_NFIT0_OFFSET (RangeGuid[0]), "Address Range GUID", 0}, + {ACPI_DMT_UINT64, ACPI_NFIT0_OFFSET (Address), "Address Range Base", 0}, + {ACPI_DMT_UINT64, ACPI_NFIT0_OFFSET (Length), "Address Range Length", 0}, + {ACPI_DMT_UINT64, ACPI_NFIT0_OFFSET (MemoryMapping), "Memory Map Attribute", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 1: Memory Device to System Address Range Map Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit1[] = +{ + {ACPI_DMT_UINT32, ACPI_NFIT1_OFFSET (DeviceHandle), "Device Handle", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (PhysicalId), "Physical Id", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (RegionId), "Region Id", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (RangeIndex), "Range Index", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (RegionIndex), "Control Region Index", 0}, + {ACPI_DMT_UINT64, ACPI_NFIT1_OFFSET (RegionSize), "Region Size", 0}, + {ACPI_DMT_UINT64, ACPI_NFIT1_OFFSET (RegionOffset), "Region Offset", 0}, + {ACPI_DMT_UINT64, ACPI_NFIT1_OFFSET (Address), "Address Region Base", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (InterleaveIndex), "Interleave Index", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (InterleaveWays), "Interleave Ways", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (Flags), "Flags", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Save to device failed", 0}, + {ACPI_DMT_FLAG1, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Restore from device failed", 0}, + {ACPI_DMT_FLAG2, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Platform flush failed", 0}, + {ACPI_DMT_FLAG3, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Device not armed", 0}, + {ACPI_DMT_FLAG4, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Health events observed", 0}, + {ACPI_DMT_FLAG5, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Health events enabled", 0}, + {ACPI_DMT_FLAG6, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Mapping failed", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 2: Interleave Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit2[] = +{ + {ACPI_DMT_UINT16, ACPI_NFIT2_OFFSET (InterleaveIndex), "Interleave Index", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT2_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_NFIT2_OFFSET (LineCount), "Line Count", 0}, + {ACPI_DMT_UINT32, ACPI_NFIT2_OFFSET (LineSize), "Line Size", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit2a[] = +{ + {ACPI_DMT_UINT32, 0, "Line Offset", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + +/* 3: SMBIOS Management Information Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit3[] = +{ + {ACPI_DMT_UINT32, ACPI_NFIT3_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit3a[] = +{ + {ACPI_DMT_RAW_BUFFER, 0, "SMBIOS Table Entries", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + +/* 4: NVDIMM Control Region Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit4[] = +{ + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (RegionIndex), "Region Index", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (VendorId), "Vendor Id", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (DeviceId), "Device Id", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (RevisionId), "Revision Id", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (SubsystemVendorId), "Subsystem Vendor Id", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (SubsystemDeviceId), "Subsystem Device Id", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (SubsystemRevisionId), "Subsystem Revision Id", 0}, + {ACPI_DMT_UINT8, ACPI_NFIT4_OFFSET (ValidFields), "Valid Fields", 0}, + {ACPI_DMT_UINT8, ACPI_NFIT4_OFFSET (ManufacturingLocation), "Manufacturing Location", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (ManufacturingDate), "Manufacturing Date", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Reserved[0]), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_NFIT4_OFFSET (SerialNumber), "Serial Number", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Code), "Code", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Windows), "Window Count", 0}, + {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (WindowSize), "Window Size", 0}, + {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (CommandOffset), "Command Offset", 0}, + {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (CommandSize), "Command Size", 0}, + {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (StatusOffset), "Status Offset", 0}, + {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (StatusSize), "Status Size", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Flags), "Flags", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_NFIT4_FLAG_OFFSET (Flags,0), "Windows buffered", 0}, + {ACPI_DMT_UINT48, ACPI_NFIT4_OFFSET (Reserved1[0]), "Reserved1", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 5: NVDIMM Block Data Window Region Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit5[] = +{ + {ACPI_DMT_UINT16, ACPI_NFIT5_OFFSET (RegionIndex), "Region Index", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT5_OFFSET (Windows), "Window Count", 0}, + {ACPI_DMT_UINT64, ACPI_NFIT5_OFFSET (Offset), "Offset", 0}, + {ACPI_DMT_UINT64, ACPI_NFIT5_OFFSET (Size), "Size", 0}, + {ACPI_DMT_UINT64, ACPI_NFIT5_OFFSET (Capacity), "Capacity", 0}, + {ACPI_DMT_UINT64, ACPI_NFIT5_OFFSET (StartAddress), "Start Address", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 6: Flush Hint Address Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit6[] = +{ + {ACPI_DMT_UINT32, ACPI_NFIT6_OFFSET (DeviceHandle), "Device Handle", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT6_OFFSET (HintCount), "Hint Count", 0}, + {ACPI_DMT_UINT48, ACPI_NFIT6_OFFSET (Reserved[0]), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit6a[] = +{ + {ACPI_DMT_UINT64, 0, "Hint Address", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit7[] = +{ + {ACPI_DMT_UINT8, ACPI_NFIT7_OFFSET (HighestCapability), "Highest Capability", 0}, + {ACPI_DMT_UINT24, ACPI_NFIT7_OFFSET (Reserved[0]), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_NFIT7_OFFSET (Capabilities), "Capabilities (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_NFIT7_FLAG_OFFSET (Capabilities,0), "Cache Flush to NVDIMM", 0}, + {ACPI_DMT_FLAG1, ACPI_NFIT7_FLAG_OFFSET (Capabilities,0), "Memory Flush to NVDIMM", 0}, + {ACPI_DMT_FLAG2, ACPI_NFIT7_FLAG_OFFSET (Capabilities,0), "Memory Mirroring", 0}, + {ACPI_DMT_UINT32, ACPI_NFIT7_OFFSET (Reserved2), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * PCCT - Platform Communications Channel Table (ACPI 5.0) + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPcct[] = +{ + {ACPI_DMT_UINT32, ACPI_PCCT_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_PCCT_FLAG_OFFSET (Flags,0), "Platform", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* PCCT subtables */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPcctHdr[] = +{ + {ACPI_DMT_PCCT, ACPI_PCCT0_OFFSET (Header.Type), "Subtable Type", 0}, + {ACPI_DMT_UINT8, ACPI_PCCT0_OFFSET (Header.Length), "Length", DT_LENGTH}, + ACPI_DMT_TERMINATOR +}; + +/* 0: Generic Communications Subspace */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPcct0[] = +{ + {ACPI_DMT_UINT48, ACPI_PCCT0_OFFSET (Reserved[0]), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT0_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT0_OFFSET (Length), "Address Length", 0}, + {ACPI_DMT_GAS, ACPI_PCCT0_OFFSET (DoorbellRegister), "Doorbell Register", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT0_OFFSET (PreserveMask), "Preserve Mask", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT0_OFFSET (WriteMask), "Write Mask", 0}, + {ACPI_DMT_UINT32, ACPI_PCCT0_OFFSET (Latency), "Command Latency", 0}, + {ACPI_DMT_UINT32, ACPI_PCCT0_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, + {ACPI_DMT_UINT16, ACPI_PCCT0_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 1: HW-reduced Communications Subspace (ACPI 5.1) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPcct1[] = +{ + {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (PlatformInterrupt), "Platform Interrupt", 0}, + {ACPI_DMT_UINT8, ACPI_PCCT1_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_PCCT1_FLAG_OFFSET (Flags,0), "Polarity", 0}, + {ACPI_DMT_FLAG1, ACPI_PCCT1_FLAG_OFFSET (Flags,0), "Mode", 0}, + {ACPI_DMT_UINT8, ACPI_PCCT1_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (Length), "Address Length", 0}, + {ACPI_DMT_GAS, ACPI_PCCT1_OFFSET (DoorbellRegister), "Doorbell Register", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (PreserveMask), "Preserve Mask", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (WriteMask), "Write Mask", 0}, + {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (Latency), "Command Latency", 0}, + {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, + {ACPI_DMT_UINT16, ACPI_PCCT1_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPcct2[] = +{ + {ACPI_DMT_UINT32, ACPI_PCCT2_OFFSET (PlatformInterrupt), "Platform Interrupt", 0}, + {ACPI_DMT_UINT8, ACPI_PCCT2_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_PCCT2_FLAG_OFFSET (Flags,0), "Polarity", 0}, + {ACPI_DMT_FLAG1, ACPI_PCCT2_FLAG_OFFSET (Flags,0), "Mode", 0}, + {ACPI_DMT_UINT8, ACPI_PCCT2_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (Length), "Address Length", 0}, + {ACPI_DMT_GAS, ACPI_PCCT2_OFFSET (DoorbellRegister), "Doorbell Register", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (PreserveMask), "Preserve Mask", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (WriteMask), "Write Mask", 0}, + {ACPI_DMT_UINT32, ACPI_PCCT2_OFFSET (Latency), "Command Latency", 0}, + {ACPI_DMT_UINT32, ACPI_PCCT2_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, + {ACPI_DMT_UINT16, ACPI_PCCT2_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, + {ACPI_DMT_GAS, ACPI_PCCT2_OFFSET (PlatformAckRegister), "Platform ACK Register", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (AckPreserveMask), "ACK Preserve Mask", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (AckWriteMask), "ACK Write Mask", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPcct3[] = +{ + {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (PlatformInterrupt), "Platform Interrupt", 0}, + {ACPI_DMT_UINT8, ACPI_PCCT3_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_PCCT3_FLAG_OFFSET (Flags,0), "Polarity", 0}, + {ACPI_DMT_FLAG1, ACPI_PCCT3_FLAG_OFFSET (Flags,0), "Mode", 0}, + {ACPI_DMT_UINT8, ACPI_PCCT3_OFFSET (Reserved1), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (Length), "Address Length", 0}, + {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (DoorbellRegister), "Doorbell Register", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (PreserveMask), "Preserve Mask", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (WriteMask), "Write Mask", 0}, + {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (Latency), "Command Latency", 0}, + {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, + {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, + {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (PlatformAckRegister), "Platform ACK Register", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (AckPreserveMask), "ACK Preserve Mask", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (AckSetMask), "ACK Set Mask", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (Reserved2), "Reserved", 0}, + {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (CmdCompleteRegister), "Command Complete Register", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (CmdCompleteMask), "Command Complete Check Mask", 0}, + {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (CmdUpdateRegister), "Command Update Register", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (CmdUpdatePreserveMask), "Command Update Preserve Mask", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (CmdUpdateSetMask), "Command Update Set Mask", 0}, + {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (ErrorStatusRegister), "Error Status Register", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (ErrorStatusMask), "Error Status Mask", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPcct4[] = +{ + {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (PlatformInterrupt), "Platform Interrupt", 0}, + {ACPI_DMT_UINT8, ACPI_PCCT4_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_PCCT4_FLAG_OFFSET (Flags,0), "Polarity", 0}, + {ACPI_DMT_FLAG1, ACPI_PCCT4_FLAG_OFFSET (Flags,0), "Mode", 0}, + {ACPI_DMT_UINT8, ACPI_PCCT4_OFFSET (Reserved1), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (Length), "Address Length", 0}, + {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (DoorbellRegister), "Doorbell Register", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (PreserveMask), "Preserve Mask", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (WriteMask), "Write Mask", 0}, + {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (Latency), "Command Latency", 0}, + {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, + {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, + {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (PlatformAckRegister), "Platform ACK Register", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (AckPreserveMask), "ACK Preserve Mask", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (AckSetMask), "ACK Set Mask", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (Reserved2), "Reserved", 0}, + {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (CmdCompleteRegister), "Command Complete Register", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (CmdCompleteMask), "Command Complete Check Mask", 0}, + {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (CmdUpdateRegister), "Command Update Register", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (CmdUpdatePreserveMask), "Command Update Preserve Mask", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (CmdUpdateSetMask), "Command Update Set Mask", 0}, + {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (ErrorStatusRegister), "Error Status Register", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (ErrorStatusMask), "Error Status Mask", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * PDTT - Platform Debug Trigger Table (ACPI 6.2) + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPdtt[] = +{ + {ACPI_DMT_UINT8, ACPI_PDTT_OFFSET (TriggerCount), "Trigger Count", 0}, + {ACPI_DMT_UINT24, ACPI_PDTT_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_PDTT_OFFSET (ArrayOffset), "Array Offset", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoPdtt0[] = +{ + {ACPI_DMT_UINT8, ACPI_PDTT0_OFFSET (SubchannelId), "Subchannel Id", 0}, + {ACPI_DMT_UINT8, ACPI_PDTT0_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_PDTT0_FLAG_OFFSET (Flags,0), "Runtime Trigger", 0}, + {ACPI_DMT_FLAG1, ACPI_PDTT0_FLAG_OFFSET (Flags,0), "Wait for Completion", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * PMTT - Platform Memory Topology Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt[] = +{ + {ACPI_DMT_UINT32, ACPI_PMTT_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Common Subtable header (one per Subtable) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPmttHdr[] = +{ + {ACPI_DMT_PMTT, ACPI_PMTTH_OFFSET (Type), "Subtable Type", 0}, + {ACPI_DMT_UINT8, ACPI_PMTTH_OFFSET (Reserved1), "Reserved", 0}, + {ACPI_DMT_UINT16, ACPI_PMTTH_OFFSET (Length), "Length", DT_LENGTH}, + {ACPI_DMT_UINT16, ACPI_PMTTH_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_PMTTH_FLAG_OFFSET (Flags,0), "Top-level Device", 0}, + {ACPI_DMT_FLAG1, ACPI_PMTTH_FLAG_OFFSET (Flags,0), "Physical Element", 0}, + {ACPI_DMT_FLAGS2, ACPI_PMTTH_FLAG_OFFSET (Flags,0), "Memory Type", 0}, + {ACPI_DMT_UINT16, ACPI_PMTTH_OFFSET (Reserved2), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* PMTT Subtables */ + +/* 0: Socket */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt0[] = +{ + {ACPI_DMT_UINT16, ACPI_PMTT0_OFFSET (SocketId), "Socket ID", 0}, + {ACPI_DMT_UINT16, ACPI_PMTT0_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 1: Memory Controller */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt1[] = +{ + {ACPI_DMT_UINT32, ACPI_PMTT1_OFFSET (ReadLatency), "Read Latency", 0}, + {ACPI_DMT_UINT32, ACPI_PMTT1_OFFSET (WriteLatency), "Write Latency", 0}, + {ACPI_DMT_UINT32, ACPI_PMTT1_OFFSET (ReadBandwidth), "Read Bandwidth", 0}, + {ACPI_DMT_UINT32, ACPI_PMTT1_OFFSET (WriteBandwidth), "Write Bandwidth", 0}, + {ACPI_DMT_UINT16, ACPI_PMTT1_OFFSET (AccessWidth), "Access Width", 0}, + {ACPI_DMT_UINT16, ACPI_PMTT1_OFFSET (Alignment), "Alignment", 0}, + {ACPI_DMT_UINT16, ACPI_PMTT1_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT16, ACPI_PMTT1_OFFSET (DomainCount), "Domain Count", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 1a: Proximity Domain */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt1a[] = +{ + {ACPI_DMT_UINT32, ACPI_PMTT1A_OFFSET (ProximityDomain), "Proximity Domain", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 2: Physical Component */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt2[] = +{ + {ACPI_DMT_UINT16, ACPI_PMTT2_OFFSET (ComponentId), "Component ID", 0}, + {ACPI_DMT_UINT16, ACPI_PMTT2_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_PMTT2_OFFSET (MemorySize), "Memory Size", 0}, + {ACPI_DMT_UINT32, ACPI_PMTT2_OFFSET (BiosHandle), "Bios Handle", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * PPTT - Processor Properties Topology Table (ACPI 6.2) + * + ******************************************************************************/ + +/* Main table consists of only the standard ACPI header - subtables follow */ + +/* Common Subtable header (one per Subtable) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPpttHdr[] = +{ + {ACPI_DMT_PPTT, ACPI_PPTTH_OFFSET (Type), "Subtable Type", 0}, + {ACPI_DMT_UINT8, ACPI_PPTTH_OFFSET (Length), "Length", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 0: Processor hierarchy node */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPptt0[] = +{ + {ACPI_DMT_UINT16, ACPI_PPTT0_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (Flags), "Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_PPTT0_FLAG_OFFSET (Flags,0), "Physical package", 0}, + {ACPI_DMT_FLAG1, ACPI_PPTT0_FLAG_OFFSET (Flags,0), "ACPI Processor ID valid", 0}, + {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (Parent), "Parent", 0}, + {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (AcpiProcessorId), "ACPI Processor ID", 0}, + {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (NumberOfPrivResources), "Private Resource Number", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoPptt0a[] = +{ + {ACPI_DMT_UINT32, 0, "Private Resource", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + +/* 1: Cache type */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPptt1[] = +{ + {ACPI_DMT_UINT16, ACPI_PPTT1_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (Flags), "Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Size valid", 0}, + {ACPI_DMT_FLAG1, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Number of Sets valid", 0}, + {ACPI_DMT_FLAG2, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Associativity valid", 0}, + {ACPI_DMT_FLAG3, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Allocation Type valid", 0}, + {ACPI_DMT_FLAG4, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Cache Type valid", 0}, + {ACPI_DMT_FLAG5, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Write Policy valid", 0}, + {ACPI_DMT_FLAG6, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Line Size valid", 0}, + {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (NextLevelOfCache), "Next Level of Cache", 0}, + {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (Size), "Size", 0}, + {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (NumberOfSets), "Number of Sets", 0}, + {ACPI_DMT_UINT8, ACPI_PPTT1_OFFSET (Associativity), "Associativity", 0}, + {ACPI_DMT_UINT8, ACPI_PPTT1_OFFSET (Attributes), "Attributes", 0}, + {ACPI_DMT_FLAGS0, ACPI_PPTT1_OFFSET (Attributes), "Allocation Type", 0}, + {ACPI_DMT_FLAGS2, ACPI_PPTT1_OFFSET (Attributes), "Cache Type", 0}, + {ACPI_DMT_FLAG4, ACPI_PPTT1_OFFSET (Attributes), "Write Policy", 0}, + {ACPI_DMT_UINT16, ACPI_PPTT1_OFFSET (LineSize), "Line Size", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 2: ID */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPptt2[] = +{ + {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_PPTT2_OFFSET (VendorId), "VENDOR_ID", 0}, + {ACPI_DMT_UINT64, ACPI_PPTT2_OFFSET (Level1Id), "LEVEL_1_ID", 0}, + {ACPI_DMT_UINT64, ACPI_PPTT2_OFFSET (Level2Id), "LEVEL_2_ID", 0}, + {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (MajorRev), "MAJOR_REV", 0}, + {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (MinorRev), "MINOR_REV", 0}, + {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (SpinRev), "SPIN_REV", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * RASF - RAS Feature table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoRasf[] = +{ + {ACPI_DMT_BUF12, ACPI_RASF_OFFSET (ChannelId[0]), "Channel ID", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * S3PT - S3 Performance Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoS3pt[] = +{ + {ACPI_DMT_SIG, ACPI_S3PT_OFFSET (Signature[0]), "Signature", 0}, + {ACPI_DMT_UINT32, ACPI_S3PT_OFFSET (Length), "Length", DT_LENGTH}, + ACPI_DMT_TERMINATOR +}; + +/* S3PT subtable header */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoS3ptHdr[] = +{ + {ACPI_DMT_UINT16, ACPI_S3PTH_OFFSET (Type), "Type", 0}, + {ACPI_DMT_UINT8, ACPI_S3PTH_OFFSET (Length), "Length", DT_LENGTH}, + {ACPI_DMT_UINT8, ACPI_S3PTH_OFFSET (Revision), "Revision", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 0: Basic S3 Resume Performance Record */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoS3pt0[] = +{ + {ACPI_DMT_UINT32, ACPI_S3PT0_OFFSET (ResumeCount), "Resume Count", 0}, + {ACPI_DMT_UINT64, ACPI_S3PT0_OFFSET (FullResume), "Full Resume", 0}, + {ACPI_DMT_UINT64, ACPI_S3PT0_OFFSET (AverageResume), "Average Resume", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 1: Basic S3 Suspend Performance Record */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoS3pt1[] = +{ + {ACPI_DMT_UINT64, ACPI_S3PT1_OFFSET (SuspendStart), "Suspend Start", 0}, + {ACPI_DMT_UINT64, ACPI_S3PT1_OFFSET (SuspendEnd), "Suspend End", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * SBST - Smart Battery Specification Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSbst[] = +{ + {ACPI_DMT_UINT32, ACPI_SBST_OFFSET (WarningLevel), "Warning Level", 0}, + {ACPI_DMT_UINT32, ACPI_SBST_OFFSET (LowLevel), "Low Level", 0}, + {ACPI_DMT_UINT32, ACPI_SBST_OFFSET (CriticalLevel), "Critical Level", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * SDEI - Software Delegated Execption Interface Descriptor Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSdei[] = +{ + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * SDEV - Secure Devices Table (ACPI 6.2) + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSdev[] = +{ + ACPI_DMT_TERMINATOR +}; + +/* Common Subtable header (one per Subtable) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSdevHdr[] = +{ + {ACPI_DMT_SDEV, ACPI_SDEVH_OFFSET (Type), "Subtable Type", 0}, + {ACPI_DMT_UINT8, ACPI_SDEVH_OFFSET (Flags), "Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_SDEVH_FLAG_OFFSET (Flags,0), "Allow handoff to unsecure OS", 0}, + {ACPI_DMT_UINT16, ACPI_SDEVH_OFFSET (Length), "Length", 0}, + ACPI_DMT_TERMINATOR +}; + +/* SDEV Subtables */ + +/* 0: Namespace Device Based Secure Device Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSdev0[] = +{ + {ACPI_DMT_UINT16, ACPI_SDEV0_OFFSET (DeviceIdOffset), "Device ID Offset", 0}, + {ACPI_DMT_UINT16, ACPI_SDEV0_OFFSET (DeviceIdLength), "Device ID Length", 0}, + {ACPI_DMT_UINT16, ACPI_SDEV0_OFFSET (VendorDataOffset), "Vendor Data Offset", 0}, + {ACPI_DMT_UINT16, ACPI_SDEV0_OFFSET (VendorDataLength), "Vendor Data Length", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoSdev0a[] = +{ + {ACPI_DMT_STRING, 0, "Namepath", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 1: PCIe Endpoint Device Based Device Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSdev1[] = +{ + {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (Segment), "Segment", 0}, + {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (StartBus), "Start Bus", 0}, + {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (PathOffset), "Path Offset", 0}, + {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (PathLength), "Path Length", 0}, + {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (VendorDataOffset), "Vendor Data Offset", 0}, + {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (VendorDataLength), "Vendor Data Length", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoSdev1a[] = +{ + {ACPI_DMT_UINT8, ACPI_SDEV1A_OFFSET (Device), "Device", 0}, + {ACPI_DMT_UINT8, ACPI_SDEV1A_OFFSET (Function), "Function", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoSdev1b[] = +{ + {ACPI_DMT_RAW_BUFFER, 0, "Vendor Data", 0}, /*, DT_OPTIONAL}, */ + ACPI_DMT_TERMINATOR +}; +/*! [End] no source code translation !*/ diff --git a/sys/contrib/dev/acpica/source/common/dmtbinfo3.c b/sys/contrib/dev/acpica/source/common/dmtbinfo3.c new file mode 100644 index 0000000000..c82e3db5ec --- /dev/null +++ b/sys/contrib/dev/acpica/source/common/dmtbinfo3.c @@ -0,0 +1,733 @@ +/****************************************************************************** + * + * Module Name: dmtbinfo3 - Table info for non-AML tables + * + *****************************************************************************/ + +/****************************************************************************** + * + * 1. Copyright Notice + * + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. + * All rights reserved. + * + * 2. License + * + * 2.1. This is your license from Intel Corp. under its intellectual property + * rights. You may have additional license terms from the party that provided + * you this software, covering your right to use that party's intellectual + * property rights. + * + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a + * copy of the source code appearing in this file ("Covered Code") an + * irrevocable, perpetual, worldwide license under Intel's copyrights in the + * base code distributed originally by Intel ("Original Intel Code") to copy, + * make derivatives, distribute, use and display any portion of the Covered + * Code in any form, with the right to sublicense such rights; and + * + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent + * license (with the right to sublicense), under only those claims of Intel + * patents that are infringed by the Original Intel Code, to make, use, sell, + * offer to sell, and import the Covered Code and derivative works thereof + * solely to the minimum extent necessary to exercise the above copyright + * license, and in no event shall the patent license extend to any additions + * to or modifications of the Original Intel Code. No other license or right + * is granted directly or by implication, estoppel or otherwise; + * + * The above copyright and patent license is granted only if the following + * conditions are met: + * + * 3. Conditions + * + * 3.1. Redistribution of Source with Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification with rights to further distribute source must include + * the above Copyright Notice, the above License, this list of Conditions, + * and the following Disclaimer and Export Compliance provision. In addition, + * Licensee must cause all Covered Code to which Licensee contributes to + * contain a file documenting the changes Licensee made to create that Covered + * Code and the date of any change. Licensee must include in that file the + * documentation of any changes made by any predecessor Licensee. Licensee + * must include a prominent statement that the modification is derived, + * directly or indirectly, from Original Intel Code. + * + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification without rights to further distribute source must + * include the following Disclaimer and Export Compliance provision in the + * documentation and/or other materials provided with distribution. In + * addition, Licensee may not authorize further sublicense of source of any + * portion of the Covered Code, and must include terms to the effect that the + * license from Licensee to its licensee is limited to the intellectual + * property embodied in the software Licensee provides to its licensee, and + * not to intellectual property embodied in modifications its licensee may + * make. + * + * 3.3. Redistribution of Executable. Redistribution in executable form of any + * substantial portion of the Covered Code or modification must reproduce the + * above Copyright Notice, and the following Disclaimer and Export Compliance + * provision in the documentation and/or other materials provided with the + * distribution. + * + * 3.4. Intel retains all right, title, and interest in and to the Original + * Intel Code. + * + * 3.5. Neither the name Intel nor any other trademark owned or controlled by + * Intel shall be used in advertising or otherwise to promote the sale, use or + * other dealings in products derived from or relating to the Covered Code + * without prior written authorization from Intel. + * + * 4. Disclaimer and Export Compliance + * + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A + * PARTICULAR PURPOSE. + * + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY + * LIMITED REMEDY. + * + * 4.3. Licensee shall not export, either directly or indirectly, any of this + * software or system incorporating such software without first obtaining any + * required license or other approval from the U. S. Department of Commerce or + * any other agency or department of the United States Government. In the + * event Licensee exports any such software from the United States or + * re-exports any such software from a foreign destination, Licensee shall + * ensure that the distribution and export/re-export of the software is in + * compliance with all laws, regulations, orders, or other restrictions of the + * U.S. Export Administration Regulations. Licensee agrees that neither it nor + * any of its subsidiaries will export/re-export any technical data, process, + * software, or service, directly or indirectly, to any country for which the + * United States government or any agency thereof requires an export license, + * other governmental approval, or letter of assurance, without first obtaining + * such license, approval or letter. + * + ***************************************************************************** + * + * Alternatively, you may choose to be licensed under the terms of the + * following license: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Alternatively, you may choose to be licensed under the terms of the + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. + * + *****************************************************************************/ + +#include "acpi.h" +#include "accommon.h" +#include "acdisasm.h" +#include "actbinfo.h" + +/* This module used for application-level code only */ + +#define _COMPONENT ACPI_CA_DISASSEMBLER + ACPI_MODULE_NAME ("dmtbinfo3") + +/* + * How to add a new table: + * + * - Add the C table definition to the actbl1.h or actbl2.h header. + * - Add ACPI_xxxx_OFFSET macro(s) for the table (and subtables) to list below. + * - Define the table in this file (for the disassembler). If any + * new data types are required (ACPI_DMT_*), see below. + * - Add an external declaration for the new table definition (AcpiDmTableInfo*) + * in acdisam.h + * - Add new table definition to the dispatch table in dmtable.c (AcpiDmTableData) + * If a simple table (with no subtables), no disassembly code is needed. + * Otherwise, create the AcpiDmDump* function for to disassemble the table + * and add it to the dmtbdump.c file. + * - Add an external declaration for the new AcpiDmDump* function in acdisasm.h + * - Add the new AcpiDmDump* function to the dispatch table in dmtable.c + * - Create a template for the new table + * - Add data table compiler support + * + * How to add a new data type (ACPI_DMT_*): + * + * - Add new type at the end of the ACPI_DMT list in acdisasm.h + * - Add length and implementation cases in dmtable.c (disassembler) + * - Add type and length cases in dtutils.c (DT compiler) + */ + +/* + * ACPI Table Information, used to dump formatted ACPI tables + * + * Each entry is of the form: + */ + +/******************************************************************************* + * + * SLIC - Software Licensing Description Table. This table contains the standard + * ACPI header followed by proprietary data structures + * + ******************************************************************************/ + +/* Single subtable, a proprietary format, so treat it as a buffer */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSlic[] = +{ + {ACPI_DMT_RAW_BUFFER, 0, "Software Licensing Structure", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * SLIT - System Locality Information Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSlit[] = +{ + {ACPI_DMT_UINT64, ACPI_SLIT_OFFSET (LocalityCount), "Localities", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * SPCR - Serial Port Console Redirection table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSpcr[] = +{ + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (InterfaceType), "Interface Type", 0}, + {ACPI_DMT_UINT24, ACPI_SPCR_OFFSET (Reserved[0]), "Reserved", 0}, + {ACPI_DMT_GAS, ACPI_SPCR_OFFSET (SerialPort), "Serial Port Register", 0}, + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (InterruptType), "Interrupt Type", 0}, + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PcInterrupt), "PCAT-compatible IRQ", 0}, + {ACPI_DMT_UINT32, ACPI_SPCR_OFFSET (Interrupt), "Interrupt", 0}, + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (BaudRate), "Baud Rate", 0}, + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (Parity), "Parity", 0}, + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (StopBits), "Stop Bits", 0}, + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (FlowControl), "Flow Control", 0}, + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (TerminalType), "Terminal Type", 0}, + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (Reserved2), "Reserved", 0}, + {ACPI_DMT_UINT16, ACPI_SPCR_OFFSET (PciDeviceId), "PCI Device ID", 0}, + {ACPI_DMT_UINT16, ACPI_SPCR_OFFSET (PciVendorId), "PCI Vendor ID", 0}, + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PciBus), "PCI Bus", 0}, + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PciDevice), "PCI Device", 0}, + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PciFunction), "PCI Function", 0}, + {ACPI_DMT_UINT32, ACPI_SPCR_OFFSET (PciFlags), "PCI Flags", 0}, + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PciSegment), "PCI Segment", 0}, + {ACPI_DMT_UINT32, ACPI_SPCR_OFFSET (Reserved2), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * SPMI - Server Platform Management Interface table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSpmi[] = +{ + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (InterfaceType), "Interface Type", 0}, + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (Reserved), "Reserved", DT_NON_ZERO}, /* Value must be 1 */ + {ACPI_DMT_UINT16, ACPI_SPMI_OFFSET (SpecRevision), "IPMI Spec Version", 0}, + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (InterruptType), "Interrupt Type", 0}, + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (GpeNumber), "GPE Number", 0}, + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (Reserved1), "Reserved", 0}, + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciDeviceFlag), "PCI Device Flag", 0}, + {ACPI_DMT_UINT32, ACPI_SPMI_OFFSET (Interrupt), "Interrupt", 0}, + {ACPI_DMT_GAS, ACPI_SPMI_OFFSET (IpmiRegister), "IPMI Register", 0}, + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciSegment), "PCI Segment", 0}, + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciBus), "PCI Bus", 0}, + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciDevice), "PCI Device", 0}, + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciFunction), "PCI Function", 0}, + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (Reserved2), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * SRAT - System Resource Affinity Table and Subtables + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSrat[] = +{ + {ACPI_DMT_UINT32, ACPI_SRAT_OFFSET (TableRevision), "Table Revision", 0}, + {ACPI_DMT_UINT64, ACPI_SRAT_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Common Subtable header (one per Subtable) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSratHdr[] = +{ + {ACPI_DMT_SRAT, ACPI_SRATH_OFFSET (Type), "Subtable Type", 0}, + {ACPI_DMT_UINT8, ACPI_SRATH_OFFSET (Length), "Length", DT_LENGTH}, + ACPI_DMT_TERMINATOR +}; + +/* SRAT Subtables */ + +/* 0: Processor Local APIC/SAPIC Affinity */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSrat0[] = +{ + {ACPI_DMT_UINT8, ACPI_SRAT0_OFFSET (ProximityDomainLo), "Proximity Domain Low(8)", 0}, + {ACPI_DMT_UINT8, ACPI_SRAT0_OFFSET (ApicId), "Apic ID", 0}, + {ACPI_DMT_UINT32, ACPI_SRAT0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_SRAT0_FLAG_OFFSET (Flags,0), "Enabled", 0}, + {ACPI_DMT_UINT8, ACPI_SRAT0_OFFSET (LocalSapicEid), "Local Sapic EID", 0}, + {ACPI_DMT_UINT24, ACPI_SRAT0_OFFSET (ProximityDomainHi[0]), "Proximity Domain High(24)", 0}, + {ACPI_DMT_UINT32, ACPI_SRAT0_OFFSET (ClockDomain), "Clock Domain", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 1: Memory Affinity */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSrat1[] = +{ + {ACPI_DMT_UINT32, ACPI_SRAT1_OFFSET (ProximityDomain), "Proximity Domain", 0}, + {ACPI_DMT_UINT16, ACPI_SRAT1_OFFSET (Reserved), "Reserved1", 0}, + {ACPI_DMT_UINT64, ACPI_SRAT1_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT64, ACPI_SRAT1_OFFSET (Length), "Address Length", 0}, + {ACPI_DMT_UINT32, ACPI_SRAT1_OFFSET (Reserved1), "Reserved2", 0}, + {ACPI_DMT_UINT32, ACPI_SRAT1_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_SRAT1_FLAG_OFFSET (Flags,0), "Enabled", 0}, + {ACPI_DMT_FLAG1, ACPI_SRAT1_FLAG_OFFSET (Flags,0), "Hot Pluggable", 0}, + {ACPI_DMT_FLAG2, ACPI_SRAT1_FLAG_OFFSET (Flags,0), "Non-Volatile", 0}, + {ACPI_DMT_UINT64, ACPI_SRAT1_OFFSET (Reserved2), "Reserved3", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSrat2[] = +{ + {ACPI_DMT_UINT16, ACPI_SRAT2_OFFSET (Reserved), "Reserved1", 0}, + {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (ProximityDomain), "Proximity Domain", 0}, + {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (ApicId), "Apic ID", 0}, + {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_SRAT2_FLAG_OFFSET (Flags,0), "Enabled", 0}, + {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (ClockDomain), "Clock Domain", 0}, + {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (Reserved2), "Reserved2", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 3: GICC Affinity (ACPI 5.1) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSrat3[] = +{ + {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (ProximityDomain), "Proximity Domain", 0}, + {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (AcpiProcessorUid), "Acpi Processor UID", 0}, + {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_SRAT3_FLAG_OFFSET (Flags,0), "Enabled", 0}, + {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (ClockDomain), "Clock Domain", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 4: GCC ITS Affinity (ACPI 6.2) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSrat4[] = +{ + {ACPI_DMT_UINT32, ACPI_SRAT4_OFFSET (ProximityDomain), "Proximity Domain", 0}, + {ACPI_DMT_UINT16, ACPI_SRAT4_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_SRAT4_OFFSET (ItsId), "ITS ID", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * STAO - Status Override Table (_STA override) - ACPI 6.0 + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoStao[] = +{ + {ACPI_DMT_UINT8, ACPI_STAO_OFFSET (IgnoreUart), "Ignore UART", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoStaoStr[] = +{ + {ACPI_DMT_STRING, 0, "Namepath", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * TCPA - Trusted Computing Platform Alliance table (Client) + * + * NOTE: There are two versions of the table with the same signature -- + * the client version and the server version. The common PlatformClass + * field is used to differentiate the two types of tables. + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaHdr[] = +{ + {ACPI_DMT_UINT16, ACPI_TCPA_OFFSET (PlatformClass), "Platform Class", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaClient[] = +{ + {ACPI_DMT_UINT32, ACPI_TCPA_CLIENT_OFFSET (MinimumLogLength), "Min Event Log Length", 0}, + {ACPI_DMT_UINT64, ACPI_TCPA_CLIENT_OFFSET (LogAddress), "Event Log Address", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaServer[] = +{ + {ACPI_DMT_UINT16, ACPI_TCPA_SERVER_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_TCPA_SERVER_OFFSET (MinimumLogLength), "Min Event Log Length", 0}, + {ACPI_DMT_UINT64, ACPI_TCPA_SERVER_OFFSET (LogAddress), "Event Log Address", 0}, + {ACPI_DMT_UINT16, ACPI_TCPA_SERVER_OFFSET (SpecRevision), "Specification Revision", 0}, + {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Device Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Pci Device", 0}, + {ACPI_DMT_FLAG1, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Bus is Pnp", 0}, + {ACPI_DMT_FLAG2, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Address Valid", 0}, + {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Interrupt Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Mode", 0}, + {ACPI_DMT_FLAG1, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Polarity", 0}, + {ACPI_DMT_FLAG2, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "GPE SCI Triggered", 0}, + {ACPI_DMT_FLAG3, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Global System Interrupt", 0}, + {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (GpeNumber), "Gpe Number", 0}, + {ACPI_DMT_UINT24, ACPI_TCPA_SERVER_OFFSET (Reserved2[0]), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_TCPA_SERVER_OFFSET (GlobalInterrupt), "Global Interrupt", 0}, + {ACPI_DMT_GAS, ACPI_TCPA_SERVER_OFFSET (Address), "Address", 0}, + {ACPI_DMT_UINT32, ACPI_TCPA_SERVER_OFFSET (Reserved3), "Reserved", 0}, + {ACPI_DMT_GAS, ACPI_TCPA_SERVER_OFFSET (ConfigAddress), "Configuration Address", 0}, + {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Group), "Pci Group", 0}, + {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Bus), "Pci Bus", 0}, + {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Device), "Pci Device", 0}, + {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Function), "Pci Function", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoTpm2[] = +{ + {ACPI_DMT_UINT16, ACPI_TPM2_OFFSET (PlatformClass), "Platform Class", 0}, + {ACPI_DMT_UINT16, ACPI_TPM2_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_TPM2_OFFSET (ControlAddress), "Control Address", 0}, + {ACPI_DMT_TPM2, ACPI_TPM2_OFFSET (StartMethod), "Start Method", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Optional trailer. LogLength and LogAddress are additionally optional */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoTpm2a[] = +{ + {ACPI_DMT_BUF12, ACPI_TPM2A_OFFSET (MethodParameters), "Method Parameters", DT_OPTIONAL}, + {ACPI_DMT_UINT32, ACPI_TPM2A_OFFSET (MinimumLogLength), "Minimum Log Length", DT_OPTIONAL}, + {ACPI_DMT_UINT64, ACPI_TPM2A_OFFSET (LogAddress), "Log Address", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + +/* 11: Start Method for ARM SMC */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoTpm211[] = +{ + {ACPI_DMT_UINT32, ACPI_TPM211_OFFSET (GlobalInterrupt), "Global Interrupt", 0}, + {ACPI_DMT_UINT8, ACPI_TPM211_OFFSET (InterruptFlags), "Interrupt Flags", 0}, + {ACPI_DMT_UINT8, ACPI_TPM211_OFFSET (OperationFlags), "Operation Flags", 0}, + {ACPI_DMT_UINT16, ACPI_TPM211_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_TPM211_OFFSET (FunctionId), "Function ID", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * UEFI - UEFI Boot optimization Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoUefi[] = +{ + {ACPI_DMT_UUID, ACPI_UEFI_OFFSET (Identifier[0]), "UUID Identifier", 0}, + {ACPI_DMT_UINT16, ACPI_UEFI_OFFSET (DataOffset), "Data Offset", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * VRTC - Virtual Real Time Clock Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoVrtc[] = +{ + ACPI_DMT_TERMINATOR +}; + +/* VRTC Subtables - VRTC Entry */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoVrtc0[] = +{ + {ACPI_DMT_GAS, ACPI_VRTC0_OFFSET (PhysicalAddress), "PhysicalAddress", 0}, + {ACPI_DMT_UINT32, ACPI_VRTC0_OFFSET (Irq), "IRQ", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * WAET - Windows ACPI Emulated devices Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoWaet[] = +{ + {ACPI_DMT_UINT32, ACPI_WAET_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_WAET_OFFSET (Flags), "RTC needs no INT ack", 0}, + {ACPI_DMT_FLAG1, ACPI_WAET_OFFSET (Flags), "PM timer, one read only", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * WDAT - Watchdog Action Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoWdat[] = +{ + {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (HeaderLength), "Header Length", DT_LENGTH}, + {ACPI_DMT_UINT16, ACPI_WDAT_OFFSET (PciSegment), "PCI Segment", 0}, + {ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (PciBus), "PCI Bus", 0}, + {ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (PciDevice), "PCI Device", 0}, + {ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (PciFunction), "PCI Function", 0}, + {ACPI_DMT_UINT24, ACPI_WDAT_OFFSET (Reserved[0]), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (TimerPeriod), "Timer Period", 0}, + {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (MaxCount), "Max Count", 0}, + {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (MinCount), "Min Count", 0}, + {ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_WDAT_OFFSET (Flags), "Enabled", 0}, + {ACPI_DMT_FLAG7, ACPI_WDAT_OFFSET (Flags), "Stopped When Asleep", 0}, + {ACPI_DMT_UINT24, ACPI_WDAT_OFFSET (Reserved2[0]), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (Entries), "Watchdog Entry Count", 0}, + ACPI_DMT_TERMINATOR +}; + +/* WDAT Subtables - Watchdog Instruction Entries */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoWdat0[] = +{ + {ACPI_DMT_UINT8, ACPI_WDAT0_OFFSET (Action), "Watchdog Action", 0}, + {ACPI_DMT_UINT8, ACPI_WDAT0_OFFSET (Instruction), "Instruction", 0}, + {ACPI_DMT_UINT16, ACPI_WDAT0_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_GAS, ACPI_WDAT0_OFFSET (RegisterRegion), "Register Region", 0}, + {ACPI_DMT_UINT32, ACPI_WDAT0_OFFSET (Value), "Value", 0}, + {ACPI_DMT_UINT32, ACPI_WDAT0_OFFSET (Mask), "Register Mask", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * WDDT - Watchdog Description Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoWddt[] = +{ + {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (SpecVersion), "Specification Version", 0}, + {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (TableVersion), "Table Version", 0}, + {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (PciVendorId), "PCI Vendor ID", 0}, + {ACPI_DMT_GAS, ACPI_WDDT_OFFSET (Address), "Timer Register", 0}, + {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (MaxCount), "Max Count", 0}, + {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (MinCount), "Min Count", 0}, + {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (Period), "Period", 0}, + {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (Status), "Status (decoded below)", 0}, + + /* Status Flags byte 0 */ + + {ACPI_DMT_FLAG0, ACPI_WDDT_FLAG_OFFSET (Status,0), "Available", 0}, + {ACPI_DMT_FLAG1, ACPI_WDDT_FLAG_OFFSET (Status,0), "Active", 0}, + {ACPI_DMT_FLAG2, ACPI_WDDT_FLAG_OFFSET (Status,0), "OS Owns", 0}, + + /* Status Flags byte 1 */ + + {ACPI_DMT_FLAG3, ACPI_WDDT_FLAG_OFFSET (Status,1), "User Reset", 0}, + {ACPI_DMT_FLAG4, ACPI_WDDT_FLAG_OFFSET (Status,1), "Timeout Reset", 0}, + {ACPI_DMT_FLAG5, ACPI_WDDT_FLAG_OFFSET (Status,1), "Power Fail Reset", 0}, + {ACPI_DMT_FLAG6, ACPI_WDDT_FLAG_OFFSET (Status,1), "Unknown Reset", 0}, + + {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (Capability), "Capability (decoded below)", 0}, + + /* Capability Flags byte 0 */ + + {ACPI_DMT_FLAG0, ACPI_WDDT_FLAG_OFFSET (Capability,0), "Auto Reset", 0}, + {ACPI_DMT_FLAG1, ACPI_WDDT_FLAG_OFFSET (Capability,0), "Timeout Alert", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * WDRT - Watchdog Resource Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoWdrt[] = +{ + {ACPI_DMT_GAS, ACPI_WDRT_OFFSET (ControlRegister), "Control Register", 0}, + {ACPI_DMT_GAS, ACPI_WDRT_OFFSET (CountRegister), "Count Register", 0}, + {ACPI_DMT_UINT16, ACPI_WDRT_OFFSET (PciDeviceId), "PCI Device ID", 0}, + {ACPI_DMT_UINT16, ACPI_WDRT_OFFSET (PciVendorId), "PCI Vendor ID", 0}, + {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciBus), "PCI Bus", 0}, + {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciDevice), "PCI Device", 0}, + {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciFunction), "PCI Function", 0}, + {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciSegment), "PCI Segment", 0}, + {ACPI_DMT_UINT16, ACPI_WDRT_OFFSET (MaxCount), "Max Count", 0}, + {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (Units), "Counter Units", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * WPBT - Windows Platform Environment Table (ACPI 6.0) + * Version 1 + * + * Conforms to "Windows Platform Binary Table (WPBT)" 29 November 2011 + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt[] = +{ + {ACPI_DMT_UINT32, ACPI_WPBT_OFFSET (HandoffSize), "Handoff Size", 0}, + {ACPI_DMT_UINT64, ACPI_WPBT_OFFSET (HandoffAddress), "Handoff Address", 0}, + {ACPI_DMT_UINT8, ACPI_WPBT_OFFSET (Layout), "Layout", 0}, + {ACPI_DMT_UINT8, ACPI_WPBT_OFFSET (Type), "Type", 0}, + {ACPI_DMT_UINT16, ACPI_WPBT_OFFSET (ArgumentsLength), "Arguments Length", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt0[] = +{ + {ACPI_DMT_UNICODE, sizeof (ACPI_TABLE_WPBT), "Command-line Arguments", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * WSMT - Windows SMM Security Migrations Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoWsmt[] = +{ + {ACPI_DMT_UINT32, ACPI_WSMT_OFFSET (ProtectionFlags), "Protection Flags", 0}, + {ACPI_DMT_FLAG0, ACPI_WSMT_FLAG_OFFSET (ProtectionFlags,0), "FIXED_COMM_BUFFERS", 0}, + {ACPI_DMT_FLAG1, ACPI_WSMT_FLAG_OFFSET (ProtectionFlags,0), "COMM_BUFFER_NESTED_PTR_PROTECTION", 0}, + {ACPI_DMT_FLAG2, ACPI_WSMT_FLAG_OFFSET (ProtectionFlags,0), "SYSTEM_RESOURCE_PROTECTION", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * XENV - Xen Environment table (ACPI 6.0) + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoXenv[] = +{ + {ACPI_DMT_UINT64, ACPI_XENV_OFFSET (GrantTableAddress), "Grant Table Address", 0}, + {ACPI_DMT_UINT64, ACPI_XENV_OFFSET (GrantTableSize), "Grant Table Size", 0}, + {ACPI_DMT_UINT32, ACPI_XENV_OFFSET (EventInterrupt), "Event Interrupt", 0}, + {ACPI_DMT_UINT8, ACPI_XENV_OFFSET (EventFlags), "Event Flags", 0}, + ACPI_DMT_TERMINATOR +}; + + +/*! [Begin] no source code translation */ + +/* + * Generic types (used in UEFI and custom tables) + * + * Examples: + * + * Buffer : cc 04 ff bb + * UINT8 : 11 + * UINT16 : 1122 + * UINT24 : 112233 + * UINT32 : 11223344 + * UINT56 : 11223344556677 + * UINT64 : 1122334455667788 + * + * String : "This is string" + * Unicode : "This string encoded to Unicode" + * + * GUID : 11223344-5566-7788-99aa-bbccddeeff00 + * DevicePath : "\PciRoot(0)\Pci(0x1f,1)\Usb(0,0)" + */ + +#define ACPI_DM_GENERIC_ENTRY(FieldType, FieldName) \ + {{FieldType, 0, FieldName, 0}, ACPI_DMT_TERMINATOR} + +ACPI_DMTABLE_INFO AcpiDmTableInfoGeneric[][2] = +{ + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT8, "UINT8"), + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT16, "UINT16"), + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT24, "UINT24"), + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT32, "UINT32"), + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT40, "UINT40"), + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT48, "UINT48"), + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT56, "UINT56"), + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT64, "UINT64"), + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_STRING, "String"), + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UNICODE, "Unicode"), + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_BUFFER, "Buffer"), + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UUID, "GUID"), + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_STRING, "DevicePath"), + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_LABEL, "Label"), + {ACPI_DMT_TERMINATOR} +}; +/*! [End] no source code translation !*/ diff --git a/sys/contrib/dev/acpica/source/common/getopt.c b/sys/contrib/dev/acpica/source/common/getopt.c index a68b56aaed..f98108c8df 100644 --- a/sys/contrib/dev/acpica/source/common/getopt.c +++ b/sys/contrib/dev/acpica/source/common/getopt.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/prparser.l b/sys/contrib/dev/acpica/source/compiler/aslallocate.c similarity index 72% copy from sys/contrib/dev/acpica/source/compiler/prparser.l copy to sys/contrib/dev/acpica/source/compiler/aslallocate.c index da29bfa6cf..49d22b7e72 100644 --- a/sys/contrib/dev/acpica/source/compiler/prparser.l +++ b/sys/contrib/dev/acpica/source/compiler/aslallocate.c @@ -1,7 +1,6 @@ -%{ /****************************************************************************** * - * Module Name: prparser.l - Flex input file for preprocessor lexer + * Module Name: aslallocate -- Local memory allocation * *****************************************************************************/ @@ -9,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -151,194 +150,154 @@ *****************************************************************************/ #include "aslcompiler.h" -#include "prparser.y.h" - -/* Buffer to pass strings to the parser */ - -#define STRING_SETUP strcpy (StringBuffer, PrParsertext);\ - PrParserlval.str = StringBuffer - -#define _COMPONENT ACPI_COMPILER - ACPI_MODULE_NAME ("prscanner") - - -/* Local prototypes */ - -static char -PrDoCommentType1 ( - void); - -static char -PrDoCommentType2 ( - void); -%} - -%option noyywrap - -Number [0-9a-fA-F]+ -HexNumber 0[xX][0-9a-fA-F]+ -WhiteSpace [ \t\v\r]+ -NewLine [\n] -Identifier [a-zA-Z][0-9a-zA-Z]* - -%% -"/*" { if (!PrDoCommentType1 ()) {yyterminate ();} } -"//" { if (!PrDoCommentType2 ()) {yyterminate ();} } - -\( return (EXPOP_PAREN_OPEN); -\) return (EXPOP_PAREN_CLOSE); -\~ return (EXPOP_ONES_COMPLIMENT); -\! return (EXPOP_LOGICAL_NOT); -\* return (EXPOP_MULTIPLY); -\/ return (EXPOP_DIVIDE); -\% return (EXPOP_MODULO); -\+ return (EXPOP_ADD); -\- return (EXPOP_SUBTRACT); -">>" return (EXPOP_SHIFT_RIGHT); -"<<" return (EXPOP_SHIFT_LEFT); -\< return (EXPOP_LESS); -\> return (EXPOP_GREATER); -"<=" return (EXPOP_LESS_EQUAL); -">=" return (EXPOP_GREATER_EQUAL); -"==" return (EXPOP_EQUAL); -"!=" return (EXPOP_NOT_EQUAL); -\& return (EXPOP_AND); -\^ return (EXPOP_XOR); -\| return (EXPOP_OR); -"&&" return (EXPOP_LOGICAL_AND); -"||" return (EXPOP_LOGICAL_OR); - -"defined" return (EXPOP_DEFINE); -{Identifier} {STRING_SETUP; return (EXPOP_IDENTIFIER);} - -<> return (EXPOP_EOF); /* null end-of-string */ - -{Number} return (EXPOP_NUMBER); -{HexNumber} return (EXPOP_HEX_NUMBER); -{NewLine} return (EXPOP_NEW_LINE); -{WhiteSpace} /* Ignore */ - -. return (EXPOP_EOF); -%% /* - * Local support functions + * Local heap allocation wrappers. See aslcache.c for allocation from local + * cache alloctions */ -YY_BUFFER_STATE LexBuffer; -/****************************************************************************** +/******************************************************************************* * - * FUNCTION: PrInitLexer + * FUNCTION: UtLocalCalloc * - * PARAMETERS: String - Input string to be parsed + * PARAMETERS: Size - Bytes to be allocated * - * RETURN: TRUE if parser returns NULL. FALSE otherwise. + * RETURN: Pointer to the allocated memory. If this function returns + * (the compiler is not aborted), the pointer is guaranteed to + * be valid. * - * DESCRIPTION: Initialization routine for lexer. The lexer needs - * a buffer to handle strings instead of a file. + * DESCRIPTION: Allocate zero-initialized memory. The point of this function + * is to abort the compile on an allocation failure, on the + * assumption that nothing more can be accomplished. * - *****************************************************************************/ + * NOTE: For allocation from the local caches, see aslcache.c + * + ******************************************************************************/ -int -PrInitLexer ( - char *String) +void * +UtLocalCalloc ( + UINT32 Size) { + void *Allocated; + + + Allocated = ACPI_ALLOCATE_ZEROED (Size); + if (!Allocated) + { + AslCommonError (ASL_ERROR, ASL_MSG_MEMORY_ALLOCATION, + Gbl_CurrentLineNumber, Gbl_LogicalLineNumber, + Gbl_InputByteCount, Gbl_CurrentColumn, + Gbl_Files[ASL_FILE_INPUT].Filename, NULL); - LexBuffer = yy_scan_string (String); - return (LexBuffer == NULL); + CmCleanupAndExit (); + exit (1); + } + + TotalAllocations++; + TotalAllocated += Size; + return (Allocated); } /****************************************************************************** * - * FUNCTION: PrTerminateLexer + * FUNCTION: UtExpandLineBuffers * - * PARAMETERS: None + * PARAMETERS: None. Updates global line buffer pointers. * - * RETURN: None + * RETURN: None. Reallocates the global line buffers * - * DESCRIPTION: Termination routine for thelexer. + * DESCRIPTION: Called if the current line buffer becomes filled. Reallocates + * all global line buffers and updates Gbl_LineBufferSize. NOTE: + * Also used for the initial allocation of the buffers, when + * all of the buffer pointers are NULL. Initial allocations are + * of size ASL_DEFAULT_LINE_BUFFER_SIZE * *****************************************************************************/ void -PrTerminateLexer ( +UtExpandLineBuffers ( void) { + UINT32 NewSize; - yy_delete_buffer (LexBuffer); + + /* Attempt to double the size of all line buffers */ + + NewSize = Gbl_LineBufferSize * 2; + if (Gbl_CurrentLineBuffer) + { + DbgPrint (ASL_DEBUG_OUTPUT, + "Increasing line buffer size from %u to %u\n", + Gbl_LineBufferSize, NewSize); + } + + UtReallocLineBuffers (&Gbl_CurrentLineBuffer, Gbl_LineBufferSize, NewSize); + UtReallocLineBuffers (&Gbl_MainTokenBuffer, Gbl_LineBufferSize, NewSize); + UtReallocLineBuffers (&Gbl_MacroTokenBuffer, Gbl_LineBufferSize, NewSize); + UtReallocLineBuffers (&Gbl_ExpressionTokenBuffer, Gbl_LineBufferSize, NewSize); + + Gbl_LineBufPtr = Gbl_CurrentLineBuffer; + Gbl_LineBufferSize = NewSize; } -/******************************************************************************** +/****************************************************************************** * - * FUNCTION: PrDoCommentType1 + * FUNCTION: UtReallocLineBuffers * - * PARAMETERS: none + * PARAMETERS: Buffer - Buffer to realloc + * OldSize - Old size of Buffer + * NewSize - New size of Buffer * * RETURN: none * - * DESCRIPTION: Process a new legacy comment. Just toss it. + * DESCRIPTION: Reallocate and initialize Buffer * - ******************************************************************************/ + *****************************************************************************/ -static char -PrDoCommentType1 ( - void) +void +UtReallocLineBuffers ( + char **Buffer, + UINT32 OldSize, + UINT32 NewSize) { - int c; - -Loop: - while (((c = input ()) != '*') && (c != EOF)) - { - } - if (c == EOF) + *Buffer = realloc (*Buffer, NewSize); + if (*Buffer) { - return (FALSE); + memset (*Buffer + OldSize, 0, NewSize - OldSize); + return; } - if (((c = input ()) != '/') && (c != EOF)) - { - unput (c); - goto Loop; - } - if (c == EOF) - { - return (FALSE); - } + printf ("Could not increase line buffer size from %u to %u\n", + OldSize, NewSize); - return (TRUE); + AslError (ASL_ERROR, ASL_MSG_BUFFER_ALLOCATION, NULL, NULL); + AslAbort (); } -/******************************************************************************** +/****************************************************************************** * - * FUNCTION: PrDoCommentType2 + * FUNCTION: UtFreeLineBuffers * - * PARAMETERS: none + * PARAMETERS: None * - * RETURN: none + * RETURN: None * - * DESCRIPTION: Process a new "//" comment. Just toss it. + * DESCRIPTION: Free all line buffers * - ******************************************************************************/ + *****************************************************************************/ -static char -PrDoCommentType2 ( +void +UtFreeLineBuffers ( void) { - int c; - - - while (((c = input ()) != '\n') && (c != EOF)) - { - } - if (c == EOF) - { - return (FALSE); - } - return (TRUE); + free (Gbl_CurrentLineBuffer); + free (Gbl_MainTokenBuffer); + free (Gbl_MacroTokenBuffer); + free (Gbl_ExpressionTokenBuffer); } diff --git a/sys/contrib/dev/acpica/source/compiler/aslanalyze.c b/sys/contrib/dev/acpica/source/compiler/aslanalyze.c index 664dad0864..82e76eb92c 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslanalyze.c +++ b/sys/contrib/dev/acpica/source/compiler/aslanalyze.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslascii.c b/sys/contrib/dev/acpica/source/compiler/aslascii.c index 18bcd28fe1..65a05e9cc6 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslascii.c +++ b/sys/contrib/dev/acpica/source/compiler/aslascii.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslbtypes.c b/sys/contrib/dev/acpica/source/compiler/aslbtypes.c index 5bae87d6fa..f7c2eb0ccc 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslbtypes.c +++ b/sys/contrib/dev/acpica/source/compiler/aslbtypes.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -259,6 +259,7 @@ AnMapArgTypeToBtype ( return (ACPI_BTYPE_DATA | ACPI_BTYPE_DEBUG_OBJECT | ACPI_BTYPE_REFERENCE_OBJECT); + case ARGI_FIXED_TARGET: case ARGI_SIMPLE_TARGET: return (ACPI_BTYPE_OBJECTS_AND_REFS); diff --git a/sys/contrib/dev/acpica/source/components/events/evevent.c b/sys/contrib/dev/acpica/source/compiler/aslcache.c similarity index 55% copy from sys/contrib/dev/acpica/source/components/events/evevent.c copy to sys/contrib/dev/acpica/source/compiler/aslcache.c index 9ee4f9cee8..1d6971a1e8 100644 --- a/sys/contrib/dev/acpica/source/components/events/evevent.c +++ b/sys/contrib/dev/acpica/source/compiler/aslcache.c @@ -1,6 +1,6 @@ /****************************************************************************** * - * Module Name: evevent - Fixed Event handling and dispatch + * Module Name: aslcache -- Local cache support for iASL * *****************************************************************************/ @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -149,296 +149,333 @@ * *****************************************************************************/ -#include "acpi.h" -#include "accommon.h" -#include "acevents.h" +#include "aslcompiler.h" -#define _COMPONENT ACPI_EVENTS - ACPI_MODULE_NAME ("evevent") - -#if (!ACPI_REDUCED_HARDWARE) /* Entire module */ - -/* Local prototypes */ - -static ACPI_STATUS -AcpiEvFixedEventInitialize ( - void); - -static UINT32 -AcpiEvFixedEventDispatch ( - UINT32 Event); +/* + * Local caches. The caches are fully deleted after the compilation/disassembly + * of each individual input file. Thus, individual allocations from the cache + * memory do not need to be freed or even released back into the cache. + * + * See aslallocate.c for standard heap allocations. + */ /******************************************************************************* * - * FUNCTION: AcpiEvInitializeEvents + * FUNCTION: UtLocalCacheCalloc * - * PARAMETERS: None + * PARAMETERS: Length - Size of buffer requested * - * RETURN: Status + * RETURN: Pointer to the buffer. Aborts compiler on allocation failure * - * DESCRIPTION: Initialize global data structures for ACPI events (Fixed, GPE) + * DESCRIPTION: Allocate a string buffer. Bypass the local + * dynamic memory manager for performance reasons (This has a + * major impact on the speed of the compiler.) * ******************************************************************************/ -ACPI_STATUS -AcpiEvInitializeEvents ( - void) +char * +UtLocalCacheCalloc ( + UINT32 Length) { - ACPI_STATUS Status; + char *Buffer; + ASL_CACHE_INFO *Cache; + UINT32 CacheSize = ASL_STRING_CACHE_SIZE; + + + if (Length > CacheSize) + { + CacheSize = Length; + if (Gbl_StringCacheList) + { + Cache = UtLocalCalloc (sizeof (Cache->Next) + CacheSize); - ACPI_FUNCTION_TRACE (EvInitializeEvents); + /* Link new cache buffer just following head of list */ + Cache->Next = Gbl_StringCacheList->Next; + Gbl_StringCacheList->Next = Cache; - /* If Hardware Reduced flag is set, there are no fixed events */ + /* Leave cache management pointers alone as they pertain to head */ - if (AcpiGbl_ReducedHardware) - { - return_ACPI_STATUS (AE_OK); - } + Gbl_StringCount++; + Gbl_StringSize += Length; - /* - * Initialize the Fixed and General Purpose Events. This is done prior to - * enabling SCIs to prevent interrupts from occurring before the handlers - * are installed. - */ - Status = AcpiEvFixedEventInitialize (); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Unable to initialize fixed events")); - return_ACPI_STATUS (Status); + return (Cache->Buffer); + } } - Status = AcpiEvGpeInitialize (); - if (ACPI_FAILURE (Status)) + if ((Gbl_StringCacheNext + Length) >= Gbl_StringCacheLast) { - ACPI_EXCEPTION ((AE_INFO, Status, - "Unable to initialize general purpose events")); - return_ACPI_STATUS (Status); + /* Allocate a new buffer */ + + Cache = UtLocalCalloc (sizeof (Cache->Next) + CacheSize); + + /* Link new cache buffer to head of list */ + + Cache->Next = Gbl_StringCacheList; + Gbl_StringCacheList = Cache; + + /* Setup cache management pointers */ + + Gbl_StringCacheNext = Cache->Buffer; + Gbl_StringCacheLast = Gbl_StringCacheNext + CacheSize; } - return_ACPI_STATUS (Status); + Gbl_StringCount++; + Gbl_StringSize += Length; + + Buffer = Gbl_StringCacheNext; + Gbl_StringCacheNext += Length; + return (Buffer); } /******************************************************************************* * - * FUNCTION: AcpiEvInstallXruptHandlers + * FUNCTION: UtParseOpCacheCalloc * * PARAMETERS: None * - * RETURN: Status + * RETURN: New parse op. Aborts on allocation failure * - * DESCRIPTION: Install interrupt handlers for the SCI and Global Lock + * DESCRIPTION: Allocate a new parse op for the parse tree. Bypass the local + * dynamic memory manager for performance reasons (This has a + * major impact on the speed of the compiler.) * ******************************************************************************/ -ACPI_STATUS -AcpiEvInstallXruptHandlers ( +ACPI_PARSE_OBJECT * +UtParseOpCacheCalloc ( void) { - ACPI_STATUS Status; + ASL_CACHE_INFO *Cache; - ACPI_FUNCTION_TRACE (EvInstallXruptHandlers); - - - /* If Hardware Reduced flag is set, there is no ACPI h/w */ - - if (AcpiGbl_ReducedHardware) + if (Gbl_ParseOpCacheNext >= Gbl_ParseOpCacheLast) { - return_ACPI_STATUS (AE_OK); - } + /* Allocate a new buffer */ - /* Install the SCI handler */ + Cache = UtLocalCalloc (sizeof (Cache->Next) + + (sizeof (ACPI_PARSE_OBJECT) * ASL_PARSEOP_CACHE_SIZE)); - Status = AcpiEvInstallSciHandler (); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Unable to install System Control Interrupt handler")); - return_ACPI_STATUS (Status); - } + /* Link new cache buffer to head of list */ - /* Install the handler for the Global Lock */ + Cache->Next = Gbl_ParseOpCacheList; + Gbl_ParseOpCacheList = Cache; - Status = AcpiEvInitGlobalLockHandler (); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Unable to initialize Global Lock handler")); - return_ACPI_STATUS (Status); + /* Setup cache management pointers */ + + Gbl_ParseOpCacheNext = ACPI_CAST_PTR (ACPI_PARSE_OBJECT, Cache->Buffer); + Gbl_ParseOpCacheLast = Gbl_ParseOpCacheNext + ASL_PARSEOP_CACHE_SIZE; } - AcpiGbl_EventsInitialized = TRUE; - return_ACPI_STATUS (Status); + Gbl_ParseOpCount++; + return (Gbl_ParseOpCacheNext++); } /******************************************************************************* * - * FUNCTION: AcpiEvFixedEventInitialize + * FUNCTION: UtSubtableCacheCalloc - Data Table compiler * * PARAMETERS: None * - * RETURN: Status + * RETURN: Pointer to the buffer. Aborts on allocation failure * - * DESCRIPTION: Install the fixed event handlers and disable all fixed events. + * DESCRIPTION: Allocate a subtable object buffer. Bypass the local + * dynamic memory manager for performance reasons (This has a + * major impact on the speed of the compiler.) * ******************************************************************************/ -static ACPI_STATUS -AcpiEvFixedEventInitialize ( +DT_SUBTABLE * +UtSubtableCacheCalloc ( void) { - UINT32 i; - ACPI_STATUS Status; + ASL_CACHE_INFO *Cache; - /* - * Initialize the structure that keeps track of fixed event handlers and - * enable the fixed events. - */ - for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++) + if (Gbl_SubtableCacheNext >= Gbl_SubtableCacheLast) { - AcpiGbl_FixedEventHandlers[i].Handler = NULL; - AcpiGbl_FixedEventHandlers[i].Context = NULL; + /* Allocate a new buffer */ - /* Disable the fixed event */ + Cache = UtLocalCalloc (sizeof (Cache->Next) + + (sizeof (DT_SUBTABLE) * ASL_SUBTABLE_CACHE_SIZE)); - if (AcpiGbl_FixedEventInfo[i].EnableRegisterId != 0xFF) - { - Status = AcpiWriteBitRegister ( - AcpiGbl_FixedEventInfo[i].EnableRegisterId, - ACPI_DISABLE_EVENT); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - } + /* Link new cache buffer to head of list */ + + Cache->Next = Gbl_SubtableCacheList; + Gbl_SubtableCacheList = Cache; + + /* Setup cache management pointers */ + + Gbl_SubtableCacheNext = ACPI_CAST_PTR (DT_SUBTABLE, Cache->Buffer); + Gbl_SubtableCacheLast = Gbl_SubtableCacheNext + ASL_SUBTABLE_CACHE_SIZE; } - return (AE_OK); + Gbl_SubtableCount++; + return (Gbl_SubtableCacheNext++); } /******************************************************************************* * - * FUNCTION: AcpiEvFixedEventDetect + * FUNCTION: UtFieldCacheCalloc - Data Table compiler * * PARAMETERS: None * - * RETURN: INTERRUPT_HANDLED or INTERRUPT_NOT_HANDLED + * RETURN: Pointer to the buffer. Aborts on allocation failure * - * DESCRIPTION: Checks the PM status register for active fixed events + * DESCRIPTION: Allocate a field object buffer. Bypass the local + * dynamic memory manager for performance reasons (This has a + * major impact on the speed of the compiler.) * ******************************************************************************/ -UINT32 -AcpiEvFixedEventDetect ( +DT_FIELD * +UtFieldCacheCalloc ( void) { - UINT32 IntStatus = ACPI_INTERRUPT_NOT_HANDLED; - UINT32 FixedStatus; - UINT32 FixedEnable; - UINT32 i; + ASL_CACHE_INFO *Cache; - ACPI_FUNCTION_NAME (EvFixedEventDetect); + if (Gbl_FieldCacheNext >= Gbl_FieldCacheLast) + { + /* Allocate a new buffer */ + Cache = UtLocalCalloc (sizeof (Cache->Next) + + (sizeof (DT_FIELD) * ASL_FIELD_CACHE_SIZE)); - /* - * Read the fixed feature status and enable registers, as all the cases - * depend on their values. Ignore errors here. - */ - (void) AcpiHwRegisterRead (ACPI_REGISTER_PM1_STATUS, &FixedStatus); - (void) AcpiHwRegisterRead (ACPI_REGISTER_PM1_ENABLE, &FixedEnable); + /* Link new cache buffer to head of list */ - ACPI_DEBUG_PRINT ((ACPI_DB_INTERRUPTS, - "Fixed Event Block: Enable %08X Status %08X\n", - FixedEnable, FixedStatus)); + Cache->Next = Gbl_FieldCacheList; + Gbl_FieldCacheList = Cache; - /* - * Check for all possible Fixed Events and dispatch those that are active - */ - for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++) - { - /* Both the status and enable bits must be on for this event */ + /* Setup cache management pointers */ - if ((FixedStatus & AcpiGbl_FixedEventInfo[i].StatusBitMask) && - (FixedEnable & AcpiGbl_FixedEventInfo[i].EnableBitMask)) - { - /* - * Found an active (signalled) event. Invoke global event - * handler if present. - */ - AcpiFixedEventCount[i]++; - if (AcpiGbl_GlobalEventHandler) - { - AcpiGbl_GlobalEventHandler (ACPI_EVENT_TYPE_FIXED, NULL, - i, AcpiGbl_GlobalEventHandlerContext); - } - - IntStatus |= AcpiEvFixedEventDispatch (i); - } + Gbl_FieldCacheNext = ACPI_CAST_PTR (DT_FIELD, Cache->Buffer); + Gbl_FieldCacheLast = Gbl_FieldCacheNext + ASL_FIELD_CACHE_SIZE; } - return (IntStatus); + Gbl_FieldCount++; + return (Gbl_FieldCacheNext++); } /******************************************************************************* * - * FUNCTION: AcpiEvFixedEventDispatch + * FUNCTION: UtDeleteLocalCaches * - * PARAMETERS: Event - Event type + * PARAMETERS: None * - * RETURN: INTERRUPT_HANDLED or INTERRUPT_NOT_HANDLED + * RETURN: None * - * DESCRIPTION: Clears the status bit for the requested event, calls the - * handler that previously registered for the event. - * NOTE: If there is no handler for the event, the event is - * disabled to prevent further interrupts. + * DESCRIPTION: Delete all local cache buffer blocks * ******************************************************************************/ -static UINT32 -AcpiEvFixedEventDispatch ( - UINT32 Event) +void +UtDeleteLocalCaches ( + void) { + UINT32 BufferCount; + ASL_CACHE_INFO *Next; + + + /* + * Generic cache, arbitrary size allocations + */ + BufferCount = 0; + while (Gbl_StringCacheList) + { + Next = Gbl_StringCacheList->Next; + ACPI_FREE (Gbl_StringCacheList); + Gbl_StringCacheList = Next; + BufferCount++; + } - ACPI_FUNCTION_ENTRY (); + DbgPrint (ASL_DEBUG_OUTPUT, + "%u Strings (%u bytes), Buffer size: %u bytes, %u Buffers\n", + Gbl_StringCount, Gbl_StringSize, ASL_STRING_CACHE_SIZE, BufferCount); + /* Reset cache globals */ - /* Clear the status bit */ + Gbl_StringSize = 0; + Gbl_StringCount = 0; + Gbl_StringCacheNext = NULL; + Gbl_StringCacheLast = NULL; - (void) AcpiWriteBitRegister ( - AcpiGbl_FixedEventInfo[Event].StatusRegisterId, - ACPI_CLEAR_STATUS); /* - * Make sure that a handler exists. If not, report an error - * and disable the event to prevent further interrupts. + * Parse Op cache */ - if (!AcpiGbl_FixedEventHandlers[Event].Handler) + BufferCount = 0; + while (Gbl_ParseOpCacheList) { - (void) AcpiWriteBitRegister ( - AcpiGbl_FixedEventInfo[Event].EnableRegisterId, - ACPI_DISABLE_EVENT); + Next = Gbl_ParseOpCacheList->Next; + ACPI_FREE (Gbl_ParseOpCacheList); + Gbl_ParseOpCacheList = Next; + BufferCount++; + } + + DbgPrint (ASL_DEBUG_OUTPUT, + "%u ParseOps, Buffer size: %u ops (%u bytes), %u Buffers\n", + Gbl_ParseOpCount, ASL_PARSEOP_CACHE_SIZE, + (sizeof (ACPI_PARSE_OBJECT) * ASL_PARSEOP_CACHE_SIZE), BufferCount); + + /* Reset cache globals */ - ACPI_ERROR ((AE_INFO, - "No installed handler for fixed event - %s (%u), disabling", - AcpiUtGetEventName (Event), Event)); + Gbl_ParseOpCount = 0; + Gbl_ParseOpCacheNext = NULL; + Gbl_ParseOpCacheLast = NULL; + Gbl_ParseTreeRoot = NULL; - return (ACPI_INTERRUPT_NOT_HANDLED); + + /* + * Table Compiler - Field cache + */ + BufferCount = 0; + while (Gbl_FieldCacheList) + { + Next = Gbl_FieldCacheList->Next; + ACPI_FREE (Gbl_FieldCacheList); + Gbl_FieldCacheList = Next; + BufferCount++; } - /* Invoke the Fixed Event handler */ + DbgPrint (ASL_DEBUG_OUTPUT, + "%u Fields, Buffer size: %u fields (%u bytes), %u Buffers\n", + Gbl_FieldCount, ASL_FIELD_CACHE_SIZE, + (sizeof (DT_FIELD) * ASL_FIELD_CACHE_SIZE), BufferCount); - return ((AcpiGbl_FixedEventHandlers[Event].Handler)( - AcpiGbl_FixedEventHandlers[Event].Context)); -} + /* Reset cache globals */ + + Gbl_FieldCount = 0; + Gbl_FieldCacheNext = NULL; + Gbl_FieldCacheLast = NULL; -#endif /* !ACPI_REDUCED_HARDWARE */ + + /* + * Table Compiler - Subtable cache + */ + BufferCount = 0; + while (Gbl_SubtableCacheList) + { + Next = Gbl_SubtableCacheList->Next; + ACPI_FREE (Gbl_SubtableCacheList); + Gbl_SubtableCacheList = Next; + BufferCount++; + } + + DbgPrint (ASL_DEBUG_OUTPUT, + "%u Subtables, Buffer size: %u subtables (%u bytes), %u Buffers\n", + Gbl_SubtableCount, ASL_SUBTABLE_CACHE_SIZE, + (sizeof (DT_SUBTABLE) * ASL_SUBTABLE_CACHE_SIZE), BufferCount); + + /* Reset cache globals */ + + Gbl_SubtableCount = 0; + Gbl_SubtableCacheNext = NULL; + Gbl_SubtableCacheLast = NULL; +} diff --git a/sys/contrib/dev/acpica/source/compiler/aslcodegen.c b/sys/contrib/dev/acpica/source/compiler/aslcodegen.c index a527ddda83..a6a8f7ad0b 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslcodegen.c +++ b/sys/contrib/dev/acpica/source/compiler/aslcodegen.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -370,7 +370,7 @@ CgWriteAmlOpcode ( * Before printing the bytecode, generate comment byte codes * associated with this node. */ - if (Gbl_CaptureComments) + if (AcpiGbl_CaptureComments) { CgWriteAmlComment(Op); } @@ -550,13 +550,13 @@ CgWriteTableHeader ( * "XXXX" table signature prevents this AML file from running on the AML * interpreter. */ - if (Gbl_CaptureComments) + if (AcpiGbl_CaptureComments) { - strncpy(AcpiGbl_TableSig, Child->Asl.Value.String, 4); + strncpy(AcpiGbl_TableSig, Child->Asl.Value.String, ACPI_NAME_SIZE); Child->Asl.Value.String = ACPI_SIG_XXXX; } - strncpy (TableHeader.Signature, Child->Asl.Value.String, 4); + strncpy (TableHeader.Signature, Child->Asl.Value.String, ACPI_NAME_SIZE); /* Revision */ @@ -573,12 +573,12 @@ CgWriteTableHeader ( /* OEMID */ Child = Child->Asl.Next; - strncpy (TableHeader.OemId, Child->Asl.Value.String, 6); + strncpy (TableHeader.OemId, Child->Asl.Value.String, ACPI_OEM_ID_SIZE); /* OEM TableID */ Child = Child->Asl.Next; - strncpy (TableHeader.OemTableId, Child->Asl.Value.String, 8); + strncpy (TableHeader.OemTableId, Child->Asl.Value.String, ACPI_OEM_TABLE_ID_SIZE); /* OEM Revision */ @@ -600,7 +600,7 @@ CgWriteTableHeader ( /* Calculate the comment lengths for this definition block parseOp */ - if (Gbl_CaptureComments) + if (AcpiGbl_CaptureComments) { CvDbgPrint ("Calculating comment lengths for %s in write header\n", Op->Asl.ParseOpName); @@ -756,7 +756,8 @@ CgWriteNode ( /* Write all comments here. */ - if (Gbl_CaptureComments) + + if (AcpiGbl_CaptureComments) { CgWriteAmlComment(Op); } @@ -822,7 +823,7 @@ CgWriteNode ( case PARSEOP_DEFINITION_BLOCK: CgWriteTableHeader (Op); - if (Gbl_CaptureComments) + if (AcpiGbl_CaptureComments) { CgWriteAmlDefBlockComment (Op); } diff --git a/sys/contrib/dev/acpica/source/compiler/aslcompile.c b/sys/contrib/dev/acpica/source/compiler/aslcompile.c index 3856844013..b0a06e6beb 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslcompile.c +++ b/sys/contrib/dev/acpica/source/compiler/aslcompile.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -150,7 +150,6 @@ *****************************************************************************/ #include "aslcompiler.h" -#include "dtcompiler.h" #include "acnamesp.h" #include @@ -470,7 +469,7 @@ CmDoCompile ( * node during compilation. We take the very last comment and save it in a * global for it to be used by the disassembler. */ - if (Gbl_CaptureComments) + if (AcpiGbl_CaptureComments) { AcpiGbl_LastListHead = Gbl_ParseTreeRoot->Asl.CommentList; Gbl_ParseTreeRoot->Asl.CommentList = NULL; @@ -932,70 +931,7 @@ CmCleanupAndExit ( if (!Gbl_DoAslConversion) { - CmDeleteCaches (); + UtDeleteLocalCaches (); } } - - -/******************************************************************************* - * - * FUNCTION: CmDeleteCaches - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Delete all local cache buffer blocks - * - ******************************************************************************/ - -void -CmDeleteCaches ( - void) -{ - UINT32 BufferCount; - ASL_CACHE_INFO *Next; - - - /* Parse Op cache */ - - BufferCount = 0; - while (Gbl_ParseOpCacheList) - { - Next = Gbl_ParseOpCacheList->Next; - ACPI_FREE (Gbl_ParseOpCacheList); - Gbl_ParseOpCacheList = Next; - BufferCount++; - } - - DbgPrint (ASL_DEBUG_OUTPUT, - "%u ParseOps, Buffer size: %u ops (%u bytes), %u Buffers\n", - Gbl_ParseOpCount, ASL_PARSEOP_CACHE_SIZE, - (sizeof (ACPI_PARSE_OBJECT) * ASL_PARSEOP_CACHE_SIZE), BufferCount); - - Gbl_ParseOpCount = 0; - Gbl_ParseOpCacheNext = NULL; - Gbl_ParseOpCacheLast = NULL; - Gbl_ParseTreeRoot = NULL; - - /* Generic string cache */ - - BufferCount = 0; - while (Gbl_StringCacheList) - { - Next = Gbl_StringCacheList->Next; - ACPI_FREE (Gbl_StringCacheList); - Gbl_StringCacheList = Next; - BufferCount++; - } - - DbgPrint (ASL_DEBUG_OUTPUT, - "%u Strings (%u bytes), Buffer size: %u bytes, %u Buffers\n", - Gbl_StringCount, Gbl_StringSize, ASL_STRING_CACHE_SIZE, BufferCount); - - Gbl_StringSize = 0; - Gbl_StringCount = 0; - Gbl_StringCacheNext = NULL; - Gbl_StringCacheLast = NULL; -} diff --git a/sys/contrib/dev/acpica/source/compiler/aslcompiler.h b/sys/contrib/dev/acpica/source/compiler/aslcompiler.h index 3b6a9c1dc1..bd02879d58 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslcompiler.h +++ b/sys/contrib/dev/acpica/source/compiler/aslcompiler.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -181,6 +181,7 @@ #include "aslmessages.h" #include "aslglobal.h" #include "preprocess.h" +#include "dtcompiler.h" /******************************************************************************* @@ -265,8 +266,50 @@ void CmCleanupAndExit ( void); + +/* + * aslallocate - memory allocation + */ +void * +UtLocalCalloc ( + UINT32 Size); + +void +UtExpandLineBuffers ( + void); + +void +UtReallocLineBuffers ( + char **Buffer, + UINT32 OldSize, + UINT32 NewSize); + +void +UtFreeLineBuffers ( + void); + + +/* + * aslcache - local cache support + */ +char * +UtLocalCacheCalloc ( + UINT32 Length); + +ACPI_PARSE_OBJECT * +UtParseOpCacheCalloc ( + void); + +DT_SUBTABLE * +UtSubtableCacheCalloc ( + void); + +DT_FIELD * +UtFieldCacheCalloc ( + void); + void -CmDeleteCaches ( +UtDeleteLocalCaches ( void); @@ -407,6 +450,16 @@ AslAbort ( void); void +AslDualParseOpError ( + UINT8 Level, + UINT16 MainMessageId, + ACPI_PARSE_OBJECT *MainOp, + char *MainMessage, + UINT16 SecondMessageId, + ACPI_PARSE_OBJECT *SecondOp, + char *SecondaryMessage); + +void AslError ( UINT8 Level, UINT16 MessageId, @@ -1134,6 +1187,15 @@ UtDumpBasicOp ( ACPI_PARSE_OBJECT *Op, UINT32 Level); +void * +UtGetParentMethod ( + ACPI_NAMESPACE_NODE *Node); + +BOOLEAN +UtNodeIsDescendantOf ( + ACPI_NAMESPACE_NODE *Node1, + ACPI_NAMESPACE_NODE *Node2); + void UtDisplaySupportedTables ( void); @@ -1150,10 +1212,6 @@ void UtEndEvent ( UINT8 Event); -void * -UtLocalCalloc ( - UINT32 Size); - void UtDisplaySummary ( UINT32 FileId); @@ -1176,18 +1234,6 @@ void UtSetParseOpName ( ACPI_PARSE_OBJECT *Op); -char * -UtStringCacheCalloc ( - UINT32 Length); - -void -UtExpandLineBuffers ( - void); - -void -UtFreeLineBuffers ( - void); - ACPI_STATUS UtInternalizeName ( char *ExternalName, diff --git a/sys/contrib/dev/acpica/source/compiler/aslcompiler.l b/sys/contrib/dev/acpica/source/compiler/aslcompiler.l index 5fcfc18867..88c0617ba0 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslcompiler.l +++ b/sys/contrib/dev/acpica/source/compiler/aslcompiler.l @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -813,7 +813,7 @@ NamePathTail [.]{NameSeg} {NameSeg} { char *s; count (0); - s=UtStringCacheCalloc (ACPI_NAME_SIZE + 1); + s=UtLocalCacheCalloc (ACPI_NAME_SIZE + 1); if (strcmp (AslCompilertext, "\\")) { strcpy (s, "____"); @@ -826,7 +826,7 @@ NamePathTail [.]{NameSeg} {NameString} { char *s; count (0); - s=UtStringCacheCalloc (strlen (AslCompilertext)+1); + s=UtLocalCacheCalloc (strlen (AslCompilertext)+1); AcpiUtStrupr (AslCompilertext); strcpy (s, AslCompilertext); AslCompilerlval.s = s; diff --git a/sys/contrib/dev/acpica/source/compiler/aslcstyle.y b/sys/contrib/dev/acpica/source/compiler/aslcstyle.y index 928e3a4e18..ffcf41db63 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslcstyle.y +++ b/sys/contrib/dev/acpica/source/compiler/aslcstyle.y @@ -9,7 +9,7 @@ NoEcho(' * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/asldebug.c b/sys/contrib/dev/acpica/source/compiler/asldebug.c index 684e222485..2c6ab0559e 100644 --- a/sys/contrib/dev/acpica/source/compiler/asldebug.c +++ b/sys/contrib/dev/acpica/source/compiler/asldebug.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -192,7 +192,7 @@ CvDbgPrint ( va_list Args; - if (!Gbl_CaptureComments || !AcpiGbl_DebugAslConversion) + if (!AcpiGbl_CaptureComments || !AcpiGbl_DebugAslConversion) { return; } @@ -356,7 +356,7 @@ UtCreateEscapeSequences ( /* New string buffer, 3 extra chars per escape (4 total) */ - OutString = UtLocalCalloc (InStringLength + (EscapeCount * 3)); + OutString = UtLocalCacheCalloc (InStringLength + (EscapeCount * 3)); OutStringPtr = OutString; /* Convert non-ascii or non-printable chars to escape sequences */ diff --git a/sys/contrib/dev/acpica/source/compiler/asldefine.h b/sys/contrib/dev/acpica/source/compiler/asldefine.h index a7d1a289d5..8d5f4bad69 100644 --- a/sys/contrib/dev/acpica/source/compiler/asldefine.h +++ b/sys/contrib/dev/acpica/source/compiler/asldefine.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -162,7 +162,7 @@ #define ASL_CREATOR_ID "INTL" #define ASL_DEFINE "__IASL__" #define ASL_PREFIX "iASL: " -#define ASL_COMPLIANCE "Supports ACPI Specification Revision 6.2" +#define ASL_COMPLIANCE "Supports ACPI Specification Revision 6.2A" /* Configuration constants */ diff --git a/sys/contrib/dev/acpica/source/compiler/aslerror.c b/sys/contrib/dev/acpica/source/compiler/aslerror.c index 56b5cabb94..39297a4c52 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslerror.c +++ b/sys/contrib/dev/acpica/source/compiler/aslerror.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -170,6 +170,37 @@ AslIsExceptionDisabled ( UINT8 Level, UINT16 MessageId); +static void AslInitEnode ( + ASL_ERROR_MSG **Enode, + UINT8 Level, + UINT16 MessageId, + UINT32 LineNumber, + UINT32 LogicalLineNumber, + UINT32 LogicalByteOffset, + UINT32 Column, + char *Filename, + char *Message, + char *SourceLine, + ASL_ERROR_MSG *SubError); + +static void +AslLogNewError ( + UINT8 Level, + UINT16 MessageId, + UINT32 LineNumber, + UINT32 LogicalLineNumber, + UINT32 LogicalByteOffset, + UINT32 Column, + char *Filename, + char *Message, + char *SourceLine, + ASL_ERROR_MSG *SubError); + +static void +AePrintSubError ( + FILE *OutputFile, + ASL_ERROR_MSG *Enode); + /******************************************************************************* * @@ -220,6 +251,7 @@ AeClearErrorLog ( ASL_ERROR_MSG *Enode = Gbl_ErrorLog; ASL_ERROR_MSG *Next; + /* Walk the error node list */ while (Enode) @@ -270,8 +302,7 @@ AeAddToErrorLog ( Prev = NULL; Next = Gbl_ErrorLog; - while ((Next) && - (Next->LogicalLineNumber <= Enode->LogicalLineNumber)) + while ((Next) && (Next->LogicalLineNumber <= Enode->LogicalLineNumber)) { Prev = Next; Next = Next->Next; @@ -294,94 +325,143 @@ AeAddToErrorLog ( /******************************************************************************* * - * FUNCTION: AePrintException + * FUNCTION: AeDecodeErrorMessageId * - * PARAMETERS: FileId - ID of output file + * PARAMETERS: OutputFile - Output file * Enode - Error node to print - * Header - Additional text before each message + * PrematureEOF - True = PrematureEOF has been reached + * Total - Total legth of line * * RETURN: None * - * DESCRIPTION: Print the contents of an error node. - * - * NOTE: We don't use the FlxxxFile I/O functions here because on error - * they abort the compiler and call this function! Since we - * are reporting errors here, we ignore most output errors and - * just try to get out as much as we can. + * DESCRIPTION: Print the source line of an error. * ******************************************************************************/ -void -AePrintException ( - UINT32 FileId, +static void +AeDecodeErrorMessageId ( + FILE *OutputFile, ASL_ERROR_MSG *Enode, - char *Header) + BOOLEAN PrematureEOF, + UINT32 Total) { - UINT8 SourceByte; - int Actual; - size_t RActual; UINT32 MsgLength; const char *MainMessage; char *ExtraMessage; UINT32 SourceColumn; UINT32 ErrorColumn; - FILE *OutputFile; - FILE *SourceFile = NULL; - long FileSize; - BOOLEAN PrematureEOF = FALSE; - UINT32 Total = 0; - if (Gbl_NoErrors) + fprintf (OutputFile, "%s %4.4d -", + AeDecodeExceptionLevel (Enode->Level), + AeBuildFullExceptionCode (Enode->Level, Enode->MessageId)); + + MainMessage = AeDecodeMessageId (Enode->MessageId); + ExtraMessage = Enode->Message; + + /* If a NULL line number, just print the decoded message */ + + if (!Enode->LineNumber) { + fprintf (OutputFile, " %s %s\n\n", MainMessage, ExtraMessage); return; } - /* - * Only listing files have a header, and remarks/optimizations - * are always output - */ - if (!Header) + MsgLength = strlen (MainMessage); + if (MsgLength == 0) { - /* Ignore remarks if requested */ + /* Use the secondary/extra message as main message */ - switch (Enode->Level) + MainMessage = Enode->Message; + if (!MainMessage) { - case ASL_WARNING: - case ASL_WARNING2: - case ASL_WARNING3: + MainMessage = ""; + } - if (!Gbl_DisplayWarnings) - { - return; - } - break; + MsgLength = strlen (MainMessage); + ExtraMessage = NULL; + } - case ASL_REMARK: + if (Gbl_VerboseErrors && !PrematureEOF) + { + if (Total >= 256) + { + fprintf (OutputFile, " %s", + MainMessage); + } + else + { + SourceColumn = Enode->Column + Enode->FilenameLength + 6 + 2; + ErrorColumn = ASL_ERROR_LEVEL_LENGTH + 5 + 2 + 1; - if (!Gbl_DisplayRemarks) + if ((MsgLength + ErrorColumn) < (SourceColumn - 1)) { - return; + fprintf (OutputFile, "%*s%s", + (int) ((SourceColumn - 1) - ErrorColumn), + MainMessage, " ^ "); } - break; - - case ASL_OPTIMIZATION: - - if (!Gbl_DisplayOptimizations) + else { - return; + fprintf (OutputFile, "%*s %s", + (int) ((SourceColumn - ErrorColumn) + 1), "^", + MainMessage); } - break; + } + } + else + { + fprintf (OutputFile, " %s", MainMessage); + } - default: + /* Print the extra info message if present */ - break; - } + if (ExtraMessage) + { + fprintf (OutputFile, " (%s)", ExtraMessage); } - /* Get the various required file handles */ + if (PrematureEOF) + { + fprintf (OutputFile, " and premature End-Of-File"); + } + + fprintf (OutputFile, "\n"); + if (Gbl_VerboseErrors && !Enode->SubError) + { + fprintf (OutputFile, "\n"); + } +} + + +/******************************************************************************* + * + * FUNCTION: AePrintErrorSourceLine + * + * PARAMETERS: OutputFile - Output file + * Enode - Error node to print + * PrematureEOF - True = PrematureEOF has been reached + * Total - amount of characters printed so far + * + * + * RETURN: Status + * + * DESCRIPTION: Print the source line of an error. + * + ******************************************************************************/ + +static ACPI_STATUS +AePrintErrorSourceLine ( + FILE *OutputFile, + ASL_ERROR_MSG *Enode, + BOOLEAN *PrematureEOF, + UINT32 *Total) +{ + UINT8 SourceByte; + int Actual; + size_t RActual; + FILE *SourceFile = NULL; + long FileSize; - OutputFile = Gbl_Files[FileId].Handle; if (!Enode->SourceLine) { @@ -404,213 +484,272 @@ AePrintException ( if ((long) Enode->LogicalByteOffset >= FileSize) { - PrematureEOF = TRUE; + *PrematureEOF = TRUE; } } - } - - if (Header) - { - fprintf (OutputFile, "%s", Header); + else + { + fprintf (OutputFile, + "[*** iASL: Source File Does not exist ***]\n"); + return AE_IO_ERROR; + } } /* Print filename and line number if present and valid */ - if (Enode->Filename) + if (Gbl_VerboseErrors) { - if (Gbl_VerboseErrors) + fprintf (OutputFile, "%-8s", Enode->Filename); + + if (Enode->SourceLine && Enode->LineNumber) + { + fprintf (OutputFile, " %6u: %s", + Enode->LineNumber, Enode->SourceLine); + } + else if (Enode->LineNumber) { - fprintf (OutputFile, "%-8s", Enode->Filename); + fprintf (OutputFile, " %6u: ", Enode->LineNumber); - if (Enode->LineNumber) + /* + * If not at EOF, get the corresponding source code line + * and display it. Don't attempt this if we have a + * premature EOF condition. + */ + if (*PrematureEOF) { - if (Enode->SourceLine) - { - fprintf (OutputFile, " %6u: %s", - Enode->LineNumber, Enode->SourceLine); - } - else + fprintf (OutputFile, "\n"); + return AE_OK; + } + /* + * Seek to the offset in the combined source file, + * read the source line, and write it to the output. + */ + Actual = fseek (SourceFile, + (long) Enode->LogicalByteOffset, (int) SEEK_SET); + if (Actual) + { + fprintf (OutputFile, + "[*** iASL: Seek error on source code temp file %s ***]", + Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename); + + fprintf (OutputFile, "\n"); + return AE_OK; + } + RActual = fread (&SourceByte, 1, 1, SourceFile); + if (RActual != 1) + { + fprintf (OutputFile, + "[*** iASL: Read error on source code temp file %s ***]", + Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename); + return AE_IO_ERROR; + } + /* Read/write the source line, up to the maximum line length */ + + while (RActual && SourceByte && (SourceByte != '\n')) + { + if (*Total < 256) { - fprintf (OutputFile, " %6u: ", Enode->LineNumber); - - /* - * If not at EOF, get the corresponding source code line - * and display it. Don't attempt this if we have a - * premature EOF condition. - */ - if (!PrematureEOF) + /* After the max line length, we will just read the line, no write */ + + if (fwrite (&SourceByte, 1, 1, OutputFile) != 1) { - /* - * Seek to the offset in the combined source file, - * read the source line, and write it to the output. - */ - Actual = fseek (SourceFile, - (long) Enode->LogicalByteOffset, (int) SEEK_SET); - if (Actual) - { - fprintf (OutputFile, - "[*** iASL: Seek error on source code temp file %s ***]", - Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename); - } - else - { - RActual = fread (&SourceByte, 1, 1, SourceFile); - if (RActual != 1) - { - fprintf (OutputFile, - "[*** iASL: Read error on source code temp file %s ***]", - Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename); - } - else - { - /* Read/write the source line, up to the maximum line length */ - - while (RActual && SourceByte && (SourceByte != '\n')) - { - if (Total < 256) - { - /* After the max line length, we will just read the line, no write */ - - if (fwrite (&SourceByte, 1, 1, OutputFile) != 1) - { - printf ("[*** iASL: Write error on output file ***]\n"); - return; - } - } - else if (Total == 256) - { - fprintf (OutputFile, - "\n[*** iASL: Very long input line, message below refers to column %u ***]", - Enode->Column); - } - - RActual = fread (&SourceByte, 1, 1, SourceFile); - if (RActual != 1) - { - fprintf (OutputFile, - "[*** iASL: Read error on source code temp file %s ***]", - Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename); - return; - } - Total++; - } - } - } + printf ("[*** iASL: Write error on output file ***]\n"); + return AE_IO_ERROR; } + } + else if (*Total == 256) + { + fprintf (OutputFile, + "\n[*** iASL: Very long input line, message below refers to column %u ***]", + Enode->Column); + } - fprintf (OutputFile, "\n"); + RActual = fread (&SourceByte, 1, 1, SourceFile); + if (RActual != 1) + { + fprintf (OutputFile, + "[*** iASL: Read error on source code temp file %s ***]", + Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename); + + return AE_IO_ERROR; } + *Total += 1; } - } - else - { - /* - * Less verbose version of the error message, enabled via the - * -vi switch. The format is compatible with MS Visual Studio. - */ - fprintf (OutputFile, "%s", Enode->Filename); - if (Enode->LineNumber) - { - fprintf (OutputFile, "(%u) : ", - Enode->LineNumber); - } + fprintf (OutputFile, "\n"); } } - - /* If a NULL message ID, just print the raw message */ - - if (Enode->MessageId == 0) + else { - fprintf (OutputFile, "%s\n", Enode->Message); - return; + /* + * Less verbose version of the error message, enabled via the + * -vi switch. The format is compatible with MS Visual Studio. + */ + fprintf (OutputFile, "%s", Enode->Filename); + + if (Enode->LineNumber) + { + fprintf (OutputFile, "(%u) : ", + Enode->LineNumber); + } } - /* Decode the message ID */ + return AE_OK; +} - fprintf (OutputFile, "%s %4.4d -", - AeDecodeExceptionLevel (Enode->Level), - AeBuildFullExceptionCode (Enode->Level, Enode->MessageId)); +/******************************************************************************* + * + * FUNCTION: AePrintException + * + * PARAMETERS: FileId - ID of output file + * Enode - Error node to print + * Header - Additional text before each message + * + * RETURN: None + * + * DESCRIPTION: Print the contents of an error node. + * + * NOTE: We don't use the FlxxxFile I/O functions here because on error + * they abort the compiler and call this function! Since we + * are reporting errors here, we ignore most output errors and + * just try to get out as much as we can. + * + ******************************************************************************/ - MainMessage = AeDecodeMessageId (Enode->MessageId); - ExtraMessage = Enode->Message; +void +AePrintException ( + UINT32 FileId, + ASL_ERROR_MSG *Enode, + char *Header) +{ + FILE *OutputFile; + BOOLEAN PrematureEOF = FALSE; + UINT32 Total = 0; + ACPI_STATUS Status; + ASL_ERROR_MSG *Child = Enode->SubError; - /* If a NULL line number, just print the decoded message */ - if (!Enode->LineNumber) + if (Gbl_NoErrors) { - fprintf (OutputFile, " %s %s\n\n", MainMessage, ExtraMessage); return; } - MsgLength = strlen (MainMessage); - if (MsgLength == 0) + /* + * Only listing files have a header, and remarks/optimizations + * are always output + */ + if (!Header) { - /* Use the secondary/extra message as main message */ + /* Ignore remarks if requested */ - MainMessage = Enode->Message; - if (!MainMessage) + switch (Enode->Level) { - MainMessage = ""; - } + case ASL_WARNING: + case ASL_WARNING2: + case ASL_WARNING3: - MsgLength = strlen (MainMessage); - ExtraMessage = NULL; - } + if (!Gbl_DisplayWarnings) + { + return; + } + break; - if (Gbl_VerboseErrors && !PrematureEOF) - { - if (Total >= 256) - { - fprintf (OutputFile, " %s", - MainMessage); - } - else - { - SourceColumn = Enode->Column + Enode->FilenameLength + 6 + 2; - ErrorColumn = ASL_ERROR_LEVEL_LENGTH + 5 + 2 + 1; + case ASL_REMARK: - if ((MsgLength + ErrorColumn) < (SourceColumn - 1)) + if (!Gbl_DisplayRemarks) { - fprintf (OutputFile, "%*s%s", - (int) ((SourceColumn - 1) - ErrorColumn), - MainMessage, " ^ "); + return; } - else + break; + + case ASL_OPTIMIZATION: + + if (!Gbl_DisplayOptimizations) { - fprintf (OutputFile, "%*s %s", - (int) ((SourceColumn - ErrorColumn) + 1), "^", - MainMessage); + return; } + break; + + default: + + break; } } - else + + /* Get the various required file handles */ + + OutputFile = Gbl_Files[FileId].Handle; + + if (Header) { - fprintf (OutputFile, " %s", MainMessage); + fprintf (OutputFile, "%s", Header); } - /* Print the extra info message if present */ + if (!Enode->Filename) + { + AeDecodeErrorMessageId (OutputFile, Enode, PrematureEOF, Total); + return; + } - if (ExtraMessage) + Status = AePrintErrorSourceLine (OutputFile, Enode, &PrematureEOF, &Total); + if (ACPI_FAILURE (Status)) { - fprintf (OutputFile, " (%s)", ExtraMessage); + return; } - if (PrematureEOF) + /* If a NULL message ID, just print the raw message */ + + if (Enode->MessageId == 0) { - fprintf (OutputFile, " and premature End-Of-File"); + fprintf (OutputFile, "%s\n", Enode->Message); + return; } - fprintf (OutputFile, "\n"); - if (Gbl_VerboseErrors) + AeDecodeErrorMessageId (OutputFile, Enode, PrematureEOF, Total); + + while (Child) { fprintf (OutputFile, "\n"); + AePrintSubError (OutputFile, Child); + Child = Child->SubError; } } /******************************************************************************* * + * FUNCTION: AePrintSubError + * + * PARAMETERS: OutputFile - Output file + * Enode - Error node to print + * + * RETURN: None + * + * DESCRIPTION: Print the contents of an error nodes. This function is tailored + * to print error nodes that are SubErrors within ASL_ERROR_MSG + * + ******************************************************************************/ + +static void +AePrintSubError ( + FILE *OutputFile, + ASL_ERROR_MSG *Enode) +{ + UINT32 Total = 0; + BOOLEAN PrematureEOF = FALSE; + const char *MainMessage; + + + MainMessage = AeDecodeMessageId (Enode->MessageId); + + fprintf (OutputFile, " %s%s", MainMessage, "\n "); + (void) AePrintErrorSourceLine (OutputFile, Enode, &PrematureEOF, &Total); + fprintf (OutputFile, "\n"); +} + + +/******************************************************************************* + * * FUNCTION: AePrintErrorLog * * PARAMETERS: FileId - Where to output the error log @@ -640,54 +779,72 @@ AePrintErrorLog ( /******************************************************************************* * - * FUNCTION: AslCommonError2 + * FUNCTION: AslInitEnode * - * PARAMETERS: Level - Seriousness (Warning/error, etc.) + * PARAMETERS: InputEnode - Input Error node to initialize + * Level - Seriousness (Warning/error, etc.) * MessageId - Index into global message buffer - * LineNumber - Actual file line number + * CurrentLineNumber - Actual file line number + * LogicalLineNumber - Cumulative line number + * LogicalByteOffset - Byte offset in source file * Column - Column in current line - * SourceLine - Actual source code line * Filename - source filename * ExtraMessage - additional error message + * SourceLine - Line of error source code + * SubError - SubError of this InputEnode * * RETURN: None * - * DESCRIPTION: Create a new error node and add it to the error log + * DESCRIPTION: Initialize an Error node * ******************************************************************************/ -void -AslCommonError2 ( +static void AslInitEnode ( + ASL_ERROR_MSG **InputEnode, UINT8 Level, UINT16 MessageId, UINT32 LineNumber, + UINT32 LogicalLineNumber, + UINT32 LogicalByteOffset, UINT32 Column, - char *SourceLine, char *Filename, - char *ExtraMessage) + char *ExtraMessage, + char *SourceLine, + ASL_ERROR_MSG *SubError) { - char *MessageBuffer = NULL; - char *LineBuffer; ASL_ERROR_MSG *Enode; - Enode = UtLocalCalloc (sizeof (ASL_ERROR_MSG)); + *InputEnode = UtLocalCalloc (sizeof (ASL_ERROR_MSG)); + Enode = *InputEnode; + Enode->Level = Level; + Enode->MessageId = MessageId; + Enode->LineNumber = LineNumber; + Enode->LogicalLineNumber = LogicalLineNumber; + Enode->LogicalByteOffset = LogicalByteOffset; + Enode->Column = Column; + Enode->SubError = SubError; + Enode->Message = NULL; + Enode->SourceLine = NULL; + Enode->Filename = NULL; if (ExtraMessage) { /* Allocate a buffer for the message and a new error node */ - MessageBuffer = UtStringCacheCalloc (strlen (ExtraMessage) + 1); + Enode->Message = UtLocalCacheCalloc (strlen (ExtraMessage) + 1); /* Keep a copy of the extra message */ - strcpy (MessageBuffer, ExtraMessage); + strcpy (Enode->Message, ExtraMessage); } - LineBuffer = UtLocalCalloc (strlen (SourceLine) + 1); - strcpy (LineBuffer, SourceLine); + if (SourceLine) + { + Enode->SourceLine = UtLocalCalloc (strlen (SourceLine) + 1); + strcpy (Enode->SourceLine, SourceLine); + } - /* Initialize the error node */ if (Filename) { @@ -698,28 +855,39 @@ AslCommonError2 ( Enode->FilenameLength = 6; } } +} - Enode->MessageId = MessageId; - Enode->Level = Level; - Enode->LineNumber = LineNumber; - Enode->LogicalLineNumber = LineNumber; - Enode->LogicalByteOffset = 0; - Enode->Column = Column; - Enode->Message = MessageBuffer; - Enode->SourceLine = LineBuffer; - - /* Add the new node to the error node list */ - - AeAddToErrorLog (Enode); - - if (Gbl_DebugFlag) - { - /* stderr is a file, send error to it immediately */ - AePrintException (ASL_FILE_STDERR, Enode, NULL); - } +/******************************************************************************* + * + * FUNCTION: AslCommonError2 + * + * PARAMETERS: Level - Seriousness (Warning/error, etc.) + * MessageId - Index into global message buffer + * LineNumber - Actual file line number + * Column - Column in current line + * SourceLine - Actual source code line + * Filename - source filename + * ExtraMessage - additional error message + * + * RETURN: None + * + * DESCRIPTION: Create a new error node and add it to the error log + * + ******************************************************************************/ - Gbl_ExceptionCount[Level]++; +void +AslCommonError2 ( + UINT8 Level, + UINT16 MessageId, + UINT32 LineNumber, + UINT32 Column, + char *SourceLine, + char *Filename, + char *ExtraMessage) +{ + AslLogNewError (Level, MessageId, LineNumber, LineNumber, 0, Column, + Filename, ExtraMessage, SourceLine, NULL); } @@ -753,48 +921,58 @@ AslCommonError ( char *Filename, char *ExtraMessage) { - char *MessageBuffer = NULL; - ASL_ERROR_MSG *Enode; - + /* Check if user wants to ignore this exception */ if (AslIsExceptionIgnored (Level, MessageId)) { return; } - Enode = UtLocalCalloc (sizeof (ASL_ERROR_MSG)); - - if (ExtraMessage) - { - /* Allocate a buffer for the message and a new error node */ - - MessageBuffer = UtStringCacheCalloc (strlen (ExtraMessage) + 1); - - /* Keep a copy of the extra message */ + AslLogNewError (Level, MessageId, CurrentLineNumber, LogicalLineNumber, + LogicalByteOffset, Column, Filename, ExtraMessage, + NULL, NULL); +} - strcpy (MessageBuffer, ExtraMessage); - } - /* Initialize the error node */ +/******************************************************************************* + * + * FUNCTION: AslLogNewError + * + * PARAMETERS: Level - Seriousness (Warning/error, etc.) + * MessageId - Index into global message buffer + * CurrentLineNumber - Actual file line number + * LogicalLineNumber - Cumulative line number + * LogicalByteOffset - Byte offset in source file + * Column - Column in current line + * Filename - source filename + * Message - additional error message + * SourceLine - Actual line of source code + * SubError - Sub-error associated with this error + * + * RETURN: None + * + * DESCRIPTION: Create a new error node and add it to the error log + * + ******************************************************************************/ +static void +AslLogNewError ( + UINT8 Level, + UINT16 MessageId, + UINT32 LineNumber, + UINT32 LogicalLineNumber, + UINT32 LogicalByteOffset, + UINT32 Column, + char *Filename, + char *Message, + char *SourceLine, + ASL_ERROR_MSG *SubError) +{ + ASL_ERROR_MSG *Enode = NULL; - if (Filename) - { - Enode->Filename = Filename; - Enode->FilenameLength = strlen (Filename); - if (Enode->FilenameLength < 6) - { - Enode->FilenameLength = 6; - } - } - Enode->MessageId = MessageId; - Enode->Level = Level; - Enode->LineNumber = CurrentLineNumber; - Enode->LogicalLineNumber = LogicalLineNumber; - Enode->LogicalByteOffset = LogicalByteOffset; - Enode->Column = Column; - Enode->Message = MessageBuffer; - Enode->SourceLine = NULL; + AslInitEnode (&Enode, Level, MessageId, LineNumber, LogicalLineNumber, + LogicalByteOffset, Column, Filename, Message, SourceLine, + SubError); /* Add the new node to the error node list */ @@ -825,8 +1003,8 @@ AslCommonError ( * * FUNCTION: AslIsExceptionIgnored * - * PARAMETERS: Level - Seriousness (Warning/error, etc.) - * MessageId - Index into global message buffer + * PARAMETERS: Level - Seriousness (Warning/error, etc.) + * MessageId - Index into global message buffer * * RETURN: BOOLEAN * @@ -840,7 +1018,7 @@ AslIsExceptionIgnored ( UINT8 Level, UINT16 MessageId) { - BOOLEAN ExceptionIgnored; + BOOLEAN ExceptionIgnored; /* Note: this allows exception to be disabled and expected */ @@ -869,7 +1047,8 @@ void AslCheckExpectedExceptions ( void) { - UINT8 i; + UINT8 i; + for (i = 0; i < Gbl_ExpectedMessagesIndex; ++i) { @@ -980,8 +1159,8 @@ AslDisableException ( * * FUNCTION: AslIsExceptionDisabled * - * PARAMETERS: Level - Seriousness (Warning/error, etc.) - * MessageId - Index into global message buffer + * PARAMETERS: Level - Seriousness (Warning/error, etc.) + * MessageId - Index into global message buffer * * RETURN: TRUE if exception/message should be ignored * @@ -999,9 +1178,8 @@ AslIsExceptionExpected ( UINT32 i; - /* - * Mark this exception as received - */ + /* Mark this exception as received */ + EncodedMessageId = AeBuildFullExceptionCode (Level, MessageId); for (i = 0; i < Gbl_ExpectedMessagesIndex; i++) { @@ -1082,6 +1260,61 @@ AslIsExceptionDisabled ( /******************************************************************************* * + * FUNCTION: AslDualParseOpError + * + * PARAMETERS: Level - Seriousness (Warning/error, etc.) + * MainMsgId - Index into global message buffer + * MainOp - Parse node where error happened + * MainMsg - Message pertaining to the MainOp + * SubMsgId - Index into global message buffer + * SubOp - Additional parse node for better message + * SubMsg - Message pertainint to SubOp + * + * + * RETURN: None + * + * DESCRIPTION: Main error reporting routine for the ASL compiler for error + * messages that point to multiple parse objects. + * + ******************************************************************************/ + +void +AslDualParseOpError ( + UINT8 Level, + UINT16 MainMsgId, + ACPI_PARSE_OBJECT *MainOp, + char *MainMsg, + UINT16 SubMsgId, + ACPI_PARSE_OBJECT *SubOp, + char *SubMsg) +{ + ASL_ERROR_MSG *SubEnode = NULL; + + + /* Check if user wants to ignore this exception */ + + if (AslIsExceptionIgnored (Level, MainMsgId) || !MainOp) + { + return; + } + + if (SubOp) + { + AslInitEnode (&SubEnode, Level, SubMsgId, SubOp->Asl.LineNumber, + SubOp->Asl.LogicalLineNumber, SubOp->Asl.LogicalByteOffset, + SubOp->Asl.Column, SubOp->Asl.Filename, SubMsg, + NULL, NULL); + } + + AslLogNewError (Level, MainMsgId, MainOp->Asl.LineNumber, + MainOp->Asl.LogicalLineNumber, MainOp->Asl.LogicalByteOffset, + MainOp->Asl.Column, MainOp->Asl.Filename, MainMsg, + NULL, SubEnode); +} + + +/******************************************************************************* + * * FUNCTION: AslError * * PARAMETERS: Level - Seriousness (Warning/error, etc.) diff --git a/sys/contrib/dev/acpica/source/compiler/aslexternal.c b/sys/contrib/dev/acpica/source/compiler/aslexternal.c index 21729bd702..b3e536932c 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslexternal.c +++ b/sys/contrib/dev/acpica/source/compiler/aslexternal.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslfileio.c b/sys/contrib/dev/acpica/source/compiler/aslfileio.c index 4b7f81cadf..eafebd658f 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslfileio.c +++ b/sys/contrib/dev/acpica/source/compiler/aslfileio.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslfiles.c b/sys/contrib/dev/acpica/source/compiler/aslfiles.c index 46307ab04a..cc6aaf8268 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslfiles.c +++ b/sys/contrib/dev/acpica/source/compiler/aslfiles.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -151,7 +151,6 @@ #include "aslcompiler.h" #include "acapps.h" -#include "dtcompiler.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslfiles") @@ -326,14 +325,14 @@ FlMergePathnames ( (*FilePathname == '/') || (FilePathname[1] == ':')) { - Pathname = UtStringCacheCalloc (strlen (FilePathname) + 1); + Pathname = UtLocalCacheCalloc (strlen (FilePathname) + 1); strcpy (Pathname, FilePathname); goto ConvertBackslashes; } /* Need a local copy of the prefix directory path */ - CommonPath = UtStringCacheCalloc (strlen (PrefixDir) + 1); + CommonPath = UtLocalCacheCalloc (strlen (PrefixDir) + 1); strcpy (CommonPath, PrefixDir); /* @@ -369,7 +368,7 @@ FlMergePathnames ( /* Build the final merged pathname */ ConcatenatePaths: - Pathname = UtStringCacheCalloc ( + Pathname = UtLocalCacheCalloc ( strlen (CommonPath) + strlen (FilePathname) + 2); if (LastElement && *CommonPath) { @@ -619,7 +618,7 @@ FlOpenAmlOutputFile ( if (!Filename) { /* Create the output AML filename */ - if (!Gbl_CaptureComments) + if (!AcpiGbl_CaptureComments) { Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_AML_CODE); } diff --git a/sys/contrib/dev/acpica/source/compiler/aslfold.c b/sys/contrib/dev/acpica/source/compiler/aslfold.c index 511db575bc..7957c149e3 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslfold.c +++ b/sys/contrib/dev/acpica/source/compiler/aslfold.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -444,7 +444,7 @@ OpcAmlCheckForConstant ( if (Op->Asl.CompileFlags & OP_IS_TARGET) { DbgPrint (ASL_PARSE_OUTPUT, - "**** Valid Target, transform to Store ****\n"); + "**** Valid Target, transform to Store or CopyObject ****\n"); return (AE_CTRL_RETURN_VALUE); } @@ -468,7 +468,7 @@ OpcAmlCheckForConstant ( if (WalkState->Opcode == AML_BUFFER_OP) { DbgPrint (ASL_PARSE_OUTPUT, - "\nBuffer constant reduction is not supported yet\n"); + "\nBuffer constant reduction is currently not supported\n"); if (NextOp) /* Found a Name() operator, error */ { @@ -623,6 +623,8 @@ TrTransformToStoreOp ( ACPI_PARSE_OBJECT *NewParent; ACPI_PARSE_OBJECT *OriginalParent; ACPI_STATUS Status; + UINT16 NewParseOpcode; + UINT16 NewAmlOpcode; /* Extract the operands */ @@ -646,9 +648,45 @@ TrTransformToStoreOp ( } } - DbgPrint (ASL_PARSE_OUTPUT, - "Reduction/Transform to StoreOp: Store(%s, %s)\n", - Child1->Asl.ParseOpName, Child2->Asl.ParseOpName); + switch (Op->Asl.ParseOpcode) + { + /* + * Folding of the explicit conversion opcodes must use CopyObject + * instead of Store. This can change the object type of the target + * operand, as per the ACPI specification: + * + * "If the ASL operator is one of the explicit conversion operators + * (ToString, ToInteger, etc., and the CopyObject operator), no + * [implicit] conversion is performed. (In other words, the result + * object is stored directly to the target and completely overwrites + * any existing object already stored at the target)" + */ + case PARSEOP_TOINTEGER: + case PARSEOP_TOSTRING: + case PARSEOP_TOBUFFER: + case PARSEOP_TODECIMALSTRING: + case PARSEOP_TOHEXSTRING: + case PARSEOP_TOBCD: + case PARSEOP_FROMBCD: + + NewParseOpcode = PARSEOP_COPYOBJECT; + NewAmlOpcode = AML_COPY_OBJECT_OP; + + DbgPrint (ASL_PARSE_OUTPUT, + "Reduction/Transform to CopyObjectOp: CopyObject(%s, %s)\n", + Child1->Asl.ParseOpName, Child2->Asl.ParseOpName); + break; + + default: + + NewParseOpcode = PARSEOP_STORE; + NewAmlOpcode = AML_STORE_OP; + + DbgPrint (ASL_PARSE_OUTPUT, + "Reduction/Transform to StoreOp: Store(%s, %s)\n", + Child1->Asl.ParseOpName, Child2->Asl.ParseOpName); + break; + } /* * Create a NULL (zero) target so that we can use the @@ -709,10 +747,10 @@ TrTransformToStoreOp ( TrInstallReducedConstant (Child1, ObjDesc); - /* Convert operator to STORE */ + /* Convert operator to STORE or COPYOBJECT */ - Op->Asl.ParseOpcode = PARSEOP_STORE; - Op->Asl.AmlOpcode = AML_STORE_OP; + Op->Asl.ParseOpcode = NewParseOpcode; + Op->Asl.AmlOpcode = NewAmlOpcode; UtSetParseOpName (Op); Op->Common.Parent = OriginalParent; diff --git a/sys/contrib/dev/acpica/source/compiler/aslglobal.h b/sys/contrib/dev/acpica/source/compiler/aslglobal.h index 169b25e745..93c51fae56 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslglobal.h +++ b/sys/contrib/dev/acpica/source/compiler/aslglobal.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -220,7 +220,8 @@ const char *Gbl_OpFlagNames[ACPI_NUM_OP_FLAGS] = "OP_COMPILER_EMITTED", "OP_IS_DUPLICATE", "OP_IS_RESOURCE_DATA", - "OP_IS_NULL_RETURN" + "OP_IS_NULL_RETURN", + "OP_NOT_FOUND_DURING_LOAD" }; #else diff --git a/sys/contrib/dev/acpica/source/compiler/aslhelp.c b/sys/contrib/dev/acpica/source/compiler/aslhelp.c index e1266dc864..608f18532b 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslhelp.c +++ b/sys/contrib/dev/acpica/source/compiler/aslhelp.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -173,6 +173,7 @@ void Usage ( void) { + printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); printf ("%s\n\n", ASL_COMPLIANCE); ACPI_USAGE_HEADER ("iasl [Options] [Files]"); diff --git a/sys/contrib/dev/acpica/source/compiler/aslhelpers.y b/sys/contrib/dev/acpica/source/compiler/aslhelpers.y index cd898b1551..bb9ff62531 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslhelpers.y +++ b/sys/contrib/dev/acpica/source/compiler/aslhelpers.y @@ -9,7 +9,7 @@ NoEcho(' * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslhex.c b/sys/contrib/dev/acpica/source/compiler/aslhex.c index d7577a2cb1..c1e3c76193 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslhex.c +++ b/sys/contrib/dev/acpica/source/compiler/aslhex.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -150,6 +150,7 @@ *****************************************************************************/ #include "aslcompiler.h" +#include "acapps.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("ashex") @@ -265,6 +266,9 @@ HxReadAmlOutputFile ( * output file, but formatted into hex/ascii bytes suitable for * inclusion into a C source file. * + * Note: the base name of the hex output file is prepended to + * all symbols as they are output to the file. + * ******************************************************************************/ static void @@ -276,17 +280,29 @@ HxDoHexOutputC ( UINT32 Offset = 0; UINT32 AmlFileSize; UINT32 i; + char *FileBasename; + + /* Obtain the file basename (filename with no extension) */ + + FileBasename = FlGetFileBasename (Gbl_Files [ASL_FILE_HEX_OUTPUT].Filename); /* Get AML size, seek back to start */ AmlFileSize = FlGetFileSize (ASL_FILE_AML_OUTPUT); FlSeekFile (ASL_FILE_AML_OUTPUT, 0); + /* Finish the file header and emit the non-data symbols */ + FlPrintFile (ASL_FILE_HEX_OUTPUT, " * C source code output\n"); FlPrintFile (ASL_FILE_HEX_OUTPUT, " * AML code block contains 0x%X bytes\n *\n */\n", AmlFileSize); - FlPrintFile (ASL_FILE_HEX_OUTPUT, "unsigned char AmlCode[] =\n{\n"); + + FlPrintFile (ASL_FILE_HEX_OUTPUT, "#ifndef __%s_HEX__\n", FileBasename); + FlPrintFile (ASL_FILE_HEX_OUTPUT, "#define __%s_HEX__\n\n", FileBasename); + + AcpiUtStrlwr (FileBasename); + FlPrintFile (ASL_FILE_HEX_OUTPUT, "unsigned char %s_aml_code[] =\n{\n", FileBasename); while (Offset < AmlFileSize) { @@ -303,7 +319,7 @@ HxDoHexOutputC ( for (i = 0; i < LineLength; i++) { /* - * Print each hex byte. + * Output each hex byte in the form: "0xnn," * Add a comma until the very last byte of the AML file * (Some C compilers complain about a trailing comma) */ @@ -337,7 +353,8 @@ HxDoHexOutputC ( Offset += LineLength; } - FlPrintFile (ASL_FILE_HEX_OUTPUT, "};\n"); + FlPrintFile (ASL_FILE_HEX_OUTPUT, "};\n\n"); + FlPrintFile (ASL_FILE_HEX_OUTPUT, "#endif\n"); } diff --git a/sys/contrib/dev/acpica/source/compiler/aslkeywords.y b/sys/contrib/dev/acpica/source/compiler/aslkeywords.y index e259d849ee..6da600834b 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslkeywords.y +++ b/sys/contrib/dev/acpica/source/compiler/aslkeywords.y @@ -9,7 +9,7 @@ NoEcho(' * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/asllength.c b/sys/contrib/dev/acpica/source/compiler/asllength.c index 28ae2929a1..1d4c9d0a94 100644 --- a/sys/contrib/dev/acpica/source/compiler/asllength.c +++ b/sys/contrib/dev/acpica/source/compiler/asllength.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/asllisting.c b/sys/contrib/dev/acpica/source/compiler/asllisting.c index 6fe01f4918..9c35ff3388 100644 --- a/sys/contrib/dev/acpica/source/compiler/asllisting.c +++ b/sys/contrib/dev/acpica/source/compiler/asllisting.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/asllistsup.c b/sys/contrib/dev/acpica/source/compiler/asllistsup.c index c419f96061..2e329fe648 100644 --- a/sys/contrib/dev/acpica/source/compiler/asllistsup.c +++ b/sys/contrib/dev/acpica/source/compiler/asllistsup.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslload.c b/sys/contrib/dev/acpica/source/compiler/aslload.c index 2c825f0fd3..4082b388dc 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslload.c +++ b/sys/contrib/dev/acpica/source/compiler/aslload.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -153,9 +153,10 @@ #include "amlcode.h" #include "acdispat.h" #include "acnamesp.h" - +#include "acparser.h" #include "aslcompiler.y.h" + #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslload") @@ -327,8 +328,9 @@ LdLoadFieldElements ( * The name already exists in this scope * But continue processing the elements */ - AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Child, - Child->Asl.Value.String); + AslDualParseOpError (ASL_WARNING, ASL_MSG_EXTERN_COLLISION, Child, + Child->Asl.Value.String, ASL_MSG_EXTERN_FOUND_HERE, Node->Op, + Node->Op->Asl.ExternalName); } } else @@ -388,8 +390,10 @@ LdLoadResourceElements ( { /* Actual node causing the error was saved in ParentMethod */ - AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS, - (ACPI_PARSE_OBJECT *) Op->Asl.ParentMethod, Op->Asl.Namepath); + AslDualParseOpError (ASL_ERROR, ASL_MSG_NAME_EXISTS, + (ACPI_PARSE_OBJECT *) Op->Asl.ParentMethod, + Op->Asl.Namepath, ASL_MSG_FOUND_HERE, Node->Op, + Node->Op->Asl.ExternalName); return (AE_OK); } return (Status); @@ -467,9 +471,13 @@ LdNamespace1Begin ( UINT32 i; BOOLEAN ForceNewScope = FALSE; ACPI_OWNER_ID OwnerId = 0; + const ACPI_OPCODE_INFO *OpInfo; + ACPI_PARSE_OBJECT *ParentOp; ACPI_FUNCTION_NAME (LdNamespace1Begin); + + ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op %p [%s]\n", Op, Op->Asl.ParseOpName)); @@ -545,6 +553,69 @@ LdNamespace1Begin ( return (AE_OK); } + /* Check for a possible illegal forward reference */ + + if ((Op->Asl.ParseOpcode == PARSEOP_NAMESEG) || + (Op->Asl.ParseOpcode == PARSEOP_NAMESTRING)) + { + /* + * Op->Asl.Namepath will be NULL for these opcodes. + * These opcodes are guaranteed to have a parent. + * Examine the parent opcode. + */ + Status = AE_OK; + ParentOp = Op->Asl.Parent; + OpInfo = AcpiPsGetOpcodeInfo (ParentOp->Asl.AmlOpcode); + + /* + * Exclude all operators that actually declare a new name: + * Name (ABCD, 1) -> Ignore (AML_CLASS_NAMED_OBJECT) + * We only want references to named objects: + * Store (2, WXYZ) -> Attempt to resolve the name + */ + if (OpInfo->Class == AML_CLASS_NAMED_OBJECT) + { + return (AE_OK); + } + + /* + * Check if the referenced object exists at this point during + * the load: + * 1) If it exists, then this cannot be a forward reference. + * 2) If it does not exist, it could be a forward reference or + * it truly does not exist (and no external declaration). + */ + Status = AcpiNsLookup (WalkState->ScopeInfo, + Op->Asl.Value.Name, ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, + ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE, + WalkState, &Node); + if (Status == AE_NOT_FOUND) + { + /* + * This is either a foward reference or the object truly + * does not exist. The two cases can only be differentiated + * during the cross-reference stage later. Mark the Op/Name + * as not-found for now to indicate the need for further + * processing. + * + * Special case: Allow forward references from elements of + * Package objects. This provides compatibility with other + * ACPI implementations. To correctly implement this, the + * ACPICA table load defers package resolution until the entire + * namespace has been loaded. + */ + if ((ParentOp->Asl.ParseOpcode != PARSEOP_PACKAGE) && + (ParentOp->Asl.ParseOpcode != PARSEOP_VAR_PACKAGE)) + { + Op->Asl.CompileFlags |= OP_NOT_FOUND_DURING_LOAD; + } + + return (AE_OK); + } + + return (Status); + } + Path = Op->Asl.Namepath; if (!Path) { @@ -581,7 +652,6 @@ LdNamespace1Begin ( } break; - case PARSEOP_EXTERNAL: /* * "External" simply enters a name and type into the namespace. @@ -763,7 +833,6 @@ LdNamespace1Begin ( Status = AE_OK; goto FinishNode; - default: ObjectType = AslMapNamedOpcodeToDataType (Op->Asl.AmlOpcode); @@ -805,8 +874,8 @@ LdNamespace1Begin ( /* * Allow one create on an object or segment that was * previously declared External only if WalkState->OwnerId and - * Node->OwnerId are found in different tables (meaning that - * they have differnt OwnerIds). + * Node->OwnerId are different (meaning that the current WalkState + * and the Node are in different tables). */ Node->Flags &= ~ANOBJ_IS_EXTERNAL; Node->Type = (UINT8) ObjectType; @@ -827,8 +896,9 @@ LdNamespace1Begin ( if (Node->OwnerId == WalkState->OwnerId && !(Node->Flags & IMPLICIT_EXTERNAL)) { - AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op, - Op->Asl.ExternalName); + AslDualParseOpError (ASL_WARNING, ASL_MSG_EXTERN_COLLISION, Op, + Op->Asl.ExternalName, ASL_MSG_EXTERN_FOUND_HERE, Node->Op, + Node->Op->Asl.ExternalName); } if (Node->Flags & IMPLICIT_EXTERNAL) { @@ -849,8 +919,9 @@ LdNamespace1Begin ( if (Node->OwnerId == WalkState->OwnerId) { - AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op, - Op->Asl.ExternalName); + AslDualParseOpError (ASL_WARNING, ASL_MSG_EXTERN_COLLISION, Op, + Op->Asl.ExternalName, ASL_MSG_EXTERN_FOUND_HERE, Node->Op, + Node->Op->Asl.ExternalName); } } else if ((Node->Flags & ANOBJ_IS_EXTERNAL) && @@ -905,8 +976,9 @@ LdNamespace1Begin ( { /* Valid error, object already exists */ - AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op, - Op->Asl.ExternalName); + AslDualParseOpError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op, + Op->Asl.ExternalName, ASL_MSG_FOUND_HERE, Node->Op, + Node->Op->Asl.ExternalName); return_ACPI_STATUS (AE_OK); } } diff --git a/sys/contrib/dev/acpica/source/compiler/asllookup.c b/sys/contrib/dev/acpica/source/compiler/asllookup.c index acec30247c..a1c0d7fc03 100644 --- a/sys/contrib/dev/acpica/source/compiler/asllookup.c +++ b/sys/contrib/dev/acpica/source/compiler/asllookup.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslmain.c b/sys/contrib/dev/acpica/source/compiler/aslmain.c index e4ac4229eb..6827d1e67a 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslmain.c +++ b/sys/contrib/dev/acpica/source/compiler/aslmain.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslmap.c b/sys/contrib/dev/acpica/source/compiler/aslmap.c index a51bd60f01..0b6e08826d 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslmap.c +++ b/sys/contrib/dev/acpica/source/compiler/aslmap.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslmapenter.c b/sys/contrib/dev/acpica/source/compiler/aslmapenter.c index da9f8e514b..4643b7b3cc 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslmapenter.c +++ b/sys/contrib/dev/acpica/source/compiler/aslmapenter.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -332,7 +332,7 @@ MpCreateGpioInfo ( * sorted by both source device name and then the pin number. There is * one block per pin. */ - Buffer = UtStringCacheCalloc (sizeof (ACPI_GPIO_INFO)); + Buffer = UtLocalCacheCalloc (sizeof (ACPI_GPIO_INFO)); Info = ACPI_CAST_PTR (ACPI_GPIO_INFO, Buffer); NextGpio = Gbl_GpioList; @@ -409,7 +409,7 @@ MpCreateSerialInfo ( * Allocate a new info block and insert it into the global Serial list * sorted by both source device name and then the address. */ - Buffer = UtStringCacheCalloc (sizeof (ACPI_SERIAL_INFO)); + Buffer = UtLocalCacheCalloc (sizeof (ACPI_SERIAL_INFO)); Info = ACPI_CAST_PTR (ACPI_SERIAL_INFO, Buffer); NextSerial = Gbl_SerialList; diff --git a/sys/contrib/dev/acpica/source/compiler/aslmapoutput.c b/sys/contrib/dev/acpica/source/compiler/aslmapoutput.c index 5fdb54cdda..715634da72 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslmapoutput.c +++ b/sys/contrib/dev/acpica/source/compiler/aslmapoutput.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslmaputils.c b/sys/contrib/dev/acpica/source/compiler/aslmaputils.c index b66d176db2..ad750b6def 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslmaputils.c +++ b/sys/contrib/dev/acpica/source/compiler/aslmaputils.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -212,7 +212,7 @@ MpGetHidFromParseTree ( /* Convert EISAID to a string */ - HidString = UtStringCacheCalloc (ACPI_EISAID_STRING_SIZE); + HidString = UtLocalCacheCalloc (ACPI_EISAID_STRING_SIZE); AcpiExEisaIdToString (HidString, Arg->Asl.Value.Integer); return (HidString); @@ -277,7 +277,7 @@ MpGetHidValue ( /* Convert EISAID to a string */ - HidString = UtStringCacheCalloc (ACPI_EISAID_STRING_SIZE); + HidString = UtLocalCacheCalloc (ACPI_EISAID_STRING_SIZE); AcpiExEisaIdToString (HidString, HidNode->Object->Integer.Value); return (HidString); diff --git a/sys/contrib/dev/acpica/source/compiler/aslmessages.c b/sys/contrib/dev/acpica/source/compiler/aslmessages.c index 159f9d23f8..7f5cde73a5 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslmessages.c +++ b/sys/contrib/dev/acpica/source/compiler/aslmessages.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -342,15 +342,21 @@ const char *AslCompilerMsgs [] = /* ASL_MSG_RANGE */ "Constant out of range", /* ASL_MSG_BUFFER_ALLOCATION */ "Could not allocate line buffer", /* ASL_MSG_MISSING_DEPENDENCY */ "Missing dependency", -/* ASL_MSG_ILLEGAL_FORWARD_REF */ "Illegal forward reference within a method", -/* ASL_MSG_ILLEGAL_METHOD_REF */ "Illegal reference across two methods", +/* ASL_MSG_ILLEGAL_FORWARD_REF */ "Illegal forward reference", +/* ASL_MSG_ILLEGAL_METHOD_REF */ "Object is declared in a different method", /* ASL_MSG_LOCAL_NOT_USED */ "Method Local is set but never used", /* ASL_MSG_ARG_AS_LOCAL_NOT_USED */ "Method Argument (as a local) is set but never used", /* ASL_MSG_ARG_NOT_USED */ "Method Argument is never used", /* ASL_MSG_CONSTANT_REQUIRED */ "Non-reducible expression", /* ASL_MSG_CROSS_TABLE_SCOPE */ "Illegal open scope on external object from within DSDT", /* ASL_MSG_EXCEPTION_NOT_RECEIVED */ "Expected remark, warning, or error did not occur. Message ID:", -/* ASL_MSG_NULL_RESOURCE_TEMPLATE */ "Empty Resource Template (END_TAG only)" +/* ASL_MSG_NULL_RESOURCE_TEMPLATE */ "Empty Resource Template (END_TAG only)", +/* ASL_MSG_FOUND_HERE */ "Original name creation/declaration below: ", +/* ASL_MSG_ILLEGAL_RECURSION */ "Illegal recursive call to method that creates named objects", +/* ASL_MSG_EXTERN_COLLISION */ "A name cannot be defined and declared external in the same table", +/* ASL_MSG_FOUND_HERE_EXTERN */ "Remove one of the declarations indicated above or below:", +/* ASL_MSG_OEM_TABLE_ID */ "Invalid OEM Table ID", +/* ASL_MSG_OEM_ID */ "Invalid OEM ID" }; /* Table compiler */ diff --git a/sys/contrib/dev/acpica/source/compiler/aslmessages.h b/sys/contrib/dev/acpica/source/compiler/aslmessages.h index d69c05a176..18e8144585 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslmessages.h +++ b/sys/contrib/dev/acpica/source/compiler/aslmessages.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -353,6 +353,12 @@ typedef enum ASL_MSG_CROSS_TABLE_SCOPE, ASL_MSG_EXCEPTION_NOT_RECEIVED, ASL_MSG_NULL_RESOURCE_TEMPLATE, + ASL_MSG_FOUND_HERE, + ASL_MSG_ILLEGAL_RECURSION, + ASL_MSG_EXTERN_COLLISION, + ASL_MSG_EXTERN_FOUND_HERE, + ASL_MSG_OEM_TABLE_ID, + ASL_MSG_OEM_ID, /* These messages are used by the Data Table compiler only */ diff --git a/sys/contrib/dev/acpica/source/compiler/aslmethod.c b/sys/contrib/dev/acpica/source/compiler/aslmethod.c index 9734b643ef..e032348fd7 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslmethod.c +++ b/sys/contrib/dev/acpica/source/compiler/aslmethod.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -347,10 +347,31 @@ MtMethodAnalysisWalkBegin ( case PARSEOP_METHODCALL: + /* Check for a recursive method call */ + if (MethodInfo && (Op->Asl.Node == MethodInfo->Op->Asl.Node)) { - AslError (ASL_REMARK, ASL_MSG_RECURSION, Op, Op->Asl.ExternalName); + if (MethodInfo->CreatesNamedObjects) + { + /* + * This is an error, as it will fail at runtime on all ACPI + * implementations. Any named object declarations will be + * executed twice, causing failure the second time. Note, + * this is independent of whether the method is declared + * Serialized, because the same thread is attempting to + * reenter the method, and this will always succeed. + */ + AslDualParseOpError (ASL_ERROR, ASL_MSG_ILLEGAL_RECURSION, Op, + Op->Asl.Value.String, ASL_MSG_FOUND_HERE, MethodInfo->Op, + MethodInfo->Op->Asl.ExternalName); + } + else + { + /* Method does not create objects, issue a remark */ + + AslError (ASL_REMARK, ASL_MSG_RECURSION, Op, Op->Asl.ExternalName); + } } break; @@ -622,20 +643,28 @@ MtCheckNamedObjectInMethod ( return; } - /* Determine if we are creating a named object */ + /* Determine if we are creating a named object within a method */ + + if (!MethodInfo) + { + return; + } OpInfo = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode); if (OpInfo->Class == AML_CLASS_NAMED_OBJECT) { /* - * If we have a named object created within a non-serialized method, - * emit a remark that the method should be serialized. + * 1) Mark the method as a method that creates named objects. + * + * 2) If the method is non-serialized, emit a remark that the method + * should be serialized. * * Reason: If a thread blocks within the method for any reason, and - * another thread enters the method, the method will fail because an - * attempt will be made to create the same object twice. + * another thread enters the method, the method will fail because + * an attempt will be made to create the same object twice. */ - if (MethodInfo && !MethodInfo->ShouldBeSerialized) + MethodInfo->CreatesNamedObjects = TRUE; + if (!MethodInfo->ShouldBeSerialized) { AslError (ASL_REMARK, ASL_MSG_SERIALIZED_REQUIRED, MethodInfo->Op, "due to creation of named objects within"); diff --git a/sys/contrib/dev/acpica/source/compiler/aslnamesp.c b/sys/contrib/dev/acpica/source/compiler/aslnamesp.c index ceef689bf3..ccaf4fbf9f 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslnamesp.c +++ b/sys/contrib/dev/acpica/source/compiler/aslnamesp.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/asloffset.c b/sys/contrib/dev/acpica/source/compiler/asloffset.c index c57c1261c3..c98a9efd67 100644 --- a/sys/contrib/dev/acpica/source/compiler/asloffset.c +++ b/sys/contrib/dev/acpica/source/compiler/asloffset.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslopcodes.c b/sys/contrib/dev/acpica/source/compiler/aslopcodes.c index 1fffc1e70f..cfcb5e7c1e 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslopcodes.c +++ b/sys/contrib/dev/acpica/source/compiler/aslopcodes.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/asloperands.c b/sys/contrib/dev/acpica/source/compiler/asloperands.c index 03403a39a8..1d1a1a94bf 100644 --- a/sys/contrib/dev/acpica/source/compiler/asloperands.c +++ b/sys/contrib/dev/acpica/source/compiler/asloperands.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -1037,7 +1037,7 @@ OpnDoDefinitionBlock ( * We will use the AML filename that is embedded in the source file * for the output filename. */ - Filename = UtStringCacheCalloc (strlen (Gbl_DirectoryPath) + + Filename = UtLocalCacheCalloc (strlen (Gbl_DirectoryPath) + strlen ((char *) Child->Asl.Value.Buffer) + 1); /* Prepend the current directory path */ @@ -1061,7 +1061,7 @@ OpnDoDefinitionBlock ( if (strlen (Gbl_TableSignature) != ACPI_NAME_SIZE) { AslError (ASL_ERROR, ASL_MSG_TABLE_SIGNATURE, Child, - "Length is not exactly 4"); + "Length must be exactly 4 characters"); } for (i = 0; i < ACPI_NAME_SIZE; i++) @@ -1078,6 +1078,7 @@ OpnDoDefinitionBlock ( Child = Child->Asl.Next; Child->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; + /* * We used the revision to set the integer width earlier */ @@ -1086,6 +1087,12 @@ OpnDoDefinitionBlock ( Child = Child->Asl.Next; Child->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; + if (Child->Asl.Value.String && + strlen (Child->Asl.Value.String) > ACPI_OEM_ID_SIZE) + { + AslError (ASL_ERROR, ASL_MSG_OEM_ID, Child, + "Length cannot exceed 6 characters"); + } /* OEM TableID */ @@ -1094,7 +1101,13 @@ OpnDoDefinitionBlock ( if (Child->Asl.Value.String) { Length = strlen (Child->Asl.Value.String); - Gbl_TableId = UtStringCacheCalloc (Length + 1); + if (Length > ACPI_OEM_TABLE_ID_SIZE) + { + AslError (ASL_ERROR, ASL_MSG_OEM_TABLE_ID, Child, + "Length cannot exceed 8 characters"); + } + + Gbl_TableId = UtLocalCacheCalloc (Length + 1); strcpy (Gbl_TableId, Child->Asl.Value.String); /* diff --git a/sys/contrib/dev/acpica/source/compiler/aslopt.c b/sys/contrib/dev/acpica/source/compiler/aslopt.c index 79e41da246..57be9c8cc3 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslopt.c +++ b/sys/contrib/dev/acpica/source/compiler/aslopt.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -275,7 +275,7 @@ OptSearchToRoot ( /* We must allocate a new string for the name (TargetPath gets deleted) */ - *NewPath = UtStringCacheCalloc (ACPI_NAME_SIZE + 1); + *NewPath = UtLocalCacheCalloc (ACPI_NAME_SIZE + 1); strcpy (*NewPath, Path); if (strncmp (*NewPath, "_T_", 3)) diff --git a/sys/contrib/dev/acpica/source/compiler/asloptions.c b/sys/contrib/dev/acpica/source/compiler/asloptions.c index 6d39f6d254..2b1e6027fd 100644 --- a/sys/contrib/dev/acpica/source/compiler/asloptions.c +++ b/sys/contrib/dev/acpica/source/compiler/asloptions.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -178,9 +178,6 @@ AslDoResponseFile ( #define ASL_TOKEN_SEPARATORS " \t\n" #define ASL_SUPPORTED_OPTIONS "@:a:b|c|d^D:e:f^gh^i|I:l^m:no|p:P^q^r:s|t|T+G^v^w|x:z" -static char ASL_BUILD_DATE[] = __DATE__; -static char ASL_BUILD_TIME[] = __TIME__; - /******************************************************************************* * @@ -207,7 +204,6 @@ AslCommandLine ( if (argc < 2) { - printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); Usage (); exit (1); } @@ -327,7 +323,7 @@ AslDoOptions ( Gbl_IntegerOptimizationFlag = FALSE; Gbl_ReferenceOptimizationFlag = FALSE; Gbl_OptimizeTrivialParseNodes = FALSE; - Gbl_CaptureComments = TRUE; + AcpiGbl_CaptureComments = TRUE; AcpiGbl_DoDisassemblerOptimizations = FALSE; AcpiGbl_DebugAslConversion = TRUE; AcpiGbl_DmEmitExternalOpcodes = TRUE; @@ -395,7 +391,7 @@ AslDoOptions ( Gbl_IntegerOptimizationFlag = FALSE; Gbl_ReferenceOptimizationFlag = FALSE; Gbl_OptimizeTrivialParseNodes = FALSE; - Gbl_CaptureComments = TRUE; + AcpiGbl_CaptureComments = TRUE; AcpiGbl_DoDisassemblerOptimizations = FALSE; AcpiGbl_DmEmitExternalOpcodes = TRUE; Gbl_DoExternalsInPlace = TRUE; @@ -420,25 +416,11 @@ AslDoOptions ( { case '^': - /* Get the required argument */ - - if (AcpiGetoptArgument (argc, argv)) - { - return (-1); - } - Gbl_DoCompile = FALSE; break; case 'a': - /* Get the required argument */ - - if (AcpiGetoptArgument (argc, argv)) - { - return (-1); - } - Gbl_DoCompile = FALSE; Gbl_DisassembleAll = TRUE; break; @@ -541,7 +523,6 @@ AslDoOptions ( { case '^': - printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); Usage (); exit (0); @@ -801,8 +782,8 @@ AslDoOptions ( Gbl_IntegerOptimizationFlag = FALSE; Gbl_ReferenceOptimizationFlag = FALSE; Gbl_OptimizeTrivialParseNodes = FALSE; - Gbl_CaptureComments = TRUE; Gbl_DoExternalsInPlace = TRUE; + AcpiGbl_CaptureComments = TRUE; return (0); case 'r': /* Override revision found in table header */ @@ -891,8 +872,8 @@ AslDoOptions ( case 'd': - printf ("%s Build date/time: %s %s\n", - ASL_COMPILER_NAME, ASL_BUILD_DATE, ASL_BUILD_TIME); + printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); + printf (ACPI_COMMON_BUILD_TIME); exit (0); case 'e': diff --git a/sys/contrib/dev/acpica/source/compiler/aslparseop.c b/sys/contrib/dev/acpica/source/compiler/aslparseop.c index 41badcee52..9585e565e9 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslparseop.c +++ b/sys/contrib/dev/acpica/source/compiler/aslparseop.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -158,13 +158,6 @@ ACPI_MODULE_NAME ("aslparseop") -/* Local prototypes */ - -static ACPI_PARSE_OBJECT * -TrGetOpFromCache ( - void); - - /******************************************************************************* * * FUNCTION: TrCreateOp @@ -276,7 +269,7 @@ TrCreateOp ( * FirstChild place it in the parent. This also means that * legitimate comments for the child gets put to the parent. */ - if (Gbl_CaptureComments && + if (AcpiGbl_CaptureComments && ((ParseOpcode == PARSEOP_CONNECTION) || (ParseOpcode == PARSEOP_EXTERNAL) || (ParseOpcode == PARSEOP_OFFSET) || @@ -315,7 +308,7 @@ TrCreateOp ( /* Get the comment from last child in the resource template call */ - if (Gbl_CaptureComments && + if (AcpiGbl_CaptureComments && (Op->Asl.ParseOpcode == PARSEOP_RESOURCETEMPLATE)) { CvDbgPrint ("Transferred current comment list to this op.\n"); @@ -490,7 +483,7 @@ TrCreateTargetOp ( return (NULL); } - Op = TrGetOpFromCache (); + Op = UtParseOpCacheCalloc (); /* Copy the pertinent values (omit link pointer fields) */ @@ -788,7 +781,7 @@ TrAllocateOp ( ACPI_PARSE_OBJECT *LatestOp; - Op = TrGetOpFromCache (); + Op = UtParseOpCacheCalloc (); Op->Asl.ParseOpcode = (UINT16) ParseOpcode; Op->Asl.Filename = Gbl_Files[ASL_FILE_INPUT].Filename; @@ -801,7 +794,7 @@ TrAllocateOp ( /* The following is for capturing comments */ - if(Gbl_CaptureComments) + if (AcpiGbl_CaptureComments) { LatestOp = Gbl_CommentState.LatestParseOp; Op->Asl.InlineComment = NULL; @@ -877,50 +870,6 @@ TrAllocateOp ( /******************************************************************************* * - * FUNCTION: TrGetOpFromCache - * - * PARAMETERS: None - * - * RETURN: New parse op. Aborts on allocation failure - * - * DESCRIPTION: Allocate a new parse op for the parse tree. Bypass the local - * dynamic memory manager for performance reasons (This has a - * major impact on the speed of the compiler.) - * - ******************************************************************************/ - -static ACPI_PARSE_OBJECT * -TrGetOpFromCache ( - void) -{ - ASL_CACHE_INFO *Cache; - - - if (Gbl_ParseOpCacheNext >= Gbl_ParseOpCacheLast) - { - /* Allocate a new buffer */ - - Cache = UtLocalCalloc (sizeof (Cache->Next) + - (sizeof (ACPI_PARSE_OBJECT) * ASL_PARSEOP_CACHE_SIZE)); - - /* Link new cache buffer to head of list */ - - Cache->Next = Gbl_ParseOpCacheList; - Gbl_ParseOpCacheList = Cache; - - /* Setup cache management pointers */ - - Gbl_ParseOpCacheNext = ACPI_CAST_PTR (ACPI_PARSE_OBJECT, Cache->Buffer); - Gbl_ParseOpCacheLast = Gbl_ParseOpCacheNext + ASL_PARSEOP_CACHE_SIZE; - } - - Gbl_ParseOpCount++; - return (Gbl_ParseOpCacheNext++); -} - - -/******************************************************************************* - * * FUNCTION: TrPrintOpFlags * * PARAMETERS: Flags - Flags word to be decoded diff --git a/sys/contrib/dev/acpica/source/compiler/aslparser.y b/sys/contrib/dev/acpica/source/compiler/aslparser.y index 6426cebefa..38c033d539 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslparser.y +++ b/sys/contrib/dev/acpica/source/compiler/aslparser.y @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslpld.c b/sys/contrib/dev/acpica/source/compiler/aslpld.c index 862eef03cf..ef87017e8e 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslpld.c +++ b/sys/contrib/dev/acpica/source/compiler/aslpld.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslpredef.c b/sys/contrib/dev/acpica/source/compiler/aslpredef.c index 095f1d4fc9..ce1814c24c 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslpredef.c +++ b/sys/contrib/dev/acpica/source/compiler/aslpredef.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslprepkg.c b/sys/contrib/dev/acpica/source/compiler/aslprepkg.c index bd193dddaa..68fdd8f7a9 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslprepkg.c +++ b/sys/contrib/dev/acpica/source/compiler/aslprepkg.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslprimaries.y b/sys/contrib/dev/acpica/source/compiler/aslprimaries.y index 3c8ced1ef6..b131f2a97f 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslprimaries.y +++ b/sys/contrib/dev/acpica/source/compiler/aslprimaries.y @@ -11,7 +11,7 @@ NoEcho(' * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslprintf.c b/sys/contrib/dev/acpica/source/compiler/aslprintf.c index e5f56f11fd..29a1e2f851 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslprintf.c +++ b/sys/contrib/dev/acpica/source/compiler/aslprintf.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -293,7 +293,7 @@ OpcParsePrintf ( if (StringToProcess) { - NewString = UtStringCacheCalloc (StringLength + 1); + NewString = UtLocalCacheCalloc (StringLength + 1); strncpy (NewString, StartPosition, StringLength); NewOp = TrAllocateOp (PARSEOP_STRING_LITERAL); @@ -382,7 +382,7 @@ OpcParsePrintf ( if (StringToProcess) { - NewString = UtStringCacheCalloc (StringLength + 1); + NewString = UtLocalCacheCalloc (StringLength + 1); strncpy (NewString, StartPosition, StringLength); NewOp = TrAllocateOp (PARSEOP_STRING_LITERAL); diff --git a/sys/contrib/dev/acpica/source/compiler/aslprune.c b/sys/contrib/dev/acpica/source/compiler/aslprune.c index e824040d32..ba60e509a2 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslprune.c +++ b/sys/contrib/dev/acpica/source/compiler/aslprune.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslresource.c b/sys/contrib/dev/acpica/source/compiler/aslresource.c index b052c1ed8b..6984fc931f 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslresource.c +++ b/sys/contrib/dev/acpica/source/compiler/aslresource.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslresources.y b/sys/contrib/dev/acpica/source/compiler/aslresources.y index 5b73ed8722..b328482f6b 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslresources.y +++ b/sys/contrib/dev/acpica/source/compiler/aslresources.y @@ -11,7 +11,7 @@ NoEcho(' * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslrestype1.c b/sys/contrib/dev/acpica/source/compiler/aslrestype1.c index d75c7d1645..6d71afd774 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslrestype1.c +++ b/sys/contrib/dev/acpica/source/compiler/aslrestype1.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslrestype1i.c b/sys/contrib/dev/acpica/source/compiler/aslrestype1i.c index 935642996d..d4fc1fc2cf 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslrestype1i.c +++ b/sys/contrib/dev/acpica/source/compiler/aslrestype1i.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslrestype2.c b/sys/contrib/dev/acpica/source/compiler/aslrestype2.c index 9e06702d13..b09df43737 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslrestype2.c +++ b/sys/contrib/dev/acpica/source/compiler/aslrestype2.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslrestype2d.c b/sys/contrib/dev/acpica/source/compiler/aslrestype2d.c index 6b6035b2f8..50d00c08a0 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslrestype2d.c +++ b/sys/contrib/dev/acpica/source/compiler/aslrestype2d.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslrestype2e.c b/sys/contrib/dev/acpica/source/compiler/aslrestype2e.c index 675b2eec07..c4d0ac5dd8 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslrestype2e.c +++ b/sys/contrib/dev/acpica/source/compiler/aslrestype2e.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslrestype2q.c b/sys/contrib/dev/acpica/source/compiler/aslrestype2q.c index a51931da90..d058a2ca12 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslrestype2q.c +++ b/sys/contrib/dev/acpica/source/compiler/aslrestype2q.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslrestype2s.c b/sys/contrib/dev/acpica/source/compiler/aslrestype2s.c index 243d1a3fef..0748086db5 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslrestype2s.c +++ b/sys/contrib/dev/acpica/source/compiler/aslrestype2s.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslrestype2w.c b/sys/contrib/dev/acpica/source/compiler/aslrestype2w.c index 3a34ac4f37..8b8025f7be 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslrestype2w.c +++ b/sys/contrib/dev/acpica/source/compiler/aslrestype2w.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslrules.y b/sys/contrib/dev/acpica/source/compiler/aslrules.y index 3b8e483989..76c791510b 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslrules.y +++ b/sys/contrib/dev/acpica/source/compiler/aslrules.y @@ -11,7 +11,7 @@ NoEcho(' * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslstartup.c b/sys/contrib/dev/acpica/source/compiler/aslstartup.c index 72c0d641e1..7369fef7ed 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslstartup.c +++ b/sys/contrib/dev/acpica/source/compiler/aslstartup.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -233,11 +233,11 @@ AslInitializeGlobals ( Gbl_Files[i].Filename = NULL; } - if (Gbl_CaptureComments) + if (AcpiGbl_CaptureComments) { Gbl_CommentState.SpacesBefore = 0; Gbl_CommentState.CommentType = 1; - Gbl_CommentState.LatestParseOp = NULL; + Gbl_CommentState.LatestParseOp = NULL; Gbl_CommentState.ParsingParenBraceNode = NULL; Gbl_CommentState.CaptureComments = TRUE; } @@ -410,7 +410,7 @@ AslDoDisassembly ( Gbl_Files[ASL_FILE_INPUT].Filename = NULL; - CmDeleteCaches (); + UtDeleteLocalCaches (); return (AE_OK); } @@ -453,7 +453,7 @@ AslDoOneFile ( /* Take a copy of the input filename, convert any backslashes */ Gbl_Files[ASL_FILE_INPUT].Filename = - UtStringCacheCalloc (strlen (Filename) + 1); + UtLocalCacheCalloc (strlen (Filename) + 1); strcpy (Gbl_Files[ASL_FILE_INPUT].Filename, Filename); UtConvertBackslashes (Gbl_Files[ASL_FILE_INPUT].Filename); diff --git a/sys/contrib/dev/acpica/source/compiler/aslstubs.c b/sys/contrib/dev/acpica/source/compiler/aslstubs.c index 75c1cfcb48..f2a37da552 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslstubs.c +++ b/sys/contrib/dev/acpica/source/compiler/aslstubs.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslsupport.l b/sys/contrib/dev/acpica/source/compiler/aslsupport.l index 42cee752a9..406f2d5471 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslsupport.l +++ b/sys/contrib/dev/acpica/source/compiler/aslsupport.l @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -382,7 +382,7 @@ AslPushInputFileStack ( /* Reset the global line count and filename */ Gbl_Files[ASL_FILE_INPUT].Filename = - UtStringCacheCalloc (strlen (Filename) + 1); + UtLocalCacheCalloc (strlen (Filename) + 1); strcpy (Gbl_Files[ASL_FILE_INPUT].Filename, Filename); @@ -496,7 +496,7 @@ AslInsertLineBuffer ( AslResetCurrentLineBuffer (); } - if (Gbl_CaptureComments) + if (AcpiGbl_CaptureComments) { CvProcessCommentState (SourceChar); } @@ -525,7 +525,7 @@ static void count ( int Type) { - int i; + char *p; switch (Type) @@ -547,9 +547,9 @@ count ( break; } - for (i = 0; (yytext[i] != 0) && (yytext[i] != EOF); i++) + for (p = yytext; *p != '\0'; p++) { - AslInsertLineBuffer (yytext[i]); + AslInsertLineBuffer (*p); *Gbl_LineBufPtr = 0; } } @@ -580,7 +580,7 @@ AslDoComment ( AslInsertLineBuffer ('/'); AslInsertLineBuffer ('*'); - if (Gbl_CaptureComments && CurrentState.CaptureComments) + if (AcpiGbl_CaptureComments && CurrentState.CaptureComments) { *StringBuffer = '/'; ++StringBuffer; @@ -595,7 +595,7 @@ loop: while (((c = input ()) != '*') && (c != EOF)) { AslInsertLineBuffer (c); - if (Gbl_CaptureComments && CurrentState.CaptureComments) + if (AcpiGbl_CaptureComments && CurrentState.CaptureComments) { *StringBuffer = c; ++StringBuffer; @@ -623,7 +623,7 @@ loop: /* Comment is closed only if the NEXT character is a slash */ AslInsertLineBuffer (c); - if (Gbl_CaptureComments && CurrentState.CaptureComments) + if (AcpiGbl_CaptureComments && CurrentState.CaptureComments) { *StringBuffer = c; ++StringBuffer; @@ -698,7 +698,7 @@ AslDoCommentType2 ( AslInsertLineBuffer ('/'); - if (Gbl_CaptureComments && CurrentState.CaptureComments) + if (AcpiGbl_CaptureComments && CurrentState.CaptureComments) { AslInsertLineBuffer ('*'); *StringBuffer = '/'; @@ -714,7 +714,7 @@ AslDoCommentType2 ( while (((c = input ()) != '\n') && (c != EOF)) { AslInsertLineBuffer (c); - if (Gbl_CaptureComments && CurrentState.CaptureComments) + if (AcpiGbl_CaptureComments && CurrentState.CaptureComments) { *StringBuffer = c; ++StringBuffer; @@ -1009,7 +1009,7 @@ CompletedString: */ *StringBuffer = 0; - CleanString = UtStringCacheCalloc (strlen (MsgBuffer) + 1); + CleanString = UtLocalCacheCalloc (strlen (MsgBuffer) + 1); strcpy (CleanString, MsgBuffer); AslCompilerlval.s = CleanString; return (TRUE); diff --git a/sys/contrib/dev/acpica/source/compiler/aslsupport.y b/sys/contrib/dev/acpica/source/compiler/aslsupport.y index bcced923e9..2e1a978f44 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslsupport.y +++ b/sys/contrib/dev/acpica/source/compiler/aslsupport.y @@ -9,7 +9,7 @@ NoEcho(' * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/asltokens.y b/sys/contrib/dev/acpica/source/compiler/asltokens.y index 38c55c186b..ee2e25c0e4 100644 --- a/sys/contrib/dev/acpica/source/compiler/asltokens.y +++ b/sys/contrib/dev/acpica/source/compiler/asltokens.y @@ -9,7 +9,7 @@ NoEcho(' * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/asltransform.c b/sys/contrib/dev/acpica/source/compiler/asltransform.c index daaca947ff..c74499ea2a 100644 --- a/sys/contrib/dev/acpica/source/compiler/asltransform.c +++ b/sys/contrib/dev/acpica/source/compiler/asltransform.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/asltree.c b/sys/contrib/dev/acpica/source/compiler/asltree.c index 084bc4d59a..3f62698724 100644 --- a/sys/contrib/dev/acpica/source/compiler/asltree.c +++ b/sys/contrib/dev/acpica/source/compiler/asltree.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -253,7 +253,7 @@ TrSetOpIntegerValue ( /* Converter: if this is a method invocation, turn off capture comments */ - if (Gbl_CaptureComments && + if (AcpiGbl_CaptureComments && (ParseOpcode == PARSEOP_METHODCALL)) { Gbl_CommentState.CaptureComments = FALSE; @@ -509,7 +509,7 @@ TrLinkOpChildren ( /* The following is for capturing comments */ - if(Gbl_CaptureComments) + if (AcpiGbl_CaptureComments) { /* * If there are "regular comments" detected at this point, @@ -590,7 +590,7 @@ TrLinkOpChildren ( va_end(ap); DbgPrint (ASL_PARSE_OUTPUT, "\n\n"); - if(Gbl_CaptureComments) + if (AcpiGbl_CaptureComments) { Gbl_CommentState.LatestParseOp = Op; CvDbgPrint ("TrLinkOpChildren=====Set latest parse op to this op.\n"); @@ -768,7 +768,7 @@ TrLinkChildOp ( * turn on capture comments as it signifies that we are done parsing * a method call. */ - if (Gbl_CaptureComments && Op1) + if (AcpiGbl_CaptureComments && Op1) { if (Op1->Asl.ParseOpcode == PARSEOP_METHODCALL) { diff --git a/sys/contrib/dev/acpica/source/compiler/asltypes.h b/sys/contrib/dev/acpica/source/compiler/asltypes.h index e4250871fd..f87358d0f7 100644 --- a/sys/contrib/dev/acpica/source/compiler/asltypes.h +++ b/sys/contrib/dev/acpica/source/compiler/asltypes.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -183,8 +183,9 @@ #define OP_IS_DUPLICATE 0x00040000 #define OP_IS_RESOURCE_DATA 0x00080000 #define OP_IS_NULL_RETURN 0x00100000 +#define OP_NOT_FOUND_DURING_LOAD 0x00200000 -#define ACPI_NUM_OP_FLAGS 0x21 +#define ACPI_NUM_OP_FLAGS 0x22 /* Keeps information about individual control methods */ @@ -202,6 +203,7 @@ typedef struct asl_method_info UINT8 ArgInitialized[ACPI_METHOD_NUM_ARGS]; UINT8 HasBeenTyped; UINT8 ShouldBeSerialized; + UINT8 CreatesNamedObjects; } ASL_METHOD_INFO; @@ -337,8 +339,11 @@ typedef struct asl_include_dir } ASL_INCLUDE_DIR; -/* An entry in the exception list, one for each error/warning */ - +/* + * An entry in the exception list, one for each error/warning + * Note: SubError nodes would be treated with the same messageId and Level + * as the parent error node. + */ typedef struct asl_error_msg { UINT32 LineNumber; @@ -347,6 +352,7 @@ typedef struct asl_error_msg UINT32 Column; char *Message; struct asl_error_msg *Next; + struct asl_error_msg *SubError; char *Filename; char *SourceLine; UINT32 FilenameLength; diff --git a/sys/contrib/dev/acpica/source/compiler/asltypes.y b/sys/contrib/dev/acpica/source/compiler/asltypes.y index 6886a0dc40..361d476ffd 100644 --- a/sys/contrib/dev/acpica/source/compiler/asltypes.y +++ b/sys/contrib/dev/acpica/source/compiler/asltypes.y @@ -9,7 +9,7 @@ NoEcho(' * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslutils.c b/sys/contrib/dev/acpica/source/compiler/aslutils.c index 8b46d38bb5..16ef1f478f 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslutils.c +++ b/sys/contrib/dev/acpica/source/compiler/aslutils.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -174,12 +174,6 @@ UtAttachNameseg ( ACPI_PARSE_OBJECT *Op, char *Name); -static void -UtReallocLineBuffers ( - char **Buffer, - UINT32 OldSize, - UINT32 NewSize); - /******************************************************************************* * @@ -244,6 +238,97 @@ UtQueryForOverwrite ( /******************************************************************************* * + * FUNCTION: UtNodeIsDescendantOf + * + * PARAMETERS: Node1 - Child node + * Node2 - Possible parent node + * + * RETURN: Boolean + * + * DESCRIPTION: Returns TRUE if Node1 is a descendant of Node2. Otherwise, + * return FALSE. Note, we assume a NULL Node2 element to be the + * topmost (root) scope. All nodes are descendants of the root. + * Note: Nodes at the same level (siblings) are not considered + * descendants. + * + ******************************************************************************/ + +BOOLEAN +UtNodeIsDescendantOf ( + ACPI_NAMESPACE_NODE *Node1, + ACPI_NAMESPACE_NODE *Node2) +{ + + if (Node1 == Node2) + { + return (FALSE); + } + + if (!Node2) + { + return (TRUE); /* All nodes descend from the root */ + } + + /* Walk upward until the root is reached or parent is found */ + + while (Node1) + { + if (Node1 == Node2) + { + return (TRUE); + } + + Node1 = Node1->Parent; + } + + return (FALSE); +} + + +/******************************************************************************* + * + * FUNCTION: UtGetParentMethod + * + * PARAMETERS: Node - Namespace node for any object + * + * RETURN: Namespace node for the parent method + * NULL - object is not within a method + * + * DESCRIPTION: Find the parent (owning) method node for a namespace object + * + ******************************************************************************/ + +void * +UtGetParentMethod ( + ACPI_NAMESPACE_NODE *Node) +{ + ACPI_NAMESPACE_NODE *ParentNode; + + + if (!Node) + { + return (NULL); + } + + /* Walk upward until a method is found, or the root is reached */ + + ParentNode = Node->Parent; + while (ParentNode) + { + if (ParentNode->Type == ACPI_TYPE_METHOD) + { + return (ParentNode); + } + + ParentNode = ParentNode->Parent; + } + + return (NULL); /* Object is not within a control method */ +} + + +/******************************************************************************* + * * FUNCTION: UtDisplaySupportedTables * * PARAMETERS: None @@ -311,45 +396,6 @@ UtDisplayConstantOpcodes ( /******************************************************************************* * - * FUNCTION: UtLocalCalloc - * - * PARAMETERS: Size - Bytes to be allocated - * - * RETURN: Pointer to the allocated memory. Guaranteed to be valid. - * - * DESCRIPTION: Allocate zero-initialized memory. Aborts the compile on an - * allocation failure, on the assumption that nothing more can be - * accomplished. - * - ******************************************************************************/ - -void * -UtLocalCalloc ( - UINT32 Size) -{ - void *Allocated; - - - Allocated = ACPI_ALLOCATE_ZEROED (Size); - if (!Allocated) - { - AslCommonError (ASL_ERROR, ASL_MSG_MEMORY_ALLOCATION, - Gbl_CurrentLineNumber, Gbl_LogicalLineNumber, - Gbl_InputByteCount, Gbl_CurrentColumn, - Gbl_Files[ASL_FILE_INPUT].Filename, NULL); - - CmCleanupAndExit (); - exit (1); - } - - TotalAllocations++; - TotalAllocated += Size; - return (Allocated); -} - - -/******************************************************************************* - * * FUNCTION: UtBeginEvent * * PARAMETERS: Name - Ascii name of this event @@ -467,7 +513,7 @@ UtSetParseOpName ( ACPI_PARSE_OBJECT *Op) { - strncpy (Op->Asl.ParseOpName, UtGetOpName (Op->Asl.ParseOpcode), + AcpiUtSafeStrncpy (Op->Asl.ParseOpName, UtGetOpName (Op->Asl.ParseOpcode), ACPI_MAX_PARSEOP_NAME); } @@ -637,180 +683,6 @@ UtCheckIntegerRange ( /******************************************************************************* * - * FUNCTION: UtStringCacheCalloc - * - * PARAMETERS: Length - Size of buffer requested - * - * RETURN: Pointer to the buffer. Aborts compiler on allocation failure - * - * DESCRIPTION: Allocate a string buffer. Bypass the local - * dynamic memory manager for performance reasons (This has a - * major impact on the speed of the compiler.) - * - ******************************************************************************/ - -char * -UtStringCacheCalloc ( - UINT32 Length) -{ - char *Buffer; - ASL_CACHE_INFO *Cache; - UINT32 CacheSize = ASL_STRING_CACHE_SIZE; - - - if (Length > CacheSize) - { - CacheSize = Length; - - if (Gbl_StringCacheList) - { - Cache = UtLocalCalloc (sizeof (Cache->Next) + CacheSize); - - /* Link new cache buffer just following head of list */ - - Cache->Next = Gbl_StringCacheList->Next; - Gbl_StringCacheList->Next = Cache; - - /* Leave cache management pointers alone as they pertain to head */ - - Gbl_StringCount++; - Gbl_StringSize += Length; - - return (Cache->Buffer); - } - } - - if ((Gbl_StringCacheNext + Length) >= Gbl_StringCacheLast) - { - /* Allocate a new buffer */ - - Cache = UtLocalCalloc (sizeof (Cache->Next) + CacheSize); - - /* Link new cache buffer to head of list */ - - Cache->Next = Gbl_StringCacheList; - Gbl_StringCacheList = Cache; - - /* Setup cache management pointers */ - - Gbl_StringCacheNext = Cache->Buffer; - Gbl_StringCacheLast = Gbl_StringCacheNext + CacheSize; - } - - Gbl_StringCount++; - Gbl_StringSize += Length; - - Buffer = Gbl_StringCacheNext; - Gbl_StringCacheNext += Length; - return (Buffer); -} - - -/****************************************************************************** - * - * FUNCTION: UtExpandLineBuffers - * - * PARAMETERS: None. Updates global line buffer pointers. - * - * RETURN: None. Reallocates the global line buffers - * - * DESCRIPTION: Called if the current line buffer becomes filled. Reallocates - * all global line buffers and updates Gbl_LineBufferSize. NOTE: - * Also used for the initial allocation of the buffers, when - * all of the buffer pointers are NULL. Initial allocations are - * of size ASL_DEFAULT_LINE_BUFFER_SIZE - * - *****************************************************************************/ - -void -UtExpandLineBuffers ( - void) -{ - UINT32 NewSize; - - - /* Attempt to double the size of all line buffers */ - - NewSize = Gbl_LineBufferSize * 2; - if (Gbl_CurrentLineBuffer) - { - DbgPrint (ASL_DEBUG_OUTPUT, - "Increasing line buffer size from %u to %u\n", - Gbl_LineBufferSize, NewSize); - } - - UtReallocLineBuffers (&Gbl_CurrentLineBuffer, Gbl_LineBufferSize, NewSize); - UtReallocLineBuffers (&Gbl_MainTokenBuffer, Gbl_LineBufferSize, NewSize); - UtReallocLineBuffers (&Gbl_MacroTokenBuffer, Gbl_LineBufferSize, NewSize); - UtReallocLineBuffers (&Gbl_ExpressionTokenBuffer, Gbl_LineBufferSize, NewSize); - - Gbl_LineBufPtr = Gbl_CurrentLineBuffer; - Gbl_LineBufferSize = NewSize; -} - - -/****************************************************************************** - * - * FUNCTION: UtReallocLineBuffers - * - * PARAMETERS: Buffer - Buffer to realloc - * OldSize - Old size of Buffer - * NewSize - New size of Buffer - * - * RETURN: none - * - * DESCRIPTION: Reallocate and initialize Buffer - * - *****************************************************************************/ - -static void -UtReallocLineBuffers ( - char **Buffer, - UINT32 OldSize, - UINT32 NewSize) -{ - - *Buffer = realloc (*Buffer, NewSize); - if (*Buffer) - { - memset (*Buffer + OldSize, 0, NewSize - OldSize); - return; - } - - printf ("Could not increase line buffer size from %u to %u\n", - OldSize, NewSize); - - AslError (ASL_ERROR, ASL_MSG_BUFFER_ALLOCATION, NULL, NULL); - AslAbort (); -} - - -/****************************************************************************** - * - * FUNCTION: UtFreeLineBuffers - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Free all line buffers - * - *****************************************************************************/ - -void -UtFreeLineBuffers ( - void) -{ - - free (Gbl_CurrentLineBuffer); - free (Gbl_MainTokenBuffer); - free (Gbl_MacroTokenBuffer); - free (Gbl_ExpressionTokenBuffer); -} - - -/******************************************************************************* - * * FUNCTION: UtInternalizeName * * PARAMETERS: ExternalName - Name to convert @@ -843,7 +715,7 @@ UtInternalizeName ( /* We need a segment to store the internal name */ - Info.InternalName = UtStringCacheCalloc (Info.Length); + Info.InternalName = UtLocalCacheCalloc (Info.Length); /* Build the name */ diff --git a/sys/contrib/dev/acpica/source/compiler/asluuid.c b/sys/contrib/dev/acpica/source/compiler/asluuid.c index 41d9a55e9b..93794c79d0 100644 --- a/sys/contrib/dev/acpica/source/compiler/asluuid.c +++ b/sys/contrib/dev/acpica/source/compiler/asluuid.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslwalks.c b/sys/contrib/dev/acpica/source/compiler/aslwalks.c index 811e203908..5047365997 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslwalks.c +++ b/sys/contrib/dev/acpica/source/compiler/aslwalks.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/aslxref.c b/sys/contrib/dev/acpica/source/compiler/aslxref.c index ebd356e62a..c34ab49c82 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslxref.c +++ b/sys/contrib/dev/acpica/source/compiler/aslxref.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -197,22 +197,6 @@ XfCheckFieldRange ( UINT32 FieldBitLength, UINT32 AccessBitWidth); -#ifdef __UNDER_DEVELOPMENT -static ACPI_PARSE_OBJECT * -XfGetParentMethod ( - ACPI_PARSE_OBJECT *Op); - -static void -XfCheckIllegalReference ( - ACPI_PARSE_OBJECT *Op, - ACPI_NAMESPACE_NODE *Node); - -static BOOLEAN -XfIsObjectParental ( - ACPI_PARSE_OBJECT *MethodOp1, - ACPI_PARSE_OBJECT *MethodOp2); -#endif - /******************************************************************************* * @@ -702,7 +686,7 @@ XfNamespaceLocateBegin ( Gbl_NsLookupCount++; Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ObjectType, - ACPI_IMODE_EXECUTE, Flags, WalkState, &(Node)); + ACPI_IMODE_EXECUTE, Flags, WalkState, &Node); if (ACPI_FAILURE (Status)) { if (Status == AE_NOT_FOUND) @@ -760,6 +744,26 @@ XfNamespaceLocateBegin ( return_ACPI_STATUS (Status); } + /* Object was found above, check for an illegal forward reference */ + + if (Op->Asl.CompileFlags & OP_NOT_FOUND_DURING_LOAD) + { + /* + * During the load phase, this Op was flagged as a possible + * illegal forward reference + * + * Note: Allow "forward references" from within a method to an + * object that is not within any method (module-level code) + */ + if (!WalkState->ScopeInfo || (UtGetParentMethod (Node) && + !UtNodeIsDescendantOf (WalkState->ScopeInfo->Scope.Node, + UtGetParentMethod (Node)))) + { + AslError (ASL_ERROR, ASL_MSG_ILLEGAL_FORWARD_REF, Op, + Op->Asl.ExternalName); + } + } + /* Check for a reference vs. name declaration */ if (!(OpInfo->Flags & AML_NAMED) && @@ -768,13 +772,6 @@ XfNamespaceLocateBegin ( /* This node has been referenced, mark it for reference check */ Node->Flags |= ANOBJ_IS_REFERENCED; - -#ifdef __UNDER_DEVELOPMENT - - /* Check for an illegal reference */ - - XfCheckIllegalReference (Op, Node); -#endif } /* Attempt to optimize the NamePath */ @@ -1205,178 +1202,3 @@ XfNamespaceLocateEnd ( return_ACPI_STATUS (AE_OK); } - - -#ifdef __UNDER_DEVELOPMENT -/******************************************************************************* - * - * FUNCTION: XfIsObjectParental - * - * PARAMETERS: ChildOp - Op to be checked - * PossibleParentOp - Determine if this op is in the family - * - * RETURN: TRUE if ChildOp is a descendent of PossibleParentOp - * - * DESCRIPTION: Determine if an Op is a descendent of another Op. Used to - * detect if a method is declared within another method. - * - ******************************************************************************/ - -static BOOLEAN -XfIsObjectParental ( - ACPI_PARSE_OBJECT *ChildOp, - ACPI_PARSE_OBJECT *PossibleParentOp) -{ - ACPI_PARSE_OBJECT *ParentOp; - - - /* Search upwards through the tree for possible parent */ - - ParentOp = ChildOp; - while (ParentOp) - { - if (ParentOp == PossibleParentOp) - { - return (TRUE); - } - - ParentOp = ParentOp->Asl.Parent; - } - - return (FALSE); -} - - -/******************************************************************************* - * - * FUNCTION: XfGetParentMethod - * - * PARAMETERS: Op - Op to be checked - * - * RETURN: Op for parent method. NULL if object is not within a method. - * - * DESCRIPTION: Determine if an object is within a control method. Used to - * implement special rules for named references from within a - * control method. - * - * NOTE: It would be better to have the parser set a flag in the Op if possible. - * - ******************************************************************************/ - -static ACPI_PARSE_OBJECT * -XfGetParentMethod ( - ACPI_PARSE_OBJECT *Op) -{ - ACPI_PARSE_OBJECT *ParentOp; - - - if (!Op) - { - return (NULL); - } - - if (Op->Asl.ParseOpcode == PARSEOP_METHOD) - { - return (NULL); - } - - /* Walk upwards through the parse tree, up to the root if necessary */ - - ParentOp = Op; - while (ParentOp) - { - if (ParentOp->Asl.ParseOpcode == PARSEOP_METHOD) - { - return (ParentOp); - } - - ParentOp = ParentOp->Asl.Parent; - } - - /* Object is not within a method */ - - return (NULL); -} - - -/******************************************************************************* - * - * FUNCTION: XfCheckIllegalReference - * - * PARAMETERS: Op - Op referring to the target - * TargetNode - Target of the reference - * - * RETURN: None. Emits error message for an illegal reference - * - * DESCRIPTION: Determine if a named reference is legal. A "named" reference - * is something like: Store(ABCD, ...), where ABCD is an AML - * Nameseg or Namepath. - * - * NOTE: Caller must ensure that the name Op is in fact a reference, and not - * an actual name declaration (creation of a named object). - * - ******************************************************************************/ - -static void -XfCheckIllegalReference ( - ACPI_PARSE_OBJECT *Op, - ACPI_NAMESPACE_NODE *TargetNode) -{ - ACPI_PARSE_OBJECT *MethodOp1; - ACPI_PARSE_OBJECT *MethodOp2; - ACPI_PARSE_OBJECT *TargetOp; - - - /* - * Check for an illegal reference to a named object: - * - * 1) References from one control method to another, non-parent - * method are not allowed, they will fail at runtime. - * - * 2) Forward references within a control method are not allowed. - * AML interpreters use a one-pass parse of control methods - * so these forward references will fail at runtime. - */ - TargetOp = TargetNode->Op; - - MethodOp1 = XfGetParentMethod (Op); - MethodOp2 = XfGetParentMethod (TargetOp); - - /* Are both objects within control method(s)? */ - - if (!MethodOp1 || !MethodOp2) - { - return; - } - - /* Objects not in the same method? */ - - if (MethodOp1 != MethodOp2) - { - /* - * 1) Cross-method named reference - * - * This is OK if and only if the target reference is within in a - * method that is a parent of current method - */ - if (!XfIsObjectParental (MethodOp1, MethodOp2)) - { - AslError (ASL_ERROR, ASL_MSG_ILLEGAL_METHOD_REF, Op, - Op->Asl.ExternalName); - } - } - - /* - * 2) Both reference and target are in the same method. Check if this is - * an (illegal) forward reference by examining the exact source code - * location of each (the referenced object and the object declaration). - * This is a bit nasty, yet effective. - */ - else if (Op->Asl.LogicalByteOffset < TargetOp->Asl.LogicalByteOffset) - { - AslError (ASL_ERROR, ASL_MSG_ILLEGAL_FORWARD_REF, Op, - Op->Asl.ExternalName); - } - -} -#endif diff --git a/sys/contrib/dev/acpica/source/compiler/aslxrefout.c b/sys/contrib/dev/acpica/source/compiler/aslxrefout.c index aa5d8a705d..0e548ece23 100644 --- a/sys/contrib/dev/acpica/source/compiler/aslxrefout.c +++ b/sys/contrib/dev/acpica/source/compiler/aslxrefout.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/cvcompiler.c b/sys/contrib/dev/acpica/source/compiler/cvcompiler.c index afb6ea1bce..b5ae2c838f 100644 --- a/sys/contrib/dev/acpica/source/compiler/cvcompiler.c +++ b/sys/contrib/dev/acpica/source/compiler/cvcompiler.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -186,14 +186,14 @@ CvProcessComment ( char *FinalCommentString; - if (Gbl_CaptureComments && CurrentState.CaptureComments) + if (AcpiGbl_CaptureComments && CurrentState.CaptureComments) { *StringBuffer = (char) c1; ++StringBuffer; *StringBuffer = 0; CvDbgPrint ("Multi-line comment\n"); - CommentString = UtStringCacheCalloc (strlen (MsgBuffer) + 1); + CommentString = UtLocalCacheCalloc (strlen (MsgBuffer) + 1); strcpy (CommentString, MsgBuffer); CvDbgPrint ("CommentString: %s\n", CommentString); @@ -208,7 +208,7 @@ CvProcessComment ( if (LineToken) { - FinalLineToken = UtStringCacheCalloc (strlen (LineToken) + 1); + FinalLineToken = UtLocalCacheCalloc (strlen (LineToken) + 1); strcpy (FinalLineToken, LineToken); /* Get rid of any carriage returns */ @@ -238,7 +238,7 @@ CvProcessComment ( } } - FinalLineToken = UtStringCacheCalloc (strlen (LineToken) + 1); + FinalLineToken = UtLocalCacheCalloc (strlen (LineToken) + 1); strcat (FinalLineToken, LineToken); /* Get rid of any carriage returns */ @@ -268,7 +268,7 @@ CvProcessComment ( * spacing. */ FinalCommentString = - UtStringCacheCalloc (strlen (CommentString) + + UtLocalCacheCalloc (strlen (CommentString) + CurrentState.SpacesBefore + 1); for (i = 0; (CurrentState.CommentType != ASL_COMMENT_STANDARD) && @@ -309,11 +309,11 @@ CvProcessCommentType2 ( char *FinalCommentString; - if (Gbl_CaptureComments && CurrentState.CaptureComments) + if (AcpiGbl_CaptureComments && CurrentState.CaptureComments) { *StringBuffer = 0; /* null terminate */ CvDbgPrint ("Single-line comment\n"); - CommentString = UtStringCacheCalloc (strlen (MsgBuffer) + 1); + CommentString = UtLocalCacheCalloc (strlen (MsgBuffer) + 1); strcpy (CommentString, MsgBuffer); /* If this comment lies on the same line as the latest parse op, @@ -342,7 +342,7 @@ CvProcessCommentType2 ( * [ (spaces) (comment) ( * /) ('\0') ] * */ - FinalCommentString = UtStringCacheCalloc (CurrentState.SpacesBefore + + FinalCommentString = UtLocalCacheCalloc (CurrentState.SpacesBefore + strlen (CommentString) + 3 + 1); for (i = 0; (CurrentState.CommentType != 1) && @@ -395,7 +395,7 @@ CvCalculateCommentLengths( ACPI_COMMENT_NODE *Current = NULL; - if (!Gbl_CaptureComments) + if (!AcpiGbl_CaptureComments) { return (0); } @@ -497,7 +497,7 @@ CgWriteAmlDefBlockComment( char *DirectoryPosition; - if (!Gbl_CaptureComments || + if (!AcpiGbl_CaptureComments || (Op->Asl.ParseOpcode != PARSEOP_DEFINITION_BLOCK)) { return; @@ -507,7 +507,7 @@ CgWriteAmlDefBlockComment( /* First, print the file name comment after changing .asl to .dsl */ - NewFilename = UtStringCacheCalloc (strlen (Op->Asl.Filename)); + NewFilename = UtLocalCacheCalloc (strlen (Op->Asl.Filename)); strcpy (NewFilename, Op->Asl.Filename); DirectoryPosition = strrchr (NewFilename, '/'); Position = strrchr (NewFilename, '.'); @@ -615,7 +615,7 @@ CgWriteAmlComment( if ((Op->Asl.ParseOpcode == PARSEOP_DEFINITION_BLOCK) || - !Gbl_CaptureComments) + !AcpiGbl_CaptureComments) { return; } @@ -944,7 +944,7 @@ CvAppendInlineComment ( Size = strlen (ToAdd); Size += strlen (InlineComment); - Str = UtStringCacheCalloc (Size + 1); + Str = UtLocalCacheCalloc (Size + 1); strcpy (Str, InlineComment); strcat (Str, ToAdd); diff --git a/sys/contrib/dev/acpica/source/compiler/cvdisasm.c b/sys/contrib/dev/acpica/source/compiler/cvdisasm.c index 8682f04e51..8150f2a2ac 100644 --- a/sys/contrib/dev/acpica/source/compiler/cvdisasm.c +++ b/sys/contrib/dev/acpica/source/compiler/cvdisasm.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -352,7 +352,7 @@ CvCloseBraceWriteComment( UINT32 Level) { - if (!Gbl_CaptureComments) + if (!AcpiGbl_CaptureComments) { AcpiOsPrintf ("}"); return; @@ -385,7 +385,7 @@ CvCloseParenWriteComment( UINT32 Level) { - if (!Gbl_CaptureComments) + if (!AcpiGbl_CaptureComments) { AcpiOsPrintf (")"); return; diff --git a/sys/contrib/dev/acpica/source/compiler/cvparser.c b/sys/contrib/dev/acpica/source/compiler/cvparser.c index 9941582a56..747b03f513 100644 --- a/sys/contrib/dev/acpica/source/compiler/cvparser.c +++ b/sys/contrib/dev/acpica/source/compiler/cvparser.c @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -254,7 +254,7 @@ CvInitFileTree ( char *ChildFilename = NULL; - if (!Gbl_CaptureComments) + if (!AcpiGbl_CaptureComments) { return; } @@ -714,13 +714,13 @@ CvCaptureCommentsOnly ( UINT8 *Aml = ParserState->Aml; UINT16 Opcode = (UINT16) ACPI_GET8 (Aml); UINT32 Length = 0; - UINT8 CommentOption = (UINT16) ACPI_GET8 (Aml+1); + UINT8 CommentOption; BOOLEAN StdDefBlockFlag = FALSE; ACPI_COMMENT_NODE *CommentNode; ACPI_FILE_NODE *FileNode; - if (!Gbl_CaptureComments || + if (!AcpiGbl_CaptureComments || Opcode != AML_COMMENT_OP) { return; @@ -973,7 +973,7 @@ CvCaptureComments ( const ACPI_OPCODE_INFO *OpInfo; - if (!Gbl_CaptureComments) + if (!AcpiGbl_CaptureComments) { return; } diff --git a/sys/contrib/dev/acpica/source/compiler/dtcompile.c b/sys/contrib/dev/acpica/source/compiler/dtcompile.c index 5344562433..9394414678 100644 --- a/sys/contrib/dev/acpica/source/compiler/dtcompile.c +++ b/sys/contrib/dev/acpica/source/compiler/dtcompile.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -152,7 +152,6 @@ #define _DECLARE_DT_GLOBALS #include "aslcompiler.h" -#include "dtcompiler.h" #define _COMPONENT DT_COMPILER ACPI_MODULE_NAME ("dtcompile") @@ -281,7 +280,6 @@ DtDoCompile ( CleanupAndExit: AcpiUtDeleteCaches (); - DtDeleteCaches (); CmCleanupAndExit (); return (Status); } @@ -412,7 +410,7 @@ DtCompileDataTable ( return (AE_ERROR); } - Gbl_Signature = UtStringCacheCalloc (strlen (Signature) + 1); + Gbl_Signature = UtLocalCacheCalloc (strlen (Signature) + 1); strcpy (Gbl_Signature, Signature); /* @@ -455,7 +453,7 @@ DtCompileDataTable ( DtInsertCompilerIds (*FieldList); Status = DtCompileTable (FieldList, AcpiDmTableInfoHeader, - &Gbl_RootTable, TRUE); + &Gbl_RootTable); if (ACPI_FAILURE (Status)) { return (Status); @@ -494,7 +492,7 @@ DtCompileDataTable ( { Subtable = NULL; Status = DtCompileTable (FieldList, TableData->TableInfo, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -533,7 +531,6 @@ FinishHeader: * PARAMETERS: Field - Current field list pointer * Info - Info table for this ACPI table * RetSubtable - Compile result of table - * Required - If this subtable must exist * * RETURN: Status * @@ -545,8 +542,7 @@ ACPI_STATUS DtCompileTable ( DT_FIELD **Field, ACPI_DMTABLE_INFO *Info, - DT_SUBTABLE **RetSubtable, - BOOLEAN Required) + DT_SUBTABLE **RetSubtable) { DT_FIELD *LocalField; UINT32 Length; @@ -561,10 +557,18 @@ DtCompileTable ( ACPI_STATUS Status = AE_OK; - if (!Field || !*Field) + if (!Field) { return (AE_BAD_PARAMETER); } + if (!*Field) + { + /* + * The field list is empty, this means that we are out of fields to + * parse. In other words, we are at the end of the table. + */ + return (AE_END_OF_TABLE); + } /* Ignore optional subtable if name does not match */ @@ -585,7 +589,7 @@ DtCompileTable ( if (Length > 0) { - String = UtStringCacheCalloc (Length); + String = UtLocalCacheCalloc (Length); Subtable->Buffer = ACPI_CAST_PTR (UINT8, String); } @@ -676,19 +680,19 @@ DtCompileTable ( case ACPI_DMT_GAS: Status = DtCompileTable (Field, AcpiDmTableInfoGas, - &InlineSubtable, TRUE); + &InlineSubtable); break; case ACPI_DMT_HESTNTFY: Status = DtCompileTable (Field, AcpiDmTableInfoHestNotify, - &InlineSubtable, TRUE); + &InlineSubtable); break; case ACPI_DMT_IORTMEM: Status = DtCompileTable (Field, AcpiDmTableInfoIortAcc, - &InlineSubtable, TRUE); + &InlineSubtable); break; default: @@ -777,7 +781,7 @@ DtCompileTwoSubtables ( DT_FIELD **PFieldList = (DT_FIELD **) List; - Status = DtCompileTable (PFieldList, TableInfo1, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, TableInfo1, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -788,7 +792,7 @@ DtCompileTwoSubtables ( while (*PFieldList) { - Status = DtCompileTable (PFieldList, TableInfo2, &Subtable, FALSE); + Status = DtCompileTable (PFieldList, TableInfo2, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -828,7 +832,7 @@ DtCompilePadding ( if (Length > 0) { - String = UtStringCacheCalloc (Length); + String = UtLocalCacheCalloc (Length); Subtable->Buffer = ACPI_CAST_PTR (UINT8, String); } diff --git a/sys/contrib/dev/acpica/source/compiler/dtcompiler.h b/sys/contrib/dev/acpica/source/compiler/dtcompiler.h index 90fad8896f..48d308b42b 100644 --- a/sys/contrib/dev/acpica/source/compiler/dtcompiler.h +++ b/sys/contrib/dev/acpica/source/compiler/dtcompiler.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -154,7 +154,6 @@ #ifndef _DTCOMPILER #define _DTCOMPILER -#include #include "acdisasm.h" @@ -276,8 +275,7 @@ ACPI_STATUS DtCompileTable ( DT_FIELD **Field, ACPI_DMTABLE_INFO *Info, - DT_SUBTABLE **RetSubtable, - BOOLEAN Required); + DT_SUBTABLE **RetSubtable); ACPI_STATUS DtCompileTwoSubtables ( @@ -510,18 +508,6 @@ void DtSetTableLength( void); -DT_SUBTABLE * -UtSubtableCacheCalloc ( - void); - -DT_FIELD * -UtFieldCacheCalloc ( - void); - -void -DtDeleteCaches ( - void); - /* dttable - individual table compilation */ @@ -622,15 +608,19 @@ DtCompileNfit ( void **PFieldList); ACPI_STATUS -DtCompilePmtt ( +DtCompilePcct ( void **PFieldList); ACPI_STATUS -DtCompilePptt ( +DtCompilePdtt ( void **PFieldList); ACPI_STATUS -DtCompilePcct ( +DtCompilePmtt ( + void **PFieldList); + +ACPI_STATUS +DtCompilePptt ( void **PFieldList); ACPI_STATUS @@ -642,6 +632,10 @@ DtCompileS3pt ( DT_FIELD **PFieldList); ACPI_STATUS +DtCompileSdev ( + void **PFieldList); + +ACPI_STATUS DtCompileSlic ( void **PFieldList); @@ -662,6 +656,10 @@ DtCompileTcpa ( void **PFieldList); ACPI_STATUS +DtCompileTpm2 ( + void **PFieldList); + +ACPI_STATUS DtCompileUefi ( void **PFieldList); @@ -724,6 +722,7 @@ extern const unsigned char TemplateMsdm[]; extern const unsigned char TemplateMtmr[]; extern const unsigned char TemplateNfit[]; extern const unsigned char TemplatePcct[]; +extern const unsigned char TemplatePdtt[]; extern const unsigned char TemplatePmtt[]; extern const unsigned char TemplatePptt[]; extern const unsigned char TemplateRasf[]; @@ -731,6 +730,7 @@ extern const unsigned char TemplateRsdt[]; extern const unsigned char TemplateS3pt[]; extern const unsigned char TemplateSbst[]; extern const unsigned char TemplateSdei[]; +extern const unsigned char TemplateSdev[]; extern const unsigned char TemplateSlic[]; extern const unsigned char TemplateSlit[]; extern const unsigned char TemplateSpcr[]; diff --git a/sys/contrib/dev/acpica/source/compiler/dtexpress.c b/sys/contrib/dev/acpica/source/compiler/dtexpress.c index 4e0ac89a82..aa68cf1eee 100644 --- a/sys/contrib/dev/acpica/source/compiler/dtexpress.c +++ b/sys/contrib/dev/acpica/source/compiler/dtexpress.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -150,7 +150,6 @@ *****************************************************************************/ #include "aslcompiler.h" -#include "dtcompiler.h" #include "dtparser.y.h" #define _COMPONENT DT_COMPILER @@ -210,7 +209,7 @@ DtResolveIntegerExpression ( * FUNCTION: DtDoOperator * * PARAMETERS: LeftValue - First 64-bit operand - * Operator - Parse token for the operator (EXPOP_*) + * Operator - Parse token for the operator (OP_EXP_*) * RightValue - Second 64-bit operand * * RETURN: 64-bit result of the requested operation @@ -232,22 +231,22 @@ DtDoOperator ( switch (Operator) { - case EXPOP_ONES_COMPLIMENT: + case OP_EXP_ONES_COMPLIMENT: Result = ~RightValue; break; - case EXPOP_LOGICAL_NOT: + case OP_EXP_LOGICAL_NOT: Result = !RightValue; break; - case EXPOP_MULTIPLY: + case OP_EXP_MULTIPLY: Result = LeftValue * RightValue; break; - case EXPOP_DIVIDE: + case OP_EXP_DIVIDE: if (!RightValue) { @@ -259,7 +258,7 @@ DtDoOperator ( Result = LeftValue / RightValue; break; - case EXPOP_MODULO: + case OP_EXP_MODULO: if (!RightValue) { @@ -271,76 +270,76 @@ DtDoOperator ( Result = LeftValue % RightValue; break; - case EXPOP_ADD: + case OP_EXP_ADD: Result = LeftValue + RightValue; break; - case EXPOP_SUBTRACT: + case OP_EXP_SUBTRACT: Result = LeftValue - RightValue; break; - case EXPOP_SHIFT_RIGHT: + case OP_EXP_SHIFT_RIGHT: Result = LeftValue >> RightValue; break; - case EXPOP_SHIFT_LEFT: + case OP_EXP_SHIFT_LEFT: Result = LeftValue << RightValue; break; - case EXPOP_LESS: + case OP_EXP_LESS: Result = LeftValue < RightValue; break; - case EXPOP_GREATER: + case OP_EXP_GREATER: Result = LeftValue > RightValue; break; - case EXPOP_LESS_EQUAL: + case OP_EXP_LESS_EQUAL: Result = LeftValue <= RightValue; break; - case EXPOP_GREATER_EQUAL: + case OP_EXP_GREATER_EQUAL: Result = LeftValue >= RightValue; break; - case EXPOP_EQUAL: + case OP_EXP_EQUAL: Result = LeftValue == RightValue; break; - case EXPOP_NOT_EQUAL: + case OP_EXP_NOT_EQUAL: Result = LeftValue != RightValue; break; - case EXPOP_AND: + case OP_EXP_AND: Result = LeftValue & RightValue; break; - case EXPOP_XOR: + case OP_EXP_XOR: Result = LeftValue ^ RightValue; break; - case EXPOP_OR: + case OP_EXP_OR: Result = LeftValue | RightValue; break; - case EXPOP_LOGICAL_AND: + case OP_EXP_LOGICAL_AND: Result = LeftValue && RightValue; break; - case EXPOP_LOGICAL_OR: + case OP_EXP_LOGICAL_OR: Result = LeftValue || RightValue; break; diff --git a/sys/contrib/dev/acpica/source/compiler/dtfield.c b/sys/contrib/dev/acpica/source/compiler/dtfield.c index b06877a8f8..50d484c9f4 100644 --- a/sys/contrib/dev/acpica/source/compiler/dtfield.c +++ b/sys/contrib/dev/acpica/source/compiler/dtfield.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -150,7 +150,6 @@ *****************************************************************************/ #include "aslcompiler.h" -#include "dtcompiler.h" #define _COMPONENT DT_COMPILER ACPI_MODULE_NAME ("dtfield") diff --git a/sys/contrib/dev/acpica/source/compiler/dtio.c b/sys/contrib/dev/acpica/source/compiler/dtio.c index 0112999ef5..0ba15b421a 100644 --- a/sys/contrib/dev/acpica/source/compiler/dtio.c +++ b/sys/contrib/dev/acpica/source/compiler/dtio.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -150,7 +150,6 @@ *****************************************************************************/ #include "aslcompiler.h" -#include "dtcompiler.h" #include "acapps.h" #define _COMPONENT DT_COMPILER @@ -239,7 +238,7 @@ DtTrim ( if (!strcmp (String, " ")) { - ReturnString = UtStringCacheCalloc (1); + ReturnString = UtLocalCacheCalloc (1); return (ReturnString); } @@ -287,7 +286,7 @@ DtTrim ( /* Create the trimmed return string */ Length = ACPI_PTR_DIFF (End, Start) + 1; - ReturnString = UtStringCacheCalloc (Length + 1); + ReturnString = UtLocalCacheCalloc (Length + 1); if (strlen (Start)) { strncpy (ReturnString, Start, Length); diff --git a/sys/contrib/dev/acpica/source/compiler/dtparser.l b/sys/contrib/dev/acpica/source/compiler/dtparser.l index e17c5b8a67..fae32dba8a 100644 --- a/sys/contrib/dev/acpica/source/compiler/dtparser.l +++ b/sys/contrib/dev/acpica/source/compiler/dtparser.l @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -171,37 +171,37 @@ NewLine [\n] %% -\( return (EXPOP_PAREN_OPEN); -\) return (EXPOP_PAREN_CLOSE); -\~ return (EXPOP_ONES_COMPLIMENT); -\! return (EXPOP_LOGICAL_NOT); -\* return (EXPOP_MULTIPLY); -\/ return (EXPOP_DIVIDE); -\% return (EXPOP_MODULO); -\+ return (EXPOP_ADD); -\- return (EXPOP_SUBTRACT); -">>" return (EXPOP_SHIFT_RIGHT); -"<<" return (EXPOP_SHIFT_LEFT); -\< return (EXPOP_LESS); -\> return (EXPOP_GREATER); -"<=" return (EXPOP_LESS_EQUAL); -">=" return (EXPOP_GREATER_EQUAL); -"==" return (EXPOP_EQUAL); -"!=" return (EXPOP_NOT_EQUAL); -\& return (EXPOP_AND); -\^ return (EXPOP_XOR); -\| return (EXPOP_OR); -"&&" return (EXPOP_LOGICAL_AND); -"||" return (EXPOP_LOGICAL_OR); -<> return (EXPOP_EOF); /* null end-of-string */ - -{LabelRef} return (EXPOP_LABEL); -{Number} return (EXPOP_NUMBER); -{HexNumber} return (EXPOP_HEX_NUMBER); -{NewLine} return (EXPOP_NEW_LINE); +\( return (OP_EXP_PAREN_OPEN); +\) return (OP_EXP_PAREN_CLOSE); +\~ return (OP_EXP_ONES_COMPLIMENT); +\! return (OP_EXP_LOGICAL_NOT); +\* return (OP_EXP_MULTIPLY); +\/ return (OP_EXP_DIVIDE); +\% return (OP_EXP_MODULO); +\+ return (OP_EXP_ADD); +\- return (OP_EXP_SUBTRACT); +">>" return (OP_EXP_SHIFT_RIGHT); +"<<" return (OP_EXP_SHIFT_LEFT); +\< return (OP_EXP_LESS); +\> return (OP_EXP_GREATER); +"<=" return (OP_EXP_LESS_EQUAL); +">=" return (OP_EXP_GREATER_EQUAL); +"==" return (OP_EXP_EQUAL); +"!=" return (OP_EXP_NOT_EQUAL); +\& return (OP_EXP_AND); +\^ return (OP_EXP_XOR); +\| return (OP_EXP_OR); +"&&" return (OP_EXP_LOGICAL_AND); +"||" return (OP_EXP_LOGICAL_OR); +<> return (OP_EXP_EOF); /* null end-of-string */ + +{LabelRef} return (OP_EXP_LABEL); +{Number} return (OP_EXP_NUMBER); +{HexNumber} return (OP_EXP_HEX_NUMBER); +{NewLine} return (OP_EXP_NEW_LINE); {WhiteSpace} /* Ignore */ -. return (EXPOP_EOF); +. return (OP_EXP_EOF); %% diff --git a/sys/contrib/dev/acpica/source/compiler/dtparser.y b/sys/contrib/dev/acpica/source/compiler/dtparser.y index d5990fe45f..1c44571238 100644 --- a/sys/contrib/dev/acpica/source/compiler/dtparser.y +++ b/sys/contrib/dev/acpica/source/compiler/dtparser.y @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -151,7 +151,6 @@ *****************************************************************************/ #include "aslcompiler.h" -#include "dtcompiler.h" #define _COMPONENT DT_COMPILER ACPI_MODULE_NAME ("dtparser") @@ -194,26 +193,26 @@ UINT64 DtParserResult; /* Expression return value */ %type Expression -%token EXPOP_EOF -%token EXPOP_NEW_LINE -%token EXPOP_NUMBER -%token EXPOP_HEX_NUMBER -%token EXPOP_DECIMAL_NUMBER -%token EXPOP_LABEL -%token EXPOP_PAREN_OPEN -%token EXPOP_PAREN_CLOSE - -%left EXPOP_LOGICAL_OR -%left EXPOP_LOGICAL_AND -%left EXPOP_OR -%left EXPOP_XOR -%left EXPOP_AND -%left EXPOP_EQUAL EXPOP_NOT_EQUAL -%left EXPOP_GREATER EXPOP_LESS EXPOP_GREATER_EQUAL EXPOP_LESS_EQUAL -%left EXPOP_SHIFT_RIGHT EXPOP_SHIFT_LEFT -%left EXPOP_ADD EXPOP_SUBTRACT -%left EXPOP_MULTIPLY EXPOP_DIVIDE EXPOP_MODULO -%right EXPOP_ONES_COMPLIMENT EXPOP_LOGICAL_NOT +%token OP_EXP_EOF +%token OP_EXP_NEW_LINE +%token OP_EXP_NUMBER +%token OP_EXP_HEX_NUMBER +%token OP_EXP_DECIMAL_NUMBER +%token OP_EXP_LABEL +%token OP_EXP_PAREN_OPEN +%token OP_EXP_PAREN_CLOSE + +%left OP_EXP_LOGICAL_OR +%left OP_EXP_LOGICAL_AND +%left OP_EXP_OR +%left OP_EXP_XOR +%left OP_EXP_AND +%left OP_EXP_EQUAL OP_EXP_NOT_EQUAL +%left OP_EXP_GREATER OP_EXP_LESS OP_EXP_GREATER_EQUAL OP_EXP_LESS_EQUAL +%left OP_EXP_SHIFT_RIGHT OP_EXP_SHIFT_LEFT +%left OP_EXP_ADD OP_EXP_SUBTRACT +%left OP_EXP_MULTIPLY OP_EXP_DIVIDE OP_EXP_MODULO +%right OP_EXP_ONES_COMPLIMENT OP_EXP_LOGICAL_NOT %% @@ -234,46 +233,46 @@ UINT64 DtParserResult; /* Expression return value */ * 12) || */ Value - : Expression EXPOP_NEW_LINE { DtParserResult=$1; return 0; } /* End of line (newline) */ - | Expression EXPOP_EOF { DtParserResult=$1; return 0; } /* End of string (0) */ + : Expression OP_EXP_NEW_LINE { DtParserResult=$1; return 0; } /* End of line (newline) */ + | Expression OP_EXP_EOF { DtParserResult=$1; return 0; } /* End of string (0) */ ; Expression /* Unary operators */ - : EXPOP_LOGICAL_NOT Expression { $$ = DtDoOperator ($2, EXPOP_LOGICAL_NOT, $2);} - | EXPOP_ONES_COMPLIMENT Expression { $$ = DtDoOperator ($2, EXPOP_ONES_COMPLIMENT, $2);} + : OP_EXP_LOGICAL_NOT Expression { $$ = DtDoOperator ($2, OP_EXP_LOGICAL_NOT, $2);} + | OP_EXP_ONES_COMPLIMENT Expression { $$ = DtDoOperator ($2, OP_EXP_ONES_COMPLIMENT, $2);} /* Binary operators */ - | Expression EXPOP_MULTIPLY Expression { $$ = DtDoOperator ($1, EXPOP_MULTIPLY, $3);} - | Expression EXPOP_DIVIDE Expression { $$ = DtDoOperator ($1, EXPOP_DIVIDE, $3);} - | Expression EXPOP_MODULO Expression { $$ = DtDoOperator ($1, EXPOP_MODULO, $3);} - | Expression EXPOP_ADD Expression { $$ = DtDoOperator ($1, EXPOP_ADD, $3);} - | Expression EXPOP_SUBTRACT Expression { $$ = DtDoOperator ($1, EXPOP_SUBTRACT, $3);} - | Expression EXPOP_SHIFT_RIGHT Expression { $$ = DtDoOperator ($1, EXPOP_SHIFT_RIGHT, $3);} - | Expression EXPOP_SHIFT_LEFT Expression { $$ = DtDoOperator ($1, EXPOP_SHIFT_LEFT, $3);} - | Expression EXPOP_GREATER Expression { $$ = DtDoOperator ($1, EXPOP_GREATER, $3);} - | Expression EXPOP_LESS Expression { $$ = DtDoOperator ($1, EXPOP_LESS, $3);} - | Expression EXPOP_GREATER_EQUAL Expression { $$ = DtDoOperator ($1, EXPOP_GREATER_EQUAL, $3);} - | Expression EXPOP_LESS_EQUAL Expression { $$ = DtDoOperator ($1, EXPOP_LESS_EQUAL, $3);} - | Expression EXPOP_EQUAL Expression { $$ = DtDoOperator ($1, EXPOP_EQUAL, $3);} - | Expression EXPOP_NOT_EQUAL Expression { $$ = DtDoOperator ($1, EXPOP_NOT_EQUAL, $3);} - | Expression EXPOP_AND Expression { $$ = DtDoOperator ($1, EXPOP_AND, $3);} - | Expression EXPOP_XOR Expression { $$ = DtDoOperator ($1, EXPOP_XOR, $3);} - | Expression EXPOP_OR Expression { $$ = DtDoOperator ($1, EXPOP_OR, $3);} - | Expression EXPOP_LOGICAL_AND Expression { $$ = DtDoOperator ($1, EXPOP_LOGICAL_AND, $3);} - | Expression EXPOP_LOGICAL_OR Expression { $$ = DtDoOperator ($1, EXPOP_LOGICAL_OR, $3);} + | Expression OP_EXP_MULTIPLY Expression { $$ = DtDoOperator ($1, OP_EXP_MULTIPLY, $3);} + | Expression OP_EXP_DIVIDE Expression { $$ = DtDoOperator ($1, OP_EXP_DIVIDE, $3);} + | Expression OP_EXP_MODULO Expression { $$ = DtDoOperator ($1, OP_EXP_MODULO, $3);} + | Expression OP_EXP_ADD Expression { $$ = DtDoOperator ($1, OP_EXP_ADD, $3);} + | Expression OP_EXP_SUBTRACT Expression { $$ = DtDoOperator ($1, OP_EXP_SUBTRACT, $3);} + | Expression OP_EXP_SHIFT_RIGHT Expression { $$ = DtDoOperator ($1, OP_EXP_SHIFT_RIGHT, $3);} + | Expression OP_EXP_SHIFT_LEFT Expression { $$ = DtDoOperator ($1, OP_EXP_SHIFT_LEFT, $3);} + | Expression OP_EXP_GREATER Expression { $$ = DtDoOperator ($1, OP_EXP_GREATER, $3);} + | Expression OP_EXP_LESS Expression { $$ = DtDoOperator ($1, OP_EXP_LESS, $3);} + | Expression OP_EXP_GREATER_EQUAL Expression { $$ = DtDoOperator ($1, OP_EXP_GREATER_EQUAL, $3);} + | Expression OP_EXP_LESS_EQUAL Expression { $$ = DtDoOperator ($1, OP_EXP_LESS_EQUAL, $3);} + | Expression OP_EXP_EQUAL Expression { $$ = DtDoOperator ($1, OP_EXP_EQUAL, $3);} + | Expression OP_EXP_NOT_EQUAL Expression { $$ = DtDoOperator ($1, OP_EXP_NOT_EQUAL, $3);} + | Expression OP_EXP_AND Expression { $$ = DtDoOperator ($1, OP_EXP_AND, $3);} + | Expression OP_EXP_XOR Expression { $$ = DtDoOperator ($1, OP_EXP_XOR, $3);} + | Expression OP_EXP_OR Expression { $$ = DtDoOperator ($1, OP_EXP_OR, $3);} + | Expression OP_EXP_LOGICAL_AND Expression { $$ = DtDoOperator ($1, OP_EXP_LOGICAL_AND, $3);} + | Expression OP_EXP_LOGICAL_OR Expression { $$ = DtDoOperator ($1, OP_EXP_LOGICAL_OR, $3);} /* Parentheses: '(' Expression ')' */ - | EXPOP_PAREN_OPEN Expression - EXPOP_PAREN_CLOSE { $$ = $2;} + | OP_EXP_PAREN_OPEN Expression + OP_EXP_PAREN_CLOSE { $$ = $2;} /* Label references (prefixed with $) */ - | EXPOP_LABEL { $$ = DtResolveLabel (DtParsertext);} + | OP_EXP_LABEL { $$ = DtResolveLabel (DtParsertext);} /* * All constants for the data table compiler are in hex, whether a (optional) 0x @@ -284,15 +283,15 @@ Expression /* Non-prefixed hex number */ - | EXPOP_NUMBER { $$ = DtDoConstant (DtParsertext);} + | OP_EXP_NUMBER { $$ = DtDoConstant (DtParsertext);} /* Standard hex number (0x1234) */ - | EXPOP_HEX_NUMBER { $$ = DtDoConstant (DtParsertext);} + | OP_EXP_HEX_NUMBER { $$ = DtDoConstant (DtParsertext);} /* Possible TBD: Decimal number with prefix (0d1234) - Not supported this time */ - | EXPOP_DECIMAL_NUMBER { $$ = DtDoConstant (DtParsertext);} + | OP_EXP_DECIMAL_NUMBER { $$ = DtDoConstant (DtParsertext);} ; %% @@ -301,7 +300,7 @@ Expression /* * Local support functions, including parser entry point */ -#define PR_FIRST_PARSE_OPCODE EXPOP_EOF +#define PR_FIRST_PARSE_OPCODE OP_EXP_EOF #define PR_YYTNAME_START 3 @@ -330,7 +329,7 @@ DtParsererror ( * * FUNCTION: DtGetOpName * - * PARAMETERS: ParseOpcode - Parser token (EXPOP_*) + * PARAMETERS: ParseOpcode - Parser token (OP_EXP_*) * * RETURN: Pointer to the opcode name * @@ -345,7 +344,7 @@ DtGetOpName ( #ifdef ASL_YYTNAME_START /* * First entries (PR_YYTNAME_START) in yytname are special reserved names. - * Ignore first 6 characters of name (EXPOP_) + * Ignore first 6 characters of name (OP_EXP_) */ return ((char *) yytname [(ParseOpcode - PR_FIRST_PARSE_OPCODE) + PR_YYTNAME_START] + 6); diff --git a/sys/contrib/dev/acpica/source/compiler/dtsubtable.c b/sys/contrib/dev/acpica/source/compiler/dtsubtable.c index 44e36492ff..f2730c5132 100644 --- a/sys/contrib/dev/acpica/source/compiler/dtsubtable.c +++ b/sys/contrib/dev/acpica/source/compiler/dtsubtable.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -150,7 +150,6 @@ *****************************************************************************/ #include "aslcompiler.h" -#include "dtcompiler.h" #define _COMPONENT DT_COMPILER ACPI_MODULE_NAME ("dtsubtable") @@ -186,7 +185,7 @@ DtCreateSubtable ( /* Create a new buffer for the subtable data */ - String = UtStringCacheCalloc (Length); + String = UtLocalCacheCalloc (Length); Subtable->Buffer = ACPI_CAST_PTR (UINT8, String); memcpy (Subtable->Buffer, Buffer, Length); diff --git a/sys/contrib/dev/acpica/source/compiler/dttable.c b/sys/contrib/dev/acpica/source/compiler/dttable.c index 08b862d1a0..44efbee473 100644 --- a/sys/contrib/dev/acpica/source/compiler/dttable.c +++ b/sys/contrib/dev/acpica/source/compiler/dttable.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -152,7 +152,6 @@ /* Compile routines for the basic ACPI tables */ #include "aslcompiler.h" -#include "dtcompiler.h" #define _COMPONENT DT_COMPILER ACPI_MODULE_NAME ("dttable") @@ -183,7 +182,7 @@ DtCompileRsdp ( /* Compile the "common" RSDP (ACPI 1.0) */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoRsdp1, - &Gbl_RootTable, TRUE); + &Gbl_RootTable); if (ACPI_FAILURE (Status)) { return (Status); @@ -197,7 +196,7 @@ DtCompileRsdp ( /* Compile the "extended" part of the RSDP as a subtable */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoRsdp2, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -241,7 +240,7 @@ DtCompileFadt ( Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt1, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -256,7 +255,7 @@ DtCompileFadt ( if (Revision == 2) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt2, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -267,7 +266,7 @@ DtCompileFadt ( else if (Revision >= 2) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt3, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -278,7 +277,7 @@ DtCompileFadt ( if (Revision >= 5) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt5, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -290,7 +289,7 @@ DtCompileFadt ( if (Revision >= 6) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt6, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -327,7 +326,7 @@ DtCompileFacs ( Status = DtCompileTable (PFieldList, AcpiDmTableInfoFacs, - &Gbl_RootTable, TRUE); + &Gbl_RootTable); if (ACPI_FAILURE (Status)) { return (Status); diff --git a/sys/contrib/dev/acpica/source/compiler/dttable1.c b/sys/contrib/dev/acpica/source/compiler/dttable1.c index bdf0419cf9..084adc3e42 100644 --- a/sys/contrib/dev/acpica/source/compiler/dttable1.c +++ b/sys/contrib/dev/acpica/source/compiler/dttable1.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -152,7 +152,6 @@ /* Compile all complex data tables, signatures starting with A-I */ #include "aslcompiler.h" -#include "dtcompiler.h" #define _COMPONENT DT_COMPILER ACPI_MODULE_NAME ("dttable1") @@ -203,7 +202,7 @@ DtCompileAsf ( { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoAsfHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -248,7 +247,7 @@ DtCompileAsf ( return (AE_ERROR); } - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -308,7 +307,7 @@ DtCompileAsf ( while (DataCount > 0) { Status = DtCompileTable (PFieldList, DataInfoTable, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -324,7 +323,7 @@ DtCompileAsf ( for (i = 0; i < DataCount; i++) { Status = DtCompileTable (PFieldList, DataInfoTable, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -400,7 +399,7 @@ DtCompileCsrt ( /* Resource group subtable */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoCsrt0, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -425,7 +424,7 @@ DtCompileCsrt ( /* Shared info subtable (One per resource group) */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoCsrt1, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -439,7 +438,7 @@ DtCompileCsrt ( { Status = DtCompileTable (PFieldList, AcpiDmTableInfoCsrt2, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -452,7 +451,7 @@ DtCompileCsrt ( if (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoCsrt2a, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -505,7 +504,7 @@ DtCompileDbg2 ( /* Main table */ - Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -530,7 +529,7 @@ DtCompileDbg2 ( /* Subtable: Debug Device Information */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Device, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -551,7 +550,7 @@ DtCompileDbg2 ( for (i = 0; *PFieldList && (i < DeviceInfo->RegisterCount); i++) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Addr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -567,7 +566,7 @@ DtCompileDbg2 ( for (i = 0; *PFieldList && (i < DeviceInfo->RegisterCount); i++) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Size, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -581,7 +580,7 @@ DtCompileDbg2 ( DeviceInfo->NamepathOffset = CurrentOffset; Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Name, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -596,8 +595,14 @@ DtCompileDbg2 ( /* OemData - Variable-length data (Optional, size = OemDataLength) */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2OemData, - &Subtable, TRUE); - if (ACPI_FAILURE (Status)) + &Subtable); + if (Status == AE_END_OF_TABLE) + { + /* optional field was not found and we're at the end of the file */ + + goto subtableDone; + } + else if (ACPI_FAILURE (Status)) { return (Status); } @@ -616,7 +621,7 @@ DtCompileDbg2 ( DtInsertSubtable (ParentTable, Subtable); } - +subtableDone: SubtableCount--; DtPopSubtable (); /* Get next Device Information subtable */ } @@ -654,7 +659,7 @@ DtCompileDmar ( UINT32 PciPathLength; - Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmar, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmar, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -670,7 +675,7 @@ DtCompileDmar ( SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmarHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -717,7 +722,7 @@ DtCompileDmar ( /* DMAR Subtable */ - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -744,7 +749,7 @@ DtCompileDmar ( while (DeviceScopeLength) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmarScope, - &Subtable, FALSE); + &Subtable); if (Status == AE_NOT_FOUND) { break; @@ -762,7 +767,7 @@ DtCompileDmar ( while (PciPathLength) { Status = DtCompileTable (PFieldList, TableInfoDmarPciPath, - &Subtable, FALSE); + &Subtable); if (Status == AE_NOT_FOUND) { DtPopSubtable (); @@ -818,7 +823,7 @@ DtCompileDrtm ( /* Compile DRTM header */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoDrtm, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -836,7 +841,7 @@ DtCompileDrtm ( /* Compile VTL */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoDrtm0, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -852,7 +857,7 @@ DtCompileDrtm ( while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoDrtm0a, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -872,7 +877,7 @@ DtCompileDrtm ( /* Compile RL */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoDrtm1, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -888,7 +893,7 @@ DtCompileDrtm ( while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoDrtm1a, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -910,7 +915,7 @@ DtCompileDrtm ( /* Compile DPS */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoDrtm2, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1000,7 +1005,7 @@ DtCompileGtdt ( Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdt, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1013,7 +1018,7 @@ DtCompileGtdt ( { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdtHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1043,7 +1048,7 @@ DtCompileGtdt ( return (AE_ERROR); } - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1069,7 +1074,7 @@ DtCompileGtdt ( while (GtCount) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdt0a, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1123,7 +1128,7 @@ DtCompileFpdt ( { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoFpdtHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1154,7 +1159,7 @@ DtCompileFpdt ( break; } - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1196,7 +1201,7 @@ DtCompileHest ( Status = DtCompileTable (PFieldList, AcpiDmTableInfoHest, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1267,7 +1272,7 @@ DtCompileHest ( return (AE_ERROR); } - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1307,7 +1312,7 @@ DtCompileHest ( while (BankCount) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoHestBank, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1357,7 +1362,7 @@ DtCompileHmat ( ParentTable = DtPeekSubtable (); Status = DtCompileTable (PFieldList, AcpiDmTableInfoHmat, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1370,7 +1375,7 @@ DtCompileHmat ( SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoHmatHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1405,7 +1410,7 @@ DtCompileHmat ( return (AE_ERROR); } - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1428,7 +1433,7 @@ DtCompileHmat ( while (*PFieldList) { Status = DtCompileTable (PFieldList, - AcpiDmTableInfoHmat1a, &Subtable, TRUE); + AcpiDmTableInfoHmat1a, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1449,7 +1454,7 @@ DtCompileHmat ( while (*PFieldList) { Status = DtCompileTable (PFieldList, - AcpiDmTableInfoHmat1b, &Subtable, TRUE); + AcpiDmTableInfoHmat1b, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1474,7 +1479,7 @@ DtCompileHmat ( while (*PFieldList) { Status = DtCompileTable (PFieldList, - AcpiDmTableInfoHmat1c, &Subtable, TRUE); + AcpiDmTableInfoHmat1c, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1508,7 +1513,7 @@ DtCompileHmat ( while (*PFieldList) { Status = DtCompileTable (PFieldList, - AcpiDmTableInfoHmat2a, &Subtable, TRUE); + AcpiDmTableInfoHmat2a, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1571,7 +1576,7 @@ DtCompileIort ( ParentTable = DtPeekSubtable (); Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1593,7 +1598,7 @@ DtCompileIort ( */ Iort->NodeOffset = sizeof (ACPI_TABLE_IORT); Status = DtCompileTable (PFieldList, AcpiDmTableInfoIortPad, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1619,7 +1624,7 @@ DtCompileIort ( { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoIortHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1637,7 +1642,7 @@ DtCompileIort ( case ACPI_IORT_NODE_ITS_GROUP: Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort0, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1651,7 +1656,7 @@ DtCompileIort ( while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort0a, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1672,7 +1677,7 @@ DtCompileIort ( case ACPI_IORT_NODE_NAMED_COMPONENT: Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort1, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1687,7 +1692,7 @@ DtCompileIort ( * for filling this field. */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort1a, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1724,7 +1729,7 @@ DtCompileIort ( case ACPI_IORT_NODE_PCI_ROOT_COMPLEX: Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort2, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1737,7 +1742,7 @@ DtCompileIort ( case ACPI_IORT_NODE_SMMU: Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1751,7 +1756,7 @@ DtCompileIort ( IortSmmu->GlobalInterruptOffset = NodeLength; Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3a, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1767,7 +1772,7 @@ DtCompileIort ( while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3b, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1792,7 +1797,7 @@ DtCompileIort ( while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3c, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1814,7 +1819,7 @@ DtCompileIort ( case ACPI_IORT_NODE_SMMU_V3: Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort4, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1837,7 +1842,7 @@ DtCompileIort ( while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoIortMap, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1900,7 +1905,7 @@ DtCompileIvrs ( Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrs, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1913,7 +1918,7 @@ DtCompileIvrs ( { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrsHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1945,7 +1950,7 @@ DtCompileIvrs ( return (AE_ERROR); } - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -2007,7 +2012,7 @@ DtCompileIvrs ( } Status = DtCompileTable (PFieldList, InfoTable, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); diff --git a/sys/contrib/dev/acpica/source/compiler/dttable2.c b/sys/contrib/dev/acpica/source/compiler/dttable2.c index 356a7d0d19..785bc7a113 100644 --- a/sys/contrib/dev/acpica/source/compiler/dttable2.c +++ b/sys/contrib/dev/acpica/source/compiler/dttable2.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -152,7 +152,6 @@ /* Compile all complex data tables, signatures starting with L-Z */ #include "aslcompiler.h" -#include "dtcompiler.h" #define _COMPONENT DT_COMPILER ACPI_MODULE_NAME ("dttable2") @@ -192,7 +191,7 @@ DtCompileLpit ( /* LPIT Subtable header */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoLpitHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -219,7 +218,7 @@ DtCompileLpit ( /* LPIT Subtable */ - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -260,7 +259,7 @@ DtCompileMadt ( Status = DtCompileTable (PFieldList, AcpiDmTableInfoMadt, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -273,7 +272,7 @@ DtCompileMadt ( { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoMadtHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -373,7 +372,7 @@ DtCompileMadt ( return (AE_ERROR); } - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -443,7 +442,7 @@ DtCompileMpst ( /* Main table */ - Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -461,7 +460,7 @@ DtCompileMpst ( /* Subtable: Memory Power Node(s) */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst0, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -482,7 +481,7 @@ DtCompileMpst ( while (*PFieldList && PowerStateCount) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst0A, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -497,7 +496,7 @@ DtCompileMpst ( while (*PFieldList && ComponentCount) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst0B, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -515,7 +514,7 @@ DtCompileMpst ( DtPopSubtable (); - Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst1, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst1, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -535,7 +534,7 @@ DtCompileMpst ( while (*PFieldList && SubtableCount) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst2, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -631,7 +630,7 @@ DtCompileNfit ( /* Main table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoNfit, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -647,7 +646,7 @@ DtCompileNfit ( { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoNfitHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -698,13 +697,18 @@ DtCompileNfit ( InfoTable = AcpiDmTableInfoNfit6; break; + case ACPI_NFIT_TYPE_CAPABILITIES: + + InfoTable = AcpiDmTableInfoNfit7; + break; + default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "NFIT"); return (AE_ERROR); } - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -723,7 +727,7 @@ DtCompileNfit ( while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoNfit2a, - &Subtable, FALSE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -741,7 +745,6 @@ DtCompileNfit ( } Interleave->LineCount = Count; - DtPopSubtable (); break; case ACPI_NFIT_TYPE_SMBIOS: @@ -749,7 +752,7 @@ DtCompileNfit ( if (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoNfit3a, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -769,7 +772,7 @@ DtCompileNfit ( while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoNfit6a, - &Subtable, FALSE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -787,7 +790,6 @@ DtCompileNfit ( } Hint->HintCount = (UINT16) Count; - DtPopSubtable (); break; default: @@ -827,7 +829,7 @@ DtCompilePcct ( /* Main table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoPcct, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -842,7 +844,7 @@ DtCompilePcct ( { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoPcctHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -887,7 +889,7 @@ DtCompilePcct ( return (AE_ERROR); } - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -904,6 +906,66 @@ DtCompilePcct ( /****************************************************************************** * + * FUNCTION: DtCompilePdtt + * + * PARAMETERS: List - Current field list pointer + * + * RETURN: Status + * + * DESCRIPTION: Compile PDTT. + * + *****************************************************************************/ + +ACPI_STATUS +DtCompilePdtt ( + void **List) +{ + ACPI_STATUS Status; + DT_SUBTABLE *Subtable; + DT_SUBTABLE *ParentTable; + DT_FIELD **PFieldList = (DT_FIELD **) List; + ACPI_TABLE_PDTT *PdttHeader; + UINT32 Count = 0; + + + /* Main table */ + + Status = DtCompileTable (PFieldList, AcpiDmTableInfoPdtt, &Subtable); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + + PdttHeader = ACPI_CAST_PTR (ACPI_TABLE_PDTT, ParentTable->Buffer); + PdttHeader->ArrayOffset = sizeof (ACPI_TABLE_PDTT); + + /* There is only one type of subtable at this time, no need to decode */ + + while (*PFieldList) + { + /* List of subchannel IDs, each 2 bytes */ + + Status = DtCompileTable (PFieldList, AcpiDmTableInfoPdtt0, + &Subtable); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + DtInsertSubtable (ParentTable, Subtable); + Count++; + } + + PdttHeader->TriggerCount = (UINT8) Count; + return (AE_OK); +} + + +/****************************************************************************** + * * FUNCTION: DtCompilePmtt * * PARAMETERS: List - Current field list pointer @@ -931,7 +993,7 @@ DtCompilePmtt ( /* Main table */ - Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -945,7 +1007,7 @@ DtCompilePmtt ( { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmttHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -977,7 +1039,7 @@ DtCompilePmtt ( /* Subtable: Socket Structure */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt0, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -992,7 +1054,7 @@ DtCompilePmtt ( /* Subtable: Memory Controller Structure */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt1, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1008,7 +1070,7 @@ DtCompilePmtt ( while (DomainCount) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt1a, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1024,7 +1086,7 @@ DtCompilePmtt ( /* Subtable: Physical Component Structure */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt2, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1079,7 +1141,7 @@ DtCompilePptt ( /* Compile PPTT subtable header */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoPpttHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1113,7 +1175,7 @@ DtCompilePptt ( /* Compile PPTT subtable body */ - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1137,7 +1199,7 @@ DtCompilePptt ( while (*PFieldList) { Status = DtCompileTable (PFieldList, - AcpiDmTableInfoPptt0a, &Subtable, TRUE); + AcpiDmTableInfoPptt0a, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1226,7 +1288,7 @@ DtCompileS3pt ( Status = DtCompileTable (PFieldList, AcpiDmTableInfoS3pt, - &Gbl_RootTable, TRUE); + &Gbl_RootTable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1238,7 +1300,7 @@ DtCompileS3pt ( { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoS3ptHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1268,7 +1330,7 @@ DtCompileS3pt ( return (AE_ERROR); } - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1285,6 +1347,219 @@ DtCompileS3pt ( /****************************************************************************** * + * FUNCTION: DtCompileSdev + * + * PARAMETERS: List - Current field list pointer + * + * RETURN: Status + * + * DESCRIPTION: Compile SDEV. + * + *****************************************************************************/ + +ACPI_STATUS +DtCompileSdev ( + void **List) +{ + ACPI_STATUS Status; + ACPI_SDEV_HEADER *SdevHeader; + DT_SUBTABLE *Subtable; + DT_SUBTABLE *ParentTable; + ACPI_DMTABLE_INFO *InfoTable; + DT_FIELD **PFieldList = (DT_FIELD **) List; + DT_FIELD *SubtableStart; + ACPI_SDEV_PCIE *Pcie = NULL; + ACPI_SDEV_NAMESPACE *Namesp = NULL; + UINT32 EntryCount; + + + /* Subtables */ + + while (*PFieldList) + { + /* Compile common SDEV subtable header */ + + SubtableStart = *PFieldList; + Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdevHdr, + &Subtable); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + DtPushSubtable (Subtable); + + SdevHeader = ACPI_CAST_PTR (ACPI_SDEV_HEADER, Subtable->Buffer); + SdevHeader->Length = (UINT8)(sizeof (ACPI_SDEV_HEADER)); + + switch (SdevHeader->Type) + { + case ACPI_SDEV_TYPE_NAMESPACE_DEVICE: + + InfoTable = AcpiDmTableInfoSdev0; + Namesp = ACPI_CAST_PTR (ACPI_SDEV_NAMESPACE, Subtable->Buffer); + break; + + case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE: + + InfoTable = AcpiDmTableInfoSdev1; + Pcie = ACPI_CAST_PTR (ACPI_SDEV_PCIE, Subtable->Buffer); + break; + + default: + + DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "SDEV"); + return (AE_ERROR); + } + + /* Compile SDEV subtable body */ + + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + + /* Optional data fields are appended to the main subtable body */ + + switch (SdevHeader->Type) + { + case ACPI_SDEV_TYPE_NAMESPACE_DEVICE: + + /* Append DeviceId namespace string */ + + Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev0a, + &Subtable); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + if (!Subtable) + { + break; + } + + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + + Namesp->DeviceIdOffset = sizeof (ACPI_SDEV_NAMESPACE); + Namesp->DeviceIdLength = (UINT16) Subtable->Length; + + /* Append Vendor data */ + + Namesp->VendorDataLength = 0; + Namesp->VendorDataOffset = 0; + + if (*PFieldList) + { + Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev1b, + &Subtable); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + if (Subtable) + { + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + + Namesp->VendorDataOffset = + Namesp->DeviceIdOffset + Namesp->DeviceIdLength; + Namesp->VendorDataLength = + (UINT16) Subtable->Length; + } + } + + /* Final size of entire namespace structure */ + + SdevHeader->Length = (UINT16) (sizeof (ACPI_SDEV_NAMESPACE) + + Subtable->Length + Namesp->DeviceIdLength); + break; + + case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE: + + /* Append the PCIe path info first */ + + EntryCount = 0; + while (*PFieldList && !strcmp ((*PFieldList)->Name, "Device")) + { + Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev1a, + &Subtable); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + if (!Subtable) + { + DtPopSubtable (); + break; + } + + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + EntryCount++; + } + + /* Path offset will point immediately after the main subtable */ + + Pcie->PathOffset = sizeof (ACPI_SDEV_PCIE); + Pcie->PathLength = (UINT16) + (EntryCount * sizeof (ACPI_SDEV_PCIE_PATH)); + + /* Append the Vendor Data last */ + + Pcie->VendorDataLength = 0; + Pcie->VendorDataOffset = 0; + + if (*PFieldList) + { + Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev1b, + &Subtable); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + if (Subtable) + { + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + + Pcie->VendorDataOffset = + Pcie->PathOffset + Pcie->PathLength; + Pcie->VendorDataLength = (UINT16) + Subtable->Length; + } + } + + SdevHeader->Length = + sizeof (ACPI_SDEV_PCIE) + + Pcie->PathLength + Pcie->VendorDataLength; + break; + + default: + + DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "SDEV"); + return (AE_ERROR); + } + + DtPopSubtable (); + } + + return (AE_OK); +} + + +/****************************************************************************** + * * FUNCTION: DtCompileSlic * * PARAMETERS: List - Current field list pointer @@ -1308,7 +1583,7 @@ DtCompileSlic ( while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoSlic, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1350,7 +1625,7 @@ DtCompileSlit ( Status = DtCompileTable (PFieldList, AcpiDmTableInfoSlit, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1406,7 +1681,7 @@ DtCompileSrat ( Status = DtCompileTable (PFieldList, AcpiDmTableInfoSrat, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1419,7 +1694,7 @@ DtCompileSrat ( { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoSratHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1464,7 +1739,7 @@ DtCompileSrat ( return (AE_ERROR); } - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1504,7 +1779,7 @@ DtCompileStao ( /* Compile the main table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoStao, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1518,7 +1793,7 @@ DtCompileStao ( while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoStaoStr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1558,7 +1833,7 @@ DtCompileTcpa ( /* Compile the main table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoTcpaHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1578,13 +1853,13 @@ DtCompileTcpa ( case ACPI_TCPA_CLIENT_TABLE: Status = DtCompileTable (PFieldList, AcpiDmTableInfoTcpaClient, - &Subtable, TRUE); + &Subtable); break; case ACPI_TCPA_SERVER_TABLE: Status = DtCompileTable (PFieldList, AcpiDmTableInfoTcpaServer, - &Subtable, TRUE); + &Subtable); break; default: @@ -1603,6 +1878,109 @@ DtCompileTcpa ( /****************************************************************************** * + * FUNCTION: DtCompileTpm2 + * + * PARAMETERS: PFieldList - Current field list pointer + * + * RETURN: Status + * + * DESCRIPTION: Compile TPM2. + * + *****************************************************************************/ + +ACPI_STATUS +DtCompileTpm2 ( + void **List) +{ + DT_FIELD **PFieldList = (DT_FIELD **) List; + DT_SUBTABLE *Subtable; + ACPI_TABLE_TPM2 *Tpm2Header; + DT_SUBTABLE *ParentTable; + ACPI_STATUS Status = AE_OK; + + + /* Compile the main table */ + + Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm2, + &Subtable); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + + Tpm2Header = ACPI_CAST_PTR (ACPI_TABLE_TPM2, ParentTable->Buffer); + + /* Method parameters */ + /* Optional: Log area minimum length */ + /* Optional: Log area start address */ + /* TBD: Optional fields above not fully implemented (not optional at this time) */ + + Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm2a, + &Subtable); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + + + /* Subtable type depends on the StartMethod */ + + switch (Tpm2Header->StartMethod) + { + case ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC: + + /* Subtable specific to to ARM_SMC */ + + Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm211, + &Subtable); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + break; + + case ACPI_TPM2_START_METHOD: + case ACPI_TPM2_MEMORY_MAPPED: + case ACPI_TPM2_COMMAND_BUFFER: + case ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD: + break; + + case ACPI_TPM2_RESERVED1: + case ACPI_TPM2_RESERVED3: + case ACPI_TPM2_RESERVED4: + case ACPI_TPM2_RESERVED5: + case ACPI_TPM2_RESERVED9: + case ACPI_TPM2_RESERVED10: + + AcpiOsPrintf ("\n**** Reserved TPM2 Start Method type 0x%X\n", + Tpm2Header->StartMethod); + Status = AE_ERROR; + break; + + case ACPI_TPM2_NOT_ALLOWED: + default: + + AcpiOsPrintf ("\n**** Unknown TPM2 Start Method type 0x%X\n", + Tpm2Header->StartMethod); + Status = AE_ERROR; + break; + } + + return (Status); +} + + +/****************************************************************************** + * * FUNCTION: DtGetGenericTableInfo * * PARAMETERS: Name - Generic type name @@ -1675,7 +2053,7 @@ DtCompileUefi ( /* Compile the predefined portion of the UEFI table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoUefi, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1774,7 +2152,7 @@ DtCompileWpbt ( /* Compile the main table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1786,7 +2164,7 @@ DtCompileWpbt ( /* Compile the argument list subtable */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt0, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1906,7 +2284,7 @@ DtCompileGeneric ( } Status = DtCompileTable (PFieldList, Info, - &Subtable, TRUE); + &Subtable); if (ACPI_SUCCESS (Status)) { DtInsertSubtable (ParentTable, Subtable); diff --git a/sys/contrib/dev/acpica/source/compiler/dttemplate.c b/sys/contrib/dev/acpica/source/compiler/dttemplate.c index 55c6e9d65d..89a145aada 100644 --- a/sys/contrib/dev/acpica/source/compiler/dttemplate.c +++ b/sys/contrib/dev/acpica/source/compiler/dttemplate.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -151,7 +151,6 @@ #include "aslcompiler.h" #include "acapps.h" -#include "dtcompiler.h" #include "dttemplate.h" /* Contains the hex ACPI table templates */ #define _COMPONENT DT_COMPILER @@ -315,7 +314,7 @@ Exit: /* Shutdown ACPICA subsystem */ (void) AcpiTerminate (); - CmDeleteCaches (); + UtDeleteLocalCaches (); return (Status); } diff --git a/sys/contrib/dev/acpica/source/compiler/dttemplate.h b/sys/contrib/dev/acpica/source/compiler/dttemplate.h index 8d27359d9a..39e57ccf09 100644 --- a/sys/contrib/dev/acpica/source/compiler/dttemplate.h +++ b/sys/contrib/dev/acpica/source/compiler/dttemplate.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -696,53 +696,56 @@ const unsigned char TemplateHpet[] = const unsigned char TemplateIort[] = { - 0x49,0x4F,0x52,0x54,0x74,0x01,0x00,0x00, /* 00000000 "IORTt..." */ - 0x00,0xD2,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ - 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ + 0x49,0x4F,0x52,0x54,0x90,0x01,0x00,0x00, /* 00000000 "IORT...." */ + 0x00,0x5F,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "._INTEL " */ + 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ 0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ - 0x19,0x01,0x17,0x20,0x05,0x00,0x00,0x00, /* 00000020 "... ...." */ + 0x31,0x08,0x17,0x20,0x05,0x00,0x00,0x00, /* 00000020 "1.. ...." */ 0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "4......." */ 0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00, /* 00000030 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000040 "........" */ - 0x00,0x00,0x00,0x00,0x01,0x44,0x00,0x00, /* 00000048 ".....D.." */ + 0x00,0x00,0x00,0x00,0x01,0x58,0x00,0x00, /* 00000048 ".....X.." */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000050 "........" */ - 0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "0......." */ + 0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "D......." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000060 "........" */ 0x00,0x5C,0x5F,0x53,0x42,0x2E,0x50,0x43, /* 00000068 ".\_SB.PC" */ 0x49,0x30,0x2E,0x44,0x45,0x56,0x30,0x00, /* 00000070 "I0.DEV0." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000078 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000088 "........" */ - 0x02,0x34,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000090 ".4......" */ - 0x01,0x00,0x00,0x00,0x20,0x00,0x00,0x00, /* 00000098 ".... ..." */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000A0 "........" */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000A8 "........" */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B0 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000090 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000098 "........" */ + 0x00,0x00,0x00,0x00,0x02,0x34,0x00,0x00, /* 000000A0 ".....4.." */ + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000000A8 "........" */ + 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B0 " ......." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B8 "........" */ - 0x00,0x00,0x00,0x00,0x03,0x60,0x00,0x00, /* 000000C0 ".....`.." */ - 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000000C8 "........" */ - 0x4C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000D0 "L......." */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000D8 "........" */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000E0 "........" */ - 0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00, /* 000000E8 "....<..." */ - 0x00,0x00,0x00,0x00,0x4C,0x00,0x00,0x00, /* 000000F0 "....L..." */ - 0x00,0x00,0x00,0x00,0x4C,0x00,0x00,0x00, /* 000000F8 "....L..." */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000100 "........" */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000108 "........" */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000110 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000C0 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000C8 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000D0 "........" */ + 0x03,0x60,0x00,0x01,0x00,0x00,0x00,0x00, /* 000000D8 ".`......" */ + 0x01,0x00,0x00,0x00,0x4C,0x00,0x00,0x00, /* 000000E0 "....L..." */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000E8 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000F0 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000F8 "........" */ + 0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000100 "<......." */ + 0x4C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000108 "L......." */ + 0x4C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000110 "L......." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000118 "........" */ - 0x00,0x00,0x00,0x00,0x04,0x50,0x00,0x00, /* 00000120 ".....P.." */ - 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000128 "........" */ - 0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000130 "<......." */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000138 "........" */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000140 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000120 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000128 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000130 "........" */ + 0x04,0x58,0x00,0x01,0x00,0x00,0x00,0x00, /* 00000138 ".X......" */ + 0x01,0x00,0x00,0x00,0x44,0x00,0x00,0x00, /* 00000140 "....D..." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000148 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000150 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000158 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000160 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000168 "........" */ - 0x00,0x00,0x00,0x00 /* 00000170 "...." */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000170 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000178 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000180 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 /* 00000188 "........" */ }; const unsigned char TemplateIvrs[] = @@ -939,11 +942,11 @@ const unsigned char TemplateMsct[] = const unsigned char TemplateNfit[] = { - 0x4E,0x46,0x49,0x54,0x70,0x01,0x00,0x00, /* 00000000 "NFITp..." */ - 0x01,0x53,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 ".SINTEL " */ + 0x4E,0x46,0x49,0x54,0x80,0x01,0x00,0x00, /* 00000000 "NFIT...." */ + 0x01,0x07,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ - 0x10,0x04,0x15,0x20,0x00,0x00,0x00,0x00, /* 00000020 "... ...." */ + 0x29,0x09,0x17,0x20,0x00,0x00,0x00,0x00, /* 00000020 ").. ...." */ 0x00,0x00,0x38,0x00,0x01,0x00,0x00,0x00, /* 00000028 "..8....." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000030 "........" */ 0x30,0x05,0xAF,0x91,0x86,0x5D,0x0E,0x47, /* 00000038 "0....].G" */ @@ -984,7 +987,9 @@ const unsigned char TemplateNfit[] = 0x06,0x00,0x20,0x00,0x01,0x00,0x00,0x00, /* 00000150 ".. ....." */ 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000158 "........" */ 0x00,0x00,0x00,0x18,0x04,0x00,0x00,0x00, /* 00000160 "........" */ - 0x00,0x00,0x00,0x18,0x06,0x00,0x00,0x00 /* 00000168 "........" */ + 0x00,0x00,0x00,0x18,0x06,0x00,0x00,0x00, /* 00000168 "........" */ + 0x07,0x00,0x10,0x00,0x00,0x00,0x00,0x00, /* 00000170 "........" */ + 0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00 /* 00000178 "........" */ }; const unsigned char TemplateMtmr[] = @@ -1079,6 +1084,17 @@ const unsigned char TemplatePcct[] = 0x55,0x55,0x55,0x55,0x55,0x55 /* 00000248 "UUUUUU| */ }; +const unsigned char TemplatePdtt[] = +{ + 0x50,0x44,0x54,0x54,0x34,0x00,0x00,0x00, /* 00000000 "PDTT4..." */ + 0x01,0xCB,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ + 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ + 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ + 0x31,0x08,0x17,0x20,0x04,0x00,0x00,0x00, /* 00000020 "1.. ...." */ + 0x2C,0x00,0x00,0x00,0xAA,0x03,0xBB,0x02, /* 00000028 ",......." */ + 0xCC,0x01,0xDD,0x00 /* 00000030 "...." */ +}; + const unsigned char TemplatePmtt[] = { 0x50,0x4D,0x54,0x54,0xB4,0x00,0x00,0x00, /* 00000000 "PMTT...." */ @@ -1187,6 +1203,25 @@ const unsigned char TemplateSdei[] = 0x30,0x09,0x16,0x20 /* 00000028 "0.. " */ }; +const unsigned char TemplateSdev[] = +{ + 0x53,0x44,0x45,0x56,0x72,0x00,0x00,0x00, /* 00000000 "SDEVr..." */ + 0x01,0x2F,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "./INTEL " */ + 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ + 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ + 0x31,0x08,0x17,0x20,0x00,0x01,0x2A,0x00, /* 00000020 "1.. ..*." */ + 0x0C,0x00,0x16,0x00,0x22,0x00,0x08,0x00, /* 00000028 "...."..." */ + 0x5C,0x5C,0x5F,0x53,0x42,0x5F,0x2E,0x50, /* 00000030 "\\_SB_.P" */ + 0x43,0x49,0x30,0x2E,0x55,0x53,0x42,0x31, /* 00000038 "CI0.USB1" */ + 0x2E,0x53,0x55,0x42,0x31,0x00,0x00,0x11, /* 00000040 ".SUB1..." */ + 0x22,0x33,0x44,0x55,0x66,0x77,0x01,0x01, /* 00000048 ""3DUfw.." */ + 0x24,0x00,0x10,0x00,0x20,0x00,0x10,0x00, /* 00000050 "$... ..." */ + 0x04,0x00,0x14,0x00,0x10,0x00,0x11,0x22, /* 00000058 "......."" */ + 0x33,0x44,0xEE,0xDD,0xCC,0xBB,0xAA,0x55, /* 00000060 "3D.....U" */ + 0x66,0x77,0x88,0x99,0xAA,0xBB,0xCC,0xDD, /* 00000068 "fw......" */ + 0xEE,0xFF /* 00000070 ".." */ +}; + const unsigned char TemplateSlic[] = { 0x53,0x4C,0x49,0x43,0x76,0x01,0x00,0x00, /* 00000000 "SLICv..." */ @@ -1388,13 +1423,17 @@ const unsigned char TemplateTcpa[] = const unsigned char TemplateTpm2[] = { - 0x54,0x50,0x4D,0x32,0x34,0x00,0x00,0x00, /* 00000000 "TPM24..." */ - 0x03,0x42,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 ".BINTEL " */ - 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ + 0x54,0x50,0x4D,0x32,0x58,0x00,0x00,0x00, /* 00000000 "TPM2X..." */ + 0x03,0xAB,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ + 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ - 0x14,0x11,0x12,0x20,0x00,0x00,0x00,0x00, /* 00000020 "... ...." */ - 0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00, /* 00000028 "wfUD3".." */ - 0x01,0x00,0x00,0x00 /* 00000030 "...." */ + 0x31,0x08,0x17,0x20,0x01,0x00,0x00,0x00, /* 00000020 "1.. ...." */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ + 0x0B,0x00,0x00,0x00,0x01,0x02,0x03,0x04, /* 00000030 "........" */ + 0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C, /* 00000038 "........" */ + 0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ + 0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00, /* 00000048 "........" */ + 0x01,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF /* 00000050 "........" */ }; const unsigned char TemplateUefi[] = diff --git a/sys/contrib/dev/acpica/source/compiler/dtutils.c b/sys/contrib/dev/acpica/source/compiler/dtutils.c index c6c89eaa7d..fe079eacdf 100644 --- a/sys/contrib/dev/acpica/source/compiler/dtutils.c +++ b/sys/contrib/dev/acpica/source/compiler/dtutils.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -150,7 +150,6 @@ *****************************************************************************/ #include "aslcompiler.h" -#include "dtcompiler.h" #include "actables.h" #define _COMPONENT DT_COMPILER @@ -570,6 +569,7 @@ DtGetFieldLength ( case ACPI_DMT_PCCT: case ACPI_DMT_PMTT: case ACPI_DMT_PPTT: + case ACPI_DMT_SDEV: case ACPI_DMT_SRAT: case ACPI_DMT_ASF: case ACPI_DMT_HESTNTYP: @@ -602,6 +602,7 @@ DtGetFieldLength ( case ACPI_DMT_NAME4: case ACPI_DMT_SIG: case ACPI_DMT_LPIT: + case ACPI_DMT_TPM2: ByteLength = 4; break; @@ -920,153 +921,3 @@ DtWalkTableTree ( } } } - - -/******************************************************************************* - * - * FUNCTION: UtSubtableCacheCalloc - * - * PARAMETERS: None - * - * RETURN: Pointer to the buffer. Aborts on allocation failure - * - * DESCRIPTION: Allocate a subtable object buffer. Bypass the local - * dynamic memory manager for performance reasons (This has a - * major impact on the speed of the compiler.) - * - ******************************************************************************/ - -DT_SUBTABLE * -UtSubtableCacheCalloc ( - void) -{ - ASL_CACHE_INFO *Cache; - - - if (Gbl_SubtableCacheNext >= Gbl_SubtableCacheLast) - { - /* Allocate a new buffer */ - - Cache = UtLocalCalloc (sizeof (Cache->Next) + - (sizeof (DT_SUBTABLE) * ASL_SUBTABLE_CACHE_SIZE)); - - /* Link new cache buffer to head of list */ - - Cache->Next = Gbl_SubtableCacheList; - Gbl_SubtableCacheList = Cache; - - /* Setup cache management pointers */ - - Gbl_SubtableCacheNext = ACPI_CAST_PTR (DT_SUBTABLE, Cache->Buffer); - Gbl_SubtableCacheLast = Gbl_SubtableCacheNext + ASL_SUBTABLE_CACHE_SIZE; - } - - Gbl_SubtableCount++; - return (Gbl_SubtableCacheNext++); -} - - -/******************************************************************************* - * - * FUNCTION: UtFieldCacheCalloc - * - * PARAMETERS: None - * - * RETURN: Pointer to the buffer. Aborts on allocation failure - * - * DESCRIPTION: Allocate a field object buffer. Bypass the local - * dynamic memory manager for performance reasons (This has a - * major impact on the speed of the compiler.) - * - ******************************************************************************/ - -DT_FIELD * -UtFieldCacheCalloc ( - void) -{ - ASL_CACHE_INFO *Cache; - - - if (Gbl_FieldCacheNext >= Gbl_FieldCacheLast) - { - /* Allocate a new buffer */ - - Cache = UtLocalCalloc (sizeof (Cache->Next) + - (sizeof (DT_FIELD) * ASL_FIELD_CACHE_SIZE)); - - /* Link new cache buffer to head of list */ - - Cache->Next = Gbl_FieldCacheList; - Gbl_FieldCacheList = Cache; - - /* Setup cache management pointers */ - - Gbl_FieldCacheNext = ACPI_CAST_PTR (DT_FIELD, Cache->Buffer); - Gbl_FieldCacheLast = Gbl_FieldCacheNext + ASL_FIELD_CACHE_SIZE; - } - - Gbl_FieldCount++; - return (Gbl_FieldCacheNext++); -} - - -/******************************************************************************* - * - * FUNCTION: DtDeleteCaches - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Delete all local cache buffer blocks - * - ******************************************************************************/ - -void -DtDeleteCaches ( - void) -{ - UINT32 BufferCount; - ASL_CACHE_INFO *Next; - - - /* Field cache */ - - BufferCount = 0; - while (Gbl_FieldCacheList) - { - Next = Gbl_FieldCacheList->Next; - ACPI_FREE (Gbl_FieldCacheList); - Gbl_FieldCacheList = Next; - BufferCount++; - } - - DbgPrint (ASL_DEBUG_OUTPUT, - "%u Fields, Buffer size: %u fields (%u bytes), %u Buffers\n", - Gbl_FieldCount, ASL_FIELD_CACHE_SIZE, - (sizeof (DT_FIELD) * ASL_FIELD_CACHE_SIZE), BufferCount); - - Gbl_FieldCount = 0; - Gbl_FieldCacheNext = NULL; - Gbl_FieldCacheLast = NULL; - - /* Subtable cache */ - - BufferCount = 0; - while (Gbl_SubtableCacheList) - { - Next = Gbl_SubtableCacheList->Next; - ACPI_FREE (Gbl_SubtableCacheList); - Gbl_SubtableCacheList = Next; - BufferCount++; - } - - DbgPrint (ASL_DEBUG_OUTPUT, - "%u Subtables, Buffer size: %u subtables (%u bytes), %u Buffers\n", - Gbl_SubtableCount, ASL_SUBTABLE_CACHE_SIZE, - (sizeof (DT_SUBTABLE) * ASL_SUBTABLE_CACHE_SIZE), BufferCount); - - Gbl_SubtableCount = 0; - Gbl_SubtableCacheNext = NULL; - Gbl_SubtableCacheLast = NULL; -} diff --git a/sys/contrib/dev/acpica/source/compiler/preprocess.h b/sys/contrib/dev/acpica/source/compiler/preprocess.h index f64db0d06c..446fdaf4e2 100644 --- a/sys/contrib/dev/acpica/source/compiler/preprocess.h +++ b/sys/contrib/dev/acpica/source/compiler/preprocess.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/prexpress.c b/sys/contrib/dev/acpica/source/compiler/prexpress.c index a0ba7447d3..390aa2114f 100644 --- a/sys/contrib/dev/acpica/source/compiler/prexpress.c +++ b/sys/contrib/dev/acpica/source/compiler/prexpress.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -150,8 +150,6 @@ *****************************************************************************/ #include "aslcompiler.h" -#include "dtcompiler.h" - #define _COMPONENT ASL_PREPROCESSOR ACPI_MODULE_NAME ("prexpress") diff --git a/sys/contrib/dev/acpica/source/compiler/prmacros.c b/sys/contrib/dev/acpica/source/compiler/prmacros.c index 675d4522cb..c384288f89 100644 --- a/sys/contrib/dev/acpica/source/compiler/prmacros.c +++ b/sys/contrib/dev/acpica/source/compiler/prmacros.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -150,8 +150,6 @@ *****************************************************************************/ #include "aslcompiler.h" -#include "dtcompiler.h" - #define _COMPONENT ASL_PREPROCESSOR ACPI_MODULE_NAME ("prmacros") diff --git a/sys/contrib/dev/acpica/source/compiler/prparser.l b/sys/contrib/dev/acpica/source/compiler/prparser.l index da29bfa6cf..8940197b7c 100644 --- a/sys/contrib/dev/acpica/source/compiler/prparser.l +++ b/sys/contrib/dev/acpica/source/compiler/prparser.l @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/compiler/prparser.y b/sys/contrib/dev/acpica/source/compiler/prparser.y index d24a5bbee0..a00d60035a 100644 --- a/sys/contrib/dev/acpica/source/compiler/prparser.y +++ b/sys/contrib/dev/acpica/source/compiler/prparser.y @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -151,7 +151,6 @@ *****************************************************************************/ #include "aslcompiler.h" -#include "dtcompiler.h" #define _COMPONENT ASL_PREPROCESSOR ACPI_MODULE_NAME ("prparser") diff --git a/sys/contrib/dev/acpica/source/compiler/prscan.c b/sys/contrib/dev/acpica/source/compiler/prscan.c index 75a9866576..939d4e6f10 100644 --- a/sys/contrib/dev/acpica/source/compiler/prscan.c +++ b/sys/contrib/dev/acpica/source/compiler/prscan.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -152,7 +152,6 @@ #define _DECLARE_PR_GLOBALS #include "aslcompiler.h" -#include "dtcompiler.h" /* * TBDs: @@ -1197,7 +1196,7 @@ PrPushDirective ( Info->Next = Gbl_DirectiveStack; Info->Directive = Directive; Info->IgnoringThisCodeBlock = Gbl_IgnoringThisCodeBlock; - strncpy (Info->Argument, Argument, MAX_ARGUMENT_LENGTH); + AcpiUtSafeStrncpy (Info->Argument, Argument, MAX_ARGUMENT_LENGTH); DbgPrint (ASL_DEBUG_OUTPUT, "Pr(%.4u) - [%u %s] %*s Pushed [#%s %s]: IgnoreFlag = %s\n", diff --git a/sys/contrib/dev/acpica/source/compiler/prutils.c b/sys/contrib/dev/acpica/source/compiler/prutils.c index 61641ddbe2..51fe2a5a15 100644 --- a/sys/contrib/dev/acpica/source/compiler/prutils.c +++ b/sys/contrib/dev/acpica/source/compiler/prutils.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -150,8 +150,6 @@ *****************************************************************************/ #include "aslcompiler.h" -#include "dtcompiler.h" - #define _COMPONENT ASL_PREPROCESSOR ACPI_MODULE_NAME ("prutils") @@ -514,7 +512,7 @@ PrPushInputFileStack ( /* Reset the global line count and filename */ Gbl_Files[ASL_FILE_INPUT].Filename = - UtStringCacheCalloc (strlen (Filename) + 1); + UtLocalCacheCalloc (strlen (Filename) + 1); strcpy (Gbl_Files[ASL_FILE_INPUT].Filename, Filename); Gbl_Files[ASL_FILE_INPUT].Handle = InputFile; diff --git a/sys/contrib/dev/acpica/source/components/debugger/dbcmds.c b/sys/contrib/dev/acpica/source/components/debugger/dbcmds.c index b1d0926d0a..2460347047 100644 --- a/sys/contrib/dev/acpica/source/components/debugger/dbcmds.c +++ b/sys/contrib/dev/acpica/source/components/debugger/dbcmds.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/debugger/dbconvert.c b/sys/contrib/dev/acpica/source/components/debugger/dbconvert.c index e30bc3ffbc..ef20e7f35f 100644 --- a/sys/contrib/dev/acpica/source/components/debugger/dbconvert.c +++ b/sys/contrib/dev/acpica/source/components/debugger/dbconvert.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/debugger/dbdisply.c b/sys/contrib/dev/acpica/source/components/debugger/dbdisply.c index 10398c7cbc..f88d7076d5 100644 --- a/sys/contrib/dev/acpica/source/components/debugger/dbdisply.c +++ b/sys/contrib/dev/acpica/source/components/debugger/dbdisply.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -822,9 +822,8 @@ AcpiDbDisplayObjectType ( return; } - AcpiOsPrintf ("ADR: %8.8X%8.8X, STA: %8.8X, Flags: %X\n", - ACPI_FORMAT_UINT64 (Info->Address), - Info->CurrentStatus, Info->Flags); + AcpiOsPrintf ("ADR: %8.8X%8.8X, Flags: %X\n", + ACPI_FORMAT_UINT64 (Info->Address), Info->Flags); AcpiOsPrintf ("S1D-%2.2X S2D-%2.2X S3D-%2.2X S4D-%2.2X\n", Info->HighestDstates[0], Info->HighestDstates[1], diff --git a/sys/contrib/dev/acpica/source/components/debugger/dbexec.c b/sys/contrib/dev/acpica/source/components/debugger/dbexec.c index 89f9cc734f..8c1dfdc604 100644 --- a/sys/contrib/dev/acpica/source/components/debugger/dbexec.c +++ b/sys/contrib/dev/acpica/source/components/debugger/dbexec.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -188,6 +188,10 @@ AcpiDbExecutionWalk ( void *Context, void **ReturnValue); +static void ACPI_SYSTEM_XFACE +AcpiDbSingleExecutionThread ( + void *Context); + /******************************************************************************* * @@ -367,7 +371,7 @@ AcpiDbExecuteSetup ( ACPI_FUNCTION_NAME (DbExecuteSetup); - /* Catenate the current scope to the supplied name */ + /* Concatenate the current scope to the supplied name */ Info->Pathname[0] = 0; if ((Info->Name[0] != '\\') && @@ -792,6 +796,124 @@ AcpiDbMethodThread ( /******************************************************************************* * + * FUNCTION: AcpiDbSingleExecutionThread + * + * PARAMETERS: Context - Method info struct + * + * RETURN: None + * + * DESCRIPTION: Create one thread and execute a method + * + ******************************************************************************/ + +static void ACPI_SYSTEM_XFACE +AcpiDbSingleExecutionThread ( + void *Context) +{ + ACPI_DB_METHOD_INFO *Info = Context; + ACPI_STATUS Status; + ACPI_BUFFER ReturnObj; + + + AcpiOsPrintf ("\n"); + + Status = AcpiDbExecuteMethod (Info, &ReturnObj); + if (ACPI_FAILURE (Status)) + { + AcpiOsPrintf ("%s During evaluation of %s\n", + AcpiFormatException (Status), Info->Pathname); + return; + } + + /* Display a return object, if any */ + + if (ReturnObj.Length) + { + AcpiOsPrintf ("Evaluation of %s returned object %p, " + "external buffer length %X\n", + AcpiGbl_DbMethodInfo.Pathname, ReturnObj.Pointer, + (UINT32) ReturnObj.Length); + + AcpiDbDumpExternalObject (ReturnObj.Pointer, 1); + } + + AcpiOsPrintf ("\nBackground thread completed\n%c ", + ACPI_DEBUGGER_COMMAND_PROMPT); +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDbCreateExecutionThread + * + * PARAMETERS: MethodNameArg - Control method to execute + * Arguments - Array of arguments to the method + * Types - Corresponding array of object types + * + * RETURN: None + * + * DESCRIPTION: Create a single thread to evaluate a namespace object. Handles + * arguments passed on command line for control methods. + * + ******************************************************************************/ + +void +AcpiDbCreateExecutionThread ( + char *MethodNameArg, + char **Arguments, + ACPI_OBJECT_TYPE *Types) +{ + ACPI_STATUS Status; + UINT32 i; + + + memset (&AcpiGbl_DbMethodInfo, 0, sizeof (ACPI_DB_METHOD_INFO)); + AcpiGbl_DbMethodInfo.Name = MethodNameArg; + AcpiGbl_DbMethodInfo.InitArgs = 1; + AcpiGbl_DbMethodInfo.Args = AcpiGbl_DbMethodInfo.Arguments; + AcpiGbl_DbMethodInfo.Types = AcpiGbl_DbMethodInfo.ArgTypes; + + /* Setup method arguments, up to 7 (0-6) */ + + for (i = 0; (i < ACPI_METHOD_NUM_ARGS) && *Arguments; i++) + { + AcpiGbl_DbMethodInfo.Arguments[i] = *Arguments; + Arguments++; + + AcpiGbl_DbMethodInfo.ArgTypes[i] = *Types; + Types++; + } + + Status = AcpiDbExecuteSetup (&AcpiGbl_DbMethodInfo); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Get the NS node, determines existence also */ + + Status = AcpiGetHandle (NULL, AcpiGbl_DbMethodInfo.Pathname, + &AcpiGbl_DbMethodInfo.Method); + if (ACPI_FAILURE (Status)) + { + AcpiOsPrintf ("%s Could not get handle for %s\n", + AcpiFormatException (Status), AcpiGbl_DbMethodInfo.Pathname); + return; + } + + Status = AcpiOsExecute (OSL_DEBUGGER_EXEC_THREAD, + AcpiDbSingleExecutionThread, &AcpiGbl_DbMethodInfo); + if (ACPI_FAILURE (Status)) + { + return; + } + + AcpiOsPrintf ("\nBackground thread started\n"); +} + + +/******************************************************************************* + * * FUNCTION: AcpiDbCreateExecutionThreads * * PARAMETERS: NumThreadsArg - Number of threads to create diff --git a/sys/contrib/dev/acpica/source/components/debugger/dbfileio.c b/sys/contrib/dev/acpica/source/components/debugger/dbfileio.c index 1ebb16f48d..eea89ba9a4 100644 --- a/sys/contrib/dev/acpica/source/components/debugger/dbfileio.c +++ b/sys/contrib/dev/acpica/source/components/debugger/dbfileio.c @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -220,7 +220,7 @@ AcpiDbOpenDebugFile ( } AcpiOsPrintf ("Debug output file %s opened\n", Name); - strncpy (AcpiGbl_DbDebugFilename, Name, + AcpiUtSafeStrncpy (AcpiGbl_DbDebugFilename, Name, sizeof (AcpiGbl_DbDebugFilename)); AcpiGbl_DbOutputToFile = TRUE; } diff --git a/sys/contrib/dev/acpica/source/components/debugger/dbhistry.c b/sys/contrib/dev/acpica/source/components/debugger/dbhistry.c index 4b887f5a66..bb64c64392 100644 --- a/sys/contrib/dev/acpica/source/components/debugger/dbhistry.c +++ b/sys/contrib/dev/acpica/source/components/debugger/dbhistry.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/debugger/dbinput.c b/sys/contrib/dev/acpica/source/components/debugger/dbinput.c index c085fb641f..01df7e983b 100644 --- a/sys/contrib/dev/acpica/source/components/debugger/dbinput.c +++ b/sys/contrib/dev/acpica/source/components/debugger/dbinput.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -260,6 +260,7 @@ enum AcpiExDebuggerCommands CMD_UNLOAD, CMD_TERMINATE, + CMD_BACKGROUND, CMD_THREADS, CMD_TEST, @@ -338,6 +339,7 @@ static const ACPI_DB_COMMAND_INFO AcpiGbl_DbCommands[] = {"UNLOAD", 1}, {"TERMINATE", 0}, + {"BACKGROUND", 1}, {"THREADS", 3}, {"TEST", 1}, @@ -348,102 +350,113 @@ static const ACPI_DB_COMMAND_INFO AcpiGbl_DbCommands[] = /* * Help for all debugger commands. First argument is the number of lines * of help to output for the command. + * + * Note: Some commands are not supported by the kernel-level version of + * the debugger. */ static const ACPI_DB_COMMAND_HELP AcpiGbl_DbCommandHelp[] = { - {0, "\nGeneral-Purpose Commands:", "\n"}, - {1, " Allocations", "Display list of current memory allocations\n"}, - {2, " Dump
|", "\n"}, - {0, " [Byte|Word|Dword|Qword]", "Display ACPI objects or memory\n"}, - {1, " Handlers", "Info about global handlers\n"}, - {1, " Help [Command]", "This help screen or individual command\n"}, - {1, " History", "Display command history buffer\n"}, - {1, " Level ] [console]", "Get/Set debug level for file or console\n"}, - {1, " Locks", "Current status of internal mutexes\n"}, - {1, " Osi [Install|Remove ]", "Display or modify global _OSI list\n"}, - {1, " Quit or Exit", "Exit this command\n"}, - {8, " Stats ", "Display namespace and memory statistics\n"}, - {1, " Allocations", "Display list of current memory allocations\n"}, - {1, " Memory", "Dump internal memory lists\n"}, - {1, " Misc", "Namespace search and mutex stats\n"}, - {1, " Objects", "Summary of namespace objects\n"}, - {1, " Sizes", "Sizes for each of the internal objects\n"}, - {1, " Stack", "Display CPU stack usage\n"}, - {1, " Tables", "Info about current ACPI table(s)\n"}, - {1, " Tables", "Display info about loaded ACPI tables\n"}, - {1, " ! ", "Execute command from history buffer\n"}, - {1, " !!", "Execute last command again\n"}, - - {0, "\nNamespace Access Commands:", "\n"}, - {1, " Businfo", "Display system bus info\n"}, - {1, " Disassemble ", "Disassemble a control method\n"}, - {1, " Find (? is wildcard)", "Find ACPI name(s) with wildcards\n"}, - {1, " Integrity", "Validate namespace integrity\n"}, - {1, " Methods", "Display list of loaded control methods\n"}, - {1, " Namespace [Object] [Depth]", "Display loaded namespace tree/subtree\n"}, - {1, " Notify ", "Send a notification on Object\n"}, - {1, " Objects [ObjectType]", "Display summary of all objects or just given type\n"}, - {1, " Owner [Depth]", "Display loaded namespace by object owner\n"}, - {1, " Paths", "Display full pathnames of namespace objects\n"}, - {1, " Predefined", "Check all predefined names\n"}, - {1, " Prefix []", "Set or Get current execution prefix\n"}, - {1, " References ", "Find all references to object at addr\n"}, - {1, " Resources [DeviceName]", "Display Device resources (no arg = all devices)\n"}, - {1, " Set N ", "Set value for named integer\n"}, - {1, " Template ", "Format/dump a Buffer/ResourceTemplate\n"}, - {1, " Type ", "Display object type\n"}, - - {0, "\nControl Method Execution Commands:","\n"}, - {1, " Arguments (or Args)", "Display method arguments\n"}, - {1, " Breakpoint ", "Set an AML execution breakpoint\n"}, - {1, " Call", "Run to next control method invocation\n"}, - {1, " Debug [Arguments]", "Single Step a control method\n"}, - {6, " Evaluate", "Synonym for Execute\n"}, - {5, " Execute [Arguments]", "Execute control method\n"}, - {1, " Hex Integer", "Integer method argument\n"}, - {1, " \"Ascii String\"", "String method argument\n"}, - {1, " (Hex Byte List)", "Buffer method argument\n"}, - {1, " [Package Element List]", "Package method argument\n"}, - {5, " Execute predefined", "Execute all predefined (public) methods\n"}, - {1, " Go", "Allow method to run to completion\n"}, - {1, " Information", "Display info about the current method\n"}, - {1, " Into", "Step into (not over) a method call\n"}, - {1, " List [# of Aml Opcodes]", "Display method ASL statements\n"}, - {1, " Locals", "Display method local variables\n"}, - {1, " Results", "Display method result stack\n"}, - {1, " Set <#> ", "Set method data (Arguments/Locals)\n"}, - {1, " Stop", "Terminate control method\n"}, - {5, " Trace [] [Once]", "Trace control method execution\n"}, - {1, " Enable", "Enable all messages\n"}, - {1, " Disable", "Disable tracing\n"}, - {1, " Method", "Enable method execution messages\n"}, - {1, " Opcode", "Enable opcode execution messages\n"}, - {1, " Tree", "Display control method calling tree\n"}, - {1, " ", "Single step next AML opcode (over calls)\n"}, + {0, "\nNamespace Access:", "\n"}, + {1, " Businfo", "Display system bus info\n"}, + {1, " Disassemble ", "Disassemble a control method\n"}, + {1, " Find (? is wildcard)", "Find ACPI name(s) with wildcards\n"}, + {1, " Integrity", "Validate namespace integrity\n"}, + {1, " Methods", "Display list of loaded control methods\n"}, + {1, " Namespace [Object] [Depth]", "Display loaded namespace tree/subtree\n"}, + {1, " Notify ", "Send a notification on Object\n"}, + {1, " Objects [ObjectType]", "Display summary of all objects or just given type\n"}, + {1, " Owner [Depth]", "Display loaded namespace by object owner\n"}, + {1, " Paths", "Display full pathnames of namespace objects\n"}, + {1, " Predefined", "Check all predefined names\n"}, + {1, " Prefix []", "Set or Get current execution prefix\n"}, + {1, " References ", "Find all references to object at addr\n"}, + {1, " Resources [DeviceName]", "Display Device resources (no arg = all devices)\n"}, + {1, " Set N ", "Set value for named integer\n"}, + {1, " Template ", "Format/dump a Buffer/ResourceTemplate\n"}, + {1, " Type ", "Display object type\n"}, + + {0, "\nControl Method Execution:", "\n"}, + {1, " Evaluate [Arguments]", "Evaluate object or control method\n"}, + {1, " Execute [Arguments]", "Synonym for Evaluate\n"}, +#ifdef ACPI_APPLICATION + {1, " Background [Arguments]", "Evaluate object/method in a separate thread\n"}, + {1, " Thread ", "Spawn threads to execute method(s)\n"}, +#endif + {1, " Debug [Arguments]", "Single-Step a control method\n"}, + {7, " [Arguments] formats:", "Control method argument formats\n"}, + {1, " Hex Integer", "Integer\n"}, + {1, " \"Ascii String\"", "String\n"}, + {1, " (Hex Byte List)", "Buffer\n"}, + {1, " (01 42 7A BF)", "Buffer example (4 bytes)\n"}, + {1, " [Package Element List]", "Package\n"}, + {1, " [0x01 0x1234 \"string\"]", "Package example (3 elements)\n"}, + + {0, "\nMiscellaneous:", "\n"}, + {1, " Allocations", "Display list of current memory allocations\n"}, + {2, " Dump
|", "\n"}, + {0, " [Byte|Word|Dword|Qword]", "Display ACPI objects or memory\n"}, + {1, " Handlers", "Info about global handlers\n"}, + {1, " Help [Command]", "This help screen or individual command\n"}, + {1, " History", "Display command history buffer\n"}, + {1, " Level ] [console]", "Get/Set debug level for file or console\n"}, + {1, " Locks", "Current status of internal mutexes\n"}, + {1, " Osi [Install|Remove ]", "Display or modify global _OSI list\n"}, + {1, " Quit or Exit", "Exit this command\n"}, + {8, " Stats ", "Display namespace and memory statistics\n"}, + {1, " Allocations", "Display list of current memory allocations\n"}, + {1, " Memory", "Dump internal memory lists\n"}, + {1, " Misc", "Namespace search and mutex stats\n"}, + {1, " Objects", "Summary of namespace objects\n"}, + {1, " Sizes", "Sizes for each of the internal objects\n"}, + {1, " Stack", "Display CPU stack usage\n"}, + {1, " Tables", "Info about current ACPI table(s)\n"}, + {1, " Tables", "Display info about loaded ACPI tables\n"}, +#ifdef ACPI_APPLICATION + {1, " Terminate", "Delete namespace and all internal objects\n"}, +#endif + {1, " ! ", "Execute command from history buffer\n"}, + {1, " !!", "Execute last command again\n"}, + + {0, "\nMethod and Namespace Debugging:", "\n"}, + {5, " Trace [] [Once]", "Trace control method execution\n"}, + {1, " Enable", "Enable all messages\n"}, + {1, " Disable", "Disable tracing\n"}, + {1, " Method", "Enable method execution messages\n"}, + {1, " Opcode", "Enable opcode execution messages\n"}, + {3, " Test ", "Invoke a debug test\n"}, + {1, " Objects", "Read/write/compare all namespace data objects\n"}, + {1, " Predefined", "Validate all ACPI predefined names (_STA, etc.)\n"}, + {1, " Execute predefined", "Execute all predefined (public) methods\n"}, + + {0, "\nControl Method Single-Step Execution:","\n"}, + {1, " Arguments (or Args)", "Display method arguments\n"}, + {1, " Breakpoint ", "Set an AML execution breakpoint\n"}, + {1, " Call", "Run to next control method invocation\n"}, + {1, " Go", "Allow method to run to completion\n"}, + {1, " Information", "Display info about the current method\n"}, + {1, " Into", "Step into (not over) a method call\n"}, + {1, " List [# of Aml Opcodes]", "Display method ASL statements\n"}, + {1, " Locals", "Display method local variables\n"}, + {1, " Results", "Display method result stack\n"}, + {1, " Set <#> ", "Set method data (Arguments/Locals)\n"}, + {1, " Stop", "Terminate control method\n"}, + {1, " Tree", "Display control method calling tree\n"}, + {1, " ", "Single step next AML opcode (over calls)\n"}, #ifdef ACPI_APPLICATION - {0, "\nHardware Simulation Commands:", "\n"}, - {1, " EnableAcpi", "Enable ACPI (hardware) mode\n"}, - {1, " Event ", "Generate AcpiEvent (Fixed/GPE)\n"}, - {1, " Gpe [GpeBlockDevice]", "Simulate a GPE\n"}, - {1, " Gpes", "Display info on all GPE devices\n"}, - {1, " Sci", "Generate an SCI\n"}, - {1, " Sleep [SleepState]", "Simulate sleep/wake sequence(s) (0-5)\n"}, - - {0, "\nFile I/O Commands:", "\n"}, - {1, " Close", "Close debug output file\n"}, - {1, " Load ", "Load ACPI table from a file\n"}, - {1, " Open ", "Open a file for debug output\n"}, - {1, " Unload ", "Unload an ACPI table via namespace object\n"}, - - {0, "\nUser Space Commands:", "\n"}, - {1, " Terminate", "Delete namespace and all internal objects\n"}, - {1, " Thread ", "Spawn threads to execute method(s)\n"}, - - {0, "\nDebug Test Commands:", "\n"}, - {3, " Test ", "Invoke a debug test\n"}, - {1, " Objects", "Read/write/compare all namespace data objects\n"}, - {1, " Predefined", "Execute all ACPI predefined names (_STA, etc.)\n"}, + {0, "\nFile Operations:", "\n"}, + {1, " Close", "Close debug output file\n"}, + {1, " Load ", "Load ACPI table from a file\n"}, + {1, " Open ", "Open a file for debug output\n"}, + {1, " Unload ", "Unload an ACPI table via namespace object\n"}, + + {0, "\nHardware Simulation:", "\n"}, + {1, " EnableAcpi", "Enable ACPI (hardware) mode\n"}, + {1, " Event ", "Generate AcpiEvent (Fixed/GPE)\n"}, + {1, " Gpe [GpeBlockDevice]", "Simulate a GPE\n"}, + {1, " Gpes", "Display info on all GPE devices\n"}, + {1, " Sci", "Generate an SCI\n"}, + {1, " Sleep [SleepState]", "Simulate sleep/wake sequence(s) (0-5)\n"}, #endif {0, NULL, NULL} }; @@ -573,11 +586,15 @@ AcpiDbDisplayHelp ( { /* No argument to help, display help for all commands */ + AcpiOsPrintf ("\nSummary of AML Debugger Commands\n\n"); + while (Next->Invocation) { AcpiOsPrintf ("%-38s%s", Next->Invocation, Next->Description); Next++; } + AcpiOsPrintf ("\n"); + } else { @@ -1260,6 +1277,12 @@ AcpiDbCommandDispatch ( /* AcpiInitialize (NULL); */ break; + case CMD_BACKGROUND: + + AcpiDbCreateExecutionThread (AcpiGbl_DbArgs[1], &AcpiGbl_DbArgs[2], + &AcpiGbl_DbArgTypes[2]); + break; + case CMD_THREADS: AcpiDbCreateExecutionThreads (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2], diff --git a/sys/contrib/dev/acpica/source/components/debugger/dbmethod.c b/sys/contrib/dev/acpica/source/components/debugger/dbmethod.c index b426f1b58e..a15501f098 100644 --- a/sys/contrib/dev/acpica/source/components/debugger/dbmethod.c +++ b/sys/contrib/dev/acpica/source/components/debugger/dbmethod.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/debugger/dbnames.c b/sys/contrib/dev/acpica/source/components/debugger/dbnames.c index f38503d9f5..51b9fb293f 100644 --- a/sys/contrib/dev/acpica/source/components/debugger/dbnames.c +++ b/sys/contrib/dev/acpica/source/components/debugger/dbnames.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -374,8 +374,17 @@ AcpiDbDumpNamespace ( } AcpiDbSetOutputDestination (ACPI_DB_DUPLICATE_OUTPUT); - AcpiOsPrintf ("ACPI Namespace (from %4.4s (%p) subtree):\n", - ((ACPI_NAMESPACE_NODE *) SubtreeEntry)->Name.Ascii, SubtreeEntry); + + if (((ACPI_NAMESPACE_NODE *) SubtreeEntry)->Parent) + { + AcpiOsPrintf ("ACPI Namespace (from %4.4s (%p) subtree):\n", + ((ACPI_NAMESPACE_NODE *) SubtreeEntry)->Name.Ascii, SubtreeEntry); + } + else + { + AcpiOsPrintf ("ACPI Namespace (from %s):\n", + ACPI_NAMESPACE_ROOT); + } /* Display the subtree */ diff --git a/sys/contrib/dev/acpica/source/components/debugger/dbobject.c b/sys/contrib/dev/acpica/source/components/debugger/dbobject.c index 4bd4051cb5..a60346a256 100644 --- a/sys/contrib/dev/acpica/source/components/debugger/dbobject.c +++ b/sys/contrib/dev/acpica/source/components/debugger/dbobject.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/debugger/dbstats.c b/sys/contrib/dev/acpica/source/components/debugger/dbstats.c index ebc8803f15..4f0f4736b3 100644 --- a/sys/contrib/dev/acpica/source/components/debugger/dbstats.c +++ b/sys/contrib/dev/acpica/source/components/debugger/dbstats.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/debugger/dbtest.c b/sys/contrib/dev/acpica/source/components/debugger/dbtest.c index 378b648f9d..80245682a8 100644 --- a/sys/contrib/dev/acpica/source/components/debugger/dbtest.c +++ b/sys/contrib/dev/acpica/source/components/debugger/dbtest.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -190,6 +190,10 @@ AcpiDbTestStringType ( UINT32 ByteLength); static ACPI_STATUS +AcpiDbTestPackageType ( + ACPI_NAMESPACE_NODE *Node); + +static ACPI_STATUS AcpiDbReadFromObject ( ACPI_NAMESPACE_NODE *Node, ACPI_OBJECT_TYPE ExpectedType, @@ -457,6 +461,11 @@ AcpiDbTestOneObject ( BitLength = ByteLength * 8; break; + case ACPI_TYPE_PACKAGE: + + LocalType = ACPI_TYPE_PACKAGE; + break; + case ACPI_TYPE_FIELD_UNIT: case ACPI_TYPE_BUFFER_FIELD: case ACPI_TYPE_LOCAL_REGION_FIELD: @@ -491,6 +500,7 @@ AcpiDbTestOneObject ( AcpiOsPrintf ("%14s: %4.4s", AcpiUtGetTypeName (Node->Type), Node->Name.Ascii); + if (!ObjDesc) { AcpiOsPrintf (" Ignoring, no attached object\n"); @@ -511,13 +521,12 @@ AcpiDbTestOneObject ( case ACPI_ADR_SPACE_SYSTEM_MEMORY: case ACPI_ADR_SPACE_SYSTEM_IO: case ACPI_ADR_SPACE_PCI_CONFIG: - case ACPI_ADR_SPACE_EC: break; default: - AcpiOsPrintf (" %s space is not supported [%4.4s]\n", + AcpiOsPrintf (" %s space is not supported in this command [%4.4s]\n", AcpiUtGetRegionName (RegionObj->Region.SpaceId), RegionObj->Region.Node->Name.Ascii); return (AE_OK); @@ -547,6 +556,11 @@ AcpiDbTestOneObject ( Status = AcpiDbTestBufferType (Node, BitLength); break; + case ACPI_TYPE_PACKAGE: + + Status = AcpiDbTestPackageType (Node); + break; + default: AcpiOsPrintf (" Ignoring, type not implemented (%2.2X)", @@ -554,6 +568,14 @@ AcpiDbTestOneObject ( break; } + /* Exit on error, but don't abort the namespace walk */ + + if (ACPI_FAILURE (Status)) + { + Status = AE_OK; + goto Exit; + } + switch (Node->Type) { case ACPI_TYPE_LOCAL_REGION_FIELD: @@ -561,12 +583,14 @@ AcpiDbTestOneObject ( RegionObj = ObjDesc->Field.RegionObj; AcpiOsPrintf (" (%s)", AcpiUtGetRegionName (RegionObj->Region.SpaceId)); + break; default: break; } +Exit: AcpiOsPrintf ("\n"); return (Status); } @@ -625,7 +649,6 @@ AcpiDbTestIntegerType ( { ValueToWrite = 0; } - /* Write a new value */ WriteValue.Type = ACPI_TYPE_INTEGER; @@ -918,6 +941,40 @@ Exit: /******************************************************************************* * + * FUNCTION: AcpiDbTestPackageType + * + * PARAMETERS: Node - Parent NS node for the object + * + * RETURN: Status + * + * DESCRIPTION: Test read for a Package object. + * + ******************************************************************************/ + +static ACPI_STATUS +AcpiDbTestPackageType ( + ACPI_NAMESPACE_NODE *Node) +{ + ACPI_OBJECT *Temp1 = NULL; + ACPI_STATUS Status; + + + /* Read the original value */ + + Status = AcpiDbReadFromObject (Node, ACPI_TYPE_PACKAGE, &Temp1); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + AcpiOsPrintf (" %8.8X Elements", Temp1->Package.Count); + AcpiOsFree (Temp1); + return (Status); +} + + +/******************************************************************************* + * * FUNCTION: AcpiDbReadFromObject * * PARAMETERS: Node - Parent NS node for the object @@ -958,8 +1015,8 @@ AcpiDbReadFromObject ( AcpiGbl_MethodExecuting = TRUE; Status = AcpiEvaluateObject (ReadHandle, NULL, &ParamObjects, &ReturnObj); - AcpiGbl_MethodExecuting = FALSE; + AcpiGbl_MethodExecuting = FALSE; if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not read from object, %s", @@ -974,6 +1031,7 @@ AcpiDbReadFromObject ( case ACPI_TYPE_INTEGER: case ACPI_TYPE_BUFFER: case ACPI_TYPE_STRING: + case ACPI_TYPE_PACKAGE: /* * Did we receive the type we wanted? Most important for the * Integer/Buffer case (when a field is larger than an Integer, @@ -985,6 +1043,7 @@ AcpiDbReadFromObject ( AcpiUtGetTypeName (ExpectedType), AcpiUtGetTypeName (RetValue->Type)); + AcpiOsFree (ReturnObj.Pointer); return (AE_TYPE); } diff --git a/sys/contrib/dev/acpica/source/components/debugger/dbutils.c b/sys/contrib/dev/acpica/source/components/debugger/dbutils.c index 32ceefd5be..577e5828c3 100644 --- a/sys/contrib/dev/acpica/source/components/debugger/dbutils.c +++ b/sys/contrib/dev/acpica/source/components/debugger/dbutils.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/debugger/dbxface.c b/sys/contrib/dev/acpica/source/components/debugger/dbxface.c index 0b01f26aad..ce50e54574 100644 --- a/sys/contrib/dev/acpica/source/components/debugger/dbxface.c +++ b/sys/contrib/dev/acpica/source/components/debugger/dbxface.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/disassembler/dmbuffer.c b/sys/contrib/dev/acpica/source/components/disassembler/dmbuffer.c index b30f19de12..b3adbfaf48 100644 --- a/sys/contrib/dev/acpica/source/components/disassembler/dmbuffer.c +++ b/sys/contrib/dev/acpica/source/components/disassembler/dmbuffer.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/disassembler/dmcstyle.c b/sys/contrib/dev/acpica/source/components/disassembler/dmcstyle.c index 03796c42e7..694693ef32 100644 --- a/sys/contrib/dev/acpica/source/components/disassembler/dmcstyle.c +++ b/sys/contrib/dev/acpica/source/components/disassembler/dmcstyle.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/disassembler/dmdeferred.c b/sys/contrib/dev/acpica/source/components/disassembler/dmdeferred.c index 0368b0a6c8..e5802fe0f7 100644 --- a/sys/contrib/dev/acpica/source/components/disassembler/dmdeferred.c +++ b/sys/contrib/dev/acpica/source/components/disassembler/dmdeferred.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/disassembler/dmnames.c b/sys/contrib/dev/acpica/source/components/disassembler/dmnames.c index 255e0af643..ea1da15c12 100644 --- a/sys/contrib/dev/acpica/source/components/disassembler/dmnames.c +++ b/sys/contrib/dev/acpica/source/components/disassembler/dmnames.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/disassembler/dmopcode.c b/sys/contrib/dev/acpica/source/components/disassembler/dmopcode.c index 9baeadb15c..0b2b946b4e 100644 --- a/sys/contrib/dev/acpica/source/components/disassembler/dmopcode.c +++ b/sys/contrib/dev/acpica/source/components/disassembler/dmopcode.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/disassembler/dmresrc.c b/sys/contrib/dev/acpica/source/components/disassembler/dmresrc.c index 5ff7c38752..a89e2ee7c1 100644 --- a/sys/contrib/dev/acpica/source/components/disassembler/dmresrc.c +++ b/sys/contrib/dev/acpica/source/components/disassembler/dmresrc.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/disassembler/dmresrcl.c b/sys/contrib/dev/acpica/source/components/disassembler/dmresrcl.c index 195969c7e4..47d3c541a0 100644 --- a/sys/contrib/dev/acpica/source/components/disassembler/dmresrcl.c +++ b/sys/contrib/dev/acpica/source/components/disassembler/dmresrcl.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/disassembler/dmresrcl2.c b/sys/contrib/dev/acpica/source/components/disassembler/dmresrcl2.c index c660c265aa..27717c2aec 100644 --- a/sys/contrib/dev/acpica/source/components/disassembler/dmresrcl2.c +++ b/sys/contrib/dev/acpica/source/components/disassembler/dmresrcl2.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/disassembler/dmresrcs.c b/sys/contrib/dev/acpica/source/components/disassembler/dmresrcs.c index 46e6493a24..b631d75b01 100644 --- a/sys/contrib/dev/acpica/source/components/disassembler/dmresrcs.c +++ b/sys/contrib/dev/acpica/source/components/disassembler/dmresrcs.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/disassembler/dmutils.c b/sys/contrib/dev/acpica/source/components/disassembler/dmutils.c index 57d577cb89..4d1684dc1f 100644 --- a/sys/contrib/dev/acpica/source/components/disassembler/dmutils.c +++ b/sys/contrib/dev/acpica/source/components/disassembler/dmutils.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/disassembler/dmwalk.c b/sys/contrib/dev/acpica/source/components/disassembler/dmwalk.c index 20c767eb60..74f9dcfc4b 100644 --- a/sys/contrib/dev/acpica/source/components/disassembler/dmwalk.c +++ b/sys/contrib/dev/acpica/source/components/disassembler/dmwalk.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -529,7 +529,7 @@ AcpiDmDescendingOp ( /* Determine which file this parse node is contained in. */ - if (Gbl_CaptureComments) + if (AcpiGbl_CaptureComments) { ASL_CV_LABEL_FILENODE (Op); @@ -1048,7 +1048,7 @@ AcpiDmAscendingOp ( /* Point the Op's filename pointer to the proper file */ - if (Gbl_CaptureComments) + if (AcpiGbl_CaptureComments) { ASL_CV_LABEL_FILENODE (Op); @@ -1076,7 +1076,7 @@ AcpiDmAscendingOp ( /* Print any comments that are at the end of the file here */ - if (Gbl_CaptureComments && AcpiGbl_LastListHead) + if (AcpiGbl_CaptureComments && AcpiGbl_LastListHead) { AcpiOsPrintf ("\n"); ASL_CV_PRINT_ONE_COMMENT_LIST (AcpiGbl_LastListHead, 0); diff --git a/sys/contrib/dev/acpica/source/components/dispatcher/dsargs.c b/sys/contrib/dev/acpica/source/components/dispatcher/dsargs.c index 504005b30a..dd8c30f0f7 100644 --- a/sys/contrib/dev/acpica/source/components/dispatcher/dsargs.c +++ b/sys/contrib/dev/acpica/source/components/dispatcher/dsargs.c @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -481,6 +481,7 @@ AcpiDsGetPackageArguments ( Status = AcpiDsExecuteArguments (Node, Node, ObjDesc->Package.AmlLength, ObjDesc->Package.AmlStart); + return_ACPI_STATUS (Status); } diff --git a/sys/contrib/dev/acpica/source/components/dispatcher/dscontrol.c b/sys/contrib/dev/acpica/source/components/dispatcher/dscontrol.c index 897200a5ef..424ce35226 100644 --- a/sys/contrib/dev/acpica/source/components/dispatcher/dscontrol.c +++ b/sys/contrib/dev/acpica/source/components/dispatcher/dscontrol.c @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -234,7 +234,8 @@ AcpiDsExecBeginControlOp ( WalkState->ParserState.PkgEnd; ControlState->Control.Opcode = Op->Common.AmlOpcode; - + ControlState->Control.LoopTimeout = AcpiOsGetTimer () + + (UINT64) (AcpiGbl_MaxLoopIterations * ACPI_100NSEC_PER_SEC); /* Push the control state on this walk's control stack */ @@ -327,15 +328,15 @@ AcpiDsExecEndControlOp ( /* Predicate was true, the body of the loop was just executed */ /* - * This loop counter mechanism allows the interpreter to escape - * possibly infinite loops. This can occur in poorly written AML - * when the hardware does not respond within a while loop and the - * loop does not implement a timeout. + * This infinite loop detection mechanism allows the interpreter + * to escape possibly infinite loops. This can occur in poorly + * written AML when the hardware does not respond within a while + * loop and the loop does not implement a timeout. */ - ControlState->Control.LoopCount++; - if (ControlState->Control.LoopCount > AcpiGbl_MaxLoopIterations) + if (ACPI_TIME_AFTER (AcpiOsGetTimer (), + ControlState->Control.LoopTimeout)) { - Status = AE_AML_INFINITE_LOOP; + Status = AE_AML_LOOP_TIMEOUT; break; } diff --git a/sys/contrib/dev/acpica/source/components/dispatcher/dsdebug.c b/sys/contrib/dev/acpica/source/components/dispatcher/dsdebug.c index 4a0696a363..52208f8177 100644 --- a/sys/contrib/dev/acpica/source/components/dispatcher/dsdebug.c +++ b/sys/contrib/dev/acpica/source/components/dispatcher/dsdebug.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/dispatcher/dsfield.c b/sys/contrib/dev/acpica/source/components/dispatcher/dsfield.c index fe9d0605e5..df770c1c07 100644 --- a/sys/contrib/dev/acpica/source/components/dispatcher/dsfield.c +++ b/sys/contrib/dev/acpica/source/components/dispatcher/dsfield.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -340,7 +340,8 @@ AcpiDsCreateBufferField ( ACPI_IMODE_LOAD_PASS1, Flags, WalkState, &Node); if (ACPI_FAILURE (Status)) { - ACPI_ERROR_NAMESPACE (Arg->Common.Value.String, Status); + ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, + Arg->Common.Value.String, Status); return_ACPI_STATUS (Status); } } @@ -524,7 +525,8 @@ AcpiDsGetFieldNames ( WalkState, &Info->ConnectionNode); if (ACPI_FAILURE (Status)) { - ACPI_ERROR_NAMESPACE (Child->Common.Value.Name, Status); + ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, + Child->Common.Value.Name, Status); return_ACPI_STATUS (Status); } } @@ -540,7 +542,8 @@ AcpiDsGetFieldNames ( WalkState, &Info->FieldNode); if (ACPI_FAILURE (Status)) { - ACPI_ERROR_NAMESPACE ((char *) &Arg->Named.Name, Status); + ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, + (char *) &Arg->Named.Name, Status); return_ACPI_STATUS (Status); } else @@ -639,7 +642,8 @@ AcpiDsCreateField ( #endif if (ACPI_FAILURE (Status)) { - ACPI_ERROR_NAMESPACE (Arg->Common.Value.Name, Status); + ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, + Arg->Common.Value.Name, Status); return_ACPI_STATUS (Status); } } @@ -769,7 +773,8 @@ AcpiDsInitFieldObjects ( Flags, WalkState, &Node); if (ACPI_FAILURE (Status)) { - ACPI_ERROR_NAMESPACE ((char *) &Arg->Named.Name, Status); + ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, + (char *) &Arg->Named.Name, Status); if (Status != AE_ALREADY_EXISTS) { return_ACPI_STATUS (Status); @@ -834,7 +839,8 @@ AcpiDsCreateBankField ( #endif if (ACPI_FAILURE (Status)) { - ACPI_ERROR_NAMESPACE (Arg->Common.Value.Name, Status); + ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, + Arg->Common.Value.Name, Status); return_ACPI_STATUS (Status); } } @@ -847,7 +853,8 @@ AcpiDsCreateBankField ( ACPI_NS_SEARCH_PARENT, WalkState, &Info.RegisterNode); if (ACPI_FAILURE (Status)) { - ACPI_ERROR_NAMESPACE (Arg->Common.Value.String, Status); + ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, + Arg->Common.Value.String, Status); return_ACPI_STATUS (Status); } @@ -920,7 +927,8 @@ AcpiDsCreateIndexField ( ACPI_NS_SEARCH_PARENT, WalkState, &Info.RegisterNode); if (ACPI_FAILURE (Status)) { - ACPI_ERROR_NAMESPACE (Arg->Common.Value.String, Status); + ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, + Arg->Common.Value.String, Status); return_ACPI_STATUS (Status); } @@ -932,7 +940,8 @@ AcpiDsCreateIndexField ( ACPI_NS_SEARCH_PARENT, WalkState, &Info.DataRegisterNode); if (ACPI_FAILURE (Status)) { - ACPI_ERROR_NAMESPACE (Arg->Common.Value.String, Status); + ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, + Arg->Common.Value.String, Status); return_ACPI_STATUS (Status); } diff --git a/sys/contrib/dev/acpica/source/components/dispatcher/dsinit.c b/sys/contrib/dev/acpica/source/components/dispatcher/dsinit.c index e367311f3d..72b14771df 100644 --- a/sys/contrib/dev/acpica/source/components/dispatcher/dsinit.c +++ b/sys/contrib/dev/acpica/source/components/dispatcher/dsinit.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/dispatcher/dsmethod.c b/sys/contrib/dev/acpica/source/components/dispatcher/dsmethod.c index 79dff2c766..3db8010f73 100644 --- a/sys/contrib/dev/acpica/source/components/dispatcher/dsmethod.c +++ b/sys/contrib/dev/acpica/source/components/dispatcher/dsmethod.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/dispatcher/dsmthdat.c b/sys/contrib/dev/acpica/source/components/dispatcher/dsmthdat.c index 31304d00bb..044646d424 100644 --- a/sys/contrib/dev/acpica/source/components/dispatcher/dsmthdat.c +++ b/sys/contrib/dev/acpica/source/components/dispatcher/dsmthdat.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/dispatcher/dsobject.c b/sys/contrib/dev/acpica/source/components/dispatcher/dsobject.c index 4cbd8f7887..e9b7413a2f 100644 --- a/sys/contrib/dev/acpica/source/components/dispatcher/dsobject.c +++ b/sys/contrib/dev/acpica/source/components/dispatcher/dsobject.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -223,7 +223,8 @@ AcpiDsBuildInternalObject ( ACPI_NAMESPACE_NODE, &(Op->Common.Node))); if (ACPI_FAILURE (Status)) { - ACPI_ERROR_NAMESPACE (Op->Common.Value.String, Status); + ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, + Op->Common.Value.String, Status); return_ACPI_STATUS (Status); } } diff --git a/sys/contrib/dev/acpica/source/components/dispatcher/dsopcode.c b/sys/contrib/dev/acpica/source/components/dispatcher/dsopcode.c index 5ba414d344..038993c774 100644 --- a/sys/contrib/dev/acpica/source/components/dispatcher/dsopcode.c +++ b/sys/contrib/dev/acpica/source/components/dispatcher/dsopcode.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -752,8 +752,8 @@ AcpiDsEvalDataObjectOperands ( if (!Op->Common.Value.Arg) { ACPI_ERROR ((AE_INFO, - "Dispatch: Missing child while executing TermArg for %X", - Op->Common.AmlOpcode)); + "Missing child while evaluating opcode %4.4X, Op %p", + Op->Common.AmlOpcode, Op)); return_ACPI_STATUS (AE_OK); } diff --git a/sys/contrib/dev/acpica/source/components/dispatcher/dspkginit.c b/sys/contrib/dev/acpica/source/components/dispatcher/dspkginit.c index 14e34b0923..9e1cd6115f 100644 --- a/sys/contrib/dev/acpica/source/components/dispatcher/dspkginit.c +++ b/sys/contrib/dev/acpica/source/components/dispatcher/dspkginit.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -155,6 +155,7 @@ #include "amlcode.h" #include "acdispat.h" #include "acinterp.h" +#include "acparser.h" #define _COMPONENT ACPI_NAMESPACE @@ -208,6 +209,7 @@ AcpiDsBuildInternalPackageObj ( ACPI_PARSE_OBJECT *Parent; ACPI_OPERAND_OBJECT *ObjDesc = NULL; ACPI_STATUS Status = AE_OK; + BOOLEAN ModuleLevelCode = FALSE; UINT16 ReferenceCount; UINT32 Index; UINT32 i; @@ -216,6 +218,13 @@ AcpiDsBuildInternalPackageObj ( ACPI_FUNCTION_TRACE (DsBuildInternalPackageObj); + /* Check if we are executing module level code */ + + if (WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL) + { + ModuleLevelCode = TRUE; + } + /* Find the parent of a possibly nested package */ Parent = Op->Common.Parent; @@ -250,25 +259,43 @@ AcpiDsBuildInternalPackageObj ( /* * Allocate the element array (array of pointers to the individual - * objects) based on the NumElements parameter. Add an extra pointer slot - * so that the list is always null terminated. + * objects) if necessary. the count is based on the NumElements + * parameter. Add an extra pointer slot so that the list is always + * null terminated. */ - ObjDesc->Package.Elements = ACPI_ALLOCATE_ZEROED ( - ((ACPI_SIZE) ElementCount + 1) * sizeof (void *)); - if (!ObjDesc->Package.Elements) { - AcpiUtDeleteObjectDesc (ObjDesc); - return_ACPI_STATUS (AE_NO_MEMORY); + ObjDesc->Package.Elements = ACPI_ALLOCATE_ZEROED ( + ((ACPI_SIZE) ElementCount + 1) * sizeof (void *)); + + if (!ObjDesc->Package.Elements) + { + AcpiUtDeleteObjectDesc (ObjDesc); + return_ACPI_STATUS (AE_NO_MEMORY); + } + + ObjDesc->Package.Count = ElementCount; } - ObjDesc->Package.Count = ElementCount; + /* First arg is element count. Second arg begins the initializer list */ + Arg = Op->Common.Value.Arg; Arg = Arg->Common.Next; - if (Arg) + /* + * If we are executing module-level code, we will defer the + * full resolution of the package elements in order to support + * forward references from the elements. This provides + * compatibility with other ACPI implementations. + */ + if (ModuleLevelCode) { - ObjDesc->Package.Flags |= AOPOBJ_DATA_VALID; + ObjDesc->Package.AmlStart = WalkState->Aml; + ObjDesc->Package.AmlLength = 0; + + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_PARSE, + "%s: Deferring resolution of Package elements\n", + ACPI_GET_FUNCTION_NAME)); } /* @@ -308,12 +335,17 @@ AcpiDsBuildInternalPackageObj ( ACPI_ERROR ((AE_INFO, "%-48s", "****DS namepath not found")); } - /* - * Initialize this package element. This function handles the - * resolution of named references within the package. - */ - AcpiDsInitPackageElement (0, ObjDesc->Package.Elements[i], - NULL, &ObjDesc->Package.Elements[i]); + if (!ModuleLevelCode) + { + /* + * Initialize this package element. This function handles the + * resolution of named references within the package. + * Forward references from module-level code are deferred + * until all ACPI tables are loaded. + */ + AcpiDsInitPackageElement (0, ObjDesc->Package.Elements[i], + NULL, &ObjDesc->Package.Elements[i]); + } } if (*ObjDescPtr) @@ -383,15 +415,21 @@ AcpiDsBuildInternalPackageObj ( * NumElements count. * * Note: this is not an error, the package is padded out - * with NULLs. + * with NULLs as per the ACPI specification. */ - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "Package List length (%u) smaller than NumElements " + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, + "%s: Package List length (%u) smaller than NumElements " "count (%u), padded with null elements\n", - i, ElementCount)); + ACPI_GET_FUNCTION_NAME, i, ElementCount)); + } + + /* Module-level packages will be resolved later */ + + if (!ModuleLevelCode) + { + ObjDesc->Package.Flags |= AOPOBJ_DATA_VALID; } - ObjDesc->Package.Flags |= AOPOBJ_DATA_VALID; Op->Common.Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ObjDesc); return_ACPI_STATUS (Status); } @@ -419,9 +457,12 @@ AcpiDsInitPackageElement ( ACPI_OPERAND_OBJECT **ElementPtr; + ACPI_FUNCTION_TRACE (DsInitPackageElement); + + if (!SourceObject) { - return (AE_OK); + return_ACPI_STATUS (AE_OK); } /* @@ -456,7 +497,7 @@ AcpiDsInitPackageElement ( SourceObject->Package.Flags |= AOPOBJ_DATA_VALID; } - return (AE_OK); + return_ACPI_STATUS (AE_OK); } @@ -478,10 +519,12 @@ AcpiDsResolvePackageElement ( ACPI_OPERAND_OBJECT **ElementPtr) { ACPI_STATUS Status; + ACPI_STATUS Status2; ACPI_GENERIC_STATE ScopeInfo; ACPI_OPERAND_OBJECT *Element = *ElementPtr; ACPI_NAMESPACE_NODE *ResolvedNode; - char *ExternalPath = NULL; + ACPI_NAMESPACE_NODE *OriginalNode; + char *ExternalPath = ""; ACPI_OBJECT_TYPE Type; @@ -492,6 +535,10 @@ AcpiDsResolvePackageElement ( if (Element->Reference.Resolved) { + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_PARSE, + "%s: Package element is already resolved\n", + ACPI_GET_FUNCTION_NAME)); + return_VOID; } @@ -499,21 +546,47 @@ AcpiDsResolvePackageElement ( ScopeInfo.Scope.Node = Element->Reference.Node; /* Prefix node */ - Status = AcpiNsLookup (&ScopeInfo, - (char *) Element->Reference.Aml, /* Pointer to AML path */ + Status = AcpiNsLookup (&ScopeInfo, (char *) Element->Reference.Aml, ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE, NULL, &ResolvedNode); if (ACPI_FAILURE (Status)) { - Status = AcpiNsExternalizeName (ACPI_UINT32_MAX, - (char *) Element->Reference.Aml, - NULL, &ExternalPath); + if ((Status == AE_NOT_FOUND) && AcpiGbl_IgnorePackageResolutionErrors) + { + /* + * Optionally be silent about the NOT_FOUND case for the referenced + * name. Although this is potentially a serious problem, + * it can generate a lot of noise/errors on platforms whose + * firmware carries around a bunch of unused Package objects. + * To disable these errors, set this global to TRUE: + * AcpiGbl_IgnorePackageResolutionErrors + * + * If the AML actually tries to use such a package, the unresolved + * element(s) will be replaced with NULL elements. + */ + + /* Referenced name not found, set the element to NULL */ + + AcpiUtRemoveReference (*ElementPtr); + *ElementPtr = NULL; + return_VOID; + } + + Status2 = AcpiNsExternalizeName (ACPI_UINT32_MAX, + (char *) Element->Reference.Aml, NULL, &ExternalPath); ACPI_EXCEPTION ((AE_INFO, Status, - "Could not find/resolve named package element: %s", ExternalPath)); + "While resolving a named reference package element - %s", + ExternalPath)); + if (ACPI_SUCCESS (Status2)) + { + ACPI_FREE (ExternalPath); + } + + /* Could not resolve name, set the element to NULL */ - ACPI_FREE (ExternalPath); + AcpiUtRemoveReference (*ElementPtr); *ElementPtr = NULL; return_VOID; } @@ -527,24 +600,6 @@ AcpiDsResolvePackageElement ( *ElementPtr = NULL; return_VOID; } -#if 0 - else if (ResolvedNode->Flags & ANOBJ_TEMPORARY) - { - /* - * A temporary node found here indicates that the reference is - * to a node that was created within this method. We are not - * going to allow it (especially if the package is returned - * from the method) -- the temporary node will be deleted out - * from under the method. (05/2017). - */ - ACPI_ERROR ((AE_INFO, - "Package element refers to a temporary name [%4.4s], " - "inserting a NULL element", - ResolvedNode->Name.Ascii)); - *ElementPtr = NULL; - return_VOID; - } -#endif /* * Special handling for Alias objects. We need ResolvedNode to point @@ -576,28 +631,13 @@ AcpiDsResolvePackageElement ( * will remain as named references. This behavior is not described * in the ACPI spec, but it appears to be an oversight. */ + OriginalNode = ResolvedNode; Status = AcpiExResolveNodeToValue (&ResolvedNode, NULL); if (ACPI_FAILURE (Status)) { return_VOID; } -#if 0 -/* TBD - alias support */ - /* - * Special handling for Alias objects. We need to setup the type - * and the Op->Common.Node to point to the Alias target. Note, - * Alias has at most one level of indirection internally. - */ - Type = Op->Common.Node->Type; - if (Type == ACPI_TYPE_LOCAL_ALIAS) - { - Type = ObjDesc->Common.Type; - Op->Common.Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, - Op->Common.Node->Object); - } -#endif - switch (Type) { /* @@ -607,26 +647,27 @@ AcpiDsResolvePackageElement ( */ case ACPI_TYPE_DEVICE: case ACPI_TYPE_THERMAL: - - /* TBD: This may not be necesssary */ - - AcpiUtAddReference (ResolvedNode->Object); + case ACPI_TYPE_METHOD: break; case ACPI_TYPE_MUTEX: - case ACPI_TYPE_METHOD: case ACPI_TYPE_POWER: case ACPI_TYPE_PROCESSOR: case ACPI_TYPE_EVENT: case ACPI_TYPE_REGION: + /* AcpiExResolveNodeToValue gave these an extra reference */ + + AcpiUtRemoveReference (OriginalNode->Object); break; default: /* * For all other types - the node was resolved to an actual - * operand object with a value, return the object + * operand object with a value, return the object. Remove + * a reference on the existing object. */ + AcpiUtRemoveReference (Element); *ElementPtr = (ACPI_OPERAND_OBJECT *) ResolvedNode; break; } diff --git a/sys/contrib/dev/acpica/source/components/dispatcher/dsutils.c b/sys/contrib/dev/acpica/source/components/dispatcher/dsutils.c index 4688e16ec8..c03f9268f8 100644 --- a/sys/contrib/dev/acpica/source/components/dispatcher/dsutils.c +++ b/sys/contrib/dev/acpica/source/components/dispatcher/dsutils.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -732,7 +732,8 @@ AcpiDsCreateOperand ( if (ACPI_FAILURE (Status)) { - ACPI_ERROR_NAMESPACE (NameString, Status); + ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, + NameString, Status); } } diff --git a/sys/contrib/dev/acpica/source/components/dispatcher/dswexec.c b/sys/contrib/dev/acpica/source/components/dispatcher/dswexec.c index bbb9436a66..c39095f6c6 100644 --- a/sys/contrib/dev/acpica/source/components/dispatcher/dswexec.c +++ b/sys/contrib/dev/acpica/source/components/dispatcher/dswexec.c @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -723,8 +723,8 @@ AcpiDsExecEndOp ( case AML_TYPE_CREATE_OBJECT: ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Executing CreateObject (Buffer/Package) Op=%p AMLPtr=%p\n", - Op, Op->Named.Data)); + "Executing CreateObject (Buffer/Package) Op=%p Child=%p ParentOpcode=%4.4X\n", + Op, Op->Named.Value.Arg, Op->Common.Parent->Common.AmlOpcode)); switch (Op->Common.Parent->Common.AmlOpcode) { diff --git a/sys/contrib/dev/acpica/source/components/dispatcher/dswload.c b/sys/contrib/dev/acpica/source/components/dispatcher/dswload.c index 8793c0ed1c..91f5b30500 100644 --- a/sys/contrib/dev/acpica/source/components/dispatcher/dswload.c +++ b/sys/contrib/dev/acpica/source/components/dispatcher/dswload.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -264,7 +264,7 @@ AcpiDsLoad1BeginOp ( UINT32 Flags; - ACPI_FUNCTION_TRACE (DsLoad1BeginOp); + ACPI_FUNCTION_TRACE_PTR (DsLoad1BeginOp, WalkState->Op); Op = WalkState->Op; @@ -325,7 +325,7 @@ AcpiDsLoad1BeginOp ( #endif if (ACPI_FAILURE (Status)) { - ACPI_ERROR_NAMESPACE (Path, Status); + ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, Path, Status); return_ACPI_STATUS (Status); } @@ -495,7 +495,7 @@ AcpiDsLoad1BeginOp ( if (ACPI_FAILURE (Status)) { - ACPI_ERROR_NAMESPACE (Path, Status); + ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, Path, Status); return_ACPI_STATUS (Status); } } diff --git a/sys/contrib/dev/acpica/source/components/dispatcher/dswload2.c b/sys/contrib/dev/acpica/source/components/dispatcher/dswload2.c index 184f6aa367..9bc6ecfae6 100644 --- a/sys/contrib/dev/acpica/source/components/dispatcher/dswload2.c +++ b/sys/contrib/dev/acpica/source/components/dispatcher/dswload2.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -304,10 +304,12 @@ AcpiDsLoad2BeginOp ( } else { - ACPI_ERROR_NAMESPACE (BufferPtr, Status); + ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, + BufferPtr, Status); } #else - ACPI_ERROR_NAMESPACE (BufferPtr, Status); + ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, + BufferPtr, Status); #endif return_ACPI_STATUS (Status); } @@ -462,7 +464,8 @@ AcpiDsLoad2BeginOp ( if (ACPI_FAILURE (Status)) { - ACPI_ERROR_NAMESPACE (BufferPtr, Status); + ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, + BufferPtr, Status); return_ACPI_STATUS (Status); } @@ -844,7 +847,8 @@ AcpiDsLoad2EndOp ( } else { - ACPI_ERROR_NAMESPACE (Arg->Common.Value.String, Status); + ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, + Arg->Common.Value.String, Status); } break; diff --git a/sys/contrib/dev/acpica/source/components/dispatcher/dswscope.c b/sys/contrib/dev/acpica/source/components/dispatcher/dswscope.c index e3d2be21ac..36ff82054d 100644 --- a/sys/contrib/dev/acpica/source/components/dispatcher/dswscope.c +++ b/sys/contrib/dev/acpica/source/components/dispatcher/dswscope.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -269,8 +269,7 @@ AcpiDsScopeStackPush ( } else { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, - "[\\___] (%s)", "ROOT")); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, ACPI_NAMESPACE_ROOT)); } ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, @@ -328,15 +327,13 @@ AcpiDsScopeStackPop ( NewScopeInfo = WalkState->ScopeInfo; if (NewScopeInfo) { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, - "[%4.4s] (%s)\n", + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, "[%4.4s] (%s)\n", AcpiUtGetNodeName (NewScopeInfo->Scope.Node), AcpiUtGetTypeName (NewScopeInfo->Common.Value))); } else { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, - "[\\___] (ROOT)\n")); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, "%s\n", ACPI_NAMESPACE_ROOT)); } AcpiUtDeleteGenericState (ScopeInfo); diff --git a/sys/contrib/dev/acpica/source/components/dispatcher/dswstate.c b/sys/contrib/dev/acpica/source/components/dispatcher/dswstate.c index 18daa4eb34..7994cb12dd 100644 --- a/sys/contrib/dev/acpica/source/components/dispatcher/dswstate.c +++ b/sys/contrib/dev/acpica/source/components/dispatcher/dswstate.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/events/evevent.c b/sys/contrib/dev/acpica/source/components/events/evevent.c index 9ee4f9cee8..791ee57ebe 100644 --- a/sys/contrib/dev/acpica/source/components/events/evevent.c +++ b/sys/contrib/dev/acpica/source/components/events/evevent.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -344,6 +344,7 @@ AcpiEvFixedEventDetect ( UINT32 FixedStatus; UINT32 FixedEnable; UINT32 i; + ACPI_STATUS Status; ACPI_FUNCTION_NAME (EvFixedEventDetect); @@ -353,8 +354,12 @@ AcpiEvFixedEventDetect ( * Read the fixed feature status and enable registers, as all the cases * depend on their values. Ignore errors here. */ - (void) AcpiHwRegisterRead (ACPI_REGISTER_PM1_STATUS, &FixedStatus); - (void) AcpiHwRegisterRead (ACPI_REGISTER_PM1_ENABLE, &FixedEnable); + Status = AcpiHwRegisterRead (ACPI_REGISTER_PM1_STATUS, &FixedStatus); + Status |= AcpiHwRegisterRead (ACPI_REGISTER_PM1_ENABLE, &FixedEnable); + if (ACPI_FAILURE (Status)) + { + return (IntStatus); + } ACPI_DEBUG_PRINT ((ACPI_DB_INTERRUPTS, "Fixed Event Block: Enable %08X Status %08X\n", diff --git a/sys/contrib/dev/acpica/source/components/events/evglock.c b/sys/contrib/dev/acpica/source/components/events/evglock.c index 9222e781eb..8c7901e6b1 100644 --- a/sys/contrib/dev/acpica/source/components/events/evglock.c +++ b/sys/contrib/dev/acpica/source/components/events/evglock.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/events/evgpe.c b/sys/contrib/dev/acpica/source/components/events/evgpe.c index a00dc37862..415df720a1 100644 --- a/sys/contrib/dev/acpica/source/components/events/evgpe.c +++ b/sys/contrib/dev/acpica/source/components/events/evgpe.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -226,7 +226,7 @@ AcpiEvUpdateGpeEnableMask ( * * RETURN: Status * - * DESCRIPTION: Clear a GPE of stale events and enable it. + * DESCRIPTION: Enable a GPE. * ******************************************************************************/ @@ -240,14 +240,6 @@ AcpiEvEnableGpe ( ACPI_FUNCTION_TRACE (EvEnableGpe); - /* Clear the GPE (of stale events) */ - - Status = AcpiHwClearGpe (GpeEventInfo); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - /* Enable the requested GPE */ Status = AcpiHwLowSetGpe (GpeEventInfo, ACPI_GPE_ENABLE); @@ -542,17 +534,12 @@ UINT32 AcpiEvGpeDetect ( ACPI_GPE_XRUPT_INFO *GpeXruptList) { - ACPI_STATUS Status; ACPI_GPE_BLOCK_INFO *GpeBlock; ACPI_NAMESPACE_NODE *GpeDevice; ACPI_GPE_REGISTER_INFO *GpeRegisterInfo; ACPI_GPE_EVENT_INFO *GpeEventInfo; UINT32 GpeNumber; - ACPI_GPE_HANDLER_INFO *GpeHandlerInfo; UINT32 IntStatus = ACPI_INTERRUPT_NOT_HANDLED; - UINT8 EnabledStatusByte; - UINT64 StatusReg; - UINT64 EnableReg; ACPI_CPU_FLAGS Flags; UINT32 i; UINT32 j; @@ -608,105 +595,25 @@ AcpiEvGpeDetect ( continue; } - /* Read the Status Register */ - - Status = AcpiHwRead (&StatusReg, &GpeRegisterInfo->StatusAddress); - if (ACPI_FAILURE (Status)) - { - goto UnlockAndExit; - } - - /* Read the Enable Register */ - - Status = AcpiHwRead (&EnableReg, &GpeRegisterInfo->EnableAddress); - if (ACPI_FAILURE (Status)) - { - goto UnlockAndExit; - } - - ACPI_DEBUG_PRINT ((ACPI_DB_INTERRUPTS, - "Read registers for GPE %02X-%02X: Status=%02X, Enable=%02X, " - "RunEnable=%02X, WakeEnable=%02X\n", - GpeRegisterInfo->BaseGpeNumber, - GpeRegisterInfo->BaseGpeNumber + (ACPI_GPE_REGISTER_WIDTH - 1), - (UINT32) StatusReg, (UINT32) EnableReg, - GpeRegisterInfo->EnableForRun, - GpeRegisterInfo->EnableForWake)); - - /* Check if there is anything active at all in this register */ - - EnabledStatusByte = (UINT8) (StatusReg & EnableReg); - if (!EnabledStatusByte) - { - /* No active GPEs in this register, move on */ - - continue; - } - /* Now look at the individual GPEs in this byte register */ for (j = 0; j < ACPI_GPE_REGISTER_WIDTH; j++) { - /* Examine one GPE bit */ + /* Detect and dispatch one GPE bit */ GpeEventInfo = &GpeBlock->EventInfo[((ACPI_SIZE) i * ACPI_GPE_REGISTER_WIDTH) + j]; GpeNumber = j + GpeRegisterInfo->BaseGpeNumber; - - if (EnabledStatusByte & (1 << j)) - { - /* Invoke global event handler if present */ - - AcpiGpeCount++; - if (AcpiGbl_GlobalEventHandler) - { - AcpiGbl_GlobalEventHandler (ACPI_EVENT_TYPE_GPE, - GpeDevice, GpeNumber, - AcpiGbl_GlobalEventHandlerContext); - } - - /* Found an active GPE */ - - if (ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags) == - ACPI_GPE_DISPATCH_RAW_HANDLER) - { - /* Dispatch the event to a raw handler */ - - GpeHandlerInfo = GpeEventInfo->Dispatch.Handler; - - /* - * There is no protection around the namespace node - * and the GPE handler to ensure a safe destruction - * because: - * 1. The namespace node is expected to always - * exist after loading a table. - * 2. The GPE handler is expected to be flushed by - * AcpiOsWaitEventsComplete() before the - * destruction. - */ - AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); - IntStatus |= GpeHandlerInfo->Address ( - GpeDevice, GpeNumber, GpeHandlerInfo->Context); - Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); - } - else - { - /* - * Dispatch the event to a standard handler or - * method. - */ - IntStatus |= AcpiEvGpeDispatch (GpeDevice, - GpeEventInfo, GpeNumber); - } - } + AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); + IntStatus |= AcpiEvDetectGpe ( + GpeDevice, GpeEventInfo, GpeNumber); + Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); } } GpeBlock = GpeBlock->Next; } -UnlockAndExit: - AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); return (IntStatus); } @@ -894,6 +801,137 @@ AcpiEvFinishGpe ( /******************************************************************************* * + * FUNCTION: AcpiEvDetectGpe + * + * PARAMETERS: GpeDevice - Device node. NULL for GPE0/GPE1 + * GpeEventInfo - Info for this GPE + * GpeNumber - Number relative to the parent GPE block + * + * RETURN: INTERRUPT_HANDLED or INTERRUPT_NOT_HANDLED + * + * DESCRIPTION: Detect and dispatch a General Purpose Event to either a function + * (e.g. EC) or method (e.g. _Lxx/_Exx) handler. + * NOTE: GPE is W1C, so it is possible to handle a single GPE from both + * task and irq context in parallel as long as the process to + * detect and mask the GPE is atomic. + * However the atomicity of ACPI_GPE_DISPATCH_RAW_HANDLER is + * dependent on the raw handler itself. + * + ******************************************************************************/ + +UINT32 +AcpiEvDetectGpe ( + ACPI_NAMESPACE_NODE *GpeDevice, + ACPI_GPE_EVENT_INFO *GpeEventInfo, + UINT32 GpeNumber) +{ + UINT32 IntStatus = ACPI_INTERRUPT_NOT_HANDLED; + UINT8 EnabledStatusByte; + UINT64 StatusReg; + UINT64 EnableReg; + UINT32 RegisterBit; + ACPI_GPE_REGISTER_INFO *GpeRegisterInfo; + ACPI_GPE_HANDLER_INFO *GpeHandlerInfo; + ACPI_CPU_FLAGS Flags; + ACPI_STATUS Status; + + + ACPI_FUNCTION_TRACE (EvGpeDetect); + + + Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); + + /* Get the info block for the entire GPE register */ + + GpeRegisterInfo = GpeEventInfo->RegisterInfo; + + /* Get the register bitmask for this GPE */ + + RegisterBit = AcpiHwGetGpeRegisterBit (GpeEventInfo); + + /* GPE currently enabled (enable bit == 1)? */ + + Status = AcpiHwRead (&EnableReg, &GpeRegisterInfo->EnableAddress); + if (ACPI_FAILURE (Status)) + { + goto ErrorExit; + } + + /* GPE currently active (status bit == 1)? */ + + Status = AcpiHwRead (&StatusReg, &GpeRegisterInfo->StatusAddress); + if (ACPI_FAILURE (Status)) + { + goto ErrorExit; + } + + /* Check if there is anything active at all in this GPE */ + + ACPI_DEBUG_PRINT ((ACPI_DB_INTERRUPTS, + "Read registers for GPE %02X: Status=%02X, Enable=%02X, " + "RunEnable=%02X, WakeEnable=%02X\n", + GpeNumber, + (UINT32) (StatusReg & RegisterBit), + (UINT32) (EnableReg & RegisterBit), + GpeRegisterInfo->EnableForRun, + GpeRegisterInfo->EnableForWake)); + + EnabledStatusByte = (UINT8) (StatusReg & EnableReg); + if (!(EnabledStatusByte & RegisterBit)) + { + goto ErrorExit; + } + + /* Invoke global event handler if present */ + + AcpiGpeCount++; + if (AcpiGbl_GlobalEventHandler) + { + AcpiGbl_GlobalEventHandler (ACPI_EVENT_TYPE_GPE, + GpeDevice, GpeNumber, + AcpiGbl_GlobalEventHandlerContext); + } + + /* Found an active GPE */ + + if (ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags) == + ACPI_GPE_DISPATCH_RAW_HANDLER) + { + /* Dispatch the event to a raw handler */ + + GpeHandlerInfo = GpeEventInfo->Dispatch.Handler; + + /* + * There is no protection around the namespace node + * and the GPE handler to ensure a safe destruction + * because: + * 1. The namespace node is expected to always + * exist after loading a table. + * 2. The GPE handler is expected to be flushed by + * AcpiOsWaitEventsComplete() before the + * destruction. + */ + AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); + IntStatus |= GpeHandlerInfo->Address ( + GpeDevice, GpeNumber, GpeHandlerInfo->Context); + Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); + } + else + { + /* Dispatch the event to a standard handler or method. */ + + IntStatus |= AcpiEvGpeDispatch (GpeDevice, + GpeEventInfo, GpeNumber); + } + +ErrorExit: + AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); + return (IntStatus); +} + + +/******************************************************************************* + * * FUNCTION: AcpiEvGpeDispatch * * PARAMETERS: GpeDevice - Device node. NULL for GPE0/GPE1 @@ -905,8 +943,6 @@ AcpiEvFinishGpe ( * DESCRIPTION: Dispatch a General Purpose Event to either a function (e.g. EC) * or method (e.g. _Lxx/_Exx) handler. * - * This function executes at interrupt level. - * ******************************************************************************/ UINT32 diff --git a/sys/contrib/dev/acpica/source/components/events/evgpeblk.c b/sys/contrib/dev/acpica/source/components/events/evgpeblk.c index e7495368a8..442f494c45 100644 --- a/sys/contrib/dev/acpica/source/components/events/evgpeblk.c +++ b/sys/contrib/dev/acpica/source/components/events/evgpeblk.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -585,7 +585,7 @@ ACPI_STATUS AcpiEvInitializeGpeBlock ( ACPI_GPE_XRUPT_INFO *GpeXruptInfo, ACPI_GPE_BLOCK_INFO *GpeBlock, - void *Ignored) + void *Context) { ACPI_STATUS Status; ACPI_GPE_EVENT_INFO *GpeEventInfo; @@ -593,6 +593,8 @@ AcpiEvInitializeGpeBlock ( UINT32 GpeIndex; UINT32 i; UINT32 j; + BOOLEAN *IsPollingNeeded = Context; + ACPI_ERROR_ONLY (UINT32 GpeNumber); ACPI_FUNCTION_TRACE (EvInitializeGpeBlock); @@ -622,14 +624,14 @@ AcpiEvInitializeGpeBlock ( GpeIndex = (i * ACPI_GPE_REGISTER_WIDTH) + j; GpeEventInfo = &GpeBlock->EventInfo[GpeIndex]; + ACPI_ERROR_ONLY(GpeNumber = GpeBlock->BlockBaseNumber + GpeIndex); + GpeEventInfo->Flags |= ACPI_GPE_INITIALIZED; /* * Ignore GPEs that have no corresponding _Lxx/_Exx method * and GPEs that are used to wake the system */ - if ((ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags) == ACPI_GPE_DISPATCH_NONE) || - (ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags) == ACPI_GPE_DISPATCH_HANDLER) || - (ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags) == ACPI_GPE_DISPATCH_RAW_HANDLER) || + if ((ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags) != ACPI_GPE_DISPATCH_METHOD) || (GpeEventInfo->Flags & ACPI_GPE_CAN_WAKE)) { continue; @@ -640,10 +642,18 @@ AcpiEvInitializeGpeBlock ( { ACPI_EXCEPTION ((AE_INFO, Status, "Could not enable GPE 0x%02X", - GpeIndex + GpeBlock->BlockBaseNumber)); + GpeNumber)); continue; } + GpeEventInfo->Flags |= ACPI_GPE_AUTO_ENABLED; + + if (IsPollingNeeded && + ACPI_GPE_IS_POLLING_NEEDED (GpeEventInfo)) + { + *IsPollingNeeded = TRUE; + } + GpeEnabledCount++; } } diff --git a/sys/contrib/dev/acpica/source/components/events/evgpeinit.c b/sys/contrib/dev/acpica/source/components/events/evgpeinit.c index 39e8b8e331..124f80e326 100644 --- a/sys/contrib/dev/acpica/source/components/events/evgpeinit.c +++ b/sys/contrib/dev/acpica/source/components/events/evgpeinit.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/events/evgpeutil.c b/sys/contrib/dev/acpica/source/components/events/evgpeutil.c index aeeb4cf1dc..64c3786449 100644 --- a/sys/contrib/dev/acpica/source/components/events/evgpeutil.c +++ b/sys/contrib/dev/acpica/source/components/events/evgpeutil.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/events/evhandler.c b/sys/contrib/dev/acpica/source/components/events/evhandler.c index c2e35dd499..c4dca59a3f 100644 --- a/sys/contrib/dev/acpica/source/components/events/evhandler.c +++ b/sys/contrib/dev/acpica/source/components/events/evhandler.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/events/evmisc.c b/sys/contrib/dev/acpica/source/components/events/evmisc.c index e1aae4378e..4602c98c8e 100644 --- a/sys/contrib/dev/acpica/source/components/events/evmisc.c +++ b/sys/contrib/dev/acpica/source/components/events/evmisc.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/events/evregion.c b/sys/contrib/dev/acpica/source/components/events/evregion.c index 454b26e9ae..efc53d7b44 100644 --- a/sys/contrib/dev/acpica/source/components/events/evregion.c +++ b/sys/contrib/dev/acpica/source/components/events/evregion.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -423,6 +423,17 @@ AcpiEvAddressSpaceDispatch ( { ACPI_EXCEPTION ((AE_INFO, Status, "Returned by Handler for [%s]", AcpiUtGetRegionName (RegionObj->Region.SpaceId))); + + /* + * Special case for an EC timeout. These are seen so frequently + * that an additional error message is helpful + */ + if ((RegionObj->Region.SpaceId == ACPI_ADR_SPACE_EC) && + (Status == AE_TIME)) + { + ACPI_ERROR ((AE_INFO, + "Timeout from EC hardware or EC device driver")); + } } if (!(HandlerDesc->AddressSpace.HandlerFlags & diff --git a/sys/contrib/dev/acpica/source/components/events/evrgnini.c b/sys/contrib/dev/acpica/source/components/events/evrgnini.c index ad4bb20822..678b23ccf6 100644 --- a/sys/contrib/dev/acpica/source/components/events/evrgnini.c +++ b/sys/contrib/dev/acpica/source/components/events/evrgnini.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -736,9 +736,12 @@ AcpiEvInitializeRegion ( * Node's object was replaced by this Method object and we * saved the handler in the method object. * + * Note: Only used for the legacy MLC support. Will + * be removed in the future. + * * See AcpiNsExecModuleCode */ - if (!AcpiGbl_ParseTableAsTermList && + if (!AcpiGbl_ExecuteTablesAsMethods && ObjDesc->Method.InfoFlags & ACPI_METHOD_MODULE_LEVEL) { HandlerObj = ObjDesc->Method.Dispatch.Handler; diff --git a/sys/contrib/dev/acpica/source/components/events/evsci.c b/sys/contrib/dev/acpica/source/components/events/evsci.c index 748303650b..f9a5d9dfd5 100644 --- a/sys/contrib/dev/acpica/source/components/events/evsci.c +++ b/sys/contrib/dev/acpica/source/components/events/evsci.c @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/events/evxface.c b/sys/contrib/dev/acpica/source/components/events/evxface.c index fa8d85ce9d..ba5e9c45fe 100644 --- a/sys/contrib/dev/acpica/source/components/events/evxface.c +++ b/sys/contrib/dev/acpica/source/components/events/evxface.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -1257,6 +1257,15 @@ AcpiRemoveGpeHandler ( Handler->OriginallyEnabled) { (void) AcpiEvAddGpeReference (GpeEventInfo); + if (ACPI_GPE_IS_POLLING_NEEDED (GpeEventInfo)) + { + /* Poll edge triggered GPEs to handle existing events */ + + AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); + (void) AcpiEvDetectGpe ( + GpeDevice, GpeEventInfo, GpeNumber); + Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); + } } AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); diff --git a/sys/contrib/dev/acpica/source/components/events/evxfevnt.c b/sys/contrib/dev/acpica/source/components/events/evxfevnt.c index 0466273685..b6a8d46bc6 100644 --- a/sys/contrib/dev/acpica/source/components/events/evxfevnt.c +++ b/sys/contrib/dev/acpica/source/components/events/evxfevnt.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/events/evxfgpe.c b/sys/contrib/dev/acpica/source/components/events/evxfgpe.c index 61ac74ad0c..bd2a0e2863 100644 --- a/sys/contrib/dev/acpica/source/components/events/evxfgpe.c +++ b/sys/contrib/dev/acpica/source/components/events/evxfgpe.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -188,6 +188,7 @@ AcpiUpdateAllGpes ( void) { ACPI_STATUS Status; + BOOLEAN IsPollingNeeded = FALSE; ACPI_FUNCTION_TRACE (AcpiUpdateAllGpes); @@ -204,7 +205,8 @@ AcpiUpdateAllGpes ( goto UnlockAndExit; } - Status = AcpiEvWalkGpeList (AcpiEvInitializeGpeBlock, NULL); + Status = AcpiEvWalkGpeList (AcpiEvInitializeGpeBlock, + &IsPollingNeeded); if (ACPI_SUCCESS (Status)) { AcpiGbl_AllGpesInitialized = TRUE; @@ -212,6 +214,13 @@ AcpiUpdateAllGpes ( UnlockAndExit: (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); + + if (IsPollingNeeded && AcpiGbl_AllGpesInitialized) + { + /* Poll GPEs to handle already triggered events */ + + AcpiEvGpeDetect (AcpiGbl_GpeXruptListHead); + } return_ACPI_STATUS (Status); } @@ -259,6 +268,16 @@ AcpiEnableGpe ( ACPI_GPE_DISPATCH_NONE) { Status = AcpiEvAddGpeReference (GpeEventInfo); + if (ACPI_SUCCESS (Status) && + ACPI_GPE_IS_POLLING_NEEDED (GpeEventInfo)) + { + /* Poll edge-triggered GPEs to handle existing events */ + + AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); + (void) AcpiEvDetectGpe ( + GpeDevice, GpeEventInfo, GpeNumber); + Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); + } } else { @@ -609,6 +628,16 @@ AcpiSetupGpeForWake ( GpeEventInfo->Flags = (ACPI_GPE_DISPATCH_NOTIFY | ACPI_GPE_LEVEL_TRIGGERED); } + else if (GpeEventInfo->Flags & ACPI_GPE_AUTO_ENABLED) + { + /* + * A reference to this GPE has been added during the GPE block + * initialization, so drop it now to prevent the GPE from being + * permanently enabled and clear its ACPI_GPE_AUTO_ENABLED flag. + */ + (void) AcpiEvRemoveGpeReference (GpeEventInfo); + GpeEventInfo->Flags &= ~~ACPI_GPE_AUTO_ENABLED; + } /* * If we already have an implicit notify on this GPE, add diff --git a/sys/contrib/dev/acpica/source/components/events/evxfregn.c b/sys/contrib/dev/acpica/source/components/events/evxfregn.c index f47658bf4a..f0d4c3ce8e 100644 --- a/sys/contrib/dev/acpica/source/components/events/evxfregn.c +++ b/sys/contrib/dev/acpica/source/components/events/evxfregn.c @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/executer/exconcat.c b/sys/contrib/dev/acpica/source/components/executer/exconcat.c index 67d592cd54..950c6656e1 100644 --- a/sys/contrib/dev/acpica/source/components/executer/exconcat.c +++ b/sys/contrib/dev/acpica/source/components/executer/exconcat.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/executer/exconfig.c b/sys/contrib/dev/acpica/source/components/executer/exconfig.c index 4ecbabbf0c..590d83661a 100644 --- a/sys/contrib/dev/acpica/source/components/executer/exconfig.c +++ b/sys/contrib/dev/acpica/source/components/executer/exconfig.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -342,6 +342,11 @@ AcpiExLoadTableOp ( return_ACPI_STATUS (Status); } + /* Complete the initialization/resolution of package objects */ + + Status = AcpiNsWalkNamespace (ACPI_TYPE_PACKAGE, ACPI_ROOT_OBJECT, + ACPI_UINT32_MAX, 0, AcpiNsInitOnePackage, NULL, NULL, NULL); + /* Parameter Data (optional) */ if (ParameterNode) @@ -615,6 +620,11 @@ AcpiExLoadOp ( return_ACPI_STATUS (Status); } + /* Complete the initialization/resolution of package objects */ + + Status = AcpiNsWalkNamespace (ACPI_TYPE_PACKAGE, ACPI_ROOT_OBJECT, + ACPI_UINT32_MAX, 0, AcpiNsInitOnePackage, NULL, NULL, NULL); + /* Store the DdbHandle into the Target operand */ Status = AcpiExStore (DdbHandle, Target, WalkState); diff --git a/sys/contrib/dev/acpica/source/components/executer/exconvrt.c b/sys/contrib/dev/acpica/source/components/executer/exconvrt.c index 8577a45e14..5c58746e3a 100644 --- a/sys/contrib/dev/acpica/source/components/executer/exconvrt.c +++ b/sys/contrib/dev/acpica/source/components/executer/exconvrt.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -757,6 +757,7 @@ AcpiExConvertToTargetType ( switch (GET_CURRENT_ARG_TYPE (WalkState->OpInfo->RuntimeArgs)) { case ARGI_SIMPLE_TARGET: + case ARGI_FIXED_TARGET: case ARGI_INTEGER_REF: /* Handles Increment, Decrement cases */ switch (DestinationType) diff --git a/sys/contrib/dev/acpica/source/components/executer/excreate.c b/sys/contrib/dev/acpica/source/components/executer/excreate.c index a2cce00ac8..524960c2f5 100644 --- a/sys/contrib/dev/acpica/source/components/executer/excreate.c +++ b/sys/contrib/dev/acpica/source/components/executer/excreate.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/executer/exdebug.c b/sys/contrib/dev/acpica/source/components/executer/exdebug.c index 155f2c0d48..b471cfcc8c 100644 --- a/sys/contrib/dev/acpica/source/components/executer/exdebug.c +++ b/sys/contrib/dev/acpica/source/components/executer/exdebug.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -204,15 +204,14 @@ AcpiExDoDebugObject ( return_VOID; } - /* Null string or newline -- don't emit the line header */ + /* Newline -- don't emit the line header */ if (SourceDesc && (ACPI_GET_DESCRIPTOR_TYPE (SourceDesc) == ACPI_DESC_TYPE_OPERAND) && (SourceDesc->Common.Type == ACPI_TYPE_STRING)) { - if ((SourceDesc->String.Length == 0) || - ((SourceDesc->String.Length == 1) && - (*SourceDesc->String.Pointer == '\n'))) + if ((SourceDesc->String.Length == 1) && + (*SourceDesc->String.Pointer == '\n')) { AcpiOsPrintf ("\n"); return_VOID; diff --git a/sys/contrib/dev/acpica/source/components/executer/exdump.c b/sys/contrib/dev/acpica/source/components/executer/exdump.c index c1069b2c9f..10863332e1 100644 --- a/sys/contrib/dev/acpica/source/components/executer/exdump.c +++ b/sys/contrib/dev/acpica/source/components/executer/exdump.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -747,7 +747,7 @@ AcpiExDumpOperand ( UINT32 Index; - ACPI_FUNCTION_NAME (ExDumpOperand) + ACPI_FUNCTION_NAME (ExDumpOperand); /* Check if debug output enabled */ @@ -1042,7 +1042,7 @@ AcpiExDumpOperands ( const char *OpcodeName, UINT32 NumOperands) { - ACPI_FUNCTION_NAME (ExDumpOperands); + ACPI_FUNCTION_TRACE (ExDumpOperands); if (!OpcodeName) @@ -1070,7 +1070,7 @@ AcpiExDumpOperands ( ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "**** End operand dump for [%s]\n", OpcodeName)); - return; + return_VOID; } diff --git a/sys/contrib/dev/acpica/source/components/executer/exfield.c b/sys/contrib/dev/acpica/source/components/executer/exfield.c index 149ba064ad..a95d161d44 100644 --- a/sys/contrib/dev/acpica/source/components/executer/exfield.c +++ b/sys/contrib/dev/acpica/source/components/executer/exfield.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/executer/exfldio.c b/sys/contrib/dev/acpica/source/components/executer/exfldio.c index 23c2dcd108..a20b3b69e3 100644 --- a/sys/contrib/dev/acpica/source/components/executer/exfldio.c +++ b/sys/contrib/dev/acpica/source/components/executer/exfldio.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/executer/exmisc.c b/sys/contrib/dev/acpica/source/components/executer/exmisc.c index 8e92f7a04f..502a4688c9 100644 --- a/sys/contrib/dev/acpica/source/components/executer/exmisc.c +++ b/sys/contrib/dev/acpica/source/components/executer/exmisc.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/executer/exmutex.c b/sys/contrib/dev/acpica/source/components/executer/exmutex.c index bc827c1e01..a133d05f02 100644 --- a/sys/contrib/dev/acpica/source/components/executer/exmutex.c +++ b/sys/contrib/dev/acpica/source/components/executer/exmutex.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/executer/exnames.c b/sys/contrib/dev/acpica/source/components/executer/exnames.c index 8fabc07bc8..ce000e5d0c 100644 --- a/sys/contrib/dev/acpica/source/components/executer/exnames.c +++ b/sys/contrib/dev/acpica/source/components/executer/exnames.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -309,14 +309,11 @@ AcpiExNameSegment ( return_ACPI_STATUS (AE_CTRL_PENDING); } - ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "Bytes from stream:\n")); - for (Index = 0; (Index < ACPI_NAME_SIZE) && (AcpiUtValidNameChar (*AmlAddress, 0)); Index++) { CharBuf[Index] = *AmlAddress++; - ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "%c\n", CharBuf[Index])); } @@ -330,9 +327,9 @@ AcpiExNameSegment ( if (NameString) { - strcat (NameString, CharBuf); ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, - "Appended to - %s\n", NameString)); + "Appending NameSeg %s\n", CharBuf)); + strcat (NameString, CharBuf); } else { diff --git a/sys/contrib/dev/acpica/source/components/executer/exoparg1.c b/sys/contrib/dev/acpica/source/components/executer/exoparg1.c index 5d59276be8..0a9e21a07e 100644 --- a/sys/contrib/dev/acpica/source/components/executer/exoparg1.c +++ b/sys/contrib/dev/acpica/source/components/executer/exoparg1.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/executer/exoparg2.c b/sys/contrib/dev/acpica/source/components/executer/exoparg2.c index f4bf9c17d7..73d0bd26cc 100644 --- a/sys/contrib/dev/acpica/source/components/executer/exoparg2.c +++ b/sys/contrib/dev/acpica/source/components/executer/exoparg2.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/executer/exoparg3.c b/sys/contrib/dev/acpica/source/components/executer/exoparg3.c index b79277daa8..9454773fc1 100644 --- a/sys/contrib/dev/acpica/source/components/executer/exoparg3.c +++ b/sys/contrib/dev/acpica/source/components/executer/exoparg3.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/executer/exoparg6.c b/sys/contrib/dev/acpica/source/components/executer/exoparg6.c index e414a20505..b53ef63753 100644 --- a/sys/contrib/dev/acpica/source/components/executer/exoparg6.c +++ b/sys/contrib/dev/acpica/source/components/executer/exoparg6.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/executer/exprep.c b/sys/contrib/dev/acpica/source/components/executer/exprep.c index 346e658e35..c99cd0d5c5 100644 --- a/sys/contrib/dev/acpica/source/components/executer/exprep.c +++ b/sys/contrib/dev/acpica/source/components/executer/exprep.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/executer/exregion.c b/sys/contrib/dev/acpica/source/components/executer/exregion.c index 1bdc19bc7c..da5ce84b8c 100644 --- a/sys/contrib/dev/acpica/source/components/executer/exregion.c +++ b/sys/contrib/dev/acpica/source/components/executer/exregion.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/executer/exresnte.c b/sys/contrib/dev/acpica/source/components/executer/exresnte.c index c6fe97131f..17834bcc01 100644 --- a/sys/contrib/dev/acpica/source/components/executer/exresnte.c +++ b/sys/contrib/dev/acpica/source/components/executer/exresnte.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/executer/exresolv.c b/sys/contrib/dev/acpica/source/components/executer/exresolv.c index 64771922d9..8e34930b0f 100644 --- a/sys/contrib/dev/acpica/source/components/executer/exresolv.c +++ b/sys/contrib/dev/acpica/source/components/executer/exresolv.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/executer/exresop.c b/sys/contrib/dev/acpica/source/components/executer/exresop.c index e33608c2f7..7fd2453514 100644 --- a/sys/contrib/dev/acpica/source/components/executer/exresop.c +++ b/sys/contrib/dev/acpica/source/components/executer/exresop.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -429,6 +429,7 @@ AcpiExResolveOperands ( case ARGI_OBJECT_REF: case ARGI_DEVICE_REF: case ARGI_TARGETREF: /* Allows implicit conversion rules before store */ + case ARGI_FIXED_TARGET: /* No implicit conversion before store to target */ case ARGI_SIMPLE_TARGET: /* Name, Local, or Arg - no implicit conversion */ case ARGI_STORE_TARGET: diff --git a/sys/contrib/dev/acpica/source/components/executer/exstore.c b/sys/contrib/dev/acpica/source/components/executer/exstore.c index a533aafd02..b703a5a30e 100644 --- a/sys/contrib/dev/acpica/source/components/executer/exstore.c +++ b/sys/contrib/dev/acpica/source/components/executer/exstore.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/executer/exstoren.c b/sys/contrib/dev/acpica/source/components/executer/exstoren.c index ede0abb46c..a1999994da 100644 --- a/sys/contrib/dev/acpica/source/components/executer/exstoren.c +++ b/sys/contrib/dev/acpica/source/components/executer/exstoren.c @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/executer/exstorob.c b/sys/contrib/dev/acpica/source/components/executer/exstorob.c index 3c39859c4b..68a704fc6a 100644 --- a/sys/contrib/dev/acpica/source/components/executer/exstorob.c +++ b/sys/contrib/dev/acpica/source/components/executer/exstorob.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/executer/exsystem.c b/sys/contrib/dev/acpica/source/components/executer/exsystem.c index 1e565743d6..cec31fed8a 100644 --- a/sys/contrib/dev/acpica/source/components/executer/exsystem.c +++ b/sys/contrib/dev/acpica/source/components/executer/exsystem.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/executer/extrace.c b/sys/contrib/dev/acpica/source/components/executer/extrace.c index 3eca4e0a29..0bfc244cfd 100644 --- a/sys/contrib/dev/acpica/source/components/executer/extrace.c +++ b/sys/contrib/dev/acpica/source/components/executer/extrace.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/executer/exutils.c b/sys/contrib/dev/acpica/source/components/executer/exutils.c index e1d5222ef0..a38ce940c4 100644 --- a/sys/contrib/dev/acpica/source/components/executer/exutils.c +++ b/sys/contrib/dev/acpica/source/components/executer/exutils.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/hardware/hwacpi.c b/sys/contrib/dev/acpica/source/components/hardware/hwacpi.c index ee9b7d820d..f500d27355 100644 --- a/sys/contrib/dev/acpica/source/components/hardware/hwacpi.c +++ b/sys/contrib/dev/acpica/source/components/hardware/hwacpi.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/hardware/hwesleep.c b/sys/contrib/dev/acpica/source/components/hardware/hwesleep.c index 61eadfeb84..e8d9b520f8 100644 --- a/sys/contrib/dev/acpica/source/components/hardware/hwesleep.c +++ b/sys/contrib/dev/acpica/source/components/hardware/hwesleep.c @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/hardware/hwgpe.c b/sys/contrib/dev/acpica/source/components/hardware/hwgpe.c index 636639be03..581fcb9996 100644 --- a/sys/contrib/dev/acpica/source/components/hardware/hwgpe.c +++ b/sys/contrib/dev/acpica/source/components/hardware/hwgpe.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -658,7 +658,6 @@ AcpiHwDisableAllGpes ( Status = AcpiEvWalkGpeList (AcpiHwDisableGpeBlock, NULL); - Status = AcpiEvWalkGpeList (AcpiHwClearGpeBlock, NULL); return_ACPI_STATUS (Status); } diff --git a/sys/contrib/dev/acpica/source/components/hardware/hwpci.c b/sys/contrib/dev/acpica/source/components/hardware/hwpci.c index ab8dec42e6..eb47f5d8bd 100644 --- a/sys/contrib/dev/acpica/source/components/hardware/hwpci.c +++ b/sys/contrib/dev/acpica/source/components/hardware/hwpci.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/hardware/hwregs.c b/sys/contrib/dev/acpica/source/components/hardware/hwregs.c index cd8e774a97..c0deed3397 100644 --- a/sys/contrib/dev/acpica/source/components/hardware/hwregs.c +++ b/sys/contrib/dev/acpica/source/components/hardware/hwregs.c @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/hardware/hwsleep.c b/sys/contrib/dev/acpica/source/components/hardware/hwsleep.c index a004b4e04e..fe111872ce 100644 --- a/sys/contrib/dev/acpica/source/components/hardware/hwsleep.c +++ b/sys/contrib/dev/acpica/source/components/hardware/hwsleep.c @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -198,16 +198,8 @@ AcpiHwLegacySleep ( return_ACPI_STATUS (Status); } - /* Clear all fixed and general purpose status bits */ - - Status = AcpiHwClearAcpiStatus (); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - /* - * 1) Disable/Clear all GPEs + * 1) Disable all GPEs * 2) Enable all wakeup GPEs */ Status = AcpiHwDisableAllGpes (); @@ -427,7 +419,7 @@ AcpiHwLegacyWake ( * might get fired there * * Restore the GPEs: - * 1) Disable/Clear all GPEs + * 1) Disable all GPEs * 2) Enable all runtime GPEs */ Status = AcpiHwDisableAllGpes (); diff --git a/sys/contrib/dev/acpica/source/components/hardware/hwtimer.c b/sys/contrib/dev/acpica/source/components/hardware/hwtimer.c index 358164ee8a..64e36be5aa 100644 --- a/sys/contrib/dev/acpica/source/components/hardware/hwtimer.c +++ b/sys/contrib/dev/acpica/source/components/hardware/hwtimer.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -283,7 +283,7 @@ AcpiGetTimerDuration ( UINT32 *TimeElapsed) { ACPI_STATUS Status; - UINT32 DeltaTicks; + UINT64 DeltaTicks; UINT64 Quotient; @@ -302,34 +302,33 @@ AcpiGetTimerDuration ( return_ACPI_STATUS (AE_SUPPORT); } + if (StartTicks == EndTicks) + { + *TimeElapsed = 0; + return_ACPI_STATUS (AE_OK); + } + /* * Compute Tick Delta: * Handle (max one) timer rollovers on 24-bit versus 32-bit timers. */ - if (StartTicks < EndTicks) - { - DeltaTicks = EndTicks - StartTicks; - } - else if (StartTicks > EndTicks) + DeltaTicks = EndTicks; + if (StartTicks > EndTicks) { if ((AcpiGbl_FADT.Flags & ACPI_FADT_32BIT_TIMER) == 0) { /* 24-bit Timer */ - DeltaTicks = (((0x00FFFFFF - StartTicks) + EndTicks) & 0x00FFFFFF); + DeltaTicks |= (UINT64) 1 << 24; } else { /* 32-bit Timer */ - DeltaTicks = (0xFFFFFFFF - StartTicks) + EndTicks; + DeltaTicks |= (UINT64) 1 << 32; } } - else /* StartTicks == EndTicks */ - { - *TimeElapsed = 0; - return_ACPI_STATUS (AE_OK); - } + DeltaTicks -= StartTicks; /* * Compute Duration (Requires a 64-bit multiply and divide): @@ -337,7 +336,7 @@ AcpiGetTimerDuration ( * TimeElapsed (microseconds) = * (DeltaTicks * ACPI_USEC_PER_SEC) / ACPI_PM_TIMER_FREQUENCY; */ - Status = AcpiUtShortDivide (((UINT64) DeltaTicks) * ACPI_USEC_PER_SEC, + Status = AcpiUtShortDivide (DeltaTicks * ACPI_USEC_PER_SEC, ACPI_PM_TIMER_FREQUENCY, &Quotient, NULL); *TimeElapsed = (UINT32) Quotient; diff --git a/sys/contrib/dev/acpica/source/components/hardware/hwvalid.c b/sys/contrib/dev/acpica/source/components/hardware/hwvalid.c index 0d41dd13cb..b6581c736d 100644 --- a/sys/contrib/dev/acpica/source/components/hardware/hwvalid.c +++ b/sys/contrib/dev/acpica/source/components/hardware/hwvalid.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -245,7 +245,7 @@ AcpiHwValidateIoRequest ( const ACPI_PORT_INFO *PortInfo; - ACPI_FUNCTION_NAME (HwValidateIoRequest); + ACPI_FUNCTION_TRACE (HwValidateIoRequest); /* Supported widths are 8/16/32 */ @@ -256,14 +256,15 @@ AcpiHwValidateIoRequest ( { ACPI_ERROR ((AE_INFO, "Bad BitWidth parameter: %8.8X", BitWidth)); - return (AE_BAD_PARAMETER); + return_ACPI_STATUS (AE_BAD_PARAMETER); } PortInfo = AcpiProtectedPorts; ByteWidth = ACPI_DIV_8 (BitWidth); LastAddress = Address + ByteWidth - 1; - ACPI_DEBUG_PRINT ((ACPI_DB_IO, "Address %8.8X%8.8X LastAddress %8.8X%8.8X Length %X", + ACPI_DEBUG_PRINT ((ACPI_DB_IO, + "Address %8.8X%8.8X LastAddress %8.8X%8.8X Length %X", ACPI_FORMAT_UINT64 (Address), ACPI_FORMAT_UINT64 (LastAddress), ByteWidth)); @@ -274,14 +275,14 @@ AcpiHwValidateIoRequest ( ACPI_ERROR ((AE_INFO, "Illegal I/O port address/length above 64K: %8.8X%8.8X/0x%X", ACPI_FORMAT_UINT64 (Address), ByteWidth)); - return (AE_LIMIT); + return_ACPI_STATUS (AE_LIMIT); } /* Exit if requested address is not within the protected port table */ if (Address > AcpiProtectedPorts[ACPI_PORT_INFO_ENTRIES - 1].End) { - return (AE_OK); + return_ACPI_STATUS (AE_OK); } /* Check request against the list of protected I/O ports */ @@ -303,8 +304,8 @@ AcpiHwValidateIoRequest ( if (AcpiGbl_OsiData >= PortInfo->OsiDependency) { - ACPI_DEBUG_PRINT ((ACPI_DB_IO, - "Denied AML access to port 0x%8.8X%8.8X/%X (%s 0x%.4X-0x%.4X)", + ACPI_DEBUG_PRINT ((ACPI_DB_VALUES, + "Denied AML access to port 0x%8.8X%8.8X/%X (%s 0x%.4X-0x%.4X)\n", ACPI_FORMAT_UINT64 (Address), ByteWidth, PortInfo->Name, PortInfo->Start, PortInfo->End)); @@ -320,7 +321,7 @@ AcpiHwValidateIoRequest ( } } - return (AE_OK); + return_ACPI_STATUS (AE_OK); } diff --git a/sys/contrib/dev/acpica/source/components/hardware/hwxface.c b/sys/contrib/dev/acpica/source/components/hardware/hwxface.c index 49a19e458c..48668320fc 100644 --- a/sys/contrib/dev/acpica/source/components/hardware/hwxface.c +++ b/sys/contrib/dev/acpica/source/components/hardware/hwxface.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/hardware/hwxfsleep.c b/sys/contrib/dev/acpica/source/components/hardware/hwxfsleep.c index c9d445fd98..8ebb8c1d22 100644 --- a/sys/contrib/dev/acpica/source/components/hardware/hwxfsleep.c +++ b/sys/contrib/dev/acpica/source/components/hardware/hwxfsleep.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -337,7 +337,7 @@ AcpiEnterSleepStateS4bios ( } /* - * 1) Disable/Clear all GPEs + * 1) Disable all GPEs * 2) Enable all wakeup GPEs */ Status = AcpiHwDisableAllGpes (); diff --git a/sys/contrib/dev/acpica/source/components/namespace/nsaccess.c b/sys/contrib/dev/acpica/source/components/namespace/nsaccess.c index 0ae1fbdd08..d084c6fedc 100644 --- a/sys/contrib/dev/acpica/source/components/namespace/nsaccess.c +++ b/sys/contrib/dev/acpica/source/components/namespace/nsaccess.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -775,19 +775,19 @@ AcpiNsLookup ( ThisNode = (ACPI_NAMESPACE_NODE *) ThisNode->Object; } } -#ifdef ACPI_ASL_COMPILER - if (!AcpiGbl_DisasmFlag && - (ThisNode->Flags & ANOBJ_IS_EXTERNAL)) - { - ThisNode->Flags |= IMPLICIT_EXTERNAL; - } -#endif } /* Special handling for the last segment (NumSegments == 0) */ else { +#ifdef ACPI_ASL_COMPILER + if (!AcpiGbl_DisasmFlag && (ThisNode->Flags & ANOBJ_IS_EXTERNAL)) + { + ThisNode->Flags &= ~IMPLICIT_EXTERNAL; + } +#endif + /* * Sanity typecheck of the target object: * diff --git a/sys/contrib/dev/acpica/source/components/namespace/nsalloc.c b/sys/contrib/dev/acpica/source/components/namespace/nsalloc.c index e65f89edf1..9219dc21e9 100644 --- a/sys/contrib/dev/acpica/source/components/namespace/nsalloc.c +++ b/sys/contrib/dev/acpica/source/components/namespace/nsalloc.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/namespace/nsarguments.c b/sys/contrib/dev/acpica/source/components/namespace/nsarguments.c index 0a7fa3d9de..c21b8ac691 100644 --- a/sys/contrib/dev/acpica/source/components/namespace/nsarguments.c +++ b/sys/contrib/dev/acpica/source/components/namespace/nsarguments.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/namespace/nsconvert.c b/sys/contrib/dev/acpica/source/components/namespace/nsconvert.c index bb825895b4..f5339816b0 100644 --- a/sys/contrib/dev/acpica/source/components/namespace/nsconvert.c +++ b/sys/contrib/dev/acpica/source/components/namespace/nsconvert.c @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -644,7 +644,8 @@ AcpiNsConvertToReference ( { /* Check if we are resolving a named reference within a package */ - ACPI_ERROR_NAMESPACE (OriginalObject->String.Pointer, Status); + ACPI_ERROR_NAMESPACE (&ScopeInfo, + OriginalObject->String.Pointer, Status); goto ErrorExit; } diff --git a/sys/contrib/dev/acpica/source/components/namespace/nsdump.c b/sys/contrib/dev/acpica/source/components/namespace/nsdump.c index dbfcd1930c..b1e72f5db6 100644 --- a/sys/contrib/dev/acpica/source/components/namespace/nsdump.c +++ b/sys/contrib/dev/acpica/source/components/namespace/nsdump.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/namespace/nsdumpdv.c b/sys/contrib/dev/acpica/source/components/namespace/nsdumpdv.c index 5c41fec463..6ab5ba5214 100644 --- a/sys/contrib/dev/acpica/source/components/namespace/nsdumpdv.c +++ b/sys/contrib/dev/acpica/source/components/namespace/nsdumpdv.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -208,9 +208,8 @@ AcpiNsDumpOneDevice ( } ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, - " HID: %s, ADR: %8.8X%8.8X, Status: %X\n", - Info->HardwareId.Value, ACPI_FORMAT_UINT64 (Info->Address), - Info->CurrentStatus)); + " HID: %s, ADR: %8.8X%8.8X\n", + Info->HardwareId.Value, ACPI_FORMAT_UINT64 (Info->Address))); ACPI_FREE (Info); } diff --git a/sys/contrib/dev/acpica/source/components/namespace/nseval.c b/sys/contrib/dev/acpica/source/components/namespace/nseval.c index 97423e8179..2a7eb8f595 100644 --- a/sys/contrib/dev/acpica/source/components/namespace/nseval.c +++ b/sys/contrib/dev/acpica/source/components/namespace/nseval.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -308,6 +308,7 @@ AcpiNsEvaluate ( */ switch (AcpiNsGetType (Info->Node)) { + case ACPI_TYPE_ANY: case ACPI_TYPE_DEVICE: case ACPI_TYPE_EVENT: case ACPI_TYPE_MUTEX: @@ -315,13 +316,13 @@ AcpiNsEvaluate ( case ACPI_TYPE_THERMAL: case ACPI_TYPE_LOCAL_SCOPE: /* - * 1) Disallow evaluation of certain object types. For these, - * object evaluation is undefined and not supported. + * 1) Disallow evaluation of these object types. For these, + * object evaluation is undefined. */ ACPI_ERROR ((AE_INFO, - "%s: Evaluation of object type [%s] is not supported", - Info->FullPathname, - AcpiUtGetTypeName (Info->Node->Type))); + "%s: This object type [%s] " + "never contains data and cannot be evaluated", + Info->FullPathname, AcpiUtGetTypeName (Info->Node->Type))); Status = AE_TYPE; goto Cleanup; @@ -428,6 +429,16 @@ AcpiNsEvaluate ( Status = AE_OK; } + else if (ACPI_FAILURE(Status)) + { + /* If ReturnObject exists, delete it */ + + if (Info->ReturnObject) + { + AcpiUtRemoveReference (Info->ReturnObject); + Info->ReturnObject = NULL; + } + } ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "*** Completed evaluation of object %s ***\n", @@ -456,6 +467,17 @@ Cleanup: * DESCRIPTION: Execute all elements of the global module-level code list. * Each element is executed as a single control method. * + * NOTE: With this option enabled, each block of detected executable AML + * code that is outside of any control method is wrapped with a temporary + * control method object and placed on a global list. The methods on this + * list are executed below. + * + * This function executes the module-level code for all tables only after + * all of the tables have been loaded. It is a legacy option and is + * not compatible with other ACPI implementations. See AcpiNsLoadTable. + * + * This function will be removed when the legacy option is removed. + * ******************************************************************************/ void @@ -476,6 +498,9 @@ AcpiNsExecModuleCodeList ( Next = AcpiGbl_ModuleCodeList; if (!Next) { + ACPI_DEBUG_PRINT ((ACPI_DB_INIT_NAMES, + "Legacy MLC block list is empty\n")); + return_VOID; } diff --git a/sys/contrib/dev/acpica/source/components/namespace/nsinit.c b/sys/contrib/dev/acpica/source/components/namespace/nsinit.c index 2786e24c92..dcfb41ed7d 100644 --- a/sys/contrib/dev/acpica/source/components/namespace/nsinit.c +++ b/sys/contrib/dev/acpica/source/components/namespace/nsinit.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -408,6 +408,65 @@ ErrorExit: /******************************************************************************* * + * FUNCTION: AcpiNsInitOnePackage + * + * PARAMETERS: ObjHandle - Node + * Level - Current nesting level + * Context - Not used + * ReturnValue - Not used + * + * RETURN: Status + * + * DESCRIPTION: Callback from AcpiWalkNamespace. Invoked for every package + * within the namespace. Used during dynamic load of an SSDT. + * + ******************************************************************************/ + +ACPI_STATUS +AcpiNsInitOnePackage ( + ACPI_HANDLE ObjHandle, + UINT32 Level, + void *Context, + void **ReturnValue) +{ + ACPI_STATUS Status; + ACPI_OPERAND_OBJECT *ObjDesc; + ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle; + + + ObjDesc = AcpiNsGetAttachedObject (Node); + if (!ObjDesc) + { + return (AE_OK); + } + + /* Exit if package is already initialized */ + + if (ObjDesc->Package.Flags & AOPOBJ_DATA_VALID) + { + return (AE_OK); + } + + Status = AcpiDsGetPackageArguments (ObjDesc); + if (ACPI_FAILURE (Status)) + { + return (AE_OK); + } + + Status = AcpiUtWalkPackageTree (ObjDesc, NULL, AcpiDsInitPackageElement, + NULL); + if (ACPI_FAILURE (Status)) + { + return (AE_OK); + } + + ObjDesc->Package.Flags |= AOPOBJ_DATA_VALID; + return (AE_OK); +} + + +/******************************************************************************* + * * FUNCTION: AcpiNsInitOneObject * * PARAMETERS: ObjHandle - Node @@ -418,7 +477,7 @@ ErrorExit: * RETURN: Status * * DESCRIPTION: Callback from AcpiWalkNamespace. Invoked for every object - * within the namespace. + * within the namespace. * * Currently, the only objects that require initialization are: * 1) Methods @@ -533,22 +592,10 @@ AcpiNsInitOneObject ( case ACPI_TYPE_PACKAGE: - Info->PackageInit++; - Status = AcpiDsGetPackageArguments (ObjDesc); - if (ACPI_FAILURE (Status)) - { - break; - } + /* Complete the initialization/resolution of the package object */ - /* - * Resolve all named references in package objects (and all - * sub-packages). This action has been deferred until the entire - * namespace has been loaded, in order to support external and - * forward references from individual package elements (05/2017). - */ - Status = AcpiUtWalkPackageTree (ObjDesc, NULL, - AcpiDsInitPackageElement, NULL); - ObjDesc->Package.Flags |= AOPOBJ_DATA_VALID; + Info->PackageInit++; + Status = AcpiNsInitOnePackage (ObjHandle, Level, NULL, NULL); break; default: diff --git a/sys/contrib/dev/acpica/source/components/namespace/nsload.c b/sys/contrib/dev/acpica/source/components/namespace/nsload.c index a361208500..698d3a5723 100644 --- a/sys/contrib/dev/acpica/source/components/namespace/nsload.c +++ b/sys/contrib/dev/acpica/source/components/namespace/nsload.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -270,23 +270,17 @@ Unlock: "**** Completed Table Object Initialization\n")); /* - * Execute any module-level code that was detected during the table load - * phase. Although illegal since ACPI 2.0, there are many machines that - * contain this type of code. Each block of detected executable AML code - * outside of any control method is wrapped with a temporary control - * method object and placed on a global list. The methods on this list - * are executed below. + * This case handles the legacy option that groups all module-level + * code blocks together and defers execution until all of the tables + * are loaded. Execute all of these blocks at this time. + * Execute any module-level code that was detected during the table + * load phase. * - * This case executes the module-level code for each table immediately - * after the table has been loaded. This provides compatibility with - * other ACPI implementations. Optionally, the execution can be deferred - * until later, see AcpiInitializeObjects. + * Note: this option is deprecated and will be eliminated in the + * future. Use of this option can cause problems with AML code that + * depends upon in-order immediate execution of module-level code. */ - if (!AcpiGbl_ParseTableAsTermList && !AcpiGbl_GroupModuleLevelCode) - { - AcpiNsExecModuleCodeList (); - } - + AcpiNsExecModuleCodeList (); return_ACPI_STATUS (Status); } diff --git a/sys/contrib/dev/acpica/source/components/namespace/nsnames.c b/sys/contrib/dev/acpica/source/components/namespace/nsnames.c index fb74c44c33..097037cbe5 100644 --- a/sys/contrib/dev/acpica/source/components/namespace/nsnames.c +++ b/sys/contrib/dev/acpica/source/components/namespace/nsnames.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -158,6 +158,12 @@ #define _COMPONENT ACPI_NAMESPACE ACPI_MODULE_NAME ("nsnames") +/* Local Prototypes */ + +static void +AcpiNsNormalizePathname ( + char *OriginalPath); + /******************************************************************************* * @@ -505,5 +511,174 @@ AcpiNsGetNormalizedPathname ( (void) AcpiNsBuildNormalizedPath (Node, NameBuffer, Size, NoTrailing); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_NAMES, "%s: Path \"%s\"\n", + ACPI_GET_FUNCTION_NAME, NameBuffer)); + return_PTR (NameBuffer); } + + +/******************************************************************************* + * + * FUNCTION: AcpiNsBuildPrefixedPathname + * + * PARAMETERS: PrefixScope - Scope/Path that prefixes the internal path + * InternalPath - Name or path of the namespace node + * + * RETURN: None + * + * DESCRIPTION: Construct a fully qualified pathname from a concatenation of: + * 1) Path associated with the PrefixScope namespace node + * 2) External path representation of the Internal path + * + ******************************************************************************/ + +char * +AcpiNsBuildPrefixedPathname ( + ACPI_GENERIC_STATE *PrefixScope, + const char *InternalPath) +{ + ACPI_STATUS Status; + char *FullPath = NULL; + char *ExternalPath = NULL; + char *PrefixPath = NULL; + UINT32 PrefixPathLength = 0; + + + /* If there is a prefix, get the pathname to it */ + + if (PrefixScope && PrefixScope->Scope.Node) + { + PrefixPath = AcpiNsGetNormalizedPathname (PrefixScope->Scope.Node, TRUE); + if (PrefixPath) + { + PrefixPathLength = strlen (PrefixPath); + } + } + + Status = AcpiNsExternalizeName (ACPI_UINT32_MAX, InternalPath, + NULL, &ExternalPath); + if (ACPI_FAILURE (Status)) + { + goto Cleanup; + } + + /* Merge the prefix path and the path. 2 is for one dot and trailing null */ + + FullPath = ACPI_ALLOCATE_ZEROED ( + PrefixPathLength + strlen (ExternalPath) + 2); + if (!FullPath) + { + goto Cleanup; + } + + /* Don't merge if the External path is already fully qualified */ + + if (PrefixPath && + (*ExternalPath != '\\') && + (*ExternalPath != '^')) + { + strcat (FullPath, PrefixPath); + if (PrefixPath[1]) + { + strcat (FullPath, "."); + } + } + + AcpiNsNormalizePathname (ExternalPath); + strcat (FullPath, ExternalPath); + +Cleanup: + if (PrefixPath) + { + ACPI_FREE (PrefixPath); + } + if (ExternalPath) + { + ACPI_FREE (ExternalPath); + } + + return (FullPath); +} + + +/******************************************************************************* + * + * FUNCTION: AcpiNsNormalizePathname + * + * PARAMETERS: OriginalPath - Path to be normalized, in External format + * + * RETURN: The original path is processed in-place + * + * DESCRIPTION: Remove trailing underscores from each element of a path. + * + * For example: \A___.B___.C___ becomes \A.B.C + * + ******************************************************************************/ + +static void +AcpiNsNormalizePathname ( + char *OriginalPath) +{ + char *InputPath = OriginalPath; + char *NewPathBuffer; + char *NewPath; + UINT32 i; + + + /* Allocate a temp buffer in which to construct the new path */ + + NewPathBuffer = ACPI_ALLOCATE_ZEROED (strlen (InputPath) + 1); + NewPath = NewPathBuffer; + if (!NewPathBuffer) + { + return; + } + + /* Special characters may appear at the beginning of the path */ + + if (*InputPath == '\\') + { + *NewPath = *InputPath; + NewPath++; + InputPath++; + } + + while (*InputPath == '^') + { + *NewPath = *InputPath; + NewPath++; + InputPath++; + } + + /* Remainder of the path */ + + while (*InputPath) + { + /* Do one nameseg at a time */ + + for (i = 0; (i < ACPI_NAME_SIZE) && *InputPath; i++) + { + if ((i == 0) || (*InputPath != '_')) /* First char is allowed to be underscore */ + { + *NewPath = *InputPath; + NewPath++; + } + + InputPath++; + } + + /* Dot means that there are more namesegs to come */ + + if (*InputPath == '.') + { + *NewPath = *InputPath; + NewPath++; + InputPath++; + } + } + + *NewPath = 0; + strcpy (OriginalPath, NewPathBuffer); + ACPI_FREE (NewPathBuffer); +} diff --git a/sys/contrib/dev/acpica/source/components/namespace/nsobject.c b/sys/contrib/dev/acpica/source/components/namespace/nsobject.c index 0d73fe20a4..2d1cf0b49b 100644 --- a/sys/contrib/dev/acpica/source/components/namespace/nsobject.c +++ b/sys/contrib/dev/acpica/source/components/namespace/nsobject.c @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/namespace/nsparse.c b/sys/contrib/dev/acpica/source/components/namespace/nsparse.c index dc02074c55..8e86ee4c5d 100644 --- a/sys/contrib/dev/acpica/source/components/namespace/nsparse.c +++ b/sys/contrib/dev/acpica/source/components/namespace/nsparse.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -171,8 +171,17 @@ * * RETURN: Status * - * DESCRIPTION: Load ACPI/AML table by executing the entire table as a - * TermList. + * DESCRIPTION: Load ACPI/AML table by executing the entire table as a single + * large control method. + * + * NOTE: The point of this is to execute any module-level code in-place + * as the table is parsed. Some AML code depends on this behavior. + * + * It is a run-time option at this time, but will eventually become + * the default. + * + * Note: This causes the table to only have a single-pass parse. + * However, this is compatible with other ACPI implementations. * ******************************************************************************/ @@ -232,8 +241,9 @@ AcpiNsExecuteTable ( goto Cleanup; } - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, - "Create table code block: %p\n", MethodObj)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_PARSE, + "%s: Create table pseudo-method for [%4.4s] @%p, method %p\n", + ACPI_GET_FUNCTION_NAME, Table->Signature, Table, MethodObj)); MethodObj->Method.AmlStart = AmlStart; MethodObj->Method.AmlLength = AmlLength; @@ -402,9 +412,21 @@ AcpiNsParseTable ( ACPI_FUNCTION_TRACE (NsParseTable); - if (AcpiGbl_ParseTableAsTermList) + if (AcpiGbl_ExecuteTablesAsMethods) { - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "**** Start load pass\n")); + /* + * This case executes the AML table as one large control method. + * The point of this is to execute any module-level code in-place + * as the table is parsed. Some AML code depends on this behavior. + * + * It is a run-time option at this time, but will eventually become + * the default. + * + * Note: This causes the table to only have a single-pass parse. + * However, this is compatible with other ACPI implementations. + */ + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_PARSE, + "%s: **** Start table execution pass\n", ACPI_GET_FUNCTION_NAME)); Status = AcpiNsExecuteTable (TableIndex, StartNode); if (ACPI_FAILURE (Status)) diff --git a/sys/contrib/dev/acpica/source/components/namespace/nspredef.c b/sys/contrib/dev/acpica/source/components/namespace/nspredef.c index a33192dfec..5f42fc7eda 100644 --- a/sys/contrib/dev/acpica/source/components/namespace/nspredef.c +++ b/sys/contrib/dev/acpica/source/components/namespace/nspredef.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/namespace/nsprepkg.c b/sys/contrib/dev/acpica/source/components/namespace/nsprepkg.c index 6ad53d61c2..af8c55a715 100644 --- a/sys/contrib/dev/acpica/source/components/namespace/nsprepkg.c +++ b/sys/contrib/dev/acpica/source/components/namespace/nsprepkg.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/namespace/nsrepair.c b/sys/contrib/dev/acpica/source/components/namespace/nsrepair.c index 144db2b384..b32a6e272b 100644 --- a/sys/contrib/dev/acpica/source/components/namespace/nsrepair.c +++ b/sys/contrib/dev/acpica/source/components/namespace/nsrepair.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/namespace/nsrepair2.c b/sys/contrib/dev/acpica/source/components/namespace/nsrepair2.c index 18d3b091bf..57dcbfb64f 100644 --- a/sys/contrib/dev/acpica/source/components/namespace/nsrepair2.c +++ b/sys/contrib/dev/acpica/source/components/namespace/nsrepair2.c @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/namespace/nssearch.c b/sys/contrib/dev/acpica/source/components/namespace/nssearch.c index 3504092aed..02fd8b401f 100644 --- a/sys/contrib/dev/acpica/source/components/namespace/nssearch.c +++ b/sys/contrib/dev/acpica/source/components/namespace/nssearch.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -545,6 +545,7 @@ AcpiNsSearchAndEnter ( (WalkState && WalkState->Opcode == AML_SCOPE_OP)) { NewNode->Flags |= ANOBJ_IS_EXTERNAL; + NewNode->Flags |= IMPLICIT_EXTERNAL; } #endif diff --git a/sys/contrib/dev/acpica/source/components/namespace/nsutils.c b/sys/contrib/dev/acpica/source/components/namespace/nsutils.c index 2b6f6fb8e4..0e01a0c54a 100644 --- a/sys/contrib/dev/acpica/source/components/namespace/nsutils.c +++ b/sys/contrib/dev/acpica/source/components/namespace/nsutils.c @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/namespace/nswalk.c b/sys/contrib/dev/acpica/source/components/namespace/nswalk.c index 68a129a72e..4c70ca5422 100644 --- a/sys/contrib/dev/acpica/source/components/namespace/nswalk.c +++ b/sys/contrib/dev/acpica/source/components/namespace/nswalk.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/namespace/nsxfeval.c b/sys/contrib/dev/acpica/source/components/namespace/nsxfeval.c index ab3ad59885..7c0e656603 100644 --- a/sys/contrib/dev/acpica/source/components/namespace/nsxfeval.c +++ b/sys/contrib/dev/acpica/source/components/namespace/nsxfeval.c @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -174,11 +174,11 @@ AcpiNsResolveReferences ( * * PARAMETERS: Handle - Object handle (optional) * Pathname - Object pathname (optional) - * ExternalParams - List of parameters to pass to method, + * ExternalParams - List of parameters to pass to a method, * terminated by NULL. May be NULL * if no parameters are being passed. - * ReturnBuffer - Where to put method's return value (if - * any). If NULL, no value is returned. + * ReturnBuffer - Where to put the object return value (if + * any). Required. * ReturnType - Expected type of return object * * RETURN: Status @@ -218,10 +218,16 @@ AcpiEvaluateObjectTyped ( FreeBufferOnError = TRUE; } - Status = AcpiGetHandle (Handle, Pathname, &TargetHandle); - if (ACPI_FAILURE (Status)) + /* Get a handle here, in order to build an error message if needed */ + + TargetHandle = Handle; + if (Pathname) { - return_ACPI_STATUS (Status); + Status = AcpiGetHandle (Handle, Pathname, &TargetHandle); + if (ACPI_FAILURE (Status)) + { + return_ACPI_STATUS (Status); + } } FullPathname = AcpiNsGetExternalPathname (TargetHandle); diff --git a/sys/contrib/dev/acpica/source/components/namespace/nsxfname.c b/sys/contrib/dev/acpica/source/components/namespace/nsxfname.c index 401970f42f..f94c0e45de 100644 --- a/sys/contrib/dev/acpica/source/components/namespace/nsxfname.c +++ b/sys/contrib/dev/acpica/source/components/namespace/nsxfname.c @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -376,7 +376,7 @@ AcpiNsCopyDeviceId ( * namespace node and possibly by running several standard * control methods (Such as in the case of a device.) * - * For Device and Processor objects, run the Device _HID, _UID, _CID, _STA, + * For Device and Processor objects, run the Device _HID, _UID, _CID, * _CLS, _ADR, _SxW, and _SxD methods. * * Note: Allocates the return buffer, must be freed by the caller. @@ -385,8 +385,9 @@ AcpiNsCopyDeviceId ( * discovery namespace traversal. Therefore, no complex methods can be * executed, especially those that access operation regions. Therefore, do * not add any additional methods that could cause problems in this area. - * this was the fate of the _SUB method which was found to cause such - * problems and was removed (11/2015). + * Because of this reason support for the following methods has been removed: + * 1) _SUB method was removed (11/2015) + * 2) _STA method was removed (02/2018) * ******************************************************************************/ @@ -517,26 +518,13 @@ AcpiGetObjectInfo ( { /* * Get extra info for ACPI Device/Processor objects only: - * Run the _STA, _ADR and, SxW, and _SxD methods. + * Run the _ADR and, SxW, and _SxD methods. * * Notes: none of these methods are required, so they may or may * not be present for this device. The Info->Valid bitfield is used * to indicate which methods were found and run successfully. - * - * For _STA, if the method does not exist, then (as per the ACPI - * specification), the returned CurrentStatus flags will indicate - * that the device is present/functional/enabled. Otherwise, the - * CurrentStatus flags reflect the value returned from _STA. */ - /* Execute the Device._STA method */ - - Status = AcpiUtExecute_STA (Node, &Info->CurrentStatus); - if (ACPI_SUCCESS (Status)) - { - Valid |= ACPI_VALID_STA; - } - /* Execute the Device._ADR method */ Status = AcpiUtEvaluateNumericObject (METHOD_NAME__ADR, Node, diff --git a/sys/contrib/dev/acpica/source/components/namespace/nsxfobj.c b/sys/contrib/dev/acpica/source/components/namespace/nsxfobj.c index d0df1d3617..e8fd0f8bb8 100644 --- a/sys/contrib/dev/acpica/source/components/namespace/nsxfobj.c +++ b/sys/contrib/dev/acpica/source/components/namespace/nsxfobj.c @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/parser/psargs.c b/sys/contrib/dev/acpica/source/components/parser/psargs.c index baa60f26b0..fba20f08e5 100644 --- a/sys/contrib/dev/acpica/source/components/parser/psargs.c +++ b/sys/contrib/dev/acpica/source/components/parser/psargs.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -500,7 +500,7 @@ AcpiPsGetNextNamepath ( if (ACPI_FAILURE (Status)) { - ACPI_ERROR_NAMESPACE (Path, Status); + ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, Path, Status); if ((WalkState->ParseFlags & ACPI_PARSE_MODE_MASK) == ACPI_PARSE_EXECUTE) @@ -1051,6 +1051,9 @@ AcpiPsGetNextArg ( if (Arg->Common.AmlOpcode == AML_INT_METHODCALL_OP) { + /* Free method call op and corresponding namestring sub-ob */ + + AcpiPsFreeOp (Arg->Common.Value.Arg); AcpiPsFreeOp (Arg); Arg = NULL; WalkState->ArgCount = 1; @@ -1067,10 +1070,9 @@ AcpiPsGetNextArg ( case ARGP_DATAOBJ: case ARGP_TERMARG: - - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, - "**** TermArg/DataObj: %s (%2.2X)\n", - AcpiUtGetArgumentTypeName (ArgType), ArgType)); + ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, + "**** TermArg/DataObj: %s (%2.2X)\n", + AcpiUtGetArgumentTypeName (ArgType), ArgType)); /* Single complex argument, nothing returned */ diff --git a/sys/contrib/dev/acpica/source/components/parser/psloop.c b/sys/contrib/dev/acpica/source/components/parser/psloop.c index fe7fe6d0cf..28d17962ba 100644 --- a/sys/contrib/dev/acpica/source/components/parser/psloop.c +++ b/sys/contrib/dev/acpica/source/components/parser/psloop.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -283,14 +283,22 @@ AcpiPsGetArguments ( } ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, - "Final argument count: %u pass %u\n", + "Final argument count: %8.8X pass %u\n", WalkState->ArgCount, WalkState->PassNumber)); /* - * Handle executable code at "module-level". This refers to - * executable opcodes that appear outside of any control method. + * This case handles the legacy option that groups all module-level + * code blocks together and defers execution until all of the tables + * are loaded. Execute all of these blocks at this time. + * Execute any module-level code that was detected during the table + * load phase. + * + * Note: this option is deprecated and will be eliminated in the + * future. Use of this option can cause problems with AML code that + * depends upon in-order immediate execution of module-level code. */ - if ((WalkState->PassNumber <= ACPI_IMODE_LOAD_PASS2) && + if (AcpiGbl_GroupModuleLevelCode && + (WalkState->PassNumber <= ACPI_IMODE_LOAD_PASS2) && ((WalkState->ParseFlags & ACPI_PARSE_DISASSEMBLE) == 0)) { /* @@ -440,6 +448,16 @@ AcpiPsGetArguments ( * object to the global list. Note, the mutex field of the method * object is used to link multiple module-level code objects. * + * NOTE: In this legacy option, each block of detected executable AML + * code that is outside of any control method is wrapped with a temporary + * control method object and placed on a global list below. + * + * This function executes the module-level code for all tables only after + * all of the tables have been loaded. It is a legacy option and is + * not compatible with other ACPI implementations. See AcpiNsLoadTable. + * + * This function will be removed when the legacy option is removed. + * ******************************************************************************/ static void @@ -697,7 +715,7 @@ AcpiPsParseLoop ( /* Check for arguments that need to be processed */ ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, - "Parseloop: argument count: %u\n", WalkState->ArgCount)); + "Parseloop: argument count: %8.8X\n", WalkState->ArgCount)); if (WalkState->ArgCount) { diff --git a/sys/contrib/dev/acpica/source/components/parser/psobject.c b/sys/contrib/dev/acpica/source/components/parser/psobject.c index 8f31750c5f..63e2b3b1ab 100644 --- a/sys/contrib/dev/acpica/source/components/parser/psobject.c +++ b/sys/contrib/dev/acpica/source/components/parser/psobject.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -182,7 +182,7 @@ static ACPI_STATUS AcpiPsGetAmlOpcode ( ACPI_WALK_STATE *WalkState) { - UINT32 AmlOffset; + ACPI_ERROR_ONLY (UINT32 AmlOffset); ACPI_FUNCTION_TRACE_PTR (PsGetAmlOpcode, WalkState); @@ -217,8 +217,8 @@ AcpiPsGetAmlOpcode ( if (WalkState->PassNumber == 2) { - AmlOffset = (UINT32) ACPI_PTR_DIFF (WalkState->Aml, - WalkState->ParserState.AmlStart); + ACPI_ERROR_ONLY(AmlOffset = (UINT32) ACPI_PTR_DIFF (WalkState->Aml, + WalkState->ParserState.AmlStart)); ACPI_ERROR ((AE_INFO, "Unknown opcode 0x%.2X at table offset 0x%.4X, ignoring", @@ -500,15 +500,10 @@ AcpiPsCreateOp ( * external declaration opcode. Setting WalkState->Aml to * WalkState->ParserState.Aml + 2 moves increments the * WalkState->Aml past the object type and the paramcount of the - * external opcode. For the error message, only print the AML - * offset. We could attempt to print the name but this may cause - * a segmentation fault when printing the namepath because the - * AML may be incorrect. + * external opcode. */ - AcpiOsPrintf ( - "// Invalid external declaration at AML offset 0x%x.\n", - WalkState->Aml - WalkState->ParserState.AmlStart); WalkState->Aml = WalkState->ParserState.Aml + 2; + WalkState->ParserState.Aml = WalkState->Aml; return_ACPI_STATUS (AE_CTRL_PARSE_CONTINUE); } #endif diff --git a/sys/contrib/dev/acpica/source/components/parser/psopcode.c b/sys/contrib/dev/acpica/source/components/parser/psopcode.c index 97a3254499..c8efeff807 100644 --- a/sys/contrib/dev/acpica/source/components/parser/psopcode.c +++ b/sys/contrib/dev/acpica/source/components/parser/psopcode.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/parser/psopinfo.c b/sys/contrib/dev/acpica/source/components/parser/psopinfo.c index 4507026d39..c56ba7b70a 100644 --- a/sys/contrib/dev/acpica/source/components/parser/psopinfo.c +++ b/sys/contrib/dev/acpica/source/components/parser/psopinfo.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/parser/psparse.c b/sys/contrib/dev/acpica/source/components/parser/psparse.c index 854f054711..0ad62b771b 100644 --- a/sys/contrib/dev/acpica/source/components/parser/psparse.c +++ b/sys/contrib/dev/acpica/source/components/parser/psparse.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -576,7 +576,7 @@ AcpiPsParseAml ( if (!WalkState->ParserState.Aml) { - return_ACPI_STATUS (AE_NULL_OBJECT); + return_ACPI_STATUS (AE_BAD_ADDRESS); } /* Create and initialize a new thread state */ diff --git a/sys/contrib/dev/acpica/source/components/parser/psscope.c b/sys/contrib/dev/acpica/source/components/parser/psscope.c index 529471d6f6..d5ae6fee29 100644 --- a/sys/contrib/dev/acpica/source/components/parser/psscope.c +++ b/sys/contrib/dev/acpica/source/components/parser/psscope.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/parser/pstree.c b/sys/contrib/dev/acpica/source/components/parser/pstree.c index d7abafa27b..baed92560d 100644 --- a/sys/contrib/dev/acpica/source/components/parser/pstree.c +++ b/sys/contrib/dev/acpica/source/components/parser/pstree.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -438,6 +438,7 @@ AcpiPsGetChild ( case AML_BUFFER_OP: case AML_PACKAGE_OP: + case AML_VARIABLE_PACKAGE_OP: case AML_METHOD_OP: case AML_IF_OP: case AML_WHILE_OP: diff --git a/sys/contrib/dev/acpica/source/components/parser/psutils.c b/sys/contrib/dev/acpica/source/components/parser/psutils.c index 19ae3a9d4b..1280e3f2e1 100644 --- a/sys/contrib/dev/acpica/source/components/parser/psutils.c +++ b/sys/contrib/dev/acpica/source/components/parser/psutils.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -213,7 +213,7 @@ AcpiPsInitOp ( Op->Common.DescriptorType = ACPI_DESC_TYPE_PARSER; Op->Common.AmlOpcode = Opcode; - ACPI_DISASM_ONLY_MEMBERS (strncpy (Op->Common.AmlOpName, + ACPI_DISASM_ONLY_MEMBERS (AcpiUtSafeStrncpy (Op->Common.AmlOpName, (AcpiPsGetOpcodeInfo (Opcode))->Name, sizeof (Op->Common.AmlOpName))); } @@ -292,11 +292,11 @@ AcpiPsAllocOp ( { AcpiGbl_CurrentScope = Op; } - } - if (Gbl_CaptureComments) - { - ASL_CV_TRANSFER_COMMENTS (Op); + if (AcpiGbl_CaptureComments) + { + ASL_CV_TRANSFER_COMMENTS (Op); + } } return (Op); diff --git a/sys/contrib/dev/acpica/source/components/parser/pswalk.c b/sys/contrib/dev/acpica/source/components/parser/pswalk.c index e554e9fc7a..eb57e36a9c 100644 --- a/sys/contrib/dev/acpica/source/components/parser/pswalk.c +++ b/sys/contrib/dev/acpica/source/components/parser/pswalk.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/parser/psxface.c b/sys/contrib/dev/acpica/source/components/parser/psxface.c index 3b1d6286f4..8516fe3a35 100644 --- a/sys/contrib/dev/acpica/source/components/parser/psxface.c +++ b/sys/contrib/dev/acpica/source/components/parser/psxface.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/resources/rsaddr.c b/sys/contrib/dev/acpica/source/components/resources/rsaddr.c index 5ce67a0007..12ed5e1108 100644 --- a/sys/contrib/dev/acpica/source/components/resources/rsaddr.c +++ b/sys/contrib/dev/acpica/source/components/resources/rsaddr.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/resources/rscalc.c b/sys/contrib/dev/acpica/source/components/resources/rscalc.c index 492dde4779..5853eae6c4 100644 --- a/sys/contrib/dev/acpica/source/components/resources/rscalc.c +++ b/sys/contrib/dev/acpica/source/components/resources/rscalc.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/resources/rscreate.c b/sys/contrib/dev/acpica/source/components/resources/rscreate.c index 6dbadf14f1..31636e392b 100644 --- a/sys/contrib/dev/acpica/source/components/resources/rscreate.c +++ b/sys/contrib/dev/acpica/source/components/resources/rscreate.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/resources/rsdump.c b/sys/contrib/dev/acpica/source/components/resources/rsdump.c index 918a09c351..aeda994e29 100644 --- a/sys/contrib/dev/acpica/source/components/resources/rsdump.c +++ b/sys/contrib/dev/acpica/source/components/resources/rsdump.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -769,7 +769,7 @@ AcpiRsDumpByteList ( UINT16 Length, UINT8 *Data) { - UINT8 i; + UINT16 i; for (i = 0; i < Length; i++) diff --git a/sys/contrib/dev/acpica/source/components/resources/rsdumpinfo.c b/sys/contrib/dev/acpica/source/components/resources/rsdumpinfo.c index cd9ae4d350..af9b3270d3 100644 --- a/sys/contrib/dev/acpica/source/components/resources/rsdumpinfo.c +++ b/sys/contrib/dev/acpica/source/components/resources/rsdumpinfo.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/resources/rsinfo.c b/sys/contrib/dev/acpica/source/components/resources/rsinfo.c index 581891297a..c3996e9c81 100644 --- a/sys/contrib/dev/acpica/source/components/resources/rsinfo.c +++ b/sys/contrib/dev/acpica/source/components/resources/rsinfo.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/resources/rsio.c b/sys/contrib/dev/acpica/source/components/resources/rsio.c index 82ea80b920..9b043fa259 100644 --- a/sys/contrib/dev/acpica/source/components/resources/rsio.c +++ b/sys/contrib/dev/acpica/source/components/resources/rsio.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/resources/rsirq.c b/sys/contrib/dev/acpica/source/components/resources/rsirq.c index 4fe0072108..cde1a0e652 100644 --- a/sys/contrib/dev/acpica/source/components/resources/rsirq.c +++ b/sys/contrib/dev/acpica/source/components/resources/rsirq.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/resources/rslist.c b/sys/contrib/dev/acpica/source/components/resources/rslist.c index 0e2fccb6d3..1c99a92c59 100644 --- a/sys/contrib/dev/acpica/source/components/resources/rslist.c +++ b/sys/contrib/dev/acpica/source/components/resources/rslist.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/resources/rsmemory.c b/sys/contrib/dev/acpica/source/components/resources/rsmemory.c index 0229858d75..3302d11883 100644 --- a/sys/contrib/dev/acpica/source/components/resources/rsmemory.c +++ b/sys/contrib/dev/acpica/source/components/resources/rsmemory.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/resources/rsmisc.c b/sys/contrib/dev/acpica/source/components/resources/rsmisc.c index 16db6fae79..ab5e978419 100644 --- a/sys/contrib/dev/acpica/source/components/resources/rsmisc.c +++ b/sys/contrib/dev/acpica/source/components/resources/rsmisc.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/resources/rsserial.c b/sys/contrib/dev/acpica/source/components/resources/rsserial.c index 5395382d31..64d21c7999 100644 --- a/sys/contrib/dev/acpica/source/components/resources/rsserial.c +++ b/sys/contrib/dev/acpica/source/components/resources/rsserial.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/resources/rsutils.c b/sys/contrib/dev/acpica/source/components/resources/rsutils.c index 45305e7167..a0dd1517e1 100644 --- a/sys/contrib/dev/acpica/source/components/resources/rsutils.c +++ b/sys/contrib/dev/acpica/source/components/resources/rsutils.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/resources/rsxface.c b/sys/contrib/dev/acpica/source/components/resources/rsxface.c index 2c27eaf59a..6c856db7ad 100644 --- a/sys/contrib/dev/acpica/source/components/resources/rsxface.c +++ b/sys/contrib/dev/acpica/source/components/resources/rsxface.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/tables/tbdata.c b/sys/contrib/dev/acpica/source/components/tables/tbdata.c index 18e58f9d4c..61a2d340d5 100644 --- a/sys/contrib/dev/acpica/source/components/tables/tbdata.c +++ b/sys/contrib/dev/acpica/source/components/tables/tbdata.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -1190,12 +1190,18 @@ AcpiTbLoadTable ( Status = AcpiNsLoadTable (TableIndex, ParentNode); - /* Execute any module-level code that was found in the table */ - - if (!AcpiGbl_ParseTableAsTermList && AcpiGbl_GroupModuleLevelCode) - { - AcpiNsExecModuleCodeList (); - } + /* + * This case handles the legacy option that groups all module-level + * code blocks together and defers execution until all of the tables + * are loaded. Execute all of these blocks at this time. + * Execute any module-level code that was detected during the table + * load phase. + * + * Note: this option is deprecated and will be eliminated in the + * future. Use of this option can cause problems with AML code that + * depends upon in-order immediate execution of module-level code. + */ + AcpiNsExecModuleCodeList (); /* * Update GPEs for any new _Lxx/_Exx methods. Ignore errors. The host is diff --git a/sys/contrib/dev/acpica/source/components/tables/tbfadt.c b/sys/contrib/dev/acpica/source/components/tables/tbfadt.c index 3e4e522998..f352803291 100644 --- a/sys/contrib/dev/acpica/source/components/tables/tbfadt.c +++ b/sys/contrib/dev/acpica/source/components/tables/tbfadt.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/tables/tbfind.c b/sys/contrib/dev/acpica/source/components/tables/tbfind.c index 2a1b1cf01f..7b0b565bd8 100644 --- a/sys/contrib/dev/acpica/source/components/tables/tbfind.c +++ b/sys/contrib/dev/acpica/source/components/tables/tbfind.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/tables/tbinstal.c b/sys/contrib/dev/acpica/source/components/tables/tbinstal.c index 54ea58d009..581737dd0e 100644 --- a/sys/contrib/dev/acpica/source/components/tables/tbinstal.c +++ b/sys/contrib/dev/acpica/source/components/tables/tbinstal.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -236,7 +236,7 @@ AcpiTbInstallTableWithOverride ( * DESCRIPTION: This function is called to verify and install an ACPI table. * When this function is called by "Load" or "LoadTable" opcodes, * or by AcpiLoadTable() API, the "Reload" parameter is set. - * After sucessfully returning from this function, table is + * After successfully returning from this function, table is * "INSTALLED" but not "VALIDATED". * ******************************************************************************/ @@ -356,11 +356,11 @@ AcpiTbOverrideTable ( ACPI_TABLE_DESC *OldTableDesc) { ACPI_STATUS Status; - char *OverrideType; ACPI_TABLE_DESC NewTableDesc; ACPI_TABLE_HEADER *Table; ACPI_PHYSICAL_ADDRESS Address; UINT32 Length; + ACPI_ERROR_ONLY (char *OverrideType); /* (1) Attempt logical override (returns a logical address) */ @@ -370,7 +370,7 @@ AcpiTbOverrideTable ( { AcpiTbAcquireTempTable (&NewTableDesc, ACPI_PTR_TO_PHYSADDR (Table), ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL); - OverrideType = "Logical"; + ACPI_ERROR_ONLY (OverrideType = "Logical"); goto FinishOverride; } @@ -382,7 +382,7 @@ AcpiTbOverrideTable ( { AcpiTbAcquireTempTable (&NewTableDesc, Address, ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL); - OverrideType = "Physical"; + ACPI_ERROR_ONLY (OverrideType = "Physical"); goto FinishOverride; } diff --git a/sys/contrib/dev/acpica/source/components/tables/tbprint.c b/sys/contrib/dev/acpica/source/components/tables/tbprint.c index 5d95b0fc02..90e5b32050 100644 --- a/sys/contrib/dev/acpica/source/components/tables/tbprint.c +++ b/sys/contrib/dev/acpica/source/components/tables/tbprint.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/tables/tbutils.c b/sys/contrib/dev/acpica/source/components/tables/tbutils.c index db3fe56de4..f100e140cc 100644 --- a/sys/contrib/dev/acpica/source/components/tables/tbutils.c +++ b/sys/contrib/dev/acpica/source/components/tables/tbutils.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/tables/tbxface.c b/sys/contrib/dev/acpica/source/components/tables/tbxface.c index 6393bdace2..bb2df42ae8 100644 --- a/sys/contrib/dev/acpica/source/components/tables/tbxface.c +++ b/sys/contrib/dev/acpica/source/components/tables/tbxface.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/tables/tbxfload.c b/sys/contrib/dev/acpica/source/components/tables/tbxfload.c index 57720067a2..0119b68457 100644 --- a/sys/contrib/dev/acpica/source/components/tables/tbxfload.c +++ b/sys/contrib/dev/acpica/source/components/tables/tbxfload.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -219,13 +219,16 @@ AcpiLoadTables ( "While loading namespace from ACPI tables")); } - if (AcpiGbl_ParseTableAsTermList || !AcpiGbl_GroupModuleLevelCode) + if (AcpiGbl_ExecuteTablesAsMethods || !AcpiGbl_GroupModuleLevelCode) { /* - * Initialize the objects that remain uninitialized. This - * runs the executable AML that may be part of the - * declaration of these objects: - * OperationRegions, BufferFields, Buffers, and Packages. + * If the module-level code support is enabled, initialize the objects + * in the namespace that remain uninitialized. This runs the executable + * AML that may be part of the declaration of these name objects: + * OperationRegions, BufferFields, Buffers, and Packages. + * + * Note: The module-level code is optional at this time, but will + * become the default in the future. */ Status = AcpiNsInitializeObjects (); if (ACPI_FAILURE (Status)) diff --git a/sys/contrib/dev/acpica/source/components/tables/tbxfroot.c b/sys/contrib/dev/acpica/source/components/tables/tbxfroot.c index 77bba38e5b..fda91d86bb 100644 --- a/sys/contrib/dev/acpica/source/components/tables/tbxfroot.c +++ b/sys/contrib/dev/acpica/source/components/tables/tbxfroot.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/utilities/utaddress.c b/sys/contrib/dev/acpica/source/components/utilities/utaddress.c index f714758f41..751c815e74 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utaddress.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utaddress.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/utilities/utalloc.c b/sys/contrib/dev/acpica/source/components/utilities/utalloc.c index b8879e3903..02eb7b9131 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utalloc.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utalloc.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/utilities/utascii.c b/sys/contrib/dev/acpica/source/components/utilities/utascii.c index 73bdd19fcd..4b4c5843b2 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utascii.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utascii.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/utilities/utbuffer.c b/sys/contrib/dev/acpica/source/components/utilities/utbuffer.c index d89ab210e2..83a5b3c5fa 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utbuffer.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utbuffer.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -205,7 +205,7 @@ AcpiUtDumpBuffer ( { /* Print current offset */ - AcpiOsPrintf ("%6.4X: ", (BaseOffset + i)); + AcpiOsPrintf ("%8.4X: ", (BaseOffset + i)); /* Print 16 hex chars */ @@ -387,7 +387,7 @@ AcpiUtDumpBufferToFile ( { /* Print current offset */ - fprintf (File, "%6.4X: ", (BaseOffset + i)); + fprintf (File, "%8.4X: ", (BaseOffset + i)); /* Print 16 hex chars */ diff --git a/sys/contrib/dev/acpica/source/components/utilities/utcache.c b/sys/contrib/dev/acpica/source/components/utilities/utcache.c index 6d48717290..b324f28cff 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utcache.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utcache.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -415,8 +415,9 @@ AcpiOsAcquireObject ( Cache->CurrentDepth--; ACPI_MEM_TRACKING (Cache->Hits++); - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Object %p from %s cache\n", Object, Cache->ListName)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, + "%s: Object %p from %s cache\n", + ACPI_GET_FUNCTION_NAME, Object, Cache->ListName)); Status = AcpiUtReleaseMutex (ACPI_MTX_CACHES); if (ACPI_FAILURE (Status)) diff --git a/sys/contrib/dev/acpica/source/components/utilities/utclib.c b/sys/contrib/dev/acpica/source/components/utilities/utclib.c index e9cb1bee4a..c165036afc 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utclib.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utclib.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/utilities/utcopy.c b/sys/contrib/dev/acpica/source/components/utilities/utcopy.c index 2d6a0904e2..9c8f631d14 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utcopy.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utcopy.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/utilities/utdebug.c b/sys/contrib/dev/acpica/source/components/utilities/utdebug.c index dd80f24105..a38a101ff6 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utdebug.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utdebug.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -290,7 +290,9 @@ AcpiDebugPrint ( { ACPI_THREAD_ID ThreadId; va_list args; - +#ifdef ACPI_APPLICATION + int FillCount; +#endif /* Check if debug output enabled */ @@ -334,10 +336,21 @@ AcpiDebugPrint ( AcpiOsPrintf ("[%u] ", (UINT32) ThreadId); } - AcpiOsPrintf ("[%02ld] ", AcpiGbl_NestingLevel); -#endif + FillCount = 48 - AcpiGbl_NestingLevel - + strlen (AcpiUtTrimFunctionName (FunctionName)); + if (FillCount < 0) + { + FillCount = 0; + } + AcpiOsPrintf ("[%02ld] %*s", + AcpiGbl_NestingLevel, AcpiGbl_NestingLevel + 1, " "); + AcpiOsPrintf ("%s%*s: ", + AcpiUtTrimFunctionName (FunctionName), FillCount, " "); + +#else AcpiOsPrintf ("%-22.22s: ", AcpiUtTrimFunctionName (FunctionName)); +#endif va_start (args, Format); AcpiOsVprintf (Format, args); diff --git a/sys/contrib/dev/acpica/source/components/utilities/utdecode.c b/sys/contrib/dev/acpica/source/components/utilities/utdecode.c index 7cb171bcce..3fd910c486 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utdecode.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utdecode.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -558,11 +558,6 @@ AcpiUtGetReferenceName ( } -#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) -/* - * Strings and procedures used for debug only - */ - /******************************************************************************* * * FUNCTION: AcpiUtGetMutexName @@ -601,6 +596,12 @@ AcpiUtGetMutexName ( } +#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) + +/* + * Strings and procedures used for debug only + */ + /******************************************************************************* * * FUNCTION: AcpiUtGetNotifyName diff --git a/sys/contrib/dev/acpica/source/components/utilities/utdelete.c b/sys/contrib/dev/acpica/source/components/utilities/utdelete.c index ac9e73da0a..4565d8fa5a 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utdelete.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utdelete.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -454,8 +454,8 @@ AcpiUtDeleteInternalObj ( /* Now the object can be safely deleted */ - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Deleting Object %p [%s]\n", - Object, AcpiUtGetObjectTypeName (Object))); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ALLOCATIONS, "%s: Deleting Object %p [%s]\n", + ACPI_GET_FUNCTION_NAME, Object, AcpiUtGetObjectTypeName (Object))); AcpiUtDeleteObjectDesc (Object); return_VOID; @@ -581,9 +581,9 @@ AcpiUtUpdateRefCount ( Object)); } - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, - "Obj %p Type %.2X Refs %.2X [Decremented]\n", - Object, Object->Common.Type, NewCount)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ALLOCATIONS, + "%s: Obj %p Type %.2X Refs %.2X [Decremented]\n", + ACPI_GET_FUNCTION_NAME, Object, Object->Common.Type, NewCount)); /* Actually delete the object on a reference count of zero */ @@ -906,9 +906,9 @@ AcpiUtRemoveReference ( return; } - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, - "Obj %p Current Refs=%X [To Be Decremented]\n", - Object, Object->Common.ReferenceCount)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ALLOCATIONS, + "%s: Obj %p Current Refs=%X [To Be Decremented]\n", + ACPI_GET_FUNCTION_NAME, Object, Object->Common.ReferenceCount)); /* * Decrement the reference count, and only actually delete the object diff --git a/sys/contrib/dev/acpica/source/components/utilities/uterror.c b/sys/contrib/dev/acpica/source/components/utilities/uterror.c index a429a7f437..a44c106fea 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/uterror.c +++ b/sys/contrib/dev/acpica/source/components/utilities/uterror.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -313,6 +313,82 @@ AcpiUtPredefinedBiosError ( /******************************************************************************* * + * FUNCTION: AcpiUtPrefixedNamespaceError + * + * PARAMETERS: ModuleName - Caller's module name (for error output) + * LineNumber - Caller's line number (for error output) + * PrefixScope - Scope/Path that prefixes the internal path + * InternalPath - Name or path of the namespace node + * LookupStatus - Exception code from NS lookup + * + * RETURN: None + * + * DESCRIPTION: Print error message with the full pathname constructed this way: + * + * PrefixScopeNodeFullPath.ExternalizedInternalPath + * + * NOTE: 10/2017: Treat the major NsLookup errors as firmware errors + * + ******************************************************************************/ + +void +AcpiUtPrefixedNamespaceError ( + const char *ModuleName, + UINT32 LineNumber, + ACPI_GENERIC_STATE *PrefixScope, + const char *InternalPath, + ACPI_STATUS LookupStatus) +{ + char *FullPath; + const char *Message; + + + /* + * Main cases: + * 1) Object creation, object must not already exist + * 2) Object lookup, object must exist + */ + switch (LookupStatus) + { + case AE_ALREADY_EXISTS: + + AcpiOsPrintf (ACPI_MSG_BIOS_ERROR); + Message = "Failure creating"; + break; + + case AE_NOT_FOUND: + + AcpiOsPrintf (ACPI_MSG_BIOS_ERROR); + Message = "Failure looking up"; + break; + + default: + + AcpiOsPrintf (ACPI_MSG_ERROR); + Message = "Failure looking up"; + break; + } + + /* Concatenate the prefix path and the internal path */ + + FullPath = AcpiNsBuildPrefixedPathname (PrefixScope, InternalPath); + + AcpiOsPrintf ("%s [%s], %s", Message, + FullPath ? FullPath : "Could not get pathname", + AcpiFormatException (LookupStatus)); + + if (FullPath) + { + ACPI_FREE (FullPath); + } + + ACPI_MSG_SUFFIX; +} + + +#ifdef __OBSOLETE_FUNCTION +/******************************************************************************* + * * FUNCTION: AcpiUtNamespaceError * * PARAMETERS: ModuleName - Caller's module name (for error output) @@ -378,7 +454,7 @@ AcpiUtNamespaceError ( ACPI_MSG_SUFFIX; ACPI_MSG_REDIRECT_END; } - +#endif /******************************************************************************* * diff --git a/sys/contrib/dev/acpica/source/components/utilities/uteval.c b/sys/contrib/dev/acpica/source/components/utilities/uteval.c index 7a5062f5b3..86c51a2a8b 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/uteval.c +++ b/sys/contrib/dev/acpica/source/components/utilities/uteval.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/utilities/utexcep.c b/sys/contrib/dev/acpica/source/components/utilities/utexcep.c index b7faf09861..8d6dad09fc 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utexcep.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utexcep.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/utilities/utglobal.c b/sys/contrib/dev/acpica/source/components/utilities/utglobal.c index 0cbc9a0950..a41c17da72 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utglobal.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utglobal.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/utilities/uthex.c b/sys/contrib/dev/acpica/source/components/utilities/uthex.c index 8c7bcccc2f..d6713fe538 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/uthex.c +++ b/sys/contrib/dev/acpica/source/components/utilities/uthex.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/utilities/utids.c b/sys/contrib/dev/acpica/source/components/utilities/utids.c index ca65f41f37..549075eb62 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utids.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utids.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/utilities/utinit.c b/sys/contrib/dev/acpica/source/components/utilities/utinit.c index d1937a57aa..66a7533597 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utinit.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utinit.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -334,7 +334,6 @@ AcpiUtInitGlobals ( AcpiGbl_NextOwnerIdOffset = 0; AcpiGbl_DebuggerConfiguration = DEBUGGER_THREADING; AcpiGbl_OsiMutex = NULL; - AcpiGbl_MaxLoopIterations = ACPI_MAX_LOOP_COUNT; /* Hardware oriented */ diff --git a/sys/contrib/dev/acpica/source/components/utilities/utlock.c b/sys/contrib/dev/acpica/source/components/utilities/utlock.c index f8680a31d7..fdc7142358 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utlock.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utlock.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/utilities/utmath.c b/sys/contrib/dev/acpica/source/components/utilities/utmath.c index 4aa940251d..322d99736a 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utmath.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utmath.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -260,7 +260,7 @@ AcpiUtShortShiftLeft ( if ((Count & 63) >= 32) { OperandOvl.Part.Hi = OperandOvl.Part.Lo; - OperandOvl.Part.Lo ^= OperandOvl.Part.Lo; + OperandOvl.Part.Lo = 0; Count = (Count & 63) - 32; } ACPI_SHIFT_LEFT_64_BY_32 (OperandOvl.Part.Hi, @@ -305,7 +305,7 @@ AcpiUtShortShiftRight ( if ((Count & 63) >= 32) { OperandOvl.Part.Lo = OperandOvl.Part.Hi; - OperandOvl.Part.Hi ^= OperandOvl.Part.Hi; + OperandOvl.Part.Hi = 0; Count = (Count & 63) - 32; } ACPI_SHIFT_RIGHT_64_BY_32 (OperandOvl.Part.Hi, diff --git a/sys/contrib/dev/acpica/source/components/utilities/utmisc.c b/sys/contrib/dev/acpica/source/components/utilities/utmisc.c index 7280bca7e4..0e04aff069 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utmisc.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utmisc.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/utilities/utmutex.c b/sys/contrib/dev/acpica/source/components/utilities/utmutex.c index 7297929ca0..9c0393dc36 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utmutex.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utmutex.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -432,8 +432,8 @@ AcpiUtAcquireMutex ( else { ACPI_EXCEPTION ((AE_INFO, Status, - "Thread %u could not acquire Mutex [0x%X]", - (UINT32) ThisThreadId, MutexId)); + "Thread %u could not acquire Mutex [%s] (0x%X)", + (UINT32) ThisThreadId, AcpiUtGetMutexName (MutexId), MutexId)); } return (Status); @@ -473,7 +473,8 @@ AcpiUtReleaseMutex ( if (AcpiGbl_MutexInfo[MutexId].ThreadId == ACPI_MUTEX_NOT_ACQUIRED) { ACPI_ERROR ((AE_INFO, - "Mutex [0x%X] is not acquired, cannot release", MutexId)); + "Mutex [%s] (0x%X) is not acquired, cannot release", + AcpiUtGetMutexName (MutexId), MutexId)); return (AE_NOT_ACQUIRED); } diff --git a/sys/contrib/dev/acpica/source/components/utilities/utnonansi.c b/sys/contrib/dev/acpica/source/components/utilities/utnonansi.c index f9551d05af..a86a3b7401 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utnonansi.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utnonansi.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -271,7 +271,7 @@ AcpiUtStricmp ( } -#if defined (ACPI_DEBUGGER) || defined (ACPI_APPLICATION) +#if defined (ACPI_DEBUGGER) || defined (ACPI_APPLICATION) || defined (ACPI_DEBUG_OUTPUT) /******************************************************************************* * * FUNCTION: AcpiUtSafeStrcpy, AcpiUtSafeStrcat, AcpiUtSafeStrncat @@ -344,4 +344,17 @@ AcpiUtSafeStrncat ( strncat (Dest, Source, MaxTransferLength); return (FALSE); } + +void +AcpiUtSafeStrncpy ( + char *Dest, + char *Source, + ACPI_SIZE DestSize) +{ + /* Always terminate destination string */ + + strncpy (Dest, Source, DestSize); + Dest[DestSize - 1] = 0; +} + #endif diff --git a/sys/contrib/dev/acpica/source/components/utilities/utobject.c b/sys/contrib/dev/acpica/source/components/utilities/utobject.c index 65aae85f6d..65ff9d1ba6 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utobject.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utobject.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/utilities/utosi.c b/sys/contrib/dev/acpica/source/components/utilities/utosi.c index d8f299edc6..e636907864 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utosi.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utosi.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -214,6 +214,9 @@ static ACPI_INTERFACE_INFO AcpiDefaultSupportedInterfaces[] = {"Windows 2012", NULL, 0, ACPI_OSI_WIN_8}, /* Windows 8 and Server 2012 - Added 08/2012 */ {"Windows 2013", NULL, 0, ACPI_OSI_WIN_8}, /* Windows 8.1 and Server 2012 R2 - Added 01/2014 */ {"Windows 2015", NULL, 0, ACPI_OSI_WIN_10}, /* Windows 10 - Added 03/2015 */ + {"Windows 2016", NULL, 0, ACPI_OSI_WIN_10_RS1}, /* Windows 10 version 1607 - Added 12/2017 */ + {"Windows 2017", NULL, 0, ACPI_OSI_WIN_10_RS2}, /* Windows 10 version 1703 - Added 12/2017 */ + {"Windows 2017.2", NULL, 0, ACPI_OSI_WIN_10_RS3}, /* Windows 10 version 1709 - Added 02/2018 */ /* Feature Group Strings */ diff --git a/sys/contrib/dev/acpica/source/components/utilities/utownerid.c b/sys/contrib/dev/acpica/source/components/utilities/utownerid.c index a54513f65a..7281db92c1 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utownerid.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utownerid.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/utilities/utpredef.c b/sys/contrib/dev/acpica/source/components/utilities/utpredef.c index 20c440d987..4b94c90d7e 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utpredef.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utpredef.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/utilities/utprint.c b/sys/contrib/dev/acpica/source/components/utilities/utprint.c index b656af3367..a3516a47a2 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utprint.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utprint.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -724,6 +724,7 @@ vsnprintf ( case 'X': Type |= ACPI_FORMAT_UPPER; + /* FALLTHROUGH */ case 'x': diff --git a/sys/contrib/dev/acpica/source/components/utilities/utresdecode.c b/sys/contrib/dev/acpica/source/components/utilities/utresdecode.c index 10d848742c..2a2159da03 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utresdecode.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utresdecode.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/utilities/utresrc.c b/sys/contrib/dev/acpica/source/components/utilities/utresrc.c index 29aa84ad62..abb5451045 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utresrc.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utresrc.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/utilities/utstate.c b/sys/contrib/dev/acpica/source/components/utilities/utstate.c index 8effe5baa3..472019f78a 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utstate.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utstate.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/utilities/utstring.c b/sys/contrib/dev/acpica/source/components/utilities/utstring.c index 9b1fc91c71..6e4458af9e 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utstring.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utstring.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -303,7 +303,7 @@ AcpiUtRepairName ( * Special case for the root node. This can happen if we get an * error during the execution of module-level code. */ - if (ACPI_COMPARE_NAME (Name, "\\___")) + if (ACPI_COMPARE_NAME (Name, ACPI_ROOT_PATHNAME)) { return; } diff --git a/sys/contrib/dev/acpica/source/components/utilities/utstrsuppt.c b/sys/contrib/dev/acpica/source/components/utilities/utstrsuppt.c index 9197a57a5f..2e7232a3b0 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utstrsuppt.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utstrsuppt.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -167,13 +167,13 @@ AcpiUtInsertDigit ( static ACPI_STATUS AcpiUtStrtoulMultiply64 ( UINT64 Multiplicand, - UINT64 Multiplier, + UINT32 Base, UINT64 *OutProduct); static ACPI_STATUS AcpiUtStrtoulAdd64 ( UINT64 Addend1, - UINT64 Addend2, + UINT32 Digit, UINT64 *OutSum); @@ -518,7 +518,7 @@ AcpiUtInsertDigit ( * FUNCTION: AcpiUtStrtoulMultiply64 * * PARAMETERS: Multiplicand - Current accumulated converted integer - * Multiplier - Base/Radix + * Base - Base/Radix * OutProduct - Where the product is returned * * RETURN: Status and 64-bit product @@ -532,28 +532,36 @@ AcpiUtInsertDigit ( static ACPI_STATUS AcpiUtStrtoulMultiply64 ( UINT64 Multiplicand, - UINT64 Multiplier, + UINT32 Base, UINT64 *OutProduct) { UINT64 Product; + UINT64 Quotient; /* Exit if either operand is zero */ *OutProduct = 0; - if (!Multiplicand || !Multiplier) + if (!Multiplicand || !Base) { return (AE_OK); } - /* Check for 64-bit overflow before the actual multiplication */ - - if (Multiplicand > (ACPI_UINT64_MAX / Multiplier)) + /* + * Check for 64-bit overflow before the actual multiplication. + * + * Notes: 64-bit division is often not supported on 32-bit platforms + * (it requires a library function), Therefore ACPICA has a local + * 64-bit divide function. Also, Multiplier is currently only used + * as the radix (8/10/16), to the 64/32 divide will always work. + */ + AcpiUtShortDivide (ACPI_UINT64_MAX, Base, &Quotient, NULL); + if (Multiplicand > Quotient) { return (AE_NUMERIC_OVERFLOW); } - Product = Multiplicand * Multiplier; + Product = Multiplicand * Base; /* Check for 32-bit overflow if necessary */ @@ -572,7 +580,7 @@ AcpiUtStrtoulMultiply64 ( * FUNCTION: AcpiUtStrtoulAdd64 * * PARAMETERS: Addend1 - Current accumulated converted integer - * Addend2 - New hex value/char + * Digit - New hex value/char * OutSum - Where sum is returned (Accumulator) * * RETURN: Status and 64-bit sum @@ -586,7 +594,7 @@ AcpiUtStrtoulMultiply64 ( static ACPI_STATUS AcpiUtStrtoulAdd64 ( UINT64 Addend1, - UINT64 Addend2, + UINT32 Digit, UINT64 *OutSum) { UINT64 Sum; @@ -594,12 +602,12 @@ AcpiUtStrtoulAdd64 ( /* Check for 64-bit overflow before the actual addition */ - if ((Addend1 > 0) && (Addend2 > (ACPI_UINT64_MAX - Addend1))) + if ((Addend1 > 0) && (Digit > (ACPI_UINT64_MAX - Addend1))) { return (AE_NUMERIC_OVERFLOW); } - Sum = Addend1 + Addend2; + Sum = Addend1 + Digit; /* Check for 32-bit overflow if necessary */ diff --git a/sys/contrib/dev/acpica/source/components/utilities/utstrtoul64.c b/sys/contrib/dev/acpica/source/components/utilities/utstrtoul64.c index 34cef95b50..5bbf24fd80 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utstrtoul64.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utstrtoul64.c @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/utilities/uttrack.c b/sys/contrib/dev/acpica/source/components/utilities/uttrack.c index a88a4a3de8..7905e5a100 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/uttrack.c +++ b/sys/contrib/dev/acpica/source/components/utilities/uttrack.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -557,8 +557,7 @@ AcpiUtTrackAllocation ( Allocation->Component = Component; Allocation->Line = Line; - strncpy (Allocation->Module, Module, ACPI_MAX_MODULE_NAME); - Allocation->Module[ACPI_MAX_MODULE_NAME-1] = 0; + AcpiUtSafeStrncpy (Allocation->Module, (char *) Module, ACPI_MAX_MODULE_NAME); if (!Element) { @@ -891,7 +890,7 @@ Exit: } else { - ACPI_ERROR ((AE_INFO, "%u(0x%X) Outstanding allocations", + ACPI_ERROR ((AE_INFO, "%u (0x%X) Outstanding cache allocations", NumOutstanding, NumOutstanding)); } diff --git a/sys/contrib/dev/acpica/source/components/utilities/utuuid.c b/sys/contrib/dev/acpica/source/components/utilities/utuuid.c index 3f9c085d00..634eb7aef1 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utuuid.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utuuid.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/utilities/utxface.c b/sys/contrib/dev/acpica/source/components/utilities/utxface.c index 27df7c31b4..56f09c997c 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utxface.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utxface.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/components/utilities/utxferror.c b/sys/contrib/dev/acpica/source/components/utilities/utxferror.c index a81352b93e..0ca022b810 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utxferror.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utxferror.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -214,8 +214,8 @@ ACPI_EXPORT_SYMBOL (AcpiError) * * RETURN: None * - * DESCRIPTION: Print "ACPI Exception" message with module/line/version info - * and decoded ACPI_STATUS. + * DESCRIPTION: Print an "ACPI Error" message with module/line/version + * info as well as decoded ACPI_STATUS. * ******************************************************************************/ @@ -236,12 +236,12 @@ AcpiException ( if (ACPI_SUCCESS (Status)) { - AcpiOsPrintf (ACPI_MSG_EXCEPTION); + AcpiOsPrintf (ACPI_MSG_ERROR); } else { - AcpiOsPrintf (ACPI_MSG_EXCEPTION "%s, ", + AcpiOsPrintf (ACPI_MSG_ERROR "%s, ", AcpiFormatException (Status)); } diff --git a/sys/contrib/dev/acpica/source/components/utilities/utxfinit.c b/sys/contrib/dev/acpica/source/components/utilities/utxfinit.c index b4e6a7eb81..d24b6aa22e 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utxfinit.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utxfinit.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -381,43 +381,31 @@ AcpiInitializeObjects ( ACPI_FUNCTION_TRACE (AcpiInitializeObjects); -#ifdef ACPI_EXEC_APP /* - * This call implements the "initialization file" option for AcpiExec. - * This is the precise point that we want to perform the overrides. + * This case handles the legacy option that groups all module-level + * code blocks together and defers execution until all of the tables + * are loaded. Execute all of these blocks at this time. + * Execute any module-level code that was detected during the table + * load phase. + * + * Note: this option is deprecated and will be eliminated in the + * future. Use of this option can cause problems with AML code that + * depends upon in-order immediate execution of module-level code. */ - AeDoObjectOverrides (); -#endif + AcpiNsExecModuleCodeList (); /* - * Execute any module-level code that was detected during the table load - * phase. Although illegal since ACPI 2.0, there are many machines that - * contain this type of code. Each block of detected executable AML code - * outside of any control method is wrapped with a temporary control - * method object and placed on a global list. The methods on this list - * are executed below. - * - * This case executes the module-level code for all tables only after - * all of the tables have been loaded. It is a legacy option and is - * not compatible with other ACPI implementations. See AcpiNsLoadTable. + * Initialize the objects that remain uninitialized. This + * runs the executable AML that may be part of the + * declaration of these objects: + * OperationRegions, BufferFields, Buffers, and Packages. */ - if (!AcpiGbl_ParseTableAsTermList && AcpiGbl_GroupModuleLevelCode) + if (!(Flags & ACPI_NO_OBJECT_INIT)) { - AcpiNsExecModuleCodeList (); - - /* - * Initialize the objects that remain uninitialized. This - * runs the executable AML that may be part of the - * declaration of these objects: - * OperationRegions, BufferFields, Buffers, and Packages. - */ - if (!(Flags & ACPI_NO_OBJECT_INIT)) + Status = AcpiNsInitializeObjects (); + if (ACPI_FAILURE (Status)) { - Status = AcpiNsInitializeObjects (); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } + return_ACPI_STATUS (Status); } } diff --git a/sys/contrib/dev/acpica/source/components/utilities/utxfmutex.c b/sys/contrib/dev/acpica/source/components/utilities/utxfmutex.c index 2f93b10821..0e1ee437c8 100644 --- a/sys/contrib/dev/acpica/source/components/utilities/utxfmutex.c +++ b/sys/contrib/dev/acpica/source/components/utilities/utxfmutex.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/acapps.h b/sys/contrib/dev/acpica/source/include/acapps.h index 4ca3e80fb3..dcaebd792c 100644 --- a/sys/contrib/dev/acpica/source/include/acapps.h +++ b/sys/contrib/dev/acpica/source/include/acapps.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -159,7 +159,7 @@ /* Common info for tool signons */ #define ACPICA_NAME "Intel ACPI Component Architecture" -#define ACPICA_COPYRIGHT "Copyright (c) 2000 - 2017 Intel Corporation" +#define ACPICA_COPYRIGHT "Copyright (c) 2000 - 2018 Intel Corporation" #if ACPI_MACHINE_WIDTH == 64 #define ACPI_WIDTH " (64-bit version)" @@ -188,6 +188,9 @@ Prefix, ACPICA_COPYRIGHT, \ Prefix +#define ACPI_COMMON_BUILD_TIME \ + "Build date/time: %s %s\n", __DATE__, __TIME__ + /* Macros for usage messages */ #define ACPI_USAGE_HEADER(Usage) \ @@ -322,6 +325,10 @@ FlSplitInputPathname ( char **OutFilename); char * +FlGetFileBasename ( + char *FilePathname); + +char * AdGenerateFilename ( char *Prefix, char *TableId); diff --git a/sys/contrib/dev/acpica/source/include/acbuffer.h b/sys/contrib/dev/acpica/source/include/acbuffer.h index 41356ee007..857d8bc05a 100644 --- a/sys/contrib/dev/acpica/source/include/acbuffer.h +++ b/sys/contrib/dev/acpica/source/include/acbuffer.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/acclib.h b/sys/contrib/dev/acpica/source/include/acclib.h index 9c00bf54c7..7c4c9a2e88 100644 --- a/sys/contrib/dev/acpica/source/include/acclib.h +++ b/sys/contrib/dev/acpica/source/include/acclib.h @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/accommon.h b/sys/contrib/dev/acpica/source/include/accommon.h index 14fa29ec80..357df162e8 100644 --- a/sys/contrib/dev/acpica/source/include/accommon.h +++ b/sys/contrib/dev/acpica/source/include/accommon.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/acconfig.h b/sys/contrib/dev/acpica/source/include/acconfig.h index 6fc043639e..c5a67ca047 100644 --- a/sys/contrib/dev/acpica/source/include/acconfig.h +++ b/sys/contrib/dev/acpica/source/include/acconfig.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -255,9 +255,9 @@ #define ACPI_ADDRESS_RANGE_MAX 2 -/* Maximum number of While() loops before abort */ +/* Maximum time (default 30s) of While() loops before abort */ -#define ACPI_MAX_LOOP_COUNT 0x000FFFFF +#define ACPI_MAX_LOOP_TIMEOUT 30 /****************************************************************************** diff --git a/sys/contrib/dev/acpica/source/include/acconvert.h b/sys/contrib/dev/acpica/source/include/acconvert.h index 4b239586ff..cdefc68d46 100644 --- a/sys/contrib/dev/acpica/source/include/acconvert.h +++ b/sys/contrib/dev/acpica/source/include/acconvert.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/acdebug.h b/sys/contrib/dev/acpica/source/include/acdebug.h index a1bc5426ea..51a85f3057 100644 --- a/sys/contrib/dev/acpica/source/include/acdebug.h +++ b/sys/contrib/dev/acpica/source/include/acdebug.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -452,6 +452,12 @@ AcpiDbExecute ( UINT32 Flags); void +AcpiDbCreateExecutionThread ( + char *MethodNameArg, + char **Arguments, + ACPI_OBJECT_TYPE *Types); + +void AcpiDbCreateExecutionThreads ( char *NumThreadsArg, char *NumLoopsArg, diff --git a/sys/contrib/dev/acpica/source/include/acdisasm.h b/sys/contrib/dev/acpica/source/include/acdisasm.h index 26d4f47b70..7f7f7bf8b3 100644 --- a/sys/contrib/dev/acpica/source/include/acdisasm.h +++ b/sys/contrib/dev/acpica/source/include/acdisasm.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -272,8 +272,10 @@ typedef enum ACPI_DMT_PMTT, ACPI_DMT_PPTT, ACPI_DMT_SDEI, + ACPI_DMT_SDEV, ACPI_DMT_SLIC, ACPI_DMT_SRAT, + ACPI_DMT_TPM2, /* Special opcodes */ @@ -502,6 +504,8 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoNfit4[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoNfit5[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoNfit6[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoNfit6a[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNfit7[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoPdtt[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt1[]; @@ -515,6 +519,7 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct3[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct4[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoPdtt0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPptt0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPptt0a[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPptt1[]; @@ -529,6 +534,13 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoS3pt0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoS3pt1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSbst[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSdei[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoSdev[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoSdevHdr[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoSdev0[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoSdev0a[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoSdev1[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoSdev1a[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoSdev1b[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSlic[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSlit[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSpcr[]; @@ -546,6 +558,8 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaClient[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaServer[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoTpm2[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoTpm2a[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoTpm211[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoUefi[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoVrtc[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoVrtc0[]; @@ -586,7 +600,7 @@ AcpiDmDumpTable ( UINT32 TableLength, UINT32 TableOffset, void *Table, - UINT32 SubTableLength, + UINT32 SubtableLength, ACPI_DMTABLE_INFO *Info); void @@ -713,6 +727,10 @@ AcpiDmDumpPcct ( ACPI_TABLE_HEADER *Table); void +AcpiDmDumpPdtt ( + ACPI_TABLE_HEADER *Table); + +void AcpiDmDumpPmtt ( ACPI_TABLE_HEADER *Table); @@ -733,6 +751,10 @@ AcpiDmDumpS3pt ( ACPI_TABLE_HEADER *Table); void +AcpiDmDumpSdev ( + ACPI_TABLE_HEADER *Table); + +void AcpiDmDumpSlic ( ACPI_TABLE_HEADER *Table); @@ -753,6 +775,10 @@ AcpiDmDumpTcpa ( ACPI_TABLE_HEADER *Table); void +AcpiDmDumpTpm2 ( + ACPI_TABLE_HEADER *Table); + +void AcpiDmDumpVrtc ( ACPI_TABLE_HEADER *Table); diff --git a/sys/contrib/dev/acpica/source/include/acdispat.h b/sys/contrib/dev/acpica/source/include/acdispat.h index bae3d79472..fd6a1e834e 100644 --- a/sys/contrib/dev/acpica/source/include/acdispat.h +++ b/sys/contrib/dev/acpica/source/include/acdispat.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/acevents.h b/sys/contrib/dev/acpica/source/include/acevents.h index f15d3772dd..3dc36606ba 100644 --- a/sys/contrib/dev/acpica/source/include/acevents.h +++ b/sys/contrib/dev/acpica/source/include/acevents.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -154,6 +154,21 @@ /* + * Conditions to trigger post enabling GPE polling: + * It is not sufficient to trigger edge-triggered GPE with specific GPE + * chips, software need to poll once after enabling. + */ +#ifdef ACPI_USE_GPE_POLLING +#define ACPI_GPE_IS_POLLING_NEEDED(__gpe__) \ + ((__gpe__)->RuntimeCount == 1 && \ + (__gpe__)->Flags & ACPI_GPE_INITIALIZED && \ + ((__gpe__)->Flags & ACPI_GPE_XRUPT_TYPE_MASK) == ACPI_GPE_EDGE_TRIGGERED) +#else +#define ACPI_GPE_IS_POLLING_NEEDED(__gpe__) FALSE +#endif + + +/* * evevent */ ACPI_STATUS @@ -250,6 +265,12 @@ ACPI_STATUS AcpiEvFinishGpe ( ACPI_GPE_EVENT_INFO *GpeEventInfo); +UINT32 +AcpiEvDetectGpe ( + ACPI_NAMESPACE_NODE *GpeDevice, + ACPI_GPE_EVENT_INFO *GpeEventInfo, + UINT32 GpeNumber); + /* * evgpeblk - Upper-level GPE block support diff --git a/sys/contrib/dev/acpica/source/include/acexcep.h b/sys/contrib/dev/acpica/source/include/acexcep.h index d808f27514..828f9fb948 100644 --- a/sys/contrib/dev/acpica/source/include/acexcep.h +++ b/sys/contrib/dev/acpica/source/include/acexcep.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -241,8 +241,9 @@ typedef struct acpi_exception_info #define AE_HEX_OVERFLOW EXCEP_ENV (0x0020) #define AE_DECIMAL_OVERFLOW EXCEP_ENV (0x0021) #define AE_OCTAL_OVERFLOW EXCEP_ENV (0x0022) +#define AE_END_OF_TABLE EXCEP_ENV (0x0023) -#define AE_CODE_ENV_MAX 0x0022 +#define AE_CODE_ENV_MAX 0x0023 /* @@ -309,7 +310,7 @@ typedef struct acpi_exception_info #define AE_AML_CIRCULAR_REFERENCE EXCEP_AML (0x001E) #define AE_AML_BAD_RESOURCE_LENGTH EXCEP_AML (0x001F) #define AE_AML_ILLEGAL_ADDRESS EXCEP_AML (0x0020) -#define AE_AML_INFINITE_LOOP EXCEP_AML (0x0021) +#define AE_AML_LOOP_TIMEOUT EXCEP_AML (0x0021) #define AE_AML_UNINITIALIZED_NODE EXCEP_AML (0x0022) #define AE_AML_TARGET_TYPE EXCEP_AML (0x0023) @@ -379,7 +380,8 @@ static const ACPI_EXCEPTION_INFO AcpiGbl_ExceptionNames_Env[] = EXCEP_TXT ("AE_NUMERIC_OVERFLOW", "Overflow during string-to-integer conversion"), EXCEP_TXT ("AE_HEX_OVERFLOW", "Overflow during ASCII hex-to-binary conversion"), EXCEP_TXT ("AE_DECIMAL_OVERFLOW", "Overflow during ASCII decimal-to-binary conversion"), - EXCEP_TXT ("AE_OCTAL_OVERFLOW", "Overflow during ASCII octal-to-binary conversion") + EXCEP_TXT ("AE_OCTAL_OVERFLOW", "Overflow during ASCII octal-to-binary conversion"), + EXCEP_TXT ("AE_END_OF_TABLE", "Reached the end of table") }; static const ACPI_EXCEPTION_INFO AcpiGbl_ExceptionNames_Pgm[] = @@ -441,7 +443,7 @@ static const ACPI_EXCEPTION_INFO AcpiGbl_ExceptionNames_Aml[] = EXCEP_TXT ("AE_AML_CIRCULAR_REFERENCE", "Two references refer to each other"), EXCEP_TXT ("AE_AML_BAD_RESOURCE_LENGTH", "The length of a Resource Descriptor in the AML is incorrect"), EXCEP_TXT ("AE_AML_ILLEGAL_ADDRESS", "A memory, I/O, or PCI configuration address is invalid"), - EXCEP_TXT ("AE_AML_INFINITE_LOOP", "An apparent infinite AML While loop, method was aborted"), + EXCEP_TXT ("AE_AML_LOOP_TIMEOUT", "An AML While loop exceeded the maximum execution time"), EXCEP_TXT ("AE_AML_UNINITIALIZED_NODE", "A namespace node is uninitialized or unresolved"), EXCEP_TXT ("AE_AML_TARGET_TYPE", "A target operand of an incorrect type was encountered") }; diff --git a/sys/contrib/dev/acpica/source/include/acglobal.h b/sys/contrib/dev/acpica/source/include/acglobal.h index b05353df5e..b48b6c53c6 100644 --- a/sys/contrib/dev/acpica/source/include/acglobal.h +++ b/sys/contrib/dev/acpica/source/include/acglobal.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -155,7 +155,7 @@ /***************************************************************************** * - * Globals related to the ACPI tables + * Globals related to the incoming ACPI tables * ****************************************************************************/ @@ -197,7 +197,7 @@ ACPI_GLOBAL (UINT8, AcpiGbl_IntegerNybbleWidth); /***************************************************************************** * - * Mutual exclusion within ACPICA subsystem + * Mutual exclusion within the ACPICA subsystem * ****************************************************************************/ @@ -278,7 +278,7 @@ ACPI_GLOBAL (UINT8, AcpiGbl_NextOwnerIdOffset); ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_NamespaceInitialized, FALSE); -/* Misc */ +/* Miscellaneous */ ACPI_GLOBAL (UINT32, AcpiGbl_OriginalMode); ACPI_GLOBAL (UINT32, AcpiGbl_NsLookupCount); @@ -301,11 +301,9 @@ extern const char AcpiGbl_LowerHexDigits[]; extern const char AcpiGbl_UpperHexDigits[]; extern const ACPI_OPCODE_INFO AcpiGbl_AmlOpInfo[AML_NUM_OPCODES]; - -#ifdef ACPI_DBG_TRACK_ALLOCATIONS - /* Lists for tracking memory allocations (debug only) */ +#ifdef ACPI_DBG_TRACK_ALLOCATIONS ACPI_GLOBAL (ACPI_MEMORY_LIST *, AcpiGbl_GlobalList); ACPI_GLOBAL (ACPI_MEMORY_LIST *, AcpiGbl_NsNodeList); ACPI_GLOBAL (BOOLEAN, AcpiGbl_DisplayFinalMemStats); @@ -315,7 +313,7 @@ ACPI_GLOBAL (BOOLEAN, AcpiGbl_DisableMemTracking); /***************************************************************************** * - * Namespace globals + * ACPI Namespace * ****************************************************************************/ @@ -330,7 +328,6 @@ ACPI_GLOBAL (ACPI_NAMESPACE_NODE *, AcpiGbl_RootNode); ACPI_GLOBAL (ACPI_NAMESPACE_NODE *, AcpiGbl_FadtGpeDevice); ACPI_GLOBAL (ACPI_OPERAND_OBJECT *, AcpiGbl_ModuleCodeList); - extern const UINT8 AcpiGbl_NsProperties [ACPI_NUM_NS_TYPES]; extern const ACPI_PREDEFINED_NAMES AcpiGbl_PreDefinedNames [NUM_PREDEFINED_NAMES]; @@ -347,15 +344,20 @@ ACPI_INIT_GLOBAL (UINT32, AcpiGbl_NestingLevel, 0); /***************************************************************************** * - * Interpreter globals + * Interpreter/Parser globals * ****************************************************************************/ -ACPI_GLOBAL (ACPI_THREAD_STATE *, AcpiGbl_CurrentWalkList); - /* Control method single step flag */ ACPI_GLOBAL (UINT8, AcpiGbl_CmSingleStep); +ACPI_GLOBAL (ACPI_THREAD_STATE *, AcpiGbl_CurrentWalkList); +ACPI_INIT_GLOBAL (ACPI_PARSE_OBJECT, *AcpiGbl_CurrentScope, NULL); + +/* ASL/ASL+ converter */ + +ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_CaptureComments, FALSE); +ACPI_INIT_GLOBAL (ACPI_COMMENT_NODE, *AcpiGbl_LastListHead, NULL); /***************************************************************************** @@ -365,7 +367,6 @@ ACPI_GLOBAL (UINT8, AcpiGbl_CmSingleStep); ****************************************************************************/ extern ACPI_BIT_REGISTER_INFO AcpiGbl_BitRegisterInfo[ACPI_NUM_BITREG]; - ACPI_GLOBAL (UINT8, AcpiGbl_SleepTypeA); ACPI_GLOBAL (UINT8, AcpiGbl_SleepTypeB); @@ -377,18 +378,16 @@ ACPI_GLOBAL (UINT8, AcpiGbl_SleepTypeB); ****************************************************************************/ #if (!ACPI_REDUCED_HARDWARE) - ACPI_GLOBAL (UINT8, AcpiGbl_AllGpesInitialized); ACPI_GLOBAL (ACPI_GPE_XRUPT_INFO *, AcpiGbl_GpeXruptListHead); ACPI_GLOBAL (ACPI_GPE_BLOCK_INFO *, AcpiGbl_GpeFadtBlocks[ACPI_MAX_GPE_BLOCKS]); ACPI_GLOBAL (ACPI_GBL_EVENT_HANDLER, AcpiGbl_GlobalEventHandler); ACPI_GLOBAL (void *, AcpiGbl_GlobalEventHandlerContext); ACPI_GLOBAL (ACPI_FIXED_EVENT_HANDLER, AcpiGbl_FixedEventHandlers[ACPI_NUM_FIXED_EVENTS]); - extern ACPI_FIXED_EVENT_INFO AcpiGbl_FixedEventInfo[ACPI_NUM_FIXED_EVENTS]; - #endif /* !ACPI_REDUCED_HARDWARE */ + /***************************************************************************** * * Debug support @@ -402,7 +401,7 @@ ACPI_GLOBAL (UINT32, AcpiGpeCount); ACPI_GLOBAL (UINT32, AcpiSciCount); ACPI_GLOBAL (UINT32, AcpiFixedEventCount[ACPI_NUM_FIXED_EVENTS]); -/* Support for dynamic control method tracing mechanism */ +/* Dynamic control method tracing mechanism */ ACPI_GLOBAL (UINT32, AcpiGbl_OriginalDbgLevel); ACPI_GLOBAL (UINT32, AcpiGbl_OriginalDbgLayer); @@ -410,12 +409,13 @@ ACPI_GLOBAL (UINT32, AcpiGbl_OriginalDbgLayer); /***************************************************************************** * - * Debugger and Disassembler globals + * Debugger and Disassembler * ****************************************************************************/ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_DbOutputFlags, ACPI_DB_CONSOLE_OUTPUT); + #ifdef ACPI_DISASSEMBLER /* Do not disassemble buffers to resource descriptors */ @@ -427,7 +427,7 @@ ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_ForceAmlDisassembly, FALSE); ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_DmOpt_Verbose, TRUE); ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_DmEmitExternalOpcodes, FALSE); ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_DoDisassemblerOptimizations, TRUE); -ACPI_INIT_GLOBAL (ACPI_PARSE_OBJECT_LIST, *AcpiGbl_TempListHead, NULL); +ACPI_INIT_GLOBAL (ACPI_PARSE_OBJECT_LIST, *AcpiGbl_TempListHead, NULL); ACPI_GLOBAL (BOOLEAN, AcpiGbl_DmOpt_Disasm); ACPI_GLOBAL (BOOLEAN, AcpiGbl_DmOpt_Listing); @@ -438,7 +438,6 @@ ACPI_GLOBAL (ACPI_EXTERNAL_FILE *, AcpiGbl_ExternalFileList); #endif #ifdef ACPI_DEBUGGER - ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_AbortMethod, FALSE); ACPI_INIT_GLOBAL (ACPI_THREAD_ID, AcpiGbl_DbThreadId, ACPI_INVALID_THREAD_ID); @@ -452,7 +451,6 @@ ACPI_GLOBAL (UINT32, AcpiGbl_DbConsoleDebugLevel); ACPI_GLOBAL (ACPI_NAMESPACE_NODE *, AcpiGbl_DbScopeNode); ACPI_GLOBAL (BOOLEAN, AcpiGbl_DbTerminateLoop); ACPI_GLOBAL (BOOLEAN, AcpiGbl_DbThreadsTerminated); - ACPI_GLOBAL (char *, AcpiGbl_DbArgs[ACPI_DEBUGGER_MAX_ARGS]); ACPI_GLOBAL (ACPI_OBJECT_TYPE, AcpiGbl_DbArgTypes[ACPI_DEBUGGER_MAX_ARGS]); @@ -462,60 +460,54 @@ ACPI_GLOBAL (char, AcpiGbl_DbParsedBuf[ACPI_DB_LINE_BUFFER_ ACPI_GLOBAL (char, AcpiGbl_DbScopeBuf[ACPI_DB_LINE_BUFFER_SIZE]); ACPI_GLOBAL (char, AcpiGbl_DbDebugFilename[ACPI_DB_LINE_BUFFER_SIZE]); -/* - * Statistic globals - */ +/* Statistics globals */ + ACPI_GLOBAL (UINT16, AcpiGbl_ObjTypeCount[ACPI_TOTAL_TYPES]); ACPI_GLOBAL (UINT16, AcpiGbl_NodeTypeCount[ACPI_TOTAL_TYPES]); ACPI_GLOBAL (UINT16, AcpiGbl_ObjTypeCountMisc); ACPI_GLOBAL (UINT16, AcpiGbl_NodeTypeCountMisc); ACPI_GLOBAL (UINT32, AcpiGbl_NumNodes); ACPI_GLOBAL (UINT32, AcpiGbl_NumObjects); - #endif /* ACPI_DEBUGGER */ #if defined (ACPI_DISASSEMBLER) || defined (ACPI_ASL_COMPILER) - -ACPI_GLOBAL (const char, *AcpiGbl_PldPanelList[]); -ACPI_GLOBAL (const char, *AcpiGbl_PldVerticalPositionList[]); -ACPI_GLOBAL (const char, *AcpiGbl_PldHorizontalPositionList[]); -ACPI_GLOBAL (const char, *AcpiGbl_PldShapeList[]); - +ACPI_GLOBAL (const char, *AcpiGbl_PldPanelList[]); +ACPI_GLOBAL (const char, *AcpiGbl_PldVerticalPositionList[]); +ACPI_GLOBAL (const char, *AcpiGbl_PldHorizontalPositionList[]); +ACPI_GLOBAL (const char, *AcpiGbl_PldShapeList[]); ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_DisasmFlag, FALSE); - #endif -/* - * Meant for the -ca option. - */ -ACPI_INIT_GLOBAL (char*, AcpiGbl_CurrentInlineComment, NULL); -ACPI_INIT_GLOBAL (char*, AcpiGbl_CurrentEndNodeComment, NULL); -ACPI_INIT_GLOBAL (char*, AcpiGbl_CurrentOpenBraceComment, NULL); -ACPI_INIT_GLOBAL (char*, AcpiGbl_CurrentCloseBraceComment, NULL); -ACPI_INIT_GLOBAL (char*, AcpiGbl_RootFilename, NULL); -ACPI_INIT_GLOBAL (char*, AcpiGbl_CurrentFilename, NULL); -ACPI_INIT_GLOBAL (char*, AcpiGbl_CurrentParentFilename, NULL); -ACPI_INIT_GLOBAL (char*, AcpiGbl_CurrentIncludeFilename, NULL); +/***************************************************************************** + * + * ACPICA application-specific globals + * + ****************************************************************************/ + +/* ASL-to-ASL+ conversion utility (implemented within the iASL compiler) */ -ACPI_INIT_GLOBAL (ACPI_COMMENT_NODE, *AcpiGbl_LastListHead, NULL); +#ifdef ACPI_ASL_COMPILER +ACPI_INIT_GLOBAL (char *, AcpiGbl_CurrentInlineComment, NULL); +ACPI_INIT_GLOBAL (char *, AcpiGbl_CurrentEndNodeComment, NULL); +ACPI_INIT_GLOBAL (char *, AcpiGbl_CurrentOpenBraceComment, NULL); +ACPI_INIT_GLOBAL (char *, AcpiGbl_CurrentCloseBraceComment, NULL); + +ACPI_INIT_GLOBAL (char *, AcpiGbl_RootFilename, NULL); +ACPI_INIT_GLOBAL (char *, AcpiGbl_CurrentFilename, NULL); +ACPI_INIT_GLOBAL (char *, AcpiGbl_CurrentParentFilename, NULL); +ACPI_INIT_GLOBAL (char *, AcpiGbl_CurrentIncludeFilename, NULL); ACPI_INIT_GLOBAL (ACPI_COMMENT_NODE, *AcpiGbl_DefBlkCommentListHead, NULL); ACPI_INIT_GLOBAL (ACPI_COMMENT_NODE, *AcpiGbl_DefBlkCommentListTail, NULL); - ACPI_INIT_GLOBAL (ACPI_COMMENT_NODE, *AcpiGbl_RegCommentListHead, NULL); ACPI_INIT_GLOBAL (ACPI_COMMENT_NODE, *AcpiGbl_RegCommentListTail, NULL); - ACPI_INIT_GLOBAL (ACPI_COMMENT_NODE, *AcpiGbl_IncCommentListHead, NULL); ACPI_INIT_GLOBAL (ACPI_COMMENT_NODE, *AcpiGbl_IncCommentListTail, NULL); - ACPI_INIT_GLOBAL (ACPI_COMMENT_NODE, *AcpiGbl_EndBlkCommentListHead, NULL); ACPI_INIT_GLOBAL (ACPI_COMMENT_NODE, *AcpiGbl_EndBlkCommentListTail, NULL); -ACPI_INIT_GLOBAL (ACPI_COMMENT_ADDR_NODE, *AcpiGbl_CommentAddrListHead, NULL); - -ACPI_INIT_GLOBAL (ACPI_PARSE_OBJECT, *AcpiGbl_CurrentScope, NULL); - +ACPI_INIT_GLOBAL (ACPI_COMMENT_ADDR_NODE, *AcpiGbl_CommentAddrListHead, NULL); #ifdef ACPI_APPLICATION ACPI_INIT_GLOBAL (ACPI_FILE_NODE, *AcpiGbl_FileTreeRoot, NULL); #endif @@ -524,21 +516,12 @@ ACPI_GLOBAL (ACPI_CACHE_T *, AcpiGbl_RegCommentCache); ACPI_GLOBAL (ACPI_CACHE_T *, AcpiGbl_CommentAddrCache); ACPI_GLOBAL (ACPI_CACHE_T *, AcpiGbl_FileCache); -ACPI_INIT_GLOBAL (BOOLEAN, Gbl_CaptureComments, FALSE); - -ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_DebugAslConversion, FALSE); -ACPI_INIT_GLOBAL (ACPI_FILE, AcpiGbl_ConvDebugFile, NULL); - -ACPI_GLOBAL (char, AcpiGbl_TableSig[4]); - -/***************************************************************************** - * - * Application globals - * - ****************************************************************************/ +ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_DebugAslConversion, FALSE); +ACPI_INIT_GLOBAL (ACPI_FILE, AcpiGbl_ConvDebugFile, NULL); +ACPI_GLOBAL (char, AcpiGbl_TableSig[4]); +#endif #ifdef ACPI_APPLICATION - ACPI_INIT_GLOBAL (ACPI_FILE, AcpiGbl_DebugFile, NULL); ACPI_INIT_GLOBAL (ACPI_FILE, AcpiGbl_OutputFile, NULL); ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_DebugTimeout, FALSE); @@ -547,18 +530,6 @@ ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_DebugTimeout, FALSE); ACPI_GLOBAL (ACPI_SPINLOCK, AcpiGbl_PrintLock); /* For print buffer */ ACPI_GLOBAL (char, AcpiGbl_PrintBuffer[1024]); - #endif /* ACPI_APPLICATION */ - -/***************************************************************************** - * - * Info/help support - * - ****************************************************************************/ - -extern const AH_PREDEFINED_NAME AslPredefinedInfo[]; -extern const AH_DEVICE_ID AslDeviceIds[]; - - #endif /* __ACGLOBAL_H__ */ diff --git a/sys/contrib/dev/acpica/source/include/achware.h b/sys/contrib/dev/acpica/source/include/achware.h index c3bf8f1523..1c43926c46 100644 --- a/sys/contrib/dev/acpica/source/include/achware.h +++ b/sys/contrib/dev/acpica/source/include/achware.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/acinterp.h b/sys/contrib/dev/acpica/source/include/acinterp.h index d68058cced..fde066dcb8 100644 --- a/sys/contrib/dev/acpica/source/include/acinterp.h +++ b/sys/contrib/dev/acpica/source/include/acinterp.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/aclocal.h b/sys/contrib/dev/acpica/source/include/aclocal.h index f3dd2a5f61..cbef4ac842 100644 --- a/sys/contrib/dev/acpica/source/include/aclocal.h +++ b/sys/contrib/dev/acpica/source/include/aclocal.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -284,7 +284,7 @@ typedef enum * DescriptorType is used to differentiate between internal descriptors. * * The node is optimized for both 32-bit and 64-bit platforms: - * 20 bytes for the 32-bit case, 32 bytes for the 64-bit case. + * 28 bytes for the 32-bit case, 48 bytes for the 64-bit case. * * Note: The DescriptorType and Type fields must appear in the identical * position in both the ACPI_NAMESPACE_NODE and ACPI_OPERAND_OBJECT @@ -301,10 +301,12 @@ typedef struct acpi_namespace_node struct acpi_namespace_node *Parent; /* Parent node */ struct acpi_namespace_node *Child; /* First child */ struct acpi_namespace_node *Peer; /* First peer */ + struct acpi_namespace_node *OwnerList; /* All nodes owned by a table or method */ - /* - * The following fields are used by the ASL compiler and disassembler only - */ +/* + * The following fields are appended to the namespace node and + * are used by the ASL compiler and AML disassembler only + */ #ifdef ACPI_LARGE_NAMESPACE_NODE union acpi_parse_object *Op; void *MethodLocals; @@ -312,7 +314,6 @@ typedef struct acpi_namespace_node UINT32 Value; UINT32 Length; UINT8 ArgCount; - #endif } ACPI_NAMESPACE_NODE; @@ -834,7 +835,7 @@ typedef struct acpi_control_state union acpi_parse_object *PredicateOp; UINT8 *AmlPredicateStart; /* Start of if/while predicate */ UINT8 *PackageEnd; /* End of if/while block */ - UINT32 LoopCount; /* While() loop counter */ + UINT64 LoopTimeout; /* While() loop timeout */ } ACPI_CONTROL_STATE; @@ -1533,16 +1534,17 @@ typedef struct acpi_db_method_info ACPI_OBJECT_TYPE *Types; /* - * Arguments to be passed to method for the command - * Threads - - * the Number of threads, ID of current thread and - * Index of current thread inside all them created. + * Arguments to be passed to method for the commands Threads and + * Background. Note, ACPI specifies a maximum of 7 arguments (0 - 6). + * + * For the Threads command, the Number of threads, ID of current + * thread and Index of current thread inside all them created. */ char InitArgs; #ifdef ACPI_DEBUGGER - ACPI_OBJECT_TYPE ArgTypes[4]; + ACPI_OBJECT_TYPE ArgTypes[ACPI_METHOD_NUM_ARGS]; #endif - char *Arguments[4]; + char *Arguments[ACPI_METHOD_NUM_ARGS]; char NumThreadsStr[11]; char IdOfThreadStr[11]; char IndexOfThreadStr[11]; diff --git a/sys/contrib/dev/acpica/source/include/acmacros.h b/sys/contrib/dev/acpica/source/include/acmacros.h index 9d7ed06d5d..f13523a3dc 100644 --- a/sys/contrib/dev/acpica/source/include/acmacros.h +++ b/sys/contrib/dev/acpica/source/include/acmacros.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -567,21 +567,23 @@ * the plist contains a set of parens to allow variable-length lists. * These macros are used for both the debug and non-debug versions of the code. */ -#define ACPI_ERROR_NAMESPACE(s, e) AcpiUtNamespaceError (AE_INFO, s, e); +#define ACPI_ERROR_NAMESPACE(s, p, e) AcpiUtPrefixedNamespaceError (AE_INFO, s, p, e); #define ACPI_ERROR_METHOD(s, n, p, e) AcpiUtMethodError (AE_INFO, s, n, p, e); #define ACPI_WARN_PREDEFINED(plist) AcpiUtPredefinedWarning plist #define ACPI_INFO_PREDEFINED(plist) AcpiUtPredefinedInfo plist #define ACPI_BIOS_ERROR_PREDEFINED(plist) AcpiUtPredefinedBiosError plist +#define ACPI_ERROR_ONLY(s) s #else /* No error messages */ -#define ACPI_ERROR_NAMESPACE(s, e) +#define ACPI_ERROR_NAMESPACE(s, p, e) #define ACPI_ERROR_METHOD(s, n, p, e) #define ACPI_WARN_PREDEFINED(plist) #define ACPI_INFO_PREDEFINED(plist) #define ACPI_BIOS_ERROR_PREDEFINED(plist) +#define ACPI_ERROR_ONLY(s) #endif /* ACPI_NO_ERROR_MESSAGES */ diff --git a/sys/contrib/dev/acpica/source/include/acnames.h b/sys/contrib/dev/acpica/source/include/acnames.h index 69f8884406..506ff6249b 100644 --- a/sys/contrib/dev/acpica/source/include/acnames.h +++ b/sys/contrib/dev/acpica/source/include/acnames.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -191,11 +191,14 @@ /* Definitions of the predefined namespace names */ #define ACPI_UNKNOWN_NAME (UINT32) 0x3F3F3F3F /* Unknown name is "????" */ -#define ACPI_ROOT_NAME (UINT32) 0x5F5F5F5C /* Root name is "\___" */ - #define ACPI_PREFIX_MIXED (UINT32) 0x69706341 /* "Acpi" */ #define ACPI_PREFIX_LOWER (UINT32) 0x69706361 /* "acpi" */ +/* Root name stuff */ + +#define ACPI_ROOT_NAME (UINT32) 0x5F5F5F5C /* Root name is "\___" */ +#define ACPI_ROOT_PATHNAME "\\___" +#define ACPI_NAMESPACE_ROOT "Namespace Root" #define ACPI_NS_ROOT_PATH "\\" #endif /* __ACNAMES_H__ */ diff --git a/sys/contrib/dev/acpica/source/include/acnamesp.h b/sys/contrib/dev/acpica/source/include/acnamesp.h index 990309ebfb..529fc6e78a 100644 --- a/sys/contrib/dev/acpica/source/include/acnamesp.h +++ b/sys/contrib/dev/acpica/source/include/acnamesp.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -204,6 +204,12 @@ ACPI_STATUS AcpiNsInitializeDevices ( UINT32 Flags); +ACPI_STATUS +AcpiNsInitOnePackage ( + ACPI_HANDLE ObjHandle, + UINT32 Level, + void *Context, + void **ReturnValue); /* * nsload - Namespace loading @@ -489,6 +495,11 @@ AcpiNsGetNormalizedPathname ( BOOLEAN NoTrailing); char * +AcpiNsBuildPrefixedPathname ( + ACPI_GENERIC_STATE *PrefixScope, + const char *InternalPath); + +char * AcpiNsNameOfCurrentScope ( ACPI_WALK_STATE *WalkState); diff --git a/sys/contrib/dev/acpica/source/include/acobject.h b/sys/contrib/dev/acpica/source/include/acobject.h index 7dce4cee3e..824d208478 100644 --- a/sys/contrib/dev/acpica/source/include/acobject.h +++ b/sys/contrib/dev/acpica/source/include/acobject.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/acopcode.h b/sys/contrib/dev/acpica/source/include/acopcode.h index 3ce2772b04..6dbeac6891 100644 --- a/sys/contrib/dev/acpica/source/include/acopcode.h +++ b/sys/contrib/dev/acpica/source/include/acopcode.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -361,7 +361,7 @@ #define ARGI_FIELD_OP ARGI_INVALID_OPCODE #define ARGI_FIND_SET_LEFT_BIT_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_TARGETREF) #define ARGI_FIND_SET_RIGHT_BIT_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_TARGETREF) -#define ARGI_FROM_BCD_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_TARGETREF) +#define ARGI_FROM_BCD_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_FIXED_TARGET) #define ARGI_IF_OP ARGI_INVALID_OPCODE #define ARGI_INCREMENT_OP ARGI_LIST1 (ARGI_TARGETREF) #define ARGI_INDEX_FIELD_OP ARGI_INVALID_OPCODE @@ -425,12 +425,12 @@ #define ARGI_SUBTRACT_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) #define ARGI_THERMAL_ZONE_OP ARGI_INVALID_OPCODE #define ARGI_TIMER_OP ARG_NONE -#define ARGI_TO_BCD_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_TARGETREF) -#define ARGI_TO_BUFFER_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_TARGETREF) -#define ARGI_TO_DEC_STR_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_TARGETREF) -#define ARGI_TO_HEX_STR_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_TARGETREF) -#define ARGI_TO_INTEGER_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_TARGETREF) -#define ARGI_TO_STRING_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_TARGETREF) +#define ARGI_TO_BCD_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_FIXED_TARGET) +#define ARGI_TO_BUFFER_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET) +#define ARGI_TO_DEC_STR_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET) +#define ARGI_TO_HEX_STR_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET) +#define ARGI_TO_INTEGER_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET) +#define ARGI_TO_STRING_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_FIXED_TARGET) #define ARGI_UNLOAD_OP ARGI_LIST1 (ARGI_DDBHANDLE) #define ARGI_VAR_PACKAGE_OP ARGI_LIST1 (ARGI_INTEGER) #define ARGI_WAIT_OP ARGI_LIST2 (ARGI_EVENT, ARGI_INTEGER) diff --git a/sys/contrib/dev/acpica/source/include/acoutput.h b/sys/contrib/dev/acpica/source/include/acoutput.h index 2e40d9d9ec..49b85059cd 100644 --- a/sys/contrib/dev/acpica/source/include/acoutput.h +++ b/sys/contrib/dev/acpica/source/include/acoutput.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/acparser.h b/sys/contrib/dev/acpica/source/include/acparser.h index 802f1617e8..8acea23cab 100644 --- a/sys/contrib/dev/acpica/source/include/acparser.h +++ b/sys/contrib/dev/acpica/source/include/acparser.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/acpi.h b/sys/contrib/dev/acpica/source/include/acpi.h index 8c4152b82d..69dbedfffb 100644 --- a/sys/contrib/dev/acpica/source/include/acpi.h +++ b/sys/contrib/dev/acpica/source/include/acpi.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/acpiosxf.h b/sys/contrib/dev/acpica/source/include/acpiosxf.h index 130d9678b7..c5bbddf2e5 100644 --- a/sys/contrib/dev/acpica/source/include/acpiosxf.h +++ b/sys/contrib/dev/acpica/source/include/acpiosxf.h @@ -10,7 +10,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/acpixf.h b/sys/contrib/dev/acpica/source/include/acpixf.h index 7d6c18d698..6e10c85197 100644 --- a/sys/contrib/dev/acpica/source/include/acpixf.h +++ b/sys/contrib/dev/acpica/source/include/acpixf.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -154,7 +154,7 @@ /* Current ACPICA subsystem version in YYYYMMDD format */ -#define ACPI_CA_VERSION 0x20170831 +#define ACPI_CA_VERSION 0x20180508 #include "acconfig.h" #include "actypes.h" @@ -302,15 +302,18 @@ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_DoNotUseXsdt, FALSE); /* * Optionally support group module level code. + * NOTE, this is essentially obsolete and will be removed soon + * (01/2018). */ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_GroupModuleLevelCode, FALSE); /* - * Optionally support module level code by parsing the entire table as - * a TermList. Default is FALSE, do not execute entire table until some - * lock order issues are fixed. + * Optionally support module level code by parsing an entire table as + * a method as it is loaded. Default is TRUE. + * NOTE, this is essentially obsolete and will be removed soon + * (01/2018). */ -ACPI_INIT_GLOBAL (UINT8, AcpiGbl_ParseTableAsTermList, FALSE); +ACPI_INIT_GLOBAL (UINT8, AcpiGbl_ExecuteTablesAsMethods, TRUE); /* * Optionally use 32-bit FADT addresses if and when there is a conflict @@ -370,11 +373,21 @@ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_OsiData, 0); ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_ReducedHardware, FALSE); /* - * Maximum number of While() loop iterations before forced method abort. + * Maximum timeout for While() loop iterations before forced method abort. * This mechanism is intended to prevent infinite loops during interpreter * execution within a host kernel. */ -ACPI_INIT_GLOBAL (UINT32, AcpiGbl_MaxLoopIterations, ACPI_MAX_LOOP_COUNT); +ACPI_INIT_GLOBAL (UINT32, AcpiGbl_MaxLoopIterations, ACPI_MAX_LOOP_TIMEOUT); + +/* + * Optionally ignore AE_NOT_FOUND errors from named reference package elements + * during DSDT/SSDT table loading. This reduces error "noise" in platforms + * whose firmware is carrying around a bunch of unused package objects that + * refer to non-existent named objects. However, If the AML actually tries to + * use such a package, the unresolved element(s) will be replaced with NULL + * elements. + */ +ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_IgnorePackageResolutionErrors, FALSE); /* * This mechanism is used to trace a specified AML method. The method is diff --git a/sys/contrib/dev/acpica/source/include/acpredef.h b/sys/contrib/dev/acpica/source/include/acpredef.h index 95a18a47e7..cd674d2bbc 100644 --- a/sys/contrib/dev/acpica/source/include/acpredef.h +++ b/sys/contrib/dev/acpica/source/include/acpredef.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/acresrc.h b/sys/contrib/dev/acpica/source/include/acresrc.h index ca5aad0260..ebcc1107b6 100644 --- a/sys/contrib/dev/acpica/source/include/acresrc.h +++ b/sys/contrib/dev/acpica/source/include/acresrc.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/acrestyp.h b/sys/contrib/dev/acpica/source/include/acrestyp.h index 0057722c1e..2d485f7e24 100644 --- a/sys/contrib/dev/acpica/source/include/acrestyp.h +++ b/sys/contrib/dev/acpica/source/include/acrestyp.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/acstruct.h b/sys/contrib/dev/acpica/source/include/acstruct.h index 5b7c34f1bd..9c55d357ec 100644 --- a/sys/contrib/dev/acpica/source/include/acstruct.h +++ b/sys/contrib/dev/acpica/source/include/acstruct.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/actables.h b/sys/contrib/dev/acpica/source/include/actables.h index 05a69ffebb..59a9a3908a 100644 --- a/sys/contrib/dev/acpica/source/include/actables.h +++ b/sys/contrib/dev/acpica/source/include/actables.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/actbinfo.h b/sys/contrib/dev/acpica/source/include/actbinfo.h new file mode 100644 index 0000000000..5a84f35b5c --- /dev/null +++ b/sys/contrib/dev/acpica/source/include/actbinfo.h @@ -0,0 +1,411 @@ +/****************************************************************************** + * + * Module Name: actbinfo - Table disassembly info for non-AML tables + * + *****************************************************************************/ + +/****************************************************************************** + * + * 1. Copyright Notice + * + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. + * All rights reserved. + * + * 2. License + * + * 2.1. This is your license from Intel Corp. under its intellectual property + * rights. You may have additional license terms from the party that provided + * you this software, covering your right to use that party's intellectual + * property rights. + * + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a + * copy of the source code appearing in this file ("Covered Code") an + * irrevocable, perpetual, worldwide license under Intel's copyrights in the + * base code distributed originally by Intel ("Original Intel Code") to copy, + * make derivatives, distribute, use and display any portion of the Covered + * Code in any form, with the right to sublicense such rights; and + * + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent + * license (with the right to sublicense), under only those claims of Intel + * patents that are infringed by the Original Intel Code, to make, use, sell, + * offer to sell, and import the Covered Code and derivative works thereof + * solely to the minimum extent necessary to exercise the above copyright + * license, and in no event shall the patent license extend to any additions + * to or modifications of the Original Intel Code. No other license or right + * is granted directly or by implication, estoppel or otherwise; + * + * The above copyright and patent license is granted only if the following + * conditions are met: + * + * 3. Conditions + * + * 3.1. Redistribution of Source with Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification with rights to further distribute source must include + * the above Copyright Notice, the above License, this list of Conditions, + * and the following Disclaimer and Export Compliance provision. In addition, + * Licensee must cause all Covered Code to which Licensee contributes to + * contain a file documenting the changes Licensee made to create that Covered + * Code and the date of any change. Licensee must include in that file the + * documentation of any changes made by any predecessor Licensee. Licensee + * must include a prominent statement that the modification is derived, + * directly or indirectly, from Original Intel Code. + * + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification without rights to further distribute source must + * include the following Disclaimer and Export Compliance provision in the + * documentation and/or other materials provided with distribution. In + * addition, Licensee may not authorize further sublicense of source of any + * portion of the Covered Code, and must include terms to the effect that the + * license from Licensee to its licensee is limited to the intellectual + * property embodied in the software Licensee provides to its licensee, and + * not to intellectual property embodied in modifications its licensee may + * make. + * + * 3.3. Redistribution of Executable. Redistribution in executable form of any + * substantial portion of the Covered Code or modification must reproduce the + * above Copyright Notice, and the following Disclaimer and Export Compliance + * provision in the documentation and/or other materials provided with the + * distribution. + * + * 3.4. Intel retains all right, title, and interest in and to the Original + * Intel Code. + * + * 3.5. Neither the name Intel nor any other trademark owned or controlled by + * Intel shall be used in advertising or otherwise to promote the sale, use or + * other dealings in products derived from or relating to the Covered Code + * without prior written authorization from Intel. + * + * 4. Disclaimer and Export Compliance + * + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A + * PARTICULAR PURPOSE. + * + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY + * LIMITED REMEDY. + * + * 4.3. Licensee shall not export, either directly or indirectly, any of this + * software or system incorporating such software without first obtaining any + * required license or other approval from the U. S. Department of Commerce or + * any other agency or department of the United States Government. In the + * event Licensee exports any such software from the United States or + * re-exports any such software from a foreign destination, Licensee shall + * ensure that the distribution and export/re-export of the software is in + * compliance with all laws, regulations, orders, or other restrictions of the + * U.S. Export Administration Regulations. Licensee agrees that neither it nor + * any of its subsidiaries will export/re-export any technical data, process, + * software, or service, directly or indirectly, to any country for which the + * United States government or any agency thereof requires an export license, + * other governmental approval, or letter of assurance, without first obtaining + * such license, approval or letter. + * + ***************************************************************************** + * + * Alternatively, you may choose to be licensed under the terms of the + * following license: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Alternatively, you may choose to be licensed under the terms of the + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. + * + *****************************************************************************/ + +/* + * Macros used to generate offsets to specific table fields + */ +#define ACPI_FACS_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_FACS,f) +#define ACPI_GAS_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GENERIC_ADDRESS,f) +#define ACPI_HDR_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_HEADER,f) +#define ACPI_RSDP_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_RSDP,f) +#define ACPI_BERT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_BERT,f) +#define ACPI_BGRT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_BGRT,f) +#define ACPI_BOOT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_BOOT,f) +#define ACPI_CPEP_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_CPEP,f) +#define ACPI_DBG2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_DBG2,f) +#define ACPI_DBGP_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_DBGP,f) +#define ACPI_DMAR_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_DMAR,f) +#define ACPI_DRTM_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_DRTM,f) +#define ACPI_ECDT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_ECDT,f) +#define ACPI_EINJ_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_EINJ,f) +#define ACPI_ERST_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_ERST,f) +#define ACPI_GTDT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_GTDT,f) +#define ACPI_HEST_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_HEST,f) +#define ACPI_HPET_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_HPET,f) +#define ACPI_HMAT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_HMAT,f) +#define ACPI_IORT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_IORT,f) +#define ACPI_IVRS_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_IVRS,f) +#define ACPI_MADT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_MADT,f) +#define ACPI_MCFG_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_MCFG,f) +#define ACPI_MCHI_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_MCHI,f) +#define ACPI_MPST_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_MPST,f) +#define ACPI_MSCT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_MSCT,f) +#define ACPI_NFIT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_NFIT,f) +#define ACPI_PCCT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_PCCT,f) +#define ACPI_PDTT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_PDTT,f) +#define ACPI_PMTT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_PMTT,f) +#define ACPI_RASF_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_RASF,f) +#define ACPI_S3PT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_S3PT,f) +#define ACPI_SBST_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_SBST,f) +#define ACPI_SDEI_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_SDEI,f) +#define ACPI_SDEV_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_SDEV,f) +#define ACPI_SLIT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_SLIT,f) +#define ACPI_SPCR_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_SPCR,f) +#define ACPI_SPMI_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_SPMI,f) +#define ACPI_SRAT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_SRAT,f) +#define ACPI_STAO_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_STAO,f) +#define ACPI_TCPA_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_HDR,f) +#define ACPI_TPM2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TPM2,f) +#define ACPI_UEFI_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_UEFI,f) +#define ACPI_WAET_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WAET,f) +#define ACPI_WDAT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WDAT,f) +#define ACPI_WDDT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WDDT,f) +#define ACPI_WDRT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WDRT,f) +#define ACPI_WPBT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WPBT,f) +#define ACPI_WSMT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WSMT,f) +#define ACPI_XENV_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_XENV,f) + +/* Subtables */ + +#define ACPI_ASF0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_INFO,f) +#define ACPI_ASF1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_ALERT,f) +#define ACPI_ASF1a_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_ALERT_DATA,f) +#define ACPI_ASF2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_REMOTE,f) +#define ACPI_ASF2a_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_CONTROL_DATA,f) +#define ACPI_ASF3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_RMCP,f) +#define ACPI_ASF4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_ADDRESS,f) +#define ACPI_CPEP0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CPEP_POLLING,f) +#define ACPI_CSRT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CSRT_GROUP,f) +#define ACPI_CSRT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CSRT_SHARED_INFO,f) +#define ACPI_CSRT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CSRT_DESCRIPTOR,f) +#define ACPI_DBG20_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DBG2_DEVICE,f) +#define ACPI_DMARS_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_DEVICE_SCOPE,f) +#define ACPI_DMAR0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_HARDWARE_UNIT,f) +#define ACPI_DMAR1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_RESERVED_MEMORY,f) +#define ACPI_DMAR2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_ATSR,f) +#define ACPI_DMAR3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_RHSA,f) +#define ACPI_DMAR4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_ANDD,f) +#define ACPI_DRTM0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DRTM_VTABLE_LIST,f) +#define ACPI_DRTM1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST,f) +#define ACPI_DRTM1a_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DRTM_RESOURCE,f) +#define ACPI_DRTM2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DRTM_DPS_ID,f) +#define ACPI_EINJ0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_WHEA_HEADER,f) +#define ACPI_ERST0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_WHEA_HEADER,f) +#define ACPI_FPDTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_FPDT_HEADER,f) +#define ACPI_FPDT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_FPDT_BOOT_POINTER,f) +#define ACPI_FPDT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_FPDT_S3PT_POINTER,f) +#define ACPI_GTDT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GTDT_TIMER_BLOCK,f) +#define ACPI_GTDT0a_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GTDT_TIMER_ENTRY,f) +#define ACPI_GTDT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GTDT_WATCHDOG,f) +#define ACPI_GTDTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GTDT_HEADER,f) +#define ACPI_HEST0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_IA_MACHINE_CHECK,f) +#define ACPI_HEST1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_IA_CORRECTED,f) +#define ACPI_HEST2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_IA_NMI,f) +#define ACPI_HEST6_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_AER_ROOT,f) +#define ACPI_HEST7_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_AER,f) +#define ACPI_HEST8_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_AER_BRIDGE,f) +#define ACPI_HEST9_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_GENERIC,f) +#define ACPI_HEST10_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_GENERIC_V2,f) +#define ACPI_HEST11_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_IA_DEFERRED_CHECK,f) +#define ACPI_HESTN_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_NOTIFY,f) +#define ACPI_HESTB_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_IA_ERROR_BANK,f) +#define ACPI_HMAT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HMAT_ADDRESS_RANGE,f) +#define ACPI_HMAT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HMAT_LOCALITY,f) +#define ACPI_HMAT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HMAT_CACHE,f) +#define ACPI_HMATH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HMAT_STRUCTURE,f) +#define ACPI_IORT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_ITS_GROUP,f) +#define ACPI_IORT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_NAMED_COMPONENT,f) +#define ACPI_IORT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_ROOT_COMPLEX,f) +#define ACPI_IORT3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_SMMU,f) +#define ACPI_IORT3A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_SMMU_GSI,f) +#define ACPI_IORT4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_SMMU_V3,f) +#define ACPI_IORTA_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_MEMORY_ACCESS,f) +#define ACPI_IORTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_NODE,f) +#define ACPI_IORTM_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_ID_MAPPING,f) +#define ACPI_IVRSH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_HEADER,f) +#define ACPI_IVRS0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_HARDWARE,f) +#define ACPI_IVRS1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_MEMORY,f) +#define ACPI_IVRSD_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_DE_HEADER,f) +#define ACPI_IVRS8A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_DEVICE8A,f) +#define ACPI_IVRS8B_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_DEVICE8B,f) +#define ACPI_IVRS8C_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_DEVICE8C,f) +#define ACPI_LPITH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_LPIT_HEADER,f) +#define ACPI_LPIT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_LPIT_NATIVE,f) +#define ACPI_MADT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_APIC,f) +#define ACPI_MADT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_IO_APIC,f) +#define ACPI_MADT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_INTERRUPT_OVERRIDE,f) +#define ACPI_MADT3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_NMI_SOURCE,f) +#define ACPI_MADT4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_APIC_NMI,f) +#define ACPI_MADT5_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_APIC_OVERRIDE,f) +#define ACPI_MADT6_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_IO_SAPIC,f) +#define ACPI_MADT7_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_SAPIC,f) +#define ACPI_MADT8_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_INTERRUPT_SOURCE,f) +#define ACPI_MADT9_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_X2APIC,f) +#define ACPI_MADT10_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_X2APIC_NMI,f) +#define ACPI_MADT11_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_INTERRUPT,f) +#define ACPI_MADT12_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_DISTRIBUTOR,f) +#define ACPI_MADT13_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_MSI_FRAME,f) +#define ACPI_MADT14_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_REDISTRIBUTOR,f) +#define ACPI_MADT15_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_TRANSLATOR,f) +#define ACPI_MADTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SUBTABLE_HEADER,f) +#define ACPI_MCFG0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MCFG_ALLOCATION,f) +#define ACPI_MPST0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MPST_POWER_NODE,f) +#define ACPI_MPST0A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MPST_POWER_STATE,f) +#define ACPI_MPST0B_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MPST_COMPONENT,f) +#define ACPI_MPST1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MPST_DATA_HDR,f) +#define ACPI_MPST2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MPST_POWER_DATA,f) +#define ACPI_MSCT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MSCT_PROXIMITY,f) +#define ACPI_MTMR0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MTMR_ENTRY,f) +#define ACPI_NFITH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_HEADER,f) +#define ACPI_NFIT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_SYSTEM_ADDRESS,f) +#define ACPI_NFIT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_MEMORY_MAP,f) +#define ACPI_NFIT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_INTERLEAVE,f) +#define ACPI_NFIT3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_SMBIOS,f) +#define ACPI_NFIT4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_CONTROL_REGION,f) +#define ACPI_NFIT5_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_DATA_REGION,f) +#define ACPI_NFIT6_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_FLUSH_ADDRESS,f) +#define ACPI_NFIT7_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_CAPABILITIES,f) +#define ACPI_PCCT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_SUBSPACE,f) +#define ACPI_PCCT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_HW_REDUCED,f) +#define ACPI_PCCT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_HW_REDUCED_TYPE2,f) +#define ACPI_PCCT3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_EXT_PCC_MASTER,f) +#define ACPI_PCCT4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_EXT_PCC_SLAVE,f) +#define ACPI_PDTT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PDTT_CHANNEL,f) +#define ACPI_PMTT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_SOCKET,f) +#define ACPI_PMTT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_CONTROLLER,f) +#define ACPI_PMTT1A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_DOMAIN,f) +#define ACPI_PMTT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_PHYSICAL_COMPONENT,f) +#define ACPI_PMTTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_HEADER,f) +#define ACPI_PPTTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SUBTABLE_HEADER,f) +#define ACPI_PPTT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PPTT_PROCESSOR,f) +#define ACPI_PPTT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PPTT_CACHE,f) +#define ACPI_PPTT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PPTT_ID,f) +#define ACPI_S3PTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_FPDT_HEADER,f) +#define ACPI_S3PT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_S3PT_RESUME,f) +#define ACPI_S3PT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_S3PT_SUSPEND,f) +#define ACPI_SDEVH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SDEV_HEADER,f) +#define ACPI_SDEV0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SDEV_NAMESPACE,f) +#define ACPI_SDEV1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SDEV_PCIE,f) +#define ACPI_SDEV1A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SDEV_PCIE_PATH,f) +#define ACPI_SLIC_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_SLIC,f) +#define ACPI_SRATH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SUBTABLE_HEADER,f) +#define ACPI_SRAT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SRAT_CPU_AFFINITY,f) +#define ACPI_SRAT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SRAT_MEM_AFFINITY,f) +#define ACPI_SRAT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SRAT_X2APIC_CPU_AFFINITY,f) +#define ACPI_SRAT3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SRAT_GICC_AFFINITY,f) +#define ACPI_SRAT4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SRAT_GIC_ITS_AFFINITY,f) +#define ACPI_TCPA_CLIENT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_CLIENT,f) +#define ACPI_TCPA_SERVER_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_SERVER,f) +#define ACPI_TPM2A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TPM2_TRAILER,f) +#define ACPI_TPM211_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TPM2_ARM_SMC,f) +#define ACPI_VRTC0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_VRTC_ENTRY,f) +#define ACPI_WDAT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_WDAT_ENTRY,f) + +/* + * Simplify access to flag fields by breaking them up into bytes + */ +#define ACPI_FLAG_OFFSET(d,f,o) (UINT16) (ACPI_OFFSET (d,f) + o) + +/* Flags */ + +#define ACPI_BGRT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_BGRT,f,o) +#define ACPI_DRTM_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_DRTM,f,o) +#define ACPI_DRTM1a_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_DRTM_RESOURCE,f,o) +#define ACPI_FADT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_FADT,f,o) +#define ACPI_FACS_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_FACS,f,o) +#define ACPI_HPET_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_HPET,f,o) +#define ACPI_PPTT0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PPTT_PROCESSOR,f,o) +#define ACPI_PPTT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PPTT_CACHE,f,o) +#define ACPI_SRAT0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_SRAT_CPU_AFFINITY,f,o) +#define ACPI_SRAT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_SRAT_MEM_AFFINITY,f,o) +#define ACPI_SRAT2_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_SRAT_X2APIC_CPU_AFFINITY,f,o) +#define ACPI_SRAT3_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_SRAT_GICC_AFFINITY,f,o) +#define ACPI_GTDT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_GTDT,f,o) +#define ACPI_GTDT0a_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_GTDT_TIMER_ENTRY,f,o) +#define ACPI_GTDT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_GTDT_WATCHDOG,f,o) +#define ACPI_HMAT0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_HMAT_ADDRESS_RANGE,f,o) +#define ACPI_HMAT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_HMAT_LOCALITY,f,o) +#define ACPI_HMAT2_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_HMAT_CACHE,f,o) +#define ACPI_IORT3_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_SMMU,f,o) +#define ACPI_IORT3a_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_SMMU_GSI,f,o) +#define ACPI_IORT4_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_SMMU_V3,f,o) +#define ACPI_IORTA_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_MEMORY_ACCESS,f,o) +#define ACPI_IORTM_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_ID_MAPPING,f,o) +#define ACPI_LPITH_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_LPIT_HEADER,f,o) +#define ACPI_MADT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_MADT,f,o) +#define ACPI_MADT0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_APIC,f,o) +#define ACPI_MADT2_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_INTERRUPT_OVERRIDE,f,o) +#define ACPI_MADT3_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_NMI_SOURCE,f,o) +#define ACPI_MADT4_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_APIC_NMI,f,o) +#define ACPI_MADT7_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_SAPIC,f,o) +#define ACPI_MADT8_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_INTERRUPT_SOURCE,f,o) +#define ACPI_MADT9_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_X2APIC,f,o) +#define ACPI_MADT10_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_X2APIC_NMI,f,o) +#define ACPI_MADT11_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_GENERIC_INTERRUPT,f,o) +#define ACPI_MADT13_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_GENERIC_MSI_FRAME,f,o) +#define ACPI_MPST0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MPST_POWER_NODE,f,o) +#define ACPI_MPST2_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MPST_POWER_DATA,f,o) +#define ACPI_NFIT0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_NFIT_SYSTEM_ADDRESS,f,o) +#define ACPI_NFIT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_NFIT_MEMORY_MAP,f,o) +#define ACPI_NFIT4_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_NFIT_CONTROL_REGION,f,o) +#define ACPI_NFIT7_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_NFIT_CAPABILITIES,f,o) +#define ACPI_PCCT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_PCCT,f,o) +#define ACPI_PCCT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PCCT_HW_REDUCED,f,o) +#define ACPI_PCCT2_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PCCT_HW_REDUCED_TYPE2,f,o) +#define ACPI_PCCT3_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PCCT_EXT_PCC_MASTER,f,o) +#define ACPI_PCCT4_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PCCT_EXT_PCC_SLAVE,f,o) +#define ACPI_PDTT0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PDTT_CHANNEL,f,o) +#define ACPI_PMTTH_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PMTT_HEADER,f,o) +#define ACPI_SDEVH_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_SDEV_HEADER,f,o) +#define ACPI_WDDT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_WDDT,f,o) +#define ACPI_WSMT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_WSMT,f,o) +#define ACPI_EINJ0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_WHEA_HEADER,f,o) +#define ACPI_ERST0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_WHEA_HEADER,f,o) +#define ACPI_HEST0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_HEST_IA_MACHINE_CHECK,f,o) +#define ACPI_HEST1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_HEST_IA_CORRECTED,f,o) +#define ACPI_HEST6_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_HEST_AER_ROOT,f,o) +#define ACPI_HEST11_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_HEST_IA_DEFERRED_CHECK,f,o) + +/* + * Required terminator for all tables below + */ +#define ACPI_DMT_TERMINATOR {ACPI_DMT_EXIT, 0, NULL, 0} +#define ACPI_DMT_NEW_LINE {ACPI_DMT_EXTRA_TEXT, 0, "\n", 0} diff --git a/sys/contrib/dev/acpica/source/include/actbl.h b/sys/contrib/dev/acpica/source/include/actbl.h index b72c3bfb30..58a9b73455 100644 --- a/sys/contrib/dev/acpica/source/include/actbl.h +++ b/sys/contrib/dev/acpica/source/include/actbl.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/actbl1.h b/sys/contrib/dev/acpica/source/include/actbl1.h index 537c33e7c3..4f03ab05a0 100644 --- a/sys/contrib/dev/acpica/source/include/actbl1.h +++ b/sys/contrib/dev/acpica/source/include/actbl1.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -155,13 +155,11 @@ /******************************************************************************* * - * Additional ACPI Tables (1) + * Additional ACPI Tables * * These tables are not consumed directly by the ACPICA subsystem, but are * included here to support device drivers and the AML disassembler. * - * The tables in this file are fully defined within the ACPI specification. - * ******************************************************************************/ @@ -170,23 +168,44 @@ * file. Useful because they make it more difficult to inadvertently type in * the wrong signature. */ +#define ACPI_SIG_ASF "ASF!" /* Alert Standard Format table */ #define ACPI_SIG_BERT "BERT" /* Boot Error Record Table */ +#define ACPI_SIG_BGRT "BGRT" /* Boot Graphics Resource Table */ +#define ACPI_SIG_BOOT "BOOT" /* Simple Boot Flag Table */ #define ACPI_SIG_CPEP "CPEP" /* Corrected Platform Error Polling table */ +#define ACPI_SIG_CSRT "CSRT" /* Core System Resource Table */ +#define ACPI_SIG_DBG2 "DBG2" /* Debug Port table type 2 */ +#define ACPI_SIG_DBGP "DBGP" /* Debug Port table */ +#define ACPI_SIG_DMAR "DMAR" /* DMA Remapping table */ +#define ACPI_SIG_DRTM "DRTM" /* Dynamic Root of Trust for Measurement table */ #define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */ #define ACPI_SIG_EINJ "EINJ" /* Error Injection table */ #define ACPI_SIG_ERST "ERST" /* Error Record Serialization Table */ -#define ACPI_SIG_HMAT "HMAT" /* Heterogeneous Memory Attributes Table */ +#define ACPI_SIG_FPDT "FPDT" /* Firmware Performance Data Table */ +#define ACPI_SIG_GTDT "GTDT" /* Generic Timer Description Table */ #define ACPI_SIG_HEST "HEST" /* Hardware Error Source Table */ -#define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */ -#define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */ -#define ACPI_SIG_PDTT "PDTT" /* Processor Debug Trigger Table */ -#define ACPI_SIG_PPTT "PPTT" /* Processor Properties Topology Table */ -#define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */ -#define ACPI_SIG_SLIT "SLIT" /* System Locality Distance Information Table */ -#define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */ -#define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */ +#define ACPI_SIG_HMAT "HMAT" /* Heterogeneous Memory Attributes Table */ +#define ACPI_SIG_HPET "HPET" /* High Precision Event Timer table */ +#define ACPI_SIG_IBFT "IBFT" /* iSCSI Boot Firmware Table */ + +#define ACPI_SIG_S3PT "S3PT" /* S3 Performance (sub)Table */ +#define ACPI_SIG_PCCS "PCC" /* PCC Shared Memory Region */ +/* Reserved table signatures */ + +#define ACPI_SIG_MATR "MATR" /* Memory Address Translation Table */ +#define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ + +/* + * These tables have been seen in the field, but no definition has been found + */ +#ifdef ACPI_UNDEFINED_TABLES +#define ACPI_SIG_ATKG "ATKG" +#define ACPI_SIG_GSCI "GSCI" /* GMCH SCI table */ +#define ACPI_SIG_IEIT "IEIT" +#endif + /* * All tables must be byte-packed to match the ACPI specification, since * the tables are provided by the system BIOS. @@ -239,6 +258,146 @@ typedef struct acpi_whea_header /******************************************************************************* * + * ASF - Alert Standard Format table (Signature "ASF!") + * Revision 0x10 + * + * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003 + * + ******************************************************************************/ + +typedef struct acpi_table_asf +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + +} ACPI_TABLE_ASF; + + +/* ASF subtable header */ + +typedef struct acpi_asf_header +{ + UINT8 Type; + UINT8 Reserved; + UINT16 Length; + +} ACPI_ASF_HEADER; + + +/* Values for Type field above */ + +enum AcpiAsfType +{ + ACPI_ASF_TYPE_INFO = 0, + ACPI_ASF_TYPE_ALERT = 1, + ACPI_ASF_TYPE_CONTROL = 2, + ACPI_ASF_TYPE_BOOT = 3, + ACPI_ASF_TYPE_ADDRESS = 4, + ACPI_ASF_TYPE_RESERVED = 5 +}; + +/* + * ASF subtables + */ + +/* 0: ASF Information */ + +typedef struct acpi_asf_info +{ + ACPI_ASF_HEADER Header; + UINT8 MinResetValue; + UINT8 MinPollInterval; + UINT16 SystemId; + UINT32 MfgId; + UINT8 Flags; + UINT8 Reserved2[3]; + +} ACPI_ASF_INFO; + +/* Masks for Flags field above */ + +#define ACPI_ASF_SMBUS_PROTOCOLS (1) + + +/* 1: ASF Alerts */ + +typedef struct acpi_asf_alert +{ + ACPI_ASF_HEADER Header; + UINT8 AssertMask; + UINT8 DeassertMask; + UINT8 Alerts; + UINT8 DataLength; + +} ACPI_ASF_ALERT; + +typedef struct acpi_asf_alert_data +{ + UINT8 Address; + UINT8 Command; + UINT8 Mask; + UINT8 Value; + UINT8 SensorType; + UINT8 Type; + UINT8 Offset; + UINT8 SourceType; + UINT8 Severity; + UINT8 SensorNumber; + UINT8 Entity; + UINT8 Instance; + +} ACPI_ASF_ALERT_DATA; + + +/* 2: ASF Remote Control */ + +typedef struct acpi_asf_remote +{ + ACPI_ASF_HEADER Header; + UINT8 Controls; + UINT8 DataLength; + UINT16 Reserved2; + +} ACPI_ASF_REMOTE; + +typedef struct acpi_asf_control_data +{ + UINT8 Function; + UINT8 Address; + UINT8 Command; + UINT8 Value; + +} ACPI_ASF_CONTROL_DATA; + + +/* 3: ASF RMCP Boot Options */ + +typedef struct acpi_asf_rmcp +{ + ACPI_ASF_HEADER Header; + UINT8 Capabilities[7]; + UINT8 CompletionCode; + UINT32 EnterpriseId; + UINT8 Command; + UINT16 Parameter; + UINT16 BootOptions; + UINT16 OemParameters; + +} ACPI_ASF_RMCP; + + +/* 4: ASF Address */ + +typedef struct acpi_asf_address +{ + ACPI_ASF_HEADER Header; + UINT8 EpromAddress; + UINT8 Devices; + +} ACPI_ASF_ADDRESS; + + +/******************************************************************************* + * * BERT - Boot Error Record Table (ACPI 4.0) * Version 1 * @@ -292,6 +451,49 @@ enum AcpiBertErrorSeverity /******************************************************************************* * + * BGRT - Boot Graphics Resource Table (ACPI 5.0) + * Version 1 + * + ******************************************************************************/ + +typedef struct acpi_table_bgrt +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT16 Version; + UINT8 Status; + UINT8 ImageType; + UINT64 ImageAddress; + UINT32 ImageOffsetX; + UINT32 ImageOffsetY; + +} ACPI_TABLE_BGRT; + +/* Flags for Status field above */ + +#define ACPI_BGRT_DISPLAYED (1) +#define ACPI_BGRT_ORIENTATION_OFFSET (3 << 1) + + +/******************************************************************************* + * + * BOOT - Simple Boot Flag Table + * Version 1 + * + * Conforms to the "Simple Boot Flag Specification", Version 2.1 + * + ******************************************************************************/ + +typedef struct acpi_table_boot +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT8 CmosIndex; /* Index in CMOS RAM for the boot register */ + UINT8 Reserved[3]; + +} ACPI_TABLE_BOOT; + + +/******************************************************************************* + * * CPEP - Corrected Platform Error Polling table (ACPI 4.0) * Version 1 * @@ -319,1567 +521,1522 @@ typedef struct acpi_cpep_polling /******************************************************************************* * - * ECDT - Embedded Controller Boot Resources Table - * Version 1 + * CSRT - Core System Resource Table + * Version 0 + * + * Conforms to the "Core System Resource Table (CSRT)", November 14, 2011 * ******************************************************************************/ -typedef struct acpi_table_ecdt +typedef struct acpi_table_csrt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - ACPI_GENERIC_ADDRESS Control; /* Address of EC command/status register */ - ACPI_GENERIC_ADDRESS Data; /* Address of EC data register */ - UINT32 Uid; /* Unique ID - must be same as the EC _UID method */ - UINT8 Gpe; /* The GPE for the EC */ - UINT8 Id[1]; /* Full namepath of the EC in the ACPI namespace */ -} ACPI_TABLE_ECDT; +} ACPI_TABLE_CSRT; -/******************************************************************************* - * - * EINJ - Error Injection Table (ACPI 4.0) - * Version 1 - * - ******************************************************************************/ +/* Resource Group subtable */ -typedef struct acpi_table_einj +typedef struct acpi_csrt_group { - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 HeaderLength; - UINT8 Flags; - UINT8 Reserved[3]; - UINT32 Entries; + UINT32 Length; + UINT32 VendorId; + UINT32 SubvendorId; + UINT16 DeviceId; + UINT16 SubdeviceId; + UINT16 Revision; + UINT16 Reserved; + UINT32 SharedInfoLength; -} ACPI_TABLE_EINJ; + /* Shared data immediately follows (Length = SharedInfoLength) */ +} ACPI_CSRT_GROUP; -/* EINJ Injection Instruction Entries (actions) */ +/* Shared Info subtable */ -typedef struct acpi_einj_entry +typedef struct acpi_csrt_shared_info { - ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ - -} ACPI_EINJ_ENTRY; + UINT16 MajorVersion; + UINT16 MinorVersion; + UINT32 MmioBaseLow; + UINT32 MmioBaseHigh; + UINT32 GsiInterrupt; + UINT8 InterruptPolarity; + UINT8 InterruptMode; + UINT8 NumChannels; + UINT8 DmaAddressWidth; + UINT16 BaseRequestLine; + UINT16 NumHandshakeSignals; + UINT32 MaxBlockSize; -/* Masks for Flags field above */ + /* Resource descriptors immediately follow (Length = Group Length - SharedInfoLength) */ -#define ACPI_EINJ_PRESERVE (1) +} ACPI_CSRT_SHARED_INFO; -/* Values for Action field above */ +/* Resource Descriptor subtable */ -enum AcpiEinjActions +typedef struct acpi_csrt_descriptor { - ACPI_EINJ_BEGIN_OPERATION = 0, - ACPI_EINJ_GET_TRIGGER_TABLE = 1, - ACPI_EINJ_SET_ERROR_TYPE = 2, - ACPI_EINJ_GET_ERROR_TYPE = 3, - ACPI_EINJ_END_OPERATION = 4, - ACPI_EINJ_EXECUTE_OPERATION = 5, - ACPI_EINJ_CHECK_BUSY_STATUS = 6, - ACPI_EINJ_GET_COMMAND_STATUS = 7, - ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8, - ACPI_EINJ_GET_EXECUTE_TIMINGS = 9, - ACPI_EINJ_ACTION_RESERVED = 10, /* 10 and greater are reserved */ - ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */ -}; + UINT32 Length; + UINT16 Type; + UINT16 Subtype; + UINT32 Uid; -/* Values for Instruction field above */ + /* Resource-specific information immediately follows */ -enum AcpiEinjInstructions -{ - ACPI_EINJ_READ_REGISTER = 0, - ACPI_EINJ_READ_REGISTER_VALUE = 1, - ACPI_EINJ_WRITE_REGISTER = 2, - ACPI_EINJ_WRITE_REGISTER_VALUE = 3, - ACPI_EINJ_NOOP = 4, - ACPI_EINJ_FLUSH_CACHELINE = 5, - ACPI_EINJ_INSTRUCTION_RESERVED = 6 /* 6 and greater are reserved */ -}; +} ACPI_CSRT_DESCRIPTOR; -typedef struct acpi_einj_error_type_with_addr + +/* Resource Types */ + +#define ACPI_CSRT_TYPE_INTERRUPT 0x0001 +#define ACPI_CSRT_TYPE_TIMER 0x0002 +#define ACPI_CSRT_TYPE_DMA 0x0003 + +/* Resource Subtypes */ + +#define ACPI_CSRT_XRUPT_LINE 0x0000 +#define ACPI_CSRT_XRUPT_CONTROLLER 0x0001 +#define ACPI_CSRT_TIMER 0x0000 +#define ACPI_CSRT_DMA_CHANNEL 0x0000 +#define ACPI_CSRT_DMA_CONTROLLER 0x0001 + + +/******************************************************************************* + * + * DBG2 - Debug Port Table 2 + * Version 0 (Both main table and subtables) + * + * Conforms to "Microsoft Debug Port Table 2 (DBG2)", December 10, 2015 + * + ******************************************************************************/ + +typedef struct acpi_table_dbg2 { - UINT32 ErrorType; - UINT32 VendorStructOffset; - UINT32 Flags; - UINT32 ApicId; - UINT64 Address; - UINT64 Range; - UINT32 PcieId; + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 InfoOffset; + UINT32 InfoCount; -} ACPI_EINJ_ERROR_TYPE_WITH_ADDR; +} ACPI_TABLE_DBG2; -typedef struct acpi_einj_vendor + +typedef struct acpi_dbg2_header { - UINT32 Length; - UINT32 PcieId; - UINT16 VendorId; - UINT16 DeviceId; - UINT8 RevisionId; - UINT8 Reserved[3]; + UINT32 InfoOffset; + UINT32 InfoCount; -} ACPI_EINJ_VENDOR; +} ACPI_DBG2_HEADER; -/* EINJ Trigger Error Action Table */ +/* Debug Device Information Subtable */ -typedef struct acpi_einj_trigger +typedef struct acpi_dbg2_device { - UINT32 HeaderSize; - UINT32 Revision; - UINT32 TableSize; - UINT32 EntryCount; + UINT8 Revision; + UINT16 Length; + UINT8 RegisterCount; /* Number of BaseAddress registers */ + UINT16 NamepathLength; + UINT16 NamepathOffset; + UINT16 OemDataLength; + UINT16 OemDataOffset; + UINT16 PortType; + UINT16 PortSubtype; + UINT16 Reserved; + UINT16 BaseAddressOffset; + UINT16 AddressSizeOffset; + /* + * Data that follows: + * BaseAddress (required) - Each in 12-byte Generic Address Structure format. + * AddressSize (required) - Array of UINT32 sizes corresponding to each BaseAddress register. + * Namepath (required) - Null terminated string. Single dot if not supported. + * OemData (optional) - Length is OemDataLength. + */ +} ACPI_DBG2_DEVICE; -} ACPI_EINJ_TRIGGER; +/* Types for PortType field above */ -/* Command status return values */ +#define ACPI_DBG2_SERIAL_PORT 0x8000 +#define ACPI_DBG2_1394_PORT 0x8001 +#define ACPI_DBG2_USB_PORT 0x8002 +#define ACPI_DBG2_NET_PORT 0x8003 -enum AcpiEinjCommandStatus -{ - ACPI_EINJ_SUCCESS = 0, - ACPI_EINJ_FAILURE = 1, - ACPI_EINJ_INVALID_ACCESS = 2, - ACPI_EINJ_STATUS_RESERVED = 3 /* 3 and greater are reserved */ -}; +/* Subtypes for PortSubtype field above */ +#define ACPI_DBG2_16550_COMPATIBLE 0x0000 +#define ACPI_DBG2_16550_SUBSET 0x0001 +#define ACPI_DBG2_ARM_PL011 0x0003 +#define ACPI_DBG2_ARM_SBSA_32BIT 0x000D +#define ACPI_DBG2_ARM_SBSA_GENERIC 0x000E +#define ACPI_DBG2_ARM_DCC 0x000F +#define ACPI_DBG2_BCM2835 0x0010 -/* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */ +#define ACPI_DBG2_1394_STANDARD 0x0000 -#define ACPI_EINJ_PROCESSOR_CORRECTABLE (1) -#define ACPI_EINJ_PROCESSOR_UNCORRECTABLE (1<<1) -#define ACPI_EINJ_PROCESSOR_FATAL (1<<2) -#define ACPI_EINJ_MEMORY_CORRECTABLE (1<<3) -#define ACPI_EINJ_MEMORY_UNCORRECTABLE (1<<4) -#define ACPI_EINJ_MEMORY_FATAL (1<<5) -#define ACPI_EINJ_PCIX_CORRECTABLE (1<<6) -#define ACPI_EINJ_PCIX_UNCORRECTABLE (1<<7) -#define ACPI_EINJ_PCIX_FATAL (1<<8) -#define ACPI_EINJ_PLATFORM_CORRECTABLE (1<<9) -#define ACPI_EINJ_PLATFORM_UNCORRECTABLE (1<<10) -#define ACPI_EINJ_PLATFORM_FATAL (1<<11) -#define ACPI_EINJ_VENDOR_DEFINED (1<<31) +#define ACPI_DBG2_USB_XHCI 0x0000 +#define ACPI_DBG2_USB_EHCI 0x0001 /******************************************************************************* * - * ERST - Error Record Serialization Table (ACPI 4.0) + * DBGP - Debug Port table * Version 1 * + * Conforms to the "Debug Port Specification", Version 1.00, 2/9/2000 + * ******************************************************************************/ -typedef struct acpi_table_erst +typedef struct acpi_table_dbgp { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 HeaderLength; - UINT32 Reserved; - UINT32 Entries; + UINT8 Type; /* 0=full 16550, 1=subset of 16550 */ + UINT8 Reserved[3]; + ACPI_GENERIC_ADDRESS DebugPort; -} ACPI_TABLE_ERST; +} ACPI_TABLE_DBGP; -/* ERST Serialization Entries (actions) */ +/******************************************************************************* + * + * DMAR - DMA Remapping table + * Version 1 + * + * Conforms to "Intel Virtualization Technology for Directed I/O", + * Version 2.3, October 2014 + * + ******************************************************************************/ -typedef struct acpi_erst_entry +typedef struct acpi_table_dmar { - ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT8 Width; /* Host Address Width */ + UINT8 Flags; + UINT8 Reserved[10]; -} ACPI_ERST_ENTRY; +} ACPI_TABLE_DMAR; /* Masks for Flags field above */ -#define ACPI_ERST_PRESERVE (1) +#define ACPI_DMAR_INTR_REMAP (1) +#define ACPI_DMAR_X2APIC_OPT_OUT (1<<1) +#define ACPI_DMAR_X2APIC_MODE (1<<2) -/* Values for Action field above */ -enum AcpiErstActions +/* DMAR subtable header */ + +typedef struct acpi_dmar_header { - ACPI_ERST_BEGIN_WRITE = 0, - ACPI_ERST_BEGIN_READ = 1, - ACPI_ERST_BEGIN_CLEAR = 2, - ACPI_ERST_END = 3, - ACPI_ERST_SET_RECORD_OFFSET = 4, - ACPI_ERST_EXECUTE_OPERATION = 5, - ACPI_ERST_CHECK_BUSY_STATUS = 6, - ACPI_ERST_GET_COMMAND_STATUS = 7, - ACPI_ERST_GET_RECORD_ID = 8, - ACPI_ERST_SET_RECORD_ID = 9, - ACPI_ERST_GET_RECORD_COUNT = 10, - ACPI_ERST_BEGIN_DUMMY_WRIITE = 11, - ACPI_ERST_NOT_USED = 12, - ACPI_ERST_GET_ERROR_RANGE = 13, - ACPI_ERST_GET_ERROR_LENGTH = 14, - ACPI_ERST_GET_ERROR_ATTRIBUTES = 15, - ACPI_ERST_EXECUTE_TIMINGS = 16, - ACPI_ERST_ACTION_RESERVED = 17 /* 17 and greater are reserved */ -}; + UINT16 Type; + UINT16 Length; -/* Values for Instruction field above */ +} ACPI_DMAR_HEADER; -enum AcpiErstInstructions -{ - ACPI_ERST_READ_REGISTER = 0, - ACPI_ERST_READ_REGISTER_VALUE = 1, - ACPI_ERST_WRITE_REGISTER = 2, - ACPI_ERST_WRITE_REGISTER_VALUE = 3, - ACPI_ERST_NOOP = 4, - ACPI_ERST_LOAD_VAR1 = 5, - ACPI_ERST_LOAD_VAR2 = 6, - ACPI_ERST_STORE_VAR1 = 7, - ACPI_ERST_ADD = 8, - ACPI_ERST_SUBTRACT = 9, - ACPI_ERST_ADD_VALUE = 10, - ACPI_ERST_SUBTRACT_VALUE = 11, - ACPI_ERST_STALL = 12, - ACPI_ERST_STALL_WHILE_TRUE = 13, - ACPI_ERST_SKIP_NEXT_IF_TRUE = 14, - ACPI_ERST_GOTO = 15, - ACPI_ERST_SET_SRC_ADDRESS_BASE = 16, - ACPI_ERST_SET_DST_ADDRESS_BASE = 17, - ACPI_ERST_MOVE_DATA = 18, - ACPI_ERST_INSTRUCTION_RESERVED = 19 /* 19 and greater are reserved */ -}; - -/* Command status return values */ +/* Values for subtable type in ACPI_DMAR_HEADER */ -enum AcpiErstCommandStatus +enum AcpiDmarType { - ACPI_ERST_SUCESS = 0, - ACPI_ERST_NO_SPACE = 1, - ACPI_ERST_NOT_AVAILABLE = 2, - ACPI_ERST_FAILURE = 3, - ACPI_ERST_RECORD_EMPTY = 4, - ACPI_ERST_NOT_FOUND = 5, - ACPI_ERST_STATUS_RESERVED = 6 /* 6 and greater are reserved */ + ACPI_DMAR_TYPE_HARDWARE_UNIT = 0, + ACPI_DMAR_TYPE_RESERVED_MEMORY = 1, + ACPI_DMAR_TYPE_ROOT_ATS = 2, + ACPI_DMAR_TYPE_HARDWARE_AFFINITY = 3, + ACPI_DMAR_TYPE_NAMESPACE = 4, + ACPI_DMAR_TYPE_RESERVED = 5 /* 5 and greater are reserved */ }; -/* Error Record Serialization Information */ +/* DMAR Device Scope structure */ -typedef struct acpi_erst_info +typedef struct acpi_dmar_device_scope { - UINT16 Signature; /* Should be "ER" */ - UINT8 Data[48]; - -} ACPI_ERST_INFO; + UINT8 EntryType; + UINT8 Length; + UINT16 Reserved; + UINT8 EnumerationId; + UINT8 Bus; +} ACPI_DMAR_DEVICE_SCOPE; -/******************************************************************************* - * - * HEST - Hardware Error Source Table (ACPI 4.0) - * Version 1 - * - ******************************************************************************/ +/* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE - device types */ -typedef struct acpi_table_hest +enum AcpiDmarScopeType { - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 ErrorSourceCount; - -} ACPI_TABLE_HEST; - - -/* HEST subtable header */ + ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0, + ACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1, + ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2, + ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3, + ACPI_DMAR_SCOPE_TYPE_HPET = 4, + ACPI_DMAR_SCOPE_TYPE_NAMESPACE = 5, + ACPI_DMAR_SCOPE_TYPE_RESERVED = 6 /* 6 and greater are reserved */ +}; -typedef struct acpi_hest_header +typedef struct acpi_dmar_pci_path { - UINT16 Type; - UINT16 SourceId; - -} ACPI_HEST_HEADER; + UINT8 Device; + UINT8 Function; - -/* Values for Type field above for subtables */ - -enum AcpiHestTypes -{ - ACPI_HEST_TYPE_IA32_CHECK = 0, - ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1, - ACPI_HEST_TYPE_IA32_NMI = 2, - ACPI_HEST_TYPE_NOT_USED3 = 3, - ACPI_HEST_TYPE_NOT_USED4 = 4, - ACPI_HEST_TYPE_NOT_USED5 = 5, - ACPI_HEST_TYPE_AER_ROOT_PORT = 6, - ACPI_HEST_TYPE_AER_ENDPOINT = 7, - ACPI_HEST_TYPE_AER_BRIDGE = 8, - ACPI_HEST_TYPE_GENERIC_ERROR = 9, - ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10, - ACPI_HEST_TYPE_IA32_DEFERRED_CHECK = 11, - ACPI_HEST_TYPE_RESERVED = 12 /* 12 and greater are reserved */ -}; +} ACPI_DMAR_PCI_PATH; /* - * HEST substructures contained in subtables + * DMAR Subtables, correspond to Type in ACPI_DMAR_HEADER */ -/* - * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and - * ACPI_HEST_IA_CORRECTED structures. - */ -typedef struct acpi_hest_ia_error_bank +/* 0: Hardware Unit Definition */ + +typedef struct acpi_dmar_hardware_unit { - UINT8 BankNumber; - UINT8 ClearStatusOnInit; - UINT8 StatusFormat; + ACPI_DMAR_HEADER Header; + UINT8 Flags; UINT8 Reserved; - UINT32 ControlRegister; - UINT64 ControlData; - UINT32 StatusRegister; - UINT32 AddressRegister; - UINT32 MiscRegister; + UINT16 Segment; + UINT64 Address; /* Register Base Address */ -} ACPI_HEST_IA_ERROR_BANK; +} ACPI_DMAR_HARDWARE_UNIT; +/* Masks for Flags field above */ -/* Common HEST sub-structure for PCI/AER structures below (6,7,8) */ +#define ACPI_DMAR_INCLUDE_ALL (1) -typedef struct acpi_hest_aer_common -{ - UINT16 Reserved1; - UINT8 Flags; - UINT8 Enabled; - UINT32 RecordsToPreallocate; - UINT32 MaxSectionsPerRecord; - UINT32 Bus; /* Bus and Segment numbers */ - UINT16 Device; - UINT16 Function; - UINT16 DeviceControl; - UINT16 Reserved2; - UINT32 UncorrectableMask; - UINT32 UncorrectableSeverity; - UINT32 CorrectableMask; - UINT32 AdvancedCapabilities; -} ACPI_HEST_AER_COMMON; - -/* Masks for HEST Flags fields */ +/* 1: Reserved Memory Defininition */ -#define ACPI_HEST_FIRMWARE_FIRST (1) -#define ACPI_HEST_GLOBAL (1<<1) -#define ACPI_HEST_GHES_ASSIST (1<<2) +typedef struct acpi_dmar_reserved_memory +{ + ACPI_DMAR_HEADER Header; + UINT16 Reserved; + UINT16 Segment; + UINT64 BaseAddress; /* 4K aligned base address */ + UINT64 EndAddress; /* 4K aligned limit address */ -/* - * Macros to access the bus/segment numbers in Bus field above: - * Bus number is encoded in bits 7:0 - * Segment number is encoded in bits 23:8 - */ -#define ACPI_HEST_BUS(Bus) ((Bus) & 0xFF) -#define ACPI_HEST_SEGMENT(Bus) (((Bus) >> 8) & 0xFFFF) +} ACPI_DMAR_RESERVED_MEMORY; +/* Masks for Flags field above */ -/* Hardware Error Notification */ +#define ACPI_DMAR_ALLOW_ALL (1) -typedef struct acpi_hest_notify -{ - UINT8 Type; - UINT8 Length; - UINT16 ConfigWriteEnable; - UINT32 PollInterval; - UINT32 Vector; - UINT32 PollingThresholdValue; - UINT32 PollingThresholdWindow; - UINT32 ErrorThresholdValue; - UINT32 ErrorThresholdWindow; -} ACPI_HEST_NOTIFY; +/* 2: Root Port ATS Capability Reporting Structure */ -/* Values for Notify Type field above */ - -enum AcpiHestNotifyTypes +typedef struct acpi_dmar_atsr { - ACPI_HEST_NOTIFY_POLLED = 0, - ACPI_HEST_NOTIFY_EXTERNAL = 1, - ACPI_HEST_NOTIFY_LOCAL = 2, - ACPI_HEST_NOTIFY_SCI = 3, - ACPI_HEST_NOTIFY_NMI = 4, - ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */ - ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */ - ACPI_HEST_NOTIFY_GPIO = 7, /* ACPI 6.0 */ - ACPI_HEST_NOTIFY_SEA = 8, /* ACPI 6.1 */ - ACPI_HEST_NOTIFY_SEI = 9, /* ACPI 6.1 */ - ACPI_HEST_NOTIFY_GSIV = 10, /* ACPI 6.1 */ - ACPI_HEST_NOTIFY_SOFTWARE_DELEGATED = 11, /* ACPI 6.2 */ - ACPI_HEST_NOTIFY_RESERVED = 12 /* 12 and greater are reserved */ -}; + ACPI_DMAR_HEADER Header; + UINT8 Flags; + UINT8 Reserved; + UINT16 Segment; -/* Values for ConfigWriteEnable bitfield above */ +} ACPI_DMAR_ATSR; -#define ACPI_HEST_TYPE (1) -#define ACPI_HEST_POLL_INTERVAL (1<<1) -#define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2) -#define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3) -#define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4) -#define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5) +/* Masks for Flags field above */ +#define ACPI_DMAR_ALL_PORTS (1) -/* - * HEST subtables - */ -/* 0: IA32 Machine Check Exception */ +/* 3: Remapping Hardware Static Affinity Structure */ -typedef struct acpi_hest_ia_machine_check +typedef struct acpi_dmar_rhsa { - ACPI_HEST_HEADER Header; - UINT16 Reserved1; - UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ - UINT8 Enabled; - UINT32 RecordsToPreallocate; - UINT32 MaxSectionsPerRecord; - UINT64 GlobalCapabilityData; - UINT64 GlobalControlData; - UINT8 NumHardwareBanks; - UINT8 Reserved3[7]; + ACPI_DMAR_HEADER Header; + UINT32 Reserved; + UINT64 BaseAddress; + UINT32 ProximityDomain; -} ACPI_HEST_IA_MACHINE_CHECK; +} ACPI_DMAR_RHSA; -/* 1: IA32 Corrected Machine Check */ +/* 4: ACPI Namespace Device Declaration Structure */ -typedef struct acpi_hest_ia_corrected +typedef struct acpi_dmar_andd { - ACPI_HEST_HEADER Header; - UINT16 Reserved1; - UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ - UINT8 Enabled; - UINT32 RecordsToPreallocate; - UINT32 MaxSectionsPerRecord; - ACPI_HEST_NOTIFY Notify; - UINT8 NumHardwareBanks; - UINT8 Reserved2[3]; + ACPI_DMAR_HEADER Header; + UINT8 Reserved[3]; + UINT8 DeviceNumber; + char DeviceName[1]; -} ACPI_HEST_IA_CORRECTED; +} ACPI_DMAR_ANDD; -/* 2: IA32 Non-Maskable Interrupt */ +/******************************************************************************* + * + * DRTM - Dynamic Root of Trust for Measurement table + * Conforms to "TCG D-RTM Architecture" June 17 2013, Version 1.0.0 + * Table version 1 + * + ******************************************************************************/ -typedef struct acpi_hest_ia_nmi +typedef struct acpi_table_drtm { - ACPI_HEST_HEADER Header; - UINT32 Reserved; - UINT32 RecordsToPreallocate; - UINT32 MaxSectionsPerRecord; - UINT32 MaxRawDataLength; + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT64 EntryBaseAddress; + UINT64 EntryLength; + UINT32 EntryAddress32; + UINT64 EntryAddress64; + UINT64 ExitAddress; + UINT64 LogAreaAddress; + UINT32 LogAreaLength; + UINT64 ArchDependentAddress; + UINT32 Flags; -} ACPI_HEST_IA_NMI; +} ACPI_TABLE_DRTM; +/* Flag Definitions for above */ -/* 3,4,5: Not used */ +#define ACPI_DRTM_ACCESS_ALLOWED (1) +#define ACPI_DRTM_ENABLE_GAP_CODE (1<<1) +#define ACPI_DRTM_INCOMPLETE_MEASUREMENTS (1<<2) +#define ACPI_DRTM_AUTHORITY_ORDER (1<<3) -/* 6: PCI Express Root Port AER */ -typedef struct acpi_hest_aer_root +/* 1) Validated Tables List (64-bit addresses) */ + +typedef struct acpi_drtm_vtable_list { - ACPI_HEST_HEADER Header; - ACPI_HEST_AER_COMMON Aer; - UINT32 RootErrorCommand; + UINT32 ValidatedTableCount; + UINT64 ValidatedTables[1]; -} ACPI_HEST_AER_ROOT; +} ACPI_DRTM_VTABLE_LIST; +/* 2) Resources List (of Resource Descriptors) */ -/* 7: PCI Express AER (AER Endpoint) */ +/* Resource Descriptor */ -typedef struct acpi_hest_aer +typedef struct acpi_drtm_resource { - ACPI_HEST_HEADER Header; - ACPI_HEST_AER_COMMON Aer; - -} ACPI_HEST_AER; - + UINT8 Size[7]; + UINT8 Type; + UINT64 Address; -/* 8: PCI Express/PCI-X Bridge AER */ +} ACPI_DRTM_RESOURCE; -typedef struct acpi_hest_aer_bridge +typedef struct acpi_drtm_resource_list { - ACPI_HEST_HEADER Header; - ACPI_HEST_AER_COMMON Aer; - UINT32 UncorrectableMask2; - UINT32 UncorrectableSeverity2; - UINT32 AdvancedCapabilities2; + UINT32 ResourceCount; + ACPI_DRTM_RESOURCE Resources[1]; -} ACPI_HEST_AER_BRIDGE; +} ACPI_DRTM_RESOURCE_LIST; +/* 3) Platform-specific Identifiers List */ -/* 9: Generic Hardware Error Source */ - -typedef struct acpi_hest_generic +typedef struct acpi_drtm_dps_id { - ACPI_HEST_HEADER Header; - UINT16 RelatedSourceId; - UINT8 Reserved; - UINT8 Enabled; - UINT32 RecordsToPreallocate; - UINT32 MaxSectionsPerRecord; - UINT32 MaxRawDataLength; - ACPI_GENERIC_ADDRESS ErrorStatusAddress; - ACPI_HEST_NOTIFY Notify; - UINT32 ErrorBlockLength; + UINT32 DpsIdLength; + UINT8 DpsId[16]; -} ACPI_HEST_GENERIC; +} ACPI_DRTM_DPS_ID; -/* 10: Generic Hardware Error Source, version 2 */ +/******************************************************************************* + * + * ECDT - Embedded Controller Boot Resources Table + * Version 1 + * + ******************************************************************************/ -typedef struct acpi_hest_generic_v2 +typedef struct acpi_table_ecdt { - ACPI_HEST_HEADER Header; - UINT16 RelatedSourceId; - UINT8 Reserved; - UINT8 Enabled; - UINT32 RecordsToPreallocate; - UINT32 MaxSectionsPerRecord; - UINT32 MaxRawDataLength; - ACPI_GENERIC_ADDRESS ErrorStatusAddress; - ACPI_HEST_NOTIFY Notify; - UINT32 ErrorBlockLength; - ACPI_GENERIC_ADDRESS ReadAckRegister; - UINT64 ReadAckPreserve; - UINT64 ReadAckWrite; + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + ACPI_GENERIC_ADDRESS Control; /* Address of EC command/status register */ + ACPI_GENERIC_ADDRESS Data; /* Address of EC data register */ + UINT32 Uid; /* Unique ID - must be same as the EC _UID method */ + UINT8 Gpe; /* The GPE for the EC */ + UINT8 Id[1]; /* Full namepath of the EC in the ACPI namespace */ -} ACPI_HEST_GENERIC_V2; +} ACPI_TABLE_ECDT; -/* Generic Error Status block */ +/******************************************************************************* + * + * EINJ - Error Injection Table (ACPI 4.0) + * Version 1 + * + ******************************************************************************/ -typedef struct acpi_hest_generic_status +typedef struct acpi_table_einj { - UINT32 BlockStatus; - UINT32 RawDataOffset; - UINT32 RawDataLength; - UINT32 DataLength; - UINT32 ErrorSeverity; - -} ACPI_HEST_GENERIC_STATUS; - -/* Values for BlockStatus flags above */ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 HeaderLength; + UINT8 Flags; + UINT8 Reserved[3]; + UINT32 Entries; -#define ACPI_HEST_UNCORRECTABLE (1) -#define ACPI_HEST_CORRECTABLE (1<<1) -#define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2) -#define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3) -#define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ +} ACPI_TABLE_EINJ; -/* Generic Error Data entry */ +/* EINJ Injection Instruction Entries (actions) */ -typedef struct acpi_hest_generic_data +typedef struct acpi_einj_entry { - UINT8 SectionType[16]; - UINT32 ErrorSeverity; - UINT16 Revision; - UINT8 ValidationBits; - UINT8 Flags; - UINT32 ErrorDataLength; - UINT8 FruId[16]; - UINT8 FruText[20]; - -} ACPI_HEST_GENERIC_DATA; + ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ -/* Extension for revision 0x0300 */ +} ACPI_EINJ_ENTRY; -typedef struct acpi_hest_generic_data_v300 -{ - UINT8 SectionType[16]; - UINT32 ErrorSeverity; - UINT16 Revision; - UINT8 ValidationBits; - UINT8 Flags; - UINT32 ErrorDataLength; - UINT8 FruId[16]; - UINT8 FruText[20]; - UINT64 TimeStamp; +/* Masks for Flags field above */ -} ACPI_HEST_GENERIC_DATA_V300; +#define ACPI_EINJ_PRESERVE (1) -/* Values for ErrorSeverity above */ +/* Values for Action field above */ -#define ACPI_HEST_GEN_ERROR_RECOVERABLE 0 -#define ACPI_HEST_GEN_ERROR_FATAL 1 -#define ACPI_HEST_GEN_ERROR_CORRECTED 2 -#define ACPI_HEST_GEN_ERROR_NONE 3 +enum AcpiEinjActions +{ + ACPI_EINJ_BEGIN_OPERATION = 0, + ACPI_EINJ_GET_TRIGGER_TABLE = 1, + ACPI_EINJ_SET_ERROR_TYPE = 2, + ACPI_EINJ_GET_ERROR_TYPE = 3, + ACPI_EINJ_END_OPERATION = 4, + ACPI_EINJ_EXECUTE_OPERATION = 5, + ACPI_EINJ_CHECK_BUSY_STATUS = 6, + ACPI_EINJ_GET_COMMAND_STATUS = 7, + ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8, + ACPI_EINJ_GET_EXECUTE_TIMINGS = 9, + ACPI_EINJ_ACTION_RESERVED = 10, /* 10 and greater are reserved */ + ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */ +}; -/* Flags for ValidationBits above */ +/* Values for Instruction field above */ -#define ACPI_HEST_GEN_VALID_FRU_ID (1) -#define ACPI_HEST_GEN_VALID_FRU_STRING (1<<1) -#define ACPI_HEST_GEN_VALID_TIMESTAMP (1<<2) +enum AcpiEinjInstructions +{ + ACPI_EINJ_READ_REGISTER = 0, + ACPI_EINJ_READ_REGISTER_VALUE = 1, + ACPI_EINJ_WRITE_REGISTER = 2, + ACPI_EINJ_WRITE_REGISTER_VALUE = 3, + ACPI_EINJ_NOOP = 4, + ACPI_EINJ_FLUSH_CACHELINE = 5, + ACPI_EINJ_INSTRUCTION_RESERVED = 6 /* 6 and greater are reserved */ +}; +typedef struct acpi_einj_error_type_with_addr +{ + UINT32 ErrorType; + UINT32 VendorStructOffset; + UINT32 Flags; + UINT32 ApicId; + UINT64 Address; + UINT64 Range; + UINT32 PcieId; -/* 11: IA32 Deferred Machine Check Exception (ACPI 6.2) */ +} ACPI_EINJ_ERROR_TYPE_WITH_ADDR; -typedef struct acpi_hest_ia_deferred_check +typedef struct acpi_einj_vendor { - ACPI_HEST_HEADER Header; - UINT16 Reserved1; - UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ - UINT8 Enabled; - UINT32 RecordsToPreallocate; - UINT32 MaxSectionsPerRecord; - ACPI_HEST_NOTIFY Notify; - UINT8 NumHardwareBanks; - UINT8 Reserved2[3]; + UINT32 Length; + UINT32 PcieId; + UINT16 VendorId; + UINT16 DeviceId; + UINT8 RevisionId; + UINT8 Reserved[3]; -} ACPI_HEST_IA_DEFERRED_CHECK; +} ACPI_EINJ_VENDOR; -/******************************************************************************* - * - * HMAT - Heterogeneous Memory Attributes Table (ACPI 6.2) - * Version 1 - * - ******************************************************************************/ +/* EINJ Trigger Error Action Table */ -typedef struct acpi_table_hmat +typedef struct acpi_einj_trigger { - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 Reserved; - -} ACPI_TABLE_HMAT; + UINT32 HeaderSize; + UINT32 Revision; + UINT32 TableSize; + UINT32 EntryCount; +} ACPI_EINJ_TRIGGER; -/* Values for HMAT structure types */ +/* Command status return values */ -enum AcpiHmatType +enum AcpiEinjCommandStatus { - ACPI_HMAT_TYPE_ADDRESS_RANGE = 0, /* Memory subystem address range */ - ACPI_HMAT_TYPE_LOCALITY = 1, /* System locality latency and bandwidth information */ - ACPI_HMAT_TYPE_CACHE = 2, /* Memory side cache information */ - ACPI_HMAT_TYPE_RESERVED = 3 /* 3 and greater are reserved */ + ACPI_EINJ_SUCCESS = 0, + ACPI_EINJ_FAILURE = 1, + ACPI_EINJ_INVALID_ACCESS = 2, + ACPI_EINJ_STATUS_RESERVED = 3 /* 3 and greater are reserved */ }; -typedef struct acpi_hmat_structure -{ - UINT16 Type; - UINT16 Reserved; - UINT32 Length; -} ACPI_HMAT_STRUCTURE; +/* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */ +#define ACPI_EINJ_PROCESSOR_CORRECTABLE (1) +#define ACPI_EINJ_PROCESSOR_UNCORRECTABLE (1<<1) +#define ACPI_EINJ_PROCESSOR_FATAL (1<<2) +#define ACPI_EINJ_MEMORY_CORRECTABLE (1<<3) +#define ACPI_EINJ_MEMORY_UNCORRECTABLE (1<<4) +#define ACPI_EINJ_MEMORY_FATAL (1<<5) +#define ACPI_EINJ_PCIX_CORRECTABLE (1<<6) +#define ACPI_EINJ_PCIX_UNCORRECTABLE (1<<7) +#define ACPI_EINJ_PCIX_FATAL (1<<8) +#define ACPI_EINJ_PLATFORM_CORRECTABLE (1<<9) +#define ACPI_EINJ_PLATFORM_UNCORRECTABLE (1<<10) +#define ACPI_EINJ_PLATFORM_FATAL (1<<11) +#define ACPI_EINJ_VENDOR_DEFINED (1<<31) -/* - * HMAT Structures, correspond to Type in ACPI_HMAT_STRUCTURE - */ -/* 0: Memory subystem address range */ +/******************************************************************************* + * + * ERST - Error Record Serialization Table (ACPI 4.0) + * Version 1 + * + ******************************************************************************/ -typedef struct acpi_hmat_address_range +typedef struct acpi_table_erst { - ACPI_HMAT_STRUCTURE Header; - UINT16 Flags; - UINT16 Reserved1; - UINT32 ProcessorPD; /* Processor proximity domain */ - UINT32 MemoryPD; /* Memory proximity domain */ - UINT32 Reserved2; - UINT64 PhysicalAddressBase; /* Physical address range base */ - UINT64 PhysicalAddressLength; /* Physical address range length */ - -} ACPI_HMAT_ADDRESS_RANGE; - -/* Masks for Flags field above */ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 HeaderLength; + UINT32 Reserved; + UINT32 Entries; -#define ACPI_HMAT_PROCESSOR_PD_VALID (1) /* 1: ProcessorPD field is valid */ -#define ACPI_HMAT_MEMORY_PD_VALID (1<<1) /* 1: MemoryPD field is valid */ -#define ACPI_HMAT_RESERVATION_HINT (1<<2) /* 1: Reservation hint */ +} ACPI_TABLE_ERST; -/* 1: System locality latency and bandwidth information */ +/* ERST Serialization Entries (actions) */ -typedef struct acpi_hmat_locality +typedef struct acpi_erst_entry { - ACPI_HMAT_STRUCTURE Header; - UINT8 Flags; - UINT8 DataType; - UINT16 Reserved1; - UINT32 NumberOfInitiatorPDs; - UINT32 NumberOfTargetPDs; - UINT32 Reserved2; - UINT64 EntryBaseUnit; + ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ -} ACPI_HMAT_LOCALITY; +} ACPI_ERST_ENTRY; /* Masks for Flags field above */ -#define ACPI_HMAT_MEMORY_HIERARCHY (0x0F) - -/* Values for Memory Hierarchy flag */ - -#define ACPI_HMAT_MEMORY 0 -#define ACPI_HMAT_LAST_LEVEL_CACHE 1 -#define ACPI_HMAT_1ST_LEVEL_CACHE 2 -#define ACPI_HMAT_2ND_LEVEL_CACHE 3 -#define ACPI_HMAT_3RD_LEVEL_CACHE 4 - -/* Values for DataType field above */ +#define ACPI_ERST_PRESERVE (1) -#define ACPI_HMAT_ACCESS_LATENCY 0 -#define ACPI_HMAT_READ_LATENCY 1 -#define ACPI_HMAT_WRITE_LATENCY 2 -#define ACPI_HMAT_ACCESS_BANDWIDTH 3 -#define ACPI_HMAT_READ_BANDWIDTH 4 -#define ACPI_HMAT_WRITE_BANDWIDTH 5 +/* Values for Action field above */ +enum AcpiErstActions +{ + ACPI_ERST_BEGIN_WRITE = 0, + ACPI_ERST_BEGIN_READ = 1, + ACPI_ERST_BEGIN_CLEAR = 2, + ACPI_ERST_END = 3, + ACPI_ERST_SET_RECORD_OFFSET = 4, + ACPI_ERST_EXECUTE_OPERATION = 5, + ACPI_ERST_CHECK_BUSY_STATUS = 6, + ACPI_ERST_GET_COMMAND_STATUS = 7, + ACPI_ERST_GET_RECORD_ID = 8, + ACPI_ERST_SET_RECORD_ID = 9, + ACPI_ERST_GET_RECORD_COUNT = 10, + ACPI_ERST_BEGIN_DUMMY_WRIITE = 11, + ACPI_ERST_NOT_USED = 12, + ACPI_ERST_GET_ERROR_RANGE = 13, + ACPI_ERST_GET_ERROR_LENGTH = 14, + ACPI_ERST_GET_ERROR_ATTRIBUTES = 15, + ACPI_ERST_EXECUTE_TIMINGS = 16, + ACPI_ERST_ACTION_RESERVED = 17 /* 17 and greater are reserved */ +}; -/* 2: Memory side cache information */ +/* Values for Instruction field above */ -typedef struct acpi_hmat_cache +enum AcpiErstInstructions { - ACPI_HMAT_STRUCTURE Header; - UINT32 MemoryPD; - UINT32 Reserved1; - UINT64 CacheSize; - UINT32 CacheAttributes; - UINT16 Reserved2; - UINT16 NumberOfSMBIOSHandles; - -} ACPI_HMAT_CACHE; + ACPI_ERST_READ_REGISTER = 0, + ACPI_ERST_READ_REGISTER_VALUE = 1, + ACPI_ERST_WRITE_REGISTER = 2, + ACPI_ERST_WRITE_REGISTER_VALUE = 3, + ACPI_ERST_NOOP = 4, + ACPI_ERST_LOAD_VAR1 = 5, + ACPI_ERST_LOAD_VAR2 = 6, + ACPI_ERST_STORE_VAR1 = 7, + ACPI_ERST_ADD = 8, + ACPI_ERST_SUBTRACT = 9, + ACPI_ERST_ADD_VALUE = 10, + ACPI_ERST_SUBTRACT_VALUE = 11, + ACPI_ERST_STALL = 12, + ACPI_ERST_STALL_WHILE_TRUE = 13, + ACPI_ERST_SKIP_NEXT_IF_TRUE = 14, + ACPI_ERST_GOTO = 15, + ACPI_ERST_SET_SRC_ADDRESS_BASE = 16, + ACPI_ERST_SET_DST_ADDRESS_BASE = 17, + ACPI_ERST_MOVE_DATA = 18, + ACPI_ERST_INSTRUCTION_RESERVED = 19 /* 19 and greater are reserved */ +}; -/* Masks for CacheAttributes field above */ +/* Command status return values */ -#define ACPI_HMAT_TOTAL_CACHE_LEVEL (0x0000000F) -#define ACPI_HMAT_CACHE_LEVEL (0x000000F0) -#define ACPI_HMAT_CACHE_ASSOCIATIVITY (0x00000F00) -#define ACPI_HMAT_WRITE_POLICY (0x0000F000) -#define ACPI_HMAT_CACHE_LINE_SIZE (0xFFFF0000) +enum AcpiErstCommandStatus +{ + ACPI_ERST_SUCESS = 0, + ACPI_ERST_NO_SPACE = 1, + ACPI_ERST_NOT_AVAILABLE = 2, + ACPI_ERST_FAILURE = 3, + ACPI_ERST_RECORD_EMPTY = 4, + ACPI_ERST_NOT_FOUND = 5, + ACPI_ERST_STATUS_RESERVED = 6 /* 6 and greater are reserved */ +}; -/* Values for cache associativity flag */ -#define ACPI_HMAT_CA_NONE (0) -#define ACPI_HMAT_CA_DIRECT_MAPPED (1) -#define ACPI_HMAT_CA_COMPLEX_CACHE_INDEXING (2) +/* Error Record Serialization Information */ -/* Values for write policy flag */ +typedef struct acpi_erst_info +{ + UINT16 Signature; /* Should be "ER" */ + UINT8 Data[48]; -#define ACPI_HMAT_CP_NONE (0) -#define ACPI_HMAT_CP_WB (1) -#define ACPI_HMAT_CP_WT (2) +} ACPI_ERST_INFO; /******************************************************************************* * - * MADT - Multiple APIC Description Table - * Version 3 + * FPDT - Firmware Performance Data Table (ACPI 5.0) + * Version 1 * ******************************************************************************/ -typedef struct acpi_table_madt +typedef struct acpi_table_fpdt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 Address; /* Physical address of local APIC */ - UINT32 Flags; - -} ACPI_TABLE_MADT; -/* Masks for Flags field above */ +} ACPI_TABLE_FPDT; -#define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */ -/* Values for PCATCompat flag */ +/* FPDT subtable header (Performance Record Structure) */ -#define ACPI_MADT_DUAL_PIC 1 -#define ACPI_MADT_MULTIPLE_APIC 0 +typedef struct acpi_fpdt_header +{ + UINT16 Type; + UINT8 Length; + UINT8 Revision; +} ACPI_FPDT_HEADER; -/* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */ +/* Values for Type field above */ -enum AcpiMadtType +enum AcpiFpdtType { - ACPI_MADT_TYPE_LOCAL_APIC = 0, - ACPI_MADT_TYPE_IO_APIC = 1, - ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, - ACPI_MADT_TYPE_NMI_SOURCE = 3, - ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, - ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, - ACPI_MADT_TYPE_IO_SAPIC = 6, - ACPI_MADT_TYPE_LOCAL_SAPIC = 7, - ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, - ACPI_MADT_TYPE_LOCAL_X2APIC = 9, - ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, - ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, - ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, - ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13, - ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14, - ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15, - ACPI_MADT_TYPE_RESERVED = 16 /* 16 and greater are reserved */ + ACPI_FPDT_TYPE_BOOT = 0, + ACPI_FPDT_TYPE_S3PERF = 1 }; /* - * MADT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER + * FPDT subtables */ -/* 0: Processor Local APIC */ +/* 0: Firmware Basic Boot Performance Record */ -typedef struct acpi_madt_local_apic +typedef struct acpi_fpdt_boot_pointer { - ACPI_SUBTABLE_HEADER Header; - UINT8 ProcessorId; /* ACPI processor id */ - UINT8 Id; /* Processor's local APIC id */ - UINT32 LapicFlags; + ACPI_FPDT_HEADER Header; + UINT8 Reserved[4]; + UINT64 Address; -} ACPI_MADT_LOCAL_APIC; +} ACPI_FPDT_BOOT_POINTER; -/* 1: IO APIC */ +/* 1: S3 Performance Table Pointer Record */ -typedef struct acpi_madt_io_apic +typedef struct acpi_fpdt_s3pt_pointer { - ACPI_SUBTABLE_HEADER Header; - UINT8 Id; /* I/O APIC ID */ - UINT8 Reserved; /* Reserved - must be zero */ - UINT32 Address; /* APIC physical address */ - UINT32 GlobalIrqBase; /* Global system interrupt where INTI lines start */ - -} ACPI_MADT_IO_APIC; + ACPI_FPDT_HEADER Header; + UINT8 Reserved[4]; + UINT64 Address; +} ACPI_FPDT_S3PT_POINTER; -/* 2: Interrupt Override */ -typedef struct acpi_madt_interrupt_override +/* + * S3PT - S3 Performance Table. This table is pointed to by the + * S3 Pointer Record above. + */ +typedef struct acpi_table_s3pt { - ACPI_SUBTABLE_HEADER Header; - UINT8 Bus; /* 0 - ISA */ - UINT8 SourceIrq; /* Interrupt source (IRQ) */ - UINT32 GlobalIrq; /* Global system interrupt */ - UINT16 IntiFlags; - -} ACPI_MADT_INTERRUPT_OVERRIDE; - - -/* 3: NMI Source */ + UINT8 Signature[4]; /* "S3PT" */ + UINT32 Length; -typedef struct acpi_madt_nmi_source -{ - ACPI_SUBTABLE_HEADER Header; - UINT16 IntiFlags; - UINT32 GlobalIrq; /* Global system interrupt */ +} ACPI_TABLE_S3PT; -} ACPI_MADT_NMI_SOURCE; +/* + * S3PT Subtables (Not part of the actual FPDT) + */ -/* 4: Local APIC NMI */ +/* Values for Type field in S3PT header */ -typedef struct acpi_madt_local_apic_nmi +enum AcpiS3ptType { - ACPI_SUBTABLE_HEADER Header; - UINT8 ProcessorId; /* ACPI processor id */ - UINT16 IntiFlags; - UINT8 Lint; /* LINTn to which NMI is connected */ - -} ACPI_MADT_LOCAL_APIC_NMI; + ACPI_S3PT_TYPE_RESUME = 0, + ACPI_S3PT_TYPE_SUSPEND = 1, + ACPI_FPDT_BOOT_PERFORMANCE = 2 +}; +typedef struct acpi_s3pt_resume +{ + ACPI_FPDT_HEADER Header; + UINT32 ResumeCount; + UINT64 FullResume; + UINT64 AverageResume; -/* 5: Address Override */ +} ACPI_S3PT_RESUME; -typedef struct acpi_madt_local_apic_override +typedef struct acpi_s3pt_suspend { - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; /* Reserved, must be zero */ - UINT64 Address; /* APIC physical address */ - -} ACPI_MADT_LOCAL_APIC_OVERRIDE; + ACPI_FPDT_HEADER Header; + UINT64 SuspendStart; + UINT64 SuspendEnd; +} ACPI_S3PT_SUSPEND; -/* 6: I/O Sapic */ -typedef struct acpi_madt_io_sapic +/* + * FPDT Boot Performance Record (Not part of the actual FPDT) + */ +typedef struct acpi_fpdt_boot { - ACPI_SUBTABLE_HEADER Header; - UINT8 Id; /* I/O SAPIC ID */ - UINT8 Reserved; /* Reserved, must be zero */ - UINT32 GlobalIrqBase; /* Global interrupt for SAPIC start */ - UINT64 Address; /* SAPIC physical address */ + ACPI_FPDT_HEADER Header; + UINT8 Reserved[4]; + UINT64 ResetEnd; + UINT64 LoadStart; + UINT64 StartupStart; + UINT64 ExitServicesEntry; + UINT64 ExitServicesExit; -} ACPI_MADT_IO_SAPIC; +} ACPI_FPDT_BOOT; -/* 7: Local Sapic */ +/******************************************************************************* + * + * GTDT - Generic Timer Description Table (ACPI 5.1) + * Version 2 + * + ******************************************************************************/ -typedef struct acpi_madt_local_sapic +typedef struct acpi_table_gtdt { - ACPI_SUBTABLE_HEADER Header; - UINT8 ProcessorId; /* ACPI processor id */ - UINT8 Id; /* SAPIC ID */ - UINT8 Eid; /* SAPIC EID */ - UINT8 Reserved[3]; /* Reserved, must be zero */ - UINT32 LapicFlags; - UINT32 Uid; /* Numeric UID - ACPI 3.0 */ - char UidString[1]; /* String UID - ACPI 3.0 */ - -} ACPI_MADT_LOCAL_SAPIC; + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT64 CounterBlockAddresss; + UINT32 Reserved; + UINT32 SecureEl1Interrupt; + UINT32 SecureEl1Flags; + UINT32 NonSecureEl1Interrupt; + UINT32 NonSecureEl1Flags; + UINT32 VirtualTimerInterrupt; + UINT32 VirtualTimerFlags; + UINT32 NonSecureEl2Interrupt; + UINT32 NonSecureEl2Flags; + UINT64 CounterReadBlockAddress; + UINT32 PlatformTimerCount; + UINT32 PlatformTimerOffset; +} ACPI_TABLE_GTDT; -/* 8: Platform Interrupt Source */ +/* Flag Definitions: Timer Block Physical Timers and Virtual timers */ -typedef struct acpi_madt_interrupt_source -{ - ACPI_SUBTABLE_HEADER Header; - UINT16 IntiFlags; - UINT8 Type; /* 1=PMI, 2=INIT, 3=corrected */ - UINT8 Id; /* Processor ID */ - UINT8 Eid; /* Processor EID */ - UINT8 IoSapicVector; /* Vector value for PMI interrupts */ - UINT32 GlobalIrq; /* Global system interrupt */ - UINT32 Flags; /* Interrupt Source Flags */ +#define ACPI_GTDT_INTERRUPT_MODE (1) +#define ACPI_GTDT_INTERRUPT_POLARITY (1<<1) +#define ACPI_GTDT_ALWAYS_ON (1<<2) -} ACPI_MADT_INTERRUPT_SOURCE; -/* Masks for Flags field above */ +/* Common GTDT subtable header */ -#define ACPI_MADT_CPEI_OVERRIDE (1) +typedef struct acpi_gtdt_header +{ + UINT8 Type; + UINT16 Length; +} ACPI_GTDT_HEADER; -/* 9: Processor Local X2APIC (ACPI 4.0) */ +/* Values for GTDT subtable type above */ -typedef struct acpi_madt_local_x2apic +enum AcpiGtdtType { - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; /* Reserved - must be zero */ - UINT32 LocalApicId; /* Processor x2APIC ID */ - UINT32 LapicFlags; - UINT32 Uid; /* ACPI processor UID */ + ACPI_GTDT_TYPE_TIMER_BLOCK = 0, + ACPI_GTDT_TYPE_WATCHDOG = 1, + ACPI_GTDT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ +}; -} ACPI_MADT_LOCAL_X2APIC; +/* GTDT Subtables, correspond to Type in acpi_gtdt_header */ -/* 10: Local X2APIC NMI (ACPI 4.0) */ +/* 0: Generic Timer Block */ -typedef struct acpi_madt_local_x2apic_nmi +typedef struct acpi_gtdt_timer_block { - ACPI_SUBTABLE_HEADER Header; - UINT16 IntiFlags; - UINT32 Uid; /* ACPI processor UID */ - UINT8 Lint; /* LINTn to which NMI is connected */ - UINT8 Reserved[3]; /* Reserved - must be zero */ - -} ACPI_MADT_LOCAL_X2APIC_NMI; + ACPI_GTDT_HEADER Header; + UINT8 Reserved; + UINT64 BlockAddress; + UINT32 TimerCount; + UINT32 TimerOffset; +} ACPI_GTDT_TIMER_BLOCK; -/* 11: Generic Interrupt (ACPI 5.0 + ACPI 6.0 changes) */ +/* Timer Sub-Structure, one per timer */ -typedef struct acpi_madt_generic_interrupt +typedef struct acpi_gtdt_timer_entry { - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; /* Reserved - must be zero */ - UINT32 CpuInterfaceNumber; - UINT32 Uid; - UINT32 Flags; - UINT32 ParkingVersion; - UINT32 PerformanceInterrupt; - UINT64 ParkedAddress; + UINT8 FrameNumber; + UINT8 Reserved[3]; UINT64 BaseAddress; - UINT64 GicvBaseAddress; - UINT64 GichBaseAddress; - UINT32 VgicInterrupt; - UINT64 GicrBaseAddress; - UINT64 ArmMpidr; - UINT8 EfficiencyClass; - UINT8 Reserved2[3]; + UINT64 El0BaseAddress; + UINT32 TimerInterrupt; + UINT32 TimerFlags; + UINT32 VirtualTimerInterrupt; + UINT32 VirtualTimerFlags; + UINT32 CommonFlags; -} ACPI_MADT_GENERIC_INTERRUPT; +} ACPI_GTDT_TIMER_ENTRY; -/* Masks for Flags field above */ +/* Flag Definitions: TimerFlags and VirtualTimerFlags above */ + +#define ACPI_GTDT_GT_IRQ_MODE (1) +#define ACPI_GTDT_GT_IRQ_POLARITY (1<<1) -/* ACPI_MADT_ENABLED (1) Processor is usable if set */ -#define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */ -#define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */ +/* Flag Definitions: CommonFlags above */ +#define ACPI_GTDT_GT_IS_SECURE_TIMER (1) +#define ACPI_GTDT_GT_ALWAYS_ON (1<<1) -/* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */ -typedef struct acpi_madt_generic_distributor +/* 1: SBSA Generic Watchdog Structure */ + +typedef struct acpi_gtdt_watchdog { - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; /* Reserved - must be zero */ - UINT32 GicId; - UINT64 BaseAddress; - UINT32 GlobalIrqBase; - UINT8 Version; - UINT8 Reserved2[3]; /* Reserved - must be zero */ + ACPI_GTDT_HEADER Header; + UINT8 Reserved; + UINT64 RefreshFrameAddress; + UINT64 ControlFrameAddress; + UINT32 TimerInterrupt; + UINT32 TimerFlags; + +} ACPI_GTDT_WATCHDOG; + +/* Flag Definitions: TimerFlags above */ + +#define ACPI_GTDT_WATCHDOG_IRQ_MODE (1) +#define ACPI_GTDT_WATCHDOG_IRQ_POLARITY (1<<1) +#define ACPI_GTDT_WATCHDOG_SECURE (1<<2) -} ACPI_MADT_GENERIC_DISTRIBUTOR; -/* Values for Version field above */ +/******************************************************************************* + * + * HEST - Hardware Error Source Table (ACPI 4.0) + * Version 1 + * + ******************************************************************************/ -enum AcpiMadtGicVersion +typedef struct acpi_table_hest { - ACPI_MADT_GIC_VERSION_NONE = 0, - ACPI_MADT_GIC_VERSION_V1 = 1, - ACPI_MADT_GIC_VERSION_V2 = 2, - ACPI_MADT_GIC_VERSION_V3 = 3, - ACPI_MADT_GIC_VERSION_V4 = 4, - ACPI_MADT_GIC_VERSION_RESERVED = 5 /* 5 and greater are reserved */ -}; + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 ErrorSourceCount; + +} ACPI_TABLE_HEST; -/* 13: Generic MSI Frame (ACPI 5.1) */ +/* HEST subtable header */ -typedef struct acpi_madt_generic_msi_frame +typedef struct acpi_hest_header { - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; /* Reserved - must be zero */ - UINT32 MsiFrameId; - UINT64 BaseAddress; - UINT32 Flags; - UINT16 SpiCount; - UINT16 SpiBase; + UINT16 Type; + UINT16 SourceId; + +} ACPI_HEST_HEADER; -} ACPI_MADT_GENERIC_MSI_FRAME; -/* Masks for Flags field above */ +/* Values for Type field above for subtables */ -#define ACPI_MADT_OVERRIDE_SPI_VALUES (1) +enum AcpiHestTypes +{ + ACPI_HEST_TYPE_IA32_CHECK = 0, + ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1, + ACPI_HEST_TYPE_IA32_NMI = 2, + ACPI_HEST_TYPE_NOT_USED3 = 3, + ACPI_HEST_TYPE_NOT_USED4 = 4, + ACPI_HEST_TYPE_NOT_USED5 = 5, + ACPI_HEST_TYPE_AER_ROOT_PORT = 6, + ACPI_HEST_TYPE_AER_ENDPOINT = 7, + ACPI_HEST_TYPE_AER_BRIDGE = 8, + ACPI_HEST_TYPE_GENERIC_ERROR = 9, + ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10, + ACPI_HEST_TYPE_IA32_DEFERRED_CHECK = 11, + ACPI_HEST_TYPE_RESERVED = 12 /* 12 and greater are reserved */ +}; -/* 14: Generic Redistributor (ACPI 5.1) */ +/* + * HEST substructures contained in subtables + */ -typedef struct acpi_madt_generic_redistributor +/* + * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and + * ACPI_HEST_IA_CORRECTED structures. + */ +typedef struct acpi_hest_ia_error_bank { - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; /* reserved - must be zero */ - UINT64 BaseAddress; - UINT32 Length; + UINT8 BankNumber; + UINT8 ClearStatusOnInit; + UINT8 StatusFormat; + UINT8 Reserved; + UINT32 ControlRegister; + UINT64 ControlData; + UINT32 StatusRegister; + UINT32 AddressRegister; + UINT32 MiscRegister; -} ACPI_MADT_GENERIC_REDISTRIBUTOR; +} ACPI_HEST_IA_ERROR_BANK; -/* 15: Generic Translator (ACPI 6.0) */ +/* Common HEST sub-structure for PCI/AER structures below (6,7,8) */ -typedef struct acpi_madt_generic_translator +typedef struct acpi_hest_aer_common { - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; /* reserved - must be zero */ - UINT32 TranslationId; - UINT64 BaseAddress; - UINT32 Reserved2; + UINT16 Reserved1; + UINT8 Flags; + UINT8 Enabled; + UINT32 RecordsToPreallocate; + UINT32 MaxSectionsPerRecord; + UINT32 Bus; /* Bus and Segment numbers */ + UINT16 Device; + UINT16 Function; + UINT16 DeviceControl; + UINT16 Reserved2; + UINT32 UncorrectableMask; + UINT32 UncorrectableSeverity; + UINT32 CorrectableMask; + UINT32 AdvancedCapabilities; + +} ACPI_HEST_AER_COMMON; -} ACPI_MADT_GENERIC_TRANSLATOR; +/* Masks for HEST Flags fields */ +#define ACPI_HEST_FIRMWARE_FIRST (1) +#define ACPI_HEST_GLOBAL (1<<1) +#define ACPI_HEST_GHES_ASSIST (1<<2) /* - * Common flags fields for MADT subtables + * Macros to access the bus/segment numbers in Bus field above: + * Bus number is encoded in bits 7:0 + * Segment number is encoded in bits 23:8 */ +#define ACPI_HEST_BUS(Bus) ((Bus) & 0xFF) +#define ACPI_HEST_SEGMENT(Bus) (((Bus) >> 8) & 0xFFFF) + + +/* Hardware Error Notification */ -/* MADT Local APIC flags */ +typedef struct acpi_hest_notify +{ + UINT8 Type; + UINT8 Length; + UINT16 ConfigWriteEnable; + UINT32 PollInterval; + UINT32 Vector; + UINT32 PollingThresholdValue; + UINT32 PollingThresholdWindow; + UINT32 ErrorThresholdValue; + UINT32 ErrorThresholdWindow; -#define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ +} ACPI_HEST_NOTIFY; -/* MADT MPS INTI flags (IntiFlags) */ +/* Values for Notify Type field above */ -#define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */ -#define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */ +enum AcpiHestNotifyTypes +{ + ACPI_HEST_NOTIFY_POLLED = 0, + ACPI_HEST_NOTIFY_EXTERNAL = 1, + ACPI_HEST_NOTIFY_LOCAL = 2, + ACPI_HEST_NOTIFY_SCI = 3, + ACPI_HEST_NOTIFY_NMI = 4, + ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */ + ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */ + ACPI_HEST_NOTIFY_GPIO = 7, /* ACPI 6.0 */ + ACPI_HEST_NOTIFY_SEA = 8, /* ACPI 6.1 */ + ACPI_HEST_NOTIFY_SEI = 9, /* ACPI 6.1 */ + ACPI_HEST_NOTIFY_GSIV = 10, /* ACPI 6.1 */ + ACPI_HEST_NOTIFY_SOFTWARE_DELEGATED = 11, /* ACPI 6.2 */ + ACPI_HEST_NOTIFY_RESERVED = 12 /* 12 and greater are reserved */ +}; -/* Values for MPS INTI flags */ +/* Values for ConfigWriteEnable bitfield above */ -#define ACPI_MADT_POLARITY_CONFORMS 0 -#define ACPI_MADT_POLARITY_ACTIVE_HIGH 1 -#define ACPI_MADT_POLARITY_RESERVED 2 -#define ACPI_MADT_POLARITY_ACTIVE_LOW 3 +#define ACPI_HEST_TYPE (1) +#define ACPI_HEST_POLL_INTERVAL (1<<1) +#define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2) +#define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3) +#define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4) +#define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5) -#define ACPI_MADT_TRIGGER_CONFORMS (0) -#define ACPI_MADT_TRIGGER_EDGE (1<<2) -#define ACPI_MADT_TRIGGER_RESERVED (2<<2) -#define ACPI_MADT_TRIGGER_LEVEL (3<<2) +/* + * HEST subtables + */ -/******************************************************************************* - * - * MSCT - Maximum System Characteristics Table (ACPI 4.0) - * Version 1 - * - ******************************************************************************/ +/* 0: IA32 Machine Check Exception */ -typedef struct acpi_table_msct +typedef struct acpi_hest_ia_machine_check { - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 ProximityOffset; /* Location of proximity info struct(s) */ - UINT32 MaxProximityDomains;/* Max number of proximity domains */ - UINT32 MaxClockDomains; /* Max number of clock domains */ - UINT64 MaxAddress; /* Max physical address in system */ + ACPI_HEST_HEADER Header; + UINT16 Reserved1; + UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ + UINT8 Enabled; + UINT32 RecordsToPreallocate; + UINT32 MaxSectionsPerRecord; + UINT64 GlobalCapabilityData; + UINT64 GlobalControlData; + UINT8 NumHardwareBanks; + UINT8 Reserved3[7]; -} ACPI_TABLE_MSCT; +} ACPI_HEST_IA_MACHINE_CHECK; -/* Subtable - Maximum Proximity Domain Information. Version 1 */ +/* 1: IA32 Corrected Machine Check */ -typedef struct acpi_msct_proximity +typedef struct acpi_hest_ia_corrected { - UINT8 Revision; - UINT8 Length; - UINT32 RangeStart; /* Start of domain range */ - UINT32 RangeEnd; /* End of domain range */ - UINT32 ProcessorCapacity; - UINT64 MemoryCapacity; /* In bytes */ + ACPI_HEST_HEADER Header; + UINT16 Reserved1; + UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ + UINT8 Enabled; + UINT32 RecordsToPreallocate; + UINT32 MaxSectionsPerRecord; + ACPI_HEST_NOTIFY Notify; + UINT8 NumHardwareBanks; + UINT8 Reserved2[3]; -} ACPI_MSCT_PROXIMITY; +} ACPI_HEST_IA_CORRECTED; -/******************************************************************************* - * - * NFIT - NVDIMM Interface Table (ACPI 6.0+) - * Version 1 - * - ******************************************************************************/ +/* 2: IA32 Non-Maskable Interrupt */ -typedef struct acpi_table_nfit +typedef struct acpi_hest_ia_nmi { - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 Reserved; /* Reserved, must be zero */ + ACPI_HEST_HEADER Header; + UINT32 Reserved; + UINT32 RecordsToPreallocate; + UINT32 MaxSectionsPerRecord; + UINT32 MaxRawDataLength; + +} ACPI_HEST_IA_NMI; -} ACPI_TABLE_NFIT; -/* Subtable header for NFIT */ +/* 3,4,5: Not used */ + +/* 6: PCI Express Root Port AER */ -typedef struct acpi_nfit_header +typedef struct acpi_hest_aer_root { - UINT16 Type; - UINT16 Length; + ACPI_HEST_HEADER Header; + ACPI_HEST_AER_COMMON Aer; + UINT32 RootErrorCommand; -} ACPI_NFIT_HEADER; +} ACPI_HEST_AER_ROOT; -/* Values for subtable type in ACPI_NFIT_HEADER */ +/* 7: PCI Express AER (AER Endpoint) */ -enum AcpiNfitType +typedef struct acpi_hest_aer { - ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0, - ACPI_NFIT_TYPE_MEMORY_MAP = 1, - ACPI_NFIT_TYPE_INTERLEAVE = 2, - ACPI_NFIT_TYPE_SMBIOS = 3, - ACPI_NFIT_TYPE_CONTROL_REGION = 4, - ACPI_NFIT_TYPE_DATA_REGION = 5, - ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6, - ACPI_NFIT_TYPE_RESERVED = 7 /* 7 and greater are reserved */ -}; + ACPI_HEST_HEADER Header; + ACPI_HEST_AER_COMMON Aer; -/* - * NFIT Subtables - */ +} ACPI_HEST_AER; -/* 0: System Physical Address Range Structure */ -typedef struct acpi_nfit_system_address -{ - ACPI_NFIT_HEADER Header; - UINT16 RangeIndex; - UINT16 Flags; - UINT32 Reserved; /* Reseved, must be zero */ - UINT32 ProximityDomain; - UINT8 RangeGuid[16]; - UINT64 Address; - UINT64 Length; - UINT64 MemoryMapping; +/* 8: PCI Express/PCI-X Bridge AER */ -} ACPI_NFIT_SYSTEM_ADDRESS; +typedef struct acpi_hest_aer_bridge +{ + ACPI_HEST_HEADER Header; + ACPI_HEST_AER_COMMON Aer; + UINT32 UncorrectableMask2; + UINT32 UncorrectableSeverity2; + UINT32 AdvancedCapabilities2; -/* Flags */ +} ACPI_HEST_AER_BRIDGE; -#define ACPI_NFIT_ADD_ONLINE_ONLY (1) /* 00: Add/Online Operation Only */ -#define ACPI_NFIT_PROXIMITY_VALID (1<<1) /* 01: Proximity Domain Valid */ -/* Range Type GUIDs appear in the include/acuuid.h file */ +/* 9: Generic Hardware Error Source */ +typedef struct acpi_hest_generic +{ + ACPI_HEST_HEADER Header; + UINT16 RelatedSourceId; + UINT8 Reserved; + UINT8 Enabled; + UINT32 RecordsToPreallocate; + UINT32 MaxSectionsPerRecord; + UINT32 MaxRawDataLength; + ACPI_GENERIC_ADDRESS ErrorStatusAddress; + ACPI_HEST_NOTIFY Notify; + UINT32 ErrorBlockLength; -/* 1: Memory Device to System Address Range Map Structure */ +} ACPI_HEST_GENERIC; -typedef struct acpi_nfit_memory_map -{ - ACPI_NFIT_HEADER Header; - UINT32 DeviceHandle; - UINT16 PhysicalId; - UINT16 RegionId; - UINT16 RangeIndex; - UINT16 RegionIndex; - UINT64 RegionSize; - UINT64 RegionOffset; - UINT64 Address; - UINT16 InterleaveIndex; - UINT16 InterleaveWays; - UINT16 Flags; - UINT16 Reserved; /* Reserved, must be zero */ -} ACPI_NFIT_MEMORY_MAP; +/* 10: Generic Hardware Error Source, version 2 */ -/* Flags */ +typedef struct acpi_hest_generic_v2 +{ + ACPI_HEST_HEADER Header; + UINT16 RelatedSourceId; + UINT8 Reserved; + UINT8 Enabled; + UINT32 RecordsToPreallocate; + UINT32 MaxSectionsPerRecord; + UINT32 MaxRawDataLength; + ACPI_GENERIC_ADDRESS ErrorStatusAddress; + ACPI_HEST_NOTIFY Notify; + UINT32 ErrorBlockLength; + ACPI_GENERIC_ADDRESS ReadAckRegister; + UINT64 ReadAckPreserve; + UINT64 ReadAckWrite; -#define ACPI_NFIT_MEM_SAVE_FAILED (1) /* 00: Last SAVE to Memory Device failed */ -#define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1) /* 01: Last RESTORE from Memory Device failed */ -#define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2) /* 02: Platform flush failed */ -#define ACPI_NFIT_MEM_NOT_ARMED (1<<3) /* 03: Memory Device is not armed */ -#define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4) /* 04: Memory Device observed SMART/health events */ -#define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5) /* 05: SMART/health events enabled */ -#define ACPI_NFIT_MEM_MAP_FAILED (1<<6) /* 06: Mapping to SPA failed */ +} ACPI_HEST_GENERIC_V2; -/* 2: Interleave Structure */ +/* Generic Error Status block */ -typedef struct acpi_nfit_interleave +typedef struct acpi_hest_generic_status { - ACPI_NFIT_HEADER Header; - UINT16 InterleaveIndex; - UINT16 Reserved; /* Reserved, must be zero */ - UINT32 LineCount; - UINT32 LineSize; - UINT32 LineOffset[1]; /* Variable length */ - -} ACPI_NFIT_INTERLEAVE; - + UINT32 BlockStatus; + UINT32 RawDataOffset; + UINT32 RawDataLength; + UINT32 DataLength; + UINT32 ErrorSeverity; -/* 3: SMBIOS Management Information Structure */ +} ACPI_HEST_GENERIC_STATUS; -typedef struct acpi_nfit_smbios -{ - ACPI_NFIT_HEADER Header; - UINT32 Reserved; /* Reserved, must be zero */ - UINT8 Data[1]; /* Variable length */ +/* Values for BlockStatus flags above */ -} ACPI_NFIT_SMBIOS; +#define ACPI_HEST_UNCORRECTABLE (1) +#define ACPI_HEST_CORRECTABLE (1<<1) +#define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2) +#define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3) +#define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ -/* 4: NVDIMM Control Region Structure */ +/* Generic Error Data entry */ -typedef struct acpi_nfit_control_region +typedef struct acpi_hest_generic_data { - ACPI_NFIT_HEADER Header; - UINT16 RegionIndex; - UINT16 VendorId; - UINT16 DeviceId; - UINT16 RevisionId; - UINT16 SubsystemVendorId; - UINT16 SubsystemDeviceId; - UINT16 SubsystemRevisionId; - UINT8 ValidFields; - UINT8 ManufacturingLocation; - UINT16 ManufacturingDate; - UINT8 Reserved[2]; /* Reserved, must be zero */ - UINT32 SerialNumber; - UINT16 Code; - UINT16 Windows; - UINT64 WindowSize; - UINT64 CommandOffset; - UINT64 CommandSize; - UINT64 StatusOffset; - UINT64 StatusSize; - UINT16 Flags; - UINT8 Reserved1[6]; /* Reserved, must be zero */ - -} ACPI_NFIT_CONTROL_REGION; + UINT8 SectionType[16]; + UINT32 ErrorSeverity; + UINT16 Revision; + UINT8 ValidationBits; + UINT8 Flags; + UINT32 ErrorDataLength; + UINT8 FruId[16]; + UINT8 FruText[20]; -/* Flags */ +} ACPI_HEST_GENERIC_DATA; -#define ACPI_NFIT_CONTROL_BUFFERED (1) /* Block Data Windows implementation is buffered */ +/* Extension for revision 0x0300 */ -/* ValidFields bits */ +typedef struct acpi_hest_generic_data_v300 +{ + UINT8 SectionType[16]; + UINT32 ErrorSeverity; + UINT16 Revision; + UINT8 ValidationBits; + UINT8 Flags; + UINT32 ErrorDataLength; + UINT8 FruId[16]; + UINT8 FruText[20]; + UINT64 TimeStamp; -#define ACPI_NFIT_CONTROL_MFG_INFO_VALID (1) /* Manufacturing fields are valid */ +} ACPI_HEST_GENERIC_DATA_V300; +/* Values for ErrorSeverity above */ -/* 5: NVDIMM Block Data Window Region Structure */ +#define ACPI_HEST_GEN_ERROR_RECOVERABLE 0 +#define ACPI_HEST_GEN_ERROR_FATAL 1 +#define ACPI_HEST_GEN_ERROR_CORRECTED 2 +#define ACPI_HEST_GEN_ERROR_NONE 3 -typedef struct acpi_nfit_data_region -{ - ACPI_NFIT_HEADER Header; - UINT16 RegionIndex; - UINT16 Windows; - UINT64 Offset; - UINT64 Size; - UINT64 Capacity; - UINT64 StartAddress; +/* Flags for ValidationBits above */ -} ACPI_NFIT_DATA_REGION; +#define ACPI_HEST_GEN_VALID_FRU_ID (1) +#define ACPI_HEST_GEN_VALID_FRU_STRING (1<<1) +#define ACPI_HEST_GEN_VALID_TIMESTAMP (1<<2) -/* 6: Flush Hint Address Structure */ +/* 11: IA32 Deferred Machine Check Exception (ACPI 6.2) */ -typedef struct acpi_nfit_flush_address +typedef struct acpi_hest_ia_deferred_check { - ACPI_NFIT_HEADER Header; - UINT32 DeviceHandle; - UINT16 HintCount; - UINT8 Reserved[6]; /* Reserved, must be zero */ - UINT64 HintAddress[1]; /* Variable length */ + ACPI_HEST_HEADER Header; + UINT16 Reserved1; + UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ + UINT8 Enabled; + UINT32 RecordsToPreallocate; + UINT32 MaxSectionsPerRecord; + ACPI_HEST_NOTIFY Notify; + UINT8 NumHardwareBanks; + UINT8 Reserved2[3]; -} ACPI_NFIT_FLUSH_ADDRESS; +} ACPI_HEST_IA_DEFERRED_CHECK; /******************************************************************************* * - * PDTT - Processor Debug Trigger Table (ACPI 6.2) - * Version 0 + * HMAT - Heterogeneous Memory Attributes Table (ACPI 6.2) + * Version 1 * ******************************************************************************/ -typedef struct acpi_table_pdtt +typedef struct acpi_table_hmat { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT8 TriggerCount; - UINT8 Reserved[3]; - UINT32 ArrayOffset; + UINT32 Reserved; -} ACPI_TABLE_PDTT; +} ACPI_TABLE_HMAT; -/* - * PDTT Communication Channel Identifier Structure. - * The number of these structures is defined by TriggerCount above, - * starting at ArrayOffset. - */ -typedef struct acpi_pdtt_channel -{ - UINT16 SubChannelId; +/* Values for HMAT structure types */ -} ACPI_PDTT_CHANNEL; +enum AcpiHmatType +{ + ACPI_HMAT_TYPE_ADDRESS_RANGE = 0, /* Memory subystem address range */ + ACPI_HMAT_TYPE_LOCALITY = 1, /* System locality latency and bandwidth information */ + ACPI_HMAT_TYPE_CACHE = 2, /* Memory side cache information */ + ACPI_HMAT_TYPE_RESERVED = 3 /* 3 and greater are reserved */ +}; +typedef struct acpi_hmat_structure +{ + UINT16 Type; + UINT16 Reserved; + UINT32 Length; -/* Mask and Flags for above */ +} ACPI_HMAT_STRUCTURE; -#define ACPI_PDTT_SUBCHANNEL_ID_MASK 0x00FF -#define ACPI_PDTT_RUNTIME_TRIGGER (1<<8) -#define ACPI_PPTT_WAIT_COMPLETION (1<<9) +/* + * HMAT Structures, correspond to Type in ACPI_HMAT_STRUCTURE + */ -/******************************************************************************* - * - * PPTT - Processor Properties Topology Table (ACPI 6.2) - * Version 1 - * - ******************************************************************************/ +/* 0: Memory subystem address range */ -typedef struct acpi_table_pptt +typedef struct acpi_hmat_address_range { - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + ACPI_HMAT_STRUCTURE Header; + UINT16 Flags; + UINT16 Reserved1; + UINT32 ProcessorPD; /* Processor proximity domain */ + UINT32 MemoryPD; /* Memory proximity domain */ + UINT32 Reserved2; + UINT64 PhysicalAddressBase; /* Physical address range base */ + UINT64 PhysicalAddressLength; /* Physical address range length */ -} ACPI_TABLE_PPTT; +} ACPI_HMAT_ADDRESS_RANGE; -/* Values for Type field above */ +/* Masks for Flags field above */ -enum AcpiPpttType -{ - ACPI_PPTT_TYPE_PROCESSOR = 0, - ACPI_PPTT_TYPE_CACHE = 1, - ACPI_PPTT_TYPE_ID = 2, - ACPI_PPTT_TYPE_RESERVED = 3 -}; +#define ACPI_HMAT_PROCESSOR_PD_VALID (1) /* 1: ProcessorPD field is valid */ +#define ACPI_HMAT_MEMORY_PD_VALID (1<<1) /* 1: MemoryPD field is valid */ +#define ACPI_HMAT_RESERVATION_HINT (1<<2) /* 1: Reservation hint */ -/* 0: Processor Hierarchy Node Structure */ +/* 1: System locality latency and bandwidth information */ -typedef struct acpi_pptt_processor +typedef struct acpi_hmat_locality { - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; - UINT32 Flags; - UINT32 Parent; - UINT32 AcpiProcessorId; - UINT32 NumberOfPrivResources; + ACPI_HMAT_STRUCTURE Header; + UINT8 Flags; + UINT8 DataType; + UINT16 Reserved1; + UINT32 NumberOfInitiatorPDs; + UINT32 NumberOfTargetPDs; + UINT32 Reserved2; + UINT64 EntryBaseUnit; + +} ACPI_HMAT_LOCALITY; -} ACPI_PPTT_PROCESSOR; +/* Masks for Flags field above */ + +#define ACPI_HMAT_MEMORY_HIERARCHY (0x0F) -/* Flags */ +/* Values for Memory Hierarchy flag */ -#define ACPI_PPTT_PHYSICAL_PACKAGE (1) /* Physical package */ -#define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID (2) /* ACPI Processor ID valid */ +#define ACPI_HMAT_MEMORY 0 +#define ACPI_HMAT_LAST_LEVEL_CACHE 1 +#define ACPI_HMAT_1ST_LEVEL_CACHE 2 +#define ACPI_HMAT_2ND_LEVEL_CACHE 3 +#define ACPI_HMAT_3RD_LEVEL_CACHE 4 +/* Values for DataType field above */ -/* 1: Cache Type Structure */ +#define ACPI_HMAT_ACCESS_LATENCY 0 +#define ACPI_HMAT_READ_LATENCY 1 +#define ACPI_HMAT_WRITE_LATENCY 2 +#define ACPI_HMAT_ACCESS_BANDWIDTH 3 +#define ACPI_HMAT_READ_BANDWIDTH 4 +#define ACPI_HMAT_WRITE_BANDWIDTH 5 -typedef struct acpi_pptt_cache -{ - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; - UINT32 Flags; - UINT32 NextLevelOfCache; - UINT32 Size; - UINT32 NumberOfSets; - UINT8 Associativity; - UINT8 Attributes; - UINT16 LineSize; -} ACPI_PPTT_CACHE; +/* 2: Memory side cache information */ -/* Flags */ +typedef struct acpi_hmat_cache +{ + ACPI_HMAT_STRUCTURE Header; + UINT32 MemoryPD; + UINT32 Reserved1; + UINT64 CacheSize; + UINT32 CacheAttributes; + UINT16 Reserved2; + UINT16 NumberOfSMBIOSHandles; -#define ACPI_PPTT_SIZE_PROPERTY_VALID (1) /* Physical property valid */ -#define ACPI_PPTT_NUMBER_OF_SETS_VALID (1<<1) /* Number of sets valid */ -#define ACPI_PPTT_ASSOCIATIVITY_VALID (1<<2) /* Associativity valid */ -#define ACPI_PPTT_ALLOCATION_TYPE_VALID (1<<3) /* Allocation type valid */ -#define ACPI_PPTT_CACHE_TYPE_VALID (1<<4) /* Cache type valid */ -#define ACPI_PPTT_WRITE_POLICY_VALID (1<<5) /* Write policy valid */ -#define ACPI_PPTT_LINE_SIZE_VALID (1<<6) /* Line size valid */ +} ACPI_HMAT_CACHE; -/* Masks for Attributes */ +/* Masks for CacheAttributes field above */ -#define ACPI_PPTT_MASK_ALLOCATION_TYPE (0x03) /* Allocation type */ -#define ACPI_PPTT_MASK_CACHE_TYPE (0x0C) /* Cache type */ -#define ACPI_PPTT_MASK_WRITE_POLICY (0x10) /* Write policy */ +#define ACPI_HMAT_TOTAL_CACHE_LEVEL (0x0000000F) +#define ACPI_HMAT_CACHE_LEVEL (0x000000F0) +#define ACPI_HMAT_CACHE_ASSOCIATIVITY (0x00000F00) +#define ACPI_HMAT_WRITE_POLICY (0x0000F000) +#define ACPI_HMAT_CACHE_LINE_SIZE (0xFFFF0000) +/* Values for cache associativity flag */ -/* 2: ID Structure */ +#define ACPI_HMAT_CA_NONE (0) +#define ACPI_HMAT_CA_DIRECT_MAPPED (1) +#define ACPI_HMAT_CA_COMPLEX_CACHE_INDEXING (2) -typedef struct acpi_pptt_id -{ - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; - UINT32 VendorId; - UINT64 Level1Id; - UINT64 Level2Id; - UINT16 MajorRev; - UINT16 MinorRev; - UINT16 SpinRev; +/* Values for write policy flag */ -} ACPI_PPTT_ID; +#define ACPI_HMAT_CP_NONE (0) +#define ACPI_HMAT_CP_WB (1) +#define ACPI_HMAT_CP_WT (2) /******************************************************************************* * - * SBST - Smart Battery Specification Table + * HPET - High Precision Event Timer table * Version 1 * + * Conforms to "IA-PC HPET (High Precision Event Timers) Specification", + * Version 1.0a, October 2004 + * ******************************************************************************/ -typedef struct acpi_table_sbst +typedef struct acpi_table_hpet { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 WarningLevel; - UINT32 LowLevel; - UINT32 CriticalLevel; + UINT32 Id; /* Hardware ID of event timer block */ + ACPI_GENERIC_ADDRESS Address; /* Address of event timer block */ + UINT8 Sequence; /* HPET sequence number */ + UINT16 MinimumTick; /* Main counter min tick, periodic mode */ + UINT8 Flags; + +} ACPI_TABLE_HPET; -} ACPI_TABLE_SBST; +/* Masks for Flags field above */ +#define ACPI_HPET_PAGE_PROTECT_MASK (3) -/******************************************************************************* - * - * SLIT - System Locality Distance Information Table - * Version 1 - * - ******************************************************************************/ +/* Values for Page Protect flags */ -typedef struct acpi_table_slit +enum AcpiHpetPageProtect { - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT64 LocalityCount; - UINT8 Entry[1]; /* Real size = localities^2 */ - -} ACPI_TABLE_SLIT; + ACPI_HPET_NO_PAGE_PROTECT = 0, + ACPI_HPET_PAGE_PROTECT4 = 1, + ACPI_HPET_PAGE_PROTECT64 = 2 +}; /******************************************************************************* * - * SRAT - System Resource Affinity Table - * Version 3 + * IBFT - Boot Firmware Table + * Version 1 + * + * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b + * Specification", Version 1.01, March 1, 2007 + * + * Note: It appears that this table is not intended to appear in the RSDT/XSDT. + * Therefore, it is not currently supported by the disassembler. * ******************************************************************************/ -typedef struct acpi_table_srat +typedef struct acpi_table_ibft { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 TableRevision; /* Must be value '1' */ - UINT64 Reserved; /* Reserved, must be zero */ - -} ACPI_TABLE_SRAT; - -/* Values for subtable type in ACPI_SUBTABLE_HEADER */ - -enum AcpiSratType -{ - ACPI_SRAT_TYPE_CPU_AFFINITY = 0, - ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1, - ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2, - ACPI_SRAT_TYPE_GICC_AFFINITY = 3, - ACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4, /* ACPI 6.2 */ - ACPI_SRAT_TYPE_RESERVED = 5 /* 5 and greater are reserved */ -}; - -/* - * SRAT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER - */ - -/* 0: Processor Local APIC/SAPIC Affinity */ - -typedef struct acpi_srat_cpu_affinity -{ - ACPI_SUBTABLE_HEADER Header; - UINT8 ProximityDomainLo; - UINT8 ApicId; - UINT32 Flags; - UINT8 LocalSapicEid; - UINT8 ProximityDomainHi[3]; - UINT32 ClockDomain; - -} ACPI_SRAT_CPU_AFFINITY; - -/* Flags */ - -#define ACPI_SRAT_CPU_USE_AFFINITY (1) /* 00: Use affinity structure */ - - -/* 1: Memory Affinity */ - -typedef struct acpi_srat_mem_affinity -{ - ACPI_SUBTABLE_HEADER Header; - UINT32 ProximityDomain; - UINT16 Reserved; /* Reserved, must be zero */ - UINT64 BaseAddress; - UINT64 Length; - UINT32 Reserved1; - UINT32 Flags; - UINT64 Reserved2; /* Reserved, must be zero */ - -} ACPI_SRAT_MEM_AFFINITY; + UINT8 Reserved[12]; -/* Flags */ +} ACPI_TABLE_IBFT; -#define ACPI_SRAT_MEM_ENABLED (1) /* 00: Use affinity structure */ -#define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1) /* 01: Memory region is hot pluggable */ -#define ACPI_SRAT_MEM_NON_VOLATILE (1<<2) /* 02: Memory region is non-volatile */ +/* IBFT common subtable header */ -/* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */ - -typedef struct acpi_srat_x2apic_cpu_affinity +typedef struct acpi_ibft_header { - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; /* Reserved, must be zero */ - UINT32 ProximityDomain; - UINT32 ApicId; - UINT32 Flags; - UINT32 ClockDomain; - UINT32 Reserved2; - -} ACPI_SRAT_X2APIC_CPU_AFFINITY; - -/* Flags for ACPI_SRAT_CPU_AFFINITY and ACPI_SRAT_X2APIC_CPU_AFFINITY */ - -#define ACPI_SRAT_CPU_ENABLED (1) /* 00: Use affinity structure */ + UINT8 Type; + UINT8 Version; + UINT16 Length; + UINT8 Index; + UINT8 Flags; +} ACPI_IBFT_HEADER; -/* 3: GICC Affinity (ACPI 5.1) */ +/* Values for Type field above */ -typedef struct acpi_srat_gicc_affinity +enum AcpiIbftType { - ACPI_SUBTABLE_HEADER Header; - UINT32 ProximityDomain; - UINT32 AcpiProcessorUid; - UINT32 Flags; - UINT32 ClockDomain; - -} ACPI_SRAT_GICC_AFFINITY; - -/* Flags for ACPI_SRAT_GICC_AFFINITY */ - -#define ACPI_SRAT_GICC_ENABLED (1) /* 00: Use affinity structure */ - - -/* 4: GCC ITS Affinity (ACPI 6.2) */ + ACPI_IBFT_TYPE_NOT_USED = 0, + ACPI_IBFT_TYPE_CONTROL = 1, + ACPI_IBFT_TYPE_INITIATOR = 2, + ACPI_IBFT_TYPE_NIC = 3, + ACPI_IBFT_TYPE_TARGET = 4, + ACPI_IBFT_TYPE_EXTENSIONS = 5, + ACPI_IBFT_TYPE_RESERVED = 6 /* 6 and greater are reserved */ +}; -typedef struct acpi_srat_gic_its_affinity -{ - ACPI_SUBTABLE_HEADER Header; - UINT32 ProximityDomain; - UINT16 Reserved; - UINT32 ItsId; -} ACPI_SRAT_GIC_ITS_AFFINITY; +/* IBFT subtables */ + +typedef struct acpi_ibft_control +{ + ACPI_IBFT_HEADER Header; + UINT16 Extensions; + UINT16 InitiatorOffset; + UINT16 Nic0Offset; + UINT16 Target0Offset; + UINT16 Nic1Offset; + UINT16 Target1Offset; + +} ACPI_IBFT_CONTROL; + +typedef struct acpi_ibft_initiator +{ + ACPI_IBFT_HEADER Header; + UINT8 SnsServer[16]; + UINT8 SlpServer[16]; + UINT8 PrimaryServer[16]; + UINT8 SecondaryServer[16]; + UINT16 NameLength; + UINT16 NameOffset; + +} ACPI_IBFT_INITIATOR; + +typedef struct acpi_ibft_nic +{ + ACPI_IBFT_HEADER Header; + UINT8 IpAddress[16]; + UINT8 SubnetMaskPrefix; + UINT8 Origin; + UINT8 Gateway[16]; + UINT8 PrimaryDns[16]; + UINT8 SecondaryDns[16]; + UINT8 Dhcp[16]; + UINT16 Vlan; + UINT8 MacAddress[6]; + UINT16 PciAddress; + UINT16 NameLength; + UINT16 NameOffset; + +} ACPI_IBFT_NIC; + +typedef struct acpi_ibft_target +{ + ACPI_IBFT_HEADER Header; + UINT8 TargetIpAddress[16]; + UINT16 TargetIpSocket; + UINT8 TargetBootLun[8]; + UINT8 ChapType; + UINT8 NicAssociation; + UINT16 TargetNameLength; + UINT16 TargetNameOffset; + UINT16 ChapNameLength; + UINT16 ChapNameOffset; + UINT16 ChapSecretLength; + UINT16 ChapSecretOffset; + UINT16 ReverseChapNameLength; + UINT16 ReverseChapNameOffset; + UINT16 ReverseChapSecretLength; + UINT16 ReverseChapSecretOffset; + +} ACPI_IBFT_TARGET; /* Reset to default packing */ diff --git a/sys/contrib/dev/acpica/source/include/actbl1.h b/sys/contrib/dev/acpica/source/include/actbl2.h similarity index 51% copy from sys/contrib/dev/acpica/source/include/actbl1.h copy to sys/contrib/dev/acpica/source/include/actbl2.h index 537c33e7c3..4b3d460d88 100644 --- a/sys/contrib/dev/acpica/source/include/actbl1.h +++ b/sys/contrib/dev/acpica/source/include/actbl2.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * Name: actbl1.h - Additional ACPI table definitions + * Name: actbl2.h - ACPI Table Definitions (tables not in ACPI spec) * *****************************************************************************/ @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -149,19 +149,17 @@ * *****************************************************************************/ -#ifndef __ACTBL1_H__ -#define __ACTBL1_H__ +#ifndef __ACTBL2_H__ +#define __ACTBL2_H__ /******************************************************************************* * - * Additional ACPI Tables (1) + * Additional ACPI Tables (2) * * These tables are not consumed directly by the ACPICA subsystem, but are * included here to support device drivers and the AML disassembler. * - * The tables in this file are fully defined within the ACPI specification. - * ******************************************************************************/ @@ -170,21 +168,25 @@ * file. Useful because they make it more difficult to inadvertently type in * the wrong signature. */ -#define ACPI_SIG_BERT "BERT" /* Boot Error Record Table */ -#define ACPI_SIG_CPEP "CPEP" /* Corrected Platform Error Polling table */ -#define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */ -#define ACPI_SIG_EINJ "EINJ" /* Error Injection table */ -#define ACPI_SIG_ERST "ERST" /* Error Record Serialization Table */ -#define ACPI_SIG_HMAT "HMAT" /* Heterogeneous Memory Attributes Table */ -#define ACPI_SIG_HEST "HEST" /* Hardware Error Source Table */ +#define ACPI_SIG_IORT "IORT" /* IO Remapping Table */ +#define ACPI_SIG_IVRS "IVRS" /* I/O Virtualization Reporting Structure */ +#define ACPI_SIG_LPIT "LPIT" /* Low Power Idle Table */ #define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */ +#define ACPI_SIG_MCFG "MCFG" /* PCI Memory Mapped Configuration table */ +#define ACPI_SIG_MCHI "MCHI" /* Management Controller Host Interface table */ +#define ACPI_SIG_MPST "MPST" /* Memory Power State Table */ #define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */ -#define ACPI_SIG_PDTT "PDTT" /* Processor Debug Trigger Table */ +#define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ +#define ACPI_SIG_MTMR "MTMR" /* MID Timer table */ +#define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */ +#define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */ +#define ACPI_SIG_PDTT "PDTT" /* Platform Debug Trigger Table */ +#define ACPI_SIG_PMTT "PMTT" /* Platform Memory Topology Table */ #define ACPI_SIG_PPTT "PPTT" /* Processor Properties Topology Table */ +#define ACPI_SIG_RASF "RASF" /* RAS Feature table */ #define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */ -#define ACPI_SIG_SLIT "SLIT" /* System Locality Distance Information Table */ -#define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */ -#define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */ +#define ACPI_SIG_SDEI "SDEI" /* Software Delegated Exception Interface Table */ +#define ACPI_SIG_SDEV "SDEV" /* Secure Devices table */ /* @@ -208,850 +210,453 @@ /******************************************************************************* * - * Common subtable headers + * IORT - IO Remapping Table + * + * Conforms to "IO Remapping Table System Software on ARM Platforms", + * Document number: ARM DEN 0049C, May 2017 * ******************************************************************************/ -/* Generic subtable header (used in MADT, SRAT, etc.) */ - -typedef struct acpi_subtable_header +typedef struct acpi_table_iort { - UINT8 Type; - UINT8 Length; - -} ACPI_SUBTABLE_HEADER; + ACPI_TABLE_HEADER Header; + UINT32 NodeCount; + UINT32 NodeOffset; + UINT32 Reserved; +} ACPI_TABLE_IORT; -/* Subtable header for WHEA tables (EINJ, ERST, WDAT) */ -typedef struct acpi_whea_header +/* + * IORT subtables + */ +typedef struct acpi_iort_node { - UINT8 Action; - UINT8 Instruction; - UINT8 Flags; - UINT8 Reserved; - ACPI_GENERIC_ADDRESS RegisterRegion; - UINT64 Value; /* Value used with Read/Write register */ - UINT64 Mask; /* Bitmask required for this register instruction */ - -} ACPI_WHEA_HEADER; + UINT8 Type; + UINT16 Length; + UINT8 Revision; + UINT32 Reserved; + UINT32 MappingCount; + UINT32 MappingOffset; + char NodeData[1]; +} ACPI_IORT_NODE; -/******************************************************************************* - * - * BERT - Boot Error Record Table (ACPI 4.0) - * Version 1 - * - ******************************************************************************/ +/* Values for subtable Type above */ -typedef struct acpi_table_bert +enum AcpiIortNodeType { - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 RegionLength; /* Length of the boot error region */ - UINT64 Address; /* Physical address of the error region */ - -} ACPI_TABLE_BERT; - + ACPI_IORT_NODE_ITS_GROUP = 0x00, + ACPI_IORT_NODE_NAMED_COMPONENT = 0x01, + ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02, + ACPI_IORT_NODE_SMMU = 0x03, + ACPI_IORT_NODE_SMMU_V3 = 0x04 +}; -/* Boot Error Region (not a subtable, pointed to by Address field above) */ -typedef struct acpi_bert_region +typedef struct acpi_iort_id_mapping { - UINT32 BlockStatus; /* Type of error information */ - UINT32 RawDataOffset; /* Offset to raw error data */ - UINT32 RawDataLength; /* Length of raw error data */ - UINT32 DataLength; /* Length of generic error data */ - UINT32 ErrorSeverity; /* Severity code */ + UINT32 InputBase; /* Lowest value in input range */ + UINT32 IdCount; /* Number of IDs */ + UINT32 OutputBase; /* Lowest value in output range */ + UINT32 OutputReference; /* A reference to the output node */ + UINT32 Flags; -} ACPI_BERT_REGION; +} ACPI_IORT_ID_MAPPING; -/* Values for BlockStatus flags above */ +/* Masks for Flags field above for IORT subtable */ -#define ACPI_BERT_UNCORRECTABLE (1) -#define ACPI_BERT_CORRECTABLE (1<<1) -#define ACPI_BERT_MULTIPLE_UNCORRECTABLE (1<<2) -#define ACPI_BERT_MULTIPLE_CORRECTABLE (1<<3) -#define ACPI_BERT_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ +#define ACPI_IORT_ID_SINGLE_MAPPING (1) -/* Values for ErrorSeverity above */ -enum AcpiBertErrorSeverity +typedef struct acpi_iort_memory_access { - ACPI_BERT_ERROR_CORRECTABLE = 0, - ACPI_BERT_ERROR_FATAL = 1, - ACPI_BERT_ERROR_CORRECTED = 2, - ACPI_BERT_ERROR_NONE = 3, - ACPI_BERT_ERROR_RESERVED = 4 /* 4 and greater are reserved */ -}; - -/* - * Note: The generic error data that follows the ErrorSeverity field above - * uses the ACPI_HEST_GENERIC_DATA defined under the HEST table below - */ - - -/******************************************************************************* - * - * CPEP - Corrected Platform Error Polling table (ACPI 4.0) - * Version 1 - * - ******************************************************************************/ + UINT32 CacheCoherency; + UINT8 Hints; + UINT16 Reserved; + UINT8 MemoryFlags; -typedef struct acpi_table_cpep -{ - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT64 Reserved; +} ACPI_IORT_MEMORY_ACCESS; -} ACPI_TABLE_CPEP; +/* Values for CacheCoherency field above */ +#define ACPI_IORT_NODE_COHERENT 0x00000001 /* The device node is fully coherent */ +#define ACPI_IORT_NODE_NOT_COHERENT 0x00000000 /* The device node is not coherent */ -/* Subtable */ +/* Masks for Hints field above */ -typedef struct acpi_cpep_polling -{ - ACPI_SUBTABLE_HEADER Header; - UINT8 Id; /* Processor ID */ - UINT8 Eid; /* Processor EID */ - UINT32 Interval; /* Polling interval (msec) */ +#define ACPI_IORT_HT_TRANSIENT (1) +#define ACPI_IORT_HT_WRITE (1<<1) +#define ACPI_IORT_HT_READ (1<<2) +#define ACPI_IORT_HT_OVERRIDE (1<<3) -} ACPI_CPEP_POLLING; +/* Masks for MemoryFlags field above */ +#define ACPI_IORT_MF_COHERENCY (1) +#define ACPI_IORT_MF_ATTRIBUTES (1<<1) -/******************************************************************************* - * - * ECDT - Embedded Controller Boot Resources Table - * Version 1 - * - ******************************************************************************/ -typedef struct acpi_table_ecdt +/* + * IORT node specific subtables + */ +typedef struct acpi_iort_its_group { - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - ACPI_GENERIC_ADDRESS Control; /* Address of EC command/status register */ - ACPI_GENERIC_ADDRESS Data; /* Address of EC data register */ - UINT32 Uid; /* Unique ID - must be same as the EC _UID method */ - UINT8 Gpe; /* The GPE for the EC */ - UINT8 Id[1]; /* Full namepath of the EC in the ACPI namespace */ - -} ACPI_TABLE_ECDT; + UINT32 ItsCount; + UINT32 Identifiers[1]; /* GIC ITS identifier arrary */ +} ACPI_IORT_ITS_GROUP; -/******************************************************************************* - * - * EINJ - Error Injection Table (ACPI 4.0) - * Version 1 - * - ******************************************************************************/ -typedef struct acpi_table_einj +typedef struct acpi_iort_named_component { - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 HeaderLength; - UINT8 Flags; - UINT8 Reserved[3]; - UINT32 Entries; + UINT32 NodeFlags; + UINT64 MemoryProperties; /* Memory access properties */ + UINT8 MemoryAddressLimit; /* Memory address size limit */ + char DeviceName[1]; /* Path of namespace object */ -} ACPI_TABLE_EINJ; +} ACPI_IORT_NAMED_COMPONENT; -/* EINJ Injection Instruction Entries (actions) */ - -typedef struct acpi_einj_entry +typedef struct acpi_iort_root_complex { - ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ - -} ACPI_EINJ_ENTRY; - -/* Masks for Flags field above */ + UINT64 MemoryProperties; /* Memory access properties */ + UINT32 AtsAttribute; + UINT32 PciSegmentNumber; -#define ACPI_EINJ_PRESERVE (1) +} ACPI_IORT_ROOT_COMPLEX; -/* Values for Action field above */ +/* Values for AtsAttribute field above */ -enum AcpiEinjActions -{ - ACPI_EINJ_BEGIN_OPERATION = 0, - ACPI_EINJ_GET_TRIGGER_TABLE = 1, - ACPI_EINJ_SET_ERROR_TYPE = 2, - ACPI_EINJ_GET_ERROR_TYPE = 3, - ACPI_EINJ_END_OPERATION = 4, - ACPI_EINJ_EXECUTE_OPERATION = 5, - ACPI_EINJ_CHECK_BUSY_STATUS = 6, - ACPI_EINJ_GET_COMMAND_STATUS = 7, - ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8, - ACPI_EINJ_GET_EXECUTE_TIMINGS = 9, - ACPI_EINJ_ACTION_RESERVED = 10, /* 10 and greater are reserved */ - ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */ -}; +#define ACPI_IORT_ATS_SUPPORTED 0x00000001 /* The root complex supports ATS */ +#define ACPI_IORT_ATS_UNSUPPORTED 0x00000000 /* The root complex doesn't support ATS */ -/* Values for Instruction field above */ - -enum AcpiEinjInstructions -{ - ACPI_EINJ_READ_REGISTER = 0, - ACPI_EINJ_READ_REGISTER_VALUE = 1, - ACPI_EINJ_WRITE_REGISTER = 2, - ACPI_EINJ_WRITE_REGISTER_VALUE = 3, - ACPI_EINJ_NOOP = 4, - ACPI_EINJ_FLUSH_CACHELINE = 5, - ACPI_EINJ_INSTRUCTION_RESERVED = 6 /* 6 and greater are reserved */ -}; -typedef struct acpi_einj_error_type_with_addr +typedef struct acpi_iort_smmu { - UINT32 ErrorType; - UINT32 VendorStructOffset; + UINT64 BaseAddress; /* SMMU base address */ + UINT64 Span; /* Length of memory range */ + UINT32 Model; UINT32 Flags; - UINT32 ApicId; - UINT64 Address; - UINT64 Range; - UINT32 PcieId; - -} ACPI_EINJ_ERROR_TYPE_WITH_ADDR; - -typedef struct acpi_einj_vendor -{ - UINT32 Length; - UINT32 PcieId; - UINT16 VendorId; - UINT16 DeviceId; - UINT8 RevisionId; - UINT8 Reserved[3]; + UINT32 GlobalInterruptOffset; + UINT32 ContextInterruptCount; + UINT32 ContextInterruptOffset; + UINT32 PmuInterruptCount; + UINT32 PmuInterruptOffset; + UINT64 Interrupts[1]; /* Interrupt array */ -} ACPI_EINJ_VENDOR; +} ACPI_IORT_SMMU; +/* Values for Model field above */ -/* EINJ Trigger Error Action Table */ +#define ACPI_IORT_SMMU_V1 0x00000000 /* Generic SMMUv1 */ +#define ACPI_IORT_SMMU_V2 0x00000001 /* Generic SMMUv2 */ +#define ACPI_IORT_SMMU_CORELINK_MMU400 0x00000002 /* ARM Corelink MMU-400 */ +#define ACPI_IORT_SMMU_CORELINK_MMU500 0x00000003 /* ARM Corelink MMU-500 */ +#define ACPI_IORT_SMMU_CORELINK_MMU401 0x00000004 /* ARM Corelink MMU-401 */ +#define ACPI_IORT_SMMU_CAVIUM_THUNDERX 0x00000005 /* Cavium ThunderX SMMUv2 */ -typedef struct acpi_einj_trigger -{ - UINT32 HeaderSize; - UINT32 Revision; - UINT32 TableSize; - UINT32 EntryCount; +/* Masks for Flags field above */ -} ACPI_EINJ_TRIGGER; +#define ACPI_IORT_SMMU_DVM_SUPPORTED (1) +#define ACPI_IORT_SMMU_COHERENT_WALK (1<<1) -/* Command status return values */ +/* Global interrupt format */ -enum AcpiEinjCommandStatus +typedef struct acpi_iort_smmu_gsi { - ACPI_EINJ_SUCCESS = 0, - ACPI_EINJ_FAILURE = 1, - ACPI_EINJ_INVALID_ACCESS = 2, - ACPI_EINJ_STATUS_RESERVED = 3 /* 3 and greater are reserved */ -}; + UINT32 NSgIrpt; + UINT32 NSgIrptFlags; + UINT32 NSgCfgIrpt; + UINT32 NSgCfgIrptFlags; +} ACPI_IORT_SMMU_GSI; -/* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */ - -#define ACPI_EINJ_PROCESSOR_CORRECTABLE (1) -#define ACPI_EINJ_PROCESSOR_UNCORRECTABLE (1<<1) -#define ACPI_EINJ_PROCESSOR_FATAL (1<<2) -#define ACPI_EINJ_MEMORY_CORRECTABLE (1<<3) -#define ACPI_EINJ_MEMORY_UNCORRECTABLE (1<<4) -#define ACPI_EINJ_MEMORY_FATAL (1<<5) -#define ACPI_EINJ_PCIX_CORRECTABLE (1<<6) -#define ACPI_EINJ_PCIX_UNCORRECTABLE (1<<7) -#define ACPI_EINJ_PCIX_FATAL (1<<8) -#define ACPI_EINJ_PLATFORM_CORRECTABLE (1<<9) -#define ACPI_EINJ_PLATFORM_UNCORRECTABLE (1<<10) -#define ACPI_EINJ_PLATFORM_FATAL (1<<11) -#define ACPI_EINJ_VENDOR_DEFINED (1<<31) - - -/******************************************************************************* - * - * ERST - Error Record Serialization Table (ACPI 4.0) - * Version 1 - * - ******************************************************************************/ -typedef struct acpi_table_erst +typedef struct acpi_iort_smmu_v3 { - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 HeaderLength; + UINT64 BaseAddress; /* SMMUv3 base address */ + UINT32 Flags; UINT32 Reserved; - UINT32 Entries; - -} ACPI_TABLE_ERST; - + UINT64 VatosAddress; + UINT32 Model; + UINT32 EventGsiv; + UINT32 PriGsiv; + UINT32 GerrGsiv; + UINT32 SyncGsiv; + UINT8 Pxm; + UINT8 Reserved1; + UINT16 Reserved2; + UINT32 IdMappingIndex; -/* ERST Serialization Entries (actions) */ +} ACPI_IORT_SMMU_V3; -typedef struct acpi_erst_entry -{ - ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ +/* Values for Model field above */ -} ACPI_ERST_ENTRY; +#define ACPI_IORT_SMMU_V3_GENERIC 0x00000000 /* Generic SMMUv3 */ +#define ACPI_IORT_SMMU_V3_HISILICON_HI161X 0x00000001 /* HiSilicon Hi161x SMMUv3 */ +#define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX 0x00000002 /* Cavium CN99xx SMMUv3 */ /* Masks for Flags field above */ -#define ACPI_ERST_PRESERVE (1) - -/* Values for Action field above */ - -enum AcpiErstActions -{ - ACPI_ERST_BEGIN_WRITE = 0, - ACPI_ERST_BEGIN_READ = 1, - ACPI_ERST_BEGIN_CLEAR = 2, - ACPI_ERST_END = 3, - ACPI_ERST_SET_RECORD_OFFSET = 4, - ACPI_ERST_EXECUTE_OPERATION = 5, - ACPI_ERST_CHECK_BUSY_STATUS = 6, - ACPI_ERST_GET_COMMAND_STATUS = 7, - ACPI_ERST_GET_RECORD_ID = 8, - ACPI_ERST_SET_RECORD_ID = 9, - ACPI_ERST_GET_RECORD_COUNT = 10, - ACPI_ERST_BEGIN_DUMMY_WRIITE = 11, - ACPI_ERST_NOT_USED = 12, - ACPI_ERST_GET_ERROR_RANGE = 13, - ACPI_ERST_GET_ERROR_LENGTH = 14, - ACPI_ERST_GET_ERROR_ATTRIBUTES = 15, - ACPI_ERST_EXECUTE_TIMINGS = 16, - ACPI_ERST_ACTION_RESERVED = 17 /* 17 and greater are reserved */ -}; - -/* Values for Instruction field above */ - -enum AcpiErstInstructions -{ - ACPI_ERST_READ_REGISTER = 0, - ACPI_ERST_READ_REGISTER_VALUE = 1, - ACPI_ERST_WRITE_REGISTER = 2, - ACPI_ERST_WRITE_REGISTER_VALUE = 3, - ACPI_ERST_NOOP = 4, - ACPI_ERST_LOAD_VAR1 = 5, - ACPI_ERST_LOAD_VAR2 = 6, - ACPI_ERST_STORE_VAR1 = 7, - ACPI_ERST_ADD = 8, - ACPI_ERST_SUBTRACT = 9, - ACPI_ERST_ADD_VALUE = 10, - ACPI_ERST_SUBTRACT_VALUE = 11, - ACPI_ERST_STALL = 12, - ACPI_ERST_STALL_WHILE_TRUE = 13, - ACPI_ERST_SKIP_NEXT_IF_TRUE = 14, - ACPI_ERST_GOTO = 15, - ACPI_ERST_SET_SRC_ADDRESS_BASE = 16, - ACPI_ERST_SET_DST_ADDRESS_BASE = 17, - ACPI_ERST_MOVE_DATA = 18, - ACPI_ERST_INSTRUCTION_RESERVED = 19 /* 19 and greater are reserved */ -}; - -/* Command status return values */ - -enum AcpiErstCommandStatus -{ - ACPI_ERST_SUCESS = 0, - ACPI_ERST_NO_SPACE = 1, - ACPI_ERST_NOT_AVAILABLE = 2, - ACPI_ERST_FAILURE = 3, - ACPI_ERST_RECORD_EMPTY = 4, - ACPI_ERST_NOT_FOUND = 5, - ACPI_ERST_STATUS_RESERVED = 6 /* 6 and greater are reserved */ -}; - - -/* Error Record Serialization Information */ - -typedef struct acpi_erst_info -{ - UINT16 Signature; /* Should be "ER" */ - UINT8 Data[48]; - -} ACPI_ERST_INFO; +#define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE (1) +#define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE (1<<1) +#define ACPI_IORT_SMMU_V3_PXM_VALID (1<<3) /******************************************************************************* * - * HEST - Hardware Error Source Table (ACPI 4.0) + * IVRS - I/O Virtualization Reporting Structure * Version 1 * + * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification", + * Revision 1.26, February 2009. + * ******************************************************************************/ -typedef struct acpi_table_hest +typedef struct acpi_table_ivrs { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 ErrorSourceCount; - -} ACPI_TABLE_HEST; - + UINT32 Info; /* Common virtualization info */ + UINT64 Reserved; -/* HEST subtable header */ +} ACPI_TABLE_IVRS; -typedef struct acpi_hest_header -{ - UINT16 Type; - UINT16 SourceId; +/* Values for Info field above */ -} ACPI_HEST_HEADER; +#define ACPI_IVRS_PHYSICAL_SIZE 0x00007F00 /* 7 bits, physical address size */ +#define ACPI_IVRS_VIRTUAL_SIZE 0x003F8000 /* 7 bits, virtual address size */ +#define ACPI_IVRS_ATS_RESERVED 0x00400000 /* ATS address translation range reserved */ -/* Values for Type field above for subtables */ +/* IVRS subtable header */ -enum AcpiHestTypes +typedef struct acpi_ivrs_header { - ACPI_HEST_TYPE_IA32_CHECK = 0, - ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1, - ACPI_HEST_TYPE_IA32_NMI = 2, - ACPI_HEST_TYPE_NOT_USED3 = 3, - ACPI_HEST_TYPE_NOT_USED4 = 4, - ACPI_HEST_TYPE_NOT_USED5 = 5, - ACPI_HEST_TYPE_AER_ROOT_PORT = 6, - ACPI_HEST_TYPE_AER_ENDPOINT = 7, - ACPI_HEST_TYPE_AER_BRIDGE = 8, - ACPI_HEST_TYPE_GENERIC_ERROR = 9, - ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10, - ACPI_HEST_TYPE_IA32_DEFERRED_CHECK = 11, - ACPI_HEST_TYPE_RESERVED = 12 /* 12 and greater are reserved */ -}; + UINT8 Type; /* Subtable type */ + UINT8 Flags; + UINT16 Length; /* Subtable length */ + UINT16 DeviceId; /* ID of IOMMU */ +} ACPI_IVRS_HEADER; -/* - * HEST substructures contained in subtables - */ +/* Values for subtable Type above */ -/* - * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and - * ACPI_HEST_IA_CORRECTED structures. - */ -typedef struct acpi_hest_ia_error_bank +enum AcpiIvrsType { - UINT8 BankNumber; - UINT8 ClearStatusOnInit; - UINT8 StatusFormat; - UINT8 Reserved; - UINT32 ControlRegister; - UINT64 ControlData; - UINT32 StatusRegister; - UINT32 AddressRegister; - UINT32 MiscRegister; - -} ACPI_HEST_IA_ERROR_BANK; - + ACPI_IVRS_TYPE_HARDWARE = 0x10, + ACPI_IVRS_TYPE_MEMORY1 = 0x20, + ACPI_IVRS_TYPE_MEMORY2 = 0x21, + ACPI_IVRS_TYPE_MEMORY3 = 0x22 +}; -/* Common HEST sub-structure for PCI/AER structures below (6,7,8) */ +/* Masks for Flags field above for IVHD subtable */ -typedef struct acpi_hest_aer_common -{ - UINT16 Reserved1; - UINT8 Flags; - UINT8 Enabled; - UINT32 RecordsToPreallocate; - UINT32 MaxSectionsPerRecord; - UINT32 Bus; /* Bus and Segment numbers */ - UINT16 Device; - UINT16 Function; - UINT16 DeviceControl; - UINT16 Reserved2; - UINT32 UncorrectableMask; - UINT32 UncorrectableSeverity; - UINT32 CorrectableMask; - UINT32 AdvancedCapabilities; +#define ACPI_IVHD_TT_ENABLE (1) +#define ACPI_IVHD_PASS_PW (1<<1) +#define ACPI_IVHD_RES_PASS_PW (1<<2) +#define ACPI_IVHD_ISOC (1<<3) +#define ACPI_IVHD_IOTLB (1<<4) -} ACPI_HEST_AER_COMMON; +/* Masks for Flags field above for IVMD subtable */ -/* Masks for HEST Flags fields */ +#define ACPI_IVMD_UNITY (1) +#define ACPI_IVMD_READ (1<<1) +#define ACPI_IVMD_WRITE (1<<2) +#define ACPI_IVMD_EXCLUSION_RANGE (1<<3) -#define ACPI_HEST_FIRMWARE_FIRST (1) -#define ACPI_HEST_GLOBAL (1<<1) -#define ACPI_HEST_GHES_ASSIST (1<<2) /* - * Macros to access the bus/segment numbers in Bus field above: - * Bus number is encoded in bits 7:0 - * Segment number is encoded in bits 23:8 + * IVRS subtables, correspond to Type in ACPI_IVRS_HEADER */ -#define ACPI_HEST_BUS(Bus) ((Bus) & 0xFF) -#define ACPI_HEST_SEGMENT(Bus) (((Bus) >> 8) & 0xFFFF) - -/* Hardware Error Notification */ +/* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */ -typedef struct acpi_hest_notify +typedef struct acpi_ivrs_hardware { - UINT8 Type; - UINT8 Length; - UINT16 ConfigWriteEnable; - UINT32 PollInterval; - UINT32 Vector; - UINT32 PollingThresholdValue; - UINT32 PollingThresholdWindow; - UINT32 ErrorThresholdValue; - UINT32 ErrorThresholdWindow; - -} ACPI_HEST_NOTIFY; - -/* Values for Notify Type field above */ - -enum AcpiHestNotifyTypes -{ - ACPI_HEST_NOTIFY_POLLED = 0, - ACPI_HEST_NOTIFY_EXTERNAL = 1, - ACPI_HEST_NOTIFY_LOCAL = 2, - ACPI_HEST_NOTIFY_SCI = 3, - ACPI_HEST_NOTIFY_NMI = 4, - ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */ - ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */ - ACPI_HEST_NOTIFY_GPIO = 7, /* ACPI 6.0 */ - ACPI_HEST_NOTIFY_SEA = 8, /* ACPI 6.1 */ - ACPI_HEST_NOTIFY_SEI = 9, /* ACPI 6.1 */ - ACPI_HEST_NOTIFY_GSIV = 10, /* ACPI 6.1 */ - ACPI_HEST_NOTIFY_SOFTWARE_DELEGATED = 11, /* ACPI 6.2 */ - ACPI_HEST_NOTIFY_RESERVED = 12 /* 12 and greater are reserved */ -}; + ACPI_IVRS_HEADER Header; + UINT16 CapabilityOffset; /* Offset for IOMMU control fields */ + UINT64 BaseAddress; /* IOMMU control registers */ + UINT16 PciSegmentGroup; + UINT16 Info; /* MSI number and unit ID */ + UINT32 Reserved; -/* Values for ConfigWriteEnable bitfield above */ +} ACPI_IVRS_HARDWARE; -#define ACPI_HEST_TYPE (1) -#define ACPI_HEST_POLL_INTERVAL (1<<1) -#define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2) -#define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3) -#define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4) -#define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5) +/* Masks for Info field above */ + +#define ACPI_IVHD_MSI_NUMBER_MASK 0x001F /* 5 bits, MSI message number */ +#define ACPI_IVHD_UNIT_ID_MASK 0x1F00 /* 5 bits, UnitID */ /* - * HEST subtables + * Device Entries for IVHD subtable, appear after ACPI_IVRS_HARDWARE structure. + * Upper two bits of the Type field are the (encoded) length of the structure. + * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries + * are reserved for future use but not defined. */ - -/* 0: IA32 Machine Check Exception */ - -typedef struct acpi_hest_ia_machine_check -{ - ACPI_HEST_HEADER Header; - UINT16 Reserved1; - UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ - UINT8 Enabled; - UINT32 RecordsToPreallocate; - UINT32 MaxSectionsPerRecord; - UINT64 GlobalCapabilityData; - UINT64 GlobalControlData; - UINT8 NumHardwareBanks; - UINT8 Reserved3[7]; - -} ACPI_HEST_IA_MACHINE_CHECK; - - -/* 1: IA32 Corrected Machine Check */ - -typedef struct acpi_hest_ia_corrected -{ - ACPI_HEST_HEADER Header; - UINT16 Reserved1; - UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ - UINT8 Enabled; - UINT32 RecordsToPreallocate; - UINT32 MaxSectionsPerRecord; - ACPI_HEST_NOTIFY Notify; - UINT8 NumHardwareBanks; - UINT8 Reserved2[3]; - -} ACPI_HEST_IA_CORRECTED; - - -/* 2: IA32 Non-Maskable Interrupt */ - -typedef struct acpi_hest_ia_nmi +typedef struct acpi_ivrs_de_header { - ACPI_HEST_HEADER Header; - UINT32 Reserved; - UINT32 RecordsToPreallocate; - UINT32 MaxSectionsPerRecord; - UINT32 MaxRawDataLength; - -} ACPI_HEST_IA_NMI; - - -/* 3,4,5: Not used */ - -/* 6: PCI Express Root Port AER */ + UINT8 Type; + UINT16 Id; + UINT8 DataSetting; -typedef struct acpi_hest_aer_root -{ - ACPI_HEST_HEADER Header; - ACPI_HEST_AER_COMMON Aer; - UINT32 RootErrorCommand; +} ACPI_IVRS_DE_HEADER; -} ACPI_HEST_AER_ROOT; +/* Length of device entry is in the top two bits of Type field above */ +#define ACPI_IVHD_ENTRY_LENGTH 0xC0 -/* 7: PCI Express AER (AER Endpoint) */ +/* Values for device entry Type field above */ -typedef struct acpi_hest_aer +enum AcpiIvrsDeviceEntryType { - ACPI_HEST_HEADER Header; - ACPI_HEST_AER_COMMON Aer; + /* 4-byte device entries, all use ACPI_IVRS_DEVICE4 */ -} ACPI_HEST_AER; + ACPI_IVRS_TYPE_PAD4 = 0, + ACPI_IVRS_TYPE_ALL = 1, + ACPI_IVRS_TYPE_SELECT = 2, + ACPI_IVRS_TYPE_START = 3, + ACPI_IVRS_TYPE_END = 4, + /* 8-byte device entries */ -/* 8: PCI Express/PCI-X Bridge AER */ + ACPI_IVRS_TYPE_PAD8 = 64, + ACPI_IVRS_TYPE_NOT_USED = 65, + ACPI_IVRS_TYPE_ALIAS_SELECT = 66, /* Uses ACPI_IVRS_DEVICE8A */ + ACPI_IVRS_TYPE_ALIAS_START = 67, /* Uses ACPI_IVRS_DEVICE8A */ + ACPI_IVRS_TYPE_EXT_SELECT = 70, /* Uses ACPI_IVRS_DEVICE8B */ + ACPI_IVRS_TYPE_EXT_START = 71, /* Uses ACPI_IVRS_DEVICE8B */ + ACPI_IVRS_TYPE_SPECIAL = 72 /* Uses ACPI_IVRS_DEVICE8C */ +}; -typedef struct acpi_hest_aer_bridge -{ - ACPI_HEST_HEADER Header; - ACPI_HEST_AER_COMMON Aer; - UINT32 UncorrectableMask2; - UINT32 UncorrectableSeverity2; - UINT32 AdvancedCapabilities2; +/* Values for Data field above */ -} ACPI_HEST_AER_BRIDGE; +#define ACPI_IVHD_INIT_PASS (1) +#define ACPI_IVHD_EINT_PASS (1<<1) +#define ACPI_IVHD_NMI_PASS (1<<2) +#define ACPI_IVHD_SYSTEM_MGMT (3<<4) +#define ACPI_IVHD_LINT0_PASS (1<<6) +#define ACPI_IVHD_LINT1_PASS (1<<7) -/* 9: Generic Hardware Error Source */ +/* Types 0-4: 4-byte device entry */ -typedef struct acpi_hest_generic +typedef struct acpi_ivrs_device4 { - ACPI_HEST_HEADER Header; - UINT16 RelatedSourceId; - UINT8 Reserved; - UINT8 Enabled; - UINT32 RecordsToPreallocate; - UINT32 MaxSectionsPerRecord; - UINT32 MaxRawDataLength; - ACPI_GENERIC_ADDRESS ErrorStatusAddress; - ACPI_HEST_NOTIFY Notify; - UINT32 ErrorBlockLength; + ACPI_IVRS_DE_HEADER Header; -} ACPI_HEST_GENERIC; +} ACPI_IVRS_DEVICE4; +/* Types 66-67: 8-byte device entry */ -/* 10: Generic Hardware Error Source, version 2 */ - -typedef struct acpi_hest_generic_v2 +typedef struct acpi_ivrs_device8a { - ACPI_HEST_HEADER Header; - UINT16 RelatedSourceId; - UINT8 Reserved; - UINT8 Enabled; - UINT32 RecordsToPreallocate; - UINT32 MaxSectionsPerRecord; - UINT32 MaxRawDataLength; - ACPI_GENERIC_ADDRESS ErrorStatusAddress; - ACPI_HEST_NOTIFY Notify; - UINT32 ErrorBlockLength; - ACPI_GENERIC_ADDRESS ReadAckRegister; - UINT64 ReadAckPreserve; - UINT64 ReadAckWrite; + ACPI_IVRS_DE_HEADER Header; + UINT8 Reserved1; + UINT16 UsedId; + UINT8 Reserved2; -} ACPI_HEST_GENERIC_V2; +} ACPI_IVRS_DEVICE8A; +/* Types 70-71: 8-byte device entry */ -/* Generic Error Status block */ - -typedef struct acpi_hest_generic_status +typedef struct acpi_ivrs_device8b { - UINT32 BlockStatus; - UINT32 RawDataOffset; - UINT32 RawDataLength; - UINT32 DataLength; - UINT32 ErrorSeverity; - -} ACPI_HEST_GENERIC_STATUS; - -/* Values for BlockStatus flags above */ - -#define ACPI_HEST_UNCORRECTABLE (1) -#define ACPI_HEST_CORRECTABLE (1<<1) -#define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2) -#define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3) -#define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ + ACPI_IVRS_DE_HEADER Header; + UINT32 ExtendedData; +} ACPI_IVRS_DEVICE8B; -/* Generic Error Data entry */ +/* Values for ExtendedData above */ -typedef struct acpi_hest_generic_data -{ - UINT8 SectionType[16]; - UINT32 ErrorSeverity; - UINT16 Revision; - UINT8 ValidationBits; - UINT8 Flags; - UINT32 ErrorDataLength; - UINT8 FruId[16]; - UINT8 FruText[20]; +#define ACPI_IVHD_ATS_DISABLED (1<<31) -} ACPI_HEST_GENERIC_DATA; +/* Type 72: 8-byte device entry */ -/* Extension for revision 0x0300 */ - -typedef struct acpi_hest_generic_data_v300 +typedef struct acpi_ivrs_device8c { - UINT8 SectionType[16]; - UINT32 ErrorSeverity; - UINT16 Revision; - UINT8 ValidationBits; - UINT8 Flags; - UINT32 ErrorDataLength; - UINT8 FruId[16]; - UINT8 FruText[20]; - UINT64 TimeStamp; + ACPI_IVRS_DE_HEADER Header; + UINT8 Handle; + UINT16 UsedId; + UINT8 Variety; -} ACPI_HEST_GENERIC_DATA_V300; +} ACPI_IVRS_DEVICE8C; -/* Values for ErrorSeverity above */ +/* Values for Variety field above */ -#define ACPI_HEST_GEN_ERROR_RECOVERABLE 0 -#define ACPI_HEST_GEN_ERROR_FATAL 1 -#define ACPI_HEST_GEN_ERROR_CORRECTED 2 -#define ACPI_HEST_GEN_ERROR_NONE 3 +#define ACPI_IVHD_IOAPIC 1 +#define ACPI_IVHD_HPET 2 -/* Flags for ValidationBits above */ -#define ACPI_HEST_GEN_VALID_FRU_ID (1) -#define ACPI_HEST_GEN_VALID_FRU_STRING (1<<1) -#define ACPI_HEST_GEN_VALID_TIMESTAMP (1<<2) +/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */ - -/* 11: IA32 Deferred Machine Check Exception (ACPI 6.2) */ - -typedef struct acpi_hest_ia_deferred_check +typedef struct acpi_ivrs_memory { - ACPI_HEST_HEADER Header; - UINT16 Reserved1; - UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ - UINT8 Enabled; - UINT32 RecordsToPreallocate; - UINT32 MaxSectionsPerRecord; - ACPI_HEST_NOTIFY Notify; - UINT8 NumHardwareBanks; - UINT8 Reserved2[3]; + ACPI_IVRS_HEADER Header; + UINT16 AuxData; + UINT64 Reserved; + UINT64 StartAddress; + UINT64 MemoryLength; -} ACPI_HEST_IA_DEFERRED_CHECK; +} ACPI_IVRS_MEMORY; /******************************************************************************* * - * HMAT - Heterogeneous Memory Attributes Table (ACPI 6.2) - * Version 1 + * LPIT - Low Power Idle Table + * + * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014. * ******************************************************************************/ -typedef struct acpi_table_hmat +typedef struct acpi_table_lpit { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 Reserved; - -} ACPI_TABLE_HMAT; +} ACPI_TABLE_LPIT; -/* Values for HMAT structure types */ -enum AcpiHmatType -{ - ACPI_HMAT_TYPE_ADDRESS_RANGE = 0, /* Memory subystem address range */ - ACPI_HMAT_TYPE_LOCALITY = 1, /* System locality latency and bandwidth information */ - ACPI_HMAT_TYPE_CACHE = 2, /* Memory side cache information */ - ACPI_HMAT_TYPE_RESERVED = 3 /* 3 and greater are reserved */ -}; +/* LPIT subtable header */ -typedef struct acpi_hmat_structure +typedef struct acpi_lpit_header { - UINT16 Type; + UINT32 Type; /* Subtable type */ + UINT32 Length; /* Subtable length */ + UINT16 UniqueId; UINT16 Reserved; - UINT32 Length; - -} ACPI_HMAT_STRUCTURE; - - -/* - * HMAT Structures, correspond to Type in ACPI_HMAT_STRUCTURE - */ - -/* 0: Memory subystem address range */ - -typedef struct acpi_hmat_address_range -{ - ACPI_HMAT_STRUCTURE Header; - UINT16 Flags; - UINT16 Reserved1; - UINT32 ProcessorPD; /* Processor proximity domain */ - UINT32 MemoryPD; /* Memory proximity domain */ - UINT32 Reserved2; - UINT64 PhysicalAddressBase; /* Physical address range base */ - UINT64 PhysicalAddressLength; /* Physical address range length */ - -} ACPI_HMAT_ADDRESS_RANGE; - -/* Masks for Flags field above */ - -#define ACPI_HMAT_PROCESSOR_PD_VALID (1) /* 1: ProcessorPD field is valid */ -#define ACPI_HMAT_MEMORY_PD_VALID (1<<1) /* 1: MemoryPD field is valid */ -#define ACPI_HMAT_RESERVATION_HINT (1<<2) /* 1: Reservation hint */ + UINT32 Flags; +} ACPI_LPIT_HEADER; -/* 1: System locality latency and bandwidth information */ +/* Values for subtable Type above */ -typedef struct acpi_hmat_locality +enum AcpiLpitType { - ACPI_HMAT_STRUCTURE Header; - UINT8 Flags; - UINT8 DataType; - UINT16 Reserved1; - UINT32 NumberOfInitiatorPDs; - UINT32 NumberOfTargetPDs; - UINT32 Reserved2; - UINT64 EntryBaseUnit; - -} ACPI_HMAT_LOCALITY; - -/* Masks for Flags field above */ - -#define ACPI_HMAT_MEMORY_HIERARCHY (0x0F) - -/* Values for Memory Hierarchy flag */ - -#define ACPI_HMAT_MEMORY 0 -#define ACPI_HMAT_LAST_LEVEL_CACHE 1 -#define ACPI_HMAT_1ST_LEVEL_CACHE 2 -#define ACPI_HMAT_2ND_LEVEL_CACHE 3 -#define ACPI_HMAT_3RD_LEVEL_CACHE 4 + ACPI_LPIT_TYPE_NATIVE_CSTATE = 0x00, + ACPI_LPIT_TYPE_RESERVED = 0x01 /* 1 and above are reserved */ +}; -/* Values for DataType field above */ +/* Masks for Flags field above */ -#define ACPI_HMAT_ACCESS_LATENCY 0 -#define ACPI_HMAT_READ_LATENCY 1 -#define ACPI_HMAT_WRITE_LATENCY 2 -#define ACPI_HMAT_ACCESS_BANDWIDTH 3 -#define ACPI_HMAT_READ_BANDWIDTH 4 -#define ACPI_HMAT_WRITE_BANDWIDTH 5 +#define ACPI_LPIT_STATE_DISABLED (1) +#define ACPI_LPIT_NO_COUNTER (1<<1) +/* + * LPIT subtables, correspond to Type in ACPI_LPIT_HEADER + */ -/* 2: Memory side cache information */ +/* 0x00: Native C-state instruction based LPI structure */ -typedef struct acpi_hmat_cache +typedef struct acpi_lpit_native { - ACPI_HMAT_STRUCTURE Header; - UINT32 MemoryPD; - UINT32 Reserved1; - UINT64 CacheSize; - UINT32 CacheAttributes; - UINT16 Reserved2; - UINT16 NumberOfSMBIOSHandles; - -} ACPI_HMAT_CACHE; + ACPI_LPIT_HEADER Header; + ACPI_GENERIC_ADDRESS EntryTrigger; + UINT32 Residency; + UINT32 Latency; + ACPI_GENERIC_ADDRESS ResidencyCounter; + UINT64 CounterFrequency; -/* Masks for CacheAttributes field above */ - -#define ACPI_HMAT_TOTAL_CACHE_LEVEL (0x0000000F) -#define ACPI_HMAT_CACHE_LEVEL (0x000000F0) -#define ACPI_HMAT_CACHE_ASSOCIATIVITY (0x00000F00) -#define ACPI_HMAT_WRITE_POLICY (0x0000F000) -#define ACPI_HMAT_CACHE_LINE_SIZE (0xFFFF0000) - -/* Values for cache associativity flag */ - -#define ACPI_HMAT_CA_NONE (0) -#define ACPI_HMAT_CA_DIRECT_MAPPED (1) -#define ACPI_HMAT_CA_COMPLEX_CACHE_INDEXING (2) - -/* Values for write policy flag */ - -#define ACPI_HMAT_CP_NONE (0) -#define ACPI_HMAT_CP_WB (1) -#define ACPI_HMAT_CP_WT (2) +} ACPI_LPIT_NATIVE; /******************************************************************************* @@ -1383,56 +988,279 @@ typedef struct acpi_madt_generic_translator /******************************************************************************* * - * MSCT - Maximum System Characteristics Table (ACPI 4.0) + * MCFG - PCI Memory Mapped Configuration table and subtable * Version 1 * + * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005 + * ******************************************************************************/ -typedef struct acpi_table_msct +typedef struct acpi_table_mcfg { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 ProximityOffset; /* Location of proximity info struct(s) */ - UINT32 MaxProximityDomains;/* Max number of proximity domains */ - UINT32 MaxClockDomains; /* Max number of clock domains */ - UINT64 MaxAddress; /* Max physical address in system */ + UINT8 Reserved[8]; -} ACPI_TABLE_MSCT; +} ACPI_TABLE_MCFG; -/* Subtable - Maximum Proximity Domain Information. Version 1 */ +/* Subtable */ -typedef struct acpi_msct_proximity +typedef struct acpi_mcfg_allocation { - UINT8 Revision; - UINT8 Length; - UINT32 RangeStart; /* Start of domain range */ - UINT32 RangeEnd; /* End of domain range */ - UINT32 ProcessorCapacity; - UINT64 MemoryCapacity; /* In bytes */ + UINT64 Address; /* Base address, processor-relative */ + UINT16 PciSegment; /* PCI segment group number */ + UINT8 StartBusNumber; /* Starting PCI Bus number */ + UINT8 EndBusNumber; /* Final PCI Bus number */ + UINT32 Reserved; -} ACPI_MSCT_PROXIMITY; +} ACPI_MCFG_ALLOCATION; /******************************************************************************* * - * NFIT - NVDIMM Interface Table (ACPI 6.0+) + * MCHI - Management Controller Host Interface Table * Version 1 * + * Conforms to "Management Component Transport Protocol (MCTP) Host + * Interface Specification", Revision 1.0.0a, October 13, 2009 + * ******************************************************************************/ -typedef struct acpi_table_nfit +typedef struct acpi_table_mchi { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 Reserved; /* Reserved, must be zero */ + UINT8 InterfaceType; + UINT8 Protocol; + UINT64 ProtocolData; + UINT8 InterruptType; + UINT8 Gpe; + UINT8 PciDeviceFlag; + UINT32 GlobalInterrupt; + ACPI_GENERIC_ADDRESS ControlRegister; + UINT8 PciSegment; + UINT8 PciBus; + UINT8 PciDevice; + UINT8 PciFunction; + +} ACPI_TABLE_MCHI; -} ACPI_TABLE_NFIT; -/* Subtable header for NFIT */ +/******************************************************************************* + * + * MPST - Memory Power State Table (ACPI 5.0) + * Version 1 + * + ******************************************************************************/ -typedef struct acpi_nfit_header -{ - UINT16 Type; - UINT16 Length; +#define ACPI_MPST_CHANNEL_INFO \ + UINT8 ChannelId; \ + UINT8 Reserved1[3]; \ + UINT16 PowerNodeCount; \ + UINT16 Reserved2; + +/* Main table */ + +typedef struct acpi_table_mpst +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ + +} ACPI_TABLE_MPST; + + +/* Memory Platform Communication Channel Info */ + +typedef struct acpi_mpst_channel +{ + ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ + +} ACPI_MPST_CHANNEL; + + +/* Memory Power Node Structure */ + +typedef struct acpi_mpst_power_node +{ + UINT8 Flags; + UINT8 Reserved1; + UINT16 NodeId; + UINT32 Length; + UINT64 RangeAddress; + UINT64 RangeLength; + UINT32 NumPowerStates; + UINT32 NumPhysicalComponents; + +} ACPI_MPST_POWER_NODE; + +/* Values for Flags field above */ + +#define ACPI_MPST_ENABLED 1 +#define ACPI_MPST_POWER_MANAGED 2 +#define ACPI_MPST_HOT_PLUG_CAPABLE 4 + + +/* Memory Power State Structure (follows POWER_NODE above) */ + +typedef struct acpi_mpst_power_state +{ + UINT8 PowerState; + UINT8 InfoIndex; + +} ACPI_MPST_POWER_STATE; + + +/* Physical Component ID Structure (follows POWER_STATE above) */ + +typedef struct acpi_mpst_component +{ + UINT16 ComponentId; + +} ACPI_MPST_COMPONENT; + + +/* Memory Power State Characteristics Structure (follows all POWER_NODEs) */ + +typedef struct acpi_mpst_data_hdr +{ + UINT16 CharacteristicsCount; + UINT16 Reserved; + +} ACPI_MPST_DATA_HDR; + +typedef struct acpi_mpst_power_data +{ + UINT8 StructureId; + UINT8 Flags; + UINT16 Reserved1; + UINT32 AveragePower; + UINT32 PowerSaving; + UINT64 ExitLatency; + UINT64 Reserved2; + +} ACPI_MPST_POWER_DATA; + +/* Values for Flags field above */ + +#define ACPI_MPST_PRESERVE 1 +#define ACPI_MPST_AUTOENTRY 2 +#define ACPI_MPST_AUTOEXIT 4 + + +/* Shared Memory Region (not part of an ACPI table) */ + +typedef struct acpi_mpst_shared +{ + UINT32 Signature; + UINT16 PccCommand; + UINT16 PccStatus; + UINT32 CommandRegister; + UINT32 StatusRegister; + UINT32 PowerStateId; + UINT32 PowerNodeId; + UINT64 EnergyConsumed; + UINT64 AveragePower; + +} ACPI_MPST_SHARED; + + +/******************************************************************************* + * + * MSCT - Maximum System Characteristics Table (ACPI 4.0) + * Version 1 + * + ******************************************************************************/ + +typedef struct acpi_table_msct +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 ProximityOffset; /* Location of proximity info struct(s) */ + UINT32 MaxProximityDomains;/* Max number of proximity domains */ + UINT32 MaxClockDomains; /* Max number of clock domains */ + UINT64 MaxAddress; /* Max physical address in system */ + +} ACPI_TABLE_MSCT; + + +/* Subtable - Maximum Proximity Domain Information. Version 1 */ + +typedef struct acpi_msct_proximity +{ + UINT8 Revision; + UINT8 Length; + UINT32 RangeStart; /* Start of domain range */ + UINT32 RangeEnd; /* End of domain range */ + UINT32 ProcessorCapacity; + UINT64 MemoryCapacity; /* In bytes */ + +} ACPI_MSCT_PROXIMITY; + + +/******************************************************************************* + * + * MSDM - Microsoft Data Management table + * + * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", + * November 29, 2011. Copyright 2011 Microsoft + * + ******************************************************************************/ + +/* Basic MSDM table is only the common ACPI header */ + +typedef struct acpi_table_msdm +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + +} ACPI_TABLE_MSDM; + + +/******************************************************************************* + * + * MTMR - MID Timer Table + * Version 1 + * + * Conforms to "Simple Firmware Interface Specification", + * Draft 0.8.2, Oct 19, 2010 + * NOTE: The ACPI MTMR is equivalent to the SFI MTMR table. + * + ******************************************************************************/ + +typedef struct acpi_table_mtmr +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + +} ACPI_TABLE_MTMR; + +/* MTMR entry */ + +typedef struct acpi_mtmr_entry +{ + ACPI_GENERIC_ADDRESS PhysicalAddress; + UINT32 Frequency; + UINT32 Irq; + +} ACPI_MTMR_ENTRY; + + +/******************************************************************************* + * + * NFIT - NVDIMM Interface Table (ACPI 6.0+) + * Version 1 + * + ******************************************************************************/ + +typedef struct acpi_table_nfit +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 Reserved; /* Reserved, must be zero */ + +} ACPI_TABLE_NFIT; + +/* Subtable header for NFIT */ + +typedef struct acpi_nfit_header +{ + UINT16 Type; + UINT16 Length; } ACPI_NFIT_HEADER; @@ -1448,7 +1276,8 @@ enum AcpiNfitType ACPI_NFIT_TYPE_CONTROL_REGION = 4, ACPI_NFIT_TYPE_DATA_REGION = 5, ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6, - ACPI_NFIT_TYPE_RESERVED = 7 /* 7 and greater are reserved */ + ACPI_NFIT_TYPE_CAPABILITIES = 7, + ACPI_NFIT_TYPE_RESERVED = 8 /* 8 and greater are reserved */ }; /* @@ -1462,7 +1291,7 @@ typedef struct acpi_nfit_system_address ACPI_NFIT_HEADER Header; UINT16 RangeIndex; UINT16 Flags; - UINT32 Reserved; /* Reseved, must be zero */ + UINT32 Reserved; /* Reserved, must be zero */ UINT32 ProximityDomain; UINT8 RangeGuid[16]; UINT64 Address; @@ -1601,9 +1430,269 @@ typedef struct acpi_nfit_flush_address } ACPI_NFIT_FLUSH_ADDRESS; +/* 7: Platform Capabilities Structure */ + +typedef struct acpi_nfit_capabilities +{ + ACPI_NFIT_HEADER Header; + UINT8 HighestCapability; + UINT8 Reserved[3]; /* Reserved, must be zero */ + UINT32 Capabilities; + UINT32 Reserved2; + +} ACPI_NFIT_CAPABILITIES; + +/* Capabilities Flags */ + +#define ACPI_NFIT_CAPABILITY_CACHE_FLUSH (1) /* 00: Cache Flush to NVDIMM capable */ +#define ACPI_NFIT_CAPABILITY_MEM_FLUSH (1<<1) /* 01: Memory Flush to NVDIMM capable */ +#define ACPI_NFIT_CAPABILITY_MEM_MIRRORING (1<<2) /* 02: Memory Mirroring capable */ + + +/* + * NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM + */ +typedef struct nfit_device_handle +{ + UINT32 Handle; + +} NFIT_DEVICE_HANDLE; + +/* Device handle construction and extraction macros */ + +#define ACPI_NFIT_DIMM_NUMBER_MASK 0x0000000F +#define ACPI_NFIT_CHANNEL_NUMBER_MASK 0x000000F0 +#define ACPI_NFIT_MEMORY_ID_MASK 0x00000F00 +#define ACPI_NFIT_SOCKET_ID_MASK 0x0000F000 +#define ACPI_NFIT_NODE_ID_MASK 0x0FFF0000 + +#define ACPI_NFIT_DIMM_NUMBER_OFFSET 0 +#define ACPI_NFIT_CHANNEL_NUMBER_OFFSET 4 +#define ACPI_NFIT_MEMORY_ID_OFFSET 8 +#define ACPI_NFIT_SOCKET_ID_OFFSET 12 +#define ACPI_NFIT_NODE_ID_OFFSET 16 + +/* Macro to construct a NFIT/NVDIMM device handle */ + +#define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \ + ((dimm) | \ + ((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET) | \ + ((memory) << ACPI_NFIT_MEMORY_ID_OFFSET) | \ + ((socket) << ACPI_NFIT_SOCKET_ID_OFFSET) | \ + ((node) << ACPI_NFIT_NODE_ID_OFFSET)) + +/* Macros to extract individual fields from a NFIT/NVDIMM device handle */ + +#define ACPI_NFIT_GET_DIMM_NUMBER(handle) \ + ((handle) & ACPI_NFIT_DIMM_NUMBER_MASK) + +#define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \ + (((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET) + +#define ACPI_NFIT_GET_MEMORY_ID(handle) \ + (((handle) & ACPI_NFIT_MEMORY_ID_MASK) >> ACPI_NFIT_MEMORY_ID_OFFSET) + +#define ACPI_NFIT_GET_SOCKET_ID(handle) \ + (((handle) & ACPI_NFIT_SOCKET_ID_MASK) >> ACPI_NFIT_SOCKET_ID_OFFSET) + +#define ACPI_NFIT_GET_NODE_ID(handle) \ + (((handle) & ACPI_NFIT_NODE_ID_MASK) >> ACPI_NFIT_NODE_ID_OFFSET) + + /******************************************************************************* * - * PDTT - Processor Debug Trigger Table (ACPI 6.2) + * PCCT - Platform Communications Channel Table (ACPI 5.0) + * Version 2 (ACPI 6.2) + * + ******************************************************************************/ + +typedef struct acpi_table_pcct +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 Flags; + UINT64 Reserved; + +} ACPI_TABLE_PCCT; + +/* Values for Flags field above */ + +#define ACPI_PCCT_DOORBELL 1 + +/* Values for subtable type in ACPI_SUBTABLE_HEADER */ + +enum AcpiPcctType +{ + ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0, + ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1, + ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2, /* ACPI 6.1 */ + ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3, /* ACPI 6.2 */ + ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4, /* ACPI 6.2 */ + ACPI_PCCT_TYPE_RESERVED = 5 /* 5 and greater are reserved */ +}; + +/* + * PCCT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER + */ + +/* 0: Generic Communications Subspace */ + +typedef struct acpi_pcct_subspace +{ + ACPI_SUBTABLE_HEADER Header; + UINT8 Reserved[6]; + UINT64 BaseAddress; + UINT64 Length; + ACPI_GENERIC_ADDRESS DoorbellRegister; + UINT64 PreserveMask; + UINT64 WriteMask; + UINT32 Latency; + UINT32 MaxAccessRate; + UINT16 MinTurnaroundTime; + +} ACPI_PCCT_SUBSPACE; + + +/* 1: HW-reduced Communications Subspace (ACPI 5.1) */ + +typedef struct acpi_pcct_hw_reduced +{ + ACPI_SUBTABLE_HEADER Header; + UINT32 PlatformInterrupt; + UINT8 Flags; + UINT8 Reserved; + UINT64 BaseAddress; + UINT64 Length; + ACPI_GENERIC_ADDRESS DoorbellRegister; + UINT64 PreserveMask; + UINT64 WriteMask; + UINT32 Latency; + UINT32 MaxAccessRate; + UINT16 MinTurnaroundTime; + +} ACPI_PCCT_HW_REDUCED; + + +/* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */ + +typedef struct acpi_pcct_hw_reduced_type2 +{ + ACPI_SUBTABLE_HEADER Header; + UINT32 PlatformInterrupt; + UINT8 Flags; + UINT8 Reserved; + UINT64 BaseAddress; + UINT64 Length; + ACPI_GENERIC_ADDRESS DoorbellRegister; + UINT64 PreserveMask; + UINT64 WriteMask; + UINT32 Latency; + UINT32 MaxAccessRate; + UINT16 MinTurnaroundTime; + ACPI_GENERIC_ADDRESS PlatformAckRegister; + UINT64 AckPreserveMask; + UINT64 AckWriteMask; + +} ACPI_PCCT_HW_REDUCED_TYPE2; + + +/* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */ + +typedef struct acpi_pcct_ext_pcc_master +{ + ACPI_SUBTABLE_HEADER Header; + UINT32 PlatformInterrupt; + UINT8 Flags; + UINT8 Reserved1; + UINT64 BaseAddress; + UINT32 Length; + ACPI_GENERIC_ADDRESS DoorbellRegister; + UINT64 PreserveMask; + UINT64 WriteMask; + UINT32 Latency; + UINT32 MaxAccessRate; + UINT32 MinTurnaroundTime; + ACPI_GENERIC_ADDRESS PlatformAckRegister; + UINT64 AckPreserveMask; + UINT64 AckSetMask; + UINT64 Reserved2; + ACPI_GENERIC_ADDRESS CmdCompleteRegister; + UINT64 CmdCompleteMask; + ACPI_GENERIC_ADDRESS CmdUpdateRegister; + UINT64 CmdUpdatePreserveMask; + UINT64 CmdUpdateSetMask; + ACPI_GENERIC_ADDRESS ErrorStatusRegister; + UINT64 ErrorStatusMask; + +} ACPI_PCCT_EXT_PCC_MASTER; + + +/* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */ + +typedef struct acpi_pcct_ext_pcc_slave +{ + ACPI_SUBTABLE_HEADER Header; + UINT32 PlatformInterrupt; + UINT8 Flags; + UINT8 Reserved1; + UINT64 BaseAddress; + UINT32 Length; + ACPI_GENERIC_ADDRESS DoorbellRegister; + UINT64 PreserveMask; + UINT64 WriteMask; + UINT32 Latency; + UINT32 MaxAccessRate; + UINT32 MinTurnaroundTime; + ACPI_GENERIC_ADDRESS PlatformAckRegister; + UINT64 AckPreserveMask; + UINT64 AckSetMask; + UINT64 Reserved2; + ACPI_GENERIC_ADDRESS CmdCompleteRegister; + UINT64 CmdCompleteMask; + ACPI_GENERIC_ADDRESS CmdUpdateRegister; + UINT64 CmdUpdatePreserveMask; + UINT64 CmdUpdateSetMask; + ACPI_GENERIC_ADDRESS ErrorStatusRegister; + UINT64 ErrorStatusMask; + +} ACPI_PCCT_EXT_PCC_SLAVE; + + +/* Values for doorbell flags above */ + +#define ACPI_PCCT_INTERRUPT_POLARITY (1) +#define ACPI_PCCT_INTERRUPT_MODE (1<<1) + + +/* + * PCC memory structures (not part of the ACPI table) + */ + +/* Shared Memory Region */ + +typedef struct acpi_pcct_shared_memory +{ + UINT32 Signature; + UINT16 Command; + UINT16 Status; + +} ACPI_PCCT_SHARED_MEMORY; + + +/* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */ + +typedef struct acpi_pcct_ext_pcc_shared_memory +{ + UINT32 Signature; + UINT32 Flags; + UINT32 Length; + UINT32 Command; + +} ACPI_PCCT_EXT_PCC_SHARED_MEMORY; + + +/******************************************************************************* + * + * PDTT - Platform Debug Trigger Table (ACPI 6.2) * Version 0 * ******************************************************************************/ @@ -1625,16 +1714,110 @@ typedef struct acpi_table_pdtt */ typedef struct acpi_pdtt_channel { - UINT16 SubChannelId; + UINT8 SubchannelId; + UINT8 Flags; } ACPI_PDTT_CHANNEL; +/* Flags for above */ + +#define ACPI_PDTT_RUNTIME_TRIGGER (1) +#define ACPI_PDTT_WAIT_COMPLETION (1<<1) + -/* Mask and Flags for above */ +/******************************************************************************* + * + * PMTT - Platform Memory Topology Table (ACPI 5.0) + * Version 1 + * + ******************************************************************************/ + +typedef struct acpi_table_pmtt +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 Reserved; + +} ACPI_TABLE_PMTT; + + +/* Common header for PMTT subtables that follow main table */ + +typedef struct acpi_pmtt_header +{ + UINT8 Type; + UINT8 Reserved1; + UINT16 Length; + UINT16 Flags; + UINT16 Reserved2; + +} ACPI_PMTT_HEADER; + +/* Values for Type field above */ + +#define ACPI_PMTT_TYPE_SOCKET 0 +#define ACPI_PMTT_TYPE_CONTROLLER 1 +#define ACPI_PMTT_TYPE_DIMM 2 +#define ACPI_PMTT_TYPE_RESERVED 3 /* 0x03-0xFF are reserved */ + +/* Values for Flags field above */ + +#define ACPI_PMTT_TOP_LEVEL 0x0001 +#define ACPI_PMTT_PHYSICAL 0x0002 +#define ACPI_PMTT_MEMORY_TYPE 0x000C + + +/* + * PMTT subtables, correspond to Type in acpi_pmtt_header + */ + + +/* 0: Socket Structure */ + +typedef struct acpi_pmtt_socket +{ + ACPI_PMTT_HEADER Header; + UINT16 SocketId; + UINT16 Reserved; + +} ACPI_PMTT_SOCKET; + + +/* 1: Memory Controller subtable */ + +typedef struct acpi_pmtt_controller +{ + ACPI_PMTT_HEADER Header; + UINT32 ReadLatency; + UINT32 WriteLatency; + UINT32 ReadBandwidth; + UINT32 WriteBandwidth; + UINT16 AccessWidth; + UINT16 Alignment; + UINT16 Reserved; + UINT16 DomainCount; + +} ACPI_PMTT_CONTROLLER; + +/* 1a: Proximity Domain substructure */ + +typedef struct acpi_pmtt_domain +{ + UINT32 ProximityDomain; + +} ACPI_PMTT_DOMAIN; + + +/* 2: Physical Component Identifier (DIMM) */ + +typedef struct acpi_pmtt_physical_component +{ + ACPI_PMTT_HEADER Header; + UINT16 ComponentId; + UINT16 Reserved; + UINT32 MemorySize; + UINT32 BiosHandle; -#define ACPI_PDTT_SUBCHANNEL_ID_MASK 0x00FF -#define ACPI_PDTT_RUNTIME_TRIGGER (1<<8) -#define ACPI_PPTT_WAIT_COMPLETION (1<<9) +} ACPI_PMTT_PHYSICAL_COMPONENT; /******************************************************************************* @@ -1712,6 +1895,19 @@ typedef struct acpi_pptt_cache #define ACPI_PPTT_MASK_CACHE_TYPE (0x0C) /* Cache type */ #define ACPI_PPTT_MASK_WRITE_POLICY (0x10) /* Write policy */ +/* Attributes describing cache */ +#define ACPI_PPTT_CACHE_READ_ALLOCATE (0x0) /* Cache line is allocated on read */ +#define ACPI_PPTT_CACHE_WRITE_ALLOCATE (0x01) /* Cache line is allocated on write */ +#define ACPI_PPTT_CACHE_RW_ALLOCATE (0x02) /* Cache line is allocated on read and write */ +#define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT (0x03) /* Alternate representation of above */ + +#define ACPI_PPTT_CACHE_TYPE_DATA (0x0) /* Data cache */ +#define ACPI_PPTT_CACHE_TYPE_INSTR (1<<2) /* Instruction cache */ +#define ACPI_PPTT_CACHE_TYPE_UNIFIED (2<<2) /* Unified I & D cache */ +#define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT (3<<2) /* Alternate representation of above */ + +#define ACPI_PPTT_CACHE_POLICY_WB (0x0) /* Cache is write back */ +#define ACPI_PPTT_CACHE_POLICY_WT (1<<4) /* Cache is write through */ /* 2: ID Structure */ @@ -1731,6 +1927,115 @@ typedef struct acpi_pptt_id /******************************************************************************* * + * RASF - RAS Feature Table (ACPI 5.0) + * Version 1 + * + ******************************************************************************/ + +typedef struct acpi_table_rasf +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT8 ChannelId[12]; + +} ACPI_TABLE_RASF; + +/* RASF Platform Communication Channel Shared Memory Region */ + +typedef struct acpi_rasf_shared_memory +{ + UINT32 Signature; + UINT16 Command; + UINT16 Status; + UINT16 Version; + UINT8 Capabilities[16]; + UINT8 SetCapabilities[16]; + UINT16 NumParameterBlocks; + UINT32 SetCapabilitiesStatus; + +} ACPI_RASF_SHARED_MEMORY; + +/* RASF Parameter Block Structure Header */ + +typedef struct acpi_rasf_parameter_block +{ + UINT16 Type; + UINT16 Version; + UINT16 Length; + +} ACPI_RASF_PARAMETER_BLOCK; + +/* RASF Parameter Block Structure for PATROL_SCRUB */ + +typedef struct acpi_rasf_patrol_scrub_parameter +{ + ACPI_RASF_PARAMETER_BLOCK Header; + UINT16 PatrolScrubCommand; + UINT64 RequestedAddressRange[2]; + UINT64 ActualAddressRange[2]; + UINT16 Flags; + UINT8 RequestedSpeed; + +} ACPI_RASF_PATROL_SCRUB_PARAMETER; + +/* Masks for Flags and Speed fields above */ + +#define ACPI_RASF_SCRUBBER_RUNNING 1 +#define ACPI_RASF_SPEED (7<<1) +#define ACPI_RASF_SPEED_SLOW (0<<1) +#define ACPI_RASF_SPEED_MEDIUM (4<<1) +#define ACPI_RASF_SPEED_FAST (7<<1) + +/* Channel Commands */ + +enum AcpiRasfCommands +{ + ACPI_RASF_EXECUTE_RASF_COMMAND = 1 +}; + +/* Platform RAS Capabilities */ + +enum AcpiRasfCapabiliities +{ + ACPI_HW_PATROL_SCRUB_SUPPORTED = 0, + ACPI_SW_PATROL_SCRUB_EXPOSED = 1 +}; + +/* Patrol Scrub Commands */ + +enum AcpiRasfPatrolScrubCommands +{ + ACPI_RASF_GET_PATROL_PARAMETERS = 1, + ACPI_RASF_START_PATROL_SCRUBBER = 2, + ACPI_RASF_STOP_PATROL_SCRUBBER = 3 +}; + +/* Channel Command flags */ + +#define ACPI_RASF_GENERATE_SCI (1<<15) + +/* Status values */ + +enum AcpiRasfStatus +{ + ACPI_RASF_SUCCESS = 0, + ACPI_RASF_NOT_VALID = 1, + ACPI_RASF_NOT_SUPPORTED = 2, + ACPI_RASF_BUSY = 3, + ACPI_RASF_FAILED = 4, + ACPI_RASF_ABORTED = 5, + ACPI_RASF_INVALID_DATA = 6 +}; + +/* Status flags */ + +#define ACPI_RASF_COMMAND_COMPLETE (1) +#define ACPI_RASF_SCI_DOORBELL (1<<1) +#define ACPI_RASF_ERROR (1<<2) +#define ACPI_RASF_STATUS (0x1F<<3) + + +/******************************************************************************* + * * SBST - Smart Battery Specification Table * Version 1 * @@ -1748,142 +2053,98 @@ typedef struct acpi_table_sbst /******************************************************************************* * - * SLIT - System Locality Distance Information Table - * Version 1 + * SDEI - Software Delegated Exception Interface Descriptor Table + * + * Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A, + * May 8th, 2017. Copyright 2017 ARM Ltd. * ******************************************************************************/ -typedef struct acpi_table_slit +typedef struct acpi_table_sdei { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT64 LocalityCount; - UINT8 Entry[1]; /* Real size = localities^2 */ -} ACPI_TABLE_SLIT; +} ACPI_TABLE_SDEI; /******************************************************************************* * - * SRAT - System Resource Affinity Table - * Version 3 + * SDEV - Secure Devices Table (ACPI 6.2) + * Version 1 * ******************************************************************************/ -typedef struct acpi_table_srat +typedef struct acpi_table_sdev { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 TableRevision; /* Must be value '1' */ - UINT64 Reserved; /* Reserved, must be zero */ - -} ACPI_TABLE_SRAT; -/* Values for subtable type in ACPI_SUBTABLE_HEADER */ - -enum AcpiSratType -{ - ACPI_SRAT_TYPE_CPU_AFFINITY = 0, - ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1, - ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2, - ACPI_SRAT_TYPE_GICC_AFFINITY = 3, - ACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4, /* ACPI 6.2 */ - ACPI_SRAT_TYPE_RESERVED = 5 /* 5 and greater are reserved */ -}; - -/* - * SRAT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER - */ +} ACPI_TABLE_SDEV; -/* 0: Processor Local APIC/SAPIC Affinity */ -typedef struct acpi_srat_cpu_affinity +typedef struct acpi_sdev_header { - ACPI_SUBTABLE_HEADER Header; - UINT8 ProximityDomainLo; - UINT8 ApicId; - UINT32 Flags; - UINT8 LocalSapicEid; - UINT8 ProximityDomainHi[3]; - UINT32 ClockDomain; - -} ACPI_SRAT_CPU_AFFINITY; - -/* Flags */ + UINT8 Type; + UINT8 Flags; + UINT16 Length; -#define ACPI_SRAT_CPU_USE_AFFINITY (1) /* 00: Use affinity structure */ +} ACPI_SDEV_HEADER; -/* 1: Memory Affinity */ +/* Values for subtable type above */ -typedef struct acpi_srat_mem_affinity +enum AcpiSdevType { - ACPI_SUBTABLE_HEADER Header; - UINT32 ProximityDomain; - UINT16 Reserved; /* Reserved, must be zero */ - UINT64 BaseAddress; - UINT64 Length; - UINT32 Reserved1; - UINT32 Flags; - UINT64 Reserved2; /* Reserved, must be zero */ - -} ACPI_SRAT_MEM_AFFINITY; + ACPI_SDEV_TYPE_NAMESPACE_DEVICE = 0, + ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1, + ACPI_SDEV_TYPE_RESERVED = 2 /* 2 and greater are reserved */ +}; -/* Flags */ +/* Values for flags above */ -#define ACPI_SRAT_MEM_ENABLED (1) /* 00: Use affinity structure */ -#define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1) /* 01: Memory region is hot pluggable */ -#define ACPI_SRAT_MEM_NON_VOLATILE (1<<2) /* 02: Memory region is non-volatile */ +#define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS (1) +/* + * SDEV subtables + */ -/* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */ +/* 0: Namespace Device Based Secure Device Structure */ -typedef struct acpi_srat_x2apic_cpu_affinity +typedef struct acpi_sdev_namespace { - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; /* Reserved, must be zero */ - UINT32 ProximityDomain; - UINT32 ApicId; - UINT32 Flags; - UINT32 ClockDomain; - UINT32 Reserved2; + ACPI_SDEV_HEADER Header; + UINT16 DeviceIdOffset; + UINT16 DeviceIdLength; + UINT16 VendorDataOffset; + UINT16 VendorDataLength; -} ACPI_SRAT_X2APIC_CPU_AFFINITY; +} ACPI_SDEV_NAMESPACE; -/* Flags for ACPI_SRAT_CPU_AFFINITY and ACPI_SRAT_X2APIC_CPU_AFFINITY */ +/* 1: PCIe Endpoint Device Based Device Structure */ -#define ACPI_SRAT_CPU_ENABLED (1) /* 00: Use affinity structure */ - - -/* 3: GICC Affinity (ACPI 5.1) */ - -typedef struct acpi_srat_gicc_affinity +typedef struct acpi_sdev_pcie { - ACPI_SUBTABLE_HEADER Header; - UINT32 ProximityDomain; - UINT32 AcpiProcessorUid; - UINT32 Flags; - UINT32 ClockDomain; + ACPI_SDEV_HEADER Header; + UINT16 Segment; + UINT16 StartBus; + UINT16 PathOffset; + UINT16 PathLength; + UINT16 VendorDataOffset; + UINT16 VendorDataLength; -} ACPI_SRAT_GICC_AFFINITY; +} ACPI_SDEV_PCIE; -/* Flags for ACPI_SRAT_GICC_AFFINITY */ +/* 1a: PCIe Endpoint path entry */ -#define ACPI_SRAT_GICC_ENABLED (1) /* 00: Use affinity structure */ - - -/* 4: GCC ITS Affinity (ACPI 6.2) */ - -typedef struct acpi_srat_gic_its_affinity +typedef struct acpi_sdev_pcie_path { - ACPI_SUBTABLE_HEADER Header; - UINT32 ProximityDomain; - UINT16 Reserved; - UINT32 ItsId; + UINT8 Device; + UINT8 Function; -} ACPI_SRAT_GIC_ITS_AFFINITY; +} ACPI_SDEV_PCIE_PATH; /* Reset to default packing */ #pragma pack() -#endif /* __ACTBL1_H__ */ +#endif /* __ACTBL2_H__ */ diff --git a/sys/contrib/dev/acpica/source/include/actbl3.h b/sys/contrib/dev/acpica/source/include/actbl3.h index 80b6ae1c0a..d4c15838b1 100644 --- a/sys/contrib/dev/acpica/source/include/actbl3.h +++ b/sys/contrib/dev/acpica/source/include/actbl3.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -155,14 +155,11 @@ /******************************************************************************* * - * Additional ACPI Tables (3) + * Additional ACPI Tables * * These tables are not consumed directly by the ACPICA subsystem, but are * included here to support device drivers and the AML disassembler. * - * In general, the tables in this file are fully defined within the ACPI - * specification. - * ******************************************************************************/ @@ -171,25 +168,24 @@ * file. Useful because they make it more difficult to inadvertently type in * the wrong signature. */ -#define ACPI_SIG_BGRT "BGRT" /* Boot Graphics Resource Table */ -#define ACPI_SIG_DRTM "DRTM" /* Dynamic Root of Trust for Measurement table */ -#define ACPI_SIG_FPDT "FPDT" /* Firmware Performance Data Table */ -#define ACPI_SIG_GTDT "GTDT" /* Generic Timer Description Table */ -#define ACPI_SIG_MPST "MPST" /* Memory Power State Table */ -#define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */ -#define ACPI_SIG_PMTT "PMTT" /* Platform Memory Topology Table */ -#define ACPI_SIG_RASF "RASF" /* RAS Feature table */ +#define ACPI_SIG_SLIC "SLIC" /* Software Licensing Description Table */ +#define ACPI_SIG_SLIT "SLIT" /* System Locality Distance Information Table */ +#define ACPI_SIG_SPCR "SPCR" /* Serial Port Console Redirection table */ +#define ACPI_SIG_SPMI "SPMI" /* Server Platform Management Interface table */ +#define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */ #define ACPI_SIG_STAO "STAO" /* Status Override table */ +#define ACPI_SIG_TCPA "TCPA" /* Trusted Computing Platform Alliance table */ +#define ACPI_SIG_TPM2 "TPM2" /* Trusted Platform Module 2.0 H/W interface table */ +#define ACPI_SIG_UEFI "UEFI" /* Uefi Boot Optimization Table */ +#define ACPI_SIG_VRTC "VRTC" /* Virtual Real Time Clock Table */ +#define ACPI_SIG_WAET "WAET" /* Windows ACPI Emulated devices Table */ +#define ACPI_SIG_WDAT "WDAT" /* Watchdog Action Table */ +#define ACPI_SIG_WDDT "WDDT" /* Watchdog Timer Description Table */ +#define ACPI_SIG_WDRT "WDRT" /* Watchdog Resource Table */ #define ACPI_SIG_WPBT "WPBT" /* Windows Platform Binary Table */ +#define ACPI_SIG_WSMT "WSMT" /* Windows SMM Security Migrations Table */ #define ACPI_SIG_XENV "XENV" /* Xen Environment table */ - -#define ACPI_SIG_S3PT "S3PT" /* S3 Performance (sub)Table */ -#define ACPI_SIG_PCCS "PCC" /* PCC Shared Memory Region */ - -/* Reserved table signatures */ - -#define ACPI_SIG_MATR "MATR" /* Memory Address Translation Table */ -#define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ +#define ACPI_SIG_XXXX "XXXX" /* Intermediate AML header for ASL/ASL+ converter */ /* * All tables must be byte-packed to match the ACPI specification, since @@ -212,858 +208,630 @@ /******************************************************************************* * - * BGRT - Boot Graphics Resource Table (ACPI 5.0) - * Version 1 + * SLIC - Software Licensing Description Table + * + * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", + * November 29, 2011. Copyright 2011 Microsoft * ******************************************************************************/ -typedef struct acpi_table_bgrt +/* Basic SLIC table is only the common ACPI header */ + +typedef struct acpi_table_slic { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT16 Version; - UINT8 Status; - UINT8 ImageType; - UINT64 ImageAddress; - UINT32 ImageOffsetX; - UINT32 ImageOffsetY; - -} ACPI_TABLE_BGRT; - -/* Flags for Status field above */ -#define ACPI_BGRT_DISPLAYED (1) -#define ACPI_BGRT_ORIENTATION_OFFSET (3 << 1) +} ACPI_TABLE_SLIC; /******************************************************************************* * - * DRTM - Dynamic Root of Trust for Measurement table - * Conforms to "TCG D-RTM Architecture" June 17 2013, Version 1.0.0 - * Table version 1 + * SLIT - System Locality Distance Information Table + * Version 1 * ******************************************************************************/ -typedef struct acpi_table_drtm +typedef struct acpi_table_slit { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT64 EntryBaseAddress; - UINT64 EntryLength; - UINT32 EntryAddress32; - UINT64 EntryAddress64; - UINT64 ExitAddress; - UINT64 LogAreaAddress; - UINT32 LogAreaLength; - UINT64 ArchDependentAddress; - UINT32 Flags; - -} ACPI_TABLE_DRTM; - -/* Flag Definitions for above */ - -#define ACPI_DRTM_ACCESS_ALLOWED (1) -#define ACPI_DRTM_ENABLE_GAP_CODE (1<<1) -#define ACPI_DRTM_INCOMPLETE_MEASUREMENTS (1<<2) -#define ACPI_DRTM_AUTHORITY_ORDER (1<<3) - - -/* 1) Validated Tables List (64-bit addresses) */ - -typedef struct acpi_drtm_vtable_list -{ - UINT32 ValidatedTableCount; - UINT64 ValidatedTables[1]; + UINT64 LocalityCount; + UINT8 Entry[1]; /* Real size = localities^2 */ -} ACPI_DRTM_VTABLE_LIST; - -/* 2) Resources List (of Resource Descriptors) */ - -/* Resource Descriptor */ - -typedef struct acpi_drtm_resource -{ - UINT8 Size[7]; - UINT8 Type; - UINT64 Address; - -} ACPI_DRTM_RESOURCE; - -typedef struct acpi_drtm_resource_list -{ - UINT32 ResourceCount; - ACPI_DRTM_RESOURCE Resources[1]; - -} ACPI_DRTM_RESOURCE_LIST; - -/* 3) Platform-specific Identifiers List */ - -typedef struct acpi_drtm_dps_id -{ - UINT32 DpsIdLength; - UINT8 DpsId[16]; - -} ACPI_DRTM_DPS_ID; +} ACPI_TABLE_SLIT; /******************************************************************************* * - * FPDT - Firmware Performance Data Table (ACPI 5.0) - * Version 1 + * SPCR - Serial Port Console Redirection table + * Version 2 + * + * Conforms to "Serial Port Console Redirection Table", + * Version 1.03, August 10, 2015 * ******************************************************************************/ -typedef struct acpi_table_fpdt +typedef struct acpi_table_spcr { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT8 InterfaceType; /* 0=full 16550, 1=subset of 16550 */ + UINT8 Reserved[3]; + ACPI_GENERIC_ADDRESS SerialPort; + UINT8 InterruptType; + UINT8 PcInterrupt; + UINT32 Interrupt; + UINT8 BaudRate; + UINT8 Parity; + UINT8 StopBits; + UINT8 FlowControl; + UINT8 TerminalType; + UINT8 Reserved1; + UINT16 PciDeviceId; + UINT16 PciVendorId; + UINT8 PciBus; + UINT8 PciDevice; + UINT8 PciFunction; + UINT32 PciFlags; + UINT8 PciSegment; + UINT32 Reserved2; -} ACPI_TABLE_FPDT; +} ACPI_TABLE_SPCR; +/* Masks for PciFlags field above */ -/* FPDT subtable header (Performance Record Structure) */ +#define ACPI_SPCR_DO_NOT_DISABLE (1) -typedef struct acpi_fpdt_header -{ - UINT16 Type; - UINT8 Length; - UINT8 Revision; +/* Values for Interface Type: See the definition of the DBG2 table */ -} ACPI_FPDT_HEADER; -/* Values for Type field above */ +/******************************************************************************* + * + * SPMI - Server Platform Management Interface table + * Version 5 + * + * Conforms to "Intelligent Platform Management Interface Specification + * Second Generation v2.0", Document Revision 1.0, February 12, 2004 with + * June 12, 2009 markup. + * + ******************************************************************************/ -enum AcpiFpdtType +typedef struct acpi_table_spmi { - ACPI_FPDT_TYPE_BOOT = 0, - ACPI_FPDT_TYPE_S3PERF = 1 + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT8 InterfaceType; + UINT8 Reserved; /* Must be 1 */ + UINT16 SpecRevision; /* Version of IPMI */ + UINT8 InterruptType; + UINT8 GpeNumber; /* GPE assigned */ + UINT8 Reserved1; + UINT8 PciDeviceFlag; + UINT32 Interrupt; + ACPI_GENERIC_ADDRESS IpmiRegister; + UINT8 PciSegment; + UINT8 PciBus; + UINT8 PciDevice; + UINT8 PciFunction; + UINT8 Reserved2; + +} ACPI_TABLE_SPMI; + +/* Values for InterfaceType above */ + +enum AcpiSpmiInterfaceTypes +{ + ACPI_SPMI_NOT_USED = 0, + ACPI_SPMI_KEYBOARD = 1, + ACPI_SPMI_SMI = 2, + ACPI_SPMI_BLOCK_TRANSFER = 3, + ACPI_SPMI_SMBUS = 4, + ACPI_SPMI_RESERVED = 5 /* 5 and above are reserved */ }; -/* - * FPDT subtables - */ - -/* 0: Firmware Basic Boot Performance Record */ - -typedef struct acpi_fpdt_boot_pointer -{ - ACPI_FPDT_HEADER Header; - UINT8 Reserved[4]; - UINT64 Address; - -} ACPI_FPDT_BOOT_POINTER; - - -/* 1: S3 Performance Table Pointer Record */ +/******************************************************************************* + * + * SRAT - System Resource Affinity Table + * Version 3 + * + ******************************************************************************/ -typedef struct acpi_fpdt_s3pt_pointer +typedef struct acpi_table_srat { - ACPI_FPDT_HEADER Header; - UINT8 Reserved[4]; - UINT64 Address; + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 TableRevision; /* Must be value '1' */ + UINT64 Reserved; /* Reserved, must be zero */ -} ACPI_FPDT_S3PT_POINTER; +} ACPI_TABLE_SRAT; +/* Values for subtable type in ACPI_SUBTABLE_HEADER */ -/* - * S3PT - S3 Performance Table. This table is pointed to by the - * S3 Pointer Record above. - */ -typedef struct acpi_table_s3pt +enum AcpiSratType { - UINT8 Signature[4]; /* "S3PT" */ - UINT32 Length; - -} ACPI_TABLE_S3PT; - + ACPI_SRAT_TYPE_CPU_AFFINITY = 0, + ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1, + ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2, + ACPI_SRAT_TYPE_GICC_AFFINITY = 3, + ACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4, /* ACPI 6.2 */ + ACPI_SRAT_TYPE_RESERVED = 5 /* 5 and greater are reserved */ +}; /* - * S3PT Subtables (Not part of the actual FPDT) + * SRAT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER */ -/* Values for Type field in S3PT header */ +/* 0: Processor Local APIC/SAPIC Affinity */ -enum AcpiS3ptType +typedef struct acpi_srat_cpu_affinity { - ACPI_S3PT_TYPE_RESUME = 0, - ACPI_S3PT_TYPE_SUSPEND = 1, - ACPI_FPDT_BOOT_PERFORMANCE = 2 -}; + ACPI_SUBTABLE_HEADER Header; + UINT8 ProximityDomainLo; + UINT8 ApicId; + UINT32 Flags; + UINT8 LocalSapicEid; + UINT8 ProximityDomainHi[3]; + UINT32 ClockDomain; -typedef struct acpi_s3pt_resume -{ - ACPI_FPDT_HEADER Header; - UINT32 ResumeCount; - UINT64 FullResume; - UINT64 AverageResume; +} ACPI_SRAT_CPU_AFFINITY; -} ACPI_S3PT_RESUME; +/* Flags */ -typedef struct acpi_s3pt_suspend -{ - ACPI_FPDT_HEADER Header; - UINT64 SuspendStart; - UINT64 SuspendEnd; +#define ACPI_SRAT_CPU_USE_AFFINITY (1) /* 00: Use affinity structure */ -} ACPI_S3PT_SUSPEND; +/* 1: Memory Affinity */ -/* - * FPDT Boot Performance Record (Not part of the actual FPDT) - */ -typedef struct acpi_fpdt_boot +typedef struct acpi_srat_mem_affinity { - ACPI_FPDT_HEADER Header; - UINT8 Reserved[4]; - UINT64 ResetEnd; - UINT64 LoadStart; - UINT64 StartupStart; - UINT64 ExitServicesEntry; - UINT64 ExitServicesExit; - -} ACPI_FPDT_BOOT; - - -/******************************************************************************* - * - * GTDT - Generic Timer Description Table (ACPI 5.1) - * Version 2 - * - ******************************************************************************/ - -typedef struct acpi_table_gtdt -{ - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT64 CounterBlockAddresss; - UINT32 Reserved; - UINT32 SecureEl1Interrupt; - UINT32 SecureEl1Flags; - UINT32 NonSecureEl1Interrupt; - UINT32 NonSecureEl1Flags; - UINT32 VirtualTimerInterrupt; - UINT32 VirtualTimerFlags; - UINT32 NonSecureEl2Interrupt; - UINT32 NonSecureEl2Flags; - UINT64 CounterReadBlockAddress; - UINT32 PlatformTimerCount; - UINT32 PlatformTimerOffset; - -} ACPI_TABLE_GTDT; - -/* Flag Definitions: Timer Block Physical Timers and Virtual timers */ - -#define ACPI_GTDT_INTERRUPT_MODE (1) -#define ACPI_GTDT_INTERRUPT_POLARITY (1<<1) -#define ACPI_GTDT_ALWAYS_ON (1<<2) + ACPI_SUBTABLE_HEADER Header; + UINT32 ProximityDomain; + UINT16 Reserved; /* Reserved, must be zero */ + UINT64 BaseAddress; + UINT64 Length; + UINT32 Reserved1; + UINT32 Flags; + UINT64 Reserved2; /* Reserved, must be zero */ +} ACPI_SRAT_MEM_AFFINITY; -/* Common GTDT subtable header */ +/* Flags */ -typedef struct acpi_gtdt_header -{ - UINT8 Type; - UINT16 Length; +#define ACPI_SRAT_MEM_ENABLED (1) /* 00: Use affinity structure */ +#define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1) /* 01: Memory region is hot pluggable */ +#define ACPI_SRAT_MEM_NON_VOLATILE (1<<2) /* 02: Memory region is non-volatile */ -} ACPI_GTDT_HEADER; -/* Values for GTDT subtable type above */ +/* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */ -enum AcpiGtdtType +typedef struct acpi_srat_x2apic_cpu_affinity { - ACPI_GTDT_TYPE_TIMER_BLOCK = 0, - ACPI_GTDT_TYPE_WATCHDOG = 1, - ACPI_GTDT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ -}; - + ACPI_SUBTABLE_HEADER Header; + UINT16 Reserved; /* Reserved, must be zero */ + UINT32 ProximityDomain; + UINT32 ApicId; + UINT32 Flags; + UINT32 ClockDomain; + UINT32 Reserved2; -/* GTDT Subtables, correspond to Type in acpi_gtdt_header */ +} ACPI_SRAT_X2APIC_CPU_AFFINITY; -/* 0: Generic Timer Block */ +/* Flags for ACPI_SRAT_CPU_AFFINITY and ACPI_SRAT_X2APIC_CPU_AFFINITY */ -typedef struct acpi_gtdt_timer_block -{ - ACPI_GTDT_HEADER Header; - UINT8 Reserved; - UINT64 BlockAddress; - UINT32 TimerCount; - UINT32 TimerOffset; +#define ACPI_SRAT_CPU_ENABLED (1) /* 00: Use affinity structure */ -} ACPI_GTDT_TIMER_BLOCK; -/* Timer Sub-Structure, one per timer */ +/* 3: GICC Affinity (ACPI 5.1) */ -typedef struct acpi_gtdt_timer_entry +typedef struct acpi_srat_gicc_affinity { - UINT8 FrameNumber; - UINT8 Reserved[3]; - UINT64 BaseAddress; - UINT64 El0BaseAddress; - UINT32 TimerInterrupt; - UINT32 TimerFlags; - UINT32 VirtualTimerInterrupt; - UINT32 VirtualTimerFlags; - UINT32 CommonFlags; - -} ACPI_GTDT_TIMER_ENTRY; - -/* Flag Definitions: TimerFlags and VirtualTimerFlags above */ + ACPI_SUBTABLE_HEADER Header; + UINT32 ProximityDomain; + UINT32 AcpiProcessorUid; + UINT32 Flags; + UINT32 ClockDomain; -#define ACPI_GTDT_GT_IRQ_MODE (1) -#define ACPI_GTDT_GT_IRQ_POLARITY (1<<1) +} ACPI_SRAT_GICC_AFFINITY; -/* Flag Definitions: CommonFlags above */ +/* Flags for ACPI_SRAT_GICC_AFFINITY */ -#define ACPI_GTDT_GT_IS_SECURE_TIMER (1) -#define ACPI_GTDT_GT_ALWAYS_ON (1<<1) +#define ACPI_SRAT_GICC_ENABLED (1) /* 00: Use affinity structure */ -/* 1: SBSA Generic Watchdog Structure */ +/* 4: GCC ITS Affinity (ACPI 6.2) */ -typedef struct acpi_gtdt_watchdog +typedef struct acpi_srat_gic_its_affinity { - ACPI_GTDT_HEADER Header; - UINT8 Reserved; - UINT64 RefreshFrameAddress; - UINT64 ControlFrameAddress; - UINT32 TimerInterrupt; - UINT32 TimerFlags; - -} ACPI_GTDT_WATCHDOG; - -/* Flag Definitions: TimerFlags above */ + ACPI_SUBTABLE_HEADER Header; + UINT32 ProximityDomain; + UINT16 Reserved; + UINT32 ItsId; -#define ACPI_GTDT_WATCHDOG_IRQ_MODE (1) -#define ACPI_GTDT_WATCHDOG_IRQ_POLARITY (1<<1) -#define ACPI_GTDT_WATCHDOG_SECURE (1<<2) +} ACPI_SRAT_GIC_ITS_AFFINITY; /******************************************************************************* * - * MPST - Memory Power State Table (ACPI 5.0) + * STAO - Status Override Table (_STA override) - ACPI 6.0 * Version 1 * + * Conforms to "ACPI Specification for Status Override Table" + * 6 January 2015 + * ******************************************************************************/ -#define ACPI_MPST_CHANNEL_INFO \ - UINT8 ChannelId; \ - UINT8 Reserved1[3]; \ - UINT16 PowerNodeCount; \ - UINT16 Reserved2; - -/* Main table */ - -typedef struct acpi_table_mpst +typedef struct acpi_table_stao { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ - -} ACPI_TABLE_MPST; - - -/* Memory Platform Communication Channel Info */ - -typedef struct acpi_mpst_channel -{ - ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ - -} ACPI_MPST_CHANNEL; - - -/* Memory Power Node Structure */ - -typedef struct acpi_mpst_power_node -{ - UINT8 Flags; - UINT8 Reserved1; - UINT16 NodeId; - UINT32 Length; - UINT64 RangeAddress; - UINT64 RangeLength; - UINT32 NumPowerStates; - UINT32 NumPhysicalComponents; - -} ACPI_MPST_POWER_NODE; - -/* Values for Flags field above */ + UINT8 IgnoreUart; -#define ACPI_MPST_ENABLED 1 -#define ACPI_MPST_POWER_MANAGED 2 -#define ACPI_MPST_HOT_PLUG_CAPABLE 4 +} ACPI_TABLE_STAO; -/* Memory Power State Structure (follows POWER_NODE above) */ +/******************************************************************************* + * + * TCPA - Trusted Computing Platform Alliance table + * Version 2 + * + * TCG Hardware Interface Table for TPM 1.2 Clients and Servers + * + * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0", + * Version 1.2, Revision 8 + * February 27, 2017 + * + * NOTE: There are two versions of the table with the same signature -- + * the client version and the server version. The common PlatformClass + * field is used to differentiate the two types of tables. + * + ******************************************************************************/ -typedef struct acpi_mpst_power_state +typedef struct acpi_table_tcpa_hdr { - UINT8 PowerState; - UINT8 InfoIndex; + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT16 PlatformClass; -} ACPI_MPST_POWER_STATE; +} ACPI_TABLE_TCPA_HDR; +/* + * Values for PlatformClass above. + * This is how the client and server subtables are differentiated + */ +#define ACPI_TCPA_CLIENT_TABLE 0 +#define ACPI_TCPA_SERVER_TABLE 1 -/* Physical Component ID Structure (follows POWER_STATE above) */ -typedef struct acpi_mpst_component +typedef struct acpi_table_tcpa_client { - UINT16 ComponentId; - -} ACPI_MPST_COMPONENT; + UINT32 MinimumLogLength; /* Minimum length for the event log area */ + UINT64 LogAddress; /* Address of the event log area */ +} ACPI_TABLE_TCPA_CLIENT; -/* Memory Power State Characteristics Structure (follows all POWER_NODEs) */ - -typedef struct acpi_mpst_data_hdr +typedef struct acpi_table_tcpa_server { - UINT16 CharacteristicsCount; UINT16 Reserved; - -} ACPI_MPST_DATA_HDR; - -typedef struct acpi_mpst_power_data -{ - UINT8 StructureId; - UINT8 Flags; - UINT16 Reserved1; - UINT32 AveragePower; - UINT32 PowerSaving; - UINT64 ExitLatency; - UINT64 Reserved2; - -} ACPI_MPST_POWER_DATA; - -/* Values for Flags field above */ - -#define ACPI_MPST_PRESERVE 1 -#define ACPI_MPST_AUTOENTRY 2 -#define ACPI_MPST_AUTOEXIT 4 - - -/* Shared Memory Region (not part of an ACPI table) */ - -typedef struct acpi_mpst_shared -{ - UINT32 Signature; - UINT16 PccCommand; - UINT16 PccStatus; - UINT32 CommandRegister; - UINT32 StatusRegister; - UINT32 PowerStateId; - UINT32 PowerNodeId; - UINT64 EnergyConsumed; - UINT64 AveragePower; - -} ACPI_MPST_SHARED; + UINT64 MinimumLogLength; /* Minimum length for the event log area */ + UINT64 LogAddress; /* Address of the event log area */ + UINT16 SpecRevision; + UINT8 DeviceFlags; + UINT8 InterruptFlags; + UINT8 GpeNumber; + UINT8 Reserved2[3]; + UINT32 GlobalInterrupt; + ACPI_GENERIC_ADDRESS Address; + UINT32 Reserved3; + ACPI_GENERIC_ADDRESS ConfigAddress; + UINT8 Group; + UINT8 Bus; /* PCI Bus/Segment/Function numbers */ + UINT8 Device; + UINT8 Function; + +} ACPI_TABLE_TCPA_SERVER; + +/* Values for DeviceFlags above */ + +#define ACPI_TCPA_PCI_DEVICE (1) +#define ACPI_TCPA_BUS_PNP (1<<1) +#define ACPI_TCPA_ADDRESS_VALID (1<<2) + +/* Values for InterruptFlags above */ + +#define ACPI_TCPA_INTERRUPT_MODE (1) +#define ACPI_TCPA_INTERRUPT_POLARITY (1<<1) +#define ACPI_TCPA_SCI_VIA_GPE (1<<2) +#define ACPI_TCPA_GLOBAL_INTERRUPT (1<<3) /******************************************************************************* * - * PCCT - Platform Communications Channel Table (ACPI 5.0) - * Version 2 (ACPI 6.2) + * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table + * Version 4 + * + * TCG Hardware Interface Table for TPM 2.0 Clients and Servers + * + * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0", + * Version 1.2, Revision 8 + * February 27, 2017 * ******************************************************************************/ -typedef struct acpi_table_pcct +typedef struct acpi_table_tpm2 { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 Flags; - UINT64 Reserved; - -} ACPI_TABLE_PCCT; - -/* Values for Flags field above */ - -#define ACPI_PCCT_DOORBELL 1 - -/* Values for subtable type in ACPI_SUBTABLE_HEADER */ - -enum AcpiPcctType -{ - ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0, - ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1, - ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2, /* ACPI 6.1 */ - ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3, /* ACPI 6.2 */ - ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4, /* ACPI 6.2 */ - ACPI_PCCT_TYPE_RESERVED = 5 /* 5 and greater are reserved */ -}; - -/* - * PCCT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER - */ - -/* 0: Generic Communications Subspace */ - -typedef struct acpi_pcct_subspace -{ - ACPI_SUBTABLE_HEADER Header; - UINT8 Reserved[6]; - UINT64 BaseAddress; - UINT64 Length; - ACPI_GENERIC_ADDRESS DoorbellRegister; - UINT64 PreserveMask; - UINT64 WriteMask; - UINT32 Latency; - UINT32 MaxAccessRate; - UINT16 MinTurnaroundTime; - -} ACPI_PCCT_SUBSPACE; + UINT16 PlatformClass; + UINT16 Reserved; + UINT64 ControlAddress; + UINT32 StartMethod; + /* Platform-specific data follows */ -/* 1: HW-reduced Communications Subspace (ACPI 5.1) */ +} ACPI_TABLE_TPM2; -typedef struct acpi_pcct_hw_reduced -{ - ACPI_SUBTABLE_HEADER Header; - UINT32 PlatformInterrupt; - UINT8 Flags; - UINT8 Reserved; - UINT64 BaseAddress; - UINT64 Length; - ACPI_GENERIC_ADDRESS DoorbellRegister; - UINT64 PreserveMask; - UINT64 WriteMask; - UINT32 Latency; - UINT32 MaxAccessRate; - UINT16 MinTurnaroundTime; +/* Values for StartMethod above */ -} ACPI_PCCT_HW_REDUCED; +#define ACPI_TPM2_NOT_ALLOWED 0 +#define ACPI_TPM2_RESERVED1 1 +#define ACPI_TPM2_START_METHOD 2 +#define ACPI_TPM2_RESERVED3 3 +#define ACPI_TPM2_RESERVED4 4 +#define ACPI_TPM2_RESERVED5 5 +#define ACPI_TPM2_MEMORY_MAPPED 6 +#define ACPI_TPM2_COMMAND_BUFFER 7 +#define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD 8 +#define ACPI_TPM2_RESERVED9 9 +#define ACPI_TPM2_RESERVED10 10 +#define ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC 11 /* V1.2 Rev 8 */ +#define ACPI_TPM2_RESERVED 12 -/* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */ +/* Optional trailer appears after any StartMethod subtables */ -typedef struct acpi_pcct_hw_reduced_type2 +typedef struct acpi_tpm2_trailer { - ACPI_SUBTABLE_HEADER Header; - UINT32 PlatformInterrupt; - UINT8 Flags; - UINT8 Reserved; - UINT64 BaseAddress; - UINT64 Length; - ACPI_GENERIC_ADDRESS DoorbellRegister; - UINT64 PreserveMask; - UINT64 WriteMask; - UINT32 Latency; - UINT32 MaxAccessRate; - UINT16 MinTurnaroundTime; - ACPI_GENERIC_ADDRESS PlatformAckRegister; - UINT64 AckPreserveMask; - UINT64 AckWriteMask; + UINT8 MethodParameters[12]; + UINT32 MinimumLogLength; /* Minimum length for the event log area */ + UINT64 LogAddress; /* Address of the event log area */ -} ACPI_PCCT_HW_REDUCED_TYPE2; - - -/* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */ - -typedef struct acpi_pcct_ext_pcc_master -{ - ACPI_SUBTABLE_HEADER Header; - UINT32 PlatformInterrupt; - UINT8 Flags; - UINT8 Reserved1; - UINT64 BaseAddress; - UINT32 Length; - ACPI_GENERIC_ADDRESS DoorbellRegister; - UINT64 PreserveMask; - UINT64 WriteMask; - UINT32 Latency; - UINT32 MaxAccessRate; - UINT32 MinTurnaroundTime; - ACPI_GENERIC_ADDRESS PlatformAckRegister; - UINT64 AckPreserveMask; - UINT64 AckSetMask; - UINT64 Reserved2; - ACPI_GENERIC_ADDRESS CmdCompleteRegister; - UINT64 CmdCompleteMask; - ACPI_GENERIC_ADDRESS CmdUpdateRegister; - UINT64 CmdUpdatePreserveMask; - UINT64 CmdUpdateSetMask; - ACPI_GENERIC_ADDRESS ErrorStatusRegister; - UINT64 ErrorStatusMask; - -} ACPI_PCCT_EXT_PCC_MASTER; - - -/* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */ - -typedef struct acpi_pcct_ext_pcc_slave -{ - ACPI_SUBTABLE_HEADER Header; - UINT32 PlatformInterrupt; - UINT8 Flags; - UINT8 Reserved1; - UINT64 BaseAddress; - UINT32 Length; - ACPI_GENERIC_ADDRESS DoorbellRegister; - UINT64 PreserveMask; - UINT64 WriteMask; - UINT32 Latency; - UINT32 MaxAccessRate; - UINT32 MinTurnaroundTime; - ACPI_GENERIC_ADDRESS PlatformAckRegister; - UINT64 AckPreserveMask; - UINT64 AckSetMask; - UINT64 Reserved2; - ACPI_GENERIC_ADDRESS CmdCompleteRegister; - UINT64 CmdCompleteMask; - ACPI_GENERIC_ADDRESS CmdUpdateRegister; - UINT64 CmdUpdatePreserveMask; - UINT64 CmdUpdateSetMask; - ACPI_GENERIC_ADDRESS ErrorStatusRegister; - UINT64 ErrorStatusMask; - -} ACPI_PCCT_EXT_PCC_SLAVE; - - -/* Values for doorbell flags above */ - -#define ACPI_PCCT_INTERRUPT_POLARITY (1) -#define ACPI_PCCT_INTERRUPT_MODE (1<<1) +} ACPI_TPM2_TRAILER; /* - * PCC memory structures (not part of the ACPI table) + * Subtables (StartMethod-specific) */ -/* Shared Memory Region */ +/* 11: Start Method for ARM SMC (V1.2 Rev 8) */ -typedef struct acpi_pcct_shared_memory +typedef struct acpi_tpm2_arm_smc { - UINT32 Signature; - UINT16 Command; - UINT16 Status; + UINT32 GlobalInterrupt; + UINT8 InterruptFlags; + UINT8 OperationFlags; + UINT16 Reserved; + UINT32 FunctionId; -} ACPI_PCCT_SHARED_MEMORY; +} ACPI_TPM2_ARM_SMC; +/* Values for InterruptFlags above */ -/* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */ +#define ACPI_TPM2_INTERRUPT_SUPPORT (1) -typedef struct acpi_pcct_ext_pcc_shared_memory -{ - UINT32 Signature; - UINT32 Flags; - UINT32 Length; - UINT32 Command; +/* Values for OperationFlags above */ -} ACPI_PCCT_EXT_PCC_SHARED_MEMORY; +#define ACPI_TPM2_IDLE_SUPPORT (1) /******************************************************************************* * - * PMTT - Platform Memory Topology Table (ACPI 5.0) + * UEFI - UEFI Boot optimization Table * Version 1 * + * Conforms to "Unified Extensible Firmware Interface Specification", + * Version 2.3, May 8, 2009 + * ******************************************************************************/ -typedef struct acpi_table_pmtt +typedef struct acpi_table_uefi { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 Reserved; - -} ACPI_TABLE_PMTT; - - -/* Common header for PMTT subtables that follow main table */ - -typedef struct acpi_pmtt_header -{ - UINT8 Type; - UINT8 Reserved1; - UINT16 Length; - UINT16 Flags; - UINT16 Reserved2; - -} ACPI_PMTT_HEADER; - -/* Values for Type field above */ - -#define ACPI_PMTT_TYPE_SOCKET 0 -#define ACPI_PMTT_TYPE_CONTROLLER 1 -#define ACPI_PMTT_TYPE_DIMM 2 -#define ACPI_PMTT_TYPE_RESERVED 3 /* 0x03-0xFF are reserved */ + UINT8 Identifier[16]; /* UUID identifier */ + UINT16 DataOffset; /* Offset of remaining data in table */ -/* Values for Flags field above */ +} ACPI_TABLE_UEFI; -#define ACPI_PMTT_TOP_LEVEL 0x0001 -#define ACPI_PMTT_PHYSICAL 0x0002 -#define ACPI_PMTT_MEMORY_TYPE 0x000C - - -/* - * PMTT subtables, correspond to Type in acpi_pmtt_header - */ +/******************************************************************************* + * + * VRTC - Virtual Real Time Clock Table + * Version 1 + * + * Conforms to "Simple Firmware Interface Specification", + * Draft 0.8.2, Oct 19, 2010 + * NOTE: The ACPI VRTC is equivalent to The SFI MRTC table. + * + ******************************************************************************/ -/* 0: Socket Structure */ - -typedef struct acpi_pmtt_socket -{ - ACPI_PMTT_HEADER Header; - UINT16 SocketId; - UINT16 Reserved; - -} ACPI_PMTT_SOCKET; - - -/* 1: Memory Controller subtable */ - -typedef struct acpi_pmtt_controller -{ - ACPI_PMTT_HEADER Header; - UINT32 ReadLatency; - UINT32 WriteLatency; - UINT32 ReadBandwidth; - UINT32 WriteBandwidth; - UINT16 AccessWidth; - UINT16 Alignment; - UINT16 Reserved; - UINT16 DomainCount; - -} ACPI_PMTT_CONTROLLER; - -/* 1a: Proximity Domain substructure */ - -typedef struct acpi_pmtt_domain +typedef struct acpi_table_vrtc { - UINT32 ProximityDomain; - -} ACPI_PMTT_DOMAIN; + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ +} ACPI_TABLE_VRTC; -/* 2: Physical Component Identifier (DIMM) */ +/* VRTC entry */ -typedef struct acpi_pmtt_physical_component +typedef struct acpi_vrtc_entry { - ACPI_PMTT_HEADER Header; - UINT16 ComponentId; - UINT16 Reserved; - UINT32 MemorySize; - UINT32 BiosHandle; + ACPI_GENERIC_ADDRESS PhysicalAddress; + UINT32 Irq; -} ACPI_PMTT_PHYSICAL_COMPONENT; +} ACPI_VRTC_ENTRY; /******************************************************************************* * - * RASF - RAS Feature Table (ACPI 5.0) + * WAET - Windows ACPI Emulated devices Table * Version 1 * + * Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009 + * ******************************************************************************/ -typedef struct acpi_table_rasf +typedef struct acpi_table_waet { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT8 ChannelId[12]; + UINT32 Flags; -} ACPI_TABLE_RASF; +} ACPI_TABLE_WAET; -/* RASF Platform Communication Channel Shared Memory Region */ +/* Masks for Flags field above */ -typedef struct acpi_rasf_shared_memory -{ - UINT32 Signature; - UINT16 Command; - UINT16 Status; - UINT16 Version; - UINT8 Capabilities[16]; - UINT8 SetCapabilities[16]; - UINT16 NumParameterBlocks; - UINT32 SetCapabilitiesStatus; +#define ACPI_WAET_RTC_NO_ACK (1) /* RTC requires no int acknowledge */ +#define ACPI_WAET_TIMER_ONE_READ (1<<1) /* PM timer requires only one read */ -} ACPI_RASF_SHARED_MEMORY; -/* RASF Parameter Block Structure Header */ +/******************************************************************************* + * + * WDAT - Watchdog Action Table + * Version 1 + * + * Conforms to "Hardware Watchdog Timers Design Specification", + * Copyright 2006 Microsoft Corporation. + * + ******************************************************************************/ -typedef struct acpi_rasf_parameter_block +typedef struct acpi_table_wdat { - UINT16 Type; - UINT16 Version; - UINT16 Length; - -} ACPI_RASF_PARAMETER_BLOCK; + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 HeaderLength; /* Watchdog Header Length */ + UINT16 PciSegment; /* PCI Segment number */ + UINT8 PciBus; /* PCI Bus number */ + UINT8 PciDevice; /* PCI Device number */ + UINT8 PciFunction; /* PCI Function number */ + UINT8 Reserved[3]; + UINT32 TimerPeriod; /* Period of one timer count (msec) */ + UINT32 MaxCount; /* Maximum counter value supported */ + UINT32 MinCount; /* Minimum counter value */ + UINT8 Flags; + UINT8 Reserved2[3]; + UINT32 Entries; /* Number of watchdog entries that follow */ -/* RASF Parameter Block Structure for PATROL_SCRUB */ +} ACPI_TABLE_WDAT; -typedef struct acpi_rasf_patrol_scrub_parameter -{ - ACPI_RASF_PARAMETER_BLOCK Header; - UINT16 PatrolScrubCommand; - UINT64 RequestedAddressRange[2]; - UINT64 ActualAddressRange[2]; - UINT16 Flags; - UINT8 RequestedSpeed; +/* Masks for Flags field above */ -} ACPI_RASF_PATROL_SCRUB_PARAMETER; +#define ACPI_WDAT_ENABLED (1) +#define ACPI_WDAT_STOPPED 0x80 -/* Masks for Flags and Speed fields above */ -#define ACPI_RASF_SCRUBBER_RUNNING 1 -#define ACPI_RASF_SPEED (7<<1) -#define ACPI_RASF_SPEED_SLOW (0<<1) -#define ACPI_RASF_SPEED_MEDIUM (4<<1) -#define ACPI_RASF_SPEED_FAST (7<<1) +/* WDAT Instruction Entries (actions) */ -/* Channel Commands */ - -enum AcpiRasfCommands +typedef struct acpi_wdat_entry { - ACPI_RASF_EXECUTE_RASF_COMMAND = 1 + UINT8 Action; + UINT8 Instruction; + UINT16 Reserved; + ACPI_GENERIC_ADDRESS RegisterRegion; + UINT32 Value; /* Value used with Read/Write register */ + UINT32 Mask; /* Bitmask required for this register instruction */ + +} ACPI_WDAT_ENTRY; + +/* Values for Action field above */ + +enum AcpiWdatActions +{ + ACPI_WDAT_RESET = 1, + ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4, + ACPI_WDAT_GET_COUNTDOWN = 5, + ACPI_WDAT_SET_COUNTDOWN = 6, + ACPI_WDAT_GET_RUNNING_STATE = 8, + ACPI_WDAT_SET_RUNNING_STATE = 9, + ACPI_WDAT_GET_STOPPED_STATE = 10, + ACPI_WDAT_SET_STOPPED_STATE = 11, + ACPI_WDAT_GET_REBOOT = 16, + ACPI_WDAT_SET_REBOOT = 17, + ACPI_WDAT_GET_SHUTDOWN = 18, + ACPI_WDAT_SET_SHUTDOWN = 19, + ACPI_WDAT_GET_STATUS = 32, + ACPI_WDAT_SET_STATUS = 33, + ACPI_WDAT_ACTION_RESERVED = 34 /* 34 and greater are reserved */ }; -/* Platform RAS Capabilities */ +/* Values for Instruction field above */ -enum AcpiRasfCapabiliities +enum AcpiWdatInstructions { - ACPI_HW_PATROL_SCRUB_SUPPORTED = 0, - ACPI_SW_PATROL_SCRUB_EXPOSED = 1 + ACPI_WDAT_READ_VALUE = 0, + ACPI_WDAT_READ_COUNTDOWN = 1, + ACPI_WDAT_WRITE_VALUE = 2, + ACPI_WDAT_WRITE_COUNTDOWN = 3, + ACPI_WDAT_INSTRUCTION_RESERVED = 4, /* 4 and greater are reserved */ + ACPI_WDAT_PRESERVE_REGISTER = 0x80 /* Except for this value */ }; -/* Patrol Scrub Commands */ -enum AcpiRasfPatrolScrubCommands -{ - ACPI_RASF_GET_PATROL_PARAMETERS = 1, - ACPI_RASF_START_PATROL_SCRUBBER = 2, - ACPI_RASF_STOP_PATROL_SCRUBBER = 3 -}; +/******************************************************************************* + * + * WDDT - Watchdog Descriptor Table + * Version 1 + * + * Conforms to "Using the Intel ICH Family Watchdog Timer (WDT)", + * Version 001, September 2002 + * + ******************************************************************************/ -/* Channel Command flags */ +typedef struct acpi_table_wddt +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT16 SpecVersion; + UINT16 TableVersion; + UINT16 PciVendorId; + ACPI_GENERIC_ADDRESS Address; + UINT16 MaxCount; /* Maximum counter value supported */ + UINT16 MinCount; /* Minimum counter value supported */ + UINT16 Period; + UINT16 Status; + UINT16 Capability; -#define ACPI_RASF_GENERATE_SCI (1<<15) +} ACPI_TABLE_WDDT; -/* Status values */ +/* Flags for Status field above */ -enum AcpiRasfStatus -{ - ACPI_RASF_SUCCESS = 0, - ACPI_RASF_NOT_VALID = 1, - ACPI_RASF_NOT_SUPPORTED = 2, - ACPI_RASF_BUSY = 3, - ACPI_RASF_FAILED = 4, - ACPI_RASF_ABORTED = 5, - ACPI_RASF_INVALID_DATA = 6 -}; +#define ACPI_WDDT_AVAILABLE (1) +#define ACPI_WDDT_ACTIVE (1<<1) +#define ACPI_WDDT_TCO_OS_OWNED (1<<2) +#define ACPI_WDDT_USER_RESET (1<<11) +#define ACPI_WDDT_WDT_RESET (1<<12) +#define ACPI_WDDT_POWER_FAIL (1<<13) +#define ACPI_WDDT_UNKNOWN_RESET (1<<14) -/* Status flags */ +/* Flags for Capability field above */ -#define ACPI_RASF_COMMAND_COMPLETE (1) -#define ACPI_RASF_SCI_DOORBELL (1<<1) -#define ACPI_RASF_ERROR (1<<2) -#define ACPI_RASF_STATUS (0x1F<<3) +#define ACPI_WDDT_AUTO_RESET (1) +#define ACPI_WDDT_ALERT_SUPPORT (1<<1) /******************************************************************************* * - * STAO - Status Override Table (_STA override) - ACPI 6.0 + * WDRT - Watchdog Resource Table * Version 1 * - * Conforms to "ACPI Specification for Status Override Table" - * 6 January 2015 + * Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003", + * Version 1.01, August 28, 2006 * ******************************************************************************/ -typedef struct acpi_table_stao +typedef struct acpi_table_wdrt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT8 IgnoreUart; + ACPI_GENERIC_ADDRESS ControlRegister; + ACPI_GENERIC_ADDRESS CountRegister; + UINT16 PciDeviceId; + UINT16 PciVendorId; + UINT8 PciBus; /* PCI Bus number */ + UINT8 PciDevice; /* PCI Device number */ + UINT8 PciFunction; /* PCI Function number */ + UINT8 PciSegment; /* PCI Segment number */ + UINT16 MaxCount; /* Maximum counter value supported */ + UINT8 Units; -} ACPI_TABLE_STAO; +} ACPI_TABLE_WDRT; /******************************************************************************* @@ -1089,6 +857,30 @@ typedef struct acpi_table_wpbt /******************************************************************************* * + * WSMT - Windows SMM Security Migrations Table + * Version 1 + * + * Conforms to "Windows SMM Security Migrations Table", + * Version 1.0, April 18, 2016 + * + ******************************************************************************/ + +typedef struct acpi_table_wsmt +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 ProtectionFlags; + +} ACPI_TABLE_WSMT; + +/* Flags for ProtectionFlags field above */ + +#define ACPI_WSMT_FIXED_COMM_BUFFERS (1) +#define ACPI_WSMT_COMM_BUFFER_NESTED_PTR_PROTECTION (2) +#define ACPI_WSMT_SYSTEM_RESOURCE_PROTECTION (4) + + +/******************************************************************************* + * * XENV - Xen Environment Table (ACPI 6.0) * Version 1 * diff --git a/sys/contrib/dev/acpica/source/include/actypes.h b/sys/contrib/dev/acpica/source/include/actypes.h index 1839f936e4..4d2438c9ec 100644 --- a/sys/contrib/dev/acpica/source/include/actypes.h +++ b/sys/contrib/dev/acpica/source/include/actypes.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -586,6 +586,8 @@ typedef void * ACPI_HANDLE; /* Actually a ptr to a N #define ACPI_NSEC_PER_MSEC 1000000L #define ACPI_NSEC_PER_SEC 1000000000L +#define ACPI_TIME_AFTER(a, b) ((INT64)((b) - (a)) < 0) + /* Owner IDs are used to track namespace nodes for selective deletion */ @@ -603,7 +605,7 @@ typedef UINT8 ACPI_OWNER_ID; /* * Constants with special meanings */ -#define ACPI_ROOT_OBJECT ACPI_ADD_PTR (ACPI_HANDLE, NULL, ACPI_MAX_PTR) +#define ACPI_ROOT_OBJECT ((ACPI_HANDLE) ACPI_TO_POINTER (ACPI_MAX_PTR)) #define ACPI_WAIT_FOREVER 0xFFFF /* UINT16, as per ACPI spec */ #define ACPI_DO_NOT_WAIT 0 @@ -651,13 +653,13 @@ typedef UINT64 ACPI_INTEGER; #define ACPI_CAST_INDIRECT_PTR(t, p) ((t **) (ACPI_UINTPTR_T) (p)) #define ACPI_ADD_PTR(t, a, b) ACPI_CAST_PTR (t, (ACPI_CAST_PTR (UINT8, (a)) + (ACPI_SIZE)(b))) #define ACPI_SUB_PTR(t, a, b) ACPI_CAST_PTR (t, (ACPI_CAST_PTR (UINT8, (a)) - (ACPI_SIZE)(b))) -#define ACPI_PTR_DIFF(a, b) (ACPI_SIZE) (ACPI_CAST_PTR (UINT8, (a)) - ACPI_CAST_PTR (UINT8, (b))) +#define ACPI_PTR_DIFF(a, b) ((ACPI_SIZE) (ACPI_CAST_PTR (UINT8, (a)) - ACPI_CAST_PTR (UINT8, (b)))) /* Pointer/Integer type conversions */ -#define ACPI_TO_POINTER(i) ACPI_ADD_PTR (void, (void *) NULL,(ACPI_SIZE) i) -#define ACPI_TO_INTEGER(p) ACPI_PTR_DIFF (p, (void *) NULL) -#define ACPI_OFFSET(d, f) ACPI_PTR_DIFF (&(((d *) 0)->f), (void *) NULL) +#define ACPI_TO_POINTER(i) ACPI_ADD_PTR (void, (void *) 0, (ACPI_SIZE) (i)) +#define ACPI_TO_INTEGER(p) ACPI_PTR_DIFF (p, (void *) 0) +#define ACPI_OFFSET(d, f) ACPI_PTR_DIFF (&(((d *) 0)->f), (void *) 0) #define ACPI_PHYSADDR_TO_PTR(i) ACPI_TO_POINTER(i) #define ACPI_PTR_TO_PHYSADDR(i) ACPI_TO_INTEGER(i) @@ -691,17 +693,17 @@ typedef UINT64 ACPI_INTEGER; ******************************************************************************/ /* - * Initialization sequence + * Initialization sequence options */ -#define ACPI_FULL_INITIALIZATION 0x00 -#define ACPI_NO_ADDRESS_SPACE_INIT 0x01 -#define ACPI_NO_HARDWARE_INIT 0x02 -#define ACPI_NO_EVENT_INIT 0x04 -#define ACPI_NO_HANDLER_INIT 0x08 -#define ACPI_NO_ACPI_ENABLE 0x10 -#define ACPI_NO_DEVICE_INIT 0x20 -#define ACPI_NO_OBJECT_INIT 0x40 -#define ACPI_NO_FACS_INIT 0x80 +#define ACPI_FULL_INITIALIZATION 0x0000 +#define ACPI_NO_FACS_INIT 0x0001 +#define ACPI_NO_ACPI_ENABLE 0x0002 +#define ACPI_NO_HARDWARE_INIT 0x0004 +#define ACPI_NO_EVENT_INIT 0x0008 +#define ACPI_NO_HANDLER_INIT 0x0010 +#define ACPI_NO_OBJECT_INIT 0x0020 +#define ACPI_NO_DEVICE_INIT 0x0040 +#define ACPI_NO_ADDRESS_SPACE_INIT 0x0080 /* * Initialization state @@ -904,7 +906,7 @@ typedef UINT32 ACPI_EVENT_STATUS; * | | | | +-- Type of dispatch:to method, handler, notify, or none * | | | +----- Interrupt type: edge or level triggered * | | +------- Is a Wake GPE - * | +--------- Is GPE masked by the software GPE masking mechanism + * | +--------- Has been enabled automatically at init time * +------------ */ #define ACPI_GPE_DISPATCH_NONE (UINT8) 0x00 @@ -920,6 +922,8 @@ typedef UINT32 ACPI_EVENT_STATUS; #define ACPI_GPE_XRUPT_TYPE_MASK (UINT8) 0x08 #define ACPI_GPE_CAN_WAKE (UINT8) 0x10 +#define ACPI_GPE_AUTO_ENABLED (UINT8) 0x20 +#define ACPI_GPE_INITIALIZED (UINT8) 0x40 /* * Flags for GPE and Lock interfaces @@ -1386,7 +1390,6 @@ typedef struct acpi_device_info UINT8 Flags; /* Miscellaneous info */ UINT8 HighestDstates[4]; /* _SxD values: 0xFF indicates not valid */ UINT8 LowestDstates[5]; /* _SxW values: 0xFF indicates not valid */ - UINT32 CurrentStatus; /* _STA value */ UINT64 Address; /* _ADR value */ ACPI_PNP_DEVICE_ID HardwareId; /* _HID value */ ACPI_PNP_DEVICE_ID UniqueId; /* _UID value */ @@ -1401,7 +1404,6 @@ typedef struct acpi_device_info /* Flags for Valid field above (AcpiGetObjectInfo) */ -#define ACPI_VALID_STA 0x0001 #define ACPI_VALID_ADR 0x0002 #define ACPI_VALID_HID 0x0004 #define ACPI_VALID_UID 0x0008 @@ -1507,6 +1509,9 @@ typedef enum #define ACPI_OSI_WIN_7 0x0B #define ACPI_OSI_WIN_8 0x0C #define ACPI_OSI_WIN_10 0x0D +#define ACPI_OSI_WIN_10_RS1 0x0E +#define ACPI_OSI_WIN_10_RS2 0x0F +#define ACPI_OSI_WIN_10_RS3 0x10 /* Definitions of getopt */ diff --git a/sys/contrib/dev/acpica/source/include/acutils.h b/sys/contrib/dev/acpica/source/include/acutils.h index b2cdf12b00..b74f302445 100644 --- a/sys/contrib/dev/acpica/source/include/acutils.h +++ b/sys/contrib/dev/acpica/source/include/acutils.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -227,9 +227,6 @@ extern const char *AcpiGbl_PtypDecode[]; #ifndef ACPI_MSG_ERROR #define ACPI_MSG_ERROR "ACPI Error: " #endif -#ifndef ACPI_MSG_EXCEPTION -#define ACPI_MSG_EXCEPTION "ACPI Exception: " -#endif #ifndef ACPI_MSG_WARNING #define ACPI_MSG_WARNING "ACPI Warning: " #endif @@ -238,10 +235,10 @@ extern const char *AcpiGbl_PtypDecode[]; #endif #ifndef ACPI_MSG_BIOS_ERROR -#define ACPI_MSG_BIOS_ERROR "ACPI BIOS Error (bug): " +#define ACPI_MSG_BIOS_ERROR "Firmware Error (ACPI): " #endif #ifndef ACPI_MSG_BIOS_WARNING -#define ACPI_MSG_BIOS_WARNING "ACPI BIOS Warning (bug): " +#define ACPI_MSG_BIOS_WARNING "Firmware Warning (ACPI): " #endif /* @@ -394,12 +391,12 @@ ACPI_STATUS AcpiUtInitGlobals ( void); -#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) - const char * AcpiUtGetMutexName ( UINT32 MutexId); +#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) + const char * AcpiUtGetNotifyName ( UINT32 NotifyValue, @@ -1055,13 +1052,19 @@ void AcpiUtRepairName ( char *Name); -#if defined (ACPI_DEBUGGER) || defined (ACPI_APPLICATION) +#if defined (ACPI_DEBUGGER) || defined (ACPI_APPLICATION) || defined (ACPI_DEBUG_OUTPUT) BOOLEAN AcpiUtSafeStrcpy ( char *Dest, ACPI_SIZE DestSize, char *Source); +void +AcpiUtSafeStrncpy ( + char *Dest, + char *Source, + ACPI_SIZE DestSize); + BOOLEAN AcpiUtSafeStrcat ( char *Dest, @@ -1215,9 +1218,10 @@ AcpiUtPredefinedBiosError ( ...); void -AcpiUtNamespaceError ( +AcpiUtPrefixedNamespaceError ( const char *ModuleName, UINT32 LineNumber, + ACPI_GENERIC_STATE *PrefixScope, const char *InternalName, ACPI_STATUS LookupStatus); diff --git a/sys/contrib/dev/acpica/source/include/acuuid.h b/sys/contrib/dev/acpica/source/include/acuuid.h index ff0f012631..9b8ba69a75 100644 --- a/sys/contrib/dev/acpica/source/include/acuuid.h +++ b/sys/contrib/dev/acpica/source/include/acuuid.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/amlcode.h b/sys/contrib/dev/acpica/source/include/amlcode.h index 9236eedbb0..6507ae677f 100644 --- a/sys/contrib/dev/acpica/source/include/amlcode.h +++ b/sys/contrib/dev/acpica/source/include/amlcode.h @@ -10,7 +10,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -386,24 +386,9 @@ #define ARGI_DEVICE_REF 0x0D #define ARGI_REFERENCE 0x0E #define ARGI_TARGETREF 0x0F /* Target, subject to implicit conversion */ -#define ARGI_SIMPLE_TARGET 0x10 /* Name, Local, Arg -- no implicit conversion */ -#define ARGI_STORE_TARGET 0x11 /* Target for store is TARGETREF + package objects */ -/* - * #define ARGI_FIXED_TARGET 0x10 Target, no implicit conversion - * - * Removed 10/2016. ARGI_FIXED_TARGET was used for these operators: - * FromBCD - * ToBCD - * ToDecimalString - * ToHexString - * ToInteger - * ToBuffer - * The purpose of this type was to disable "implicit result conversion", - * but this was incorrect per the ACPI spec and other ACPI implementations. - * These operators now have the target operand defined as a normal - * ARGI_TARGETREF. - */ - +#define ARGI_FIXED_TARGET 0x10 /* Target, no implicit conversion */ +#define ARGI_SIMPLE_TARGET 0x11 /* Name, Local, Arg -- no implicit conversion */ +#define ARGI_STORE_TARGET 0x12 /* Target for store is TARGETREF + package objects */ /* Multiple/complex types */ diff --git a/sys/contrib/dev/acpica/source/include/amlresrc.h b/sys/contrib/dev/acpica/source/include/amlresrc.h index 5f0bcc4bf5..e9ee7945dc 100644 --- a/sys/contrib/dev/acpica/source/include/amlresrc.h +++ b/sys/contrib/dev/acpica/source/include/amlresrc.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/platform/accygwin.h b/sys/contrib/dev/acpica/source/include/platform/accygwin.h index 2921c34365..19f486e316 100644 --- a/sys/contrib/dev/acpica/source/include/platform/accygwin.h +++ b/sys/contrib/dev/acpica/source/include/platform/accygwin.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/platform/acdragonflyex.h b/sys/contrib/dev/acpica/source/include/platform/acdragonflyex.h index fc1ff82994..5538db2433 100644 --- a/sys/contrib/dev/acpica/source/include/platform/acdragonflyex.h +++ b/sys/contrib/dev/acpica/source/include/platform/acdragonflyex.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/platform/acefi.h b/sys/contrib/dev/acpica/source/include/platform/acefi.h index 6487303773..454dba7a18 100644 --- a/sys/contrib/dev/acpica/source/include/platform/acefi.h +++ b/sys/contrib/dev/acpica/source/include/platform/acefi.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/platform/acefiex.h b/sys/contrib/dev/acpica/source/include/platform/acefiex.h index a392fd269f..377e9bb532 100644 --- a/sys/contrib/dev/acpica/source/include/platform/acefiex.h +++ b/sys/contrib/dev/acpica/source/include/platform/acefiex.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/platform/acenv.h b/sys/contrib/dev/acpica/source/include/platform/acenv.h index df4048e004..92a8530b3c 100644 --- a/sys/contrib/dev/acpica/source/include/platform/acenv.h +++ b/sys/contrib/dev/acpica/source/include/platform/acenv.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/platform/acenvex.h b/sys/contrib/dev/acpica/source/include/platform/acenvex.h index 25b644d5fe..65573d7a19 100644 --- a/sys/contrib/dev/acpica/source/include/platform/acenvex.h +++ b/sys/contrib/dev/acpica/source/include/platform/acenvex.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/platform/acfreebsd.h b/sys/contrib/dev/acpica/source/include/platform/acfreebsd.h index dc8aaa053f..905dffb7a4 100644 --- a/sys/contrib/dev/acpica/source/include/platform/acfreebsd.h +++ b/sys/contrib/dev/acpica/source/include/platform/acfreebsd.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/platform/acgcc.h b/sys/contrib/dev/acpica/source/include/platform/acgcc.h index 74c7108b4d..7de4a665a7 100644 --- a/sys/contrib/dev/acpica/source/include/platform/acgcc.h +++ b/sys/contrib/dev/acpica/source/include/platform/acgcc.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/platform/acgccex.h b/sys/contrib/dev/acpica/source/include/platform/acgccex.h index 0a7b51cc16..f262c72231 100644 --- a/sys/contrib/dev/acpica/source/include/platform/acgccex.h +++ b/sys/contrib/dev/acpica/source/include/platform/acgccex.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/platform/achaiku.h b/sys/contrib/dev/acpica/source/include/platform/achaiku.h index 0b948f0297..b524180fa0 100644 --- a/sys/contrib/dev/acpica/source/include/platform/achaiku.h +++ b/sys/contrib/dev/acpica/source/include/platform/achaiku.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/platform/acintel.h b/sys/contrib/dev/acpica/source/include/platform/acintel.h index 95cde1ff72..9fd28982c0 100644 --- a/sys/contrib/dev/acpica/source/include/platform/acintel.h +++ b/sys/contrib/dev/acpica/source/include/platform/acintel.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/platform/aclinux.h b/sys/contrib/dev/acpica/source/include/platform/aclinux.h index 75b1d827bc..4ab5308ccc 100644 --- a/sys/contrib/dev/acpica/source/include/platform/aclinux.h +++ b/sys/contrib/dev/acpica/source/include/platform/aclinux.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -166,11 +166,13 @@ #define ACPI_USE_SYSTEM_CLIBRARY #define ACPI_USE_DO_WHILE_0 +#define ACPI_IGNORE_PACKAGE_RESOLUTION_ERRORS #ifdef __KERNEL__ #define ACPI_USE_SYSTEM_INTTYPES +#define ACPI_USE_GPE_POLLING /* Kernel specific ACPICA configuration */ @@ -315,7 +317,7 @@ #define ACPI_FLUSH_CPU_CACHE() #define ACPI_CAST_PTHREAD_T(Pthread) ((ACPI_THREAD_ID) (Pthread)) -#if defined(__ia64__) || defined(__x86_64__) ||\ +#if defined(__ia64__) || (defined(__x86_64__) && !defined(__ILP32__)) ||\ defined(__aarch64__) || defined(__PPC64__) ||\ defined(__s390x__) #define ACPI_MACHINE_WIDTH 64 diff --git a/sys/contrib/dev/acpica/source/include/platform/aclinuxex.h b/sys/contrib/dev/acpica/source/include/platform/aclinuxex.h index 93b12f699f..c9a45ca8df 100644 --- a/sys/contrib/dev/acpica/source/include/platform/aclinuxex.h +++ b/sys/contrib/dev/acpica/source/include/platform/aclinuxex.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/platform/acmacosx.h b/sys/contrib/dev/acpica/source/include/platform/acmacosx.h index 8eedc1a12d..89d4fa80bc 100644 --- a/sys/contrib/dev/acpica/source/include/platform/acmacosx.h +++ b/sys/contrib/dev/acpica/source/include/platform/acmacosx.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/platform/acmsvc.h b/sys/contrib/dev/acpica/source/include/platform/acmsvc.h index 315456be43..fc8b1d2d64 100644 --- a/sys/contrib/dev/acpica/source/include/platform/acmsvc.h +++ b/sys/contrib/dev/acpica/source/include/platform/acmsvc.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/platform/acmsvcex.h b/sys/contrib/dev/acpica/source/include/platform/acmsvcex.h index 282f893b14..8db63ab036 100644 --- a/sys/contrib/dev/acpica/source/include/platform/acmsvcex.h +++ b/sys/contrib/dev/acpica/source/include/platform/acmsvcex.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/platform/acnetbsd.h b/sys/contrib/dev/acpica/source/include/platform/acnetbsd.h index 893d12ff02..53cf93dcd6 100644 --- a/sys/contrib/dev/acpica/source/include/platform/acnetbsd.h +++ b/sys/contrib/dev/acpica/source/include/platform/acnetbsd.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/platform/acos2.h b/sys/contrib/dev/acpica/source/include/platform/acos2.h index f291037388..72043fe0ad 100644 --- a/sys/contrib/dev/acpica/source/include/platform/acos2.h +++ b/sys/contrib/dev/acpica/source/include/platform/acos2.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/platform/acqnx.h b/sys/contrib/dev/acpica/source/include/platform/acqnx.h index a40286e0be..eb4d4cb28d 100644 --- a/sys/contrib/dev/acpica/source/include/platform/acqnx.h +++ b/sys/contrib/dev/acpica/source/include/platform/acqnx.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/platform/acwin.h b/sys/contrib/dev/acpica/source/include/platform/acwin.h index c39eeec65d..4da25c166a 100644 --- a/sys/contrib/dev/acpica/source/include/platform/acwin.h +++ b/sys/contrib/dev/acpica/source/include/platform/acwin.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/include/platform/acwin64.h b/sys/contrib/dev/acpica/source/include/platform/acwin64.h index f7a5906782..a91cac50e5 100644 --- a/sys/contrib/dev/acpica/source/include/platform/acwin64.h +++ b/sys/contrib/dev/acpica/source/include/platform/acwin64.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/os_specific/service_layers/osbsdtbl.c b/sys/contrib/dev/acpica/source/os_specific/service_layers/osbsdtbl.c index 33f8f4f48f..18a07c9f85 100644 --- a/sys/contrib/dev/acpica/source/os_specific/service_layers/osbsdtbl.c +++ b/sys/contrib/dev/acpica/source/os_specific/service_layers/osbsdtbl.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/os_specific/service_layers/osgendbg.c b/sys/contrib/dev/acpica/source/os_specific/service_layers/osgendbg.c index 504874bfc2..581cee33ff 100644 --- a/sys/contrib/dev/acpica/source/os_specific/service_layers/osgendbg.c +++ b/sys/contrib/dev/acpica/source/os_specific/service_layers/osgendbg.c @@ -1,6 +1,6 @@ /****************************************************************************** * - * Module Name: osgendbg - Generic debugger command singalling + * Module Name: osgendbg - Generic debugger command signalling * *****************************************************************************/ @@ -169,6 +169,7 @@ static ACPI_MUTEX AcpiGbl_DbCommandReady; static ACPI_MUTEX AcpiGbl_DbCommandComplete; static BOOLEAN AcpiGbl_DbCommandSignalsInitialized = FALSE; + /****************************************************************************** * * FUNCTION: AcpiDbRunRemoteDebugger @@ -213,7 +214,7 @@ AcpiDbRunRemoteDebugger ( Ptr++; } - strncpy (AcpiGbl_DbLineBuf, Cmd, ACPI_DB_LINE_BUFFER_SIZE); + AcpiUtSafeStrncpy (AcpiGbl_DbLineBuf, Cmd, ACPI_DB_LINE_BUFFER_SIZE); Ptr++; Cmd = Ptr; } diff --git a/sys/contrib/dev/acpica/source/os_specific/service_layers/oslinuxtbl.c b/sys/contrib/dev/acpica/source/os_specific/service_layers/oslinuxtbl.c index c36ea69514..67f0ea248b 100644 --- a/sys/contrib/dev/acpica/source/os_specific/service_layers/oslinuxtbl.c +++ b/sys/contrib/dev/acpica/source/os_specific/service_layers/oslinuxtbl.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/os_specific/service_layers/osunixdir.c b/sys/contrib/dev/acpica/source/os_specific/service_layers/osunixdir.c index 6f11d431d8..34aa200531 100644 --- a/sys/contrib/dev/acpica/source/os_specific/service_layers/osunixdir.c +++ b/sys/contrib/dev/acpica/source/os_specific/service_layers/osunixdir.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/os_specific/service_layers/osunixmap.c b/sys/contrib/dev/acpica/source/os_specific/service_layers/osunixmap.c index 78dcf6b749..75ab44a66c 100644 --- a/sys/contrib/dev/acpica/source/os_specific/service_layers/osunixmap.c +++ b/sys/contrib/dev/acpica/source/os_specific/service_layers/osunixmap.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/os_specific/service_layers/osunixxf.c b/sys/contrib/dev/acpica/source/os_specific/service_layers/osunixxf.c index 73e45e8777..805931595b 100644 --- a/sys/contrib/dev/acpica/source/os_specific/service_layers/osunixxf.c +++ b/sys/contrib/dev/acpica/source/os_specific/service_layers/osunixxf.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/os_specific/service_layers/oswindir.c b/sys/contrib/dev/acpica/source/os_specific/service_layers/oswindir.c index 793196b877..0d14074362 100644 --- a/sys/contrib/dev/acpica/source/os_specific/service_layers/oswindir.c +++ b/sys/contrib/dev/acpica/source/os_specific/service_layers/oswindir.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/os_specific/service_layers/oswintbl.c b/sys/contrib/dev/acpica/source/os_specific/service_layers/oswintbl.c index ef10b41260..d3fdb73697 100644 --- a/sys/contrib/dev/acpica/source/os_specific/service_layers/oswintbl.c +++ b/sys/contrib/dev/acpica/source/os_specific/service_layers/oswintbl.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/os_specific/service_layers/oswinxf.c b/sys/contrib/dev/acpica/source/os_specific/service_layers/oswinxf.c index c6336a0f09..8d5fdcb63b 100644 --- a/sys/contrib/dev/acpica/source/os_specific/service_layers/oswinxf.c +++ b/sys/contrib/dev/acpica/source/os_specific/service_layers/oswinxf.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/tools/acpibin/abcompare.c b/sys/contrib/dev/acpica/source/tools/acpibin/abcompare.c index 735be3feb6..740d995fc2 100644 --- a/sys/contrib/dev/acpica/source/tools/acpibin/abcompare.c +++ b/sys/contrib/dev/acpica/source/tools/acpibin/abcompare.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/tools/acpibin/abmain.c b/sys/contrib/dev/acpica/source/tools/acpibin/abmain.c index a3e0ba89bf..1cf18c6876 100644 --- a/sys/contrib/dev/acpica/source/tools/acpibin/abmain.c +++ b/sys/contrib/dev/acpica/source/tools/acpibin/abmain.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -160,7 +160,7 @@ AbDisplayUsage ( #define AB_UTILITY_NAME "ACPI Binary Table Dump Utility" -#define AB_SUPPORTED_OPTIONS "a:c:d:h:o:s:tv" +#define AB_SUPPORTED_OPTIONS "a:c:d:h:o:s:tv^" /****************************************************************************** @@ -186,12 +186,12 @@ AbDisplayUsage ( ACPI_OPTION ("-a ", "Compare two binary AML files, dump all mismatches"); ACPI_OPTION ("-c ", "Compare two binary AML files, dump first 100 mismatches"); ACPI_OPTION ("-d ", "Dump AML binary to text file"); - ACPI_OPTION ("-e ", "Extract binary AML table from acpidump file"); ACPI_OPTION ("-o ", "Start comparison at this offset into second file"); ACPI_OPTION ("-h ", "Display table header for binary AML file"); ACPI_OPTION ("-s ", "Update checksum for binary AML file"); ACPI_OPTION ("-t", "Terse mode"); ACPI_OPTION ("-v", "Display version information"); + ACPI_OPTION ("-vd", "Display build date and time"); } @@ -292,7 +292,23 @@ main ( case 'v': /* -v: (Version): signon already emitted, just exit */ - return (0); + switch (AcpiGbl_Optarg[0]) + { + case '^': /* -v: (Version): signon already emitted, just exit */ + + return (1); + + case 'd': + + printf (ACPI_COMMON_BUILD_TIME); + return (1); + + default: + + printf ("Unknown option: -v%s\n", AcpiGbl_Optarg); + return (-1); + } + break; default: diff --git a/sys/contrib/dev/acpica/source/tools/acpibin/acpibin.h b/sys/contrib/dev/acpica/source/tools/acpibin/acpibin.h index f106349021..f07cabb223 100644 --- a/sys/contrib/dev/acpica/source/tools/acpibin/acpibin.h +++ b/sys/contrib/dev/acpica/source/tools/acpibin/acpibin.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/tools/acpidump/acpidump.h b/sys/contrib/dev/acpica/source/tools/acpidump/acpidump.h index 672e51e534..a02e7dc36b 100644 --- a/sys/contrib/dev/acpica/source/tools/acpidump/acpidump.h +++ b/sys/contrib/dev/acpica/source/tools/acpidump/acpidump.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/tools/acpidump/apdump.c b/sys/contrib/dev/acpica/source/tools/acpidump/apdump.c index cd83dcc4c5..8ed4924d99 100644 --- a/sys/contrib/dev/acpica/source/tools/acpidump/apdump.c +++ b/sys/contrib/dev/acpica/source/tools/acpidump/apdump.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/tools/acpidump/apfiles.c b/sys/contrib/dev/acpica/source/tools/acpidump/apfiles.c index 70b73d2064..3c4a69cd73 100644 --- a/sys/contrib/dev/acpica/source/tools/acpidump/apfiles.c +++ b/sys/contrib/dev/acpica/source/tools/acpidump/apfiles.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/tools/acpidump/apmain.c b/sys/contrib/dev/acpica/source/tools/acpidump/apmain.c index 99962797d7..55003af5f9 100644 --- a/sys/contrib/dev/acpica/source/tools/acpidump/apmain.c +++ b/sys/contrib/dev/acpica/source/tools/acpidump/apmain.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -199,7 +199,7 @@ UINT32 CurrentAction = 0; #define AP_UTILITY_NAME "ACPI Binary Table Dump Utility" -#define AP_SUPPORTED_OPTIONS "?a:bc:f:hn:o:r:svxz" +#define AP_SUPPORTED_OPTIONS "?a:bc:f:hn:o:r:sv^xz" /****************************************************************************** @@ -223,6 +223,7 @@ ApDisplayUsage ( ACPI_OPTION ("-r
", "Dump tables from specified RSDP"); ACPI_OPTION ("-s", "Print table summaries only"); ACPI_OPTION ("-v", "Display version information"); + ACPI_OPTION ("-vd", "Display build date and time"); ACPI_OPTION ("-z", "Verbose mode"); ACPI_USAGE_TEXT ("\nTable Options:\n"); @@ -369,10 +370,27 @@ ApDoOptions ( } continue; - case 'v': /* Revision/version */ + case 'v': /* -v: (Version): signon already emitted, just exit */ - AcpiOsPrintf (ACPI_COMMON_SIGNON (AP_UTILITY_NAME)); - return (1); + switch (AcpiGbl_Optarg[0]) + { + case '^': /* -v: (Version) */ + + fprintf (stderr, ACPI_COMMON_SIGNON (AP_UTILITY_NAME)); + return (1); + + case 'd': + + fprintf (stderr, ACPI_COMMON_SIGNON (AP_UTILITY_NAME)); + printf (ACPI_COMMON_BUILD_TIME); + return (1); + + default: + + printf ("Unknown option: -v%s\n", AcpiGbl_Optarg); + return (-1); + } + break; case 'z': /* Verbose mode */ diff --git a/sys/contrib/dev/acpica/source/tools/acpiexec/aecommon.h b/sys/contrib/dev/acpica/source/tools/acpiexec/aecommon.h index b4864610a6..49a386be50 100644 --- a/sys/contrib/dev/acpica/source/tools/acpiexec/aecommon.h +++ b/sys/contrib/dev/acpica/source/tools/acpiexec/aecommon.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -189,7 +189,9 @@ typedef struct ae_debug_regions } AE_DEBUG_REGIONS; +extern BOOLEAN AcpiGbl_UseLocalFaultHandler; extern BOOLEAN AcpiGbl_IgnoreErrors; +extern BOOLEAN AcpiGbl_AbortLoopOnTimeout; extern UINT8 AcpiGbl_RegionFillValue; extern UINT8 AcpiGbl_UseHwReducedFadt; extern BOOLEAN AcpiGbl_DisplayRegionAccess; @@ -198,6 +200,10 @@ extern BOOLEAN AcpiGbl_LoadTestTables; extern FILE *AcpiGbl_NamespaceInitFile; extern ACPI_CONNECTION_INFO AeMyContext; +extern UINT8 Ssdt2Code[]; +extern UINT8 Ssdt3Code[]; +extern UINT8 Ssdt4Code[]; + #define TEST_OUTPUT_LEVEL(lvl) if ((lvl) & OutputLevel) @@ -263,18 +269,14 @@ ACPI_STATUS AeDisplayAllMethods ( UINT32 DisplayCount); -ACPI_STATUS -AeInstallEarlyHandlers ( - void); - -ACPI_STATUS -AeInstallLateHandlers ( - void); +/* aetests */ void AeMiscellaneousTests ( void); +/* aeregion */ + ACPI_STATUS AeRegionHandler ( UINT32 Function, @@ -284,6 +286,30 @@ AeRegionHandler ( void *HandlerContext, void *RegionContext); +/* aeinstall */ + +ACPI_STATUS +AeInstallDeviceHandlers ( + void); + +void +AeInstallRegionHandlers ( + void); + +void +AeOverrideRegionHandlers ( + void); + +/* aehandlers */ + +ACPI_STATUS +AeInstallEarlyHandlers ( + void); + +ACPI_STATUS +AeInstallLateHandlers ( + void); + UINT32 AeGpeHandler ( ACPI_HANDLE GpeDevice, @@ -297,29 +323,50 @@ AeGlobalEventHandler ( UINT32 EventNumber, void *Context); -/* aeregion */ +/* aeinitfile */ -ACPI_STATUS -AeInstallDeviceHandlers ( +int +AeOpenInitializationFile ( + char *Filename); + +void +AeDoObjectOverrides ( void); +ACPI_STATUS +AeSetupConfiguration ( + void *RegionAddr); + +/* aeexec */ + void -AeInstallRegionHandlers ( +AeTestBufferArgument ( void); void -AeOverrideRegionHandlers ( +AeTestPackageArgument ( void); +ACPI_STATUS +AeGetDevices ( + ACPI_HANDLE ObjHandle, + UINT32 NestingLevel, + void *Context, + void **ReturnValue); -/* aeinitfile */ +ACPI_STATUS +ExecuteOSI ( + char *OsiString, + UINT64 ExpectedResult); -int -AeOpenInitializationFile ( - char *Filename); +void +AeGenericRegisters ( + void); +#if (!ACPI_REDUCED_HARDWARE) void -AeDoObjectOverrides ( +AfInstallGpeBlock ( void); +#endif /* !ACPI_REDUCED_HARDWARE */ #endif /* _AECOMMON */ diff --git a/sys/contrib/dev/acpica/source/tools/acpiexec/aeexception.c b/sys/contrib/dev/acpica/source/tools/acpiexec/aeexception.c index 62e9db0a01..2f5bfb22d3 100644 --- a/sys/contrib/dev/acpica/source/tools/acpiexec/aeexception.c +++ b/sys/contrib/dev/acpica/source/tools/acpiexec/aeexception.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -196,11 +196,27 @@ AeExceptionHandler ( Exception = AcpiFormatException (AmlStatus); AcpiOsPrintf (AE_PREFIX "Exception %s during execution\n", Exception); + if (Name) { - AcpiOsPrintf (AE_PREFIX - "Evaluating Method or Node: [%4.4s]", - (char *) &Name); + if (ACPI_COMPARE_NAME (&Name, ACPI_ROOT_PATHNAME)) + { + AcpiOsPrintf (AE_PREFIX + "Evaluating executable code at [%s]\n", ACPI_NAMESPACE_ROOT); + } + else + { + AcpiOsPrintf (AE_PREFIX + "Evaluating Method or Node: [%4.4s]\n", (char *) &Name); + } + } + + /* Be terse about loop timeouts */ + + if ((AmlStatus == AE_AML_LOOP_TIMEOUT) && AcpiGbl_AbortLoopOnTimeout) + { + AcpiOsPrintf (AE_PREFIX "Aborting loop after timeout\n"); + return (AE_OK); } AcpiOsPrintf ("\n" AE_PREFIX diff --git a/sys/contrib/dev/acpica/source/tools/acpiexec/aeexec.c b/sys/contrib/dev/acpica/source/tools/acpiexec/aeexec.c index 2594f7d00a..96724d17e3 100644 --- a/sys/contrib/dev/acpica/source/tools/acpiexec/aeexec.c +++ b/sys/contrib/dev/acpica/source/tools/acpiexec/aeexec.c @@ -1,6 +1,7 @@ /****************************************************************************** * - * Module Name: aeexec - Support routines for AcpiExec utility + * Module Name: aeexec - Argument testing for control method execution. + * Also some other miscellaneous tests. * *****************************************************************************/ @@ -8,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -154,58 +155,6 @@ #define _COMPONENT ACPI_TOOLS ACPI_MODULE_NAME ("aeexec") -/* Local prototypes */ - -static ACPI_STATUS -AeSetupConfiguration ( - void *RegionAddr); - -static void -AeTestBufferArgument ( - void); - -static void -AeTestPackageArgument ( - void); - -static ACPI_STATUS -AeGetDevices ( - ACPI_HANDLE ObjHandle, - UINT32 NestingLevel, - void *Context, - void **ReturnValue); - -static ACPI_STATUS -ExecuteOSI ( - char *OsiString, - UINT64 ExpectedResult); - -static void -AeMutexInterfaces ( - void); - -static void -AeHardwareInterfaces ( - void); - -static void -AeGenericRegisters ( - void); - -static void -AeTestSleepData ( - void); - -#if (!ACPI_REDUCED_HARDWARE) -static void -AfInstallGpeBlock ( - void); -#endif /* !ACPI_REDUCED_HARDWARE */ - -extern unsigned char Ssdt2Code[]; -extern unsigned char Ssdt3Code[]; -extern unsigned char Ssdt4Code[]; - /****************************************************************************** * @@ -220,7 +169,7 @@ extern unsigned char Ssdt4Code[]; * *****************************************************************************/ -static ACPI_STATUS +ACPI_STATUS AeSetupConfiguration ( void *RegionAddr) { @@ -256,7 +205,7 @@ AeSetupConfiguration ( * *****************************************************************************/ -static void +void AfInstallGpeBlock ( void) { @@ -337,9 +286,15 @@ AfInstallGpeBlock ( #endif /* !ACPI_REDUCED_HARDWARE */ -/* Test using a Buffer object as a method argument */ +/****************************************************************************** + * + * FUNCTION: AeTestBufferArgument + * + * DESCRIPTION: Test using a Buffer object as a method argument + * + *****************************************************************************/ -static void +void AeTestBufferArgument ( void) { @@ -369,11 +324,15 @@ static ACPI_OBJECT PkgElements[5]; static ACPI_OBJECT Pkg2Elements[5]; static ACPI_OBJECT_LIST Params; +/****************************************************************************** + * + * FUNCTION: AeTestPackageArgument + * + * DESCRIPTION: Test using a Package object as a method argument + * + *****************************************************************************/ -/* - * Test using a Package object as an method argument - */ -static void +void AeTestPackageArgument ( void) { @@ -419,7 +378,15 @@ AeTestPackageArgument ( } -static ACPI_STATUS +/****************************************************************************** + * + * FUNCTION: AeGetDevices + * + * DESCRIPTION: Stubbed at this time. + * + *****************************************************************************/ + +ACPI_STATUS AeGetDevices ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, @@ -444,7 +411,7 @@ AeGetDevices ( * *****************************************************************************/ -static ACPI_STATUS +ACPI_STATUS ExecuteOSI ( char *OsiString, UINT64 ExpectedResult) @@ -531,7 +498,7 @@ ErrorExit: static ACPI_GENERIC_ADDRESS GenericRegister; -static void +void AeGenericRegisters ( void) { @@ -560,418 +527,3 @@ AeGenericRegisters ( Status = AcpiWrite (Value, &GenericRegister); ACPI_CHECK_OK (AcpiWrite, Status); } - - -/****************************************************************************** - * - * FUNCTION: AeMutexInterfaces - * - * DESCRIPTION: Exercise the AML mutex access interfaces - * - *****************************************************************************/ - -static void -AeMutexInterfaces ( - void) -{ - ACPI_STATUS Status; - ACPI_HANDLE MutexHandle; - - - /* Get a handle to an AML mutex */ - - Status = AcpiGetHandle (NULL, "\\MTX1", &MutexHandle); - if (Status == AE_NOT_FOUND) - { - return; - } - - ACPI_CHECK_OK (AcpiGetHandle, Status); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Acquire the mutex */ - - Status = AcpiAcquireMutex (NULL, "\\MTX1", 0xFFFF); - ACPI_CHECK_OK (AcpiAcquireMutex, Status); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Release mutex with different parameters */ - - Status = AcpiReleaseMutex (MutexHandle, NULL); - ACPI_CHECK_OK (AcpiReleaseMutex, Status); -} - - -/****************************************************************************** - * - * FUNCTION: AeHardwareInterfaces - * - * DESCRIPTION: Call various hardware support interfaces - * - *****************************************************************************/ - -static void -AeHardwareInterfaces ( - void) -{ -#if (!ACPI_REDUCED_HARDWARE) - - ACPI_STATUS Status; - UINT32 Value; - - - /* If Hardware Reduced flag is set, we are all done */ - - if (AcpiGbl_ReducedHardware) - { - return; - } - - Status = AcpiWriteBitRegister (ACPI_BITREG_WAKE_STATUS, 1); - ACPI_CHECK_OK (AcpiWriteBitRegister, Status); - - Status = AcpiWriteBitRegister (ACPI_BITREG_GLOBAL_LOCK_ENABLE, 1); - ACPI_CHECK_OK (AcpiWriteBitRegister, Status); - - Status = AcpiWriteBitRegister (ACPI_BITREG_SLEEP_ENABLE, 1); - ACPI_CHECK_OK (AcpiWriteBitRegister, Status); - - Status = AcpiWriteBitRegister (ACPI_BITREG_ARB_DISABLE, 1); - ACPI_CHECK_OK (AcpiWriteBitRegister, Status); - - - Status = AcpiReadBitRegister (ACPI_BITREG_WAKE_STATUS, &Value); - ACPI_CHECK_OK (AcpiReadBitRegister, Status); - - Status = AcpiReadBitRegister (ACPI_BITREG_GLOBAL_LOCK_ENABLE, &Value); - ACPI_CHECK_OK (AcpiReadBitRegister, Status); - - Status = AcpiReadBitRegister (ACPI_BITREG_SLEEP_ENABLE, &Value); - ACPI_CHECK_OK (AcpiReadBitRegister, Status); - - Status = AcpiReadBitRegister (ACPI_BITREG_ARB_DISABLE, &Value); - ACPI_CHECK_OK (AcpiReadBitRegister, Status); - -#endif /* !ACPI_REDUCED_HARDWARE */ -} - - -/****************************************************************************** - * - * FUNCTION: AeTestSleepData - * - * DESCRIPTION: Exercise the sleep/wake support (_S0, _S1, etc.) - * - *****************************************************************************/ - -static void -AeTestSleepData ( - void) -{ - int State; - UINT8 TypeA; - UINT8 TypeB; - ACPI_STATUS Status; - - - /* Attempt to get sleep data for all known sleep states */ - - for (State = ACPI_STATE_S0; State <= ACPI_S_STATES_MAX; State++) - { - Status = AcpiGetSleepTypeData ((UINT8) State, &TypeA, &TypeB); - - /* All sleep methods are optional */ - - if (Status != AE_NOT_FOUND) - { - ACPI_CHECK_OK (AcpiGetSleepTypeData, Status); - } - } -} - - -/****************************************************************************** - * - * FUNCTION: AeMiscellaneousTests - * - * DESCRIPTION: Various ACPICA validation tests. - * - *****************************************************************************/ - -void -AeMiscellaneousTests ( - void) -{ - ACPI_BUFFER ReturnBuf; - char Buffer[32]; - ACPI_STATUS Status; - ACPI_STATISTICS Stats; - ACPI_HANDLE Handle; - -#if (!ACPI_REDUCED_HARDWARE) - UINT32 LockHandle1; - UINT32 LockHandle2; - ACPI_VENDOR_UUID Uuid = - {0, {ACPI_INIT_UUID (0,0,0,0,0,0,0,0,0,0,0)}}; -#endif /* !ACPI_REDUCED_HARDWARE */ - - - Status = AcpiGetHandle (NULL, "\\", &Handle); - ACPI_CHECK_OK (AcpiGetHandle, Status); - - if (AcpiGbl_DoInterfaceTests) - { - /* - * Tests for AcpiLoadTable and AcpiUnloadParentTable - */ - - /* Attempt unload of DSDT, should fail */ - - Status = AcpiGetHandle (NULL, "\\_SB_", &Handle); - ACPI_CHECK_OK (AcpiGetHandle, Status); - - Status = AcpiUnloadParentTable (Handle); - ACPI_CHECK_STATUS (AcpiUnloadParentTable, Status, AE_TYPE); - - /* Load and unload SSDT4 */ - - Status = AcpiLoadTable ((ACPI_TABLE_HEADER *) Ssdt4Code); - ACPI_CHECK_OK (AcpiLoadTable, Status); - - Status = AcpiGetHandle (NULL, "\\_T96", &Handle); - ACPI_CHECK_OK (AcpiGetHandle, Status); - - Status = AcpiUnloadParentTable (Handle); - ACPI_CHECK_OK (AcpiUnloadParentTable, Status); - - /* Re-load SSDT4 */ - - Status = AcpiLoadTable ((ACPI_TABLE_HEADER *) Ssdt4Code); - ACPI_CHECK_OK (AcpiLoadTable, Status); - - /* Unload and re-load SSDT2 (SSDT2 is in the XSDT) */ - - Status = AcpiGetHandle (NULL, "\\_T99", &Handle); - ACPI_CHECK_OK (AcpiGetHandle, Status); - - Status = AcpiUnloadParentTable (Handle); - ACPI_CHECK_OK (AcpiUnloadParentTable, Status); - - Status = AcpiLoadTable ((ACPI_TABLE_HEADER *) Ssdt2Code); - ACPI_CHECK_OK (AcpiLoadTable, Status); - - /* Load OEM9 table (causes table override) */ - - Status = AcpiLoadTable ((ACPI_TABLE_HEADER *) Ssdt3Code); - ACPI_CHECK_OK (AcpiLoadTable, Status); - } - - AeHardwareInterfaces (); - AeGenericRegisters (); - AeSetupConfiguration (Ssdt3Code); - - AeTestBufferArgument(); - AeTestPackageArgument (); - AeMutexInterfaces (); - AeTestSleepData (); - - /* Test _OSI install/remove */ - - Status = AcpiInstallInterface (""); - ACPI_CHECK_STATUS (AcpiInstallInterface, Status, AE_BAD_PARAMETER); - - Status = AcpiInstallInterface ("TestString"); - ACPI_CHECK_OK (AcpiInstallInterface, Status); - - Status = AcpiInstallInterface ("TestString"); - ACPI_CHECK_STATUS (AcpiInstallInterface, Status, AE_ALREADY_EXISTS); - - Status = AcpiRemoveInterface ("Windows 2006"); - ACPI_CHECK_OK (AcpiRemoveInterface, Status); - - Status = AcpiRemoveInterface ("TestString"); - ACPI_CHECK_OK (AcpiRemoveInterface, Status); - - Status = AcpiRemoveInterface ("XXXXXX"); - ACPI_CHECK_STATUS (AcpiRemoveInterface, Status, AE_NOT_EXIST); - - Status = AcpiInstallInterface ("AnotherTestString"); - ACPI_CHECK_OK (AcpiInstallInterface, Status); - - /* Test _OSI execution */ - - Status = ExecuteOSI ("Extended Address Space Descriptor", ACPI_UINT64_MAX); - ACPI_CHECK_OK (ExecuteOSI, Status); - - Status = ExecuteOSI ("Windows 2001", ACPI_UINT64_MAX); - ACPI_CHECK_OK (ExecuteOSI, Status); - - Status = ExecuteOSI ("MichiganTerminalSystem", 0); - ACPI_CHECK_OK (ExecuteOSI, Status); - - - ReturnBuf.Length = 32; - ReturnBuf.Pointer = Buffer; - - Status = AcpiGetName (ACPI_ROOT_OBJECT, - ACPI_FULL_PATHNAME_NO_TRAILING, &ReturnBuf); - ACPI_CHECK_OK (AcpiGetName, Status); - - /* Get Devices */ - - Status = AcpiGetDevices (NULL, AeGetDevices, NULL, NULL); - ACPI_CHECK_OK (AcpiGetDevices, Status); - - Status = AcpiGetStatistics (&Stats); - ACPI_CHECK_OK (AcpiGetStatistics, Status); - - -#if (!ACPI_REDUCED_HARDWARE) - - Status = AcpiInstallGlobalEventHandler (AeGlobalEventHandler, NULL); - ACPI_CHECK_OK (AcpiInstallGlobalEventHandler, Status); - - /* If Hardware Reduced flag is set, we are all done */ - - if (AcpiGbl_ReducedHardware) - { - return; - } - - Status = AcpiEnableEvent (ACPI_EVENT_GLOBAL, 0); - ACPI_CHECK_OK (AcpiEnableEvent, Status); - - /* - * GPEs: Handlers, enable/disable, etc. - */ - Status = AcpiInstallGpeHandler (NULL, 0, - ACPI_GPE_LEVEL_TRIGGERED, AeGpeHandler, NULL); - ACPI_CHECK_OK (AcpiInstallGpeHandler, Status); - - Status = AcpiEnableGpe (NULL, 0); - ACPI_CHECK_OK (AcpiEnableGpe, Status); - - Status = AcpiRemoveGpeHandler (NULL, 0, AeGpeHandler); - ACPI_CHECK_OK (AcpiRemoveGpeHandler, Status); - - Status = AcpiInstallGpeHandler (NULL, 0, - ACPI_GPE_LEVEL_TRIGGERED, AeGpeHandler, NULL); - ACPI_CHECK_OK (AcpiInstallGpeHandler, Status); - - Status = AcpiEnableGpe (NULL, 0); - ACPI_CHECK_OK (AcpiEnableGpe, Status); - - Status = AcpiSetGpe (NULL, 0, ACPI_GPE_DISABLE); - ACPI_CHECK_OK (AcpiSetGpe, Status); - - Status = AcpiSetGpe (NULL, 0, ACPI_GPE_ENABLE); - ACPI_CHECK_OK (AcpiSetGpe, Status); - - - Status = AcpiInstallGpeHandler (NULL, 1, - ACPI_GPE_EDGE_TRIGGERED, AeGpeHandler, NULL); - ACPI_CHECK_OK (AcpiInstallGpeHandler, Status); - - Status = AcpiEnableGpe (NULL, 1); - ACPI_CHECK_OK (AcpiEnableGpe, Status); - - - Status = AcpiInstallGpeHandler (NULL, 2, - ACPI_GPE_LEVEL_TRIGGERED, AeGpeHandler, NULL); - ACPI_CHECK_OK (AcpiInstallGpeHandler, Status); - - Status = AcpiEnableGpe (NULL, 2); - ACPI_CHECK_OK (AcpiEnableGpe, Status); - - - Status = AcpiInstallGpeHandler (NULL, 3, - ACPI_GPE_EDGE_TRIGGERED, AeGpeHandler, NULL); - ACPI_CHECK_OK (AcpiInstallGpeHandler, Status); - - Status = AcpiInstallGpeHandler (NULL, 4, - ACPI_GPE_LEVEL_TRIGGERED, AeGpeHandler, NULL); - ACPI_CHECK_OK (AcpiInstallGpeHandler, Status); - - Status = AcpiInstallGpeHandler (NULL, 5, - ACPI_GPE_EDGE_TRIGGERED, AeGpeHandler, NULL); - ACPI_CHECK_OK (AcpiInstallGpeHandler, Status); - - Status = AcpiGetHandle (NULL, "\\_SB", &Handle); - ACPI_CHECK_OK (AcpiGetHandle, Status); - - Status = AcpiSetupGpeForWake (Handle, NULL, 5); - ACPI_CHECK_OK (AcpiSetupGpeForWake, Status); - - Status = AcpiSetGpeWakeMask (NULL, 5, ACPI_GPE_ENABLE); - ACPI_CHECK_OK (AcpiSetGpeWakeMask, Status); - - Status = AcpiSetupGpeForWake (Handle, NULL, 6); - ACPI_CHECK_OK (AcpiSetupGpeForWake, Status); - - Status = AcpiSetupGpeForWake (ACPI_ROOT_OBJECT, NULL, 6); - ACPI_CHECK_OK (AcpiSetupGpeForWake, Status); - - Status = AcpiSetupGpeForWake (Handle, NULL, 9); - ACPI_CHECK_OK (AcpiSetupGpeForWake, Status); - - Status = AcpiInstallGpeHandler (NULL, 0x19, - ACPI_GPE_LEVEL_TRIGGERED, AeGpeHandler, NULL); - ACPI_CHECK_OK (AcpiInstallGpeHandler, Status); - - Status = AcpiEnableGpe (NULL, 0x19); - ACPI_CHECK_OK (AcpiEnableGpe, Status); - - - /* GPE block 1 */ - - Status = AcpiInstallGpeHandler (NULL, 101, - ACPI_GPE_LEVEL_TRIGGERED, AeGpeHandler, NULL); - ACPI_CHECK_OK (AcpiInstallGpeHandler, Status); - - Status = AcpiEnableGpe (NULL, 101); - ACPI_CHECK_OK (AcpiEnableGpe, Status); - - Status = AcpiDisableGpe (NULL, 101); - ACPI_CHECK_OK (AcpiDisableGpe, Status); - - AfInstallGpeBlock (); - - /* Here is where the GPEs are actually "enabled" */ - - Status = AcpiUpdateAllGpes (); - ACPI_CHECK_OK (AcpiUpdateAllGpes, Status); - - Status = AcpiGetHandle (NULL, "RSRC", &Handle); - if (ACPI_SUCCESS (Status)) - { - ReturnBuf.Length = ACPI_ALLOCATE_BUFFER; - - Status = AcpiGetVendorResource (Handle, "_CRS", &Uuid, &ReturnBuf); - if (ACPI_SUCCESS (Status)) - { - AcpiOsFree (ReturnBuf.Pointer); - } - } - - /* Test global lock */ - - Status = AcpiAcquireGlobalLock (0xFFFF, &LockHandle1); - ACPI_CHECK_OK (AcpiAcquireGlobalLock, Status); - - Status = AcpiAcquireGlobalLock (0x5, &LockHandle2); - ACPI_CHECK_OK (AcpiAcquireGlobalLock, Status); - - Status = AcpiReleaseGlobalLock (LockHandle1); - ACPI_CHECK_OK (AcpiReleaseGlobalLock, Status); - - Status = AcpiReleaseGlobalLock (LockHandle2); - ACPI_CHECK_OK (AcpiReleaseGlobalLock, Status); - -#endif /* !ACPI_REDUCED_HARDWARE */ -} diff --git a/sys/contrib/dev/acpica/source/tools/acpiexec/aehandlers.c b/sys/contrib/dev/acpica/source/tools/acpiexec/aehandlers.c index b28541955a..3091fee45f 100644 --- a/sys/contrib/dev/acpica/source/tools/acpiexec/aehandlers.c +++ b/sys/contrib/dev/acpica/source/tools/acpiexec/aehandlers.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -526,10 +526,12 @@ AeAttachedDataHandler ( { ACPI_NAMESPACE_NODE *Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Data); + ACPI_FUNCTION_NAME (AeAttachedDataHandler1); - AcpiOsPrintf (AE_PREFIX - "Received an attached data deletion (1) on %4.4s\n", - Node->Name.Ascii); + + ACPI_DEBUG_PRINT ((ACPI_DB_INFO, + "Received an attached data deletion at handler 1 on %4.4s\n", + Node->Name.Ascii)); } @@ -549,10 +551,12 @@ AeAttachedDataHandler2 ( { ACPI_NAMESPACE_NODE *Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Data); + ACPI_FUNCTION_NAME (AeAttachedDataHandler2); - AcpiOsPrintf (AE_PREFIX - "Received an attached data deletion (2) on %4.4s\n", - Node->Name.Ascii); + + ACPI_DEBUG_PRINT ((ACPI_DB_INFO, + "Received an attached data deletion at handler 2 on %4.4s\n", + Node->Name.Ascii)); } diff --git a/sys/contrib/dev/acpica/source/tools/acpiexec/aeinitfile.c b/sys/contrib/dev/acpica/source/tools/acpiexec/aeinitfile.c index 72ccc0f824..804a2cbcd6 100644 --- a/sys/contrib/dev/acpica/source/tools/acpiexec/aeinitfile.c +++ b/sys/contrib/dev/acpica/source/tools/acpiexec/aeinitfile.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/os_specific/service_layers/osgendbg.c b/sys/contrib/dev/acpica/source/tools/acpiexec/aeinstall.c similarity index 60% copy from sys/contrib/dev/acpica/source/os_specific/service_layers/osgendbg.c copy to sys/contrib/dev/acpica/source/tools/acpiexec/aeinstall.c index 504874bfc2..2dfb77c989 100644 --- a/sys/contrib/dev/acpica/source/os_specific/service_layers/osgendbg.c +++ b/sys/contrib/dev/acpica/source/tools/acpiexec/aeinstall.c @@ -1,6 +1,6 @@ /****************************************************************************** * - * Module Name: osgendbg - Generic debugger command singalling + * Module Name: aeinstall - Installation of operation region handlers * *****************************************************************************/ @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2015, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -149,117 +149,150 @@ * *****************************************************************************/ -#include "acpi.h" -#include "accommon.h" -#include "acdebug.h" +#include "aecommon.h" +#define _COMPONENT ACPI_TOOLS + ACPI_MODULE_NAME ("aeinstall") -#define _COMPONENT ACPI_CA_DEBUGGER - ACPI_MODULE_NAME ("osgendbg") +static ACPI_STATUS +AeRegionInit ( + ACPI_HANDLE RegionHandle, + UINT32 Function, + void *HandlerContext, + void **RegionContext); -/* Local prototypes */ +static ACPI_STATUS +AeInstallEcHandler ( + ACPI_HANDLE ObjHandle, + UINT32 Level, + void *Context, + void **ReturnValue); -static void -AcpiDbRunRemoteDebugger ( - char *BatchBuffer); +static ACPI_STATUS +AeInstallPciHandler ( + ACPI_HANDLE ObjHandle, + UINT32 Level, + void *Context, + void **ReturnValue); -static ACPI_MUTEX AcpiGbl_DbCommandReady; -static ACPI_MUTEX AcpiGbl_DbCommandComplete; -static BOOLEAN AcpiGbl_DbCommandSignalsInitialized = FALSE; +BOOLEAN AcpiGbl_DisplayRegionAccess = FALSE; +ACPI_CONNECTION_INFO AeMyContext; + + +/* + * We will override some of the default region handlers, especially + * the SystemMemory handler, which must be implemented locally. + * These handlers are installed "early" - before any _REG methods + * are executed - since they are special in the sense that the ACPI spec + * declares that they must "always be available". Cannot override the + * DataTable region handler either -- needed for test execution. + * + * NOTE: The local region handler will simulate access to these address + * spaces by creating a memory buffer behind each operation region. + */ +static ACPI_ADR_SPACE_TYPE DefaultSpaceIdList[] = +{ + ACPI_ADR_SPACE_SYSTEM_MEMORY, + ACPI_ADR_SPACE_SYSTEM_IO, + ACPI_ADR_SPACE_PCI_CONFIG, + ACPI_ADR_SPACE_EC +}; + +/* + * We will install handlers for some of the various address space IDs. + * Test one user-defined address space (used by aslts). + */ +#define ACPI_ADR_SPACE_USER_DEFINED1 0x80 +#define ACPI_ADR_SPACE_USER_DEFINED2 0xE4 + +static ACPI_ADR_SPACE_TYPE SpaceIdList[] = +{ + ACPI_ADR_SPACE_SMBUS, + ACPI_ADR_SPACE_CMOS, + ACPI_ADR_SPACE_PCI_BAR_TARGET, + ACPI_ADR_SPACE_IPMI, + ACPI_ADR_SPACE_GPIO, + ACPI_ADR_SPACE_GSBUS, + ACPI_ADR_SPACE_FIXED_HARDWARE, + ACPI_ADR_SPACE_USER_DEFINED1, + ACPI_ADR_SPACE_USER_DEFINED2 +}; + /****************************************************************************** * - * FUNCTION: AcpiDbRunRemoteDebugger + * FUNCTION: AeRegionInit * - * PARAMETERS: BatchBuffer - Buffer containing commands running in - * the batch mode + * PARAMETERS: Region init handler * - * RETURN: None + * RETURN: Status * - * DESCRIPTION: Run multi-threading debugger remotely + * DESCRIPTION: Opregion init function. * *****************************************************************************/ -static void -AcpiDbRunRemoteDebugger ( - char *BatchBuffer) +static ACPI_STATUS +AeRegionInit ( + ACPI_HANDLE RegionHandle, + UINT32 Function, + void *HandlerContext, + void **RegionContext) { - ACPI_STATUS Status; - char *Ptr = BatchBuffer; - char *Cmd = Ptr; - - while (!AcpiGbl_DbTerminateLoop) + if (Function == ACPI_REGION_DEACTIVATE) { - if (BatchBuffer) - { - if (*Ptr) - { - while (*Ptr) - { - if (*Ptr == ',') - { - /* Convert commas to spaces */ - *Ptr = ' '; - } - else if (*Ptr == ';') - { - *Ptr = '\0'; - continue; - } - - Ptr++; - } - - strncpy (AcpiGbl_DbLineBuf, Cmd, ACPI_DB_LINE_BUFFER_SIZE); - Ptr++; - Cmd = Ptr; - } - else - { - return; - } - } - else - { - /* Force output to console until a command is entered */ + *RegionContext = NULL; + } + else + { + *RegionContext = RegionHandle; + } - AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT); + return (AE_OK); +} - /* Different prompt if method is executing */ - if (!AcpiGbl_MethodExecuting) - { - AcpiOsPrintf ("%1c ", ACPI_DEBUGGER_COMMAND_PROMPT); - } - else - { - AcpiOsPrintf ("%1c ", ACPI_DEBUGGER_EXECUTE_PROMPT); - } +/****************************************************************************** + * + * FUNCTION: AeOverrideRegionHandlers + * + * PARAMETERS: None + * + * RETURN: None + * + * DESCRIPTION: Override the default region handlers for memory, i/o, and + * pci_config. Also install a handler for EC. This is part of + * the "install early handlers" functionality. + * + *****************************************************************************/ - /* Get the user input line */ +void +AeOverrideRegionHandlers ( + void) +{ + UINT32 i; + ACPI_STATUS Status; - Status = AcpiOsGetLine (AcpiGbl_DbLineBuf, - ACPI_DB_LINE_BUFFER_SIZE, NULL); - if (ACPI_FAILURE (Status)) - { - return; - } - } + /* + * Install handlers that will override the default handlers for some of + * the space IDs. + */ + for (i = 0; i < ACPI_ARRAY_LENGTH (DefaultSpaceIdList); i++) + { + /* Install handler at the root object */ - /* - * Signal the debug thread that we have a command to execute, - * and wait for the command to complete. - */ - AcpiOsReleaseMutex (AcpiGbl_DbCommandReady); + Status = AcpiInstallAddressSpaceHandler (ACPI_ROOT_OBJECT, + DefaultSpaceIdList[i], AeRegionHandler, AeRegionInit, + &AeMyContext); - Status = AcpiOsAcquireMutex (AcpiGbl_DbCommandComplete, - ACPI_WAIT_FOREVER); if (ACPI_FAILURE (Status)) { - return; + ACPI_EXCEPTION ((AE_INFO, Status, + "Could not install an OpRegion handler for %s space(%u)", + AcpiUtGetRegionName ((UINT8) DefaultSpaceIdList[i]), + DefaultSpaceIdList[i])); } } } @@ -267,208 +300,158 @@ AcpiDbRunRemoteDebugger ( /****************************************************************************** * - * FUNCTION: AcpiOsWaitCommandReady + * FUNCTION: AeInstallRegionHandlers * * PARAMETERS: None * - * RETURN: Status + * RETURN: None * - * DESCRIPTION: Negotiate with the debugger foreground thread (the user - * thread) to wait the readiness of a command. + * DESCRIPTION: Install handlers for the address spaces other than + * SystemMemory, SystemIO, and PCI_CONFIG. * *****************************************************************************/ -ACPI_STATUS -AcpiOsWaitCommandReady ( +void +AeInstallRegionHandlers ( void) { - ACPI_STATUS Status = AE_OK; + UINT32 i; + ACPI_STATUS Status; - if (AcpiGbl_DebuggerConfiguration == DEBUGGER_MULTI_THREADED) + /* + * Install handlers for some of the "device driver" address spaces + * such as SMBus, etc. + */ + for (i = 0; i < ACPI_ARRAY_LENGTH (SpaceIdList); i++) { - Status = AE_TIME; + /* Install handler at the root object */ - while (Status == AE_TIME) - { - if (AcpiGbl_DbTerminateLoop) - { - Status = AE_CTRL_TERMINATE; - } - else - { - Status = AcpiOsAcquireMutex (AcpiGbl_DbCommandReady, 1000); - } - } - } - else - { - /* Force output to console until a command is entered */ - - AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT); + Status = AcpiInstallAddressSpaceHandler (ACPI_ROOT_OBJECT, + SpaceIdList[i], AeRegionHandler, AeRegionInit, + &AeMyContext); - /* Different prompt if method is executing */ - - if (!AcpiGbl_MethodExecuting) - { - AcpiOsPrintf ("%1c ", ACPI_DEBUGGER_COMMAND_PROMPT); - } - else + if (ACPI_FAILURE (Status)) { - AcpiOsPrintf ("%1c ", ACPI_DEBUGGER_EXECUTE_PROMPT); + ACPI_EXCEPTION ((AE_INFO, Status, + "Could not install an OpRegion handler for %s space(%u)", + AcpiUtGetRegionName((UINT8) SpaceIdList[i]), SpaceIdList[i])); + return; } - - /* Get the user input line */ - - Status = AcpiOsGetLine (AcpiGbl_DbLineBuf, - ACPI_DB_LINE_BUFFER_SIZE, NULL); } - - if (ACPI_FAILURE (Status) && Status != AE_CTRL_TERMINATE) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "While parsing/handling command line")); - } - return (Status); } -/****************************************************************************** +/******************************************************************************* * - * FUNCTION: AcpiOsNotifyCommandComplete + * FUNCTION: AeInstallDeviceHandlers * - * PARAMETERS: void + * PARAMETERS: None * * RETURN: Status * - * DESCRIPTION: Negotiate with the debugger foreground thread (the user - * thread) to notify the completion of a command. + * DESCRIPTION: Install handlers for all EC and PCI devices in the namespace * - *****************************************************************************/ + ******************************************************************************/ ACPI_STATUS -AcpiOsNotifyCommandComplete ( +AeInstallDeviceHandlers ( void) { - if (AcpiGbl_DebuggerConfiguration == DEBUGGER_MULTI_THREADED) - { - AcpiOsReleaseMutex (AcpiGbl_DbCommandComplete); - } + /* Find all Embedded Controller devices */ + + AcpiGetDevices ("PNP0C09", AeInstallEcHandler, NULL, NULL); + + /* Install a PCI handler */ + + AcpiGetDevices ("PNP0A08", AeInstallPciHandler, NULL, NULL); return (AE_OK); } -/****************************************************************************** +/******************************************************************************* * - * FUNCTION: AcpiOsInitializeDebugger + * FUNCTION: AeInstallEcHandler * - * PARAMETERS: None + * PARAMETERS: ACPI_WALK_NAMESPACE callback * * RETURN: Status * - * DESCRIPTION: Initialize OSPM specific part of the debugger + * DESCRIPTION: Walk entire namespace, install a handler for every EC + * device found. * - *****************************************************************************/ + ******************************************************************************/ -ACPI_STATUS -AcpiOsInitializeDebugger ( - void) +static ACPI_STATUS +AeInstallEcHandler ( + ACPI_HANDLE ObjHandle, + UINT32 Level, + void *Context, + void **ReturnValue) { ACPI_STATUS Status; - /* Create command signals */ + /* Install the handler for this EC device */ - Status = AcpiOsCreateMutex (&AcpiGbl_DbCommandReady); + Status = AcpiInstallAddressSpaceHandler (ObjHandle, + ACPI_ADR_SPACE_EC, AeRegionHandler, AeRegionInit, &AeMyContext); if (ACPI_FAILURE (Status)) { - return (Status); - } - Status = AcpiOsCreateMutex (&AcpiGbl_DbCommandComplete); - if (ACPI_FAILURE (Status)) - { - goto ErrorReady; - } - - /* Initialize the states of the command signals */ - - Status = AcpiOsAcquireMutex (AcpiGbl_DbCommandComplete, - ACPI_WAIT_FOREVER); - if (ACPI_FAILURE (Status)) - { - goto ErrorComplete; - } - Status = AcpiOsAcquireMutex (AcpiGbl_DbCommandReady, - ACPI_WAIT_FOREVER); - if (ACPI_FAILURE (Status)) - { - goto ErrorComplete; + ACPI_EXCEPTION ((AE_INFO, Status, + "Could not install an OpRegion handler for EC device (%p)", + ObjHandle)); } - AcpiGbl_DbCommandSignalsInitialized = TRUE; - return (Status); - -ErrorComplete: - AcpiOsDeleteMutex (AcpiGbl_DbCommandComplete); -ErrorReady: - AcpiOsDeleteMutex (AcpiGbl_DbCommandReady); return (Status); } -/****************************************************************************** +/******************************************************************************* * - * FUNCTION: AcpiOsTerminateDebugger + * FUNCTION: AeInstallPciHandler * - * PARAMETERS: None + * PARAMETERS: ACPI_WALK_NAMESPACE callback * - * RETURN: None + * RETURN: Status * - * DESCRIPTION: Terminate signals used by the multi-threading debugger + * DESCRIPTION: Walk entire namespace, install a handler for every PCI + * device found. * - *****************************************************************************/ + ******************************************************************************/ -void -AcpiOsTerminateDebugger ( - void) +static ACPI_STATUS +AeInstallPciHandler ( + ACPI_HANDLE ObjHandle, + UINT32 Level, + void *Context, + void **ReturnValue) { + ACPI_STATUS Status; - if (AcpiGbl_DbCommandSignalsInitialized) - { - AcpiOsDeleteMutex (AcpiGbl_DbCommandReady); - AcpiOsDeleteMutex (AcpiGbl_DbCommandComplete); - } -} + /* Install memory and I/O handlers for the PCI device */ -/****************************************************************************** - * - * FUNCTION: AcpiRunDebugger - * - * PARAMETERS: BatchBuffer - Buffer containing commands running in - * the batch mode - * - * RETURN: None - * - * DESCRIPTION: Run a local/remote debugger - * - *****************************************************************************/ - -void -AcpiRunDebugger ( - char *BatchBuffer) -{ - /* Check for single or multithreaded debug */ - - if (AcpiGbl_DebuggerConfiguration & DEBUGGER_MULTI_THREADED) + Status = AcpiInstallAddressSpaceHandler (ObjHandle, + ACPI_ADR_SPACE_SYSTEM_IO, AeRegionHandler, AeRegionInit, + &AeMyContext); + if (ACPI_FAILURE (Status)) { - AcpiDbRunRemoteDebugger (BatchBuffer); + ACPI_EXCEPTION ((AE_INFO, Status, + "Could not install an OpRegion handler for PCI device (%p)", + ObjHandle)); } - else + + Status = AcpiInstallAddressSpaceHandler (ObjHandle, + ACPI_ADR_SPACE_SYSTEM_MEMORY, AeRegionHandler, AeRegionInit, + &AeMyContext); + if (ACPI_FAILURE (Status)) { - AcpiDbUserCommands (); + ACPI_EXCEPTION ((AE_INFO, Status, + "Could not install an OpRegion handler for PCI device (%p)", + ObjHandle)); } -} -ACPI_EXPORT_SYMBOL (AcpiRunDebugger) + return (AE_CTRL_TERMINATE); +} diff --git a/sys/contrib/dev/acpica/source/tools/acpiexec/aemain.c b/sys/contrib/dev/acpica/source/tools/acpiexec/aemain.c index 323e2bfa17..f1ad2aa65d 100644 --- a/sys/contrib/dev/acpica/source/tools/acpiexec/aemain.c +++ b/sys/contrib/dev/acpica/source/tools/acpiexec/aemain.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -187,8 +187,10 @@ AeDoOptions ( /* Globals */ +BOOLEAN AcpiGbl_UseLocalFaultHandler = TRUE; UINT8 AcpiGbl_RegionFillValue = 0; BOOLEAN AcpiGbl_IgnoreErrors = FALSE; +BOOLEAN AcpiGbl_AbortLoopOnTimeout = FALSE; BOOLEAN AcpiGbl_DbOpt_NoRegionSupport = FALSE; UINT8 AcpiGbl_UseHwReducedFadt = FALSE; BOOLEAN AcpiGbl_DoInterfaceTests = FALSE; @@ -196,11 +198,9 @@ BOOLEAN AcpiGbl_LoadTestTables = FALSE; BOOLEAN AcpiGbl_AeLoadOnly = FALSE; static UINT8 AcpiGbl_ExecutionMode = AE_MODE_COMMAND_LOOP; static char BatchBuffer[AE_BUFFER_SIZE]; /* Batch command buffer */ -static char AeBuildDate[] = __DATE__; -static char AeBuildTime[] = __TIME__; #define ACPIEXEC_NAME "AML Execution/Debug Utility" -#define AE_SUPPORTED_OPTIONS "?b:d:e:f^ghi:lm^rv^:x:" +#define AE_SUPPORTED_OPTIONS "?b:d:e:f^ghlm^rt^v^:x:" /* Stubs for the disassembler */ @@ -249,8 +249,10 @@ usage ( printf ("\n"); ACPI_OPTION ("-da", "Disable method abort on error"); + ACPI_OPTION ("-df", "Disable Local fault handler"); ACPI_OPTION ("-di", "Disable execution of STA/INI methods during init"); ACPI_OPTION ("-do", "Disable Operation Region address simulation"); + ACPI_OPTION ("-dp", "Disable TermList parsing for scope objects"); ACPI_OPTION ("-dr", "Disable repair of method return values"); ACPI_OPTION ("-ds", "Disable method auto-serialization"); ACPI_OPTION ("-dt", "Disable allocation tracking (performance)"); @@ -260,8 +262,7 @@ usage ( ACPI_OPTION ("-ef", "Enable display of final memory statistics"); ACPI_OPTION ("-ei", "Enable additional tests for ACPICA interfaces"); ACPI_OPTION ("-el", "Enable loading of additional test tables"); - ACPI_OPTION ("-em", "Enable grouping of module-level code"); - ACPI_OPTION ("-ep", "Enable TermList parsing for scope objects"); + ACPI_OPTION ("-em", "Enable (legacy) grouping of module-level code"); ACPI_OPTION ("-es", "Enable Interpreter Slack Mode"); ACPI_OPTION ("-et", "Enable debug semaphore timeout"); printf ("\n"); @@ -270,9 +271,12 @@ usage ( ACPI_OPTION ("-fv ", "Operation Region initialization fill value"); printf ("\n"); - ACPI_OPTION ("-i ", "Maximum iterations for AML while loops"); ACPI_OPTION ("-l", "Load tables and namespace only"); ACPI_OPTION ("-r", "Use hardware-reduced FADT V5"); + ACPI_OPTION ("-te", "Exit loop on timeout instead of aborting method"); + ACPI_OPTION ("-to ", "Set timeout period for AML while loops"); + printf ("\n"); + ACPI_OPTION ("-v", "Display version information"); ACPI_OPTION ("-vd", "Display build date and time"); ACPI_OPTION ("-vi", "Verbose initialization output"); @@ -328,6 +332,11 @@ AeDoOptions ( AcpiGbl_IgnoreErrors = TRUE; break; + case 'f': + + AcpiGbl_UseLocalFaultHandler = FALSE; + break; + case 'i': AcpiGbl_DbOpt_NoIniMethods = TRUE; @@ -338,6 +347,11 @@ AeDoOptions ( AcpiGbl_DbOpt_NoRegionSupport = TRUE; break; + case 'p': + + AcpiGbl_ExecuteTablesAsMethods = FALSE; + break; + case 'r': AcpiGbl_DisableAutoRepair = TRUE; @@ -393,11 +407,6 @@ AeDoOptions ( AcpiGbl_GroupModuleLevelCode = TRUE; break; - case 'p': - - AcpiGbl_ParseTableAsTermList = TRUE; - break; - case 's': AcpiGbl_EnableInterpreterSlack = TRUE; @@ -461,20 +470,6 @@ AeDoOptions ( usage(); return (1); - case 'i': - - Temp = strtoul (AcpiGbl_Optarg, NULL, 0); - if (!Temp || (Temp > ACPI_UINT16_MAX)) - { - printf ("%s: Invalid max loops value\n", AcpiGbl_Optarg); - return (-1); - } - - AcpiGbl_MaxLoopIterations = (UINT16) Temp; - printf ("Max Loop Iterations is %u (0x%X)\n", - AcpiGbl_MaxLoopIterations, AcpiGbl_MaxLoopIterations); - break; - case 'l': AcpiGbl_AeLoadOnly = TRUE; @@ -503,18 +498,53 @@ AeDoOptions ( printf ("Using ACPI 5.0 Hardware Reduced Mode via version 5 FADT\n"); break; + case 't': + + switch (AcpiGbl_Optarg[0]) + { + case 'o': /* -to: Set loop timeout in seconds */ + + if (AcpiGetoptArgument (argc, argv)) + { + return (-1); + } + + Temp = strtoul (AcpiGbl_Optarg, NULL, 0); + if (!Temp || (Temp > ACPI_UINT16_MAX)) + { + printf ("%s: Invalid loop timeout value\n", + AcpiGbl_Optarg); + return (-1); + } + + AcpiGbl_MaxLoopIterations = (UINT16) Temp; + printf ("Automatic loop timeout after %u seconds\n", + AcpiGbl_MaxLoopIterations); + break; + + case 'e': + + AcpiGbl_AbortLoopOnTimeout = TRUE; + break; + + default: + + printf ("Unknown option: -t%s\n", AcpiGbl_Optarg); + return (-1); + } + break; + case 'v': switch (AcpiGbl_Optarg[0]) { case '^': /* -v: (Version): signon already emitted, just exit */ - (void) AcpiOsTerminate (); return (1); case 'd': - printf ("Build date/time: %s %s\n", AeBuildDate, AeBuildTime); + printf (ACPI_COMMON_BUILD_TIME); return (1); case 'i': @@ -577,13 +607,21 @@ main ( ACPI_DEBUG_INITIALIZE (); /* For debug version only */ signal (SIGINT, AeSignalHandler); - signal (SIGSEGV, AeSignalHandler); + if (AcpiGbl_UseLocalFaultHandler) + { + signal (SIGSEGV, AeSignalHandler); + } /* Init debug globals */ AcpiDbgLevel = ACPI_NORMAL_DEFAULT; AcpiDbgLayer = 0xFFFFFFFF; + /* Module-level code. Use new architecture */ + + AcpiGbl_ExecuteTablesAsMethods = TRUE; + AcpiGbl_GroupModuleLevelCode = FALSE; + /* * Initialize ACPICA and start debugger thread. * @@ -598,6 +636,10 @@ main ( goto ErrorExit; } + /* Use a shorter timeout value for acpiexec */ + + AcpiGbl_MaxLoopIterations = 1; + /* Initialize the AML debugger */ Status = AcpiInitializeDebugger (); @@ -684,6 +726,25 @@ main ( goto EnterDebugger; } + Status = AeLoadTables (); + + /* + * Exit namespace initialization for the "load namespace only" option. + * No control methods will be executed. However, still enter the + * the debugger. + */ + if (AcpiGbl_AeLoadOnly) + { + goto EnterDebugger; + } + + if (ACPI_FAILURE (Status)) + { + printf ("**** Could not load ACPI tables, %s\n", + AcpiFormatException (Status)); + goto EnterDebugger; + } + /* Setup initialization flags for ACPICA */ InitFlags = (ACPI_NO_HANDLER_INIT | ACPI_NO_ACPI_ENABLE); @@ -710,31 +771,18 @@ main ( goto EnterDebugger; } - Status = AeLoadTables (); - - /* - * Exit namespace initialization for the "load namespace only" option. - * No control methods will be executed. However, still enter the - * the debugger. - */ - if (AcpiGbl_AeLoadOnly) - { - goto EnterDebugger; - } - - if (ACPI_FAILURE (Status)) - { - printf ("**** Could not load ACPI tables, %s\n", - AcpiFormatException (Status)); - goto EnterDebugger; - } - /* * Install handlers for "device driver" space IDs (EC,SMBus, etc.) * and fixed event handlers */ AeInstallLateHandlers (); + /* + * This call implements the "initialization file" option for AcpiExec. + * This is the precise point that we want to perform the overrides. + */ + AeDoObjectOverrides (); + /* Finish the ACPICA initialization */ Status = AcpiInitializeObjects (InitFlags); @@ -782,11 +830,15 @@ EnterDebugger: AcpiTerminateDebugger (); + /* re-enable debug output for AcpiTerminate output */ + + AcpiGbl_DbOutputFlags = ACPI_DB_CONSOLE_OUTPUT; + NormalExit: ExitCode = 0; ErrorExit: - (void) AcpiOsTerminate (); + (void) AcpiTerminate (); AcDeleteTableList (ListHead); return (ExitCode); } diff --git a/sys/contrib/dev/acpica/source/tools/acpiexec/aeregion.c b/sys/contrib/dev/acpica/source/tools/acpiexec/aeregion.c index 4076c06bdf..56f939463c 100644 --- a/sys/contrib/dev/acpica/source/tools/acpiexec/aeregion.c +++ b/sys/contrib/dev/acpica/source/tools/acpiexec/aeregion.c @@ -1,6 +1,6 @@ /****************************************************************************** * - * Module Name: aeregion - Operation region support for acpiexec + * Module Name: aeregion - Handler for operation regions * *****************************************************************************/ @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -155,283 +155,7 @@ ACPI_MODULE_NAME ("aeregion") -/* Local prototypes */ - -static ACPI_STATUS -AeRegionInit ( - ACPI_HANDLE RegionHandle, - UINT32 Function, - void *HandlerContext, - void **RegionContext); - -static ACPI_STATUS -AeInstallEcHandler ( - ACPI_HANDLE ObjHandle, - UINT32 Level, - void *Context, - void **ReturnValue); - -static ACPI_STATUS -AeInstallPciHandler ( - ACPI_HANDLE ObjHandle, - UINT32 Level, - void *Context, - void **ReturnValue); - - static AE_DEBUG_REGIONS AeRegions; -BOOLEAN AcpiGbl_DisplayRegionAccess = FALSE; -ACPI_CONNECTION_INFO AeMyContext; - - -/* - * We will override some of the default region handlers, especially - * the SystemMemory handler, which must be implemented locally. - * These handlers are installed "early" - before any _REG methods - * are executed - since they are special in the sense that the ACPI spec - * declares that they must "always be available". Cannot override the - * DataTable region handler either -- needed for test execution. - * - * NOTE: The local region handler will simulate access to these address - * spaces by creating a memory buffer behind each operation region. - */ -static ACPI_ADR_SPACE_TYPE DefaultSpaceIdList[] = -{ - ACPI_ADR_SPACE_SYSTEM_MEMORY, - ACPI_ADR_SPACE_SYSTEM_IO, - ACPI_ADR_SPACE_PCI_CONFIG, - ACPI_ADR_SPACE_EC -}; - -/* - * We will install handlers for some of the various address space IDs. - * Test one user-defined address space (used by aslts). - */ -#define ACPI_ADR_SPACE_USER_DEFINED1 0x80 -#define ACPI_ADR_SPACE_USER_DEFINED2 0xE4 - -static ACPI_ADR_SPACE_TYPE SpaceIdList[] = -{ - ACPI_ADR_SPACE_SMBUS, - ACPI_ADR_SPACE_CMOS, - ACPI_ADR_SPACE_PCI_BAR_TARGET, - ACPI_ADR_SPACE_IPMI, - ACPI_ADR_SPACE_GPIO, - ACPI_ADR_SPACE_GSBUS, - ACPI_ADR_SPACE_FIXED_HARDWARE, - ACPI_ADR_SPACE_USER_DEFINED1, - ACPI_ADR_SPACE_USER_DEFINED2 -}; - - -/****************************************************************************** - * - * FUNCTION: AeRegionInit - * - * PARAMETERS: Region init handler - * - * RETURN: Status - * - * DESCRIPTION: Opregion init function. - * - *****************************************************************************/ - -static ACPI_STATUS -AeRegionInit ( - ACPI_HANDLE RegionHandle, - UINT32 Function, - void *HandlerContext, - void **RegionContext) -{ - - if (Function == ACPI_REGION_DEACTIVATE) - { - *RegionContext = NULL; - } - else - { - *RegionContext = RegionHandle; - } - - return (AE_OK); -} - - -/****************************************************************************** - * - * FUNCTION: AeOverrideRegionHandlers - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Override the default region handlers for memory, i/o, and - * pci_config. Also install a handler for EC. This is part of - * the "install early handlers" functionality. - * - *****************************************************************************/ - -void -AeOverrideRegionHandlers ( - void) -{ - UINT32 i; - ACPI_STATUS Status; - - /* - * Install handlers that will override the default handlers for some of - * the space IDs. - */ - for (i = 0; i < ACPI_ARRAY_LENGTH (DefaultSpaceIdList); i++) - { - /* Install handler at the root object */ - - Status = AcpiInstallAddressSpaceHandler (ACPI_ROOT_OBJECT, - DefaultSpaceIdList[i], AeRegionHandler, - AeRegionInit, &AeMyContext); - - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Could not install an OpRegion handler for %s space(%u)", - AcpiUtGetRegionName ((UINT8) DefaultSpaceIdList[i]), - DefaultSpaceIdList[i])); - } - } -} - - -/****************************************************************************** - * - * FUNCTION: AeInstallRegionHandlers - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Install handlers for the address spaces other than memory, - * i/o, and pci_config. - * - *****************************************************************************/ - -void -AeInstallRegionHandlers ( - void) -{ - UINT32 i; - ACPI_STATUS Status; - - /* - * Install handlers for some of the "device driver" address spaces - * such as SMBus, etc. - */ - for (i = 0; i < ACPI_ARRAY_LENGTH (SpaceIdList); i++) - { - /* Install handler at the root object */ - - Status = AcpiInstallAddressSpaceHandler (ACPI_ROOT_OBJECT, - SpaceIdList[i], AeRegionHandler, - AeRegionInit, &AeMyContext); - - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Could not install an OpRegion handler for %s space(%u)", - AcpiUtGetRegionName((UINT8) SpaceIdList[i]), SpaceIdList[i])); - return; - } - } -} - - -/******************************************************************************* - * - * FUNCTION: AeInstallDeviceHandlers, - * AeInstallEcHandler, - * AeInstallPciHandler - * - * PARAMETERS: ACPI_WALK_NAMESPACE callback - * - * RETURN: Status - * - * DESCRIPTION: Walk entire namespace, install a handler for every EC - * and PCI device found. - * - ******************************************************************************/ - -static ACPI_STATUS -AeInstallEcHandler ( - ACPI_HANDLE ObjHandle, - UINT32 Level, - void *Context, - void **ReturnValue) -{ - ACPI_STATUS Status; - - - /* Install the handler for this EC device */ - - Status = AcpiInstallAddressSpaceHandler (ObjHandle, ACPI_ADR_SPACE_EC, - AeRegionHandler, AeRegionInit, &AeMyContext); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Could not install an OpRegion handler for EC device (%p)", - ObjHandle)); - } - - return (Status); -} - - -static ACPI_STATUS -AeInstallPciHandler ( - ACPI_HANDLE ObjHandle, - UINT32 Level, - void *Context, - void **ReturnValue) -{ - ACPI_STATUS Status; - - - /* Install memory and I/O handlers for the PCI device */ - - Status = AcpiInstallAddressSpaceHandler (ObjHandle, ACPI_ADR_SPACE_SYSTEM_IO, - AeRegionHandler, AeRegionInit, &AeMyContext); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Could not install an OpRegion handler for PCI device (%p)", - ObjHandle)); - } - - Status = AcpiInstallAddressSpaceHandler (ObjHandle, ACPI_ADR_SPACE_SYSTEM_MEMORY, - AeRegionHandler, AeRegionInit, &AeMyContext); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Could not install an OpRegion handler for PCI device (%p)", - ObjHandle)); - } - - return (AE_CTRL_TERMINATE); -} - - -ACPI_STATUS -AeInstallDeviceHandlers ( - void) -{ - - /* Find all Embedded Controller devices */ - - AcpiGetDevices ("PNP0C09", AeInstallEcHandler, NULL, NULL); - - /* Install a PCI handler */ - - AcpiGetDevices ("PNP0A08", AeInstallPciHandler, NULL, NULL); - return (AE_OK); -} /****************************************************************************** diff --git a/sys/contrib/dev/acpica/source/tools/acpiexec/aetables.c b/sys/contrib/dev/acpica/source/tools/acpiexec/aetables.c index 8d2ea56eb3..4137f7b7ae 100644 --- a/sys/contrib/dev/acpica/source/tools/acpiexec/aetables.c +++ b/sys/contrib/dev/acpica/source/tools/acpiexec/aetables.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -259,9 +259,9 @@ AeInitializeTableHeader ( Header->Length = Length; Header->OemRevision = 0x1001; - strncpy (Header->OemId, "Intel", ACPI_OEM_ID_SIZE); - strncpy (Header->OemTableId, "AcpiExec", ACPI_OEM_TABLE_ID_SIZE); - strncpy (Header->AslCompilerId, "INTL", ACPI_NAME_SIZE); + memcpy (Header->OemId, "Intel ", ACPI_OEM_ID_SIZE); + memcpy (Header->OemTableId, "AcpiExec", ACPI_OEM_TABLE_ID_SIZE); + ACPI_MOVE_NAME (Header->AslCompilerId, "INTL"); Header->AslCompilerRevision = ACPI_CA_VERSION; /* Set the checksum, must set to zero first */ @@ -497,12 +497,12 @@ AeBuildLocalTables ( /* Miscellaneous FADT fields */ - LocalFADT.Gpe0BlockLength = 0x08; - LocalFADT.Gpe0Block = 0x00001234; + LocalFADT.Gpe0BlockLength = 0x20; + LocalFADT.Gpe0Block = 0x00003210; - LocalFADT.Gpe1BlockLength = 0x80; - LocalFADT.Gpe1Block = 0x00005678; - LocalFADT.Gpe1Base = 100; + LocalFADT.Gpe1BlockLength = 0x20; + LocalFADT.Gpe1Block = 0x0000BA98; + LocalFADT.Gpe1Base = 0x80; LocalFADT.Pm1EventLength = 4; LocalFADT.Pm1aEventBlock = 0x00001aaa; diff --git a/sys/contrib/dev/acpica/source/tools/acpiexec/aetables.h b/sys/contrib/dev/acpica/source/tools/acpiexec/aetables.h index f060ee6e2b..6981f17444 100644 --- a/sys/contrib/dev/acpica/source/tools/acpiexec/aetables.h +++ b/sys/contrib/dev/acpica/source/tools/acpiexec/aetables.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/tools/acpiexec/aeexec.c b/sys/contrib/dev/acpica/source/tools/acpiexec/aetests.c similarity index 66% copy from sys/contrib/dev/acpica/source/tools/acpiexec/aeexec.c copy to sys/contrib/dev/acpica/source/tools/acpiexec/aetests.c index 2594f7d00a..bc198f4937 100644 --- a/sys/contrib/dev/acpica/source/tools/acpiexec/aeexec.c +++ b/sys/contrib/dev/acpica/source/tools/acpiexec/aetests.c @@ -1,6 +1,6 @@ /****************************************************************************** * - * Module Name: aeexec - Support routines for AcpiExec utility + * Module Name: aetests - Miscellaneous tests for ACPICA public interfaces * *****************************************************************************/ @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -152,34 +152,10 @@ #include "aecommon.h" #define _COMPONENT ACPI_TOOLS - ACPI_MODULE_NAME ("aeexec") + ACPI_MODULE_NAME ("aetests") /* Local prototypes */ -static ACPI_STATUS -AeSetupConfiguration ( - void *RegionAddr); - -static void -AeTestBufferArgument ( - void); - -static void -AeTestPackageArgument ( - void); - -static ACPI_STATUS -AeGetDevices ( - ACPI_HANDLE ObjHandle, - UINT32 NestingLevel, - void *Context, - void **ReturnValue); - -static ACPI_STATUS -ExecuteOSI ( - char *OsiString, - UINT64 ExpectedResult); - static void AeMutexInterfaces ( void); @@ -189,512 +165,9 @@ AeHardwareInterfaces ( void); static void -AeGenericRegisters ( - void); - -static void AeTestSleepData ( void); -#if (!ACPI_REDUCED_HARDWARE) -static void -AfInstallGpeBlock ( - void); -#endif /* !ACPI_REDUCED_HARDWARE */ - -extern unsigned char Ssdt2Code[]; -extern unsigned char Ssdt3Code[]; -extern unsigned char Ssdt4Code[]; - - -/****************************************************************************** - * - * FUNCTION: AeSetupConfiguration - * - * PARAMETERS: RegionAddr - Address for an ACPI table to be loaded - * dynamically. Test purposes only. - * - * RETURN: Status - * - * DESCRIPTION: Call AML _CFG configuration control method - * - *****************************************************************************/ - -static ACPI_STATUS -AeSetupConfiguration ( - void *RegionAddr) -{ - ACPI_OBJECT_LIST ArgList; - ACPI_OBJECT Arg[3]; - - - /* - * Invoke _CFG method if present - */ - ArgList.Count = 1; - ArgList.Pointer = Arg; - - Arg[0].Type = ACPI_TYPE_INTEGER; - Arg[0].Integer.Value = ACPI_TO_INTEGER (RegionAddr); - - (void) AcpiEvaluateObject (NULL, "\\_CFG", &ArgList, NULL); - return (AE_OK); -} - - -#if (!ACPI_REDUCED_HARDWARE) -/****************************************************************************** - * - * FUNCTION: AfInstallGpeBlock - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Test GPE block device initialization. Requires test ASL with - * A \GPE2 device. - * - *****************************************************************************/ - -static void -AfInstallGpeBlock ( - void) -{ - ACPI_STATUS Status; - ACPI_HANDLE Handle; - ACPI_GENERIC_ADDRESS BlockAddress; - ACPI_HANDLE GpeDevice; - ACPI_OBJECT_TYPE Type; - - - /* _GPE should always exist */ - - Status = AcpiGetHandle (NULL, "\\_GPE", &Handle); - ACPI_CHECK_OK (AcpiGetHandle, Status); - if (ACPI_FAILURE (Status)) - { - return; - } - - memset (&BlockAddress, 0, sizeof (ACPI_GENERIC_ADDRESS)); - BlockAddress.SpaceId = ACPI_ADR_SPACE_SYSTEM_MEMORY; - BlockAddress.Address = 0x76540000; - - /* Attempt to install a GPE block on GPE2 (if present) */ - - Status = AcpiGetHandle (NULL, "\\GPE2", &Handle); - if (ACPI_SUCCESS (Status)) - { - Status = AcpiGetType (Handle, &Type); - if (ACPI_FAILURE (Status) || - (Type != ACPI_TYPE_DEVICE)) - { - return; - } - - Status = AcpiInstallGpeBlock (Handle, &BlockAddress, 7, 8); - ACPI_CHECK_OK (AcpiInstallGpeBlock, Status); - - Status = AcpiInstallGpeHandler (Handle, 8, - ACPI_GPE_LEVEL_TRIGGERED, AeGpeHandler, NULL); - ACPI_CHECK_OK (AcpiInstallGpeHandler, Status); - - Status = AcpiEnableGpe (Handle, 8); - ACPI_CHECK_OK (AcpiEnableGpe, Status); - - Status = AcpiGetGpeDevice (0x30, &GpeDevice); - ACPI_CHECK_OK (AcpiGetGpeDevice, Status); - - Status = AcpiGetGpeDevice (0x42, &GpeDevice); - ACPI_CHECK_OK (AcpiGetGpeDevice, Status); - - Status = AcpiGetGpeDevice (AcpiCurrentGpeCount-1, &GpeDevice); - ACPI_CHECK_OK (AcpiGetGpeDevice, Status); - - Status = AcpiGetGpeDevice (AcpiCurrentGpeCount, &GpeDevice); - ACPI_CHECK_STATUS (AcpiGetGpeDevice, Status, AE_NOT_EXIST); - - Status = AcpiRemoveGpeHandler (Handle, 8, AeGpeHandler); - ACPI_CHECK_OK (AcpiRemoveGpeHandler, Status); - } - - /* Attempt to install a GPE block on GPE3 (if present) */ - - Status = AcpiGetHandle (NULL, "\\GPE3", &Handle); - if (ACPI_SUCCESS (Status)) - { - Status = AcpiGetType (Handle, &Type); - if (ACPI_FAILURE (Status) || - (Type != ACPI_TYPE_DEVICE)) - { - return; - } - - Status = AcpiInstallGpeBlock (Handle, &BlockAddress, 8, 11); - ACPI_CHECK_OK (AcpiInstallGpeBlock, Status); - } -} -#endif /* !ACPI_REDUCED_HARDWARE */ - - -/* Test using a Buffer object as a method argument */ - -static void -AeTestBufferArgument ( - void) -{ - ACPI_OBJECT_LIST Params; - ACPI_OBJECT BufArg; - UINT8 Buffer[] = - { - 0,0,0,0, - 4,0,0,0, - 1,2,3,4 - }; - - - BufArg.Type = ACPI_TYPE_BUFFER; - BufArg.Buffer.Length = 12; - BufArg.Buffer.Pointer = Buffer; - - Params.Count = 1; - Params.Pointer = &BufArg; - - (void) AcpiEvaluateObject (NULL, "\\BUF", &Params, NULL); -} - - -static ACPI_OBJECT PkgArg; -static ACPI_OBJECT PkgElements[5]; -static ACPI_OBJECT Pkg2Elements[5]; -static ACPI_OBJECT_LIST Params; - - -/* - * Test using a Package object as an method argument - */ -static void -AeTestPackageArgument ( - void) -{ - - /* Main package */ - - PkgArg.Type = ACPI_TYPE_PACKAGE; - PkgArg.Package.Count = 4; - PkgArg.Package.Elements = PkgElements; - - /* Main package elements */ - - PkgElements[0].Type = ACPI_TYPE_INTEGER; - PkgElements[0].Integer.Value = 0x22228888; - - PkgElements[1].Type = ACPI_TYPE_STRING; - PkgElements[1].String.Length = sizeof ("Top-level package"); - PkgElements[1].String.Pointer = "Top-level package"; - - PkgElements[2].Type = ACPI_TYPE_BUFFER; - PkgElements[2].Buffer.Length = sizeof ("XXXX"); - PkgElements[2].Buffer.Pointer = (UINT8 *) "XXXX"; - - PkgElements[3].Type = ACPI_TYPE_PACKAGE; - PkgElements[3].Package.Count = 2; - PkgElements[3].Package.Elements = Pkg2Elements; - - /* Subpackage elements */ - - Pkg2Elements[0].Type = ACPI_TYPE_INTEGER; - Pkg2Elements[0].Integer.Value = 0xAAAABBBB; - - Pkg2Elements[1].Type = ACPI_TYPE_STRING; - Pkg2Elements[1].String.Length = sizeof ("Nested Package"); - Pkg2Elements[1].String.Pointer = "Nested Package"; - - /* Parameter object */ - - Params.Count = 1; - Params.Pointer = &PkgArg; - - (void) AcpiEvaluateObject (NULL, "\\_PKG", &Params, NULL); -} - - -static ACPI_STATUS -AeGetDevices ( - ACPI_HANDLE ObjHandle, - UINT32 NestingLevel, - void *Context, - void **ReturnValue) -{ - - return (AE_OK); -} - - -/****************************************************************************** - * - * FUNCTION: ExecuteOSI - * - * PARAMETERS: OsiString - String passed to _OSI method - * ExpectedResult - 0 (FALSE) or ACPI_UINT64_MAX (TRUE) - * - * RETURN: Status - * - * DESCRIPTION: Execute the internally implemented (in ACPICA) _OSI method. - * - *****************************************************************************/ - -static ACPI_STATUS -ExecuteOSI ( - char *OsiString, - UINT64 ExpectedResult) -{ - ACPI_STATUS Status; - ACPI_OBJECT_LIST ArgList; - ACPI_OBJECT Arg[1]; - ACPI_BUFFER ReturnValue; - ACPI_OBJECT *Obj; - - - /* Setup input argument */ - - ArgList.Count = 1; - ArgList.Pointer = Arg; - - Arg[0].Type = ACPI_TYPE_STRING; - Arg[0].String.Pointer = OsiString; - Arg[0].String.Length = strlen (Arg[0].String.Pointer); - - /* Ask ACPICA to allocate space for the return object */ - - ReturnValue.Length = ACPI_ALLOCATE_BUFFER; - - Status = AcpiEvaluateObject (NULL, "\\_OSI", &ArgList, &ReturnValue); - - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ( - "Could not execute _OSI method, %s\n", - AcpiFormatException (Status)); - return (Status); - } - - Status = AE_ERROR; - - if (ReturnValue.Length < sizeof (ACPI_OBJECT)) - { - AcpiOsPrintf ( - "Return value from _OSI method too small, %.8X\n", - ReturnValue.Length); - goto ErrorExit; - } - - Obj = ReturnValue.Pointer; - if (Obj->Type != ACPI_TYPE_INTEGER) - { - AcpiOsPrintf ( - "Invalid return type from _OSI method, %.2X\n", Obj->Type); - goto ErrorExit; - } - - if (Obj->Integer.Value != ExpectedResult) - { - AcpiOsPrintf ( - "Invalid return value from _OSI, expected %8.8X%8.8X found %8.8X%8.8X\n", - ACPI_FORMAT_UINT64 (ExpectedResult), - ACPI_FORMAT_UINT64 (Obj->Integer.Value)); - goto ErrorExit; - } - - Status = AE_OK; - - /* Reset the OSI data */ - - AcpiGbl_OsiData = 0; - -ErrorExit: - - /* Free a buffer created via ACPI_ALLOCATE_BUFFER */ - - AcpiOsFree (ReturnValue.Pointer); - return (Status); -} - - -/****************************************************************************** - * - * FUNCTION: AeGenericRegisters - * - * DESCRIPTION: Call the AcpiRead/Write interfaces. - * - *****************************************************************************/ - -static ACPI_GENERIC_ADDRESS GenericRegister; - -static void -AeGenericRegisters ( - void) -{ - ACPI_STATUS Status; - UINT64 Value; - - - GenericRegister.Address = 0x1234; - GenericRegister.BitWidth = 64; - GenericRegister.BitOffset = 0; - GenericRegister.SpaceId = ACPI_ADR_SPACE_SYSTEM_IO; - - Status = AcpiRead (&Value, &GenericRegister); - ACPI_CHECK_OK (AcpiRead, Status); - - Status = AcpiWrite (Value, &GenericRegister); - ACPI_CHECK_OK (AcpiWrite, Status); - - GenericRegister.Address = 0x12345678; - GenericRegister.BitOffset = 0; - GenericRegister.SpaceId = ACPI_ADR_SPACE_SYSTEM_MEMORY; - - Status = AcpiRead (&Value, &GenericRegister); - ACPI_CHECK_OK (AcpiRead, Status); - - Status = AcpiWrite (Value, &GenericRegister); - ACPI_CHECK_OK (AcpiWrite, Status); -} - - -/****************************************************************************** - * - * FUNCTION: AeMutexInterfaces - * - * DESCRIPTION: Exercise the AML mutex access interfaces - * - *****************************************************************************/ - -static void -AeMutexInterfaces ( - void) -{ - ACPI_STATUS Status; - ACPI_HANDLE MutexHandle; - - - /* Get a handle to an AML mutex */ - - Status = AcpiGetHandle (NULL, "\\MTX1", &MutexHandle); - if (Status == AE_NOT_FOUND) - { - return; - } - - ACPI_CHECK_OK (AcpiGetHandle, Status); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Acquire the mutex */ - - Status = AcpiAcquireMutex (NULL, "\\MTX1", 0xFFFF); - ACPI_CHECK_OK (AcpiAcquireMutex, Status); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Release mutex with different parameters */ - - Status = AcpiReleaseMutex (MutexHandle, NULL); - ACPI_CHECK_OK (AcpiReleaseMutex, Status); -} - - -/****************************************************************************** - * - * FUNCTION: AeHardwareInterfaces - * - * DESCRIPTION: Call various hardware support interfaces - * - *****************************************************************************/ - -static void -AeHardwareInterfaces ( - void) -{ -#if (!ACPI_REDUCED_HARDWARE) - - ACPI_STATUS Status; - UINT32 Value; - - - /* If Hardware Reduced flag is set, we are all done */ - - if (AcpiGbl_ReducedHardware) - { - return; - } - - Status = AcpiWriteBitRegister (ACPI_BITREG_WAKE_STATUS, 1); - ACPI_CHECK_OK (AcpiWriteBitRegister, Status); - - Status = AcpiWriteBitRegister (ACPI_BITREG_GLOBAL_LOCK_ENABLE, 1); - ACPI_CHECK_OK (AcpiWriteBitRegister, Status); - - Status = AcpiWriteBitRegister (ACPI_BITREG_SLEEP_ENABLE, 1); - ACPI_CHECK_OK (AcpiWriteBitRegister, Status); - - Status = AcpiWriteBitRegister (ACPI_BITREG_ARB_DISABLE, 1); - ACPI_CHECK_OK (AcpiWriteBitRegister, Status); - - - Status = AcpiReadBitRegister (ACPI_BITREG_WAKE_STATUS, &Value); - ACPI_CHECK_OK (AcpiReadBitRegister, Status); - - Status = AcpiReadBitRegister (ACPI_BITREG_GLOBAL_LOCK_ENABLE, &Value); - ACPI_CHECK_OK (AcpiReadBitRegister, Status); - - Status = AcpiReadBitRegister (ACPI_BITREG_SLEEP_ENABLE, &Value); - ACPI_CHECK_OK (AcpiReadBitRegister, Status); - - Status = AcpiReadBitRegister (ACPI_BITREG_ARB_DISABLE, &Value); - ACPI_CHECK_OK (AcpiReadBitRegister, Status); - -#endif /* !ACPI_REDUCED_HARDWARE */ -} - - -/****************************************************************************** - * - * FUNCTION: AeTestSleepData - * - * DESCRIPTION: Exercise the sleep/wake support (_S0, _S1, etc.) - * - *****************************************************************************/ - -static void -AeTestSleepData ( - void) -{ - int State; - UINT8 TypeA; - UINT8 TypeB; - ACPI_STATUS Status; - - - /* Attempt to get sleep data for all known sleep states */ - - for (State = ACPI_STATE_S0; State <= ACPI_S_STATES_MAX; State++) - { - Status = AcpiGetSleepTypeData ((UINT8) State, &TypeA, &TypeB); - - /* All sleep methods are optional */ - - if (Status != AE_NOT_FOUND) - { - ACPI_CHECK_OK (AcpiGetSleepTypeData, Status); - } - } -} - /****************************************************************************** * @@ -715,10 +188,10 @@ AeMiscellaneousTests ( ACPI_HANDLE Handle; #if (!ACPI_REDUCED_HARDWARE) + UINT32 Temp; UINT32 LockHandle1; UINT32 LockHandle2; - ACPI_VENDOR_UUID Uuid = - {0, {ACPI_INIT_UUID (0,0,0,0,0,0,0,0,0,0,0)}}; + ACPI_VENDOR_UUID Uuid = {0, {ACPI_INIT_UUID (0,0,0,0,0,0,0,0,0,0,0)}}; #endif /* !ACPI_REDUCED_HARDWARE */ @@ -973,5 +446,151 @@ AeMiscellaneousTests ( Status = AcpiReleaseGlobalLock (LockHandle2); ACPI_CHECK_OK (AcpiReleaseGlobalLock, Status); + /* Test timer interfaces */ + + Status = AcpiGetTimerResolution (&Temp); + ACPI_CHECK_OK (AcpiGetTimerResolution, Status); + + Status = AcpiGetTimer (&Temp); + ACPI_CHECK_OK (AcpiGetTimer, Status); + + Status = AcpiGetTimerDuration (0x1000, 0x2000, &Temp); + ACPI_CHECK_OK (AcpiGetTimerDuration, Status); + + +#endif /* !ACPI_REDUCED_HARDWARE */ +} + + +/****************************************************************************** + * + * FUNCTION: AeMutexInterfaces + * + * DESCRIPTION: Exercise the AML mutex access interfaces + * + *****************************************************************************/ + +static void +AeMutexInterfaces ( + void) +{ + ACPI_STATUS Status; + ACPI_HANDLE MutexHandle; + + + /* Get a handle to an AML mutex */ + + Status = AcpiGetHandle (NULL, "\\MTX1", &MutexHandle); + if (Status == AE_NOT_FOUND) + { + return; + } + + ACPI_CHECK_OK (AcpiGetHandle, Status); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Acquire the mutex */ + + Status = AcpiAcquireMutex (NULL, "\\MTX1", 0xFFFF); + ACPI_CHECK_OK (AcpiAcquireMutex, Status); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Release mutex with different parameters */ + + Status = AcpiReleaseMutex (MutexHandle, NULL); + ACPI_CHECK_OK (AcpiReleaseMutex, Status); +} + + +/****************************************************************************** + * + * FUNCTION: AeHardwareInterfaces + * + * DESCRIPTION: Call various hardware support interfaces + * + *****************************************************************************/ + +static void +AeHardwareInterfaces ( + void) +{ +#if (!ACPI_REDUCED_HARDWARE) + + ACPI_STATUS Status; + UINT32 Value; + + + /* If Hardware Reduced flag is set, we are all done */ + + if (AcpiGbl_ReducedHardware) + { + return; + } + + Status = AcpiWriteBitRegister (ACPI_BITREG_WAKE_STATUS, 1); + ACPI_CHECK_OK (AcpiWriteBitRegister, Status); + + Status = AcpiWriteBitRegister (ACPI_BITREG_GLOBAL_LOCK_ENABLE, 1); + ACPI_CHECK_OK (AcpiWriteBitRegister, Status); + + Status = AcpiWriteBitRegister (ACPI_BITREG_SLEEP_ENABLE, 1); + ACPI_CHECK_OK (AcpiWriteBitRegister, Status); + + Status = AcpiWriteBitRegister (ACPI_BITREG_ARB_DISABLE, 1); + ACPI_CHECK_OK (AcpiWriteBitRegister, Status); + + + Status = AcpiReadBitRegister (ACPI_BITREG_WAKE_STATUS, &Value); + ACPI_CHECK_OK (AcpiReadBitRegister, Status); + + Status = AcpiReadBitRegister (ACPI_BITREG_GLOBAL_LOCK_ENABLE, &Value); + ACPI_CHECK_OK (AcpiReadBitRegister, Status); + + Status = AcpiReadBitRegister (ACPI_BITREG_SLEEP_ENABLE, &Value); + ACPI_CHECK_OK (AcpiReadBitRegister, Status); + + Status = AcpiReadBitRegister (ACPI_BITREG_ARB_DISABLE, &Value); + ACPI_CHECK_OK (AcpiReadBitRegister, Status); + #endif /* !ACPI_REDUCED_HARDWARE */ } + + +/****************************************************************************** + * + * FUNCTION: AeTestSleepData + * + * DESCRIPTION: Exercise the sleep/wake support (_S0, _S1, etc.) + * + *****************************************************************************/ + +static void +AeTestSleepData ( + void) +{ + int State; + UINT8 TypeA; + UINT8 TypeB; + ACPI_STATUS Status; + + + /* Attempt to get sleep data for all known sleep states */ + + for (State = ACPI_STATE_S0; State <= ACPI_S_STATES_MAX; State++) + { + Status = AcpiGetSleepTypeData ((UINT8) State, &TypeA, &TypeB); + + /* All sleep methods are optional */ + + if (Status != AE_NOT_FOUND) + { + ACPI_CHECK_OK (AcpiGetSleepTypeData, Status); + } + } +} diff --git a/sys/contrib/dev/acpica/source/tools/acpihelp/acpihelp.h b/sys/contrib/dev/acpica/source/tools/acpihelp/acpihelp.h index d5b13c059c..1b63e2860a 100644 --- a/sys/contrib/dev/acpica/source/tools/acpihelp/acpihelp.h +++ b/sys/contrib/dev/acpica/source/tools/acpihelp/acpihelp.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -198,6 +198,8 @@ ACPI_GLOBAL (char, Gbl_Buffer[AH_BUFFER_LENGTH]); ACPI_GLOBAL (char, Gbl_LineBuffer[AH_LINE_BUFFER_LENGTH]); +extern const AH_PREDEFINED_NAME AslPredefinedInfo[]; +extern const AH_DEVICE_ID AslDeviceIds[]; #define AH_DISPLAY_EXCEPTION(Status, Name) \ diff --git a/sys/contrib/dev/acpica/source/tools/acpihelp/ahaml.c b/sys/contrib/dev/acpica/source/tools/acpihelp/ahaml.c index f12c79d536..c26f0ad63c 100644 --- a/sys/contrib/dev/acpica/source/tools/acpihelp/ahaml.c +++ b/sys/contrib/dev/acpica/source/tools/acpihelp/ahaml.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/tools/acpihelp/ahamlops.c b/sys/contrib/dev/acpica/source/tools/acpihelp/ahamlops.c index f7d0d92ee3..caaf1b66f8 100644 --- a/sys/contrib/dev/acpica/source/tools/acpihelp/ahamlops.c +++ b/sys/contrib/dev/acpica/source/tools/acpihelp/ahamlops.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/tools/acpihelp/ahasl.c b/sys/contrib/dev/acpica/source/tools/acpihelp/ahasl.c index fc753793c7..4324accd1d 100644 --- a/sys/contrib/dev/acpica/source/tools/acpihelp/ahasl.c +++ b/sys/contrib/dev/acpica/source/tools/acpihelp/ahasl.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/tools/acpihelp/ahaslkey.c b/sys/contrib/dev/acpica/source/tools/acpihelp/ahaslkey.c index 3474b4011d..5e1c197b8a 100644 --- a/sys/contrib/dev/acpica/source/tools/acpihelp/ahaslkey.c +++ b/sys/contrib/dev/acpica/source/tools/acpihelp/ahaslkey.c @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/tools/acpihelp/ahaslops.c b/sys/contrib/dev/acpica/source/tools/acpihelp/ahaslops.c index 730e76400e..93b1fe28ce 100644 --- a/sys/contrib/dev/acpica/source/tools/acpihelp/ahaslops.c +++ b/sys/contrib/dev/acpica/source/tools/acpihelp/ahaslops.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/tools/acpihelp/ahdecode.c b/sys/contrib/dev/acpica/source/tools/acpihelp/ahdecode.c index ffaede804f..bec66864fd 100644 --- a/sys/contrib/dev/acpica/source/tools/acpihelp/ahdecode.c +++ b/sys/contrib/dev/acpica/source/tools/acpihelp/ahdecode.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -311,7 +311,7 @@ AhFindPredefinedNames ( } Name[0] = '_'; - strncpy (&Name[1], NamePrefix, 7); + AcpiUtSafeStrncpy (&Name[1], NamePrefix, 7); Length = strlen (Name); if (Length > ACPI_NAME_SIZE) diff --git a/sys/contrib/dev/acpica/source/tools/acpihelp/ahgrammar.c b/sys/contrib/dev/acpica/source/tools/acpihelp/ahgrammar.c index aea3ee1c09..2395541b64 100644 --- a/sys/contrib/dev/acpica/source/tools/acpihelp/ahgrammar.c +++ b/sys/contrib/dev/acpica/source/tools/acpihelp/ahgrammar.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/tools/acpihelp/ahmain.c b/sys/contrib/dev/acpica/source/tools/acpihelp/ahmain.c index cbc28573f2..fc61a81bc2 100644 --- a/sys/contrib/dev/acpica/source/tools/acpihelp/ahmain.c +++ b/sys/contrib/dev/acpica/source/tools/acpihelp/ahmain.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -160,7 +160,7 @@ AhDisplayUsage ( void); #define AH_UTILITY_NAME "ACPI Help Utility" -#define AH_SUPPORTED_OPTIONS "adeghikmopstuv" +#define AH_SUPPORTED_OPTIONS "adeghikmopstuv^" #if defined ACPI_OPTION @@ -187,6 +187,7 @@ AhDisplayUsage ( ACPI_USAGE_HEADER ("acpihelp [Name/Prefix | HexValue]"); ACPI_OPTION ("-h", "Display help"); ACPI_OPTION ("-v", "Display version information"); + ACPI_OPTION ("-vd", "Display build date and time"); ACPI_USAGE_TEXT ("\nAML Names and Encodings (ACPI Machine Language):\n"); ACPI_OPTION ("-a [Name/Prefix | *]", "Display both ASL operator and AML opcode name(s)"); @@ -310,7 +311,23 @@ main ( case 'v': /* -v: (Version): signon already emitted, just exit */ - return (0); + switch (AcpiGbl_Optarg[0]) + { + case '^': /* -v: (Version) */ + + return (1); + + case 'd': + + printf (ACPI_COMMON_BUILD_TIME); + return (1); + + default: + + printf ("Unknown option: -v%s\n", AcpiGbl_Optarg); + return (-1); + } + break; case 'h': default: diff --git a/sys/contrib/dev/acpica/source/tools/acpinames/acpinames.h b/sys/contrib/dev/acpica/source/tools/acpinames/acpinames.h index 88138c10f5..a4c73d5cc3 100644 --- a/sys/contrib/dev/acpica/source/tools/acpinames/acpinames.h +++ b/sys/contrib/dev/acpica/source/tools/acpinames/acpinames.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/tools/acpinames/anmain.c b/sys/contrib/dev/acpica/source/tools/acpinames/anmain.c index 256acaa97d..57b421e7c2 100644 --- a/sys/contrib/dev/acpica/source/tools/acpinames/anmain.c +++ b/sys/contrib/dev/acpica/source/tools/acpinames/anmain.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -179,7 +179,7 @@ BOOLEAN AcpiGbl_NsLoadOnly = FALSE; #define AN_UTILITY_NAME "ACPI Namespace Dump Utility" -#define AN_SUPPORTED_OPTIONS "?hlvx:" +#define AN_SUPPORTED_OPTIONS "?hlv^x:" /****************************************************************************** @@ -203,6 +203,7 @@ usage ( ACPI_OPTION ("-?", "Display this message"); ACPI_OPTION ("-l", "Load namespace only, no display"); ACPI_OPTION ("-v", "Display version information"); + ACPI_OPTION ("-vd", "Display build date and time"); ACPI_OPTION ("-x ", "Debug output level"); } @@ -236,6 +237,11 @@ main ( AcpiDbgLevel = ACPI_NORMAL_DEFAULT | ACPI_LV_TABLES; AcpiDbgLayer = 0xFFFFFFFF; + /* Set flags so that the interpreter is not used */ + + AcpiGbl_ExecuteTablesAsMethods = FALSE; + AcpiGbl_GroupModuleLevelCode = TRUE; + Status = AcpiInitializeSubsystem (); ACPI_CHECK_OK (AcpiInitializeSubsystem, Status); if (ACPI_FAILURE (Status)) @@ -259,9 +265,25 @@ main ( AcpiGbl_NsLoadOnly = TRUE; break; - case 'v': /* -v: (Version): signon already emitted, just exit */ + case 'v': - return (0); + switch (AcpiGbl_Optarg[0]) + { + case '^': /* -v: (Version): signon already emitted, just exit */ + + exit (0); + + case 'd': + + printf (ACPI_COMMON_BUILD_TIME); + return (0); + + default: + + printf ("Unknown option: -v%s\n", AcpiGbl_Optarg); + return (-1); + } + break; case 'x': @@ -344,9 +366,9 @@ AnDumpEntireNamespace ( return (-1); } - /* Load the ACPI namespace */ + /* Build the namespace from the tables */ - Status = AcpiTbLoadNamespace (); + Status = AcpiLoadTables (); if (Status == AE_CTRL_TERMINATE) { /* At least one table load failed -- terminate with error */ @@ -368,32 +390,15 @@ AnDumpEntireNamespace ( } /* - * Enable ACPICA. These calls don't do much for this - * utility, since we only dump the namespace. There is no - * hardware or event manager code underneath. + * NOTE: + * We don't need to do any further ACPICA initialization, since we don't + * have any hardware, nor is the interpreter configured. + * + * Namely, we don't need these calls: + * AcpiEnableSubsystem + * AcpiInitializeObjects */ - Status = AcpiEnableSubsystem ( - ACPI_NO_ACPI_ENABLE | - ACPI_NO_ADDRESS_SPACE_INIT | - ACPI_NO_EVENT_INIT | - ACPI_NO_HANDLER_INIT); - if (ACPI_FAILURE (Status)) - { - printf ("**** Could not EnableSubsystem, %s\n", - AcpiFormatException (Status)); - return (-1); - } - Status = AcpiInitializeObjects ( - ACPI_NO_ADDRESS_SPACE_INIT | - ACPI_NO_DEVICE_INIT | - ACPI_NO_EVENT_INIT); - if (ACPI_FAILURE (Status)) - { - printf ("**** Could not InitializeObjects, %s\n", - AcpiFormatException (Status)); - return (-1); - } /* * Perform a namespace walk to dump the contents diff --git a/sys/contrib/dev/acpica/source/tools/acpinames/anstubs.c b/sys/contrib/dev/acpica/source/tools/acpinames/anstubs.c index 750c005228..4a8d7865cb 100644 --- a/sys/contrib/dev/acpica/source/tools/acpinames/anstubs.c +++ b/sys/contrib/dev/acpica/source/tools/acpinames/anstubs.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -173,6 +173,9 @@ AcpiUtCopyIobjectToEobject ( ACPI_OPERAND_OBJECT *Obj, ACPI_BUFFER *RetBuffer) { + ACPI_EXCEPTION ((AE_INFO, AE_NOT_IMPLEMENTED, + "Stubbed function")); + return (AE_NOT_IMPLEMENTED); } @@ -181,6 +184,9 @@ AcpiUtCopyEobjectToIobject ( ACPI_OBJECT *Obj, ACPI_OPERAND_OBJECT **InternalObj) { + ACPI_EXCEPTION ((AE_INFO, AE_NOT_IMPLEMENTED, + "Stubbed function")); + return (AE_NOT_IMPLEMENTED); } @@ -190,6 +196,9 @@ AcpiUtCopyIobjectToIobject ( ACPI_OPERAND_OBJECT **DestDesc, ACPI_WALK_STATE *WalkState) { + ACPI_EXCEPTION ((AE_INFO, AE_NOT_IMPLEMENTED, + "Stubbed function")); + return (AE_NOT_IMPLEMENTED); } @@ -248,6 +257,9 @@ AcpiExReadDataFromField ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT **RetBufferDesc) { + ACPI_EXCEPTION ((AE_INFO, AE_NOT_IMPLEMENTED, + "Stubbed function")); + return (AE_NOT_IMPLEMENTED); } @@ -257,6 +269,9 @@ AcpiExWriteDataToField ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT **ResultDesc) { + ACPI_EXCEPTION ((AE_INFO, AE_NOT_IMPLEMENTED, + "Stubbed function")); + return (AE_NOT_IMPLEMENTED); } @@ -267,6 +282,9 @@ AcpiExStoreObjectToNode ( ACPI_WALK_STATE *WalkState, UINT8 ImplicitConversion) { + ACPI_EXCEPTION ((AE_INFO, AE_NOT_IMPLEMENTED, + "Stubbed function")); + return (AE_NOT_IMPLEMENTED); } @@ -277,6 +295,9 @@ ACPI_STATUS AcpiNsEvaluate ( ACPI_EVALUATE_INFO *Info) { + ACPI_EXCEPTION ((AE_INFO, AE_NOT_IMPLEMENTED, + "Stubbed function")); + return (AE_NOT_IMPLEMENTED); } @@ -284,6 +305,7 @@ void AcpiNsExecModuleCodeList ( void) { + return; } void @@ -364,6 +386,9 @@ AcpiDsCallControlMethod ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op) { + ACPI_EXCEPTION ((AE_INFO, AE_NOT_IMPLEMENTED, + "Stubbed function")); + return (AE_NOT_IMPLEMENTED); } @@ -372,6 +397,9 @@ AcpiDsRestartControlMethod ( ACPI_WALK_STATE *WalkState, ACPI_OPERAND_OBJECT *ReturnDesc) { + ACPI_EXCEPTION ((AE_INFO, AE_NOT_IMPLEMENTED, + "Stubbed function")); + return (AE_NOT_IMPLEMENTED); } @@ -387,6 +415,9 @@ AcpiDsMethodError ( ACPI_STATUS Status, ACPI_WALK_STATE *WalkState) { + ACPI_EXCEPTION ((AE_INFO, AE_NOT_IMPLEMENTED, + "Stubbed function")); + return (AE_NOT_IMPLEMENTED); } @@ -396,6 +427,9 @@ AcpiDsBeginMethodExecution ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_WALK_STATE *WalkState) { + ACPI_EXCEPTION ((AE_INFO, AE_NOT_IMPLEMENTED, + "Stubbed function")); + return (AE_NOT_IMPLEMENTED); } @@ -404,6 +438,9 @@ AcpiDsGetPredicateValue ( ACPI_WALK_STATE *WalkState, ACPI_OPERAND_OBJECT *ResultObj) { + ACPI_EXCEPTION ((AE_INFO, AE_NOT_IMPLEMENTED, + "Stubbed function")); + return (AE_NOT_IMPLEMENTED); } @@ -447,6 +484,9 @@ AcpiDsExecBeginOp ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT **OutOp) { + ACPI_EXCEPTION ((AE_INFO, AE_NOT_IMPLEMENTED, + "Stubbed function")); + return (AE_NOT_IMPLEMENTED); } @@ -454,5 +494,8 @@ ACPI_STATUS AcpiDsExecEndOp ( ACPI_WALK_STATE *State) { + ACPI_EXCEPTION ((AE_INFO, AE_NOT_IMPLEMENTED, + "Stubbed function")); + return (AE_NOT_IMPLEMENTED); } diff --git a/sys/contrib/dev/acpica/source/tools/acpinames/antables.c b/sys/contrib/dev/acpica/source/tools/acpinames/antables.c index f9d95c7811..64495a964d 100644 --- a/sys/contrib/dev/acpica/source/tools/acpinames/antables.c +++ b/sys/contrib/dev/acpica/source/tools/acpinames/antables.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -210,9 +210,9 @@ AnInitializeTableHeader ( Header->Length = Length; Header->OemRevision = 0x1001; - strncpy (Header->OemId, "Intel", ACPI_OEM_ID_SIZE); - strncpy (Header->OemTableId, "AcpiName", ACPI_OEM_TABLE_ID_SIZE); - strncpy (Header->AslCompilerId, "INTL", ACPI_NAME_SIZE); + memcpy (Header->OemId, "Intel ", ACPI_OEM_ID_SIZE); + memcpy (Header->OemTableId, "AcpiExec", ACPI_OEM_TABLE_ID_SIZE); + ACPI_MOVE_NAME (Header->AslCompilerId, "INTL"); Header->AslCompilerRevision = ACPI_CA_VERSION; /* Set the checksum, must set to zero first */ diff --git a/sys/contrib/dev/acpica/source/tools/acpisrc/acpisrc.h b/sys/contrib/dev/acpica/source/tools/acpisrc/acpisrc.h index 645d3d06c2..98fe25805a 100644 --- a/sys/contrib/dev/acpica/source/tools/acpisrc/acpisrc.h +++ b/sys/contrib/dev/acpica/source/tools/acpisrc/acpisrc.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -166,7 +166,7 @@ #define LINES_IN_LEGAL_HEADER 115+36 /* intel+dual license. See legal header above at module start */ #define LEGAL_HEADER_SIGNATURE " * 2.1. This is your license from Intel Corp. under its intellectual property" -#define LINES_IN_LINUX_HEADER 34 +#define LINES_IN_LINUX_HEADER 2 /* SPDX header is 1 line Intel copyright is another line */ #define LINUX_HEADER_SIGNATURE " * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS" #define LINES_IN_ASL_HEADER 29 /* Header as output from disassembler */ @@ -280,6 +280,7 @@ typedef struct acpi_conversion_table ACPI_TYPED_IDENTIFIER_TABLE *LowerCaseTable; + char *SourceSpdxHeader; ACPI_STRING_TABLE *SourceStringTable; ACPI_IDENTIFIER_TABLE *SourceLineTable; ACPI_IDENTIFIER_TABLE *SourceConditionalTable; @@ -288,6 +289,7 @@ typedef struct acpi_conversion_table ACPI_IDENTIFIER_TABLE *SourceSpecialMacroTable; UINT32 SourceFunctions; + char *HeaderSpdxHeader; ACPI_STRING_TABLE *HeaderStringTable; ACPI_IDENTIFIER_TABLE *HeaderLineTable; ACPI_IDENTIFIER_TABLE *HeaderConditionalTable; @@ -296,6 +298,7 @@ typedef struct acpi_conversion_table ACPI_IDENTIFIER_TABLE *HeaderSpecialMacroTable; UINT32 HeaderFunctions; + /* SPDX header conversion for patches is not supported */ ACPI_STRING_TABLE *PatchStringTable; ACPI_IDENTIFIER_TABLE *PatchLineTable; ACPI_IDENTIFIER_TABLE *PatchConditionalTable; @@ -464,6 +467,11 @@ AsReplaceHeader ( char *NewHeader); void +AsDoSpdxHeader ( + char *Buffer, + char *SpdxHeader); + +void AsConvertFile ( ACPI_CONVERSION_TABLE *ConversionTable, char *FileBuffer, diff --git a/sys/contrib/dev/acpica/source/tools/acpisrc/ascase.c b/sys/contrib/dev/acpica/source/tools/acpisrc/ascase.c index e7deb3c5f4..5104966be7 100644 --- a/sys/contrib/dev/acpica/source/tools/acpisrc/ascase.c +++ b/sys/contrib/dev/acpica/source/tools/acpisrc/ascase.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/tools/acpisrc/asconvrt.c b/sys/contrib/dev/acpica/source/tools/acpisrc/asconvrt.c index dbe45a6b4e..ffc8366f98 100644 --- a/sys/contrib/dev/acpica/source/tools/acpisrc/asconvrt.c +++ b/sys/contrib/dev/acpica/source/tools/acpisrc/asconvrt.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -183,12 +183,18 @@ AsCountLines ( char *Filename); + +#define MODULE_HEADER_BEGIN "/******************************************************************************\n *\n * Module Name:"; +#define MODULE_HEADER_END " *****************************************************************************/\n\n" +#define INTEL_COPYRIGHT " * Copyright (C) 2000 - 2018, Intel Corp.\n" + /* Opening signature of the Intel legal header */ char *HeaderBegin = "/******************************************************************************\n *\n * 1. Copyright Notice"; UINT32 NonAnsiCommentCount; +char CopyRightHeaderEnd[] = INTEL_COPYRIGHT " *\n" MODULE_HEADER_END; /****************************************************************************** * @@ -759,6 +765,39 @@ AsReplaceHeader ( /****************************************************************************** * + * FUNCTION: AsDoSpdxHeader + * + * DESCRIPTION: Replace the default Intel legal header with a new header + * + ******************************************************************************/ + +void +AsDoSpdxHeader ( + char *Buffer, + char *SpdxHeader) +{ + char *SubBuffer; + + + /* Place an SPDX header at the very top */ + + AsReplaceData (Buffer, 0, + SpdxHeader, strlen (SpdxHeader)); + + /* Place an Intel copyright notice in the module header */ + + SubBuffer = strstr (Buffer, MODULE_HEADER_END); + if (!SubBuffer) + { + return; + } + + AsReplaceData (SubBuffer, strlen (MODULE_HEADER_END), + CopyRightHeaderEnd, strlen (CopyRightHeaderEnd)); +} + +/****************************************************************************** + * * FUNCTION: AsReplaceString * * DESCRIPTION: Replace all instances of a target string with a replacement diff --git a/sys/contrib/dev/acpica/source/tools/acpisrc/asfile.c b/sys/contrib/dev/acpica/source/tools/acpisrc/asfile.c index b5308d3827..ba68ff5f82 100644 --- a/sys/contrib/dev/acpica/source/tools/acpisrc/asfile.c +++ b/sys/contrib/dev/acpica/source/tools/acpisrc/asfile.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -422,6 +422,7 @@ AsConvertFile ( ACPI_IDENTIFIER_TABLE *LineTable; ACPI_TYPED_IDENTIFIER_TABLE *StructTable; ACPI_IDENTIFIER_TABLE *SpecialMacroTable; + char *SpdxHeader=NULL; switch (FileType) @@ -434,6 +435,7 @@ AsConvertFile ( ConditionalTable = ConversionTable->SourceConditionalTable; StructTable = ConversionTable->SourceStructTable; SpecialMacroTable = ConversionTable->SourceSpecialMacroTable; + SpdxHeader = ConversionTable->SourceSpdxHeader; break; case FILE_TYPE_HEADER: @@ -444,6 +446,7 @@ AsConvertFile ( ConditionalTable = ConversionTable->HeaderConditionalTable; StructTable = ConversionTable->HeaderStructTable; SpecialMacroTable = ConversionTable->HeaderSpecialMacroTable; + SpdxHeader = ConversionTable->HeaderSpdxHeader; break; case FILE_TYPE_PATCH: @@ -639,6 +642,10 @@ AsConvertFile ( { AsReplaceHeader (FileBuffer, ConversionTable->NewHeader); } + if (SpdxHeader) + { + AsDoSpdxHeader (FileBuffer, SpdxHeader); + } } /******************************************************************************* diff --git a/sys/contrib/dev/acpica/source/tools/acpisrc/asmain.c b/sys/contrib/dev/acpica/source/tools/acpisrc/asmain.c index a14af868a4..eab71c4074 100644 --- a/sys/contrib/dev/acpica/source/tools/acpisrc/asmain.c +++ b/sys/contrib/dev/acpica/source/tools/acpisrc/asmain.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -374,6 +374,7 @@ AsDisplayUsage ( ACPI_OPTION ("-s", "Generate source statistics only"); ACPI_OPTION ("-v", "Display version information"); ACPI_OPTION ("-vb", "Verbose mode"); + ACPI_OPTION ("-vd", "Display build date and time"); ACPI_OPTION ("-y", "Suppress file overwrite prompts"); } @@ -478,6 +479,11 @@ main ( Gbl_VerboseMode = TRUE; break; + case 'd': + + printf (ACPI_COMMON_BUILD_TIME); + return (0); + default: printf ("Unknown option: -v%s\n", AcpiGbl_Optarg); diff --git a/sys/contrib/dev/acpica/source/tools/acpisrc/asremove.c b/sys/contrib/dev/acpica/source/tools/acpisrc/asremove.c index a728d90677..ebb8633347 100644 --- a/sys/contrib/dev/acpica/source/tools/acpisrc/asremove.c +++ b/sys/contrib/dev/acpica/source/tools/acpisrc/asremove.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/tools/acpisrc/astable.c b/sys/contrib/dev/acpica/source/tools/acpisrc/astable.c index e0215e97a4..62bbcc92b4 100644 --- a/sys/contrib/dev/acpica/source/tools/acpisrc/astable.c +++ b/sys/contrib/dev/acpica/source/tools/acpisrc/astable.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -194,9 +194,10 @@ ACPI_STRING_TABLE StandardDataTypes[] = { * ******************************************************************************/ +char EmptyHeader[] = ""; char DualLicenseHeader[] = "/*\n" -" * Copyright (C) 2000 - 2017, Intel Corp.\n" +" * Copyright (C) 2000 - 2018, Intel Corp.\n" " * All rights reserved.\n" " *\n" " * Redistribution and use in source and binary forms, with or without\n" @@ -663,12 +664,14 @@ ACPI_TYPED_IDENTIFIER_TABLE AcpiIdentifiers[] = { {"ACPI_TABLE_MSDM", SRC_TYPE_STRUCT}, {"ACPI_TABLE_NFIT", SRC_TYPE_STRUCT}, {"ACPI_TABLE_PCCT", SRC_TYPE_STRUCT}, + {"ACPI_TABLE_PDTT", SRC_TYPE_STRUCT}, {"ACPI_TABLE_PPTT", SRC_TYPE_STRUCT}, {"ACPI_TABLE_RSDP", SRC_TYPE_STRUCT}, {"ACPI_TABLE_RSDT", SRC_TYPE_STRUCT}, {"ACPI_TABLE_MCHI", SRC_TYPE_STRUCT}, {"ACPI_TABLE_S3PT", SRC_TYPE_STRUCT}, {"ACPI_TABLE_SBST", SRC_TYPE_STRUCT}, + {"ACPI_TABLE_SDEV", SRC_TYPE_STRUCT}, {"ACPI_TABLE_SLIC", SRC_TYPE_STRUCT}, {"ACPI_TABLE_SLIT", SRC_TYPE_STRUCT}, {"ACPI_TABLE_SPCR", SRC_TYPE_STRUCT}, @@ -791,6 +794,8 @@ ACPI_TYPED_IDENTIFIER_TABLE AcpiIdentifiers[] = { {"ACPI_MPST_POWER_STATE", SRC_TYPE_STRUCT}, {"ACPI_MCFG_ALLOCATION", SRC_TYPE_STRUCT}, {"ACPI_MSCT_PROXIMITY", SRC_TYPE_STRUCT}, + {"ACPI_NFIT_CAPABILITIES", SRC_TYPE_STRUCT}, + {"ACPI_NFIT_DEVICE_HANDLE", SRC_TYPE_STRUCT}, {"ACPI_NFIT_HEADER", SRC_TYPE_STRUCT}, {"ACPI_NFIT_SYSTEM_ADDRESS", SRC_TYPE_STRUCT}, {"ACPI_NFIT_MEMORY_MAP", SRC_TYPE_STRUCT}, @@ -806,13 +811,18 @@ ACPI_TYPED_IDENTIFIER_TABLE AcpiIdentifiers[] = { {"ACPI_PCCT_EXT_PCC_SLAVE", SRC_TYPE_STRUCT}, {"ACPI_PCCT_SHARED_MEMORY", SRC_TYPE_STRUCT}, {"ACPI_PCCT_SUBSPACE", SRC_TYPE_STRUCT}, - {"ACPI_PPTT_PROCESSOR", SRC_TYPE_STRUCT}, + {"ACPI_PDTT_CHANNEL", SRC_TYPE_STRUCT}, {"ACPI_PPTT_CACHE", SRC_TYPE_STRUCT}, {"ACPI_PPTT_ID", SRC_TYPE_STRUCT}, + {"ACPI_PPTT_PROCESSOR", SRC_TYPE_STRUCT}, {"ACPI_RSDP_COMMON", SRC_TYPE_STRUCT}, {"ACPI_RSDP_EXTENSION", SRC_TYPE_STRUCT}, {"ACPI_S3PT_RESUME", SRC_TYPE_STRUCT}, {"ACPI_S3PT_SUSPEND", SRC_TYPE_STRUCT}, + {"ACPI_SDEV_HEADER", SRC_TYPE_STRUCT}, + {"ACPI_SDEV_NAMESPACE", SRC_TYPE_STRUCT}, + {"ACPI_SDEV_PCIE", SRC_TYPE_STRUCT}, + {"ACPI_SDEV_PCIE_PATH", SRC_TYPE_STRUCT}, {"ACPI_SRAT_CPU_AFFINITY", SRC_TYPE_STRUCT}, {"ACPI_SRAT_HEADER", SRC_TYPE_STRUCT}, {"ACPI_SRAT_GIC_ITS_AFFINITY", SRC_TYPE_STRUCT}, @@ -947,13 +957,14 @@ ACPI_IDENTIFIER_TABLE LinuxSpecialMacros[] = { ACPI_CONVERSION_TABLE LinuxConversionTable = { - DualLicenseHeader, + EmptyHeader, FLG_NO_CARRIAGE_RETURNS | FLG_LOWERCASE_DIRNAMES, AcpiIdentifiers, /* C source files */ + "// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0\n", LinuxDataTypes, LinuxEliminateLines_C, NULL, @@ -968,6 +979,7 @@ ACPI_CONVERSION_TABLE LinuxConversionTable = /* C header files */ + "/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */\n", LinuxDataTypes, LinuxEliminateLines_H, LinuxConditionalIdentifiers, @@ -1011,6 +1023,7 @@ ACPI_CONVERSION_TABLE CleanupConversionTable = NULL, NULL, NULL, + NULL, (CVT_COUNT_TABS | CVT_COUNT_NON_ANSI_COMMENTS | CVT_COUNT_LINES | CVT_CHECK_BRACES | CVT_TRIM_LINES | CVT_TRIM_WHITESPACE), @@ -1022,6 +1035,7 @@ ACPI_CONVERSION_TABLE CleanupConversionTable = NULL, NULL, NULL, + NULL, (CVT_COUNT_TABS | CVT_COUNT_NON_ANSI_COMMENTS | CVT_COUNT_LINES | CVT_TRIM_LINES | CVT_TRIM_WHITESPACE), @@ -1051,6 +1065,7 @@ ACPI_CONVERSION_TABLE StatsConversionTable = NULL, NULL, NULL, + NULL, (CVT_COUNT_TABS | CVT_COUNT_NON_ANSI_COMMENTS | CVT_COUNT_LINES | CVT_COUNT_SHORTMULTILINE_COMMENTS), @@ -1062,6 +1077,7 @@ ACPI_CONVERSION_TABLE StatsConversionTable = NULL, NULL, NULL, + NULL, (CVT_COUNT_TABS | CVT_COUNT_NON_ANSI_COMMENTS | CVT_COUNT_LINES | CVT_COUNT_SHORTMULTILINE_COMMENTS), @@ -1098,6 +1114,7 @@ ACPI_CONVERSION_TABLE LicenseConversionTable = NULL, NULL, NULL, + NULL, (CVT_COUNT_TABS | CVT_COUNT_NON_ANSI_COMMENTS | CVT_COUNT_LINES | CVT_COUNT_SHORTMULTILINE_COMMENTS), @@ -1109,6 +1126,7 @@ ACPI_CONVERSION_TABLE LicenseConversionTable = NULL, NULL, NULL, + NULL, (CVT_COUNT_TABS | CVT_COUNT_NON_ANSI_COMMENTS | CVT_COUNT_LINES | CVT_COUNT_SHORTMULTILINE_COMMENTS), @@ -1133,8 +1151,8 @@ ACPI_CONVERSION_TABLE LicenseConversionTable = ACPI_STRING_TABLE CustomReplacements[] = { - {"(c) 1999 - 2017", "(c) 1999 - 2017", REPLACE_WHOLE_WORD}, /* Main ACPICA source */ - {"(c) 2006 - 2017", "(c) 2006 - 2017", REPLACE_WHOLE_WORD}, /* Test suites */ + {"(c) 1999 - 2017", "(c) 1999 - 2018", REPLACE_WHOLE_WORD}, /* Main ACPICA source */ + {"(c) 2006 - 2017", "(c) 2006 - 2018", REPLACE_WHOLE_WORD}, /* Test suites */ #if 0 {"SUPPORT, ASSISTANCE", "SUPPORT, ASSISTANCE", REPLACE_WHOLE_WORD}, /* Fix intel header */ @@ -1193,6 +1211,7 @@ ACPI_CONVERSION_TABLE CustomConversionTable = /* C source files */ + NULL, CustomReplacements, LinuxEliminateLines_H, NULL, @@ -1204,6 +1223,7 @@ ACPI_CONVERSION_TABLE CustomConversionTable = /* C header files */ + NULL, CustomReplacements, LinuxEliminateLines_H, NULL, @@ -1240,6 +1260,7 @@ ACPI_CONVERSION_TABLE IndentConversionTable = /* C source files */ + NULL, LinuxSpecialStrings, NULL, NULL, @@ -1251,6 +1272,7 @@ ACPI_CONVERSION_TABLE IndentConversionTable = /* C header files */ + NULL, LinuxSpecialStrings, NULL, NULL, diff --git a/sys/contrib/dev/acpica/source/tools/acpisrc/asutils.c b/sys/contrib/dev/acpica/source/tools/acpisrc/asutils.c index d478bd9f9b..ade0fcd465 100644 --- a/sys/contrib/dev/acpica/source/tools/acpisrc/asutils.c +++ b/sys/contrib/dev/acpica/source/tools/acpisrc/asutils.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -243,12 +243,9 @@ AsReplaceData ( * 1) If adding more bytes than removing, make room for the new data * 2) if removing more bytes than adding, delete the extra space */ - if (LengthToRemove > 0) - { - Gbl_MadeChanges = TRUE; - memmove ((Buffer + LengthToAdd), (Buffer + LengthToRemove), - (BufferLength - LengthToRemove)); - } + Gbl_MadeChanges = TRUE; + memmove ((Buffer + LengthToAdd), (Buffer + LengthToRemove), + (BufferLength - LengthToRemove)); } /* diff --git a/sys/contrib/dev/acpica/source/tools/acpixtract/acpixtract.c b/sys/contrib/dev/acpica/source/tools/acpixtract/acpixtract.c index 32f40f52d0..be9a5210de 100644 --- a/sys/contrib/dev/acpica/source/tools/acpixtract/acpixtract.c +++ b/sys/contrib/dev/acpica/source/tools/acpixtract/acpixtract.c @@ -1,6 +1,7 @@ /****************************************************************************** * - * Module Name: acpixtract - convert ascii ACPI tables to binary + * Module Name: acpixtract - Top level functions to convert ascii/hex + * ACPI tables to the original binary tables * *****************************************************************************/ @@ -8,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -152,13 +153,6 @@ #include "acpixtract.h" -/* Local prototypes */ - -static BOOLEAN -AxIsFileAscii ( - FILE *Handle); - - /****************************************************************************** * * FUNCTION: AxExtractTables @@ -210,21 +204,20 @@ AxExtractTables ( if (Signature) { - strncpy (UpperSignature, Signature, 4); - UpperSignature[4] = 0; + strncpy (UpperSignature, Signature, ACPI_NAME_SIZE); AcpiUtStrupr (UpperSignature); /* Are there enough instances of the table to continue? */ AxNormalizeSignature (UpperSignature); - Instances = AxCountTableInstances (InputPathname, UpperSignature); + if (Instances < MinimumInstances) { printf ("Table [%s] was not found in %s\n", UpperSignature, InputPathname); fclose (InputFile); - return (-1); + return (0); /* Don't abort */ } if (Instances == 0) @@ -238,6 +231,28 @@ AxExtractTables ( while (fgets (Gbl_LineBuffer, AX_LINE_BUFFER_SIZE, InputFile)) { + /* + * Check up front if we have a header line of the form: + * DSDT @ 0xdfffd0c0 (10999 bytes) + */ + if (AX_IS_TABLE_BLOCK_HEADER && + (State == AX_STATE_EXTRACT_DATA)) + { + /* End of previous table, start of new table */ + + if (ThisTableBytesWritten) + { + printf (AX_TABLE_INFO_FORMAT, ThisSignature, ThisTableBytesWritten, + ThisTableBytesWritten, Gbl_OutputFilename); + } + else + { + Gbl_TableCount--; + } + + State = AX_STATE_FIND_HEADER; + } + switch (State) { case AX_STATE_FIND_HEADER: @@ -301,10 +316,15 @@ AxExtractTables ( case AX_STATE_EXTRACT_DATA: + if (!AxIsHexDataLine ()) + { + continue; /* Toss any lines that are not raw hex data */ + } + /* Empty line or non-data line terminates the data block */ - BytesConverted = AxProcessOneTextLine ( - OutputFile, ThisSignature, ThisTableBytesWritten); + BytesConverted = AxConvertAndWrite (OutputFile, ThisSignature, + ThisTableBytesWritten); switch (BytesConverted) { case 0: @@ -341,14 +361,8 @@ CleanupAndExit: { /* Received an input file EOF while extracting data */ - printf (AX_TABLE_INFO_FORMAT, - ThisSignature, ThisTableBytesWritten, Gbl_OutputFilename); - } - - if (Gbl_TableCount > 1) - { - printf ("\n%u binary ACPI tables extracted\n", - Gbl_TableCount); + printf (AX_TABLE_INFO_FORMAT, ThisSignature, ThisTableBytesWritten, + ThisTableBytesWritten, Gbl_OutputFilename); } if (OutputFile) @@ -385,7 +399,7 @@ AxExtractToMultiAmlFile ( int Status = 0; unsigned int TotalBytesWritten = 0; unsigned int ThisTableBytesWritten = 0; - unsigned int BytesConverted; + unsigned int BytesConverted; char ThisSignature[4]; unsigned int State = AX_STATE_FIND_HEADER; @@ -421,6 +435,28 @@ AxExtractToMultiAmlFile ( while (fgets (Gbl_LineBuffer, AX_LINE_BUFFER_SIZE, InputFile)) { + /* + * Check up front if we have a header line of the form: + * DSDT @ 0xdfffd0c0 (10999 bytes) + */ + if (AX_IS_TABLE_BLOCK_HEADER && + (State == AX_STATE_EXTRACT_DATA)) + { + /* End of previous table, start of new table */ + + if (ThisTableBytesWritten) + { + printf (AX_TABLE_INFO_FORMAT, ThisSignature, ThisTableBytesWritten, + ThisTableBytesWritten, Gbl_OutputFilename); + } + else + { + Gbl_TableCount--; + } + + State = AX_STATE_FIND_HEADER; + } + switch (State) { case AX_STATE_FIND_HEADER: @@ -451,9 +487,14 @@ AxExtractToMultiAmlFile ( case AX_STATE_EXTRACT_DATA: + if (!AxIsHexDataLine ()) + { + continue; /* Toss any lines that are not raw hex data */ + } + /* Empty line or non-data line terminates the data block */ - BytesConverted = AxProcessOneTextLine ( + BytesConverted = AxConvertAndWrite ( OutputFile, ThisSignature, ThisTableBytesWritten); switch (BytesConverted) { @@ -487,8 +528,8 @@ CleanupAndExit: { /* Received an input file EOF or error while writing data */ - printf (AX_TABLE_INFO_FORMAT, - ThisSignature, ThisTableBytesWritten, Gbl_OutputFilename); + printf (AX_TABLE_INFO_FORMAT, ThisSignature, ThisTableBytesWritten, + ThisTableBytesWritten, Gbl_OutputFilename); } printf ("\n%u binary ACPI tables extracted and written to %s (%u bytes)\n", @@ -502,7 +543,7 @@ CleanupAndExit: /****************************************************************************** * - * FUNCTION: AxListTables + * FUNCTION: AxListAllTables * * PARAMETERS: InputPathname - Filename for acpidump file * @@ -514,13 +555,13 @@ CleanupAndExit: ******************************************************************************/ int -AxListTables ( +AxListAllTables ( char *InputPathname) { FILE *InputFile; - size_t HeaderSize; unsigned char Header[48]; - ACPI_TABLE_HEADER *TableHeader = (ACPI_TABLE_HEADER *) (void *) Header; + UINT32 ByteCount = 0; + unsigned int State = AX_STATE_FIND_HEADER; /* Open input in text mode, output is in binary mode */ @@ -538,133 +579,74 @@ AxListTables ( return (-1); } - /* Dump the headers for all tables found in the input file */ + /* Info header */ + + printf ("\n Signature Length Version Oem Oem " + "Oem Compiler Compiler\n"); + printf ( " Id TableId " + "RevisionId Name Revision\n"); + printf ( " _________ __________ ____ ________ __________ " + "__________ _______ __________\n\n"); - printf ("\nSignature Length Revision OemId OemTableId" - " OemRevision CompilerId CompilerRevision\n\n"); + /* Dump the headers for all tables found in the input file */ while (fgets (Gbl_LineBuffer, AX_LINE_BUFFER_SIZE, InputFile)) { - /* Ignore empty lines and lines that start with a space */ + /* Ignore empty lines */ - if (AxIsEmptyLine (Gbl_LineBuffer) || - (Gbl_LineBuffer[0] == ' ')) + if (AxIsEmptyLine (Gbl_LineBuffer)) { continue; } - /* Get the 36 byte header and display the fields */ - - HeaderSize = AxGetTableHeader (InputFile, Header); - if (HeaderSize < 16) + /* + * Check up front if we have a header line of the form: + * DSDT @ 0xdfffd0c0 (10999 bytes) + */ + if (AX_IS_TABLE_BLOCK_HEADER && + (State == AX_STATE_EXTRACT_DATA)) { - continue; + State = AX_STATE_FIND_HEADER; } - /* RSDP has an oddball signature and header */ - - if (!strncmp (TableHeader->Signature, "RSD PTR ", 8)) + switch (State) { - AxCheckAscii ((char *) &Header[9], 6); - printf ("%7.4s \"%6.6s\"\n", "RSDP", - &Header[9]); - Gbl_TableCount++; - continue; - } + case AX_STATE_FIND_HEADER: - /* Minimum size for table with standard header */ + ByteCount = 0; + if (!AxIsDataBlockHeader ()) + { + continue; + } - if (HeaderSize < sizeof (ACPI_TABLE_HEADER)) - { + State = AX_STATE_EXTRACT_DATA; continue; - } - if (!AcpiUtValidNameseg (TableHeader->Signature)) - { - continue; - } + case AX_STATE_EXTRACT_DATA: - /* Signature and Table length */ + /* Ignore any lines that don't look like a data line */ - Gbl_TableCount++; - printf ("%7.4s 0x%8.8X", TableHeader->Signature, - TableHeader->Length); + if (!AxIsHexDataLine ()) + { + continue; /* Toss any lines that are not raw hex data */ + } - /* FACS has only signature and length */ + /* Convert header to hex and display it */ - if (ACPI_COMPARE_NAME (TableHeader->Signature, "FACS")) - { - printf ("\n"); + ByteCount += AxConvertToBinary (Gbl_LineBuffer, &Header[ByteCount]); + if (ByteCount >= sizeof (ACPI_TABLE_HEADER)) + { + AxDumpTableHeader (Header); + State = AX_STATE_FIND_HEADER; + } continue; - } - - /* OEM IDs and Compiler IDs */ - - AxCheckAscii (TableHeader->OemId, 6); - AxCheckAscii (TableHeader->OemTableId, 8); - AxCheckAscii (TableHeader->AslCompilerId, 4); - printf ( - " 0x%2.2X \"%6.6s\" \"%8.8s\" 0x%8.8X" - " \"%4.4s\" 0x%8.8X\n", - TableHeader->Revision, TableHeader->OemId, - TableHeader->OemTableId, TableHeader->OemRevision, - TableHeader->AslCompilerId, TableHeader->AslCompilerRevision); + default: + break; + } } printf ("\nFound %u ACPI tables in %s\n", Gbl_TableCount, InputPathname); fclose (InputFile); return (0); } - - -/******************************************************************************* - * - * FUNCTION: AxIsFileAscii - * - * PARAMETERS: Handle - To open input file - * - * RETURN: TRUE if file is entirely ASCII and printable - * - * DESCRIPTION: Verify that the input file is entirely ASCII. - * - ******************************************************************************/ - -static BOOLEAN -AxIsFileAscii ( - FILE *Handle) -{ - UINT8 Byte; - - - /* Read the entire file */ - - while (fread (&Byte, 1, 1, Handle) == 1) - { - /* Check for an ASCII character */ - - if (!ACPI_IS_ASCII (Byte)) - { - goto ErrorExit; - } - - /* Ensure character is either printable or a "space" char */ - - else if (!isprint (Byte) && !isspace (Byte)) - { - goto ErrorExit; - } - } - - /* File is OK (100% ASCII) */ - - fseek (Handle, 0, SEEK_SET); - return (TRUE); - -ErrorExit: - - printf ("File is binary (contains non-text or non-ascii characters)\n"); - fseek (Handle, 0, SEEK_SET); - return (FALSE); - -} diff --git a/sys/contrib/dev/acpica/source/tools/acpixtract/acpixtract.h b/sys/contrib/dev/acpica/source/tools/acpixtract/acpixtract.h index abe2a1903c..88b16670ec 100644 --- a/sys/contrib/dev/acpica/source/tools/acpixtract/acpixtract.h +++ b/sys/contrib/dev/acpica/source/tools/acpixtract/acpixtract.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -180,9 +180,9 @@ #define AX_REQUIRED_TABLE 1 #define AX_UTILITY_NAME "ACPI Binary Table Extraction Utility" -#define AX_SUPPORTED_OPTIONS "ahlms:v" +#define AX_SUPPORTED_OPTIONS "afhlms:v^" #define AX_MULTI_TABLE_FILENAME "amltables.dat" -#define AX_TABLE_INFO_FORMAT "Acpi table [%4.4s] - %7u bytes written to %s\n" +#define AX_TABLE_INFO_FORMAT " %4.4s - %7u bytes written (0x%8.8X) - %s\n" /* Extraction states */ @@ -193,6 +193,9 @@ #define AX_LINE_BUFFER_SIZE 256 #define AX_MIN_BLOCK_HEADER_LENGTH 6 /* strlen ("DSDT @") */ +#define AX_HEX_DATA_LENGTH 49 /* (3 * 16) + 1 for the colon delimiter */ +#define AX_IS_TABLE_BLOCK_HEADER (strlen (Gbl_LineBuffer) < AX_HEX_DATA_LENGTH) && \ + (strstr (Gbl_LineBuffer, " @ ")) typedef struct AxTableInfo @@ -210,11 +213,12 @@ typedef struct AxTableInfo ACPI_GLOBAL (char, Gbl_LineBuffer[AX_LINE_BUFFER_SIZE]); ACPI_GLOBAL (char, Gbl_HeaderBuffer[AX_LINE_BUFFER_SIZE]); ACPI_GLOBAL (char, Gbl_InstanceBuffer[AX_LINE_BUFFER_SIZE]); - ACPI_GLOBAL (AX_TABLE_INFO, *Gbl_TableListHead); ACPI_GLOBAL (char, Gbl_OutputFilename[32]); ACPI_GLOBAL (unsigned char, Gbl_BinaryData[16]); ACPI_GLOBAL (unsigned int, Gbl_TableCount); +ACPI_GLOBAL (BOOLEAN, Gbl_ForceExtraction); + /* * acpixtract.c @@ -230,18 +234,13 @@ AxExtractToMultiAmlFile ( char *InputPathname); int -AxListTables ( +AxListAllTables ( char *InputPathname); /* * axutils.c */ -size_t -AxGetTableHeader ( - FILE *InputFile, - unsigned char *OutputData); - unsigned int AxCountTableInstances ( char *InputPathname, @@ -261,21 +260,33 @@ AxCheckAscii ( char *Name, int Count); -int +BOOLEAN +AxIsFileAscii ( + FILE *Handle); + +BOOLEAN +AxIsHexDataLine ( + void); + +BOOLEAN AxIsEmptyLine ( char *Buffer); -int +BOOLEAN AxIsDataBlockHeader ( void); long -AxProcessOneTextLine ( +AxConvertAndWrite ( FILE *OutputFile, char *ThisSignature, unsigned int ThisTableBytesWritten); size_t -AxConvertLine ( +AxConvertToBinary ( char *InputLine, unsigned char *OutputData); + +void +AxDumpTableHeader ( + unsigned char *Header); diff --git a/sys/contrib/dev/acpica/source/tools/acpixtract/axmain.c b/sys/contrib/dev/acpica/source/tools/acpixtract/axmain.c index f5aa710113..939fdcd0b5 100644 --- a/sys/contrib/dev/acpica/source/tools/acpixtract/axmain.c +++ b/sys/contrib/dev/acpica/source/tools/acpixtract/axmain.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -176,10 +176,12 @@ DisplayUsage ( ACPI_USAGE_HEADER ("acpixtract [option] "); ACPI_OPTION ("-a", "Extract all tables, not just DSDT/SSDT"); + ACPI_OPTION ("-f", "Force extraction, even if there are errors"); ACPI_OPTION ("-l", "List table summaries, do not extract"); ACPI_OPTION ("-m", "Extract multiple DSDT/SSDTs to a single file"); ACPI_OPTION ("-s ", "Extract all tables with "); ACPI_OPTION ("-v", "Display version information"); + ACPI_OPTION ("-vd", "Display build date and time"); ACPI_USAGE_TEXT ("\nExtract binary ACPI tables from text acpidump output\n"); ACPI_USAGE_TEXT ("Default invocation extracts the DSDT and all SSDTs\n"); @@ -207,6 +209,7 @@ main ( Gbl_TableCount = 0; Gbl_TableListHead = NULL; + Gbl_ForceExtraction = FALSE; AxAction = AX_EXTRACT_AML_TABLES; /* Default: DSDT & SSDTs */ ACPI_DEBUG_INITIALIZE (); /* For debug version only */ @@ -228,6 +231,11 @@ main ( AxAction = AX_EXTRACT_ALL; /* Extract all tables found */ break; + case 'f': + + Gbl_ForceExtraction = TRUE; /* Ignore errors */ + break; + case 'l': AxAction = AX_LIST_ALL; /* List tables only, do not extract */ @@ -243,9 +251,25 @@ main ( AxAction = AX_EXTRACT_SIGNATURE; /* Extract only tables with this sig */ break; - case 'v': /* -v: (Version): signon already emitted, just exit */ + case 'v': - return (0); + switch (AcpiGbl_Optarg[0]) + { + case '^': /* -v: (Version): signon already emitted, just exit */ + + exit (0); + + case 'd': + + printf (ACPI_COMMON_BUILD_TIME); + return (0); + + default: + + printf ("Unknown option: -v%s\n", AcpiGbl_Optarg); + return (-1); + } + break; case 'h': default: @@ -279,7 +303,7 @@ main ( case AX_LIST_ALL: - Status = AxListTables (Filename); + Status = AxListAllTables (Filename); break; case AX_EXTRACT_SIGNATURE: diff --git a/sys/contrib/dev/acpica/source/tools/acpixtract/axutils.c b/sys/contrib/dev/acpica/source/tools/acpixtract/axutils.c index 00882c6fed..8fba70047f 100644 --- a/sys/contrib/dev/acpica/source/tools/acpixtract/axutils.c +++ b/sys/contrib/dev/acpica/source/tools/acpixtract/axutils.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -184,6 +184,83 @@ AxCheckAscii ( } +/******************************************************************************* + * + * FUNCTION: AxIsFileAscii + * + * PARAMETERS: Handle - To open input file + * + * RETURN: TRUE if file is entirely ASCII and printable + * + * DESCRIPTION: Verify that the input file is entirely ASCII. + * + ******************************************************************************/ + +BOOLEAN +AxIsFileAscii ( + FILE *Handle) +{ + UINT8 Byte; + UINT32 Offset = 0; + + + /* Read the entire file */ + + fseek (Handle, 0, SEEK_SET); + while (fread (&Byte, 1, 1, Handle) == 1) + { + /* + * Ignore null characters. Some acpidump-type utilities insert + * a few of these, probably a bug in the utility. As long as these + * characters are in lines that are tossed (non-data), they + * won't cause a problem. + */ + if (!Byte) + { + continue; + } + + /* Check for an ASCII character */ + + if (!ACPI_IS_ASCII (Byte)) + { + printf ("Found non-ascii char: %2.2X at file offset %u (0x%X)\n", + Byte, Offset, Offset); + if (!Gbl_ForceExtraction) + { + goto ErrorExit; + } + } + + /* Ensure character is either printable or a "space" char */ + + else if (!isprint (Byte) && !isspace (Byte)) + { + printf ("Found non-printable char: %2.2X at file offset %u (0x%X)\n", + Byte, Offset, Offset); + if (!Gbl_ForceExtraction) + { + goto ErrorExit; + } + } + + Offset++; + } + + /* File is OK (100% ASCII) */ + + fseek (Handle, 0, SEEK_SET); + return (TRUE); + +ErrorExit: + + printf ("File appears to be binary " + "(contains non-text or non-ascii characters)\n"); + fseek (Handle, 0, SEEK_SET); + return (FALSE); +} + + /****************************************************************************** * * FUNCTION: AxIsEmptyLine @@ -196,7 +273,7 @@ AxCheckAscii ( * ******************************************************************************/ -int +BOOLEAN AxIsEmptyLine ( char *Buffer) { @@ -219,6 +296,96 @@ AxIsEmptyLine ( } +/****************************************************************************** + * + * FUNCTION: AxIsHexDataLine + * + * PARAMETERS: None + * + * RETURN: Status. 1 if the table header is valid, 0 otherwise. + * + * DESCRIPTION: Check for a valid line of hex data of the form: + * + * 00a0: 0c 00 00 00 03 00 00 00 43 48 41 35 0c 00 00 00 ........CHA5.... + * + ******************************************************************************/ + +BOOLEAN +AxIsHexDataLine ( + void) +{ + + if (AxIsEmptyLine (Gbl_LineBuffer) || + (Gbl_LineBuffer[0] != ' ')) + { + return (FALSE); + } + + if (!strstr (Gbl_LineBuffer, ": ")) + { + /* Not valid data line */ + + return (FALSE); + } + + return (TRUE); +} + + +/****************************************************************************** + * + * FUNCTION: AxIsDataBlockHeader + * + * PARAMETERS: None + * + * RETURN: Status. 1 if the table header is valid, 0 otherwise. + * + * DESCRIPTION: Check if the ACPI table identifier in the input acpidump text + * file is valid (of the form: @ ). + * + ******************************************************************************/ + +BOOLEAN +AxIsDataBlockHeader ( + void) +{ + + /* Ignore lines that are too short to be header lines */ + + if (strlen (Gbl_LineBuffer) < AX_MIN_BLOCK_HEADER_LENGTH) + { + return (FALSE); + } + + /* Ignore empty lines and lines that start with a space */ + + if (AxIsEmptyLine (Gbl_LineBuffer) || + (Gbl_LineBuffer[0] == ' ')) + { + return (FALSE); + } + + /* + * Ignore lines that are not headers of the form @ . + * Basically, just look for the '@' symbol, surrounded by spaces. + * + * Examples of headers that must be supported: + * + * DSDT @ 0x737e4000 + * XSDT @ 0x737f2fff + * RSD PTR @ 0xf6cd0 + * SSDT @ (nil) + */ + if (!AX_IS_TABLE_BLOCK_HEADER) + { + return (FALSE); + } + + AxNormalizeSignature (Gbl_LineBuffer); + return (TRUE); +} + + /******************************************************************************* * * FUNCTION: AxNormalizeSignature @@ -245,7 +412,7 @@ AxNormalizeSignature ( /****************************************************************************** * - * FUNCTION: AxConvertLine + * FUNCTION: AxConvertToBinary * * PARAMETERS: InputLine - One line from the input acpidump file * OutputData - Where the converted data is returned @@ -254,27 +421,38 @@ AxNormalizeSignature ( * * DESCRIPTION: Convert one line of ascii text binary (up to 16 bytes) * + * NOTE: Assumes the input data line has been validated to be of the form: + * + * 0010: 48 53 57 55 4c 54 2d 52 01 00 00 00 49 4e 54 4c HSWULT-R....INTL + * ******************************************************************************/ size_t -AxConvertLine ( +AxConvertToBinary ( char *InputLine, unsigned char *OutputData) { - char *End; + char *ColonDelimiter; int BytesConverted; int Converted[16]; int i; - /* Terminate the input line at the end of the actual data (for sscanf) */ - - End = strstr (InputLine + 2, " "); - if (!End) - { - return (0); /* Don't understand the format */ - } - *End = 0; + /* + * Terminate input line immediately after the data. Otherwise, the + * second line below will not scan correctly. + * + * This handles varying lengths for the offset: line prefix. This support + * for tables larger than 1mb was added 05/2018. + * + * 00b0: 03 00 00 00 43 48 41 36 0c 00 00 00 03 00 00 00 ....CHA6........ + * 00c0: 43 48 41 37 CHA7 + * + * 012340b0: 03 00 00 00 43 48 41 36 0c 00 00 00 03 00 00 00 ....CHA6........ + * 012340c0: 43 48 41 37 CHA7 + */ + ColonDelimiter = strchr (InputLine, ':'); + ColonDelimiter [AX_HEX_DATA_LENGTH] = 0; /* * Convert one line of table data, of the form: @@ -284,7 +462,7 @@ AxConvertLine ( * 02C0: 5F 53 42 5F 4C 4E 4B 44 00 12 13 04 0C FF FF 08 _SB_LNKD........ */ BytesConverted = sscanf (InputLine, - "%*s %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x", + "%*s %2X %2X %2X %2X %2X %2X %2X %2X %2X %2X %2X %2X %2X %2X %2X %2X", &Converted[0], &Converted[1], &Converted[2], &Converted[3], &Converted[4], &Converted[5], &Converted[6], &Converted[7], &Converted[8], &Converted[9], &Converted[10], &Converted[11], @@ -303,52 +481,6 @@ AxConvertLine ( /****************************************************************************** * - * FUNCTION: AxGetTableHeader - * - * PARAMETERS: InputFile - Handle for the input acpidump file - * OutputData - Where the table header is returned - * - * RETURN: The actual number of bytes converted - * - * DESCRIPTION: Extract and convert an ACPI table header - * - ******************************************************************************/ - -size_t -AxGetTableHeader ( - FILE *InputFile, - unsigned char *OutputData) -{ - size_t BytesConverted; - size_t TotalConverted = 0; - int i; - - - /* Get the full 36 byte ACPI table header, requires 3 input text lines */ - - for (i = 0; i < 3; i++) - { - if (!fgets (Gbl_HeaderBuffer, AX_LINE_BUFFER_SIZE, InputFile)) - { - return (TotalConverted); - } - - BytesConverted = AxConvertLine (Gbl_HeaderBuffer, OutputData); - TotalConverted += BytesConverted; - OutputData += 16; - - if (BytesConverted != 16) - { - return (TotalConverted); - } - } - - return (TotalConverted); -} - - -/****************************************************************************** - * * FUNCTION: AxCountTableInstances * * PARAMETERS: InputPathname - Filename for acpidump file @@ -467,105 +599,154 @@ AxGetNextInstance ( /****************************************************************************** * - * FUNCTION: AxIsDataBlockHeader + * FUNCTION: AxConvertAndWrite * - * PARAMETERS: None + * PARAMETERS: OutputFile - Where to write the binary data + * ThisSignature - Signature of current ACPI table + * ThisTableBytesWritten - Total count of data written * - * RETURN: Status. 1 if the table header is valid, 0 otherwise. + * RETURN: Length of the converted line * - * DESCRIPTION: Check if the ACPI table identifier in the input acpidump text - * file is valid (of the form: @ ). + * DESCRIPTION: Convert one line of input hex ascii text to binary, and write + * the binary data to the table output file. + * + * NOTE: Assumes the input data line has been validated to be of the form: + * + * 0010: 48 53 57 55 4c 54 2d 52 01 00 00 00 49 4e 54 4c HSWULT-R....INTL * ******************************************************************************/ -int -AxIsDataBlockHeader ( - void) +long +AxConvertAndWrite ( + FILE *OutputFile, + char *ThisSignature, + unsigned int ThisTableBytesWritten) { + size_t BytesWritten; + size_t BytesConverted; - /* Ignore lines that are too short to be header lines */ - if (strlen (Gbl_LineBuffer) < AX_MIN_BLOCK_HEADER_LENGTH) - { - return (0); - } + /* Convert one line of ascii hex data to binary */ - /* Ignore empty lines and lines that start with a space */ + BytesConverted = AxConvertToBinary (Gbl_LineBuffer, Gbl_BinaryData); - if (AxIsEmptyLine (Gbl_LineBuffer) || - (Gbl_LineBuffer[0] == ' ')) + /* Write the binary data */ + + if (!BytesConverted) { return (0); } - /* - * Ignore lines that are not headers of the form @ . - * Basically, just look for the '@' symbol, surrounded by spaces. - * - * Examples of headers that must be supported: - * - * DSDT @ 0x737e4000 - * XSDT @ 0x737f2fff - * RSD PTR @ 0xf6cd0 - * SSDT @ (nil) - */ - if (!strstr (Gbl_LineBuffer, " @ ")) + BytesWritten = fwrite (Gbl_BinaryData, 1, BytesConverted, OutputFile); + if (BytesWritten != BytesConverted) { - return (0); + printf ("Error while writing file %s\n", Gbl_OutputFilename); + return (-1); } - AxNormalizeSignature (Gbl_LineBuffer); - return (1); + return (BytesWritten); } /****************************************************************************** * - * FUNCTION: AxProcessOneTextLine + * FUNCTION: AxDumpTableHeader * - * PARAMETERS: OutputFile - Where to write the binary data - * ThisSignature - Signature of current ACPI table - * ThisTableBytesWritten - Total count of data written + * PARAMETERS: Header - A binary ACPI table header * - * RETURN: Length of the converted line + * RETURN: None * - * DESCRIPTION: Convert one line of input hex ascii text to binary, and write - * the binary data to the table output file. + * DESCRIPTION: Display the contents of a standard ACPI table header * ******************************************************************************/ -long -AxProcessOneTextLine ( - FILE *OutputFile, - char *ThisSignature, - unsigned int ThisTableBytesWritten) +void +AxDumpTableHeader ( + unsigned char *Header) { - size_t BytesWritten; - size_t BytesConverted; + ACPI_TABLE_HEADER *TableHeader = (ACPI_TABLE_HEADER *) (void *) Header; + ACPI_TABLE_RSDP *Rsdp = (ACPI_TABLE_RSDP *) (void *) Header; + ACPI_TABLE_FACS *Facs = (ACPI_TABLE_FACS *) (void *) Header; - /* Check for the end of this table data block */ + /* RSDP has an oddball signature and header */ - if (AxIsEmptyLine (Gbl_LineBuffer) || - (Gbl_LineBuffer[0] != ' ')) + if (!strncmp (TableHeader->Signature, "RSD PTR ", 8)) { - printf (AX_TABLE_INFO_FORMAT, - ThisSignature, ThisTableBytesWritten, Gbl_OutputFilename); - return (0); + AxCheckAscii ((char *) &Header[9], 6); + + Gbl_TableCount++; + printf (" %.2u) %5.4s 0x%8.8X 0x%2.2X \"%6.6s\"\n", + Gbl_TableCount, "RSDP", Rsdp->Length, Rsdp->Revision, Rsdp->OemId); + return; } - /* Convert one line of ascii hex data to binary */ + if (!AcpiUtValidNameseg (TableHeader->Signature)) + { + return; + } - BytesConverted = AxConvertLine (Gbl_LineBuffer, Gbl_BinaryData); + /* Signature and Table length */ - /* Write the binary data */ + Gbl_TableCount++; + printf (" %.2u) %5.4s 0x%8.8X", Gbl_TableCount, TableHeader->Signature, + TableHeader->Length); - BytesWritten = fwrite (Gbl_BinaryData, 1, BytesConverted, OutputFile); - if (BytesWritten != BytesConverted) + /* FACS has only signature and length */ + + if (ACPI_COMPARE_NAME (TableHeader->Signature, "FACS")) { - printf ("Error while writing file %s\n", Gbl_OutputFilename); - return (-1); + printf (" 0x%2.2X\n", Facs->Version); + return; } - return (BytesWritten); + /* OEM IDs and Compiler IDs */ + + AxCheckAscii (TableHeader->OemId, 6); + AxCheckAscii (TableHeader->OemTableId, 8); + AxCheckAscii (TableHeader->AslCompilerId, 4); + + printf ( + " 0x%2.2X \"%6.6s\" \"%8.8s\" 0x%8.8X" + " \"%4.4s\" 0x%8.8X\n", + TableHeader->Revision, TableHeader->OemId, + TableHeader->OemTableId, TableHeader->OemRevision, + TableHeader->AslCompilerId, TableHeader->AslCompilerRevision); +} + + +#ifdef _AX_FUTURE_ENHANCEMENTS + +/* Possible enhancement to validate table lengths */ + +void +AxCheckTableLengths ( + UINT32 ByteCount, + UINT32 AmlByteCount) +{ + + if (AmlByteCount == 0) + { + return; + } + + if (ByteCount == 0) + { + return; + } + + if ((ByteCount < sizeof (ACPI_TABLE_HEADER)) && + (ByteCount >= ACPI_NAME_SIZE)) + { + printf (" : (Table too short for an ACPI table)"); + } + + else if (ByteCount != AmlByteCount) + { + printf (" : (Hex data length mismatch with AML length 0x%X)", + AmlByteCount); + } + + printf ("\n"); } +#endif diff --git a/sys/contrib/dev/acpica/source/tools/efihello/efihello.c b/sys/contrib/dev/acpica/source/tools/efihello/efihello.c index ed3dc7e79d..d0cf75ef54 100644 --- a/sys/contrib/dev/acpica/source/tools/efihello/efihello.c +++ b/sys/contrib/dev/acpica/source/tools/efihello/efihello.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/tools/examples/examples.c b/sys/contrib/dev/acpica/source/tools/examples/examples.c index 313f64e582..a0b2ac39ce 100644 --- a/sys/contrib/dev/acpica/source/tools/examples/examples.c +++ b/sys/contrib/dev/acpica/source/tools/examples/examples.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License @@ -212,9 +212,6 @@ RegionInit ( static void ExecuteMAIN (void); -static void -ExecuteOSI (void); - ACPI_STATUS InitializeAcpiTables ( void); @@ -263,7 +260,7 @@ main ( ACPI_EXCEPTION ((AE_INFO, AE_AML_OPERAND_TYPE, "Example ACPICA exception message")); - ExecuteOSI (); + ExecuteOSI (NULL, 0); ExecuteMAIN (); return (0); } @@ -540,8 +537,10 @@ InstallHandlers (void) * *****************************************************************************/ -static void -ExecuteOSI (void) +ACPI_STATUS +ExecuteOSI ( + char *OsiString, + UINT64 ExpectedResult) { ACPI_STATUS Status; ACPI_OBJECT_LIST ArgList; @@ -569,7 +568,7 @@ ExecuteOSI (void) if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "While executing _OSI")); - return; + return (AE_OK); } /* Ensure that the return object is large enough */ @@ -598,6 +597,7 @@ ErrorExit: /* Free a buffer created via ACPI_ALLOCATE_BUFFER */ AcpiOsFree (ReturnValue.Pointer); + return (AE_OK); } diff --git a/sys/contrib/dev/acpica/source/tools/examples/examples.h b/sys/contrib/dev/acpica/source/tools/examples/examples.h index ca3a86f42e..e34e3a7752 100644 --- a/sys/contrib/dev/acpica/source/tools/examples/examples.h +++ b/sys/contrib/dev/acpica/source/tools/examples/examples.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/tools/examples/exstubs.c b/sys/contrib/dev/acpica/source/tools/examples/exstubs.c index ff0eb07c8c..a938604c35 100644 --- a/sys/contrib/dev/acpica/source/tools/examples/exstubs.c +++ b/sys/contrib/dev/acpica/source/tools/examples/exstubs.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/source/tools/examples/extables.c b/sys/contrib/dev/acpica/source/tools/examples/extables.c index a194dee6e7..b3d67967fc 100644 --- a/sys/contrib/dev/acpica/source/tools/examples/extables.c +++ b/sys/contrib/dev/acpica/source/tools/examples/extables.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/tests/misc/badcode.asl b/sys/contrib/dev/acpica/tests/misc/badcode.asl index 33ce923fb1..996adfc74f 100644 --- a/sys/contrib/dev/acpica/tests/misc/badcode.asl +++ b/sys/contrib/dev/acpica/tests/misc/badcode.asl @@ -404,4 +404,3 @@ DefinitionBlock ("badcode.aml", "DSDT", 1, "Intel", "Example", 0x00000001) Store (40, Local0) } } - diff --git a/sys/contrib/dev/acpica/tests/misc/converterSample.asl b/sys/contrib/dev/acpica/tests/misc/converterSample.asl index f3141dc643..380b65cf8e 100644 --- a/sys/contrib/dev/acpica/tests/misc/converterSample.asl +++ b/sys/contrib/dev/acpica/tests/misc/converterSample.asl @@ -6,7 +6,7 @@ DefinitionBlock( "converterSample.aml", /* These comments */ "DSDT", /* within the */ 0x02, /* definition block header */ - "Intel", /* are not retained. */ + "Intel", /* are not retained. */ "Many", /* They will be */ 0x00000001 /* Discarded */) { @@ -81,4 +81,3 @@ DefinitionBlock( } //c39 /*ending comment*/ - diff --git a/sys/contrib/dev/acpica/tests/misc/grammar.asl b/sys/contrib/dev/acpica/tests/misc/grammar.asl index 981c74e341..5200cccc5d 100644 --- a/sys/contrib/dev/acpica/tests/misc/grammar.asl +++ b/sys/contrib/dev/acpica/tests/misc/grammar.asl @@ -1,5 +1,5 @@ /* - * Some or all of this work - Copyright (c) 2006 - 2017, Intel Corp. + * Some or all of this work - Copyright (c) 2006 - 2018, Intel Corp. * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, @@ -4475,7 +4475,7 @@ DefinitionBlock ( // Result //Nothing | SuperName //) => Integer //Source and ShiftCount are evaluated as integer data types. Source is shifted right with the most significant bit -//zeroed ShiftCount times. The result is optionally stored into Result. +//zeroed ShiftCount times. The result is optionally stored into Result. //ShiftLeft( // Source, //TermArg=>Integer @@ -5806,10 +5806,10 @@ DefinitionBlock ( // Test for SizeOf (Lvalue) // // This next section will contain the packages that the SizeOfOp will be -// exercised on. The first one, PKG0, is a regular package of 3 elements. +// exercised on. The first one, PKG0, is a regular package of 3 elements. // The 2nd one, PKG1, is a nested package with 3 packages inside it, each -// with 3 elements. It is expected that SizeOf operator will return the -// same value for these two packages since they both have 3 elements. The +// with 3 elements. It is expected that SizeOf operator will return the +// same value for these two packages since they both have 3 elements. The // final package, PKG2, has 4 elements and the SizeOf operator is expected // to return different results for this package. @@ -5840,7 +5840,7 @@ DefinitionBlock ( // End Packages ********************************************************** // The following section will declare the data strings that will be used to -// exercise the SizeOf operator. STR0 and STR1 are expected to be equal, +// exercise the SizeOf operator. STR0 and STR1 are expected to be equal, // STR2 is expected to have a different SizeOf value than STR0 and STR1. Name (STR0, "ACPI permits very flexible methods of expressing a system") @@ -5869,7 +5869,7 @@ DefinitionBlock ( Method (CMPR, 2) { - // CMPR is passed two arguments. If unequal, return 1 to indicate + // CMPR is passed two arguments. If unequal, return 1 to indicate // that, otherwise return 0 to indicate SizeOf each is equal. Store (0x01, Local0) @@ -5899,7 +5899,7 @@ DefinitionBlock ( // TBD: SLOC [SizeOf (Local0)] -- dup SARG - // Compare the elements that we expect to be the same. Exit out with an error + // Compare the elements that we expect to be the same. Exit out with an error // code on the first failure. if (LNotEqual (0x00, CMPR (STR0, STR1))) { @@ -5935,7 +5935,7 @@ DefinitionBlock ( Return (0x05) } - // Finally, check for the return of SizeOf for a known Buffer. Just + // Finally, check for the return of SizeOf for a known Buffer. Just // in case we magically pass above cases due to all Buffers being Zero // bytes in size, or Infinity, etc. if (LNotEqual (0x05, SizeOf (BUF3))) @@ -6293,7 +6293,7 @@ DefinitionBlock ( Store (0, B1HI) // We'll multiply 25 * 3 to get 75, add 99 to it then divide - // by 100. We expect to get 74 for the remainder and 1 for + // by 100. We expect to get 74 for the remainder and 1 for // the quotient. Divide( Add (Multiply (3, MKW_ (B1LO, B1HI)), 0x63), @@ -6661,8 +6661,8 @@ DefinitionBlock ( // // BitIndex test // This is a test case for accessing fields defined as single bits in -// memory. This is done by creating two index fields that overlay the -// same DWORD in memory. One field accesses the DWORD as a DWORD, the +// memory. This is done by creating two index fields that overlay the +// same DWORD in memory. One field accesses the DWORD as a DWORD, the // other accesses individual bits of the same DWORD field in memory. // Scope (\_SB) // System Bus @@ -6748,8 +6748,8 @@ DefinitionBlock ( Or (Local0, 0x08, Local0) } - // Now check the upper nibble. Only the "even" bits should - // be set. BIT4, BIT6. BIT5 and BIT7 should be clear. + // Now check the upper nibble. Only the "even" bits should + // be set. BIT4, BIT6. BIT5 and BIT7 should be clear. If (LNot (BIT4)) { Or (Local0, 0x10, Local0) @@ -8340,7 +8340,7 @@ DefinitionBlock ( // // The following sections have been rewritten because storing into // an Indexed buffer only changes one byte - the FIRST byte of the - // buffer is written to the source index. This is the ONLY byte + // buffer is written to the source index. This is the ONLY byte // written -- as per ACPI 2.0 // // Overwrite DEST contents, at buffer position 2 [only] @@ -8573,7 +8573,7 @@ DefinitionBlock ( // // This section was modified from the original iPCO code because - // it attempted to compare two buffers. This is not allowed until + // it attempted to compare two buffers. This is not allowed until // ACPI v2.0, so the test has been modified to just check the // changed \_SB.MEM.SMD0 // @@ -10280,4 +10280,3 @@ DefinitionBlock ( }) // END MBUF } //end DefinitionBlock - diff --git a/sys/dev/acpica/acpi.c b/sys/dev/acpica/acpi.c index c8f5f71d53..ad19a68d99 100644 --- a/sys/dev/acpica/acpi.c +++ b/sys/dev/acpica/acpi.c @@ -1971,25 +1971,20 @@ acpi_enable_fixed_events(struct acpi_softc *sc) BOOLEAN acpi_DeviceIsPresent(device_t dev) { - ACPI_DEVICE_INFO *devinfo; ACPI_HANDLE h; - int ret; + UINT32 s; + ACPI_STATUS status; - ret = FALSE; - if ((h = acpi_get_handle(dev)) == NULL || - ACPI_FAILURE(AcpiGetObjectInfo(h, &devinfo))) + h = acpi_get_handle(dev); + if (h == NULL) return (FALSE); + status = acpi_GetInteger(h, "_STA", &s); /* If no _STA method, must be present */ - if ((devinfo->Valid & ACPI_VALID_STA) == 0) - ret = TRUE; - - /* Return true for 'present' and 'functioning' */ - if (ACPI_DEVICE_PRESENT(devinfo->CurrentStatus)) - ret = TRUE; + if (ACPI_FAILURE(status)) + return (status == AE_NOT_FOUND ? TRUE : FALSE); - AcpiOsFree(devinfo); - return (ret); + return (ACPI_DEVICE_PRESENT(s) ? TRUE : FALSE); } /* @@ -1998,25 +1993,20 @@ acpi_DeviceIsPresent(device_t dev) BOOLEAN acpi_BatteryIsPresent(device_t dev) { - ACPI_DEVICE_INFO *devinfo; ACPI_HANDLE h; - int ret; + UINT32 s; + ACPI_STATUS status; - ret = FALSE; - if ((h = acpi_get_handle(dev)) == NULL || - ACPI_FAILURE(AcpiGetObjectInfo(h, &devinfo))) + h = acpi_get_handle(dev); + if (h == NULL) return (FALSE); + status = acpi_GetInteger(h, "_STA", &s); /* If no _STA method, must be present */ - if ((devinfo->Valid & ACPI_VALID_STA) == 0) - ret = TRUE; - - /* Return true for 'present', 'battery present', and 'functioning' */ - if (ACPI_BATTERY_PRESENT(devinfo->CurrentStatus)) - ret = TRUE; + if (ACPI_FAILURE(status)) + return (status == AE_NOT_FOUND ? TRUE : FALSE); - AcpiOsFree(devinfo); - return (ret); + return (ACPI_BATTERY_PRESENT(s) ? TRUE : FALSE); } /* diff --git a/usr.sbin/acpi/acpibin/acpibin.8 b/usr.sbin/acpi/acpibin/acpibin.8 index f0cb6fe2b4..938edffe2c 100644 --- a/usr.sbin/acpi/acpibin/acpibin.8 +++ b/usr.sbin/acpi/acpibin/acpibin.8 @@ -28,7 +28,7 @@ .\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd November 23, 2016 +.Dd May 11, 2018 .Dt ACPIBIN 8 .Os .Sh NAME @@ -46,10 +46,6 @@ Compare two binary AML files, dump all mismatches. Compare two binary AML files, dump first 100 mismatches. .It Fl d Ar in Ar out Dump AML binary to text file. -.It Fl e Ar sig Ar in ar out -Extract binary AML table from -.Xr acpidump 8 -file. .It Fl h Ar file Display table header for binary AML file. .It Fl o Ar value @@ -60,6 +56,8 @@ Update checksum for binary AML file. Terse mode. .It Fl v Display version information. +.It Fl vd +Display build date and time. .El .Sh SEE ALSO .Xr acpi 4 , diff --git a/usr.sbin/acpi/acpidump/acpidump.8 b/usr.sbin/acpi/acpidump/acpidump.8 index 7fd375b418..fe72f2424a 100644 --- a/usr.sbin/acpi/acpidump/acpidump.8 +++ b/usr.sbin/acpi/acpidump/acpidump.8 @@ -28,7 +28,7 @@ .\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd July 1, 2017 +.Dd May 11, 2018 .Dt ACPIDUMP 8 .Os .Sh NAME @@ -63,6 +63,8 @@ Dump tables from specified RSDP. Print table summaries only. .It Fl v Display version information. +.It Fl vd +Display build date and time. .It Fl x Use RSDT instead of XSDT. .It Fl z diff --git a/usr.sbin/acpi/acpiexec/Makefile b/usr.sbin/acpi/acpiexec/Makefile index 8e6d1c16a2..839c7fe819 100644 --- a/usr.sbin/acpi/acpiexec/Makefile +++ b/usr.sbin/acpi/acpiexec/Makefile @@ -16,9 +16,11 @@ SRCS= \ aeexception.c \ aehandlers.c \ aeinitfile.c \ + aeinstall.c \ aemain.c \ aeregion.c \ - aetables.c + aetables.c \ + aetests.c SRCS+= \ acfileio.c \ @@ -115,6 +117,7 @@ SRCS+= \ hwpci.c \ hwregs.c \ hwsleep.c \ + hwtimer.c \ hwvalid.c \ hwxface.c \ hwxfsleep.c \ diff --git a/usr.sbin/acpi/acpiexec/acpiexec.8 b/usr.sbin/acpi/acpiexec/acpiexec.8 index fdea91d4ca..2ba6b67c43 100644 --- a/usr.sbin/acpi/acpiexec/acpiexec.8 +++ b/usr.sbin/acpi/acpiexec/acpiexec.8 @@ -28,7 +28,7 @@ .\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd September 4, 2016 +.Dd May 11, 2018 .Dt ACPIEXEC 8 .Os .Sh NAME @@ -45,10 +45,14 @@ The following options are supported: Batch mode command line execution (cmd1;cmd2;...). .It Fl da Disable method abort on error. +.It Fl df +Disable Local fault handler. .It Fl di Disable execution of STA/INI methods during init. .It Fl do Disable Operation Region address simulation. +.It Fl dp +Disable TermList parsing for scope objects. .It Fl dr Disable repair of method return values. .It Fl ds @@ -64,9 +68,7 @@ Enable additional tests for ACPICA interfaces. .It Fl el Enable loading of additional test tables. .It Fl em -Enable grouping of module-level code. -.It Fl ep -Enable TermList parsing for scope objects. +Enable (legacy) grouping of module-level code. .It Fl es Enable Interpreter Slack Mode. .It Fl et @@ -80,8 +82,6 @@ Display the help message. .It Fl \&? Alias for .Fl h . -.It Fl i Ar count -Set maximum iterations for AML while loops. .It Fl l Load tables and namespace only. .It Fl m Op Ar method @@ -90,6 +90,10 @@ The default method is .Sy MAIN . .It Fl r Use hardware-reduced FADT V5. +.It Fl te +Exit loop on timeout instead of aborting method. +.It Fl to Ar seconds +Set timeout period for AML while loops. .It Fl v Display version information. .It Fl vd diff --git a/usr.sbin/acpi/acpihelp/acpihelp.8 b/usr.sbin/acpi/acpihelp/acpihelp.8 index 31655e2bcf..0458022816 100644 --- a/usr.sbin/acpi/acpihelp/acpihelp.8 +++ b/usr.sbin/acpi/acpihelp/acpihelp.8 @@ -28,7 +28,7 @@ .\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd July 30, 2016 +.Dd May 11, 2018 .Dt ACPIHELP 8 .Os .Sh NAME @@ -69,6 +69,8 @@ Display supported ACPI tables. Display ACPI-related UUIDs. .It Fl v Display version information. +.It Fl vd +Display build date and time. .El .Pp If neither diff --git a/usr.sbin/acpi/acpinames/Makefile b/usr.sbin/acpi/acpinames/Makefile index 64ca2a9bc2..e1fa89047d 100644 --- a/usr.sbin/acpi/acpinames/Makefile +++ b/usr.sbin/acpi/acpinames/Makefile @@ -93,6 +93,7 @@ SRCS+= \ utmath.c \ utmisc.c \ utmutex.c \ + utnonansi.c \ utobject.c \ utosi.c \ utownerid.c \ diff --git a/usr.sbin/acpi/acpinames/acpinames.8 b/usr.sbin/acpi/acpinames/acpinames.8 index 8315d9a8f3..de0e6370d8 100644 --- a/usr.sbin/acpi/acpinames/acpinames.8 +++ b/usr.sbin/acpi/acpinames/acpinames.8 @@ -28,7 +28,7 @@ .\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd August 21, 2015 +.Dd May 11, 2018 .Dt ACPINAMES 8 .Os .Sh NAME @@ -50,6 +50,8 @@ Alias for Load namespace only, no display. .It Fl v Display version information. +.It Fl vd +Display build date and time. .It Fl x Ar debug_level Set debug output level. .El diff --git a/usr.sbin/acpi/acpixtract/acpixtract.8 b/usr.sbin/acpi/acpixtract/acpixtract.8 index bd87e686c8..f4ffc361b2 100644 --- a/usr.sbin/acpi/acpixtract/acpixtract.8 +++ b/usr.sbin/acpi/acpixtract/acpixtract.8 @@ -28,7 +28,7 @@ .\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd November 25, 2015 +.Dd May 11, 2018 .Dt ACPIXTRACT 8 .Os .Sh NAME @@ -43,6 +43,8 @@ The following options are supported: .Bl -tag -width indent .It Fl a Extract all tables, not just DSDT/SSDT. +.It Fl f +Force extraction, even if there are errors. .It Fl l List table summaries, do not extract. .It Fl m @@ -52,6 +54,8 @@ Extract all tables with .Ar signature . .It Fl v Display version information. +.It Fl vd +Display build date and time. .El .Sh SEE ALSO .Xr acpi 4 , diff --git a/usr.sbin/acpi/iasl/Makefile b/usr.sbin/acpi/iasl/Makefile index 175c16c5b1..5b7d59927a 100644 --- a/usr.sbin/acpi/iasl/Makefile +++ b/usr.sbin/acpi/iasl/Makefile @@ -29,9 +29,11 @@ SRCS= \ ahpredef.c \ ahtable.c \ ahuuids.c \ + aslallocate.c \ aslanalyze.c \ aslascii.c \ aslbtypes.c \ + aslcache.c \ aslcodegen.c \ aslcompile.c \ asldebug.c \ @@ -103,7 +105,13 @@ SRCS= \ dmtable.c \ dmtables.c \ dmtbdump.c \ + dmtbdump1.c \ + dmtbdump2.c \ + dmtbdump3.c \ dmtbinfo.c \ + dmtbinfo1.c \ + dmtbinfo2.c \ + dmtbinfo3.c \ dmutils.c \ dmwalk.c \ dsargs.c \ -- 2.11.4.GIT