acobject.h
来自「是关于linux2.5.1的完全源码」· C头文件 代码 · 共 486 行
H
486 行
/****************************************************************************** * * Name: acobject.h - Definition of acpi_operand_object (Internal object only) * $Revision: 110 $ * *****************************************************************************//* * Copyright (C) 2000 - 2002, 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 _ACOBJECT_H#define _ACOBJECT_H/* * The acpi_operand_object is used to pass AML operands from the dispatcher * to the interpreter, and to keep track of the various handlers such as * address space handlers and notify handlers. The object is a constant * size in order to allow it to be cached and reused. *//******************************************************************************* * * Common Descriptors * ******************************************************************************//* * Common area for all objects. * * Data_type is used to differentiate between internal descriptors, and MUST * be the first byte in this structure. */#define ACPI_OBJECT_COMMON_HEADER /* SIZE/ALIGNMENT: 32 bits, one ptr plus trailing 8-bit flag */\ u8 descriptor; /* To differentiate various internal objs */\ u8 type; /* acpi_object_type */\ u16 reference_count; /* For object deletion management */\ union acpi_operand_obj *next_object; /* Objects linked to parent NS node */\ u8 flags; \/* Values for flag byte above */#define AOPOBJ_RESERVED 0x01#define AOPOBJ_STATIC_POINTER 0x02#define AOPOBJ_DATA_VALID 0x04#define AOPOBJ_OBJECT_INITIALIZED 0x08#define AOPOBJ_SETUP_COMPLETE 0x10#define AOPOBJ_SINGLE_DATUM 0x20/* * Common bitfield for the field objects * "Field Datum" -- a datum from the actual field object * "Buffer Datum" -- a datum from a user buffer, read from or to be written to the field */#define ACPI_COMMON_FIELD_INFO /* SIZE/ALIGNMENT: 24 bits + three 32-bit values */\ u8 field_flags; /* Access, update, and lock bits */\ u8 attribute; /* From Access_as keyword */\ u8 access_byte_width; /* Read/Write size in bytes */\ u32 bit_length; /* Length of field in bits */\ u32 base_byte_offset; /* Byte offset within containing object */\ u8 start_field_bit_offset;/* Bit offset within first field datum (0-63) */\ u8 datum_valid_bits; /* Valid bit in first "Field datum" */\ u8 end_field_valid_bits; /* Valid bits in the last "field datum" */\ u8 end_buffer_valid_bits; /* Valid bits in the last "buffer datum" */\ u32 value; /* Value to store into the Bank or Index register */\ acpi_namespace_node *node; /* Link back to parent node *//* * Fields common to both Strings and Buffers */#define ACPI_COMMON_BUFFER_INFO \ u32 length;/* * Common fields for objects that support ASL notifications */#define ACPI_COMMON_NOTIFY_INFO \ union acpi_operand_obj *sys_handler; /* Handler for system notifies */\ union acpi_operand_obj *drv_handler; /* Handler for driver notifies */\ union acpi_operand_obj *addr_handler; /* Handler for Address space *//****************************************************************************** * * Basic data types * *****************************************************************************/typedef struct acpi_object_common{ ACPI_OBJECT_COMMON_HEADER} ACPI_OBJECT_COMMON;typedef struct acpi_object_integer{ ACPI_OBJECT_COMMON_HEADER acpi_integer value;} ACPI_OBJECT_INTEGER;typedef struct acpi_object_string /* Null terminated, ASCII characters only */{ ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_BUFFER_INFO NATIVE_CHAR *pointer; /* String in AML stream or allocated string */} ACPI_OBJECT_STRING;typedef struct acpi_object_buffer{ ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_BUFFER_INFO u8 *pointer; /* Buffer in AML stream or allocated buffer */ acpi_namespace_node *node; /* Link back to parent node */ u8 *aml_start; u32 aml_length;} ACPI_OBJECT_BUFFER;typedef struct acpi_object_package{ ACPI_OBJECT_COMMON_HEADER u32 count; /* # of elements in package */ u32 aml_length; u8 *aml_start; acpi_namespace_node *node; /* Link back to parent node */ union acpi_operand_obj **elements; /* Array of pointers to Acpi_objects */} ACPI_OBJECT_PACKAGE;/****************************************************************************** * * Complex data types * *****************************************************************************/typedef struct acpi_object_event{ ACPI_OBJECT_COMMON_HEADER void *semaphore;} ACPI_OBJECT_EVENT;#define INFINITE_CONCURRENCY 0xFFtypedef struct acpi_object_method{ ACPI_OBJECT_COMMON_HEADER u8 method_flags; u8 param_count; u32 aml_length; void *semaphore; u8 *aml_start; u8 concurrency; u8 thread_count; acpi_owner_id owning_id;} ACPI_OBJECT_METHOD;typedef struct acpi_object_mutex{ ACPI_OBJECT_COMMON_HEADER u16 sync_level; u16 acquisition_depth; struct acpi_thread_state *owner_thread; void *semaphore; union acpi_operand_obj *prev; /* Link for list of acquired mutexes */ union acpi_operand_obj *next; /* Link for list of acquired mutexes */} ACPI_OBJECT_MUTEX;typedef struct acpi_object_region{ ACPI_OBJECT_COMMON_HEADER u8 space_id; union acpi_operand_obj *addr_handler; /* Handler for system notifies */ acpi_namespace_node *node; /* containing object */ union acpi_operand_obj *next; u32 length; ACPI_PHYSICAL_ADDRESS address;} ACPI_OBJECT_REGION;/****************************************************************************** * * Objects that can be notified. All share a common Notify_info area. * *****************************************************************************/typedef struct acpi_object_notify_common /* COMMON NOTIFY for POWER, PROCESSOR, DEVICE, and THERMAL */{ ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_NOTIFY_INFO} ACPI_OBJECT_NOTIFY_COMMON;typedef struct acpi_object_device{ ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_NOTIFY_INFO} ACPI_OBJECT_DEVICE;typedef struct acpi_object_power_resource{ ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_NOTIFY_INFO u32 system_level; u32 resource_order;} ACPI_OBJECT_POWER_RESOURCE;typedef struct acpi_object_processor{ ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_NOTIFY_INFO u32 proc_id; u32 length; ACPI_IO_ADDRESS address;} ACPI_OBJECT_PROCESSOR;typedef struct acpi_object_thermal_zone{ ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_NOTIFY_INFO} ACPI_OBJECT_THERMAL_ZONE;/****************************************************************************** * * Fields. All share a common header/info field. * *****************************************************************************/typedef struct acpi_object_field_common /* COMMON FIELD (for BUFFER, REGION, BANK, and INDEX fields) */{ ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO union acpi_operand_obj *region_obj; /* Containing Operation Region object */ /* (REGION/BANK fields only) */} ACPI_OBJECT_FIELD_COMMON;typedef struct acpi_object_region_field{ ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO union acpi_operand_obj *region_obj; /* Containing Op_region object */} ACPI_OBJECT_REGION_FIELD;typedef struct acpi_object_bank_field{ ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO union acpi_operand_obj *region_obj; /* Containing Op_region object */ union acpi_operand_obj *bank_obj; /* Bank_select Register object */} ACPI_OBJECT_BANK_FIELD;typedef struct acpi_object_index_field{ ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO /* * No "Region_obj" pointer needed since the Index and Data registers * are each field definitions unto themselves. */ union acpi_operand_obj *index_obj; /* Index register */ union acpi_operand_obj *data_obj; /* Data register */} ACPI_OBJECT_INDEX_FIELD;/* The Buffer_field is different in that it is part of a Buffer, not an Op_region */typedef struct acpi_object_buffer_field{ ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO union acpi_operand_obj *buffer_obj; /* Containing Buffer object */} ACPI_OBJECT_BUFFER_FIELD;/****************************************************************************** * * Objects for handlers * *****************************************************************************/typedef struct acpi_object_notify_handler{ ACPI_OBJECT_COMMON_HEADER acpi_namespace_node *node; /* Parent device */ acpi_notify_handler handler; void *context;} ACPI_OBJECT_NOTIFY_HANDLER;/* Flags for address handler */#define ACPI_ADDR_HANDLER_DEFAULT_INSTALLED 0x1typedef struct acpi_object_addr_handler{ ACPI_OBJECT_COMMON_HEADER u8 space_id; u16 hflags; acpi_adr_space_handler handler; acpi_namespace_node *node; /* Parent device */ void *context; acpi_adr_space_setup setup; union acpi_operand_obj *region_list; /* regions using this handler */ union acpi_operand_obj *next;} ACPI_OBJECT_ADDR_HANDLER;/****************************************************************************** * * Special internal objects * *****************************************************************************//* * The Reference object type is used for these opcodes: * Arg[0-6], Local[0-7], Index_op, Name_op, Zero_op, One_op, Ones_op, Debug_op */typedef struct acpi_object_reference{ ACPI_OBJECT_COMMON_HEADER u8 target_type; /* Used for Index_op */ u16 opcode; u32 offset; /* Used for Arg_op, Local_op, and Index_op */ void *object; /* Name_op=>HANDLE to obj, Index_op=>acpi_operand_object */ acpi_namespace_node *node; union acpi_operand_obj **where;} ACPI_OBJECT_REFERENCE;/* * Extra object is used as additional storage for types that * have AML code in their declarations (Term_args) that must be * evaluated at run time. * * Currently: Region and Field_unit types */typedef struct acpi_object_extra{ ACPI_OBJECT_COMMON_HEADER u8 byte_fill1; u16 word_fill1; u32 aml_length; u8 *aml_start; acpi_namespace_node *method_REG; /* _REG method for this region (if any) */ void *region_context; /* Region-specific data */} ACPI_OBJECT_EXTRA;/* Additional data that can be attached to namespace nodes */typedef struct acpi_object_data{ ACPI_OBJECT_COMMON_HEADER ACPI_OBJECT_HANDLER handler; void *pointer;} ACPI_OBJECT_DATA;/* Structure used when objects are cached for reuse */typedef struct acpi_object_cache_list{ ACPI_OBJECT_COMMON_HEADER union acpi_operand_obj *next; /* Link for object cache and internal lists*/} ACPI_OBJECT_CACHE_LIST;/****************************************************************************** * * acpi_operand_object Descriptor - a giant union of all of the above * *****************************************************************************/typedef union acpi_operand_obj{ ACPI_OBJECT_COMMON common; ACPI_OBJECT_INTEGER integer; ACPI_OBJECT_STRING string; ACPI_OBJECT_BUFFER buffer; ACPI_OBJECT_PACKAGE package; ACPI_OBJECT_EVENT event; ACPI_OBJECT_METHOD method; ACPI_OBJECT_MUTEX mutex; ACPI_OBJECT_REGION region; ACPI_OBJECT_NOTIFY_COMMON common_notify; ACPI_OBJECT_DEVICE device; ACPI_OBJECT_POWER_RESOURCE power_resource; ACPI_OBJECT_PROCESSOR processor; ACPI_OBJECT_THERMAL_ZONE thermal_zone; ACPI_OBJECT_FIELD_COMMON common_field; ACPI_OBJECT_REGION_FIELD field; ACPI_OBJECT_BUFFER_FIELD buffer_field; ACPI_OBJECT_BANK_FIELD bank_field; ACPI_OBJECT_INDEX_FIELD index_field; ACPI_OBJECT_NOTIFY_HANDLER notify_handler; ACPI_OBJECT_ADDR_HANDLER addr_handler; ACPI_OBJECT_REFERENCE reference; ACPI_OBJECT_EXTRA extra; ACPI_OBJECT_DATA data; ACPI_OBJECT_CACHE_LIST cache;} acpi_operand_object;#endif /* _ACOBJECT_H */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?