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