aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/utilities/utxface.c
diff options
context:
space:
mode:
authorBob Moore <robert.moore@intel.com>2005-11-02 00:00:00 -0500
committerLen Brown <len.brown@intel.com>2005-12-10 00:26:05 -0500
commit96db255c8f014ae3497507104e8df809785a619f (patch)
tree79d2c506644370fd6c10d94bd40c419cd3bad148 /drivers/acpi/utilities/utxface.c
parent0897831bb54eb36fd9e2a22da7f0f64be1b20d09 (diff)
[ACPI] ACPICA 20051102
Modified the subsystem initialization sequence to improve GPE support. The GPE initialization has been split into two parts in order to defer execution of the _PRW methods (Power Resources for Wake) until after the hardware is fully initialized and the SCI handler is installed. This allows the _PRW methods to access fields protected by the Global Lock. This will fix systems where a NO_GLOBAL_LOCK exception has been seen during initialization. Fixed a regression with the ConcatenateResTemplate() ASL operator introduced in the 20051021 release. Implemented support for "local" internal ACPI object types within the debugger "Object" command and the acpi_walk_namespace() external interfaces. These local types include RegionFields, BankFields, IndexFields, Alias, and reference objects. Moved common AML resource handling code into a new file, "utresrc.c". This code is shared by both the Resource Manager and the AML Debugger. Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi/utilities/utxface.c')
-rw-r--r--drivers/acpi/utilities/utxface.c52
1 files changed, 38 insertions, 14 deletions
diff --git a/drivers/acpi/utilities/utxface.c b/drivers/acpi/utilities/utxface.c
index f06bd5e5e9d1..57adc5bc02f3 100644
--- a/drivers/acpi/utilities/utxface.c
+++ b/drivers/acpi/utilities/utxface.c
@@ -178,10 +178,14 @@ acpi_status acpi_enable_subsystem(u32 flags)
178 /* 178 /*
179 * Initialize ACPI Event handling (Fixed and General Purpose) 179 * Initialize ACPI Event handling (Fixed and General Purpose)
180 * 180 *
181 * NOTE: We must have the hardware AND events initialized before we can 181 * Note1: We must have the hardware and events initialized before we can
182 * execute ANY control methods SAFELY. Any control method can require 182 * execute any control methods safely. Any control method can require
183 * ACPI hardware support, so the hardware MUST be initialized before 183 * ACPI hardware support, so the hardware must be fully initialized before
184 * execution! 184 * any method execution!
185 *
186 * Note2: Fixed events are initialized and enabled here. GPEs are
187 * initialized, but cannot be enabled until after the hardware is
188 * completely initialized (SCI and global_lock activated)
185 */ 189 */
186 if (!(flags & ACPI_NO_EVENT_INIT)) { 190 if (!(flags & ACPI_NO_EVENT_INIT)) {
187 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, 191 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
@@ -193,8 +197,10 @@ acpi_status acpi_enable_subsystem(u32 flags)
193 } 197 }
194 } 198 }
195 199
196 /* Install the SCI handler and Global Lock handler */ 200 /*
197 201 * Install the SCI handler and Global Lock handler. This completes the
202 * hardware initialization.
203 */
198 if (!(flags & ACPI_NO_HANDLER_INIT)) { 204 if (!(flags & ACPI_NO_HANDLER_INIT)) {
199 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, 205 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
200 "[Init] Installing SCI/GL handlers\n")); 206 "[Init] Installing SCI/GL handlers\n"));
@@ -205,6 +211,24 @@ acpi_status acpi_enable_subsystem(u32 flags)
205 } 211 }
206 } 212 }
207 213
214 /*
215 * Complete the GPE initialization for the GPE blocks defined in the FADT
216 * (GPE block 0 and 1).
217 *
218 * Note1: This is where the _PRW methods are executed for the GPEs. These
219 * methods can only be executed after the SCI and Global Lock handlers are
220 * installed and initialized.
221 *
222 * Note2: Currently, there seems to be no need to run the _REG methods
223 * before execution of the _PRW methods and enabling of the GPEs.
224 */
225 if (!(flags & ACPI_NO_EVENT_INIT)) {
226 status = acpi_ev_install_fadt_gpes();
227 if (ACPI_FAILURE(status)) {
228 return (status);
229 }
230 }
231
208 return_ACPI_STATUS(status); 232 return_ACPI_STATUS(status);
209} 233}
210 234
@@ -230,9 +254,9 @@ acpi_status acpi_initialize_objects(u32 flags)
230 /* 254 /*
231 * Run all _REG methods 255 * Run all _REG methods
232 * 256 *
233 * NOTE: Any objects accessed 257 * Note: Any objects accessed by the _REG methods will be automatically
234 * by the _REG methods will be automatically initialized, even if they 258 * initialized, even if they contain executable AML (see the call to
235 * contain executable AML (see call to acpi_ns_initialize_objects below). 259 * acpi_ns_initialize_objects below).
236 */ 260 */
237 if (!(flags & ACPI_NO_ADDRESS_SPACE_INIT)) { 261 if (!(flags & ACPI_NO_ADDRESS_SPACE_INIT)) {
238 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, 262 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
@@ -245,9 +269,9 @@ acpi_status acpi_initialize_objects(u32 flags)
245 } 269 }
246 270
247 /* 271 /*
248 * Initialize the objects that remain uninitialized. This 272 * Initialize the objects that remain uninitialized. This runs the
249 * runs the executable AML that may be part of the declaration of these 273 * executable AML that may be part of the declaration of these objects:
250 * objects: operation_regions, buffer_fields, Buffers, and Packages. 274 * operation_regions, buffer_fields, Buffers, and Packages.
251 */ 275 */
252 if (!(flags & ACPI_NO_OBJECT_INIT)) { 276 if (!(flags & ACPI_NO_OBJECT_INIT)) {
253 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, 277 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
@@ -260,8 +284,8 @@ acpi_status acpi_initialize_objects(u32 flags)
260 } 284 }
261 285
262 /* 286 /*
263 * Initialize all device objects in the namespace 287 * Initialize all device objects in the namespace. This runs the device
264 * This runs the _STA and _INI methods. 288 * _STA and _INI methods.
265 */ 289 */
266 if (!(flags & ACPI_NO_DEVICE_INIT)) { 290 if (!(flags & ACPI_NO_DEVICE_INIT)) {
267 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, 291 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,