xref: /titanic_51/usr/src/uts/intel/io/acpica/utilities/utinit.c (revision 385cc6b4ad1792caef3f84eb61eed3f27085801f)
1ae115bc7Smrj /******************************************************************************
2ae115bc7Smrj  *
3ae115bc7Smrj  * Module Name: utinit - Common ACPI subsystem initialization
4ae115bc7Smrj  *
5ae115bc7Smrj  *****************************************************************************/
6ae115bc7Smrj 
726f3cdf0SGordon Ross /*
8*385cc6b4SJerry Jelinek  * Copyright (C) 2000 - 2016, Intel Corp.
9ae115bc7Smrj  * All rights reserved.
10ae115bc7Smrj  *
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.
25ae115bc7Smrj  *
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.
29ae115bc7Smrj  *
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  */
43ae115bc7Smrj 
44ae115bc7Smrj #include "acpi.h"
45aa2aa9a6SDana Myers #include "accommon.h"
46ae115bc7Smrj #include "acnamesp.h"
47ae115bc7Smrj #include "acevents.h"
48db2bae30SDana Myers #include "actables.h"
49ae115bc7Smrj 
50ae115bc7Smrj #define _COMPONENT          ACPI_UTILITIES
51ae115bc7Smrj         ACPI_MODULE_NAME    ("utinit")
52ae115bc7Smrj 
53ae115bc7Smrj /* Local prototypes */
54ae115bc7Smrj 
55ae115bc7Smrj static void AcpiUtTerminate (
56ae115bc7Smrj     void);
57ae115bc7Smrj 
58*385cc6b4SJerry Jelinek #if (!ACPI_REDUCED_HARDWARE)
59ae115bc7Smrj 
60*385cc6b4SJerry Jelinek static void
61*385cc6b4SJerry Jelinek AcpiUtFreeGpeLists (
62*385cc6b4SJerry Jelinek     void);
63*385cc6b4SJerry Jelinek 
64*385cc6b4SJerry Jelinek #else
65*385cc6b4SJerry Jelinek 
66*385cc6b4SJerry Jelinek #define AcpiUtFreeGpeLists()
67*385cc6b4SJerry Jelinek #endif /* !ACPI_REDUCED_HARDWARE */
68*385cc6b4SJerry Jelinek 
69*385cc6b4SJerry Jelinek 
70*385cc6b4SJerry Jelinek #if (!ACPI_REDUCED_HARDWARE)
71ae115bc7Smrj /******************************************************************************
72ae115bc7Smrj  *
73*385cc6b4SJerry Jelinek  * FUNCTION:    AcpiUtFreeGpeLists
74ae115bc7Smrj  *
75ae115bc7Smrj  * PARAMETERS:  none
76ae115bc7Smrj  *
77ae115bc7Smrj  * RETURN:      none
78ae115bc7Smrj  *
79*385cc6b4SJerry Jelinek  * DESCRIPTION: Free global GPE lists
80ae115bc7Smrj  *
81ae115bc7Smrj  ******************************************************************************/
82ae115bc7Smrj 
83ae115bc7Smrj static void
84*385cc6b4SJerry Jelinek AcpiUtFreeGpeLists (
85ae115bc7Smrj     void)
86ae115bc7Smrj {
87ae115bc7Smrj     ACPI_GPE_BLOCK_INFO     *GpeBlock;
88ae115bc7Smrj     ACPI_GPE_BLOCK_INFO     *NextGpeBlock;
89ae115bc7Smrj     ACPI_GPE_XRUPT_INFO     *GpeXruptInfo;
90ae115bc7Smrj     ACPI_GPE_XRUPT_INFO     *NextGpeXruptInfo;
91ae115bc7Smrj 
92ae115bc7Smrj 
93ae115bc7Smrj     /* Free global GPE blocks and related info structures */
94ae115bc7Smrj 
95ae115bc7Smrj     GpeXruptInfo = AcpiGbl_GpeXruptListHead;
96ae115bc7Smrj     while (GpeXruptInfo)
97ae115bc7Smrj     {
98ae115bc7Smrj         GpeBlock = GpeXruptInfo->GpeBlockListHead;
99ae115bc7Smrj         while (GpeBlock)
100ae115bc7Smrj         {
101ae115bc7Smrj             NextGpeBlock = GpeBlock->Next;
102ae115bc7Smrj             ACPI_FREE (GpeBlock->EventInfo);
103ae115bc7Smrj             ACPI_FREE (GpeBlock->RegisterInfo);
104ae115bc7Smrj             ACPI_FREE (GpeBlock);
105ae115bc7Smrj 
106ae115bc7Smrj             GpeBlock = NextGpeBlock;
107ae115bc7Smrj         }
108ae115bc7Smrj         NextGpeXruptInfo = GpeXruptInfo->Next;
109ae115bc7Smrj         ACPI_FREE (GpeXruptInfo);
110ae115bc7Smrj         GpeXruptInfo = NextGpeXruptInfo;
111ae115bc7Smrj     }
112*385cc6b4SJerry Jelinek }
113*385cc6b4SJerry Jelinek #endif /* !ACPI_REDUCED_HARDWARE */
114ae115bc7Smrj 
115*385cc6b4SJerry Jelinek 
116*385cc6b4SJerry Jelinek /*******************************************************************************
117*385cc6b4SJerry Jelinek  *
118*385cc6b4SJerry Jelinek  * FUNCTION:    AcpiUtInitGlobals
119*385cc6b4SJerry Jelinek  *
120*385cc6b4SJerry Jelinek  * PARAMETERS:  None
121*385cc6b4SJerry Jelinek  *
122*385cc6b4SJerry Jelinek  * RETURN:      Status
123*385cc6b4SJerry Jelinek  *
124*385cc6b4SJerry Jelinek  * DESCRIPTION: Initialize ACPICA globals. All globals that require specific
125*385cc6b4SJerry Jelinek  *              initialization should be initialized here. This allows for
126*385cc6b4SJerry Jelinek  *              a warm restart.
127*385cc6b4SJerry Jelinek  *
128*385cc6b4SJerry Jelinek  ******************************************************************************/
129*385cc6b4SJerry Jelinek 
130*385cc6b4SJerry Jelinek ACPI_STATUS
131*385cc6b4SJerry Jelinek AcpiUtInitGlobals (
132*385cc6b4SJerry Jelinek     void)
133*385cc6b4SJerry Jelinek {
134*385cc6b4SJerry Jelinek     ACPI_STATUS             Status;
135*385cc6b4SJerry Jelinek     UINT32                  i;
136*385cc6b4SJerry Jelinek 
137*385cc6b4SJerry Jelinek 
138*385cc6b4SJerry Jelinek     ACPI_FUNCTION_TRACE (UtInitGlobals);
139*385cc6b4SJerry Jelinek 
140*385cc6b4SJerry Jelinek 
141*385cc6b4SJerry Jelinek     /* Create all memory caches */
142*385cc6b4SJerry Jelinek 
143*385cc6b4SJerry Jelinek     Status = AcpiUtCreateCaches ();
144*385cc6b4SJerry Jelinek     if (ACPI_FAILURE (Status))
145*385cc6b4SJerry Jelinek     {
146*385cc6b4SJerry Jelinek         return_ACPI_STATUS (Status);
147*385cc6b4SJerry Jelinek     }
148*385cc6b4SJerry Jelinek 
149*385cc6b4SJerry Jelinek     /* Address Range lists */
150*385cc6b4SJerry Jelinek 
151*385cc6b4SJerry Jelinek     for (i = 0; i < ACPI_ADDRESS_RANGE_MAX; i++)
152*385cc6b4SJerry Jelinek     {
153*385cc6b4SJerry Jelinek         AcpiGbl_AddressRangeList[i] = NULL;
154*385cc6b4SJerry Jelinek     }
155*385cc6b4SJerry Jelinek 
156*385cc6b4SJerry Jelinek     /* Mutex locked flags */
157*385cc6b4SJerry Jelinek 
158*385cc6b4SJerry Jelinek     for (i = 0; i < ACPI_NUM_MUTEX; i++)
159*385cc6b4SJerry Jelinek     {
160*385cc6b4SJerry Jelinek         AcpiGbl_MutexInfo[i].Mutex          = NULL;
161*385cc6b4SJerry Jelinek         AcpiGbl_MutexInfo[i].ThreadId       = ACPI_MUTEX_NOT_ACQUIRED;
162*385cc6b4SJerry Jelinek         AcpiGbl_MutexInfo[i].UseCount       = 0;
163*385cc6b4SJerry Jelinek     }
164*385cc6b4SJerry Jelinek 
165*385cc6b4SJerry Jelinek     for (i = 0; i < ACPI_NUM_OWNERID_MASKS; i++)
166*385cc6b4SJerry Jelinek     {
167*385cc6b4SJerry Jelinek         AcpiGbl_OwnerIdMask[i]              = 0;
168*385cc6b4SJerry Jelinek     }
169*385cc6b4SJerry Jelinek 
170*385cc6b4SJerry Jelinek     /* Last OwnerID is never valid */
171*385cc6b4SJerry Jelinek 
172*385cc6b4SJerry Jelinek     AcpiGbl_OwnerIdMask[ACPI_NUM_OWNERID_MASKS - 1] = 0x80000000;
173*385cc6b4SJerry Jelinek 
174*385cc6b4SJerry Jelinek     /* Event counters */
175*385cc6b4SJerry Jelinek 
176*385cc6b4SJerry Jelinek     AcpiMethodCount                     = 0;
177*385cc6b4SJerry Jelinek     AcpiSciCount                        = 0;
178*385cc6b4SJerry Jelinek     AcpiGpeCount                        = 0;
179*385cc6b4SJerry Jelinek 
180*385cc6b4SJerry Jelinek     for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++)
181*385cc6b4SJerry Jelinek     {
182*385cc6b4SJerry Jelinek         AcpiFixedEventCount[i]              = 0;
183*385cc6b4SJerry Jelinek     }
184*385cc6b4SJerry Jelinek 
185*385cc6b4SJerry Jelinek #if (!ACPI_REDUCED_HARDWARE)
186*385cc6b4SJerry Jelinek 
187*385cc6b4SJerry Jelinek     /* GPE/SCI support */
188*385cc6b4SJerry Jelinek 
189*385cc6b4SJerry Jelinek     AcpiGbl_AllGpesInitialized          = FALSE;
190*385cc6b4SJerry Jelinek     AcpiGbl_GpeXruptListHead            = NULL;
191*385cc6b4SJerry Jelinek     AcpiGbl_GpeFadtBlocks[0]            = NULL;
192*385cc6b4SJerry Jelinek     AcpiGbl_GpeFadtBlocks[1]            = NULL;
193*385cc6b4SJerry Jelinek     AcpiCurrentGpeCount                 = 0;
194*385cc6b4SJerry Jelinek 
195*385cc6b4SJerry Jelinek     AcpiGbl_GlobalEventHandler          = NULL;
196*385cc6b4SJerry Jelinek     AcpiGbl_SciHandlerList              = NULL;
197*385cc6b4SJerry Jelinek 
198*385cc6b4SJerry Jelinek #endif /* !ACPI_REDUCED_HARDWARE */
199*385cc6b4SJerry Jelinek 
200*385cc6b4SJerry Jelinek     /* Global handlers */
201*385cc6b4SJerry Jelinek 
202*385cc6b4SJerry Jelinek     AcpiGbl_GlobalNotify[0].Handler     = NULL;
203*385cc6b4SJerry Jelinek     AcpiGbl_GlobalNotify[1].Handler     = NULL;
204*385cc6b4SJerry Jelinek     AcpiGbl_ExceptionHandler            = NULL;
205*385cc6b4SJerry Jelinek     AcpiGbl_InitHandler                 = NULL;
206*385cc6b4SJerry Jelinek     AcpiGbl_TableHandler                = NULL;
207*385cc6b4SJerry Jelinek     AcpiGbl_InterfaceHandler            = NULL;
208*385cc6b4SJerry Jelinek 
209*385cc6b4SJerry Jelinek     /* Global Lock support */
210*385cc6b4SJerry Jelinek 
211*385cc6b4SJerry Jelinek     AcpiGbl_GlobalLockSemaphore         = NULL;
212*385cc6b4SJerry Jelinek     AcpiGbl_GlobalLockMutex             = NULL;
213*385cc6b4SJerry Jelinek     AcpiGbl_GlobalLockAcquired          = FALSE;
214*385cc6b4SJerry Jelinek     AcpiGbl_GlobalLockHandle            = 0;
215*385cc6b4SJerry Jelinek     AcpiGbl_GlobalLockPresent           = FALSE;
216*385cc6b4SJerry Jelinek 
217*385cc6b4SJerry Jelinek     /* Miscellaneous variables */
218*385cc6b4SJerry Jelinek 
219*385cc6b4SJerry Jelinek     AcpiGbl_DSDT                        = NULL;
220*385cc6b4SJerry Jelinek     AcpiGbl_CmSingleStep                = FALSE;
221*385cc6b4SJerry Jelinek     AcpiGbl_Shutdown                    = FALSE;
222*385cc6b4SJerry Jelinek     AcpiGbl_NsLookupCount               = 0;
223*385cc6b4SJerry Jelinek     AcpiGbl_PsFindCount                 = 0;
224*385cc6b4SJerry Jelinek     AcpiGbl_AcpiHardwarePresent         = TRUE;
225*385cc6b4SJerry Jelinek     AcpiGbl_LastOwnerIdIndex            = 0;
226*385cc6b4SJerry Jelinek     AcpiGbl_NextOwnerIdOffset           = 0;
227*385cc6b4SJerry Jelinek     AcpiGbl_DebuggerConfiguration       = DEBUGGER_THREADING;
228*385cc6b4SJerry Jelinek     AcpiGbl_OsiMutex                    = NULL;
229*385cc6b4SJerry Jelinek     AcpiGbl_MaxLoopIterations           = 0xFFFF;
230*385cc6b4SJerry Jelinek 
231*385cc6b4SJerry Jelinek     /* Hardware oriented */
232*385cc6b4SJerry Jelinek 
233*385cc6b4SJerry Jelinek     AcpiGbl_EventsInitialized           = FALSE;
234*385cc6b4SJerry Jelinek     AcpiGbl_SystemAwakeAndRunning       = TRUE;
235*385cc6b4SJerry Jelinek 
236*385cc6b4SJerry Jelinek     /* Namespace */
237*385cc6b4SJerry Jelinek 
238*385cc6b4SJerry Jelinek     AcpiGbl_ModuleCodeList              = NULL;
239*385cc6b4SJerry Jelinek     AcpiGbl_RootNode                    = NULL;
240*385cc6b4SJerry Jelinek     AcpiGbl_RootNodeStruct.Name.Integer = ACPI_ROOT_NAME;
241*385cc6b4SJerry Jelinek     AcpiGbl_RootNodeStruct.DescriptorType = ACPI_DESC_TYPE_NAMED;
242*385cc6b4SJerry Jelinek     AcpiGbl_RootNodeStruct.Type         = ACPI_TYPE_DEVICE;
243*385cc6b4SJerry Jelinek     AcpiGbl_RootNodeStruct.Parent       = NULL;
244*385cc6b4SJerry Jelinek     AcpiGbl_RootNodeStruct.Child        = NULL;
245*385cc6b4SJerry Jelinek     AcpiGbl_RootNodeStruct.Peer         = NULL;
246*385cc6b4SJerry Jelinek     AcpiGbl_RootNodeStruct.Object       = NULL;
247*385cc6b4SJerry Jelinek 
248*385cc6b4SJerry Jelinek 
249*385cc6b4SJerry Jelinek #ifdef ACPI_DISASSEMBLER
250*385cc6b4SJerry Jelinek     AcpiGbl_ExternalList                = NULL;
251*385cc6b4SJerry Jelinek     AcpiGbl_NumExternalMethods          = 0;
252*385cc6b4SJerry Jelinek     AcpiGbl_ResolvedExternalMethods     = 0;
253*385cc6b4SJerry Jelinek #endif
254*385cc6b4SJerry Jelinek 
255*385cc6b4SJerry Jelinek #ifdef ACPI_DEBUG_OUTPUT
256*385cc6b4SJerry Jelinek     AcpiGbl_LowestStackPointer          = ACPI_CAST_PTR (ACPI_SIZE, ACPI_SIZE_MAX);
257*385cc6b4SJerry Jelinek #endif
258*385cc6b4SJerry Jelinek 
259*385cc6b4SJerry Jelinek #ifdef ACPI_DBG_TRACK_ALLOCATIONS
260*385cc6b4SJerry Jelinek     AcpiGbl_DisplayFinalMemStats        = FALSE;
261*385cc6b4SJerry Jelinek     AcpiGbl_DisableMemTracking          = FALSE;
262*385cc6b4SJerry Jelinek #endif
263*385cc6b4SJerry Jelinek 
264*385cc6b4SJerry Jelinek     return_ACPI_STATUS (AE_OK);
265*385cc6b4SJerry Jelinek }
266*385cc6b4SJerry Jelinek 
267*385cc6b4SJerry Jelinek 
268*385cc6b4SJerry Jelinek /******************************************************************************
269*385cc6b4SJerry Jelinek  *
270*385cc6b4SJerry Jelinek  * FUNCTION:    AcpiUtTerminate
271*385cc6b4SJerry Jelinek  *
272*385cc6b4SJerry Jelinek  * PARAMETERS:  none
273*385cc6b4SJerry Jelinek  *
274*385cc6b4SJerry Jelinek  * RETURN:      none
275*385cc6b4SJerry Jelinek  *
276*385cc6b4SJerry Jelinek  * DESCRIPTION: Free global memory
277*385cc6b4SJerry Jelinek  *
278*385cc6b4SJerry Jelinek  ******************************************************************************/
279*385cc6b4SJerry Jelinek 
280*385cc6b4SJerry Jelinek static void
281*385cc6b4SJerry Jelinek AcpiUtTerminate (
282*385cc6b4SJerry Jelinek     void)
283*385cc6b4SJerry Jelinek {
284*385cc6b4SJerry Jelinek     ACPI_FUNCTION_TRACE (UtTerminate);
285*385cc6b4SJerry Jelinek 
286*385cc6b4SJerry Jelinek     AcpiUtFreeGpeLists ();
287*385cc6b4SJerry Jelinek     AcpiUtDeleteAddressLists ();
288ae115bc7Smrj     return_VOID;
289ae115bc7Smrj }
290ae115bc7Smrj 
291ae115bc7Smrj 
292ae115bc7Smrj /*******************************************************************************
293ae115bc7Smrj  *
294ae115bc7Smrj  * FUNCTION:    AcpiUtSubsystemShutdown
295ae115bc7Smrj  *
29657190917SDana Myers  * PARAMETERS:  None
297ae115bc7Smrj  *
29857190917SDana Myers  * RETURN:      None
299ae115bc7Smrj  *
30057190917SDana Myers  * DESCRIPTION: Shutdown the various components. Do not delete the mutex
30157190917SDana Myers  *              objects here, because the AML debugger may be still running.
302ae115bc7Smrj  *
303ae115bc7Smrj  ******************************************************************************/
304ae115bc7Smrj 
305ae115bc7Smrj void
306ae115bc7Smrj AcpiUtSubsystemShutdown (
307ae115bc7Smrj     void)
308ae115bc7Smrj {
309ae115bc7Smrj     ACPI_FUNCTION_TRACE (UtSubsystemShutdown);
310ae115bc7Smrj 
311ae115bc7Smrj 
312*385cc6b4SJerry Jelinek     /* Just exit if subsystem is already shutdown */
313*385cc6b4SJerry Jelinek 
314*385cc6b4SJerry Jelinek     if (AcpiGbl_Shutdown)
315*385cc6b4SJerry Jelinek     {
316*385cc6b4SJerry Jelinek         ACPI_ERROR ((AE_INFO, "ACPI Subsystem is already terminated"));
317*385cc6b4SJerry Jelinek         return_VOID;
318*385cc6b4SJerry Jelinek     }
319*385cc6b4SJerry Jelinek 
320*385cc6b4SJerry Jelinek     /* Subsystem appears active, go ahead and shut it down */
321*385cc6b4SJerry Jelinek 
322*385cc6b4SJerry Jelinek     AcpiGbl_Shutdown = TRUE;
323*385cc6b4SJerry Jelinek     AcpiGbl_StartupFlags = 0;
324*385cc6b4SJerry Jelinek     ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Shutting down ACPI Subsystem\n"));
325*385cc6b4SJerry Jelinek 
326db2bae30SDana Myers #ifndef ACPI_ASL_COMPILER
327db2bae30SDana Myers 
328ae115bc7Smrj     /* Close the AcpiEvent Handling */
329ae115bc7Smrj 
330ae115bc7Smrj     AcpiEvTerminate ();
33126f3cdf0SGordon Ross 
33226f3cdf0SGordon Ross     /* Delete any dynamic _OSI interfaces */
33326f3cdf0SGordon Ross 
33426f3cdf0SGordon Ross     AcpiUtInterfaceTerminate ();
335db2bae30SDana Myers #endif
336ae115bc7Smrj 
337ae115bc7Smrj     /* Close the Namespace */
338ae115bc7Smrj 
339ae115bc7Smrj     AcpiNsTerminate ();
340ae115bc7Smrj 
341db2bae30SDana Myers     /* Delete the ACPI tables */
342db2bae30SDana Myers 
343db2bae30SDana Myers     AcpiTbTerminate ();
344db2bae30SDana Myers 
345ae115bc7Smrj     /* Close the globals */
346ae115bc7Smrj 
347ae115bc7Smrj     AcpiUtTerminate ();
348ae115bc7Smrj 
349ae115bc7Smrj     /* Purge the local caches */
350ae115bc7Smrj 
351ae115bc7Smrj     (void) AcpiUtDeleteCaches ();
352ae115bc7Smrj     return_VOID;
353ae115bc7Smrj }
354