blob: 308a960871be8a7a919fe1e070cda35d2abfd5ec [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/******************************************************************************
2 *
3 * Module Name: utxface - External interfaces for "global" ACPI functions
4 *
5 *****************************************************************************/
6
7/*
Bob Moore4a90c7e2006-01-13 16:22:00 -05008 * Copyright (C) 2000 - 2006, R. Byron Moore
Linus Torvalds1da177e2005-04-16 15:20:36 -07009 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#include <linux/module.h>
45
46#include <acpi/acpi.h>
47#include <acpi/acevents.h>
48#include <acpi/acnamesp.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -070049#include <acpi/acdebug.h>
50
51#define _COMPONENT ACPI_UTILITIES
Len Brown4be44fc2005-08-05 00:44:28 -040052ACPI_MODULE_NAME("utxface")
Linus Torvalds1da177e2005-04-16 15:20:36 -070053
54/*******************************************************************************
55 *
56 * FUNCTION: acpi_initialize_subsystem
57 *
58 * PARAMETERS: None
59 *
60 * RETURN: Status
61 *
62 * DESCRIPTION: Initializes all global variables. This is the first function
63 * called, so any early initialization belongs here.
64 *
65 ******************************************************************************/
Len Brown4be44fc2005-08-05 00:44:28 -040066acpi_status acpi_initialize_subsystem(void)
Linus Torvalds1da177e2005-04-16 15:20:36 -070067{
Len Brown4be44fc2005-08-05 00:44:28 -040068 acpi_status status;
Linus Torvalds1da177e2005-04-16 15:20:36 -070069
Len Brown4be44fc2005-08-05 00:44:28 -040070 ACPI_FUNCTION_TRACE("acpi_initialize_subsystem");
Robert Moore44f6c012005-04-18 22:49:35 -040071
Len Brown4be44fc2005-08-05 00:44:28 -040072 ACPI_DEBUG_EXEC(acpi_ut_init_stack_ptr_trace());
Linus Torvalds1da177e2005-04-16 15:20:36 -070073
Linus Torvalds1da177e2005-04-16 15:20:36 -070074 /* Initialize the OS-Dependent layer */
75
Len Brown4be44fc2005-08-05 00:44:28 -040076 status = acpi_os_initialize();
77 if (ACPI_FAILURE(status)) {
Bob Mooreb8e4d892006-01-27 16:43:00 -050078 ACPI_EXCEPTION((AE_INFO, status, "During OSL initialization"));
Len Brown4be44fc2005-08-05 00:44:28 -040079 return_ACPI_STATUS(status);
Linus Torvalds1da177e2005-04-16 15:20:36 -070080 }
81
Robert Moore73459f72005-06-24 00:00:00 -040082 /* Initialize all globals used by the subsystem */
83
Len Brown4be44fc2005-08-05 00:44:28 -040084 acpi_ut_init_globals();
Robert Moore73459f72005-06-24 00:00:00 -040085
Linus Torvalds1da177e2005-04-16 15:20:36 -070086 /* Create the default mutex objects */
87
Len Brown4be44fc2005-08-05 00:44:28 -040088 status = acpi_ut_mutex_initialize();
89 if (ACPI_FAILURE(status)) {
Bob Mooreb8e4d892006-01-27 16:43:00 -050090 ACPI_EXCEPTION((AE_INFO, status,
91 "During Global Mutex creation"));
Len Brown4be44fc2005-08-05 00:44:28 -040092 return_ACPI_STATUS(status);
Linus Torvalds1da177e2005-04-16 15:20:36 -070093 }
94
95 /*
96 * Initialize the namespace manager and
97 * the root of the namespace tree
98 */
Len Brown4be44fc2005-08-05 00:44:28 -040099 status = acpi_ns_root_initialize();
100 if (ACPI_FAILURE(status)) {
Bob Mooreb8e4d892006-01-27 16:43:00 -0500101 ACPI_EXCEPTION((AE_INFO, status,
102 "During Namespace initialization"));
Len Brown4be44fc2005-08-05 00:44:28 -0400103 return_ACPI_STATUS(status);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700104 }
105
Linus Torvalds1da177e2005-04-16 15:20:36 -0700106 /* If configured, initialize the AML debugger */
107
Len Brown4be44fc2005-08-05 00:44:28 -0400108 ACPI_DEBUGGER_EXEC(status = acpi_db_initialize());
Len Brown4be44fc2005-08-05 00:44:28 -0400109 return_ACPI_STATUS(status);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700110}
111
Linus Torvalds1da177e2005-04-16 15:20:36 -0700112/*******************************************************************************
113 *
114 * FUNCTION: acpi_enable_subsystem
115 *
116 * PARAMETERS: Flags - Init/enable Options
117 *
118 * RETURN: Status
119 *
120 * DESCRIPTION: Completes the subsystem initialization including hardware.
121 * Puts system into ACPI mode if it isn't already.
122 *
123 ******************************************************************************/
124
Len Brown4be44fc2005-08-05 00:44:28 -0400125acpi_status acpi_enable_subsystem(u32 flags)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700126{
Len Brown4be44fc2005-08-05 00:44:28 -0400127 acpi_status status = AE_OK;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700128
Len Brown4be44fc2005-08-05 00:44:28 -0400129 ACPI_FUNCTION_TRACE("acpi_enable_subsystem");
Linus Torvalds1da177e2005-04-16 15:20:36 -0700130
131 /*
132 * We must initialize the hardware before we can enable ACPI.
133 * The values from the FADT are validated here.
134 */
135 if (!(flags & ACPI_NO_HARDWARE_INIT)) {
Len Brown4be44fc2005-08-05 00:44:28 -0400136 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
137 "[Init] Initializing ACPI hardware\n"));
Linus Torvalds1da177e2005-04-16 15:20:36 -0700138
Len Brown4be44fc2005-08-05 00:44:28 -0400139 status = acpi_hw_initialize();
140 if (ACPI_FAILURE(status)) {
141 return_ACPI_STATUS(status);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700142 }
143 }
144
145 /* Enable ACPI mode */
146
147 if (!(flags & ACPI_NO_ACPI_ENABLE)) {
Len Brown4be44fc2005-08-05 00:44:28 -0400148 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
149 "[Init] Going into ACPI mode\n"));
Linus Torvalds1da177e2005-04-16 15:20:36 -0700150
151 acpi_gbl_original_mode = acpi_hw_get_mode();
152
Len Brown4be44fc2005-08-05 00:44:28 -0400153 status = acpi_enable();
154 if (ACPI_FAILURE(status)) {
Bob Mooreb8e4d892006-01-27 16:43:00 -0500155 ACPI_WARNING((AE_INFO, "acpi_enable failed"));
Len Brown4be44fc2005-08-05 00:44:28 -0400156 return_ACPI_STATUS(status);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700157 }
158 }
159
160 /*
161 * Install the default op_region handlers. These are installed unless
162 * other handlers have already been installed via the
163 * install_address_space_handler interface.
164 */
165 if (!(flags & ACPI_NO_ADDRESS_SPACE_INIT)) {
Len Brown4be44fc2005-08-05 00:44:28 -0400166 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
167 "[Init] Installing default address space handlers\n"));
Linus Torvalds1da177e2005-04-16 15:20:36 -0700168
Len Brown4be44fc2005-08-05 00:44:28 -0400169 status = acpi_ev_install_region_handlers();
170 if (ACPI_FAILURE(status)) {
171 return_ACPI_STATUS(status);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700172 }
173 }
174
175 /*
176 * Initialize ACPI Event handling (Fixed and General Purpose)
177 *
Bob Moore96db2552005-11-02 00:00:00 -0500178 * Note1: We must have the hardware and events initialized before we can
179 * execute any control methods safely. Any control method can require
180 * ACPI hardware support, so the hardware must be fully initialized before
181 * any method execution!
182 *
183 * Note2: Fixed events are initialized and enabled here. GPEs are
184 * initialized, but cannot be enabled until after the hardware is
185 * completely initialized (SCI and global_lock activated)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700186 */
187 if (!(flags & ACPI_NO_EVENT_INIT)) {
Len Brown4be44fc2005-08-05 00:44:28 -0400188 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
189 "[Init] Initializing ACPI events\n"));
Linus Torvalds1da177e2005-04-16 15:20:36 -0700190
Len Brown4be44fc2005-08-05 00:44:28 -0400191 status = acpi_ev_initialize_events();
192 if (ACPI_FAILURE(status)) {
193 return_ACPI_STATUS(status);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700194 }
195 }
196
Bob Moore96db2552005-11-02 00:00:00 -0500197 /*
198 * Install the SCI handler and Global Lock handler. This completes the
199 * hardware initialization.
200 */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700201 if (!(flags & ACPI_NO_HANDLER_INIT)) {
Len Brown4be44fc2005-08-05 00:44:28 -0400202 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
203 "[Init] Installing SCI/GL handlers\n"));
Linus Torvalds1da177e2005-04-16 15:20:36 -0700204
Len Brown4be44fc2005-08-05 00:44:28 -0400205 status = acpi_ev_install_xrupt_handlers();
206 if (ACPI_FAILURE(status)) {
207 return_ACPI_STATUS(status);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700208 }
209 }
210
Bob Moore96db2552005-11-02 00:00:00 -0500211 /*
212 * Complete the GPE initialization for the GPE blocks defined in the FADT
213 * (GPE block 0 and 1).
214 *
215 * Note1: This is where the _PRW methods are executed for the GPEs. These
216 * methods can only be executed after the SCI and Global Lock handlers are
217 * installed and initialized.
218 *
219 * Note2: Currently, there seems to be no need to run the _REG methods
220 * before execution of the _PRW methods and enabling of the GPEs.
221 */
222 if (!(flags & ACPI_NO_EVENT_INIT)) {
223 status = acpi_ev_install_fadt_gpes();
224 if (ACPI_FAILURE(status)) {
225 return (status);
226 }
227 }
228
Len Brown4be44fc2005-08-05 00:44:28 -0400229 return_ACPI_STATUS(status);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700230}
231
232/*******************************************************************************
233 *
234 * FUNCTION: acpi_initialize_objects
235 *
236 * PARAMETERS: Flags - Init/enable Options
237 *
238 * RETURN: Status
239 *
240 * DESCRIPTION: Completes namespace initialization by initializing device
241 * objects and executing AML code for Regions, buffers, etc.
242 *
243 ******************************************************************************/
244
Len Brown4be44fc2005-08-05 00:44:28 -0400245acpi_status acpi_initialize_objects(u32 flags)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700246{
Len Brown4be44fc2005-08-05 00:44:28 -0400247 acpi_status status = AE_OK;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700248
Len Brown4be44fc2005-08-05 00:44:28 -0400249 ACPI_FUNCTION_TRACE("acpi_initialize_objects");
Linus Torvalds1da177e2005-04-16 15:20:36 -0700250
251 /*
252 * Run all _REG methods
253 *
Bob Moore96db2552005-11-02 00:00:00 -0500254 * Note: Any objects accessed by the _REG methods will be automatically
255 * initialized, even if they contain executable AML (see the call to
256 * acpi_ns_initialize_objects below).
Linus Torvalds1da177e2005-04-16 15:20:36 -0700257 */
258 if (!(flags & ACPI_NO_ADDRESS_SPACE_INIT)) {
Len Brown4be44fc2005-08-05 00:44:28 -0400259 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
260 "[Init] Executing _REG op_region methods\n"));
Linus Torvalds1da177e2005-04-16 15:20:36 -0700261
Len Brown4be44fc2005-08-05 00:44:28 -0400262 status = acpi_ev_initialize_op_regions();
263 if (ACPI_FAILURE(status)) {
264 return_ACPI_STATUS(status);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700265 }
266 }
267
268 /*
Bob Moore96db2552005-11-02 00:00:00 -0500269 * Initialize the objects that remain uninitialized. This runs the
270 * executable AML that may be part of the declaration of these objects:
271 * operation_regions, buffer_fields, Buffers, and Packages.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700272 */
273 if (!(flags & ACPI_NO_OBJECT_INIT)) {
Len Brown4be44fc2005-08-05 00:44:28 -0400274 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
275 "[Init] Completing Initialization of ACPI Objects\n"));
Linus Torvalds1da177e2005-04-16 15:20:36 -0700276
Len Brown4be44fc2005-08-05 00:44:28 -0400277 status = acpi_ns_initialize_objects();
278 if (ACPI_FAILURE(status)) {
279 return_ACPI_STATUS(status);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700280 }
281 }
282
283 /*
Bob Moore96db2552005-11-02 00:00:00 -0500284 * Initialize all device objects in the namespace. This runs the device
285 * _STA and _INI methods.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700286 */
287 if (!(flags & ACPI_NO_DEVICE_INIT)) {
Len Brown4be44fc2005-08-05 00:44:28 -0400288 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
289 "[Init] Initializing ACPI Devices\n"));
Linus Torvalds1da177e2005-04-16 15:20:36 -0700290
Len Brown4be44fc2005-08-05 00:44:28 -0400291 status = acpi_ns_initialize_devices();
292 if (ACPI_FAILURE(status)) {
293 return_ACPI_STATUS(status);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700294 }
295 }
296
297 /*
298 * Empty the caches (delete the cached objects) on the assumption that
299 * the table load filled them up more than they will be at runtime --
300 * thus wasting non-paged memory.
301 */
Len Brown4be44fc2005-08-05 00:44:28 -0400302 status = acpi_purge_cached_objects();
Linus Torvalds1da177e2005-04-16 15:20:36 -0700303
304 acpi_gbl_startup_flags |= ACPI_INITIALIZED_OK;
Len Brown4be44fc2005-08-05 00:44:28 -0400305 return_ACPI_STATUS(status);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700306}
307
Linus Torvalds1da177e2005-04-16 15:20:36 -0700308/*******************************************************************************
309 *
310 * FUNCTION: acpi_terminate
311 *
312 * PARAMETERS: None
313 *
314 * RETURN: Status
315 *
316 * DESCRIPTION: Shutdown the ACPI subsystem. Release all resources.
317 *
318 ******************************************************************************/
319
Len Brown4be44fc2005-08-05 00:44:28 -0400320acpi_status acpi_terminate(void)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700321{
Len Brown4be44fc2005-08-05 00:44:28 -0400322 acpi_status status;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700323
Len Brown4be44fc2005-08-05 00:44:28 -0400324 ACPI_FUNCTION_TRACE("acpi_terminate");
Linus Torvalds1da177e2005-04-16 15:20:36 -0700325
326 /* Terminate the AML Debugger if present */
327
328 ACPI_DEBUGGER_EXEC(acpi_gbl_db_terminate_threads = TRUE);
329
330 /* Shutdown and free all resources */
331
Len Brown4be44fc2005-08-05 00:44:28 -0400332 acpi_ut_subsystem_shutdown();
Linus Torvalds1da177e2005-04-16 15:20:36 -0700333
334 /* Free the mutex objects */
335
Len Brown4be44fc2005-08-05 00:44:28 -0400336 acpi_ut_mutex_terminate();
Linus Torvalds1da177e2005-04-16 15:20:36 -0700337
338#ifdef ACPI_DEBUGGER
339
340 /* Shut down the debugger */
341
Len Brown4be44fc2005-08-05 00:44:28 -0400342 acpi_db_terminate();
Linus Torvalds1da177e2005-04-16 15:20:36 -0700343#endif
344
345 /* Now we can shutdown the OS-dependent layer */
346
Len Brown4be44fc2005-08-05 00:44:28 -0400347 status = acpi_os_terminate();
348 return_ACPI_STATUS(status);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700349}
350
Linus Torvalds1da177e2005-04-16 15:20:36 -0700351#ifdef ACPI_FUTURE_USAGE
Robert Moore44f6c012005-04-18 22:49:35 -0400352/*******************************************************************************
Linus Torvalds1da177e2005-04-16 15:20:36 -0700353 *
354 * FUNCTION: acpi_subsystem_status
355 *
356 * PARAMETERS: None
357 *
358 * RETURN: Status of the ACPI subsystem
359 *
360 * DESCRIPTION: Other drivers that use the ACPI subsystem should call this
Robert Moore44f6c012005-04-18 22:49:35 -0400361 * before making any other calls, to ensure the subsystem
362 * initialized successfully.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700363 *
Robert Moore44f6c012005-04-18 22:49:35 -0400364 ******************************************************************************/
Linus Torvalds1da177e2005-04-16 15:20:36 -0700365
Len Brown4be44fc2005-08-05 00:44:28 -0400366acpi_status acpi_subsystem_status(void)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700367{
Robert Moore44f6c012005-04-18 22:49:35 -0400368
Linus Torvalds1da177e2005-04-16 15:20:36 -0700369 if (acpi_gbl_startup_flags & ACPI_INITIALIZED_OK) {
370 return (AE_OK);
Len Brown4be44fc2005-08-05 00:44:28 -0400371 } else {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700372 return (AE_ERROR);
373 }
374}
375
Robert Moore44f6c012005-04-18 22:49:35 -0400376/*******************************************************************************
Linus Torvalds1da177e2005-04-16 15:20:36 -0700377 *
378 * FUNCTION: acpi_get_system_info
379 *
Robert Moore44f6c012005-04-18 22:49:35 -0400380 * PARAMETERS: out_buffer - A buffer to receive the resources for the
381 * device
Linus Torvalds1da177e2005-04-16 15:20:36 -0700382 *
383 * RETURN: Status - the status of the call
384 *
385 * DESCRIPTION: This function is called to get information about the current
386 * state of the ACPI subsystem. It will return system information
387 * in the out_buffer.
388 *
389 * If the function fails an appropriate status will be returned
390 * and the value of out_buffer is undefined.
391 *
392 ******************************************************************************/
393
Len Brown4be44fc2005-08-05 00:44:28 -0400394acpi_status acpi_get_system_info(struct acpi_buffer * out_buffer)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700395{
Len Brown4be44fc2005-08-05 00:44:28 -0400396 struct acpi_system_info *info_ptr;
397 acpi_status status;
398 u32 i;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700399
Len Brown4be44fc2005-08-05 00:44:28 -0400400 ACPI_FUNCTION_TRACE("acpi_get_system_info");
Linus Torvalds1da177e2005-04-16 15:20:36 -0700401
402 /* Parameter validation */
403
Len Brown4be44fc2005-08-05 00:44:28 -0400404 status = acpi_ut_validate_buffer(out_buffer);
405 if (ACPI_FAILURE(status)) {
406 return_ACPI_STATUS(status);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700407 }
408
409 /* Validate/Allocate/Clear caller buffer */
410
Len Brown4be44fc2005-08-05 00:44:28 -0400411 status =
412 acpi_ut_initialize_buffer(out_buffer,
413 sizeof(struct acpi_system_info));
414 if (ACPI_FAILURE(status)) {
415 return_ACPI_STATUS(status);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700416 }
417
418 /*
419 * Populate the return buffer
420 */
Len Brown4be44fc2005-08-05 00:44:28 -0400421 info_ptr = (struct acpi_system_info *)out_buffer->pointer;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700422
Len Brown4be44fc2005-08-05 00:44:28 -0400423 info_ptr->acpi_ca_version = ACPI_CA_VERSION;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700424
425 /* System flags (ACPI capabilities) */
426
Len Brown4be44fc2005-08-05 00:44:28 -0400427 info_ptr->flags = ACPI_SYS_MODE_ACPI;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700428
429 /* Timer resolution - 24 or 32 bits */
430
431 if (!acpi_gbl_FADT) {
432 info_ptr->timer_resolution = 0;
Len Brown4be44fc2005-08-05 00:44:28 -0400433 } else if (acpi_gbl_FADT->tmr_val_ext == 0) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700434 info_ptr->timer_resolution = 24;
Len Brown4be44fc2005-08-05 00:44:28 -0400435 } else {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700436 info_ptr->timer_resolution = 32;
437 }
438
439 /* Clear the reserved fields */
440
Len Brown4be44fc2005-08-05 00:44:28 -0400441 info_ptr->reserved1 = 0;
442 info_ptr->reserved2 = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700443
444 /* Current debug levels */
445
Len Brown4be44fc2005-08-05 00:44:28 -0400446 info_ptr->debug_layer = acpi_dbg_layer;
447 info_ptr->debug_level = acpi_dbg_level;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700448
449 /* Current status of the ACPI tables, per table type */
450
451 info_ptr->num_table_types = NUM_ACPI_TABLE_TYPES;
452 for (i = 0; i < NUM_ACPI_TABLE_TYPES; i++) {
453 info_ptr->table_info[i].count = acpi_gbl_table_lists[i].count;
454 }
455
Len Brown4be44fc2005-08-05 00:44:28 -0400456 return_ACPI_STATUS(AE_OK);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700457}
Linus Torvalds1da177e2005-04-16 15:20:36 -0700458
Len Brown4be44fc2005-08-05 00:44:28 -0400459EXPORT_SYMBOL(acpi_get_system_info);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700460
461/*****************************************************************************
462 *
463 * FUNCTION: acpi_install_initialization_handler
464 *
465 * PARAMETERS: Handler - Callback procedure
Robert Moore44f6c012005-04-18 22:49:35 -0400466 * Function - Not (currently) used, see below
Linus Torvalds1da177e2005-04-16 15:20:36 -0700467 *
468 * RETURN: Status
469 *
470 * DESCRIPTION: Install an initialization handler
471 *
472 * TBD: When a second function is added, must save the Function also.
473 *
474 ****************************************************************************/
475
476acpi_status
Len Brown4be44fc2005-08-05 00:44:28 -0400477acpi_install_initialization_handler(acpi_init_handler handler, u32 function)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700478{
479
480 if (!handler) {
481 return (AE_BAD_PARAMETER);
482 }
483
484 if (acpi_gbl_init_handler) {
485 return (AE_ALREADY_EXISTS);
486 }
487
488 acpi_gbl_init_handler = handler;
489 return AE_OK;
490}
491
Len Brown4be44fc2005-08-05 00:44:28 -0400492#endif /* ACPI_FUTURE_USAGE */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700493
Linus Torvalds1da177e2005-04-16 15:20:36 -0700494/*****************************************************************************
495 *
496 * FUNCTION: acpi_purge_cached_objects
497 *
498 * PARAMETERS: None
499 *
500 * RETURN: Status
501 *
502 * DESCRIPTION: Empty all caches (delete the cached objects)
503 *
504 ****************************************************************************/
505
Len Brown4be44fc2005-08-05 00:44:28 -0400506acpi_status acpi_purge_cached_objects(void)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700507{
Len Brown4be44fc2005-08-05 00:44:28 -0400508 ACPI_FUNCTION_TRACE("acpi_purge_cached_objects");
Linus Torvalds1da177e2005-04-16 15:20:36 -0700509
Len Brown4be44fc2005-08-05 00:44:28 -0400510 (void)acpi_os_purge_cache(acpi_gbl_state_cache);
511 (void)acpi_os_purge_cache(acpi_gbl_operand_cache);
512 (void)acpi_os_purge_cache(acpi_gbl_ps_node_cache);
513 (void)acpi_os_purge_cache(acpi_gbl_ps_node_ext_cache);
514 return_ACPI_STATUS(AE_OK);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700515}