aclocal.h

来自「一个类似windows」· C头文件 代码 · 共 833 行 · 第 1/2 页

H
833
字号
 */

typedef struct acpi_scope_state
{
	ACPI_STATE_COMMON
	ACPI_NAMESPACE_NODE     *node;

} ACPI_SCOPE_STATE;


typedef struct acpi_pscope_state
{
	ACPI_STATE_COMMON
	struct acpi_parse_obj   *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 */

} ACPI_PSCOPE_STATE;


/*
 * Result values - used to accumulate the results of nested
 * AML arguments
 */
typedef struct acpi_result_values
{
	ACPI_STATE_COMMON
	union acpi_operand_obj  *obj_desc [OBJ_NUM_OPERANDS];
	u8                      num_results;
	u8                      last_insert;

} ACPI_RESULT_VALUES;


/*
 * Notify info - used to pass info to the deferred notify
 * handler/dispatcher.
 */

typedef struct acpi_notify_info
{
	ACPI_STATE_COMMON
	ACPI_NAMESPACE_NODE     *node;
	union acpi_operand_obj  *handler_obj;

} ACPI_NOTIFY_INFO;


/* Generic state is union of structs above */

typedef union acpi_gen_state
{
	ACPI_COMMON_STATE       common;
	ACPI_CONTROL_STATE      control;
	ACPI_UPDATE_STATE       update;
	ACPI_SCOPE_STATE        scope;
	ACPI_PSCOPE_STATE       parse_scope;
	ACPI_PKG_STATE          pkg;
	ACPI_RESULT_VALUES      results;
	ACPI_NOTIFY_INFO        notify;

} ACPI_GENERIC_STATE;


typedef
ACPI_STATUS (*ACPI_PARSE_DOWNWARDS) (
	u16                     opcode,
	struct acpi_parse_obj   *op,
	struct acpi_walk_state  *walk_state,
	struct acpi_parse_obj   **out_op);

typedef
ACPI_STATUS (*ACPI_PARSE_UPWARDS) (
	struct acpi_walk_state  *walk_state,
	struct acpi_parse_obj   *op);


/*****************************************************************************
 *
 * Parser typedefs and structs
 *
 ****************************************************************************/


#define ACPI_OP_CLASS_MASK              0x1F
#define ACPI_OP_ARGS_MASK               0x20
#define ACPI_OP_TYPE_MASK               0xC0

#define ACPI_OP_TYPE_OPCODE             0x00
#define ACPI_OP_TYPE_ASCII              0x40
#define ACPI_OP_TYPE_PREFIX             0x80
#define ACPI_OP_TYPE_UNKNOWN            0xC0

#define ACPI_GET_OP_CLASS(a)            ((a)->flags & ACPI_OP_CLASS_MASK)
#define ACPI_GET_OP_ARGS(a)             ((a)->flags & ACPI_OP_ARGS_MASK)
#define ACPI_GET_OP_TYPE(a)             ((a)->flags & ACPI_OP_TYPE_MASK)


/*
 * AML opcode, name, and argument layout
 */
typedef struct acpi_opcode_info
{
	u8                      flags;          /* Opcode type, Has_args flag */
	u32                     parse_args;     /* Grammar/Parse time arguments */
	u32                     runtime_args;   /* Interpret time arguments */

#ifdef _OPCODE_NAMES
	NATIVE_CHAR             *name;          /* op name (debug only) */
#endif

} ACPI_OPCODE_INFO;


typedef union acpi_parse_val
{
	u32                     integer;        /* integer constant */
	u32                     size;           /* bytelist or field size */
	NATIVE_CHAR             *string;        /* NULL terminated string */
	u8                      *buffer;        /* buffer or string */
	NATIVE_CHAR             *name;          /* NULL terminated string */
	struct acpi_parse_obj   *arg;           /* arguments and contained ops */

} ACPI_PARSE_VALUE;


#define ACPI_PARSE_COMMON \
	u8                      data_type;      /* To differentiate various internal objs */\
	u8                      flags;          /* Type of Op */\
	u16                     opcode;         /* AML opcode */\
	u32                     aml_offset;     /* offset of declaration in AML */\
	struct acpi_parse_obj   *parent;        /* parent op */\
	struct acpi_parse_obj   *next;          /* next op */\
	DEBUG_ONLY_MEMBERS (\
	NATIVE_CHAR             op_name[16])    /* op name (debug only) */\
			  /* NON-DEBUG members below: */\
	ACPI_NAMESPACE_NODE     *node;          /* for use by interpreter */\
	ACPI_PARSE_VALUE        value;          /* Value or args associated with the opcode */\


/*
 * generic operation (eg. If, While, Store)
 */
typedef struct acpi_parse_obj
{
	ACPI_PARSE_COMMON
} ACPI_PARSE_OBJECT;


/*
 * Extended Op for named ops (Scope, Method, etc.), deferred ops (Methods and Op_regions),
 * and bytelists.
 */
typedef struct acpi_parse2_obj
{
	ACPI_PARSE_COMMON
	u8                      *data;          /* AML body or bytelist data */
	u32                     length;         /* AML length */
	u32                     name;           /* 4-byte name or zero if no name */

} ACPI_PARSE2_OBJECT;


/*
 * Parse state - one state per parser invocation and each control
 * method.
 */

typedef 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 */
	ACPI_PARSE_OBJECT       *start_op;      /* root of parse tree */
	struct acpi_node        *start_node;
	ACPI_GENERIC_STATE      *scope;         /* current scope */
	struct acpi_parse_state *next;

} ACPI_PARSE_STATE;


/*****************************************************************************
 *
 * Hardware and PNP
 *
 ****************************************************************************/


/* PCI */

#define PCI_ROOT_HID_STRING             "PNP0A03"
#define PCI_ROOT_HID_VALUE              0x030AD041       /* EISAID("PNP0A03") */


/* Sleep states */

#define SLWA_DEBUG_LEVEL                4
#define GTS_CALL                        0
#define GTS_WAKE                        1

/* Cx States */

#define MAX_CX_STATE_LATENCY            0xFFFFFFFF
#define MAX_CX_STATES                   4


/*
 * The #define's and enum below establish an abstract way of identifying what
 * register block and register is to be accessed.  Do not change any of the
 * values as they are used in switch statements and offset calculations.
 */

#define REGISTER_BLOCK_MASK             0xFF00  /* Register Block Id    */
#define BIT_IN_REGISTER_MASK            0x00FF  /* Bit Id in the Register Block Id    */
#define BYTE_IN_REGISTER_MASK           0x00FF  /* Register Offset in the Register Block    */

#define REGISTER_BLOCK_ID(reg_id)       (reg_id & REGISTER_BLOCK_MASK)
#define REGISTER_BIT_ID(reg_id)         (reg_id & BIT_IN_REGISTER_MASK)
#define REGISTER_OFFSET(reg_id)         (reg_id & BYTE_IN_REGISTER_MASK)

/*
 * Access Rule
 *  To access a Register Bit:
 *  -> Use Bit Name (= Register Block Id | Bit Id) defined in the enum.
 *
 *  To access a Register:
 *  -> Use Register Id (= Register Block Id | Register Offset)
 */


/*
 * Register Block Id
 */
#define PM1_STS                         0x0100
#define PM1_EN                          0x0200
#define PM1_CONTROL                     0x0300
#define PM1_a_CONTROL                   0x0400
#define PM1_b_CONTROL                   0x0500
#define PM2_CONTROL                     0x0600
#define PM_TIMER                        0x0700
#define PROCESSOR_BLOCK                 0x0800
#define GPE0_STS_BLOCK                  0x0900
#define GPE0_EN_BLOCK                   0x0A00
#define GPE1_STS_BLOCK                  0x0B00
#define GPE1_EN_BLOCK                   0x0C00
#define SMI_CMD_BLOCK                   0x0D00

/*
 * Address space bitmasks for mmio or io spaces
 */

#define SMI_CMD_ADDRESS_SPACE           0x01
#define PM1_BLK_ADDRESS_SPACE           0x02
#define PM2_CNT_BLK_ADDRESS_SPACE       0x04
#define PM_TMR_BLK_ADDRESS_SPACE        0x08
#define GPE0_BLK_ADDRESS_SPACE          0x10
#define GPE1_BLK_ADDRESS_SPACE          0x20

/*
 * Control bit definitions
 */
#define TMR_STS                         (PM1_STS | 0x01)
#define BM_STS                          (PM1_STS | 0x02)
#define GBL_STS                         (PM1_STS | 0x03)
#define PWRBTN_STS                      (PM1_STS | 0x04)
#define SLPBTN_STS                      (PM1_STS | 0x05)
#define RTC_STS                         (PM1_STS | 0x06)
#define WAK_STS                         (PM1_STS | 0x07)

#define TMR_EN                          (PM1_EN | 0x01)
			 /* no BM_EN */
#define GBL_EN                          (PM1_EN | 0x03)
#define PWRBTN_EN                       (PM1_EN | 0x04)
#define SLPBTN_EN                       (PM1_EN | 0x05)
#define RTC_EN                          (PM1_EN | 0x06)
#define WAK_EN                          (PM1_EN | 0x07)

#define SCI_EN                          (PM1_CONTROL | 0x01)
#define BM_RLD                          (PM1_CONTROL | 0x02)
#define GBL_RLS                         (PM1_CONTROL | 0x03)
#define SLP_TYPE_A                      (PM1_CONTROL | 0x04)
#define SLP_TYPE_B                      (PM1_CONTROL | 0x05)
#define SLP_EN                          (PM1_CONTROL | 0x06)

#define ARB_DIS                         (PM2_CONTROL | 0x01)

#define TMR_VAL                         (PM_TIMER | 0x01)

#define GPE0_STS                        (GPE0_STS_BLOCK | 0x01)
#define GPE0_EN                         (GPE0_EN_BLOCK  | 0x01)

#define GPE1_STS                        (GPE1_STS_BLOCK | 0x01)
#define GPE1_EN                         (GPE1_EN_BLOCK  | 0x01)


#define TMR_STS_MASK                    0x0001
#define BM_STS_MASK                     0x0010
#define GBL_STS_MASK                    0x0020
#define PWRBTN_STS_MASK                 0x0100
#define SLPBTN_STS_MASK                 0x0200
#define RTC_STS_MASK                    0x0400
#define WAK_STS_MASK                    0x8000

#define ALL_FIXED_STS_BITS              (TMR_STS_MASK   | BM_STS_MASK  | GBL_STS_MASK \
					  | PWRBTN_STS_MASK | SLPBTN_STS_MASK \
					  | RTC_STS_MASK | WAK_STS_MASK)

#define TMR_EN_MASK                     0x0001
#define GBL_EN_MASK                     0x0020
#define PWRBTN_EN_MASK                  0x0100
#define SLPBTN_EN_MASK                  0x0200
#define RTC_EN_MASK                     0x0400

#define SCI_EN_MASK                     0x0001
#define BM_RLD_MASK                     0x0002
#define GBL_RLS_MASK                    0x0004
#define SLP_TYPE_X_MASK                 0x1C00
#define SLP_EN_MASK                     0x2000

#define ARB_DIS_MASK                    0x0001
#define TMR_VAL_MASK                    0xFFFFFFFF

#define GPE0_STS_MASK
#define GPE0_EN_MASK

#define GPE1_STS_MASK
#define GPE1_EN_MASK


#define ACPI_READ                       1
#define ACPI_WRITE                      2


/* Plug and play */

/* Pnp and ACPI data */

#define VERSION_NO                      0x01
#define LOGICAL_DEVICE_ID               0x02
#define COMPATIBLE_DEVICE_ID            0x03
#define IRQ_FORMAT                      0x04
#define DMA_FORMAT                      0x05
#define START_DEPENDENT_TAG             0x06
#define END_DEPENDENT_TAG               0x07
#define IO_PORT_DESCRIPTOR              0x08
#define FIXED_LOCATION_IO_DESCRIPTOR    0x09
#define RESERVED_TYPE0                  0x0A
#define RESERVED_TYPE1                  0x0B
#define RESERVED_TYPE2                  0x0C
#define RESERVED_TYPE3                  0x0D
#define SMALL_VENDOR_DEFINED            0x0E
#define END_TAG                         0x0F

/* Pnp and ACPI data */

#define MEMORY_RANGE_24                 0x81
#define ISA_MEMORY_RANGE                0x81
#define LARGE_VENDOR_DEFINED            0x84
#define EISA_MEMORY_RANGE               0x85
#define MEMORY_RANGE_32                 0x85
#define FIXED_EISA_MEMORY_RANGE         0x86
#define FIXED_MEMORY_RANGE_32           0x86

/* ACPI only data */

#define DWORD_ADDRESS_SPACE             0x87
#define WORD_ADDRESS_SPACE              0x88
#define EXTENDED_IRQ                    0x89

/* MUST HAVES */

#define DEVICE_ID_LENGTH                0x09

typedef struct
{
	NATIVE_CHAR             buffer[DEVICE_ID_LENGTH];

} DEVICE_ID;


/*****************************************************************************
 *
 * Debug
 *
 ****************************************************************************/


/* Entry for a memory allocation (debug only) */

#ifdef ACPI_DEBUG

#define MEM_MALLOC                      0
#define MEM_CALLOC                      1
#define MAX_MODULE_NAME                 16

typedef struct allocation_info
{
	struct allocation_info  *previous;
	struct allocation_info  *next;
	void                    *address;
	u32                     size;
	u32                     component;
	u32                     line;
	NATIVE_CHAR             module[MAX_MODULE_NAME];
	u8                      alloc_type;

} ALLOCATION_INFO;

#endif

#endif /* __ACLOCAL_H__ */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?