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

📄 rsxface.c

📁 acpi tools for linux include acpiexec and acpixtract
💻 C
📖 第 1 页 / 共 2 页
字号:
    Status = AcpiRsValidateParameters (DeviceHandle, RetBuffer, &Node);    if (ACPI_FAILURE (Status))    {        return_ACPI_STATUS (Status);    }    Status = AcpiRsGetPrsMethodData (Node, RetBuffer);    return_ACPI_STATUS (Status);}ACPI_EXPORT_SYMBOL (AcpiGetPossibleResources)/******************************************************************************* * * FUNCTION:    AcpiSetCurrentResources * * PARAMETERS:  DeviceHandle    - Handle to the device object for the *                                device we are setting resources *              InBuffer        - Pointer to a buffer containing the *                                resources to be set for the device * * RETURN:      Status * * DESCRIPTION: This function is called to set the current resources for a *              specific device. The caller must first acquire a handle for *              the desired device. The resource data is passed to the routine *              the buffer pointed to by the InBuffer variable. * ******************************************************************************/ACPI_STATUSAcpiSetCurrentResources (    ACPI_HANDLE             DeviceHandle,    ACPI_BUFFER             *InBuffer){    ACPI_STATUS             Status;    ACPI_NAMESPACE_NODE     *Node;    ACPI_FUNCTION_TRACE (AcpiSetCurrentResources);    /* Validate the buffer, don't allow zero length */    if ((!InBuffer) ||        (!InBuffer->Pointer) ||        (!InBuffer->Length))    {        return_ACPI_STATUS (AE_BAD_PARAMETER);    }    /* Validate parameters then dispatch to internal routine */    Status = AcpiRsValidateParameters (DeviceHandle, InBuffer, &Node);    if (ACPI_FAILURE (Status))    {        return_ACPI_STATUS (Status);    }    Status = AcpiRsSetSrsMethodData (Node, InBuffer);    return_ACPI_STATUS (Status);}ACPI_EXPORT_SYMBOL (AcpiSetCurrentResources)/****************************************************************************** * * FUNCTION:    AcpiResourceToAddress64 * * PARAMETERS:  Resource        - Pointer to a resource *              Out             - Pointer to the users's return buffer *                                (a struct acpi_resource_address64) * * RETURN:      Status * * DESCRIPTION: If the resource is an address16, address32, or address64, *              copy it to the address64 return buffer. This saves the *              caller from having to duplicate code for different-sized *              addresses. * ******************************************************************************/ACPI_STATUSAcpiResourceToAddress64 (    ACPI_RESOURCE               *Resource,    ACPI_RESOURCE_ADDRESS64     *Out){    ACPI_RESOURCE_ADDRESS16     *Address16;    ACPI_RESOURCE_ADDRESS32     *Address32;    if (!Resource || !Out)    {        return (AE_BAD_PARAMETER);    }    /* Convert 16 or 32 address descriptor to 64 */    switch (Resource->Type)    {    case ACPI_RESOURCE_TYPE_ADDRESS16:        Address16 = (ACPI_RESOURCE_ADDRESS16 *) &Resource->Data;        ACPI_COPY_ADDRESS (Out, Address16);        break;    case ACPI_RESOURCE_TYPE_ADDRESS32:        Address32 = (ACPI_RESOURCE_ADDRESS32 *) &Resource->Data;        ACPI_COPY_ADDRESS (Out, Address32);        break;    case ACPI_RESOURCE_TYPE_ADDRESS64:        /* Simple copy for 64 bit source */        ACPI_MEMCPY (Out, &Resource->Data, sizeof (ACPI_RESOURCE_ADDRESS64));        break;    default:        return (AE_BAD_PARAMETER);    }    return (AE_OK);}ACPI_EXPORT_SYMBOL (AcpiResourceToAddress64)/******************************************************************************* * * FUNCTION:    AcpiGetVendorResource * * PARAMETERS:  DeviceHandle    - Handle for the parent device object *              Name            - Method name for the parent resource *                                (METHOD_NAME__CRS or METHOD_NAME__PRS) *              Uuid            - Pointer to the UUID to be matched. *                                includes both subtype and 16-byte UUID *              RetBuffer       - Where the vendor resource is returned * * RETURN:      Status * * DESCRIPTION: Walk a resource template for the specified evice to find a *              vendor-defined resource that matches the supplied UUID and *              UUID subtype. Returns a ACPI_RESOURCE of type Vendor. * ******************************************************************************/ACPI_STATUSAcpiGetVendorResource (    ACPI_HANDLE             DeviceHandle,    char                    *Name,    ACPI_VENDOR_UUID        *Uuid,    ACPI_BUFFER             *RetBuffer){    ACPI_VENDOR_WALK_INFO   Info;    ACPI_STATUS             Status;    /* Other parameters are validated by AcpiWalkResources */    if (!Uuid || !RetBuffer)    {        return (AE_BAD_PARAMETER);    }    Info.Uuid = Uuid;    Info.Buffer = RetBuffer;    Info.Status = AE_NOT_EXIST;    /* Walk the _CRS or _PRS resource list for this device */    Status = AcpiWalkResources (DeviceHandle, Name, AcpiRsMatchVendorResource,                &Info);    if (ACPI_FAILURE (Status))    {        return (Status);    }    return (Info.Status);}ACPI_EXPORT_SYMBOL (AcpiGetVendorResource)/******************************************************************************* * * FUNCTION:    AcpiRsMatchVendorResource * * PARAMETERS:  ACPI_WALK_RESOURCE_CALLBACK * * RETURN:      Status * * DESCRIPTION: Match a vendor resource via the ACPI 3.0 UUID * ******************************************************************************/static ACPI_STATUSAcpiRsMatchVendorResource (    ACPI_RESOURCE           *Resource,    void                    *Context){    ACPI_VENDOR_WALK_INFO       *Info = Context;    ACPI_RESOURCE_VENDOR_TYPED  *Vendor;    ACPI_BUFFER                 *Buffer;    ACPI_STATUS                 Status;    /* Ignore all descriptors except Vendor */    if (Resource->Type != ACPI_RESOURCE_TYPE_VENDOR)    {        return (AE_OK);    }    Vendor = &Resource->Data.VendorTyped;    /*     * For a valid match, these conditions must hold:     *     * 1) Length of descriptor data must be at least as long as a UUID struct     * 2) The UUID subtypes must match     * 3) The UUID data must match     */    if ((Vendor->ByteLength < (ACPI_UUID_LENGTH + 1)) ||        (Vendor->UuidSubtype != Info->Uuid->Subtype)  ||        (ACPI_MEMCMP (Vendor->Uuid, Info->Uuid->Data, ACPI_UUID_LENGTH)))    {        return (AE_OK);    }    /* Validate/Allocate/Clear caller buffer */    Buffer = Info->Buffer;    Status = AcpiUtInitializeBuffer (Buffer, Resource->Length);    if (ACPI_FAILURE (Status))    {        return (Status);    }    /* Found the correct resource, copy and return it */    ACPI_MEMCPY (Buffer->Pointer, Resource, Resource->Length);    Buffer->Length = Resource->Length;    /* Found the desired descriptor, terminate resource walk */    Info->Status = AE_OK;    return (AE_CTRL_TERMINATE);}/******************************************************************************* * * FUNCTION:    AcpiWalkResources * * PARAMETERS:  DeviceHandle    - Handle to the device object for the *                                device we are querying *              Name            - Method name of the resources we want *                                (METHOD_NAME__CRS or METHOD_NAME__PRS) *              UserFunction    - Called for each resource *              Context         - Passed to UserFunction * * RETURN:      Status * * DESCRIPTION: Retrieves the current or possible resource list for the *              specified device. The UserFunction is called once for *              each resource in the list. * ******************************************************************************/ACPI_STATUSAcpiWalkResources (    ACPI_HANDLE                 DeviceHandle,    char                        *Name,    ACPI_WALK_RESOURCE_CALLBACK UserFunction,    void                        *Context){    ACPI_STATUS                 Status;    ACPI_BUFFER                 Buffer;    ACPI_RESOURCE               *Resource;    ACPI_RESOURCE               *ResourceEnd;    ACPI_FUNCTION_TRACE (AcpiWalkResources);    /* Parameter validation */    if (!DeviceHandle || !UserFunction || !Name ||        (!ACPI_COMPARE_NAME (Name, METHOD_NAME__CRS) &&         !ACPI_COMPARE_NAME (Name, METHOD_NAME__PRS)))    {        return_ACPI_STATUS (AE_BAD_PARAMETER);    }    /* Get the _CRS or _PRS resource list */    Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;    Status = AcpiRsGetMethodData (DeviceHandle, Name, &Buffer);    if (ACPI_FAILURE (Status))    {        return_ACPI_STATUS (Status);    }    /* Buffer now contains the resource list */    Resource = ACPI_CAST_PTR (ACPI_RESOURCE, Buffer.Pointer);    ResourceEnd = ACPI_ADD_PTR (ACPI_RESOURCE, Buffer.Pointer, Buffer.Length);    /* Walk the resource list until the EndTag is found (or buffer end) */    while (Resource < ResourceEnd)    {        /* Sanity check the resource */        if (Resource->Type > ACPI_RESOURCE_TYPE_MAX)        {            Status = AE_AML_INVALID_RESOURCE_TYPE;            break;        }        /* Invoke the user function, abort on any error returned */        Status = UserFunction (Resource, Context);        if (ACPI_FAILURE (Status))        {            if (Status == AE_CTRL_TERMINATE)            {                /* This is an OK termination by the user function */                Status = AE_OK;            }            break;        }        /* EndTag indicates end-of-list */        if (Resource->Type == ACPI_RESOURCE_TYPE_END_TAG)        {            break;        }        /* Get the next resource descriptor */        Resource = ACPI_ADD_PTR (ACPI_RESOURCE, Resource, Resource->Length);    }    ACPI_FREE (Buffer.Pointer);    return_ACPI_STATUS (Status);}ACPI_EXPORT_SYMBOL (AcpiWalkResources)

⌨️ 快捷键说明

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