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

📄 dmtbdump.c

📁 acpi tools for linux include acpiexec and acpixtract
💻 C
📖 第 1 页 / 共 3 页
字号:
        Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,                    SubTable->Header.Length, InfoTable);        if (ACPI_FAILURE (Status))        {            return;        }        /* Dump variable-length extra data */        switch (SubTable->Header.Type & 0x7F) /* Mask off top bit */        {        case ACPI_ASF_TYPE_ALERT:        case ACPI_ASF_TYPE_CONTROL:            for (i = 0; i < DataCount; i++)            {                AcpiOsPrintf ("\n");                Status = AcpiDmDumpTable (Table->Length, DataOffset,                            DataTable, DataLength, DataInfoTable);                if (ACPI_FAILURE (Status))                {                    return;                }                DataTable = ACPI_ADD_PTR (UINT8, DataTable, DataLength);                DataOffset += DataLength;            }            break;        case ACPI_ASF_TYPE_ADDRESS:            for (i = 0; i < DataLength; i++)            {                if (!(i % 16))                {                    AcpiDmLineHeader (DataOffset, 1, "Addresses");                }                AcpiOsPrintf ("%2.2X ", *DataTable);                DataTable++;                DataOffset++;                if (DataOffset > Table->Length)                {                    AcpiOsPrintf ("**** ACPI table terminates in the middle of a data structure!\n");                    return;                }            }            AcpiOsPrintf ("\n");            break;        }        AcpiOsPrintf ("\n");        /* Point to next sub-table */        if (!SubTable->Header.Length)        {            AcpiOsPrintf ("Invalid zero subtable header length\n");            return;        }        Offset += SubTable->Header.Length;        SubTable = ACPI_ADD_PTR (ACPI_ASF_INFO, SubTable, SubTable->Header.Length);    }}/******************************************************************************* * * FUNCTION:    AcpiDmDumpCpep * * PARAMETERS:  Table               - A CPEP table * * RETURN:      None * * DESCRIPTION: Format the contents of a CPEP. This table type consists *              of an open-ended number of subtables. * ******************************************************************************/voidAcpiDmDumpCpep (    ACPI_TABLE_HEADER       *Table){    ACPI_STATUS             Status;    ACPI_CPEP_POLLING       *SubTable;    UINT32                  Length = Table->Length;    UINT32                  Offset = sizeof (ACPI_TABLE_CPEP);    /* Main table */    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoCpep);    if (ACPI_FAILURE (Status))    {        return;    }    /* Sub-tables */    SubTable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Table, Offset);    while (Offset < Table->Length)    {        AcpiOsPrintf ("\n");        Status = AcpiDmDumpTable (Length, Offset, SubTable,                    SubTable->Length, AcpiDmTableInfoCpep0);        if (ACPI_FAILURE (Status))        {            return;        }        /* Point to next sub-table */        Offset += SubTable->Length;        SubTable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, SubTable, SubTable->Length);    }}/******************************************************************************* * * FUNCTION:    AcpiDmDumpDmar * * PARAMETERS:  Table               - A DMAR table * * RETURN:      None * * DESCRIPTION: Format the contents of a DMAR. This table type consists *              of an open-ended number of subtables. * ******************************************************************************/voidAcpiDmDumpDmar (    ACPI_TABLE_HEADER       *Table){    ACPI_STATUS             Status;    ACPI_DMAR_HEADER        *SubTable;    UINT32                  Length = Table->Length;    UINT32                  Offset = sizeof (ACPI_TABLE_DMAR);    ACPI_DMTABLE_INFO       *InfoTable;    ACPI_DMAR_DEVICE_SCOPE  *ScopeTable;    UINT32                  ScopeOffset;    UINT8                   *PciPath;    UINT32                  PathOffset;    /* Main table */    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDmar);    if (ACPI_FAILURE (Status))    {        return;    }    /* Sub-tables */    SubTable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Table, Offset);    while (Offset < Table->Length)    {        /* Common sub-table header */        AcpiOsPrintf ("\n");        Status = AcpiDmDumpTable (Length, Offset, SubTable,                    SubTable->Length, AcpiDmTableInfoDmarHdr);        if (ACPI_FAILURE (Status))        {            return;        }        switch (SubTable->Type)        {        case ACPI_DMAR_TYPE_HARDWARE_UNIT:            InfoTable = AcpiDmTableInfoDmar0;            ScopeOffset = sizeof (ACPI_DMAR_HARDWARE_UNIT);            break;        case ACPI_DMAR_TYPE_RESERVED_MEMORY:            InfoTable = AcpiDmTableInfoDmar1;            ScopeOffset = sizeof (ACPI_DMAR_RESERVED_MEMORY);            break;        default:            AcpiOsPrintf ("\n**** Unknown DMAR sub-table type %X\n\n", SubTable->Type);            return;        }        Status = AcpiDmDumpTable (Length, Offset, SubTable,                    SubTable->Length, InfoTable);        if (ACPI_FAILURE (Status))        {            return;        }        /*         * Currently, a common flag indicates whether there are any         * device scope entries present at the end of the subtable.         */        if ((SubTable->Flags & ACPI_DMAR_INCLUDE_ALL) == 0)        {            /* Dump the device scope entries */            ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, SubTable, ScopeOffset);            while (ScopeOffset < SubTable->Length)            {                AcpiOsPrintf ("\n");                Status = AcpiDmDumpTable (Length, Offset + ScopeOffset, ScopeTable,                            ScopeTable->Length, AcpiDmTableInfoDmarScope);                if (ACPI_FAILURE (Status))                {                    return;                }                /* Dump the PCI Path entries for this device scope */                PathOffset = sizeof (ACPI_DMAR_DEVICE_SCOPE); /* Path entries start at this offset */                PciPath = ACPI_ADD_PTR (UINT8, ScopeTable,                    sizeof (ACPI_DMAR_DEVICE_SCOPE));                while (PathOffset < ScopeTable->Length)                {                    AcpiDmLineHeader ((PathOffset + ScopeOffset + Offset), 2, "PCI Path");                    AcpiOsPrintf ("[%2.2X, %2.2X]\n", PciPath[0], PciPath[1]);                    /* Point to next PCI Path entry */                    PathOffset += 2;                    PciPath += 2;                }                /* Point to next device scope entry */                ScopeOffset += ScopeTable->Length;                ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE,                    ScopeTable, ScopeTable->Length);            }        }        /* Point to next sub-table */        Offset += SubTable->Length;        SubTable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, SubTable, SubTable->Length);    }}/******************************************************************************* * * FUNCTION:    AcpiDmDumpEinj * * PARAMETERS:  Table               - A EINJ table * * RETURN:      None * * DESCRIPTION: Format the contents of a EINJ. This table type consists *              of an open-ended number of subtables. * ******************************************************************************/voidAcpiDmDumpEinj (    ACPI_TABLE_HEADER       *Table){    ACPI_STATUS             Status;    ACPI_WHEA_HEADER        *SubTable;    UINT32                  Length = Table->Length;    UINT32                  Offset = sizeof (ACPI_TABLE_EINJ);    /* Main table */    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoEinj);    if (ACPI_FAILURE (Status))    {        return;    }    /* Sub-tables */    SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset);    while (Offset < Table->Length)    {        AcpiOsPrintf ("\n");        Status = AcpiDmDumpTable (Length, Offset, SubTable,                    0, AcpiDmTableInfoEinj0);        if (ACPI_FAILURE (Status))        {            return;        }        /* Point to next sub-table (each subtable is of fixed length) */        Offset += sizeof (ACPI_WHEA_HEADER);        SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, SubTable,                        sizeof (ACPI_WHEA_HEADER));    }}/******************************************************************************* * * FUNCTION:    AcpiDmDumpErst * * PARAMETERS:  Table               - A ERST table * * RETURN:      None * * DESCRIPTION: Format the contents of a ERST. This table type consists *              of an open-ended number of subtables. * ******************************************************************************/voidAcpiDmDumpErst (    ACPI_TABLE_HEADER       *Table){    ACPI_STATUS             Status;    ACPI_WHEA_HEADER        *SubTable;    UINT32                  Length = Table->Length;    UINT32                  Offset = sizeof (ACPI_TABLE_ERST);    /* Main table */    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoErst);    if (ACPI_FAILURE (Status))    {        return;    }    /* Sub-tables */    SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset);    while (Offset < Table->Length)    {        AcpiOsPrintf ("\n");        Status = AcpiDmDumpTable (Length, Offset, SubTable,                    0, AcpiDmTableInfoEinj0);        if (ACPI_FAILURE (Status))        {            return;        }        /* Point to next sub-table (each subtable is of fixed length) */        Offset += sizeof (ACPI_WHEA_HEADER);        SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, SubTable,                        sizeof (ACPI_WHEA_HEADER));    }}/******************************************************************************* * * FUNCTION:    AcpiDmDumpHest

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -