aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJung-uk Kim <jkim@FreeBSD.org>2017-09-29 17:08:30 +0000
committerJung-uk Kim <jkim@FreeBSD.org>2017-09-29 17:08:30 +0000
commit2c673001fb88105f2d160032c4d4b76cb518e37f (patch)
tree3fc3b6aef8822267bd455907a6fce55c3f98b2ed
parent0810e26699e1b40b9384eca2137be6155de0a5ba (diff)
downloadsrc-2c673001fb88105f2d160032c4d4b76cb518e37f.tar.gz
src-2c673001fb88105f2d160032c4d4b76cb518e37f.zip
Import ACPICA 20170929.vendor/acpica/20170929
Notes
Notes: svn path=/vendor-sys/acpica/dist/; revision=324104 svn path=/vendor-sys/acpica/20170929/; revision=324105; tag=vendor/acpica/20170929
-rw-r--r--changes.txt100
-rw-r--r--generate/unix/acpiexec/Makefile1
-rw-r--r--generate/unix/iasl/Makefile2
-rw-r--r--source/common/adfile.c4
-rw-r--r--source/common/ahtable.c2
-rw-r--r--source/common/dmtable.c71
-rw-r--r--source/common/dmtbdump.c1024
-rw-r--r--source/common/dmtbinfo.c160
-rw-r--r--source/compiler/aslallocate.c303
-rw-r--r--source/compiler/aslcache.c481
-rw-r--r--source/compiler/aslcompile.c66
-rw-r--r--source/compiler/aslcompiler.h71
-rw-r--r--source/compiler/aslcompiler.l4
-rw-r--r--source/compiler/asldebug.c2
-rw-r--r--source/compiler/aslerror.c794
-rw-r--r--source/compiler/aslfiles.c7
-rw-r--r--source/compiler/aslhelp.c1
-rw-r--r--source/compiler/aslload.c30
-rw-r--r--source/compiler/aslmapenter.c4
-rw-r--r--source/compiler/aslmaputils.c4
-rw-r--r--source/compiler/aslmessages.c4
-rw-r--r--source/compiler/aslmessages.h2
-rw-r--r--source/compiler/aslmethod.c43
-rw-r--r--source/compiler/asloperands.c4
-rw-r--r--source/compiler/aslopt.c2
-rw-r--r--source/compiler/asloptions.c9
-rw-r--r--source/compiler/aslparseop.c55
-rw-r--r--source/compiler/aslprintf.c4
-rw-r--r--source/compiler/aslstartup.c4
-rw-r--r--source/compiler/aslsupport.l4
-rw-r--r--source/compiler/asltypes.h9
-rw-r--r--source/compiler/aslutils.c221
-rw-r--r--source/compiler/cvcompiler.c16
-rw-r--r--source/compiler/cvparser.c2
-rw-r--r--source/compiler/dtcompile.c8
-rw-r--r--source/compiler/dtcompiler.h33
-rw-r--r--source/compiler/dtexpress.c1
-rw-r--r--source/compiler/dtfield.c1
-rw-r--r--source/compiler/dtio.c5
-rw-r--r--source/compiler/dtparser.y1
-rw-r--r--source/compiler/dtsubtable.c3
-rw-r--r--source/compiler/dttable.c1
-rw-r--r--source/compiler/dttable1.c1
-rw-r--r--source/compiler/dttable2.c377
-rw-r--r--source/compiler/dttemplate.c3
-rw-r--r--source/compiler/dttemplate.h46
-rw-r--r--source/compiler/dtutils.c153
-rw-r--r--source/compiler/prexpress.c2
-rw-r--r--source/compiler/prmacros.c2
-rw-r--r--source/compiler/prparser.y1
-rw-r--r--source/compiler/prscan.c1
-rw-r--r--source/compiler/prutils.c4
-rw-r--r--source/components/dispatcher/dscontrol.c17
-rw-r--r--source/components/hardware/hwtimer.c27
-rw-r--r--source/components/namespace/nsaccess.c14
-rw-r--r--source/components/namespace/nssearch.c1
-rw-r--r--source/components/parser/psobject.c9
-rw-r--r--source/components/parser/psutils.c8
-rw-r--r--source/components/utilities/utinit.c1
-rw-r--r--source/components/utilities/utmath.c4
-rw-r--r--source/include/acapps.h3
-rw-r--r--source/include/acconfig.h4
-rw-r--r--source/include/acdisasm.h27
-rw-r--r--source/include/acexcep.h4
-rw-r--r--source/include/aclocal.h2
-rw-r--r--source/include/acpixf.h6
-rw-r--r--source/include/actbl1.h92
-rw-r--r--source/include/actbl2.h14
-rw-r--r--source/include/actypes.h2
-rw-r--r--source/tools/acpibin/abmain.c21
-rw-r--r--source/tools/acpidump/apmain.c26
-rw-r--r--source/tools/acpiexec/aecommon.h1
-rw-r--r--source/tools/acpiexec/aeexception.c11
-rw-r--r--source/tools/acpiexec/aeexec.c13
-rw-r--r--source/tools/acpiexec/aemain.c66
-rw-r--r--source/tools/acpihelp/ahmain.c21
-rw-r--r--source/tools/acpinames/anmain.c23
-rw-r--r--source/tools/acpisrc/asmain.c6
-rw-r--r--source/tools/acpisrc/astable.c9
-rw-r--r--source/tools/acpixtract/acpixtract.c241
-rw-r--r--source/tools/acpixtract/acpixtract.h35
-rw-r--r--source/tools/acpixtract/axmain.c23
-rw-r--r--source/tools/acpixtract/axutils.c396
83 files changed, 3632 insertions, 1648 deletions
diff --git a/changes.txt b/changes.txt
index db25f7e5fb91..b40fa3209912 100644
--- a/changes.txt
+++ b/changes.txt
@@ -1,4 +1,104 @@
----------------------------------------
+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/generate/unix/acpiexec/Makefile b/generate/unix/acpiexec/Makefile
index 681442c375e7..fc45da8dc877 100644
--- a/generate/unix/acpiexec/Makefile
+++ b/generate/unix/acpiexec/Makefile
@@ -140,6 +140,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/generate/unix/iasl/Makefile b/generate/unix/iasl/Makefile
index 02390ea1c943..27f5d8d276c9 100644
--- a/generate/unix/iasl/Makefile
+++ b/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\
diff --git a/source/common/adfile.c b/source/common/adfile.c
index ac96156db245..80462f1779a8 100644
--- a/source/common/adfile.c
+++ b/source/common/adfile.c
@@ -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);
}
diff --git a/source/common/ahtable.c b/source/common/ahtable.c
index 7aee3c669be8..be68ed480ca9 100644
--- a/source/common/ahtable.c
+++ b/source/common/ahtable.c
@@ -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/source/common/dmtable.c b/source/common/dmtable.c
index 38248c2c4536..07d27faf78b0 100644
--- a/source/common/dmtable.c
+++ b/source/common/dmtable.c
@@ -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",
@@ -374,7 +373,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 +381,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 +402,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 +510,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 +518,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 +526,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 +942,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 +974,7 @@ AcpiDmDumpTable (
case ACPI_DMT_NAME4:
case ACPI_DMT_SIG:
case ACPI_DMT_LPIT:
+ case ACPI_DMT_TPM2:
ByteLength = 4;
break;
@@ -1583,6 +1610,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 +1638,22 @@ 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/source/common/dmtbdump.c b/source/common/dmtbdump.c
index 9441ca494ffc..0f0697e3d781 100644
--- a/source/common/dmtbdump.c
+++ b/source/common/dmtbdump.c
@@ -623,7 +623,7 @@ AcpiDmDumpAsf (
{
ACPI_STATUS Status;
UINT32 Offset = sizeof (ACPI_TABLE_HEADER);
- ACPI_ASF_INFO *SubTable;
+ ACPI_ASF_INFO *Subtable;
ACPI_DMTABLE_INFO *InfoTable;
ACPI_DMTABLE_INFO *DataInfoTable = NULL;
UINT8 *DataTable = NULL;
@@ -636,13 +636,13 @@ AcpiDmDumpAsf (
/* No main table, only subtables */
- SubTable = ACPI_ADD_PTR (ACPI_ASF_INFO, Table, Offset);
+ 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);
+ Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+ Subtable->Header.Length, AcpiDmTableInfoAsfHdr);
if (ACPI_FAILURE (Status))
{
return;
@@ -650,7 +650,7 @@ AcpiDmDumpAsf (
/* The actual type is the lower 7 bits of Type */
- Type = (UINT8) (SubTable->Header.Type & 0x7F);
+ Type = (UINT8) (Subtable->Header.Type & 0x7F);
switch (Type)
{
@@ -663,9 +663,9 @@ AcpiDmDumpAsf (
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;
+ 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;
@@ -673,9 +673,9 @@ AcpiDmDumpAsf (
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;
+ 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;
@@ -687,20 +687,20 @@ AcpiDmDumpAsf (
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;
+ 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);
+ Subtable->Header.Type);
return;
}
- Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
- SubTable->Header.Length, InfoTable);
+ Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+ Subtable->Header.Length, InfoTable);
if (ACPI_FAILURE (Status))
{
return;
@@ -762,15 +762,15 @@ AcpiDmDumpAsf (
/* Point to next subtable */
- if (!SubTable->Header.Length)
+ 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);
+ Offset += Subtable->Header.Length;
+ Subtable = ACPI_ADD_PTR (ACPI_ASF_INFO, Subtable,
+ Subtable->Header.Length);
}
}
@@ -793,7 +793,7 @@ AcpiDmDumpCpep (
ACPI_TABLE_HEADER *Table)
{
ACPI_STATUS Status;
- ACPI_CPEP_POLLING *SubTable;
+ ACPI_CPEP_POLLING *Subtable;
UINT32 Length = Table->Length;
UINT32 Offset = sizeof (ACPI_TABLE_CPEP);
@@ -808,12 +808,12 @@ AcpiDmDumpCpep (
/* Subtables */
- SubTable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Table, Offset);
+ Subtable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Table, Offset);
while (Offset < Table->Length)
{
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Length, Offset, SubTable,
- SubTable->Header.Length, AcpiDmTableInfoCpep0);
+ Status = AcpiDmDumpTable (Length, Offset, Subtable,
+ Subtable->Header.Length, AcpiDmTableInfoCpep0);
if (ACPI_FAILURE (Status))
{
return;
@@ -821,9 +821,9 @@ AcpiDmDumpCpep (
/* Point to next subtable */
- Offset += SubTable->Header.Length;
- SubTable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, SubTable,
- SubTable->Header.Length);
+ Offset += Subtable->Header.Length;
+ Subtable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Subtable,
+ Subtable->Header.Length);
}
}
@@ -846,9 +846,9 @@ AcpiDmDumpCsrt (
ACPI_TABLE_HEADER *Table)
{
ACPI_STATUS Status;
- ACPI_CSRT_GROUP *SubTable;
+ ACPI_CSRT_GROUP *Subtable;
ACPI_CSRT_SHARED_INFO *SharedInfoTable;
- ACPI_CSRT_DESCRIPTOR *SubSubTable;
+ ACPI_CSRT_DESCRIPTOR *SubSubtable;
UINT32 Length = Table->Length;
UINT32 Offset = sizeof (ACPI_TABLE_CSRT);
UINT32 SubOffset;
@@ -860,14 +860,14 @@ AcpiDmDumpCsrt (
/* Subtables (Resource Groups) */
- SubTable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Table, Offset);
+ 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);
+ Status = AcpiDmDumpTable (Length, Offset, Subtable,
+ Subtable->Length, AcpiDmTableInfoCsrt0);
if (ACPI_FAILURE (Status))
{
return;
@@ -887,19 +887,19 @@ AcpiDmDumpCsrt (
return;
}
- SubOffset += SubTable->SharedInfoLength;
+ SubOffset += Subtable->SharedInfoLength;
/* Sub-Subtables (Resource Descriptors) */
- SubSubTable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, Table,
+ SubSubtable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, Table,
Offset + SubOffset);
- while ((SubOffset < SubTable->Length) &&
+ while ((SubOffset < Subtable->Length) &&
((Offset + SubOffset) < Table->Length))
{
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Length, Offset + SubOffset, SubSubTable,
- SubSubTable->Length, AcpiDmTableInfoCsrt2);
+ Status = AcpiDmDumpTable (Length, Offset + SubOffset, SubSubtable,
+ SubSubtable->Length, AcpiDmTableInfoCsrt2);
if (ACPI_FAILURE (Status))
{
return;
@@ -909,7 +909,7 @@ AcpiDmDumpCsrt (
/* Resource-specific info buffer */
- InfoLength = SubSubTable->Length - SubSubOffset;
+ InfoLength = SubSubtable->Length - SubSubOffset;
if (InfoLength)
{
Status = AcpiDmDumpTable (Length,
@@ -924,16 +924,16 @@ AcpiDmDumpCsrt (
/* Point to next sub-subtable */
- SubOffset += SubSubTable->Length;
- SubSubTable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, SubSubTable,
- SubSubTable->Length);
+ 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);
+ Offset += Subtable->Length;
+ Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Subtable,
+ Subtable->Length);
}
}
@@ -956,7 +956,7 @@ AcpiDmDumpDbg2 (
ACPI_TABLE_HEADER *Table)
{
ACPI_STATUS Status;
- ACPI_DBG2_DEVICE *SubTable;
+ ACPI_DBG2_DEVICE *Subtable;
UINT32 Length = Table->Length;
UINT32 Offset = sizeof (ACPI_TABLE_DBG2);
UINT32 i;
@@ -975,12 +975,12 @@ AcpiDmDumpDbg2 (
/* Subtables */
- SubTable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Table, Offset);
+ Subtable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Table, Offset);
while (Offset < Table->Length)
{
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Length, Offset, SubTable,
- SubTable->Length, AcpiDmTableInfoDbg2Device);
+ Status = AcpiDmDumpTable (Length, Offset, Subtable,
+ Subtable->Length, AcpiDmTableInfoDbg2Device);
if (ACPI_FAILURE (Status))
{
return;
@@ -988,15 +988,15 @@ AcpiDmDumpDbg2 (
/* Dump the BaseAddress array */
- for (i = 0; i < SubTable->RegisterCount; i++)
+ for (i = 0; i < Subtable->RegisterCount; i++)
{
- ArrayOffset = SubTable->BaseAddressOffset +
+ ArrayOffset = Subtable->BaseAddressOffset +
(sizeof (ACPI_GENERIC_ADDRESS) * i);
AbsoluteOffset = Offset + ArrayOffset;
- Array = (UINT8 *) SubTable + ArrayOffset;
+ Array = (UINT8 *) Subtable + ArrayOffset;
Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
- SubTable->Length, AcpiDmTableInfoDbg2Addr);
+ Subtable->Length, AcpiDmTableInfoDbg2Addr);
if (ACPI_FAILURE (Status))
{
return;
@@ -1005,15 +1005,15 @@ AcpiDmDumpDbg2 (
/* Dump the AddressSize array */
- for (i = 0; i < SubTable->RegisterCount; i++)
+ for (i = 0; i < Subtable->RegisterCount; i++)
{
- ArrayOffset = SubTable->AddressSizeOffset +
+ ArrayOffset = Subtable->AddressSizeOffset +
(sizeof (UINT32) * i);
AbsoluteOffset = Offset + ArrayOffset;
- Array = (UINT8 *) SubTable + ArrayOffset;
+ Array = (UINT8 *) Subtable + ArrayOffset;
Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
- SubTable->Length, AcpiDmTableInfoDbg2Size);
+ Subtable->Length, AcpiDmTableInfoDbg2Size);
if (ACPI_FAILURE (Status))
{
return;
@@ -1023,12 +1023,12 @@ AcpiDmDumpDbg2 (
/* Dump the Namestring (required) */
AcpiOsPrintf ("\n");
- ArrayOffset = SubTable->NamepathOffset;
+ ArrayOffset = Subtable->NamepathOffset;
AbsoluteOffset = Offset + ArrayOffset;
- Array = (UINT8 *) SubTable + ArrayOffset;
+ Array = (UINT8 *) Subtable + ArrayOffset;
Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
- SubTable->Length, AcpiDmTableInfoDbg2Name);
+ Subtable->Length, AcpiDmTableInfoDbg2Name);
if (ACPI_FAILURE (Status))
{
return;
@@ -1036,10 +1036,10 @@ AcpiDmDumpDbg2 (
/* Dump the OemData (optional) */
- if (SubTable->OemDataOffset)
+ if (Subtable->OemDataOffset)
{
- Status = AcpiDmDumpTable (Length, Offset + SubTable->OemDataOffset,
- Table, SubTable->OemDataLength,
+ Status = AcpiDmDumpTable (Length, Offset + Subtable->OemDataOffset,
+ Table, Subtable->OemDataLength,
AcpiDmTableInfoDbg2OemData);
if (ACPI_FAILURE (Status))
{
@@ -1049,9 +1049,9 @@ AcpiDmDumpDbg2 (
/* Point to next subtable */
- Offset += SubTable->Length;
- SubTable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, SubTable,
- SubTable->Length);
+ Offset += Subtable->Length;
+ Subtable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Subtable,
+ Subtable->Length);
}
}
@@ -1074,7 +1074,7 @@ AcpiDmDumpDmar (
ACPI_TABLE_HEADER *Table)
{
ACPI_STATUS Status;
- ACPI_DMAR_HEADER *SubTable;
+ ACPI_DMAR_HEADER *Subtable;
UINT32 Length = Table->Length;
UINT32 Offset = sizeof (ACPI_TABLE_DMAR);
ACPI_DMTABLE_INFO *InfoTable;
@@ -1094,14 +1094,14 @@ AcpiDmDumpDmar (
/* Subtables */
- SubTable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Table, Offset);
+ 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);
+ Status = AcpiDmDumpTable (Length, Offset, Subtable,
+ Subtable->Length, AcpiDmTableInfoDmarHdr);
if (ACPI_FAILURE (Status))
{
return;
@@ -1109,7 +1109,7 @@ AcpiDmDumpDmar (
AcpiOsPrintf ("\n");
- switch (SubTable->Type)
+ switch (Subtable->Type)
{
case ACPI_DMAR_TYPE_HARDWARE_UNIT:
@@ -1144,12 +1144,12 @@ AcpiDmDumpDmar (
default:
AcpiOsPrintf ("\n**** Unknown DMAR subtable type 0x%X\n\n",
- SubTable->Type);
+ Subtable->Type);
return;
}
- Status = AcpiDmDumpTable (Length, Offset, SubTable,
- SubTable->Length, InfoTable);
+ Status = AcpiDmDumpTable (Length, Offset, Subtable,
+ Subtable->Length, InfoTable);
if (ACPI_FAILURE (Status))
{
return;
@@ -1158,16 +1158,16 @@ AcpiDmDumpDmar (
/*
* Dump the optional device scope entries
*/
- if ((SubTable->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
- (SubTable->Type == ACPI_DMAR_TYPE_NAMESPACE))
+ 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)
+ ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, Subtable, ScopeOffset);
+ while (ScopeOffset < Subtable->Length)
{
AcpiOsPrintf ("\n");
Status = AcpiDmDumpTable (Length, Offset + ScopeOffset, ScopeTable,
@@ -1208,9 +1208,9 @@ AcpiDmDumpDmar (
NextSubtable:
/* Point to next subtable */
- Offset += SubTable->Length;
- SubTable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, SubTable,
- SubTable->Length);
+ Offset += Subtable->Length;
+ Subtable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Subtable,
+ Subtable->Length);
}
}
@@ -1343,7 +1343,7 @@ AcpiDmDumpEinj (
ACPI_TABLE_HEADER *Table)
{
ACPI_STATUS Status;
- ACPI_WHEA_HEADER *SubTable;
+ ACPI_WHEA_HEADER *Subtable;
UINT32 Length = Table->Length;
UINT32 Offset = sizeof (ACPI_TABLE_EINJ);
@@ -1358,11 +1358,11 @@ AcpiDmDumpEinj (
/* Subtables */
- SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset);
+ Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset);
while (Offset < Table->Length)
{
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Length, Offset, SubTable,
+ Status = AcpiDmDumpTable (Length, Offset, Subtable,
sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoEinj0);
if (ACPI_FAILURE (Status))
{
@@ -1372,7 +1372,7 @@ AcpiDmDumpEinj (
/* Point to next subtable (each subtable is of fixed length) */
Offset += sizeof (ACPI_WHEA_HEADER);
- SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, SubTable,
+ Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Subtable,
sizeof (ACPI_WHEA_HEADER));
}
}
@@ -1396,7 +1396,7 @@ AcpiDmDumpErst (
ACPI_TABLE_HEADER *Table)
{
ACPI_STATUS Status;
- ACPI_WHEA_HEADER *SubTable;
+ ACPI_WHEA_HEADER *Subtable;
UINT32 Length = Table->Length;
UINT32 Offset = sizeof (ACPI_TABLE_ERST);
@@ -1411,11 +1411,11 @@ AcpiDmDumpErst (
/* Subtables */
- SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset);
+ Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset);
while (Offset < Table->Length)
{
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Length, Offset, SubTable,
+ Status = AcpiDmDumpTable (Length, Offset, Subtable,
sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoErst0);
if (ACPI_FAILURE (Status))
{
@@ -1425,7 +1425,7 @@ AcpiDmDumpErst (
/* Point to next subtable (each subtable is of fixed length) */
Offset += sizeof (ACPI_WHEA_HEADER);
- SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, SubTable,
+ Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Subtable,
sizeof (ACPI_WHEA_HEADER));
}
}
@@ -1449,7 +1449,7 @@ AcpiDmDumpFpdt (
ACPI_TABLE_HEADER *Table)
{
ACPI_STATUS Status;
- ACPI_FPDT_HEADER *SubTable;
+ ACPI_FPDT_HEADER *Subtable;
UINT32 Length = Table->Length;
UINT32 Offset = sizeof (ACPI_TABLE_FPDT);
ACPI_DMTABLE_INFO *InfoTable;
@@ -1459,20 +1459,20 @@ AcpiDmDumpFpdt (
/* Subtables */
- SubTable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Table, Offset);
+ 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);
+ Status = AcpiDmDumpTable (Length, Offset, Subtable,
+ Subtable->Length, AcpiDmTableInfoFpdtHdr);
if (ACPI_FAILURE (Status))
{
return;
}
- switch (SubTable->Type)
+ switch (Subtable->Type)
{
case ACPI_FPDT_TYPE_BOOT:
@@ -1487,31 +1487,31 @@ AcpiDmDumpFpdt (
default:
AcpiOsPrintf ("\n**** Unknown FPDT subtable type 0x%X\n\n",
- SubTable->Type);
+ Subtable->Type);
/* Attempt to continue */
- if (!SubTable->Length)
+ if (!Subtable->Length)
{
AcpiOsPrintf ("Invalid zero length subtable\n");
return;
}
- goto NextSubTable;
+ goto NextSubtable;
}
- Status = AcpiDmDumpTable (Length, Offset, SubTable,
- SubTable->Length, InfoTable);
+ Status = AcpiDmDumpTable (Length, Offset, Subtable,
+ Subtable->Length, InfoTable);
if (ACPI_FAILURE (Status))
{
return;
}
-NextSubTable:
+NextSubtable:
/* Point to next subtable */
- Offset += SubTable->Length;
- SubTable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, SubTable,
- SubTable->Length);
+ Offset += Subtable->Length;
+ Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Subtable,
+ Subtable->Length);
}
}
@@ -1534,11 +1534,11 @@ AcpiDmDumpGtdt (
ACPI_TABLE_HEADER *Table)
{
ACPI_STATUS Status;
- ACPI_GTDT_HEADER *SubTable;
+ ACPI_GTDT_HEADER *Subtable;
UINT32 Length = Table->Length;
UINT32 Offset = sizeof (ACPI_TABLE_GTDT);
ACPI_DMTABLE_INFO *InfoTable;
- UINT32 SubTableLength;
+ UINT32 SubtableLength;
UINT32 GtCount;
ACPI_GTDT_TIMER_ENTRY *GtxTable;
@@ -1553,34 +1553,34 @@ AcpiDmDumpGtdt (
/* Subtables */
- SubTable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Table, Offset);
+ 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);
+ Status = AcpiDmDumpTable (Length, Offset, Subtable,
+ Subtable->Length, AcpiDmTableInfoGtdtHdr);
if (ACPI_FAILURE (Status))
{
return;
}
GtCount = 0;
- switch (SubTable->Type)
+ switch (Subtable->Type)
{
case ACPI_GTDT_TYPE_TIMER_BLOCK:
- SubTableLength = sizeof (ACPI_GTDT_TIMER_BLOCK);
+ SubtableLength = sizeof (ACPI_GTDT_TIMER_BLOCK);
GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
- SubTable))->TimerCount;
+ Subtable))->TimerCount;
InfoTable = AcpiDmTableInfoGtdt0;
break;
case ACPI_GTDT_TYPE_WATCHDOG:
- SubTableLength = sizeof (ACPI_GTDT_WATCHDOG);
+ SubtableLength = sizeof (ACPI_GTDT_WATCHDOG);
InfoTable = AcpiDmTableInfoGtdt1;
break;
@@ -1590,12 +1590,12 @@ AcpiDmDumpGtdt (
/* Cannot continue on unknown type - no length */
AcpiOsPrintf ("\n**** Unknown GTDT subtable type 0x%X\n",
- SubTable->Type);
+ Subtable->Type);
return;
}
- Status = AcpiDmDumpTable (Length, Offset, SubTable,
- SubTable->Length, InfoTable);
+ Status = AcpiDmDumpTable (Length, Offset, Subtable,
+ Subtable->Length, InfoTable);
if (ACPI_FAILURE (Status))
{
return;
@@ -1603,15 +1603,15 @@ AcpiDmDumpGtdt (
/* Point to end of current subtable (each subtable above is of fixed length) */
- Offset += SubTableLength;
+ 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);
+ ACPI_GTDT_TIMER_ENTRY, Subtable, SubtableLength);
+ SubtableLength += GtCount * sizeof (ACPI_GTDT_TIMER_ENTRY);
while (GtCount)
{
@@ -1630,7 +1630,7 @@ AcpiDmDumpGtdt (
/* Point to next subtable */
- SubTable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, SubTable, SubTableLength);
+ Subtable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Subtable, SubtableLength);
}
}
@@ -1653,11 +1653,11 @@ AcpiDmDumpHest (
ACPI_TABLE_HEADER *Table)
{
ACPI_STATUS Status;
- ACPI_HEST_HEADER *SubTable;
+ ACPI_HEST_HEADER *Subtable;
UINT32 Length = Table->Length;
UINT32 Offset = sizeof (ACPI_TABLE_HEST);
ACPI_DMTABLE_INFO *InfoTable;
- UINT32 SubTableLength;
+ UINT32 SubtableLength;
UINT32 BankCount;
ACPI_HEST_IA_ERROR_BANK *BankTable;
@@ -1672,70 +1672,70 @@ AcpiDmDumpHest (
/* Subtables */
- SubTable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Table, Offset);
+ Subtable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Table, Offset);
while (Offset < Table->Length)
{
BankCount = 0;
- switch (SubTable->Type)
+ switch (Subtable->Type)
{
case ACPI_HEST_TYPE_IA32_CHECK:
InfoTable = AcpiDmTableInfoHest0;
- SubTableLength = sizeof (ACPI_HEST_IA_MACHINE_CHECK);
+ SubtableLength = sizeof (ACPI_HEST_IA_MACHINE_CHECK);
BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_MACHINE_CHECK,
- SubTable))->NumHardwareBanks;
+ Subtable))->NumHardwareBanks;
break;
case ACPI_HEST_TYPE_IA32_CORRECTED_CHECK:
InfoTable = AcpiDmTableInfoHest1;
- SubTableLength = sizeof (ACPI_HEST_IA_CORRECTED);
+ SubtableLength = sizeof (ACPI_HEST_IA_CORRECTED);
BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_CORRECTED,
- SubTable))->NumHardwareBanks;
+ Subtable))->NumHardwareBanks;
break;
case ACPI_HEST_TYPE_IA32_NMI:
InfoTable = AcpiDmTableInfoHest2;
- SubTableLength = sizeof (ACPI_HEST_IA_NMI);
+ SubtableLength = sizeof (ACPI_HEST_IA_NMI);
break;
case ACPI_HEST_TYPE_AER_ROOT_PORT:
InfoTable = AcpiDmTableInfoHest6;
- SubTableLength = sizeof (ACPI_HEST_AER_ROOT);
+ SubtableLength = sizeof (ACPI_HEST_AER_ROOT);
break;
case ACPI_HEST_TYPE_AER_ENDPOINT:
InfoTable = AcpiDmTableInfoHest7;
- SubTableLength = sizeof (ACPI_HEST_AER);
+ SubtableLength = sizeof (ACPI_HEST_AER);
break;
case ACPI_HEST_TYPE_AER_BRIDGE:
InfoTable = AcpiDmTableInfoHest8;
- SubTableLength = sizeof (ACPI_HEST_AER_BRIDGE);
+ SubtableLength = sizeof (ACPI_HEST_AER_BRIDGE);
break;
case ACPI_HEST_TYPE_GENERIC_ERROR:
InfoTable = AcpiDmTableInfoHest9;
- SubTableLength = sizeof (ACPI_HEST_GENERIC);
+ SubtableLength = sizeof (ACPI_HEST_GENERIC);
break;
case ACPI_HEST_TYPE_GENERIC_ERROR_V2:
InfoTable = AcpiDmTableInfoHest10;
- SubTableLength = sizeof (ACPI_HEST_GENERIC_V2);
+ SubtableLength = sizeof (ACPI_HEST_GENERIC_V2);
break;
case ACPI_HEST_TYPE_IA32_DEFERRED_CHECK:
InfoTable = AcpiDmTableInfoHest11;
- SubTableLength = sizeof (ACPI_HEST_IA_DEFERRED_CHECK);
+ SubtableLength = sizeof (ACPI_HEST_IA_DEFERRED_CHECK);
BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_DEFERRED_CHECK,
- SubTable))->NumHardwareBanks;
+ Subtable))->NumHardwareBanks;
break;
default:
@@ -1743,13 +1743,13 @@ AcpiDmDumpHest (
/* Cannot continue on unknown type - no length */
AcpiOsPrintf ("\n**** Unknown HEST subtable type 0x%X\n",
- SubTable->Type);
+ Subtable->Type);
return;
}
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Length, Offset, SubTable,
- SubTableLength, InfoTable);
+ Status = AcpiDmDumpTable (Length, Offset, Subtable,
+ SubtableLength, InfoTable);
if (ACPI_FAILURE (Status))
{
return;
@@ -1757,15 +1757,15 @@ AcpiDmDumpHest (
/* Point to end of current subtable (each subtable above is of fixed length) */
- Offset += SubTableLength;
+ 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);
+ BankTable = ACPI_ADD_PTR (ACPI_HEST_IA_ERROR_BANK, Subtable,
+ SubtableLength);
+ SubtableLength += BankCount * sizeof (ACPI_HEST_IA_ERROR_BANK);
while (BankCount)
{
@@ -1785,7 +1785,7 @@ AcpiDmDumpHest (
/* Point to next subtable */
- SubTable = ACPI_ADD_PTR (ACPI_HEST_HEADER, SubTable, SubTableLength);
+ Subtable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Subtable, SubtableLength);
}
}
@@ -1811,7 +1811,7 @@ AcpiDmDumpHmat (
ACPI_HMAT_LOCALITY *HmatLocality;
ACPI_HMAT_CACHE *HmatCache;
UINT32 Offset;
- UINT32 SubTableOffset;
+ UINT32 SubtableOffset;
UINT32 Length;
ACPI_DMTABLE_INFO *InfoTable;
UINT32 i, j;
@@ -1829,7 +1829,7 @@ AcpiDmDumpHmat (
while (Offset < Table->Length)
{
AcpiOsPrintf ("\n");
- SubTableOffset = 0;
+ SubtableOffset = 0;
/* Dump HMAT structure header */
@@ -1873,7 +1873,7 @@ AcpiDmDumpHmat (
/* Attempt to continue */
- goto NextSubTable;
+ goto NextSubtable;
}
/* Dump HMAT structure body */
@@ -1897,11 +1897,11 @@ AcpiDmDumpHmat (
case ACPI_HMAT_TYPE_LOCALITY:
HmatLocality = ACPI_CAST_PTR (ACPI_HMAT_LOCALITY, HmatStruct);
- SubTableOffset = sizeof (ACPI_HMAT_LOCALITY);
+ SubtableOffset = sizeof (ACPI_HMAT_LOCALITY);
/* Dump initiator proximity domains */
- if ((UINT32)(HmatStruct->Length - SubTableOffset) <
+ if ((UINT32)(HmatStruct->Length - SubtableOffset) <
(UINT32)(HmatLocality->NumberOfInitiatorPDs * 4))
{
AcpiOsPrintf ("Invalid initiator proximity domain number\n");
@@ -1909,15 +1909,15 @@ AcpiDmDumpHmat (
}
for (i = 0; i < HmatLocality->NumberOfInitiatorPDs; i++)
{
- Status = AcpiDmDumpTable (Table->Length, Offset + SubTableOffset,
- ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubTableOffset),
+ Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
+ ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset),
4, AcpiDmTableInfoHmat1a);
- SubTableOffset += 4;
+ SubtableOffset += 4;
}
/* Dump target proximity domains */
- if ((UINT32)(HmatStruct->Length - SubTableOffset) <
+ if ((UINT32)(HmatStruct->Length - SubtableOffset) <
(UINT32)(HmatLocality->NumberOfTargetPDs * 4))
{
AcpiOsPrintf ("Invalid target proximity domain number\n");
@@ -1925,15 +1925,15 @@ AcpiDmDumpHmat (
}
for (i = 0; i < HmatLocality->NumberOfTargetPDs; i++)
{
- Status = AcpiDmDumpTable (Table->Length, Offset + SubTableOffset,
- ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubTableOffset),
+ Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
+ ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset),
4, AcpiDmTableInfoHmat1b);
- SubTableOffset += 4;
+ SubtableOffset += 4;
}
/* Dump latency/bandwidth entris */
- if ((UINT32)(HmatStruct->Length - SubTableOffset) <
+ if ((UINT32)(HmatStruct->Length - SubtableOffset) <
(UINT32)(HmatLocality->NumberOfInitiatorPDs *
HmatLocality->NumberOfTargetPDs * 2))
{
@@ -1944,10 +1944,10 @@ AcpiDmDumpHmat (
{
for (j = 0; j < HmatLocality->NumberOfTargetPDs; j++)
{
- Status = AcpiDmDumpTable (Table->Length, Offset + SubTableOffset,
- ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubTableOffset),
+ Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
+ ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset),
2, AcpiDmTableInfoHmat1c);
- SubTableOffset += 2;
+ SubtableOffset += 2;
}
}
break;
@@ -1955,11 +1955,11 @@ AcpiDmDumpHmat (
case ACPI_HMAT_TYPE_CACHE:
HmatCache = ACPI_CAST_PTR (ACPI_HMAT_CACHE, HmatStruct);
- SubTableOffset = sizeof (ACPI_HMAT_CACHE);
+ SubtableOffset = sizeof (ACPI_HMAT_CACHE);
/* Dump SMBIOS handles */
- if ((UINT32)(HmatStruct->Length - SubTableOffset) <
+ if ((UINT32)(HmatStruct->Length - SubtableOffset) <
(UINT32)(HmatCache->NumberOfSMBIOSHandles * 2))
{
AcpiOsPrintf ("Invalid SMBIOS handle number\n");
@@ -1967,10 +1967,10 @@ AcpiDmDumpHmat (
}
for (i = 0; i < HmatCache->NumberOfSMBIOSHandles; i++)
{
- Status = AcpiDmDumpTable (Table->Length, Offset + SubTableOffset,
- ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubTableOffset),
+ Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
+ ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset),
2, AcpiDmTableInfoHmat2a);
- SubTableOffset += 2;
+ SubtableOffset += 2;
}
break;
@@ -1979,7 +1979,7 @@ AcpiDmDumpHmat (
break;
}
-NextSubTable:
+NextSubtable:
/* Point to next HMAT structure subtable */
Offset += (HmatStruct->Length);
@@ -2104,7 +2104,7 @@ AcpiDmDumpIort (
AcpiOsPrintf ("Invalid zero length IORT node\n");
return;
}
- goto NextSubTable;
+ goto NextSubtable;
}
/* Dump the node subtable header */
@@ -2227,7 +2227,7 @@ AcpiDmDumpIort (
NodeOffset += Length;
}
-NextSubTable:
+NextSubtable:
/* Point to next node subtable */
Offset += IortNode->Length;
@@ -2260,7 +2260,7 @@ AcpiDmDumpIvrs (
UINT32 EntryLength;
UINT32 EntryType;
ACPI_IVRS_DE_HEADER *DeviceEntry;
- ACPI_IVRS_HEADER *SubTable;
+ ACPI_IVRS_HEADER *Subtable;
ACPI_DMTABLE_INFO *InfoTable;
@@ -2274,20 +2274,20 @@ AcpiDmDumpIvrs (
/* Subtables */
- SubTable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset);
+ 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);
+ Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+ Subtable->Length, AcpiDmTableInfoIvrsHdr);
if (ACPI_FAILURE (Status))
{
return;
}
- switch (SubTable->Type)
+ switch (Subtable->Type)
{
case ACPI_IVRS_TYPE_HARDWARE:
@@ -2304,23 +2304,23 @@ AcpiDmDumpIvrs (
default:
AcpiOsPrintf ("\n**** Unknown IVRS subtable type 0x%X\n",
- SubTable->Type);
+ Subtable->Type);
/* Attempt to continue */
- if (!SubTable->Length)
+ if (!Subtable->Length)
{
AcpiOsPrintf ("Invalid zero length subtable\n");
return;
}
- goto NextSubTable;
+ goto NextSubtable;
}
/* Dump the subtable */
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
- SubTable->Length, InfoTable);
+ Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+ Subtable->Length, InfoTable);
if (ACPI_FAILURE (Status))
{
return;
@@ -2328,13 +2328,13 @@ AcpiDmDumpIvrs (
/* The hardware subtable can contain multiple device entries */
- if (SubTable->Type == ACPI_IVRS_TYPE_HARDWARE)
+ if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE)
{
EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE);
- DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, SubTable,
+ DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable,
sizeof (ACPI_IVRS_HARDWARE));
- while (EntryOffset < (Offset + SubTable->Length))
+ while (EntryOffset < (Offset + Subtable->Length))
{
AcpiOsPrintf ("\n");
/*
@@ -2409,11 +2409,11 @@ AcpiDmDumpIvrs (
}
}
-NextSubTable:
+NextSubtable:
/* Point to next subtable */
- Offset += SubTable->Length;
- SubTable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, SubTable, SubTable->Length);
+ Offset += Subtable->Length;
+ Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Subtable, Subtable->Length);
}
}
@@ -2438,33 +2438,33 @@ AcpiDmDumpLpit (
ACPI_TABLE_HEADER *Table)
{
ACPI_STATUS Status;
- ACPI_LPIT_HEADER *SubTable;
+ ACPI_LPIT_HEADER *Subtable;
UINT32 Length = Table->Length;
UINT32 Offset = sizeof (ACPI_TABLE_LPIT);
ACPI_DMTABLE_INFO *InfoTable;
- UINT32 SubTableLength;
+ UINT32 SubtableLength;
/* Subtables */
- SubTable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Table, Offset);
+ Subtable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Table, Offset);
while (Offset < Table->Length)
{
/* Common subtable header */
- Status = AcpiDmDumpTable (Length, Offset, SubTable,
+ Status = AcpiDmDumpTable (Length, Offset, Subtable,
sizeof (ACPI_LPIT_HEADER), AcpiDmTableInfoLpitHdr);
if (ACPI_FAILURE (Status))
{
return;
}
- switch (SubTable->Type)
+ switch (Subtable->Type)
{
case ACPI_LPIT_TYPE_NATIVE_CSTATE:
InfoTable = AcpiDmTableInfoLpit0;
- SubTableLength = sizeof (ACPI_LPIT_NATIVE);
+ SubtableLength = sizeof (ACPI_LPIT_NATIVE);
break;
default:
@@ -2472,12 +2472,12 @@ AcpiDmDumpLpit (
/* Cannot continue on unknown type - no length */
AcpiOsPrintf ("\n**** Unknown LPIT subtable type 0x%X\n",
- SubTable->Type);
+ Subtable->Type);
return;
}
- Status = AcpiDmDumpTable (Length, Offset, SubTable,
- SubTableLength, InfoTable);
+ Status = AcpiDmDumpTable (Length, Offset, Subtable,
+ SubtableLength, InfoTable);
if (ACPI_FAILURE (Status))
{
return;
@@ -2487,8 +2487,8 @@ AcpiDmDumpLpit (
/* Point to next subtable */
- Offset += SubTableLength;
- SubTable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, SubTable, SubTableLength);
+ Offset += SubtableLength;
+ Subtable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Subtable, SubtableLength);
}
}
@@ -2511,7 +2511,7 @@ AcpiDmDumpMadt (
ACPI_TABLE_HEADER *Table)
{
ACPI_STATUS Status;
- ACPI_SUBTABLE_HEADER *SubTable;
+ ACPI_SUBTABLE_HEADER *Subtable;
UINT32 Length = Table->Length;
UINT32 Offset = sizeof (ACPI_TABLE_MADT);
ACPI_DMTABLE_INFO *InfoTable;
@@ -2527,20 +2527,20 @@ AcpiDmDumpMadt (
/* Subtables */
- SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
+ 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);
+ Status = AcpiDmDumpTable (Length, Offset, Subtable,
+ Subtable->Length, AcpiDmTableInfoMadtHdr);
if (ACPI_FAILURE (Status))
{
return;
}
- switch (SubTable->Type)
+ switch (Subtable->Type)
{
case ACPI_MADT_TYPE_LOCAL_APIC:
@@ -2625,32 +2625,32 @@ AcpiDmDumpMadt (
default:
AcpiOsPrintf ("\n**** Unknown MADT subtable type 0x%X\n\n",
- SubTable->Type);
+ Subtable->Type);
/* Attempt to continue */
- if (!SubTable->Length)
+ if (!Subtable->Length)
{
AcpiOsPrintf ("Invalid zero length subtable\n");
return;
}
- goto NextSubTable;
+ goto NextSubtable;
}
- Status = AcpiDmDumpTable (Length, Offset, SubTable,
- SubTable->Length, InfoTable);
+ Status = AcpiDmDumpTable (Length, Offset, Subtable,
+ Subtable->Length, InfoTable);
if (ACPI_FAILURE (Status))
{
return;
}
-NextSubTable:
+NextSubtable:
/* Point to next subtable */
- Offset += SubTable->Length;
- SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, SubTable,
- SubTable->Length);
+ Offset += Subtable->Length;
+ Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable,
+ Subtable->Length);
}
}
@@ -2673,7 +2673,7 @@ AcpiDmDumpMcfg (
{
ACPI_STATUS Status;
UINT32 Offset = sizeof (ACPI_TABLE_MCFG);
- ACPI_MCFG_ALLOCATION *SubTable;
+ ACPI_MCFG_ALLOCATION *Subtable;
/* Main table */
@@ -2686,7 +2686,7 @@ AcpiDmDumpMcfg (
/* Subtables */
- SubTable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Table, Offset);
+ Subtable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Table, Offset);
while (Offset < Table->Length)
{
if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > Table->Length)
@@ -2697,7 +2697,7 @@ AcpiDmDumpMcfg (
}
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
+ Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
sizeof (ACPI_MCFG_ALLOCATION), AcpiDmTableInfoMcfg0);
if (ACPI_FAILURE (Status))
{
@@ -2707,7 +2707,7 @@ AcpiDmDumpMcfg (
/* Point to next subtable (each subtable is of fixed length) */
Offset += sizeof (ACPI_MCFG_ALLOCATION);
- SubTable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, SubTable,
+ Subtable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Subtable,
sizeof (ACPI_MCFG_ALLOCATION));
}
}
@@ -2731,11 +2731,11 @@ AcpiDmDumpMpst (
{
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;
+ 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;
@@ -2752,12 +2752,12 @@ AcpiDmDumpMpst (
/* Subtable: Memory Power Node(s) */
SubtableCount = (ACPI_CAST_PTR (ACPI_TABLE_MPST, Table))->PowerNodeCount;
- SubTable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Table, Offset);
+ Subtable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Table, Offset);
while ((Offset < Table->Length) && SubtableCount)
{
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Table->Length, Offset, SubTable0,
+ Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0,
sizeof (ACPI_MPST_POWER_NODE), AcpiDmTableInfoMpst0);
if (ACPI_FAILURE (Status))
{
@@ -2766,33 +2766,33 @@ AcpiDmDumpMpst (
/* Extract the sub-subtable counts */
- PowerStateCount = SubTable0->NumPowerStates;
- ComponentCount = SubTable0->NumPhysicalComponents;
+ 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,
+ Subtable0A = ACPI_ADD_PTR (ACPI_MPST_POWER_STATE, Subtable0,
sizeof (ACPI_MPST_POWER_NODE));
while (PowerStateCount)
{
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Table->Length, Offset, SubTable0A,
+ Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0A,
sizeof (ACPI_MPST_POWER_STATE), AcpiDmTableInfoMpst0A);
if (ACPI_FAILURE (Status))
{
return;
}
- SubTable0A++;
+ Subtable0A++;
PowerStateCount--;
Offset += sizeof (ACPI_MPST_POWER_STATE);
}
/* Sub-subtables - Physical Component ID Structure(s) */
- SubTable0B = ACPI_CAST_PTR (ACPI_MPST_COMPONENT, SubTable0A);
+ Subtable0B = ACPI_CAST_PTR (ACPI_MPST_COMPONENT, Subtable0A);
if (ComponentCount)
{
@@ -2801,14 +2801,14 @@ AcpiDmDumpMpst (
while (ComponentCount)
{
- Status = AcpiDmDumpTable (Table->Length, Offset, SubTable0B,
+ Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0B,
sizeof (ACPI_MPST_COMPONENT), AcpiDmTableInfoMpst0B);
if (ACPI_FAILURE (Status))
{
return;
}
- SubTable0B++;
+ Subtable0B++;
ComponentCount--;
Offset += sizeof (ACPI_MPST_COMPONENT);
}
@@ -2816,42 +2816,42 @@ AcpiDmDumpMpst (
/* Point to next Memory Power Node subtable */
SubtableCount--;
- SubTable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, SubTable0,
+ 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));
+ (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,
+ 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;
+ 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,
+ 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,
+ Status = AcpiDmDumpTable (Table->Length, Offset, Subtable2,
sizeof (ACPI_MPST_POWER_DATA), AcpiDmTableInfoMpst2);
if (ACPI_FAILURE (Status))
{
return;
}
- SubTable2++;
+ Subtable2++;
SubtableCount--;
Offset += sizeof (ACPI_MPST_POWER_DATA);
}
@@ -2876,7 +2876,7 @@ AcpiDmDumpMsct (
{
ACPI_STATUS Status;
UINT32 Offset = sizeof (ACPI_TABLE_MSCT);
- ACPI_MSCT_PROXIMITY *SubTable;
+ ACPI_MSCT_PROXIMITY *Subtable;
/* Main table */
@@ -2889,13 +2889,13 @@ AcpiDmDumpMsct (
/* Subtables */
- SubTable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Table, Offset);
+ Subtable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Table, Offset);
while (Offset < Table->Length)
{
/* Common subtable header */
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
+ Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
sizeof (ACPI_MSCT_PROXIMITY), AcpiDmTableInfoMsct0);
if (ACPI_FAILURE (Status))
{
@@ -2905,7 +2905,7 @@ AcpiDmDumpMsct (
/* Point to next subtable */
Offset += sizeof (ACPI_MSCT_PROXIMITY);
- SubTable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, SubTable,
+ Subtable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Subtable,
sizeof (ACPI_MSCT_PROXIMITY));
}
}
@@ -2929,7 +2929,7 @@ AcpiDmDumpMtmr (
{
ACPI_STATUS Status;
UINT32 Offset = sizeof (ACPI_TABLE_MTMR);
- ACPI_MTMR_ENTRY *SubTable;
+ ACPI_MTMR_ENTRY *Subtable;
/* Main table */
@@ -2942,13 +2942,13 @@ AcpiDmDumpMtmr (
/* Subtables */
- SubTable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, Table, Offset);
+ Subtable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, Table, Offset);
while (Offset < Table->Length)
{
/* Common subtable header */
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
+ Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
sizeof (ACPI_MTMR_ENTRY), AcpiDmTableInfoMtmr0);
if (ACPI_FAILURE (Status))
{
@@ -2958,7 +2958,7 @@ AcpiDmDumpMtmr (
/* Point to next subtable */
Offset += sizeof (ACPI_MTMR_ENTRY);
- SubTable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, SubTable,
+ Subtable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, Subtable,
sizeof (ACPI_MTMR_ENTRY));
}
}
@@ -2984,7 +2984,7 @@ AcpiDmDumpNfit (
UINT32 Offset = sizeof (ACPI_TABLE_NFIT);
UINT32 FieldOffset = 0;
UINT32 Length;
- ACPI_NFIT_HEADER *SubTable;
+ ACPI_NFIT_HEADER *Subtable;
ACPI_DMTABLE_INFO *InfoTable;
ACPI_NFIT_INTERLEAVE *Interleave = NULL;
ACPI_NFIT_SMBIOS *SmbiosInfo = NULL;
@@ -3002,20 +3002,20 @@ AcpiDmDumpNfit (
/* Subtables */
- SubTable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Table, Offset);
+ 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);
+ Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+ Subtable->Length, AcpiDmTableInfoNfitHdr);
if (ACPI_FAILURE (Status))
{
return;
}
- switch (SubTable->Type)
+ switch (Subtable->Type)
{
case ACPI_NFIT_TYPE_SYSTEM_ADDRESS:
@@ -3032,13 +3032,13 @@ AcpiDmDumpNfit (
/* Has a variable number of 32-bit values at the end */
InfoTable = AcpiDmTableInfoNfit2;
- Interleave = ACPI_CAST_PTR (ACPI_NFIT_INTERLEAVE, SubTable);
+ 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);
+ SmbiosInfo = ACPI_CAST_PTR (ACPI_NFIT_SMBIOS, Subtable);
InfoTable = AcpiDmTableInfoNfit3;
break;
@@ -3057,27 +3057,27 @@ AcpiDmDumpNfit (
/* Has a variable number of 64-bit addresses at the end */
InfoTable = AcpiDmTableInfoNfit6;
- Hint = ACPI_CAST_PTR (ACPI_NFIT_FLUSH_ADDRESS, SubTable);
+ Hint = ACPI_CAST_PTR (ACPI_NFIT_FLUSH_ADDRESS, Subtable);
FieldOffset = sizeof (ACPI_NFIT_FLUSH_ADDRESS) - sizeof (UINT64);
break;
default:
AcpiOsPrintf ("\n**** Unknown NFIT subtable type 0x%X\n",
- SubTable->Type);
+ Subtable->Type);
/* Attempt to continue */
- if (!SubTable->Length)
+ if (!Subtable->Length)
{
AcpiOsPrintf ("Invalid zero length subtable\n");
return;
}
- goto NextSubTable;
+ goto NextSubtable;
}
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
- SubTable->Length, InfoTable);
+ Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+ Subtable->Length, InfoTable);
if (ACPI_FAILURE (Status))
{
return;
@@ -3085,7 +3085,7 @@ AcpiDmDumpNfit (
/* Per-subtable variable-length fields */
- switch (SubTable->Type)
+ switch (Subtable->Type)
{
case ACPI_NFIT_TYPE_INTERLEAVE:
@@ -3105,7 +3105,7 @@ AcpiDmDumpNfit (
case ACPI_NFIT_TYPE_SMBIOS:
- Length = SubTable->Length -
+ Length = Subtable->Length -
sizeof (ACPI_NFIT_SMBIOS) + sizeof (UINT8);
if (Length)
@@ -3142,11 +3142,11 @@ AcpiDmDumpNfit (
break;
}
-NextSubTable:
+NextSubtable:
/* Point to next subtable */
- Offset += SubTable->Length;
- SubTable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, SubTable, SubTable->Length);
+ Offset += Subtable->Length;
+ Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Subtable, Subtable->Length);
}
}
@@ -3169,7 +3169,7 @@ AcpiDmDumpPcct (
ACPI_TABLE_HEADER *Table)
{
ACPI_STATUS Status;
- ACPI_PCCT_SUBSPACE *SubTable;
+ ACPI_PCCT_SUBSPACE *Subtable;
ACPI_DMTABLE_INFO *InfoTable;
UINT32 Length = Table->Length;
UINT32 Offset = sizeof (ACPI_TABLE_PCCT);
@@ -3185,20 +3185,20 @@ AcpiDmDumpPcct (
/* Subtables */
- SubTable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Table, Offset);
+ 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);
+ Status = AcpiDmDumpTable (Length, Offset, Subtable,
+ Subtable->Header.Length, AcpiDmTableInfoPcctHdr);
if (ACPI_FAILURE (Status))
{
return;
}
- switch (SubTable->Header.Type)
+ switch (Subtable->Header.Type)
{
case ACPI_PCCT_TYPE_GENERIC_SUBSPACE:
@@ -3229,13 +3229,67 @@ AcpiDmDumpPcct (
AcpiOsPrintf (
"\n**** Unexpected or unknown PCCT subtable type 0x%X\n\n",
- SubTable->Header.Type);
+ 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,
- SubTable->Header.Length, InfoTable);
+ Status = AcpiDmDumpTable (Length, Offset, Subtable,
+ sizeof (ACPI_PDTT_CHANNEL), AcpiDmTableInfoPdtt0);
if (ACPI_FAILURE (Status))
{
return;
@@ -3243,9 +3297,9 @@ AcpiDmDumpPcct (
/* Point to next subtable */
- Offset += SubTable->Header.Length;
- SubTable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, SubTable,
- SubTable->Header.Length);
+ Offset += sizeof (ACPI_PDTT_CHANNEL);
+ Subtable = ACPI_ADD_PTR (ACPI_PDTT_CHANNEL, Subtable,
+ sizeof (ACPI_PDTT_CHANNEL));
}
}
@@ -3268,9 +3322,9 @@ AcpiDmDumpPmtt (
ACPI_TABLE_HEADER *Table)
{
ACPI_STATUS Status;
- ACPI_PMTT_HEADER *SubTable;
- ACPI_PMTT_HEADER *MemSubTable;
- ACPI_PMTT_HEADER *DimmSubTable;
+ 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);
@@ -3290,14 +3344,14 @@ AcpiDmDumpPmtt (
/* Subtables */
- SubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Table, Offset);
+ 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);
+ Status = AcpiDmDumpTable (Length, Offset, Subtable,
+ Subtable->Length, AcpiDmTableInfoPmttHdr);
if (ACPI_FAILURE (Status))
{
return;
@@ -3305,18 +3359,18 @@ AcpiDmDumpPmtt (
/* Only Socket subtables are expected at this level */
- if (SubTable->Type != ACPI_PMTT_TYPE_SOCKET)
+ if (Subtable->Type != ACPI_PMTT_TYPE_SOCKET)
{
AcpiOsPrintf (
"\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n",
- SubTable->Type);
+ Subtable->Type);
return;
}
/* Dump the fixed-length portion of the subtable */
- Status = AcpiDmDumpTable (Length, Offset, SubTable,
- SubTable->Length, AcpiDmTableInfoPmtt0);
+ Status = AcpiDmDumpTable (Length, Offset, Subtable,
+ Subtable->Length, AcpiDmTableInfoPmtt0);
if (ACPI_FAILURE (Status))
{
return;
@@ -3325,18 +3379,18 @@ AcpiDmDumpPmtt (
/* Walk the memory controller subtables */
MemOffset = sizeof (ACPI_PMTT_SOCKET);
- MemSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, SubTable,
+ MemSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Subtable,
sizeof (ACPI_PMTT_SOCKET));
while (((Offset + MemOffset) < Table->Length) &&
- (MemOffset < SubTable->Length))
+ (MemOffset < Subtable->Length))
{
/* Common subtable header */
AcpiOsPrintf ("\n");
Status = AcpiDmDumpTable (Length,
- Offset + MemOffset, MemSubTable,
- MemSubTable->Length, AcpiDmTableInfoPmttHdr);
+ Offset + MemOffset, MemSubtable,
+ MemSubtable->Length, AcpiDmTableInfoPmttHdr);
if (ACPI_FAILURE (Status))
{
return;
@@ -3344,19 +3398,19 @@ AcpiDmDumpPmtt (
/* Only memory controller subtables are expected at this level */
- if (MemSubTable->Type != ACPI_PMTT_TYPE_CONTROLLER)
+ if (MemSubtable->Type != ACPI_PMTT_TYPE_CONTROLLER)
{
AcpiOsPrintf (
"\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n",
- MemSubTable->Type);
+ MemSubtable->Type);
return;
}
/* Dump the fixed-length portion of the controller subtable */
Status = AcpiDmDumpTable (Length,
- Offset + MemOffset, MemSubTable,
- MemSubTable->Length, AcpiDmTableInfoPmtt1);
+ Offset + MemOffset, MemSubtable,
+ MemSubtable->Length, AcpiDmTableInfoPmtt1);
if (ACPI_FAILURE (Status))
{
return;
@@ -3364,13 +3418,13 @@ AcpiDmDumpPmtt (
/* Walk the variable count of proximity domains */
- DomainCount = ((ACPI_PMTT_CONTROLLER *) MemSubTable)->DomainCount;
+ DomainCount = ((ACPI_PMTT_CONTROLLER *) MemSubtable)->DomainCount;
DomainOffset = sizeof (ACPI_PMTT_CONTROLLER);
- DomainArray = ACPI_ADD_PTR (ACPI_PMTT_DOMAIN, MemSubTable,
+ DomainArray = ACPI_ADD_PTR (ACPI_PMTT_DOMAIN, MemSubtable,
sizeof (ACPI_PMTT_CONTROLLER));
while (((Offset + MemOffset + DomainOffset) < Table->Length) &&
- ((MemOffset + DomainOffset) < SubTable->Length) &&
+ ((MemOffset + DomainOffset) < Subtable->Length) &&
DomainCount)
{
Status = AcpiDmDumpTable (Length,
@@ -3395,18 +3449,18 @@ AcpiDmDumpPmtt (
/* Walk the physical component (DIMM) subtables */
DimmOffset = DomainOffset;
- DimmSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, MemSubTable,
+ DimmSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, MemSubtable,
DomainOffset);
while (((Offset + MemOffset + DimmOffset) < Table->Length) &&
- (DimmOffset < MemSubTable->Length))
+ (DimmOffset < MemSubtable->Length))
{
/* Common subtable header */
AcpiOsPrintf ("\n");
Status = AcpiDmDumpTable (Length,
- Offset + MemOffset + DimmOffset, DimmSubTable,
- DimmSubTable->Length, AcpiDmTableInfoPmttHdr);
+ Offset + MemOffset + DimmOffset, DimmSubtable,
+ DimmSubtable->Length, AcpiDmTableInfoPmttHdr);
if (ACPI_FAILURE (Status))
{
return;
@@ -3414,19 +3468,19 @@ AcpiDmDumpPmtt (
/* Only DIMM subtables are expected at this level */
- if (DimmSubTable->Type != ACPI_PMTT_TYPE_DIMM)
+ if (DimmSubtable->Type != ACPI_PMTT_TYPE_DIMM)
{
AcpiOsPrintf (
"\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n",
- DimmSubTable->Type);
+ DimmSubtable->Type);
return;
}
/* Dump the fixed-length DIMM subtable */
Status = AcpiDmDumpTable (Length,
- Offset + MemOffset + DimmOffset, DimmSubTable,
- DimmSubTable->Length, AcpiDmTableInfoPmtt2);
+ Offset + MemOffset + DimmOffset, DimmSubtable,
+ DimmSubtable->Length, AcpiDmTableInfoPmtt2);
if (ACPI_FAILURE (Status))
{
return;
@@ -3434,23 +3488,23 @@ AcpiDmDumpPmtt (
/* Point to next DIMM subtable */
- DimmOffset += DimmSubTable->Length;
- DimmSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER,
- DimmSubTable, DimmSubTable->Length);
+ 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);
+ 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);
+ Offset += Subtable->Length;
+ Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER,
+ Subtable, Subtable->Length);
}
}
@@ -3473,10 +3527,10 @@ AcpiDmDumpPptt (
ACPI_TABLE_HEADER *Table)
{
ACPI_STATUS Status;
- ACPI_SUBTABLE_HEADER *SubTable;
+ ACPI_SUBTABLE_HEADER *Subtable;
ACPI_PPTT_PROCESSOR *PpttProcessor;
UINT8 Length;
- UINT8 SubTableOffset;
+ UINT8 SubtableOffset;
UINT32 Offset = sizeof (ACPI_TABLE_FPDT);
ACPI_DMTABLE_INFO *InfoTable;
UINT32 i;
@@ -3493,20 +3547,20 @@ AcpiDmDumpPptt (
/* Common subtable header */
- SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
- if (SubTable->Length < sizeof (ACPI_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);
+ Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+ Subtable->Length, AcpiDmTableInfoPpttHdr);
if (ACPI_FAILURE (Status))
{
return;
}
- switch (SubTable->Type)
+ switch (Subtable->Type)
{
case ACPI_PPTT_TYPE_PROCESSOR:
@@ -3529,35 +3583,35 @@ AcpiDmDumpPptt (
default:
AcpiOsPrintf ("\n**** Unknown PPTT subtable type 0x%X\n\n",
- SubTable->Type);
+ Subtable->Type);
/* Attempt to continue */
- goto NextSubTable;
+ goto NextSubtable;
}
- if (SubTable->Length < Length)
+ if (Subtable->Length < Length)
{
AcpiOsPrintf ("Invalid subtable length\n");
return;
}
- Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
- SubTable->Length, InfoTable);
+ Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+ Subtable->Length, InfoTable);
if (ACPI_FAILURE (Status))
{
return;
}
- SubTableOffset = Length;
+ SubtableOffset = Length;
- switch (SubTable->Type)
+ switch (Subtable->Type)
{
case ACPI_PPTT_TYPE_PROCESSOR:
- PpttProcessor = ACPI_CAST_PTR (ACPI_PPTT_PROCESSOR, SubTable);
+ PpttProcessor = ACPI_CAST_PTR (ACPI_PPTT_PROCESSOR, Subtable);
/* Dump SMBIOS handles */
- if ((UINT8)(SubTable->Length - SubTableOffset) <
+ if ((UINT8)(Subtable->Length - SubtableOffset) <
(UINT8)(PpttProcessor->NumberOfPrivResources * 4))
{
AcpiOsPrintf ("Invalid private resource number\n");
@@ -3565,10 +3619,10 @@ AcpiDmDumpPptt (
}
for (i = 0; i < PpttProcessor->NumberOfPrivResources; i++)
{
- Status = AcpiDmDumpTable (Table->Length, Offset + SubTableOffset,
- ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, SubTable, SubTableOffset),
+ Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
+ ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, SubtableOffset),
4, AcpiDmTableInfoPptt0a);
- SubTableOffset += 4;
+ SubtableOffset += 4;
}
break;
@@ -3577,10 +3631,10 @@ AcpiDmDumpPptt (
break;
}
-NextSubTable:
+NextSubtable:
/* Point to next subtable */
- Offset += SubTable->Length;
+ Offset += Subtable->Length;
}
}
@@ -3603,7 +3657,7 @@ AcpiDmDumpS3pt (
{
ACPI_STATUS Status;
UINT32 Offset = sizeof (ACPI_TABLE_S3PT);
- ACPI_FPDT_HEADER *SubTable;
+ ACPI_FPDT_HEADER *Subtable;
ACPI_DMTABLE_INFO *InfoTable;
ACPI_TABLE_S3PT *S3ptTable = ACPI_CAST_PTR (ACPI_TABLE_S3PT, Tables);
@@ -3616,20 +3670,20 @@ AcpiDmDumpS3pt (
return 0;
}
- SubTable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, S3ptTable, Offset);
+ 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);
+ Status = AcpiDmDumpTable (S3ptTable->Length, Offset, Subtable,
+ Subtable->Length, AcpiDmTableInfoS3ptHdr);
if (ACPI_FAILURE (Status))
{
return 0;
}
- switch (SubTable->Type)
+ switch (Subtable->Type)
{
case ACPI_S3PT_TYPE_RESUME:
@@ -3644,37 +3698,205 @@ AcpiDmDumpS3pt (
default:
AcpiOsPrintf ("\n**** Unknown S3PT subtable type 0x%X\n",
- SubTable->Type);
+ Subtable->Type);
/* Attempt to continue */
- if (!SubTable->Length)
+ if (!Subtable->Length)
{
AcpiOsPrintf ("Invalid zero length subtable\n");
return 0;
}
- goto NextSubTable;
+ goto NextSubtable;
}
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (S3ptTable->Length, Offset, SubTable,
- SubTable->Length, InfoTable);
+ Status = AcpiDmDumpTable (S3ptTable->Length, Offset, Subtable,
+ Subtable->Length, InfoTable);
if (ACPI_FAILURE (Status))
{
return 0;
}
-NextSubTable:
+NextSubtable:
/* Point to next subtable */
- Offset += SubTable->Length;
- SubTable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, SubTable, SubTable->Length);
+ 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);
+ }
+}
+
+
/*******************************************************************************
*
* FUNCTION: AcpiDmDumpSlic
@@ -3794,7 +4016,7 @@ AcpiDmDumpSrat (
{
ACPI_STATUS Status;
UINT32 Offset = sizeof (ACPI_TABLE_SRAT);
- ACPI_SUBTABLE_HEADER *SubTable;
+ ACPI_SUBTABLE_HEADER *Subtable;
ACPI_DMTABLE_INFO *InfoTable;
@@ -3808,20 +4030,20 @@ AcpiDmDumpSrat (
/* Subtables */
- SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
+ 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);
+ Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+ Subtable->Length, AcpiDmTableInfoSratHdr);
if (ACPI_FAILURE (Status))
{
return;
}
- switch (SubTable->Type)
+ switch (Subtable->Type)
{
case ACPI_SRAT_TYPE_CPU_AFFINITY:
@@ -3850,32 +4072,32 @@ AcpiDmDumpSrat (
default:
AcpiOsPrintf ("\n**** Unknown SRAT subtable type 0x%X\n",
- SubTable->Type);
+ Subtable->Type);
/* Attempt to continue */
- if (!SubTable->Length)
+ if (!Subtable->Length)
{
AcpiOsPrintf ("Invalid zero length subtable\n");
return;
}
- goto NextSubTable;
+ goto NextSubtable;
}
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
- SubTable->Length, InfoTable);
+ Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+ Subtable->Length, InfoTable);
if (ACPI_FAILURE (Status))
{
return;
}
-NextSubTable:
+NextSubtable:
/* Point to next subtable */
- Offset += SubTable->Length;
- SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, SubTable,
- SubTable->Length);
+ Offset += Subtable->Length;
+ Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable,
+ Subtable->Length);
}
}
@@ -3954,7 +4176,7 @@ AcpiDmDumpTcpa (
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 *Subtable = ACPI_ADD_PTR (
ACPI_TABLE_TCPA_HDR, Table, Offset);
ACPI_STATUS Status;
@@ -3976,13 +4198,13 @@ AcpiDmDumpTcpa (
{
case ACPI_TCPA_CLIENT_TABLE:
- Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
+ Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
Table->Length - Offset, AcpiDmTableInfoTcpaClient);
break;
case ACPI_TCPA_SERVER_TABLE:
- Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
+ Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
Table->Length - Offset, AcpiDmTableInfoTcpaServer);
break;
@@ -4003,6 +4225,64 @@ AcpiDmDumpTcpa (
/*******************************************************************************
*
+ * 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
@@ -4019,7 +4299,7 @@ AcpiDmDumpVrtc (
{
ACPI_STATUS Status;
UINT32 Offset = sizeof (ACPI_TABLE_VRTC);
- ACPI_VRTC_ENTRY *SubTable;
+ ACPI_VRTC_ENTRY *Subtable;
/* Main table */
@@ -4032,13 +4312,13 @@ AcpiDmDumpVrtc (
/* Subtables */
- SubTable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, Table, Offset);
+ Subtable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, Table, Offset);
while (Offset < Table->Length)
{
/* Common subtable header */
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
+ Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
sizeof (ACPI_VRTC_ENTRY), AcpiDmTableInfoVrtc0);
if (ACPI_FAILURE (Status))
{
@@ -4048,7 +4328,7 @@ AcpiDmDumpVrtc (
/* Point to next subtable */
Offset += sizeof (ACPI_VRTC_ENTRY);
- SubTable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, SubTable,
+ Subtable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, Subtable,
sizeof (ACPI_VRTC_ENTRY));
}
}
@@ -4072,7 +4352,7 @@ AcpiDmDumpWdat (
{
ACPI_STATUS Status;
UINT32 Offset = sizeof (ACPI_TABLE_WDAT);
- ACPI_WDAT_ENTRY *SubTable;
+ ACPI_WDAT_ENTRY *Subtable;
/* Main table */
@@ -4085,13 +4365,13 @@ AcpiDmDumpWdat (
/* Subtables */
- SubTable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Table, Offset);
+ Subtable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Table, Offset);
while (Offset < Table->Length)
{
/* Common subtable header */
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
+ Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
sizeof (ACPI_WDAT_ENTRY), AcpiDmTableInfoWdat0);
if (ACPI_FAILURE (Status))
{
@@ -4101,7 +4381,7 @@ AcpiDmDumpWdat (
/* Point to next subtable */
Offset += sizeof (ACPI_WDAT_ENTRY);
- SubTable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, SubTable,
+ Subtable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Subtable,
sizeof (ACPI_WDAT_ENTRY));
}
}
@@ -4125,7 +4405,7 @@ AcpiDmDumpWpbt (
ACPI_TABLE_HEADER *Table)
{
ACPI_STATUS Status;
- ACPI_TABLE_WPBT *SubTable;
+ ACPI_TABLE_WPBT *Subtable;
UINT32 Length = Table->Length;
UINT16 ArgumentsLength;
@@ -4140,8 +4420,8 @@ AcpiDmDumpWpbt (
/* Extract the arguments buffer length from the main table */
- SubTable = ACPI_CAST_PTR (ACPI_TABLE_WPBT, Table);
- ArgumentsLength = SubTable->ArgumentsLength;
+ Subtable = ACPI_CAST_PTR (ACPI_TABLE_WPBT, Table);
+ ArgumentsLength = Subtable->ArgumentsLength;
/* Dump the arguments buffer */
diff --git a/source/common/dmtbinfo.c b/source/common/dmtbinfo.c
index 5180b4db0741..ad546e8afa7e 100644
--- a/source/common/dmtbinfo.c
+++ b/source/common/dmtbinfo.c
@@ -214,11 +214,13 @@
#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)
@@ -339,6 +341,7 @@
#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)
@@ -351,6 +354,10 @@
#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)
@@ -360,6 +367,8 @@
#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)
@@ -415,7 +424,9 @@
#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)
@@ -896,7 +907,6 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt1[] =
ACPI_DMT_TERMINATOR
};
-
/* Resource Descriptor subtable */
ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt2[] =
@@ -1260,6 +1270,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt1[] =
{ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (ExitServicesExit), "Exit Services Exit", 0},
#endif
+
/*******************************************************************************
*
* GTDT - Generic Timer Description Table
@@ -1853,6 +1864,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoIort4[] =
ACPI_DMT_TERMINATOR
};
+
/*******************************************************************************
*
* IVRS - I/O Virtualization Reporting Structure
@@ -2219,6 +2231,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt15[] =
ACPI_DMT_TERMINATOR
};
+
/*******************************************************************************
*
* MCFG - PCI Memory Mapped Configuration table and Subtable
@@ -2696,6 +2709,31 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoPcct4[] =
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
@@ -2768,16 +2806,6 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt2[] =
ACPI_DMT_TERMINATOR
};
-/*******************************************************************************
- *
- * SDEI - Software Delegated Execption Interface Descriptor Table
- *
- ******************************************************************************/
-
-ACPI_DMTABLE_INFO AcpiDmTableInfoSdei[] =
-{
- ACPI_DMT_TERMINATOR
-};
/*******************************************************************************
*
@@ -2801,7 +2829,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoPpttHdr[] =
ACPI_DMTABLE_INFO AcpiDmTableInfoPptt0[] =
{
{ACPI_DMT_UINT16, ACPI_PPTT0_OFFSET (Reserved), "Reserved", 0},
- {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (Flags), "Flags", 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},
@@ -2821,7 +2849,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoPptt0a[] =
ACPI_DMTABLE_INFO AcpiDmTableInfoPptt1[] =
{
{ACPI_DMT_UINT16, ACPI_PPTT1_OFFSET (Reserved), "Reserved", 0},
- {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (Flags), "Flags", 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},
@@ -2855,6 +2883,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoPptt2[] =
ACPI_DMT_TERMINATOR
};
+
/*******************************************************************************
*
* RASF - RAS Feature table
@@ -2867,6 +2896,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoRasf[] =
ACPI_DMT_TERMINATOR
};
+
/*******************************************************************************
*
* S3PT - S3 Performance Table
@@ -2927,6 +2957,86 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoSbst[] =
/*******************************************************************************
*
+ * 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
+};
+
+
+/*******************************************************************************
+ *
* SLIC - Software Licensing Description Table. This table contains the standard
* ACPI header followed by proprietary data structures
*
@@ -3186,7 +3296,29 @@ 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_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
};
diff --git a/source/compiler/aslallocate.c b/source/compiler/aslallocate.c
new file mode 100644
index 000000000000..e9898dffd30e
--- /dev/null
+++ b/source/compiler/aslallocate.c
@@ -0,0 +1,303 @@
+/******************************************************************************
+ *
+ * Module Name: aslallocate -- Local memory allocation
+ *
+ *****************************************************************************/
+
+/******************************************************************************
+ *
+ * 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 "aslcompiler.h"
+
+/*
+ * Local heap allocation wrappers. See aslcache.c for allocation from local
+ * cache alloctions
+ */
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: UtLocalCalloc
+ *
+ * PARAMETERS: Size - Bytes to be allocated
+ *
+ * RETURN: Pointer to the allocated memory. If this function returns
+ * (the compiler is not aborted), the pointer is guaranteed to
+ * be valid.
+ *
+ * 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
+ *
+ ******************************************************************************/
+
+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: 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
+ *
+ *****************************************************************************/
+
+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);
+}
diff --git a/source/compiler/aslcache.c b/source/compiler/aslcache.c
new file mode 100644
index 000000000000..4154395030df
--- /dev/null
+++ b/source/compiler/aslcache.c
@@ -0,0 +1,481 @@
+/******************************************************************************
+ *
+ * Module Name: aslcache -- Local cache support for iASL
+ *
+ *****************************************************************************/
+
+/******************************************************************************
+ *
+ * 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 "aslcompiler.h"
+
+/*
+ * 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: UtLocalCacheCalloc
+ *
+ * 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 *
+UtLocalCacheCalloc (
+ 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: UtParseOpCacheCalloc
+ *
+ * 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.)
+ *
+ ******************************************************************************/
+
+ACPI_PARSE_OBJECT *
+UtParseOpCacheCalloc (
+ 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: UtSubtableCacheCalloc - Data Table compiler
+ *
+ * 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 - Data Table compiler
+ *
+ * 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: UtDeleteLocalCaches
+ *
+ * PARAMETERS: None
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Delete all local cache buffer blocks
+ *
+ ******************************************************************************/
+
+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++;
+ }
+
+ 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 */
+
+ Gbl_StringSize = 0;
+ Gbl_StringCount = 0;
+ Gbl_StringCacheNext = NULL;
+ Gbl_StringCacheLast = NULL;
+
+
+ /*
+ * 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);
+
+ /* Reset cache globals */
+
+ Gbl_ParseOpCount = 0;
+ Gbl_ParseOpCacheNext = NULL;
+ Gbl_ParseOpCacheLast = NULL;
+ Gbl_ParseTreeRoot = NULL;
+
+
+ /*
+ * Table Compiler - 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);
+
+ /* Reset cache globals */
+
+ Gbl_FieldCount = 0;
+ Gbl_FieldCacheNext = NULL;
+ Gbl_FieldCacheLast = NULL;
+
+
+ /*
+ * 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/source/compiler/aslcompile.c b/source/compiler/aslcompile.c
index 385684401392..1ddb8864c465 100644
--- a/source/compiler/aslcompile.c
+++ b/source/compiler/aslcompile.c
@@ -150,7 +150,6 @@
*****************************************************************************/
#include "aslcompiler.h"
-#include "dtcompiler.h"
#include "acnamesp.h"
#include <stdio.h>
@@ -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/source/compiler/aslcompiler.h b/source/compiler/aslcompiler.h
index 3b6a9c1dc1c2..fdf7ea96d3ae 100644
--- a/source/compiler/aslcompiler.h
+++ b/source/compiler/aslcompiler.h
@@ -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,
@@ -1150,10 +1203,6 @@ void
UtEndEvent (
UINT8 Event);
-void *
-UtLocalCalloc (
- UINT32 Size);
-
void
UtDisplaySummary (
UINT32 FileId);
@@ -1176,18 +1225,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/source/compiler/aslcompiler.l b/source/compiler/aslcompiler.l
index 5fcfc1886770..a5d0ee9a7f32 100644
--- a/source/compiler/aslcompiler.l
+++ b/source/compiler/aslcompiler.l
@@ -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/source/compiler/asldebug.c b/source/compiler/asldebug.c
index 684e222485bf..ba252251f72e 100644
--- a/source/compiler/asldebug.c
+++ b/source/compiler/asldebug.c
@@ -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/source/compiler/aslerror.c b/source/compiler/aslerror.c
index 56b5cabb9476..087f06ef10bd 100644
--- a/source/compiler/aslerror.c
+++ b/source/compiler/aslerror.c
@@ -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);
+ }
+
+ 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);
- fprintf (OutputFile, "\n");
+ 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,51 @@ AslCommonError (
char *Filename,
char *ExtraMessage)
{
- char *MessageBuffer = NULL;
- ASL_ERROR_MSG *Enode;
-
-
- 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 +996,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 +1011,7 @@ AslIsExceptionIgnored (
UINT8 Level,
UINT16 MessageId)
{
- BOOLEAN ExceptionIgnored;
+ BOOLEAN ExceptionIgnored;
/* Note: this allows exception to be disabled and expected */
@@ -869,7 +1040,8 @@ void
AslCheckExpectedExceptions (
void)
{
- UINT8 i;
+ UINT8 i;
+
for (i = 0; i < Gbl_ExpectedMessagesIndex; ++i)
{
@@ -980,8 +1152,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 +1171,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 +1253,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/source/compiler/aslfiles.c b/source/compiler/aslfiles.c
index 46307ab04ad4..53df683e553f 100644
--- a/source/compiler/aslfiles.c
+++ b/source/compiler/aslfiles.c
@@ -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)
{
diff --git a/source/compiler/aslhelp.c b/source/compiler/aslhelp.c
index e1266dc864ef..2d78aeb23b12 100644
--- a/source/compiler/aslhelp.c
+++ b/source/compiler/aslhelp.c
@@ -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/source/compiler/aslload.c b/source/compiler/aslload.c
index 2c825f0fd3c7..7ccc0b58a67b 100644
--- a/source/compiler/aslload.c
+++ b/source/compiler/aslload.c
@@ -327,8 +327,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_ERROR, ASL_MSG_NAME_EXISTS, Child,
+ Child->Asl.Value.String, ASL_MSG_FOUND_HERE, Node->Op,
+ Node->Op->Asl.ExternalName);
}
}
else
@@ -388,8 +389,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);
@@ -805,8 +808,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 +830,9 @@ LdNamespace1Begin (
if (Node->OwnerId == WalkState->OwnerId &&
!(Node->Flags & IMPLICIT_EXTERNAL))
{
- 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);
}
if (Node->Flags & IMPLICIT_EXTERNAL)
{
@@ -849,8 +853,9 @@ LdNamespace1Begin (
if (Node->OwnerId == WalkState->OwnerId)
{
- 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);
}
}
else if ((Node->Flags & ANOBJ_IS_EXTERNAL) &&
@@ -905,8 +910,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/source/compiler/aslmapenter.c b/source/compiler/aslmapenter.c
index da9f8e514ba9..69cea72f8ce1 100644
--- a/source/compiler/aslmapenter.c
+++ b/source/compiler/aslmapenter.c
@@ -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/source/compiler/aslmaputils.c b/source/compiler/aslmaputils.c
index b66d176db2b6..82b1d2809bb4 100644
--- a/source/compiler/aslmaputils.c
+++ b/source/compiler/aslmaputils.c
@@ -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/source/compiler/aslmessages.c b/source/compiler/aslmessages.c
index 159f9d23f859..5cff70a52265 100644
--- a/source/compiler/aslmessages.c
+++ b/source/compiler/aslmessages.c
@@ -350,7 +350,9 @@ const char *AslCompilerMsgs [] =
/* 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"
};
/* Table compiler */
diff --git a/source/compiler/aslmessages.h b/source/compiler/aslmessages.h
index d69c05a176c6..a80184016ce1 100644
--- a/source/compiler/aslmessages.h
+++ b/source/compiler/aslmessages.h
@@ -353,6 +353,8 @@ 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,
/* These messages are used by the Data Table compiler only */
diff --git a/source/compiler/aslmethod.c b/source/compiler/aslmethod.c
index 9734b643efd9..b2bb89c53664 100644
--- a/source/compiler/aslmethod.c
+++ b/source/compiler/aslmethod.c
@@ -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/source/compiler/asloperands.c b/source/compiler/asloperands.c
index 03403a39a8c8..9e5788fa123f 100644
--- a/source/compiler/asloperands.c
+++ b/source/compiler/asloperands.c
@@ -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 */
@@ -1094,7 +1094,7 @@ OpnDoDefinitionBlock (
if (Child->Asl.Value.String)
{
Length = strlen (Child->Asl.Value.String);
- Gbl_TableId = UtStringCacheCalloc (Length + 1);
+ Gbl_TableId = UtLocalCacheCalloc (Length + 1);
strcpy (Gbl_TableId, Child->Asl.Value.String);
/*
diff --git a/source/compiler/aslopt.c b/source/compiler/aslopt.c
index 79e41da24650..fa92d711eb09 100644
--- a/source/compiler/aslopt.c
+++ b/source/compiler/aslopt.c
@@ -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/source/compiler/asloptions.c b/source/compiler/asloptions.c
index 6d39f6d25492..683aaa2f4ff6 100644
--- a/source/compiler/asloptions.c
+++ b/source/compiler/asloptions.c
@@ -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);
}
@@ -541,7 +537,6 @@ AslDoOptions (
{
case '^':
- printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME));
Usage ();
exit (0);
@@ -891,8 +886,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/source/compiler/aslparseop.c b/source/compiler/aslparseop.c
index 41badcee5211..438e5a281a40 100644
--- a/source/compiler/aslparseop.c
+++ b/source/compiler/aslparseop.c
@@ -158,13 +158,6 @@
ACPI_MODULE_NAME ("aslparseop")
-/* Local prototypes */
-
-static ACPI_PARSE_OBJECT *
-TrGetOpFromCache (
- void);
-
-
/*******************************************************************************
*
* FUNCTION: TrCreateOp
@@ -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;
@@ -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/source/compiler/aslprintf.c b/source/compiler/aslprintf.c
index e5f56f11fd93..48c2fb1fe53d 100644
--- a/source/compiler/aslprintf.c
+++ b/source/compiler/aslprintf.c
@@ -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/source/compiler/aslstartup.c b/source/compiler/aslstartup.c
index 72c0d641e1ff..fa1ac25bd9ed 100644
--- a/source/compiler/aslstartup.c
+++ b/source/compiler/aslstartup.c
@@ -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/source/compiler/aslsupport.l b/source/compiler/aslsupport.l
index 42cee752a952..40cead33c3c5 100644
--- a/source/compiler/aslsupport.l
+++ b/source/compiler/aslsupport.l
@@ -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);
@@ -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/source/compiler/asltypes.h b/source/compiler/asltypes.h
index e4250871fd12..f72226d5e0c9 100644
--- a/source/compiler/asltypes.h
+++ b/source/compiler/asltypes.h
@@ -202,6 +202,7 @@ typedef struct asl_method_info
UINT8 ArgInitialized[ACPI_METHOD_NUM_ARGS];
UINT8 HasBeenTyped;
UINT8 ShouldBeSerialized;
+ UINT8 CreatesNamedObjects;
} ASL_METHOD_INFO;
@@ -337,8 +338,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 +351,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/source/compiler/aslutils.c b/source/compiler/aslutils.c
index 8b46d38bb532..82d11b4b967e 100644
--- a/source/compiler/aslutils.c
+++ b/source/compiler/aslutils.c
@@ -174,12 +174,6 @@ UtAttachNameseg (
ACPI_PARSE_OBJECT *Op,
char *Name);
-static void
-UtReallocLineBuffers (
- char **Buffer,
- UINT32 OldSize,
- UINT32 NewSize);
-
/*******************************************************************************
*
@@ -311,45 +305,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
@@ -637,180 +592,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 +624,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/source/compiler/cvcompiler.c b/source/compiler/cvcompiler.c
index afb6ea1bce57..d2a6c8f06fc6 100644
--- a/source/compiler/cvcompiler.c
+++ b/source/compiler/cvcompiler.c
@@ -193,7 +193,7 @@ CvProcessComment (
*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) &&
@@ -313,7 +313,7 @@ CvProcessCommentType2 (
{
*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) &&
@@ -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, '.');
@@ -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/source/compiler/cvparser.c b/source/compiler/cvparser.c
index 9941582a56db..b2e3e7674295 100644
--- a/source/compiler/cvparser.c
+++ b/source/compiler/cvparser.c
@@ -714,7 +714,7 @@ 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;
diff --git a/source/compiler/dtcompile.c b/source/compiler/dtcompile.c
index 5344562433c2..0823196feb1c 100644
--- a/source/compiler/dtcompile.c
+++ b/source/compiler/dtcompile.c
@@ -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);
/*
@@ -585,7 +583,7 @@ DtCompileTable (
if (Length > 0)
{
- String = UtStringCacheCalloc (Length);
+ String = UtLocalCacheCalloc (Length);
Subtable->Buffer = ACPI_CAST_PTR (UINT8, String);
}
@@ -828,7 +826,7 @@ DtCompilePadding (
if (Length > 0)
{
- String = UtStringCacheCalloc (Length);
+ String = UtLocalCacheCalloc (Length);
Subtable->Buffer = ACPI_CAST_PTR (UINT8, String);
}
diff --git a/source/compiler/dtcompiler.h b/source/compiler/dtcompiler.h
index 90fad8896f8a..941e2c65e86d 100644
--- a/source/compiler/dtcompiler.h
+++ b/source/compiler/dtcompiler.h
@@ -154,7 +154,6 @@
#ifndef _DTCOMPILER
#define _DTCOMPILER
-#include <stdio.h>
#include "acdisasm.h"
@@ -510,18 +509,6 @@ void
DtSetTableLength(
void);
-DT_SUBTABLE *
-UtSubtableCacheCalloc (
- void);
-
-DT_FIELD *
-UtFieldCacheCalloc (
- void);
-
-void
-DtDeleteCaches (
- void);
-
/* dttable - individual table compilation */
@@ -622,15 +609,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 +633,10 @@ DtCompileS3pt (
DT_FIELD **PFieldList);
ACPI_STATUS
+DtCompileSdev (
+ void **PFieldList);
+
+ACPI_STATUS
DtCompileSlic (
void **PFieldList);
@@ -662,6 +657,10 @@ DtCompileTcpa (
void **PFieldList);
ACPI_STATUS
+DtCompileTpm2 (
+ void **PFieldList);
+
+ACPI_STATUS
DtCompileUefi (
void **PFieldList);
@@ -724,6 +723,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 +731,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/source/compiler/dtexpress.c b/source/compiler/dtexpress.c
index 4e0ac89a8258..8b97bdc0f291 100644
--- a/source/compiler/dtexpress.c
+++ b/source/compiler/dtexpress.c
@@ -150,7 +150,6 @@
*****************************************************************************/
#include "aslcompiler.h"
-#include "dtcompiler.h"
#include "dtparser.y.h"
#define _COMPONENT DT_COMPILER
diff --git a/source/compiler/dtfield.c b/source/compiler/dtfield.c
index b06877a8f84a..290fa18bd13e 100644
--- a/source/compiler/dtfield.c
+++ b/source/compiler/dtfield.c
@@ -150,7 +150,6 @@
*****************************************************************************/
#include "aslcompiler.h"
-#include "dtcompiler.h"
#define _COMPONENT DT_COMPILER
ACPI_MODULE_NAME ("dtfield")
diff --git a/source/compiler/dtio.c b/source/compiler/dtio.c
index 0112999ef5a1..1d8ee98bfc1a 100644
--- a/source/compiler/dtio.c
+++ b/source/compiler/dtio.c
@@ -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/source/compiler/dtparser.y b/source/compiler/dtparser.y
index d5990fe45fe5..17607d96ce14 100644
--- a/source/compiler/dtparser.y
+++ b/source/compiler/dtparser.y
@@ -151,7 +151,6 @@
*****************************************************************************/
#include "aslcompiler.h"
-#include "dtcompiler.h"
#define _COMPONENT DT_COMPILER
ACPI_MODULE_NAME ("dtparser")
diff --git a/source/compiler/dtsubtable.c b/source/compiler/dtsubtable.c
index 44e36492ffac..c7b85e908505 100644
--- a/source/compiler/dtsubtable.c
+++ b/source/compiler/dtsubtable.c
@@ -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/source/compiler/dttable.c b/source/compiler/dttable.c
index 08b862d1a031..91e7544a9b3c 100644
--- a/source/compiler/dttable.c
+++ b/source/compiler/dttable.c
@@ -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")
diff --git a/source/compiler/dttable1.c b/source/compiler/dttable1.c
index bdf0419cf940..138f4f3a1731 100644
--- a/source/compiler/dttable1.c
+++ b/source/compiler/dttable1.c
@@ -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")
diff --git a/source/compiler/dttable2.c b/source/compiler/dttable2.c
index 356a7d0d19f2..172354cde8ee 100644
--- a/source/compiler/dttable2.c
+++ b/source/compiler/dttable2.c
@@ -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")
@@ -904,6 +903,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, TRUE);
+ 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, TRUE);
+ 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
@@ -1285,6 +1344,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, TRUE);
+ 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, TRUE);
+ 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, TRUE);
+ 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, TRUE);
+ 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, FALSE);
+ 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, TRUE);
+ 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
@@ -1603,6 +1875,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, TRUE);
+ 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, TRUE);
+ 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, TRUE);
+ 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
diff --git a/source/compiler/dttemplate.c b/source/compiler/dttemplate.c
index 55c6e9d65dfd..4c14b688618c 100644
--- a/source/compiler/dttemplate.c
+++ b/source/compiler/dttemplate.c
@@ -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/source/compiler/dttemplate.h b/source/compiler/dttemplate.h
index 8d27359d9ad0..38750f79d979 100644
--- a/source/compiler/dttemplate.h
+++ b/source/compiler/dttemplate.h
@@ -1079,6 +1079,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 +1198,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 +1418,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/source/compiler/dtutils.c b/source/compiler/dtutils.c
index c6c89eaa7d20..1e8f9b243a5a 100644
--- a/source/compiler/dtutils.c
+++ b/source/compiler/dtutils.c
@@ -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/source/compiler/prexpress.c b/source/compiler/prexpress.c
index a0ba7447d35c..a9ed5fe776a4 100644
--- a/source/compiler/prexpress.c
+++ b/source/compiler/prexpress.c
@@ -150,8 +150,6 @@
*****************************************************************************/
#include "aslcompiler.h"
-#include "dtcompiler.h"
-
#define _COMPONENT ASL_PREPROCESSOR
ACPI_MODULE_NAME ("prexpress")
diff --git a/source/compiler/prmacros.c b/source/compiler/prmacros.c
index 675d4522cb93..5560c12aa9ee 100644
--- a/source/compiler/prmacros.c
+++ b/source/compiler/prmacros.c
@@ -150,8 +150,6 @@
*****************************************************************************/
#include "aslcompiler.h"
-#include "dtcompiler.h"
-
#define _COMPONENT ASL_PREPROCESSOR
ACPI_MODULE_NAME ("prmacros")
diff --git a/source/compiler/prparser.y b/source/compiler/prparser.y
index d24a5bbee04f..17da8485cb14 100644
--- a/source/compiler/prparser.y
+++ b/source/compiler/prparser.y
@@ -151,7 +151,6 @@
*****************************************************************************/
#include "aslcompiler.h"
-#include "dtcompiler.h"
#define _COMPONENT ASL_PREPROCESSOR
ACPI_MODULE_NAME ("prparser")
diff --git a/source/compiler/prscan.c b/source/compiler/prscan.c
index 75a986657693..a012e111b06c 100644
--- a/source/compiler/prscan.c
+++ b/source/compiler/prscan.c
@@ -152,7 +152,6 @@
#define _DECLARE_PR_GLOBALS
#include "aslcompiler.h"
-#include "dtcompiler.h"
/*
* TBDs:
diff --git a/source/compiler/prutils.c b/source/compiler/prutils.c
index 61641ddbe2ae..5fa77aa68943 100644
--- a/source/compiler/prutils.c
+++ b/source/compiler/prutils.c
@@ -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/source/components/dispatcher/dscontrol.c b/source/components/dispatcher/dscontrol.c
index 897200a5efae..7a06a1e6705a 100644
--- a/source/components/dispatcher/dscontrol.c
+++ b/source/components/dispatcher/dscontrol.c
@@ -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/source/components/hardware/hwtimer.c b/source/components/hardware/hwtimer.c
index 358164ee8a31..0fc33e8acc06 100644
--- a/source/components/hardware/hwtimer.c
+++ b/source/components/hardware/hwtimer.c
@@ -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/source/components/namespace/nsaccess.c b/source/components/namespace/nsaccess.c
index 0ae1fbdd0875..8f98ca68273e 100644
--- a/source/components/namespace/nsaccess.c
+++ b/source/components/namespace/nsaccess.c
@@ -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/source/components/namespace/nssearch.c b/source/components/namespace/nssearch.c
index 3504092aedc3..3697ea4be007 100644
--- a/source/components/namespace/nssearch.c
+++ b/source/components/namespace/nssearch.c
@@ -545,6 +545,7 @@ AcpiNsSearchAndEnter (
(WalkState && WalkState->Opcode == AML_SCOPE_OP))
{
NewNode->Flags |= ANOBJ_IS_EXTERNAL;
+ NewNode->Flags |= IMPLICIT_EXTERNAL;
}
#endif
diff --git a/source/components/parser/psobject.c b/source/components/parser/psobject.c
index 8f31750c5f7e..b6aa802590d6 100644
--- a/source/components/parser/psobject.c
+++ b/source/components/parser/psobject.c
@@ -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/source/components/parser/psutils.c b/source/components/parser/psutils.c
index 19ae3a9d4bdd..a04b2e50aabc 100644
--- a/source/components/parser/psutils.c
+++ b/source/components/parser/psutils.c
@@ -292,11 +292,11 @@ AcpiPsAllocOp (
{
AcpiGbl_CurrentScope = Op;
}
- }
- if (Gbl_CaptureComments)
- {
- ASL_CV_TRANSFER_COMMENTS (Op);
+ if (Gbl_CaptureComments)
+ {
+ ASL_CV_TRANSFER_COMMENTS (Op);
+ }
}
return (Op);
diff --git a/source/components/utilities/utinit.c b/source/components/utilities/utinit.c
index d1937a57aafd..faa34bbd20b7 100644
--- a/source/components/utilities/utinit.c
+++ b/source/components/utilities/utinit.c
@@ -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/source/components/utilities/utmath.c b/source/components/utilities/utmath.c
index 4aa940251d18..a4c3fba36915 100644
--- a/source/components/utilities/utmath.c
+++ b/source/components/utilities/utmath.c
@@ -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/source/include/acapps.h b/source/include/acapps.h
index 4ca3e80fb31e..faae2fb6917e 100644
--- a/source/include/acapps.h
+++ b/source/include/acapps.h
@@ -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) \
diff --git a/source/include/acconfig.h b/source/include/acconfig.h
index 6fc043639e32..7cff0636516a 100644
--- a/source/include/acconfig.h
+++ b/source/include/acconfig.h
@@ -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/source/include/acdisasm.h b/source/include/acdisasm.h
index 26d4f47b709c..0c465602d1df 100644
--- a/source/include/acdisasm.h
+++ b/source/include/acdisasm.h
@@ -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,7 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoNfit4[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoNfit5[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoNfit6[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoNfit6a[];
+extern ACPI_DMTABLE_INFO AcpiDmTableInfoPdtt[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt0[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt1[];
@@ -515,6 +518,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 +533,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 +557,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 +599,7 @@ AcpiDmDumpTable (
UINT32 TableLength,
UINT32 TableOffset,
void *Table,
- UINT32 SubTableLength,
+ UINT32 SubtableLength,
ACPI_DMTABLE_INFO *Info);
void
@@ -713,6 +726,10 @@ AcpiDmDumpPcct (
ACPI_TABLE_HEADER *Table);
void
+AcpiDmDumpPdtt (
+ ACPI_TABLE_HEADER *Table);
+
+void
AcpiDmDumpPmtt (
ACPI_TABLE_HEADER *Table);
@@ -733,6 +750,10 @@ AcpiDmDumpS3pt (
ACPI_TABLE_HEADER *Table);
void
+AcpiDmDumpSdev (
+ ACPI_TABLE_HEADER *Table);
+
+void
AcpiDmDumpSlic (
ACPI_TABLE_HEADER *Table);
@@ -753,6 +774,10 @@ AcpiDmDumpTcpa (
ACPI_TABLE_HEADER *Table);
void
+AcpiDmDumpTpm2 (
+ ACPI_TABLE_HEADER *Table);
+
+void
AcpiDmDumpVrtc (
ACPI_TABLE_HEADER *Table);
diff --git a/source/include/acexcep.h b/source/include/acexcep.h
index d808f275144f..21db48dcb082 100644
--- a/source/include/acexcep.h
+++ b/source/include/acexcep.h
@@ -309,7 +309,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)
@@ -441,7 +441,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/source/include/aclocal.h b/source/include/aclocal.h
index 00be20ede3e7..7a20fe6fca66 100644
--- a/source/include/aclocal.h
+++ b/source/include/aclocal.h
@@ -834,7 +834,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;
diff --git a/source/include/acpixf.h b/source/include/acpixf.h
index 7d6c18d69811..bd5fde1765e9 100644
--- a/source/include/acpixf.h
+++ b/source/include/acpixf.h
@@ -154,7 +154,7 @@
/* Current ACPICA subsystem version in YYYYMMDD format */
-#define ACPI_CA_VERSION 0x20170831
+#define ACPI_CA_VERSION 0x20170929
#include "acconfig.h"
#include "actypes.h"
@@ -370,11 +370,11 @@ 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);
/*
* This mechanism is used to trace a specified AML method. The method is
diff --git a/source/include/actbl1.h b/source/include/actbl1.h
index 537c33e7c3b9..7eed2c5507ae 100644
--- a/source/include/actbl1.h
+++ b/source/include/actbl1.h
@@ -179,9 +179,10 @@
#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_PDTT "PDTT" /* Platform Debug Trigger Table */
#define ACPI_SIG_PPTT "PPTT" /* Processor Properties Topology Table */
#define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */
+#define ACPI_SIG_SDEV "SDEV" /* Secure Devices 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 */
@@ -1603,7 +1604,7 @@ typedef struct acpi_nfit_flush_address
/*******************************************************************************
*
- * PDTT - Processor Debug Trigger Table (ACPI 6.2)
+ * PDTT - Platform Debug Trigger Table (ACPI 6.2)
* Version 0
*
******************************************************************************/
@@ -1625,16 +1626,15 @@ typedef struct acpi_table_pdtt
*/
typedef struct acpi_pdtt_channel
{
- UINT16 SubChannelId;
+ UINT8 SubchannelId;
+ UINT8 Flags;
} ACPI_PDTT_CHANNEL;
+/* Flags for above */
-/* Mask and Flags for above */
-
-#define ACPI_PDTT_SUBCHANNEL_ID_MASK 0x00FF
-#define ACPI_PDTT_RUNTIME_TRIGGER (1<<8)
-#define ACPI_PPTT_WAIT_COMPLETION (1<<9)
+#define ACPI_PDTT_RUNTIME_TRIGGER (1)
+#define ACPI_PPTT_WAIT_COMPLETION (1<<1)
/*******************************************************************************
@@ -1748,6 +1748,82 @@ typedef struct acpi_table_sbst
/*******************************************************************************
*
+ * SDEV - Secure Devices Table (ACPI 6.2)
+ * Version 1
+ *
+ ******************************************************************************/
+
+typedef struct acpi_table_sdev
+{
+ ACPI_TABLE_HEADER Header; /* Common ACPI table header */
+
+} ACPI_TABLE_SDEV;
+
+
+typedef struct acpi_sdev_header
+{
+ UINT8 Type;
+ UINT8 Flags;
+ UINT16 Length;
+
+} ACPI_SDEV_HEADER;
+
+
+/* Values for subtable type above */
+
+enum AcpiSdevType
+{
+ ACPI_SDEV_TYPE_NAMESPACE_DEVICE = 0,
+ ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1,
+ ACPI_SDEV_TYPE_RESERVED = 2 /* 2 and greater are reserved */
+};
+
+/* Values for flags above */
+
+#define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS (1)
+
+/*
+ * SDEV subtables
+ */
+
+/* 0: Namespace Device Based Secure Device Structure */
+
+typedef struct acpi_sdev_namespace
+{
+ ACPI_SDEV_HEADER Header;
+ UINT16 DeviceIdOffset;
+ UINT16 DeviceIdLength;
+ UINT16 VendorDataOffset;
+ UINT16 VendorDataLength;
+
+} ACPI_SDEV_NAMESPACE;
+
+/* 1: PCIe Endpoint Device Based Device Structure */
+
+typedef struct acpi_sdev_pcie
+{
+ ACPI_SDEV_HEADER Header;
+ UINT16 Segment;
+ UINT16 StartBus;
+ UINT16 PathOffset;
+ UINT16 PathLength;
+ UINT16 VendorDataOffset;
+ UINT16 VendorDataLength;
+
+} ACPI_SDEV_PCIE;
+
+/* 1a: PCIe Endpoint path entry */
+
+typedef struct acpi_sdev_pcie_path
+{
+ UINT8 Device;
+ UINT8 Function;
+
+} ACPI_SDEV_PCIE_PATH;
+
+
+/*******************************************************************************
+ *
* SLIT - System Locality Distance Information Table
* Version 1
*
diff --git a/source/include/actbl2.h b/source/include/actbl2.h
index 951d65531a33..02a897b0fb19 100644
--- a/source/include/actbl2.h
+++ b/source/include/actbl2.h
@@ -1550,6 +1550,8 @@ enum AcpiSpmiInterfaceTypes
* 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
@@ -1622,6 +1624,8 @@ typedef struct acpi_table_tcpa_server
* 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
@@ -1643,17 +1647,25 @@ typedef struct acpi_table_tpm2
/* Values for StartMethod above */
#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
-/* Trailer appears after any StartMethod subtables */
+/* Optional trailer appears after any StartMethod subtables */
typedef struct acpi_tpm2_trailer
{
+ UINT8 MethodParameters[12];
UINT32 MinimumLogLength; /* Minimum length for the event log area */
UINT64 LogAddress; /* Address of the event log area */
diff --git a/source/include/actypes.h b/source/include/actypes.h
index 1839f936e4e5..4cc6d4fd071e 100644
--- a/source/include/actypes.h
+++ b/source/include/actypes.h
@@ -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 */
diff --git a/source/tools/acpibin/abmain.c b/source/tools/acpibin/abmain.c
index a3e0ba89bf3e..c5fc7860ad21 100644
--- a/source/tools/acpibin/abmain.c
+++ b/source/tools/acpibin/abmain.c
@@ -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^"
/******************************************************************************
@@ -192,6 +192,7 @@ AbDisplayUsage (
ACPI_OPTION ("-s <File>", "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 +293,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/source/tools/acpidump/apmain.c b/source/tools/acpidump/apmain.c
index 99962797d702..e95ad6c3b1bc 100644
--- a/source/tools/acpidump/apmain.c
+++ b/source/tools/acpidump/apmain.c
@@ -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 <Address>", "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/source/tools/acpiexec/aecommon.h b/source/tools/acpiexec/aecommon.h
index b4864610a69d..00bf09b41312 100644
--- a/source/tools/acpiexec/aecommon.h
+++ b/source/tools/acpiexec/aecommon.h
@@ -190,6 +190,7 @@ typedef struct ae_debug_regions
extern BOOLEAN AcpiGbl_IgnoreErrors;
+extern BOOLEAN AcpiGbl_AbortLoopOnTimeout;
extern UINT8 AcpiGbl_RegionFillValue;
extern UINT8 AcpiGbl_UseHwReducedFadt;
extern BOOLEAN AcpiGbl_DisplayRegionAccess;
diff --git a/source/tools/acpiexec/aeexception.c b/source/tools/acpiexec/aeexception.c
index 62e9db0a0122..2e44dbc504a3 100644
--- a/source/tools/acpiexec/aeexception.c
+++ b/source/tools/acpiexec/aeexception.c
@@ -196,13 +196,22 @@ AeExceptionHandler (
Exception = AcpiFormatException (AmlStatus);
AcpiOsPrintf (AE_PREFIX
"Exception %s during execution\n", Exception);
+
if (Name)
{
AcpiOsPrintf (AE_PREFIX
- "Evaluating Method or Node: [%4.4s]",
+ "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
"AML Opcode [%s], Method Offset ~%5.5X\n",
AcpiPsGetOpcodeName (Opcode), AmlOffset);
diff --git a/source/tools/acpiexec/aeexec.c b/source/tools/acpiexec/aeexec.c
index 2594f7d00ac9..d609ec1cce40 100644
--- a/source/tools/acpiexec/aeexec.c
+++ b/source/tools/acpiexec/aeexec.c
@@ -715,6 +715,7 @@ AeMiscellaneousTests (
ACPI_HANDLE Handle;
#if (!ACPI_REDUCED_HARDWARE)
+ UINT32 Temp;
UINT32 LockHandle1;
UINT32 LockHandle2;
ACPI_VENDOR_UUID Uuid =
@@ -973,5 +974,17 @@ 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 */
}
diff --git a/source/tools/acpiexec/aemain.c b/source/tools/acpiexec/aemain.c
index 323e2bfa1700..e9908e848868 100644
--- a/source/tools/acpiexec/aemain.c
+++ b/source/tools/acpiexec/aemain.c
@@ -189,6 +189,7 @@ AeDoOptions (
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 +197,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 */
@@ -270,9 +269,12 @@ usage (
ACPI_OPTION ("-fv <Value>", "Operation Region initialization fill value");
printf ("\n");
- ACPI_OPTION ("-i <Count>", "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 <Seconds>", "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");
@@ -461,20 +463,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,6 +491,42 @@ 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])
@@ -514,7 +538,7 @@ AeDoOptions (
case 'd':
- printf ("Build date/time: %s %s\n", AeBuildDate, AeBuildTime);
+ printf (ACPI_COMMON_BUILD_TIME);
return (1);
case 'i':
@@ -598,6 +622,10 @@ main (
goto ErrorExit;
}
+ /* Use a shorter timeout value for acpiexec */
+
+ AcpiGbl_MaxLoopIterations = 1;
+
/* Initialize the AML debugger */
Status = AcpiInitializeDebugger ();
diff --git a/source/tools/acpihelp/ahmain.c b/source/tools/acpihelp/ahmain.c
index cbc28573f265..ee7fd23e2f94 100644
--- a/source/tools/acpihelp/ahmain.c
+++ b/source/tools/acpihelp/ahmain.c
@@ -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 <options> [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/source/tools/acpinames/anmain.c b/source/tools/acpinames/anmain.c
index 256acaa97df8..7fe629a9504b 100644
--- a/source/tools/acpinames/anmain.c
+++ b/source/tools/acpinames/anmain.c
@@ -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 <DebugLevel>", "Debug output level");
}
@@ -259,9 +260,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':
diff --git a/source/tools/acpisrc/asmain.c b/source/tools/acpisrc/asmain.c
index a14af868a451..0ab58a93724b 100644
--- a/source/tools/acpisrc/asmain.c
+++ b/source/tools/acpisrc/asmain.c
@@ -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/source/tools/acpisrc/astable.c b/source/tools/acpisrc/astable.c
index e0215e97a459..c4b023d81b13 100644
--- a/source/tools/acpisrc/astable.c
+++ b/source/tools/acpisrc/astable.c
@@ -663,12 +663,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},
@@ -806,13 +808,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},
diff --git a/source/tools/acpixtract/acpixtract.c b/source/tools/acpixtract/acpixtract.c
index 32f40f52d073..ea78846da1ac 100644
--- a/source/tools/acpixtract/acpixtract.c
+++ b/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
*
*****************************************************************************/
@@ -152,13 +153,6 @@
#include "acpixtract.h"
-/* Local prototypes */
-
-static BOOLEAN
-AxIsFileAscii (
- FILE *Handle);
-
-
/******************************************************************************
*
* FUNCTION: AxExtractTables
@@ -217,14 +211,14 @@ AxExtractTables (
/* 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 +232,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 +317,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 +362,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 +400,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 +436,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 +488,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 +529,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 +544,7 @@ CleanupAndExit:
/******************************************************************************
*
- * FUNCTION: AxListTables
+ * FUNCTION: AxListAllTables
*
* PARAMETERS: InputPathname - Filename for acpidump file
*
@@ -514,13 +556,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 +580,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/source/tools/acpixtract/acpixtract.h b/source/tools/acpixtract/acpixtract.h
index abe2a1903c1c..c998f6b72ba8 100644
--- a/source/tools/acpixtract/acpixtract.h
+++ b/source/tools/acpixtract/acpixtract.h
@@ -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 "ahlms: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,8 @@
#define AX_LINE_BUFFER_SIZE 256
#define AX_MIN_BLOCK_HEADER_LENGTH 6 /* strlen ("DSDT @") */
+#define AX_IS_TABLE_BLOCK_HEADER strstr (Gbl_LineBuffer, " @ ")
+#define AX_END_OF_HEX_DATA 55
typedef struct AxTableInfo
@@ -210,12 +212,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);
+
/*
* acpixtract.c
*/
@@ -230,18 +232,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 +258,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/source/tools/acpixtract/axmain.c b/source/tools/acpixtract/axmain.c
index f5aa710113fa..e0a274cbcdc5 100644
--- a/source/tools/acpixtract/axmain.c
+++ b/source/tools/acpixtract/axmain.c
@@ -180,6 +180,7 @@ DisplayUsage (
ACPI_OPTION ("-m", "Extract multiple DSDT/SSDTs to a single file");
ACPI_OPTION ("-s <signature>", "Extract all tables with <signature>");
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");
@@ -243,9 +244,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 +296,7 @@ main (
case AX_LIST_ALL:
- Status = AxListTables (Filename);
+ Status = AxListAllTables (Filename);
break;
case AX_EXTRACT_SIGNATURE:
diff --git a/source/tools/acpixtract/axutils.c b/source/tools/acpixtract/axutils.c
index 00882c6fed91..6f887668426e 100644
--- a/source/tools/acpixtract/axutils.c
+++ b/source/tools/acpixtract/axutils.c
@@ -184,6 +184,70 @@ 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;
+
+
+ /* 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))
+ {
+ 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 appears to be binary "
+ "(contains non-text or non-ascii characters)\n");
+ fseek (Handle, 0, SEEK_SET);
+ return (FALSE);
+}
+
+
/******************************************************************************
*
* FUNCTION: AxIsEmptyLine
@@ -196,7 +260,7 @@ AxCheckAscii (
*
******************************************************************************/
-int
+BOOLEAN
AxIsEmptyLine (
char *Buffer)
{
@@ -219,6 +283,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: <sig> @ <addr>).
+ *
+ ******************************************************************************/
+
+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 <sig> @ <addr>.
+ * 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 +399,7 @@ AxNormalizeSignature (
/******************************************************************************
*
- * FUNCTION: AxConvertLine
+ * FUNCTION: AxConvertToBinary
*
* PARAMETERS: InputLine - One line from the input acpidump file
* OutputData - Where the converted data is returned
@@ -254,27 +408,30 @@ 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;
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.
+ *
+ * 00b0: 03 00 00 00 43 48 41 36 0c 00 00 00 03 00 00 00 ....CHA6........
+ * 00c0: 43 48 41 37 CHA7
+ */
+ InputLine [AX_END_OF_HEX_DATA] = 0;
/*
* Convert one line of table data, of the form:
@@ -284,7 +441,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 +460,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 +578,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: <sig> @ <addr>).
+ * 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 <sig> @ <addr>.
- * 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