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