2005-04-17 02:20:36 +04:00
/******************************************************************************
*
* Name : aclocal . h - Internal data types used across the ACPI subsystem
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* Copyright ( C ) 2000 - 2005 , R . Byron Moore
* All rights reserved .
*
* Redistribution and use in source and binary forms , with or without
* modification , are permitted provided that the following conditions
* are met :
* 1. Redistributions of source code must retain the above copyright
* notice , this list of conditions , and the following disclaimer ,
* without modification .
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
* substantially similar to the " NO WARRANTY " disclaimer below
* ( " Disclaimer " ) and any redistribution must be conditioned upon
* including a substantially similar Disclaimer requirement for further
* binary redistribution .
* 3. Neither the names of the above - listed copyright holders nor the names
* of any contributors may be used to endorse or promote products derived
* from this software without specific prior written permission .
*
* Alternatively , this software may be distributed under the terms of the
* GNU General Public License ( " GPL " ) version 2 as published by the Free
* Software Foundation .
*
* NO WARRANTY
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* " AS IS " AND ANY EXPRESS OR IMPLIED WARRANTIES , INCLUDING , BUT NOT
* LIMITED TO , THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED . IN NO EVENT SHALL THE COPYRIGHT
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL , EXEMPLARY , OR CONSEQUENTIAL
* DAMAGES ( INCLUDING , BUT NOT LIMITED TO , PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES ; LOSS OF USE , DATA , OR PROFITS ; OR BUSINESS INTERRUPTION )
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY , WHETHER IN CONTRACT ,
* STRICT LIABILITY , OR TORT ( INCLUDING NEGLIGENCE OR OTHERWISE ) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE , EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES .
*/
# ifndef __ACLOCAL_H__
# define __ACLOCAL_H__
# define ACPI_WAIT_FOREVER 0xFFFF /* u16, as per ACPI spec */
typedef void * acpi_mutex ;
typedef u32 acpi_mutex_handle ;
/* Total number of aml opcodes defined */
# define AML_NUM_OPCODES 0x7F
/*****************************************************************************
*
* Mutex typedefs and structs
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* Predefined handles for the mutex objects used within the subsystem
* All mutex objects are automatically created by acpi_ut_mutex_initialize .
*
* The acquire / release ordering protocol is implied via this list . Mutexes
* with a lower value must be acquired before mutexes with a higher value .
*
* NOTE : any changes here must be reflected in the acpi_gbl_mutex_names table also !
*/
# define ACPI_MTX_EXECUTE 0
# define ACPI_MTX_INTERPRETER 1
# define ACPI_MTX_PARSER 2
# define ACPI_MTX_DISPATCHER 3
# define ACPI_MTX_TABLES 4
# define ACPI_MTX_OP_REGIONS 5
# define ACPI_MTX_NAMESPACE 6
# define ACPI_MTX_EVENTS 7
# define ACPI_MTX_HARDWARE 8
# define ACPI_MTX_CACHES 9
# define ACPI_MTX_MEMORY 10
# define ACPI_MTX_DEBUG_CMD_COMPLETE 11
# define ACPI_MTX_DEBUG_CMD_READY 12
# define MAX_MUTEX 12
# define NUM_MUTEX MAX_MUTEX+1
# if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
# ifdef DEFINE_ACPI_GLOBALS
/* Names for the mutexes used in the subsystem */
static char * acpi_gbl_mutex_names [ ] =
{
" ACPI_MTX_Execute " ,
" ACPI_MTX_Interpreter " ,
" ACPI_MTX_Parser " ,
" ACPI_MTX_Dispatcher " ,
" ACPI_MTX_Tables " ,
" ACPI_MTX_op_regions " ,
" ACPI_MTX_Namespace " ,
" ACPI_MTX_Events " ,
" ACPI_MTX_Hardware " ,
" ACPI_MTX_Caches " ,
" ACPI_MTX_Memory " ,
" ACPI_MTX_debug_cmd_complete " ,
" ACPI_MTX_debug_cmd_ready " ,
} ;
# endif
# endif
/* Table for the global mutexes */
struct acpi_mutex_info
{
acpi_mutex mutex ;
u32 use_count ;
u32 owner_id ;
} ;
/* This owner ID means that the mutex is not in use (unlocked) */
# define ACPI_MUTEX_NOT_ACQUIRED (u32) (-1)
/* Lock flag parameter for various interfaces */
# define ACPI_MTX_DO_NOT_LOCK 0
# define ACPI_MTX_LOCK 1
typedef u16 acpi_owner_id ;
# define ACPI_OWNER_TYPE_TABLE 0x0
# define ACPI_OWNER_TYPE_METHOD 0x1
# define ACPI_FIRST_METHOD_ID 0x0001
# define ACPI_FIRST_TABLE_ID 0xF000
/* Field access granularities */
# define ACPI_FIELD_BYTE_GRANULARITY 1
# define ACPI_FIELD_WORD_GRANULARITY 2
# define ACPI_FIELD_DWORD_GRANULARITY 4
# define ACPI_FIELD_QWORD_GRANULARITY 8
2005-04-19 06:49:35 +04:00
2005-04-17 02:20:36 +04:00
/*****************************************************************************
*
* Namespace typedefs and structs
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* Operational modes of the AML interpreter/scanner */
typedef enum
{
ACPI_IMODE_LOAD_PASS1 = 0x01 ,
ACPI_IMODE_LOAD_PASS2 = 0x02 ,
ACPI_IMODE_EXECUTE = 0x0E
} acpi_interpreter_mode ;
/*
* The Node describes a named object that appears in the AML
* An acpi_node is used to store Nodes .
*
* data_type is used to differentiate between internal descriptors , and MUST
* be the first byte in this structure .
*/
union acpi_name_union
{
u32 integer ;
char ascii [ 4 ] ;
} ;
struct acpi_namespace_node
{
u8 descriptor ; /* Used to differentiate object descriptor types */
u8 type ; /* Type associated with this name */
u16 owner_id ;
union acpi_name_union name ; /* ACPI Name, always 4 chars per ACPI spec */
union acpi_operand_object * object ; /* Pointer to attached ACPI object (optional) */
struct acpi_namespace_node * child ; /* First child */
struct acpi_namespace_node * peer ; /* Next peer*/
u16 reference_count ; /* Current count of references and children */
u8 flags ;
} ;
# define ACPI_ENTRY_NOT_FOUND NULL
/* Node flags */
# define ANOBJ_RESERVED 0x01
# define ANOBJ_END_OF_PEER_LIST 0x02
# define ANOBJ_DATA_WIDTH_32 0x04 /* Parent table is 64-bits */
# define ANOBJ_METHOD_ARG 0x08
# define ANOBJ_METHOD_LOCAL 0x10
# define ANOBJ_METHOD_NO_RETVAL 0x20
# define ANOBJ_METHOD_SOME_NO_RETVAL 0x40
# define ANOBJ_IS_BIT_OFFSET 0x80
/*
* ACPI Table Descriptor . One per ACPI table
*/
struct acpi_table_desc
{
struct acpi_table_desc * prev ;
struct acpi_table_desc * next ;
struct acpi_table_desc * installed_desc ;
struct acpi_table_header * pointer ;
u8 * aml_start ;
u64 physical_address ;
u32 aml_length ;
acpi_size length ;
acpi_owner_id table_id ;
u8 type ;
u8 allocation ;
u8 loaded_into_namespace ;
} ;
struct acpi_table_list
{
struct acpi_table_desc * next ;
u32 count ;
} ;
struct acpi_find_context
{
char * search_for ;
acpi_handle * list ;
u32 * count ;
} ;
struct acpi_ns_search_data
{
struct acpi_namespace_node * node ;
} ;
/*
* Predefined Namespace items
*/
struct acpi_predefined_names
{
char * name ;
u8 type ;
char * val ;
} ;
/* Object types used during package copies */
# define ACPI_COPY_TYPE_SIMPLE 0
# define ACPI_COPY_TYPE_PACKAGE 1
/* Info structure used to convert external<->internal namestrings */
struct acpi_namestring_info
{
char * external_name ;
char * next_external_char ;
char * internal_name ;
u32 length ;
u32 num_segments ;
u32 num_carats ;
u8 fully_qualified ;
} ;
/* Field creation info */
struct acpi_create_field_info
{
struct acpi_namespace_node * region_node ;
struct acpi_namespace_node * field_node ;
struct acpi_namespace_node * register_node ;
struct acpi_namespace_node * data_register_node ;
u32 bank_value ;
u32 field_bit_position ;
u32 field_bit_length ;
u8 field_flags ;
u8 attribute ;
u8 field_type ;
} ;
/*****************************************************************************
*
* Event typedefs and structs
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* Dispatch info for each GPE -- either a method or handler, cannot be both */
struct acpi_handler_info
{
acpi_event_handler address ; /* Address of handler, if any */
void * context ; /* Context to be passed to handler */
struct acpi_namespace_node * method_node ; /* Method node for this GPE level (saved) */
} ;
union acpi_gpe_dispatch_info
{
struct acpi_namespace_node * method_node ; /* Method node for this GPE level */
struct acpi_handler_info * handler ;
} ;
/*
* Information about a GPE , one per each GPE in an array .
* NOTE : Important to keep this struct as small as possible .
*/
struct acpi_gpe_event_info
{
union acpi_gpe_dispatch_info dispatch ; /* Either Method or Handler */
struct acpi_gpe_register_info * register_info ; /* Backpointer to register info */
u8 flags ; /* Misc info about this GPE */
u8 register_bit ; /* This GPE bit within the register */
} ;
/* Information about a GPE register pair, one per each status/enable pair in an array */
struct acpi_gpe_register_info
{
struct acpi_generic_address status_address ; /* Address of status reg */
struct acpi_generic_address enable_address ; /* Address of enable reg */
u8 enable_for_wake ; /* GPEs to keep enabled when sleeping */
u8 enable_for_run ; /* GPEs to keep enabled when running */
u8 base_gpe_number ; /* Base GPE number for this register */
} ;
/*
* Information about a GPE register block , one per each installed block - -
* GPE0 , GPE1 , and one per each installed GPE Block Device .
*/
struct acpi_gpe_block_info
{
struct acpi_namespace_node * node ;
struct acpi_gpe_block_info * previous ;
struct acpi_gpe_block_info * next ;
struct acpi_gpe_xrupt_info * xrupt_block ; /* Backpointer to interrupt block */
struct acpi_gpe_register_info * register_info ; /* One per GPE register pair */
struct acpi_gpe_event_info * event_info ; /* One for each GPE */
struct acpi_generic_address block_address ; /* Base address of the block */
u32 register_count ; /* Number of register pairs in block */
u8 block_base_number ; /* Base GPE number for this block */
} ;
/* Information about GPE interrupt handlers, one per each interrupt level used for GPEs */
struct acpi_gpe_xrupt_info
{
struct acpi_gpe_xrupt_info * previous ;
struct acpi_gpe_xrupt_info * next ;
struct acpi_gpe_block_info * gpe_block_list_head ; /* List of GPE blocks for this xrupt */
2005-05-13 08:00:00 +04:00
u32 interrupt_number ; /* System interrupt number */
2005-04-17 02:20:36 +04:00
} ;
struct acpi_gpe_walk_info
{
struct acpi_namespace_node * gpe_device ;
struct acpi_gpe_block_info * gpe_block ;
} ;
typedef acpi_status ( * ACPI_GPE_CALLBACK ) (
struct acpi_gpe_xrupt_info * gpe_xrupt_info ,
struct acpi_gpe_block_info * gpe_block ) ;
/* Information about each particular fixed event */
struct acpi_fixed_event_handler
{
acpi_event_handler handler ; /* Address of handler. */
void * context ; /* Context to be passed to handler */
} ;
struct acpi_fixed_event_info
{
u8 status_register_id ;
u8 enable_register_id ;
u16 status_bit_mask ;
u16 enable_bit_mask ;
} ;
/* Information used during field processing */
struct acpi_field_info
{
u8 skip_field ;
u8 field_flag ;
u32 pkg_length ;
} ;
/*****************************************************************************
*
* Generic " state " object for stacks
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# define ACPI_CONTROL_NORMAL 0xC0
# define ACPI_CONTROL_CONDITIONAL_EXECUTING 0xC1
# define ACPI_CONTROL_PREDICATE_EXECUTING 0xC2
# define ACPI_CONTROL_PREDICATE_FALSE 0xC3
# define ACPI_CONTROL_PREDICATE_TRUE 0xC4
/* Forward declarations */
2005-04-19 06:49:35 +04:00
2005-04-17 02:20:36 +04:00
struct acpi_walk_state ;
struct acpi_obj_mutex ;
union acpi_parse_object ;
# define ACPI_STATE_COMMON /* Two 32-bit fields and a pointer */ \
u8 data_type ; /* To differentiate various internal objs */ \
u8 flags ; \
u16 value ; \
u16 state ; \
u16 reserved ; \
void * next ; \
struct acpi_common_state
{
ACPI_STATE_COMMON
} ;
/*
* Update state - used to traverse complex objects such as packages
*/
struct acpi_update_state
{
ACPI_STATE_COMMON
union acpi_operand_object * object ;
} ;
/*
* Pkg state - used to traverse nested package structures
*/
struct acpi_pkg_state
{
ACPI_STATE_COMMON
union acpi_operand_object * source_object ;
union acpi_operand_object * dest_object ;
struct acpi_walk_state * walk_state ;
void * this_target_obj ;
u32 num_packages ;
u16 index ;
} ;
/*
* Control state - one per if / else and while constructs .
* Allows nesting of these constructs
*/
struct acpi_control_state
{
ACPI_STATE_COMMON
union acpi_parse_object * predicate_op ;
u8 * aml_predicate_start ; /* Start of if/while predicate */
u8 * package_end ; /* End of if/while block */
u16 opcode ;
} ;
/*
* Scope state - current scope during namespace lookups
*/
struct acpi_scope_state
{
ACPI_STATE_COMMON
struct acpi_namespace_node * node ;
} ;
struct acpi_pscope_state
{
ACPI_STATE_COMMON
union acpi_parse_object * op ; /* Current op being parsed */
u8 * arg_end ; /* Current argument end */
u8 * pkg_end ; /* Current package end */
u32 arg_list ; /* Next argument to parse */
u32 arg_count ; /* Number of fixed arguments */
} ;
/*
* Thread state - one per thread across multiple walk states . Multiple walk
* states are created when there are nested control methods executing .
*/
struct acpi_thread_state
{
ACPI_STATE_COMMON
struct acpi_walk_state * walk_state_list ; /* Head of list of walk_states for this thread */
union acpi_operand_object * acquired_mutex_list ; /* List of all currently acquired mutexes */
u32 thread_id ; /* Running thread ID */
u8 current_sync_level ; /* Mutex Sync (nested acquire) level */
} ;
/*
* Result values - used to accumulate the results of nested
* AML arguments
*/
struct acpi_result_values
{
ACPI_STATE_COMMON
union acpi_operand_object * obj_desc [ ACPI_OBJ_NUM_OPERANDS ] ;
u8 num_results ;
u8 last_insert ;
} ;
typedef
acpi_status ( * acpi_parse_downwards ) (
struct acpi_walk_state * walk_state ,
union acpi_parse_object * * out_op ) ;
typedef
acpi_status ( * acpi_parse_upwards ) (
struct acpi_walk_state * walk_state ) ;
/*
* Notify info - used to pass info to the deferred notify
* handler / dispatcher .
*/
struct acpi_notify_info
{
ACPI_STATE_COMMON
struct acpi_namespace_node * node ;
union acpi_operand_object * handler_obj ;
} ;
/* Generic state is union of structs above */
union acpi_generic_state
{
struct acpi_common_state common ;
struct acpi_control_state control ;
struct acpi_update_state update ;
struct acpi_scope_state scope ;
struct acpi_pscope_state parse_scope ;
struct acpi_pkg_state pkg ;
struct acpi_thread_state thread ;
struct acpi_result_values results ;
struct acpi_notify_info notify ;
} ;
/*****************************************************************************
*
* Interpreter typedefs and structs
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
typedef
acpi_status ( * ACPI_EXECUTE_OP ) (
struct acpi_walk_state * walk_state ) ;
/*****************************************************************************
*
* Parser typedefs and structs
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* AML opcode , name , and argument layout
*/
struct acpi_opcode_info
{
# if defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUG_OUTPUT)
char * name ; /* Opcode name (disassembler/debug only) */
# endif
u32 parse_args ; /* Grammar/Parse time arguments */
u32 runtime_args ; /* Interpret time arguments */
u32 flags ; /* Misc flags */
u8 object_type ; /* Corresponding internal object type */
u8 class ; /* Opcode class */
u8 type ; /* Opcode type */
} ;
union acpi_parse_value
{
acpi_integer integer ; /* Integer constant (Up to 64 bits) */
struct uint64_struct integer64 ; /* Structure overlay for 2 32-bit Dwords */
u32 size ; /* bytelist or field size */
char * string ; /* NULL terminated string */
u8 * buffer ; /* buffer or string */
char * name ; /* NULL terminated string */
union acpi_parse_object * arg ; /* arguments and contained ops */
} ;
# define ACPI_PARSE_COMMON \
u8 data_type ; /* To differentiate various internal objs */ \
u8 flags ; /* Type of Op */ \
u16 aml_opcode ; /* AML opcode */ \
u32 aml_offset ; /* Offset of declaration in AML */ \
union acpi_parse_object * parent ; /* Parent op */ \
union acpi_parse_object * next ; /* Next op */ \
ACPI_DISASM_ONLY_MEMBERS ( \
u8 disasm_flags ; /* Used during AML disassembly */ \
u8 disasm_opcode ; /* Subtype used for disassembly */ \
char aml_op_name [ 16 ] ) /* Op name (debug only) */ \
/* NON-DEBUG members below: */ \
struct acpi_namespace_node * node ; /* For use by interpreter */ \
union acpi_parse_value value ; /* Value or args associated with the opcode */ \
# define ACPI_DASM_BUFFER 0x00
# define ACPI_DASM_RESOURCE 0x01
# define ACPI_DASM_STRING 0x02
# define ACPI_DASM_UNICODE 0x03
# define ACPI_DASM_EISAID 0x04
# define ACPI_DASM_MATCHOP 0x05
/*
* generic operation ( for example : If , While , Store )
*/
struct acpi_parse_obj_common
{
ACPI_PARSE_COMMON
} ;
/*
* Extended Op for named ops ( Scope , Method , etc . ) , deferred ops ( Methods and op_regions ) ,
* and bytelists .
*/
struct acpi_parse_obj_named
{
ACPI_PARSE_COMMON
u8 * path ;
u8 * data ; /* AML body or bytelist data */
u32 length ; /* AML length */
u32 name ; /* 4-byte name or zero if no name */
} ;
/* The parse node is the fundamental element of the parse tree */
struct acpi_parse_obj_asl
{
ACPI_PARSE_COMMON
union acpi_parse_object * child ;
union acpi_parse_object * parent_method ;
char * filename ;
char * external_name ;
char * namepath ;
char name_seg [ 4 ] ;
u32 extra_value ;
u32 column ;
u32 line_number ;
u32 logical_line_number ;
u32 logical_byte_offset ;
u32 end_line ;
u32 end_logical_line ;
u32 acpi_btype ;
u32 aml_length ;
u32 aml_subtree_length ;
u32 final_aml_length ;
u32 final_aml_offset ;
u32 compile_flags ;
u16 parse_opcode ;
u8 aml_opcode_length ;
u8 aml_pkg_len_bytes ;
u8 extra ;
char parse_op_name [ 12 ] ;
} ;
union acpi_parse_object
{
struct acpi_parse_obj_common common ;
struct acpi_parse_obj_named named ;
struct acpi_parse_obj_asl asl ;
} ;
/*
* Parse state - one state per parser invocation and each control
* method .
*/
struct acpi_parse_state
{
u32 aml_size ;
u8 * aml_start ; /* First AML byte */
u8 * aml ; /* Next AML byte */
u8 * aml_end ; /* (last + 1) AML byte */
u8 * pkg_start ; /* Current package begin */
u8 * pkg_end ; /* Current package end */
union acpi_parse_object * start_op ; /* Root of parse tree */
struct acpi_namespace_node * start_node ;
union acpi_generic_state * scope ; /* Current scope */
union acpi_parse_object * start_scope ;
} ;
/* Parse object flags */
# define ACPI_PARSEOP_GENERIC 0x01
# define ACPI_PARSEOP_NAMED 0x02
# define ACPI_PARSEOP_DEFERRED 0x04
# define ACPI_PARSEOP_BYTELIST 0x08
# define ACPI_PARSEOP_IN_CACHE 0x80
/* Parse object disasm_flags */
# define ACPI_PARSEOP_IGNORE 0x01
# define ACPI_PARSEOP_PARAMLIST 0x02
# define ACPI_PARSEOP_EMPTY_TERMLIST 0x04
# define ACPI_PARSEOP_SPECIAL 0x10
/*****************************************************************************
*
* Hardware ( ACPI registers ) and PNP
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# define PCI_ROOT_HID_STRING "PNP0A03"
2005-05-13 08:00:00 +04:00
# define PCI_EXPRESS_ROOT_HID_STRING "PNP0A08"
2005-04-17 02:20:36 +04:00
struct acpi_bit_register_info
{
u8 parent_register ;
u8 bit_position ;
u16 access_bit_mask ;
} ;
/*
* Register IDs
* These are the full ACPI registers
*/
# define ACPI_REGISTER_PM1_STATUS 0x01
# define ACPI_REGISTER_PM1_ENABLE 0x02
# define ACPI_REGISTER_PM1_CONTROL 0x03
# define ACPI_REGISTER_PM1A_CONTROL 0x04
# define ACPI_REGISTER_PM1B_CONTROL 0x05
# define ACPI_REGISTER_PM2_CONTROL 0x06
# define ACPI_REGISTER_PM_TIMER 0x07
# define ACPI_REGISTER_PROCESSOR_BLOCK 0x08
# define ACPI_REGISTER_SMI_COMMAND_BLOCK 0x09
/* Masks used to access the bit_registers */
# define ACPI_BITMASK_TIMER_STATUS 0x0001
# define ACPI_BITMASK_BUS_MASTER_STATUS 0x0010
# define ACPI_BITMASK_GLOBAL_LOCK_STATUS 0x0020
# define ACPI_BITMASK_POWER_BUTTON_STATUS 0x0100
# define ACPI_BITMASK_SLEEP_BUTTON_STATUS 0x0200
# define ACPI_BITMASK_RT_CLOCK_STATUS 0x0400
# define ACPI_BITMASK_PCIEXP_WAKE_STATUS 0x4000 /* ACPI 3.0 */
# define ACPI_BITMASK_WAKE_STATUS 0x8000
# define ACPI_BITMASK_ALL_FIXED_STATUS (ACPI_BITMASK_TIMER_STATUS | \
ACPI_BITMASK_BUS_MASTER_STATUS | \
ACPI_BITMASK_GLOBAL_LOCK_STATUS | \
ACPI_BITMASK_POWER_BUTTON_STATUS | \
ACPI_BITMASK_SLEEP_BUTTON_STATUS | \
ACPI_BITMASK_RT_CLOCK_STATUS | \
ACPI_BITMASK_WAKE_STATUS )
# define ACPI_BITMASK_TIMER_ENABLE 0x0001
# define ACPI_BITMASK_GLOBAL_LOCK_ENABLE 0x0020
# define ACPI_BITMASK_POWER_BUTTON_ENABLE 0x0100
# define ACPI_BITMASK_SLEEP_BUTTON_ENABLE 0x0200
# define ACPI_BITMASK_RT_CLOCK_ENABLE 0x0400
# define ACPI_BITMASK_PCIEXP_WAKE_DISABLE 0x4000 /* ACPI 3.0 */
# define ACPI_BITMASK_SCI_ENABLE 0x0001
# define ACPI_BITMASK_BUS_MASTER_RLD 0x0002
# define ACPI_BITMASK_GLOBAL_LOCK_RELEASE 0x0004
# define ACPI_BITMASK_SLEEP_TYPE_X 0x1C00
# define ACPI_BITMASK_SLEEP_ENABLE 0x2000
# define ACPI_BITMASK_ARB_DISABLE 0x0001
/* Raw bit position of each bit_register */
# define ACPI_BITPOSITION_TIMER_STATUS 0x00
# define ACPI_BITPOSITION_BUS_MASTER_STATUS 0x04
# define ACPI_BITPOSITION_GLOBAL_LOCK_STATUS 0x05
# define ACPI_BITPOSITION_POWER_BUTTON_STATUS 0x08
# define ACPI_BITPOSITION_SLEEP_BUTTON_STATUS 0x09
# define ACPI_BITPOSITION_RT_CLOCK_STATUS 0x0A
# define ACPI_BITPOSITION_PCIEXP_WAKE_STATUS 0x0E /* ACPI 3.0 */
# define ACPI_BITPOSITION_WAKE_STATUS 0x0F
# define ACPI_BITPOSITION_TIMER_ENABLE 0x00
# define ACPI_BITPOSITION_GLOBAL_LOCK_ENABLE 0x05
# define ACPI_BITPOSITION_POWER_BUTTON_ENABLE 0x08
# define ACPI_BITPOSITION_SLEEP_BUTTON_ENABLE 0x09
# define ACPI_BITPOSITION_RT_CLOCK_ENABLE 0x0A
# define ACPI_BITPOSITION_PCIEXP_WAKE_DISABLE 0x0E /* ACPI 3.0 */
# define ACPI_BITPOSITION_SCI_ENABLE 0x00
# define ACPI_BITPOSITION_BUS_MASTER_RLD 0x01
# define ACPI_BITPOSITION_GLOBAL_LOCK_RELEASE 0x02
# define ACPI_BITPOSITION_SLEEP_TYPE_X 0x0A
# define ACPI_BITPOSITION_SLEEP_ENABLE 0x0D
# define ACPI_BITPOSITION_ARB_DISABLE 0x00
/*****************************************************************************
*
* Resource descriptors
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* resource_type values */
# define ACPI_RESOURCE_TYPE_MEMORY_RANGE 0
# define ACPI_RESOURCE_TYPE_IO_RANGE 1
# define ACPI_RESOURCE_TYPE_BUS_NUMBER_RANGE 2
/* Resource descriptor types and masks */
# define ACPI_RDESC_TYPE_LARGE 0x80
# define ACPI_RDESC_TYPE_SMALL 0x00
# define ACPI_RDESC_TYPE_MASK 0x80
# define ACPI_RDESC_SMALL_MASK 0x78 /* Only bits 6:3 contain the type */
/*
* Small resource descriptor types
* Note : The 3 length bits ( 2 : 0 ) must be zero
*/
# define ACPI_RDESC_TYPE_IRQ_FORMAT 0x20
# define ACPI_RDESC_TYPE_DMA_FORMAT 0x28
# define ACPI_RDESC_TYPE_START_DEPENDENT 0x30
# define ACPI_RDESC_TYPE_END_DEPENDENT 0x38
# define ACPI_RDESC_TYPE_IO_PORT 0x40
# define ACPI_RDESC_TYPE_FIXED_IO_PORT 0x48
# define ACPI_RDESC_TYPE_SMALL_VENDOR 0x70
# define ACPI_RDESC_TYPE_END_TAG 0x78
/*
* Large resource descriptor types
*/
# define ACPI_RDESC_TYPE_MEMORY_24 0x81
# define ACPI_RDESC_TYPE_GENERAL_REGISTER 0x82
# define ACPI_RDESC_TYPE_LARGE_VENDOR 0x84
# define ACPI_RDESC_TYPE_MEMORY_32 0x85
# define ACPI_RDESC_TYPE_FIXED_MEMORY_32 0x86
# define ACPI_RDESC_TYPE_DWORD_ADDRESS_SPACE 0x87
# define ACPI_RDESC_TYPE_WORD_ADDRESS_SPACE 0x88
# define ACPI_RDESC_TYPE_EXTENDED_XRUPT 0x89
# define ACPI_RDESC_TYPE_QWORD_ADDRESS_SPACE 0x8A
# define ACPI_RDESC_TYPE_EXTENDED_ADDRESS_SPACE 0x8B
/*****************************************************************************
*
* Miscellaneous
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# define ACPI_ASCII_ZERO 0x30
/*****************************************************************************
*
* Debugger
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
struct acpi_db_method_info
{
acpi_handle thread_gate ;
char * name ;
char * * args ;
u32 flags ;
u32 num_loops ;
char pathname [ 128 ] ;
} ;
struct acpi_integrity_info
{
u32 nodes ;
u32 objects ;
} ;
# define ACPI_DB_REDIRECTABLE_OUTPUT 0x01
# define ACPI_DB_CONSOLE_OUTPUT 0x02
# define ACPI_DB_DUPLICATE_OUTPUT 0x03
/*****************************************************************************
*
* Debug
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
struct acpi_debug_print_info
{
u32 component_id ;
char * proc_name ;
char * module_name ;
} ;
/* Entry for a memory allocation (debug only) */
# define ACPI_MEM_MALLOC 0
# define ACPI_MEM_CALLOC 1
# define ACPI_MAX_MODULE_NAME 16
# define ACPI_COMMON_DEBUG_MEM_HEADER \
struct acpi_debug_mem_block * previous ; \
struct acpi_debug_mem_block * next ; \
u32 size ; \
u32 component ; \
u32 line ; \
char module [ ACPI_MAX_MODULE_NAME ] ; \
u8 alloc_type ;
struct acpi_debug_mem_header
{
ACPI_COMMON_DEBUG_MEM_HEADER
} ;
struct acpi_debug_mem_block
{
ACPI_COMMON_DEBUG_MEM_HEADER
u64 user_space ;
} ;
# define ACPI_MEM_LIST_GLOBAL 0
# define ACPI_MEM_LIST_NSNODE 1
# define ACPI_MEM_LIST_FIRST_CACHE_LIST 2
# define ACPI_MEM_LIST_STATE 2
# define ACPI_MEM_LIST_PSNODE 3
# define ACPI_MEM_LIST_PSNODE_EXT 4
# define ACPI_MEM_LIST_OPERAND 5
# define ACPI_MEM_LIST_WALK 6
# define ACPI_MEM_LIST_MAX 6
# define ACPI_NUM_MEM_LISTS 7
struct acpi_memory_list
{
void * list_head ;
u16 link_offset ;
u16 max_cache_depth ;
u16 cache_depth ;
u16 object_size ;
# ifdef ACPI_DBG_TRACK_ALLOCATIONS
/* Statistics for debug memory tracking only */
u32 total_allocated ;
u32 total_freed ;
u32 current_total_size ;
u32 cache_requests ;
u32 cache_hits ;
char * list_name ;
# endif
} ;
# endif /* __ACLOCAL_H__ */