struct acpi_walk_state; struct acpi_obj_mutex; union acpi_parse_object;
/***************************************************************************** * * 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 below also!
*/ #define ACPI_MTX_INTERPRETER 0 /* AML Interpreter, main lock */ #define ACPI_MTX_NAMESPACE 1 /* ACPI Namespace */ #define ACPI_MTX_TABLES 2 /* Data for ACPI tables */ #define ACPI_MTX_EVENTS 3 /* Data for ACPI events */ #define ACPI_MTX_CACHES 4 /* Internal caches, general purposes */ #define ACPI_MTX_MEMORY 5 /* Debug memory tracking lists */
/* * Predefined handles for spinlocks used within the subsystem. * These spinlocks are created by acpi_ut_mutex_initialize
*/ #define ACPI_LOCK_GPES 0 #define ACPI_LOCK_HARDWARE 1
/* * The Namespace Node describes a named object that appears in the AML. * descriptor_type is used to differentiate between internal descriptors. * * The node is optimized for both 32-bit and 64-bit platforms: * 20 bytes for the 32-bit case, 32 bytes for the 64-bit case. * * Note: The descriptor_type and Type fields must appear in the identical * position in both the struct acpi_namespace_node and union acpi_operand_object * structures.
*/ struct acpi_namespace_node { union acpi_operand_object *object; /* Interpreter object */
u8 descriptor_type; /* Differentiate object descriptor types */
u8 type; /* ACPI Type associated with this name */
u16 flags; /* Miscellaneous flags */ union acpi_name_union name; /* ACPI Name, always 4 chars per ACPI spec */ struct acpi_namespace_node *parent; /* Parent node */ struct acpi_namespace_node *child; /* First child */ struct acpi_namespace_node *peer; /* First peer */
acpi_owner_id owner_id; /* Node creator */
/* * The following fields are used by the ASL compiler and disassembler only
*/ #ifdef ACPI_LARGE_NAMESPACE_NODE union acpi_parse_object *op; void *method_locals; void *method_args;
u32 value;
u32 length;
u8 arg_count;
#endif
};
/* Namespace Node flags */
#define ANOBJ_RESERVED 0x01 /* Available for use */ #define ANOBJ_TEMPORARY 0x02 /* Node is create by a method and is temporary */ #define ANOBJ_METHOD_ARG 0x04 /* Node is a method argument */ #define ANOBJ_METHOD_LOCAL 0x08 /* Node is a method local */ #define ANOBJ_SUBTREE_HAS_INI 0x10 /* Used to optimize device initialization */ #define ANOBJ_EVALUATED 0x20 /* Set on first evaluation of node */ #define ANOBJ_ALLOCATED_BUFFER 0x40 /* Method AML buffer is dynamic (install_method) */ #define ANOBJ_NODE_EARLY_INIT 0x80 /* acpi_exec only: Node was create via init file (-fi) */
#define ANOBJ_IS_EXTERNAL 0x08 /* iASL only: This object created via External() */ #define ANOBJ_METHOD_NO_RETVAL 0x10 /* iASL only: Method has no return value */ #define ANOBJ_METHOD_SOME_NO_RETVAL 0x20 /* iASL only: Method has at least one return value */ #define ANOBJ_IS_REFERENCED 0x80 /* iASL only: Object was referenced */
/* Internal ACPI table management - master table list */
struct acpi_table_list { struct acpi_table_desc *tables; /* Table descriptor array */
u32 current_table_count; /* Tables currently in the array */
u32 max_table_count; /* Max tables array will hold */
u8 flags;
};
/* * Information structure for ACPI predefined names. * Each entry in the table contains the following items: * * name - The ACPI reserved name * param_count - Number of arguments to the method * expected_return_btypes - Allowed type(s) for the return value
*/ struct acpi_name_info { char name[ACPI_NAMESEG_SIZE] ACPI_NONSTRING;
u16 argument_list;
u8 expected_btypes;
};
/* * Secondary information structures for ACPI predefined objects that return * package objects. This structure appears as the next entry in the table * after the NAME_INFO structure above. * * The reason for this is to minimize the size of the predefined name table.
*/
/***************************************************************************** * * Event typedefs and structs *
****************************************************************************/
/* Dispatch info for each host-installed SCI handler */
struct acpi_sci_handler_info { struct acpi_sci_handler_info *next;
acpi_sci_handler address; /* Address of handler */ void *context; /* Context to be passed to handler */
};
/* Dispatch info for each GPE -- either a method or handler, cannot be both */
struct acpi_gpe_handler_info {
acpi_gpe_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) */
u8 original_flags; /* Original (pre-handler) GPE info */
u8 originally_enabled; /* True if GPE was originally enabled */
};
/* Notify info for implicit notify, multiple device objects */
struct acpi_gpe_notify_info { struct acpi_namespace_node *device_node; /* Device to be notified */ struct acpi_gpe_notify_info *next;
};
/* * GPE dispatch info. At any time, the GPE can have at most one type * of dispatch - Method, Handler, or Implicit Notify.
*/ union acpi_gpe_dispatch_info { struct acpi_namespace_node *method_node; /* Method node for this GPE level */ struct acpi_gpe_handler_info *handler; /* Installed GPE handler */ struct acpi_gpe_notify_info *notify_list; /* List of _PRW devices for implicit notifies */
};
/* * 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, Handler, or notify_list */ struct acpi_gpe_register_info *register_info; /* Backpointer to register info */
u8 flags; /* Misc info about this GPE */
u8 gpe_number; /* This GPE */
u8 runtime_count; /* References to a run GPE */
u8 disable_for_dispatch; /* Masked during dispatching */
};
/* GPE register address */
struct acpi_gpe_address {
u8 space_id; /* Address space where the register exists */
u64 address; /* 64-bit address of the register */
};
/* Information about a GPE register pair, one per each status/enable pair in an array */
struct acpi_gpe_register_info { struct acpi_gpe_address status_address; /* Address of status reg */ struct acpi_gpe_address enable_address; /* Address of enable reg */
u16 base_gpe_number; /* Base GPE number for this register */
u8 enable_for_wake; /* GPEs to keep enabled when sleeping */
u8 enable_for_run; /* GPEs to keep enabled when running */
u8 mask_for_run; /* GPEs to keep masked when running */
u8 enable_mask; /* Current mask of enabled GPEs */
};
/* * 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 */
u64 address; /* Base address of the block */
u32 register_count; /* Number of register pairs in block */
u16 gpe_count; /* Number of individual GPEs in block */
u16 block_base_number; /* Base GPE number for this block */
u8 space_id;
u8 initialized; /* TRUE if this block is initialized */
};
/* 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 */
u32 interrupt_number; /* System interrupt number */
};
/* Information about the interrupt ID and _EVT of a GED device */
struct acpi_ged_handler_info { struct acpi_ged_handler_info *next;
u32 int_id; /* The interrupt ID that triggers the execution of the evt_method. */ struct acpi_namespace_node *evt_method; /* The _EVT method to be executed when an interrupt with ID = int_ID is received */
};
/***************************************************************************** * * Generic "state" object for stacks *
****************************************************************************/
#define ACPI_STATE_COMMON \ void *next; \
u8 descriptor_type; /* To differentiate various internal objs */\
u8 flags; \
u16 value; \
u16 state
/* There are 2 bytes available here until the next natural alignment boundary */
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;
u32 index; 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;
};
/* * Control state - one per if/else and while constructs. * Allows nesting of these constructs
*/ struct acpi_control_state {
ACPI_STATE_COMMON;
u16 opcode; union acpi_parse_object *predicate_op;
u8 *aml_predicate_start; /* Start of if/while predicate */
u8 *package_end; /* End of if/while block */
u64 loop_timeout; /* While() loop timeout */
};
/* * 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;
u32 arg_count; /* Number of fixed arguments */ 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 */
};
/* * 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;
u8 current_sync_level; /* Mutex Sync (nested acquire) level */ 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 */
acpi_thread_id thread_id; /* Running thread ID */
};
/* * 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_RESULTS_FRAME_OBJ_NUM];
};
/* * Notify info - used to pass info to the deferred notify * handler/dispatcher.
*/ struct acpi_notify_info {
ACPI_STATE_COMMON;
u8 handler_list_id; struct acpi_namespace_node *node; union acpi_operand_object *handler_list_head; struct acpi_global_notify_handler *global;
};
#define ACPI_PARSE_COMMON \ union acpi_parse_object *parent; /* Parent op */\
u8 descriptor_type; /* To differentiate various internal objs */\
u8 flags; /* Type of Op */\
u16 aml_opcode; /* AML opcode */\
u8 *aml; /* Address of declaration in AML */\ union acpi_parse_object *next; /* Next op */\ struct acpi_namespace_node *node; /* For use by interpreter */\ union acpi_parse_value value; /* Value or args associated with the opcode */\
u8 arg_list_length; /* Number of elements in the arg list */\
ACPI_DISASM_ONLY_MEMBERS (\
u16 disasm_flags; /* Used during AML disassembly */\
u8 disasm_opcode; /* Subtype used for disassembly */\ char *operator_symbol; /* Used for C-style operator name strings */\ char aml_op_name[16]) /* Op name (debug only) */\
ACPI_CONVERTER_ONLY_MEMBERS (\ char *inline_comment; /* Inline comment */\ char *end_node_comment; /* End of node comment */\ char *name_comment; /* Comment associated with the first parameter of the name node */\ char *close_brace_comment; /* Comments that come after } on the same as } */\ struct acpi_comment_node *comment_list; /* comments that appears before this node */\ struct acpi_comment_node *end_blk_comment; /* comments that at the end of a block but before ) or } */\ char *cv_filename; /* Filename associated with this node. Used for ASL/ASL+ converter */\ char *cv_parent_filename) /* Parent filename associated with this node. Used for ASL/ASL+ converter */
/* Internal opcodes for disasm_opcode field above */
#define ACPI_DASM_BUFFER 0x00 /* Buffer is a simple data buffer */ #define ACPI_DASM_RESOURCE 0x01 /* Buffer is a Resource Descriptor */ #define ACPI_DASM_STRING 0x02 /* Buffer is a ASCII string */ #define ACPI_DASM_UNICODE 0x03 /* Buffer is a Unicode string */ #define ACPI_DASM_PLD_METHOD 0x04 /* Buffer is a _PLD method bit-packed buffer */ #define ACPI_DASM_UUID 0x05 /* Buffer is a UUID/GUID */ #define ACPI_DASM_EISAID 0x06 /* Integer is an EISAID */ #define ACPI_DASM_MATCHOP 0x07 /* Parent opcode is a Match() operator */ #define ACPI_DASM_LNOT_PREFIX 0x08 /* Start of a Lnot_equal (etc.) pair of opcodes */ #define ACPI_DASM_LNOT_SUFFIX 0x09 /* End of a Lnot_equal (etc.) pair of opcodes */ #define ACPI_DASM_HID_STRING 0x0A /* String is a _HID or _CID */ #define ACPI_DASM_IGNORE_SINGLE 0x0B /* Ignore the opcode but not it's children */ #define ACPI_DASM_SWITCH 0x0C /* While is a Switch */ #define ACPI_DASM_SWITCH_PREDICATE 0x0D /* Object is a predicate for a Switch or Case block */ #define ACPI_DASM_CASE 0x0E /* If/Else is a Case in a Switch/Case block */ #define ACPI_DASM_DEFAULT 0x0F /* Else is a Default in a Switch/Case block */
/* * List struct used in the -ca option
*/ struct acpi_comment_node { char *comment; struct acpi_comment_node *next;
};
/* * File node - used for "Include" operator file stack and * dependency tree for the -ca option
*/ struct acpi_file_node { void *file; char *filename; char *file_start; /* Points to AML and indicates when the AML for this particular file starts. */ char *file_end; /* Points to AML and indicates when the AML for this particular file ends. */ struct acpi_file_node *next; struct acpi_file_node *parent;
u8 include_written; struct acpi_comment_node *include_comment;
};
/* * Extended Op for named ops (Scope, Method, etc.), deferred ops (Methods and op_regions), * and bytelists.
*/ struct acpi_parse_obj_named {
ACPI_PARSE_COMMON char *path;
u8 *data; /* AML body or bytelist data */
u32 length; /* AML length */
u32 name; /* 4-byte name or zero if no name */
};
/* This version is used by the iASL compiler only */
struct asl_comment_state {
u8 comment_type;
u32 spaces_before; union acpi_parse_object *latest_parse_op; union acpi_parse_object *parsing_paren_brace_node;
u8 capture_comments;
};
/* * Parse state - one state per parser invocation and each control * method.
*/ struct acpi_parse_state {
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;
u32 aml_size;
};
/* * Some ACPI registers have bits that must be ignored -- meaning that they * must be preserved.
*/ #define ACPI_PM1_STATUS_PRESERVED_BITS 0x0800 /* Bit 11 */
/* For control registers, both ignored and reserved bits must be preserved */
/* * For PM1 control, the SCI enable bit (bit 0, SCI_EN) is defined by the * ACPI specification to be a "preserved" bit - "OSPM always preserves this * bit position", section 4.7.3.2.1. However, on some machines the OS must * write a one to this bit after resume for the machine to work properly. * To enable this, we no longer attempt to preserve this bit. No machines * are known to fail if the bit is not preserved. (May 2009)
*/ #define ACPI_PM1_CONTROL_IGNORED_BITS 0x0200 /* Bit 9 */ #define ACPI_PM1_CONTROL_RESERVED_BITS 0xC1F8 /* Bits 14-15, 3-8 */ #define ACPI_PM1_CONTROL_PRESERVED_BITS \
(ACPI_PM1_CONTROL_IGNORED_BITS | ACPI_PM1_CONTROL_RESERVED_BITS)
#define ACPI_PM2_CONTROL_PRESERVED_BITS 0xFFFFFFFE /* All except bit 0 */
/* * 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_PM2_CONTROL 0x04 #define ACPI_REGISTER_PM_TIMER 0x05 #define ACPI_REGISTER_PROCESSOR_BLOCK 0x06 #define ACPI_REGISTER_SMI_COMMAND_BLOCK 0x07
#define ACPI_EXT_RESOLVED_REFERENCE 0x01 /* Object was resolved during cross ref */ #define ACPI_EXT_ORIGIN_FROM_FILE 0x02 /* External came from a file */ #define ACPI_EXT_INTERNAL_PATH_ALLOCATED 0x04 /* Deallocate internal path on completion */ #define ACPI_EXT_EXTERNAL_EMITTED 0x08 /* External() statement has been emitted */ #define ACPI_EXT_ORIGIN_FROM_OPCODE 0x10 /* External came from a External() opcode */ #define ACPI_EXT_CONFLICTING_DECLARATION 0x20 /* External has a conflicting declaration within AML */
/* * Arguments to be passed to method for the commands Threads and * Background. Note, ACPI specifies a maximum of 7 arguments (0 - 6). * * For the Threads command, the Number of threads, ID of current * thread and Index of current thread inside all them created.
*/ char init_args; #ifdef ACPI_DEBUGGER
acpi_object_type arg_types[ACPI_METHOD_NUM_ARGS]; #endif char *arguments[ACPI_METHOD_NUM_ARGS]; char num_threads_str[11]; char id_of_thread_str[11]; char index_of_thread_str[11];
};
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.