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

📄 dbcmds.c

📁 acpi tools for linux include acpiexec and acpixtract
💻 C
📖 第 1 页 / 共 4 页
字号:
    switch (Type)    {    case 'A':        /* Set a method argument */        if (Index > ACPI_METHOD_MAX_ARG)        {            AcpiOsPrintf ("Arg%d - Invalid argument name\n", Index);            goto Cleanup;        }        Status = AcpiDsStoreObjectToLocal (AML_ARG_OP, Index, ObjDesc,                    WalkState);        if (ACPI_FAILURE (Status))        {            goto Cleanup;        }        ObjDesc = WalkState->Arguments[Index].Object;        AcpiOsPrintf ("Arg%d: ", Index);        AcpiDmDisplayInternalObject (ObjDesc, WalkState);        break;    case 'L':        /* Set a method local */        if (Index > ACPI_METHOD_MAX_LOCAL)        {            AcpiOsPrintf ("Local%d - Invalid local variable name\n", Index);            goto Cleanup;        }        Status = AcpiDsStoreObjectToLocal (AML_LOCAL_OP, Index, ObjDesc,                    WalkState);        if (ACPI_FAILURE (Status))        {            goto Cleanup;        }        ObjDesc = WalkState->LocalVariables[Index].Object;        AcpiOsPrintf ("Local%d: ", Index);        AcpiDmDisplayInternalObject (ObjDesc, WalkState);        break;    default:        break;    }Cleanup:    AcpiUtRemoveReference (ObjDesc);}/******************************************************************************* * * FUNCTION:    AcpiDbWalkForSpecificObjects * * PARAMETERS:  Callback from WalkNamespace * * RETURN:      Status * * DESCRIPTION: Display short info about objects in the namespace * ******************************************************************************/static ACPI_STATUSAcpiDbWalkForSpecificObjects (    ACPI_HANDLE             ObjHandle,    UINT32                  NestingLevel,    void                    *Context,    void                    **ReturnValue){    ACPI_WALK_INFO          *Info = (ACPI_WALK_INFO *) Context;    ACPI_BUFFER             Buffer;    ACPI_STATUS             Status;    Info->Count++;    /* Get and display the full pathname to this 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);    }    AcpiOsPrintf ("%32s", (char *) Buffer.Pointer);    ACPI_FREE (Buffer.Pointer);    /* Dump short info about the object */    (void) AcpiNsDumpOneObject (ObjHandle, NestingLevel, Info, NULL);    return (AE_OK);}/******************************************************************************* * * FUNCTION:    AcpiDbDisplayObjects * * PARAMETERS:  ObjTypeArg          - Type of object to display *              DisplayCountArg     - Max depth to display * * RETURN:      None * * DESCRIPTION: Display objects in the namespace of the requested type * ******************************************************************************/ACPI_STATUSAcpiDbDisplayObjects (    char                    *ObjTypeArg,    char                    *DisplayCountArg){    ACPI_WALK_INFO          Info;    ACPI_OBJECT_TYPE        Type;    /* Get the object type */    Type = AcpiDbMatchArgument (ObjTypeArg, AcpiDbObjectTypes);    if (Type == ACPI_TYPE_NOT_FOUND)    {        AcpiOsPrintf ("Invalid or unsupported argument\n");        return (AE_OK);    }    AcpiDbSetOutputDestination (ACPI_DB_DUPLICATE_OUTPUT);    AcpiOsPrintf (        "Objects of type [%s] defined in the current ACPI Namespace:\n",        AcpiUtGetTypeName (Type));    AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT);    Info.Count = 0;    Info.OwnerId = ACPI_OWNER_ID_MAX;    Info.DebugLevel = ACPI_UINT32_MAX;    Info.DisplayType = ACPI_DISPLAY_SUMMARY | ACPI_DISPLAY_SHORT;    /* Walk the namespace from the root */    (void) AcpiWalkNamespace (Type, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,                AcpiDbWalkForSpecificObjects, (void *) &Info, NULL);    AcpiOsPrintf (        "\nFound %u objects of type [%s] in the current ACPI Namespace\n",        Info.Count, AcpiUtGetTypeName (Type));    AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT);    return (AE_OK);}/******************************************************************************* * * FUNCTION:    AcpiDbWalkAndMatchName * * PARAMETERS:  Callback from WalkNamespace * * RETURN:      Status * * DESCRIPTION: Find a particular name/names within the namespace.  Wildcards *              are supported -- '?' matches any character. * ******************************************************************************/static ACPI_STATUSAcpiDbWalkAndMatchName (    ACPI_HANDLE             ObjHandle,    UINT32                  NestingLevel,    void                    *Context,    void                    **ReturnValue){    ACPI_STATUS             Status;    char                    *RequestedName = (char *) Context;    UINT32                  i;    ACPI_BUFFER             Buffer;    ACPI_WALK_INFO          Info;    /* Check for a name match */    for (i = 0; i < 4; i++)    {        /* Wildcard support */        if ((RequestedName[i] != '?') &&            (RequestedName[i] != ((ACPI_NAMESPACE_NODE *) ObjHandle)->Name.Ascii[i]))        {            /* No match, just exit */            return (AE_OK);        }    }    /* Get the full pathname to this 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);    }    else    {        Info.OwnerId = ACPI_OWNER_ID_MAX;        Info.DebugLevel = ACPI_UINT32_MAX;        Info.DisplayType = ACPI_DISPLAY_SUMMARY | ACPI_DISPLAY_SHORT;        AcpiOsPrintf ("%32s", (char *) Buffer.Pointer);        (void) AcpiNsDumpOneObject (ObjHandle, NestingLevel, &Info, NULL);        ACPI_FREE (Buffer.Pointer);    }    return (AE_OK);}/******************************************************************************* * * FUNCTION:    AcpiDbFindNameInNamespace * * PARAMETERS:  NameArg         - The 4-character ACPI name to find. *                                wildcards are supported. * * RETURN:      None * * DESCRIPTION: Search the namespace for a given name (with wildcards) * ******************************************************************************/ACPI_STATUSAcpiDbFindNameInNamespace (    char                    *NameArg){    if (ACPI_STRLEN (NameArg) > 4)    {        AcpiOsPrintf ("Name must be no longer than 4 characters\n");        return (AE_OK);    }    /* Walk the namespace from the root */    AcpiUtStrupr (NameArg);    (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,                        AcpiDbWalkAndMatchName, NameArg, NULL);    AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT);    return (AE_OK);}/******************************************************************************* * * FUNCTION:    AcpiDbSetScope * * PARAMETERS:  Name                - New scope path * * RETURN:      Status * * DESCRIPTION: Set the "current scope" as maintained by this utility. *              The scope is used as a prefix to ACPI paths. * ******************************************************************************/voidAcpiDbSetScope (    char                    *Name){    ACPI_STATUS             Status;    ACPI_NAMESPACE_NODE     *Node;    if (!Name || Name[0] == 0)    {        AcpiOsPrintf ("Current scope: %s\n", AcpiGbl_DbScopeBuf);        return;    }    AcpiDbPrepNamestring (Name);    if (Name[0] == '\\')    {        /* Validate new scope from the root */        Status = AcpiNsGetNode (AcpiGbl_RootNode, Name, ACPI_NS_NO_UPSEARCH,                    &Node);        if (ACPI_FAILURE (Status))        {            goto ErrorExit;        }        ACPI_STRCPY (AcpiGbl_DbScopeBuf, Name);        ACPI_STRCAT (AcpiGbl_DbScopeBuf, "\\");    }    else    {        /* Validate new scope relative to old scope */        Status = AcpiNsGetNode (AcpiGbl_DbScopeNode, Name, ACPI_NS_NO_UPSEARCH,                    &Node);        if (ACPI_FAILURE (Status))        {            goto ErrorExit;        }        ACPI_STRCAT (AcpiGbl_DbScopeBuf, Name);        ACPI_STRCAT (AcpiGbl_DbScopeBuf, "\\");    }    AcpiGbl_DbScopeNode = Node;    AcpiOsPrintf ("New scope: %s\n", AcpiGbl_DbScopeBuf);    return;ErrorExit:    AcpiOsPrintf ("Could not attach scope: %s, %s\n",        Name, AcpiFormatException (Status));}/******************************************************************************* * * FUNCTION:    AcpiDmCompareAmlResources * * PARAMETERS:  Aml1Buffer          - Contains first resource list *              Aml1BufferLength    - Length of first resource list *              Aml2Buffer          - Contains second resource list *              Aml2BufferLength    - Length of second resource list * * RETURN:      None * * DESCRIPTION: Compare two AML resource lists, descriptor by descriptor (in *              order to isolate a miscompare to an individual resource) * ******************************************************************************/static voidAcpiDmCompareAmlResources (    UINT8                   *Aml1Buffer,    ACPI_RSDESC_SIZE        Aml1BufferLength,    UINT8                   *Aml2Buffer,    ACPI_RSDESC_SIZE        Aml2BufferLength){    UINT8                   *Aml1;    UINT8                   *Aml2;    ACPI_RSDESC_SIZE        Aml1Length;    ACPI_RSDESC_SIZE        Aml2Length;    ACPI_RSDESC_SIZE        Offset = 0;    UINT8                   ResourceType;    UINT32                  Count = 0;    /* Compare overall buffer sizes (may be different due to size rounding) */    if (Aml1BufferLength != Aml2BufferLength)    {        AcpiOsPrintf (            "**** Buffer length mismatch in converted AML: original %X new %X ****\n",            Aml1BufferLength, Aml2BufferLength);    }    Aml1 = Aml1Buffer;    Aml2 = Aml2Buffer;    /* Walk the descriptor lists, comparing each descriptor */    while (Aml1 < (Aml1Buffer + Aml1BufferLength))    {        /* Get the lengths of each descriptor */        Aml1Length = AcpiUtGetDescriptorLength (Aml1);        Aml2Length = AcpiUtGetDescriptorLength (Aml2);        ResourceType = AcpiUtGetResourceType (Aml1);        /* Check for descriptor length match */        if (Aml1Length != Aml2Length)        {            AcpiOsPrintf (                "**** Length mismatch in descriptor [%.2X] type %2.2X, Offset %8.8X L1 %X L2 %X ****\n",                Count, ResourceType, Offset, Aml1Length, Aml2Length);        }        /* Check for descriptor byte match */        else if (ACPI_MEMCMP (Aml1, Aml2, Aml1Length))        {            AcpiOsPrintf (                "**** Data mismatch in descriptor [%.2X] type %2.2X, Offset %8.8X ****\n",                Count, ResourceType, Offset);        }        /* Exit on EndTag descriptor */        if (ResourceType == ACPI_RESOURCE_NAME_END_TAG)        {            return;        }        /* Point to next descriptor in each buffer */        Count++;        Offset += Aml1Length;        Aml1 += Aml1Length;        Aml2 += Aml2Length;    }}/******************************************************************************* * * FUNCTION:    AcpiDmTestResourceConversion * * PARAMETERS:  Node            - Parent device node *              Name            - resource method name (_CRS) * * RETURN:      Status * * DESCRIPTION: Compare the original AML with a conversion of the AML to *              internal resource list, then back to AML. * ******************************************************************************/static ACPI_STATUSAcpiDmTestResourceConversion (    ACPI_NAMESPACE_NODE     *Node,    char                    *Name){    ACPI_STATUS             Status;    ACPI_BUFFER             ReturnObj;    ACPI_BUFFER             ResourceObj;    ACPI_BUFFER             NewAml;    ACPI_OBJECT             *OriginalAml;    AcpiOsPrintf ("Resource Conversion Comparison:\n");    NewAml.Length = ACPI_ALLOCATE_LOCAL_BUFFER;    ReturnObj.Length = ACPI_ALLOCATE_LOCAL_BUFFER;    ResourceObj.Length = ACPI_ALLOCATE_LOCAL_BUFFER;    /* Get the original _CRS AML resource template */    Status = AcpiEvaluateObject (Node, Name, NULL, &ReturnObj);    if (ACPI_FAILURE (Status))    {        AcpiOsPrintf ("Could not obtain %s: %s\n",            Name, AcpiFormatException (Status));        return (Status);    }    /* Get the AML resource template, converted to internal resource structs */    Status = AcpiGetCurrentResources (Node, &ResourceObj);    if (ACPI_FAILURE (Status))

⌨️ 快捷键说明

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