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

📄 dmtable.c

📁 acpi tools for linux include acpiexec and acpixtract
💻 C
📖 第 1 页 / 共 2 页
字号:
    }    else    {        AcpiOsPrintf ("%42s : ",            Name);    }}voidAcpiDmLineHeader2 (    UINT32                  Offset,    UINT32                  ByteLength,    char                    *Name,    UINT32                  Value){    if (ByteLength)    {        AcpiOsPrintf ("[%3.3Xh %3.3d% 3d] %24s % 3d : ",            Offset, Offset, ByteLength, Name, Value);    }    else    {        AcpiOsPrintf ("[%3.3Xh %3.3d   ] %24s % 3d : ",            Offset, Offset, Name, Value);    }}/******************************************************************************* * * FUNCTION:    AcpiDmDumpTable * * PARAMETERS:  TableLength         - Length of the entire ACPI table *              TableOffset         - Starting offset within the table for this *                                    sub-descriptor (0 if main table) *              Table               - The ACPI table *              SubtableLength      - Length of this sub-descriptor *              Info                - Info table for this ACPI table * * RETURN:      None * * DESCRIPTION: Display ACPI table contents by walking the Info table. * ******************************************************************************/ACPI_STATUSAcpiDmDumpTable (    UINT32                  TableLength,    UINT32                  TableOffset,    void                    *Table,    UINT32                  SubtableLength,    ACPI_DMTABLE_INFO       *Info){    UINT8                   *Target;    UINT32                  CurrentOffset;    UINT32                  ByteLength;    UINT8                   Temp8;    UINT16                  Temp16;    ACPI_DMTABLE_DATA       *TableData;    BOOLEAN                 LastOutputBlankLine = FALSE;    if (!Info)    {        AcpiOsPrintf ("Display not implemented\n");        return (AE_NOT_IMPLEMENTED);    }    /* Walk entire Info table; Null name terminates */    for (; Info->Name; Info++)    {        /*         * Target points to the field within the ACPI Table. CurrentOffset is         * the offset of the field from the start of the main table.         */        Target = ACPI_ADD_PTR (UINT8, Table, Info->Offset);        CurrentOffset = TableOffset + Info->Offset;        /* Check for beyond EOT or beyond subtable end */        if ((CurrentOffset >= TableLength) ||            (SubtableLength && (Info->Offset >= SubtableLength)))        {            AcpiOsPrintf ("**** ACPI table terminates in the middle of a data structure!\n");            return (AE_BAD_DATA);        }        /* Generate the byte length for this field */        switch (Info->Opcode)        {        case ACPI_DMT_UINT8:        case ACPI_DMT_CHKSUM:        case ACPI_DMT_SPACEID:        case ACPI_DMT_MADT:        case ACPI_DMT_SRAT:        case ACPI_DMT_ASF:        case ACPI_DMT_HESTNTYP:            ByteLength = 1;            break;        case ACPI_DMT_UINT16:        case ACPI_DMT_DMAR:        case ACPI_DMT_HEST:            ByteLength = 2;            break;        case ACPI_DMT_UINT24:            ByteLength = 3;            break;        case ACPI_DMT_UINT32:        case ACPI_DMT_NAME4:        case ACPI_DMT_SIG:            ByteLength = 4;            break;        case ACPI_DMT_NAME6:            ByteLength = 6;            break;        case ACPI_DMT_UINT56:            ByteLength = 7;            break;        case ACPI_DMT_UINT64:        case ACPI_DMT_NAME8:            ByteLength = 8;            break;        case ACPI_DMT_STRING:            ByteLength = ACPI_STRLEN (ACPI_CAST_PTR (char, Target)) + 1;            break;        case ACPI_DMT_GAS:            if (!LastOutputBlankLine)            {                AcpiOsPrintf ("\n");                LastOutputBlankLine = TRUE;            }            ByteLength = sizeof (ACPI_GENERIC_ADDRESS);            break;        case ACPI_DMT_HESTNTFY:            if (!LastOutputBlankLine)            {                AcpiOsPrintf ("\n");                LastOutputBlankLine = TRUE;            }            ByteLength = sizeof (ACPI_HEST_NOTIFY);            break;        default:            ByteLength = 0;            break;        }        if (CurrentOffset + ByteLength > TableLength)        {            AcpiOsPrintf ("**** ACPI table terminates in the middle of a data structure!\n");            return (AE_BAD_DATA);        }        /* Start a new line and decode the opcode */        AcpiDmLineHeader (CurrentOffset, ByteLength, Info->Name);        switch (Info->Opcode)        {        /* Single-bit Flag fields. Note: Opcode is the bit position */        case ACPI_DMT_FLAG0:        case ACPI_DMT_FLAG1:        case ACPI_DMT_FLAG2:        case ACPI_DMT_FLAG3:        case ACPI_DMT_FLAG4:        case ACPI_DMT_FLAG5:        case ACPI_DMT_FLAG6:        case ACPI_DMT_FLAG7:            AcpiOsPrintf ("%1.1X\n", (*Target >> Info->Opcode) & 0x01);            break;        /* 2-bit Flag fields */        case ACPI_DMT_FLAGS0:            AcpiOsPrintf ("%1.1X\n", *Target & 0x03);            break;        case ACPI_DMT_FLAGS2:            AcpiOsPrintf ("%1.1X\n", (*Target >> 2) & 0x03);            break;        /* Standard Data Types */        case ACPI_DMT_UINT8:            AcpiOsPrintf ("%2.2X\n", *Target);            break;        case ACPI_DMT_UINT16:            AcpiOsPrintf ("%4.4X\n", ACPI_GET16 (Target));            break;        case ACPI_DMT_UINT24:            AcpiOsPrintf ("%2.2X%2.2X%2.2X\n",                *Target, *(Target + 1), *(Target + 2));            break;        case ACPI_DMT_UINT32:            AcpiOsPrintf ("%8.8X\n", ACPI_GET32 (Target));            break;        case ACPI_DMT_UINT56:            for (Temp8 = 0; Temp8 < 7; Temp8++)            {                AcpiOsPrintf ("%2.2X", Target[Temp8]);            }            AcpiOsPrintf ("\n");            break;        case ACPI_DMT_UINT64:            AcpiOsPrintf ("%8.8X%8.8X\n",                ACPI_FORMAT_UINT64 (ACPI_GET64 (Target)));            break;        case ACPI_DMT_STRING:            AcpiOsPrintf ("%s\n", ACPI_CAST_PTR (char, Target));            break;        /* Fixed length ASCII name fields */        case ACPI_DMT_SIG:            AcpiDmCheckAscii (Target, 4);            AcpiOsPrintf ("\"%4.4s\"    ", Target);            TableData = AcpiDmGetTableData (ACPI_CAST_PTR (char, Target));            if (TableData)            {                AcpiOsPrintf ("/* %s */", TableData->Name);            }            AcpiOsPrintf ("\n");            break;        case ACPI_DMT_NAME4:            AcpiDmCheckAscii (Target, 4);            AcpiOsPrintf ("\"%4.4s\"\n", Target);            break;        case ACPI_DMT_NAME6:            AcpiDmCheckAscii (Target, 6);            AcpiOsPrintf ("\"%6.6s\"\n", Target);            break;        case ACPI_DMT_NAME8:            AcpiDmCheckAscii (Target, 8);            AcpiOsPrintf ("\"%8.8s\"\n", Target);            break;        /* Special Data Types */        case ACPI_DMT_CHKSUM:            /* Checksum, display and validate */            AcpiOsPrintf ("%2.2X", *Target);            Temp8 = AcpiTbGenerateChecksum (Table);            if (Temp8 != ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Checksum)            {                AcpiOsPrintf (                    "     /* Incorrect checksum, should be %2.2X */", Temp8);            }            AcpiOsPrintf ("\n");            break;        case ACPI_DMT_SPACEID:            /* Address Space ID */            AcpiOsPrintf ("%2.2X (%s)\n", *Target, AcpiUtGetRegionName (*Target));            break;        case ACPI_DMT_GAS:            /* Generic Address Structure */            AcpiOsPrintf ("<Generic Address Structure>\n");            AcpiDmDumpTable (ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Length,                CurrentOffset, Target, 0, AcpiDmTableInfoGas);            AcpiOsPrintf ("\n");            LastOutputBlankLine = TRUE;            break;        case ACPI_DMT_ASF:            /* ASF subtable types */            Temp16 = (UINT16) ((*Target) & 0x7F);  /* Top bit can be zero or one */            if (Temp16 > ACPI_ASF_TYPE_RESERVED)            {                Temp16 = ACPI_ASF_TYPE_RESERVED;            }            AcpiOsPrintf ("%2.2X <%s>\n", *Target, AcpiDmAsfSubnames[Temp16]);            break;        case ACPI_DMT_DMAR:            /* DMAR subtable types */            Temp16 = *Target;            if (Temp16 > ACPI_DMAR_TYPE_RESERVED)            {                Temp16 = ACPI_DMAR_TYPE_RESERVED;            }            AcpiOsPrintf ("%4.4X <%s>\n", *Target, AcpiDmDmarSubnames[Temp16]);            break;        case ACPI_DMT_HEST:            /* HEST subtable types */            Temp16 = *Target;            if (Temp16 > ACPI_HEST_TYPE_RESERVED)            {                Temp16 = ACPI_HEST_TYPE_RESERVED;            }            AcpiOsPrintf ("%4.4X (%s)\n", *Target, AcpiDmHestSubnames[Temp16]);            break;        case ACPI_DMT_HESTNTFY:            AcpiOsPrintf ("<Hardware Error Notification Structure>\n");            AcpiDmDumpTable (ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Length,                CurrentOffset, Target, 0, AcpiDmTableInfoHestNotify);            AcpiOsPrintf ("\n");            LastOutputBlankLine = TRUE;            break;        case ACPI_DMT_HESTNTYP:            /* HEST Notify types */            Temp8 = *Target;            if (Temp8 > ACPI_HEST_NOTIFY_RESERVED)            {                Temp8 = ACPI_HEST_NOTIFY_RESERVED;            }            AcpiOsPrintf ("%2.2X (%s)\n", *Target, AcpiDmHestNotifySubnames[Temp8]);            break;        case ACPI_DMT_MADT:            /* MADT subtable types */            Temp8 = *Target;            if (Temp8 > ACPI_MADT_TYPE_RESERVED)            {                Temp8 = ACPI_MADT_TYPE_RESERVED;            }            AcpiOsPrintf ("%2.2X <%s>\n", *Target, AcpiDmMadtSubnames[Temp8]);            break;        case ACPI_DMT_SRAT:            /* SRAT subtable types */            Temp8 = *Target;            if (Temp8 > ACPI_SRAT_TYPE_RESERVED)            {                Temp8 = ACPI_SRAT_TYPE_RESERVED;            }            AcpiOsPrintf ("%2.2X <%s>\n", *Target, AcpiDmSratSubnames[Temp8]);            break;        case ACPI_DMT_EXIT:            return (AE_OK);        default:            ACPI_ERROR ((AE_INFO,                "**** Invalid table opcode [%X] ****\n", Info->Opcode));            return (AE_SUPPORT);        }    }    return (AE_OK);}/******************************************************************************* * * FUNCTION:    AcpiDmCheckAscii * * PARAMETERS:  Name                - Ascii string *              Count               - Number of characters to check * * RETURN:      None * * DESCRIPTION: Ensure that the requested number of characters are printable *              Ascii characters. Sets non-printable and null chars to <space>. * ******************************************************************************/static voidAcpiDmCheckAscii (    UINT8                   *Name,    UINT32                  Count){    UINT32                  i;    for (i = 0; i < Count; i++)    {        if (!Name[i] || !isprint (Name[i]))        {            Name[i] = ' ';        }    }}

⌨️ 快捷键说明

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