⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dmtbdump.c

📁 acpi tools for linux include acpiexec and acpixtract
💻 C
📖 第 1 页 / 共 3 页
字号:
 * * 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 + -