📄 exdump.c
字号:
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 + -