1 /****************************************************************************** 2 * 3 * Name: acpixf.h - External interfaces to the ACPI subsystem 4 * 5 *****************************************************************************/ 6 7 /* 8 * Copyright (C) 2000 - 2013, 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 0x20130517 50 51 #include <acpi/acconfig.h> 52 #include <acpi/actypes.h> 53 #include <acpi/actbl.h> 54 #include <acpi/acbuffer.h> 55 56 extern u8 acpi_gbl_permanent_mmap; 57 58 /* 59 * Globals that are publically available 60 */ 61 extern u32 acpi_current_gpe_count; 62 extern struct acpi_table_fadt acpi_gbl_FADT; 63 extern u8 acpi_gbl_system_awake_and_running; 64 extern u8 acpi_gbl_reduced_hardware; /* ACPI 5.0 */ 65 66 /* Runtime configuration of debug print levels */ 67 68 extern u32 acpi_dbg_level; 69 extern u32 acpi_dbg_layer; 70 71 /* ACPICA runtime options */ 72 73 extern u8 acpi_gbl_enable_interpreter_slack; 74 extern u8 acpi_gbl_all_methods_serialized; 75 extern u8 acpi_gbl_create_osi_method; 76 extern u8 acpi_gbl_use_default_register_widths; 77 extern acpi_name acpi_gbl_trace_method_name; 78 extern u32 acpi_gbl_trace_flags; 79 extern bool acpi_gbl_enable_aml_debug_object; 80 extern u8 acpi_gbl_copy_dsdt_locally; 81 extern u8 acpi_gbl_truncate_io_addresses; 82 extern u8 acpi_gbl_disable_auto_repair; 83 extern u8 acpi_gbl_disable_ssdt_table_load; 84 85 /* 86 * Hardware-reduced prototypes. All interfaces that use these macros will 87 * be configured out of the ACPICA build if the ACPI_REDUCED_HARDWARE flag 88 * is set to TRUE. 89 */ 90 #if (!ACPI_REDUCED_HARDWARE) 91 #define ACPI_HW_DEPENDENT_RETURN_STATUS(prototype) \ 92 prototype; 93 94 #define ACPI_HW_DEPENDENT_RETURN_OK(prototype) \ 95 prototype; 96 97 #define ACPI_HW_DEPENDENT_RETURN_VOID(prototype) \ 98 prototype; 99 100 #else 101 #define ACPI_HW_DEPENDENT_RETURN_STATUS(prototype) \ 102 static ACPI_INLINE prototype {return(AE_NOT_CONFIGURED);} 103 104 #define ACPI_HW_DEPENDENT_RETURN_OK(prototype) \ 105 static ACPI_INLINE prototype {return(AE_OK);} 106 107 #define ACPI_HW_DEPENDENT_RETURN_VOID(prototype) \ 108 static ACPI_INLINE prototype {} 109 110 #endif /* !ACPI_REDUCED_HARDWARE */ 111 112 extern u32 acpi_rsdt_forced; 113 /* 114 * Initialization 115 */ 116 acpi_status 117 acpi_initialize_tables(struct acpi_table_desc *initial_storage, 118 u32 initial_table_count, u8 allow_resize); 119 120 acpi_status __init acpi_initialize_subsystem(void); 121 122 acpi_status acpi_enable_subsystem(u32 flags); 123 124 acpi_status acpi_initialize_objects(u32 flags); 125 126 acpi_status acpi_terminate(void); 127 128 /* 129 * Miscellaneous global interfaces 130 */ 131 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_enable(void)) 132 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_disable(void)) 133 #ifdef ACPI_FUTURE_USAGE 134 acpi_status acpi_subsystem_status(void); 135 #endif 136 137 #ifdef ACPI_FUTURE_USAGE 138 acpi_status acpi_get_system_info(struct acpi_buffer *ret_buffer); 139 #endif 140 141 const char *acpi_format_exception(acpi_status exception); 142 143 acpi_status acpi_purge_cached_objects(void); 144 145 acpi_status acpi_install_interface(acpi_string interface_name); 146 147 acpi_status acpi_remove_interface(acpi_string interface_name); 148 149 u32 150 acpi_check_address_range(acpi_adr_space_type space_id, 151 acpi_physical_address address, 152 acpi_size length, u8 warn); 153 154 acpi_status 155 acpi_decode_pld_buffer(u8 *in_buffer, 156 acpi_size length, struct acpi_pld_info **return_buffer); 157 158 /* 159 * ACPI Memory management 160 */ 161 void *acpi_allocate(u32 size); 162 163 void *acpi_callocate(u32 size); 164 165 void acpi_free(void *address); 166 167 /* 168 * ACPI table load/unload interfaces 169 */ 170 acpi_status acpi_load_table(struct acpi_table_header *table); 171 172 acpi_status acpi_unload_parent_table(acpi_handle object); 173 174 acpi_status acpi_load_tables(void); 175 176 /* 177 * ACPI table manipulation interfaces 178 */ 179 acpi_status acpi_reallocate_root_table(void); 180 181 acpi_status acpi_find_root_pointer(acpi_size *rsdp_address); 182 183 acpi_status acpi_unload_table_id(acpi_owner_id id); 184 185 acpi_status 186 acpi_get_table_header(acpi_string signature, 187 u32 instance, struct acpi_table_header *out_table_header); 188 189 acpi_status 190 acpi_get_table_with_size(acpi_string signature, 191 u32 instance, struct acpi_table_header **out_table, 192 acpi_size *tbl_size); 193 acpi_status 194 acpi_get_table(acpi_string signature, 195 u32 instance, struct acpi_table_header **out_table); 196 197 acpi_status 198 acpi_get_table_by_index(u32 table_index, struct acpi_table_header **out_table); 199 200 acpi_status 201 acpi_install_table_handler(acpi_table_handler handler, void *context); 202 203 acpi_status acpi_remove_table_handler(acpi_table_handler handler); 204 205 /* 206 * Namespace and name interfaces 207 */ 208 acpi_status 209 acpi_walk_namespace(acpi_object_type type, 210 acpi_handle start_object, 211 u32 max_depth, 212 acpi_walk_callback pre_order_visit, 213 acpi_walk_callback post_order_visit, 214 void *context, void **return_value); 215 216 acpi_status 217 acpi_get_devices(const char *HID, 218 acpi_walk_callback user_function, 219 void *context, void **return_value); 220 221 acpi_status 222 acpi_get_name(acpi_handle object, 223 u32 name_type, struct acpi_buffer *ret_path_ptr); 224 225 acpi_status 226 acpi_get_handle(acpi_handle parent, 227 acpi_string pathname, acpi_handle * ret_handle); 228 229 acpi_status 230 acpi_attach_data(acpi_handle object, acpi_object_handler handler, void *data); 231 232 acpi_status acpi_detach_data(acpi_handle object, acpi_object_handler handler); 233 234 acpi_status 235 acpi_get_data(acpi_handle object, acpi_object_handler handler, void **data); 236 237 acpi_status 238 acpi_debug_trace(char *name, u32 debug_level, u32 debug_layer, u32 flags); 239 240 /* 241 * Object manipulation and enumeration 242 */ 243 acpi_status 244 acpi_evaluate_object(acpi_handle object, 245 acpi_string pathname, 246 struct acpi_object_list *parameter_objects, 247 struct acpi_buffer *return_object_buffer); 248 249 acpi_status 250 acpi_evaluate_object_typed(acpi_handle object, 251 acpi_string pathname, 252 struct acpi_object_list *external_params, 253 struct acpi_buffer *return_buffer, 254 acpi_object_type return_type); 255 256 acpi_status 257 acpi_get_object_info(acpi_handle object, 258 struct acpi_device_info **return_buffer); 259 260 acpi_status acpi_install_method(u8 *buffer); 261 262 acpi_status 263 acpi_get_next_object(acpi_object_type type, 264 acpi_handle parent, 265 acpi_handle child, acpi_handle * out_handle); 266 267 acpi_status acpi_get_type(acpi_handle object, acpi_object_type * out_type); 268 269 acpi_status acpi_get_id(acpi_handle object, acpi_owner_id * out_type); 270 271 acpi_status acpi_get_parent(acpi_handle object, acpi_handle * out_handle); 272 273 /* 274 * Handler interfaces 275 */ 276 acpi_status 277 acpi_install_initialization_handler(acpi_init_handler handler, u32 function); 278 279 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status 280 acpi_install_global_event_handler 281 (acpi_gbl_event_handler handler, void *context)) 282 283 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status 284 acpi_install_fixed_event_handler(u32 285 acpi_event, 286 acpi_event_handler 287 handler, 288 void 289 *context)) 290 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status 291 acpi_remove_fixed_event_handler(u32 acpi_event, 292 acpi_event_handler 293 handler)) 294 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status 295 acpi_install_gpe_handler(acpi_handle 296 gpe_device, 297 u32 gpe_number, 298 u32 type, 299 acpi_gpe_handler 300 address, 301 void *context)) 302 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status 303 acpi_remove_gpe_handler(acpi_handle gpe_device, 304 u32 gpe_number, 305 acpi_gpe_handler 306 address)) 307 acpi_status acpi_install_notify_handler(acpi_handle device, u32 handler_type, 308 acpi_notify_handler handler, 309 void *context); 310 311 acpi_status 312 acpi_remove_notify_handler(acpi_handle device, 313 u32 handler_type, acpi_notify_handler handler); 314 315 acpi_status 316 acpi_install_address_space_handler(acpi_handle device, 317 acpi_adr_space_type space_id, 318 acpi_adr_space_handler handler, 319 acpi_adr_space_setup setup, void *context); 320 321 acpi_status 322 acpi_remove_address_space_handler(acpi_handle device, 323 acpi_adr_space_type space_id, 324 acpi_adr_space_handler handler); 325 326 #ifdef ACPI_FUTURE_USAGE 327 acpi_status acpi_install_exception_handler(acpi_exception_handler handler); 328 #endif 329 330 acpi_status acpi_install_interface_handler(acpi_interface_handler handler); 331 332 /* 333 * Global Lock interfaces 334 */ 335 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status 336 acpi_acquire_global_lock(u16 timeout, 337 u32 *handle)) 338 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status 339 acpi_release_global_lock(u32 handle)) 340 341 /* 342 * Interfaces to AML mutex objects 343 */ 344 acpi_status 345 acpi_acquire_mutex(acpi_handle handle, acpi_string pathname, u16 timeout); 346 347 acpi_status acpi_release_mutex(acpi_handle handle, acpi_string pathname); 348 349 /* 350 * Fixed Event interfaces 351 */ 352 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status 353 acpi_enable_event(u32 event, u32 flags)) 354 355 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status 356 acpi_disable_event(u32 event, u32 flags)) 357 358 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_clear_event(u32 event)) 359 360 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status 361 acpi_get_event_status(u32 event, 362 acpi_event_status 363 *event_status)) 364 /* 365 * General Purpose Event (GPE) Interfaces 366 */ 367 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_update_all_gpes(void)) 368 369 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status 370 acpi_enable_gpe(acpi_handle gpe_device, 371 u32 gpe_number)) 372 373 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status 374 acpi_disable_gpe(acpi_handle gpe_device, 375 u32 gpe_number)) 376 377 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status 378 acpi_clear_gpe(acpi_handle gpe_device, 379 u32 gpe_number)) 380 381 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status 382 acpi_set_gpe(acpi_handle gpe_device, 383 u32 gpe_number, u8 action)) 384 385 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status 386 acpi_finish_gpe(acpi_handle gpe_device, 387 u32 gpe_number)) 388 389 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status 390 acpi_setup_gpe_for_wake(acpi_handle 391 parent_device, 392 acpi_handle gpe_device, 393 u32 gpe_number)) 394 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status 395 acpi_set_gpe_wake_mask(acpi_handle gpe_device, 396 u32 gpe_number, 397 u8 action)) 398 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status 399 acpi_get_gpe_status(acpi_handle gpe_device, 400 u32 gpe_number, 401 acpi_event_status 402 *event_status)) 403 404 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_disable_all_gpes(void)) 405 406 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_enable_all_runtime_gpes(void)) 407 408 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status 409 acpi_get_gpe_device(u32 gpe_index, 410 acpi_handle * gpe_device)) 411 412 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status 413 acpi_install_gpe_block(acpi_handle gpe_device, 414 struct 415 acpi_generic_address 416 *gpe_block_address, 417 u32 register_count, 418 u32 interrupt_number)) 419 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status 420 acpi_remove_gpe_block(acpi_handle gpe_device)) 421 422 /* 423 * Resource interfaces 424 */ 425 typedef 426 acpi_status(*acpi_walk_resource_callback) (struct acpi_resource * resource, 427 void *context); 428 429 acpi_status 430 acpi_get_vendor_resource(acpi_handle device, 431 char *name, 432 struct acpi_vendor_uuid *uuid, 433 struct acpi_buffer *ret_buffer); 434 435 acpi_status 436 acpi_get_current_resources(acpi_handle device, struct acpi_buffer *ret_buffer); 437 438 #ifdef ACPI_FUTURE_USAGE 439 acpi_status 440 acpi_get_possible_resources(acpi_handle device, struct acpi_buffer *ret_buffer); 441 #endif 442 443 acpi_status 444 acpi_get_event_resources(acpi_handle device_handle, 445 struct acpi_buffer *ret_buffer); 446 447 acpi_status 448 acpi_walk_resource_buffer(struct acpi_buffer *buffer, 449 acpi_walk_resource_callback user_function, 450 void *context); 451 452 acpi_status 453 acpi_walk_resources(acpi_handle device, 454 char *name, 455 acpi_walk_resource_callback user_function, void *context); 456 457 acpi_status 458 acpi_set_current_resources(acpi_handle device, struct acpi_buffer *in_buffer); 459 460 acpi_status 461 acpi_get_irq_routing_table(acpi_handle device, struct acpi_buffer *ret_buffer); 462 463 acpi_status 464 acpi_resource_to_address64(struct acpi_resource *resource, 465 struct acpi_resource_address64 *out); 466 467 acpi_status 468 acpi_buffer_to_resource(u8 *aml_buffer, 469 u16 aml_buffer_length, 470 struct acpi_resource **resource_ptr); 471 472 /* 473 * Hardware (ACPI device) interfaces 474 */ 475 acpi_status acpi_reset(void); 476 477 acpi_status acpi_read(u64 *value, struct acpi_generic_address *reg); 478 479 acpi_status acpi_write(u64 value, struct acpi_generic_address *reg); 480 481 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status 482 acpi_read_bit_register(u32 register_id, 483 u32 *return_value)) 484 485 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status 486 acpi_write_bit_register(u32 register_id, 487 u32 value)) 488 489 /* 490 * Sleep/Wake interfaces 491 */ 492 acpi_status 493 acpi_get_sleep_type_data(u8 sleep_state, u8 * slp_typ_a, u8 * slp_typ_b); 494 495 acpi_status acpi_enter_sleep_state_prep(u8 sleep_state); 496 497 acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state); 498 499 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status asmlinkage acpi_enter_sleep_state_s4bios(void)) 500 501 acpi_status acpi_leave_sleep_state_prep(u8 sleep_state); 502 503 acpi_status acpi_leave_sleep_state(u8 sleep_state); 504 505 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status 506 acpi_set_firmware_waking_vector(u32 507 physical_address)) 508 509 #if ACPI_MACHINE_WIDTH == 64 510 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status 511 acpi_set_firmware_waking_vector64(u64 512 physical_address)) 513 #endif 514 /* 515 * ACPI Timer interfaces 516 */ 517 #ifdef ACPI_FUTURE_USAGE 518 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status 519 acpi_get_timer_resolution(u32 *resolution)) 520 521 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_get_timer(u32 *ticks)) 522 523 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status 524 acpi_get_timer_duration(u32 start_ticks, 525 u32 end_ticks, 526 u32 *time_elapsed)) 527 #endif /* ACPI_FUTURE_USAGE */ 528 529 /* 530 * Error/Warning output 531 */ 532 void ACPI_INTERNAL_VAR_XFACE 533 acpi_error(const char *module_name, 534 u32 line_number, const char *format, ...) ACPI_PRINTF_LIKE(3); 535 536 void ACPI_INTERNAL_VAR_XFACE 537 acpi_exception(const char *module_name, 538 u32 line_number, 539 acpi_status status, const char *format, ...) ACPI_PRINTF_LIKE(4); 540 541 void ACPI_INTERNAL_VAR_XFACE 542 acpi_warning(const char *module_name, 543 u32 line_number, const char *format, ...) ACPI_PRINTF_LIKE(3); 544 545 void ACPI_INTERNAL_VAR_XFACE 546 acpi_info(const char *module_name, 547 u32 line_number, const char *format, ...) ACPI_PRINTF_LIKE(3); 548 549 void ACPI_INTERNAL_VAR_XFACE 550 acpi_bios_error(const char *module_name, 551 u32 line_number, const char *format, ...) ACPI_PRINTF_LIKE(3); 552 553 void ACPI_INTERNAL_VAR_XFACE 554 acpi_bios_warning(const char *module_name, 555 u32 line_number, const char *format, ...) ACPI_PRINTF_LIKE(3); 556 557 /* 558 * Debug output 559 */ 560 #ifdef ACPI_DEBUG_OUTPUT 561 562 void ACPI_INTERNAL_VAR_XFACE 563 acpi_debug_print(u32 requested_debug_level, 564 u32 line_number, 565 const char *function_name, 566 const char *module_name, 567 u32 component_id, const char *format, ...) ACPI_PRINTF_LIKE(6); 568 569 void ACPI_INTERNAL_VAR_XFACE 570 acpi_debug_print_raw(u32 requested_debug_level, 571 u32 line_number, 572 const char *function_name, 573 const char *module_name, 574 u32 component_id, 575 const char *format, ...) ACPI_PRINTF_LIKE(6); 576 #endif 577 578 #endif /* __ACXFACE_H__ */ 579