📄 dmtbdump.c
字号:
* * PARAMETERS: Table - A HEST table * * RETURN: None * * DESCRIPTION: Format the contents of a HEST. This table type consists * of an open-ended number of subtables. * ******************************************************************************/voidAcpiDmDumpHest ( ACPI_TABLE_HEADER *Table){ ACPI_STATUS Status; ACPI_HEST_HEADER *SubTable; UINT32 Length = Table->Length; UINT32 Offset = sizeof (ACPI_TABLE_HEST); ACPI_DMTABLE_INFO *InfoTable; UINT32 SubTableLength; /* Main table */ Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoHest); if (ACPI_FAILURE (Status)) { return; } /* Sub-tables */ SubTable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Table, Offset); while (Offset < Table->Length) { /* TBD: add new subtable types as examples become available */ switch (SubTable->Type) { case ACPI_HEST_TYPE_GENERIC_HARDWARE_ERROR_SOURCE: InfoTable = AcpiDmTableInfoHest9; SubTableLength = sizeof (ACPI_HEST_GENERIC); break; default: AcpiOsPrintf ("\n**** Unknown HEST sub-table type %X\n", SubTable->Type); return; } AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Length, Offset, SubTable, 0, InfoTable); if (ACPI_FAILURE (Status)) { return; } /* Point to next sub-table (each subtable is of fixed length) */ Offset += SubTableLength; SubTable = ACPI_ADD_PTR (ACPI_HEST_HEADER, SubTable, SubTableLength); }}/******************************************************************************* * * FUNCTION: AcpiDmDumpMadt * * PARAMETERS: Table - A MADT table * * RETURN: None * * DESCRIPTION: Format the contents of a MADT. This table type consists * of an open-ended number of subtables. * ******************************************************************************/voidAcpiDmDumpMadt ( ACPI_TABLE_HEADER *Table){ ACPI_STATUS Status; ACPI_SUBTABLE_HEADER *SubTable; UINT32 Length = Table->Length; UINT32 Offset = sizeof (ACPI_TABLE_MADT); ACPI_DMTABLE_INFO *InfoTable; /* Main table */ Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoMadt); if (ACPI_FAILURE (Status)) { return; } /* Sub-tables */ SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset); while (Offset < Table->Length) { /* Common sub-table header */ AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Length, Offset, SubTable, SubTable->Length, AcpiDmTableInfoMadtHdr); if (ACPI_FAILURE (Status)) { return; } switch (SubTable->Type) { case ACPI_MADT_TYPE_LOCAL_APIC: InfoTable = AcpiDmTableInfoMadt0; break; case ACPI_MADT_TYPE_IO_APIC: InfoTable = AcpiDmTableInfoMadt1; break; case ACPI_MADT_TYPE_INTERRUPT_OVERRIDE: InfoTable = AcpiDmTableInfoMadt2; break; case ACPI_MADT_TYPE_NMI_SOURCE: InfoTable = AcpiDmTableInfoMadt3; break; case ACPI_MADT_TYPE_LOCAL_APIC_NMI: InfoTable = AcpiDmTableInfoMadt4; break; case ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE: InfoTable = AcpiDmTableInfoMadt5; break; case ACPI_MADT_TYPE_IO_SAPIC: InfoTable = AcpiDmTableInfoMadt6; break; case ACPI_MADT_TYPE_LOCAL_SAPIC: InfoTable = AcpiDmTableInfoMadt7; break; case ACPI_MADT_TYPE_INTERRUPT_SOURCE: InfoTable = AcpiDmTableInfoMadt8; break; default: AcpiOsPrintf ("\n**** Unknown MADT sub-table type %X\n\n", SubTable->Type); return; } Status = AcpiDmDumpTable (Length, Offset, SubTable, SubTable->Length, InfoTable); if (ACPI_FAILURE (Status)) { return; } /* Point to next sub-table */ Offset += SubTable->Length; SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, SubTable, SubTable->Length); }}/******************************************************************************* * * FUNCTION: AcpiDmDumpMcfg * * PARAMETERS: Table - A MCFG Table * * RETURN: None * * DESCRIPTION: Format the contents of a MCFG table * ******************************************************************************/voidAcpiDmDumpMcfg ( ACPI_TABLE_HEADER *Table){ ACPI_STATUS Status; UINT32 Offset = sizeof (ACPI_TABLE_MCFG); ACPI_MCFG_ALLOCATION *SubTable; /* Main table */ Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMcfg); if (ACPI_FAILURE (Status)) { return; } /* Sub-tables */ SubTable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Table, Offset); while (Offset < Table->Length) { if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > Table->Length) { AcpiOsPrintf ("Warning: there are %d invalid trailing bytes\n", sizeof (ACPI_MCFG_ALLOCATION) - (Offset - Table->Length)); return; } AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 0, AcpiDmTableInfoMcfg0); if (ACPI_FAILURE (Status)) { return; } /* Point to next sub-table (each subtable is of fixed length) */ Offset += sizeof (ACPI_MCFG_ALLOCATION); SubTable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, SubTable, sizeof (ACPI_MCFG_ALLOCATION)); }}/******************************************************************************* * * FUNCTION: AcpiDmDumpSlit * * PARAMETERS: Table - An SLIT * * RETURN: None * * DESCRIPTION: Format the contents of a SLIT * ******************************************************************************/voidAcpiDmDumpSlit ( ACPI_TABLE_HEADER *Table){ ACPI_STATUS Status; UINT32 Offset; UINT8 *Row; UINT32 Localities; UINT32 i; UINT32 j; /* Main table */ Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSlit); if (ACPI_FAILURE (Status)) { return; } /* Display the Locality NxN Matrix */ Localities = (UINT32) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->LocalityCount; Offset = ACPI_OFFSET (ACPI_TABLE_SLIT, Entry[0]); Row = (UINT8 *) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->Entry; for (i = 0; i < Localities; i++) { /* Display one row of the matrix */ AcpiDmLineHeader2 (Offset, Localities, "Locality", i); for (j = 0; j < Localities; j++) { /* Check for beyond EOT */ if (Offset >= Table->Length) { AcpiOsPrintf ("\n**** Not enough room in table for all localities\n"); return; } AcpiOsPrintf ("%2.2X ", Row[j]); Offset++; /* Display up to 16 bytes per output row */ if (j && (((j+1) % 16) == 0) && ((j+1) < Localities)) { AcpiOsPrintf ("\n"); AcpiDmLineHeader (Offset, 0, ""); } } /* Point to next row */ AcpiOsPrintf ("\n"); Row += Localities; }}/******************************************************************************* * * FUNCTION: AcpiDmDumpSrat * * PARAMETERS: Table - A SRAT table * * RETURN: None * * DESCRIPTION: Format the contents of a SRAT * ******************************************************************************/voidAcpiDmDumpSrat ( ACPI_TABLE_HEADER *Table){ ACPI_STATUS Status; UINT32 Offset = sizeof (ACPI_TABLE_SRAT); ACPI_SUBTABLE_HEADER *SubTable; ACPI_DMTABLE_INFO *InfoTable; /* Main table */ Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSrat); if (ACPI_FAILURE (Status)) { return; } /* Sub-tables */ SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset); while (Offset < Table->Length) { switch (SubTable->Type) { case ACPI_SRAT_TYPE_CPU_AFFINITY: InfoTable = AcpiDmTableInfoSrat0; break; case ACPI_SRAT_TYPE_MEMORY_AFFINITY: InfoTable = AcpiDmTableInfoSrat1; break; default: AcpiOsPrintf ("\n**** Unknown SRAT sub-table type %X\n", SubTable->Type); return; } AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, SubTable->Length, InfoTable); if (ACPI_FAILURE (Status)) { return; } /* Point to next sub-table */ Offset += SubTable->Length; SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, SubTable, SubTable->Length); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -