xref: /freebsd/sys/contrib/dev/acpica/components/utilities/utstate.c (revision a159c266a93c3c4f229864954c5f963acd8f60f2)
1*a159c266SJung-uk Kim /*******************************************************************************
2*a159c266SJung-uk Kim  *
3*a159c266SJung-uk Kim  * Module Name: utstate - state object support procedures
4*a159c266SJung-uk Kim  *
5*a159c266SJung-uk Kim  ******************************************************************************/
6*a159c266SJung-uk Kim 
7*a159c266SJung-uk Kim /*
8*a159c266SJung-uk Kim  * Copyright (C) 2000 - 2012, Intel Corp.
9*a159c266SJung-uk Kim  * All rights reserved.
10*a159c266SJung-uk Kim  *
11*a159c266SJung-uk Kim  * Redistribution and use in source and binary forms, with or without
12*a159c266SJung-uk Kim  * modification, are permitted provided that the following conditions
13*a159c266SJung-uk Kim  * are met:
14*a159c266SJung-uk Kim  * 1. Redistributions of source code must retain the above copyright
15*a159c266SJung-uk Kim  *    notice, this list of conditions, and the following disclaimer,
16*a159c266SJung-uk Kim  *    without modification.
17*a159c266SJung-uk Kim  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18*a159c266SJung-uk Kim  *    substantially similar to the "NO WARRANTY" disclaimer below
19*a159c266SJung-uk Kim  *    ("Disclaimer") and any redistribution must be conditioned upon
20*a159c266SJung-uk Kim  *    including a substantially similar Disclaimer requirement for further
21*a159c266SJung-uk Kim  *    binary redistribution.
22*a159c266SJung-uk Kim  * 3. Neither the names of the above-listed copyright holders nor the names
23*a159c266SJung-uk Kim  *    of any contributors may be used to endorse or promote products derived
24*a159c266SJung-uk Kim  *    from this software without specific prior written permission.
25*a159c266SJung-uk Kim  *
26*a159c266SJung-uk Kim  * Alternatively, this software may be distributed under the terms of the
27*a159c266SJung-uk Kim  * GNU General Public License ("GPL") version 2 as published by the Free
28*a159c266SJung-uk Kim  * Software Foundation.
29*a159c266SJung-uk Kim  *
30*a159c266SJung-uk Kim  * NO WARRANTY
31*a159c266SJung-uk Kim  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32*a159c266SJung-uk Kim  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33*a159c266SJung-uk Kim  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34*a159c266SJung-uk Kim  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35*a159c266SJung-uk Kim  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36*a159c266SJung-uk Kim  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37*a159c266SJung-uk Kim  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38*a159c266SJung-uk Kim  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39*a159c266SJung-uk Kim  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40*a159c266SJung-uk Kim  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41*a159c266SJung-uk Kim  * POSSIBILITY OF SUCH DAMAGES.
42*a159c266SJung-uk Kim  */
43*a159c266SJung-uk Kim 
44*a159c266SJung-uk Kim 
45*a159c266SJung-uk Kim #define __UTSTATE_C__
46*a159c266SJung-uk Kim 
47*a159c266SJung-uk Kim #include <contrib/dev/acpica/include/acpi.h>
48*a159c266SJung-uk Kim #include <contrib/dev/acpica/include/accommon.h>
49*a159c266SJung-uk Kim 
50*a159c266SJung-uk Kim #define _COMPONENT          ACPI_UTILITIES
51*a159c266SJung-uk Kim         ACPI_MODULE_NAME    ("utstate")
52*a159c266SJung-uk Kim 
53*a159c266SJung-uk Kim 
54*a159c266SJung-uk Kim /*******************************************************************************
55*a159c266SJung-uk Kim  *
56*a159c266SJung-uk Kim  * FUNCTION:    AcpiUtCreatePkgStateAndPush
57*a159c266SJung-uk Kim  *
58*a159c266SJung-uk Kim  * PARAMETERS:  Object          - Object to be added to the new state
59*a159c266SJung-uk Kim  *              Action          - Increment/Decrement
60*a159c266SJung-uk Kim  *              StateList       - List the state will be added to
61*a159c266SJung-uk Kim  *
62*a159c266SJung-uk Kim  * RETURN:      Status
63*a159c266SJung-uk Kim  *
64*a159c266SJung-uk Kim  * DESCRIPTION: Create a new state and push it
65*a159c266SJung-uk Kim  *
66*a159c266SJung-uk Kim  ******************************************************************************/
67*a159c266SJung-uk Kim 
68*a159c266SJung-uk Kim ACPI_STATUS
69*a159c266SJung-uk Kim AcpiUtCreatePkgStateAndPush (
70*a159c266SJung-uk Kim     void                    *InternalObject,
71*a159c266SJung-uk Kim     void                    *ExternalObject,
72*a159c266SJung-uk Kim     UINT16                  Index,
73*a159c266SJung-uk Kim     ACPI_GENERIC_STATE      **StateList)
74*a159c266SJung-uk Kim {
75*a159c266SJung-uk Kim     ACPI_GENERIC_STATE       *State;
76*a159c266SJung-uk Kim 
77*a159c266SJung-uk Kim 
78*a159c266SJung-uk Kim     ACPI_FUNCTION_ENTRY ();
79*a159c266SJung-uk Kim 
80*a159c266SJung-uk Kim 
81*a159c266SJung-uk Kim     State = AcpiUtCreatePkgState (InternalObject, ExternalObject, Index);
82*a159c266SJung-uk Kim     if (!State)
83*a159c266SJung-uk Kim     {
84*a159c266SJung-uk Kim         return (AE_NO_MEMORY);
85*a159c266SJung-uk Kim     }
86*a159c266SJung-uk Kim 
87*a159c266SJung-uk Kim     AcpiUtPushGenericState (StateList, State);
88*a159c266SJung-uk Kim     return (AE_OK);
89*a159c266SJung-uk Kim }
90*a159c266SJung-uk Kim 
91*a159c266SJung-uk Kim 
92*a159c266SJung-uk Kim /*******************************************************************************
93*a159c266SJung-uk Kim  *
94*a159c266SJung-uk Kim  * FUNCTION:    AcpiUtPushGenericState
95*a159c266SJung-uk Kim  *
96*a159c266SJung-uk Kim  * PARAMETERS:  ListHead            - Head of the state stack
97*a159c266SJung-uk Kim  *              State               - State object to push
98*a159c266SJung-uk Kim  *
99*a159c266SJung-uk Kim  * RETURN:      None
100*a159c266SJung-uk Kim  *
101*a159c266SJung-uk Kim  * DESCRIPTION: Push a state object onto a state stack
102*a159c266SJung-uk Kim  *
103*a159c266SJung-uk Kim  ******************************************************************************/
104*a159c266SJung-uk Kim 
105*a159c266SJung-uk Kim void
106*a159c266SJung-uk Kim AcpiUtPushGenericState (
107*a159c266SJung-uk Kim     ACPI_GENERIC_STATE      **ListHead,
108*a159c266SJung-uk Kim     ACPI_GENERIC_STATE      *State)
109*a159c266SJung-uk Kim {
110*a159c266SJung-uk Kim     ACPI_FUNCTION_TRACE (UtPushGenericState);
111*a159c266SJung-uk Kim 
112*a159c266SJung-uk Kim 
113*a159c266SJung-uk Kim     /* Push the state object onto the front of the list (stack) */
114*a159c266SJung-uk Kim 
115*a159c266SJung-uk Kim     State->Common.Next = *ListHead;
116*a159c266SJung-uk Kim     *ListHead = State;
117*a159c266SJung-uk Kim 
118*a159c266SJung-uk Kim     return_VOID;
119*a159c266SJung-uk Kim }
120*a159c266SJung-uk Kim 
121*a159c266SJung-uk Kim 
122*a159c266SJung-uk Kim /*******************************************************************************
123*a159c266SJung-uk Kim  *
124*a159c266SJung-uk Kim  * FUNCTION:    AcpiUtPopGenericState
125*a159c266SJung-uk Kim  *
126*a159c266SJung-uk Kim  * PARAMETERS:  ListHead            - Head of the state stack
127*a159c266SJung-uk Kim  *
128*a159c266SJung-uk Kim  * RETURN:      The popped state object
129*a159c266SJung-uk Kim  *
130*a159c266SJung-uk Kim  * DESCRIPTION: Pop a state object from a state stack
131*a159c266SJung-uk Kim  *
132*a159c266SJung-uk Kim  ******************************************************************************/
133*a159c266SJung-uk Kim 
134*a159c266SJung-uk Kim ACPI_GENERIC_STATE *
135*a159c266SJung-uk Kim AcpiUtPopGenericState (
136*a159c266SJung-uk Kim     ACPI_GENERIC_STATE      **ListHead)
137*a159c266SJung-uk Kim {
138*a159c266SJung-uk Kim     ACPI_GENERIC_STATE      *State;
139*a159c266SJung-uk Kim 
140*a159c266SJung-uk Kim 
141*a159c266SJung-uk Kim     ACPI_FUNCTION_TRACE (UtPopGenericState);
142*a159c266SJung-uk Kim 
143*a159c266SJung-uk Kim 
144*a159c266SJung-uk Kim     /* Remove the state object at the head of the list (stack) */
145*a159c266SJung-uk Kim 
146*a159c266SJung-uk Kim     State = *ListHead;
147*a159c266SJung-uk Kim     if (State)
148*a159c266SJung-uk Kim     {
149*a159c266SJung-uk Kim         /* Update the list head */
150*a159c266SJung-uk Kim 
151*a159c266SJung-uk Kim         *ListHead = State->Common.Next;
152*a159c266SJung-uk Kim     }
153*a159c266SJung-uk Kim 
154*a159c266SJung-uk Kim     return_PTR (State);
155*a159c266SJung-uk Kim }
156*a159c266SJung-uk Kim 
157*a159c266SJung-uk Kim 
158*a159c266SJung-uk Kim /*******************************************************************************
159*a159c266SJung-uk Kim  *
160*a159c266SJung-uk Kim  * FUNCTION:    AcpiUtCreateGenericState
161*a159c266SJung-uk Kim  *
162*a159c266SJung-uk Kim  * PARAMETERS:  None
163*a159c266SJung-uk Kim  *
164*a159c266SJung-uk Kim  * RETURN:      The new state object. NULL on failure.
165*a159c266SJung-uk Kim  *
166*a159c266SJung-uk Kim  * DESCRIPTION: Create a generic state object.  Attempt to obtain one from
167*a159c266SJung-uk Kim  *              the global state cache;  If none available, create a new one.
168*a159c266SJung-uk Kim  *
169*a159c266SJung-uk Kim  ******************************************************************************/
170*a159c266SJung-uk Kim 
171*a159c266SJung-uk Kim ACPI_GENERIC_STATE *
172*a159c266SJung-uk Kim AcpiUtCreateGenericState (
173*a159c266SJung-uk Kim     void)
174*a159c266SJung-uk Kim {
175*a159c266SJung-uk Kim     ACPI_GENERIC_STATE      *State;
176*a159c266SJung-uk Kim 
177*a159c266SJung-uk Kim 
178*a159c266SJung-uk Kim     ACPI_FUNCTION_ENTRY ();
179*a159c266SJung-uk Kim 
180*a159c266SJung-uk Kim 
181*a159c266SJung-uk Kim     State = AcpiOsAcquireObject (AcpiGbl_StateCache);
182*a159c266SJung-uk Kim     if (State)
183*a159c266SJung-uk Kim     {
184*a159c266SJung-uk Kim         /* Initialize */
185*a159c266SJung-uk Kim         State->Common.DescriptorType = ACPI_DESC_TYPE_STATE;
186*a159c266SJung-uk Kim     }
187*a159c266SJung-uk Kim 
188*a159c266SJung-uk Kim     return (State);
189*a159c266SJung-uk Kim }
190*a159c266SJung-uk Kim 
191*a159c266SJung-uk Kim 
192*a159c266SJung-uk Kim /*******************************************************************************
193*a159c266SJung-uk Kim  *
194*a159c266SJung-uk Kim  * FUNCTION:    AcpiUtCreateThreadState
195*a159c266SJung-uk Kim  *
196*a159c266SJung-uk Kim  * PARAMETERS:  None
197*a159c266SJung-uk Kim  *
198*a159c266SJung-uk Kim  * RETURN:      New Thread State. NULL on failure
199*a159c266SJung-uk Kim  *
200*a159c266SJung-uk Kim  * DESCRIPTION: Create a "Thread State" - a flavor of the generic state used
201*a159c266SJung-uk Kim  *              to track per-thread info during method execution
202*a159c266SJung-uk Kim  *
203*a159c266SJung-uk Kim  ******************************************************************************/
204*a159c266SJung-uk Kim 
205*a159c266SJung-uk Kim ACPI_THREAD_STATE *
206*a159c266SJung-uk Kim AcpiUtCreateThreadState (
207*a159c266SJung-uk Kim     void)
208*a159c266SJung-uk Kim {
209*a159c266SJung-uk Kim     ACPI_GENERIC_STATE      *State;
210*a159c266SJung-uk Kim 
211*a159c266SJung-uk Kim 
212*a159c266SJung-uk Kim     ACPI_FUNCTION_TRACE (UtCreateThreadState);
213*a159c266SJung-uk Kim 
214*a159c266SJung-uk Kim 
215*a159c266SJung-uk Kim     /* Create the generic state object */
216*a159c266SJung-uk Kim 
217*a159c266SJung-uk Kim     State = AcpiUtCreateGenericState ();
218*a159c266SJung-uk Kim     if (!State)
219*a159c266SJung-uk Kim     {
220*a159c266SJung-uk Kim         return_PTR (NULL);
221*a159c266SJung-uk Kim     }
222*a159c266SJung-uk Kim 
223*a159c266SJung-uk Kim     /* Init fields specific to the update struct */
224*a159c266SJung-uk Kim 
225*a159c266SJung-uk Kim     State->Common.DescriptorType = ACPI_DESC_TYPE_STATE_THREAD;
226*a159c266SJung-uk Kim     State->Thread.ThreadId = AcpiOsGetThreadId ();
227*a159c266SJung-uk Kim 
228*a159c266SJung-uk Kim     /* Check for invalid thread ID - zero is very bad, it will break things */
229*a159c266SJung-uk Kim 
230*a159c266SJung-uk Kim     if (!State->Thread.ThreadId)
231*a159c266SJung-uk Kim     {
232*a159c266SJung-uk Kim         ACPI_ERROR ((AE_INFO, "Invalid zero ID from AcpiOsGetThreadId"));
233*a159c266SJung-uk Kim         State->Thread.ThreadId = (ACPI_THREAD_ID) 1;
234*a159c266SJung-uk Kim     }
235*a159c266SJung-uk Kim 
236*a159c266SJung-uk Kim     return_PTR ((ACPI_THREAD_STATE *) State);
237*a159c266SJung-uk Kim }
238*a159c266SJung-uk Kim 
239*a159c266SJung-uk Kim 
240*a159c266SJung-uk Kim /*******************************************************************************
241*a159c266SJung-uk Kim  *
242*a159c266SJung-uk Kim  * FUNCTION:    AcpiUtCreateUpdateState
243*a159c266SJung-uk Kim  *
244*a159c266SJung-uk Kim  * PARAMETERS:  Object          - Initial Object to be installed in the state
245*a159c266SJung-uk Kim  *              Action          - Update action to be performed
246*a159c266SJung-uk Kim  *
247*a159c266SJung-uk Kim  * RETURN:      New state object, null on failure
248*a159c266SJung-uk Kim  *
249*a159c266SJung-uk Kim  * DESCRIPTION: Create an "Update State" - a flavor of the generic state used
250*a159c266SJung-uk Kim  *              to update reference counts and delete complex objects such
251*a159c266SJung-uk Kim  *              as packages.
252*a159c266SJung-uk Kim  *
253*a159c266SJung-uk Kim  ******************************************************************************/
254*a159c266SJung-uk Kim 
255*a159c266SJung-uk Kim ACPI_GENERIC_STATE *
256*a159c266SJung-uk Kim AcpiUtCreateUpdateState (
257*a159c266SJung-uk Kim     ACPI_OPERAND_OBJECT     *Object,
258*a159c266SJung-uk Kim     UINT16                  Action)
259*a159c266SJung-uk Kim {
260*a159c266SJung-uk Kim     ACPI_GENERIC_STATE      *State;
261*a159c266SJung-uk Kim 
262*a159c266SJung-uk Kim 
263*a159c266SJung-uk Kim     ACPI_FUNCTION_TRACE_PTR (UtCreateUpdateState, Object);
264*a159c266SJung-uk Kim 
265*a159c266SJung-uk Kim 
266*a159c266SJung-uk Kim     /* Create the generic state object */
267*a159c266SJung-uk Kim 
268*a159c266SJung-uk Kim     State = AcpiUtCreateGenericState ();
269*a159c266SJung-uk Kim     if (!State)
270*a159c266SJung-uk Kim     {
271*a159c266SJung-uk Kim         return_PTR (NULL);
272*a159c266SJung-uk Kim     }
273*a159c266SJung-uk Kim 
274*a159c266SJung-uk Kim     /* Init fields specific to the update struct */
275*a159c266SJung-uk Kim 
276*a159c266SJung-uk Kim     State->Common.DescriptorType = ACPI_DESC_TYPE_STATE_UPDATE;
277*a159c266SJung-uk Kim     State->Update.Object = Object;
278*a159c266SJung-uk Kim     State->Update.Value = Action;
279*a159c266SJung-uk Kim 
280*a159c266SJung-uk Kim     return_PTR (State);
281*a159c266SJung-uk Kim }
282*a159c266SJung-uk Kim 
283*a159c266SJung-uk Kim 
284*a159c266SJung-uk Kim /*******************************************************************************
285*a159c266SJung-uk Kim  *
286*a159c266SJung-uk Kim  * FUNCTION:    AcpiUtCreatePkgState
287*a159c266SJung-uk Kim  *
288*a159c266SJung-uk Kim  * PARAMETERS:  Object          - Initial Object to be installed in the state
289*a159c266SJung-uk Kim  *              Action          - Update action to be performed
290*a159c266SJung-uk Kim  *
291*a159c266SJung-uk Kim  * RETURN:      New state object, null on failure
292*a159c266SJung-uk Kim  *
293*a159c266SJung-uk Kim  * DESCRIPTION: Create a "Package State"
294*a159c266SJung-uk Kim  *
295*a159c266SJung-uk Kim  ******************************************************************************/
296*a159c266SJung-uk Kim 
297*a159c266SJung-uk Kim ACPI_GENERIC_STATE *
298*a159c266SJung-uk Kim AcpiUtCreatePkgState (
299*a159c266SJung-uk Kim     void                    *InternalObject,
300*a159c266SJung-uk Kim     void                    *ExternalObject,
301*a159c266SJung-uk Kim     UINT16                  Index)
302*a159c266SJung-uk Kim {
303*a159c266SJung-uk Kim     ACPI_GENERIC_STATE      *State;
304*a159c266SJung-uk Kim 
305*a159c266SJung-uk Kim 
306*a159c266SJung-uk Kim     ACPI_FUNCTION_TRACE_PTR (UtCreatePkgState, InternalObject);
307*a159c266SJung-uk Kim 
308*a159c266SJung-uk Kim 
309*a159c266SJung-uk Kim     /* Create the generic state object */
310*a159c266SJung-uk Kim 
311*a159c266SJung-uk Kim     State = AcpiUtCreateGenericState ();
312*a159c266SJung-uk Kim     if (!State)
313*a159c266SJung-uk Kim     {
314*a159c266SJung-uk Kim         return_PTR (NULL);
315*a159c266SJung-uk Kim     }
316*a159c266SJung-uk Kim 
317*a159c266SJung-uk Kim     /* Init fields specific to the update struct */
318*a159c266SJung-uk Kim 
319*a159c266SJung-uk Kim     State->Common.DescriptorType = ACPI_DESC_TYPE_STATE_PACKAGE;
320*a159c266SJung-uk Kim     State->Pkg.SourceObject = (ACPI_OPERAND_OBJECT *) InternalObject;
321*a159c266SJung-uk Kim     State->Pkg.DestObject = ExternalObject;
322*a159c266SJung-uk Kim     State->Pkg.Index= Index;
323*a159c266SJung-uk Kim     State->Pkg.NumPackages = 1;
324*a159c266SJung-uk Kim 
325*a159c266SJung-uk Kim     return_PTR (State);
326*a159c266SJung-uk Kim }
327*a159c266SJung-uk Kim 
328*a159c266SJung-uk Kim 
329*a159c266SJung-uk Kim /*******************************************************************************
330*a159c266SJung-uk Kim  *
331*a159c266SJung-uk Kim  * FUNCTION:    AcpiUtCreateControlState
332*a159c266SJung-uk Kim  *
333*a159c266SJung-uk Kim  * PARAMETERS:  None
334*a159c266SJung-uk Kim  *
335*a159c266SJung-uk Kim  * RETURN:      New state object, null on failure
336*a159c266SJung-uk Kim  *
337*a159c266SJung-uk Kim  * DESCRIPTION: Create a "Control State" - a flavor of the generic state used
338*a159c266SJung-uk Kim  *              to support nested IF/WHILE constructs in the AML.
339*a159c266SJung-uk Kim  *
340*a159c266SJung-uk Kim  ******************************************************************************/
341*a159c266SJung-uk Kim 
342*a159c266SJung-uk Kim ACPI_GENERIC_STATE *
343*a159c266SJung-uk Kim AcpiUtCreateControlState (
344*a159c266SJung-uk Kim     void)
345*a159c266SJung-uk Kim {
346*a159c266SJung-uk Kim     ACPI_GENERIC_STATE      *State;
347*a159c266SJung-uk Kim 
348*a159c266SJung-uk Kim 
349*a159c266SJung-uk Kim     ACPI_FUNCTION_TRACE (UtCreateControlState);
350*a159c266SJung-uk Kim 
351*a159c266SJung-uk Kim 
352*a159c266SJung-uk Kim     /* Create the generic state object */
353*a159c266SJung-uk Kim 
354*a159c266SJung-uk Kim     State = AcpiUtCreateGenericState ();
355*a159c266SJung-uk Kim     if (!State)
356*a159c266SJung-uk Kim     {
357*a159c266SJung-uk Kim         return_PTR (NULL);
358*a159c266SJung-uk Kim     }
359*a159c266SJung-uk Kim 
360*a159c266SJung-uk Kim     /* Init fields specific to the control struct */
361*a159c266SJung-uk Kim 
362*a159c266SJung-uk Kim     State->Common.DescriptorType = ACPI_DESC_TYPE_STATE_CONTROL;
363*a159c266SJung-uk Kim     State->Common.State = ACPI_CONTROL_CONDITIONAL_EXECUTING;
364*a159c266SJung-uk Kim 
365*a159c266SJung-uk Kim     return_PTR (State);
366*a159c266SJung-uk Kim }
367*a159c266SJung-uk Kim 
368*a159c266SJung-uk Kim 
369*a159c266SJung-uk Kim /*******************************************************************************
370*a159c266SJung-uk Kim  *
371*a159c266SJung-uk Kim  * FUNCTION:    AcpiUtDeleteGenericState
372*a159c266SJung-uk Kim  *
373*a159c266SJung-uk Kim  * PARAMETERS:  State               - The state object to be deleted
374*a159c266SJung-uk Kim  *
375*a159c266SJung-uk Kim  * RETURN:      None
376*a159c266SJung-uk Kim  *
377*a159c266SJung-uk Kim  * DESCRIPTION: Release a state object to the state cache. NULL state objects
378*a159c266SJung-uk Kim  *              are ignored.
379*a159c266SJung-uk Kim  *
380*a159c266SJung-uk Kim  ******************************************************************************/
381*a159c266SJung-uk Kim 
382*a159c266SJung-uk Kim void
383*a159c266SJung-uk Kim AcpiUtDeleteGenericState (
384*a159c266SJung-uk Kim     ACPI_GENERIC_STATE      *State)
385*a159c266SJung-uk Kim {
386*a159c266SJung-uk Kim     ACPI_FUNCTION_TRACE (UtDeleteGenericState);
387*a159c266SJung-uk Kim 
388*a159c266SJung-uk Kim 
389*a159c266SJung-uk Kim     /* Ignore null state */
390*a159c266SJung-uk Kim 
391*a159c266SJung-uk Kim     if (State)
392*a159c266SJung-uk Kim     {
393*a159c266SJung-uk Kim         (void) AcpiOsReleaseObject (AcpiGbl_StateCache, State);
394*a159c266SJung-uk Kim     }
395*a159c266SJung-uk Kim     return_VOID;
396*a159c266SJung-uk Kim }
397*a159c266SJung-uk Kim 
398*a159c266SJung-uk Kim 
399