aclocal.h
来自「一个类似windows」· C头文件 代码 · 共 833 行 · 第 1/2 页
H
833 行
/******************************************************************************
*
* Name: aclocal.h - Internal data types used across the ACPI subsystem
* $Revision: 1.1 $
*
*****************************************************************************/
/*
* 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;
/* Object descriptor types */
#define ACPI_CACHED_OBJECT 0x11 /* ORed in when object is cached */
#define ACPI_DESC_TYPE_STATE 0x22
#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_cm_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;
u8 locked;
} ACPI_MUTEX_INFO;
/* Lock flag parameter for various interfaces */
#define ACPI_MTX_DO_NOT_LOCK 0
#define ACPI_MTX_LOCK 1
typedef 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
/*****************************************************************************
*
* 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 */
void *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
/*
* 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_pointer;
UINT64 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
*/
#define ACPI_MAX_ADDRESS_SPACE 255
#define ACPI_NUM_ADDRESS_SPACES 256
typedef struct
{
NATIVE_CHAR *name;
ACPI_OBJECT_TYPE type;
NATIVE_CHAR *val;
} PREDEFINED_NAMES;
/* Object types used during package copies */
#define ACPI_COPY_TYPE_SIMPLE 0
#define ACPI_COPY_TYPE_PACKAGE 1
/*****************************************************************************
*
* Event typedefs and structs
*
****************************************************************************/
/* Status bits. */
#define ACPI_STATUS_PMTIMER 0x0001
#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
{
ADDRESS_SPACE_HANDLER handler;
void *context;
} ACPI_ADDRESS_SPACE_INFO;
/* Values and addresses of the GPE registers (both banks) */
typedef struct
{
u8 status; /* Current value of status reg */
u8 enable; /* Current value of enable reg */
u16 status_addr; /* Address of status reg */
u16 enable_addr; /* Address of enable reg */
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 */
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
{
FIXED_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
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?