xref: /titanic_41/usr/src/uts/intel/io/acpica/parser/pswalk.c (revision de5d74c22760a6d2cefd94d0e7f0fd87214fb71f)
1db2bae30SDana Myers /******************************************************************************
2db2bae30SDana Myers  *
3db2bae30SDana Myers  * Module Name: pswalk - Parser routines to walk parsed op tree(s)
4db2bae30SDana Myers  *
5db2bae30SDana Myers  *****************************************************************************/
6db2bae30SDana Myers 
726f3cdf0SGordon Ross /*
8*de5d74c2SJerry Jelinek  * Copyright (C) 2000 - 2016, Intel Corp.
9db2bae30SDana Myers  * All rights reserved.
10db2bae30SDana Myers  *
1126f3cdf0SGordon Ross  * Redistribution and use in source and binary forms, with or without
1226f3cdf0SGordon Ross  * modification, are permitted provided that the following conditions
1326f3cdf0SGordon Ross  * are met:
1426f3cdf0SGordon Ross  * 1. Redistributions of source code must retain the above copyright
1526f3cdf0SGordon Ross  *    notice, this list of conditions, and the following disclaimer,
1626f3cdf0SGordon Ross  *    without modification.
1726f3cdf0SGordon Ross  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
1826f3cdf0SGordon Ross  *    substantially similar to the "NO WARRANTY" disclaimer below
1926f3cdf0SGordon Ross  *    ("Disclaimer") and any redistribution must be conditioned upon
2026f3cdf0SGordon Ross  *    including a substantially similar Disclaimer requirement for further
2126f3cdf0SGordon Ross  *    binary redistribution.
2226f3cdf0SGordon Ross  * 3. Neither the names of the above-listed copyright holders nor the names
2326f3cdf0SGordon Ross  *    of any contributors may be used to endorse or promote products derived
2426f3cdf0SGordon Ross  *    from this software without specific prior written permission.
25db2bae30SDana Myers  *
2626f3cdf0SGordon Ross  * Alternatively, this software may be distributed under the terms of the
2726f3cdf0SGordon Ross  * GNU General Public License ("GPL") version 2 as published by the Free
2826f3cdf0SGordon Ross  * Software Foundation.
29db2bae30SDana Myers  *
3026f3cdf0SGordon Ross  * NO WARRANTY
3126f3cdf0SGordon Ross  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
3226f3cdf0SGordon Ross  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
3326f3cdf0SGordon Ross  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
3426f3cdf0SGordon Ross  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
3526f3cdf0SGordon Ross  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
3626f3cdf0SGordon Ross  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
3726f3cdf0SGordon Ross  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3826f3cdf0SGordon Ross  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
3926f3cdf0SGordon Ross  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
4026f3cdf0SGordon Ross  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
4126f3cdf0SGordon Ross  * POSSIBILITY OF SUCH DAMAGES.
4226f3cdf0SGordon Ross  */
43db2bae30SDana Myers 
44db2bae30SDana Myers #include "acpi.h"
45aa2aa9a6SDana Myers #include "accommon.h"
46db2bae30SDana Myers #include "acparser.h"
47db2bae30SDana Myers 
48db2bae30SDana Myers #define _COMPONENT          ACPI_PARSER
49db2bae30SDana Myers         ACPI_MODULE_NAME    ("pswalk")
50db2bae30SDana Myers 
51db2bae30SDana Myers 
52db2bae30SDana Myers /*******************************************************************************
53db2bae30SDana Myers  *
54db2bae30SDana Myers  * FUNCTION:    AcpiPsDeleteParseTree
55db2bae30SDana Myers  *
56db2bae30SDana Myers  * PARAMETERS:  SubtreeRoot         - Root of tree (or subtree) to delete
57db2bae30SDana Myers  *
58db2bae30SDana Myers  * RETURN:      None
59db2bae30SDana Myers  *
60db2bae30SDana Myers  * DESCRIPTION: Delete a portion of or an entire parse tree.
61db2bae30SDana Myers  *
62db2bae30SDana Myers  ******************************************************************************/
63db2bae30SDana Myers 
64db2bae30SDana Myers void
AcpiPsDeleteParseTree(ACPI_PARSE_OBJECT * SubtreeRoot)65db2bae30SDana Myers AcpiPsDeleteParseTree (
66db2bae30SDana Myers     ACPI_PARSE_OBJECT       *SubtreeRoot)
67db2bae30SDana Myers {
68db2bae30SDana Myers     ACPI_PARSE_OBJECT       *Op = SubtreeRoot;
69db2bae30SDana Myers     ACPI_PARSE_OBJECT       *Next = NULL;
70db2bae30SDana Myers     ACPI_PARSE_OBJECT       *Parent = NULL;
71db2bae30SDana Myers 
72db2bae30SDana Myers 
73db2bae30SDana Myers     ACPI_FUNCTION_TRACE_PTR (PsDeleteParseTree, SubtreeRoot);
74db2bae30SDana Myers 
75db2bae30SDana Myers 
76db2bae30SDana Myers     /* Visit all nodes in the subtree */
77db2bae30SDana Myers 
78db2bae30SDana Myers     while (Op)
79db2bae30SDana Myers     {
80db2bae30SDana Myers         /* Check if we are not ascending */
81db2bae30SDana Myers 
82db2bae30SDana Myers         if (Op != Parent)
83db2bae30SDana Myers         {
84db2bae30SDana Myers             /* Look for an argument or child of the current op */
85db2bae30SDana Myers 
86db2bae30SDana Myers             Next = AcpiPsGetArg (Op, 0);
87db2bae30SDana Myers             if (Next)
88db2bae30SDana Myers             {
89db2bae30SDana Myers                 /* Still going downward in tree (Op is not completed yet) */
90db2bae30SDana Myers 
91db2bae30SDana Myers                 Op = Next;
92db2bae30SDana Myers                 continue;
93db2bae30SDana Myers             }
94db2bae30SDana Myers         }
95db2bae30SDana Myers 
96db2bae30SDana Myers         /* No more children, this Op is complete. */
97db2bae30SDana Myers 
98db2bae30SDana Myers         Next = Op->Common.Next;
99db2bae30SDana Myers         Parent = Op->Common.Parent;
100db2bae30SDana Myers 
101db2bae30SDana Myers         AcpiPsFreeOp (Op);
102db2bae30SDana Myers 
103db2bae30SDana Myers         /* If we are back to the starting point, the walk is complete. */
104db2bae30SDana Myers 
105db2bae30SDana Myers         if (Op == SubtreeRoot)
106db2bae30SDana Myers         {
107db2bae30SDana Myers             return_VOID;
108db2bae30SDana Myers         }
109*de5d74c2SJerry Jelinek 
110db2bae30SDana Myers         if (Next)
111db2bae30SDana Myers         {
112db2bae30SDana Myers             Op = Next;
113db2bae30SDana Myers         }
114db2bae30SDana Myers         else
115db2bae30SDana Myers         {
116db2bae30SDana Myers             Op = Parent;
117db2bae30SDana Myers         }
118db2bae30SDana Myers     }
119db2bae30SDana Myers 
120db2bae30SDana Myers     return_VOID;
121db2bae30SDana Myers }
122