📄 aclocal.h
字号:
/****************************************************************************** * * Name: aclocal.h - Internal data types used across the ACPI subsystem * $Revision: 138 $ * *****************************************************************************//* * Copyright (C) 2000, 2001 R. Byron Moore * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */#ifndef __ACLOCAL_H__#define __ACLOCAL_H__#define WAIT_FOREVER ((u32) -1)typedef void* acpi_mutex;typedef u32 ACPI_MUTEX_HANDLE;#define ACPI_MEMORY_MODE 0x01#define ACPI_LOGICAL_ADDRESSING 0x00#define ACPI_PHYSICAL_ADDRESSING 0x01/* Object descriptor types */#define ACPI_CACHED_OBJECT 0x11 /* ORed in when object is cached */#define ACPI_DESC_TYPE_STATE 0x20#define ACPI_DESC_TYPE_STATE_UPDATE 0x21#define ACPI_DESC_TYPE_STATE_PACKAGE 0x22#define ACPI_DESC_TYPE_STATE_CONTROL 0x23#define ACPI_DESC_TYPE_STATE_RPSCOPE 0x24#define ACPI_DESC_TYPE_STATE_PSCOPE 0x25#define ACPI_DESC_TYPE_STATE_WSCOPE 0x26#define ACPI_DESC_TYPE_STATE_RESULT 0x27#define ACPI_DESC_TYPE_STATE_NOTIFY 0x28#define ACPI_DESC_TYPE_WALK 0x44#define ACPI_DESC_TYPE_PARSER 0x66#define ACPI_DESC_TYPE_INTERNAL 0x88#define ACPI_DESC_TYPE_NAMED 0xAA/***************************************************************************** * * 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_MTX 12#define NUM_MTX MAX_MTX+1#if defined(ACPI_DEBUG) || defined(ENABLE_DEBUGGER)#ifdef DEFINE_ACPI_GLOBALS/* Names for the mutexes used in the subsystem */static NATIVE_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 */typedef struct acpi_mutex_info{ acpi_mutex mutex; u32 use_count; u32 owner_id;} acpi_mutex_info;/* 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 1typedef u16 acpi_owner_id;#define OWNER_TYPE_TABLE 0x0#define OWNER_TYPE_METHOD 0x1#define FIRST_METHOD_ID 0x0000#define FIRST_TABLE_ID 0x8000/* TBD: [Restructure] get rid of the need for this! */#define TABLE_ID_DSDT (acpi_owner_id) 0x8000/* 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/***************************************************************************** * * Namespace typedefs and structs * ****************************************************************************//* Operational modes of the AML interpreter/scanner */typedef enum{ IMODE_LOAD_PASS1 = 0x01, IMODE_LOAD_PASS2 = 0x02, IMODE_EXECUTE = 0x0E} operating_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. */typedef struct acpi_node{ u8 data_type; u8 type; /* Type associated with this name */ u16 owner_id; u32 name; /* ACPI Name, always 4 chars per ACPI spec */ union acpi_operand_obj *object; /* Pointer to attached ACPI object (optional) */ struct acpi_node *child; /* first child */ struct acpi_node *peer; /* Next peer*/ u16 reference_count; /* Current count of references and children */ u8 flags;} acpi_namespace_node;#define ENTRY_NOT_FOUND NULL/* Node flags */#define ANOBJ_AML_ATTACHMENT 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 */typedef struct acpi_table_desc{ struct acpi_table_desc *prev; struct acpi_table_desc *next; struct acpi_table_desc *installed_desc; acpi_table_header *pointer; void *base_pointer; u8 *aml_start; u64 physical_address; u32 aml_length; u32 length; u32 count; acpi_owner_id table_id; u8 type; u8 allocation; u8 loaded_into_namespace;} acpi_table_desc;typedef struct{ NATIVE_CHAR *search_for; acpi_handle *list; u32 *count;} find_context;typedef struct{ acpi_namespace_node *node;} ns_search_data;/* * Predefined Namespace items */typedef struct{ NATIVE_CHAR *name; acpi_object_type8 type; NATIVE_CHAR *val;} predefined_names;/* 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 */typedef struct acpi_namestring_info{ NATIVE_CHAR *external_name; NATIVE_CHAR *next_external_char; NATIVE_CHAR *internal_name; u32 length; u32 num_segments; u32 num_carats; u8 fully_qualified;} acpi_namestring_info;/* Field creation info */typedef struct{ acpi_namespace_node *region_node; acpi_namespace_node *field_node; acpi_namespace_node *register_node; acpi_namespace_node *data_register_node; u32 bank_value; u32 field_bit_position; u32 field_bit_length; u8 field_flags; u8 field_type;} ACPI_CREATE_FIELD_INFO;/* * Field flags: Bits 00 - 03 : Access_type (Any_acc, Byte_acc, etc.) * 04 : Lock_rule (1 == Lock) * 05 - 06 : Update_rule */#define FIELD_ACCESS_TYPE_MASK 0x0F#define FIELD_LOCK_RULE_MASK 0x10#define FIELD_UPDATE_RULE_MASK 0x60/***************************************************************************** * * Event typedefs and structs * ****************************************************************************//* Status bits. */#define ACPI_STATUS_PMTIMER 0x0001#define ACPI_STATUS_BUSMASTER 0x0010#define ACPI_STATUS_GLOBAL 0x0020#define ACPI_STATUS_POWER_BUTTON 0x0100#define ACPI_STATUS_SLEEP_BUTTON 0x0200#define ACPI_STATUS_RTC_ALARM 0x0400/* Enable bits. */#define ACPI_ENABLE_PMTIMER 0x0001#define ACPI_ENABLE_GLOBAL 0x0020#define ACPI_ENABLE_POWER_BUTTON 0x0100#define ACPI_ENABLE_SLEEP_BUTTON 0x0200#define ACPI_ENABLE_RTC_ALARM 0x0400/* * Entry in the Address_space (AKA Operation Region) table */typedef struct{ acpi_adr_space_handler handler; void *context;} acpi_adr_space_info;/* Values and addresses of the GPE registers (both banks) */typedef struct{ u16 status_addr; /* Address of status reg */ u16 enable_addr; /* Address of enable reg */ u8 status; /* Current value of status reg */ u8 enable; /* Current value of enable reg */ u8 wake_enable; /* Mask of bits to keep enabled when sleeping */ u8 gpe_base; /* Base GPE number */} acpi_gpe_registers;#define ACPI_GPE_LEVEL_TRIGGERED 1#define ACPI_GPE_EDGE_TRIGGERED 2/* Information about each particular GPE level */typedef struct{ u8 type; /* Level or Edge */ acpi_handle method_handle; /* Method handle for direct (fast) execution */ acpi_gpe_handler handler; /* Address of handler, if any */ void *context; /* Context to be passed to handler */} acpi_gpe_level_info;/* Information about each particular fixed event */typedef struct{ acpi_event_handler handler; /* Address of handler. */ void *context; /* Context to be passed to handler */} acpi_fixed_event_info;/* Information used during field processing */typedef struct{ u8 skip_field; u8 field_flag; u32 pkg_length;} acpi_field_info;/***************************************************************************** * * Generic "state" object for stacks * ****************************************************************************/#define CONTROL_NORMAL 0xC0#define CONTROL_CONDITIONAL_EXECUTING 0xC1#define CONTROL_PREDICATE_EXECUTING 0xC2#define CONTROL_PREDICATE_FALSE 0xC3#define CONTROL_PREDICATE_TRUE 0xC4/* Forward declarations */struct acpi_walk_state;struct acpi_walk_list;struct acpi_parse_obj;struct acpi_obj_mutex;#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 acpi_eval; \ void *next; \typedef struct acpi_common_state{ ACPI_STATE_COMMON} acpi_common_state;/* * Update state - used to traverse complex objects such as packages */typedef struct acpi_update_state{ ACPI_STATE_COMMON union acpi_operand_obj *object;} acpi_update_state;/* * Pkg state - used to traverse nested package structures */typedef struct acpi_pkg_state{ ACPI_STATE_COMMON union acpi_operand_obj *source_object; union acpi_operand_obj *dest_object; struct acpi_walk_state *walk_state; void *this_target_obj; u32 num_packages; u16 index;} acpi_pkg_state;/* * Control state - one per if/else and while constructs. * Allows nesting of these constructs */typedef struct acpi_control_state{ ACPI_STATE_COMMON struct acpi_parse_obj *predicate_op; u8 *aml_predicate_start; /* Start of if/while predicate */} acpi_control_state;/* * Scope state - current scope during namespace lookups */typedef struct acpi_scope_state{ ACPI_STATE_COMMON acpi_namespace_node *node;} acpi_scope_state;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -