xref: /minix3/minix/drivers/power/acpi/utilities/utxfinit.c (revision 29492bb71c7148a089a5afafa0c99409161218df)
1*29492bb7SDavid van Moolenbroek /******************************************************************************
2*29492bb7SDavid van Moolenbroek  *
3*29492bb7SDavid van Moolenbroek  * Module Name: utxfinit - External interfaces for ACPICA initialization
4*29492bb7SDavid van Moolenbroek  *
5*29492bb7SDavid van Moolenbroek  *****************************************************************************/
6*29492bb7SDavid van Moolenbroek 
7*29492bb7SDavid van Moolenbroek /*
8*29492bb7SDavid van Moolenbroek  * Copyright (C) 2000 - 2014, Intel Corp.
9*29492bb7SDavid van Moolenbroek  * All rights reserved.
10*29492bb7SDavid van Moolenbroek  *
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.
25*29492bb7SDavid van Moolenbroek  *
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.
29*29492bb7SDavid van Moolenbroek  *
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  */
43*29492bb7SDavid van Moolenbroek 
44*29492bb7SDavid van Moolenbroek #define EXPORT_ACPI_INTERFACES
45*29492bb7SDavid van Moolenbroek 
46*29492bb7SDavid van Moolenbroek #include "acpi.h"
47*29492bb7SDavid van Moolenbroek #include "accommon.h"
48*29492bb7SDavid van Moolenbroek #include "acevents.h"
49*29492bb7SDavid van Moolenbroek #include "acnamesp.h"
50*29492bb7SDavid van Moolenbroek #include "acdebug.h"
51*29492bb7SDavid van Moolenbroek #include "actables.h"
52*29492bb7SDavid van Moolenbroek 
53*29492bb7SDavid van Moolenbroek #define _COMPONENT          ACPI_UTILITIES
54*29492bb7SDavid van Moolenbroek         ACPI_MODULE_NAME    ("utxfinit")
55*29492bb7SDavid van Moolenbroek 
56*29492bb7SDavid van Moolenbroek /* For AcpiExec only */
57*29492bb7SDavid van Moolenbroek void
58*29492bb7SDavid van Moolenbroek AeDoObjectOverrides (
59*29492bb7SDavid van Moolenbroek     void);
60*29492bb7SDavid van Moolenbroek 
61*29492bb7SDavid van Moolenbroek 
62*29492bb7SDavid van Moolenbroek /*******************************************************************************
63*29492bb7SDavid van Moolenbroek  *
64*29492bb7SDavid van Moolenbroek  * FUNCTION:    AcpiInitializeSubsystem
65*29492bb7SDavid van Moolenbroek  *
66*29492bb7SDavid van Moolenbroek  * PARAMETERS:  None
67*29492bb7SDavid van Moolenbroek  *
68*29492bb7SDavid van Moolenbroek  * RETURN:      Status
69*29492bb7SDavid van Moolenbroek  *
70*29492bb7SDavid van Moolenbroek  * DESCRIPTION: Initializes all global variables. This is the first function
71*29492bb7SDavid van Moolenbroek  *              called, so any early initialization belongs here.
72*29492bb7SDavid van Moolenbroek  *
73*29492bb7SDavid van Moolenbroek  ******************************************************************************/
74*29492bb7SDavid van Moolenbroek 
75*29492bb7SDavid van Moolenbroek ACPI_STATUS
AcpiInitializeSubsystem(void)76*29492bb7SDavid van Moolenbroek AcpiInitializeSubsystem (
77*29492bb7SDavid van Moolenbroek     void)
78*29492bb7SDavid van Moolenbroek {
79*29492bb7SDavid van Moolenbroek     ACPI_STATUS             Status;
80*29492bb7SDavid van Moolenbroek 
81*29492bb7SDavid van Moolenbroek 
82*29492bb7SDavid van Moolenbroek     ACPI_FUNCTION_TRACE (AcpiInitializeSubsystem);
83*29492bb7SDavid van Moolenbroek 
84*29492bb7SDavid van Moolenbroek 
85*29492bb7SDavid van Moolenbroek     AcpiGbl_StartupFlags = ACPI_SUBSYSTEM_INITIALIZE;
86*29492bb7SDavid van Moolenbroek     ACPI_DEBUG_EXEC (AcpiUtInitStackPtrTrace ());
87*29492bb7SDavid van Moolenbroek 
88*29492bb7SDavid van Moolenbroek     /* Initialize the OS-Dependent layer */
89*29492bb7SDavid van Moolenbroek 
90*29492bb7SDavid van Moolenbroek     Status = AcpiOsInitialize ();
91*29492bb7SDavid van Moolenbroek     if (ACPI_FAILURE (Status))
92*29492bb7SDavid van Moolenbroek     {
93*29492bb7SDavid van Moolenbroek         ACPI_EXCEPTION ((AE_INFO, Status, "During OSL initialization"));
94*29492bb7SDavid van Moolenbroek         return_ACPI_STATUS (Status);
95*29492bb7SDavid van Moolenbroek     }
96*29492bb7SDavid van Moolenbroek 
97*29492bb7SDavid van Moolenbroek     /* Initialize all globals used by the subsystem */
98*29492bb7SDavid van Moolenbroek 
99*29492bb7SDavid van Moolenbroek     Status = AcpiUtInitGlobals ();
100*29492bb7SDavid van Moolenbroek     if (ACPI_FAILURE (Status))
101*29492bb7SDavid van Moolenbroek     {
102*29492bb7SDavid van Moolenbroek         ACPI_EXCEPTION ((AE_INFO, Status, "During initialization of globals"));
103*29492bb7SDavid van Moolenbroek         return_ACPI_STATUS (Status);
104*29492bb7SDavid van Moolenbroek     }
105*29492bb7SDavid van Moolenbroek 
106*29492bb7SDavid van Moolenbroek     /* Create the default mutex objects */
107*29492bb7SDavid van Moolenbroek 
108*29492bb7SDavid van Moolenbroek     Status = AcpiUtMutexInitialize ();
109*29492bb7SDavid van Moolenbroek     if (ACPI_FAILURE (Status))
110*29492bb7SDavid van Moolenbroek     {
111*29492bb7SDavid van Moolenbroek         ACPI_EXCEPTION ((AE_INFO, Status, "During Global Mutex creation"));
112*29492bb7SDavid van Moolenbroek         return_ACPI_STATUS (Status);
113*29492bb7SDavid van Moolenbroek     }
114*29492bb7SDavid van Moolenbroek 
115*29492bb7SDavid van Moolenbroek     /*
116*29492bb7SDavid van Moolenbroek      * Initialize the namespace manager and
117*29492bb7SDavid van Moolenbroek      * the root of the namespace tree
118*29492bb7SDavid van Moolenbroek      */
119*29492bb7SDavid van Moolenbroek     Status = AcpiNsRootInitialize ();
120*29492bb7SDavid van Moolenbroek     if (ACPI_FAILURE (Status))
121*29492bb7SDavid van Moolenbroek     {
122*29492bb7SDavid van Moolenbroek         ACPI_EXCEPTION ((AE_INFO, Status, "During Namespace initialization"));
123*29492bb7SDavid van Moolenbroek         return_ACPI_STATUS (Status);
124*29492bb7SDavid van Moolenbroek     }
125*29492bb7SDavid van Moolenbroek 
126*29492bb7SDavid van Moolenbroek     /* Initialize the global OSI interfaces list with the static names */
127*29492bb7SDavid van Moolenbroek 
128*29492bb7SDavid van Moolenbroek     Status = AcpiUtInitializeInterfaces ();
129*29492bb7SDavid van Moolenbroek     if (ACPI_FAILURE (Status))
130*29492bb7SDavid van Moolenbroek     {
131*29492bb7SDavid van Moolenbroek         ACPI_EXCEPTION ((AE_INFO, Status, "During OSI interfaces initialization"));
132*29492bb7SDavid van Moolenbroek         return_ACPI_STATUS (Status);
133*29492bb7SDavid van Moolenbroek     }
134*29492bb7SDavid van Moolenbroek 
135*29492bb7SDavid van Moolenbroek     /* If configured, initialize the AML debugger */
136*29492bb7SDavid van Moolenbroek 
137*29492bb7SDavid van Moolenbroek #ifdef ACPI_DEBUGGER
138*29492bb7SDavid van Moolenbroek     Status = AcpiDbInitialize ();
139*29492bb7SDavid van Moolenbroek     if (ACPI_FAILURE (Status))
140*29492bb7SDavid van Moolenbroek     {
141*29492bb7SDavid van Moolenbroek         ACPI_EXCEPTION ((AE_INFO, Status, "During Debugger initialization"));
142*29492bb7SDavid van Moolenbroek         return_ACPI_STATUS (Status);
143*29492bb7SDavid van Moolenbroek     }
144*29492bb7SDavid van Moolenbroek #endif
145*29492bb7SDavid van Moolenbroek 
146*29492bb7SDavid van Moolenbroek     return_ACPI_STATUS (AE_OK);
147*29492bb7SDavid van Moolenbroek }
148*29492bb7SDavid van Moolenbroek 
ACPI_EXPORT_SYMBOL_INIT(AcpiInitializeSubsystem)149*29492bb7SDavid van Moolenbroek ACPI_EXPORT_SYMBOL_INIT (AcpiInitializeSubsystem)
150*29492bb7SDavid van Moolenbroek 
151*29492bb7SDavid van Moolenbroek 
152*29492bb7SDavid van Moolenbroek /*******************************************************************************
153*29492bb7SDavid van Moolenbroek  *
154*29492bb7SDavid van Moolenbroek  * FUNCTION:    AcpiEnableSubsystem
155*29492bb7SDavid van Moolenbroek  *
156*29492bb7SDavid van Moolenbroek  * PARAMETERS:  Flags               - Init/enable Options
157*29492bb7SDavid van Moolenbroek  *
158*29492bb7SDavid van Moolenbroek  * RETURN:      Status
159*29492bb7SDavid van Moolenbroek  *
160*29492bb7SDavid van Moolenbroek  * DESCRIPTION: Completes the subsystem initialization including hardware.
161*29492bb7SDavid van Moolenbroek  *              Puts system into ACPI mode if it isn't already.
162*29492bb7SDavid van Moolenbroek  *
163*29492bb7SDavid van Moolenbroek  ******************************************************************************/
164*29492bb7SDavid van Moolenbroek 
165*29492bb7SDavid van Moolenbroek ACPI_STATUS
166*29492bb7SDavid van Moolenbroek AcpiEnableSubsystem (
167*29492bb7SDavid van Moolenbroek     UINT32                  Flags)
168*29492bb7SDavid van Moolenbroek {
169*29492bb7SDavid van Moolenbroek     ACPI_STATUS             Status = AE_OK;
170*29492bb7SDavid van Moolenbroek 
171*29492bb7SDavid van Moolenbroek 
172*29492bb7SDavid van Moolenbroek     ACPI_FUNCTION_TRACE (AcpiEnableSubsystem);
173*29492bb7SDavid van Moolenbroek 
174*29492bb7SDavid van Moolenbroek 
175*29492bb7SDavid van Moolenbroek #if (!ACPI_REDUCED_HARDWARE)
176*29492bb7SDavid van Moolenbroek 
177*29492bb7SDavid van Moolenbroek     /* Enable ACPI mode */
178*29492bb7SDavid van Moolenbroek 
179*29492bb7SDavid van Moolenbroek     if (!(Flags & ACPI_NO_ACPI_ENABLE))
180*29492bb7SDavid van Moolenbroek     {
181*29492bb7SDavid van Moolenbroek         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[Init] Going into ACPI mode\n"));
182*29492bb7SDavid van Moolenbroek 
183*29492bb7SDavid van Moolenbroek         AcpiGbl_OriginalMode = AcpiHwGetMode();
184*29492bb7SDavid van Moolenbroek 
185*29492bb7SDavid van Moolenbroek         Status = AcpiEnable ();
186*29492bb7SDavid van Moolenbroek         if (ACPI_FAILURE (Status))
187*29492bb7SDavid van Moolenbroek         {
188*29492bb7SDavid van Moolenbroek             ACPI_WARNING ((AE_INFO, "AcpiEnable failed"));
189*29492bb7SDavid van Moolenbroek             return_ACPI_STATUS (Status);
190*29492bb7SDavid van Moolenbroek         }
191*29492bb7SDavid van Moolenbroek     }
192*29492bb7SDavid van Moolenbroek 
193*29492bb7SDavid van Moolenbroek     /*
194*29492bb7SDavid van Moolenbroek      * Obtain a permanent mapping for the FACS. This is required for the
195*29492bb7SDavid van Moolenbroek      * Global Lock and the Firmware Waking Vector
196*29492bb7SDavid van Moolenbroek      */
197*29492bb7SDavid van Moolenbroek     Status = AcpiTbInitializeFacs ();
198*29492bb7SDavid van Moolenbroek     if (ACPI_FAILURE (Status))
199*29492bb7SDavid van Moolenbroek     {
200*29492bb7SDavid van Moolenbroek         ACPI_WARNING ((AE_INFO, "Could not map the FACS table"));
201*29492bb7SDavid van Moolenbroek         return_ACPI_STATUS (Status);
202*29492bb7SDavid van Moolenbroek     }
203*29492bb7SDavid van Moolenbroek 
204*29492bb7SDavid van Moolenbroek #endif /* !ACPI_REDUCED_HARDWARE */
205*29492bb7SDavid van Moolenbroek 
206*29492bb7SDavid van Moolenbroek     /*
207*29492bb7SDavid van Moolenbroek      * Install the default OpRegion handlers. These are installed unless
208*29492bb7SDavid van Moolenbroek      * other handlers have already been installed via the
209*29492bb7SDavid van Moolenbroek      * InstallAddressSpaceHandler interface.
210*29492bb7SDavid van Moolenbroek      */
211*29492bb7SDavid van Moolenbroek     if (!(Flags & ACPI_NO_ADDRESS_SPACE_INIT))
212*29492bb7SDavid van Moolenbroek     {
213*29492bb7SDavid van Moolenbroek         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
214*29492bb7SDavid van Moolenbroek             "[Init] Installing default address space handlers\n"));
215*29492bb7SDavid van Moolenbroek 
216*29492bb7SDavid van Moolenbroek         Status = AcpiEvInstallRegionHandlers ();
217*29492bb7SDavid van Moolenbroek         if (ACPI_FAILURE (Status))
218*29492bb7SDavid van Moolenbroek         {
219*29492bb7SDavid van Moolenbroek             return_ACPI_STATUS (Status);
220*29492bb7SDavid van Moolenbroek         }
221*29492bb7SDavid van Moolenbroek     }
222*29492bb7SDavid van Moolenbroek 
223*29492bb7SDavid van Moolenbroek #if (!ACPI_REDUCED_HARDWARE)
224*29492bb7SDavid van Moolenbroek     /*
225*29492bb7SDavid van Moolenbroek      * Initialize ACPI Event handling (Fixed and General Purpose)
226*29492bb7SDavid van Moolenbroek      *
227*29492bb7SDavid van Moolenbroek      * Note1: We must have the hardware and events initialized before we can
228*29492bb7SDavid van Moolenbroek      * execute any control methods safely. Any control method can require
229*29492bb7SDavid van Moolenbroek      * ACPI hardware support, so the hardware must be fully initialized before
230*29492bb7SDavid van Moolenbroek      * any method execution!
231*29492bb7SDavid van Moolenbroek      *
232*29492bb7SDavid van Moolenbroek      * Note2: Fixed events are initialized and enabled here. GPEs are
233*29492bb7SDavid van Moolenbroek      * initialized, but cannot be enabled until after the hardware is
234*29492bb7SDavid van Moolenbroek      * completely initialized (SCI and GlobalLock activated) and the various
235*29492bb7SDavid van Moolenbroek      * initialization control methods are run (_REG, _STA, _INI) on the
236*29492bb7SDavid van Moolenbroek      * entire namespace.
237*29492bb7SDavid van Moolenbroek      */
238*29492bb7SDavid van Moolenbroek     if (!(Flags & ACPI_NO_EVENT_INIT))
239*29492bb7SDavid van Moolenbroek     {
240*29492bb7SDavid van Moolenbroek         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
241*29492bb7SDavid van Moolenbroek             "[Init] Initializing ACPI events\n"));
242*29492bb7SDavid van Moolenbroek 
243*29492bb7SDavid van Moolenbroek         Status = AcpiEvInitializeEvents ();
244*29492bb7SDavid van Moolenbroek         if (ACPI_FAILURE (Status))
245*29492bb7SDavid van Moolenbroek         {
246*29492bb7SDavid van Moolenbroek             return_ACPI_STATUS (Status);
247*29492bb7SDavid van Moolenbroek         }
248*29492bb7SDavid van Moolenbroek     }
249*29492bb7SDavid van Moolenbroek 
250*29492bb7SDavid van Moolenbroek     /*
251*29492bb7SDavid van Moolenbroek      * Install the SCI handler and Global Lock handler. This completes the
252*29492bb7SDavid van Moolenbroek      * hardware initialization.
253*29492bb7SDavid van Moolenbroek      */
254*29492bb7SDavid van Moolenbroek     if (!(Flags & ACPI_NO_HANDLER_INIT))
255*29492bb7SDavid van Moolenbroek     {
256*29492bb7SDavid van Moolenbroek         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
257*29492bb7SDavid van Moolenbroek             "[Init] Installing SCI/GL handlers\n"));
258*29492bb7SDavid van Moolenbroek 
259*29492bb7SDavid van Moolenbroek         Status = AcpiEvInstallXruptHandlers ();
260*29492bb7SDavid van Moolenbroek         if (ACPI_FAILURE (Status))
261*29492bb7SDavid van Moolenbroek         {
262*29492bb7SDavid van Moolenbroek             return_ACPI_STATUS (Status);
263*29492bb7SDavid van Moolenbroek         }
264*29492bb7SDavid van Moolenbroek     }
265*29492bb7SDavid van Moolenbroek 
266*29492bb7SDavid van Moolenbroek #endif /* !ACPI_REDUCED_HARDWARE */
267*29492bb7SDavid van Moolenbroek 
268*29492bb7SDavid van Moolenbroek     return_ACPI_STATUS (Status);
269*29492bb7SDavid van Moolenbroek }
270*29492bb7SDavid van Moolenbroek 
ACPI_EXPORT_SYMBOL_INIT(AcpiEnableSubsystem)271*29492bb7SDavid van Moolenbroek ACPI_EXPORT_SYMBOL_INIT (AcpiEnableSubsystem)
272*29492bb7SDavid van Moolenbroek 
273*29492bb7SDavid van Moolenbroek 
274*29492bb7SDavid van Moolenbroek /*******************************************************************************
275*29492bb7SDavid van Moolenbroek  *
276*29492bb7SDavid van Moolenbroek  * FUNCTION:    AcpiInitializeObjects
277*29492bb7SDavid van Moolenbroek  *
278*29492bb7SDavid van Moolenbroek  * PARAMETERS:  Flags               - Init/enable Options
279*29492bb7SDavid van Moolenbroek  *
280*29492bb7SDavid van Moolenbroek  * RETURN:      Status
281*29492bb7SDavid van Moolenbroek  *
282*29492bb7SDavid van Moolenbroek  * DESCRIPTION: Completes namespace initialization by initializing device
283*29492bb7SDavid van Moolenbroek  *              objects and executing AML code for Regions, buffers, etc.
284*29492bb7SDavid van Moolenbroek  *
285*29492bb7SDavid van Moolenbroek  ******************************************************************************/
286*29492bb7SDavid van Moolenbroek 
287*29492bb7SDavid van Moolenbroek ACPI_STATUS
288*29492bb7SDavid van Moolenbroek AcpiInitializeObjects (
289*29492bb7SDavid van Moolenbroek     UINT32                  Flags)
290*29492bb7SDavid van Moolenbroek {
291*29492bb7SDavid van Moolenbroek     ACPI_STATUS             Status = AE_OK;
292*29492bb7SDavid van Moolenbroek 
293*29492bb7SDavid van Moolenbroek 
294*29492bb7SDavid van Moolenbroek     ACPI_FUNCTION_TRACE (AcpiInitializeObjects);
295*29492bb7SDavid van Moolenbroek 
296*29492bb7SDavid van Moolenbroek 
297*29492bb7SDavid van Moolenbroek     /*
298*29492bb7SDavid van Moolenbroek      * Run all _REG methods
299*29492bb7SDavid van Moolenbroek      *
300*29492bb7SDavid van Moolenbroek      * Note: Any objects accessed by the _REG methods will be automatically
301*29492bb7SDavid van Moolenbroek      * initialized, even if they contain executable AML (see the call to
302*29492bb7SDavid van Moolenbroek      * AcpiNsInitializeObjects below).
303*29492bb7SDavid van Moolenbroek      */
304*29492bb7SDavid van Moolenbroek     if (!(Flags & ACPI_NO_ADDRESS_SPACE_INIT))
305*29492bb7SDavid van Moolenbroek     {
306*29492bb7SDavid van Moolenbroek         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
307*29492bb7SDavid van Moolenbroek             "[Init] Executing _REG OpRegion methods\n"));
308*29492bb7SDavid van Moolenbroek 
309*29492bb7SDavid van Moolenbroek         Status = AcpiEvInitializeOpRegions ();
310*29492bb7SDavid van Moolenbroek         if (ACPI_FAILURE (Status))
311*29492bb7SDavid van Moolenbroek         {
312*29492bb7SDavid van Moolenbroek             return_ACPI_STATUS (Status);
313*29492bb7SDavid van Moolenbroek         }
314*29492bb7SDavid van Moolenbroek     }
315*29492bb7SDavid van Moolenbroek 
316*29492bb7SDavid van Moolenbroek #ifdef ACPI_EXEC_APP
317*29492bb7SDavid van Moolenbroek     /*
318*29492bb7SDavid van Moolenbroek      * This call implements the "initialization file" option for AcpiExec.
319*29492bb7SDavid van Moolenbroek      * This is the precise point that we want to perform the overrides.
320*29492bb7SDavid van Moolenbroek      */
321*29492bb7SDavid van Moolenbroek     AeDoObjectOverrides ();
322*29492bb7SDavid van Moolenbroek #endif
323*29492bb7SDavid van Moolenbroek 
324*29492bb7SDavid van Moolenbroek     /*
325*29492bb7SDavid van Moolenbroek      * Execute any module-level code that was detected during the table load
326*29492bb7SDavid van Moolenbroek      * phase. Although illegal since ACPI 2.0, there are many machines that
327*29492bb7SDavid van Moolenbroek      * contain this type of code. Each block of detected executable AML code
328*29492bb7SDavid van Moolenbroek      * outside of any control method is wrapped with a temporary control
329*29492bb7SDavid van Moolenbroek      * method object and placed on a global list. The methods on this list
330*29492bb7SDavid van Moolenbroek      * are executed below.
331*29492bb7SDavid van Moolenbroek      */
332*29492bb7SDavid van Moolenbroek     AcpiNsExecModuleCodeList ();
333*29492bb7SDavid van Moolenbroek 
334*29492bb7SDavid van Moolenbroek     /*
335*29492bb7SDavid van Moolenbroek      * Initialize the objects that remain uninitialized. This runs the
336*29492bb7SDavid van Moolenbroek      * executable AML that may be part of the declaration of these objects:
337*29492bb7SDavid van Moolenbroek      * OperationRegions, BufferFields, Buffers, and Packages.
338*29492bb7SDavid van Moolenbroek      */
339*29492bb7SDavid van Moolenbroek     if (!(Flags & ACPI_NO_OBJECT_INIT))
340*29492bb7SDavid van Moolenbroek     {
341*29492bb7SDavid van Moolenbroek         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
342*29492bb7SDavid van Moolenbroek             "[Init] Completing Initialization of ACPI Objects\n"));
343*29492bb7SDavid van Moolenbroek 
344*29492bb7SDavid van Moolenbroek         Status = AcpiNsInitializeObjects ();
345*29492bb7SDavid van Moolenbroek         if (ACPI_FAILURE (Status))
346*29492bb7SDavid van Moolenbroek         {
347*29492bb7SDavid van Moolenbroek             return_ACPI_STATUS (Status);
348*29492bb7SDavid van Moolenbroek         }
349*29492bb7SDavid van Moolenbroek     }
350*29492bb7SDavid van Moolenbroek 
351*29492bb7SDavid van Moolenbroek     /*
352*29492bb7SDavid van Moolenbroek      * Initialize all device objects in the namespace. This runs the device
353*29492bb7SDavid van Moolenbroek      * _STA and _INI methods.
354*29492bb7SDavid van Moolenbroek      */
355*29492bb7SDavid van Moolenbroek     if (!(Flags & ACPI_NO_DEVICE_INIT))
356*29492bb7SDavid van Moolenbroek     {
357*29492bb7SDavid van Moolenbroek         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
358*29492bb7SDavid van Moolenbroek             "[Init] Initializing ACPI Devices\n"));
359*29492bb7SDavid van Moolenbroek 
360*29492bb7SDavid van Moolenbroek         Status = AcpiNsInitializeDevices ();
361*29492bb7SDavid van Moolenbroek         if (ACPI_FAILURE (Status))
362*29492bb7SDavid van Moolenbroek         {
363*29492bb7SDavid van Moolenbroek             return_ACPI_STATUS (Status);
364*29492bb7SDavid van Moolenbroek         }
365*29492bb7SDavid van Moolenbroek     }
366*29492bb7SDavid van Moolenbroek 
367*29492bb7SDavid van Moolenbroek     /*
368*29492bb7SDavid van Moolenbroek      * Empty the caches (delete the cached objects) on the assumption that
369*29492bb7SDavid van Moolenbroek      * the table load filled them up more than they will be at runtime --
370*29492bb7SDavid van Moolenbroek      * thus wasting non-paged memory.
371*29492bb7SDavid van Moolenbroek      */
372*29492bb7SDavid van Moolenbroek     Status = AcpiPurgeCachedObjects ();
373*29492bb7SDavid van Moolenbroek 
374*29492bb7SDavid van Moolenbroek     AcpiGbl_StartupFlags |= ACPI_INITIALIZED_OK;
375*29492bb7SDavid van Moolenbroek     return_ACPI_STATUS (Status);
376*29492bb7SDavid van Moolenbroek }
377*29492bb7SDavid van Moolenbroek 
378*29492bb7SDavid van Moolenbroek ACPI_EXPORT_SYMBOL_INIT (AcpiInitializeObjects)
379