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

📄 dbcmds.c

📁 acpi tools for linux include acpiexec and acpixtract
💻 C
📖 第 1 页 / 共 4 页
字号:
    {        AcpiOsPrintf ("AcpiGetCurrentResources failed: %s\n",            AcpiFormatException (Status));        goto Exit1;    }    /* Convert internal resource list to external AML resource template */    Status = AcpiRsCreateAmlResources (ResourceObj.Pointer, &NewAml);    if (ACPI_FAILURE (Status))    {        AcpiOsPrintf ("AcpiRsCreateAmlResources failed: %s\n",            AcpiFormatException (Status));        goto Exit2;    }    /* Compare original AML to the newly created AML resource list */    OriginalAml = ReturnObj.Pointer;    AcpiDmCompareAmlResources (        OriginalAml->Buffer.Pointer, (ACPI_RSDESC_SIZE) OriginalAml->Buffer.Length,        NewAml.Pointer, (ACPI_RSDESC_SIZE) NewAml.Length);    /* Cleanup and exit */    ACPI_FREE (NewAml.Pointer);Exit2:    ACPI_FREE (ResourceObj.Pointer);Exit1:    ACPI_FREE (ReturnObj.Pointer);    return (Status);}/******************************************************************************* * * FUNCTION:    AcpiDbDisplayResources * * PARAMETERS:  ObjectArg       - String with hex value of the object * * RETURN:      None * * DESCRIPTION: Display the resource objects associated with a device. * ******************************************************************************/voidAcpiDbDisplayResources (    char                    *ObjectArg){    ACPI_NAMESPACE_NODE     *Node;    ACPI_STATUS             Status;    ACPI_BUFFER             ReturnObj;    AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT);    AcpiDbgLevel |= ACPI_LV_RESOURCES;    /* Convert string to object pointer */    Node = AcpiDbConvertToNode (ObjectArg);    if (!Node)    {        return;    }    /* Prepare for a return object of arbitrary size */    ReturnObj.Pointer = AcpiGbl_DbBuffer;    ReturnObj.Length  = ACPI_DEBUG_BUFFER_SIZE;    /* _PRT */    AcpiOsPrintf ("Evaluating _PRT\n");    /* Check if _PRT exists */    Status = AcpiEvaluateObject (Node, METHOD_NAME__PRT, NULL, &ReturnObj);    if (ACPI_FAILURE (Status))    {        AcpiOsPrintf ("Could not obtain _PRT: %s\n",            AcpiFormatException (Status));        goto GetCrs;    }    ReturnObj.Pointer = AcpiGbl_DbBuffer;    ReturnObj.Length  = ACPI_DEBUG_BUFFER_SIZE;    Status = AcpiGetIrqRoutingTable (Node, &ReturnObj);    if (ACPI_FAILURE (Status))    {        AcpiOsPrintf ("GetIrqRoutingTable failed: %s\n",            AcpiFormatException (Status));        goto GetCrs;    }    AcpiRsDumpIrqList (ACPI_CAST_PTR (UINT8, AcpiGbl_DbBuffer));    /* _CRS */GetCrs:    AcpiOsPrintf ("Evaluating _CRS\n");    ReturnObj.Pointer = AcpiGbl_DbBuffer;    ReturnObj.Length  = ACPI_DEBUG_BUFFER_SIZE;    /* Check if _CRS exists */    Status = AcpiEvaluateObject (Node, METHOD_NAME__CRS, NULL, &ReturnObj);    if (ACPI_FAILURE (Status))    {        AcpiOsPrintf ("Could not obtain _CRS: %s\n",            AcpiFormatException (Status));        goto GetPrs;    }    /* Get the _CRS resource list */    ReturnObj.Pointer = AcpiGbl_DbBuffer;    ReturnObj.Length  = ACPI_DEBUG_BUFFER_SIZE;    Status = AcpiGetCurrentResources (Node, &ReturnObj);    if (ACPI_FAILURE (Status))    {        AcpiOsPrintf ("AcpiGetCurrentResources failed: %s\n",            AcpiFormatException (Status));        goto GetPrs;    }    /* Dump the _CRS resource list */    AcpiRsDumpResourceList (ACPI_CAST_PTR (ACPI_RESOURCE,        ReturnObj.Pointer));    /*     * Perform comparison of original AML to newly created AML. This tests both     * the AML->Resource conversion and the Resource->Aml conversion.     */    Status = AcpiDmTestResourceConversion (Node, METHOD_NAME__CRS);    /* Execute _SRS with the resource list */    Status = AcpiSetCurrentResources (Node, &ReturnObj);    if (ACPI_FAILURE (Status))    {        AcpiOsPrintf ("AcpiSetCurrentResources failed: %s\n",            AcpiFormatException (Status));        goto GetPrs;    }    /* _PRS */GetPrs:    AcpiOsPrintf ("Evaluating _PRS\n");    ReturnObj.Pointer = AcpiGbl_DbBuffer;    ReturnObj.Length  = ACPI_DEBUG_BUFFER_SIZE;    /* Check if _PRS exists */    Status = AcpiEvaluateObject (Node, METHOD_NAME__PRS, NULL, &ReturnObj);    if (ACPI_FAILURE (Status))    {        AcpiOsPrintf ("Could not obtain _PRS: %s\n",            AcpiFormatException (Status));        goto Cleanup;    }    ReturnObj.Pointer = AcpiGbl_DbBuffer;    ReturnObj.Length  = ACPI_DEBUG_BUFFER_SIZE;    Status = AcpiGetPossibleResources (Node, &ReturnObj);    if (ACPI_FAILURE (Status))    {        AcpiOsPrintf ("AcpiGetPossibleResources failed: %s\n",            AcpiFormatException (Status));        goto Cleanup;    }    AcpiRsDumpResourceList (ACPI_CAST_PTR (ACPI_RESOURCE, AcpiGbl_DbBuffer));Cleanup:    AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT);    return;}/******************************************************************************* * * FUNCTION:    AcpiDbIntegrityWalk * * PARAMETERS:  Callback from WalkNamespace * * RETURN:      Status * * DESCRIPTION: Examine one NS node for valid values. * ******************************************************************************/static ACPI_STATUSAcpiDbIntegrityWalk (    ACPI_HANDLE             ObjHandle,    UINT32                  NestingLevel,    void                    *Context,    void                    **ReturnValue){    ACPI_INTEGRITY_INFO     *Info = (ACPI_INTEGRITY_INFO *) Context;    ACPI_NAMESPACE_NODE     *Node = (ACPI_NAMESPACE_NODE *) ObjHandle;    ACPI_OPERAND_OBJECT     *Object;    BOOLEAN                 Alias = TRUE;    Info->Nodes++;    /* Verify the NS node, and dereference aliases */    while (Alias)    {        if (ACPI_GET_DESCRIPTOR_TYPE (Node) != ACPI_DESC_TYPE_NAMED)        {            AcpiOsPrintf ("Invalid Descriptor Type for Node %p [%s] - is %2.2X should be %2.2X\n",                Node, AcpiUtGetDescriptorName (Node), ACPI_GET_DESCRIPTOR_TYPE (Node),                ACPI_DESC_TYPE_NAMED);            return (AE_OK);        }        if ((Node->Type == ACPI_TYPE_LOCAL_ALIAS)  ||            (Node->Type == ACPI_TYPE_LOCAL_METHOD_ALIAS))        {            Node = (ACPI_NAMESPACE_NODE *) Node->Object;        }        else        {            Alias = FALSE;        }    }    if (Node->Type > ACPI_TYPE_LOCAL_MAX)    {        AcpiOsPrintf ("Invalid Object Type for Node %p, Type = %X\n",            Node, Node->Type);        return (AE_OK);    }    if (!AcpiUtValidAcpiName (Node->Name.Integer))    {        AcpiOsPrintf ("Invalid AcpiName for Node %p\n", Node);        return (AE_OK);    }    Object = AcpiNsGetAttachedObject (Node);    if (Object)    {        Info->Objects++;        if (ACPI_GET_DESCRIPTOR_TYPE (Object) != ACPI_DESC_TYPE_OPERAND)        {            AcpiOsPrintf ("Invalid Descriptor Type for Object %p [%s]\n",                Object, AcpiUtGetDescriptorName (Object));        }    }    return (AE_OK);}/******************************************************************************* * * FUNCTION:    AcpiDbCheckIntegrity * * PARAMETERS:  None * * RETURN:      None * * DESCRIPTION: Check entire namespace for data structure integrity * ******************************************************************************/voidAcpiDbCheckIntegrity (    void){    ACPI_INTEGRITY_INFO     Info = {0,0};    /* Search all nodes in namespace */    (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,                    AcpiDbIntegrityWalk, (void *) &Info, NULL);    AcpiOsPrintf ("Verified %d namespace nodes with %d Objects\n",        Info.Nodes, Info.Objects);}/******************************************************************************* * * FUNCTION:    AcpiDbGenerateGpe * * PARAMETERS:  GpeArg          - Raw GPE number, ascii string *              BlockArg        - GPE block number, ascii string *                                0 or 1 for FADT GPE blocks * * RETURN:      None * * DESCRIPTION: Generate a GPE * ******************************************************************************/voidAcpiDbGenerateGpe (    char                    *GpeArg,    char                    *BlockArg){    UINT32                  BlockNumber;    UINT32                  GpeNumber;    ACPI_GPE_EVENT_INFO     *GpeEventInfo;    GpeNumber   = ACPI_STRTOUL (GpeArg, NULL, 0);    BlockNumber = ACPI_STRTOUL (BlockArg, NULL, 0);    GpeEventInfo = AcpiEvGetGpeEventInfo (ACPI_TO_POINTER (BlockNumber),        GpeNumber);    if (!GpeEventInfo)    {        AcpiOsPrintf ("Invalid GPE\n");        return;    }    (void) AcpiEvGpeDispatch (GpeEventInfo, GpeNumber);}/******************************************************************************* * * FUNCTION:    AcpiDbBusWalk * * PARAMETERS:  Callback from WalkNamespace * * RETURN:      Status * * DESCRIPTION: Display info about device objects that have a corresponding *              _PRT method. * ******************************************************************************/static ACPI_STATUSAcpiDbBusWalk (    ACPI_HANDLE             ObjHandle,    UINT32                  NestingLevel,    void                    *Context,    void                    **ReturnValue){    ACPI_NAMESPACE_NODE     *Node = (ACPI_NAMESPACE_NODE *) ObjHandle;    ACPI_STATUS             Status;    ACPI_BUFFER             Buffer;    ACPI_INTEGER            ADR;    ACPI_DEVICE_ID          Id;    ACPI_COMPATIBLE_ID_LIST *Cid;    ACPI_NAMESPACE_NODE     *TempNode;    /* Exit if there is no _PRT under this device */    Status = AcpiGetHandle (Node, METHOD_NAME__PRT,                ACPI_CAST_PTR (ACPI_HANDLE, &TempNode));    if (ACPI_FAILURE (Status))    {        return (AE_OK);    }    /* Get the full path to this device object */    Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;    Status = AcpiNsHandleToPathname (ObjHandle, &Buffer);    if (ACPI_FAILURE (Status))    {        AcpiOsPrintf ("Could Not get pathname for object %p\n", ObjHandle);        return (AE_OK);    }    /* Display the full path */    AcpiOsPrintf ("%-32s", (char *) Buffer.Pointer);    ACPI_FREE (Buffer.Pointer);    /* _PRT info */    AcpiOsPrintf ("_PRT=%p", TempNode);    /* Get the _ADR value */    Status = AcpiUtEvaluateNumericObject (METHOD_NAME__ADR, Node, &ADR);    if (ACPI_FAILURE (Status))    {        AcpiOsPrintf (" No _ADR      ");    }    else    {        AcpiOsPrintf (" _ADR=%8.8X", (UINT32) ADR);    }    /* Get the _HID if present */    Status = AcpiUtExecute_HID (Node, &Id);    if (ACPI_SUCCESS (Status))    {        AcpiOsPrintf (" _HID=%s", Id.Value);    }    else    {        AcpiOsPrintf ("             ");    }    /* Get the _UID if present */    Status = AcpiUtExecute_UID (Node, &Id);    if (ACPI_SUCCESS (Status))    {        AcpiOsPrintf (" _UID=%s", Id.Value);    }    /* Get the _CID if present */    Status = AcpiUtExecute_CID (Node, &Cid);    if (ACPI_SUCCESS (Status))    {        AcpiOsPrintf (" _CID=%s", Cid->Id[0].Value);        ACPI_FREE (Cid);    }    AcpiOsPrintf ("\n");    return (AE_OK);}/******************************************************************************* * * FUNCTION:    AcpiDbGetBusInfo * * PARAMETERS:  None * * RETURN:      None * * DESCRIPTION: Display info about system busses. * ******************************************************************************/voidAcpiDbGetBusInfo (    void){    /* Search all nodes in namespace */    (void) AcpiWalkNamespace (ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,                    AcpiDbBusWalk, NULL, NULL);}#endif /* ACPI_DEBUGGER */

⌨️ 快捷键说明

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