Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.14-rc3 862 lines 27 kB view raw
1/****************************************************************************** 2 * 3 * Name: aclocal.h - Internal data types used across the ACPI subsystem 4 * 5 *****************************************************************************/ 6 7/* 8 * Copyright (C) 2000 - 2005, R. Byron Moore 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 __ACLOCAL_H__ 45#define __ACLOCAL_H__ 46 47#define ACPI_WAIT_FOREVER 0xFFFF /* u16, as per ACPI spec */ 48 49typedef void *acpi_mutex; 50typedef u32 acpi_mutex_handle; 51 52/* Total number of aml opcodes defined */ 53 54#define AML_NUM_OPCODES 0x7F 55 56/* Forward declarations */ 57 58struct acpi_walk_state; 59struct acpi_obj_mutex; 60union acpi_parse_object; 61 62/***************************************************************************** 63 * 64 * Mutex typedefs and structs 65 * 66 ****************************************************************************/ 67 68/* 69 * Predefined handles for the mutex objects used within the subsystem 70 * All mutex objects are automatically created by acpi_ut_mutex_initialize. 71 * 72 * The acquire/release ordering protocol is implied via this list. Mutexes 73 * with a lower value must be acquired before mutexes with a higher value. 74 * 75 * NOTE: any changes here must be reflected in the acpi_gbl_mutex_names table also! 76 */ 77#define ACPI_MTX_EXECUTE 0 78#define ACPI_MTX_INTERPRETER 1 79#define ACPI_MTX_PARSER 2 80#define ACPI_MTX_DISPATCHER 3 81#define ACPI_MTX_TABLES 4 82#define ACPI_MTX_OP_REGIONS 5 83#define ACPI_MTX_NAMESPACE 6 84#define ACPI_MTX_EVENTS 7 85#define ACPI_MTX_HARDWARE 8 86#define ACPI_MTX_CACHES 9 87#define ACPI_MTX_MEMORY 10 88#define ACPI_MTX_DEBUG_CMD_COMPLETE 11 89#define ACPI_MTX_DEBUG_CMD_READY 12 90 91#define MAX_MUTEX 12 92#define NUM_MUTEX MAX_MUTEX+1 93 94#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) 95#ifdef DEFINE_ACPI_GLOBALS 96 97/* Names for the mutexes used in the subsystem */ 98 99static char *acpi_gbl_mutex_names[] = { 100 "ACPI_MTX_Execute", 101 "ACPI_MTX_Interpreter", 102 "ACPI_MTX_Parser", 103 "ACPI_MTX_Dispatcher", 104 "ACPI_MTX_Tables", 105 "ACPI_MTX_op_regions", 106 "ACPI_MTX_Namespace", 107 "ACPI_MTX_Events", 108 "ACPI_MTX_Hardware", 109 "ACPI_MTX_Caches", 110 "ACPI_MTX_Memory", 111 "ACPI_MTX_debug_cmd_complete", 112 "ACPI_MTX_debug_cmd_ready", 113}; 114 115#endif 116#endif 117 118/* Owner IDs are used to track namespace nodes for selective deletion */ 119 120typedef u8 acpi_owner_id; 121#define ACPI_OWNER_ID_MAX 0xFF 122 123/* This Thread ID means that the mutex is not in use (unlocked) */ 124 125#define ACPI_MUTEX_NOT_ACQUIRED (u32) -1 126 127/* Table for the global mutexes */ 128 129struct acpi_mutex_info { 130 acpi_mutex mutex; 131 u32 use_count; 132 u32 thread_id; 133}; 134 135/* Lock flag parameter for various interfaces */ 136 137#define ACPI_MTX_DO_NOT_LOCK 0 138#define ACPI_MTX_LOCK 1 139 140/* Field access granularities */ 141 142#define ACPI_FIELD_BYTE_GRANULARITY 1 143#define ACPI_FIELD_WORD_GRANULARITY 2 144#define ACPI_FIELD_DWORD_GRANULARITY 4 145#define ACPI_FIELD_QWORD_GRANULARITY 8 146 147/***************************************************************************** 148 * 149 * Namespace typedefs and structs 150 * 151 ****************************************************************************/ 152 153/* Operational modes of the AML interpreter/scanner */ 154 155typedef enum { 156 ACPI_IMODE_LOAD_PASS1 = 0x01, 157 ACPI_IMODE_LOAD_PASS2 = 0x02, 158 ACPI_IMODE_EXECUTE = 0x0E 159} acpi_interpreter_mode; 160 161/* 162 * The Node describes a named object that appears in the AML 163 * An acpi_node is used to store Nodes. 164 * 165 * data_type is used to differentiate between internal descriptors, and MUST 166 * be the first byte in this structure. 167 */ 168union acpi_name_union { 169 u32 integer; 170 char ascii[4]; 171}; 172 173struct acpi_namespace_node { 174 u8 descriptor; /* Used to differentiate object descriptor types */ 175 u8 type; /* Type associated with this name */ 176 u16 reference_count; /* Current count of references and children */ 177 union acpi_name_union name; /* ACPI Name, always 4 chars per ACPI spec */ 178 union acpi_operand_object *object; /* Pointer to attached ACPI object (optional) */ 179 struct acpi_namespace_node *child; /* First child */ 180 struct acpi_namespace_node *peer; /* Next peer */ 181 u8 owner_id; /* Who created this node */ 182 u8 flags; 183 184 /* Fields used by the ASL compiler only */ 185 186#ifdef ACPI_ASL_COMPILER 187 u32 value; 188 union acpi_parse_object *op; 189#endif 190}; 191 192#define ACPI_ENTRY_NOT_FOUND NULL 193 194/* Node flags */ 195 196#define ANOBJ_RESERVED 0x01 197#define ANOBJ_END_OF_PEER_LIST 0x02 198#define ANOBJ_DATA_WIDTH_32 0x04 /* Parent table is 64-bits */ 199#define ANOBJ_METHOD_ARG 0x08 200#define ANOBJ_METHOD_LOCAL 0x10 201#define ANOBJ_METHOD_NO_RETVAL 0x20 202#define ANOBJ_METHOD_SOME_NO_RETVAL 0x40 203#define ANOBJ_IS_BIT_OFFSET 0x80 204 205/* 206 * ACPI Table Descriptor. One per ACPI table 207 */ 208struct acpi_table_desc { 209 struct acpi_table_desc *prev; 210 struct acpi_table_desc *next; 211 struct acpi_table_desc *installed_desc; 212 struct acpi_table_header *pointer; 213 u8 *aml_start; 214 u64 physical_address; 215 u32 aml_length; 216 acpi_size length; 217 acpi_owner_id owner_id; 218 u8 type; 219 u8 allocation; 220 u8 loaded_into_namespace; 221}; 222 223struct acpi_table_list { 224 struct acpi_table_desc *next; 225 u32 count; 226}; 227 228struct acpi_find_context { 229 char *search_for; 230 acpi_handle *list; 231 u32 *count; 232}; 233 234struct acpi_ns_search_data { 235 struct acpi_namespace_node *node; 236}; 237 238/* 239 * Predefined Namespace items 240 */ 241struct acpi_predefined_names { 242 char *name; 243 u8 type; 244 char *val; 245}; 246 247/* Object types used during package copies */ 248 249#define ACPI_COPY_TYPE_SIMPLE 0 250#define ACPI_COPY_TYPE_PACKAGE 1 251 252/* Info structure used to convert external<->internal namestrings */ 253 254struct acpi_namestring_info { 255 char *external_name; 256 char *next_external_char; 257 char *internal_name; 258 u32 length; 259 u32 num_segments; 260 u32 num_carats; 261 u8 fully_qualified; 262}; 263 264/* Field creation info */ 265 266struct acpi_create_field_info { 267 struct acpi_namespace_node *region_node; 268 struct acpi_namespace_node *field_node; 269 struct acpi_namespace_node *register_node; 270 struct acpi_namespace_node *data_register_node; 271 u32 bank_value; 272 u32 field_bit_position; 273 u32 field_bit_length; 274 u8 field_flags; 275 u8 attribute; 276 u8 field_type; 277}; 278 279/***************************************************************************** 280 * 281 * Event typedefs and structs 282 * 283 ****************************************************************************/ 284 285/* Dispatch info for each GPE -- either a method or handler, cannot be both */ 286 287struct acpi_handler_info { 288 acpi_event_handler address; /* Address of handler, if any */ 289 void *context; /* Context to be passed to handler */ 290 struct acpi_namespace_node *method_node; /* Method node for this GPE level (saved) */ 291}; 292 293union acpi_gpe_dispatch_info { 294 struct acpi_namespace_node *method_node; /* Method node for this GPE level */ 295 struct acpi_handler_info *handler; 296}; 297 298/* 299 * Information about a GPE, one per each GPE in an array. 300 * NOTE: Important to keep this struct as small as possible. 301 */ 302struct acpi_gpe_event_info { 303 union acpi_gpe_dispatch_info dispatch; /* Either Method or Handler */ 304 struct acpi_gpe_register_info *register_info; /* Backpointer to register info */ 305 u8 flags; /* Misc info about this GPE */ 306 u8 register_bit; /* This GPE bit within the register */ 307}; 308 309/* Information about a GPE register pair, one per each status/enable pair in an array */ 310 311struct acpi_gpe_register_info { 312 struct acpi_generic_address status_address; /* Address of status reg */ 313 struct acpi_generic_address enable_address; /* Address of enable reg */ 314 u8 enable_for_wake; /* GPEs to keep enabled when sleeping */ 315 u8 enable_for_run; /* GPEs to keep enabled when running */ 316 u8 base_gpe_number; /* Base GPE number for this register */ 317}; 318 319/* 320 * Information about a GPE register block, one per each installed block -- 321 * GPE0, GPE1, and one per each installed GPE Block Device. 322 */ 323struct acpi_gpe_block_info { 324 struct acpi_namespace_node *node; 325 struct acpi_gpe_block_info *previous; 326 struct acpi_gpe_block_info *next; 327 struct acpi_gpe_xrupt_info *xrupt_block; /* Backpointer to interrupt block */ 328 struct acpi_gpe_register_info *register_info; /* One per GPE register pair */ 329 struct acpi_gpe_event_info *event_info; /* One for each GPE */ 330 struct acpi_generic_address block_address; /* Base address of the block */ 331 u32 register_count; /* Number of register pairs in block */ 332 u8 block_base_number; /* Base GPE number for this block */ 333}; 334 335/* Information about GPE interrupt handlers, one per each interrupt level used for GPEs */ 336 337struct acpi_gpe_xrupt_info { 338 struct acpi_gpe_xrupt_info *previous; 339 struct acpi_gpe_xrupt_info *next; 340 struct acpi_gpe_block_info *gpe_block_list_head; /* List of GPE blocks for this xrupt */ 341 u32 interrupt_number; /* System interrupt number */ 342}; 343 344struct acpi_gpe_walk_info { 345 struct acpi_namespace_node *gpe_device; 346 struct acpi_gpe_block_info *gpe_block; 347}; 348 349typedef acpi_status(*ACPI_GPE_CALLBACK) (struct acpi_gpe_xrupt_info * 350 gpe_xrupt_info, 351 struct acpi_gpe_block_info * 352 gpe_block); 353 354/* Information about each particular fixed event */ 355 356struct acpi_fixed_event_handler { 357 acpi_event_handler handler; /* Address of handler. */ 358 void *context; /* Context to be passed to handler */ 359}; 360 361struct acpi_fixed_event_info { 362 u8 status_register_id; 363 u8 enable_register_id; 364 u16 status_bit_mask; 365 u16 enable_bit_mask; 366}; 367 368/* Information used during field processing */ 369 370struct acpi_field_info { 371 u8 skip_field; 372 u8 field_flag; 373 u32 pkg_length; 374}; 375 376/***************************************************************************** 377 * 378 * Generic "state" object for stacks 379 * 380 ****************************************************************************/ 381 382#define ACPI_CONTROL_NORMAL 0xC0 383#define ACPI_CONTROL_CONDITIONAL_EXECUTING 0xC1 384#define ACPI_CONTROL_PREDICATE_EXECUTING 0xC2 385#define ACPI_CONTROL_PREDICATE_FALSE 0xC3 386#define ACPI_CONTROL_PREDICATE_TRUE 0xC4 387 388#define ACPI_STATE_COMMON /* Two 32-bit fields and a pointer */\ 389 u8 data_type; /* To differentiate various internal objs */\ 390 u8 flags; \ 391 u16 value; \ 392 u16 state; \ 393 u16 reserved; \ 394 void *next; \ 395 396struct acpi_common_state { 397ACPI_STATE_COMMON}; 398 399/* 400 * Update state - used to traverse complex objects such as packages 401 */ 402struct acpi_update_state { 403 ACPI_STATE_COMMON union acpi_operand_object *object; 404}; 405 406/* 407 * Pkg state - used to traverse nested package structures 408 */ 409struct acpi_pkg_state { 410 ACPI_STATE_COMMON union acpi_operand_object *source_object; 411 union acpi_operand_object *dest_object; 412 struct acpi_walk_state *walk_state; 413 void *this_target_obj; 414 u32 num_packages; 415 u16 index; 416}; 417 418/* 419 * Control state - one per if/else and while constructs. 420 * Allows nesting of these constructs 421 */ 422struct acpi_control_state { 423 ACPI_STATE_COMMON union acpi_parse_object *predicate_op; 424 u8 *aml_predicate_start; /* Start of if/while predicate */ 425 u8 *package_end; /* End of if/while block */ 426 u16 opcode; 427}; 428 429/* 430 * Scope state - current scope during namespace lookups 431 */ 432struct acpi_scope_state { 433 ACPI_STATE_COMMON struct acpi_namespace_node *node; 434}; 435 436struct acpi_pscope_state { 437 ACPI_STATE_COMMON union acpi_parse_object *op; /* Current op being parsed */ 438 u8 *arg_end; /* Current argument end */ 439 u8 *pkg_end; /* Current package end */ 440 u32 arg_list; /* Next argument to parse */ 441 u32 arg_count; /* Number of fixed arguments */ 442}; 443 444/* 445 * Thread state - one per thread across multiple walk states. Multiple walk 446 * states are created when there are nested control methods executing. 447 */ 448struct acpi_thread_state { 449 ACPI_STATE_COMMON struct acpi_walk_state *walk_state_list; /* Head of list of walk_states for this thread */ 450 union acpi_operand_object *acquired_mutex_list; /* List of all currently acquired mutexes */ 451 u32 thread_id; /* Running thread ID */ 452 u8 current_sync_level; /* Mutex Sync (nested acquire) level */ 453}; 454 455/* 456 * Result values - used to accumulate the results of nested 457 * AML arguments 458 */ 459struct acpi_result_values { 460 ACPI_STATE_COMMON 461 union acpi_operand_object *obj_desc[ACPI_OBJ_NUM_OPERANDS]; 462 u8 num_results; 463 u8 last_insert; 464}; 465 466typedef 467acpi_status(*acpi_parse_downwards) (struct acpi_walk_state * walk_state, 468 union acpi_parse_object ** out_op); 469 470typedef acpi_status(*acpi_parse_upwards) (struct acpi_walk_state * walk_state); 471 472/* 473 * Notify info - used to pass info to the deferred notify 474 * handler/dispatcher. 475 */ 476struct acpi_notify_info { 477 ACPI_STATE_COMMON struct acpi_namespace_node *node; 478 union acpi_operand_object *handler_obj; 479}; 480 481/* Generic state is union of structs above */ 482 483union acpi_generic_state { 484 struct acpi_common_state common; 485 struct acpi_control_state control; 486 struct acpi_update_state update; 487 struct acpi_scope_state scope; 488 struct acpi_pscope_state parse_scope; 489 struct acpi_pkg_state pkg; 490 struct acpi_thread_state thread; 491 struct acpi_result_values results; 492 struct acpi_notify_info notify; 493}; 494 495/***************************************************************************** 496 * 497 * Interpreter typedefs and structs 498 * 499 ****************************************************************************/ 500 501typedef acpi_status(*ACPI_EXECUTE_OP) (struct acpi_walk_state * walk_state); 502 503/***************************************************************************** 504 * 505 * Parser typedefs and structs 506 * 507 ****************************************************************************/ 508 509/* 510 * AML opcode, name, and argument layout 511 */ 512struct acpi_opcode_info { 513#if defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUG_OUTPUT) 514 char *name; /* Opcode name (disassembler/debug only) */ 515#endif 516 u32 parse_args; /* Grammar/Parse time arguments */ 517 u32 runtime_args; /* Interpret time arguments */ 518 u32 flags; /* Misc flags */ 519 u8 object_type; /* Corresponding internal object type */ 520 u8 class; /* Opcode class */ 521 u8 type; /* Opcode type */ 522}; 523 524union acpi_parse_value { 525 acpi_integer integer; /* Integer constant (Up to 64 bits) */ 526 struct uint64_struct integer64; /* Structure overlay for 2 32-bit Dwords */ 527 u32 size; /* bytelist or field size */ 528 char *string; /* NULL terminated string */ 529 u8 *buffer; /* buffer or string */ 530 char *name; /* NULL terminated string */ 531 union acpi_parse_object *arg; /* arguments and contained ops */ 532}; 533 534#define ACPI_PARSE_COMMON \ 535 u8 data_type; /* To differentiate various internal objs */\ 536 u8 flags; /* Type of Op */\ 537 u16 aml_opcode; /* AML opcode */\ 538 u32 aml_offset; /* Offset of declaration in AML */\ 539 union acpi_parse_object *parent; /* Parent op */\ 540 union acpi_parse_object *next; /* Next op */\ 541 ACPI_DISASM_ONLY_MEMBERS (\ 542 u8 disasm_flags; /* Used during AML disassembly */\ 543 u8 disasm_opcode; /* Subtype used for disassembly */\ 544 char aml_op_name[16]) /* Op name (debug only) */\ 545 /* NON-DEBUG members below: */\ 546 struct acpi_namespace_node *node; /* For use by interpreter */\ 547 union acpi_parse_value value; /* Value or args associated with the opcode */\ 548 549 550#define ACPI_DASM_BUFFER 0x00 551#define ACPI_DASM_RESOURCE 0x01 552#define ACPI_DASM_STRING 0x02 553#define ACPI_DASM_UNICODE 0x03 554#define ACPI_DASM_EISAID 0x04 555#define ACPI_DASM_MATCHOP 0x05 556 557/* 558 * generic operation (for example: If, While, Store) 559 */ 560struct acpi_parse_obj_common { 561ACPI_PARSE_COMMON}; 562 563/* 564 * Extended Op for named ops (Scope, Method, etc.), deferred ops (Methods and op_regions), 565 * and bytelists. 566 */ 567struct acpi_parse_obj_named { 568 ACPI_PARSE_COMMON u8 * path; 569 u8 *data; /* AML body or bytelist data */ 570 u32 length; /* AML length */ 571 u32 name; /* 4-byte name or zero if no name */ 572}; 573 574/* The parse node is the fundamental element of the parse tree */ 575 576struct acpi_parse_obj_asl { 577 ACPI_PARSE_COMMON union acpi_parse_object *child; 578 union acpi_parse_object *parent_method; 579 char *filename; 580 char *external_name; 581 char *namepath; 582 char name_seg[4]; 583 u32 extra_value; 584 u32 column; 585 u32 line_number; 586 u32 logical_line_number; 587 u32 logical_byte_offset; 588 u32 end_line; 589 u32 end_logical_line; 590 u32 acpi_btype; 591 u32 aml_length; 592 u32 aml_subtree_length; 593 u32 final_aml_length; 594 u32 final_aml_offset; 595 u32 compile_flags; 596 u16 parse_opcode; 597 u8 aml_opcode_length; 598 u8 aml_pkg_len_bytes; 599 u8 extra; 600 char parse_op_name[12]; 601}; 602 603union acpi_parse_object { 604 struct acpi_parse_obj_common common; 605 struct acpi_parse_obj_named named; 606 struct acpi_parse_obj_asl asl; 607}; 608 609/* 610 * Parse state - one state per parser invocation and each control 611 * method. 612 */ 613struct acpi_parse_state { 614 u32 aml_size; 615 u8 *aml_start; /* First AML byte */ 616 u8 *aml; /* Next AML byte */ 617 u8 *aml_end; /* (last + 1) AML byte */ 618 u8 *pkg_start; /* Current package begin */ 619 u8 *pkg_end; /* Current package end */ 620 union acpi_parse_object *start_op; /* Root of parse tree */ 621 struct acpi_namespace_node *start_node; 622 union acpi_generic_state *scope; /* Current scope */ 623 union acpi_parse_object *start_scope; 624}; 625 626/* Parse object flags */ 627 628#define ACPI_PARSEOP_GENERIC 0x01 629#define ACPI_PARSEOP_NAMED 0x02 630#define ACPI_PARSEOP_DEFERRED 0x04 631#define ACPI_PARSEOP_BYTELIST 0x08 632#define ACPI_PARSEOP_IN_CACHE 0x80 633 634/* Parse object disasm_flags */ 635 636#define ACPI_PARSEOP_IGNORE 0x01 637#define ACPI_PARSEOP_PARAMLIST 0x02 638#define ACPI_PARSEOP_EMPTY_TERMLIST 0x04 639#define ACPI_PARSEOP_SPECIAL 0x10 640 641/***************************************************************************** 642 * 643 * Hardware (ACPI registers) and PNP 644 * 645 ****************************************************************************/ 646 647#define PCI_ROOT_HID_STRING "PNP0A03" 648#define PCI_EXPRESS_ROOT_HID_STRING "PNP0A08" 649 650struct acpi_bit_register_info { 651 u8 parent_register; 652 u8 bit_position; 653 u16 access_bit_mask; 654}; 655 656/* 657 * Register IDs 658 * These are the full ACPI registers 659 */ 660#define ACPI_REGISTER_PM1_STATUS 0x01 661#define ACPI_REGISTER_PM1_ENABLE 0x02 662#define ACPI_REGISTER_PM1_CONTROL 0x03 663#define ACPI_REGISTER_PM1A_CONTROL 0x04 664#define ACPI_REGISTER_PM1B_CONTROL 0x05 665#define ACPI_REGISTER_PM2_CONTROL 0x06 666#define ACPI_REGISTER_PM_TIMER 0x07 667#define ACPI_REGISTER_PROCESSOR_BLOCK 0x08 668#define ACPI_REGISTER_SMI_COMMAND_BLOCK 0x09 669 670/* Masks used to access the bit_registers */ 671 672#define ACPI_BITMASK_TIMER_STATUS 0x0001 673#define ACPI_BITMASK_BUS_MASTER_STATUS 0x0010 674#define ACPI_BITMASK_GLOBAL_LOCK_STATUS 0x0020 675#define ACPI_BITMASK_POWER_BUTTON_STATUS 0x0100 676#define ACPI_BITMASK_SLEEP_BUTTON_STATUS 0x0200 677#define ACPI_BITMASK_RT_CLOCK_STATUS 0x0400 678#define ACPI_BITMASK_PCIEXP_WAKE_STATUS 0x4000 /* ACPI 3.0 */ 679#define ACPI_BITMASK_WAKE_STATUS 0x8000 680 681#define ACPI_BITMASK_ALL_FIXED_STATUS (ACPI_BITMASK_TIMER_STATUS | \ 682 ACPI_BITMASK_BUS_MASTER_STATUS | \ 683 ACPI_BITMASK_GLOBAL_LOCK_STATUS | \ 684 ACPI_BITMASK_POWER_BUTTON_STATUS | \ 685 ACPI_BITMASK_SLEEP_BUTTON_STATUS | \ 686 ACPI_BITMASK_RT_CLOCK_STATUS | \ 687 ACPI_BITMASK_WAKE_STATUS) 688 689#define ACPI_BITMASK_TIMER_ENABLE 0x0001 690#define ACPI_BITMASK_GLOBAL_LOCK_ENABLE 0x0020 691#define ACPI_BITMASK_POWER_BUTTON_ENABLE 0x0100 692#define ACPI_BITMASK_SLEEP_BUTTON_ENABLE 0x0200 693#define ACPI_BITMASK_RT_CLOCK_ENABLE 0x0400 694#define ACPI_BITMASK_PCIEXP_WAKE_DISABLE 0x4000 /* ACPI 3.0 */ 695 696#define ACPI_BITMASK_SCI_ENABLE 0x0001 697#define ACPI_BITMASK_BUS_MASTER_RLD 0x0002 698#define ACPI_BITMASK_GLOBAL_LOCK_RELEASE 0x0004 699#define ACPI_BITMASK_SLEEP_TYPE_X 0x1C00 700#define ACPI_BITMASK_SLEEP_ENABLE 0x2000 701 702#define ACPI_BITMASK_ARB_DISABLE 0x0001 703 704/* Raw bit position of each bit_register */ 705 706#define ACPI_BITPOSITION_TIMER_STATUS 0x00 707#define ACPI_BITPOSITION_BUS_MASTER_STATUS 0x04 708#define ACPI_BITPOSITION_GLOBAL_LOCK_STATUS 0x05 709#define ACPI_BITPOSITION_POWER_BUTTON_STATUS 0x08 710#define ACPI_BITPOSITION_SLEEP_BUTTON_STATUS 0x09 711#define ACPI_BITPOSITION_RT_CLOCK_STATUS 0x0A 712#define ACPI_BITPOSITION_PCIEXP_WAKE_STATUS 0x0E /* ACPI 3.0 */ 713#define ACPI_BITPOSITION_WAKE_STATUS 0x0F 714 715#define ACPI_BITPOSITION_TIMER_ENABLE 0x00 716#define ACPI_BITPOSITION_GLOBAL_LOCK_ENABLE 0x05 717#define ACPI_BITPOSITION_POWER_BUTTON_ENABLE 0x08 718#define ACPI_BITPOSITION_SLEEP_BUTTON_ENABLE 0x09 719#define ACPI_BITPOSITION_RT_CLOCK_ENABLE 0x0A 720#define ACPI_BITPOSITION_PCIEXP_WAKE_DISABLE 0x0E /* ACPI 3.0 */ 721 722#define ACPI_BITPOSITION_SCI_ENABLE 0x00 723#define ACPI_BITPOSITION_BUS_MASTER_RLD 0x01 724#define ACPI_BITPOSITION_GLOBAL_LOCK_RELEASE 0x02 725#define ACPI_BITPOSITION_SLEEP_TYPE_X 0x0A 726#define ACPI_BITPOSITION_SLEEP_ENABLE 0x0D 727 728#define ACPI_BITPOSITION_ARB_DISABLE 0x00 729 730/***************************************************************************** 731 * 732 * Resource descriptors 733 * 734 ****************************************************************************/ 735 736/* resource_type values */ 737 738#define ACPI_RESOURCE_TYPE_MEMORY_RANGE 0 739#define ACPI_RESOURCE_TYPE_IO_RANGE 1 740#define ACPI_RESOURCE_TYPE_BUS_NUMBER_RANGE 2 741 742/* Resource descriptor types and masks */ 743 744#define ACPI_RDESC_TYPE_LARGE 0x80 745#define ACPI_RDESC_TYPE_SMALL 0x00 746 747#define ACPI_RDESC_TYPE_MASK 0x80 748#define ACPI_RDESC_SMALL_MASK 0x78 /* Only bits 6:3 contain the type */ 749 750/* 751 * Small resource descriptor types 752 * Note: The 3 length bits (2:0) must be zero 753 */ 754#define ACPI_RDESC_TYPE_IRQ_FORMAT 0x20 755#define ACPI_RDESC_TYPE_DMA_FORMAT 0x28 756#define ACPI_RDESC_TYPE_START_DEPENDENT 0x30 757#define ACPI_RDESC_TYPE_END_DEPENDENT 0x38 758#define ACPI_RDESC_TYPE_IO_PORT 0x40 759#define ACPI_RDESC_TYPE_FIXED_IO_PORT 0x48 760#define ACPI_RDESC_TYPE_SMALL_VENDOR 0x70 761#define ACPI_RDESC_TYPE_END_TAG 0x78 762 763/* 764 * Large resource descriptor types 765 */ 766#define ACPI_RDESC_TYPE_MEMORY_24 0x81 767#define ACPI_RDESC_TYPE_GENERAL_REGISTER 0x82 768#define ACPI_RDESC_TYPE_LARGE_VENDOR 0x84 769#define ACPI_RDESC_TYPE_MEMORY_32 0x85 770#define ACPI_RDESC_TYPE_FIXED_MEMORY_32 0x86 771#define ACPI_RDESC_TYPE_DWORD_ADDRESS_SPACE 0x87 772#define ACPI_RDESC_TYPE_WORD_ADDRESS_SPACE 0x88 773#define ACPI_RDESC_TYPE_EXTENDED_XRUPT 0x89 774#define ACPI_RDESC_TYPE_QWORD_ADDRESS_SPACE 0x8A 775#define ACPI_RDESC_TYPE_EXTENDED_ADDRESS_SPACE 0x8B 776 777/***************************************************************************** 778 * 779 * Miscellaneous 780 * 781 ****************************************************************************/ 782 783#define ACPI_ASCII_ZERO 0x30 784 785/***************************************************************************** 786 * 787 * Debugger 788 * 789 ****************************************************************************/ 790 791struct acpi_db_method_info { 792 acpi_handle thread_gate; 793 char *name; 794 char **args; 795 u32 flags; 796 u32 num_loops; 797 char pathname[128]; 798}; 799 800struct acpi_integrity_info { 801 u32 nodes; 802 u32 objects; 803}; 804 805#define ACPI_DB_REDIRECTABLE_OUTPUT 0x01 806#define ACPI_DB_CONSOLE_OUTPUT 0x02 807#define ACPI_DB_DUPLICATE_OUTPUT 0x03 808 809/***************************************************************************** 810 * 811 * Debug 812 * 813 ****************************************************************************/ 814 815/* Entry for a memory allocation (debug only) */ 816 817#define ACPI_MEM_MALLOC 0 818#define ACPI_MEM_CALLOC 1 819#define ACPI_MAX_MODULE_NAME 16 820 821#define ACPI_COMMON_DEBUG_MEM_HEADER \ 822 struct acpi_debug_mem_block *previous; \ 823 struct acpi_debug_mem_block *next; \ 824 u32 size; \ 825 u32 component; \ 826 u32 line; \ 827 char module[ACPI_MAX_MODULE_NAME]; \ 828 u8 alloc_type; 829 830struct acpi_debug_mem_header { 831ACPI_COMMON_DEBUG_MEM_HEADER}; 832 833struct acpi_debug_mem_block { 834 ACPI_COMMON_DEBUG_MEM_HEADER u64 user_space; 835}; 836 837#define ACPI_MEM_LIST_GLOBAL 0 838#define ACPI_MEM_LIST_NSNODE 1 839#define ACPI_MEM_LIST_MAX 1 840#define ACPI_NUM_MEM_LISTS 2 841 842struct acpi_memory_list { 843 char *list_name; 844 void *list_head; 845 u16 object_size; 846 u16 max_depth; 847 u16 current_depth; 848 u16 link_offset; 849 850#ifdef ACPI_DBG_TRACK_ALLOCATIONS 851 852 /* Statistics for debug memory tracking only */ 853 854 u32 total_allocated; 855 u32 total_freed; 856 u32 current_total_size; 857 u32 requests; 858 u32 hits; 859#endif 860}; 861 862#endif /* __ACLOCAL_H__ */