diff options
| author | cvs2svn <cvs2svn@FreeBSD.org> | 2002-03-16 02:18:14 +0000 | 
|---|---|---|
| committer | cvs2svn <cvs2svn@FreeBSD.org> | 2002-03-16 02:18:14 +0000 | 
| commit | ae6ec58fa6fd01aeec3895b29b50e9ca2a97a1f8 (patch) | |
| tree | 3833c09506a9c0857bb3c9c7350ed42ffcd56198 /sys/contrib/dev/acpica/Subsystem/Namespace/nsalloc.c | |
| parent | 6ff98c910dac5fa724f33a0ddd3ba5d9fde71a9b (diff) | |
Diffstat (limited to 'sys/contrib/dev/acpica/Subsystem/Namespace/nsalloc.c')
| -rw-r--r-- | sys/contrib/dev/acpica/Subsystem/Namespace/nsalloc.c | 728 | 
1 files changed, 0 insertions, 728 deletions
| diff --git a/sys/contrib/dev/acpica/Subsystem/Namespace/nsalloc.c b/sys/contrib/dev/acpica/Subsystem/Namespace/nsalloc.c deleted file mode 100644 index 3f90752149fe..000000000000 --- a/sys/contrib/dev/acpica/Subsystem/Namespace/nsalloc.c +++ /dev/null @@ -1,728 +0,0 @@ -/******************************************************************************* - * - * Module Name: nsalloc - Namespace allocation and deletion utilities - *              $Revision: 45 $ - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999, 2000, 2001, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights.  You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code.  No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision.  In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change.  Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee.  Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution.  In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE.  ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT,  ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES.  INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS.  INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government.  In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#define __NSALLOC_C__ - -#include "acpi.h" -#include "acnamesp.h" -#include "acinterp.h" - - -#define _COMPONENT          NAMESPACE -        MODULE_NAME         ("nsalloc") - - -/******************************************************************************* - * - * FUNCTION:    AcpiNsCreateNode - * - * PARAMETERS: - * - * RETURN:      None - * - * DESCRIPTION: - * - ******************************************************************************/ - -ACPI_NAMESPACE_NODE * -AcpiNsCreateNode ( -    UINT32                  AcpiName) -{ -    ACPI_NAMESPACE_NODE     *Node; - -    FUNCTION_TRACE ("NsCreateNode"); - - -    Node = AcpiCmCallocate (sizeof (ACPI_NAMESPACE_NODE)); -    if (!Node) -    { -        return_PTR (NULL); -    } - -    INCREMENT_NAME_TABLE_METRICS (sizeof (ACPI_NAMESPACE_NODE)); - -    Node->DataType       = ACPI_DESC_TYPE_NAMED; -    Node->Name           = AcpiName; -    Node->ReferenceCount = 1; - -    return_PTR (Node); -} - - -/******************************************************************************* - * - * FUNCTION:    AcpiNsDeleteNode - * - * PARAMETERS: - * - * RETURN:      None - * - * DESCRIPTION: - * - ******************************************************************************/ - -void -AcpiNsDeleteNode ( -    ACPI_NAMESPACE_NODE     *Node) -{ -    ACPI_NAMESPACE_NODE     *ParentNode; -    ACPI_NAMESPACE_NODE     *PrevNode; -    ACPI_NAMESPACE_NODE     *NextNode; - - -    FUNCTION_TRACE_PTR ("NsDeleteNode", Node); - -    ParentNode = AcpiNsGetParentObject (Node); - -    PrevNode = NULL; -    NextNode = ParentNode->Child; - -    while (NextNode != Node) -    { -        PrevNode = NextNode; -        NextNode = PrevNode->Peer; -    } - -    if (PrevNode) -    { -        PrevNode->Peer = NextNode->Peer; -        if (NextNode->Flags & ANOBJ_END_OF_PEER_LIST) -        { -            PrevNode->Flags |= ANOBJ_END_OF_PEER_LIST; -        } -    } -    else -    { -        ParentNode->Child = NextNode->Peer; -    } - - -    DECREMENT_NAME_TABLE_METRICS (sizeof (ACPI_NAMESPACE_NODE)); - -    /* -     * Detach an object if there is one -     */ - -    if (Node->Object) -    { -        AcpiNsDetachObject (Node); -    } - -    AcpiCmFree (Node); - - -    return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION:    AcpiNsInstallNode - * - * PARAMETERS:  WalkState       - Current state of the walk - *              ParentNode      - The parent of the new Node - *              Node        - The new Node to install - *              Type            - ACPI object type of the new Node - * - * RETURN:      None - * - * DESCRIPTION: Initialize a new entry within a namespace table. - * - ******************************************************************************/ - -void -AcpiNsInstallNode ( -    ACPI_WALK_STATE         *WalkState, -    ACPI_NAMESPACE_NODE     *ParentNode,    /* Parent */ -    ACPI_NAMESPACE_NODE     *Node,      /* New Child*/ -    OBJECT_TYPE_INTERNAL    Type) -{ -    UINT16                  OwnerId = TABLE_ID_DSDT; -    ACPI_NAMESPACE_NODE     *ChildNode; - - -    FUNCTION_TRACE ("NsInstallNode"); - - -    /* -     * Get the owner ID from the Walk state -     * The owner ID is used to track table deletion and -     * deletion of objects created by methods -     */ -    if (WalkState) -    { -        OwnerId = WalkState->OwnerId; -    } - - -    /* link the new entry into the parent and existing children */ - -    /* TBD: Could be first, last, or alphabetic */ - -    ChildNode = ParentNode->Child; -    if (!ChildNode) -    { -        ParentNode->Child = Node; -    } - -    else -    { -        while (!(ChildNode->Flags & ANOBJ_END_OF_PEER_LIST)) -        { -            ChildNode = ChildNode->Peer; -        } - -        ChildNode->Peer = Node; - -        /* Clear end-of-list flag */ - -        ChildNode->Flags &= ~ANOBJ_END_OF_PEER_LIST; -    } - -    /* Init the new entry */ - -    Node->OwnerId   = OwnerId; -    Node->Flags     |= ANOBJ_END_OF_PEER_LIST; -    Node->Peer      = ParentNode; - - -    /* -     * If adding a name with unknown type, or having to -     * add the region in order to define fields in it, we -     * have a forward reference. -     */ - -    if ((ACPI_TYPE_ANY == Type) || -        (INTERNAL_TYPE_DEF_FIELD_DEFN == Type) || -        (INTERNAL_TYPE_BANK_FIELD_DEFN == Type)) -    { -        /* -         * We don't want to abort here, however! -         * We will fill in the actual type when the -         * real definition is found later. -         */ - -        DEBUG_PRINT (ACPI_INFO, -            ("NsInstallNode: [%4.4s] is a forward reference\n", -            &Node->Name)); - -    } - -    /* -     * The DefFieldDefn and BankFieldDefn cases are actually -     * looking up the Region in which the field will be defined -     */ - -    if ((INTERNAL_TYPE_DEF_FIELD_DEFN == Type) || -        (INTERNAL_TYPE_BANK_FIELD_DEFN == Type)) -    { -        Type = ACPI_TYPE_REGION; -    } - -    /* -     * Scope, DefAny, and IndexFieldDefn are bogus "types" which do -     * not actually have anything to do with the type of the name -     * being looked up.  Save any other value of Type as the type of -     * the entry. -     */ - -    if ((Type != INTERNAL_TYPE_SCOPE) && -        (Type != INTERNAL_TYPE_DEF_ANY) && -        (Type != INTERNAL_TYPE_INDEX_FIELD_DEFN)) -    { -        Node->Type = (UINT8) Type; -    } - -    DEBUG_PRINT (TRACE_NAMES, -        ("NsInstallNode: %4.4s added to %p at %p\n", -        &Node->Name, ParentNode, Node)); - -    /* -     * Increment the reference count(s) of all parents up to -     * the root! -     */ - -    while ((Node = AcpiNsGetParentObject (Node)) != NULL) -    { -        Node->ReferenceCount++; -    } - -    return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION:    AcpiNsDeleteChildren - * - * PARAMETERS:  ParentNode      - Delete this objects children - * - * RETURN:      None. - * - * DESCRIPTION: Delete all children of the parent object. Deletes a - *              "scope". - * - ******************************************************************************/ - -void -AcpiNsDeleteChildren ( -    ACPI_NAMESPACE_NODE     *ParentNode) -{ -    ACPI_NAMESPACE_NODE     *ChildNode; -    ACPI_NAMESPACE_NODE     *NextNode; -    UINT8                   Flags; - - -    FUNCTION_TRACE_PTR ("AcpiNsDeleteChildren", ParentNode); - - -    if (!ParentNode) -    { -        return_VOID; -    } - -    /* If no children, all done! */ - -    ChildNode = ParentNode->Child; -    if (!ChildNode) -    { -        return_VOID; -    } - -    /* -     * Deallocate all children at this level -     */ -    do -    { -        /* Get the things we need */ - -        NextNode    = ChildNode->Peer; -        Flags       = ChildNode->Flags; - -        /* Grandchildren should have all been deleted already */ - -        if (ChildNode->Child) -        { -            DEBUG_PRINT (ACPI_ERROR, -                ("NsDeleteChildren: Found a grandchild! P=%X C=%X\n", -                ParentNode, ChildNode)); -        } - -        /* Now we can free this child object */ - -        DECREMENT_NAME_TABLE_METRICS (sizeof (ACPI_NAMESPACE_NODE)); - -        DEBUG_PRINT (ACPI_INFO, -            ("AcpiNsDeleteChildren: Object %p, Remaining %X\n", -            ChildNode, AcpiGbl_CurrentNodeCount)); - -        /* -         * Detach an object if there is one -         */ - -        if (ChildNode->Object) -        { -            AcpiNsDetachObject (ChildNode); -        } - -        AcpiCmFree (ChildNode); - -        /* And move on to the next child in the list */ - -        ChildNode = NextNode; - -    } while (!(Flags & ANOBJ_END_OF_PEER_LIST)); - - -    /* Clear the parent's child pointer */ - -    ParentNode->Child = NULL; - -    return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION:    AcpiNsDeleteNamespaceSubtree - * - * PARAMETERS:  None. - * - * RETURN:      None. - * - * DESCRIPTION: Delete a subtree of the namespace.  This includes all objects - *              stored within the subtree.  Scope tables are deleted also - * - ******************************************************************************/ - -ACPI_STATUS -AcpiNsDeleteNamespaceSubtree ( -    ACPI_NAMESPACE_NODE     *ParentNode) -{ -    ACPI_NAMESPACE_NODE     *ChildNode; -    ACPI_OPERAND_OBJECT     *ObjDesc; -    UINT32                  Level; - - -    FUNCTION_TRACE ("NsDeleteNamespaceSubtree"); - - -    if (!ParentNode) -    { -        return_ACPI_STATUS (AE_OK); -    } - - -    ChildNode   = 0; -    Level       = 1; - -    /* -     * Traverse the tree of objects until we bubble back up -     * to where we started. -     */ - -    while (Level > 0) -    { -        /* -         * Get the next typed object in this scope. -         * Null returned if not found -         */ - -        ChildNode = AcpiNsGetNextObject (ACPI_TYPE_ANY, ParentNode, -                                            ChildNode); -        if (ChildNode) -        { -            /* -             * Found an object - delete the object within -             * the Value field -             */ - -            ObjDesc = AcpiNsGetAttachedObject (ChildNode); -            if (ObjDesc) -            { -                AcpiNsDetachObject (ChildNode); -                AcpiCmRemoveReference (ObjDesc); -            } - - -            /* Check if this object has any children */ - -            if (AcpiNsGetNextObject (ACPI_TYPE_ANY, ChildNode, 0)) -            { -                /* -                 * There is at least one child of this object, -                 * visit the object -                 */ - -                Level++; -                ParentNode    = ChildNode; -                ChildNode     = 0; -            } -        } - -        else -        { -            /* -             * No more children in this object. -             * We will move up to the grandparent. -             */ -            Level--; - -            /* -             * Now delete all of the children of this parent -             * all at the same time. -             */ -            AcpiNsDeleteChildren (ParentNode); - -            /* New "last child" is this parent object */ - -            ChildNode = ParentNode; - -            /* Now we can move up the tree to the grandparent */ - -            ParentNode = AcpiNsGetParentObject (ParentNode); -        } -    } - - -    return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION:    AcpiNsRemoveReference - * - * PARAMETERS:  Node           - Named object whose reference count is to be - *                                decremented - * - * RETURN:      None. - * - * DESCRIPTION: Remove a Node reference.  Decrements the reference count - *              of all parent Nodes up to the root.  Any object along - *              the way that reaches zero references is freed. - * - ******************************************************************************/ - -static void -AcpiNsRemoveReference ( -    ACPI_NAMESPACE_NODE     *Node) -{ -    ACPI_NAMESPACE_NODE     *NextNode; - - -    /* -     * Decrement the reference count(s) of this object and all -     * objects up to the root,  Delete anything with zero remaining references. -     */ -    NextNode = Node; -    while (NextNode) -    { -        /* Decrement the reference count on this object*/ - -        NextNode->ReferenceCount--; - -        /* Delete the object if no more references */ - -        if (!NextNode->ReferenceCount) -        { -            /* Delete all children and delete the object */ - -            AcpiNsDeleteChildren (NextNode); -            AcpiNsDeleteNode (NextNode); -        } - -        /* Move up to parent */ - -        NextNode = AcpiNsGetParentObject (NextNode); -    } -} - - -/******************************************************************************* - * - * FUNCTION:    AcpiNsDeleteNamespaceByOwner - * - * PARAMETERS:  None. - * - * RETURN:      None. - * - * DESCRIPTION: Delete entries within the namespace that are owned by a - *              specific ID.  Used to delete entire ACPI tables.  All - *              reference counts are updated. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiNsDeleteNamespaceByOwner ( -    UINT16                  OwnerId) -{ -    ACPI_NAMESPACE_NODE     *ChildNode; -    UINT32                  Level; -    ACPI_OPERAND_OBJECT     *ObjDesc; -    ACPI_NAMESPACE_NODE     *ParentNode; - - -    FUNCTION_TRACE ("NsDeleteNamespaceSubtree"); - - -    ParentNode  = AcpiGbl_RootNode; -    ChildNode   = 0; -    Level       = 1; - -    /* -     * Traverse the tree of objects until we bubble back up -     * to where we started. -     */ - -    while (Level > 0) -    { -        /* -         * Get the next typed object in this scope. -         * Null returned if not found -         */ - -        ChildNode = AcpiNsGetNextObject (ACPI_TYPE_ANY, ParentNode, -                                            ChildNode); - -        if (ChildNode) -        { -            if (ChildNode->OwnerId == OwnerId) -            { -                /* -                 * Found an object - delete the object within -                 * the Value field -                 */ - -                ObjDesc = AcpiNsGetAttachedObject (ChildNode); -                if (ObjDesc) -                { -                    AcpiNsDetachObject (ChildNode); -                    AcpiCmRemoveReference (ObjDesc); -                } -            } - -            /* Check if this object has any children */ - -            if (AcpiNsGetNextObject (ACPI_TYPE_ANY, ChildNode, 0)) -            { -                /* -                 * There is at least one child of this object, -                 * visit the object -                 */ - -                Level++; -                ParentNode    = ChildNode; -                ChildNode     = 0; -            } - -            else if (ChildNode->OwnerId == OwnerId) -            { -                AcpiNsRemoveReference (ChildNode); -            } -        } - -        else -        { -            /* -             * No more children in this object.  Move up to grandparent. -             */ -            Level--; - -            if (Level != 0) -            { -                if (ParentNode->OwnerId == OwnerId) -                { -                    AcpiNsRemoveReference (ParentNode); -                } -            } - -            /* New "last child" is this parent object */ - -            ChildNode = ParentNode; - -            /* Now we can move up the tree to the grandparent */ - -            ParentNode = AcpiNsGetParentObject (ParentNode); -        } -    } - - -    return_ACPI_STATUS (AE_OK); -} - - | 
