diff options
Diffstat (limited to 'sys/contrib/dev/acpica/compiler/dttable2.c')
| -rw-r--r-- | sys/contrib/dev/acpica/compiler/dttable2.c | 134 |
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"); |
