summaryrefslogtreecommitdiff
path: root/sys/contrib/dev/acpica/compiler/dttable2.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/contrib/dev/acpica/compiler/dttable2.c')
-rw-r--r--sys/contrib/dev/acpica/compiler/dttable2.c134
1 files changed, 134 insertions, 0 deletions
diff --git a/sys/contrib/dev/acpica/compiler/dttable2.c b/sys/contrib/dev/acpica/compiler/dttable2.c
index 878cad9cce22..4460394de9bb 100644
--- a/sys/contrib/dev/acpica/compiler/dttable2.c
+++ b/sys/contrib/dev/acpica/compiler/dttable2.c
@@ -871,6 +871,16 @@ DtCompilePcct (
InfoTable = AcpiDmTableInfoPcct2;
break;
+ case ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE:
+
+ InfoTable = AcpiDmTableInfoPcct3;
+ break;
+
+ case ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE:
+
+ InfoTable = AcpiDmTableInfoPcct4;
+ break;
+
default:
DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "PCCT");
@@ -1037,6 +1047,125 @@ DtCompilePmtt (
/******************************************************************************
*
+ * FUNCTION: DtCompilePptt
+ *
+ * PARAMETERS: List - Current field list pointer
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Compile PPTT.
+ *
+ *****************************************************************************/
+
+ACPI_STATUS
+DtCompilePptt (
+ void **List)
+{
+ ACPI_STATUS Status;
+ ACPI_SUBTABLE_HEADER *PpttHeader;
+ ACPI_PPTT_PROCESSOR *PpttProcessor = NULL;
+ DT_SUBTABLE *Subtable;
+ DT_SUBTABLE *ParentTable;
+ ACPI_DMTABLE_INFO *InfoTable;
+ DT_FIELD **PFieldList = (DT_FIELD **) List;
+ DT_FIELD *SubtableStart;
+
+
+ ParentTable = DtPeekSubtable ();
+ while (*PFieldList)
+ {
+ SubtableStart = *PFieldList;
+
+ /* Compile PPTT subtable header */
+
+ Status = DtCompileTable (PFieldList, AcpiDmTableInfoPpttHdr,
+ &Subtable, TRUE);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+ DtInsertSubtable (ParentTable, Subtable);
+ PpttHeader = ACPI_CAST_PTR (ACPI_SUBTABLE_HEADER, Subtable->Buffer);
+ PpttHeader->Length = (UINT8)(Subtable->Length);
+
+ switch (PpttHeader->Type)
+ {
+ case ACPI_PPTT_TYPE_PROCESSOR:
+
+ InfoTable = AcpiDmTableInfoPptt0;
+ break;
+
+ case ACPI_PPTT_TYPE_CACHE:
+
+ InfoTable = AcpiDmTableInfoPptt1;
+ break;
+
+ case ACPI_PPTT_TYPE_ID:
+
+ InfoTable = AcpiDmTableInfoPptt2;
+ break;
+
+ default:
+
+ DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "PPTT");
+ return (AE_ERROR);
+ }
+
+ /* Compile PPTT subtable body */
+
+ Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+ DtInsertSubtable (ParentTable, Subtable);
+ PpttHeader->Length += (UINT8)(Subtable->Length);
+
+ /* Compile PPTT subtable additionals */
+
+ switch (PpttHeader->Type)
+ {
+ case ACPI_PPTT_TYPE_PROCESSOR:
+
+ PpttProcessor = ACPI_SUB_PTR (ACPI_PPTT_PROCESSOR,
+ Subtable->Buffer, sizeof (ACPI_SUBTABLE_HEADER));
+ if (PpttProcessor)
+ {
+ /* Compile initiator proximity domain list */
+
+ PpttProcessor->NumberOfPrivResources = 0;
+ while (*PFieldList)
+ {
+ Status = DtCompileTable (PFieldList,
+ AcpiDmTableInfoPptt0a, &Subtable, TRUE);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+ if (!Subtable)
+ {
+ break;
+ }
+
+ DtInsertSubtable (ParentTable, Subtable);
+ PpttHeader->Length += (UINT8)(Subtable->Length);
+ PpttProcessor->NumberOfPrivResources++;
+ }
+ }
+ break;
+
+ default:
+
+ break;
+ }
+ }
+
+ return (AE_OK);
+}
+
+
+/******************************************************************************
+ *
* FUNCTION: DtCompileRsdt
*
* PARAMETERS: List - Current field list pointer
@@ -1324,6 +1453,11 @@ DtCompileSrat (
InfoTable = AcpiDmTableInfoSrat3;
break;
+ case ACPI_SRAT_TYPE_GIC_ITS_AFFINITY:
+
+ InfoTable = AcpiDmTableInfoSrat4;
+ break;
+
default:
DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "SRAT");