xref: /titanic_51/usr/src/uts/intel/io/acpica/utilities/utxfinit.c (revision 385cc6b4ad1792caef3f84eb61eed3f27085801f)
1*385cc6b4SJerry Jelinek /******************************************************************************
2*385cc6b4SJerry Jelinek  *
3*385cc6b4SJerry Jelinek  * Module Name: utxfinit - External interfaces for ACPICA initialization
4*385cc6b4SJerry Jelinek  *
5*385cc6b4SJerry Jelinek  *****************************************************************************/
6*385cc6b4SJerry Jelinek 
7*385cc6b4SJerry Jelinek /*
8*385cc6b4SJerry Jelinek  * Copyright (C) 2000 - 2016, Intel Corp.
9*385cc6b4SJerry Jelinek  * All rights reserved.
10*385cc6b4SJerry Jelinek  *
11*385cc6b4SJerry Jelinek  * Redistribution and use in source and binary forms, with or without
12*385cc6b4SJerry Jelinek  * modification, are permitted provided that the following conditions
13*385cc6b4SJerry Jelinek  * are met:
14*385cc6b4SJerry Jelinek  * 1. Redistributions of source code must retain the above copyright
15*385cc6b4SJerry Jelinek  *    notice, this list of conditions, and the following disclaimer,
16*385cc6b4SJerry Jelinek  *    without modification.
17*385cc6b4SJerry Jelinek  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18*385cc6b4SJerry Jelinek  *    substantially similar to the "NO WARRANTY" disclaimer below
19*385cc6b4SJerry Jelinek  *    ("Disclaimer") and any redistribution must be conditioned upon
20*385cc6b4SJerry Jelinek  *    including a substantially similar Disclaimer requirement for further
21*385cc6b4SJerry Jelinek  *    binary redistribution.
22*385cc6b4SJerry Jelinek  * 3. Neither the names of the above-listed copyright holders nor the names
23*385cc6b4SJerry Jelinek  *    of any contributors may be used to endorse or promote products derived
24*385cc6b4SJerry Jelinek  *    from this software without specific prior written permission.
25*385cc6b4SJerry Jelinek  *
26*385cc6b4SJerry Jelinek  * Alternatively, this software may be distributed under the terms of the
27*385cc6b4SJerry Jelinek  * GNU General Public License ("GPL") version 2 as published by the Free
28*385cc6b4SJerry Jelinek  * Software Foundation.
29*385cc6b4SJerry Jelinek  *
30*385cc6b4SJerry Jelinek  * NO WARRANTY
31*385cc6b4SJerry Jelinek  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32*385cc6b4SJerry Jelinek  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33*385cc6b4SJerry Jelinek  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34*385cc6b4SJerry Jelinek  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35*385cc6b4SJerry Jelinek  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36*385cc6b4SJerry Jelinek  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37*385cc6b4SJerry Jelinek  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38*385cc6b4SJerry Jelinek  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39*385cc6b4SJerry Jelinek  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40*385cc6b4SJerry Jelinek  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41*385cc6b4SJerry Jelinek  * POSSIBILITY OF SUCH DAMAGES.
42*385cc6b4SJerry Jelinek  */
43*385cc6b4SJerry Jelinek 
44*385cc6b4SJerry Jelinek #define EXPORT_ACPI_INTERFACES
45*385cc6b4SJerry Jelinek 
46*385cc6b4SJerry Jelinek #include "acpi.h"
47*385cc6b4SJerry Jelinek #include "accommon.h"
48*385cc6b4SJerry Jelinek #include "acevents.h"
49*385cc6b4SJerry Jelinek #include "acnamesp.h"
50*385cc6b4SJerry Jelinek #include "acdebug.h"
51*385cc6b4SJerry Jelinek #include "actables.h"
52*385cc6b4SJerry Jelinek 
53*385cc6b4SJerry Jelinek #define _COMPONENT          ACPI_UTILITIES
54*385cc6b4SJerry Jelinek         ACPI_MODULE_NAME    ("utxfinit")
55*385cc6b4SJerry Jelinek 
56*385cc6b4SJerry Jelinek /* For AcpiExec only */
57*385cc6b4SJerry Jelinek void
58*385cc6b4SJerry Jelinek AeDoObjectOverrides (
59*385cc6b4SJerry Jelinek     void);
60*385cc6b4SJerry Jelinek 
61*385cc6b4SJerry Jelinek 
62*385cc6b4SJerry Jelinek /*******************************************************************************
63*385cc6b4SJerry Jelinek  *
64*385cc6b4SJerry Jelinek  * FUNCTION:    AcpiInitializeSubsystem
65*385cc6b4SJerry Jelinek  *
66*385cc6b4SJerry Jelinek  * PARAMETERS:  None
67*385cc6b4SJerry Jelinek  *
68*385cc6b4SJerry Jelinek  * RETURN:      Status
69*385cc6b4SJerry Jelinek  *
70*385cc6b4SJerry Jelinek  * DESCRIPTION: Initializes all global variables. This is the first function
71*385cc6b4SJerry Jelinek  *              called, so any early initialization belongs here.
72*385cc6b4SJerry Jelinek  *
73*385cc6b4SJerry Jelinek  ******************************************************************************/
74*385cc6b4SJerry Jelinek 
75*385cc6b4SJerry Jelinek ACPI_STATUS
76*385cc6b4SJerry Jelinek AcpiInitializeSubsystem (
77*385cc6b4SJerry Jelinek     void)
78*385cc6b4SJerry Jelinek {
79*385cc6b4SJerry Jelinek     ACPI_STATUS             Status;
80*385cc6b4SJerry Jelinek 
81*385cc6b4SJerry Jelinek 
82*385cc6b4SJerry Jelinek     ACPI_FUNCTION_TRACE (AcpiInitializeSubsystem);
83*385cc6b4SJerry Jelinek 
84*385cc6b4SJerry Jelinek 
85*385cc6b4SJerry Jelinek     AcpiGbl_StartupFlags = ACPI_SUBSYSTEM_INITIALIZE;
86*385cc6b4SJerry Jelinek     ACPI_DEBUG_EXEC (AcpiUtInitStackPtrTrace ());
87*385cc6b4SJerry Jelinek 
88*385cc6b4SJerry Jelinek     /* Initialize the OS-Dependent layer */
89*385cc6b4SJerry Jelinek 
90*385cc6b4SJerry Jelinek     Status = AcpiOsInitialize ();
91*385cc6b4SJerry Jelinek     if (ACPI_FAILURE (Status))
92*385cc6b4SJerry Jelinek     {
93*385cc6b4SJerry Jelinek         ACPI_EXCEPTION ((AE_INFO, Status, "During OSL initialization"));
94*385cc6b4SJerry Jelinek         return_ACPI_STATUS (Status);
95*385cc6b4SJerry Jelinek     }
96*385cc6b4SJerry Jelinek 
97*385cc6b4SJerry Jelinek     /* Initialize all globals used by the subsystem */
98*385cc6b4SJerry Jelinek 
99*385cc6b4SJerry Jelinek     Status = AcpiUtInitGlobals ();
100*385cc6b4SJerry Jelinek     if (ACPI_FAILURE (Status))
101*385cc6b4SJerry Jelinek     {
102*385cc6b4SJerry Jelinek         ACPI_EXCEPTION ((AE_INFO, Status, "During initialization of globals"));
103*385cc6b4SJerry Jelinek         return_ACPI_STATUS (Status);
104*385cc6b4SJerry Jelinek     }
105*385cc6b4SJerry Jelinek 
106*385cc6b4SJerry Jelinek     /* Create the default mutex objects */
107*385cc6b4SJerry Jelinek 
108*385cc6b4SJerry Jelinek     Status = AcpiUtMutexInitialize ();
109*385cc6b4SJerry Jelinek     if (ACPI_FAILURE (Status))
110*385cc6b4SJerry Jelinek     {
111*385cc6b4SJerry Jelinek         ACPI_EXCEPTION ((AE_INFO, Status, "During Global Mutex creation"));
112*385cc6b4SJerry Jelinek         return_ACPI_STATUS (Status);
113*385cc6b4SJerry Jelinek     }
114*385cc6b4SJerry Jelinek 
115*385cc6b4SJerry Jelinek     /*
116*385cc6b4SJerry Jelinek      * Initialize the namespace manager and
117*385cc6b4SJerry Jelinek      * the root of the namespace tree
118*385cc6b4SJerry Jelinek      */
119*385cc6b4SJerry Jelinek     Status = AcpiNsRootInitialize ();
120*385cc6b4SJerry Jelinek     if (ACPI_FAILURE (Status))
121*385cc6b4SJerry Jelinek     {
122*385cc6b4SJerry Jelinek         ACPI_EXCEPTION ((AE_INFO, Status, "During Namespace initialization"));
123*385cc6b4SJerry Jelinek         return_ACPI_STATUS (Status);
124*385cc6b4SJerry Jelinek     }
125*385cc6b4SJerry Jelinek 
126*385cc6b4SJerry Jelinek     /* Initialize the global OSI interfaces list with the static names */
127*385cc6b4SJerry Jelinek 
128*385cc6b4SJerry Jelinek     Status = AcpiUtInitializeInterfaces ();
129*385cc6b4SJerry Jelinek     if (ACPI_FAILURE (Status))
130*385cc6b4SJerry Jelinek     {
131*385cc6b4SJerry Jelinek         ACPI_EXCEPTION ((AE_INFO, Status, "During OSI interfaces initialization"));
132*385cc6b4SJerry Jelinek         return_ACPI_STATUS (Status);
133*385cc6b4SJerry Jelinek     }
134*385cc6b4SJerry Jelinek 
135*385cc6b4SJerry Jelinek     return_ACPI_STATUS (AE_OK);
136*385cc6b4SJerry Jelinek }
137*385cc6b4SJerry Jelinek 
138*385cc6b4SJerry Jelinek ACPI_EXPORT_SYMBOL_INIT (AcpiInitializeSubsystem)
139*385cc6b4SJerry Jelinek 
140*385cc6b4SJerry Jelinek 
141*385cc6b4SJerry Jelinek /*******************************************************************************
142*385cc6b4SJerry Jelinek  *
143*385cc6b4SJerry Jelinek  * FUNCTION:    AcpiEnableSubsystem
144*385cc6b4SJerry Jelinek  *
145*385cc6b4SJerry Jelinek  * PARAMETERS:  Flags               - Init/enable Options
146*385cc6b4SJerry Jelinek  *
147*385cc6b4SJerry Jelinek  * RETURN:      Status
148*385cc6b4SJerry Jelinek  *
149*385cc6b4SJerry Jelinek  * DESCRIPTION: Completes the subsystem initialization including hardware.
150*385cc6b4SJerry Jelinek  *              Puts system into ACPI mode if it isn't already.
151*385cc6b4SJerry Jelinek  *
152*385cc6b4SJerry Jelinek  ******************************************************************************/
153*385cc6b4SJerry Jelinek 
154*385cc6b4SJerry Jelinek ACPI_STATUS
155*385cc6b4SJerry Jelinek AcpiEnableSubsystem (
156*385cc6b4SJerry Jelinek     UINT32                  Flags)
157*385cc6b4SJerry Jelinek {
158*385cc6b4SJerry Jelinek     ACPI_STATUS             Status = AE_OK;
159*385cc6b4SJerry Jelinek 
160*385cc6b4SJerry Jelinek 
161*385cc6b4SJerry Jelinek     ACPI_FUNCTION_TRACE (AcpiEnableSubsystem);
162*385cc6b4SJerry Jelinek 
163*385cc6b4SJerry Jelinek 
164*385cc6b4SJerry Jelinek     /*
165*385cc6b4SJerry Jelinek      * The early initialization phase is complete. The namespace is loaded,
166*385cc6b4SJerry Jelinek      * and we can now support address spaces other than Memory, I/O, and
167*385cc6b4SJerry Jelinek      * PCI_Config.
168*385cc6b4SJerry Jelinek      */
169*385cc6b4SJerry Jelinek     AcpiGbl_EarlyInitialization = FALSE;
170*385cc6b4SJerry Jelinek 
171*385cc6b4SJerry Jelinek #if (!ACPI_REDUCED_HARDWARE)
172*385cc6b4SJerry Jelinek 
173*385cc6b4SJerry Jelinek     /* Enable ACPI mode */
174*385cc6b4SJerry Jelinek 
175*385cc6b4SJerry Jelinek     if (!(Flags & ACPI_NO_ACPI_ENABLE))
176*385cc6b4SJerry Jelinek     {
177*385cc6b4SJerry Jelinek         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[Init] Going into ACPI mode\n"));
178*385cc6b4SJerry Jelinek 
179*385cc6b4SJerry Jelinek         AcpiGbl_OriginalMode = AcpiHwGetMode();
180*385cc6b4SJerry Jelinek 
181*385cc6b4SJerry Jelinek         Status = AcpiEnable ();
182*385cc6b4SJerry Jelinek         if (ACPI_FAILURE (Status))
183*385cc6b4SJerry Jelinek         {
184*385cc6b4SJerry Jelinek             ACPI_WARNING ((AE_INFO, "AcpiEnable failed"));
185*385cc6b4SJerry Jelinek             return_ACPI_STATUS (Status);
186*385cc6b4SJerry Jelinek         }
187*385cc6b4SJerry Jelinek     }
188*385cc6b4SJerry Jelinek 
189*385cc6b4SJerry Jelinek     /*
190*385cc6b4SJerry Jelinek      * Obtain a permanent mapping for the FACS. This is required for the
191*385cc6b4SJerry Jelinek      * Global Lock and the Firmware Waking Vector
192*385cc6b4SJerry Jelinek      */
193*385cc6b4SJerry Jelinek     if (!(Flags & ACPI_NO_FACS_INIT))
194*385cc6b4SJerry Jelinek     {
195*385cc6b4SJerry Jelinek         Status = AcpiTbInitializeFacs ();
196*385cc6b4SJerry Jelinek         if (ACPI_FAILURE (Status))
197*385cc6b4SJerry Jelinek         {
198*385cc6b4SJerry Jelinek             ACPI_WARNING ((AE_INFO, "Could not map the FACS table"));
199*385cc6b4SJerry Jelinek             return_ACPI_STATUS (Status);
200*385cc6b4SJerry Jelinek         }
201*385cc6b4SJerry Jelinek     }
202*385cc6b4SJerry Jelinek 
203*385cc6b4SJerry Jelinek     /*
204*385cc6b4SJerry Jelinek      * Initialize ACPI Event handling (Fixed and General Purpose)
205*385cc6b4SJerry Jelinek      *
206*385cc6b4SJerry Jelinek      * Note1: We must have the hardware and events initialized before we can
207*385cc6b4SJerry Jelinek      * execute any control methods safely. Any control method can require
208*385cc6b4SJerry Jelinek      * ACPI hardware support, so the hardware must be fully initialized before
209*385cc6b4SJerry Jelinek      * any method execution!
210*385cc6b4SJerry Jelinek      *
211*385cc6b4SJerry Jelinek      * Note2: Fixed events are initialized and enabled here. GPEs are
212*385cc6b4SJerry Jelinek      * initialized, but cannot be enabled until after the hardware is
213*385cc6b4SJerry Jelinek      * completely initialized (SCI and GlobalLock activated) and the various
214*385cc6b4SJerry Jelinek      * initialization control methods are run (_REG, _STA, _INI) on the
215*385cc6b4SJerry Jelinek      * entire namespace.
216*385cc6b4SJerry Jelinek      */
217*385cc6b4SJerry Jelinek     if (!(Flags & ACPI_NO_EVENT_INIT))
218*385cc6b4SJerry Jelinek     {
219*385cc6b4SJerry Jelinek         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
220*385cc6b4SJerry Jelinek             "[Init] Initializing ACPI events\n"));
221*385cc6b4SJerry Jelinek 
222*385cc6b4SJerry Jelinek         Status = AcpiEvInitializeEvents ();
223*385cc6b4SJerry Jelinek         if (ACPI_FAILURE (Status))
224*385cc6b4SJerry Jelinek         {
225*385cc6b4SJerry Jelinek             return_ACPI_STATUS (Status);
226*385cc6b4SJerry Jelinek         }
227*385cc6b4SJerry Jelinek     }
228*385cc6b4SJerry Jelinek 
229*385cc6b4SJerry Jelinek     /*
230*385cc6b4SJerry Jelinek      * Install the SCI handler and Global Lock handler. This completes the
231*385cc6b4SJerry Jelinek      * hardware initialization.
232*385cc6b4SJerry Jelinek      */
233*385cc6b4SJerry Jelinek     if (!(Flags & ACPI_NO_HANDLER_INIT))
234*385cc6b4SJerry Jelinek     {
235*385cc6b4SJerry Jelinek         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
236*385cc6b4SJerry Jelinek             "[Init] Installing SCI/GL handlers\n"));
237*385cc6b4SJerry Jelinek 
238*385cc6b4SJerry Jelinek         Status = AcpiEvInstallXruptHandlers ();
239*385cc6b4SJerry Jelinek         if (ACPI_FAILURE (Status))
240*385cc6b4SJerry Jelinek         {
241*385cc6b4SJerry Jelinek             return_ACPI_STATUS (Status);
242*385cc6b4SJerry Jelinek         }
243*385cc6b4SJerry Jelinek     }
244*385cc6b4SJerry Jelinek 
245*385cc6b4SJerry Jelinek #endif /* !ACPI_REDUCED_HARDWARE */
246*385cc6b4SJerry Jelinek 
247*385cc6b4SJerry Jelinek     return_ACPI_STATUS (Status);
248*385cc6b4SJerry Jelinek }
249*385cc6b4SJerry Jelinek 
250*385cc6b4SJerry Jelinek ACPI_EXPORT_SYMBOL_INIT (AcpiEnableSubsystem)
251*385cc6b4SJerry Jelinek 
252*385cc6b4SJerry Jelinek 
253*385cc6b4SJerry Jelinek /*******************************************************************************
254*385cc6b4SJerry Jelinek  *
255*385cc6b4SJerry Jelinek  * FUNCTION:    AcpiInitializeObjects
256*385cc6b4SJerry Jelinek  *
257*385cc6b4SJerry Jelinek  * PARAMETERS:  Flags               - Init/enable Options
258*385cc6b4SJerry Jelinek  *
259*385cc6b4SJerry Jelinek  * RETURN:      Status
260*385cc6b4SJerry Jelinek  *
261*385cc6b4SJerry Jelinek  * DESCRIPTION: Completes namespace initialization by initializing device
262*385cc6b4SJerry Jelinek  *              objects and executing AML code for Regions, buffers, etc.
263*385cc6b4SJerry Jelinek  *
264*385cc6b4SJerry Jelinek  ******************************************************************************/
265*385cc6b4SJerry Jelinek 
266*385cc6b4SJerry Jelinek ACPI_STATUS
267*385cc6b4SJerry Jelinek AcpiInitializeObjects (
268*385cc6b4SJerry Jelinek     UINT32                  Flags)
269*385cc6b4SJerry Jelinek {
270*385cc6b4SJerry Jelinek     ACPI_STATUS             Status = AE_OK;
271*385cc6b4SJerry Jelinek 
272*385cc6b4SJerry Jelinek 
273*385cc6b4SJerry Jelinek     ACPI_FUNCTION_TRACE (AcpiInitializeObjects);
274*385cc6b4SJerry Jelinek 
275*385cc6b4SJerry Jelinek 
276*385cc6b4SJerry Jelinek #ifdef ACPI_EXEC_APP
277*385cc6b4SJerry Jelinek     /*
278*385cc6b4SJerry Jelinek      * This call implements the "initialization file" option for AcpiExec.
279*385cc6b4SJerry Jelinek      * This is the precise point that we want to perform the overrides.
280*385cc6b4SJerry Jelinek      */
281*385cc6b4SJerry Jelinek     AeDoObjectOverrides ();
282*385cc6b4SJerry Jelinek #endif
283*385cc6b4SJerry Jelinek 
284*385cc6b4SJerry Jelinek     /*
285*385cc6b4SJerry Jelinek      * Execute any module-level code that was detected during the table load
286*385cc6b4SJerry Jelinek      * phase. Although illegal since ACPI 2.0, there are many machines that
287*385cc6b4SJerry Jelinek      * contain this type of code. Each block of detected executable AML code
288*385cc6b4SJerry Jelinek      * outside of any control method is wrapped with a temporary control
289*385cc6b4SJerry Jelinek      * method object and placed on a global list. The methods on this list
290*385cc6b4SJerry Jelinek      * are executed below.
291*385cc6b4SJerry Jelinek      *
292*385cc6b4SJerry Jelinek      * This case executes the module-level code for all tables only after
293*385cc6b4SJerry Jelinek      * all of the tables have been loaded. It is a legacy option and is
294*385cc6b4SJerry Jelinek      * not compatible with other ACPI implementations. See AcpiNsLoadTable.
295*385cc6b4SJerry Jelinek      */
296*385cc6b4SJerry Jelinek     if (AcpiGbl_GroupModuleLevelCode)
297*385cc6b4SJerry Jelinek     {
298*385cc6b4SJerry Jelinek         AcpiNsExecModuleCodeList ();
299*385cc6b4SJerry Jelinek 
300*385cc6b4SJerry Jelinek         /*
301*385cc6b4SJerry Jelinek          * Initialize the objects that remain uninitialized. This
302*385cc6b4SJerry Jelinek          * runs the executable AML that may be part of the
303*385cc6b4SJerry Jelinek          * declaration of these objects:
304*385cc6b4SJerry Jelinek          * OperationRegions, BufferFields, Buffers, and Packages.
305*385cc6b4SJerry Jelinek          */
306*385cc6b4SJerry Jelinek         if (!(Flags & ACPI_NO_OBJECT_INIT))
307*385cc6b4SJerry Jelinek         {
308*385cc6b4SJerry Jelinek             Status = AcpiNsInitializeObjects ();
309*385cc6b4SJerry Jelinek             if (ACPI_FAILURE (Status))
310*385cc6b4SJerry Jelinek             {
311*385cc6b4SJerry Jelinek                 return_ACPI_STATUS (Status);
312*385cc6b4SJerry Jelinek             }
313*385cc6b4SJerry Jelinek         }
314*385cc6b4SJerry Jelinek     }
315*385cc6b4SJerry Jelinek 
316*385cc6b4SJerry Jelinek     /*
317*385cc6b4SJerry Jelinek      * Initialize all device/region objects in the namespace. This runs
318*385cc6b4SJerry Jelinek      * the device _STA and _INI methods and region _REG methods.
319*385cc6b4SJerry Jelinek      */
320*385cc6b4SJerry Jelinek     if (!(Flags & (ACPI_NO_DEVICE_INIT | ACPI_NO_ADDRESS_SPACE_INIT)))
321*385cc6b4SJerry Jelinek     {
322*385cc6b4SJerry Jelinek         Status = AcpiNsInitializeDevices (Flags);
323*385cc6b4SJerry Jelinek         if (ACPI_FAILURE (Status))
324*385cc6b4SJerry Jelinek         {
325*385cc6b4SJerry Jelinek             return_ACPI_STATUS (Status);
326*385cc6b4SJerry Jelinek         }
327*385cc6b4SJerry Jelinek     }
328*385cc6b4SJerry Jelinek 
329*385cc6b4SJerry Jelinek     /*
330*385cc6b4SJerry Jelinek      * Empty the caches (delete the cached objects) on the assumption that
331*385cc6b4SJerry Jelinek      * the table load filled them up more than they will be at runtime --
332*385cc6b4SJerry Jelinek      * thus wasting non-paged memory.
333*385cc6b4SJerry Jelinek      */
334*385cc6b4SJerry Jelinek     Status = AcpiPurgeCachedObjects ();
335*385cc6b4SJerry Jelinek 
336*385cc6b4SJerry Jelinek     AcpiGbl_StartupFlags |= ACPI_INITIALIZED_OK;
337*385cc6b4SJerry Jelinek     return_ACPI_STATUS (Status);
338*385cc6b4SJerry Jelinek }
339*385cc6b4SJerry Jelinek 
340*385cc6b4SJerry Jelinek ACPI_EXPORT_SYMBOL_INIT (AcpiInitializeObjects)
341