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

📄 exdump.c

📁 acpi tools for linux include acpiexec and acpixtract
💻 C
📖 第 1 页 / 共 3 页
字号:
static voidAcpiExDumpObject (    ACPI_OPERAND_OBJECT     *ObjDesc,    ACPI_EXDUMP_INFO        *Info){    UINT8                   *Target;    char                    *Name;    UINT8                   Count;    if (!Info)    {        AcpiOsPrintf (            "ExDumpObject: Display not implemented for object type %s\n",            AcpiUtGetObjectTypeName (ObjDesc));        return;    }    /* First table entry must contain the table length (# of table entries) */    Count = Info->Offset;    while (Count)    {        Target = ACPI_ADD_PTR (UINT8, ObjDesc, Info->Offset);        Name = Info->Name;        switch (Info->Opcode)        {        case ACPI_EXD_INIT:            break;        case ACPI_EXD_TYPE:            AcpiExOutString  ("Type", AcpiUtGetObjectTypeName (ObjDesc));            break;        case ACPI_EXD_UINT8:            AcpiOsPrintf ("%20s : %2.2X\n", Name, *Target);            break;        case ACPI_EXD_UINT16:            AcpiOsPrintf ("%20s : %4.4X\n", Name, ACPI_GET16 (Target));            break;        case ACPI_EXD_UINT32:            AcpiOsPrintf ("%20s : %8.8X\n", Name, ACPI_GET32 (Target));            break;        case ACPI_EXD_UINT64:            AcpiOsPrintf ("%20s : %8.8X%8.8X\n", "Value",                    ACPI_FORMAT_UINT64 (ACPI_GET64 (Target)));            break;        case ACPI_EXD_POINTER:        case ACPI_EXD_ADDRESS:            AcpiExOutPointer (Name, *ACPI_CAST_PTR (void *, Target));            break;        case ACPI_EXD_STRING:            AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX);            AcpiOsPrintf ("\n");            break;        case ACPI_EXD_BUFFER:            ACPI_DUMP_BUFFER (ObjDesc->Buffer.Pointer, ObjDesc->Buffer.Length);            break;        case ACPI_EXD_PACKAGE:            /* Dump the package contents */            AcpiOsPrintf ("\nPackage Contents:\n");            AcpiExDumpPackageObj (ObjDesc, 0, 0);            break;        case ACPI_EXD_FIELD:            AcpiExDumpObject (ObjDesc, AcpiExDumpFieldCommon);            break;        case ACPI_EXD_REFERENCE:            AcpiExOutString ("Opcode",                (AcpiPsGetOpcodeInfo (ObjDesc->Reference.Opcode))->Name);            AcpiExDumpReferenceObj (ObjDesc);            break;        default:            AcpiOsPrintf ("**** Invalid table opcode [%X] ****\n", Info->Opcode);            return;        }        Info++;        Count--;    }}/******************************************************************************* * * FUNCTION:    AcpiExDumpOperand * * PARAMETERS:  *ObjDesc        - Pointer to entry to be dumped *              Depth           - Current nesting depth * * RETURN:      None * * DESCRIPTION: Dump an operand object * ******************************************************************************/voidAcpiExDumpOperand (    ACPI_OPERAND_OBJECT     *ObjDesc,    UINT32                  Depth){    UINT32                  Length;    UINT32                  Index;    ACPI_FUNCTION_NAME (ExDumpOperand)    if (!((ACPI_LV_EXEC & AcpiDbgLevel) && (_COMPONENT & AcpiDbgLayer)))    {        return;    }    if (!ObjDesc)    {        /* This could be a null element of a package */        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Null Object Descriptor\n"));        return;    }    if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED)    {        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p Namespace Node: ", ObjDesc));        ACPI_DUMP_ENTRY (ObjDesc, ACPI_LV_EXEC);        return;    }    if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND)    {        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,            "%p is not a node or operand object: [%s]\n",            ObjDesc, AcpiUtGetDescriptorName (ObjDesc)));        ACPI_DUMP_BUFFER (ObjDesc, sizeof (ACPI_OPERAND_OBJECT));        return;    }    /* ObjDesc is a valid object */    if (Depth > 0)    {        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%*s[%u] %p ",            Depth, " ", Depth, ObjDesc));    }    else    {        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p ", ObjDesc));    }    /* Decode object type */    switch (ACPI_GET_OBJECT_TYPE (ObjDesc))    {    case ACPI_TYPE_LOCAL_REFERENCE:        switch (ObjDesc->Reference.Opcode)        {        case AML_DEBUG_OP:            AcpiOsPrintf ("Reference: Debug\n");            break;        case AML_INDEX_OP:            AcpiOsPrintf ("Reference: Index %p\n",                ObjDesc->Reference.Object);            break;        case AML_LOAD_OP:            AcpiOsPrintf ("Reference: [DdbHandle] TableIndex %p\n",                ObjDesc->Reference.Object);            break;        case AML_REF_OF_OP:            AcpiOsPrintf ("Reference: (RefOf) %p [%s]\n",                ObjDesc->Reference.Object,                AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *) ObjDesc->Reference.Object)->Common.Type));            break;        case AML_ARG_OP:            AcpiOsPrintf ("Reference: Arg%d",                ObjDesc->Reference.Offset);            if (ACPI_GET_OBJECT_TYPE (ObjDesc) == ACPI_TYPE_INTEGER)            {                /* Value is an Integer */                AcpiOsPrintf (" value is [%8.8X%8.8x]",                    ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));            }            AcpiOsPrintf ("\n");            break;        case AML_LOCAL_OP:            AcpiOsPrintf ("Reference: Local%d",                ObjDesc->Reference.Offset);            if (ACPI_GET_OBJECT_TYPE (ObjDesc) == ACPI_TYPE_INTEGER)            {                /* Value is an Integer */                AcpiOsPrintf (" value is [%8.8X%8.8x]",                    ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));            }            AcpiOsPrintf ("\n");            break;        case AML_INT_NAMEPATH_OP:            AcpiOsPrintf ("Reference: Namepath %X [%4.4s]\n",                ObjDesc->Reference.Node->Name.Integer,                ObjDesc->Reference.Node->Name.Ascii);            break;        default:            /* Unknown opcode */            AcpiOsPrintf ("Unknown Reference opcode=%X\n",                ObjDesc->Reference.Opcode);            break;        }        break;    case ACPI_TYPE_BUFFER:        AcpiOsPrintf ("Buffer len %X @ %p\n",            ObjDesc->Buffer.Length, ObjDesc->Buffer.Pointer);        Length = ObjDesc->Buffer.Length;        if (Length > 64)        {            Length = 64;        }        /* Debug only -- dump the buffer contents */        if (ObjDesc->Buffer.Pointer)        {            AcpiOsPrintf ("Buffer Contents: ");            for (Index = 0; Index < Length; Index++)            {                AcpiOsPrintf (" %02x", ObjDesc->Buffer.Pointer[Index]);            }            AcpiOsPrintf ("\n");        }        break;    case ACPI_TYPE_INTEGER:        AcpiOsPrintf ("Integer %8.8X%8.8X\n",            ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));        break;    case ACPI_TYPE_PACKAGE:        AcpiOsPrintf ("Package [Len %X] ElementArray %p\n",            ObjDesc->Package.Count, ObjDesc->Package.Elements);        /*         * If elements exist, package element pointer is valid,         * and debug_level exceeds 1, dump package's elements.         */        if (ObjDesc->Package.Count &&            ObjDesc->Package.Elements &&            AcpiDbgLevel > 1)        {            for (Index = 0; Index < ObjDesc->Package.Count; Index++)            {                AcpiExDumpOperand (ObjDesc->Package.Elements[Index], Depth+1);            }        }        break;    case ACPI_TYPE_REGION:        AcpiOsPrintf ("Region %s (%X)",            AcpiUtGetRegionName (ObjDesc->Region.SpaceId),            ObjDesc->Region.SpaceId);        /*         * If the address and length have not been evaluated,         * don't print them.         */        if (!(ObjDesc->Region.Flags & AOPOBJ_DATA_VALID))        {            AcpiOsPrintf ("\n");        }        else        {            AcpiOsPrintf (" base %8.8X%8.8X Length %X\n",                ACPI_FORMAT_NATIVE_UINT (ObjDesc->Region.Address),                ObjDesc->Region.Length);        }        break;    case ACPI_TYPE_STRING:        AcpiOsPrintf ("String length %X @ %p ",            ObjDesc->String.Length,            ObjDesc->String.Pointer);        AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX);        AcpiOsPrintf ("\n");        break;    case ACPI_TYPE_LOCAL_BANK_FIELD:        AcpiOsPrintf ("BankField\n");        break;    case ACPI_TYPE_LOCAL_REGION_FIELD:        AcpiOsPrintf (            "RegionField: Bits=%X AccWidth=%X Lock=%X Update=%X at byte=%X bit=%X of below:\n",            ObjDesc->Field.BitLength,            ObjDesc->Field.AccessByteWidth,            ObjDesc->Field.FieldFlags & AML_FIELD_LOCK_RULE_MASK,            ObjDesc->Field.FieldFlags & AML_FIELD_UPDATE_RULE_MASK,            ObjDesc->Field.BaseByteOffset,            ObjDesc->Field.StartFieldBitOffset);        AcpiExDumpOperand (ObjDesc->Field.RegionObj, Depth+1);        break;    case ACPI_TYPE_LOCAL_INDEX_FIELD:        AcpiOsPrintf ("IndexField\n");        break;    case ACPI_TYPE_BUFFER_FIELD:        AcpiOsPrintf (            "BufferField: %X bits at byte %X bit %X of\n",            ObjDesc->BufferField.BitLength,            ObjDesc->BufferField.BaseByteOffset,            ObjDesc->BufferField.StartFieldBitOffset);        if (!ObjDesc->BufferField.BufferObj)        {            ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "*NULL*\n"));        }        else if (ACPI_GET_OBJECT_TYPE (ObjDesc->BufferField.BufferObj) !=                    ACPI_TYPE_BUFFER)        {            AcpiOsPrintf ("*not a Buffer*\n");        }        else        {            AcpiExDumpOperand (ObjDesc->BufferField.BufferObj, Depth+1);        }        break;    case ACPI_TYPE_EVENT:        AcpiOsPrintf ("Event\n");        break;    case ACPI_TYPE_METHOD:        AcpiOsPrintf ("Method(%X) @ %p:%X\n",            ObjDesc->Method.ParamCount,            ObjDesc->Method.AmlStart,            ObjDesc->Method.AmlLength);        break;

⌨️ 快捷键说明

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