📄 dbdisply.c
字号:
if (CountRemaining) { NumRemainingOperators++; } NumOperators++; break; } Op = AcpiPsGetDepthNext (StartOp, Op); } AcpiOsPrintf ( "Method contains: %X AML Opcodes - %X Operators, %X Operands\n", NumOps, NumOperators, NumOperands); AcpiOsPrintf ( "Remaining to execute: %X AML Opcodes - %X Operators, %X Operands\n", NumRemainingOps, NumRemainingOperators, NumRemainingOperands);}/******************************************************************************* * * FUNCTION: AcpiDbDisplayLocals * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Display all locals for the currently running control method * ******************************************************************************/voidAcpiDbDisplayLocals ( void){ ACPI_WALK_STATE *WalkState; WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList); if (!WalkState) { AcpiOsPrintf ("There is no method currently executing\n"); return; } AcpiDmDisplayLocals (WalkState);}/******************************************************************************* * * FUNCTION: AcpiDbDisplayArguments * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Display all arguments for the currently running control method * ******************************************************************************/voidAcpiDbDisplayArguments ( void){ ACPI_WALK_STATE *WalkState; WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList); if (!WalkState) { AcpiOsPrintf ("There is no method currently executing\n"); return; } AcpiDmDisplayArguments (WalkState);}/******************************************************************************* * * FUNCTION: AcpiDbDisplayResults * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Display current contents of a method result stack * ******************************************************************************/voidAcpiDbDisplayResults ( void){ UINT32 i; ACPI_WALK_STATE *WalkState; ACPI_OPERAND_OBJECT *ObjDesc; UINT32 ResultCount = 0; ACPI_NAMESPACE_NODE *Node; ACPI_GENERIC_STATE *Frame; UINT32 Index; /* Index onto current frame */ WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList); if (!WalkState) { AcpiOsPrintf ("There is no method currently executing\n"); return; } ObjDesc = WalkState->MethodDesc; Node = WalkState->MethodNode; if (WalkState->Results) { ResultCount = WalkState->ResultCount; } AcpiOsPrintf ("Method [%4.4s] has %X stacked result objects\n", AcpiUtGetNodeName (Node), ResultCount); /* From the top element of result stack */ Frame = WalkState->Results; Index = (ResultCount - 1) % ACPI_RESULTS_FRAME_OBJ_NUM; for (i = 0; i < ResultCount; i++) { ObjDesc = Frame->Results.ObjDesc[Index]; AcpiOsPrintf ("Result%d: ", i); AcpiDmDisplayInternalObject (ObjDesc, WalkState); if (Index == 0) { Frame = Frame->Results.Next; Index = ACPI_RESULTS_FRAME_OBJ_NUM; } Index--; }}/******************************************************************************* * * FUNCTION: AcpiDbDisplayCallingTree * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Display current calling tree of nested control methods * ******************************************************************************/voidAcpiDbDisplayCallingTree ( void){ ACPI_WALK_STATE *WalkState; ACPI_NAMESPACE_NODE *Node; WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList); if (!WalkState) { AcpiOsPrintf ("There is no method currently executing\n"); return; } Node = WalkState->MethodNode; AcpiOsPrintf ("Current Control Method Call Tree\n"); while (WalkState) { Node = WalkState->MethodNode; AcpiOsPrintf (" [%4.4s]\n", AcpiUtGetNodeName (Node)); WalkState = WalkState->Next; }}/******************************************************************************* * * FUNCTION: AcpiDbDisplayObjectType * * PARAMETERS: ObjectArg - User entered NS node handle * * RETURN: None * * DESCRIPTION: Display type of an arbitrary NS node * ******************************************************************************/voidAcpiDbDisplayObjectType ( char *ObjectArg){ ACPI_HANDLE Handle; ACPI_BUFFER Buffer; ACPI_DEVICE_INFO *Info; ACPI_STATUS Status; ACPI_NATIVE_UINT i; Handle = ACPI_TO_POINTER (ACPI_STRTOUL (ObjectArg, NULL, 16)); Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; Status = AcpiGetObjectInfo (Handle, &Buffer); if (ACPI_SUCCESS (Status)) { Info = Buffer.Pointer; AcpiOsPrintf ( "S1D-%2.2X S2D-%2.2X S3D-%2.2X S4D-%2.2X HID: %s, ADR: %8.8X%8.8X, Status %8.8X\n", Info->HighestDstates[0], Info->HighestDstates[1], Info->HighestDstates[2], Info->HighestDstates[3], Info->HardwareId.Value, ACPI_FORMAT_UINT64 (Info->Address), Info->CurrentStatus); if (Info->Valid & ACPI_VALID_CID) { for (i = 0; i < Info->CompatibilityId.Count; i++) { AcpiOsPrintf ("CID #%d: %s\n", (UINT32) i, Info->CompatibilityId.Id[i].Value); } } ACPI_FREE (Info); } else { AcpiOsPrintf ("%s\n", AcpiFormatException (Status)); }}/******************************************************************************* * * FUNCTION: AcpiDbDisplayResultObject * * PARAMETERS: ObjDesc - Object to be displayed * WalkState - Current walk state * * RETURN: None * * DESCRIPTION: Display the result of an AML opcode * * Note: Curently only displays the result object if we are single stepping. * However, this output may be useful in other contexts and could be enabled * to do so if needed. * ******************************************************************************/voidAcpiDbDisplayResultObject ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_WALK_STATE *WalkState){ /* Only display if single stepping */ if (!AcpiGbl_CmSingleStep) { return; } AcpiOsPrintf ("ResultObj: "); AcpiDmDisplayInternalObject (ObjDesc, WalkState); AcpiOsPrintf ("\n");}/******************************************************************************* * * FUNCTION: AcpiDbDisplayArgumentObject * * PARAMETERS: ObjDesc - Object to be displayed * WalkState - Current walk state * * RETURN: None * * DESCRIPTION: Display the result of an AML opcode * ******************************************************************************/voidAcpiDbDisplayArgumentObject ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_WALK_STATE *WalkState){ if (!AcpiGbl_CmSingleStep) { return; } AcpiOsPrintf ("ArgObj: "); AcpiDmDisplayInternalObject (ObjDesc, WalkState);}/******************************************************************************* * * FUNCTION: AcpiDbDisplayGpes * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Display the current GPE structures * ******************************************************************************/voidAcpiDbDisplayGpes ( void){ ACPI_GPE_BLOCK_INFO *GpeBlock; ACPI_GPE_XRUPT_INFO *GpeXruptInfo; ACPI_GPE_EVENT_INFO *GpeEventInfo; ACPI_GPE_REGISTER_INFO *GpeRegisterInfo; UINT32 GpeIndex; UINT32 Block = 0; UINT32 i; UINT32 j; char Buffer[80]; ACPI_BUFFER RetBuf; ACPI_STATUS Status; RetBuf.Length = sizeof (Buffer); RetBuf.Pointer = Buffer; Block = 0; /* Walk the GPE lists */ GpeXruptInfo = AcpiGbl_GpeXruptListHead; while (GpeXruptInfo) { GpeBlock = GpeXruptInfo->GpeBlockListHead; while (GpeBlock) { Status = AcpiGetName (GpeBlock->Node, ACPI_FULL_PATHNAME, &RetBuf); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not convert name to pathname\n"); } AcpiOsPrintf ("\nBlock %d - Info %p DeviceNode %p [%s]\n", Block, GpeBlock, GpeBlock->Node, Buffer); AcpiOsPrintf (" Registers: %u (%u GPEs)\n", GpeBlock->RegisterCount, ACPI_MUL_8 (GpeBlock->RegisterCount)); AcpiOsPrintf (" GPE range: 0x%X to 0x%X\n", GpeBlock->BlockBaseNumber, GpeBlock->BlockBaseNumber + (GpeBlock->RegisterCount * 8) -1); AcpiOsPrintf ( " RegisterInfo: %p Status %8.8X%8.8X Enable %8.8X%8.8X\n", GpeBlock->RegisterInfo, ACPI_FORMAT_UINT64 (GpeBlock->RegisterInfo->StatusAddress.Address), ACPI_FORMAT_UINT64 (GpeBlock->RegisterInfo->EnableAddress.Address)); AcpiOsPrintf (" EventInfo: %p\n", GpeBlock->EventInfo); /* Examine each GPE Register within the block */ for (i = 0; i < GpeBlock->RegisterCount; i++) { GpeRegisterInfo = &GpeBlock->RegisterInfo[i]; AcpiOsPrintf ( " Reg %u: WakeEnable %2.2X, RunEnable %2.2X Status %8.8X%8.8X Enable %8.8X%8.8X\n", i, GpeRegisterInfo->EnableForWake, GpeRegisterInfo->EnableForRun, ACPI_FORMAT_UINT64 (GpeRegisterInfo->StatusAddress.Address), ACPI_FORMAT_UINT64 (GpeRegisterInfo->EnableAddress.Address)); /* Now look at the individual GPEs in this byte register */ for (j = 0; j < ACPI_GPE_REGISTER_WIDTH; j++) { GpeIndex = (i * ACPI_GPE_REGISTER_WIDTH) + j; GpeEventInfo = &GpeBlock->EventInfo[GpeIndex]; if (!(GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK)) { /* This GPE is not used (no method or handler) */ continue; } AcpiOsPrintf ( " GPE %.3X: %p Flags %2.2X: ", GpeBlock->BlockBaseNumber + GpeIndex, GpeEventInfo, GpeEventInfo->Flags); if (GpeEventInfo->Flags & ACPI_GPE_LEVEL_TRIGGERED) { AcpiOsPrintf ("Level, "); } else { AcpiOsPrintf ("Edge, "); } switch (GpeEventInfo->Flags & ACPI_GPE_TYPE_MASK) { case ACPI_GPE_TYPE_WAKE: AcpiOsPrintf ("WakeOnly: "); break; case ACPI_GPE_TYPE_RUNTIME: AcpiOsPrintf (" RunOnly: "); break; case ACPI_GPE_TYPE_WAKE_RUN: AcpiOsPrintf (" WakeRun: "); break; default: AcpiOsPrintf (" NotUsed: "); break; } if (GpeEventInfo->Flags & ACPI_GPE_WAKE_ENABLED) { AcpiOsPrintf ("[Wake 1 "); } else { AcpiOsPrintf ("[Wake 0 "); } if (GpeEventInfo->Flags & ACPI_GPE_RUN_ENABLED) { AcpiOsPrintf ("Run 1], "); } else { AcpiOsPrintf ("Run 0], "); } switch (GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK) { case ACPI_GPE_DISPATCH_NOT_USED: AcpiOsPrintf ("NotUsed"); break; case ACPI_GPE_DISPATCH_HANDLER: AcpiOsPrintf ("Handler"); break; case ACPI_GPE_DISPATCH_METHOD: AcpiOsPrintf ("Method"); break; default: AcpiOsPrintf ("UNKNOWN: %X", GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK); break; } AcpiOsPrintf ("\n"); } } Block++; GpeBlock = GpeBlock->Next; } GpeXruptInfo = GpeXruptInfo->Next; }}#endif /* ACPI_DEBUGGER */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -