xref: /minix3/minix/drivers/power/acpi/utilities/utinit.c (revision 29492bb71c7148a089a5afafa0c99409161218df)
1433d6423SLionel Sambuc /******************************************************************************
2433d6423SLionel Sambuc  *
3433d6423SLionel Sambuc  * Module Name: utinit - Common ACPI subsystem initialization
4433d6423SLionel Sambuc  *
5433d6423SLionel Sambuc  *****************************************************************************/
6433d6423SLionel Sambuc 
7*29492bb7SDavid van Moolenbroek /*
8*29492bb7SDavid van Moolenbroek  * Copyright (C) 2000 - 2014, Intel Corp.
9433d6423SLionel Sambuc  * All rights reserved.
10433d6423SLionel Sambuc  *
11*29492bb7SDavid van Moolenbroek  * Redistribution and use in source and binary forms, with or without
12*29492bb7SDavid van Moolenbroek  * modification, are permitted provided that the following conditions
13*29492bb7SDavid van Moolenbroek  * are met:
14*29492bb7SDavid van Moolenbroek  * 1. Redistributions of source code must retain the above copyright
15*29492bb7SDavid van Moolenbroek  *    notice, this list of conditions, and the following disclaimer,
16*29492bb7SDavid van Moolenbroek  *    without modification.
17*29492bb7SDavid van Moolenbroek  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18*29492bb7SDavid van Moolenbroek  *    substantially similar to the "NO WARRANTY" disclaimer below
19*29492bb7SDavid van Moolenbroek  *    ("Disclaimer") and any redistribution must be conditioned upon
20*29492bb7SDavid van Moolenbroek  *    including a substantially similar Disclaimer requirement for further
21*29492bb7SDavid van Moolenbroek  *    binary redistribution.
22*29492bb7SDavid van Moolenbroek  * 3. Neither the names of the above-listed copyright holders nor the names
23*29492bb7SDavid van Moolenbroek  *    of any contributors may be used to endorse or promote products derived
24*29492bb7SDavid van Moolenbroek  *    from this software without specific prior written permission.
25433d6423SLionel Sambuc  *
26*29492bb7SDavid van Moolenbroek  * Alternatively, this software may be distributed under the terms of the
27*29492bb7SDavid van Moolenbroek  * GNU General Public License ("GPL") version 2 as published by the Free
28*29492bb7SDavid van Moolenbroek  * Software Foundation.
29433d6423SLionel Sambuc  *
30*29492bb7SDavid van Moolenbroek  * NO WARRANTY
31*29492bb7SDavid van Moolenbroek  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32*29492bb7SDavid van Moolenbroek  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33*29492bb7SDavid van Moolenbroek  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34*29492bb7SDavid van Moolenbroek  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35*29492bb7SDavid van Moolenbroek  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36*29492bb7SDavid van Moolenbroek  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37*29492bb7SDavid van Moolenbroek  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38*29492bb7SDavid van Moolenbroek  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39*29492bb7SDavid van Moolenbroek  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40*29492bb7SDavid van Moolenbroek  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41*29492bb7SDavid van Moolenbroek  * POSSIBILITY OF SUCH DAMAGES.
42*29492bb7SDavid van Moolenbroek  */
43433d6423SLionel Sambuc 
44433d6423SLionel Sambuc #include "acpi.h"
45433d6423SLionel Sambuc #include "accommon.h"
46433d6423SLionel Sambuc #include "acnamesp.h"
47433d6423SLionel Sambuc #include "acevents.h"
48433d6423SLionel Sambuc #include "actables.h"
49433d6423SLionel Sambuc 
50433d6423SLionel Sambuc #define _COMPONENT          ACPI_UTILITIES
51433d6423SLionel Sambuc         ACPI_MODULE_NAME    ("utinit")
52433d6423SLionel Sambuc 
53433d6423SLionel Sambuc /* Local prototypes */
54433d6423SLionel Sambuc 
55433d6423SLionel Sambuc static void AcpiUtTerminate (
56433d6423SLionel Sambuc     void);
57433d6423SLionel Sambuc 
58*29492bb7SDavid van Moolenbroek #if (!ACPI_REDUCED_HARDWARE)
59433d6423SLionel Sambuc 
60*29492bb7SDavid van Moolenbroek static void
61*29492bb7SDavid van Moolenbroek AcpiUtFreeGpeLists (
62*29492bb7SDavid van Moolenbroek     void);
63*29492bb7SDavid van Moolenbroek 
64*29492bb7SDavid van Moolenbroek #else
65*29492bb7SDavid van Moolenbroek 
66*29492bb7SDavid van Moolenbroek #define AcpiUtFreeGpeLists()
67*29492bb7SDavid van Moolenbroek #endif /* !ACPI_REDUCED_HARDWARE */
68*29492bb7SDavid van Moolenbroek 
69*29492bb7SDavid van Moolenbroek 
70*29492bb7SDavid van Moolenbroek #if (!ACPI_REDUCED_HARDWARE)
71433d6423SLionel Sambuc /******************************************************************************
72433d6423SLionel Sambuc  *
73*29492bb7SDavid van Moolenbroek  * FUNCTION:    AcpiUtFreeGpeLists
74433d6423SLionel Sambuc  *
75433d6423SLionel Sambuc  * PARAMETERS:  none
76433d6423SLionel Sambuc  *
77433d6423SLionel Sambuc  * RETURN:      none
78433d6423SLionel Sambuc  *
79*29492bb7SDavid van Moolenbroek  * DESCRIPTION: Free global GPE lists
80433d6423SLionel Sambuc  *
81433d6423SLionel Sambuc  ******************************************************************************/
82433d6423SLionel Sambuc 
83433d6423SLionel Sambuc static void
AcpiUtFreeGpeLists(void)84*29492bb7SDavid van Moolenbroek AcpiUtFreeGpeLists (
85433d6423SLionel Sambuc     void)
86433d6423SLionel Sambuc {
87433d6423SLionel Sambuc     ACPI_GPE_BLOCK_INFO     *GpeBlock;
88433d6423SLionel Sambuc     ACPI_GPE_BLOCK_INFO     *NextGpeBlock;
89433d6423SLionel Sambuc     ACPI_GPE_XRUPT_INFO     *GpeXruptInfo;
90433d6423SLionel Sambuc     ACPI_GPE_XRUPT_INFO     *NextGpeXruptInfo;
91433d6423SLionel Sambuc 
92433d6423SLionel Sambuc 
93433d6423SLionel Sambuc     /* Free global GPE blocks and related info structures */
94433d6423SLionel Sambuc 
95433d6423SLionel Sambuc     GpeXruptInfo = AcpiGbl_GpeXruptListHead;
96433d6423SLionel Sambuc     while (GpeXruptInfo)
97433d6423SLionel Sambuc     {
98433d6423SLionel Sambuc         GpeBlock = GpeXruptInfo->GpeBlockListHead;
99433d6423SLionel Sambuc         while (GpeBlock)
100433d6423SLionel Sambuc         {
101433d6423SLionel Sambuc             NextGpeBlock = GpeBlock->Next;
102433d6423SLionel Sambuc             ACPI_FREE (GpeBlock->EventInfo);
103433d6423SLionel Sambuc             ACPI_FREE (GpeBlock->RegisterInfo);
104433d6423SLionel Sambuc             ACPI_FREE (GpeBlock);
105433d6423SLionel Sambuc 
106433d6423SLionel Sambuc             GpeBlock = NextGpeBlock;
107433d6423SLionel Sambuc         }
108433d6423SLionel Sambuc         NextGpeXruptInfo = GpeXruptInfo->Next;
109433d6423SLionel Sambuc         ACPI_FREE (GpeXruptInfo);
110433d6423SLionel Sambuc         GpeXruptInfo = NextGpeXruptInfo;
111433d6423SLionel Sambuc     }
112*29492bb7SDavid van Moolenbroek }
113*29492bb7SDavid van Moolenbroek #endif /* !ACPI_REDUCED_HARDWARE */
114433d6423SLionel Sambuc 
115*29492bb7SDavid van Moolenbroek 
116*29492bb7SDavid van Moolenbroek /*******************************************************************************
117*29492bb7SDavid van Moolenbroek  *
118*29492bb7SDavid van Moolenbroek  * FUNCTION:    AcpiUtInitGlobals
119*29492bb7SDavid van Moolenbroek  *
120*29492bb7SDavid van Moolenbroek  * PARAMETERS:  None
121*29492bb7SDavid van Moolenbroek  *
122*29492bb7SDavid van Moolenbroek  * RETURN:      Status
123*29492bb7SDavid van Moolenbroek  *
124*29492bb7SDavid van Moolenbroek  * DESCRIPTION: Initialize ACPICA globals. All globals that require specific
125*29492bb7SDavid van Moolenbroek  *              initialization should be initialized here. This allows for
126*29492bb7SDavid van Moolenbroek  *              a warm restart.
127*29492bb7SDavid van Moolenbroek  *
128*29492bb7SDavid van Moolenbroek  ******************************************************************************/
129*29492bb7SDavid van Moolenbroek 
130*29492bb7SDavid van Moolenbroek ACPI_STATUS
AcpiUtInitGlobals(void)131*29492bb7SDavid van Moolenbroek AcpiUtInitGlobals (
132*29492bb7SDavid van Moolenbroek     void)
133*29492bb7SDavid van Moolenbroek {
134*29492bb7SDavid van Moolenbroek     ACPI_STATUS             Status;
135*29492bb7SDavid van Moolenbroek     UINT32                  i;
136*29492bb7SDavid van Moolenbroek 
137*29492bb7SDavid van Moolenbroek 
138*29492bb7SDavid van Moolenbroek     ACPI_FUNCTION_TRACE (UtInitGlobals);
139*29492bb7SDavid van Moolenbroek 
140*29492bb7SDavid van Moolenbroek 
141*29492bb7SDavid van Moolenbroek     /* Create all memory caches */
142*29492bb7SDavid van Moolenbroek 
143*29492bb7SDavid van Moolenbroek     Status = AcpiUtCreateCaches ();
144*29492bb7SDavid van Moolenbroek     if (ACPI_FAILURE (Status))
145*29492bb7SDavid van Moolenbroek     {
146*29492bb7SDavid van Moolenbroek         return_ACPI_STATUS (Status);
147*29492bb7SDavid van Moolenbroek     }
148*29492bb7SDavid van Moolenbroek 
149*29492bb7SDavid van Moolenbroek     /* Address Range lists */
150*29492bb7SDavid van Moolenbroek 
151*29492bb7SDavid van Moolenbroek     for (i = 0; i < ACPI_ADDRESS_RANGE_MAX; i++)
152*29492bb7SDavid van Moolenbroek     {
153*29492bb7SDavid van Moolenbroek         AcpiGbl_AddressRangeList[i] = NULL;
154*29492bb7SDavid van Moolenbroek     }
155*29492bb7SDavid van Moolenbroek 
156*29492bb7SDavid van Moolenbroek     /* Mutex locked flags */
157*29492bb7SDavid van Moolenbroek 
158*29492bb7SDavid van Moolenbroek     for (i = 0; i < ACPI_NUM_MUTEX; i++)
159*29492bb7SDavid van Moolenbroek     {
160*29492bb7SDavid van Moolenbroek         AcpiGbl_MutexInfo[i].Mutex          = NULL;
161*29492bb7SDavid van Moolenbroek         AcpiGbl_MutexInfo[i].ThreadId       = ACPI_MUTEX_NOT_ACQUIRED;
162*29492bb7SDavid van Moolenbroek         AcpiGbl_MutexInfo[i].UseCount       = 0;
163*29492bb7SDavid van Moolenbroek     }
164*29492bb7SDavid van Moolenbroek 
165*29492bb7SDavid van Moolenbroek     for (i = 0; i < ACPI_NUM_OWNERID_MASKS; i++)
166*29492bb7SDavid van Moolenbroek     {
167*29492bb7SDavid van Moolenbroek         AcpiGbl_OwnerIdMask[i]              = 0;
168*29492bb7SDavid van Moolenbroek     }
169*29492bb7SDavid van Moolenbroek 
170*29492bb7SDavid van Moolenbroek     /* Last OwnerID is never valid */
171*29492bb7SDavid van Moolenbroek 
172*29492bb7SDavid van Moolenbroek     AcpiGbl_OwnerIdMask[ACPI_NUM_OWNERID_MASKS - 1] = 0x80000000;
173*29492bb7SDavid van Moolenbroek 
174*29492bb7SDavid van Moolenbroek     /* Event counters */
175*29492bb7SDavid van Moolenbroek 
176*29492bb7SDavid van Moolenbroek     AcpiMethodCount                     = 0;
177*29492bb7SDavid van Moolenbroek     AcpiSciCount                        = 0;
178*29492bb7SDavid van Moolenbroek     AcpiGpeCount                        = 0;
179*29492bb7SDavid van Moolenbroek 
180*29492bb7SDavid van Moolenbroek     for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++)
181*29492bb7SDavid van Moolenbroek     {
182*29492bb7SDavid van Moolenbroek         AcpiFixedEventCount[i]              = 0;
183*29492bb7SDavid van Moolenbroek     }
184*29492bb7SDavid van Moolenbroek 
185*29492bb7SDavid van Moolenbroek #if (!ACPI_REDUCED_HARDWARE)
186*29492bb7SDavid van Moolenbroek 
187*29492bb7SDavid van Moolenbroek     /* GPE/SCI support */
188*29492bb7SDavid van Moolenbroek 
189*29492bb7SDavid van Moolenbroek     AcpiGbl_AllGpesInitialized          = FALSE;
190*29492bb7SDavid van Moolenbroek     AcpiGbl_GpeXruptListHead            = NULL;
191*29492bb7SDavid van Moolenbroek     AcpiGbl_GpeFadtBlocks[0]            = NULL;
192*29492bb7SDavid van Moolenbroek     AcpiGbl_GpeFadtBlocks[1]            = NULL;
193*29492bb7SDavid van Moolenbroek     AcpiCurrentGpeCount                 = 0;
194*29492bb7SDavid van Moolenbroek 
195*29492bb7SDavid van Moolenbroek     AcpiGbl_GlobalEventHandler          = NULL;
196*29492bb7SDavid van Moolenbroek     AcpiGbl_SciHandlerList              = NULL;
197*29492bb7SDavid van Moolenbroek 
198*29492bb7SDavid van Moolenbroek #endif /* !ACPI_REDUCED_HARDWARE */
199*29492bb7SDavid van Moolenbroek 
200*29492bb7SDavid van Moolenbroek     /* Global handlers */
201*29492bb7SDavid van Moolenbroek 
202*29492bb7SDavid van Moolenbroek     AcpiGbl_GlobalNotify[0].Handler     = NULL;
203*29492bb7SDavid van Moolenbroek     AcpiGbl_GlobalNotify[1].Handler     = NULL;
204*29492bb7SDavid van Moolenbroek     AcpiGbl_ExceptionHandler            = NULL;
205*29492bb7SDavid van Moolenbroek     AcpiGbl_InitHandler                 = NULL;
206*29492bb7SDavid van Moolenbroek     AcpiGbl_TableHandler                = NULL;
207*29492bb7SDavid van Moolenbroek     AcpiGbl_InterfaceHandler            = NULL;
208*29492bb7SDavid van Moolenbroek 
209*29492bb7SDavid van Moolenbroek     /* Global Lock support */
210*29492bb7SDavid van Moolenbroek 
211*29492bb7SDavid van Moolenbroek     AcpiGbl_GlobalLockSemaphore         = NULL;
212*29492bb7SDavid van Moolenbroek     AcpiGbl_GlobalLockMutex             = NULL;
213*29492bb7SDavid van Moolenbroek     AcpiGbl_GlobalLockAcquired          = FALSE;
214*29492bb7SDavid van Moolenbroek     AcpiGbl_GlobalLockHandle            = 0;
215*29492bb7SDavid van Moolenbroek     AcpiGbl_GlobalLockPresent           = FALSE;
216*29492bb7SDavid van Moolenbroek 
217*29492bb7SDavid van Moolenbroek     /* Miscellaneous variables */
218*29492bb7SDavid van Moolenbroek 
219*29492bb7SDavid van Moolenbroek     AcpiGbl_DSDT                        = NULL;
220*29492bb7SDavid van Moolenbroek     AcpiGbl_CmSingleStep                = FALSE;
221*29492bb7SDavid van Moolenbroek     AcpiGbl_Shutdown                    = FALSE;
222*29492bb7SDavid van Moolenbroek     AcpiGbl_NsLookupCount               = 0;
223*29492bb7SDavid van Moolenbroek     AcpiGbl_PsFindCount                 = 0;
224*29492bb7SDavid van Moolenbroek     AcpiGbl_AcpiHardwarePresent         = TRUE;
225*29492bb7SDavid van Moolenbroek     AcpiGbl_LastOwnerIdIndex            = 0;
226*29492bb7SDavid van Moolenbroek     AcpiGbl_NextOwnerIdOffset           = 0;
227*29492bb7SDavid van Moolenbroek     AcpiGbl_TraceDbgLevel               = 0;
228*29492bb7SDavid van Moolenbroek     AcpiGbl_TraceDbgLayer               = 0;
229*29492bb7SDavid van Moolenbroek     AcpiGbl_DebuggerConfiguration       = DEBUGGER_THREADING;
230*29492bb7SDavid van Moolenbroek     AcpiGbl_OsiMutex                    = NULL;
231*29492bb7SDavid van Moolenbroek     AcpiGbl_RegMethodsExecuted          = FALSE;
232*29492bb7SDavid van Moolenbroek 
233*29492bb7SDavid van Moolenbroek     /* Hardware oriented */
234*29492bb7SDavid van Moolenbroek 
235*29492bb7SDavid van Moolenbroek     AcpiGbl_EventsInitialized           = FALSE;
236*29492bb7SDavid van Moolenbroek     AcpiGbl_SystemAwakeAndRunning       = TRUE;
237*29492bb7SDavid van Moolenbroek 
238*29492bb7SDavid van Moolenbroek     /* Namespace */
239*29492bb7SDavid van Moolenbroek 
240*29492bb7SDavid van Moolenbroek     AcpiGbl_ModuleCodeList              = NULL;
241*29492bb7SDavid van Moolenbroek     AcpiGbl_RootNode                    = NULL;
242*29492bb7SDavid van Moolenbroek     AcpiGbl_RootNodeStruct.Name.Integer = ACPI_ROOT_NAME;
243*29492bb7SDavid van Moolenbroek     AcpiGbl_RootNodeStruct.DescriptorType = ACPI_DESC_TYPE_NAMED;
244*29492bb7SDavid van Moolenbroek     AcpiGbl_RootNodeStruct.Type         = ACPI_TYPE_DEVICE;
245*29492bb7SDavid van Moolenbroek     AcpiGbl_RootNodeStruct.Parent       = NULL;
246*29492bb7SDavid van Moolenbroek     AcpiGbl_RootNodeStruct.Child        = NULL;
247*29492bb7SDavid van Moolenbroek     AcpiGbl_RootNodeStruct.Peer         = NULL;
248*29492bb7SDavid van Moolenbroek     AcpiGbl_RootNodeStruct.Object       = NULL;
249*29492bb7SDavid van Moolenbroek 
250*29492bb7SDavid van Moolenbroek 
251*29492bb7SDavid van Moolenbroek #ifdef ACPI_DISASSEMBLER
252*29492bb7SDavid van Moolenbroek     AcpiGbl_ExternalList                = NULL;
253*29492bb7SDavid van Moolenbroek     AcpiGbl_NumExternalMethods          = 0;
254*29492bb7SDavid van Moolenbroek     AcpiGbl_ResolvedExternalMethods     = 0;
255*29492bb7SDavid van Moolenbroek #endif
256*29492bb7SDavid van Moolenbroek 
257*29492bb7SDavid van Moolenbroek #ifdef ACPI_DEBUG_OUTPUT
258*29492bb7SDavid van Moolenbroek     AcpiGbl_LowestStackPointer          = ACPI_CAST_PTR (ACPI_SIZE, ACPI_SIZE_MAX);
259*29492bb7SDavid van Moolenbroek #endif
260*29492bb7SDavid van Moolenbroek 
261*29492bb7SDavid van Moolenbroek #ifdef ACPI_DBG_TRACK_ALLOCATIONS
262*29492bb7SDavid van Moolenbroek     AcpiGbl_DisplayFinalMemStats        = FALSE;
263*29492bb7SDavid van Moolenbroek     AcpiGbl_DisableMemTracking          = FALSE;
264*29492bb7SDavid van Moolenbroek #endif
265*29492bb7SDavid van Moolenbroek 
266*29492bb7SDavid van Moolenbroek     ACPI_DEBUGGER_EXEC (AcpiGbl_DbTerminateThreads = FALSE);
267*29492bb7SDavid van Moolenbroek 
268*29492bb7SDavid van Moolenbroek     return_ACPI_STATUS (AE_OK);
269*29492bb7SDavid van Moolenbroek }
270*29492bb7SDavid van Moolenbroek 
271*29492bb7SDavid van Moolenbroek 
272*29492bb7SDavid van Moolenbroek /******************************************************************************
273*29492bb7SDavid van Moolenbroek  *
274*29492bb7SDavid van Moolenbroek  * FUNCTION:    AcpiUtTerminate
275*29492bb7SDavid van Moolenbroek  *
276*29492bb7SDavid van Moolenbroek  * PARAMETERS:  none
277*29492bb7SDavid van Moolenbroek  *
278*29492bb7SDavid van Moolenbroek  * RETURN:      none
279*29492bb7SDavid van Moolenbroek  *
280*29492bb7SDavid van Moolenbroek  * DESCRIPTION: Free global memory
281*29492bb7SDavid van Moolenbroek  *
282*29492bb7SDavid van Moolenbroek  ******************************************************************************/
283*29492bb7SDavid van Moolenbroek 
284*29492bb7SDavid van Moolenbroek static void
AcpiUtTerminate(void)285*29492bb7SDavid van Moolenbroek AcpiUtTerminate (
286*29492bb7SDavid van Moolenbroek     void)
287*29492bb7SDavid van Moolenbroek {
288*29492bb7SDavid van Moolenbroek     ACPI_FUNCTION_TRACE (UtTerminate);
289*29492bb7SDavid van Moolenbroek 
290*29492bb7SDavid van Moolenbroek     AcpiUtFreeGpeLists ();
291*29492bb7SDavid van Moolenbroek     AcpiUtDeleteAddressLists ();
292433d6423SLionel Sambuc     return_VOID;
293433d6423SLionel Sambuc }
294433d6423SLionel Sambuc 
295433d6423SLionel Sambuc 
296433d6423SLionel Sambuc /*******************************************************************************
297433d6423SLionel Sambuc  *
298433d6423SLionel Sambuc  * FUNCTION:    AcpiUtSubsystemShutdown
299433d6423SLionel Sambuc  *
300433d6423SLionel Sambuc  * PARAMETERS:  None
301433d6423SLionel Sambuc  *
302433d6423SLionel Sambuc  * RETURN:      None
303433d6423SLionel Sambuc  *
304433d6423SLionel Sambuc  * DESCRIPTION: Shutdown the various components. Do not delete the mutex
305433d6423SLionel Sambuc  *              objects here, because the AML debugger may be still running.
306433d6423SLionel Sambuc  *
307433d6423SLionel Sambuc  ******************************************************************************/
308433d6423SLionel Sambuc 
309433d6423SLionel Sambuc void
AcpiUtSubsystemShutdown(void)310433d6423SLionel Sambuc AcpiUtSubsystemShutdown (
311433d6423SLionel Sambuc     void)
312433d6423SLionel Sambuc {
313433d6423SLionel Sambuc     ACPI_FUNCTION_TRACE (UtSubsystemShutdown);
314433d6423SLionel Sambuc 
315433d6423SLionel Sambuc 
316433d6423SLionel Sambuc #ifndef ACPI_ASL_COMPILER
317433d6423SLionel Sambuc 
318433d6423SLionel Sambuc     /* Close the AcpiEvent Handling */
319433d6423SLionel Sambuc 
320433d6423SLionel Sambuc     AcpiEvTerminate ();
321*29492bb7SDavid van Moolenbroek 
322*29492bb7SDavid van Moolenbroek     /* Delete any dynamic _OSI interfaces */
323*29492bb7SDavid van Moolenbroek 
324*29492bb7SDavid van Moolenbroek     AcpiUtInterfaceTerminate ();
325433d6423SLionel Sambuc #endif
326433d6423SLionel Sambuc 
327433d6423SLionel Sambuc     /* Close the Namespace */
328433d6423SLionel Sambuc 
329433d6423SLionel Sambuc     AcpiNsTerminate ();
330433d6423SLionel Sambuc 
331433d6423SLionel Sambuc     /* Delete the ACPI tables */
332433d6423SLionel Sambuc 
333433d6423SLionel Sambuc     AcpiTbTerminate ();
334433d6423SLionel Sambuc 
335433d6423SLionel Sambuc     /* Close the globals */
336433d6423SLionel Sambuc 
337433d6423SLionel Sambuc     AcpiUtTerminate ();
338433d6423SLionel Sambuc 
339433d6423SLionel Sambuc     /* Purge the local caches */
340433d6423SLionel Sambuc 
341433d6423SLionel Sambuc     (void) AcpiUtDeleteCaches ();
342433d6423SLionel Sambuc     return_VOID;
343433d6423SLionel Sambuc }
344