1 /******************************************************************************
2  *
3  * Name: acpixf.h - External interfaces to the ACPI subsystem
4  *
5  *****************************************************************************/
6 
7 /*
8  * Copyright (C) 2000 - 2015, Intel Corp.
9  * 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 #ifndef __ACXFACE_H__
45 #define __ACXFACE_H__
46 
47 /* Current ACPICA subsystem version in YYYYMMDD format */
48 
49 #define ACPI_CA_VERSION                 0x20150410
50 
51 #include <acpi/acconfig.h>
52 #include <acpi/actypes.h>
53 #include <acpi/actbl.h>
54 #include <acpi/acbuffer.h>
55 
56 /*****************************************************************************
57  *
58  * Macros used for ACPICA globals and configuration
59  *
60  ****************************************************************************/
61 
62 /*
63  * Ensure that global variables are defined and initialized only once.
64  *
65  * The use of these macros allows for a single list of globals (here)
66  * in order to simplify maintenance of the code.
67  */
68 #ifdef DEFINE_ACPI_GLOBALS
69 #define ACPI_GLOBAL(type,name) \
70 	extern type name; \
71 	type name
72 
73 #define ACPI_INIT_GLOBAL(type,name,value) \
74 	type name=value
75 
76 #else
77 #ifndef ACPI_GLOBAL
78 #define ACPI_GLOBAL(type,name) \
79 	extern type name
80 #endif
81 
82 #ifndef ACPI_INIT_GLOBAL
83 #define ACPI_INIT_GLOBAL(type,name,value) \
84 	extern type name
85 #endif
86 #endif
87 
88 /*
89  * These macros configure the various ACPICA interfaces. They are
90  * useful for generating stub inline functions for features that are
91  * configured out of the current kernel or ACPICA application.
92  */
93 #ifndef ACPI_EXTERNAL_RETURN_STATUS
94 #define ACPI_EXTERNAL_RETURN_STATUS(prototype) \
95 	prototype;
96 #endif
97 
98 #ifndef ACPI_EXTERNAL_RETURN_OK
99 #define ACPI_EXTERNAL_RETURN_OK(prototype) \
100 	prototype;
101 #endif
102 
103 #ifndef ACPI_EXTERNAL_RETURN_VOID
104 #define ACPI_EXTERNAL_RETURN_VOID(prototype) \
105 	prototype;
106 #endif
107 
108 #ifndef ACPI_EXTERNAL_RETURN_UINT32
109 #define ACPI_EXTERNAL_RETURN_UINT32(prototype) \
110 	prototype;
111 #endif
112 
113 #ifndef ACPI_EXTERNAL_RETURN_PTR
114 #define ACPI_EXTERNAL_RETURN_PTR(prototype) \
115 	prototype;
116 #endif
117 
118 /*****************************************************************************
119  *
120  * Public globals and runtime configuration options
121  *
122  ****************************************************************************/
123 
124 /*
125  * Enable "slack mode" of the AML interpreter?  Default is FALSE, and the
126  * interpreter strictly follows the ACPI specification. Setting to TRUE
127  * allows the interpreter to ignore certain errors and/or bad AML constructs.
128  *
129  * Currently, these features are enabled by this flag:
130  *
131  * 1) Allow "implicit return" of last value in a control method
132  * 2) Allow access beyond the end of an operation region
133  * 3) Allow access to uninitialized locals/args (auto-init to integer 0)
134  * 4) Allow ANY object type to be a source operand for the Store() operator
135  * 5) Allow unresolved references (invalid target name) in package objects
136  * 6) Enable warning messages for behavior that is not ACPI spec compliant
137  */
138 ACPI_INIT_GLOBAL(u8, acpi_gbl_enable_interpreter_slack, FALSE);
139 
140 /*
141  * Automatically serialize all methods that create named objects? Default
142  * is TRUE, meaning that all non_serialized methods are scanned once at
143  * table load time to determine those that create named objects. Methods
144  * that create named objects are marked Serialized in order to prevent
145  * possible run-time problems if they are entered by more than one thread.
146  */
147 ACPI_INIT_GLOBAL(u8, acpi_gbl_auto_serialize_methods, TRUE);
148 
149 /*
150  * Create the predefined _OSI method in the namespace? Default is TRUE
151  * because ACPICA is fully compatible with other ACPI implementations.
152  * Changing this will revert ACPICA (and machine ASL) to pre-OSI behavior.
153  */
154 ACPI_INIT_GLOBAL(u8, acpi_gbl_create_osi_method, TRUE);
155 
156 /*
157  * Optionally use default values for the ACPI register widths. Set this to
158  * TRUE to use the defaults, if an FADT contains incorrect widths/lengths.
159  */
160 ACPI_INIT_GLOBAL(u8, acpi_gbl_use_default_register_widths, TRUE);
161 
162 /*
163  * Whether or not to verify the table checksum before installation. Set
164  * this to TRUE to verify the table checksum before install it to the table
165  * manager. Note that enabling this option causes errors to happen in some
166  * OSPMs during early initialization stages. Default behavior is to do such
167  * verification.
168  */
169 ACPI_INIT_GLOBAL(u8, acpi_gbl_verify_table_checksum, TRUE);
170 
171 /*
172  * Optionally enable output from the AML Debug Object.
173  */
174 ACPI_INIT_GLOBAL(u8, acpi_gbl_enable_aml_debug_object, FALSE);
175 
176 /*
177  * Optionally copy the entire DSDT to local memory (instead of simply
178  * mapping it.) There are some BIOSs that corrupt or replace the original
179  * DSDT, creating the need for this option. Default is FALSE, do not copy
180  * the DSDT.
181  */
182 ACPI_INIT_GLOBAL(u8, acpi_gbl_copy_dsdt_locally, FALSE);
183 
184 /*
185  * Optionally ignore an XSDT if present and use the RSDT instead.
186  * Although the ACPI specification requires that an XSDT be used instead
187  * of the RSDT, the XSDT has been found to be corrupt or ill-formed on
188  * some machines. Default behavior is to use the XSDT if present.
189  */
190 ACPI_INIT_GLOBAL(u8, acpi_gbl_do_not_use_xsdt, FALSE);
191 
192 /*
193  * Optionally use 32-bit FADT addresses if and when there is a conflict
194  * (address mismatch) between the 32-bit and 64-bit versions of the
195  * address. Although ACPICA adheres to the ACPI specification which
196  * requires the use of the corresponding 64-bit address if it is non-zero,
197  * some machines have been found to have a corrupted non-zero 64-bit
198  * address. Default is FALSE, do not favor the 32-bit addresses.
199  */
200 ACPI_INIT_GLOBAL(u8, acpi_gbl_use32_bit_fadt_addresses, FALSE);
201 
202 /*
203  * Optionally use 32-bit FACS table addresses.
204  * It is reported that some platforms fail to resume from system suspending
205  * if 64-bit FACS table address is selected:
206  * https://bugzilla.kernel.org/show_bug.cgi?id=74021
207  * Default is TRUE, favor the 32-bit addresses.
208  */
209 ACPI_INIT_GLOBAL(u8, acpi_gbl_use32_bit_facs_addresses, TRUE);
210 
211 /*
212  * Optionally truncate I/O addresses to 16 bits. Provides compatibility
213  * with other ACPI implementations. NOTE: During ACPICA initialization,
214  * this value is set to TRUE if any Windows OSI strings have been
215  * requested by the BIOS.
216  */
217 ACPI_INIT_GLOBAL(u8, acpi_gbl_truncate_io_addresses, FALSE);
218 
219 /*
220  * Disable runtime checking and repair of values returned by control methods.
221  * Use only if the repair is causing a problem on a particular machine.
222  */
223 ACPI_INIT_GLOBAL(u8, acpi_gbl_disable_auto_repair, FALSE);
224 
225 /*
226  * Optionally do not install any SSDTs from the RSDT/XSDT during initialization.
227  * This can be useful for debugging ACPI problems on some machines.
228  */
229 ACPI_INIT_GLOBAL(u8, acpi_gbl_disable_ssdt_table_install, FALSE);
230 
231 /*
232  * We keep track of the latest version of Windows that has been requested by
233  * the BIOS. ACPI 5.0.
234  */
235 ACPI_INIT_GLOBAL(u8, acpi_gbl_osi_data, 0);
236 
237 /*
238  * ACPI 5.0 introduces the concept of a "reduced hardware platform", meaning
239  * that the ACPI hardware is no longer required. A flag in the FADT indicates
240  * a reduced HW machine, and that flag is duplicated here for convenience.
241  */
242 ACPI_INIT_GLOBAL(u8, acpi_gbl_reduced_hardware, FALSE);
243 
244 /*
245  * This mechanism is used to trace a specified AML method. The method is
246  * traced each time it is executed.
247  */
248 ACPI_INIT_GLOBAL(u32, acpi_gbl_trace_flags, 0);
249 ACPI_INIT_GLOBAL(acpi_name, acpi_gbl_trace_method_name, 0);
250 
251 /*
252  * Runtime configuration of debug output control masks. We want the debug
253  * switches statically initialized so they are already set when the debugger
254  * is entered.
255  */
256 ACPI_INIT_GLOBAL(u32, acpi_dbg_level, ACPI_DEBUG_DEFAULT);
257 ACPI_INIT_GLOBAL(u32, acpi_dbg_layer, 0);
258 
259 /*
260  * Other miscellaneous globals
261  */
262 ACPI_GLOBAL(struct acpi_table_fadt, acpi_gbl_FADT);
263 ACPI_GLOBAL(u32, acpi_current_gpe_count);
264 ACPI_GLOBAL(u8, acpi_gbl_system_awake_and_running);
265 
266 /*****************************************************************************
267  *
268  * ACPICA public interface configuration.
269  *
270  * Interfaces that are configured out of the ACPICA build are replaced
271  * by inlined stubs by default.
272  *
273  ****************************************************************************/
274 
275 /*
276  * Hardware-reduced prototypes (default: Not hardware reduced).
277  *
278  * All ACPICA hardware-related interfaces that use these macros will be
279  * configured out of the ACPICA build if the ACPI_REDUCED_HARDWARE flag
280  * is set to TRUE.
281  *
282  * Note: This static build option for reduced hardware is intended to
283  * reduce ACPICA code size if desired or necessary. However, even if this
284  * option is not specified, the runtime behavior of ACPICA is dependent
285  * on the actual FADT reduced hardware flag (HW_REDUCED_ACPI). If set,
286  * the flag will enable similar behavior -- ACPICA will not attempt
287  * to access any ACPI-relate hardware (SCI, GPEs, Fixed Events, etc.)
288  */
289 #if (!ACPI_REDUCED_HARDWARE)
290 #define ACPI_HW_DEPENDENT_RETURN_STATUS(prototype) \
291 	ACPI_EXTERNAL_RETURN_STATUS(prototype)
292 
293 #define ACPI_HW_DEPENDENT_RETURN_OK(prototype) \
294 	ACPI_EXTERNAL_RETURN_OK(prototype)
295 
296 #define ACPI_HW_DEPENDENT_RETURN_VOID(prototype) \
297 	ACPI_EXTERNAL_RETURN_VOID(prototype)
298 
299 #else
300 #define ACPI_HW_DEPENDENT_RETURN_STATUS(prototype) \
301 	static ACPI_INLINE prototype {return(AE_NOT_CONFIGURED);}
302 
303 #define ACPI_HW_DEPENDENT_RETURN_OK(prototype) \
304 	static ACPI_INLINE prototype {return(AE_OK);}
305 
306 #define ACPI_HW_DEPENDENT_RETURN_VOID(prototype) \
307 	static ACPI_INLINE prototype {return;}
308 
309 #endif				/* !ACPI_REDUCED_HARDWARE */
310 
311 /*
312  * Error message prototypes (default: error messages enabled).
313  *
314  * All interfaces related to error and warning messages
315  * will be configured out of the ACPICA build if the
316  * ACPI_NO_ERROR_MESSAGE flag is defined.
317  */
318 #ifndef ACPI_NO_ERROR_MESSAGES
319 #define ACPI_MSG_DEPENDENT_RETURN_VOID(prototype) \
320 	prototype;
321 
322 #else
323 #define ACPI_MSG_DEPENDENT_RETURN_VOID(prototype) \
324 	static ACPI_INLINE prototype {return;}
325 
326 #endif				/* ACPI_NO_ERROR_MESSAGES */
327 
328 /*
329  * Debugging output prototypes (default: no debug output).
330  *
331  * All interfaces related to debug output messages
332  * will be configured out of the ACPICA build unless the
333  * ACPI_DEBUG_OUTPUT flag is defined.
334  */
335 #ifdef ACPI_DEBUG_OUTPUT
336 #define ACPI_DBG_DEPENDENT_RETURN_VOID(prototype) \
337 	prototype;
338 
339 #else
340 #define ACPI_DBG_DEPENDENT_RETURN_VOID(prototype) \
341 	static ACPI_INLINE prototype {return;}
342 
343 #endif				/* ACPI_DEBUG_OUTPUT */
344 
345 /*
346  * Application prototypes
347  *
348  * All interfaces used by application will be configured
349  * out of the ACPICA build unless the ACPI_APPLICATION
350  * flag is defined.
351  */
352 #ifdef ACPI_APPLICATION
353 #define ACPI_APP_DEPENDENT_RETURN_VOID(prototype) \
354 	prototype;
355 
356 #else
357 #define ACPI_APP_DEPENDENT_RETURN_VOID(prototype) \
358 	static ACPI_INLINE prototype {return;}
359 
360 #endif				/* ACPI_APPLICATION */
361 
362 /*****************************************************************************
363  *
364  * ACPICA public interface prototypes
365  *
366  ****************************************************************************/
367 
368 /*
369  * Initialization
370  */
371 ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init
372 			    acpi_initialize_tables(struct acpi_table_desc
373 						   *initial_storage,
374 						   u32 initial_table_count,
375 						   u8 allow_resize))
376 ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init acpi_initialize_subsystem(void))
377 
378 ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init acpi_enable_subsystem(u32 flags))
379 
380 ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init
381 			    acpi_initialize_objects(u32 flags))
382 ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init acpi_terminate(void))
383 
384 /*
385  * Miscellaneous global interfaces
386  */
387 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_enable(void))
388 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_disable(void))
389 #ifdef ACPI_FUTURE_USAGE
390 ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_subsystem_status(void))
391 #endif
392 
393 #ifdef ACPI_FUTURE_USAGE
394 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
395 			    acpi_get_system_info(struct acpi_buffer
396 						 *ret_buffer))
397 #endif
398 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
399 			     acpi_get_statistics(struct acpi_statistics *stats))
400 ACPI_EXTERNAL_RETURN_PTR(const char
401 			  *acpi_format_exception(acpi_status exception))
402 ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_purge_cached_objects(void))
403 
404 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
405 			    acpi_install_interface(acpi_string interface_name))
406 
407 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
408 			    acpi_remove_interface(acpi_string interface_name))
409 ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_update_interfaces(u8 action))
410 
411 ACPI_EXTERNAL_RETURN_UINT32(u32
412 			    acpi_check_address_range(acpi_adr_space_type
413 						     space_id,
414 						     acpi_physical_address
415 						     address, acpi_size length,
416 						     u8 warn))
417 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
418 			     acpi_decode_pld_buffer(u8 *in_buffer,
419 						    acpi_size length,
420 						    struct acpi_pld_info
421 						    **return_buffer))
422 
423 /*
424  * ACPI table load/unload interfaces
425  */
426 ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init
427 			    acpi_install_table(acpi_physical_address address,
428 					       u8 physical))
429 
430 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
431 			    acpi_load_table(struct acpi_table_header *table))
432 
433 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
434 			    acpi_unload_parent_table(acpi_handle object))
435 ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init acpi_load_tables(void))
436 
437 /*
438  * ACPI table manipulation interfaces
439  */
440 ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init acpi_reallocate_root_table(void))
441 
442 ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init
443 			    acpi_find_root_pointer(acpi_physical_address *
444 						   rsdp_address))
445 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
446 			     acpi_get_table_header(acpi_string signature,
447 						   u32 instance,
448 						   struct acpi_table_header
449 						   *out_table_header))
450 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
451 			     acpi_get_table(acpi_string signature, u32 instance,
452 					    struct acpi_table_header
453 					    **out_table))
454 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
455 			     acpi_get_table_by_index(u32 table_index,
456 						     struct acpi_table_header
457 						     **out_table))
458 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
459 			     acpi_install_table_handler(acpi_table_handler
460 							handler, void *context))
461 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
462 			     acpi_remove_table_handler(acpi_table_handler
463 						       handler))
464 
465 /*
466  * Namespace and name interfaces
467  */
468 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
469 			    acpi_walk_namespace(acpi_object_type type,
470 						acpi_handle start_object,
471 						u32 max_depth,
472 						acpi_walk_callback
473 						descending_callback,
474 						acpi_walk_callback
475 						ascending_callback,
476 						void *context,
477 						void **return_value))
478 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
479 			     acpi_get_devices(const char *HID,
480 					      acpi_walk_callback user_function,
481 					      void *context,
482 					      void **return_value))
483 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
484 			     acpi_get_name(acpi_handle object, u32 name_type,
485 					   struct acpi_buffer *ret_path_ptr))
486 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
487 			     acpi_get_handle(acpi_handle parent,
488 					     acpi_string pathname,
489 					     acpi_handle * ret_handle))
490 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
491 			     acpi_attach_data(acpi_handle object,
492 					      acpi_object_handler handler,
493 					      void *data))
494 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
495 			     acpi_detach_data(acpi_handle object,
496 					      acpi_object_handler handler))
497 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
498 			     acpi_get_data(acpi_handle object,
499 					   acpi_object_handler handler,
500 					   void **data))
501 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
502 			     acpi_debug_trace(char *name, u32 debug_level,
503 					      u32 debug_layer, u32 flags))
504 
505 /*
506  * Object manipulation and enumeration
507  */
508 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
509 			    acpi_evaluate_object(acpi_handle object,
510 						 acpi_string pathname,
511 						 struct acpi_object_list
512 						 *parameter_objects,
513 						 struct acpi_buffer
514 						 *return_object_buffer))
515 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
516 			     acpi_evaluate_object_typed(acpi_handle object,
517 							acpi_string pathname,
518 							struct acpi_object_list
519 							*external_params,
520 							struct acpi_buffer
521 							*return_buffer,
522 							acpi_object_type
523 							return_type))
524 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
525 			     acpi_get_object_info(acpi_handle object,
526 						  struct acpi_device_info
527 						  **return_buffer))
528 ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_install_method(u8 *buffer))
529 
530 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
531 			    acpi_get_next_object(acpi_object_type type,
532 						 acpi_handle parent,
533 						 acpi_handle child,
534 						 acpi_handle * out_handle))
535 
536 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
537 			    acpi_get_type(acpi_handle object,
538 					  acpi_object_type * out_type))
539 
540 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
541 			    acpi_get_parent(acpi_handle object,
542 					    acpi_handle * out_handle))
543 
544 /*
545  * Handler interfaces
546  */
547 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
548 			    acpi_install_initialization_handler
549 			    (acpi_init_handler handler, u32 function))
550 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
551 				 acpi_install_sci_handler(acpi_sci_handler
552 							  address,
553 							  void *context))
554 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
555 				 acpi_remove_sci_handler(acpi_sci_handler
556 							 address))
557 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
558 				 acpi_install_global_event_handler
559 				 (acpi_gbl_event_handler handler,
560 				  void *context))
561 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
562 				 acpi_install_fixed_event_handler(u32
563 								  acpi_event,
564 								  acpi_event_handler
565 								  handler,
566 								  void
567 								  *context))
568 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
569 				 acpi_remove_fixed_event_handler(u32 acpi_event,
570 								 acpi_event_handler
571 								 handler))
572 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
573 				 acpi_install_gpe_handler(acpi_handle
574 							  gpe_device,
575 							  u32 gpe_number,
576 							  u32 type,
577 							  acpi_gpe_handler
578 							  address,
579 							  void *context))
580 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
581 				 acpi_install_gpe_raw_handler(acpi_handle
582 							      gpe_device,
583 							      u32 gpe_number,
584 							      u32 type,
585 							      acpi_gpe_handler
586 							      address,
587 							      void *context))
588 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
589 				 acpi_remove_gpe_handler(acpi_handle gpe_device,
590 							 u32 gpe_number,
591 							 acpi_gpe_handler
592 							 address))
593 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
594 			     acpi_install_notify_handler(acpi_handle device,
595 							 u32 handler_type,
596 							 acpi_notify_handler
597 							 handler,
598 							 void *context))
599 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
600 			     acpi_remove_notify_handler(acpi_handle device,
601 							u32 handler_type,
602 							acpi_notify_handler
603 							handler))
604 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
605 			     acpi_install_address_space_handler(acpi_handle
606 								device,
607 								acpi_adr_space_type
608 								space_id,
609 								acpi_adr_space_handler
610 								handler,
611 								acpi_adr_space_setup
612 								setup,
613 								void *context))
614 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
615 			     acpi_remove_address_space_handler(acpi_handle
616 							       device,
617 							       acpi_adr_space_type
618 							       space_id,
619 							       acpi_adr_space_handler
620 							       handler))
621 #ifdef ACPI_FUTURE_USAGE
622 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
623 			     acpi_install_exception_handler
624 			     (acpi_exception_handler handler))
625 #endif
626 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
627 			     acpi_install_interface_handler
628 			     (acpi_interface_handler handler))
629 
630 /*
631  * Global Lock interfaces
632  */
633 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
634 				acpi_acquire_global_lock(u16 timeout,
635 							 u32 *handle))
636 
637 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
638 				acpi_release_global_lock(u32 handle))
639 
640 /*
641  * Interfaces to AML mutex objects
642  */
643 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
644 			    acpi_acquire_mutex(acpi_handle handle,
645 					       acpi_string pathname,
646 					       u16 timeout))
647 
648 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
649 			    acpi_release_mutex(acpi_handle handle,
650 					       acpi_string pathname))
651 
652 /*
653  * Fixed Event interfaces
654  */
655 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
656 				acpi_enable_event(u32 event, u32 flags))
657 
658 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
659 				acpi_disable_event(u32 event, u32 flags))
660 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_clear_event(u32 event))
661 
662 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
663 				acpi_get_event_status(u32 event,
664 						      acpi_event_status
665 						      *event_status))
666 
667 /*
668  * General Purpose Event (GPE) Interfaces
669  */
670 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_update_all_gpes(void))
671 
672 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
673 				acpi_enable_gpe(acpi_handle gpe_device,
674 						u32 gpe_number))
675 
676 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
677 				acpi_disable_gpe(acpi_handle gpe_device,
678 						 u32 gpe_number))
679 
680 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
681 				acpi_clear_gpe(acpi_handle gpe_device,
682 					       u32 gpe_number))
683 
684 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
685 				acpi_set_gpe(acpi_handle gpe_device,
686 					     u32 gpe_number, u8 action))
687 
688 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
689 				acpi_finish_gpe(acpi_handle gpe_device,
690 						u32 gpe_number))
691 
692 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
693 				acpi_mark_gpe_for_wake(acpi_handle gpe_device,
694 						       u32 gpe_number))
695 
696 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
697 				acpi_setup_gpe_for_wake(acpi_handle
698 							parent_device,
699 							acpi_handle gpe_device,
700 							u32 gpe_number))
701 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
702 				 acpi_set_gpe_wake_mask(acpi_handle gpe_device,
703 							u32 gpe_number,
704 							u8 action))
705 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
706 				 acpi_get_gpe_status(acpi_handle gpe_device,
707 						     u32 gpe_number,
708 						     acpi_event_status
709 						     *event_status))
710 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_disable_all_gpes(void))
711 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_enable_all_runtime_gpes(void))
712 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_enable_all_wakeup_gpes(void))
713 
714 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
715 				acpi_get_gpe_device(u32 gpe_index,
716 						    acpi_handle * gpe_device))
717 
718 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
719 				acpi_install_gpe_block(acpi_handle gpe_device,
720 						       struct
721 						       acpi_generic_address
722 						       *gpe_block_address,
723 						       u32 register_count,
724 						       u32 interrupt_number))
725 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
726 				 acpi_remove_gpe_block(acpi_handle gpe_device))
727 
728 /*
729  * Resource interfaces
730  */
731 typedef
732 acpi_status(*acpi_walk_resource_callback) (struct acpi_resource * resource,
733 					   void *context);
734 
735 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
736 			    acpi_get_vendor_resource(acpi_handle device,
737 						     char *name,
738 						     struct acpi_vendor_uuid
739 						     *uuid,
740 						     struct acpi_buffer
741 						     *ret_buffer))
742 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
743 			     acpi_get_current_resources(acpi_handle device,
744 							struct acpi_buffer
745 							*ret_buffer))
746 #ifdef ACPI_FUTURE_USAGE
747 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
748 			     acpi_get_possible_resources(acpi_handle device,
749 							 struct acpi_buffer
750 							 *ret_buffer))
751 #endif
752 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
753 			     acpi_get_event_resources(acpi_handle device_handle,
754 						      struct acpi_buffer
755 						      *ret_buffer))
756 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
757 			     acpi_walk_resource_buffer(struct acpi_buffer
758 						       *buffer,
759 						       acpi_walk_resource_callback
760 						       user_function,
761 						       void *context))
762 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
763 			     acpi_walk_resources(acpi_handle device, char *name,
764 						 acpi_walk_resource_callback
765 						 user_function, void *context))
766 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
767 			     acpi_set_current_resources(acpi_handle device,
768 							struct acpi_buffer
769 							*in_buffer))
770 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
771 			     acpi_get_irq_routing_table(acpi_handle device,
772 							struct acpi_buffer
773 							*ret_buffer))
774 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
775 			     acpi_resource_to_address64(struct acpi_resource
776 							*resource,
777 							struct
778 							acpi_resource_address64
779 							*out))
780 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
781 			     acpi_buffer_to_resource(u8 *aml_buffer,
782 						     u16 aml_buffer_length,
783 						     struct acpi_resource
784 						     **resource_ptr))
785 
786 /*
787  * Hardware (ACPI device) interfaces
788  */
789 ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_reset(void))
790 
791 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
792 			    acpi_read(u64 *value,
793 				      struct acpi_generic_address *reg))
794 
795 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
796 			    acpi_write(u64 value,
797 				       struct acpi_generic_address *reg))
798 
799 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
800 				acpi_read_bit_register(u32 register_id,
801 						       u32 *return_value))
802 
803 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
804 				acpi_write_bit_register(u32 register_id,
805 							u32 value))
806 
807 /*
808  * Sleep/Wake interfaces
809  */
810 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
811 			    acpi_get_sleep_type_data(u8 sleep_state,
812 						     u8 *slp_typ_a,
813 						     u8 *slp_typ_b))
814 
815 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
816 			    acpi_enter_sleep_state_prep(u8 sleep_state))
817 ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_enter_sleep_state(u8 sleep_state))
818 
819 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_enter_sleep_state_s4bios(void))
820 
821 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
822 			    acpi_leave_sleep_state_prep(u8 sleep_state))
823 ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_leave_sleep_state(u8 sleep_state))
824 
825 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
826 				acpi_set_firmware_waking_vector(u32
827 								physical_address))
828 #if ACPI_MACHINE_WIDTH == 64
829 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
830 				acpi_set_firmware_waking_vector64(u64
831 								  physical_address))
832 #endif
833 /*
834  * ACPI Timer interfaces
835  */
836 #ifdef ACPI_FUTURE_USAGE
837 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
838 				acpi_get_timer_resolution(u32 *resolution))
839 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_get_timer(u32 *ticks))
840 
841 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
842 				acpi_get_timer_duration(u32 start_ticks,
843 							u32 end_ticks,
844 							u32 *time_elapsed))
845 #endif				/* ACPI_FUTURE_USAGE */
846 
847 /*
848  * Error/Warning output
849  */
850 ACPI_MSG_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(3)
851 			       void ACPI_INTERNAL_VAR_XFACE
852 			       acpi_error(const char *module_name,
853 					  u32 line_number,
854 					  const char *format, ...))
855 ACPI_MSG_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(4)
856 				void ACPI_INTERNAL_VAR_XFACE
857 				acpi_exception(const char *module_name,
858 					       u32 line_number,
859 					       acpi_status status,
860 					       const char *format, ...))
861 ACPI_MSG_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(3)
862 				void ACPI_INTERNAL_VAR_XFACE
863 				acpi_warning(const char *module_name,
864 					     u32 line_number,
865 					     const char *format, ...))
866 ACPI_MSG_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(3)
867 				void ACPI_INTERNAL_VAR_XFACE
868 				acpi_info(const char *module_name,
869 					  u32 line_number,
870 					  const char *format, ...))
871 ACPI_MSG_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(3)
872 				void ACPI_INTERNAL_VAR_XFACE
873 				acpi_bios_error(const char *module_name,
874 						u32 line_number,
875 						const char *format, ...))
876 ACPI_MSG_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(3)
877 				void ACPI_INTERNAL_VAR_XFACE
878 				acpi_bios_warning(const char *module_name,
879 						  u32 line_number,
880 						  const char *format, ...))
881 
882 /*
883  * Debug output
884  */
885 ACPI_DBG_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(6)
886 			       void ACPI_INTERNAL_VAR_XFACE
887 			       acpi_debug_print(u32 requested_debug_level,
888 						u32 line_number,
889 						const char *function_name,
890 						const char *module_name,
891 						u32 component_id,
892 						const char *format, ...))
893 ACPI_DBG_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(6)
894 				void ACPI_INTERNAL_VAR_XFACE
895 				acpi_debug_print_raw(u32 requested_debug_level,
896 						     u32 line_number,
897 						     const char *function_name,
898 						     const char *module_name,
899 						     u32 component_id,
900 						     const char *format, ...))
901 ACPI_APP_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(1)
902 				void ACPI_INTERNAL_VAR_XFACE
903 				acpi_log_error(const char *format, ...))
904 
905 /*
906  * Divergences
907  */
908 ACPI_GLOBAL(u8, acpi_gbl_permanent_mmap);
909 
910 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
911 			    acpi_get_table_with_size(acpi_string signature,
912 						     u32 instance,
913 						     struct acpi_table_header
914 						     **out_table,
915 						     acpi_size *tbl_size))
916 
917 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
918 			    acpi_get_data_full(acpi_handle object,
919 					       acpi_object_handler handler,
920 					       void **data,
921 					       void (*callback)(void *)))
922 
923 #endif				/* __ACXFACE_H__ */
924