New init xfaces; JIT CreateField evaluation.

date	2000.09.11.15.15.00;	author rmoore1;	state Exp;
This commit is contained in:
aystarik 2005-06-29 19:40:15 +00:00
parent 802a99a178
commit afae222379
2 changed files with 292 additions and 309 deletions

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Name: acinterp.h - Interpreter subcomponent prototypes and defines
* $Revision: 1.80 $
*
*****************************************************************************/
@ -141,7 +141,7 @@
ACPI_STATUS
AcpiAmlResolveOperands (
UINT16 Opcode,
ACPI_OBJECT_INTERNAL **StackPtr,
ACPI_OPERAND_OBJECT **StackPtr,
ACPI_WALK_STATE *WalkState);
@ -155,10 +155,9 @@ AcpiAmlLoadTable (
ACPI_STATUS
AcpiAmlExecuteMethod (
ACPI_NAMED_OBJECT *MethodEntry,
ACPI_OBJECT_INTERNAL **Params,
ACPI_OBJECT_INTERNAL **ReturnObjDesc);
ACPI_NAMESPACE_NODE *MethodNode,
ACPI_OPERAND_OBJECT **Params,
ACPI_OPERAND_OBJECT **ReturnObjDesc);
/*
@ -168,7 +167,7 @@ AcpiAmlExecuteMethod (
ACPI_STATUS
AcpiAmlReadField (
ACPI_OBJECT_INTERNAL *ObjDesc,
ACPI_OPERAND_OBJECT *ObjDesc,
void *Buffer,
UINT32 BufferLength,
UINT32 ByteLength,
@ -178,7 +177,7 @@ AcpiAmlReadField (
ACPI_STATUS
AcpiAmlWriteField (
ACPI_OBJECT_INTERNAL *ObjDesc,
ACPI_OPERAND_OBJECT *ObjDesc,
void *Buffer,
UINT32 BufferLength,
UINT32 ByteLength,
@ -188,20 +187,20 @@ AcpiAmlWriteField (
ACPI_STATUS
AcpiAmlSetupField (
ACPI_OBJECT_INTERNAL *ObjDesc,
ACPI_OBJECT_INTERNAL *RgnDesc,
INT32 FieldBitWidth);
ACPI_OPERAND_OBJECT *ObjDesc,
ACPI_OPERAND_OBJECT *RgnDesc,
UINT32 FieldBitWidth);
ACPI_STATUS
AcpiAmlReadFieldData (
ACPI_OBJECT_INTERNAL *ObjDesc,
ACPI_OPERAND_OBJECT *ObjDesc,
UINT32 FieldByteOffset,
UINT32 FieldBitWidth,
UINT32 *Value);
ACPI_STATUS
AcpiAmlAccessNamedField (
INT32 Mode,
UINT32 Mode,
ACPI_HANDLE NamedField,
void *Buffer,
UINT32 Length);
@ -212,7 +211,9 @@ AcpiAmlAccessNamedField (
ACPI_STATUS
AcpiAmlExecCreateField (
UINT16 Opcode,
UINT8 *AmlPtr,
UINT32 AmlLength,
ACPI_NAMESPACE_NODE *Node,
ACPI_WALK_STATE *WalkState);
ACPI_STATUS
@ -227,12 +228,12 @@ AcpiAmlExecFatal (
ACPI_STATUS
AcpiAmlExecIndex (
ACPI_WALK_STATE *WalkState,
ACPI_OBJECT_INTERNAL **ReturnDesc);
ACPI_OPERAND_OBJECT **ReturnDesc);
ACPI_STATUS
AcpiAmlExecMatch (
ACPI_WALK_STATE *WalkState,
ACPI_OBJECT_INTERNAL **ReturnDesc);
ACPI_OPERAND_OBJECT **ReturnDesc);
ACPI_STATUS
AcpiAmlExecCreateMutex (
@ -240,12 +241,12 @@ AcpiAmlExecCreateMutex (
ACPI_STATUS
AcpiAmlExecCreateProcessor (
ACPI_GENERIC_OP *Op,
ACPI_PARSE_OBJECT *Op,
ACPI_HANDLE ProcessorNTE);
ACPI_STATUS
AcpiAmlExecCreatePowerResource (
ACPI_GENERIC_OP *Op,
ACPI_PARSE_OBJECT *Op,
ACPI_HANDLE ProcessorNTE);
ACPI_STATUS
@ -277,7 +278,7 @@ AcpiAmlExecCreateMethod (
ACPI_STATUS
AcpiAmlPrepDefFieldValue (
ACPI_NAMED_OBJECT *ThisEntry,
ACPI_NAMESPACE_NODE *Node,
ACPI_HANDLE Region,
UINT8 FieldFlags,
UINT8 FieldAttribute,
@ -286,7 +287,7 @@ AcpiAmlPrepDefFieldValue (
ACPI_STATUS
AcpiAmlPrepBankFieldValue (
ACPI_NAMED_OBJECT *ThisEntry,
ACPI_NAMESPACE_NODE *Node,
ACPI_HANDLE Region,
ACPI_HANDLE BankReg,
UINT32 BankVal,
@ -297,7 +298,7 @@ AcpiAmlPrepBankFieldValue (
ACPI_STATUS
AcpiAmlPrepIndexFieldValue (
ACPI_NAMED_OBJECT *ThisEntry,
ACPI_NAMESPACE_NODE *Node,
ACPI_HANDLE IndexReg,
ACPI_HANDLE DataReg,
UINT8 FieldFlags,
@ -305,11 +306,6 @@ AcpiAmlPrepIndexFieldValue (
UINT32 FieldPosition,
UINT32 FieldLength);
ACPI_STATUS
AcpiAmlPrepOperands (
INT8 *Types,
ACPI_OBJECT_INTERNAL **StackPtr);
/*
* amsystem - Interface to OS services
@ -321,8 +317,8 @@ AcpiAmlSystemThreadId (
ACPI_STATUS
AcpiAmlSystemDoNotifyOp (
ACPI_OBJECT_INTERNAL *Value,
ACPI_OBJECT_INTERNAL *ObjDesc);
ACPI_OPERAND_OBJECT *Value,
ACPI_OPERAND_OBJECT *ObjDesc);
void
AcpiAmlSystemDoSuspend(
@ -334,25 +330,25 @@ AcpiAmlSystemDoStall (
ACPI_STATUS
AcpiAmlSystemAcquireMutex(
ACPI_OBJECT_INTERNAL *Time,
ACPI_OBJECT_INTERNAL *ObjDesc);
ACPI_OPERAND_OBJECT *Time,
ACPI_OPERAND_OBJECT *ObjDesc);
ACPI_STATUS
AcpiAmlSystemReleaseMutex(
ACPI_OBJECT_INTERNAL *ObjDesc);
ACPI_OPERAND_OBJECT *ObjDesc);
ACPI_STATUS
AcpiAmlSystemSignalEvent(
ACPI_OBJECT_INTERNAL *ObjDesc);
ACPI_OPERAND_OBJECT *ObjDesc);
ACPI_STATUS
AcpiAmlSystemWaitEvent(
ACPI_OBJECT_INTERNAL *Time,
ACPI_OBJECT_INTERNAL *ObjDesc);
ACPI_OPERAND_OBJECT *Time,
ACPI_OPERAND_OBJECT *ObjDesc);
ACPI_STATUS
AcpiAmlSystemResetEvent(
ACPI_OBJECT_INTERNAL *ObjDesc);
ACPI_OPERAND_OBJECT *ObjDesc);
ACPI_STATUS
AcpiAmlSystemWaitSemaphore (
@ -373,13 +369,13 @@ ACPI_STATUS
AcpiAmlExecMonadic2 (
UINT16 Opcode,
ACPI_WALK_STATE *WalkState,
ACPI_OBJECT_INTERNAL **ReturnDesc);
ACPI_OPERAND_OBJECT **ReturnDesc);
ACPI_STATUS
AcpiAmlExecMonadic2R (
UINT16 Opcode,
ACPI_WALK_STATE *WalkState,
ACPI_OBJECT_INTERNAL **ReturnDesc);
ACPI_OPERAND_OBJECT **ReturnDesc);
/*
@ -395,19 +391,19 @@ ACPI_STATUS
AcpiAmlExecDyadic2 (
UINT16 Opcode,
ACPI_WALK_STATE *WalkState,
ACPI_OBJECT_INTERNAL **ReturnDesc);
ACPI_OPERAND_OBJECT **ReturnDesc);
ACPI_STATUS
AcpiAmlExecDyadic2R (
UINT16 Opcode,
ACPI_WALK_STATE *WalkState,
ACPI_OBJECT_INTERNAL **ReturnDesc);
ACPI_OPERAND_OBJECT **ReturnDesc);
ACPI_STATUS
AcpiAmlExecDyadic2S (
UINT16 Opcode,
ACPI_WALK_STATE *WalkState,
ACPI_OBJECT_INTERNAL **ReturnDesc);
ACPI_OPERAND_OBJECT **ReturnDesc);
/*
@ -416,22 +412,22 @@ AcpiAmlExecDyadic2S (
ACPI_STATUS
AcpiAmlResolveToValue (
ACPI_OBJECT_INTERNAL **StackPtr,
ACPI_OPERAND_OBJECT **StackPtr,
ACPI_WALK_STATE *WalkState);
ACPI_STATUS
AcpiAmlResolveEntryToValue (
ACPI_NAMED_OBJECT **StackPtr);
AcpiAmlResolveNodeToValue (
ACPI_NAMESPACE_NODE **StackPtr);
ACPI_STATUS
AcpiAmlResolveObjectToValue (
ACPI_OBJECT_INTERNAL **StackPtr,
ACPI_OPERAND_OBJECT **StackPtr,
ACPI_WALK_STATE *WalkState);
ACPI_STATUS
AcpiAmlGetFieldUnitValue (
ACPI_OBJECT_INTERNAL *FieldDesc,
ACPI_OBJECT_INTERNAL *ResultDesc);
ACPI_OPERAND_OBJECT *FieldDesc,
ACPI_OPERAND_OBJECT *ResultDesc);
/*
@ -440,34 +436,34 @@ AcpiAmlGetFieldUnitValue (
void
AcpiAmlShowHexValue (
INT32 ByteCount,
UINT32 ByteCount,
UINT8 *AmlPtr,
INT32 LeadSpace);
UINT32 LeadSpace);
ACPI_STATUS
AcpiAmlDumpOperand (
ACPI_OBJECT_INTERNAL *EntryDesc);
ACPI_OPERAND_OBJECT *EntryDesc);
void
AcpiAmlDumpOperands (
ACPI_OBJECT_INTERNAL **Operands,
ACPI_OPERAND_OBJECT **Operands,
OPERATING_MODE InterpreterMode,
INT8 *Ident,
INT32 NumLevels,
INT8 *Note,
INT8 *ModuleName,
INT32 LineNumber);
NATIVE_CHAR *Ident,
UINT32 NumLevels,
NATIVE_CHAR *Note,
NATIVE_CHAR *ModuleName,
UINT32 LineNumber);
void
AcpiAmlDumpObjectDescriptor (
ACPI_OBJECT_INTERNAL *Object,
ACPI_OPERAND_OBJECT *Object,
UINT32 Flags);
void
AcpiAmlDumpAcpiNamedObject (
ACPI_NAMED_OBJECT *Entry,
AcpiAmlDumpNode (
ACPI_NAMESPACE_NODE *Node,
UINT32 Flags);
@ -475,25 +471,25 @@ AcpiAmlDumpAcpiNamedObject (
* amnames - interpreter/scanner name load/execute
*/
INT8 *
NATIVE_CHAR *
AcpiAmlAllocateNameString (
UINT32 PrefixCount,
UINT32 NumNameSegs);
INT32
UINT32
AcpiAmlGoodChar (
INT32 Character);
UINT32 Character);
ACPI_STATUS
AcpiAmlExecNameSegment (
UINT8 **InAmlAddress,
INT8 *NameString);
NATIVE_CHAR *NameString);
ACPI_STATUS
AcpiAmlGetNameString (
OBJECT_TYPE_INTERNAL DataType,
UINT8 *InAmlAddress,
INT8 **OutNameString,
NATIVE_CHAR **OutNameString,
UINT32 *OutNameLength);
ACPI_STATUS
@ -508,20 +504,20 @@ AcpiAmlDoName (
ACPI_STATUS
AcpiAmlExecStore (
ACPI_OBJECT_INTERNAL *ValDesc,
ACPI_OBJECT_INTERNAL *DestDesc,
ACPI_OPERAND_OBJECT *ValDesc,
ACPI_OPERAND_OBJECT *DestDesc,
ACPI_WALK_STATE *WalkState);
ACPI_STATUS
AcpiAmlStoreObjectToObject (
ACPI_OBJECT_INTERNAL *ValDesc,
ACPI_OBJECT_INTERNAL *DestDesc,
ACPI_OPERAND_OBJECT *ValDesc,
ACPI_OPERAND_OBJECT *DestDesc,
ACPI_WALK_STATE *WalkState);
ACPI_STATUS
AcpiAmlStoreObjectToNte (
ACPI_OBJECT_INTERNAL *ValDesc,
ACPI_NAMED_OBJECT *Entry,
AcpiAmlStoreObjectToNode (
ACPI_OPERAND_OBJECT *ValDesc,
ACPI_NAMESPACE_NODE *Node,
ACPI_WALK_STATE *WalkState);
@ -553,20 +549,20 @@ UINT32
AcpiAmlBufSeq (
void);
INT32
UINT32
AcpiAmlDigitsNeeded (
INT32 Value,
INT32 Base);
UINT32 Value,
UINT32 Base);
ACPI_STATUS
AcpiAmlEisaIdToString (
UINT32 NumericId,
INT8 *OutString);
NATIVE_CHAR *OutString);
ACPI_STATUS
AcpiAmlBuildCopyInternalPackageObject (
ACPI_OBJECT_INTERNAL *SourceObj,
ACPI_OBJECT_INTERNAL *DestObj,
ACPI_OPERAND_OBJECT *SourceObj,
ACPI_OPERAND_OBJECT *DestObj,
ACPI_WALK_STATE *WalkState);

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Name: aclocal.h - Internal data types used across the ACPI subsystem
* $Revision: 1.78 $
*
*****************************************************************************/
@ -126,11 +126,12 @@ typedef UINT32 ACPI_MUTEX_HANDLE;
/* Object descriptor types */
#define ACPI_DESC_TYPE_INTERNAL 0xAA
#define ACPI_DESC_TYPE_PARSER 0xBB
#define ACPI_DESC_TYPE_STATE 0xCC
#define ACPI_DESC_TYPE_WALK 0xDD
#define ACPI_DESC_TYPE_NAMED 0xEE
#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
/*****************************************************************************
@ -169,7 +170,7 @@ typedef UINT32 ACPI_MUTEX_HANDLE;
/* Names for the mutexes used in the subsystem */
static INT8 *AcpiGbl_MutexNames[] =
static NATIVE_CHAR *AcpiGbl_MutexNames[] =
{
"ACPI_MTX_Hardware",
"ACPI_MTX_Memory",
@ -215,7 +216,7 @@ typedef UINT16 ACPI_OWNER_ID;
/* TBD: [Restructure] get rid of the need for this! */
#define TABLE_ID_DSDT (ACPI_OWNER_ID) 0xD1D1
#define TABLE_ID_DSDT (ACPI_OWNER_ID) 0x8000
/*****************************************************************************
*
@ -228,58 +229,45 @@ typedef UINT16 ACPI_OWNER_ID;
typedef enum
{
IMODE_LOAD_PASS1 = 0x01,
IMODE_LOAD_PASS2 = 0x02,
IMODE_EXECUTE = 0x0E
IMODE_LOAD_PASS1 = 0x01,
IMODE_LOAD_PASS2 = 0x02,
IMODE_EXECUTE = 0x0E
} OPERATING_MODE;
/*
* The AcpiNamedObject describes a named object that appears in the AML
* An AcpiNameTable is used to store AcpiNamedObjects.
* The Node describes a named object that appears in the AML
* An AcpiNode is used to store Nodes.
*
* DataType is used to differentiate between internal descriptors, and MUST
* be the first byte in this structure.
*/
typedef struct AcpiNamedObject
typedef struct acpi_node
{
UINT8 DataType;
UINT8 Type; /* Type associated with this name */
UINT8 ThisIndex; /* Entry number */
UINT8 Flags;
UINT16 OwnerId;
UINT32 Name; /* ACPI Name, always 4 chars per ACPI spec */
void *Object; /* Pointer to attached ACPI object (optional) */
struct AcpiNameTable *ChildTable; /* Scope owned by this name (optional) */
ACPI_OWNER_ID OwnerId; /* ID of owner - either an ACPI table or a method */
struct acpi_node *Child; /* first child */
struct acpi_node *Peer; /* Next peer*/
UINT16 ReferenceCount; /* Current count of references and children */
UINT8 Flags;
#ifdef _IA64
UINT32 Fill1; /* 64-bit alignment */
#endif
} ACPI_NAMED_OBJECT;
} ACPI_NAMESPACE_NODE;
typedef struct AcpiNameTable
{
struct AcpiNameTable *NextTable;
struct AcpiNameTable *ParentTable;
ACPI_NAMED_OBJECT *ParentEntry;
ACPI_NAMED_OBJECT Entries[1];
} ACPI_NAME_TABLE;
#define ENTRY_NOT_FOUND NULL
#define ENTRY_NOT_FOUND NULL
/* Node flags */
/* NTE flags */
#define NTE_AML_ATTACHMENT 0x1
#define ANOBJ_AML_ATTACHMENT 0x1
#define ANOBJ_END_OF_PEER_LIST 0x2
/*
@ -306,19 +294,16 @@ typedef struct AcpiTableDesc
typedef struct
{
INT8 *SearchFor;
NATIVE_CHAR *SearchFor;
ACPI_HANDLE *List;
INT32 *Count;
UINT32 *Count;
} FIND_CONTEXT;
typedef struct
{
ACPI_NAME_TABLE *NameTable;
UINT32 Position;
BOOLEAN TableFull;
ACPI_NAMESPACE_NODE *Node;
} NS_SEARCH_DATA;
@ -331,9 +316,9 @@ typedef struct
typedef struct
{
INT8 *Name;
NATIVE_CHAR *Name;
ACPI_OBJECT_TYPE Type;
INT8 *Val;
NATIVE_CHAR *Val;
} PREDEFINED_NAMES;
@ -425,153 +410,6 @@ typedef struct
} ACPI_FIELD_INFO;
/*****************************************************************************
*
* 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_op_info
{
UINT8 Flags; /* Opcode type, HasArgs flag */
UINT32 ParseArgs; /* Grammar/Parse time arguments */
UINT32 RuntimeArgs; /* Interpret time arguments */
DEBUG_ONLY_MEMBERS (
INT8 *Name) /* op name (debug only) */
} ACPI_OP_INFO;
typedef union acpi_op_value
{
UINT32 Integer; /* integer constant */
UINT32 Size; /* bytelist or field size */
INT8 *String; /* NULL terminated string */
UINT8 *Buffer; /* buffer or string */
INT8 *Name; /* NULL terminated string */
struct acpi_generic_op *Arg; /* arguments and contained ops */
ACPI_NAMED_OBJECT *Entry; /* entry in interpreter namespace tbl */
} ACPI_OP_VALUE;
#define ACPI_COMMON_OP \
UINT8 DataType; /* To differentiate various internal objs */\
UINT8 Flags; /* Type of Op */\
UINT16 Opcode; /* AML opcode */\
UINT32 AmlOffset; /* offset of declaration in AML */\
struct acpi_generic_op *Parent; /* parent op */\
struct acpi_generic_op *Next; /* next op */\
DEBUG_ONLY_MEMBERS (\
INT8 OpName[16]) /* op name (debug only) */\
/* NON-DEBUG members below: */\
void *AcpiNamedObject;/* for use by interpreter */\
ACPI_OP_VALUE Value; /* Value or args associated with the opcode */\
/*
* generic operation (eg. If, While, Store)
*/
typedef struct acpi_generic_op
{
ACPI_COMMON_OP
} ACPI_GENERIC_OP;
/*
* operation with a name (eg. Scope, Method, Name, NamedField, ...)
*/
typedef struct acpi_named_op
{
ACPI_COMMON_OP
UINT32 Name; /* 4-byte name or zero if no name */
} ACPI_NAMED_OP;
/*
* special operation for methods and regions (parsing must be deferred
* until a first pass parse is completed)
*/
typedef struct acpi_deferred_op
{
ACPI_COMMON_OP
UINT32 Name; /* 4-byte name or 0 if none */
UINT32 BodyLength; /* AML body size */
UINT8 *Body; /* AML body */
UINT16 ThreadCount; /* Count of threads currently executing a method */
} ACPI_DEFERRED_OP;
/*
* special operation for bytelists (ByteList only)
*/
typedef struct acpi_bytelist_op
{
ACPI_COMMON_OP
UINT8 *Data; /* bytelist data */
} ACPI_BYTELIST_OP;
/*
* Parse state - one state per parser invocation and each control
* method.
*/
typedef struct acpi_parse_state
{
UINT8 *AmlStart; /* first AML byte */
UINT8 *Aml; /* next AML byte */
UINT8 *AmlEnd; /* (last + 1) AML byte */
UINT8 *PkgStart; /* current package begin */
UINT8 *PkgEnd; /* current package end */
ACPI_GENERIC_OP *StartOp; /* root of parse tree */
struct AcpiNamedObject *StartEntry;
struct acpi_parse_scope *Scope; /* current scope */
struct acpi_parse_scope *ScopeAvail; /* unused (extra) scope structs */
struct acpi_parse_state *Next;
} ACPI_PARSE_STATE;
/*
* Parse scope - one per ACPI scope
*/
typedef struct acpi_parse_scope
{
ACPI_GENERIC_OP *Op; /* current op being parsed */
UINT8 *ArgEnd; /* current argument end */
UINT8 *PkgEnd; /* current package end */
struct acpi_parse_scope *Parent; /* parent scope */
UINT32 ArgList; /* next argument to parse */
UINT32 ArgCount; /* Number of fixed arguments */
} ACPI_PARSE_SCOPE;
/*****************************************************************************
*
* Generic "state" object for stacks
@ -586,6 +424,11 @@ typedef struct acpi_parse_scope
#define CONTROL_PREDICATE_TRUE 0xC4
/* Forward declaration */
struct acpi_walk_state;
struct acpi_parse_obj ;
#define ACPI_STATE_COMMON /* Two 32-bit fields and a pointer */\
UINT8 DataType; /* To differentiate various internal objs */\
UINT8 Flags; \
@ -606,7 +449,7 @@ typedef struct acpi_common_state
typedef struct acpi_update_state
{
ACPI_STATE_COMMON
union AcpiObjInternal *Object;
union acpi_operand_obj *Object;
} ACPI_UPDATE_STATE;
@ -617,7 +460,7 @@ typedef struct acpi_update_state
typedef struct acpi_control_state
{
ACPI_STATE_COMMON
ACPI_GENERIC_OP *PredicateOp;
struct acpi_parse_obj *PredicateOp;
UINT8 *AmlPredicateStart; /* Start of if/while predicate */
} ACPI_CONTROL_STATE;
@ -630,17 +473,30 @@ typedef struct acpi_control_state
typedef struct acpi_scope_state
{
ACPI_STATE_COMMON
ACPI_NAME_TABLE *NameTable;
ACPI_NAMESPACE_NODE *Node;
} ACPI_SCOPE_STATE;
typedef struct acpi_pscope_state
{
ACPI_STATE_COMMON
struct acpi_parse_obj *Op; /* current op being parsed */
UINT8 *ArgEnd; /* current argument end */
UINT8 *PkgEnd; /* current package end */
UINT32 ArgList; /* next argument to parse */
UINT32 ArgCount; /* Number of fixed arguments */
} ACPI_PSCOPE_STATE;
typedef union acpi_gen_state
{
ACPI_COMMON_STATE Common;
ACPI_CONTROL_STATE Control;
ACPI_UPDATE_STATE Update;
ACPI_SCOPE_STATE Scope;
ACPI_PSCOPE_STATE ParseScope;
} ACPI_GENERIC_STATE;
@ -648,14 +504,119 @@ typedef union acpi_gen_state
typedef
ACPI_STATUS (*ACPI_PARSE_DOWNWARDS) (
UINT16 Opcode,
ACPI_GENERIC_OP *Op,
void *WalkState,
ACPI_GENERIC_OP **OutOp);
struct acpi_parse_obj *Op,
struct acpi_walk_state *WalkState,
struct acpi_parse_obj **OutOp);
typedef
ACPI_STATUS (*ACPI_PARSE_UPWARDS) (
void *State,
ACPI_GENERIC_OP *Op);
struct acpi_walk_state *WalkState,
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
{
UINT8 Flags; /* Opcode type, HasArgs flag */
UINT32 ParseArgs; /* Grammar/Parse time arguments */
UINT32 RuntimeArgs; /* Interpret time arguments */
DEBUG_ONLY_MEMBERS (
NATIVE_CHAR *Name) /* op name (debug only) */
} ACPI_OPCODE_INFO;
typedef union acpi_parse_val
{
UINT32 Integer; /* integer constant */
UINT32 Size; /* bytelist or field size */
NATIVE_CHAR *String; /* NULL terminated string */
UINT8 *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 \
UINT8 DataType; /* To differentiate various internal objs */\
UINT8 Flags; /* Type of Op */\
UINT16 Opcode; /* AML opcode */\
UINT32 AmlOffset; /* offset of declaration in AML */\
struct acpi_parse_obj *Parent; /* parent op */\
struct acpi_parse_obj *Next; /* next op */\
DEBUG_ONLY_MEMBERS (\
NATIVE_CHAR OpName[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 OpRegions),
* and bytelists.
*/
typedef struct acpi_parse2_obj
{
ACPI_PARSE_COMMON
UINT8 *Data; /* AML body or bytelist data */
UINT32 Length; /* AML length */
UINT32 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
{
UINT8 *AmlStart; /* first AML byte */
UINT8 *Aml; /* next AML byte */
UINT8 *AmlEnd; /* (last + 1) AML byte */
UINT8 *PkgStart; /* current package begin */
UINT8 *PkgEnd; /* current package end */
ACPI_PARSE_OBJECT *StartOp; /* root of parse tree */
struct acpi_node *StartNode;
ACPI_GENERIC_STATE *Scope; /* current scope */
struct acpi_parse_state *Next;
} ACPI_PARSE_STATE;
/*****************************************************************************
@ -687,11 +648,11 @@ typedef struct acpi_walk_state
UINT8 CurrentResult; /* */
struct acpi_walk_state *Next; /* Next WalkState in list */
ACPI_GENERIC_OP *Origin; /* Start of walk */
ACPI_PARSE_OBJECT *Origin; /* Start of walk */
/* TBD: Obsolete with removal of WALK procedure ? */
ACPI_GENERIC_OP *PrevOp; /* Last op that was processed */
ACPI_GENERIC_OP *NextOp; /* next op to be processed */
ACPI_PARSE_OBJECT *PrevOp; /* Last op that was processed */
ACPI_PARSE_OBJECT *NextOp; /* next op to be processed */
ACPI_GENERIC_STATE *ControlState; /* List of control states (nested IFs) */
@ -701,14 +662,15 @@ typedef struct acpi_walk_state
ACPI_PARSE_DOWNWARDS DescendingCallback;
ACPI_PARSE_UPWARDS AscendingCallback;
union AcpiObjInternal *ReturnDesc; /* Return object, if any */
union AcpiObjInternal *MethodDesc; /* Method descriptor if running a method */
ACPI_GENERIC_OP *MethodCallOp; /* MethodCall Op if running a method */
struct AcpiNamedObject *MethodEntry;
union AcpiObjInternal *Operands[OBJ_NUM_OPERANDS]; /* Operands passed to the interpreter */
union AcpiObjInternal *Results[OBJ_NUM_OPERANDS]; /* Accumulated results */
struct AcpiNamedObject Arguments[MTH_NUM_ARGS]; /* Control method arguments */
struct AcpiNamedObject LocalVariables[MTH_NUM_LOCALS]; /* Control method locals */
union acpi_operand_obj *ReturnDesc; /* Return object, if any */
union acpi_operand_obj *MethodDesc; /* Method descriptor if running a method */
struct acpi_node *MethodNode; /* Method Node if running a method */
ACPI_PARSE_OBJECT *MethodCallOp; /* MethodCall Op if running a method */
struct acpi_node *MethodCallNode; /* Called method Node*/
union acpi_operand_obj *Operands[OBJ_NUM_OPERANDS]; /* Operands passed to the interpreter */
union acpi_operand_obj *Results[OBJ_NUM_OPERANDS]; /* Accumulated results */
struct acpi_node Arguments[MTH_NUM_ARGS]; /* Control method arguments */
struct acpi_node LocalVariables[MTH_NUM_LOCALS]; /* Control method locals */
UINT32 ParseFlags;
UINT8 WalkType;
UINT8 ReturnUsed;
@ -736,13 +698,31 @@ typedef struct acpi_walk_list
/* Info used by AcpiPsInitObjects */
typedef struct InitWalkInfo
typedef struct acpi_init_walk_info
{
UINT32 MethodCount;
UINT32 OpRegionCount;
UINT16 MethodCount;
UINT16 OpRegionCount;
UINT16 FieldCount;
UINT16 OpRegionInit;
UINT16 FieldInit;
UINT16 ObjectCount;
ACPI_TABLE_DESC *TableDesc;
} INIT_WALK_INFO;
} ACPI_INIT_WALK_INFO;
/* Info used by TBD */
typedef struct acpi_device_walk_info
{
UINT16 DeviceCount;
UINT16 Num_STA;
UINT16 Num_INI;
UINT16 Num_HID;
UINT16 Num_PCI;
ACPI_TABLE_DESC *TableDesc;
} ACPI_DEVICE_WALK_INFO;
/* TBD: [Restructure] Merge with struct above */
@ -762,16 +742,23 @@ typedef struct AcpiWalkInfo
****************************************************************************/
/* 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
#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
#define MAX_CX_STATE_LATENCY 0xFFFFFFFF
#define MAX_CX_STATES 4
/*
* The #define's and enum below establish an abstract way of identifying what
@ -779,17 +766,17 @@ typedef struct AcpiWalkInfo
* values as they are used in switch statements and offset calculations.
*/
#define REGISTER_BLOCK_MASK 0xFF00
#define BIT_IN_REGISTER_MASK 0x00FF
#define PM1_EVT 0x0100
#define PM1_CONTROL 0x0200
#define PM2_CONTROL 0x0300
#define PM_TIMER 0x0400
#define PROCESSOR_BLOCK 0x0500
#define GPE0_STS_BLOCK 0x0600
#define GPE0_EN_BLOCK 0x0700
#define GPE1_STS_BLOCK 0x0800
#define GPE1_EN_BLOCK 0x0900
#define REGISTER_BLOCK_MASK 0xFF00
#define BIT_IN_REGISTER_MASK 0x00FF
#define PM1_EVT 0x0100
#define PM1_CONTROL 0x0200
#define PM2_CONTROL 0x0300
#define PM_TIMER 0x0400
#define PROCESSOR_BLOCK 0x0500
#define GPE0_STS_BLOCK 0x0600
#define GPE0_EN_BLOCK 0x0700
#define GPE1_STS_BLOCK 0x0800
#define GPE1_EN_BLOCK 0x0900
enum
{
@ -940,8 +927,8 @@ typedef struct
union
{
UINT32 Number;
INT8 *StringPtr;
INT8 Buffer[9];
NATIVE_CHAR *StringPtr;
NATIVE_CHAR Buffer[9];
} Data;
} DEVICE_ID;
@ -970,7 +957,7 @@ typedef struct AllocationInfo
UINT32 Size;
UINT32 Component;
UINT32 Line;
INT8 Module[MAX_MODULE_NAME];
NATIVE_CHAR Module[MAX_MODULE_NAME];
UINT8 AllocType;
} ALLOCATION_INFO;