diff --git a/source/include/acglobal.h b/source/include/acglobal.h index 6282ffaf3..82eae49c9 100644 --- a/source/include/acglobal.h +++ b/source/include/acglobal.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acglobal.h - Declarations for global variables - * $Revision: 1.100 $ + * $Revision: 1.101 $ * *****************************************************************************/ @@ -293,7 +293,7 @@ ACPI_EXTERN ACPI_WALK_LIST *AcpiGbl_CurrentWalkList; /* * Table of Address Space handlers */ -ACPI_EXTERN ACPI_ADDRESS_SPACE_INFO AcpiGbl_AddressSpaces[ACPI_NUM_ADDRESS_SPACES]; +ACPI_EXTERN ACPI_ADR_SPACE_INFO AcpiGbl_AddressSpaces[ACPI_NUM_ADDRESS_SPACES]; /* Control method single step flag */ @@ -325,7 +325,7 @@ extern UINT32 AcpiHwActiveCxState; * ****************************************************************************/ -ACPI_EXTERN ACPI_FIXED_EVENT_INFO AcpiGbl_FixedEventHandlers[NUM_FIXED_EVENTS]; +ACPI_EXTERN ACPI_FIXED_EVENT_INFO AcpiGbl_FixedEventHandlers[ACPI_NUM_FIXED_EVENTS]; ACPI_EXTERN ACPI_HANDLE AcpiGbl_GpeObjHandle; ACPI_EXTERN UINT32 AcpiGbl_GpeRegisterCount; @@ -340,12 +340,12 @@ ACPI_EXTERN ACPI_GPE_LEVEL_INFO *AcpiGbl_GpeInfo; * This table is needed because the GPE numbers supported by block 1 do not * have to be contiguous with the GPE numbers supported by block 0. */ -ACPI_EXTERN UINT8 AcpiGbl_GpeValid [NUM_GPE]; +ACPI_EXTERN UINT8 AcpiGbl_GpeValid [ACPI_NUM_GPE]; /* AcpiEvent counter for debug only */ #ifdef ACPI_DEBUG -ACPI_EXTERN UINT32 AcpiGbl_EventCount[NUM_FIXED_EVENTS]; +ACPI_EXTERN UINT32 AcpiGbl_EventCount[ACPI_NUM_FIXED_EVENTS]; #endif diff --git a/source/include/acinterp.h b/source/include/acinterp.h index 763fa98c9..8fe0816cc 100644 --- a/source/include/acinterp.h +++ b/source/include/acinterp.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acinterp.h - Interpreter subcomponent prototypes and defines - * $Revision: 1.97 $ + * $Revision: 1.100 $ * *****************************************************************************/ @@ -181,7 +181,7 @@ AcpiAmlConvertToString ( ACPI_STATUS AcpiAmlConvertToTargetType ( - OBJECT_TYPE_INTERNAL DestinationType, + ACPI_OBJECT_TYPE8 DestinationType, ACPI_OPERAND_OBJECT **ObjDesc, ACPI_WALK_STATE *WalkState); @@ -191,7 +191,7 @@ AcpiAmlConvertToTargetType ( */ ACPI_STATUS -AcpiAmlReadField ( +AcpiAmlExtractFromField ( ACPI_OPERAND_OBJECT *ObjDesc, void *Buffer, UINT32 BufferLength, @@ -201,7 +201,7 @@ AcpiAmlReadField ( UINT32 ByteGranularity); ACPI_STATUS -AcpiAmlWriteField ( +AcpiAmlInsertIntoField ( ACPI_OPERAND_OBJECT *ObjDesc, void *Buffer, UINT32 BufferLength, @@ -217,25 +217,65 @@ AcpiAmlSetupField ( UINT32 FieldBitWidth); ACPI_STATUS -AcpiAmlReadFieldData ( +AcpiAmlReadFieldDatum ( ACPI_OPERAND_OBJECT *ObjDesc, UINT32 FieldByteOffset, UINT32 FieldBitWidth, UINT32 *Value); ACPI_STATUS -AcpiAmlAccessNamedField ( +AcpiAmlCommonAccessField ( UINT32 Mode, - ACPI_NAMESPACE_NODE *FieldNode, + ACPI_OPERAND_OBJECT *ObjDesc, void *Buffer, - UINT32 Length); + UINT32 BufferLength); + + +ACPI_STATUS +AcpiAmlAccessIndexField ( + UINT32 Mode, + ACPI_OPERAND_OBJECT *ObjDesc, + void *Buffer, + UINT32 BufferLength); + +ACPI_STATUS +AcpiAmlAccessBankField ( + UINT32 Mode, + ACPI_OPERAND_OBJECT *ObjDesc, + void *Buffer, + UINT32 BufferLength); + +ACPI_STATUS +AcpiAmlAccessRegionField ( + UINT32 Mode, + ACPI_OPERAND_OBJECT *ObjDesc, + void *Buffer, + UINT32 BufferLength); + + +ACPI_STATUS +AcpiAmlAccessBufferField ( + UINT32 Mode, + ACPI_OPERAND_OBJECT *ObjDesc, + void *Buffer, + UINT32 BufferLength); + +ACPI_STATUS +AcpiAmlReadDataFromField ( + ACPI_OPERAND_OBJECT *ObjDesc, + ACPI_OPERAND_OBJECT **RetBufferDesc); + +ACPI_STATUS +AcpiAmlWriteDataToField ( + ACPI_OPERAND_OBJECT *SourceDesc, + ACPI_OPERAND_OBJECT *ObjDesc); /* * ammisc - ACPI AML (p-code) execution - specific opcodes */ ACPI_STATUS -AcpiAmlExecCreateField ( +AcpiAmlCreateBufferField ( UINT8 *AmlPtr, UINT32 AmlLength, ACPI_NAMESPACE_NODE *Node, @@ -326,11 +366,17 @@ AcpiAmlUnlinkMutex ( */ ACPI_STATUS -AcpiAmlPrepDefFieldValue ( +AcpiAmlPrepCommonFieldObject ( + ACPI_OPERAND_OBJECT *ObjDesc, + UINT8 FieldFlags, + UINT32 FieldPosition, + UINT32 FieldLength); + +ACPI_STATUS +AcpiAmlPrepRegionFieldValue ( ACPI_NAMESPACE_NODE *Node, ACPI_HANDLE Region, UINT8 FieldFlags, - UINT8 FieldAttribute, UINT32 FieldPosition, UINT32 FieldLength); @@ -341,17 +387,15 @@ AcpiAmlPrepBankFieldValue ( ACPI_NAMESPACE_NODE *BankRegisterNode, UINT32 BankVal, UINT8 FieldFlags, - UINT8 FieldAttribute, UINT32 FieldPosition, UINT32 FieldLength); ACPI_STATUS AcpiAmlPrepIndexFieldValue ( ACPI_NAMESPACE_NODE *Node, - ACPI_HANDLE IndexReg, - ACPI_HANDLE DataReg, + ACPI_NAMESPACE_NODE *IndexReg, + ACPI_NAMESPACE_NODE *DataReg, UINT8 FieldFlags, - UINT8 FieldAttribute, UINT32 FieldPosition, UINT32 FieldLength); @@ -471,7 +515,7 @@ AcpiAmlResolveObjectToValue ( ACPI_WALK_STATE *WalkState); ACPI_STATUS -AcpiAmlGetFieldUnitValue ( +AcpiAmlGetBufferFieldValue ( ACPI_OPERAND_OBJECT *FieldDesc, ACPI_OPERAND_OBJECT *ResultDesc); @@ -533,7 +577,7 @@ AcpiAmlExecNameSegment ( ACPI_STATUS AcpiAmlGetNameString ( - OBJECT_TYPE_INTERNAL DataType, + ACPI_OBJECT_TYPE8 DataType, UINT8 *InAmlAddress, NATIVE_CHAR **OutNameString, UINT32 *OutNameLength); @@ -580,13 +624,13 @@ AcpiAmlStoreObjectToObject ( ACPI_STATUS AcpiAmlResolveObject ( ACPI_OPERAND_OBJECT **SourceDescPtr, - OBJECT_TYPE_INTERNAL TargetType, + ACPI_OBJECT_TYPE8 TargetType, ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiAmlStoreObject ( ACPI_OPERAND_OBJECT *SourceDesc, - OBJECT_TYPE_INTERNAL TargetType, + ACPI_OBJECT_TYPE8 TargetType, ACPI_OPERAND_OBJECT **TargetDescPtr, ACPI_WALK_STATE *WalkState); @@ -621,7 +665,7 @@ AcpiAmlCopyDataToNamedField ( ACPI_NAMESPACE_NODE *Node); ACPI_STATUS -AcpiAmlCopyIntegerToFieldUnit ( +AcpiAmlCopyIntegerToBufferField ( ACPI_OPERAND_OBJECT *SourceDesc, ACPI_OPERAND_OBJECT *TargetDesc); diff --git a/source/include/aclocal.h b/source/include/aclocal.h index d07f8b145..2f43b1a0b 100644 --- a/source/include/aclocal.h +++ b/source/include/aclocal.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: aclocal.h - Internal data types used across the ACPI subsystem - * $Revision: 1.85 $ + * $Revision: 1.116 $ * *****************************************************************************/ @@ -9,8 +9,8 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999, Intel Corp. All rights - * reserved. + * Some or all of this work - Copyright (c) 1999, 2000, 2001, Intel Corp. + * All rights reserved. * * 2. License * @@ -118,20 +118,21 @@ #define __ACLOCAL_H__ -#define WAIT_FOREVER ((UINT32) -1) +#define WAIT_FOREVER ((UINT32) -1) -typedef void* ACPI_MUTEX; -typedef UINT32 ACPI_MUTEX_HANDLE; +typedef void* ACPI_MUTEX; +typedef UINT32 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 +#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 + /***************************************************************************** @@ -144,47 +145,51 @@ typedef UINT32 ACPI_MUTEX_HANDLE; /* * Predefined handles for the mutex objects used within the subsystem * All mutex objects are automatically created by AcpiCmMutexInitialize. + * + * 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 AcpiGbl_MutexNames table also! */ -#define ACPI_MTX_HARDWARE 0 -#define ACPI_MTX_MEMORY 1 -#define ACPI_MTX_CACHES 2 -#define ACPI_MTX_TABLES 3 -#define ACPI_MTX_PARSER 4 -#define ACPI_MTX_DISPATCHER 5 -#define ACPI_MTX_INTERPRETER 6 -#define ACPI_MTX_EXECUTE 7 -#define ACPI_MTX_NAMESPACE 8 -#define ACPI_MTX_EVENTS 9 -#define ACPI_MTX_OP_REGIONS 10 -#define ACPI_MTX_DEBUG_CMD_READY 11 -#define ACPI_MTX_DEBUG_CMD_COMPLETE 12 +#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 +#define MAX_MTX 12 +#define NUM_MTX MAX_MTX+1 -#ifdef ACPI_DEBUG +#if defined(ACPI_DEBUG) || defined(ENABLE_DEBUGGER) #ifdef DEFINE_ACPI_GLOBALS /* Names for the mutexes used in the subsystem */ static NATIVE_CHAR *AcpiGbl_MutexNames[] = { - "ACPI_MTX_Hardware", - "ACPI_MTX_Memory", - "ACPI_MTX_Caches", - "ACPI_MTX_Tables", + "ACPI_MTX_Execute", + "ACPI_MTX_Interpreter", "ACPI_MTX_Parser", "ACPI_MTX_Dispatcher", - "ACPI_MTX_Interpreter", - "ACPI_MTX_Execute", + "ACPI_MTX_Tables", + "ACPI_MTX_OpRegions", "ACPI_MTX_Namespace", "ACPI_MTX_Events", - "ACPI_MTX_OpRegions", + "ACPI_MTX_Hardware", + "ACPI_MTX_Caches", + "ACPI_MTX_Memory", + "ACPI_MTX_DebugCmdComplete", "ACPI_MTX_DebugCmdReady", - "ACPI_MTX_DebugCmdComplete" }; #endif @@ -197,26 +202,32 @@ typedef struct AcpiMutexInfo { ACPI_MUTEX Mutex; UINT32 UseCount; - BOOLEAN Locked; + UINT32 OwnerId; } ACPI_MUTEX_INFO; +/* This owner ID means that the mutex is not in use (unlocked) */ + +#define ACPI_MUTEX_NOT_ACQUIRED (UINT32) (-1) + /* Lock flag parameter for various interfaces */ -#define ACPI_MTX_DO_NOT_LOCK 0 -#define ACPI_MTX_LOCK 1 +#define ACPI_MTX_DO_NOT_LOCK 0 +#define ACPI_MTX_LOCK 1 -typedef UINT16 ACPI_OWNER_ID; -#define OWNER_TYPE_TABLE 0x0 -#define OWNER_TYPE_METHOD 0x1 -#define FIRST_METHOD_ID 0x0000 -#define FIRST_TABLE_ID 0x8000 +typedef UINT16 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 +#define TABLE_ID_DSDT (ACPI_OWNER_ID) 0x8000 + + /***************************************************************************** * @@ -266,9 +277,13 @@ typedef struct acpi_node /* Node flags */ -#define ANOBJ_AML_ATTACHMENT 0x1 -#define ANOBJ_END_OF_PEER_LIST 0x2 -#define ANOBJ_DATA_WIDTH_32 0x4 /* Parent table is 64-bits */ +#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 /* @@ -312,19 +327,23 @@ typedef struct /* * Predefined Namespace items */ -#define ACPI_MAX_ADDRESS_SPACE 255 -#define ACPI_NUM_ADDRESS_SPACES 256 - - typedef struct { NATIVE_CHAR *Name; - ACPI_OBJECT_TYPE Type; + 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 + + + /***************************************************************************** * * Event typedefs and structs @@ -334,19 +353,19 @@ typedef struct /* 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 +#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 +#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 /* @@ -355,10 +374,10 @@ typedef struct typedef struct { - ADDRESS_SPACE_HANDLER Handler; + ACPI_ADR_SPACE_HANDLER Handler; void *Context; -} ACPI_ADDRESS_SPACE_INFO; +} ACPI_ADR_SPACE_INFO; /* Values and addresses of the GPE registers (both banks) */ @@ -374,8 +393,8 @@ typedef struct } ACPI_GPE_REGISTERS; -#define ACPI_GPE_LEVEL_TRIGGERED 1 -#define ACPI_GPE_EDGE_TRIGGERED 2 +#define ACPI_GPE_LEVEL_TRIGGERED 1 +#define ACPI_GPE_EDGE_TRIGGERED 2 /* Information about each particular GPE level */ @@ -385,7 +404,7 @@ typedef struct UINT8 Type; /* Level or Edge */ ACPI_HANDLE MethodHandle; /* Method handle for direct (fast) execution */ - GPE_HANDLER Handler; /* Address of handler, if any */ + ACPI_GPE_HANDLER Handler; /* Address of handler, if any */ void *Context; /* Context to be passed to handler */ } ACPI_GPE_LEVEL_INFO; @@ -395,7 +414,7 @@ typedef struct typedef struct { - FIXED_EVENT_HANDLER Handler; /* Address of handler. */ + ACPI_EVENT_HANDLER Handler; /* Address of handler. */ void *Context; /* Context to be passed to handler */ } ACPI_FIXED_EVENT_INFO; @@ -419,16 +438,18 @@ typedef struct ****************************************************************************/ -#define CONTROL_NORMAL 0xC0 -#define CONTROL_CONDITIONAL_EXECUTING 0xC1 -#define CONTROL_PREDICATE_EXECUTING 0xC2 -#define CONTROL_PREDICATE_FALSE 0xC3 -#define CONTROL_PREDICATE_TRUE 0xC4 +#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 declaration */ +/* Forward declarations */ struct acpi_walk_state; -struct acpi_parse_obj ; +struct acpi_walk_list; +struct acpi_parse_obj; +struct acpi_obj_mutex; #define ACPI_STATE_COMMON /* Two 32-bit fields and a pointer */\ @@ -455,6 +476,23 @@ typedef struct acpi_update_state } ACPI_UPDATE_STATE; + +/* + * Pkg state - used to traverse nested package structures + */ +typedef struct acpi_pkg_state +{ + ACPI_STATE_COMMON + union acpi_operand_obj *SourceObject; + union acpi_operand_obj *DestObject; + struct acpi_walk_state *WalkState; + void *ThisTargetObj; + UINT32 NumPackages; + UINT16 Index; + +} ACPI_PKG_STATE; + + /* * Control state - one per if/else and while constructs. * Allows nesting of these constructs @@ -471,7 +509,6 @@ typedef struct acpi_control_state /* * Scope state - current scope during namespace lookups */ - typedef struct acpi_scope_state { ACPI_STATE_COMMON @@ -492,6 +529,35 @@ typedef struct acpi_pscope_state } 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 *ObjDesc [OBJ_NUM_OPERANDS]; + UINT8 NumResults; + UINT8 LastInsert; + +} 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 *HandlerObj; + +} ACPI_NOTIFY_INFO; + + +/* Generic state is union of structs above */ + typedef union acpi_gen_state { ACPI_COMMON_STATE Common; @@ -499,6 +565,9 @@ typedef union acpi_gen_state ACPI_UPDATE_STATE Update; ACPI_SCOPE_STATE Scope; ACPI_PSCOPE_STATE ParseScope; + ACPI_PKG_STATE Pkg; + ACPI_RESULT_VALUES Results; + ACPI_NOTIFY_INFO Notify; } ACPI_GENERIC_STATE; @@ -522,19 +591,18 @@ ACPI_STATUS (*ACPI_PARSE_UPWARDS) ( * ****************************************************************************/ +#define ACPI_OP_CLASS_MASK 0x1F +#define ACPI_OP_ARGS_MASK 0x20 +#define ACPI_OP_TYPE_MASK 0xC0 -#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_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) +#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) /* @@ -546,8 +614,9 @@ typedef struct acpi_opcode_info UINT32 ParseArgs; /* Grammar/Parse time arguments */ UINT32 RuntimeArgs; /* Interpret time arguments */ - DEBUG_ONLY_MEMBERS ( - NATIVE_CHAR *Name) /* op name (debug only) */ +#ifdef _OPCODE_NAMES + NATIVE_CHAR *Name; /* op name (debug only) */ +#endif } ACPI_OPCODE_INFO; @@ -574,7 +643,7 @@ typedef union acpi_parse_val DEBUG_ONLY_MEMBERS (\ NATIVE_CHAR OpName[16]) /* op name (debug only) */\ /* NON-DEBUG members below: */\ - ACPI_NAMESPACE_NODE *Node;/* for use by interpreter */\ + ACPI_NAMESPACE_NODE *Node; /* for use by interpreter */\ ACPI_PARSE_VALUE Value; /* Value or args associated with the opcode */\ @@ -621,132 +690,6 @@ typedef struct acpi_parse_state } ACPI_PARSE_STATE; -/***************************************************************************** - * - * Tree walking typedefs and structs - * - ****************************************************************************/ - - -/* - * Walk state - current state of a parse tree walk. Used for both a leisurely stroll through - * the tree (for whatever reason), and for control method execution. - */ - -#define NEXT_OP_DOWNWARD 1 -#define NEXT_OP_UPWARD 2 - -#define WALK_NON_METHOD 0 -#define WALK_METHOD 1 -#define WALK_METHOD_RESTART 2 - -typedef struct acpi_walk_state -{ - UINT8 DataType; /* To differentiate various internal objs */\ - ACPI_OWNER_ID OwnerId; /* Owner of objects created during the walk */ - BOOLEAN LastPredicate; /* Result of last predicate */ - UINT8 NextOpInfo; /* Info about NextOp */ - UINT8 NumOperands; /* Stack pointer for Operands[] array */ - UINT8 NumResults; /* Stack pointer for Results[] array */ - UINT8 CurrentResult; /* */ - - struct acpi_walk_state *Next; /* Next WalkState in list */ - ACPI_PARSE_OBJECT *Origin; /* Start of walk [Obsolete] */ - -/* TBD: Obsolete with removal of WALK procedure ? */ - 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) */ - ACPI_GENERIC_STATE *ScopeInfo; /* Stack of nested scopes */ - ACPI_PARSE_STATE *ParserState; /* Current state of parser */ - UINT8 *AmlLastWhile; - ACPI_PARSE_DOWNWARDS DescendingCallback; - ACPI_PARSE_UPWARDS AscendingCallback; - - 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; - UINT32 PrevArgTypes; - - /* Debug support */ - - UINT32 MethodBreakpoint; - - -} ACPI_WALK_STATE; - - -/* - * Walk list - head of a tree of walk states. Multiple walk states are created when there - * are nested control methods executing. - */ -typedef struct acpi_walk_list -{ - - ACPI_WALK_STATE *WalkState; - -} ACPI_WALK_LIST; - - -/* Info used by AcpiPsInitObjects */ - -typedef struct acpi_init_walk_info -{ - UINT16 MethodCount; - UINT16 OpRegionCount; - UINT16 FieldCount; - UINT16 OpRegionInit; - UINT16 FieldInit; - UINT16 ObjectCount; - ACPI_TABLE_DESC *TableDesc; - -} ACPI_INIT_WALK_INFO; - - -/* Info used by TBD */ - -typedef struct acpi_device_walk_info -{ - UINT32 Flags; - 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 */ - -typedef struct acpi_walk_info -{ - UINT32 DebugLevel; - UINT32 OwnerId; - -} ACPI_WALK_INFO; - -typedef struct acpi_get_devices_info -{ - WALK_CALLBACK UserFunction; - void *Context; - NATIVE_CHAR *Hid; - -} ACPI_GET_DEVICES_INFO; - - /***************************************************************************** * * Hardware and PNP @@ -756,20 +699,21 @@ typedef struct acpi_get_devices_info /* PCI */ -#define PCI_ROOT_HID_STRING "PNP0A03" -#define PCI_ROOT_HID_VALUE 0x030AD041 /* EISAID("PNP0A03") */ +#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 @@ -777,92 +721,115 @@ typedef struct acpi_get_devices_info * 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 /* 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 */ -enum -{ - /* PM1 status register ids */ +#define REGISTER_BLOCK_ID(RegId) (RegId & REGISTER_BLOCK_MASK) +#define REGISTER_BIT_ID(RegId) (RegId & BIT_IN_REGISTER_MASK) +#define REGISTER_OFFSET(RegId) (RegId & BYTE_IN_REGISTER_MASK) - TMR_STS = (PM1_EVT | 0x01), - BM_STS, - GBL_STS, - PWRBTN_STS, - SLPBTN_STS, - RTC_STS, - WAK_STS, - - /* PM1 enable register ids */ - - TMR_EN, - /* need to skip 1 enable number since there's no bus master enable register */ - GBL_EN = (PM1_EVT | 0x0A), - PWRBTN_EN, - SLPBTN_EN, - RTC_EN, - - /* PM1 control register ids */ - - SCI_EN = (PM1_CONTROL | 0x01), - BM_RLD, - GBL_RLS, - SLP_TYPE_A, - SLP_TYPE_B, - SLP_EN, - - /* PM2 control register ids */ - - ARB_DIS = (PM2_CONTROL | 0x01), - - /* PM Timer register ids */ - - TMR_VAL = (PM_TIMER | 0x01), - - GPE0_STS = (GPE0_STS_BLOCK | 0x01), - GPE0_EN = (GPE0_EN_BLOCK | 0x01), - - GPE1_STS = (GPE1_STS_BLOCK | 0x01), - GPE1_EN = (GPE0_EN_BLOCK | 0x01), - - /* Last register value is one less than LAST_REG */ - - LAST_REG -}; +/* + * 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) + */ -#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 +/* + * Register Block Id + */ +#define PM1_STS 0x0100 +#define PM1_EN 0x0200 +#define PM1_CONTROL 0x0300 +#define PM1A_CONTROL 0x0400 +#define PM1B_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 -#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) +/* + * Address space bitmasks for mmio or io spaces + */ -#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 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 -#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 +/* + * 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 ARB_DIS_MASK 0x0001 +#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 @@ -871,65 +838,63 @@ enum #define GPE1_EN_MASK -#define ACPI_READ 1 -#define ACPI_WRITE 2 - -#define LOW_BYTE 0x00FF -#define ONE_BYTE 0x08 - -#ifndef SET - #define SET 1 -#endif -#ifndef CLEAR - #define CLEAR 0 -#endif +#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 +/***************************************************************************** + * + * Resource descriptors + * + ****************************************************************************/ -/* 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 +/* ResourceType values */ -/* ACPI only data */ +#define RESOURCE_TYPE_MEMORY_RANGE 0 +#define RESOURCE_TYPE_IO_RANGE 1 +#define RESOURCE_TYPE_BUS_NUMBER_RANGE 2 -#define DWORD_ADDRESS_SPACE 0x87 -#define WORD_ADDRESS_SPACE 0x88 -#define EXTENDED_IRQ 0x89 +/* + * Small resource descriptors + */ +#define RESOURCE_DESC_SMALL_MASK 0x78 +#define RESOURCE_DESC_IRQ_FORMAT 0x22 +#define RESOURCE_DESC_DMA_FORMAT 0x2A +#define RESOURCE_DESC_START_DEPENDENT 0x30 +#define RESOURCE_DESC_END_DEPENDENT 0x38 +#define RESOURCE_DESC_IO_PORT 0x47 +#define RESOURCE_DESC_FIXED_IO_PORT 0x4B +#define RESOURCE_DESC_SMALL_VENDOR 0x70 +#define RESOURCE_DESC_END_TAG 0x79 -/* MUST HAVES */ +/* + * Large resource descriptors + */ +#define RESOURCE_DESC_MEMORY_24 0x81 +#define RESOURCE_DESC_GENERAL_REGISTER 0x82 +#define RESOURCE_DESC_LARGE_VENDOR 0x84 +#define RESOURCE_DESC_MEMORY_32 0x85 +#define RESOURCE_DESC_FIXED_MEMORY_32 0x86 +#define RESOURCE_DESC_DWORD_ADDRESS_SPACE 0x87 +#define RESOURCE_DESC_WORD_ADDRESS_SPACE 0x88 +#define RESOURCE_DESC_EXTENDED_XRUPT 0x89 +#define RESOURCE_DESC_QWORD_ADDRESS_SPACE 0x8A -#define DEVICE_ID_LENGTH 0x09 + +/* String version of device HIDs and UIDs */ + +#define ACPI_DEVICE_ID_LENGTH 0x09 typedef struct { - NATIVE_CHAR Buffer[DEVICE_ID_LENGTH]; + NATIVE_CHAR Buffer[ACPI_DEVICE_ID_LENGTH]; + +} ACPI_DEVICE_ID; + -} DEVICE_ID; /***************************************************************************** @@ -943,22 +908,22 @@ typedef struct #ifdef ACPI_DEBUG -#define MEM_MALLOC 0 -#define MEM_CALLOC 1 -#define MAX_MODULE_NAME 16 +#define MEM_MALLOC 0 +#define MEM_CALLOC 1 +#define MAX_MODULE_NAME 16 -typedef struct AllocationInfo +typedef struct AcpiAllocationInfo { - struct AllocationInfo *Previous; - struct AllocationInfo *Next; - void *Address; - UINT32 Size; - UINT32 Component; - UINT32 Line; - NATIVE_CHAR Module[MAX_MODULE_NAME]; - UINT8 AllocType; + struct AcpiAllocationInfo *Previous; + struct AcpiAllocationInfo *Next; + void *Address; + UINT32 Size; + UINT32 Component; + UINT32 Line; + NATIVE_CHAR Module[MAX_MODULE_NAME]; + UINT8 AllocType; -} ALLOCATION_INFO; +} ACPI_ALLOCATION_INFO; #endif diff --git a/source/include/acmacros.h b/source/include/acmacros.h index 65d3a78ba..ce2957068 100644 --- a/source/include/acmacros.h +++ b/source/include/acmacros.h @@ -1,7 +1,7 @@ - /****************************************************************************** * - * Name: macros.h - C macros for the entire subsystem. + * Name: acmacros.h - C macros for the entire subsystem. + * $Revision: 1.66 $ * *****************************************************************************/ @@ -9,8 +9,8 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999, Intel Corp. All rights - * reserved. + * Some or all of this work - Copyright (c) 1999, 2000, 2001, Intel Corp. + * All rights reserved. * * 2. License * @@ -114,13 +114,21 @@ * *****************************************************************************/ -#ifndef __MACROS_H__ -#define __MACROS_H__ +#ifndef __ACMACROS_H__ +#define __ACMACROS_H__ /* * Data manipulation macros */ +#ifndef LODWORD +#define LODWORD(l) ((UINT32)(UINT64)(l)) +#endif + +#ifndef HIDWORD +#define HIDWORD(l) ((UINT32)((((UINT64)(l)) >> 32) & 0xFFFFFFFF)) +#endif + #ifndef LOWORD #define LOWORD(l) ((UINT16)(NATIVE_UINT)(l)) #endif @@ -154,6 +162,23 @@ #define HI_LIMIT(b) ((UINT8) (((b) & 0x00FF0000) >> 16)) +#ifdef _IA16 +/* + * For 16-bit addresses, we have to assume that the upper 32 bits + * are zero. + */ +#define ACPI_GET_ADDRESS(a) ((a).Lo) +#define ACPI_STORE_ADDRESS(a,b) {(a).Hi=0;(a).Lo=(b);} +#define ACPI_VALID_ADDRESS(a) ((a).Hi | (a).Lo) + +#else +/* + * Full 64-bit address on 32-bit and 64-bit platforms + */ +#define ACPI_GET_ADDRESS(a) (a) +#define ACPI_STORE_ADDRESS(a,b) ((a)=(b)) +#define ACPI_VALID_ADDRESS(a) (a) +#endif /* * Extract a byte of data using a pointer. Any more than a byte and we * get into potential aligment issues -- see the STORE macros below @@ -174,6 +199,7 @@ #define MOVE_UNALIGNED16_TO_16(d,s) *(UINT16*)(d) = *(UINT16*)(s) #define MOVE_UNALIGNED32_TO_32(d,s) *(UINT32*)(d) = *(UINT32*)(s) #define MOVE_UNALIGNED16_TO_32(d,s) *(UINT32*)(d) = *(UINT16*)(s) +#define MOVE_UNALIGNED64_TO_64(d,s) *(UINT64*)(d) = *(UINT64*)(s) #else /* @@ -182,16 +208,25 @@ * the destination (or both) is/are unaligned. */ -#define MOVE_UNALIGNED16_TO_16(d,s) {((char *)(d))[0] = ((char *)(s))[0];\ - ((char *)(d))[1] = ((char *)(s))[1];} +#define MOVE_UNALIGNED16_TO_16(d,s) {((UINT8 *)(d))[0] = ((UINT8 *)(s))[0];\ + ((UINT8 *)(d))[1] = ((UINT8 *)(s))[1];} -#define MOVE_UNALIGNED32_TO_32(d,s) {((char *)(d))[0] = ((char *)(s))[0];\ - ((char *)(d))[1] = ((char *)(s))[1];\ - ((char *)(d))[2] = ((char *)(s))[2];\ - ((char *)(d))[3] = ((char *)(s))[3];} +#define MOVE_UNALIGNED32_TO_32(d,s) {((UINT8 *)(d))[0] = ((UINT8 *)(s))[0];\ + ((UINT8 *)(d))[1] = ((UINT8 *)(s))[1];\ + ((UINT8 *)(d))[2] = ((UINT8 *)(s))[2];\ + ((UINT8 *)(d))[3] = ((UINT8 *)(s))[3];} #define MOVE_UNALIGNED16_TO_32(d,s) {(*(UINT32*)(d)) = 0; MOVE_UNALIGNED16_TO_16(d,s);} +#define MOVE_UNALIGNED64_TO_64(d,s) {((UINT8 *)(d))[0] = ((UINT8 *)(s))[0];\ + ((UINT8 *)(d))[1] = ((UINT8 *)(s))[1];\ + ((UINT8 *)(d))[2] = ((UINT8 *)(s))[2];\ + ((UINT8 *)(d))[3] = ((UINT8 *)(s))[3];\ + ((UINT8 *)(d))[4] = ((UINT8 *)(s))[4];\ + ((UINT8 *)(d))[5] = ((UINT8 *)(s))[5];\ + ((UINT8 *)(d))[6] = ((UINT8 *)(s))[6];\ + ((UINT8 *)(d))[7] = ((UINT8 *)(s))[7];} + #endif @@ -199,9 +234,9 @@ * Fast power-of-two math macros for non-optimized compilers */ -#define _DIV(value,PowerOf2) ((value) >> (PowerOf2)) -#define _MUL(value,PowerOf2) ((value) << (PowerOf2)) -#define _MOD(value,Divisor) ((value) & ((Divisor) -1)) +#define _DIV(value,PowerOf2) ((UINT32) ((value) >> (PowerOf2))) +#define _MUL(value,PowerOf2) ((UINT32) ((value) << (PowerOf2))) +#define _MOD(value,Divisor) ((UINT32) ((value) & ((Divisor) -1))) #define DIV_2(a) _DIV(a,1) #define MUL_2(a) _MUL(a,1) @@ -219,6 +254,11 @@ #define MUL_16(a) _MUL(a,4) #define MOD_16(a) _MOD(a,16) +/* + * Divide and Modulo + */ +#define ACPI_DIVIDE(n,d) ((n) / (d)) +#define ACPI_MODULO(n,d) ((n) % (d)) /* * Rounding macros (Power of two boundaries only) @@ -228,32 +268,62 @@ #define ROUND_UP(value,boundary) (((value) + ((boundary)-1)) & (~((boundary)-1))) #define ROUND_DOWN_TO_32_BITS(a) ROUND_DOWN(a,4) +#define ROUND_DOWN_TO_64_BITS(a) ROUND_DOWN(a,8) #define ROUND_DOWN_TO_NATIVE_WORD(a) ROUND_DOWN(a,ALIGNED_ADDRESS_BOUNDARY) #define ROUND_UP_TO_32BITS(a) ROUND_UP(a,4) +#define ROUND_UP_TO_64BITS(a) ROUND_UP(a,8) #define ROUND_UP_TO_NATIVE_WORD(a) ROUND_UP(a,ALIGNED_ADDRESS_BOUNDARY) +#define ROUND_PTR_UP_TO_4(a,b) ((b *)(((NATIVE_UINT)(a) + 3) & ~3)) +#define ROUND_PTR_UP_TO_8(a,b) ((b *)(((NATIVE_UINT)(a) + 7) & ~7)) + +#define ROUND_BITS_UP_TO_BYTES(a) DIV_8((a) + 7) + +#define ROUND_UP_TO_1K(a) (((a) + 1023) >> 10) #ifdef DEBUG_ASSERT #undef DEBUG_ASSERT #endif +/* Macros for GAS addressing */ + +#define ACPI_PCI_DEVICE_MASK (UINT64) 0x0000FFFF00000000 +#define ACPI_PCI_FUNCTION_MASK (UINT64) 0x00000000FFFF0000 +#define ACPI_PCI_REGISTER_MASK (UINT64) 0x000000000000FFFF + +#define ACPI_PCI_FUNCTION(a) (UINT32) ((((a) & ACPI_PCI_FUNCTION_MASK) >> 16)) +#define ACPI_PCI_DEVICE(a) (UINT32) ((((a) & ACPI_PCI_DEVICE_MASK) >> 32)) + +#ifndef _IA16 +#define ACPI_PCI_REGISTER(a) (UINT32) (((a) & ACPI_PCI_REGISTER_MASK)) +#define ACPI_PCI_DEVFUN(a) (UINT32) ((ACPI_PCI_DEVICE(a) << 16) | ACPI_PCI_FUNCTION(a)) + +#else +#define ACPI_PCI_REGISTER(a) (UINT32) (((a) & 0x0000FFFF)) +#define ACPI_PCI_DEVFUN(a) (UINT32) ((((a) & 0xFFFF0000) >> 16)) + +#endif + /* - * An ACPI_HANDLE (which is actually an ACPI_NAMED_OBJECT*) can appear in some contexts, - * such as on apObjStack, where a pointer to an ACPI_OBJECT_INTERNAL can also + * An ACPI_HANDLE (which is actually an ACPI_NAMESPACE_NODE *) can appear in some contexts, + * such as on apObjStack, where a pointer to an ACPI_OPERAND_OBJECT can also * appear. This macro is used to distinguish them. * * The DataType field is the first field in both structures. */ -#define VALID_DESCRIPTOR_TYPE(d,t) (((ACPI_NAMED_OBJECT*)d)->DataType == t) +#define VALID_DESCRIPTOR_TYPE(d,t) (((ACPI_NAMESPACE_NODE *)d)->DataType == t) /* Macro to test the object type */ -#define IS_THIS_OBJECT_TYPE(d,t) (((ACPI_OBJECT_INTERNAL *)d)->Common.Type == (UINT8)t) +#define IS_THIS_OBJECT_TYPE(d,t) (((ACPI_OPERAND_OBJECT *)d)->Common.Type == (UINT8)t) +/* Macro to check the table flags for SINGLE or MULTIPLE tables are allowed */ + +#define IS_SINGLE_TABLE(x) (((x) & 0x01) == ACPI_TABLE_SINGLE ? 1 : 0) /* * Macro to check if a pointer is within an ACPI table. @@ -277,9 +347,9 @@ */ #ifdef ACPI_DEBUG -#define OP_INFO_ENTRY(Opcode,Flags,Name,PArgs,IArgs) {Opcode,Flags,PArgs,IArgs,Name} +#define OP_INFO_ENTRY(Flags,Name,PArgs,IArgs) {Flags,PArgs,IArgs,Name} #else -#define OP_INFO_ENTRY(Opcode,Flags,Name,PArgs,IArgs) {Opcode,Flags,PArgs,IArgs} +#define OP_INFO_ENTRY(Flags,Name,PArgs,IArgs) {Flags,PArgs,IArgs} #endif #define ARG_TYPE_WIDTH 5 @@ -304,14 +374,39 @@ #define ARGP_LIST5(a,b,c,d,e) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d)|ARG_5(e)) #define ARGP_LIST6(a,b,c,d,e,f) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d)|ARG_5(e)|ARG_6(f)) -#define GET_CURRENT_ARG_TYPE(List) (List & 0x1F) -#define INCREMENT_ARG_LIST(List) (List >>= ARG_TYPE_WIDTH) +#define GET_CURRENT_ARG_TYPE(List) (List & ((UINT32) 0x1F)) +#define INCREMENT_ARG_LIST(List) (List >>= ((UINT32) ARG_TYPE_WIDTH)) + + + + +/* + * Build a GAS structure from earlier ACPI table entries (V1.0 and 0.71 extensions) + * + * 1) Address space + * 2) Length in bytes -- convert to length in bits + * 3) Bit offset is zero + * 4) Reserved field is zero + * 5) Expand address to 64 bits + */ +#define ASL_BUILD_GAS_FROM_ENTRY(a,b,c,d) {a.AddressSpaceId = (UINT8) d;\ + a.RegisterBitWidth = (UINT8) MUL_8 (b);\ + a.RegisterBitOffset = 0;\ + a.Reserved = 0;\ + ACPI_STORE_ADDRESS (a.Address,c);} + +/* ACPI V1.0 entries -- address space is always I/O */ + +#define ASL_BUILD_GAS_FROM_V1_ENTRY(a,b,c) ASL_BUILD_GAS_FROM_ENTRY(a,b,c,ACPI_ADR_SPACE_SYSTEM_IO) + /* * Reporting macros that are never compiled out */ +#define PARAM_LIST(pl) pl + /* * Error reporting. These versions add callers module and line#. Since * _THIS_MODULE gets compiled out when ACPI_DEBUG isn't defined, only @@ -320,29 +415,36 @@ #ifdef ACPI_DEBUG -#define REPORT_INFO(a) _ReportInfo(_THIS_MODULE,__LINE__,_COMPONENT,a) -#define REPORT_ERROR(a) _ReportError(_THIS_MODULE,__LINE__,_COMPONENT,a) -#define REPORT_WARNING(a) _ReportWarning(_THIS_MODULE,__LINE__,_COMPONENT,a) -#define REPORT_SUCCESS(a) _ReportSuccess(_THIS_MODULE,__LINE__,_COMPONENT,a) +#define REPORT_INFO(fp) {_ReportInfo(_THIS_MODULE,__LINE__,_COMPONENT); \ + DebugPrintRaw PARAM_LIST(fp);} +#define REPORT_ERROR(fp) {_ReportError(_THIS_MODULE,__LINE__,_COMPONENT); \ + DebugPrintRaw PARAM_LIST(fp);} +#define REPORT_WARNING(fp) {_ReportWarning(_THIS_MODULE,__LINE__,_COMPONENT); \ + DebugPrintRaw PARAM_LIST(fp);} #else -#define REPORT_INFO(a) _ReportInfo("",__LINE__,_COMPONENT,a) -#define REPORT_ERROR(a) _ReportError("",__LINE__,_COMPONENT,a) -#define REPORT_WARNING(a) _ReportWarning("",__LINE__,_COMPONENT,a) -#define REPORT_SUCCESS(a) _ReportSuccess("",__LINE__,_COMPONENT,a) +#define REPORT_INFO(fp) {_ReportInfo("ACPI",__LINE__,_COMPONENT); \ + DebugPrintRaw PARAM_LIST(fp);} +#define REPORT_ERROR(fp) {_ReportError("ACPI",__LINE__,_COMPONENT); \ + DebugPrintRaw PARAM_LIST(fp);} +#define REPORT_WARNING(fp) {_ReportWarning("ACPI",__LINE__,_COMPONENT); \ + DebugPrintRaw PARAM_LIST(fp);} #endif /* Error reporting. These versions pass thru the module and line# */ -#define _REPORT_INFO(a,b,c,d) _ReportInfo(a,b,c,d) -#define _REPORT_ERROR(a,b,c,d) _ReportError(a,b,c,d) -#define _REPORT_WARNING(a,b,c,d) _ReportWarning(a,b,c,d) +#define _REPORT_INFO(a,b,c,fp) {_ReportInfo(a,b,c); \ + DebugPrintRaw PARAM_LIST(fp);} +#define _REPORT_ERROR(a,b,c,fp) {_ReportError(a,b,c); \ + DebugPrintRaw PARAM_LIST(fp);} +#define _REPORT_WARNING(a,b,c,fp) {_ReportWarning(a,b,c); \ + DebugPrintRaw PARAM_LIST(fp);} /* Buffer dump macros */ -#define DUMP_BUFFER(a,b) AcpiCmDumpBuffer((char *)a,b,DB_BYTE_DISPLAY,_COMPONENT) +#define DUMP_BUFFER(a,b) AcpiCmDumpBuffer((UINT8 *)a,b,DB_BYTE_DISPLAY,_COMPONENT) /* * Debug macros that are conditionally compiled @@ -350,7 +452,7 @@ #ifdef ACPI_DEBUG -#define MODULE_NAME(name) static char *_THIS_MODULE = name +#define MODULE_NAME(name) static char *_THIS_MODULE = name; /* * Function entry tracing. @@ -365,7 +467,7 @@ #define FUNCTION_TRACE_U32(a,b) char * _ProcName = a;\ FunctionTraceU32(_THIS_MODULE,__LINE__,_COMPONENT,a,(UINT32)b) #define FUNCTION_TRACE_STR(a,b) char * _ProcName = a;\ - FunctionTraceStr(_THIS_MODULE,__LINE__,_COMPONENT,a,(char *)b) + FunctionTraceStr(_THIS_MODULE,__LINE__,_COMPONENT,a,(NATIVE_CHAR *)b) /* * Function exit tracing. * WARNING: These macros include a return statement. This is usually considered @@ -375,17 +477,19 @@ */ #define return_VOID {FunctionExit(_THIS_MODULE,__LINE__,_COMPONENT,_ProcName);return;} #define return_ACPI_STATUS(s) {FunctionStatusExit(_THIS_MODULE,__LINE__,_COMPONENT,_ProcName,s);return(s);} -#define return_VALUE(s) {FunctionValueExit(_THIS_MODULE,__LINE__,_COMPONENT,_ProcName,(NATIVE_UINT)s);return(s);} -#define return_PTR(s) {FunctionPtrExit(_THIS_MODULE,__LINE__,_COMPONENT,_ProcName,(char *)s);return(s);} +#define return_VALUE(s) {FunctionValueExit(_THIS_MODULE,__LINE__,_COMPONENT,_ProcName,s);return(s);} +#define return_PTR(s) {FunctionPtrExit(_THIS_MODULE,__LINE__,_COMPONENT,_ProcName,(UINT8 *)s);return(s);} /* Conditional execution */ -#define DEBUG_EXEC(a) a; +#define DEBUG_EXEC(a) a #define NORMAL_EXEC(a) #define DEBUG_DEFINE(a) a; #define DEBUG_ONLY_MEMBERS(a) a; +#define _OPCODE_NAMES +#define _VERBOSE_STRUCTURES /* Stack and buffer dumping */ @@ -397,6 +501,7 @@ #define DUMP_ENTRY(a,b) AcpiNsDumpEntry (a,b) #define DUMP_TABLES(a,b) AcpiNsDumpTables(a,b) #define DUMP_PATHNAME(a,b,c,d) AcpiNsDumpPathname(a,b,c,d) +#define DUMP_RESOURCE_LIST(a) AcpiRsDumpResourceList(a) #define BREAK_MSG(a) AcpiOsBreakpoint (a) /* @@ -418,8 +523,6 @@ * */ -#define PARAM_LIST(pl) pl - #define TEST_DEBUG_SWITCH(lvl) if (((lvl) & AcpiDbgLevel) && (_COMPONENT & AcpiDbgLayer)) #define DEBUG_PRINT(lvl,fp) TEST_DEBUG_SWITCH(lvl) {\ @@ -466,6 +569,7 @@ #define DUMP_ENTRY(a,b) #define DUMP_TABLES(a,b) #define DUMP_PATHNAME(a,b,c,d) +#define DUMP_RESOURCE_LIST(a) #define DEBUG_PRINT(l,f) #define DEBUG_PRINT_RAW(l,f) #define BREAK_MSG(a) @@ -480,6 +584,17 @@ #endif +/* + * Some code only gets executed when the debugger is built in. + * Note that this is entirely independent of whether the + * DEBUG_PRINT stuff (set by ACPI_DEBUG) is on, or not. + */ +#ifdef ENABLE_DEBUGGER +#define DEBUGGER_EXEC(a) a +#else +#define DEBUGGER_EXEC(a) +#endif + /* * For 16-bit code, we want to shrink some things even though @@ -487,18 +602,12 @@ */ #ifdef _IA16 #undef DEBUG_ONLY_MEMBERS +#undef _VERBOSE_STRUCTURES #define DEBUG_ONLY_MEMBERS(a) -#undef OP_INFO_ENTRY -#define OP_INFO_ENTRY(Opcode,Flags,Name,PArgs,IArgs) {Opcode,Flags,PArgs,IArgs} #endif -#ifndef ACPI_DEBUG - -#define ADD_OBJECT_NAME(a,b) - -#else - +#ifdef ACPI_DEBUG /* * 1) Set name to blanks @@ -508,7 +617,81 @@ #define ADD_OBJECT_NAME(a,b) MEMSET (a->Common.Name, ' ', sizeof (a->Common.Name));\ STRNCPY (a->Common.Name, AcpiGbl_NsTypeNames[b], sizeof (a->Common.Name)) +#else + +#define ADD_OBJECT_NAME(a,b) + #endif -#endif /* MACROS_H */ + +/* + * Memory allocation tracking (DEBUG ONLY) + */ + +#ifndef ACPI_DEBUG_TRACK_ALLOCATIONS + +#define AcpiCmAddElementToAllocList(a,b,c,d,e,f) +#define AcpiCmDeleteElementFromAllocList(a,b,c,d) +#define AcpiCmDumpCurrentAllocations(a,b) +#define AcpiCmDumpAllocationInfo() + +#define DECREMENT_OBJECT_METRICS(a) +#define INCREMENT_OBJECT_METRICS(a) +#define INITIALIZE_ALLOCATION_METRICS() +#define DECREMENT_NAME_TABLE_METRICS(a) +#define INCREMENT_NAME_TABLE_METRICS(a) + +#else + +#define INITIALIZE_ALLOCATION_METRICS() \ + AcpiGbl_CurrentObjectCount = 0; \ + AcpiGbl_CurrentObjectSize = 0; \ + AcpiGbl_RunningObjectCount = 0; \ + AcpiGbl_RunningObjectSize = 0; \ + AcpiGbl_MaxConcurrentObjectCount = 0; \ + AcpiGbl_MaxConcurrentObjectSize = 0; \ + AcpiGbl_CurrentAllocSize = 0; \ + AcpiGbl_CurrentAllocCount = 0; \ + AcpiGbl_RunningAllocSize = 0; \ + AcpiGbl_RunningAllocCount = 0; \ + AcpiGbl_MaxConcurrentAllocSize = 0; \ + AcpiGbl_MaxConcurrentAllocCount = 0; \ + AcpiGbl_CurrentNodeCount = 0; \ + AcpiGbl_CurrentNodeSize = 0; \ + AcpiGbl_MaxConcurrentNodeCount = 0 + + +#define DECREMENT_OBJECT_METRICS(a) \ + AcpiGbl_CurrentObjectCount--; \ + AcpiGbl_CurrentObjectSize -= a + +#define INCREMENT_OBJECT_METRICS(a) \ + AcpiGbl_CurrentObjectCount++; \ + AcpiGbl_RunningObjectCount++; \ + if (AcpiGbl_MaxConcurrentObjectCount < AcpiGbl_CurrentObjectCount) \ + { \ + AcpiGbl_MaxConcurrentObjectCount = AcpiGbl_CurrentObjectCount; \ + } \ + AcpiGbl_RunningObjectSize += a; \ + AcpiGbl_CurrentObjectSize += a; \ + if (AcpiGbl_MaxConcurrentObjectSize < AcpiGbl_CurrentObjectSize) \ + { \ + AcpiGbl_MaxConcurrentObjectSize = AcpiGbl_CurrentObjectSize; \ + } + +#define DECREMENT_NAME_TABLE_METRICS(a) \ + AcpiGbl_CurrentNodeCount--; \ + AcpiGbl_CurrentNodeSize -= (a) + +#define INCREMENT_NAME_TABLE_METRICS(a) \ + AcpiGbl_CurrentNodeCount++; \ + AcpiGbl_CurrentNodeSize+= (a); \ + if (AcpiGbl_MaxConcurrentNodeCount < AcpiGbl_CurrentNodeCount) \ + { \ + AcpiGbl_MaxConcurrentNodeCount = AcpiGbl_CurrentNodeCount; \ + } +#endif /* ACPI_DEBUG_TRACK_ALLOCATIONS */ + + +#endif /* ACMACROS_H */ diff --git a/source/include/acnamesp.h b/source/include/acnamesp.h index b2dd5e3ac..227d12c7a 100644 --- a/source/include/acnamesp.h +++ b/source/include/acnamesp.h @@ -1,7 +1,7 @@ - /****************************************************************************** * - * Name: namesp.h - Namespace subcomponent prototypes and defines + * Name: acnamesp.h - Namespace subcomponent prototypes and defines + * $Revision: 1.105 $ * *****************************************************************************/ @@ -9,8 +9,8 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999, Intel Corp. All rights - * reserved. + * Some or all of this work - Copyright (c) 1999, 2000, 2001, Intel Corp. + * All rights reserved. * * 2. License * @@ -114,10 +114,8 @@ * *****************************************************************************/ -#ifndef __NAMESPACE_H__ -#define __NAMESPACE_H__ - -#include "actables.h" +#ifndef __ACNAMESP_H__ +#define __ACNAMESP_H__ /* To search the entire name space, pass this as SearchBase */ @@ -149,49 +147,81 @@ #define NS_SEARCH_PARENT 0x01 #define NS_DONT_OPEN_SCOPE 0x02 #define NS_NO_PEER_SEARCH 0x04 +#define NS_ERROR_IF_FOUND 0x08 #define NS_WALK_UNLOCK TRUE #define NS_WALK_NO_UNLOCK FALSE ACPI_STATUS -AcpiNsWalkNamespace ( - OBJECT_TYPE_INTERNAL Type, - ACPI_HANDLE StartObject, - UINT32 MaxDepth, - BOOLEAN UnlockBeforeCallback, - WALK_CALLBACK UserFunction, +AcpiNsLoadNamespace ( + void); + +ACPI_STATUS +AcpiNsInitializeObjects ( + void); + +ACPI_STATUS +AcpiNsInitializeDevices ( + void); + + +/* Namespace init - nsxfinit */ + +ACPI_STATUS +AcpiNsInitOneDevice ( + ACPI_HANDLE ObjHandle, + UINT32 NestingLevel, + void *Context, + void **ReturnValue); + +ACPI_STATUS +AcpiNsInitOneObject ( + ACPI_HANDLE ObjHandle, + UINT32 Level, void *Context, void **ReturnValue); -ACPI_NAMED_OBJECT* +ACPI_STATUS +AcpiNsWalkNamespace ( + ACPI_OBJECT_TYPE8 Type, + ACPI_HANDLE StartObject, + UINT32 MaxDepth, + BOOLEAN UnlockBeforeCallback, + ACPI_WALK_CALLBACK UserFunction, + void *Context, + void **ReturnValue); + + +ACPI_NAMESPACE_NODE * AcpiNsGetNextObject ( - OBJECT_TYPE_INTERNAL Type, - ACPI_NAMED_OBJECT *Parent, - ACPI_NAMED_OBJECT *Child); + ACPI_OBJECT_TYPE8 Type, + ACPI_NAMESPACE_NODE *Parent, + ACPI_NAMESPACE_NODE *Child); ACPI_STATUS AcpiNsDeleteNamespaceByOwner ( UINT16 TableId); -void -AcpiNsFreeTableEntry ( - ACPI_NAMED_OBJECT *Entry); - /* Namespace loading - nsload */ +ACPI_STATUS +AcpiNsOneCompleteParse ( + UINT32 PassNumber, + ACPI_TABLE_DESC *TableDesc); + ACPI_STATUS AcpiNsParseTable ( ACPI_TABLE_DESC *TableDesc, - ACPI_NAME_TABLE *Scope); + ACPI_NAMESPACE_NODE *Scope); ACPI_STATUS AcpiNsLoadTable ( ACPI_TABLE_DESC *TableDesc, - ACPI_NAMED_OBJECT *Entry); + ACPI_NAMESPACE_NODE *Node); ACPI_STATUS AcpiNsLoadTableByType ( @@ -210,33 +240,38 @@ AcpiNsRootInitialize ( ACPI_STATUS AcpiNsLookup ( ACPI_GENERIC_STATE *ScopeInfo, - char *Name, - OBJECT_TYPE_INTERNAL Type, + NATIVE_CHAR *Name, + ACPI_OBJECT_TYPE8 Type, OPERATING_MODE InterpreterMode, UINT32 Flags, ACPI_WALK_STATE *WalkState, - ACPI_NAMED_OBJECT **RetEntry); + ACPI_NAMESPACE_NODE **RetNode); /* - * Table allocation/deallocation - nsalloc + * Named object allocation/deallocation - nsalloc */ -ACPI_NAME_TABLE * -AcpiNsAllocateNameTable ( - UINT32 NumEntries); + +ACPI_NAMESPACE_NODE * +AcpiNsCreateNode ( + UINT32 AcpiName); + +void +AcpiNsDeleteNode ( + ACPI_NAMESPACE_NODE *Node); ACPI_STATUS AcpiNsDeleteNamespaceSubtree ( - ACPI_NAMED_OBJECT *ParentHandle); + ACPI_NAMESPACE_NODE *ParentHandle); void AcpiNsDetachObject ( - ACPI_HANDLE Object); + ACPI_NAMESPACE_NODE *Node); void -AcpiNsDeleteNameTable ( - ACPI_NAME_TABLE *NameTable); +AcpiNsDeleteChildren ( + ACPI_NAMESPACE_NODE *Parent); /* @@ -259,7 +294,7 @@ AcpiNsDeleteSubtree ( void AcpiNsDumpTables ( ACPI_HANDLE SearchBase, - INT32 MaxDepth); + UINT32 MaxDepth); void AcpiNsDumpEntry ( @@ -269,7 +304,7 @@ AcpiNsDumpEntry ( ACPI_STATUS AcpiNsDumpPathname ( ACPI_HANDLE Handle, - char *Msg, + NATIVE_CHAR *Msg, UINT32 Level, UINT32 Component); @@ -279,7 +314,7 @@ AcpiNsDumpRootDevices ( void AcpiNsDumpObjects ( - OBJECT_TYPE_INTERNAL Type, + ACPI_OBJECT_TYPE8 Type, UINT32 MaxDepth, UINT32 OwnderId, ACPI_HANDLE StartHandle); @@ -291,33 +326,33 @@ AcpiNsDumpObjects ( ACPI_STATUS AcpiNsEvaluateByHandle ( - ACPI_NAMED_OBJECT *ObjectNte, - ACPI_OBJECT_INTERNAL **Params, - ACPI_OBJECT_INTERNAL **ReturnObject); + ACPI_NAMESPACE_NODE *PrefixNode, + ACPI_OPERAND_OBJECT **Params, + ACPI_OPERAND_OBJECT **ReturnObject); ACPI_STATUS AcpiNsEvaluateByName ( - char *Pathname, - ACPI_OBJECT_INTERNAL **Params, - ACPI_OBJECT_INTERNAL **ReturnObject); + NATIVE_CHAR *Pathname, + ACPI_OPERAND_OBJECT **Params, + ACPI_OPERAND_OBJECT **ReturnObject); ACPI_STATUS AcpiNsEvaluateRelative ( - ACPI_NAMED_OBJECT *ObjectNte, - char *Pathname, - ACPI_OBJECT_INTERNAL **Params, - ACPI_OBJECT_INTERNAL **ReturnObject); + ACPI_NAMESPACE_NODE *PrefixNode, + NATIVE_CHAR *Pathname, + ACPI_OPERAND_OBJECT **Params, + ACPI_OPERAND_OBJECT **ReturnObject); ACPI_STATUS AcpiNsExecuteControlMethod ( - ACPI_NAMED_OBJECT *MethodEntry, - ACPI_OBJECT_INTERNAL **Params, - ACPI_OBJECT_INTERNAL **ReturnObjDesc); + ACPI_NAMESPACE_NODE *MethodNode, + ACPI_OPERAND_OBJECT **Params, + ACPI_OPERAND_OBJECT **ReturnObjDesc); ACPI_STATUS AcpiNsGetObjectValue ( - ACPI_NAMED_OBJECT *ObjectEntry, - ACPI_OBJECT_INTERNAL **ReturnObjDesc); + ACPI_NAMESPACE_NODE *ObjectNode, + ACPI_OPERAND_OBJECT **ReturnObjDesc); /* @@ -326,26 +361,26 @@ AcpiNsGetObjectValue ( ACPI_NAME AcpiNsFindParentName ( - ACPI_NAMED_OBJECT *EntryToSearch); + ACPI_NAMESPACE_NODE *NodeToSearch); BOOLEAN AcpiNsExistDownstreamSibling ( - ACPI_NAMED_OBJECT *ThisEntry); + ACPI_NAMESPACE_NODE *ThisNode); /* * Scope manipulation - nsscope */ -INT32 +UINT32 AcpiNsOpensScope ( - OBJECT_TYPE_INTERNAL Type); + ACPI_OBJECT_TYPE8 Type); -char * -AcpiNsNameOfScope ( - ACPI_NAME_TABLE *Scope); +NATIVE_CHAR * +AcpiNsGetTablePathname ( + ACPI_NAMESPACE_NODE *Node); -char * +NATIVE_CHAR * AcpiNsNameOfCurrentScope ( ACPI_WALK_STATE *WalkState); @@ -353,68 +388,34 @@ ACPI_STATUS AcpiNsHandleToPathname ( ACPI_HANDLE ObjHandle, UINT32 *BufSize, - char *UserBuffer); + NATIVE_CHAR *UserBuffer); BOOLEAN AcpiNsPatternMatch ( - ACPI_NAMED_OBJECT *ObjEntry, - char *SearchFor); + ACPI_NAMESPACE_NODE *ObjNode, + NATIVE_CHAR *SearchFor); + ACPI_STATUS -AcpiNsNameCompare ( - ACPI_HANDLE ObjHandle, - UINT32 Level, - void *Context, - void **ReturnValue); +AcpiNsGetNode ( + NATIVE_CHAR *Pathname, + ACPI_NAMESPACE_NODE *InPrefixNode, + ACPI_NAMESPACE_NODE **OutNode); -void -AcpiNsLowFindNames ( - ACPI_NAMED_OBJECT *ThisEntry, - char *SearchFor, - INT32 *Count, - ACPI_HANDLE List[], - INT32 MaxDepth); +UINT32 +AcpiNsGetPathnameLength ( + ACPI_NAMESPACE_NODE *Node); -ACPI_HANDLE * -AcpiNsFindNames ( - char *SearchFor, - ACPI_HANDLE SearchBase, - INT32 MaxDepth); - -ACPI_STATUS -AcpiNsGetNamedObject ( - char *Pathname, - ACPI_NAME_TABLE *InScope, - ACPI_NAMED_OBJECT **OutNte); /* * Object management for NTEs - nsobject */ -ACPI_STATUS -AcpiNsAttachMethod ( - ACPI_HANDLE ObjHandle, - UINT8 *PcodeAddr, - UINT32 PcodeLength); - ACPI_STATUS AcpiNsAttachObject ( - ACPI_HANDLE ObjHandle, - ACPI_HANDLE Value, - OBJECT_TYPE_INTERNAL Type); - - -void * -AcpiNsCompareValue ( - ACPI_HANDLE ObjHandle, - UINT32 Level, - void *ObjDesc); - -ACPI_HANDLE -AcpiNsFindAttachedObject ( - ACPI_OBJECT_INTERNAL *ObjDesc, - ACPI_HANDLE SearchBase, - INT32 MaxDepth); + ACPI_NAMESPACE_NODE *Node, + ACPI_OPERAND_OBJECT *Object, + ACPI_OBJECT_TYPE8 Type); /* @@ -425,25 +426,25 @@ ACPI_STATUS AcpiNsSearchAndEnter ( UINT32 EntryName, ACPI_WALK_STATE *WalkState, - ACPI_NAME_TABLE *NameTable, + ACPI_NAMESPACE_NODE *Node, OPERATING_MODE InterpreterMode, - OBJECT_TYPE_INTERNAL Type, + ACPI_OBJECT_TYPE8 Type, UINT32 Flags, - ACPI_NAMED_OBJECT **RetEntry); - -void -AcpiNsInitializeTable ( - ACPI_NAME_TABLE *NewTable, - ACPI_NAME_TABLE *ParentScope, - ACPI_NAMED_OBJECT *ParentEntry); + ACPI_NAMESPACE_NODE **RetNode); ACPI_STATUS -AcpiNsSearchOneScope ( +AcpiNsSearchNode ( UINT32 EntryName, - ACPI_NAME_TABLE *NameTable, - OBJECT_TYPE_INTERNAL Type, - ACPI_NAMED_OBJECT **RetEntry, - NS_SEARCH_DATA *RetInfo); + ACPI_NAMESPACE_NODE *Node, + ACPI_OBJECT_TYPE8 Type, + ACPI_NAMESPACE_NODE **RetNode); + +void +AcpiNsInstallNode ( + ACPI_WALK_STATE *WalkState, + ACPI_NAMESPACE_NODE *ParentNode, /* Parent */ + ACPI_NAMESPACE_NODE *Node, /* New Child*/ + ACPI_OBJECT_TYPE8 Type); /* @@ -452,64 +453,56 @@ AcpiNsSearchOneScope ( BOOLEAN AcpiNsValidRootPrefix ( - char Prefix); + NATIVE_CHAR Prefix); BOOLEAN AcpiNsValidPathSeparator ( - char Sep); + NATIVE_CHAR Sep); -OBJECT_TYPE_INTERNAL +ACPI_OBJECT_TYPE8 AcpiNsGetType ( - ACPI_HANDLE ObjHandle); + ACPI_NAMESPACE_NODE *Node); void * AcpiNsGetAttachedObject ( - ACPI_HANDLE ObjHandle); + ACPI_NAMESPACE_NODE *Node); -INT32 +UINT32 AcpiNsLocal ( - OBJECT_TYPE_INTERNAL Type); + ACPI_OBJECT_TYPE8 Type); ACPI_STATUS AcpiNsInternalizeName ( - char *DottedName, - char **ConvertedName); + NATIVE_CHAR *DottedName, + NATIVE_CHAR **ConvertedName); ACPI_STATUS AcpiNsExternalizeName ( UINT32 InternalNameLength, - char *InternalName, + NATIVE_CHAR *InternalName, UINT32 *ConvertedNameLength, - char **ConvertedName); + NATIVE_CHAR **ConvertedName); -INT32 -IsNsObject ( - ACPI_OBJECT_INTERNAL *pOD); - -INT32 -AcpiNsMarkNS( - void); - -ACPI_NAMED_OBJECT* +ACPI_NAMESPACE_NODE * AcpiNsConvertHandleToEntry ( ACPI_HANDLE Handle); ACPI_HANDLE AcpiNsConvertEntryToHandle( - ACPI_NAMED_OBJECT*Nte); + ACPI_NAMESPACE_NODE *Node); void AcpiNsTerminate ( void); -ACPI_NAMED_OBJECT * -AcpiNsGetParentEntry ( - ACPI_NAMED_OBJECT *ThisEntry); +ACPI_NAMESPACE_NODE * +AcpiNsGetParentObject ( + ACPI_NAMESPACE_NODE *Node); -ACPI_NAMED_OBJECT * -AcpiNsGetNextValidEntry ( - ACPI_NAMED_OBJECT *ThisEntry); +ACPI_NAMESPACE_NODE * +AcpiNsGetNextValidObject ( + ACPI_NAMESPACE_NODE *Node); -#endif /* __NAMESPACE_H__ */ +#endif /* __ACNAMESP_H__ */ diff --git a/source/include/acobject.h b/source/include/acobject.h index 58c384a05..9a753ef91 100644 --- a/source/include/acobject.h +++ b/source/include/acobject.h @@ -1,7 +1,8 @@ /****************************************************************************** * - * Name: acobject.h - Definition of ACPI_OBJECT_INTERNAL (Internal object only) + * Name: acobject.h - Definition of ACPI_OPERAND_OBJECT (Internal object only) + * $Revision: 1.87 $ * *****************************************************************************/ @@ -9,8 +10,8 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999, Intel Corp. All rights - * reserved. + * Some or all of this work - Copyright (c) 1999, 2000, 2001, Intel Corp. + * All rights reserved. * * 2. License * @@ -117,17 +118,14 @@ #ifndef _ACOBJECT_H #define _ACOBJECT_H -#include "actypes.h" -#include "macros.h" -#include "internal.h" /* - * The ACPI_OBJECT_INTERNAL is used to pass AML operands from the dispatcher + * 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 them to be cached and reused. * - * All variants of the ACPI_OBJECT_INTERNAL are defined with the same + * All variants of the ACPI_OPERAND_OBJECT are defined with the same * sequence of field types, with fields that are not used in a particular * variant being named "Reserved". This is not strictly necessary, but * may in some circumstances simplify understanding if these structures @@ -151,32 +149,31 @@ */ -#define ACPI_OBJECT_COMMON_HEADER /* Two 32-bit fields */\ - UINT8 DataType; /* To differentiate various internal objs */\ - UINT8 Type; /* ACPI_OBJECT_TYPE */\ - UINT8 Size; /* Size of entire descriptor */\ - UINT8 Flags;\ - UINT16 ReferenceCount; /* For object deletion management */\ - UINT16 AcpiCmFill2;\ - union AcpiObjInternal *Next; \ +#define ACPI_OBJECT_COMMON_HEADER /* SIZE/ALIGNMENT: 32-bits plus trailing 8-bit flag */\ + UINT8 DataType; /* To differentiate various internal objs */\ + UINT8 Type; /* ACPI_OBJECT_TYPE */\ + UINT16 ReferenceCount; /* For object deletion management */\ + UINT8 Flags; \ /* Defines for flag byte above */ -#define AO_STATIC_ALLOCATION 0x1 +#define AOPOBJ_STATIC_ALLOCATION 0x1 +#define AOPOBJ_DATA_VALID 0x2 +#define AOPOBJ_INITIALIZED 0x4 /* * Common bitfield for the field objects */ -#define ACPI_COMMON_FIELD_INFO /* Three 32-bit values */\ - UINT32 Offset; /* Byte offset within containing object */\ - UINT16 Length; /* # of bits in buffer */ \ - UINT8 Granularity;\ - UINT8 BitOffset; /* Bit offset within min read/write data unit */\ - UINT8 Access; /* AccessType */\ - UINT8 LockRule;\ - UINT8 UpdateRule;\ - UINT8 AccessAttribute; +#define ACPI_COMMON_FIELD_INFO /* SIZE/ALIGNMENT: 24 bits + three 32-bit values */\ + UINT8 Granularity;\ + UINT16 BitLength; /* Length of field in bits */\ + UINT32 ByteOffset; /* Byte offset within containing object */\ + UINT8 BitOffset; /* Bit offset within min read/write data unit (0-63) */\ + UINT8 Access; /* AccessType (ByteAccess, WordAccess, etc*/\ + UINT8 LockRule; /* Global Lock: Must Lock = 1 */\ + UINT8 UpdateRule; /* How neighboring bits are handled */\ + UINT32 Value; /* Value to store into the Bank or Index register */ /****************************************************************************** @@ -189,61 +186,43 @@ typedef struct /* COMMON */ { ACPI_OBJECT_COMMON_HEADER - UCHAR FirstNonCommonByte; } ACPI_OBJECT_COMMON; +typedef struct /* CACHE_LIST */ +{ + ACPI_OBJECT_COMMON_HEADER + union acpi_operand_obj *Next; /* Link for object cache and internal lists*/ + +} ACPI_OBJECT_CACHE_LIST; + + typedef struct /* NUMBER - has value */ { ACPI_OBJECT_COMMON_HEADER - UINT32 Value; - UINT32 Reserved2; - UINT32 Reserved3; - UINT32 Reserved4; + ACPI_INTEGER Value; - void *Reserved_p1; - void *Reserved_p2; - void *Reserved_p3; - void *Reserved_p4; - void *Reserved_p5; - -} ACPI_OBJECT_NUMBER; +} ACPI_OBJECT_INTEGER; -typedef struct /* STRING - has length and pointer */ +typedef struct /* STRING - has length and pointer - Null terminated, ASCII characters only */ { ACPI_OBJECT_COMMON_HEADER - UINT32 Length; /* # of bytes in string, excluding trailing null */ - UINT32 Reserved2; - UINT32 Reserved3; - UINT32 Reserved4; - - char *Pointer; /* String value in AML stream or in allocated space */ - void *Reserved_p2; - void *Reserved_p3; - void *Reserved_p4; - void *Reserved_p5; + UINT32 Length; + NATIVE_CHAR *Pointer; /* String value in AML stream or in allocated space */ } ACPI_OBJECT_STRING; -typedef struct /* BUFFER - has length, sequence, and pointer */ +typedef struct /* BUFFER - has length and pointer - not null terminated */ { ACPI_OBJECT_COMMON_HEADER - UINT32 Length; /* # of bytes in buffer */ - UINT32 Sequence; /* Sequential count of buffers created */ - UINT32 Reserved3; - UINT32 Reserved4; - - UINT8 *Pointer; /* points to the buffer in allocated space */ - void *Reserved_p2; - void *Reserved_p3; - void *Reserved_p4; - void *Reserved_p5; + UINT32 Length; + UINT8 *Pointer; /* points to the buffer in allocated space */ } ACPI_OBJECT_BUFFER; @@ -252,50 +231,22 @@ typedef struct /* PACKAGE - has count, elements, next element */ { ACPI_OBJECT_COMMON_HEADER - UINT32 Count; /* # of elements in package */ - UINT32 Reserved2; - UINT32 Reserved3; - UINT32 Reserved4; + UINT32 Count; /* # of elements in package */ - union AcpiObjInternal **Elements; /* Array of pointers to AcpiObjects */ - union AcpiObjInternal **NextElement; /* used only while initializing */ - void *Reserved_p3; - void *Reserved_p4; - void *Reserved_p5; + union acpi_operand_obj **Elements; /* Array of pointers to AcpiObjects */ + union acpi_operand_obj **NextElement; /* used only while initializing */ } ACPI_OBJECT_PACKAGE; -typedef struct /* FIELD UNIT */ -{ - ACPI_OBJECT_COMMON_HEADER - - ACPI_COMMON_FIELD_INFO - UINT32 Sequence; /* Container's sequence number */ - - union AcpiObjInternal *Container; /* Containing object (Buffer) */ - void *Reserved_p2; - void *Reserved_p3; - void *Reserved_p4; - void *Reserved_p5; - -} ACPI_OBJECT_FIELD_UNIT; - typedef struct /* DEVICE - has handle and notification handler/context */ { ACPI_OBJECT_COMMON_HEADER - UINT32 Reserved1; - UINT32 Reserved2; - UINT32 Reserved3; - UINT32 Reserved4; - - ACPI_HANDLE Handle; - union AcpiObjInternal *SysHandler; /* Handler for system notifies */ - union AcpiObjInternal *DrvHandler; /* Handler for driver notifies */ - union AcpiObjInternal *AddrHandler; /* Handler for Address space */ - void *Reserved_p5; + union acpi_operand_obj *SysHandler; /* Handler for system notifies */ + union acpi_operand_obj *DrvHandler; /* Handler for driver notifies */ + union acpi_operand_obj *AddrHandler; /* Handler for Address space */ } ACPI_OBJECT_DEVICE; @@ -303,19 +254,7 @@ typedef struct /* DEVICE - has handle and notification handler/context */ typedef struct /* EVENT */ { ACPI_OBJECT_COMMON_HEADER - - UINT16 LockCount; - UINT16 ThreadId; - UINT16 SignalCount; - UINT16 Fill1; - UINT32 Reserved3; - UINT32 Reserved4; - - void *Semaphore; - void *Reserved_p2; - void *Reserved_p3; - void *Reserved_p4; - void *Reserved_p5; + void *Semaphore; } ACPI_OBJECT_EVENT; @@ -325,67 +264,47 @@ typedef struct /* EVENT */ typedef struct /* METHOD */ { ACPI_OBJECT_COMMON_HEADER + UINT8 MethodFlags; + UINT8 ParamCount; - UINT8 MethodFlags; - UINT8 ParamCount; - UINT8 Concurrency; - UINT8 Fill1; - UINT32 PcodeLength; - UINT32 TableLength; - ACPI_OWNER_ID OwningId; - UINT16 Reserved4; + UINT32 PcodeLength; - UINT8 *Pcode; - UINT8 *AcpiTable; - void *ParserOp; - void *Semaphore; - void *Reserved_p5; + void *Semaphore; + UINT8 *Pcode; + + UINT8 Concurrency; + UINT8 ThreadCount; + ACPI_OWNER_ID OwningId; } ACPI_OBJECT_METHOD; -typedef struct /* MUTEX */ +typedef struct acpi_obj_mutex /* MUTEX */ { ACPI_OBJECT_COMMON_HEADER + UINT16 SyncLevel; + UINT16 AcquisitionDepth; - UINT16 LockCount; - UINT16 ThreadId; - UINT16 SyncLevel; - UINT16 Fill1; - UINT32 Reserved3; - UINT32 Reserved4; - - void *Semaphore; - void *Reserved_p2; - void *Reserved_p3; - void *Reserved_p4; - void *Reserved_p5; + void *Semaphore; + void *Owner; + 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; -/* Flags for Region */ - -#define INITIAL_REGION_FLAGS 0x0000 /* value set when the region is created */ -#define REGION_AGRUMENT_DATA_VALID 0x0001 /* Addr/Len are set */ -#define REGION_INITIALIZED 0x0002 /* region init handler has been called */ - /* this includes _REG method, if any */ typedef struct /* REGION */ { ACPI_OBJECT_COMMON_HEADER - UINT16 SpaceId; - UINT16 RegionFlags; /* bits defined above */ - UINT32 Address; - UINT32 Length; - UINT32 Reserved4; /* Region Specific data (PCI _ADR) */ + UINT8 SpaceId; + UINT32 Length; + ACPI_PHYSICAL_ADDRESS Address; + union acpi_operand_obj *Extra; /* Pointer to executable AML (in region definition) */ - union AcpiObjInternal *Method; /* Associated control method */ - union AcpiObjInternal *AddrHandler; /* Handler for system notifies */ - union AcpiObjInternal *Link; /* Link in list of regions */ - /* list is owned by AddrHandler */ - ACPI_NAMED_OBJECT *REGMethod; /* _REG method for this region (if any) */ - ACPI_NAMED_OBJECT *Nte; /* containing object */ + union acpi_operand_obj *AddrHandler; /* Handler for system notifies */ + ACPI_NAMESPACE_NODE *Node; /* containing object */ + union acpi_operand_obj *Next; } ACPI_OBJECT_REGION; @@ -394,16 +313,11 @@ typedef struct /* POWER RESOURCE - has Handle and notification handler/context*/ { ACPI_OBJECT_COMMON_HEADER - UINT32 SystemLevel; - UINT32 ResourceOrder; - UINT32 Reserved3; - UINT32 Reserved4; + UINT32 SystemLevel; + UINT32 ResourceOrder; - ACPI_HANDLE Handle; - union AcpiObjInternal *SysHandler; /* Handler for system notifies */ - union AcpiObjInternal *DrvHandler; /* Handler for driver notifies */ - void *Reserved_p4; - void *Reserved_p5; + union acpi_operand_obj *SysHandler; /* Handler for system notifies */ + union acpi_operand_obj *DrvHandler; /* Handler for driver notifies */ } ACPI_OBJECT_POWER_RESOURCE; @@ -412,17 +326,13 @@ typedef struct /* PROCESSOR - has Handle and notification handler/context*/ { ACPI_OBJECT_COMMON_HEADER - UINT32 ProcId; - ACPI_IO_ADDRESS PblkAddress; - UINT16 Fill1; - UINT32 PblkLength; - UINT32 Reserved4; + UINT32 ProcId; + UINT32 Length; + ACPI_IO_ADDRESS Address; - ACPI_HANDLE Handle; - union AcpiObjInternal *SysHandler; /* Handler for system notifies */ - union AcpiObjInternal *DrvHandler; /* Handler for driver notifies */ - union AcpiObjInternal *AddrHandler; /* Handler for Address space */ - void *Reserved_p5; + union acpi_operand_obj *SysHandler; /* Handler for system notifies */ + union acpi_operand_obj *DrvHandler; /* Handler for driver notifies */ + union acpi_operand_obj *AddrHandler; /* Handler for Address space */ } ACPI_OBJECT_PROCESSOR; @@ -431,90 +341,87 @@ typedef struct /* THERMAL ZONE - has Handle and Handler/Context */ { ACPI_OBJECT_COMMON_HEADER - UINT32 Reserved1; - UINT32 Reserved2; - UINT32 Reserved3; - UINT32 Reserved4; - - ACPI_HANDLE Handle; - union AcpiObjInternal *SysHandler; /* Handler for system notifies */ - union AcpiObjInternal *DrvHandler; /* Handler for driver notifies */ - union AcpiObjInternal *AddrHandler; /* Handler for Address space */ - void *Reserved_p5; + union acpi_operand_obj *SysHandler; /* Handler for system notifies */ + union acpi_operand_obj *DrvHandler; /* Handler for driver notifies */ + union acpi_operand_obj *AddrHandler; /* Handler for Address space */ } ACPI_OBJECT_THERMAL_ZONE; /* - * Internal types + * Fields. All share a common header/info field. */ -typedef struct /* FIELD */ +typedef struct /* COMMON FIELD (for BUFFER, REGION, BANK, and INDEX fields) */ { ACPI_OBJECT_COMMON_HEADER - ACPI_COMMON_FIELD_INFO - UINT32 Reserved4; + union acpi_operand_obj *RegionObj; /* Containing Operation Region object */ + /* (REGION/BANK fields only) */ +} ACPI_OBJECT_FIELD_COMMON; - union AcpiObjInternal *Container; /* Containing object */ - void *Reserved_p2; - void *Reserved_p3; - void *Reserved_p4; - void *Reserved_p5; -} ACPI_OBJECT_FIELD; +typedef struct /* REGION FIELD */ +{ + ACPI_OBJECT_COMMON_HEADER + ACPI_COMMON_FIELD_INFO + union acpi_operand_obj *RegionObj; /* Containing OpRegion object */ + +} ACPI_OBJECT_REGION_FIELD; typedef struct /* BANK FIELD */ { ACPI_OBJECT_COMMON_HEADER - ACPI_COMMON_FIELD_INFO - UINT32 Value; /* Value to store into BankSelect */ - - ACPI_HANDLE BankSelect; /* Bank select register */ - union AcpiObjInternal *Container; /* Containing object */ - void *Reserved_p3; - void *Reserved_p4; - void *Reserved_p5; + + union acpi_operand_obj *RegionObj; /* Containing OpRegion object */ + union acpi_operand_obj *BankRegisterObj; /* BankSelect Register object */ } ACPI_OBJECT_BANK_FIELD; typedef struct /* INDEX FIELD */ { - /* - * No container pointer needed since the index and data register definitions - * will define how to access the respective registers - */ ACPI_OBJECT_COMMON_HEADER - ACPI_COMMON_FIELD_INFO - UINT32 Value; /* Value to store into Index register */ + + /* + * No "RegionObj" pointer needed since the Index and Data registers + * are each field definitions unto themselves. + */ + union acpi_operand_obj *IndexObj; /* Index register */ + union acpi_operand_obj *DataObj; /* Data register */ - ACPI_HANDLE Index; /* Index register */ - ACPI_HANDLE Data; /* Data register */ - void *Reserved_p3; - void *Reserved_p4; - void *Reserved_p5; } ACPI_OBJECT_INDEX_FIELD; +/* The BufferField is different in that it is part of a Buffer, not an OpRegion */ + +typedef struct /* BUFFER FIELD */ +{ + ACPI_OBJECT_COMMON_HEADER + ACPI_COMMON_FIELD_INFO + + union acpi_operand_obj *Extra; /* Pointer to executable AML (in field definition) */ + ACPI_NAMESPACE_NODE *Node; /* Parent (containing) object node */ + union acpi_operand_obj *BufferObj; /* Containing Buffer object */ + +} ACPI_OBJECT_BUFFER_FIELD; + + +/* + * Handlers + */ + typedef struct /* NOTIFY HANDLER */ { ACPI_OBJECT_COMMON_HEADER - UINT32 Reserved1; - UINT32 Reserved2; - UINT32 Reserved3; - UINT32 Reserved4; - - ACPI_NAMED_OBJECT *Nte; /* Parent device */ - NOTIFY_HANDLER Handler; - void *Context; - void *Reserved_p4; - void *Reserved_p5; + ACPI_NAMESPACE_NODE *Node; /* Parent device */ + ACPI_NOTIFY_HANDLER Handler; + void *Context; } ACPI_OBJECT_NOTIFY_HANDLER; @@ -523,19 +430,20 @@ typedef struct /* NOTIFY HANDLER */ #define ADDR_HANDLER_DEFAULT_INSTALLED 0x1 + typedef struct /* ADDRESS HANDLER */ { ACPI_OBJECT_COMMON_HEADER - UINT16 SpaceId; - UINT16 Hflags; - ADDRESS_SPACE_HANDLER Handler; + UINT8 SpaceId; + UINT16 Hflags; + ACPI_ADR_SPACE_HANDLER Handler; - ACPI_NAMED_OBJECT *Nte; /* Parent device */ - void *Context; - ADDRESS_SPACE_SETUP Setup; - union AcpiObjInternal *Link; /* Link to next handler on device */ - union AcpiObjInternal *RegionList; /* regions using this handler */ + ACPI_NAMESPACE_NODE *Node; /* Parent device */ + void *Context; + ACPI_ADR_SPACE_SETUP Setup; + union acpi_operand_obj *RegionList; /* regions using this handler */ + union acpi_operand_obj *Next; } ACPI_OBJECT_ADDR_HANDLER; @@ -549,36 +457,53 @@ typedef struct /* Reference - Local object type */ { ACPI_OBJECT_COMMON_HEADER - UINT16 OpCode; - UINT8 Fill1; - UINT8 TargetType; /* Used for IndexOp */ - UINT32 Offset; /* Used for ArgOp, LocalOp, and IndexOp */ - UINT32 Reserved3; - UINT32 Reserved4; + UINT8 TargetType; /* Used for IndexOp */ + UINT16 Opcode; + UINT32 Offset; /* Used for ArgOp, LocalOp, and IndexOp */ - void *Object; /* NameOp=>HANDLE to obj, IndexOp=>ACPI_OBJECT_INTERNAL */ - ACPI_NAMED_OBJECT *Nte; - union AcpiObjInternal **Where; - void *Reserved_p4; - void *Reserved_p5; + void *Object; /* NameOp=>HANDLE to obj, IndexOp=>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 (TermArgs) that must be + * evaluated at run time. + * + * Currently: Region and FieldUnit types + */ + +typedef struct /* EXTRA */ +{ + ACPI_OBJECT_COMMON_HEADER + UINT8 ByteFill1; + UINT16 WordFill1; + UINT32 PcodeLength; + UINT8 *Pcode; + ACPI_NAMESPACE_NODE *Method_REG; /* _REG method for this region (if any) */ + void *RegionContext; /* Region-specific data */ + +} ACPI_OBJECT_EXTRA; + + /****************************************************************************** * - * ACPI_OBJECT_INTERNAL Descriptor - a giant union of all of the above + * ACPI_OPERAND_OBJECT Descriptor - a giant union of all of the above * *****************************************************************************/ -typedef union AcpiObjInternal +typedef union acpi_operand_obj { ACPI_OBJECT_COMMON Common; - ACPI_OBJECT_NUMBER Number; + ACPI_OBJECT_CACHE_LIST Cache; + ACPI_OBJECT_INTEGER Integer; ACPI_OBJECT_STRING String; ACPI_OBJECT_BUFFER Buffer; ACPI_OBJECT_PACKAGE Package; - ACPI_OBJECT_FIELD_UNIT FieldUnit; + ACPI_OBJECT_BUFFER_FIELD BufferField; ACPI_OBJECT_DEVICE Device; ACPI_OBJECT_EVENT Event; ACPI_OBJECT_METHOD Method; @@ -587,13 +512,15 @@ typedef union AcpiObjInternal ACPI_OBJECT_POWER_RESOURCE PowerResource; ACPI_OBJECT_PROCESSOR Processor; ACPI_OBJECT_THERMAL_ZONE ThermalZone; - ACPI_OBJECT_FIELD Field; + ACPI_OBJECT_FIELD_COMMON CommonField; + ACPI_OBJECT_REGION_FIELD Field; ACPI_OBJECT_BANK_FIELD BankField; ACPI_OBJECT_INDEX_FIELD IndexField; ACPI_OBJECT_REFERENCE Reference; ACPI_OBJECT_NOTIFY_HANDLER NotifyHandler; ACPI_OBJECT_ADDR_HANDLER AddrHandler; + ACPI_OBJECT_EXTRA Extra; -} ACPI_OBJECT_INTERNAL; +} ACPI_OPERAND_OBJECT; #endif /* _ACOBJECT_H */