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

📄 nsobject.c

📁 acpi tools for linux include acpiexec and acpixtract
💻 C
📖 第 1 页 / 共 2 页
字号:
 * * RETURN:      None. * * DESCRIPTION: Detach/delete an object associated with a namespace node. *              if the object is an allocated object, it is freed. *              Otherwise, the field is simply cleared. * ******************************************************************************/voidAcpiNsDetachObject (    ACPI_NAMESPACE_NODE     *Node){    ACPI_OPERAND_OBJECT     *ObjDesc;    ACPI_FUNCTION_TRACE (NsDetachObject);    ObjDesc = Node->Object;    if (!ObjDesc ||        (ACPI_GET_OBJECT_TYPE (ObjDesc) == ACPI_TYPE_LOCAL_DATA))    {        return_VOID;    }    /* Clear the entry in all cases */    Node->Object = NULL;    if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_OPERAND)    {        Node->Object = ObjDesc->Common.NextObject;        if (Node->Object &&           (ACPI_GET_OBJECT_TYPE (Node->Object) != ACPI_TYPE_LOCAL_DATA))        {            Node->Object = Node->Object->Common.NextObject;        }    }    /* Reset the node type to untyped */    Node->Type = ACPI_TYPE_ANY;    ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Node %p [%4.4s] Object %p\n",        Node, AcpiUtGetNodeName (Node), ObjDesc));    /* Remove one reference on the object (and all subobjects) */    AcpiUtRemoveReference (ObjDesc);    return_VOID;}/******************************************************************************* * * FUNCTION:    AcpiNsGetAttachedObject * * PARAMETERS:  Node             - Namespace node * * RETURN:      Current value of the object field from the Node whose *              handle is passed * * DESCRIPTION: Obtain the object attached to a namespace node. * ******************************************************************************/ACPI_OPERAND_OBJECT *AcpiNsGetAttachedObject (    ACPI_NAMESPACE_NODE     *Node){    ACPI_FUNCTION_TRACE_PTR (NsGetAttachedObject, Node);    if (!Node)    {        ACPI_WARNING ((AE_INFO, "Null Node ptr"));        return_PTR (NULL);    }    if (!Node->Object ||            ((ACPI_GET_DESCRIPTOR_TYPE (Node->Object) != ACPI_DESC_TYPE_OPERAND) &&             (ACPI_GET_DESCRIPTOR_TYPE (Node->Object) != ACPI_DESC_TYPE_NAMED))  ||        (ACPI_GET_OBJECT_TYPE (Node->Object) == ACPI_TYPE_LOCAL_DATA))    {        return_PTR (NULL);    }    return_PTR (Node->Object);}/******************************************************************************* * * FUNCTION:    AcpiNsGetSecondaryObject * * PARAMETERS:  Node             - Namespace node * * RETURN:      Current value of the object field from the Node whose *              handle is passed. * * DESCRIPTION: Obtain a secondary object associated with a namespace node. * ******************************************************************************/ACPI_OPERAND_OBJECT *AcpiNsGetSecondaryObject (    ACPI_OPERAND_OBJECT     *ObjDesc){    ACPI_FUNCTION_TRACE_PTR (NsGetSecondaryObject, ObjDesc);    if ((!ObjDesc)                                                ||        (ACPI_GET_OBJECT_TYPE (ObjDesc) == ACPI_TYPE_LOCAL_DATA)  ||        (!ObjDesc->Common.NextObject)                             ||        (ACPI_GET_OBJECT_TYPE (ObjDesc->Common.NextObject) == ACPI_TYPE_LOCAL_DATA))    {        return_PTR (NULL);    }    return_PTR (ObjDesc->Common.NextObject);}/******************************************************************************* * * FUNCTION:    AcpiNsAttachData * * PARAMETERS:  Node            - Namespace node *              Handler         - Handler to be associated with the data *              Data            - Data to be attached * * RETURN:      Status * * DESCRIPTION: Low-level attach data.  Create and attach a Data object. * ******************************************************************************/ACPI_STATUSAcpiNsAttachData (    ACPI_NAMESPACE_NODE     *Node,    ACPI_OBJECT_HANDLER     Handler,    void                    *Data){    ACPI_OPERAND_OBJECT     *PrevObjDesc;    ACPI_OPERAND_OBJECT     *ObjDesc;    ACPI_OPERAND_OBJECT     *DataDesc;    /* We only allow one attachment per handler */    PrevObjDesc = NULL;    ObjDesc = Node->Object;    while (ObjDesc)    {        if ((ACPI_GET_OBJECT_TYPE (ObjDesc) == ACPI_TYPE_LOCAL_DATA) &&            (ObjDesc->Data.Handler == Handler))        {            return (AE_ALREADY_EXISTS);        }        PrevObjDesc = ObjDesc;        ObjDesc = ObjDesc->Common.NextObject;    }    /* Create an internal object for the data */    DataDesc = AcpiUtCreateInternalObject (ACPI_TYPE_LOCAL_DATA);    if (!DataDesc)    {        return (AE_NO_MEMORY);    }    DataDesc->Data.Handler = Handler;    DataDesc->Data.Pointer = Data;    /* Install the data object */    if (PrevObjDesc)    {        PrevObjDesc->Common.NextObject = DataDesc;    }    else    {        Node->Object = DataDesc;    }    return (AE_OK);}/******************************************************************************* * * FUNCTION:    AcpiNsDetachData * * PARAMETERS:  Node            - Namespace node *              Handler         - Handler associated with the data * * RETURN:      Status * * DESCRIPTION: Low-level detach data.  Delete the data node, but the caller *              is responsible for the actual data. * ******************************************************************************/ACPI_STATUSAcpiNsDetachData (    ACPI_NAMESPACE_NODE     *Node,    ACPI_OBJECT_HANDLER     Handler){    ACPI_OPERAND_OBJECT     *ObjDesc;    ACPI_OPERAND_OBJECT     *PrevObjDesc;    PrevObjDesc = NULL;    ObjDesc = Node->Object;    while (ObjDesc)    {        if ((ACPI_GET_OBJECT_TYPE (ObjDesc) == ACPI_TYPE_LOCAL_DATA) &&            (ObjDesc->Data.Handler == Handler))        {            if (PrevObjDesc)            {                PrevObjDesc->Common.NextObject = ObjDesc->Common.NextObject;            }            else            {                Node->Object = ObjDesc->Common.NextObject;            }            AcpiUtRemoveReference (ObjDesc);            return (AE_OK);        }        PrevObjDesc = ObjDesc;        ObjDesc = ObjDesc->Common.NextObject;    }    return (AE_NOT_FOUND);}/******************************************************************************* * * FUNCTION:    AcpiNsGetAttachedData * * PARAMETERS:  Node            - Namespace node *              Handler         - Handler associated with the data *              Data            - Where the data is returned * * RETURN:      Status * * DESCRIPTION: Low level interface to obtain data previously associated with *              a namespace node. * ******************************************************************************/ACPI_STATUSAcpiNsGetAttachedData (    ACPI_NAMESPACE_NODE     *Node,    ACPI_OBJECT_HANDLER     Handler,    void                    **Data){    ACPI_OPERAND_OBJECT     *ObjDesc;    ObjDesc = Node->Object;    while (ObjDesc)    {        if ((ACPI_GET_OBJECT_TYPE (ObjDesc) == ACPI_TYPE_LOCAL_DATA) &&            (ObjDesc->Data.Handler == Handler))        {            *Data = ObjDesc->Data.Pointer;            return (AE_OK);        }        ObjDesc = ObjDesc->Common.NextObject;    }    return (AE_NOT_FOUND);}

⌨️ 快捷键说明

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