summaryrefslogtreecommitdiff
path: root/source/common
diff options
context:
space:
mode:
authorJung-uk Kim <jkim@FreeBSD.org>2016-03-18 21:13:19 +0000
committerJung-uk Kim <jkim@FreeBSD.org>2016-03-18 21:13:19 +0000
commit937fa60dd2f2b6264fb99f22b638190a3fef996b (patch)
tree0dc0bf084f8f2e8a00eec502c9893e78b5a4b088 /source/common
parent67ac2c42d552618270f8ba5431d63944a35a0ee7 (diff)
Notes
Diffstat (limited to 'source/common')
-rw-r--r--source/common/adwalk.c82
-rw-r--r--source/common/dmextern.c174
-rw-r--r--source/common/dmtable.c6
-rw-r--r--source/common/dmtables.c39
-rw-r--r--source/common/dmtbdump.c12
-rw-r--r--source/common/dmtbinfo.c46
6 files changed, 174 insertions, 185 deletions
diff --git a/source/common/adwalk.c b/source/common/adwalk.c
index 28255c6804ab..714d837d5ef8 100644
--- a/source/common/adwalk.c
+++ b/source/common/adwalk.c
@@ -327,6 +327,7 @@ AcpiDmConvertResourceIndexes (
WalkState);
if (ACPI_FAILURE (Status))
{
+ ACPI_FREE (WalkState);
return;
}
@@ -442,7 +443,7 @@ AcpiDmDumpDescending (
*
* DESCRIPTION: Check namepath Ops for orphaned method invocations
*
- * Note: Experimental.
+ * Note: Parts of this are experimental, under possible further development.
*
******************************************************************************/
@@ -508,6 +509,7 @@ AcpiDmFindOrphanDescending (
ChildOp->Common.Value.String, ACPI_TYPE_METHOD, ArgCount, 0);
}
break;
+
#endif
case AML_STORE_OP:
@@ -532,7 +534,7 @@ AcpiDmFindOrphanDescending (
/* One Arg means this is just a Store(Name,Target) */
AcpiDmAddOpToExternalList (ChildOp,
- ChildOp->Common.Value.String, ACPI_TYPE_INTEGER, 0, 0);
+ ChildOp->Common.Value.String, ACPI_TYPE_INTEGER, ArgCount, 0);
return (AE_OK);
}
@@ -554,7 +556,7 @@ AcpiDmFindOrphanDescending (
(ParentOp->Common.AmlOpcode != AML_INT_METHODCALL_OP) &&
!Op->Common.Node)
{
- ArgCount = AcpiDmInspectPossibleArgs (0, 0, Op->Common.Next);
+ ArgCount = AcpiDmInspectPossibleArgs (0, 0, Op);
/*
* Check if namepath is a predicate for if/while or lone parameter to
@@ -788,6 +790,7 @@ AcpiDmXrefDescendingOp (
Op->Common.Next->Common.Next->Common.Value.Integer;
}
+ Flags |= ACPI_EXT_RESOLVED_REFERENCE | ACPI_EXT_ORIGIN_FROM_OPCODE;
AcpiDmAddOpToExternalList (Op, Path,
(UINT8) ObjectType, ParamCount, Flags);
@@ -855,12 +858,12 @@ AcpiDmXrefDescendingOp (
Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ACPI_TYPE_ANY,
ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE,
WalkState, &Node);
+
if (ACPI_SUCCESS (Status) && (Node->Flags & ANOBJ_IS_EXTERNAL))
{
/* Node was created by an External() statement */
Status = AE_NOT_FOUND;
- Flags = ACPI_EXT_RESOLVED_REFERENCE;
}
if (ACPI_FAILURE (Status))
@@ -880,12 +883,12 @@ AcpiDmXrefDescendingOp (
if (Node)
{
AcpiDmAddNodeToExternalList (Node,
- (UINT8) ObjectType, 0, Flags);
+ (UINT8) ObjectType, 7, Flags);
}
else
{
AcpiDmAddOpToExternalList (Op, Path,
- (UINT8) ObjectType, 0, Flags);
+ (UINT8) ObjectType, 7, Flags);
}
}
}
@@ -1067,40 +1070,69 @@ AcpiDmInspectPossibleArgs (
{
const ACPI_OPCODE_INFO *OpInfo;
UINT32 i;
- UINT32 Last = 0;
- UINT32 Lookahead;
+ UINT32 ArgumentCount = 0;
+ ACPI_PARSE_OBJECT *NextOp;
+ ACPI_PARSE_OBJECT *ExecuteOp;
- Lookahead = (ACPI_METHOD_NUM_ARGS + TargetCount) - CurrentOpArgCount;
+ if (!Op)
+ {
+ return (0);
+ }
/* Lookahead for the maximum number of possible arguments */
- for (i = 0; i < Lookahead; i++)
+ NextOp = Op->Common.Next;
+
+ for (i = 0; (i < ACPI_METHOD_NUM_ARGS) && NextOp; i++)
{
- if (!Op)
- {
- break;
- }
+ OpInfo = AcpiPsGetOpcodeInfo (NextOp->Common.AmlOpcode);
- OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
+ /* Any one of these operators is "very probably" not a method arg */
- /*
- * Any one of these operators is "very probably" not a method arg
- */
- if ((Op->Common.AmlOpcode == AML_STORE_OP) ||
- (Op->Common.AmlOpcode == AML_NOTIFY_OP))
+ if ((NextOp->Common.AmlOpcode == AML_STORE_OP) ||
+ (NextOp->Common.AmlOpcode == AML_NOTIFY_OP) ||
+ (OpInfo->Class == AML_CLASS_CONTROL) ||
+ (OpInfo->Class == AML_CLASS_CREATE) ||
+ (OpInfo->Class == AML_CLASS_NAMED_OBJECT))
{
break;
}
- if ((OpInfo->Class != AML_CLASS_EXECUTE) &&
- (OpInfo->Class != AML_CLASS_CONTROL))
+ if (OpInfo->Class == AML_CLASS_EXECUTE)
{
- Last = i+1;
+ /* Probable that this is method arg if there is no target */
+
+ ExecuteOp = NextOp->Common.Value.Arg;
+ while (ExecuteOp)
+ {
+ if ((ExecuteOp->Common.AmlOpcode == AML_INT_NAMEPATH_OP) &&
+ (ExecuteOp->Common.Value.Arg == NULL))
+ {
+ /* No target, could be a method arg */
+
+ break;
+ }
+
+ if (NextOp->Common.AmlOpcode == AML_REF_OF_OP)
+ {
+ break;
+ }
+
+ ExecuteOp = ExecuteOp->Common.Next;
+ }
+
+ if (!ExecuteOp)
+ {
+ /* Has a target, not method arg */
+
+ return (ArgumentCount);
+ }
}
- Op = Op->Common.Next;
+ ArgumentCount++;
+ NextOp = NextOp->Common.Next;
}
- return (Last);
+ return (ArgumentCount);
}
diff --git a/source/common/dmextern.c b/source/common/dmextern.c
index bb44b88748a5..924c42fae6f2 100644
--- a/source/common/dmextern.c
+++ b/source/common/dmextern.c
@@ -754,46 +754,6 @@ AcpiDmAddPathToExternalList (
/*******************************************************************************
*
- * FUNCTION: AcpiDmEternalIsMatch
- *
- * PARAMETERS: NamePath - Path to match to External Name
- * ExternalPath - External NamePath to be matched
- *
- * RETURN: BOOLEAN
- *
- * DESCRIPTION: Returns TRUE if NamePath matches the last NamePath-length
- * characters of ExternalPath.
- *
- * External (_SB_.DEV0.ABCD) will match:
- * _SB_.DEV0.ABCD
- * DEV0.ABCD
- * ABCD
- *
- ******************************************************************************/
-
-static BOOLEAN
-AcpiDmExternalIsMatch (
- const char * NamePath,
- const char * ListNamePath)
-{
- BOOLEAN Match = FALSE;
-
-
- if (strlen (ListNamePath) >= strlen (NamePath))
- {
- if (!strcmp (ListNamePath +
- (strlen (ListNamePath) - strlen (NamePath)), NamePath))
- {
- return (TRUE);
- }
- }
-
- return (Match);
-}
-
-
-/*******************************************************************************
- *
* FUNCTION: AcpiDmCreateNewExternal
*
* PARAMETERS: ExternalPath - External path to the object
@@ -850,26 +810,29 @@ AcpiDmCreateNewExternal (
{
/* Check for duplicates */
- if (AcpiDmExternalIsMatch (ExternalPath, NextExternal->Path))
+ if (!strcmp (ExternalPath, NextExternal->Path))
{
- /* Duplicate method, check that the Value (ArgCount) is the same */
-
- if ((NextExternal->Type == ACPI_TYPE_METHOD) &&
- (NextExternal->Flags & ANOBJ_IS_EXTERNAL) &&
- (NextExternal->Value != Value) &&
- (Value > 0))
+ /*
+ * If this external came from an External() opcode, we are
+ * finished with this one. (No need to check any further).
+ */
+ if (NextExternal->Flags & ACPI_EXT_ORIGIN_FROM_OPCODE)
{
- ACPI_ERROR ((AE_INFO,
- "External method arg count mismatch %s: "
- "Current %u, attempted %u",
- NextExternal->Path, NextExternal->Value, Value));
+ return_ACPI_STATUS (AE_ALREADY_EXISTS);
}
/* Allow upgrade of type from ANY */
- else if (NextExternal->Type == ACPI_TYPE_ANY)
+ else if ((NextExternal->Type == ACPI_TYPE_ANY) &&
+ (Type != ACPI_TYPE_ANY))
{
NextExternal->Type = Type;
+ }
+
+ /* Update the argument count as necessary */
+
+ if (Value < NextExternal->Value)
+ {
NextExternal->Value = Value;
}
@@ -1125,90 +1088,63 @@ AcpiDmEmitExternals (
AcpiDmUnresolvedWarning (1);
- /* Emit any unresolved method externals in a single text block */
-
- NextExternal = AcpiGbl_ExternalList;
- while (NextExternal)
- {
- if ((NextExternal->Type == ACPI_TYPE_METHOD) &&
- (!(NextExternal->Flags & ACPI_EXT_RESOLVED_REFERENCE)))
- {
- AcpiOsPrintf (" External (%s%s",
- NextExternal->Path,
- AcpiDmGetObjectTypeName (NextExternal->Type));
-
- AcpiOsPrintf (") // Warning: Unresolved method, "
- "guessing %u arguments\n",
- NextExternal->Value);
-
- NextExternal->Flags |= ACPI_EXT_EXTERNAL_EMITTED;
- }
-
- NextExternal = NextExternal->Next;
- }
-
- AcpiOsPrintf ("\n");
-
-
- /* Emit externals that were imported from a file */
-
if (Gbl_ExternalRefFilename)
{
AcpiOsPrintf (
- " /*\n * External declarations that were imported from\n"
- " * the reference file [%s]\n */\n",
+ " /*\n * External declarations were imported from\n"
+ " * a reference file -- %s\n */\n\n",
Gbl_ExternalRefFilename);
-
- NextExternal = AcpiGbl_ExternalList;
- while (NextExternal)
- {
- if (!(NextExternal->Flags & ACPI_EXT_EXTERNAL_EMITTED) &&
- (NextExternal->Flags & ACPI_EXT_ORIGIN_FROM_FILE))
- {
- AcpiOsPrintf (" External (%s%s",
- NextExternal->Path,
- AcpiDmGetObjectTypeName (NextExternal->Type));
-
- if (NextExternal->Type == ACPI_TYPE_METHOD)
- {
- AcpiOsPrintf (") // %u Arguments\n",
- NextExternal->Value);
- }
- else
- {
- AcpiOsPrintf (")\n");
- }
- NextExternal->Flags |= ACPI_EXT_EXTERNAL_EMITTED;
- }
-
- NextExternal = NextExternal->Next;
- }
-
- AcpiOsPrintf ("\n");
}
/*
- * Walk the list of externals found during the AML parsing
+ * Walk and emit the list of externals found during the AML parsing
*/
while (AcpiGbl_ExternalList)
{
+ AcpiGbl_ExternalList = AcpiGbl_ExternalList;
if (!(AcpiGbl_ExternalList->Flags & ACPI_EXT_EXTERNAL_EMITTED))
{
- AcpiOsPrintf (" External (%s%s",
+ AcpiOsPrintf (" External (%s%s)",
AcpiGbl_ExternalList->Path,
AcpiDmGetObjectTypeName (AcpiGbl_ExternalList->Type));
- /* For methods, add a comment with the number of arguments */
+ /* Check for "unresolved" method reference */
- if (AcpiGbl_ExternalList->Type == ACPI_TYPE_METHOD)
+ if ((AcpiGbl_ExternalList->Type == ACPI_TYPE_METHOD) &&
+ (!(AcpiGbl_ExternalList->Flags & ACPI_EXT_RESOLVED_REFERENCE)))
{
- AcpiOsPrintf (") // %u Arguments\n",
+ AcpiOsPrintf (" // Warning: Unknown method, "
+ "guessing %u arguments",
AcpiGbl_ExternalList->Value);
}
+
+ /* Check for external from a external references file */
+
+ else if (AcpiGbl_ExternalList->Flags & ACPI_EXT_ORIGIN_FROM_FILE)
+ {
+ if (AcpiGbl_ExternalList->Type == ACPI_TYPE_METHOD)
+ {
+ AcpiOsPrintf (" // %u Arguments",
+ AcpiGbl_ExternalList->Value);
+ }
+
+ AcpiOsPrintf (" // From external reference file");
+ }
+
+ /* This is the normal external case */
+
else
{
- AcpiOsPrintf (")\n");
+ /* For methods, add a comment with the number of arguments */
+
+ if (AcpiGbl_ExternalList->Type == ACPI_TYPE_METHOD)
+ {
+ AcpiOsPrintf (" // %u Arguments",
+ AcpiGbl_ExternalList->Value);
+ }
}
+
+ AcpiOsPrintf ("\n");
}
/* Free this external info block and move on to next external */
@@ -1341,15 +1277,17 @@ AcpiDmUnresolvedWarning (
Format = Type ? Pad : NoPad;
sprintf (ExternalWarningPart1,
- "%s iASL Warning: There were %u external control methods found during\n"
+ "%s iASL Warning: There %s %u external control method%s found during\n"
"%s disassembly, but only %u %s resolved (%u unresolved). Additional\n"
"%s ACPI tables may be required to properly disassemble the code. This\n"
"%s resulting disassembler output file may not compile because the\n"
"%s disassembler did not know how many arguments to assign to the\n"
"%s unresolved methods. Note: SSDTs can be dynamically loaded at\n"
"%s runtime and may or may not be available via the host OS.\n",
- Format, AcpiGbl_NumExternalMethods, Format, AcpiGbl_ResolvedExternalMethods,
- (AcpiGbl_ResolvedExternalMethods > 1 ? "were" : "was"),
+ Format, (AcpiGbl_NumExternalMethods != 1 ? "were" : "was"),
+ AcpiGbl_NumExternalMethods, (AcpiGbl_NumExternalMethods != 1 ? "s" : ""),
+ Format, AcpiGbl_ResolvedExternalMethods,
+ (AcpiGbl_ResolvedExternalMethods != 1 ? "were" : "was"),
(AcpiGbl_NumExternalMethods - AcpiGbl_ResolvedExternalMethods),
Format, Format, Format, Format, Format);
@@ -1391,7 +1329,7 @@ AcpiDmUnresolvedWarning (
{
/* The -e option was specified, but there are still some unresolved externals */
- AcpiOsPrintf (" /*\n%s *\n *\n */\n",
+ AcpiOsPrintf (" /*\n%s *\n%s *\n%s */\n",
ExternalWarningPart1, ExternalWarningPart3, ExternalWarningPart4);
}
}
diff --git a/source/common/dmtable.c b/source/common/dmtable.c
index 89f6db084f3b..14f0861ec8a9 100644
--- a/source/common/dmtable.c
+++ b/source/common/dmtable.c
@@ -118,6 +118,7 @@ static const char *AcpiDmEinjActions[] =
"Check Busy Status",
"Get Command Status",
"Set Error Type With Address",
+ "Get Execute Timings",
"Unknown Action"
};
@@ -150,6 +151,7 @@ static const char *AcpiDmErstActions[] =
"Get Error Address Range",
"Get Error Address Length",
"Get Error Attributes",
+ "Execute Timings",
"Unknown Action"
};
@@ -209,6 +211,10 @@ static const char *AcpiDmHestNotifySubnames[] =
"NMI",
"CMCI", /* ACPI 5.0 */
"MCE", /* ACPI 5.0 */
+ "GPIO", /* ACPI 6.0 */
+ "SEA", /* ACPI 6.1 */
+ "SEI", /* ACPI 6.1 */
+ "GSIV", /* ACPI 6.1 */
"Unknown Notify Type" /* Reserved */
};
diff --git a/source/common/dmtables.c b/source/common/dmtables.c
index 5758b9d372f2..85abfe7e7f76 100644
--- a/source/common/dmtables.c
+++ b/source/common/dmtables.c
@@ -141,7 +141,6 @@ AdCreateTableHeader (
char *Filename,
ACPI_TABLE_HEADER *Table)
{
- char *NewFilename;
UINT8 Checksum;
@@ -184,11 +183,10 @@ AdCreateTableHeader (
break;
}
- AcpiOsPrintf ("\n");
/* Print and validate the table checksum */
- AcpiOsPrintf (" * Checksum 0x%2.2X", Table->Checksum);
+ AcpiOsPrintf ("\n * Checksum 0x%2.2X", Table->Checksum);
Checksum = AcpiTbChecksum (ACPI_CAST_PTR (UINT8, Table), Table->Length);
if (Checksum)
@@ -205,33 +203,16 @@ AdCreateTableHeader (
AcpiOsPrintf (" * Compiler Version 0x%8.8X (%u)\n", Table->AslCompilerRevision, Table->AslCompilerRevision);
AcpiOsPrintf (" */\n");
- /* Create AML output filename based on input filename */
-
- if (Filename)
- {
- NewFilename = FlGenerateFilename (Filename, "aml");
- }
- else
- {
- NewFilename = UtStringCacheCalloc (9);
- if (NewFilename)
- {
- strncat (NewFilename, Table->Signature, 4);
- strcat (NewFilename, ".aml");
- }
- }
-
- if (!NewFilename)
- {
- AcpiOsPrintf (" **** Could not generate AML output filename\n");
- return;
- }
-
- /* Open the ASL definition block */
-
+ /*
+ * Open the ASL definition block.
+ *
+ * Note: the AMLFilename string is left zero-length in order to just let
+ * the compiler create it when the disassembled file is compiled. This
+ * makes it easier to rename the disassembled ASL file if needed.
+ */
AcpiOsPrintf (
- "DefinitionBlock (\"%s\", \"%4.4s\", %hu, \"%.6s\", \"%.8s\", 0x%8.8X)\n",
- NewFilename, Table->Signature, Table->Revision,
+ "DefinitionBlock (\"\", \"%4.4s\", %hu, \"%.6s\", \"%.8s\", 0x%8.8X)\n",
+ Table->Signature, Table->Revision,
Table->OemId, Table->OemTableId, Table->OemRevision);
}
diff --git a/source/common/dmtbdump.c b/source/common/dmtbdump.c
index c6e0c4e78872..efc383dd54e3 100644
--- a/source/common/dmtbdump.c
+++ b/source/common/dmtbdump.c
@@ -1773,6 +1773,12 @@ AcpiDmDumpIort (
IortSmmu = ACPI_ADD_PTR (ACPI_IORT_SMMU, IortNode, NodeOffset);
break;
+ case ACPI_IORT_NODE_SMMU_V3:
+
+ InfoTable = AcpiDmTableInfoIort4;
+ Length = IortNode->Length - NodeOffset;
+ break;
+
default:
AcpiOsPrintf ("\n**** Unknown IORT node type 0x%X\n",
@@ -3139,7 +3145,7 @@ AcpiDmDumpS3pt (
{
ACPI_STATUS Status;
UINT32 Offset = sizeof (ACPI_TABLE_S3PT);
- ACPI_S3PT_HEADER *SubTable;
+ ACPI_FPDT_HEADER *SubTable;
ACPI_DMTABLE_INFO *InfoTable;
ACPI_TABLE_S3PT *S3ptTable = ACPI_CAST_PTR (ACPI_TABLE_S3PT, Tables);
@@ -3152,7 +3158,7 @@ AcpiDmDumpS3pt (
return 0;
}
- SubTable = ACPI_ADD_PTR (ACPI_S3PT_HEADER, S3ptTable, Offset);
+ SubTable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, S3ptTable, Offset);
while (Offset < S3ptTable->Length)
{
/* Common subtable header */
@@ -3204,7 +3210,7 @@ NextSubTable:
/* Point to next subtable */
Offset += SubTable->Length;
- SubTable = ACPI_ADD_PTR (ACPI_S3PT_HEADER, SubTable, SubTable->Length);
+ SubTable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, SubTable, SubTable->Length);
}
return (S3ptTable->Length);
diff --git a/source/common/dmtbinfo.c b/source/common/dmtbinfo.c
index dde36d3f6623..bc9cc3bf3f3c 100644
--- a/source/common/dmtbinfo.c
+++ b/source/common/dmtbinfo.c
@@ -150,8 +150,8 @@
#define ACPI_EINJ0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_WHEA_HEADER,f)
#define ACPI_ERST0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_WHEA_HEADER,f)
#define ACPI_FPDTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_FPDT_HEADER,f)
-#define ACPI_FPDT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_FPDT_BOOT,f)
-#define ACPI_FPDT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_FPDT_S3PT_PTR,f)
+#define ACPI_FPDT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_FPDT_BOOT_POINTER,f)
+#define ACPI_FPDT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_FPDT_S3PT_POINTER,f)
#define ACPI_GTDT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GTDT_TIMER_BLOCK,f)
#define ACPI_GTDT0a_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GTDT_TIMER_ENTRY,f)
#define ACPI_GTDT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GTDT_WATCHDOG,f)
@@ -170,6 +170,7 @@
#define ACPI_IORT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_NAMED_COMPONENT,f)
#define ACPI_IORT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_ROOT_COMPLEX,f)
#define ACPI_IORT3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_SMMU,f)
+#define ACPI_IORT4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_SMMU_V3,f)
#define ACPI_IORTA_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_MEMORY_ACCESS,f)
#define ACPI_IORTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_NODE,f)
#define ACPI_IORTM_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_ID_MAPPING,f)
@@ -222,7 +223,7 @@
#define ACPI_PMTT1A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_DOMAIN,f)
#define ACPI_PMTT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_PHYSICAL_COMPONENT,f)
#define ACPI_PMTTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_HEADER,f)
-#define ACPI_S3PTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_S3PT_HEADER,f)
+#define ACPI_S3PTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_FPDT_HEADER,f)
#define ACPI_S3PT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_S3PT_RESUME,f)
#define ACPI_S3PT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_S3PT_SUSPEND,f)
#define ACPI_SLIC_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_SLIC,f)
@@ -256,6 +257,7 @@
#define ACPI_GTDT0a_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_GTDT_TIMER_ENTRY,f,o)
#define ACPI_GTDT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_GTDT_WATCHDOG,f,o)
#define ACPI_IORT3_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_SMMU,f,o)
+#define ACPI_IORT4_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_SMMU_V3,f,o)
#define ACPI_IORTA_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_MEMORY_ACCESS,f,o)
#define ACPI_IORTM_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_ID_MAPPING,f,o)
#define ACPI_LPITH_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_LPIT_HEADER,f,o)
@@ -1095,11 +1097,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoFpdtHdr[] =
ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt0[] =
{
{ACPI_DMT_UINT32, ACPI_FPDT0_OFFSET (Reserved), "Reserved", 0},
- {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (ResetEnd), "Reset End", 0},
- {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (LoadStart), "Load Image Start", 0},
- {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (StartupStart), "Start Image Start", 0},
- {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (ExitServicesEntry), "Exit Services Entry", 0},
- {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (ExitServicesExit), "Exit Services Exit", 0},
+ {ACPI_DMT_UINT64, ACPI_FPDT1_OFFSET (Address), "FPDT Boot Record Address", 0},
ACPI_DMT_TERMINATOR
};
@@ -1108,10 +1106,18 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt0[] =
ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt1[] =
{
{ACPI_DMT_UINT32, ACPI_FPDT1_OFFSET (Reserved), "Reserved", 0},
- {ACPI_DMT_UINT64, ACPI_FPDT1_OFFSET (Address), "S3PT Address", 0},
+ {ACPI_DMT_UINT64, ACPI_FPDT1_OFFSET (Address), "S3PT Record Address", 0},
ACPI_DMT_TERMINATOR
};
+#if 0
+ /* Boot Performance Record, not supported at this time. */
+ {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (ResetEnd), "Reset End", 0},
+ {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (LoadStart), "Load Image Start", 0},
+ {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (StartupStart), "Start Image Start", 0},
+ {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (ExitServicesEntry), "Exit Services Entry", 0},
+ {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (ExitServicesExit), "Exit Services Exit", 0},
+#endif
/*******************************************************************************
*
@@ -1557,6 +1563,23 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoIort3c[] =
ACPI_DMT_TERMINATOR
};
+/* 0x04: SMMUv3 */
+
+ACPI_DMTABLE_INFO AcpiDmTableInfoIort4[] =
+{
+ {ACPI_DMT_UINT64, ACPI_IORT4_OFFSET (BaseAddress), "Base Address", 0},
+ {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (Flags), "Flags (decoded below)", 0},
+ {ACPI_DMT_FLAG0, ACPI_IORT4_FLAG_OFFSET (Flags, 0), "COHACC Override", 0},
+ {ACPI_DMT_FLAG1, ACPI_IORT4_FLAG_OFFSET (Flags, 0), "HTTU Override", 0},
+ {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (Reserved), "Reserved", 0},
+ {ACPI_DMT_UINT64, ACPI_IORT4_OFFSET (VatosAddress), "VATOS Address", 0},
+ {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (Model), "Model", 0},
+ {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (EventGsiv), "Event GSIV", 0},
+ {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (PriGsiv), "PRI GSIV", 0},
+ {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (GerrGsiv), "GERR GSIV", 0},
+ {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (SyncGsiv), "Sync GSIV", 0},
+ ACPI_DMT_TERMINATOR
+};
/*******************************************************************************
*
@@ -2209,7 +2232,10 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoNfit4[] =
{ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (SubsystemVendorId), "Subsystem Vendor Id", 0},
{ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (SubsystemDeviceId), "Subsystem Device Id", 0},
{ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (SubsystemRevisionId), "Subsystem Revision Id", 0},
- {ACPI_DMT_UINT48, ACPI_NFIT4_OFFSET (Reserved[0]), "Reserved", 0},
+ {ACPI_DMT_UINT8, ACPI_NFIT4_OFFSET (ValidFields), "Valid Fields", 0},
+ {ACPI_DMT_UINT8, ACPI_NFIT4_OFFSET (ManufacturingLocation), "Manufacturing Location", 0},
+ {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (ManufacturingDate), "Manufacturing Date", 0},
+ {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Reserved[0]), "Reserved", 0},
{ACPI_DMT_UINT32, ACPI_NFIT4_OFFSET (SerialNumber), "Serial Number", 0},
{ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Code), "Code", 0},
{ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Windows), "Window Count", 0},