This commit was generated by cvs2svn to compensate for changes in r87031,

which included commits to RCS files with non-trunk default branches.
This commit is contained in:
Mike Smith 2001-11-28 04:29:40 +00:00
commit 89709a06f9
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=87032
89 changed files with 3467 additions and 4169 deletions

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Name: acdispat.h - dispatcher (parser to interpreter interface)
* $Revision: 45 $
* $Revision: 48 $
*
*****************************************************************************/
@ -214,6 +214,11 @@ AcpiDsCreateBufferField (
ACPI_PARSE_OBJECT *Op,
ACPI_WALK_STATE *WalkState);
ACPI_STATUS
AcpiDsInitFieldObjects (
ACPI_PARSE_OBJECT *Op,
ACPI_WALK_STATE *WalkState);
/* dsload - Parser/Interpreter interface, namespace load callbacks */
@ -291,18 +296,19 @@ AcpiDsMethodDataInitArgs (
UINT32 MaxParamCount,
ACPI_WALK_STATE *WalkState);
ACPI_NAMESPACE_NODE *
ACPI_STATUS
AcpiDsMethodDataGetNode (
UINT16 Opcode,
UINT32 Index,
ACPI_WALK_STATE *WalkState);
ACPI_WALK_STATE *WalkState,
ACPI_NAMESPACE_NODE **Node);
ACPI_STATUS
AcpiDsMethodDataInit (
ACPI_WALK_STATE *WalkState);
ACPI_STATUS
AcpiDsMethodDataSetEntry (
AcpiDsMethodDataSetValue (
UINT16 Opcode,
UINT32 Index,
ACPI_OPERAND_OBJECT *Object,
@ -317,7 +323,7 @@ AcpiDsParseMethod (
ACPI_STATUS
AcpiDsCallControlMethod (
ACPI_WALK_LIST *WalkList,
ACPI_THREAD_STATE *Thread,
ACPI_WALK_STATE *WalkState,
ACPI_PARSE_OBJECT *Op);
@ -422,15 +428,6 @@ ACPI_STATUS
AcpiDsResolveOperands (
ACPI_WALK_STATE *WalkState);
ACPI_OBJECT_TYPE8
AcpiDsMapOpcodeToDataType (
UINT16 Opcode,
UINT32 *OutFlags);
ACPI_OBJECT_TYPE8
AcpiDsMapNamedOpcodeToDataType (
UINT16 Opcode);
/*
* dswscope - Scope Stack manipulation
@ -459,7 +456,7 @@ AcpiDsCreateWalkState (
ACPI_OWNER_ID OwnerId,
ACPI_PARSE_OBJECT *Origin,
ACPI_OPERAND_OBJECT *MthDesc,
ACPI_WALK_LIST *WalkList);
ACPI_THREAD_STATE *Thread);
ACPI_STATUS
AcpiDsInitAmlWalk (
@ -487,12 +484,12 @@ AcpiDsDeleteWalkState (
ACPI_WALK_STATE *
AcpiDsPopWalkState (
ACPI_WALK_LIST *WalkList);
ACPI_THREAD_STATE *Thread);
void
AcpiDsPushWalkState (
ACPI_WALK_STATE *WalkState,
ACPI_WALK_LIST *WalkList);
ACPI_THREAD_STATE *Thread);
ACPI_STATUS
AcpiDsResultStackPop (
@ -508,7 +505,7 @@ AcpiDsResultStackClear (
ACPI_WALK_STATE *
AcpiDsGetCurrentWalkState (
ACPI_WALK_LIST *WalkList);
ACPI_THREAD_STATE *Thread);
void
AcpiDsDeleteWalkStateCache (

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Name: acevents.h - Event subcomponent prototypes and defines
* $Revision: 66 $
* $Revision: 67 $
*
*****************************************************************************/
@ -205,8 +205,7 @@ AcpiEvAddressSpaceDispatch (
UINT32 Function,
ACPI_PHYSICAL_ADDRESS Address,
UINT32 BitWidth,
UINT32 *Value);
ACPI_INTEGER *Value);
ACPI_STATUS
AcpiEvAddrHandlerHelper (
@ -220,7 +219,6 @@ AcpiEvDisassociateRegionFromHandler(
ACPI_OPERAND_OBJECT *RegionObj,
BOOLEAN AcpiNsIsLocked);
ACPI_STATUS
AcpiEvAssociateRegionAndHandler (
ACPI_OPERAND_OBJECT *HandlerObj,

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Name: acexcep.h - Exception codes returned by the ACPI subsystem
* $Revision: 50 $
* $Revision: 53 $
*
*****************************************************************************/
@ -145,7 +145,7 @@
#define AE_NO_MEMORY (ACPI_STATUS) (0x0004 | AE_CODE_ENVIRONMENTAL)
#define AE_NOT_FOUND (ACPI_STATUS) (0x0005 | AE_CODE_ENVIRONMENTAL)
#define AE_NOT_EXIST (ACPI_STATUS) (0x0006 | AE_CODE_ENVIRONMENTAL)
#define AE_EXIST (ACPI_STATUS) (0x0007 | AE_CODE_ENVIRONMENTAL)
#define AE_ALREADY_EXISTS (ACPI_STATUS) (0x0007 | AE_CODE_ENVIRONMENTAL)
#define AE_TYPE (ACPI_STATUS) (0x0008 | AE_CODE_ENVIRONMENTAL)
#define AE_NULL_OBJECT (ACPI_STATUS) (0x0009 | AE_CODE_ENVIRONMENTAL)
#define AE_NULL_ENTRY (ACPI_STATUS) (0x000A | AE_CODE_ENVIRONMENTAL)
@ -220,8 +220,10 @@
#define AE_AML_MUTEX_ORDER (ACPI_STATUS) (0x0017 | AE_CODE_AML)
#define AE_AML_MUTEX_NOT_ACQUIRED (ACPI_STATUS) (0x0018 | AE_CODE_AML)
#define AE_AML_INVALID_RESOURCE_TYPE (ACPI_STATUS) (0x0019 | AE_CODE_AML)
#define AE_AML_INVALID_INDEX (ACPI_STATUS) (0x001A | AE_CODE_AML)
#define AE_AML_REGISTER_LIMIT (ACPI_STATUS) (0x001B | AE_CODE_AML)
#define AE_CODE_AML_MAX 0x0019
#define AE_CODE_AML_MAX 0x001B
/*
* Internal exceptions used for control
@ -253,7 +255,7 @@ NATIVE_CHAR const *AcpiGbl_ExceptionNames_Env[] =
"AE_NO_MEMORY",
"AE_NOT_FOUND",
"AE_NOT_EXIST",
"AE_EXIST",
"AE_ALREADY_EXISTS",
"AE_TYPE",
"AE_NULL_OBJECT",
"AE_NULL_ENTRY",
@ -319,6 +321,8 @@ NATIVE_CHAR const *AcpiGbl_ExceptionNames_Aml[] =
"AE_AML_MUTEX_ORDER",
"AE_AML_MUTEX_NOT_ACQUIRED",
"AE_AML_INVALID_RESOURCE_TYPE",
"AE_AML_INVALID_INDEX",
"AE_AML_REGISTER_LIMIT",
};
NATIVE_CHAR const *AcpiGbl_ExceptionNames_Ctrl[] =

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Name: acglobal.h - Declarations for global variables
* $Revision: 106 $
* $Revision: 109 $
*
*****************************************************************************/
@ -221,7 +221,6 @@ ACPI_EXTERN BOOLEAN AcpiGbl_AcpiHardwarePresent;
ACPI_EXTERN BOOLEAN AcpiGbl_GlobalLockPresent;
extern BOOLEAN AcpiGbl_Shutdown;
extern UINT32 AcpiGbl_SystemFlags;
extern UINT32 AcpiGbl_StartupFlags;
extern const UINT8 AcpiGbl_DecodeTo8bit[8];
extern const NATIVE_CHAR *AcpiGbl_DbSleepStates[ACPI_NUM_SLEEP_STATES];
@ -259,11 +258,7 @@ ACPI_EXTERN UINT32 AcpiGbl_DeepestNesting;
****************************************************************************/
ACPI_EXTERN ACPI_WALK_LIST *AcpiGbl_CurrentWalkList;
/* Address Space handlers */
ACPI_EXTERN ACPI_ADR_SPACE_INFO AcpiGbl_AddressSpaces[ACPI_NUM_ADDRESS_SPACES];
ACPI_EXTERN ACPI_THREAD_STATE *AcpiGbl_CurrentWalkList;
/* Control method single step flag */

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Name: acinterp.h - Interpreter subcomponent prototypes and defines
* $Revision: 116 $
* $Revision: 122 $
*
*****************************************************************************/
@ -118,24 +118,7 @@
#define __ACINTERP_H__
#define WALK_OPERANDS &(WalkState->Operands [WalkState->NumOperands -1])
/* Interpreter constants */
#define AML_END_OF_BLOCK -1
#define PUSH_PKG_LENGTH 1
#define DO_NOT_PUSH_PKG_LENGTH 0
#define STACK_TOP 0
#define STACK_BOTTOM (UINT32) -1
/* Constants for global "WhenToParseMethods" */
#define METHOD_PARSE_AT_INIT 0x0
#define METHOD_PARSE_JUST_IN_TIME 0x1
#define METHOD_DELETE_AT_COMPLETION 0x2
#define WALK_OPERANDS (&(WalkState->Operands [WalkState->NumOperands -1]))
ACPI_STATUS
@ -208,52 +191,49 @@ AcpiExInsertIntoField (
UINT32 BufferLength);
ACPI_STATUS
AcpiExSetupField (
AcpiExSetupRegion (
ACPI_OPERAND_OBJECT *ObjDesc,
UINT32 FieldByteOffset);
UINT32 FieldDatumByteOffset);
ACPI_STATUS
AcpiExReadFieldDatum (
AcpiExAccessRegion (
ACPI_OPERAND_OBJECT *ObjDesc,
UINT32 FieldByteOffset,
UINT32 *Value);
UINT32 FieldDatumByteOffset,
ACPI_INTEGER *Value,
UINT32 ReadWrite);
BOOLEAN
AcpiExRegisterOverflow (
ACPI_OPERAND_OBJECT *ObjDesc,
ACPI_INTEGER Value);
ACPI_STATUS
AcpiExCommonAccessField (
UINT32 Mode,
AcpiExFieldDatumIo (
ACPI_OPERAND_OBJECT *ObjDesc,
UINT32 FieldDatumByteOffset,
ACPI_INTEGER *Value,
UINT32 ReadWrite);
ACPI_STATUS
AcpiExWriteWithUpdateRule (
ACPI_OPERAND_OBJECT *ObjDesc,
ACPI_INTEGER Mask,
ACPI_INTEGER FieldValue,
UINT32 FieldDatumByteOffset);
void
AcpiExGetBufferDatum(
ACPI_INTEGER *Datum,
void *Buffer,
UINT32 BufferLength);
UINT32 ByteGranularity,
UINT32 Offset);
ACPI_STATUS
AcpiExAccessIndexField (
UINT32 Mode,
ACPI_OPERAND_OBJECT *ObjDesc,
void
AcpiExSetBufferDatum (
ACPI_INTEGER MergedDatum,
void *Buffer,
UINT32 BufferLength);
ACPI_STATUS
AcpiExAccessBankField (
UINT32 Mode,
ACPI_OPERAND_OBJECT *ObjDesc,
void *Buffer,
UINT32 BufferLength);
ACPI_STATUS
AcpiExAccessRegionField (
UINT32 Mode,
ACPI_OPERAND_OBJECT *ObjDesc,
void *Buffer,
UINT32 BufferLength);
ACPI_STATUS
AcpiExAccessBufferField (
UINT32 Mode,
ACPI_OPERAND_OBJECT *ObjDesc,
void *Buffer,
UINT32 BufferLength);
UINT32 ByteGranularity,
UINT32 Offset);
ACPI_STATUS
AcpiExReadDataFromField (
@ -370,12 +350,16 @@ AcpiExReleaseMutex (
ACPI_STATUS
AcpiExReleaseAllMutexes (
ACPI_OPERAND_OBJECT *MutexList);
ACPI_THREAD_STATE *Thread);
void
AcpiExUnlinkMutex (
ACPI_OPERAND_OBJECT *ObjDesc);
void
AcpiExLinkMutex (
ACPI_OPERAND_OBJECT *ObjDesc,
ACPI_THREAD_STATE *Thread);
/*
* amprep - ACPI AML (p-code) execution - prep utilities
@ -385,35 +369,9 @@ ACPI_STATUS
AcpiExPrepCommonFieldObject (
ACPI_OPERAND_OBJECT *ObjDesc,
UINT8 FieldFlags,
UINT32 FieldPosition,
UINT32 FieldLength);
ACPI_STATUS
AcpiExPrepRegionFieldValue (
ACPI_NAMESPACE_NODE *Node,
ACPI_HANDLE Region,
UINT8 FieldFlags,
UINT32 FieldPosition,
UINT32 FieldLength);
ACPI_STATUS
AcpiExPrepBankFieldValue (
ACPI_NAMESPACE_NODE *Node,
ACPI_NAMESPACE_NODE *RegionNode,
ACPI_NAMESPACE_NODE *BankRegisterNode,
UINT32 BankVal,
UINT8 FieldFlags,
UINT32 FieldPosition,
UINT32 FieldLength);
ACPI_STATUS
AcpiExPrepIndexFieldValue (
ACPI_NAMESPACE_NODE *Node,
ACPI_NAMESPACE_NODE *IndexReg,
ACPI_NAMESPACE_NODE *DataReg,
UINT8 FieldFlags,
UINT32 FieldPosition,
UINT32 FieldLength);
UINT8 FieldAttribute,
UINT32 FieldBitPosition,
UINT32 FieldBitLength);
ACPI_STATUS
AcpiExPrepFieldValue (
@ -524,11 +482,6 @@ AcpiExResolveObjectToValue (
ACPI_OPERAND_OBJECT **StackPtr,
ACPI_WALK_STATE *WalkState);
ACPI_STATUS
AcpiExGetBufferFieldValue (
ACPI_OPERAND_OBJECT *FieldDesc,
ACPI_OPERAND_OBJECT *ResultDesc);
/*
* amdump - Scanner debug output routines
@ -733,7 +686,7 @@ AcpiExSystemMemorySpaceHandler (
UINT32 Function,
ACPI_PHYSICAL_ADDRESS Address,
UINT32 BitWidth,
UINT32 *Value,
ACPI_INTEGER *Value,
void *HandlerContext,
void *RegionContext);
@ -742,7 +695,7 @@ AcpiExSystemIoSpaceHandler (
UINT32 Function,
ACPI_PHYSICAL_ADDRESS Address,
UINT32 BitWidth,
UINT32 *Value,
ACPI_INTEGER *Value,
void *HandlerContext,
void *RegionContext);
@ -751,7 +704,7 @@ AcpiExPciConfigSpaceHandler (
UINT32 Function,
ACPI_PHYSICAL_ADDRESS Address,
UINT32 BitWidth,
UINT32 *Value,
ACPI_INTEGER *Value,
void *HandlerContext,
void *RegionContext);
@ -760,7 +713,7 @@ AcpiExCmosSpaceHandler (
UINT32 Function,
ACPI_PHYSICAL_ADDRESS Address,
UINT32 BitWidth,
UINT32 *Value,
ACPI_INTEGER *Value,
void *HandlerContext,
void *RegionContext);
@ -769,7 +722,7 @@ AcpiExPciBarSpaceHandler (
UINT32 Function,
ACPI_PHYSICAL_ADDRESS Address,
UINT32 BitWidth,
UINT32 *Value,
ACPI_INTEGER *Value,
void *HandlerContext,
void *RegionContext);
@ -778,7 +731,7 @@ AcpiExEmbeddedControllerSpaceHandler (
UINT32 Function,
ACPI_PHYSICAL_ADDRESS Address,
UINT32 BitWidth,
UINT32 *Value,
ACPI_INTEGER *Value,
void *HandlerContext,
void *RegionContext);
@ -787,7 +740,7 @@ AcpiExSmBusSpaceHandler (
UINT32 Function,
ACPI_PHYSICAL_ADDRESS Address,
UINT32 BitWidth,
UINT32 *Value,
ACPI_INTEGER *Value,
void *HandlerContext,
void *RegionContext);

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Name: aclocal.h - Internal data types used across the ACPI subsystem
* $Revision: 138 $
* $Revision: 145 $
*
*****************************************************************************/
@ -140,6 +140,7 @@ typedef UINT32 ACPI_MUTEX_HANDLE;
#define ACPI_DESC_TYPE_STATE_WSCOPE 0x26
#define ACPI_DESC_TYPE_STATE_RESULT 0x27
#define ACPI_DESC_TYPE_STATE_NOTIFY 0x28
#define ACPI_DESC_TYPE_STATE_THREAD 0x29
#define ACPI_DESC_TYPE_WALK 0x44
#define ACPI_DESC_TYPE_PARSER 0x66
#define ACPI_DESC_TYPE_INTERNAL 0x88
@ -294,7 +295,7 @@ typedef struct acpi_node
/* Node flags */
#define ANOBJ_AML_ATTACHMENT 0x01
#define ANOBJ_RESERVED 0x01
#define ANOBJ_END_OF_PEER_LIST 0x02
#define ANOBJ_DATA_WIDTH_32 0x04 /* Parent table is 64-bits */
#define ANOBJ_METHOD_ARG 0x08
@ -388,19 +389,11 @@ typedef struct
UINT32 FieldBitPosition;
UINT32 FieldBitLength;
UINT8 FieldFlags;
UINT8 Attribute;
UINT8 FieldType;
} ACPI_CREATE_FIELD_INFO;
/*
* Field flags: Bits 00 - 03 : AccessType (AnyAcc, ByteAcc, etc.)
* 04 : LockRule (1 == Lock)
* 05 - 06 : UpdateRule
*/
#define FIELD_ACCESS_TYPE_MASK 0x0F
#define FIELD_LOCK_RULE_MASK 0x10
#define FIELD_UPDATE_RULE_MASK 0x60
/*****************************************************************************
@ -428,18 +421,6 @@ typedef struct
#define ACPI_ENABLE_RTC_ALARM 0x0400
/*
* Entry in the AddressSpace (AKA Operation Region) table
*/
typedef struct
{
ACPI_ADR_SPACE_HANDLER Handler;
void *Context;
} ACPI_ADR_SPACE_INFO;
/* Values and addresses of the GPE registers (both banks) */
typedef struct
@ -508,7 +489,6 @@ typedef struct
/* Forward declarations */
struct acpi_walk_state;
struct acpi_walk_list;
struct acpi_parse_obj;
struct acpi_obj_mutex;
@ -562,7 +542,7 @@ typedef struct acpi_control_state
{
ACPI_STATE_COMMON
struct acpi_parse_obj *PredicateOp;
UINT8 *AmlPredicateStart; /* Start of if/while predicate */
UINT8 *AmlPredicateStart; /* Start of if/while predicate */
} ACPI_CONTROL_STATE;
@ -581,15 +561,30 @@ typedef struct 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 */
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;
/*
* Thread state - one per thread across multiple walk states. Multiple walk
* states are created when there are nested control methods executing.
*/
typedef struct acpi_thread_state
{
ACPI_STATE_COMMON
struct acpi_walk_state *WalkStateList; /* Head of list of WalkStates for this thread */
union acpi_operand_obj *AcquiredMutexList; /* List of all currently acquired mutexes */
UINT32 ThreadId; /* Running thread ID */
UINT16 CurrentSyncLevel; /* Mutex Sync (nested acquire) level */
} ACPI_THREAD_STATE;
/*
* Result values - used to accumulate the results of nested
* AML arguments
@ -637,13 +632,13 @@ typedef union acpi_gen_state
ACPI_SCOPE_STATE Scope;
ACPI_PSCOPE_STATE ParseScope;
ACPI_PKG_STATE Pkg;
ACPI_THREAD_STATE Thread;
ACPI_RESULT_VALUES Results;
ACPI_NOTIFY_INFO Notify;
} ACPI_GENERIC_STATE;
/*****************************************************************************
*
* Interpreter typedefs and structs
@ -666,15 +661,16 @@ ACPI_STATUS (*ACPI_EXECUTE_OP) (
*/
typedef struct acpi_opcode_info
{
#ifdef _OPCODE_NAMES
NATIVE_CHAR *Name; /* Opcode name (debug only) */
#endif
UINT32 ParseArgs; /* Grammar/Parse time arguments */
UINT32 RuntimeArgs; /* Interpret time arguments */
UINT16 Flags; /* Misc flags */
UINT32 Flags; /* Misc flags */
UINT8 ObjectType; /* Corresponding internal object type */
UINT8 Class; /* Opcode class */
UINT8 Type; /* Opcode type */
#ifdef _OPCODE_NAMES
NATIVE_CHAR *Name; /* op name (debug only) */
#endif
} ACPI_OPCODE_INFO;
@ -753,8 +749,6 @@ typedef struct acpi_parse_state
struct acpi_parse_obj *StartScope;
} ACPI_PARSE_STATE;
@ -891,10 +885,6 @@ typedef struct acpi_parse_state
#define GPE1_EN_MASK
#define ACPI_READ 1
#define ACPI_WRITE 2
/*****************************************************************************
*
* Resource descriptors

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Name: acmacros.h - C macros for the entire subsystem.
* $Revision: 97 $
* $Revision: 100 $
*
*****************************************************************************/
@ -321,8 +321,8 @@
* MASK_BITS_ABOVE creates a mask starting AT the position and above
* MASK_BITS_BELOW creates a mask starting one bit BELOW the position
*/
#define MASK_BITS_ABOVE(position) (~(((UINT32)(-1)) << ((UINT32) (position))))
#define MASK_BITS_BELOW(position) (((UINT32)(-1)) << ((UINT32) (position)))
#define MASK_BITS_ABOVE(position) (~(((ACPI_INTEGER)(-1)) << ((UINT32) (position))))
#define MASK_BITS_BELOW(position) (((ACPI_INTEGER)(-1)) << ((UINT32) (position)))
/* Macros for GAS addressing */
@ -348,8 +348,8 @@
#endif
/*
* 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
* An ACPI_NAMESPACE_NODE * can appear in some contexts,
* 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.
@ -385,9 +385,9 @@
* Macros for the master AML opcode table
*/
#ifdef ACPI_DEBUG
#define ACPI_OP(Name,PArgs,IArgs,Class,Type,Flags) {PArgs,IArgs,Flags,Class,Type,Name}
#define ACPI_OP(Name,PArgs,IArgs,ObjType,Class,Type,Flags) {Name,PArgs,IArgs,Flags,ObjType,Class,Type}
#else
#define ACPI_OP(Name,PArgs,IArgs,Class,Type,Flags) {PArgs,IArgs,Flags,Class,Type}
#define ACPI_OP(Name,PArgs,IArgs,ObjType,Class,Type,Flags) {PArgs,IArgs,Flags,ObjType,Class,Type}
#endif
#define ARG_TYPE_WIDTH 5

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Name: acnamesp.h - Namespace subcomponent prototypes and defines
* $Revision: 110 $
* $Revision: 115 $
*
*****************************************************************************/
@ -137,7 +137,7 @@
#define ACPI_ROOT_NAME (UINT32) 0x2F202020 /* Root name is "/ " */
#define ACPI_SYS_BUS_NAME (UINT32) 0x5F53425F /* Sys bus name is "_SB_" */
#define NS_ROOT_PATH "/"
#define NS_ROOT_PATH "\\"
#define NS_SYSTEM_BUS "_SB_"
@ -306,6 +306,11 @@ AcpiNsDumpPathname (
UINT32 Level,
UINT32 Component);
void
AcpiNsPrintPathname (
UINT32 NumSegments,
char *Pathname);
void
AcpiNsDumpRootDevices (
void);
@ -415,6 +420,31 @@ AcpiNsAttachObject (
ACPI_OPERAND_OBJECT *Object,
ACPI_OBJECT_TYPE8 Type);
ACPI_OPERAND_OBJECT *
AcpiNsGetAttachedObject (
ACPI_NAMESPACE_NODE *Node);
ACPI_OPERAND_OBJECT *
AcpiNsGetSecondaryObject (
ACPI_OPERAND_OBJECT *ObjDesc);
ACPI_STATUS
AcpiNsAttachData (
ACPI_NAMESPACE_NODE *Node,
ACPI_OBJECT_HANDLER Handler,
void *Data);
ACPI_STATUS
AcpiNsDetachData (
ACPI_NAMESPACE_NODE *Node,
ACPI_OBJECT_HANDLER Handler);
ACPI_STATUS
AcpiNsGetAttachedData (
ACPI_NAMESPACE_NODE *Node,
ACPI_OBJECT_HANDLER Handler,
void **Data);
/*
* Namespace searching and entry - nssearch
@ -461,10 +491,6 @@ ACPI_OBJECT_TYPE8
AcpiNsGetType (
ACPI_NAMESPACE_NODE *Node);
void *
AcpiNsGetAttachedObject (
ACPI_NAMESPACE_NODE *Node);
UINT32
AcpiNsLocal (
ACPI_OBJECT_TYPE8 Type);

View File

@ -2,7 +2,7 @@
/******************************************************************************
*
* Name: acobject.h - Definition of ACPI_OPERAND_OBJECT (Internal object only)
* $Revision: 93 $
* $Revision: 101 $
*
*****************************************************************************/
@ -149,19 +149,21 @@
*/
#define ACPI_OBJECT_COMMON_HEADER /* SIZE/ALIGNMENT: 32-bits plus trailing 8-bit flag */\
#define ACPI_OBJECT_COMMON_HEADER /* SIZE/ALIGNMENT: 32 bits, one ptr plus trailing 8-bit flag */\
UINT8 DataType; /* To differentiate various internal objs */\
UINT8 Type; /* ACPI_OBJECT_TYPE */\
UINT16 ReferenceCount; /* For object deletion management */\
union acpi_operand_obj *NextObject; /* Objects linked to parent NS node */\
UINT8 Flags; \
/* Defines for flag byte above */
#define AOPOBJ_STATIC_ALLOCATION 0x1
#define AOPOBJ_STATIC_POINTER 0x2
#define AOPOBJ_DATA_VALID 0x4
#define AOPOBJ_ZERO_CONST 0x4
#define AOPOBJ_INITIALIZED 0x8
#define AOPOBJ_STATIC_ALLOCATION 0x01
#define AOPOBJ_STATIC_POINTER 0x02
#define AOPOBJ_DATA_VALID 0x04
#define AOPOBJ_OBJECT_INITIALIZED 0x08
#define AOPOBJ_SETUP_COMPLETE 0x10
#define AOPOBJ_SINGLE_DATUM 0x20
/*
@ -170,23 +172,19 @@
* "Buffer Datum" -- a datum from a user buffer, read from or to be written to the field
*/
#define ACPI_COMMON_FIELD_INFO /* SIZE/ALIGNMENT: 24 bits + three 32-bit values */\
UINT8 AccessFlags;\
UINT8 FieldFlags; /* Access, update, and lock bits */\
UINT16 BitLength; /* Length of field in bits */\
UINT32 BaseByteOffset; /* Byte offset within containing object */\
UINT8 AccessBitWidth; /* Read/Write size in bits (from ASL AccessType)*/\
UINT8 AccessByteWidth; /* Read/Write size in bytes */\
UINT8 UpdateRule; /* How neighboring field bits are handled */\
UINT8 LockRule; /* Global Lock: 1 = "Must Lock" */\
UINT8 Attribute ; /* From AccessAs keyword */\
UINT8 StartFieldBitOffset;/* Bit offset within first field datum (0-63) */\
UINT8 DatumValidBits; /* Valid bit in first "Field datum" */\
UINT8 EndFieldValidBits; /* Valid bits in the last "field datum" */\
UINT8 EndBufferValidBits; /* Valid bits in the last "buffer datum" */\
UINT32 Value; /* Value to store into the Bank or Index register */
/* Access flag bits */
#define AFIELD_SINGLE_DATUM 0x1
UINT8 Reserved; /* Reserved for future use */\
UINT32 Value; /* Value to store into the Bank or Index register */\
ACPI_NAMESPACE_NODE *Node; /* Link back to parent node */
/*
@ -196,7 +194,6 @@
UINT32 Length;
/******************************************************************************
*
* Individual Object Descriptors
@ -242,6 +239,7 @@ typedef struct /* BUFFER - has length and pointer - not null terminated */
ACPI_OBJECT_COMMON_HEADER
ACPI_COMMON_BUFFER_INFO
UINT8 *Pointer; /* Buffer value in AML stream or in allocated space */
ACPI_NAMESPACE_NODE *Node; /* Link back to parent node */
} ACPI_OBJECT_BUFFER;
@ -302,8 +300,8 @@ typedef struct acpi_obj_mutex /* MUTEX */
UINT16 SyncLevel;
UINT16 AcquisitionDepth;
struct acpi_thread_state *OwnerThread;
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 */
@ -317,7 +315,6 @@ typedef struct /* REGION */
UINT8 SpaceId;
UINT32 Length;
ACPI_PHYSICAL_ADDRESS Address;
union acpi_operand_obj *Extra; /* Pointer to executable AML (in region definition) */
union acpi_operand_obj *AddrHandler; /* Handler for system notifies */
ACPI_NAMESPACE_NODE *Node; /* containing object */
@ -393,7 +390,7 @@ typedef struct /* BANK FIELD */
ACPI_COMMON_FIELD_INFO
union acpi_operand_obj *RegionObj; /* Containing OpRegion object */
union acpi_operand_obj *BankRegisterObj; /* BankSelect Register object */
union acpi_operand_obj *BankObj; /* BankSelect Register object */
} ACPI_OBJECT_BANK_FIELD;
@ -421,8 +418,6 @@ 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;
@ -506,6 +501,15 @@ typedef struct /* EXTRA */
} ACPI_OBJECT_EXTRA;
typedef struct /* DATA */
{
ACPI_OBJECT_COMMON_HEADER
ACPI_OBJECT_HANDLER Handler;
void *Pointer;
} ACPI_OBJECT_DATA;
/******************************************************************************
*
* ACPI_OPERAND_OBJECT Descriptor - a giant union of all of the above
@ -537,6 +541,7 @@ typedef union acpi_operand_obj
ACPI_OBJECT_NOTIFY_HANDLER NotifyHandler;
ACPI_OBJECT_ADDR_HANDLER AddrHandler;
ACPI_OBJECT_EXTRA Extra;
ACPI_OBJECT_DATA Data;
} ACPI_OPERAND_OBJECT;

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: acparser.h - AML Parser subcomponent prototypes and defines
* $Revision: 54 $
* $Revision: 55 $
*
*****************************************************************************/
@ -119,15 +119,15 @@
#define __ACPARSER_H__
#define OP_HAS_RETURN_VALUE 1
#define OP_HAS_RETURN_VALUE 1
/* variable # arguments */
#define ACPI_VAR_ARGS ACPI_UINT32_MAX
#define ACPI_VAR_ARGS ACPI_UINT32_MAX
/* maximum virtual address */
#define ACPI_MAX_AML ((UINT8 *)(~0UL))
#define ACPI_MAX_AML ((UINT8 *)(~0UL))
#define ACPI_PARSE_DELETE_TREE 0x0001
@ -139,7 +139,8 @@
#define ACPI_PARSE_EXECUTE 0x0030
#define ACPI_PARSE_MODE_MASK 0x0030
/* psapi - Parser external interfaces */
/* Parser external interfaces */
ACPI_STATUS
AcpiPsxLoadTable (
@ -152,6 +153,7 @@ AcpiPsxExecute (
ACPI_OPERAND_OBJECT **Params,
ACPI_OPERAND_OBJECT **ReturnObjDesc);
/******************************************************************************
*
* Parser interfaces
@ -176,8 +178,8 @@ AcpiPsGetNextNamestring (
void
AcpiPsGetNextSimpleArg (
ACPI_PARSE_STATE *ParserState,
UINT32 ArgType, /* type of argument */
ACPI_PARSE_OBJECT *Arg); /* (OUT) argument data */
UINT32 ArgType,
ACPI_PARSE_OBJECT *Arg);
void
AcpiPsGetNextNamepath (
@ -197,6 +199,19 @@ AcpiPsGetNextArg (
UINT32 *ArgCount);
/* psfind */
ACPI_PARSE_OBJECT *
AcpiPsFindName (
ACPI_PARSE_OBJECT *Scope,
UINT32 Name,
UINT32 Opcode);
ACPI_PARSE_OBJECT*
AcpiPsGetParent (
ACPI_PARSE_OBJECT *Op);
/* psopcode - AML Opcode information */
const ACPI_OPCODE_INFO *
@ -210,6 +225,21 @@ AcpiPsGetOpcodeName (
/* psparse - top level parsing routines */
UINT32
AcpiPsGetOpcodeSize (
UINT32 Opcode);
BOOLEAN
AcpiPsCompleteThisOp (
ACPI_WALK_STATE *WalkState,
ACPI_PARSE_OBJECT *Op);
ACPI_STATUS
AcpiPsNextParseState (
ACPI_WALK_STATE *WalkState,
ACPI_PARSE_OBJECT *Op,
ACPI_STATUS CallbackStatus);
ACPI_STATUS
AcpiPsFindObject (
ACPI_WALK_STATE *WalkState,
@ -324,6 +354,10 @@ AcpiPsGetNextWalkOp (
ACPI_PARSE_OBJECT *Op,
ACPI_PARSE_UPWARDS AscendingCallback);
ACPI_STATUS
AcpiPsDeleteCompletedOp (
ACPI_WALK_STATE *WalkState);
/* psutils - parser utilities */

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Name: acstruct.h - Internal structs
* $Revision: 10 $
* $Revision: 12 $
*
*****************************************************************************/
@ -125,6 +125,7 @@
****************************************************************************/
/*
* 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.
@ -147,7 +148,6 @@ typedef struct acpi_walk_state
UINT8 NumOperands; /* Stack pointer for Operands[] array */
UINT8 ReturnUsed;
UINT8 WalkType;
UINT16 CurrentSyncLevel; /* Mutex Sync (nested acquire) level */
UINT16 Opcode; /* Current AML opcode */
UINT32 ArgCount; /* push for fixed or var args */
UINT32 AmlOffset;
@ -184,26 +184,13 @@ typedef struct acpi_walk_state
ACPI_PARSE_DOWNWARDS DescendingCallback;
ACPI_PARSE_UPWARDS AscendingCallback;
struct acpi_walk_list *WalkList;
ACPI_THREAD_STATE *Thread;
struct acpi_walk_state *Next; /* Next WalkState in list */
} 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_OBJECT_MUTEX AcquiredMutexList; /* List of all currently acquired mutexes */
} ACPI_WALK_LIST;
/* Info used by AcpiPsInitObjects */
@ -256,8 +243,6 @@ typedef struct acpi_get_devices_info
} ACPI_GET_DEVICES_INFO;
typedef union acpi_aml_operands
{
ACPI_OPERAND_OBJECT *Operands[7];
@ -290,5 +275,4 @@ typedef union acpi_aml_operands
} ACPI_AML_OPERANDS;
#endif

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Name: actypes.h - Common data types for the entire ACPI subsystem
* $Revision: 193 $
* $Revision: 199 $
*
*****************************************************************************/
@ -383,6 +383,12 @@ typedef UINT64 ACPI_INTEGER;
#define ACPI_D_STATES_MAX ACPI_STATE_D3
#define ACPI_D_STATE_COUNT 4
/*
* Sleep type invalid value
*/
#define ACPI_SLEEP_TYPE_MAX 0x7
#define ACPI_SLEEP_TYPE_INVALID 0xFF
/*
* Standard notify values
*/
@ -427,25 +433,25 @@ typedef UINT32 ACPI_OBJECT_TYPE;
typedef UINT8 ACPI_OBJECT_TYPE8;
#define ACPI_TYPE_ANY 0 /* 0x00 */
#define ACPI_TYPE_INTEGER 1 /* 0x01 Byte/Word/Dword/Zero/One/Ones */
#define ACPI_TYPE_STRING 2 /* 0x02 */
#define ACPI_TYPE_BUFFER 3 /* 0x03 */
#define ACPI_TYPE_PACKAGE 4 /* 0x04 ByteConst, multiple DataTerm/Constant/SuperName */
#define ACPI_TYPE_FIELD_UNIT 5 /* 0x05 */
#define ACPI_TYPE_DEVICE 6 /* 0x06 Name, multiple Node */
#define ACPI_TYPE_EVENT 7 /* 0x07 */
#define ACPI_TYPE_METHOD 8 /* 0x08 Name, ByteConst, multiple Code */
#define ACPI_TYPE_MUTEX 9 /* 0x09 */
#define ACPI_TYPE_REGION 10 /* 0x0A */
#define ACPI_TYPE_POWER 11 /* 0x0B Name,ByteConst,WordConst,multi Node */
#define ACPI_TYPE_PROCESSOR 12 /* 0x0C Name,ByteConst,DWordConst,ByteConst,multi NmO */
#define ACPI_TYPE_THERMAL 13 /* 0x0D Name, multiple Node */
#define ACPI_TYPE_BUFFER_FIELD 14 /* 0x0E */
#define ACPI_TYPE_DDB_HANDLE 15 /* 0x0F */
#define ACPI_TYPE_DEBUG_OBJECT 16 /* 0x10 */
#define ACPI_TYPE_ANY 0x00
#define ACPI_TYPE_INTEGER 0x01 /* Byte/Word/Dword/Zero/One/Ones */
#define ACPI_TYPE_STRING 0x02
#define ACPI_TYPE_BUFFER 0x03
#define ACPI_TYPE_PACKAGE 0x04 /* ByteConst, multiple DataTerm/Constant/SuperName */
#define ACPI_TYPE_FIELD_UNIT 0x05
#define ACPI_TYPE_DEVICE 0x06 /* Name, multiple Node */
#define ACPI_TYPE_EVENT 0x07
#define ACPI_TYPE_METHOD 0x08 /* Name, ByteConst, multiple Code */
#define ACPI_TYPE_MUTEX 0x09
#define ACPI_TYPE_REGION 0x0A
#define ACPI_TYPE_POWER 0x0B /* Name,ByteConst,WordConst,multi Node */
#define ACPI_TYPE_PROCESSOR 0x0C /* Name,ByteConst,DWordConst,ByteConst,multi NmO */
#define ACPI_TYPE_THERMAL 0x0D /* Name, multiple Node */
#define ACPI_TYPE_BUFFER_FIELD 0x0E
#define ACPI_TYPE_DDB_HANDLE 0x0F
#define ACPI_TYPE_DEBUG_OBJECT 0x10
#define ACPI_TYPE_MAX 16
#define ACPI_TYPE_MAX 0x10
/*
* This section contains object types that do not relate to the ACPI ObjectType operator.
@ -454,36 +460,37 @@ typedef UINT8 ACPI_OBJECT_TYPE8;
* Also, values exceeding the largest official ACPI ObjectType must not overlap with
* defined AML opcodes.
*/
#define INTERNAL_TYPE_BEGIN 17
#define INTERNAL_TYPE_BEGIN 0x11
#define INTERNAL_TYPE_REGION_FIELD 17 /* 0x11 */
#define INTERNAL_TYPE_BANK_FIELD 18 /* 0x12 */
#define INTERNAL_TYPE_INDEX_FIELD 19 /* 0x13 */
#define INTERNAL_TYPE_REFERENCE 20 /* 0x14 Arg#, Local#, Name, Debug; used only in descriptors */
#define INTERNAL_TYPE_ALIAS 21 /* 0x15 */
#define INTERNAL_TYPE_NOTIFY 22 /* 0x16 */
#define INTERNAL_TYPE_ADDRESS_HANDLER 23 /* 0x17 */
#define INTERNAL_TYPE_RESOURCE 24 /* 0x18 */
#define INTERNAL_TYPE_RESOURCE_FIELD 25 /* 0x19 */
#define INTERNAL_TYPE_REGION_FIELD 0x11
#define INTERNAL_TYPE_BANK_FIELD 0x12
#define INTERNAL_TYPE_INDEX_FIELD 0x13
#define INTERNAL_TYPE_REFERENCE 0x14 /* Arg#, Local#, Name, Debug; used only in descriptors */
#define INTERNAL_TYPE_ALIAS 0x15
#define INTERNAL_TYPE_NOTIFY 0x16
#define INTERNAL_TYPE_ADDRESS_HANDLER 0x17
#define INTERNAL_TYPE_RESOURCE 0x18
#define INTERNAL_TYPE_RESOURCE_FIELD 0x19
#define INTERNAL_TYPE_NODE_MAX 25
#define INTERNAL_TYPE_NODE_MAX 0x19
/* These are pseudo-types because there are never any namespace nodes with these types */
#define INTERNAL_TYPE_FIELD_DEFN 26 /* 0x1A Name, ByteConst, multiple FieldElement */
#define INTERNAL_TYPE_BANK_FIELD_DEFN 27 /* 0x1B 2 Name,DWordConst,ByteConst,multi FieldElement */
#define INTERNAL_TYPE_INDEX_FIELD_DEFN 28 /* 0x1C 2 Name, ByteConst, multiple FieldElement */
#define INTERNAL_TYPE_IF 29 /* 0x1D */
#define INTERNAL_TYPE_ELSE 30 /* 0x1E */
#define INTERNAL_TYPE_WHILE 31 /* 0x1F */
#define INTERNAL_TYPE_SCOPE 32 /* 0x20 Name, multiple Node */
#define INTERNAL_TYPE_DEF_ANY 33 /* 0x21 type is Any, suppress search of enclosing scopes */
#define INTERNAL_TYPE_EXTRA 34 /* 0x22 */
#define INTERNAL_TYPE_FIELD_DEFN 0x1A /* Name, ByteConst, multiple FieldElement */
#define INTERNAL_TYPE_BANK_FIELD_DEFN 0x1B /* 2 Name,DWordConst,ByteConst,multi FieldElement */
#define INTERNAL_TYPE_INDEX_FIELD_DEFN 0x1C /* 2 Name, ByteConst, multiple FieldElement */
#define INTERNAL_TYPE_IF 0x1D
#define INTERNAL_TYPE_ELSE 0x1E
#define INTERNAL_TYPE_WHILE 0x1F
#define INTERNAL_TYPE_SCOPE 0x20 /* Name, multiple Node */
#define INTERNAL_TYPE_DEF_ANY 0x21 /* type is Any, suppress search of enclosing scopes */
#define INTERNAL_TYPE_EXTRA 0x22
#define INTERNAL_TYPE_DATA 0x23
#define INTERNAL_TYPE_MAX 34
#define INTERNAL_TYPE_MAX 0x23
#define INTERNAL_TYPE_INVALID 35
#define INTERNAL_TYPE_INVALID 0x24
#define ACPI_TYPE_NOT_FOUND 0xFF
@ -519,6 +526,12 @@ typedef UINT8 ACPI_OBJECT_TYPE8;
#define ACPI_BTYPE_OBJECTS_AND_REFS 0x0001FFFF /* ARG or LOCAL */
#define ACPI_BTYPE_ALL_OBJECTS 0x0000FFFF
/*
* All I/O
*/
#define ACPI_READ 0
#define ACPI_WRITE 1
/*
* AcpiEvent Types:
@ -560,7 +573,7 @@ typedef UINT32 ACPI_EVENT_TYPE;
* GPEs
*/
#define ACPI_EVENT_ENABLE 0x1
#define ACPI_EVENT_WAKE_ENABLE 0x2
#define ACPI_EVENT_WAKE_ENABLE 0x2
#define ACPI_EVENT_DISABLE 0x1
#define ACPI_EVENT_WAKE_DISABLE 0x2
@ -760,18 +773,21 @@ void (*ACPI_NOTIFY_HANDLER) (
UINT32 Value,
void *Context);
typedef
void (*ACPI_OBJECT_HANDLER) (
ACPI_HANDLE Object,
UINT32 Function,
void *Data);
/* Address Spaces (Operation Regions */
#define ACPI_READ_ADR_SPACE 1
#define ACPI_WRITE_ADR_SPACE 2
typedef
ACPI_STATUS (*ACPI_ADR_SPACE_HANDLER) (
UINT32 Function,
ACPI_PHYSICAL_ADDRESS Address,
UINT32 BitWidth,
UINT32 *Value,
ACPI_INTEGER *Value,
void *HandlerContext,
void *RegionContext);

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Name: acutils.h -- prototypes for the common (subsystem-wide) procedures
* $Revision: 117 $
* $Revision: 119 $
*
*****************************************************************************/
@ -474,6 +474,7 @@ AcpiUtDeleteInternalObjectList (
/* Method name strings */
#define METHOD_NAME__HID "_HID"
#define METHOD_NAME__CID "_CID"
#define METHOD_NAME__UID "_UID"
#define METHOD_NAME__ADR "_ADR"
#define METHOD_NAME__STA "_STA"
@ -494,6 +495,11 @@ AcpiUtExecute_HID (
ACPI_NAMESPACE_NODE *DeviceNode,
ACPI_DEVICE_ID *Hid);
ACPI_STATUS
AcpiUtExecute_CID (
ACPI_NAMESPACE_NODE *DeviceNode,
ACPI_DEVICE_ID *Cid);
ACPI_STATUS
AcpiUtExecute_STA (
ACPI_NAMESPACE_NODE *DeviceNode,
@ -613,6 +619,10 @@ ACPI_GENERIC_STATE *
AcpiUtCreateGenericState (
void);
ACPI_THREAD_STATE *
AcpiUtCreateThreadState (
void);
ACPI_GENERIC_STATE *
AcpiUtCreateUpdateState (
ACPI_OPERAND_OBJECT *Object,

View File

@ -3,7 +3,7 @@
* Name: amlcode.h - Definitions for AML, as included in "definition blocks"
* Declarations and definitions contained herein are derived
* directly from the ACPI specification.
* $Revision: 58 $
* $Revision: 62 $
*
*****************************************************************************/
@ -358,8 +358,8 @@
#define OPGRP_BYTELIST 0x04
/*
* Opcode information
/*
* Opcode information
*/
/* Opcode flags */
@ -433,8 +433,8 @@
#define AML_TYPE_BOGUS 0x19
/*
* Opcode classes
/*
* Opcode classes
*/
#define AML_CLASS_EXECUTE 0x00
#define AML_CLASS_CREATE 0x01
@ -481,52 +481,76 @@ typedef enum
#define MAX_MATCH_OPERATOR 5
/* Field Access Types */
/*
* FieldFlags
*
* This byte is extracted from the AML and includes three separate
* pieces of information about the field:
* 1) The field access type
* 2) The field update rule
* 3) The lock rule for the field
*
* Bits 00 - 03 : AccessType (AnyAcc, ByteAcc, etc.)
* 04 : LockRule (1 == Lock)
* 05 - 06 : UpdateRule
*/
#define AML_FIELD_ACCESS_TYPE_MASK 0x0F
#define AML_FIELD_LOCK_RULE_MASK 0x10
#define AML_FIELD_UPDATE_RULE_MASK 0x60
#define ACCESS_TYPE_MASK 0x0f
#define ACCESS_TYPE_SHIFT 0
/* 1) Field Access Types */
typedef enum
{
ACCESS_ANY_ACC = 0,
ACCESS_BYTE_ACC = 1,
ACCESS_WORD_ACC = 2,
ACCESS_DWORD_ACC = 3,
ACCESS_QWORD_ACC = 4, /* ACPI 2.0 */
ACCESS_BLOCK_ACC = 4,
ACCESS_SMBSEND_RECV_ACC = 5,
ACCESS_SMBQUICK_ACC = 6
AML_FIELD_ACCESS_ANY = 0x00,
AML_FIELD_ACCESS_BYTE = 0x01,
AML_FIELD_ACCESS_WORD = 0x02,
AML_FIELD_ACCESS_DWORD = 0x03,
AML_FIELD_ACCESS_QWORD = 0x04, /* ACPI 2.0 */
AML_FIELD_ACCESS_BUFFER = 0x05, /* ACPI 2.0 */
} AML_ACCESS_TYPE;
/* Field Lock Rules */
#define LOCK_RULE_MASK 0x10
#define LOCK_RULE_SHIFT 4
/* 2) Field Lock Rules */
typedef enum
{
GLOCK_NEVER_LOCK = 0,
GLOCK_ALWAYS_LOCK = 1
AML_FIELD_LOCK_NEVER = 0x00,
AML_FIELD_LOCK_ALWAYS = 0x10,
} AML_LOCK_RULE;
/* Field Update Rules */
#define UPDATE_RULE_MASK 0x060
#define UPDATE_RULE_SHIFT 5
/* 3) Field Update Rules */
typedef enum
{
UPDATE_PRESERVE = 0,
UPDATE_WRITE_AS_ONES = 1,
UPDATE_WRITE_AS_ZEROS = 2
AML_FIELD_UPDATE_PRESERVE = 0x00,
AML_FIELD_UPDATE_WRITE_AS_ONES = 0x20,
AML_FIELD_UPDATE_WRITE_AS_ZEROS = 0x40,
} AML_UPDATE_RULE;
/*
* Field Access Attributes.
* This byte is extracted from the AML via the
* AccessAs keyword
*/
typedef enum
{
AML_FIELD_ATTRIB_SMB_QUICK = 0x02,
AML_FIELD_ATTRIB_SMB_SEND_RCV = 0x04,
AML_FIELD_ATTRIB_SMB_BYTE = 0x06,
AML_FIELD_ATTRIB_SMB_WORD = 0x08,
AML_FIELD_ATTRIB_SMB_BLOCK = 0x0A,
AML_FIELD_ATTRIB_SMB_CALL = 0x0E,
} AML_ACCESS_ATTRIBUTE;
/* bit fields in MethodFlags byte */
#define METHOD_FLAGS_ARG_COUNT 0x07
@ -536,15 +560,11 @@ typedef enum
/* Array sizes. Used for range checking also */
#define NUM_REGION_TYPES 7
#define NUM_ACCESS_TYPES 7
#define NUM_ACCESS_TYPES 6
#define NUM_UPDATE_RULES 3
#define NUM_MATCH_OPS 7
#define NUM_OPCODES 256
#define NUM_FIELD_NAMES 2
#define USER_REGION_BEGIN 0x80
#endif /* __AMLCODE_H__ */

View File

@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: dbcmds - debug commands and output routines
* $Revision: 66 $
* $Revision: 67 $
*
******************************************************************************/
@ -193,7 +193,7 @@ AcpiDbWalkForReferences (
/* Check for match against the object attached to the node */
if (Node->Object == ObjDesc)
if (AcpiNsGetAttachedObject (Node) == ObjDesc)
{
AcpiOsPrintf ("Reference at Node->Object %p [%4.4s]\n", Node, &Node->Name);
}
@ -769,7 +769,7 @@ AcpiDbWalkForSpecificObjects (
NATIVE_CHAR Buffer[64];
ObjDesc = ((ACPI_NAMESPACE_NODE *)ObjHandle)->Object;
ObjDesc = AcpiNsGetAttachedObject ((ACPI_NAMESPACE_NODE *) ObjHandle);
BufSize = sizeof (Buffer) / sizeof (*Buffer);
/* Get and display the full pathname to this object */

View File

@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: dbdisasm - parser op tree display routines
* $Revision: 50 $
* $Revision: 53 $
*
******************************************************************************/
@ -208,7 +208,6 @@ AcpiPsDisplayObjectPathname (
*/
AcpiOsPrintf (" **** Path not found in parse tree");
}
else
{
/* The target was found, print the name and complete path */
@ -316,139 +315,135 @@ AcpiDbDisplayOp (
UINT32 j;
if (Op)
if (!Op)
{
while (Op)
AcpiDbDisplayOpcode (WalkState, Op);
return;
}
while (Op)
{
/* Indentation */
DepthCount = 0;
if (!AcpiGbl_DbOpt_verbose)
{
/* indentation */
DepthCount++;
}
DepthCount = 0;
if (!AcpiGbl_DbOpt_verbose)
/* Determine the nesting depth of this argument */
for (depth = Op->Parent; depth; depth = depth->Parent)
{
arg = AcpiPsGetArg (depth, 0);
while (arg && arg != Origin)
{
DepthCount++;
arg = arg->Next;
}
/* Determine the nesting depth of this argument */
for (depth = Op->Parent; depth; depth = depth->Parent)
if (arg)
{
arg = AcpiPsGetArg (depth, 0);
while (arg && arg != Origin)
{
arg = arg->Next;
}
if (arg)
{
break;
}
DepthCount++;
break;
}
DepthCount++;
}
/* Open a new block if we are nested further than last time */
/* Open a new block if we are nested further than last time */
if (DepthCount > LastDepth)
if (DepthCount > LastDepth)
{
VERBOSE_PRINT ((DB_NO_OP_INFO, LastDepth));
for (i = 0; i < LastDepth; i++)
{
VERBOSE_PRINT ((DB_NO_OP_INFO, LastDepth));
for (i = 0; i < LastDepth; i++)
AcpiOsPrintf ("%s", AcpiGbl_DbDisasmIndent);
}
if (AcpiDbBlockType (Op) == BLOCK_PAREN)
{
AcpiOsPrintf ("(\n");
}
else
{
AcpiOsPrintf ("{\n");
}
}
/* Close a block if we are nested less than last time */
else if (DepthCount < LastDepth)
{
for (j = 0; j < (LastDepth - DepthCount); j++)
{
VERBOSE_PRINT ((DB_NO_OP_INFO, LastDepth - j));
for (i = 0; i < (LastDepth - j - 1); i++)
{
AcpiOsPrintf ("%s", AcpiGbl_DbDisasmIndent);
}
if (AcpiDbBlockType (Op) == BLOCK_PAREN)
{
AcpiOsPrintf ("(\n");
AcpiOsPrintf (")\n");
}
else
{
AcpiOsPrintf ("{\n");
AcpiOsPrintf ("}\n");
}
}
/* Close a block if we are nested less than last time */
else if (DepthCount < LastDepth)
{
for (j = 0; j < (LastDepth - DepthCount); j++)
{
VERBOSE_PRINT ((DB_NO_OP_INFO, LastDepth - j));
for (i = 0; i < (LastDepth - j - 1); i++)
{
AcpiOsPrintf ("%s", AcpiGbl_DbDisasmIndent);
}
if (AcpiDbBlockType (Op) == BLOCK_PAREN)
{
AcpiOsPrintf (")\n");
}
else
{
AcpiOsPrintf ("}\n");
}
}
}
/* In verbose mode, print the AML offset, opcode and depth count */
VERBOSE_PRINT ((DB_FULL_OP_INFO, (unsigned) Op->AmlOffset, Op->Opcode, DepthCount));
/* Indent the output according to the depth count */
for (i = 0; i < DepthCount; i++)
{
AcpiOsPrintf ("%s", AcpiGbl_DbDisasmIndent);
}
/* Now print the opcode */
AcpiDbDisplayOpcode (WalkState, Op);
/* Resolve a name reference */
if ((Op->Opcode == AML_INT_NAMEPATH_OP && Op->Value.Name) &&
(Op->Parent) &&
(AcpiGbl_DbOpt_verbose))
{
AcpiPsDisplayObjectPathname (WalkState, Op);
}
AcpiOsPrintf ("\n");
/* Get the next node in the tree */
Op = AcpiPsGetDepthNext (Origin, Op);
LastDepth = DepthCount;
NumOpcodes--;
if (!NumOpcodes)
{
Op = NULL;
}
}
/* Close the last block(s) */
/* In verbose mode, print the AML offset, opcode and depth count */
DepthCount = LastDepth -1;
for (i = 0; i < LastDepth; i++)
VERBOSE_PRINT ((DB_FULL_OP_INFO, (unsigned) Op->AmlOffset, Op->Opcode, DepthCount));
/* Indent the output according to the depth count */
for (i = 0; i < DepthCount; i++)
{
VERBOSE_PRINT ((DB_NO_OP_INFO, LastDepth - i));
for (j = 0; j < DepthCount; j++)
{
AcpiOsPrintf ("%s", AcpiGbl_DbDisasmIndent);
}
AcpiOsPrintf ("}\n");
DepthCount--;
AcpiOsPrintf ("%s", AcpiGbl_DbDisasmIndent);
}
/* Now print the opcode */
AcpiDbDisplayOpcode (WalkState, Op);
/* Resolve a name reference */
if ((Op->Opcode == AML_INT_NAMEPATH_OP && Op->Value.Name) &&
(Op->Parent) &&
(AcpiGbl_DbOpt_verbose))
{
AcpiPsDisplayObjectPathname (WalkState, Op);
}
AcpiOsPrintf ("\n");
/* Get the next node in the tree */
Op = AcpiPsGetDepthNext (Origin, Op);
LastDepth = DepthCount;
NumOpcodes--;
if (!NumOpcodes)
{
Op = NULL;
}
}
else
/* Close the last block(s) */
DepthCount = LastDepth -1;
for (i = 0; i < LastDepth; i++)
{
AcpiDbDisplayOpcode (WalkState, Op);
VERBOSE_PRINT ((DB_NO_OP_INFO, LastDepth - i));
for (j = 0; j < DepthCount; j++)
{
AcpiOsPrintf ("%s", AcpiGbl_DbDisasmIndent);
}
AcpiOsPrintf ("}\n");
DepthCount--;
}
}
@ -557,7 +552,6 @@ AcpiDbDisplayPath (
return;
}
if (OpInfo->Flags & AML_CREATE)
{
/* Field creation - check for a fully qualified namepath */
@ -630,7 +624,6 @@ AcpiDbDisplayPath (
AcpiOsPrintf ("%4.4s", NamePath->Value.String);
}
}
else
{
Name = AcpiPsGetName (Search);
@ -678,24 +671,20 @@ AcpiDbDisplayOpcode (
AcpiOsPrintf ("<NULL OP PTR>");
}
/* op and arguments */
switch (Op->Opcode)
{
case AML_BYTE_OP:
if (AcpiGbl_DbOpt_verbose)
{
AcpiOsPrintf ("(UINT8) 0x%2.2X", Op->Value.Integer8);
}
else
{
AcpiOsPrintf ("0x%2.2X", Op->Value.Integer8);
}
break;
@ -705,12 +694,10 @@ AcpiDbDisplayOpcode (
{
AcpiOsPrintf ("(UINT16) 0x%4.4X", Op->Value.Integer16);
}
else
{
AcpiOsPrintf ("0x%4.4X", Op->Value.Integer16);
}
break;
@ -720,12 +707,10 @@ AcpiDbDisplayOpcode (
{
AcpiOsPrintf ("(UINT32) 0x%8.8X", Op->Value.Integer32);
}
else
{
AcpiOsPrintf ("0x%8.8X", Op->Value.Integer32);
}
break;
@ -736,13 +721,11 @@ AcpiDbDisplayOpcode (
AcpiOsPrintf ("(UINT64) 0x%8.8X%8.8X", Op->Value.Integer64.Hi,
Op->Value.Integer64.Lo);
}
else
{
AcpiOsPrintf ("0x%8.8X%8.8X", Op->Value.Integer64.Hi,
Op->Value.Integer64.Lo);
}
break;
@ -752,12 +735,10 @@ AcpiDbDisplayOpcode (
{
AcpiOsPrintf ("\"%s\"", Op->Value.String);
}
else
{
AcpiOsPrintf ("<\"NULL STRING PTR\">");
}
break;
@ -767,12 +748,10 @@ AcpiDbDisplayOpcode (
{
AcpiOsPrintf ("\"%s\"", Op->Value.String);
}
else
{
AcpiOsPrintf ("\"<NULL STATIC STRING PTR>\"");
}
break;
@ -806,7 +785,6 @@ AcpiDbDisplayOpcode (
{
AcpiOsPrintf ("ByteList (Length 0x%8.8X) ", Op->Value.Integer32);
}
else
{
AcpiOsPrintf ("0x%2.2X", Op->Value.Integer32);
@ -819,7 +797,6 @@ AcpiDbDisplayOpcode (
AcpiOsPrintf (", 0x%2.2X", ByteData[i]);
}
}
break;
@ -839,7 +816,6 @@ AcpiDbDisplayOpcode (
AcpiDbDecodeInternalObject (WalkState->Results->Results.ObjDesc [WalkState->Results->Results.NumResults-1]);
}
#endif
break;
}
@ -862,15 +838,12 @@ AcpiDbDisplayOpcode (
Name = AcpiPsGetName (Op);
AcpiOsPrintf (" %4.4s", &Name);
if (AcpiGbl_DbOpt_verbose)
if ((AcpiGbl_DbOpt_verbose) && (Op->Opcode != AML_INT_NAMEDFIELD_OP))
{
AcpiOsPrintf (" (Path \\");
AcpiDbDisplayPath (Op);
AcpiOsPrintf (")");
AcpiPsDisplayObjectPathname (WalkState, Op);
}
}
}
#endif /* ENABLE_DEBUGGER */

View File

@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: dbdisply - debug display commands
* $Revision: 57 $
* $Revision: 60 $
*
******************************************************************************/
@ -168,7 +168,6 @@ AcpiDbGetPointer (
/* Simple flat pointer */
ObjPtr = (void *) STRTOUL (Target, NULL, 16);
#endif
return (ObjPtr);
@ -228,6 +227,7 @@ AcpiDbDecodeAndDisplayObject (
{
void *ObjPtr;
ACPI_NAMESPACE_NODE *Node;
ACPI_OPERAND_OBJECT *ObjDesc;
UINT32 Display = DB_BYTE_DISPLAY;
NATIVE_CHAR Buffer[80];
ACPI_BUFFER RetBuf;
@ -259,7 +259,6 @@ AcpiDbDecodeAndDisplayObject (
}
}
RetBuf.Length = sizeof (Buffer);
RetBuf.Pointer = Buffer;
@ -314,7 +313,6 @@ AcpiDbDecodeAndDisplayObject (
return;
}
AcpiUtDumpBuffer (ObjPtr, sizeof (ACPI_PARSE_OBJECT), Display, ACPI_UINT32_MAX);
AcpiDbDumpParserDescriptor ((ACPI_PARSE_OBJECT *) ObjPtr);
}
@ -368,17 +366,18 @@ AcpiDbDecodeAndDisplayObject (
AcpiUtDumpBuffer ((void *) Node, sizeof (ACPI_NAMESPACE_NODE), Display, ACPI_UINT32_MAX);
AcpiExDumpNode (Node, 1);
if (Node->Object)
ObjDesc = AcpiNsGetAttachedObject (Node);
if (ObjDesc)
{
AcpiOsPrintf ("\nAttached Object (%p):\n", Node->Object);
if (!AcpiOsReadable (Node->Object, sizeof (ACPI_OPERAND_OBJECT)))
AcpiOsPrintf ("\nAttached Object (%p):\n", ObjDesc);
if (!AcpiOsReadable (ObjDesc, sizeof (ACPI_OPERAND_OBJECT)))
{
AcpiOsPrintf ("Invalid internal ACPI Object at address %p\n", Node->Object);
AcpiOsPrintf ("Invalid internal ACPI Object at address %p\n", ObjDesc);
return;
}
AcpiUtDumpBuffer ((void *) Node->Object, sizeof (ACPI_OPERAND_OBJECT), Display, ACPI_UINT32_MAX);
AcpiExDumpObjectDescriptor (Node->Object, 1);
AcpiUtDumpBuffer ((void *) ObjDesc, sizeof (ACPI_OPERAND_OBJECT), Display, ACPI_UINT32_MAX);
AcpiExDumpObjectDescriptor (ObjDesc, 1);
}
}
@ -475,7 +474,6 @@ AcpiDbDisplayInternalObject (
return;
}
/* Decode the object type */
else if (VALID_DESCRIPTOR_TYPE (ObjDesc, ACPI_DESC_TYPE_PARSER))
@ -488,6 +486,7 @@ AcpiDbDisplayInternalObject (
AcpiOsPrintf ("<Node> Name %4.4s Type-%s",
&((ACPI_NAMESPACE_NODE *)ObjDesc)->Name,
AcpiUtGetTypeName (((ACPI_NAMESPACE_NODE *) ObjDesc)->Type));
if (((ACPI_NAMESPACE_NODE *) ObjDesc)->Flags & ANOBJ_METHOD_ARG)
{
AcpiOsPrintf (" [Method Arg]");
@ -623,9 +622,9 @@ AcpiDbDisplayMethodInfo (
}
ObjDesc = WalkState->MethodDesc;
Node = WalkState->MethodNode;
Node = WalkState->MethodNode;
NumArgs = ObjDesc->Method.ParamCount;
NumArgs = ObjDesc->Method.ParamCount;
Concurrency = ObjDesc->Method.Concurrency;
AcpiOsPrintf ("Currently executing control method is [%4.4s]\n", &Node->Name);
@ -682,7 +681,6 @@ AcpiDbDisplayMethodInfo (
break;
}
Op = AcpiPsGetDepthNext (StartOp, Op);
}
@ -724,8 +722,6 @@ AcpiDbDisplayLocals (void)
ObjDesc = WalkState->MethodDesc;
Node = WalkState->MethodNode;
AcpiOsPrintf ("Local Variables for method [%4.4s]:\n", &Node->Name);
for (i = 0; i < MTH_NUM_LOCALS; i++)
@ -768,12 +764,13 @@ AcpiDbDisplayArguments (void)
}
ObjDesc = WalkState->MethodDesc;
Node = WalkState->MethodNode;
Node = WalkState->MethodNode;
NumArgs = ObjDesc->Method.ParamCount;
NumArgs = ObjDesc->Method.ParamCount;
Concurrency = ObjDesc->Method.Concurrency;
AcpiOsPrintf ("Method [%4.4s] has %X arguments, max concurrency = %X\n", &Node->Name, NumArgs, Concurrency);
AcpiOsPrintf ("Method [%4.4s] has %X arguments, max concurrency = %X\n",
&Node->Name, NumArgs, Concurrency);
for (i = 0; i < NumArgs; i++)
{
@ -821,7 +818,8 @@ AcpiDbDisplayResults (void)
NumResults = WalkState->Results->Results.NumResults;
}
AcpiOsPrintf ("Method [%4.4s] has %X stacked result objects\n", &Node->Name, NumResults);
AcpiOsPrintf ("Method [%4.4s] has %X stacked result objects\n",
&Node->Name, NumResults);
for (i = 0; i < NumResults; i++)
{
@ -860,7 +858,6 @@ AcpiDbDisplayCallingTree (void)
}
Node = WalkState->MethodNode;
AcpiOsPrintf ("Current Control Method Call Tree\n");
for (i = 0; WalkState; i++)
@ -927,7 +924,6 @@ AcpiDbDisplayArgumentObject (
ACPI_WALK_STATE *WalkState)
{
if (!AcpiGbl_CmSingleStep)
{
return;

View File

@ -2,7 +2,7 @@
*
* Module Name: dbfileio - Debugger file I/O commands. These can't usually
* be used when running the debugger in Ring 0 (Kernel mode)
* $Revision: 53 $
* $Revision: 54 $
*
******************************************************************************/
@ -463,7 +463,7 @@ AcpiDbLoadAcpiTable (
Status = AeLocalLoadTable (AcpiGbl_DbTablePtr);
if (ACPI_FAILURE (Status))
{
if (Status == AE_EXIST)
if (Status == AE_ALREADY_EXISTS)
{
AcpiOsPrintf ("Table %4.4s is already installed\n",
&AcpiGbl_DbTablePtr->Signature);

View File

@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: dbstats - Generation and display of ACPI table statistics
* $Revision: 47 $
* $Revision: 49 $
*
******************************************************************************/
@ -169,6 +169,7 @@ void
AcpiDbEnumerateObject (
ACPI_OPERAND_OBJECT *ObjDesc)
{
ACPI_OPERAND_OBJECT *ObjDesc2;
UINT32 Type;
UINT32 i;
@ -210,7 +211,16 @@ AcpiDbEnumerateObject (
AcpiDbEnumerateObject (ObjDesc->Device.AddrHandler);
break;
case ACPI_TYPE_BUFFER_FIELD:
ObjDesc2 = AcpiNsGetSecondaryObject (ObjDesc);
if (ObjDesc2)
{
AcpiGbl_ObjTypeCount [INTERNAL_TYPE_EXTRA]++;
}
break;
case ACPI_TYPE_REGION:
AcpiGbl_ObjTypeCount [INTERNAL_TYPE_EXTRA]++;
AcpiDbEnumerateObject (ObjDesc->Region.AddrHandler);
break;
@ -264,7 +274,7 @@ AcpiDbClassifyOneObject (
AcpiGbl_NumNodes++;
Node = (ACPI_NAMESPACE_NODE *) ObjHandle;
ObjDesc = ((ACPI_NAMESPACE_NODE *) ObjHandle)->Object;
ObjDesc = AcpiNsGetAttachedObject (Node);
AcpiDbEnumerateObject (ObjDesc);
@ -517,6 +527,7 @@ AcpiDbDisplayStatistics (
AcpiOsPrintf ("NotifyHandler %3d\n", sizeof (ACPI_OBJECT_NOTIFY_HANDLER));
AcpiOsPrintf ("AddrHandler %3d\n", sizeof (ACPI_OBJECT_ADDR_HANDLER));
AcpiOsPrintf ("Extra %3d\n", sizeof (ACPI_OBJECT_EXTRA));
AcpiOsPrintf ("Data %3d\n", sizeof (ACPI_OBJECT_DATA));
AcpiOsPrintf ("\n");

View File

@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: dbxface - AML Debugger external interfaces
* $Revision: 45 $
* $Revision: 46 $
*
******************************************************************************/
@ -434,5 +434,4 @@ AcpiDbTerminate (void)
}
#endif /* ENABLE_DEBUGGER */

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: dsfield - Dispatcher field routines
* $Revision: 46 $
* $Revision: 56 $
*
*****************************************************************************/
@ -127,7 +127,6 @@
#define _COMPONENT ACPI_DISPATCHER
MODULE_NAME ("dsfield")
/*******************************************************************************
*
@ -139,10 +138,10 @@
*
* RETURN: Status
*
* DESCRIPTION: Execute the CreateField operators:
* DESCRIPTION: Execute the CreateField operators:
* CreateBitFieldOp,
* CreateByteFieldOp,
* CreateWordFieldOp,
* CreateByteFieldOp,
* CreateWordFieldOp,
* CreateDWordFieldOp,
* CreateQWordFieldOp,
* CreateFieldOp (all of which define fields in buffers)
@ -158,6 +157,8 @@ AcpiDsCreateBufferField (
ACPI_NAMESPACE_NODE *Node;
ACPI_STATUS Status;
ACPI_OPERAND_OBJECT *ObjDesc;
ACPI_OPERAND_OBJECT *SecondDesc = NULL;
UINT32 Flags;
FUNCTION_TRACE ("DsCreateBufferField");
@ -181,12 +182,26 @@ AcpiDsCreateBufferField (
return_ACPI_STATUS (AE_AML_NO_OPERAND);
}
/*
* During the load phase, we want to enter the name of the field into
* the namespace. During the execute phase (when we evaluate the size
* operand), we want to lookup the name
*/
if (WalkState->ParseFlags & ACPI_PARSE_EXECUTE)
{
Flags = NS_NO_UPSEARCH | NS_DONT_OPEN_SCOPE;
}
else
{
Flags = NS_NO_UPSEARCH | NS_DONT_OPEN_SCOPE | NS_ERROR_IF_FOUND;
}
/*
* Enter the NameString into the namespace
*/
Status = AcpiNsLookup (WalkState->ScopeInfo, Arg->Value.String,
INTERNAL_TYPE_DEF_ANY, IMODE_LOAD_PASS1,
NS_NO_UPSEARCH | NS_DONT_OPEN_SCOPE,
Flags,
WalkState, &(Node));
if (ACPI_FAILURE (Status))
{
@ -204,7 +219,8 @@ AcpiDsCreateBufferField (
* we need to create the field object. Otherwise, this was a lookup of an
* existing node and we don't want to create the field object again.
*/
if (Node->Object)
ObjDesc = AcpiNsGetAttachedObject (Node);
if (ObjDesc)
{
return_ACPI_STATUS (AE_OK);
}
@ -223,29 +239,23 @@ AcpiDsCreateBufferField (
goto Cleanup;
}
/*
* Allocate a method object for this field unit
*/
ObjDesc->BufferField.Extra = AcpiUtCreateInternalObject (
INTERNAL_TYPE_EXTRA);
if (!ObjDesc->BufferField.Extra)
{
Status = AE_NO_MEMORY;
goto Cleanup;
}
/*
* Remember location in AML stream of the field unit
* opcode and operands -- since the buffer and index
* operands must be evaluated.
*/
ObjDesc->BufferField.Extra->Extra.AmlStart = ((ACPI_PARSE2_OBJECT *) Op)->Data;
ObjDesc->BufferField.Extra->Extra.AmlLength = ((ACPI_PARSE2_OBJECT *) Op)->Length;
ObjDesc->BufferField.Node = Node;
SecondDesc = ObjDesc->Common.NextObject;
SecondDesc->Extra.AmlStart = ((ACPI_PARSE2_OBJECT *) Op)->Data;
SecondDesc->Extra.AmlLength = ((ACPI_PARSE2_OBJECT *) Op)->Length;
ObjDesc->BufferField.Node = Node;
/* Attach constructed field descriptor to parent node */
/* Attach constructed field descriptors to parent node */
Status = AcpiNsAttachObject (Node, ObjDesc, ACPI_TYPE_BUFFER_FIELD);
if (ACPI_FAILURE (Status))
{
goto Cleanup;
}
Cleanup:
@ -257,7 +267,6 @@ AcpiDsCreateBufferField (
}
/*******************************************************************************
*
* FUNCTION: AcpiDsGetFieldNames
@ -310,36 +319,48 @@ AcpiDsGetFieldNames (
case AML_INT_ACCESSFIELD_OP:
/*
* Get a new AccessType and AccessAttribute for all
* entries (until end or another AccessAs keyword)
* Get a new AccessType and AccessAttribute -- to be used for all
* field units that follow, until field end or another AccessAs keyword.
*
* In FieldFlags, preserve the flag bits other than the ACCESS_TYPE bits
*/
Info->FieldFlags = (UINT8) ((Info->FieldFlags & FIELD_ACCESS_TYPE_MASK) ||
((UINT8) (Arg->Value.Integer >> 8)));
Info->FieldFlags = (UINT8) ((Info->FieldFlags & ~(AML_FIELD_ACCESS_TYPE_MASK)) |
((UINT8) (Arg->Value.Integer32 >> 8)));
Info->Attribute = (UINT8) (Arg->Value.Integer32);
break;
case AML_INT_NAMEDFIELD_OP:
/* Enter a new field name into the namespace */
/* Lookup the name */
Status = AcpiNsLookup (WalkState->ScopeInfo,
(NATIVE_CHAR *) &((ACPI_PARSE2_OBJECT *)Arg)->Name,
Info->FieldType, IMODE_LOAD_PASS1,
NS_NO_UPSEARCH | NS_DONT_OPEN_SCOPE,
Info->FieldType, IMODE_EXECUTE, NS_DONT_OPEN_SCOPE,
NULL, &Info->FieldNode);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
if (Status != AE_ALREADY_EXISTS)
{
return_ACPI_STATUS (Status);
}
REPORT_ERROR (("Field name [%4.4s] already exists in current scope\n",
&((ACPI_PARSE2_OBJECT *)Arg)->Name));
}
/* Create and initialize an object for the new Field Node */
Info->FieldBitLength = Arg->Value.Size;
Status = AcpiExPrepFieldValue (Info);
if (ACPI_FAILURE (Status))
else
{
return_ACPI_STATUS (Status);
Arg->Node = Info->FieldNode;
Info->FieldBitLength = Arg->Value.Size;
/* Create and initialize an object for the new Field Node */
Status = AcpiExPrepFieldValue (Info);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
}
/* Keep track of bit position for the next field */
@ -409,6 +430,7 @@ AcpiDsCreateField (
Arg = Arg->Next;
Info.FieldFlags = Arg->Value.Integer8;
Info.Attribute = 0;
/* Each remaining arg is a Named Field */
@ -421,6 +443,90 @@ AcpiDsCreateField (
}
/*******************************************************************************
*
* FUNCTION: AcpiDsInitFieldObjects
*
* PARAMETERS: Op - Op containing the Field definition and args
* ` WalkState - Current method state
*
* RETURN: Status
*
* DESCRIPTION: For each "Field Unit" name in the argument list that is
* part of the field declaration, enter the name into the
* namespace.
*
******************************************************************************/
ACPI_STATUS
AcpiDsInitFieldObjects (
ACPI_PARSE_OBJECT *Op,
ACPI_WALK_STATE *WalkState)
{
ACPI_STATUS Status = AE_AML_ERROR;
ACPI_PARSE_OBJECT *Arg = NULL;
ACPI_NAMESPACE_NODE *Node;
UINT8 Type = 0;
FUNCTION_TRACE_PTR ("DsInitFieldObjects", Op);
switch (WalkState->Opcode)
{
case AML_FIELD_OP:
Arg = AcpiPsGetArg (Op, 2);
Type = INTERNAL_TYPE_REGION_FIELD;
break;
case AML_BANK_FIELD_OP:
Arg = AcpiPsGetArg (Op, 4);
Type = INTERNAL_TYPE_BANK_FIELD;
break;
case AML_INDEX_FIELD_OP:
Arg = AcpiPsGetArg (Op, 3);
Type = INTERNAL_TYPE_INDEX_FIELD;
break;
}
/*
* Walk the list of entries in the FieldList
*/
while (Arg)
{
/* Ignore OFFSET and ACCESSAS terms here */
if (Arg->Opcode == AML_INT_NAMEDFIELD_OP)
{
Status = AcpiNsLookup (WalkState->ScopeInfo,
(NATIVE_CHAR *) &((ACPI_PARSE2_OBJECT *)Arg)->Name,
Type, IMODE_LOAD_PASS1,
NS_NO_UPSEARCH | NS_DONT_OPEN_SCOPE | NS_ERROR_IF_FOUND,
NULL, &Node);
if (ACPI_FAILURE (Status))
{
if (Status != AE_ALREADY_EXISTS)
{
return_ACPI_STATUS (Status);
}
REPORT_ERROR (("Field name [%4.4s] already exists in current scope\n",
&((ACPI_PARSE2_OBJECT *)Arg)->Name));
}
Arg->Node = Node;
}
/* Move on to next field in the list */
Arg = Arg->Next;
}
return_ACPI_STATUS (Status);
}
/*******************************************************************************
*
* FUNCTION: AcpiDsCreateBankField

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: dsmethod - Parser/Interpreter interface - control method parsing
* $Revision: 69 $
* $Revision: 73 $
*
*****************************************************************************/
@ -177,7 +177,7 @@ AcpiDsParseMethod (
/* Extract the method object from the method Node */
Node = (ACPI_NAMESPACE_NODE *) ObjHandle;
ObjDesc = Node->Object;
ObjDesc = AcpiNsGetAttachedObject (Node);
if (!ObjDesc)
{
return_ACPI_STATUS (AE_NULL_OBJECT);
@ -221,11 +221,11 @@ AcpiDsParseMethod (
return_ACPI_STATUS (AE_NO_MEMORY);
}
Status = AcpiDsInitAmlWalk (WalkState, Op, Node, ObjDesc->Method.AmlStart,
Status = AcpiDsInitAmlWalk (WalkState, Op, Node, ObjDesc->Method.AmlStart,
ObjDesc->Method.AmlLength, NULL, NULL, 1);
if (ACPI_FAILURE (Status))
{
/* TBD: delete walk state */
AcpiDsDeleteWalkState (WalkState);
return_ACPI_STATUS (Status);
}
@ -351,7 +351,7 @@ AcpiDsBeginMethodExecution (
ACPI_STATUS
AcpiDsCallControlMethod (
ACPI_WALK_LIST *WalkList,
ACPI_THREAD_STATE *Thread,
ACPI_WALK_STATE *ThisWalkState,
ACPI_PARSE_OBJECT *Op) /* TBD: This operand is obsolete */
{
@ -411,12 +411,12 @@ AcpiDsCallControlMethod (
goto Cleanup;
}
Status = AcpiDsInitAmlWalk (NextWalkState, Op, MethodNode,
ObjDesc->Method.AmlStart, ObjDesc->Method.AmlLength,
Status = AcpiDsInitAmlWalk (NextWalkState, Op, MethodNode,
ObjDesc->Method.AmlStart, ObjDesc->Method.AmlLength,
NULL, NULL, 1);
if (ACPI_FAILURE (Status))
{
/* TBD: delete walk state */
AcpiDsDeleteWalkState (NextWalkState);
goto Cleanup;
}
@ -429,7 +429,7 @@ AcpiDsCallControlMethod (
/* 2) Execute: Create a new state for the preempting walk */
NextWalkState = AcpiDsCreateWalkState (ObjDesc->Method.OwningId,
NULL, ObjDesc, WalkList);
NULL, ObjDesc, Thread);
if (!NextWalkState)
{
Status = AE_NO_MEMORY;
@ -440,12 +440,12 @@ AcpiDsCallControlMethod (
* The resolved arguments were put on the previous walk state's operand
* stack. Operands on the previous walk state stack always
* start at index 0.
* Null terminate the list of arguments
* Null terminate the list of arguments
*/
ThisWalkState->Operands [ThisWalkState->NumOperands] = NULL;
Status = AcpiDsInitAmlWalk (NextWalkState, NULL, MethodNode,
ObjDesc->Method.AmlStart, ObjDesc->Method.AmlLength,
Status = AcpiDsInitAmlWalk (NextWalkState, NULL, MethodNode,
ObjDesc->Method.AmlStart, ObjDesc->Method.AmlLength,
&ThisWalkState->Operands[0], NULL, 3);
if (ACPI_FAILURE (Status))
{

View File

@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: dsmthdat - control method arguments and local variables
* $Revision: 49 $
* $Revision: 53 $
*
******************************************************************************/
@ -141,6 +141,12 @@
* This allows RefOf and DeRefOf to work properly for these
* special data types.
*
* NOTES: WalkState fields are initialized to zero by the
* ACPI_MEM_CALLOCATE().
*
* A pseudo-Namespace Node is assigned to each argument and local
* so that RefOf() can return a pointer to the Node.
*
******************************************************************************/
ACPI_STATUS
@ -152,13 +158,6 @@ AcpiDsMethodDataInit (
FUNCTION_TRACE ("DsMethodDataInit");
/*
* WalkState fields are initialized to zero by the
* ACPI_MEM_CALLOCATE().
*
* An Node is assigned to each argument and local so
* that RefOf() can return a pointer to the Node.
*/
/* Init the method arguments */
@ -207,52 +206,38 @@ AcpiDsMethodDataDeleteAll (
ACPI_WALK_STATE *WalkState)
{
UINT32 Index;
ACPI_OPERAND_OBJECT *Object;
FUNCTION_TRACE ("DsMethodDataDeleteAll");
/* Delete the locals */
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Deleting local variables in %p\n", WalkState));
/* Detach the locals */
for (Index = 0; Index < MTH_NUM_LOCALS; Index++)
{
Object = WalkState->LocalVariables[Index].Object;
if (Object)
if (WalkState->LocalVariables[Index].Object)
{
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Deleting Local%d=%p\n", Index, Object));
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Deleting Local%d=%p\n",
Index, WalkState->LocalVariables[Index].Object));
/* Remove first */
/* Detach object (if present) and remove a reference */
WalkState->LocalVariables[Index].Object = NULL;
/* Was given a ref when stored */
AcpiUtRemoveReference (Object);
AcpiNsDetachObject (&WalkState->LocalVariables[Index]);
}
}
/* Delete the arguments */
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Deleting arguments in %p\n", WalkState));
/* Detach the arguments */
for (Index = 0; Index < MTH_NUM_ARGS; Index++)
{
Object = WalkState->Arguments[Index].Object;
if (Object)
if (WalkState->Arguments[Index].Object)
{
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Deleting Arg%d=%p\n", Index, Object));
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Deleting Arg%d=%p\n",
Index, WalkState->Arguments[Index].Object));
/* Remove first */
/* Detach object (if present) and remove a reference */
WalkState->Arguments[Index].Object = NULL;
/* Was given a ref when stored */
AcpiUtRemoveReference (Object);
AcpiNsDetachObject (&WalkState->Arguments[Index]);
}
}
@ -270,7 +255,9 @@ AcpiDsMethodDataDeleteAll (
*
* RETURN: Status
*
* DESCRIPTION: Initialize arguments for a method
* DESCRIPTION: Initialize arguments for a method. The parameter list is a list
* of ACPI operand objects, either null terminated or whose length
* is defined by MaxParamCount.
*
******************************************************************************/
@ -281,8 +268,7 @@ AcpiDsMethodDataInitArgs (
ACPI_WALK_STATE *WalkState)
{
ACPI_STATUS Status;
UINT32 Mindex;
UINT32 Pindex;
UINT32 Index = 0;
FUNCTION_TRACE_PTR ("DsMethodDataInitArgs", Params);
@ -296,211 +282,27 @@ AcpiDsMethodDataInitArgs (
/* Copy passed parameters into the new method stack frame */
for (Pindex = Mindex = 0;
(Mindex < MTH_NUM_ARGS) && (Pindex < MaxParamCount);
Mindex++)
while ((Index < MTH_NUM_ARGS) && (Index < MaxParamCount) && Params[Index])
{
if (Params[Pindex])
/*
* A valid parameter.
* Store the argument in the method/walk descriptor
*/
Status = AcpiDsStoreObjectToLocal (AML_ARG_OP, Index, Params[Index],
WalkState);
if (ACPI_FAILURE (Status))
{
/*
* A valid parameter.
* Set the current method argument to the
* Params[Pindex++] argument object descriptor
*/
Status = AcpiDsStoreObjectToLocal (AML_ARG_OP, Mindex,
Params[Pindex], WalkState);
if (ACPI_FAILURE (Status))
{
break;
}
Pindex++;
return_ACPI_STATUS (Status);
}
else
{
break;
}
Index++;
}
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%d args passed to method\n", Pindex));
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%d args passed to method\n", Index));
return_ACPI_STATUS (AE_OK);
}
/*******************************************************************************
*
* FUNCTION: AcpiDsMethodDataGetEntry
*
* PARAMETERS: Opcode - Either AML_LOCAL_OP or AML_ARG_OP
* Index - Which localVar or argument to get
* Entry - Pointer to where a pointer to the stack
* entry is returned.
* WalkState - Current walk state object
*
* RETURN: Status
*
* DESCRIPTION: Get the address of the object entry given by Opcode:Index
*
******************************************************************************/
ACPI_STATUS
AcpiDsMethodDataGetEntry (
UINT16 Opcode,
UINT32 Index,
ACPI_WALK_STATE *WalkState,
ACPI_OPERAND_OBJECT ***Entry)
{
FUNCTION_TRACE_U32 ("DsMethodDataGetEntry", Index);
/*
* Get the requested object.
* The stack "Opcode" is either a LocalVariable or an Argument
*/
switch (Opcode)
{
case AML_LOCAL_OP:
if (Index > MTH_MAX_LOCAL)
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "LocalVar index %d is invalid (max %d)\n",
Index, MTH_MAX_LOCAL));
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
*Entry = (ACPI_OPERAND_OBJECT **)
&WalkState->LocalVariables[Index].Object;
break;
case AML_ARG_OP:
if (Index > MTH_MAX_ARG)
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Arg index %d is invalid (max %d)\n",
Index, MTH_MAX_ARG));
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
*Entry = (ACPI_OPERAND_OBJECT **)
&WalkState->Arguments[Index].Object;
break;
default:
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Opcode %d is invalid\n", Opcode));
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
return_ACPI_STATUS (AE_OK);
}
/*******************************************************************************
*
* FUNCTION: AcpiDsMethodDataSetEntry
*
* PARAMETERS: Opcode - Either AML_LOCAL_OP or AML_ARG_OP
* Index - Which localVar or argument to get
* Object - Object to be inserted into the stack entry
* WalkState - Current walk state object
*
* RETURN: Status
*
* DESCRIPTION: Insert an object onto the method stack at entry Opcode:Index.
*
******************************************************************************/
ACPI_STATUS
AcpiDsMethodDataSetEntry (
UINT16 Opcode,
UINT32 Index,
ACPI_OPERAND_OBJECT *Object,
ACPI_WALK_STATE *WalkState)
{
ACPI_STATUS Status;
ACPI_OPERAND_OBJECT **Entry;
FUNCTION_TRACE ("DsMethodDataSetEntry");
/* Get a pointer to the stack entry to set */
Status = AcpiDsMethodDataGetEntry (Opcode, Index, WalkState, &Entry);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
/* Increment ref count so object can't be deleted while installed */
AcpiUtAddReference (Object);
/* Install the object into the stack entry */
*Entry = Object;
return_ACPI_STATUS (AE_OK);
}
/*******************************************************************************
*
* FUNCTION: AcpiDsMethodDataGetType
*
* PARAMETERS: Opcode - Either AML_LOCAL_OP or AML_ARG_OP
* Index - Which localVar or argument whose type
* to get
* WalkState - Current walk state object
*
* RETURN: Data type of selected Arg or Local
* Used only in ExecMonadic2()/TypeOp.
*
******************************************************************************/
ACPI_OBJECT_TYPE8
AcpiDsMethodDataGetType (
UINT16 Opcode,
UINT32 Index,
ACPI_WALK_STATE *WalkState)
{
ACPI_STATUS Status;
ACPI_OPERAND_OBJECT **Entry;
ACPI_OPERAND_OBJECT *Object;
FUNCTION_TRACE ("DsMethodDataGetType");
/* Get a pointer to the requested stack entry */
Status = AcpiDsMethodDataGetEntry (Opcode, Index, WalkState, &Entry);
if (ACPI_FAILURE (Status))
{
return_VALUE ((ACPI_TYPE_NOT_FOUND));
}
/* Get the object from the method stack */
Object = *Entry;
/* Get the object type */
if (!Object)
{
/* Any == 0 => "uninitialized" -- see spec 15.2.3.5.2.28 */
return_VALUE (ACPI_TYPE_ANY);
}
return_VALUE (Object->Common.Type);
}
/*******************************************************************************
*
* FUNCTION: AcpiDsMethodDataGetNode
@ -514,33 +316,34 @@ AcpiDsMethodDataGetType (
*
******************************************************************************/
ACPI_NAMESPACE_NODE *
ACPI_STATUS
AcpiDsMethodDataGetNode (
UINT16 Opcode,
UINT32 Index,
ACPI_WALK_STATE *WalkState)
ACPI_WALK_STATE *WalkState,
ACPI_NAMESPACE_NODE **Node)
{
ACPI_NAMESPACE_NODE *Node = NULL;
FUNCTION_TRACE ("DsMethodDataGetNode");
/*
* Method Locals and Arguments are supported
*/
switch (Opcode)
{
case AML_LOCAL_OP:
if (Index > MTH_MAX_LOCAL)
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Local index %d is invalid (max %d)\n",
Index, MTH_MAX_LOCAL));
return_PTR (Node);
return_ACPI_STATUS (AE_AML_INVALID_INDEX);
}
Node = &WalkState->LocalVariables[Index];
break;
/* Return a pointer to the pseudo-node */
*Node = &WalkState->LocalVariables[Index];
break;
case AML_ARG_OP:
@ -548,20 +351,120 @@ AcpiDsMethodDataGetNode (
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Arg index %d is invalid (max %d)\n",
Index, MTH_MAX_ARG));
return_PTR (Node);
return_ACPI_STATUS (AE_AML_INVALID_INDEX);
}
Node = &WalkState->Arguments[Index];
break;
/* Return a pointer to the pseudo-node */
*Node = &WalkState->Arguments[Index];
break;
default:
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Opcode %d is invalid\n", Opcode));
return_ACPI_STATUS (AE_AML_BAD_OPCODE);
break;
}
return_ACPI_STATUS (AE_OK);
}
return_PTR (Node);
/*******************************************************************************
*
* FUNCTION: AcpiDsMethodDataSetValue
*
* PARAMETERS: Opcode - Either AML_LOCAL_OP or AML_ARG_OP
* Index - Which localVar or argument to get
* Object - Object to be inserted into the stack entry
* WalkState - Current walk state object
*
* RETURN: Status
*
* DESCRIPTION: Insert an object onto the method stack at entry Opcode:Index.
*
******************************************************************************/
ACPI_STATUS
AcpiDsMethodDataSetValue (
UINT16 Opcode,
UINT32 Index,
ACPI_OPERAND_OBJECT *Object,
ACPI_WALK_STATE *WalkState)
{
ACPI_STATUS Status;
ACPI_NAMESPACE_NODE *Node;
FUNCTION_TRACE ("DsMethodDataSetValue");
/* Get the namespace node for the arg/local */
Status = AcpiDsMethodDataGetNode (Opcode, Index, WalkState, &Node);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
/* Increment ref count so object can't be deleted while installed */
AcpiUtAddReference (Object);
/* Install the object into the stack entry */
Node->Object = Object;
return_ACPI_STATUS (AE_OK);
}
/*******************************************************************************
*
* FUNCTION: AcpiDsMethodDataGetType
*
* PARAMETERS: Opcode - Either AML_LOCAL_OP or AML_ARG_OP
* Index - Which localVar or argument whose type
* to get
* WalkState - Current walk state object
*
* RETURN: Data type of current value of the selected Arg or Local
*
******************************************************************************/
ACPI_OBJECT_TYPE8
AcpiDsMethodDataGetType (
UINT16 Opcode,
UINT32 Index,
ACPI_WALK_STATE *WalkState)
{
ACPI_STATUS Status;
ACPI_NAMESPACE_NODE *Node;
ACPI_OPERAND_OBJECT *Object;
FUNCTION_TRACE ("DsMethodDataGetType");
/* Get the namespace node for the arg/local */
Status = AcpiDsMethodDataGetNode (Opcode, Index, WalkState, &Node);
if (ACPI_FAILURE (Status))
{
return_VALUE ((ACPI_TYPE_NOT_FOUND));
}
/* Get the object */
Object = AcpiNsGetAttachedObject (Node);
if (!Object)
{
/* Uninitialized local/arg, return TYPE_ANY */
return_VALUE (ACPI_TYPE_ANY);
}
/* Get the object type */
return_VALUE (Object->Common.Type);
}
@ -591,7 +494,7 @@ AcpiDsMethodDataGetValue (
ACPI_OPERAND_OBJECT **DestDesc)
{
ACPI_STATUS Status;
ACPI_OPERAND_OBJECT **Entry;
ACPI_NAMESPACE_NODE *Node;
ACPI_OPERAND_OBJECT *Object;
@ -606,26 +509,24 @@ AcpiDsMethodDataGetValue (
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
/* Get the namespace node for the arg/local */
/* Get a pointer to the requested method stack entry */
Status = AcpiDsMethodDataGetEntry (Opcode, Index, WalkState, &Entry);
Status = AcpiDsMethodDataGetNode (Opcode, Index, WalkState, &Node);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
/* Get the object from the method stack */
Object = *Entry;
/* Get the object from the node */
Object = Node->Object;
/* Examine the returned object, it must be valid. */
if (!Object)
{
/*
* Index points to uninitialized object stack value.
* Index points to uninitialized object.
* This means that either 1) The expected argument was
* not passed to the method, or 2) A local variable
* was referenced by the method (via the ASL)
@ -635,25 +536,24 @@ AcpiDsMethodDataGetValue (
{
case AML_ARG_OP:
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Uninitialized Arg[%d] at entry %p\n",
Index, Entry));
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Uninitialized Arg[%d] at node %p\n",
Index, Node));
return_ACPI_STATUS (AE_AML_UNINITIALIZED_ARG);
break;
case AML_LOCAL_OP:
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Uninitialized Local[%d] at entry %p\n",
Index, Entry));
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Uninitialized Local[%d] at node %p\n",
Index, Node));
return_ACPI_STATUS (AE_AML_UNINITIALIZED_LOCAL);
break;
}
}
/*
* Index points to initialized and valid object stack value.
* The Index points to an initialized and valid object.
* Return an additional reference to the object
*/
*DestDesc = Object;
@ -685,39 +585,39 @@ AcpiDsMethodDataDeleteValue (
ACPI_WALK_STATE *WalkState)
{
ACPI_STATUS Status;
ACPI_OPERAND_OBJECT **Entry;
ACPI_NAMESPACE_NODE *Node;
ACPI_OPERAND_OBJECT *Object;
FUNCTION_TRACE ("DsMethodDataDeleteValue");
/* Get a pointer to the requested entry */
/* Get the namespace node for the arg/local */
Status = AcpiDsMethodDataGetEntry (Opcode, Index, WalkState, &Entry);
Status = AcpiDsMethodDataGetNode (Opcode, Index, WalkState, &Node);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
/* Get the current entry in this slot k */
/* Get the associated object */
Object = *Entry;
Object = AcpiNsGetAttachedObject (Node);
/*
* Undefine the Arg or Local by setting its descriptor
* pointer to NULL. Locals/Args can contain both
* ACPI_OPERAND_OBJECTS and ACPI_NAMESPACE_NODEs
*/
*Entry = NULL;
Node->Object = NULL;
if ((Object) &&
(VALID_DESCRIPTOR_TYPE (Object, ACPI_DESC_TYPE_INTERNAL)))
{
/*
* There is a valid object in this slot
* There is a valid object.
* Decrement the reference count by one to balance the
* increment when the object was stored in the slot.
* increment when the object was stored.
*/
AcpiUtRemoveReference (Object);
}
@ -732,14 +632,14 @@ AcpiDsMethodDataDeleteValue (
*
* PARAMETERS: Opcode - Either AML_LOCAL_OP or AML_ARG_OP
* Index - Which localVar or argument to set
* SrcDesc - Value to be stored
* ObjDesc - Value to be stored
* WalkState - Current walk state
*
* RETURN: Status
*
* DESCRIPTION: Store a value in an Arg or Local. The SrcDesc is installed
* DESCRIPTION: Store a value in an Arg or Local. The ObjDesc is installed
* as the new value for the Arg or Local and the reference count
* for SrcDesc is incremented.
* for ObjDesc is incremented.
*
******************************************************************************/
@ -747,48 +647,48 @@ ACPI_STATUS
AcpiDsStoreObjectToLocal (
UINT16 Opcode,
UINT32 Index,
ACPI_OPERAND_OBJECT *SrcDesc,
ACPI_OPERAND_OBJECT *ObjDesc,
ACPI_WALK_STATE *WalkState)
{
ACPI_STATUS Status;
ACPI_OPERAND_OBJECT **Entry;
ACPI_NAMESPACE_NODE *Node;
ACPI_OPERAND_OBJECT *CurrentObjDesc;
FUNCTION_TRACE ("DsMethodDataSetValue");
FUNCTION_TRACE ("DsStoreObjectToLocal");
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Opcode=%d Idx=%d Obj=%p\n",
Opcode, Index, SrcDesc));
Opcode, Index, ObjDesc));
/* Parameter validation */
if (!SrcDesc)
if (!ObjDesc)
{
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
/* Get the namespace node for the arg/local */
/* Get a pointer to the requested method stack entry */
Status = AcpiDsMethodDataGetEntry (Opcode, Index, WalkState, &Entry);
Status = AcpiDsMethodDataGetNode (Opcode, Index, WalkState, &Node);
if (ACPI_FAILURE (Status))
{
goto Cleanup;
return_ACPI_STATUS (Status);
}
if (*Entry == SrcDesc)
CurrentObjDesc = AcpiNsGetAttachedObject (Node);
if (CurrentObjDesc == ObjDesc)
{
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p already installed!\n", SrcDesc));
goto Cleanup;
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p already installed!\n", ObjDesc));
return_ACPI_STATUS (Status);
}
/*
* If there is an object already in this slot, we either
* have to delete it, or if this is an argument and there
* is an object reference stored there, we have to do
* an indirect store!
*/
if (*Entry)
if (CurrentObjDesc)
{
/*
* Check for an indirect store if an argument
@ -807,38 +707,25 @@ AcpiDsStoreObjectToLocal (
* Weird, but true.
*/
if ((Opcode == AML_ARG_OP) &&
(VALID_DESCRIPTOR_TYPE (*Entry, ACPI_DESC_TYPE_NAMED)))
(VALID_DESCRIPTOR_TYPE (CurrentObjDesc, ACPI_DESC_TYPE_NAMED)))
{
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
"Arg (%p) is an ObjRef(Node), storing in %p\n",
SrcDesc, *Entry));
"Arg (%p) is an ObjRef(Node), storing in node %p\n",
ObjDesc, CurrentObjDesc));
/* Detach an existing object from the Node */
AcpiNsDetachObject ((ACPI_NAMESPACE_NODE *) *Entry);
AcpiNsDetachObject ((ACPI_NAMESPACE_NODE *) CurrentObjDesc);
/*
* Store this object into the Node
* (do the indirect store)
* (perform the indirect store)
*/
Status = AcpiNsAttachObject ((ACPI_NAMESPACE_NODE *) *Entry, SrcDesc,
SrcDesc->Common.Type);
Status = AcpiNsAttachObject ((ACPI_NAMESPACE_NODE *) CurrentObjDesc,
ObjDesc, ObjDesc->Common.Type);
return_ACPI_STATUS (Status);
}
#ifdef ACPI_ENABLE_IMPLICIT_CONVERSION
/*
* Perform "Implicit conversion" of the new object to the type of the
* existing object
*/
Status = AcpiExConvertToTargetType ((*Entry)->Common.Type, &SrcDesc, WalkState);
if (ACPI_FAILURE (Status))
{
goto Cleanup;
}
#endif
/*
* Delete the existing object
* before storing the new one
@ -846,28 +733,14 @@ AcpiDsStoreObjectToLocal (
AcpiDsMethodDataDeleteValue (Opcode, Index, WalkState);
}
/*
* Install the ObjStack descriptor (*SrcDesc) into
* Install the ObjStack descriptor (*ObjDesc) into
* the descriptor for the Arg or Local.
* Install the new object in the stack entry
* (increments the object reference count by one)
*/
Status = AcpiDsMethodDataSetEntry (Opcode, Index, SrcDesc, WalkState);
if (ACPI_FAILURE (Status))
{
goto Cleanup;
}
/* Normal exit */
return_ACPI_STATUS (AE_OK);
/* Error exit */
Cleanup:
Status = AcpiDsMethodDataSetValue (Opcode, Index, ObjDesc, WalkState);
return_ACPI_STATUS (Status);
}

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: dsobject - Dispatcher object management routines
* $Revision: 81 $
* $Revision: 85 $
*
*****************************************************************************/
@ -352,6 +352,8 @@ AcpiDsInitObjectFromOp (
{
case ACPI_TYPE_BUFFER:
ObjDesc->Buffer.Node = (ACPI_NAMESPACE_NODE *) WalkState->Operands[0];
/* First arg is a number */
AcpiDsCreateOperand (WalkState, Op->Value.Arg, 0);
@ -448,11 +450,11 @@ AcpiDsInitObjectFromOp (
ObjDesc->String.Pointer = Op->Value.String;
ObjDesc->String.Length = STRLEN (Op->Value.String);
/*
/*
* The string is contained in the ACPI table, don't ever try
* to delete it
*/
ObjDesc->Common.Flags |= AOPOBJ_STATIC_POINTER;
ObjDesc->Common.Flags |= AOPOBJ_STATIC_POINTER;
break;
@ -531,7 +533,6 @@ AcpiDsBuildInternalSimpleObj (
ACPI_OPERAND_OBJECT **ObjDescPtr)
{
ACPI_OPERAND_OBJECT *ObjDesc;
ACPI_OBJECT_TYPE8 Type;
ACPI_STATUS Status;
UINT32 Length;
char *Name;
@ -543,17 +544,15 @@ AcpiDsBuildInternalSimpleObj (
if (Op->Opcode == AML_INT_NAMEPATH_OP)
{
/*
* This is an object reference. If The name was
* previously looked up in the NS, it is stored in this op.
* This is an object reference. If this name was
* previously looked up in the namespace, it was stored in this op.
* Otherwise, go ahead and look it up now
*/
if (!Op->Node)
{
Status = AcpiNsLookup (WalkState->ScopeInfo,
Op->Value.String, ACPI_TYPE_ANY,
IMODE_EXECUTE,
NS_SEARCH_PARENT | NS_DONT_OPEN_SCOPE,
NULL,
Status = AcpiNsLookup (WalkState->ScopeInfo, Op->Value.String,
ACPI_TYPE_ANY, IMODE_EXECUTE,
NS_SEARCH_PARENT | NS_DONT_OPEN_SCOPE, NULL,
(ACPI_NAMESPACE_NODE **)&(Op->Node));
if (ACPI_FAILURE (Status))
@ -585,24 +584,11 @@ AcpiDsBuildInternalSimpleObj (
}
}
}
/*
* The reference will be a Reference
* TBD: [Restructure] unless we really need a separate
* type of INTERNAL_TYPE_REFERENCE change
* AcpiDsMapOpcodeToDataType to handle this case
*/
Type = INTERNAL_TYPE_REFERENCE;
}
else
{
Type = AcpiDsMapOpcodeToDataType (Op->Opcode, NULL);
}
/* Create and init the internal ACPI object */
ObjDesc = AcpiUtCreateInternalObject (Type);
ObjDesc = AcpiUtCreateInternalObject ((AcpiPsGetOpcodeInfo (Op->Opcode))->ObjectType);
if (!ObjDesc)
{
return_ACPI_STATUS (AE_NO_MEMORY);
@ -785,7 +771,7 @@ AcpiDsCreateNode (
* parts of the table, we can arrive here twice. Only init
* the named object node the first time through
*/
if (Node->Object)
if (AcpiNsGetAttachedObject (Node))
{
return_ACPI_STATUS (AE_OK);
}

View File

@ -2,7 +2,7 @@
*
* Module Name: dsopcode - Dispatcher Op Region support and handling of
* "control" opcodes
* $Revision: 56 $
* $Revision: 66 $
*
*****************************************************************************/
@ -130,6 +130,114 @@
MODULE_NAME ("dsopcode")
/*****************************************************************************
*
* FUNCTION: AcpiDsExecuteArguments
*
* PARAMETERS: Node - Parent NS node
* ExtraDesc - Has AML pointer and length
*
* RETURN: Status.
*
* DESCRIPTION: Late execution of region or field arguments
*
****************************************************************************/
ACPI_STATUS
AcpiDsExecuteArguments (
ACPI_NAMESPACE_NODE *Node,
ACPI_OPERAND_OBJECT *ExtraDesc)
{
ACPI_STATUS Status;
ACPI_PARSE_OBJECT *Op;
ACPI_WALK_STATE *WalkState;
ACPI_PARSE_OBJECT *Arg;
FUNCTION_TRACE ("AcpiDsExecuteArguments");
/*
* Allocate a new parser op to be the root of the parsed
* BufferField tree
*/
Op = AcpiPsAllocOp (AML_SCOPE_OP);
if (!Op)
{
return_ACPI_STATUS (AE_NO_MEMORY);
}
/* Save the Node for use in AcpiPsParseAml */
Op->Node = AcpiNsGetParentObject (Node);
/* Create and initialize a new parser state */
WalkState = AcpiDsCreateWalkState (TABLE_ID_DSDT, NULL, NULL, NULL);
if (!WalkState)
{
return_ACPI_STATUS (AE_NO_MEMORY);
}
Status = AcpiDsInitAmlWalk (WalkState, Op, NULL, ExtraDesc->Extra.AmlStart,
ExtraDesc->Extra.AmlLength, NULL, NULL, 1);
if (ACPI_FAILURE (Status))
{
AcpiDsDeleteWalkState (WalkState);
return_ACPI_STATUS (Status);
}
WalkState->ParseFlags = 0;
/* Pass1: Parse the entire BufferField declaration */
Status = AcpiPsParseAml (WalkState);
if (ACPI_FAILURE (Status))
{
AcpiPsDeleteParseTree (Op);
return_ACPI_STATUS (Status);
}
/* Get and init the actual FieldUnit Op created above */
Arg = Op->Value.Arg;
Op->Node = Node;
Arg->Node = Node;
AcpiPsDeleteParseTree (Op);
/* Evaluate the address and length arguments for the Buffer Field */
Op = AcpiPsAllocOp (AML_SCOPE_OP);
if (!Op)
{
return_ACPI_STATUS (AE_NO_MEMORY);
}
Op->Node = AcpiNsGetParentObject (Node);
/* Create and initialize a new parser state */
WalkState = AcpiDsCreateWalkState (TABLE_ID_DSDT, NULL, NULL, NULL);
if (!WalkState)
{
return_ACPI_STATUS (AE_NO_MEMORY);
}
Status = AcpiDsInitAmlWalk (WalkState, Op, NULL, ExtraDesc->Extra.AmlStart,
ExtraDesc->Extra.AmlLength, NULL, NULL, 3);
if (ACPI_FAILURE (Status))
{
AcpiDsDeleteWalkState (WalkState);
return_ACPI_STATUS (Status);
}
Status = AcpiPsParseAml (WalkState);
AcpiPsDeleteParseTree (Op);
return_ACPI_STATUS (Status);
}
/*****************************************************************************
*
* FUNCTION: AcpiDsGetBufferFieldArguments
@ -149,11 +257,7 @@ AcpiDsGetBufferFieldArguments (
{
ACPI_OPERAND_OBJECT *ExtraDesc;
ACPI_NAMESPACE_NODE *Node;
ACPI_PARSE_OBJECT *Op;
ACPI_PARSE_OBJECT *FieldOp;
ACPI_STATUS Status;
ACPI_TABLE_DESC *TableDesc;
ACPI_WALK_STATE *WalkState;
FUNCTION_TRACE_PTR ("DsGetBufferFieldArguments", ObjDesc);
@ -164,116 +268,18 @@ AcpiDsGetBufferFieldArguments (
return_ACPI_STATUS (AE_OK);
}
/* Get the AML pointer (method object) and BufferField node */
ExtraDesc = ObjDesc->BufferField.Extra;
ExtraDesc = AcpiNsGetSecondaryObject (ObjDesc);
Node = ObjDesc->BufferField.Node;
DEBUG_EXEC(AcpiUtDisplayInitPathname (Node, " [Field]"));
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[%4.4s] BufferField JIT Init\n",
(char*)&Node->Name));
(char *) &Node->Name));
/* Execute the AML code for the TermArg arguments */
/*
* Allocate a new parser op to be the root of the parsed
* OpRegion tree
*/
Op = AcpiPsAllocOp (AML_SCOPE_OP);
if (!Op)
{
return (AE_NO_MEMORY);
}
/* Save the Node for use in AcpiPsParseAml */
Op->Node = AcpiNsGetParentObject (Node);
/* Get a handle to the parent ACPI table */
Status = AcpiTbHandleToObject (Node->OwnerId, &TableDesc);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
/* Create and initialize a new parser state */
WalkState = AcpiDsCreateWalkState (TABLE_ID_DSDT,
NULL, NULL, NULL);
if (!WalkState)
{
return_ACPI_STATUS (AE_NO_MEMORY);
}
Status = AcpiDsInitAmlWalk (WalkState, Op, NULL, ExtraDesc->Extra.AmlStart,
ExtraDesc->Extra.AmlLength, NULL, NULL, 1);
if (ACPI_FAILURE (Status))
{
/* TBD: delete walk state */
return_ACPI_STATUS (Status);
}
/* TBD: No Walk flags?? */
WalkState->ParseFlags = 0;
/* Pass1: Parse the entire BufferField declaration */
Status = AcpiPsParseAml (WalkState);
if (ACPI_FAILURE (Status))
{
AcpiPsDeleteParseTree (Op);
return_ACPI_STATUS (Status);
}
/* Get and init the actual FieldUnit Op created above */
FieldOp = Op->Value.Arg;
Op->Node = Node;
FieldOp = Op->Value.Arg;
FieldOp->Node = Node;
AcpiPsDeleteParseTree (Op);
/* Evaluate the address and length arguments for the OpRegion */
Op = AcpiPsAllocOp (AML_SCOPE_OP);
if (!Op)
{
return (AE_NO_MEMORY);
}
Op->Node = AcpiNsGetParentObject (Node);
/* Create and initialize a new parser state */
WalkState = AcpiDsCreateWalkState (TABLE_ID_DSDT,
NULL, NULL, NULL);
if (!WalkState)
{
return_ACPI_STATUS (AE_NO_MEMORY);
}
Status = AcpiDsInitAmlWalk (WalkState, Op, NULL, ExtraDesc->Extra.AmlStart,
ExtraDesc->Extra.AmlLength, NULL, NULL, 3);
if (ACPI_FAILURE (Status))
{
/* TBD: delete walk state */
return_ACPI_STATUS (Status);
}
Status = AcpiPsParseAml (WalkState);
AcpiPsDeleteParseTree (Op);
/*
* The pseudo-method object is no longer needed since the region is
* now initialized
*/
AcpiUtRemoveReference (ObjDesc->BufferField.Extra);
ObjDesc->BufferField.Extra = NULL;
Status = AcpiDsExecuteArguments (Node, ExtraDesc);
return_ACPI_STATUS (Status);
}
@ -295,13 +301,9 @@ ACPI_STATUS
AcpiDsGetRegionArguments (
ACPI_OPERAND_OBJECT *ObjDesc)
{
ACPI_OPERAND_OBJECT *ExtraDesc = NULL;
ACPI_NAMESPACE_NODE *Node;
ACPI_PARSE_OBJECT *Op;
ACPI_PARSE_OBJECT *RegionOp;
ACPI_STATUS Status;
ACPI_TABLE_DESC *TableDesc;
ACPI_WALK_STATE *WalkState;
ACPI_OPERAND_OBJECT *RegionObj2;
FUNCTION_TRACE_PTR ("DsGetRegionArguments", ObjDesc);
@ -312,108 +314,23 @@ AcpiDsGetRegionArguments (
return_ACPI_STATUS (AE_OK);
}
RegionObj2 = AcpiNsGetSecondaryObject (ObjDesc);
if (!RegionObj2)
{
return_ACPI_STATUS (AE_NOT_EXIST);
}
/* Get the AML pointer (method object) and region node */
ExtraDesc = ObjDesc->Region.Extra;
Node = ObjDesc->Region.Node;
DEBUG_EXEC(AcpiUtDisplayInitPathname (Node, " [Operation Region]"));
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[%4.4s] OpRegion Init at AML %p\n",
(char*)&Node->Name, ExtraDesc->Extra.AmlStart));
/*
* Allocate a new parser op to be the root of the parsed
* OpRegion tree
*/
Op = AcpiPsAllocOp (AML_SCOPE_OP);
if (!Op)
{
return (AE_NO_MEMORY);
}
/* Save the Node for use in AcpiPsParseAml */
Op->Node = AcpiNsGetParentObject (Node);
/* Get a handle to the parent ACPI table */
Status = AcpiTbHandleToObject (Node->OwnerId, &TableDesc);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
/* Create and initialize a new parser state */
WalkState = AcpiDsCreateWalkState (TABLE_ID_DSDT,
Op, NULL, NULL);
if (!WalkState)
{
return_ACPI_STATUS (AE_NO_MEMORY);
}
Status = AcpiDsInitAmlWalk (WalkState, Op, NULL, ExtraDesc->Extra.AmlStart,
ExtraDesc->Extra.AmlLength, NULL, NULL, 1);
if (ACPI_FAILURE (Status))
{
/* TBD: delete walk state */
return_ACPI_STATUS (Status);
}
/* TBD: No Walk flags?? */
WalkState->ParseFlags = 0;
/* Parse the entire OpRegion declaration, creating a parse tree */
Status = AcpiPsParseAml (WalkState);
if (ACPI_FAILURE (Status))
{
AcpiPsDeleteParseTree (Op);
return_ACPI_STATUS (Status);
}
/* Get and init the actual RegionOp created above */
RegionOp = Op->Value.Arg;
Op->Node = Node;
(char *) &Node->Name, RegionObj2->Extra.AmlStart));
RegionOp = Op->Value.Arg;
RegionOp->Node = Node;
AcpiPsDeleteParseTree (Op);
/* Evaluate the address and length arguments for the OpRegion */
Op = AcpiPsAllocOp (AML_SCOPE_OP);
if (!Op)
{
return (AE_NO_MEMORY);
}
Op->Node = AcpiNsGetParentObject (Node);
/* Create and initialize a new parser state */
WalkState = AcpiDsCreateWalkState (TABLE_ID_DSDT,
Op, NULL, NULL);
if (!WalkState)
{
return_ACPI_STATUS (AE_NO_MEMORY);
}
Status = AcpiDsInitAmlWalk (WalkState, Op, NULL, ExtraDesc->Extra.AmlStart,
ExtraDesc->Extra.AmlLength, NULL, NULL, 3);
if (ACPI_FAILURE (Status))
{
/* TBD: delete walk state */
return_ACPI_STATUS (Status);
}
Status = AcpiPsParseAml (WalkState);
AcpiPsDeleteParseTree (Op);
Status = AcpiDsExecuteArguments (Node, RegionObj2);
return_ACPI_STATUS (Status);
}
@ -460,21 +377,6 @@ AcpiDsInitializeRegion (
* DESCRIPTION: Get BufferField Buffer and Index
* Called from AcpiDsExecEndOp during BufferField parse tree walk
*
* ACPI SPECIFICATION REFERENCES:
* Each of the Buffer Field opcodes is defined as specified in in-line
* comments below. For each one, use the following definitions.
*
* DefBitField := BitFieldOp SrcBuf BitIdx Destination
* DefByteField := ByteFieldOp SrcBuf ByteIdx Destination
* DefCreateField := CreateFieldOp SrcBuf BitIdx NumBits NameString
* DefDWordField := DWordFieldOp SrcBuf ByteIdx Destination
* DefWordField := WordFieldOp SrcBuf ByteIdx Destination
* BitIndex := TermArg=>Integer
* ByteIndex := TermArg=>Integer
* Destination := NameString
* NumBits := TermArg=>Integer
* SourceBuf := TermArg=>Buffer
*
****************************************************************************/
ACPI_STATUS
@ -523,7 +425,6 @@ AcpiDsEvalBufferFieldOperands (
return_ACPI_STATUS (AE_NOT_EXIST);
}
/* Resolve the operands */
Status = AcpiExResolveOperands (Op->Opcode, WALK_OPERANDS, WalkState);
@ -552,10 +453,7 @@ AcpiDsEvalBufferFieldOperands (
OffDesc = WalkState->Operands[1];
SrcDesc = WalkState->Operands[0];
Offset = (UINT32) OffDesc->Integer.Value;
Offset = (UINT32) OffDesc->Integer.Value;
/*
* If ResDesc is a Name, it will be a direct name pointer after
@ -576,78 +474,60 @@ AcpiDsEvalBufferFieldOperands (
switch (Op->Opcode)
{
/* DefCreateField */
case AML_CREATE_FIELD_OP:
/* Offset is in bits, count is in bits */
BitOffset = Offset;
BitCount = (UINT32) CntDesc->Integer.Value;
FieldFlags = ACCESS_BYTE_ACC;
FieldFlags = AML_FIELD_ACCESS_BYTE;
break;
/* DefCreateBitField */
case AML_CREATE_BIT_FIELD_OP:
/* Offset is in bits, Field is one bit */
BitOffset = Offset;
BitCount = 1;
FieldFlags = ACCESS_BYTE_ACC;
FieldFlags = AML_FIELD_ACCESS_BYTE;
break;
/* DefCreateByteField */
case AML_CREATE_BYTE_FIELD_OP:
/* Offset is in bytes, field is one byte */
BitOffset = 8 * Offset;
BitCount = 8;
FieldFlags = ACCESS_BYTE_ACC;
FieldFlags = AML_FIELD_ACCESS_BYTE;
break;
/* DefCreateWordField */
case AML_CREATE_WORD_FIELD_OP:
/* Offset is in bytes, field is one word */
BitOffset = 8 * Offset;
BitCount = 16;
FieldFlags = ACCESS_WORD_ACC;
FieldFlags = AML_FIELD_ACCESS_WORD;
break;
/* DefCreateDWordField */
case AML_CREATE_DWORD_FIELD_OP:
/* Offset is in bytes, field is one dword */
BitOffset = 8 * Offset;
BitCount = 32;
FieldFlags = ACCESS_DWORD_ACC;
FieldFlags = AML_FIELD_ACCESS_DWORD;
break;
/* DefCreateQWordField */
case AML_CREATE_QWORD_FIELD_OP:
/* Offset is in bytes, field is one qword */
BitOffset = 8 * Offset;
BitCount = 64;
FieldFlags = ACCESS_QWORD_ACC;
FieldFlags = AML_FIELD_ACCESS_QWORD;
break;
default:
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
@ -657,7 +537,6 @@ AcpiDsEvalBufferFieldOperands (
goto Cleanup;
}
/*
* Setup field according to the object type
*/
@ -678,12 +557,11 @@ AcpiDsEvalBufferFieldOperands (
goto Cleanup;
}
/*
* Initialize areas of the field object that are common to all fields
* For FieldFlags, use LOCK_RULE = 0 (NO_LOCK), UPDATE_RULE = 0 (UPDATE_PRESERVE)
*/
Status = AcpiExPrepCommonFieldObject (ObjDesc, FieldFlags,
Status = AcpiExPrepCommonFieldObject (ObjDesc, FieldFlags, 0,
BitOffset, BitCount);
if (ACPI_FAILURE (Status))
{
@ -696,7 +574,6 @@ AcpiDsEvalBufferFieldOperands (
SrcDesc->Common.ReferenceCount = (UINT16) (SrcDesc->Common.ReferenceCount +
ObjDesc->Common.ReferenceCount);
break;
@ -704,7 +581,7 @@ AcpiDsEvalBufferFieldOperands (
default:
if ((SrcDesc->Common.Type > (UINT8) INTERNAL_TYPE_REFERENCE) || !AcpiUtValidObjectType (SrcDesc->Common.Type)) /* TBD: This line MUST be a single line until AcpiSrc can handle it (block deletion) */
if ((SrcDesc->Common.Type > (UINT8) INTERNAL_TYPE_REFERENCE) || !AcpiUtValidObjectType (SrcDesc->Common.Type)) /* This line MUST be a single line until AcpiSrc can handle it (block deletion) */
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
"Tried to create field in invalid object type %X\n",
@ -915,11 +792,8 @@ AcpiDsExecBeginControlOp (
*/
WalkState->ControlState->Control.AmlPredicateStart =
WalkState->ParserState.Aml - 1;
/* TBD: can this be removed? */
/*AcpiPsPkgLengthEncodingSize (GET8 (WalkState->ParserState->Aml));*/
break;
case AML_ELSE_OP:
/* Predicate is in the state object */
@ -932,12 +806,10 @@ AcpiDsExecBeginControlOp (
break;
case AML_RETURN_OP:
break;
default:
break;
}
@ -958,7 +830,6 @@ AcpiDsExecBeginControlOp (
* DESCRIPTION: Handles all control ops encountered during control method
* execution.
*
*
******************************************************************************/
ACPI_STATUS
@ -1077,11 +948,11 @@ AcpiDsExecEndControlOp (
((WalkState->Results->Results.ObjDesc [0])->Common.Type == INTERNAL_TYPE_REFERENCE) &&
((WalkState->Results->Results.ObjDesc [0])->Reference.Opcode != AML_INDEX_OP))
{
Status = AcpiExResolveToValue (&WalkState->Results->Results.ObjDesc [0], WalkState);
if (ACPI_FAILURE (Status))
{
return (Status);
}
Status = AcpiExResolveToValue (&WalkState->Results->Results.ObjDesc [0], WalkState);
if (ACPI_FAILURE (Status))
{
return (Status);
}
}
WalkState->ReturnDesc = WalkState->Results->Results.ObjDesc [0];
@ -1166,7 +1037,6 @@ AcpiDsExecEndControlOp (
break;
}
return (Status);
}

View File

@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: dsutils - Dispatcher utilities
* $Revision: 80 $
* $Revision: 84 $
*
******************************************************************************/
@ -161,7 +161,6 @@ AcpiDsIsResultUsed (
return_VALUE (TRUE);
}
/*
* If there is no parent, the result can't possibly be used!
* (An executing method typically has no parent, since each
@ -173,11 +172,9 @@ AcpiDsIsResultUsed (
return_VALUE (FALSE);
}
/*
* Get info on the parent. The root Op is AML_SCOPE
*/
ParentInfo = AcpiPsGetOpcodeInfo (Op->Parent->Opcode);
if (ParentInfo->Class == AML_CLASS_UNKNOWN)
{
@ -185,7 +182,6 @@ AcpiDsIsResultUsed (
return_VALUE (FALSE);
}
/*
* Decide what to do with the result based on the parent. If
* the parent opcode will not use the result, delete the object.
@ -194,10 +190,7 @@ AcpiDsIsResultUsed (
*/
switch (ParentInfo->Class)
{
/*
* In these cases, the parent will never use the return object
*/
case AML_CLASS_CONTROL: /* IF, ELSE, WHILE only */
case AML_CLASS_CONTROL:
switch (Op->Parent->Opcode)
{
@ -205,9 +198,7 @@ AcpiDsIsResultUsed (
/* Never delete the return value associated with a return opcode */
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
"Result used, [RETURN] opcode=%X Op=%p\n", Op->Opcode, Op));
return_VALUE (TRUE);
goto ResultUsed;
break;
case AML_IF_OP:
@ -215,60 +206,72 @@ AcpiDsIsResultUsed (
/*
* If we are executing the predicate AND this is the predicate op,
* we will use the return value!
* we will use the return value
*/
if ((WalkState->ControlState->Common.State == CONTROL_PREDICATE_EXECUTING) &&
(WalkState->ControlState->Control.PredicateOp == Op))
{
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
"Result used as a predicate, [IF/WHILE] opcode=%X Op=%p\n",
Op->Opcode, Op));
return_VALUE (TRUE);
goto ResultUsed;
}
break;
}
/* The general control opcode returns no result */
/* Fall through to not used case below */
goto ResultNotUsed;
break;
case AML_CLASS_NAMED_OBJECT: /* Scope, method, etc. */
case AML_CLASS_CREATE:
/*
* These opcodes allow TermArg(s) as operands and therefore
* method calls. The result is used.
* the operands can be method calls. The result is used.
*/
if ((Op->Parent->Opcode == AML_REGION_OP) ||
(Op->Parent->Opcode == AML_CREATE_FIELD_OP) ||
(Op->Parent->Opcode == AML_CREATE_BIT_FIELD_OP) ||
(Op->Parent->Opcode == AML_CREATE_BYTE_FIELD_OP) ||
(Op->Parent->Opcode == AML_CREATE_WORD_FIELD_OP) ||
(Op->Parent->Opcode == AML_CREATE_DWORD_FIELD_OP) ||
(Op->Parent->Opcode == AML_CREATE_QWORD_FIELD_OP))
goto ResultUsed;
break;
case AML_CLASS_NAMED_OBJECT:
if ((Op->Parent->Opcode == AML_REGION_OP) ||
(Op->Parent->Opcode == AML_DATA_REGION_OP))
{
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
"Result used, [Region or CreateField] opcode=%X Op=%p\n",
Op->Opcode, Op));
return_VALUE (TRUE);
/*
* These opcodes allow TermArg(s) as operands and therefore
* the operands can be method calls. The result is used.
*/
goto ResultUsed;
}
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
"Result not used, Parent opcode=%X Op=%p\n", Op->Opcode, Op));
return_VALUE (FALSE);
goto ResultNotUsed;
break;
/*
* In all other cases. the parent will actually use the return
* object, so keep it.
*/
default:
goto ResultUsed;
break;
}
ResultUsed:
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Result of [%s] used by Parent [%s] Op=%p\n",
AcpiPsGetOpcodeName (Op->Opcode),
AcpiPsGetOpcodeName (Op->Parent->Opcode), Op));
return_VALUE (TRUE);
ResultNotUsed:
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Result of [%s] not used by Parent [%s] Op=%p\n",
AcpiPsGetOpcodeName (Op->Opcode),
AcpiPsGetOpcodeName (Op->Parent->Opcode), Op));
return_VALUE (FALSE);
}
@ -355,11 +358,9 @@ AcpiDsCreateOperand (
ACPI_STATUS Status = AE_OK;
NATIVE_CHAR *NameString;
UINT32 NameLength;
ACPI_OBJECT_TYPE8 DataType;
ACPI_OPERAND_OBJECT *ObjDesc;
ACPI_PARSE_OBJECT *ParentOp;
UINT16 Opcode;
UINT32 Flags;
OPERATING_MODE InterpreterMode;
const ACPI_OPCODE_INFO *OpInfo;
@ -452,7 +453,7 @@ AcpiDsCreateOperand (
/* TBD: Externalize NameString and print */
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
"Object name was not found in namespace\n"));
}
}
@ -490,11 +491,6 @@ AcpiDsCreateOperand (
Opcode = AML_ZERO_OP; /* Has no arguments! */
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Null namepath: Arg=%p\n", Arg));
/*
* TBD: [Investigate] anything else needed for the
* zero op lvalue?
*/
}
else
@ -502,16 +498,15 @@ AcpiDsCreateOperand (
Opcode = Arg->Opcode;
}
/* Get the object type of the argument */
/* Get the data type of the argument */
DataType = AcpiDsMapOpcodeToDataType (Opcode, &Flags);
if (DataType == INTERNAL_TYPE_INVALID)
OpInfo = AcpiPsGetOpcodeInfo (Opcode);
if (OpInfo->ObjectType == INTERNAL_TYPE_INVALID)
{
return_ACPI_STATUS (AE_NOT_IMPLEMENTED);
}
if (Flags & OP_HAS_RETURN_VALUE)
if (OpInfo->Flags & AML_HAS_RETVAL)
{
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
"Argument previously created, already stacked \n"));
@ -533,14 +528,13 @@ AcpiDsCreateOperand (
AcpiFormatException (Status)));
return_ACPI_STATUS (Status);
}
}
else
{
/* Create an ACPI_INTERNAL_OBJECT for the argument */
ObjDesc = AcpiUtCreateInternalObject (DataType);
ObjDesc = AcpiUtCreateInternalObject (OpInfo->ObjectType);
if (!ObjDesc)
{
return_ACPI_STATUS (AE_NO_MEMORY);
@ -665,11 +659,6 @@ AcpiDsResolveOperands (
* Attempt to resolve each of the valid operands
* Method arguments are passed by value, not by reference
*/
/*
* TBD: [Investigate] Note from previous parser:
* RefOf problem with AcpiExResolveToValue() conversion.
*/
for (i = 0; i < WalkState->NumOperands; i++)
{
Status = AcpiExResolveToValue (&WalkState->Operands[i], WalkState);
@ -682,269 +671,3 @@ AcpiDsResolveOperands (
return_ACPI_STATUS (Status);
}
/*******************************************************************************
*
* FUNCTION: AcpiDsMapOpcodeToDataType
*
* PARAMETERS: Opcode - AML opcode to map
* OutFlags - Additional info about the opcode
*
* RETURN: The ACPI type associated with the opcode
*
* DESCRIPTION: Convert a raw AML opcode to the associated ACPI data type,
* if any. If the opcode returns a value as part of the
* intepreter execution, a flag is returned in OutFlags.
*
******************************************************************************/
ACPI_OBJECT_TYPE8
AcpiDsMapOpcodeToDataType (
UINT16 Opcode,
UINT32 *OutFlags)
{
ACPI_OBJECT_TYPE8 DataType = INTERNAL_TYPE_INVALID;
const ACPI_OPCODE_INFO *OpInfo;
UINT32 Flags = 0;
PROC_NAME ("DsMapOpcodeToDataType");
OpInfo = AcpiPsGetOpcodeInfo (Opcode);
if (OpInfo->Class == AML_CLASS_UNKNOWN)
{
/* Unknown opcode */
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown AML opcode: %x\n", Opcode));
return (DataType);
}
/*
* TBD: Use op class
*/
switch (OpInfo->Type)
{
case AML_TYPE_LITERAL:
switch (Opcode)
{
case AML_BYTE_OP:
case AML_WORD_OP:
case AML_DWORD_OP:
case AML_QWORD_OP:
DataType = ACPI_TYPE_INTEGER;
break;
case AML_STRING_OP:
DataType = ACPI_TYPE_STRING;
break;
case AML_INT_NAMEPATH_OP:
DataType = INTERNAL_TYPE_REFERENCE;
break;
default:
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
"Unknown (type LITERAL) AML opcode: %x\n", Opcode));
break;
}
break;
case AML_TYPE_DATA_TERM:
switch (Opcode)
{
case AML_BUFFER_OP:
DataType = ACPI_TYPE_BUFFER;
break;
case AML_PACKAGE_OP:
case AML_VAR_PACKAGE_OP:
DataType = ACPI_TYPE_PACKAGE;
break;
default:
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
"Unknown (type DATA_TERM) AML opcode: %x\n", Opcode));
break;
}
break;
case AML_TYPE_CONSTANT:
case AML_TYPE_METHOD_ARGUMENT:
case AML_TYPE_LOCAL_VARIABLE:
DataType = INTERNAL_TYPE_REFERENCE;
break;
case AML_TYPE_EXEC_1A_0T_1R:
case AML_TYPE_EXEC_1A_1T_1R:
case AML_TYPE_EXEC_2A_0T_1R:
case AML_TYPE_EXEC_2A_1T_1R:
case AML_TYPE_EXEC_2A_2T_1R:
case AML_TYPE_EXEC_3A_1T_1R:
case AML_TYPE_EXEC_6A_0T_1R:
case AML_TYPE_RETURN:
Flags = OP_HAS_RETURN_VALUE;
DataType = ACPI_TYPE_ANY;
break;
case AML_TYPE_METHOD_CALL:
Flags = OP_HAS_RETURN_VALUE;
DataType = ACPI_TYPE_METHOD;
break;
case AML_TYPE_NAMED_FIELD:
case AML_TYPE_NAMED_SIMPLE:
case AML_TYPE_NAMED_COMPLEX:
case AML_TYPE_NAMED_NO_OBJ:
DataType = AcpiDsMapNamedOpcodeToDataType (Opcode);
break;
case AML_TYPE_EXEC_1A_0T_0R:
case AML_TYPE_EXEC_2A_0T_0R:
case AML_TYPE_EXEC_3A_0T_0R:
case AML_TYPE_EXEC_1A_1T_0R:
case AML_TYPE_CONTROL:
/* No mapping needed at this time */
break;
default:
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
"Unimplemented data type opcode: %x\n", Opcode));
break;
}
/* Return flags to caller if requested */
if (OutFlags)
{
*OutFlags = Flags;
}
return (DataType);
}
/*******************************************************************************
*
* FUNCTION: AcpiDsMapNamedOpcodeToDataType
*
* PARAMETERS: Opcode - The Named AML opcode to map
*
* RETURN: The ACPI type associated with the named opcode
*
* DESCRIPTION: Convert a raw Named AML opcode to the associated data type.
* Named opcodes are a subsystem of the AML opcodes.
*
******************************************************************************/
ACPI_OBJECT_TYPE8
AcpiDsMapNamedOpcodeToDataType (
UINT16 Opcode)
{
ACPI_OBJECT_TYPE8 DataType;
FUNCTION_ENTRY ();
/* Decode Opcode */
switch (Opcode)
{
case AML_SCOPE_OP:
DataType = INTERNAL_TYPE_SCOPE;
break;
case AML_DEVICE_OP:
DataType = ACPI_TYPE_DEVICE;
break;
case AML_THERMAL_ZONE_OP:
DataType = ACPI_TYPE_THERMAL;
break;
case AML_METHOD_OP:
DataType = ACPI_TYPE_METHOD;
break;
case AML_POWER_RES_OP:
DataType = ACPI_TYPE_POWER;
break;
case AML_PROCESSOR_OP:
DataType = ACPI_TYPE_PROCESSOR;
break;
case AML_FIELD_OP: /* FieldOp */
DataType = INTERNAL_TYPE_FIELD_DEFN;
break;
case AML_INDEX_FIELD_OP: /* IndexFieldOp */
DataType = INTERNAL_TYPE_INDEX_FIELD_DEFN;
break;
case AML_BANK_FIELD_OP: /* BankFieldOp */
DataType = INTERNAL_TYPE_BANK_FIELD_DEFN;
break;
case AML_INT_NAMEDFIELD_OP: /* NO CASE IN ORIGINAL */
DataType = ACPI_TYPE_ANY;
break;
case AML_NAME_OP: /* NameOp - special code in original */
case AML_INT_NAMEPATH_OP:
DataType = ACPI_TYPE_ANY;
break;
case AML_ALIAS_OP:
DataType = INTERNAL_TYPE_ALIAS;
break;
case AML_MUTEX_OP:
DataType = ACPI_TYPE_MUTEX;
break;
case AML_EVENT_OP:
DataType = ACPI_TYPE_EVENT;
break;
case AML_DATA_REGION_OP:
case AML_REGION_OP:
DataType = ACPI_TYPE_REGION;
break;
default:
DataType = ACPI_TYPE_ANY;
break;
}
return (DataType);
}

View File

@ -2,7 +2,7 @@
*
* Module Name: dswexec - Dispatcher method execution callbacks;
* dispatch to interpreter.
* $Revision: 79 $
* $Revision: 82 $
*
*****************************************************************************/
@ -130,7 +130,7 @@
MODULE_NAME ("dswexec")
/*
* Dispatch tables for opcode classes
* Dispatch table for opcode classes
*/
ACPI_EXECUTE_OP AcpiGbl_OpTypeDispatch [] = {
AcpiExOpcode_1A_0T_0R,
@ -183,7 +183,6 @@ AcpiDsGetPredicateValue (
return_ACPI_STATUS (Status);
}
}
else
{
Status = AcpiDsCreateOperand (WalkState, WalkState->Op, 0);
@ -209,7 +208,6 @@ AcpiDsGetPredicateValue (
return_ACPI_STATUS (AE_AML_NO_OPERAND);
}
/*
* Result of predicate evaluation currently must
* be a number
@ -224,7 +222,6 @@ AcpiDsGetPredicateValue (
goto Cleanup;
}
/* Truncate the predicate to 32-bits if necessary */
AcpiExTruncateFor32bitTable (ObjDesc, WalkState);
@ -237,7 +234,6 @@ AcpiDsGetPredicateValue (
{
WalkState->ControlState->Common.Value = TRUE;
}
else
{
/*
@ -251,7 +247,7 @@ AcpiDsGetPredicateValue (
Cleanup:
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Completed a predicate eval=%X Op=%pn",
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Completed a predicate eval=%X Op=%p\n",
WalkState->ControlState->Common.Value, WalkState->Op));
/* Break to debugger to display result */
@ -382,20 +378,17 @@ AcpiDsExecBeginOp (
Status = AcpiDsLoad2BeginOp (WalkState, NULL);
}
if (Op->Opcode == AML_REGION_OP)
{
Status = AcpiDsResultStackPush (WalkState);
}
break;
/* most operators with arguments */
case AML_CLASS_EXECUTE:
case AML_CLASS_CREATE:
/* most operators with arguments */
/* Start a new result/operand state */
Status = AcpiDsResultStackPush (WalkState);
@ -462,23 +455,20 @@ AcpiDsExecEndOp (
WalkState->ReturnDesc = NULL;
WalkState->ResultObj = NULL;
/* Call debugger for single step support (DEBUG build only) */
DEBUGGER_EXEC (Status = AcpiDbSingleStep (WalkState, Op, OpClass));
DEBUGGER_EXEC (if (ACPI_FAILURE (Status)) {return_ACPI_STATUS (Status);});
/* Decode the Opcode Class */
switch (OpClass)
{
/* Decode the Opcode Class */
case AML_CLASS_ARGUMENT: /* constants, literals, etc. do nothing */
case AML_CLASS_ARGUMENT: /* constants, literals, etc. -- do nothing */
break;
/* most operators with arguments */
case AML_CLASS_EXECUTE:
case AML_CLASS_EXECUTE: /* most operators with arguments */
/* Build resolved operand stack */
@ -498,53 +488,41 @@ AcpiDsExecEndOp (
/* Resolve all operands */
Status = AcpiExResolveOperands (WalkState->Opcode,
&(WalkState->Operands [WalkState->NumOperands -1]),
Status = AcpiExResolveOperands (WalkState->Opcode,
&(WalkState->Operands [WalkState->NumOperands -1]),
WalkState);
if (ACPI_FAILURE (Status))
if (ACPI_SUCCESS (Status))
{
/* TBD: must pop and delete operands */
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "[%s]: Could not resolve operands, %s\n",
AcpiPsGetOpcodeName (WalkState->Opcode), AcpiFormatException (Status)));
DUMP_OPERANDS (WALK_OPERANDS, IMODE_EXECUTE,
AcpiPsGetOpcodeName (WalkState->Opcode),
WalkState->NumOperands, "after ExResolveOperands");
/*
* On error, we must delete all the operands and clear the
* operand stack
* Dispatch the request to the appropriate interpreter handler
* routine. There is one routine per opcode "type" based upon the
* number of opcode arguments and return type.
*/
for (i = 0; i < WalkState->NumOperands; i++)
{
AcpiUtRemoveReference (WalkState->Operands[i]);
WalkState->Operands[i] = NULL;
}
WalkState->NumOperands = 0;
goto Cleanup;
Status = AcpiGbl_OpTypeDispatch [OpType] (WalkState);
}
else
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
"[%s]: Could not resolve operands, %s\n",
AcpiPsGetOpcodeName (WalkState->Opcode),
AcpiFormatException (Status)));
}
DUMP_OPERANDS (WALK_OPERANDS, IMODE_EXECUTE, AcpiPsGetOpcodeName (WalkState->Opcode),
WalkState->NumOperands, "after ExResolveOperands");
/*
* Dispatch the request to the appropriate interpreter handler
* routine. There is one routine per opcode "type" based upon the
* number of opcode arguments and return type.
*/
Status = AcpiGbl_OpTypeDispatch [OpType] (WalkState);
/* Delete argument objects and clear the operand stack */
/* Always delete the argument objects and clear the operand stack */
for (i = 0; i < WalkState->NumOperands; i++)
{
/*
* Remove a reference to all operands, including both
* Remove a reference to all operands, including both
* "Arguments" and "Targets".
*/
AcpiUtRemoveReference (WalkState->Operands[i]);
WalkState->Operands[i] = NULL;
}
WalkState->NumOperands = 0;
/*
@ -600,10 +578,9 @@ AcpiDsExecEndOp (
}
/*
* Since the operands will be passed to another
* control method, we must resolve all local
* references here (Local variables, arguments
* to *this* method, etc.)
* Since the operands will be passed to another control method,
* we must resolve all local references here (Local variables,
* arguments to *this* method, etc.)
*/
Status = AcpiDsResolveOperands (WalkState);
if (ACPI_FAILURE (Status))
@ -666,6 +643,7 @@ AcpiDsExecEndOp (
break;
case AML_TYPE_UNDEFINED:
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Undefined opcode type Op=%p\n", Op));
@ -674,10 +652,13 @@ AcpiDsExecEndOp (
case AML_TYPE_BOGUS:
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Internal opcode=%X type Op=%p\n",
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
"Internal opcode=%X type Op=%p\n",
WalkState->Opcode, Op));
break;
default:
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
@ -690,8 +671,8 @@ AcpiDsExecEndOp (
}
/*
* ACPI 2.0 support for 64-bit integers:
* Truncate numeric result value if we are executing from a 32-bit ACPI table
* ACPI 2.0 support for 64-bit integers: Truncate numeric
* result value if we are executing from a 32-bit ACPI table
*/
AcpiExTruncateFor32bitTable (WalkState->ResultObj, WalkState);

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: dswload - Dispatcher namespace load callbacks
* $Revision: 50 $
* $Revision: 54 $
*
*****************************************************************************/
@ -177,7 +177,6 @@ AcpiDsInitCallbacks (
}
/*******************************************************************************
*
* FUNCTION: AcpiDsLoad1BeginOp
@ -200,7 +199,7 @@ AcpiDsLoad1BeginOp (
ACPI_PARSE_OBJECT *Op;
ACPI_NAMESPACE_NODE *Node;
ACPI_STATUS Status;
ACPI_OBJECT_TYPE8 DataType;
ACPI_OBJECT_TYPE8 ObjectType;
NATIVE_CHAR *Path;
@ -210,6 +209,11 @@ AcpiDsLoad1BeginOp (
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op=%p State=%p\n", Op, WalkState));
if (Op && (Op->Opcode == AML_INT_NAMEDFIELD_OP))
{
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op=%p State=%p\n", Op, WalkState));
}
/* We are only interested in opcodes that have an associated name */
if (WalkState->Op)
@ -233,25 +237,17 @@ AcpiDsLoad1BeginOp (
/* Map the raw opcode into an internal object type */
DataType = AcpiDsMapNamedOpcodeToDataType (WalkState->Opcode);
ObjectType = WalkState->OpInfo->ObjectType;
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
"State=%p Op=%p Type=%x\n", WalkState, Op, DataType));
if (WalkState->Opcode == AML_SCOPE_OP)
{
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
"State=%p Op=%p Type=%x\n", WalkState, Op, DataType));
}
"State=%p Op=%p Type=%x\n", WalkState, Op, ObjectType));
/*
* Enter the named type into the internal namespace. We enter the name
* as we go downward in the parse tree. Any necessary subobjects that involve
* arguments to the opcode must be created as we go back up the parse tree later.
*/
Status = AcpiNsLookup (WalkState->ScopeInfo, Path, DataType,
Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ObjectType,
IMODE_LOAD_PASS1, NS_NO_UPSEARCH, WalkState, &(Node));
if (ACPI_FAILURE (Status))
@ -306,7 +302,7 @@ AcpiDsLoad1EndOp (
ACPI_WALK_STATE *WalkState)
{
ACPI_PARSE_OBJECT *Op;
ACPI_OBJECT_TYPE8 DataType;
ACPI_OBJECT_TYPE8 ObjectType;
PROC_NAME ("DsLoad1EndOp");
@ -317,34 +313,51 @@ AcpiDsLoad1EndOp (
/* We are only interested in opcodes that have an associated name */
if (!(WalkState->OpInfo->Flags & AML_NAMED))
if (!(WalkState->OpInfo->Flags & (AML_NAMED | AML_FIELD)))
{
return (AE_OK);
}
/* Get the type to determine if we should pop the scope */
/* Get the object type to determine if we should pop the scope */
DataType = AcpiDsMapNamedOpcodeToDataType (Op->Opcode);
ObjectType = WalkState->OpInfo->ObjectType;
if (WalkState->OpInfo->Flags & AML_FIELD)
{
if (WalkState->Opcode == AML_FIELD_OP ||
WalkState->Opcode == AML_BANK_FIELD_OP ||
WalkState->Opcode == AML_INDEX_FIELD_OP)
{
AcpiDsInitFieldObjects (Op, WalkState);
}
return (AE_OK);
}
if (Op->Opcode == AML_REGION_OP)
{
/*Status = */AcpiExCreateRegion (((ACPI_PARSE2_OBJECT *) Op)->Data,
((ACPI_PARSE2_OBJECT *) Op)->Length,
(ACPI_ADR_SPACE_TYPE) ((Op->Value.Arg)->Value.Integer), WalkState);
}
if (Op->Opcode == AML_NAME_OP)
{
/* For Name opcode, check the argument */
/* For Name opcode, get the object type from the argument */
if (Op->Value.Arg)
{
DataType = AcpiDsMapOpcodeToDataType (
(Op->Value.Arg)->Opcode, NULL);
((ACPI_NAMESPACE_NODE *)Op->Node)->Type =
(UINT8) DataType;
ObjectType = (AcpiPsGetOpcodeInfo ((Op->Value.Arg)->Opcode))->ObjectType;
Op->Node->Type = (UINT8) ObjectType;
}
}
/* Pop the scope stack */
if (AcpiNsOpensScope (DataType))
if (AcpiNsOpensScope (ObjectType))
{
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "(%s): Popping scope for Op %p\n",
AcpiUtGetTypeName (DataType), Op));
AcpiUtGetTypeName (ObjectType), Op));
AcpiDsScopeStackPop (WalkState);
}
@ -375,7 +388,7 @@ AcpiDsLoad2BeginOp (
ACPI_PARSE_OBJECT *Op;
ACPI_NAMESPACE_NODE *Node;
ACPI_STATUS Status;
ACPI_OBJECT_TYPE8 DataType;
ACPI_OBJECT_TYPE8 ObjectType;
NATIVE_CHAR *BufferPtr;
void *Original = NULL;
@ -433,10 +446,10 @@ AcpiDsLoad2BeginOp (
/* Map the raw opcode into an internal object type */
DataType = AcpiDsMapNamedOpcodeToDataType (WalkState->Opcode);
ObjectType = WalkState->OpInfo->ObjectType;
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
"State=%p Op=%p Type=%x\n", WalkState, Op, DataType));
"State=%p Op=%p Type=%x\n", WalkState, Op, ObjectType));
if (WalkState->Opcode == AML_FIELD_OP ||
@ -453,7 +466,7 @@ AcpiDsLoad2BeginOp (
* The NamePath is an object reference to an existing object. Don't enter the
* name into the namespace, but look it up for use later
*/
Status = AcpiNsLookup (WalkState->ScopeInfo, BufferPtr, DataType,
Status = AcpiNsLookup (WalkState->ScopeInfo, BufferPtr, ObjectType,
IMODE_EXECUTE, NS_SEARCH_PARENT, WalkState, &(Node));
}
@ -464,9 +477,9 @@ AcpiDsLoad2BeginOp (
Original = Op->Node;
Node = Op->Node;
if (AcpiNsOpensScope (DataType))
if (AcpiNsOpensScope (ObjectType))
{
Status = AcpiDsScopeStackPush (Node, DataType, WalkState);
Status = AcpiDsScopeStackPush (Node, ObjectType, WalkState);
if (ACPI_FAILURE (Status))
{
return (Status);
@ -481,7 +494,7 @@ AcpiDsLoad2BeginOp (
* as we go downward in the parse tree. Any necessary subobjects that involve
* arguments to the opcode must be created as we go back up the parse tree later.
*/
Status = AcpiNsLookup (WalkState->ScopeInfo, BufferPtr, DataType,
Status = AcpiNsLookup (WalkState->ScopeInfo, BufferPtr, ObjectType,
IMODE_EXECUTE, NS_NO_UPSEARCH, WalkState, &(Node));
}
@ -546,7 +559,7 @@ AcpiDsLoad2EndOp (
{
ACPI_PARSE_OBJECT *Op;
ACPI_STATUS Status = AE_OK;
ACPI_OBJECT_TYPE8 DataType;
ACPI_OBJECT_TYPE8 ObjectType;
ACPI_NAMESPACE_NODE *Node;
ACPI_PARSE_OBJECT *Arg;
ACPI_NAMESPACE_NODE *NewNode;
@ -580,7 +593,7 @@ AcpiDsLoad2EndOp (
}
DataType = AcpiDsMapNamedOpcodeToDataType (Op->Opcode);
ObjectType = WalkState->OpInfo->ObjectType;
/*
* Get the Node/name from the earlier lookup
@ -597,11 +610,10 @@ AcpiDsLoad2EndOp (
/* Pop the scope stack */
if (AcpiNsOpensScope (DataType))
if (AcpiNsOpensScope (ObjectType))
{
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "(%s) Popping scope for Op %p\n",
AcpiUtGetTypeName (DataType), Op));
AcpiUtGetTypeName (ObjectType), Op));
AcpiDsScopeStackPop (WalkState);
}
@ -655,7 +667,6 @@ AcpiDsLoad2EndOp (
case AML_TYPE_NAMED_FIELD:
Arg = Op->Value.Arg;
switch (Op->Opcode)
{
case AML_INDEX_FIELD_OP:
@ -664,13 +675,11 @@ AcpiDsLoad2EndOp (
WalkState);
break;
case AML_BANK_FIELD_OP:
Status = AcpiDsCreateBankField (Op, Arg->Node, WalkState);
break;
case AML_FIELD_OP:
Status = AcpiDsCreateField (Op, Arg->Node, WalkState);
@ -694,25 +703,21 @@ AcpiDsLoad2EndOp (
Status = AcpiExCreateProcessor (WalkState);
break;
case AML_POWER_RES_OP:
Status = AcpiExCreatePowerResource (WalkState);
break;
case AML_MUTEX_OP:
Status = AcpiExCreateMutex (WalkState);
break;
case AML_EVENT_OP:
Status = AcpiExCreateEvent (WalkState);
break;
case AML_DATA_REGION_OP:
Status = AcpiExCreateTableRegion (WalkState);
@ -748,13 +753,13 @@ AcpiDsLoad2EndOp (
{
case AML_METHOD_OP:
/*
* MethodOp PkgLength NamesString MethodFlags TermList
* MethodOp PkgLength NameString MethodFlags TermList
*/
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
"LOADING-Method: State=%p Op=%p NamedObj=%p\n",
WalkState, Op, Node));
if (!Node->Object)
if (!AcpiNsGetAttachedObject (Node))
{
Status = AcpiDsCreateOperands (WalkState, Arg);
if (ACPI_FAILURE (Status))
@ -774,9 +779,23 @@ AcpiDsLoad2EndOp (
* The OpRegion is not fully parsed at this time. Only valid argument is the SpaceId.
* (We must save the address of the AML of the address and length operands)
*/
Status = AcpiExCreateRegion (((ACPI_PARSE2_OBJECT *) Op)->Data,
((ACPI_PARSE2_OBJECT *) Op)->Length,
(ACPI_ADR_SPACE_TYPE) Arg->Value.Integer, WalkState);
/*
* If we have a valid region, initialize it
* Namespace is NOT locked at this point.
*/
Status = AcpiEvInitializeRegion (AcpiNsGetAttachedObject (Node), FALSE);
if (ACPI_FAILURE (Status))
{
/*
* If AE_NOT_EXIST is returned, it is not fatal
* because many regions get created before a handler
* is installed for said region.
*/
if (AE_NOT_EXIST == Status)
{
Status = AE_OK;
}
}
break;
@ -809,10 +828,14 @@ AcpiDsLoad2EndOp (
WalkState, &(NewNode));
if (ACPI_SUCCESS (Status))
{
/* TBD: has name already been resolved by here ??*/
/* TBD: [Restructure] Make sure that what we found is indeed a method! */
/* We didn't search for a method on purpose, to see if the name would resolve! */
/*
* Make sure that what we found is indeed a method
* We didn't search for a method on purpose, to see if the name would resolve
*/
if (NewNode->Type != ACPI_TYPE_METHOD)
{
Status = AE_AML_OPERAND_TYPE;
}
/* We could put the returned object (Node) on the object stack for later, but
* for now, we will put it in the "op" object that the parser uses, so we

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: dswstate - Dispatcher parse tree walk management routines
* $Revision: 54 $
* $Revision: 57 $
*
*****************************************************************************/
@ -828,32 +828,33 @@ AcpiDsObjStackGetValue (
*
* FUNCTION: AcpiDsGetCurrentWalkState
*
* PARAMETERS: WalkList - Get current active state for this walk list
* PARAMETERS: Thread - Get current active state for this Thread
*
* RETURN: Pointer to the current walk state
*
* DESCRIPTION: Get the walk state that is at the head of the list (the "current"
* walk state.
* walk state.)
*
******************************************************************************/
ACPI_WALK_STATE *
AcpiDsGetCurrentWalkState (
ACPI_WALK_LIST *WalkList)
ACPI_THREAD_STATE *Thread)
{
PROC_NAME ("DsGetCurrentWalkState");
ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "DsGetCurrentWalkState, =%p\n",
WalkList->WalkState));
if (!WalkList)
if (!Thread)
{
return (NULL);
}
return (WalkList->WalkState);
ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "DsGetCurrentWalkState, =%p\n",
Thread->WalkStateList));
return (Thread->WalkStateList);
}
@ -873,13 +874,13 @@ AcpiDsGetCurrentWalkState (
void
AcpiDsPushWalkState (
ACPI_WALK_STATE *WalkState,
ACPI_WALK_LIST *WalkList)
ACPI_THREAD_STATE *Thread)
{
FUNCTION_TRACE ("DsPushWalkState");
WalkState->Next = WalkList->WalkState;
WalkList->WalkState = WalkState;
WalkState->Next = Thread->WalkStateList;
Thread->WalkStateList = WalkState;
return_VOID;
}
@ -901,7 +902,7 @@ AcpiDsPushWalkState (
ACPI_WALK_STATE *
AcpiDsPopWalkState (
ACPI_WALK_LIST *WalkList)
ACPI_THREAD_STATE *Thread)
{
ACPI_WALK_STATE *WalkState;
@ -909,18 +910,18 @@ AcpiDsPopWalkState (
FUNCTION_TRACE ("DsPopWalkState");
WalkState = WalkList->WalkState;
WalkState = Thread->WalkStateList;
if (WalkState)
{
/* Next walk state becomes the current walk state */
WalkList->WalkState = WalkState->Next;
Thread->WalkStateList = WalkState->Next;
/*
* Don't clear the NEXT field, this serves as an indicator
* that there is a parent WALK STATE
* WalkState->Next = NULL;
* NO: WalkState->Next = NULL;
*/
}
@ -933,12 +934,12 @@ AcpiDsPopWalkState (
* FUNCTION: AcpiDsCreateWalkState
*
* PARAMETERS: Origin - Starting point for this walk
* WalkList - Owning walk list
* Thread - Current thread state
*
* RETURN: Pointer to the new walk state.
*
* DESCRIPTION: Allocate and initialize a new walk state. The current walk state
* is set to this new state.
* DESCRIPTION: Allocate and initialize a new walk state. The current walk
* state is set to this new state.
*
******************************************************************************/
@ -947,7 +948,7 @@ AcpiDsCreateWalkState (
ACPI_OWNER_ID OwnerId,
ACPI_PARSE_OBJECT *Origin,
ACPI_OPERAND_OBJECT *MthDesc,
ACPI_WALK_LIST *WalkList)
ACPI_THREAD_STATE *Thread)
{
ACPI_WALK_STATE *WalkState;
ACPI_STATUS Status;
@ -966,7 +967,7 @@ AcpiDsCreateWalkState (
WalkState->OwnerId = OwnerId;
WalkState->Origin = Origin;
WalkState->MethodDesc = MthDesc;
WalkState->WalkList = WalkList;
WalkState->Thread = Thread;
/* Init the method args/local */
@ -984,9 +985,9 @@ AcpiDsCreateWalkState (
/* Put the new state at the head of the walk list */
if (WalkList)
if (Thread)
{
AcpiDsPushWalkState (WalkState, WalkList);
AcpiDsPushWalkState (WalkState, Thread);
}
return_PTR (WalkState);
@ -1030,7 +1031,6 @@ AcpiDsInitAmlWalk (
WalkState->ParserState.PkgEnd = AmlStart + AmlLength;
/* The NextOp of the NextWalk will be the beginning of the method */
/* TBD: [Restructure] -- obsolete? */
WalkState->NextOp = NULL;
WalkState->Params = Params;
@ -1062,7 +1062,7 @@ AcpiDsInitAmlWalk (
AcpiDsMethodDataInitArgs (Params, MTH_NUM_ARGS, WalkState);
}
else
{
/* Setup the current scope */
@ -1088,7 +1088,6 @@ AcpiDsInitAmlWalk (
#endif
/*******************************************************************************
*
* FUNCTION: AcpiDsDeleteWalkState

View File

@ -2,7 +2,7 @@
*
* Module Name: evevent - Fixed and General Purpose AcpiEvent
* handling and dispatch
* $Revision: 51 $
* $Revision: 54 $
*
*****************************************************************************/
@ -156,18 +156,6 @@ AcpiEvInitialize (
return_ACPI_STATUS (AE_NO_ACPI_TABLES);
}
/* Make sure the BIOS supports ACPI mode */
if (SYS_MODE_LEGACY == AcpiHwGetModeCapabilities())
{
ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "ACPI Mode is not supported!\n"));
return_ACPI_STATUS (AE_ERROR);
}
AcpiGbl_OriginalMode = AcpiHwGetMode();
/*
* Initialize the Fixed and General Purpose AcpiEvents prior. This is
* done prior to enabling SCIs to prevent interrupts from occuring
@ -196,7 +184,6 @@ AcpiEvInitialize (
return_ACPI_STATUS (Status);
}
/* Install handlers for control method GPE handlers (_Lxx, _Exx) */
Status = AcpiEvInitGpeControlMethods ();
@ -215,7 +202,6 @@ AcpiEvInitialize (
return_ACPI_STATUS (Status);
}
return_ACPI_STATUS (Status);
}
@ -235,7 +221,8 @@ AcpiEvInitialize (
ACPI_STATUS
AcpiEvFixedEventInitialize(void)
{
int i = 0;
NATIVE_UINT i;
/* Initialize the structure that keeps track of fixed event handlers */
@ -289,8 +276,7 @@ AcpiEvFixedEventDetect (void)
"Fixed AcpiEvent Block: Enable %08X Status %08X\n",
EnableRegister, StatusRegister));
/* power management timer roll over */
/* Power management timer roll over */
if ((StatusRegister & ACPI_STATUS_PMTIMER) &&
(EnableRegister & ACPI_ENABLE_PMTIMER))
@ -298,7 +284,7 @@ AcpiEvFixedEventDetect (void)
IntStatus |= AcpiEvFixedEventDispatch (ACPI_EVENT_PMTIMER);
}
/* global event (BIOS wants the global lock) */
/* Global event (BIOS wants the global lock) */
if ((StatusRegister & ACPI_STATUS_GLOBAL) &&
(EnableRegister & ACPI_ENABLE_GLOBAL))
@ -306,7 +292,7 @@ AcpiEvFixedEventDetect (void)
IntStatus |= AcpiEvFixedEventDispatch (ACPI_EVENT_GLOBAL);
}
/* power button event */
/* Power button event */
if ((StatusRegister & ACPI_STATUS_POWER_BUTTON) &&
(EnableRegister & ACPI_ENABLE_POWER_BUTTON))
@ -314,7 +300,7 @@ AcpiEvFixedEventDetect (void)
IntStatus |= AcpiEvFixedEventDispatch (ACPI_EVENT_POWER_BUTTON);
}
/* sleep button event */
/* Sleep button event */
if ((StatusRegister & ACPI_STATUS_SLEEP_BUTTON) &&
(EnableRegister & ACPI_ENABLE_SLEEP_BUTTON))
@ -654,7 +640,6 @@ AcpiEvSaveMethodInfo (
AcpiGbl_GpeInfo [GpeNumber].Type = Type;
AcpiGbl_GpeInfo [GpeNumber].MethodHandle = ObjHandle;
/*
* Enable the GPE (SCIs should be disabled at this point)
*/
@ -811,6 +796,7 @@ AcpiEvAsynchExecuteGpeMethod (
FUNCTION_TRACE ("EvAsynchExecuteGpeMethod");
/*
* Take a snapshot of the GPE info for this level
*/

View File

@ -2,7 +2,7 @@
*
* Module Name: evmisc - ACPI device notification handler dispatch
* and ACPI Global Lock support
* $Revision: 35 $
* $Revision: 36 $
*
*****************************************************************************/
@ -220,7 +220,6 @@ AcpiEvQueueNotifyRequest (
}
}
/* If there is any handler to run, schedule the dispatcher */
if ((AcpiGbl_SysNotify.Handler && (NotifyValue <= MAX_SYS_NOTIFY)) ||
@ -298,7 +297,6 @@ AcpiEvNotifyDispatch (
GlobalContext = AcpiGbl_SysNotify.Context;
}
}
else
{
/* Global driver notification handler */
@ -310,7 +308,6 @@ AcpiEvNotifyDispatch (
}
}
/* Invoke the system handler first, if present */
if (GlobalHandler)
@ -476,7 +473,6 @@ AcpiEvAcquireGlobalLock(void)
AcpiGbl_GlobalLockThreadCount++;
/* If we (OS side) have the hardware lock already, we are done */
if (AcpiGbl_GlobalLockAcquired)
@ -491,7 +487,6 @@ AcpiEvAcquireGlobalLock(void)
return_ACPI_STATUS (AE_OK);
}
/* We must acquire the actual hardware lock */
GlobalLock = AcpiGbl_FACS->GlobalLock;
@ -506,7 +501,6 @@ AcpiEvAcquireGlobalLock(void)
return_ACPI_STATUS (AE_OK);
}
/*
* Did not get the lock. The pending bit was set above, and we must now
* wait until we get the global lock released interrupt.

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: evregion - ACPI AddressSpace (OpRegion) handler dispatch
* $Revision: 113 $
* $Revision: 120 $
*
*****************************************************************************/
@ -161,14 +161,14 @@ AcpiEvInstallDefaultAddressSpaceHandlers (
* space must be always available -- even though we are nowhere
* near ready to find the PCI root buses at this point.
*
* NOTE: We ignore AE_EXIST because this means that a handler has
* already been installed (via AcpiInstallAddressSpaceHandler)
* NOTE: We ignore AE_ALREADY_EXISTS because this means that a handler
* has already been installed (via AcpiInstallAddressSpaceHandler)
*/
Status = AcpiInstallAddressSpaceHandler (AcpiGbl_RootNode,
ACPI_ADR_SPACE_SYSTEM_MEMORY,
ACPI_DEFAULT_HANDLER, NULL, NULL);
if ((ACPI_FAILURE (Status)) &&
(Status != AE_EXIST))
(Status != AE_ALREADY_EXISTS))
{
return_ACPI_STATUS (Status);
}
@ -177,7 +177,7 @@ AcpiEvInstallDefaultAddressSpaceHandlers (
ACPI_ADR_SPACE_SYSTEM_IO,
ACPI_DEFAULT_HANDLER, NULL, NULL);
if ((ACPI_FAILURE (Status)) &&
(Status != AE_EXIST))
(Status != AE_ALREADY_EXISTS))
{
return_ACPI_STATUS (Status);
}
@ -186,7 +186,7 @@ AcpiEvInstallDefaultAddressSpaceHandlers (
ACPI_ADR_SPACE_PCI_CONFIG,
ACPI_DEFAULT_HANDLER, NULL, NULL);
if ((ACPI_FAILURE (Status)) &&
(Status != AE_EXIST))
(Status != AE_ALREADY_EXISTS))
{
return_ACPI_STATUS (Status);
}
@ -196,8 +196,6 @@ AcpiEvInstallDefaultAddressSpaceHandlers (
}
/* TBD: [Restructure] Move elsewhere */
/*******************************************************************************
*
* FUNCTION: AcpiEvExecuteRegMethod
@ -217,13 +215,20 @@ AcpiEvExecuteRegMethod (
UINT32 Function)
{
ACPI_OPERAND_OBJECT *Params[3];
ACPI_OPERAND_OBJECT *RegionObj2;
ACPI_STATUS Status;
FUNCTION_TRACE ("EvExecuteRegMethod");
if (RegionObj->Region.Extra->Extra.Method_REG == NULL)
RegionObj2 = AcpiNsGetSecondaryObject (RegionObj);
if (!RegionObj2)
{
return_ACPI_STATUS (AE_NOT_EXIST);
}
if (RegionObj2->Extra.Method_REG == NULL)
{
return_ACPI_STATUS (AE_OK);
}
@ -260,8 +265,8 @@ AcpiEvExecuteRegMethod (
/*
* Execute the method, no return value
*/
DEBUG_EXEC(AcpiUtDisplayInitPathname (RegionObj->Region.Extra->Extra.Method_REG, " [Method]"));
Status = AcpiNsEvaluateByHandle (RegionObj->Region.Extra->Extra.Method_REG, Params, NULL);
DEBUG_EXEC(AcpiUtDisplayInitPathname (RegionObj2->Extra.Method_REG, " [Method]"));
Status = AcpiNsEvaluateByHandle (RegionObj2->Extra.Method_REG, Params, NULL);
AcpiUtRemoveReference (Params[1]);
@ -280,7 +285,7 @@ AcpiEvExecuteRegMethod (
* SpaceId - ID of the address space (0-255)
* Function - Read or Write operation
* Address - Where in the space to read or write
* BitWidth - Field width in bits (8, 16, or 32)
* BitWidth - Field width in bits (8, 16, 32, or 64)
* Value - Pointer to in or out value
*
* RETURN: Status
@ -296,18 +301,25 @@ AcpiEvAddressSpaceDispatch (
UINT32 Function,
ACPI_PHYSICAL_ADDRESS Address,
UINT32 BitWidth,
UINT32 *Value)
ACPI_INTEGER *Value)
{
ACPI_STATUS Status;
ACPI_ADR_SPACE_HANDLER Handler;
ACPI_ADR_SPACE_SETUP RegionSetup;
ACPI_OPERAND_OBJECT *HandlerDesc;
ACPI_OPERAND_OBJECT *RegionObj2;
void *RegionContext = NULL;
FUNCTION_TRACE ("EvAddressSpaceDispatch");
RegionObj2 = AcpiNsGetSecondaryObject (RegionObj);
if (!RegionObj2)
{
return_ACPI_STATUS (AE_NOT_EXIST);
}
/*
* Ensure that there is a handler associated with this region
*/
@ -317,14 +329,14 @@ AcpiEvAddressSpaceDispatch (
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "no handler for region(%p) [%s]\n",
RegionObj, AcpiUtGetRegionName (RegionObj->Region.SpaceId)));
return_ACPI_STATUS(AE_NOT_EXIST);
return_ACPI_STATUS (AE_NOT_EXIST);
}
/*
* It may be the case that the region has never been initialized
* Some types of regions require special init code
*/
if (!(RegionObj->Region.Flags & AOPOBJ_INITIALIZED))
if (!(RegionObj->Region.Flags & AOPOBJ_SETUP_COMPLETE))
{
/*
* This region has not been initialized yet, do it
@ -361,16 +373,16 @@ AcpiEvAddressSpaceDispatch (
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Region Init: %s [%s]\n",
AcpiFormatException (Status),
AcpiUtGetRegionName (RegionObj->Region.SpaceId)));
return_ACPI_STATUS(Status);
return_ACPI_STATUS (Status);
}
RegionObj->Region.Flags |= AOPOBJ_INITIALIZED;
RegionObj->Region.Flags |= AOPOBJ_SETUP_COMPLETE;
/*
* Save the returned context for use in all accesses to
* this particular region.
*/
RegionObj->Region.Extra->Extra.RegionContext = RegionContext;
RegionObj2->Extra.RegionContext = RegionContext;
}
/*
@ -398,7 +410,7 @@ AcpiEvAddressSpaceDispatch (
*/
Status = Handler (Function, Address, BitWidth, Value,
HandlerDesc->AddrHandler.Context,
RegionObj->Region.Extra->Extra.RegionContext);
RegionObj2->Extra.RegionContext);
if (ACPI_FAILURE (Status))
{
@ -443,13 +455,19 @@ AcpiEvDisassociateRegionFromHandler(
ACPI_OPERAND_OBJECT **LastObjPtr;
ACPI_ADR_SPACE_SETUP RegionSetup;
void *RegionContext;
ACPI_OPERAND_OBJECT *RegionObj2;
ACPI_STATUS Status;
FUNCTION_TRACE ("EvDisassociateRegionFromHandler");
RegionContext = RegionObj->Region.Extra->Extra.RegionContext;
RegionObj2 = AcpiNsGetSecondaryObject (RegionObj);
if (!RegionObj2)
{
return;
}
RegionContext = RegionObj2->Extra.RegionContext;
/*
* Get the address handler from the region object
@ -518,7 +536,7 @@ AcpiEvDisassociateRegionFromHandler(
AcpiUtGetRegionName (RegionObj->Region.SpaceId)));
}
RegionObj->Region.Flags &= ~(AOPOBJ_INITIALIZED);
RegionObj->Region.Flags &= ~(AOPOBJ_SETUP_COMPLETE);
/*
* Remove handler reference in the region
@ -587,18 +605,19 @@ AcpiEvAssociateRegionAndHandler (
/*
* Link this region to the front of the handler's list
* Link this region to the front of the handler's list
*/
RegionObj->Region.Next = HandlerObj->AddrHandler.RegionList;
HandlerObj->AddrHandler.RegionList = RegionObj;
/*
* set the region's handler
* Set the region's handler
*/
RegionObj->Region.AddrHandler = HandlerObj;
/*
* Last thing, tell all users that this region is usable
* Tell all users that this region is usable by running the _REG
* method
*/
if (AcpiNsIsLocked)
{
@ -624,8 +643,8 @@ AcpiEvAssociateRegionAndHandler (
* Level - Nesting level of the handle
* Context - Passed into AcpiNsWalkNamespace
*
* DESCRIPTION: This routine checks to see if the object is a Region if it
* is then the address handler is installed in it.
* DESCRIPTION: This routine installs an address handler into objects that are
* of type Region.
*
* If the Object is a Device, and the device has a handler of
* the same type then the search is terminated in that branch.

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: evrgnini- ACPI AddressSpace (OpRegion) init
* $Revision: 48 $
* $Revision: 51 $
*
*****************************************************************************/
@ -371,7 +371,6 @@ AcpiEvPciConfigRegionSetup (
}
/*******************************************************************************
*
* FUNCTION: AcpiEvPciBarRegionSetup
@ -507,6 +506,7 @@ AcpiEvInitializeRegion (
ACPI_STATUS Status;
ACPI_NAMESPACE_NODE *MethodNode;
ACPI_NAME *RegNamePtr = (ACPI_NAME *) METHOD_NAME__REG;
ACPI_OPERAND_OBJECT *RegionObj2;
FUNCTION_TRACE_U32 ("EvInitializeRegion", AcpiNsLocked);
@ -517,12 +517,25 @@ AcpiEvInitializeRegion (
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
if (RegionObj->Common.Flags & AOPOBJ_OBJECT_INITIALIZED)
{
return_ACPI_STATUS (AE_OK);
}
RegionObj2 = AcpiNsGetSecondaryObject (RegionObj);
if (!RegionObj2)
{
return_ACPI_STATUS (AE_NOT_EXIST);
}
Node = AcpiNsGetParentObject (RegionObj->Region.Node);
SpaceId = RegionObj->Region.SpaceId;
RegionObj->Region.AddrHandler = NULL;
RegionObj->Region.Extra->Extra.Method_REG = NULL;
RegionObj->Region.Flags &= ~(AOPOBJ_INITIALIZED);
RegionObj2->Extra.Method_REG = NULL;
RegionObj->Common.Flags &= ~(AOPOBJ_SETUP_COMPLETE);
RegionObj->Common.Flags |= AOPOBJ_OBJECT_INITIALIZED;
/*
* Find any "_REG" associated with this region definition
@ -536,7 +549,7 @@ AcpiEvInitializeRegion (
* definition. This will be executed when the handler is attached
* or removed
*/
RegionObj->Region.Extra->Extra.Method_REG = MethodNode;
RegionObj2->Extra.Method_REG = MethodNode;
}
/*
@ -590,6 +603,7 @@ AcpiEvInitializeRegion (
*/
AcpiEvAssociateRegionAndHandler (HandlerObj, RegionObj,
AcpiNsLocked);
return_ACPI_STATUS (AE_OK);
}

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: evxface - External interfaces for ACPI events
* $Revision: 116 $
* $Revision: 118 $
*
*****************************************************************************/
@ -169,7 +169,7 @@ AcpiInstallFixedEventHandler (
if (NULL != AcpiGbl_FixedEventHandlers[Event].Handler)
{
Status = AE_EXIST;
Status = AE_ALREADY_EXISTS;
goto Cleanup;
}
@ -327,7 +327,7 @@ AcpiInstallNotifyHandler (
((HandlerType == ACPI_DEVICE_NOTIFY) &&
AcpiGbl_DrvNotify.Handler))
{
Status = AE_EXIST;
Status = AE_ALREADY_EXISTS;
goto UnlockAndExit;
}
@ -352,7 +352,7 @@ AcpiInstallNotifyHandler (
* Caller will only receive notifications specific to the target object.
* Note that only certain object types can receive notifications.
*/
else
else
{
/*
* These are the ONLY objects that can receive ACPI notifications
@ -379,7 +379,7 @@ AcpiInstallNotifyHandler (
((HandlerType == ACPI_DEVICE_NOTIFY) &&
ObjDesc->Device.DrvHandler))
{
Status = AE_EXIST;
Status = AE_ALREADY_EXISTS;
goto UnlockAndExit;
}
}
@ -488,7 +488,7 @@ AcpiRemoveNotifyHandler (
/*
* Root Object
*/
if (Device == ACPI_ROOT_OBJECT)
if (Device == ACPI_ROOT_OBJECT)
{
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Removing notify handler for ROOT object.\n"));
@ -501,13 +501,13 @@ AcpiRemoveNotifyHandler (
goto UnlockAndExit;
}
if (HandlerType == ACPI_SYSTEM_NOTIFY)
if (HandlerType == ACPI_SYSTEM_NOTIFY)
{
AcpiGbl_SysNotify.Node = NULL;
AcpiGbl_SysNotify.Handler = NULL;
AcpiGbl_SysNotify.Context = NULL;
}
else
else
{
AcpiGbl_DrvNotify.Node = NULL;
AcpiGbl_DrvNotify.Handler = NULL;
@ -518,7 +518,7 @@ AcpiRemoveNotifyHandler (
/*
* All Other Objects
*/
else
else
{
/*
* These are the ONLY objects that can receive ACPI notifications
@ -630,7 +630,7 @@ AcpiInstallGpeHandler (
if (AcpiGbl_GpeInfo[GpeNumber].Handler)
{
Status = AE_EXIST;
Status = AE_ALREADY_EXISTS;
goto Cleanup;
}

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: evxfevnt - External Interfaces, ACPI event disable/enable
* $Revision: 38 $
* $Revision: 42 $
*
*****************************************************************************/
@ -143,13 +143,13 @@
ACPI_STATUS
AcpiEnable (void)
{
ACPI_STATUS Status;
ACPI_STATUS Status = AE_OK;
FUNCTION_TRACE ("AcpiEnable");
/* Make sure we've got ACPI tables */
/* Make sure we have ACPI tables */
if (!AcpiGbl_DSDT)
{
@ -157,24 +157,26 @@ AcpiEnable (void)
return_ACPI_STATUS (AE_NO_ACPI_TABLES);
}
/* Make sure the BIOS supports ACPI mode */
AcpiGbl_OriginalMode = AcpiHwGetMode ();
if (SYS_MODE_LEGACY == AcpiHwGetModeCapabilities())
if (AcpiGbl_OriginalMode == SYS_MODE_ACPI)
{
ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "Only legacy mode supported!\n"));
return_ACPI_STATUS (AE_ERROR);
ACPI_DEBUG_PRINT ((ACPI_DB_OK, "Already in ACPI mode.\n"));
}
/* Transition to ACPI mode */
Status = AcpiHwSetMode (SYS_MODE_ACPI);
if (ACPI_FAILURE (Status))
else
{
ACPI_DEBUG_PRINT ((ACPI_DB_FATAL, "Could not transition to ACPI mode.\n"));
return_ACPI_STATUS (Status);
}
/* Transition to ACPI mode */
ACPI_DEBUG_PRINT ((ACPI_DB_OK, "Transition to ACPI mode successful\n"));
Status = AcpiHwSetMode (SYS_MODE_ACPI);
if (ACPI_FAILURE (Status))
{
ACPI_DEBUG_PRINT ((ACPI_DB_FATAL, "Could not transition to ACPI mode.\n"));
return_ACPI_STATUS (Status);
}
ACPI_DEBUG_PRINT ((ACPI_DB_OK, "Transition to ACPI mode successful\n"));
}
return_ACPI_STATUS (Status);
}
@ -196,19 +198,22 @@ AcpiEnable (void)
ACPI_STATUS
AcpiDisable (void)
{
ACPI_STATUS Status;
ACPI_STATUS Status = AE_OK;
FUNCTION_TRACE ("AcpiDisable");
/* Restore original mode */
Status = AcpiHwSetMode (AcpiGbl_OriginalMode);
if (ACPI_FAILURE (Status))
if (AcpiHwGetMode () != AcpiGbl_OriginalMode)
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unable to transition to original mode"));
return_ACPI_STATUS (Status);
/* Restore original mode */
Status = AcpiHwSetMode (AcpiGbl_OriginalMode);
if (ACPI_FAILURE (Status))
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unable to transition to original mode"));
return_ACPI_STATUS (Status);
}
}
/* Unload the SCI interrupt handler */

View File

@ -2,7 +2,7 @@
*
* Module Name: evxfregn - External Interfaces, ACPI Operation Regions and
* Address Spaces.
* $Revision: 40 $
* $Revision: 41 $
*
*****************************************************************************/
@ -265,7 +265,7 @@ AcpiInstallAddressSpaceHandler (
*/
if(HandlerObj->AddrHandler.SpaceId == SpaceId)
{
Status = AE_EXIST;
Status = AE_ALREADY_EXISTS;
goto UnlockAndExit;
}

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: exconfig - Namespace reconfiguration (Load/Unload opcodes)
* $Revision: 44 $
* $Revision: 47 $
*
*****************************************************************************/
@ -160,7 +160,9 @@ AcpiExLoadOp (
FUNCTION_TRACE ("ExLoadOp");
/* TBD: [Unhandled] Object can be either a field or an opregion */
/* Object can be either a field or an opregion */
/* TBD: Handle field vs. Opregion *?
/* Get the table header */
@ -168,9 +170,9 @@ AcpiExLoadOp (
TableHeader.Length = 0;
for (i = 0; i < sizeof (ACPI_TABLE_HEADER); i++)
{
Status = AcpiEvAddressSpaceDispatch (RgnDesc, ACPI_READ_ADR_SPACE,
Status = AcpiEvAddressSpaceDispatch (RgnDesc, ACPI_READ,
(ACPI_PHYSICAL_ADDRESS) i, 8,
(UINT32 *) ((UINT8 *) &TableHeader + i));
(ACPI_INTEGER *) ((UINT8 *) &TableHeader + i));
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
@ -195,16 +197,15 @@ AcpiExLoadOp (
for (i = 0; i < TableHeader.Length; i++)
{
Status = AcpiEvAddressSpaceDispatch (RgnDesc, ACPI_READ_ADR_SPACE,
Status = AcpiEvAddressSpaceDispatch (RgnDesc, ACPI_READ,
(ACPI_PHYSICAL_ADDRESS) i, 8,
(UINT32 *) (TableDataPtr + i));
(ACPI_INTEGER *) (TableDataPtr + i));
if (ACPI_FAILURE (Status))
{
goto Cleanup;
}
}
/* Table must be either an SSDT or a PSDT */
if ((!STRNCMP (TableHeader.Signature,
@ -230,7 +231,6 @@ AcpiExLoadOp (
goto Cleanup;
}
/* Install the new table into the local data structures */
TableInfo.Pointer = (ACPI_TABLE_HEADER *) TablePtr;
@ -246,27 +246,24 @@ AcpiExLoadOp (
/* Add the table to the namespace */
/* TBD: [Restructure] - change to whatever new interface is appropriate */
/*
Status = AcpiLoadNamespace ();
Status = AcpiNsLoadTable (TableInfo.InstalledDesc, AcpiGbl_RootNode);
if (ACPI_FAILURE (Status))
{
*/
/* TBD: [Errors] Unload the table on failure ? */
/*
/* Uninstall table and free the buffer */
AcpiTbUninstallTable (TableInfo.InstalledDesc);
goto Cleanup;
}
*/
/* TBD: [Investigate] we need a pointer to the table desc */
/* We need a pointer to the table desc */
/* Init the table handle */
TableDesc->Reference.Opcode = AML_LOAD_OP;
TableDesc->Reference.Object = TableInfo.InstalledDesc;
/* TBD: store the tabledesc into the DdbHandle target */
/* Store the tabledesc into the DdbHandle target */
/* DdbHandle = TableDesc; */
return_ACPI_STATUS (Status);

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: excreate - Named object creation
* $Revision: 71 $
* $Revision: 79 $
*
*****************************************************************************/
@ -130,7 +130,6 @@
MODULE_NAME ("excreate")
/*****************************************************************************
*
* FUNCTION: AcpiExCreateAlias
@ -162,8 +161,8 @@ AcpiExCreateAlias (
/* Attach the original source object to the new Alias Node */
Status = AcpiNsAttachObject ((ACPI_NAMESPACE_NODE *) WalkState->Operands[0],
SourceNode->Object,
Status = AcpiNsAttachObject ((ACPI_NAMESPACE_NODE *) WalkState->Operands[0],
AcpiNsGetAttachedObject (SourceNode),
SourceNode->Type);
/*
@ -209,11 +208,11 @@ AcpiExCreateEvent (
goto Cleanup;
}
/* Create the actual OS semaphore */
/* TBD: [Investigate] should be created with 0 or 1 units? */
Status = AcpiOsCreateSemaphore (ACPI_NO_UNIT_LIMIT, 1,
/*
* Create the actual OS semaphore, with zero initial units -- meaning
* that the event is created in an unsignalled state
*/
Status = AcpiOsCreateSemaphore (ACPI_NO_UNIT_LIMIT, 0,
&ObjDesc->Event.Semaphore);
if (ACPI_FAILURE (Status))
{
@ -226,7 +225,7 @@ AcpiExCreateEvent (
ObjDesc, (UINT8) ACPI_TYPE_EVENT);
Cleanup:
/*
/*
* Remove local reference to the object (on error, will cause deletion
* of both object and semaphore if present.)
*/
@ -269,8 +268,11 @@ AcpiExCreateMutex (
goto Cleanup;
}
/* Create the actual OS semaphore */
/*
* Create the actual OS semaphore.
* One unit max to make it a mutex, with one initial unit to allow
* the mutex to be acquired.
*/
Status = AcpiOsCreateSemaphore (1, 1, &ObjDesc->Mutex.Semaphore);
if (ACPI_FAILURE (Status))
{
@ -286,7 +288,7 @@ AcpiExCreateMutex (
Cleanup:
/*
/*
* Remove local reference to the object (on error, will cause deletion
* of both object and semaphore if present.)
*/
@ -320,6 +322,7 @@ AcpiExCreateRegion (
ACPI_STATUS Status;
ACPI_OPERAND_OBJECT *ObjDesc;
ACPI_NAMESPACE_NODE *Node;
ACPI_OPERAND_OBJECT *RegionObj2 = NULL;
FUNCTION_TRACE ("ExCreateRegion");
@ -327,13 +330,13 @@ AcpiExCreateRegion (
/* Get the Node from the object stack */
Node = (ACPI_NAMESPACE_NODE *) WalkState->Operands[0];
Node = WalkState->Op->Node;
/*
* If the region object is already attached to this node,
* just return
*/
if (Node->Object)
if (AcpiNsGetAttachedObject (Node))
{
return_ACPI_STATUS (AE_OK);
}
@ -342,8 +345,8 @@ AcpiExCreateRegion (
* Space ID must be one of the predefined IDs, or in the user-defined
* range
*/
if ((RegionSpace >= NUM_REGION_TYPES) &&
(RegionSpace < USER_REGION_BEGIN))
if ((RegionSpace >= ACPI_NUM_PREDEFINED_REGIONS) &&
(RegionSpace < ACPI_USER_REGION_BEGIN))
{
REPORT_ERROR (("Invalid AddressSpace type %X\n", RegionSpace));
return_ACPI_STATUS (AE_AML_INVALID_SPACE_ID);
@ -362,22 +365,13 @@ AcpiExCreateRegion (
goto Cleanup;
}
/* Allocate a method object for this region */
ObjDesc->Region.Extra = AcpiUtCreateInternalObject (
INTERNAL_TYPE_EXTRA);
if (!ObjDesc->Region.Extra)
{
Status = AE_NO_MEMORY;
goto Cleanup;
}
/*
* Remember location in AML stream of address & length
* operands since they need to be evaluated at run time.
*/
ObjDesc->Region.Extra->Extra.AmlStart = AmlStart;
ObjDesc->Region.Extra->Extra.AmlLength = AmlLength;
RegionObj2 = ObjDesc->Common.NextObject;
RegionObj2->Extra.AmlStart = AmlStart;
RegionObj2->Extra.AmlLength = AmlLength;
/* Init the region from the operands */
@ -388,37 +382,14 @@ AcpiExCreateRegion (
/* Install the new region object in the parent Node */
Status = AcpiNsAttachObject (Node, ObjDesc,
(UINT8) ACPI_TYPE_REGION);
if (ACPI_FAILURE (Status))
{
goto Cleanup;
}
Status = AcpiNsAttachObject (Node, ObjDesc, (UINT8) ACPI_TYPE_REGION);
/*
* If we have a valid region, initialize it
* Namespace is NOT locked at this point.
*/
Status = AcpiEvInitializeRegion (ObjDesc, FALSE);
if (ACPI_FAILURE (Status))
{
/*
* If AE_NOT_EXIST is returned, it is not fatal
* because many regions get created before a handler
* is installed for said region.
*/
if (AE_NOT_EXIST == Status)
{
Status = AE_OK;
}
}
Cleanup:
/* Remove local reference to the object */
AcpiUtRemoveReference (ObjDesc);
return_ACPI_STATUS (Status);
}
@ -506,7 +477,7 @@ AcpiExCreateProcessor (
/* Install the processor object in the parent Node */
Status = AcpiNsAttachObject ((ACPI_NAMESPACE_NODE *) Operand[0],
Status = AcpiNsAttachObject ((ACPI_NAMESPACE_NODE *) Operand[0],
ObjDesc, (UINT8) ACPI_TYPE_PROCESSOR);
@ -560,7 +531,7 @@ AcpiExCreatePowerResource (
/* Install the power resource object in the parent Node */
Status = AcpiNsAttachObject ((ACPI_NAMESPACE_NODE *) Operand[0],
Status = AcpiNsAttachObject ((ACPI_NAMESPACE_NODE *) Operand[0],
ObjDesc, (UINT8) ACPI_TYPE_POWER);
@ -642,7 +613,7 @@ AcpiExCreateMethod (
/* Attach the new object to the method Node */
Status = AcpiNsAttachObject ((ACPI_NAMESPACE_NODE *) Operand[0],
Status = AcpiNsAttachObject ((ACPI_NAMESPACE_NODE *) Operand[0],
ObjDesc, (UINT8) ACPI_TYPE_METHOD);
/* Remove local reference to the object */

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: exdump - Interpreter debug output routines
* $Revision: 126 $
* $Revision: 138 $
*
*****************************************************************************/
@ -164,9 +164,15 @@ AcpiExShowHexValue (
FUNCTION_TRACE ("ExShowHexValue");
if (!((ACPI_LV_LOAD & AcpiDbgLevel) && (_COMPONENT & AcpiDbgLayer)))
{
return;
}
if (!AmlStart)
{
REPORT_ERROR (("ExShowHexValue: null pointer\n"));
return;
}
/*
@ -194,30 +200,29 @@ AcpiExShowHexValue (
for (Length = LeadSpace; Length; --Length )
{
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_LOAD, " "));
AcpiOsPrintf (" ");
}
while (ByteCount--)
{
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_LOAD, "%02x", *AmlStart++));
AcpiOsPrintf ("%02x", *AmlStart++);
if (ByteCount)
{
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_LOAD, " "));
AcpiOsPrintf (" ");
}
}
if (ShowDecimalValue)
{
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_LOAD, " [%d]", Value));
AcpiOsPrintf (" [%d]", Value);
}
if (0 == LeadSpace)
{
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_LOAD, " "));
AcpiOsPrintf (" ");
}
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_LOAD, "\n"));
AcpiOsPrintf ("\n");
return_VOID;
}
@ -246,6 +251,11 @@ AcpiExDumpOperand (
PROC_NAME ("ExDumpOperand")
if (!((ACPI_LV_INFO & AcpiDbgLevel) && (_COMPONENT & AcpiDbgLayer)))
{
return (AE_OK);
}
if (!EntryDesc)
{
/*
@ -283,31 +293,31 @@ AcpiExDumpOperand (
{
case AML_ZERO_OP:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "Reference: Zero\n"));
AcpiOsPrintf ("Reference: Zero\n");
break;
case AML_ONE_OP:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "Reference: One\n"));
AcpiOsPrintf ("Reference: One\n");
break;
case AML_ONES_OP:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "Reference: Ones\n"));
AcpiOsPrintf ("Reference: Ones\n");
break;
case AML_REVISION_OP:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "Reference: Revision\n"));
AcpiOsPrintf ("Reference: Revision\n");
break;
case AML_DEBUG_OP:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "Reference: Debug\n"));
AcpiOsPrintf ("Reference: Debug\n");
break;
@ -321,59 +331,59 @@ AcpiExDumpOperand (
case AML_INDEX_OP:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "Reference: Index %p\n",
EntryDesc->Reference.Object));
AcpiOsPrintf ("Reference: Index %p\n",
EntryDesc->Reference.Object);
break;
case AML_ARG_OP:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "Reference: Arg%d",
EntryDesc->Reference.Offset));
AcpiOsPrintf ("Reference: Arg%d",
EntryDesc->Reference.Offset);
if (ACPI_TYPE_INTEGER == EntryDesc->Common.Type)
{
/* Value is a Number */
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, " value is [%8.8X%8.8x]",
AcpiOsPrintf (" value is [%8.8X%8.8x]",
HIDWORD(EntryDesc->Integer.Value),
LODWORD(EntryDesc->Integer.Value)));
LODWORD(EntryDesc->Integer.Value));
}
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "\n"));
AcpiOsPrintf ("\n");
break;
case AML_LOCAL_OP:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "Reference: Local%d",
EntryDesc->Reference.Offset));
AcpiOsPrintf ("Reference: Local%d",
EntryDesc->Reference.Offset);
if (ACPI_TYPE_INTEGER == EntryDesc->Common.Type)
{
/* Value is a Number */
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, " value is [%8.8X%8.8x]",
AcpiOsPrintf (" value is [%8.8X%8.8x]",
HIDWORD(EntryDesc->Integer.Value),
LODWORD(EntryDesc->Integer.Value)));
LODWORD(EntryDesc->Integer.Value));
}
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "\n"));
AcpiOsPrintf ("\n");
break;
case AML_INT_NAMEPATH_OP:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "Reference.Node->Name %X\n",
EntryDesc->Reference.Node->Name));
AcpiOsPrintf ("Reference.Node->Name %X\n",
EntryDesc->Reference.Node->Name);
break;
default:
/* unknown opcode */
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "Unknown opcode=%X\n",
EntryDesc->Reference.Opcode));
AcpiOsPrintf ("Unknown opcode=%X\n",
EntryDesc->Reference.Opcode);
break;
}
@ -383,9 +393,9 @@ AcpiExDumpOperand (
case ACPI_TYPE_BUFFER:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "Buffer len %X @ %p \n",
AcpiOsPrintf ("Buffer len %X @ %p \n",
EntryDesc->Buffer.Length,
EntryDesc->Buffer.Pointer));
EntryDesc->Buffer.Pointer);
Length = EntryDesc->Buffer.Length;
@ -398,13 +408,13 @@ AcpiExDumpOperand (
if (EntryDesc->Buffer.Pointer)
{
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "Buffer Contents: "));
AcpiOsPrintf ("Buffer Contents: ");
for (Buf = EntryDesc->Buffer.Pointer; Length--; ++Buf)
{
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, " %02x", *Buf));
AcpiOsPrintf (" %02x", *Buf);
}
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO,"\n"));
AcpiOsPrintf ("\n");
}
break;
@ -412,32 +422,32 @@ AcpiExDumpOperand (
case ACPI_TYPE_INTEGER:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "Integer %8.8X%8.8X\n",
AcpiOsPrintf ("Integer %8.8X%8.8X\n",
HIDWORD (EntryDesc->Integer.Value),
LODWORD (EntryDesc->Integer.Value)));
LODWORD (EntryDesc->Integer.Value));
break;
case INTERNAL_TYPE_IF:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "If [Integer] %8.8X%8.8X\n",
AcpiOsPrintf ("If [Integer] %8.8X%8.8X\n",
HIDWORD (EntryDesc->Integer.Value),
LODWORD (EntryDesc->Integer.Value)));
LODWORD (EntryDesc->Integer.Value));
break;
case INTERNAL_TYPE_WHILE:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "While [Integer] %8.8X%8.8X\n",
AcpiOsPrintf ("While [Integer] %8.8X%8.8X\n",
HIDWORD (EntryDesc->Integer.Value),
LODWORD (EntryDesc->Integer.Value)));
LODWORD (EntryDesc->Integer.Value));
break;
case ACPI_TYPE_PACKAGE:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "Package count %X @ %p\n",
EntryDesc->Package.Count, EntryDesc->Package.Elements));
AcpiOsPrintf ("Package count %X @ %p\n",
EntryDesc->Package.Count, EntryDesc->Package.Elements);
/*
* If elements exist, package vector pointer is valid,
@ -458,16 +468,16 @@ AcpiExDumpOperand (
}
}
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "\n"));
AcpiOsPrintf ("\n");
break;
case ACPI_TYPE_REGION:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "Region %s (%X)",
AcpiOsPrintf ("Region %s (%X)",
AcpiUtGetRegionName (EntryDesc->Region.SpaceId),
EntryDesc->Region.SpaceId));
EntryDesc->Region.SpaceId);
/*
* If the address and length have not been evaluated,
@ -475,62 +485,63 @@ AcpiExDumpOperand (
*/
if (!(EntryDesc->Region.Flags & AOPOBJ_DATA_VALID))
{
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "\n"));
AcpiOsPrintf ("\n");
}
else
{
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, " base %8.8X%8.8X Length %X\n",
AcpiOsPrintf (" base %8.8X%8.8X Length %X\n",
HIDWORD(EntryDesc->Region.Address),
LODWORD(EntryDesc->Region.Address),
EntryDesc->Region.Length));
EntryDesc->Region.Length);
}
break;
case ACPI_TYPE_STRING:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "String length %X @ %p \"",
EntryDesc->String.Length, EntryDesc->String.Pointer));
AcpiOsPrintf ("String length %X @ %p \"",
EntryDesc->String.Length, EntryDesc->String.Pointer);
for (i = 0; i < EntryDesc->String.Length; i++)
{
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "%c",
EntryDesc->String.Pointer[i]));
AcpiOsPrintf ("%c",
EntryDesc->String.Pointer[i]);
}
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "\"\n"));
AcpiOsPrintf ("\"\n");
break;
case INTERNAL_TYPE_BANK_FIELD:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "BankField\n"));
AcpiOsPrintf ("BankField\n");
break;
case INTERNAL_TYPE_REGION_FIELD:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO,
"RegionField: bits=%X bitaccwidth=%X lock=%X update=%X at byte=%X bit=%X of below:\n",
AcpiOsPrintf (
"RegionField: Bits=%X BitAccWidth=%X Lock=%X Update=%X at byte=%X bit=%X of below:\n",
EntryDesc->Field.BitLength, EntryDesc->Field.AccessBitWidth,
EntryDesc->Field.LockRule, EntryDesc->Field.UpdateRule,
EntryDesc->Field.BaseByteOffset, EntryDesc->Field.StartFieldBitOffset));
EntryDesc->Field.FieldFlags & AML_FIELD_LOCK_RULE_MASK,
EntryDesc->Field.FieldFlags & AML_FIELD_UPDATE_RULE_MASK,
EntryDesc->Field.BaseByteOffset, EntryDesc->Field.StartFieldBitOffset);
DUMP_STACK_ENTRY (EntryDesc->Field.RegionObj);
break;
case INTERNAL_TYPE_INDEX_FIELD:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "IndexField\n"));
AcpiOsPrintf ("IndexField\n");
break;
case ACPI_TYPE_BUFFER_FIELD:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO,
AcpiOsPrintf (
"BufferField: %X bits at byte %X bit %X of \n",
EntryDesc->BufferField.BitLength, EntryDesc->BufferField.BaseByteOffset,
EntryDesc->BufferField.StartFieldBitOffset));
EntryDesc->BufferField.StartFieldBitOffset);
if (!EntryDesc->BufferField.BufferObj)
{
@ -540,7 +551,7 @@ AcpiExDumpOperand (
else if (ACPI_TYPE_BUFFER !=
EntryDesc->BufferField.BufferObj->Common.Type)
{
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "*not a Buffer* \n"));
AcpiOsPrintf ("*not a Buffer* \n");
}
else
@ -553,68 +564,54 @@ AcpiExDumpOperand (
case ACPI_TYPE_EVENT:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "Event\n"));
AcpiOsPrintf ("Event\n");
break;
case ACPI_TYPE_METHOD:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO,
AcpiOsPrintf (
"Method(%X) @ %p:%X\n",
EntryDesc->Method.ParamCount,
EntryDesc->Method.AmlStart, EntryDesc->Method.AmlLength));
EntryDesc->Method.AmlStart, EntryDesc->Method.AmlLength);
break;
case ACPI_TYPE_MUTEX:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "Mutex\n"));
AcpiOsPrintf ("Mutex\n");
break;
case ACPI_TYPE_DEVICE:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "Device\n"));
AcpiOsPrintf ("Device\n");
break;
case ACPI_TYPE_POWER:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "Power\n"));
AcpiOsPrintf ("Power\n");
break;
case ACPI_TYPE_PROCESSOR:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "Processor\n"));
AcpiOsPrintf ("Processor\n");
break;
case ACPI_TYPE_THERMAL:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "Thermal\n"));
AcpiOsPrintf ("Thermal\n");
break;
default:
/* unknown EntryDesc->Common.Type value */
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "Unknown Type %X\n",
EntryDesc->Common.Type));
/* Back up to previous entry */
EntryDesc--;
/* TBD: [Restructure] Change to use dump object routine !! */
/* What is all of this?? */
DUMP_BUFFER (EntryDesc, sizeof (ACPI_OPERAND_OBJECT));
DUMP_BUFFER (++EntryDesc, sizeof (ACPI_OPERAND_OBJECT));
DUMP_BUFFER (++EntryDesc, sizeof (ACPI_OPERAND_OBJECT));
AcpiOsPrintf ("Unknown Type %X\n", EntryDesc->Common.Type);
break;
}
return (AE_OK);
@ -690,6 +687,57 @@ AcpiExDumpOperands (
}
/*****************************************************************************
*
* FUNCTION: AcpiExOut*
*
* PARAMETERS: Title - Descriptive text
* Value - Value to be displayed
*
* DESCRIPTION: Object dump output formatting functions. These functions
* reduce the number of format strings required and keeps them
* all in one place for easy modification.
*
****************************************************************************/
void
AcpiExOutString (
char *Title,
char *Value)
{
AcpiOsPrintf ("%20s : %s\n", Title, Value);
}
void
AcpiExOutPointer (
char *Title,
void *Value)
{
AcpiOsPrintf ("%20s : %p\n", Title, Value);
}
void
AcpiExOutInteger (
char *Title,
UINT32 Value)
{
AcpiOsPrintf ("%20s : %X\n", Title, Value);
}
void
AcpiExOutAddress (
char *Title,
ACPI_PHYSICAL_ADDRESS Value)
{
#ifdef _IA16
AcpiOsPrintf ("%20s : %p\n", Title, Value);
#else
AcpiOsPrintf ("%20s : %8.8X%8.8X\n", Title,
HIDWORD (Value), LODWORD (Value));
#endif
}
/*****************************************************************************
*
* FUNCTION: AcpiExDumpNode
@ -720,14 +768,14 @@ AcpiExDumpNode (
AcpiOsPrintf ("%20s : %4.4s\n", "Name", (char*)&Node->Name);
AcpiOsPrintf ("%20s : %s\n", "Type", AcpiUtGetTypeName (Node->Type));
AcpiOsPrintf ("%20s : %X\n", "Flags", Node->Flags);
AcpiOsPrintf ("%20s : %X\n", "Owner Id", Node->OwnerId);
AcpiOsPrintf ("%20s : %X\n", "Reference Count", Node->ReferenceCount);
AcpiOsPrintf ("%20s : %p\n", "Attached Object", Node->Object);
AcpiOsPrintf ("%20s : %p\n", "ChildList", Node->Child);
AcpiOsPrintf ("%20s : %p\n", "NextPeer", Node->Peer);
AcpiOsPrintf ("%20s : %p\n", "Parent", AcpiNsGetParentObject (Node));
AcpiExOutString ("Type", AcpiUtGetTypeName (Node->Type));
AcpiExOutInteger ("Flags", Node->Flags);
AcpiExOutInteger ("Owner Id", Node->OwnerId);
AcpiExOutInteger ("Reference Count", Node->ReferenceCount);
AcpiExOutPointer ("Attached Object", AcpiNsGetAttachedObject (Node));
AcpiExOutPointer ("ChildList", Node->Child);
AcpiExOutPointer ("NextPeer", Node->Peer);
AcpiExOutPointer ("Parent", AcpiNsGetParentObject (Node));
}
@ -747,7 +795,7 @@ AcpiExDumpObjectDescriptor (
ACPI_OPERAND_OBJECT *ObjDesc,
UINT32 Flags)
{
const ACPI_OPCODE_INFO *OpInfo;
UINT32 i;
FUNCTION_TRACE ("ExDumpObjectDescriptor");
@ -763,14 +811,15 @@ AcpiExDumpObjectDescriptor (
if (!(VALID_DESCRIPTOR_TYPE (ObjDesc, ACPI_DESC_TYPE_INTERNAL)))
{
AcpiOsPrintf ("%p is not a valid ACPI object\n", ObjDesc);
AcpiOsPrintf ("ExDumpObjectDescriptor: %p is not a valid ACPI object\n", ObjDesc);
return;
}
/* Common Fields */
AcpiOsPrintf ("%20s : %X\n", "Reference Count", ObjDesc->Common.ReferenceCount);
AcpiOsPrintf ("%20s : %X\n", "Flags", ObjDesc->Common.Flags);
AcpiExOutString ("Type", AcpiUtGetTypeName (ObjDesc->Common.Type));
AcpiExOutInteger ("Reference Count", ObjDesc->Common.ReferenceCount);
AcpiExOutInteger ("Flags", ObjDesc->Common.Flags);
/* Object-specific Fields */
@ -778,7 +827,6 @@ AcpiExDumpObjectDescriptor (
{
case ACPI_TYPE_INTEGER:
AcpiOsPrintf ("%20s : %s\n", "Type", "Integer");
AcpiOsPrintf ("%20s : %X%8.8X\n", "Value", HIDWORD (ObjDesc->Integer.Value),
LODWORD (ObjDesc->Integer.Value));
break;
@ -786,190 +834,181 @@ AcpiExDumpObjectDescriptor (
case ACPI_TYPE_STRING:
AcpiOsPrintf ("%20s : %s\n", "Type", "String");
AcpiOsPrintf ("%20s : %X\n", "Length", ObjDesc->String.Length);
AcpiOsPrintf ("%20s : %p\n", "Pointer", ObjDesc->String.Pointer);
AcpiExOutInteger ("Length", ObjDesc->String.Length);
AcpiExOutPointer ("Pointer", ObjDesc->String.Pointer);
break;
case ACPI_TYPE_BUFFER:
AcpiOsPrintf ("%20s : %s\n", "Type", "Buffer");
AcpiOsPrintf ("%20s : %X\n", "Length", ObjDesc->Buffer.Length);
AcpiOsPrintf ("%20s : %p\n", "Pointer", ObjDesc->Buffer.Pointer);
AcpiExOutInteger ("Length", ObjDesc->Buffer.Length);
AcpiExOutPointer ("Pointer", ObjDesc->Buffer.Pointer);
break;
case ACPI_TYPE_PACKAGE:
AcpiOsPrintf ("%20s : %s\n", "Type", "Package");
AcpiOsPrintf ("%20s : %X\n", "Flags", ObjDesc->Package.Flags);
AcpiOsPrintf ("%20s : %X\n", "Count", ObjDesc->Package.Count);
AcpiOsPrintf ("%20s : %p\n", "Elements", ObjDesc->Package.Elements);
AcpiOsPrintf ("%20s : %p\n", "NextElement", ObjDesc->Package.NextElement);
break;
AcpiExOutInteger ("Flags", ObjDesc->Package.Flags);
AcpiExOutInteger ("Count", ObjDesc->Package.Count);
AcpiExOutPointer ("Elements", ObjDesc->Package.Elements);
AcpiExOutPointer ("NextElement", ObjDesc->Package.NextElement);
/* Dump the package contents */
case ACPI_TYPE_BUFFER_FIELD:
AcpiOsPrintf ("%20s : %s\n", "Type", "BufferField");
AcpiOsPrintf ("%20s : %X\n", "BitLength", ObjDesc->BufferField.BitLength);
AcpiOsPrintf ("%20s : %X\n", "BitOffset", ObjDesc->BufferField.StartFieldBitOffset);
AcpiOsPrintf ("%20s : %X\n", "BaseByteOffset",ObjDesc->BufferField.BaseByteOffset);
AcpiOsPrintf ("%20s : %p\n", "BufferObj", ObjDesc->BufferField.BufferObj);
if (ObjDesc->Package.Count > 0)
{
AcpiOsPrintf ("\nPackage Contents:\n");
for (i = 0; i < ObjDesc->Package.Count; i++)
{
AcpiOsPrintf ("[%.3d] %p", i, ObjDesc->Package.Elements[i]);
if (ObjDesc->Package.Elements[i])
{
AcpiOsPrintf (" %s", AcpiUtGetTypeName ((ObjDesc->Package.Elements[i])->Common.Type));
}
AcpiOsPrintf ("\n");
}
}
break;
case ACPI_TYPE_DEVICE:
AcpiOsPrintf ("%20s : %s\n", "Type", "Device");
AcpiOsPrintf ("%20s : %p\n", "AddrHandler", ObjDesc->Device.AddrHandler);
AcpiOsPrintf ("%20s : %p\n", "SysHandler", ObjDesc->Device.SysHandler);
AcpiOsPrintf ("%20s : %p\n", "DrvHandler", ObjDesc->Device.DrvHandler);
AcpiExOutPointer ("AddrHandler", ObjDesc->Device.AddrHandler);
AcpiExOutPointer ("SysHandler", ObjDesc->Device.SysHandler);
AcpiExOutPointer ("DrvHandler", ObjDesc->Device.DrvHandler);
break;
case ACPI_TYPE_EVENT:
AcpiOsPrintf ("%20s : %s\n", "Type", "Event");
AcpiOsPrintf ("%20s : %X\n", "Semaphore", ObjDesc->Event.Semaphore);
AcpiExOutPointer ("Semaphore", ObjDesc->Event.Semaphore);
break;
case ACPI_TYPE_METHOD:
AcpiOsPrintf ("%20s : %s\n", "Type", "Method");
AcpiOsPrintf ("%20s : %X\n", "ParamCount", ObjDesc->Method.ParamCount);
AcpiOsPrintf ("%20s : %X\n", "Concurrency", ObjDesc->Method.Concurrency);
AcpiOsPrintf ("%20s : %p\n", "Semaphore", ObjDesc->Method.Semaphore);
AcpiOsPrintf ("%20s : %X\n", "AmlLength", ObjDesc->Method.AmlLength);
AcpiOsPrintf ("%20s : %X\n", "AmlStart", ObjDesc->Method.AmlStart);
AcpiExOutInteger ("ParamCount", ObjDesc->Method.ParamCount);
AcpiExOutInteger ("Concurrency", ObjDesc->Method.Concurrency);
AcpiExOutPointer ("Semaphore", ObjDesc->Method.Semaphore);
AcpiExOutInteger ("AmlLength", ObjDesc->Method.AmlLength);
AcpiExOutPointer ("AmlStart", ObjDesc->Method.AmlStart);
break;
case ACPI_TYPE_MUTEX:
AcpiOsPrintf ("%20s : %s\n", "Type", "Mutex");
AcpiOsPrintf ("%20s : %X\n", "SyncLevel", ObjDesc->Mutex.SyncLevel);
AcpiOsPrintf ("%20s : %p\n", "Owner", ObjDesc->Mutex.Owner);
AcpiOsPrintf ("%20s : %X\n", "AcquisitionDepth", ObjDesc->Mutex.AcquisitionDepth);
AcpiOsPrintf ("%20s : %p\n", "Semaphore", ObjDesc->Mutex.Semaphore);
AcpiExOutInteger ("SyncLevel", ObjDesc->Mutex.SyncLevel);
AcpiExOutPointer ("OwnerThread", ObjDesc->Mutex.OwnerThread);
AcpiExOutInteger ("AcquisitionDepth",ObjDesc->Mutex.AcquisitionDepth);
AcpiExOutPointer ("Semaphore", ObjDesc->Mutex.Semaphore);
break;
case ACPI_TYPE_REGION:
AcpiOsPrintf ("%20s : %s\n", "Type", "Region");
AcpiOsPrintf ("%20s : %X\n", "SpaceId", ObjDesc->Region.SpaceId);
AcpiOsPrintf ("%20s : %X\n", "Flags", ObjDesc->Region.Flags);
AcpiOsPrintf ("%20s : %X\n", "Address", ObjDesc->Region.Address);
AcpiOsPrintf ("%20s : %X\n", "Length", ObjDesc->Region.Length);
AcpiOsPrintf ("%20s : %p\n", "AddrHandler", ObjDesc->Region.AddrHandler);
AcpiOsPrintf ("%20s : %p\n", "Next", ObjDesc->Region.Next);
AcpiExOutInteger ("SpaceId", ObjDesc->Region.SpaceId);
AcpiExOutInteger ("Flags", ObjDesc->Region.Flags);
AcpiExOutAddress ("Address", ObjDesc->Region.Address);
AcpiExOutInteger ("Length", ObjDesc->Region.Length);
AcpiExOutPointer ("AddrHandler", ObjDesc->Region.AddrHandler);
AcpiExOutPointer ("Next", ObjDesc->Region.Next);
break;
case ACPI_TYPE_POWER:
AcpiOsPrintf ("%20s : %s\n", "Type", "PowerResource");
AcpiOsPrintf ("%20s : %X\n", "SystemLevel", ObjDesc->PowerResource.SystemLevel);
AcpiOsPrintf ("%20s : %X\n", "ResourceOrder", ObjDesc->PowerResource.ResourceOrder);
AcpiOsPrintf ("%20s : %p\n", "SysHandler", ObjDesc->PowerResource.SysHandler);
AcpiOsPrintf ("%20s : %p\n", "DrvHandler", ObjDesc->PowerResource.DrvHandler);
AcpiExOutInteger ("SystemLevel", ObjDesc->PowerResource.SystemLevel);
AcpiExOutInteger ("ResourceOrder", ObjDesc->PowerResource.ResourceOrder);
AcpiExOutPointer ("SysHandler", ObjDesc->PowerResource.SysHandler);
AcpiExOutPointer ("DrvHandler", ObjDesc->PowerResource.DrvHandler);
break;
case ACPI_TYPE_PROCESSOR:
AcpiOsPrintf ("%20s : %s\n", "Type", "Processor");
AcpiOsPrintf ("%20s : %X\n", "Processor ID", ObjDesc->Processor.ProcId);
AcpiOsPrintf ("%20s : %X\n", "Length", ObjDesc->Processor.Length);
AcpiOsPrintf ("%20s : %X\n", "Address", ObjDesc->Processor.Address);
AcpiOsPrintf ("%20s : %p\n", "SysHandler", ObjDesc->Processor.SysHandler);
AcpiOsPrintf ("%20s : %p\n", "DrvHandler", ObjDesc->Processor.DrvHandler);
AcpiOsPrintf ("%20s : %p\n", "AddrHandler", ObjDesc->Processor.AddrHandler);
AcpiExOutInteger ("Processor ID", ObjDesc->Processor.ProcId);
AcpiExOutInteger ("Length", ObjDesc->Processor.Length);
AcpiExOutInteger ("Address", ObjDesc->Processor.Address);
AcpiExOutPointer ("SysHandler", ObjDesc->Processor.SysHandler);
AcpiExOutPointer ("DrvHandler", ObjDesc->Processor.DrvHandler);
AcpiExOutPointer ("AddrHandler", ObjDesc->Processor.AddrHandler);
break;
case ACPI_TYPE_THERMAL:
AcpiOsPrintf ("%20s : %s\n", "Type", "ThermalZone");
AcpiOsPrintf ("%20s : %p\n", "SysHandler", ObjDesc->ThermalZone.SysHandler);
AcpiOsPrintf ("%20s : %p\n", "DrvHandler", ObjDesc->ThermalZone.DrvHandler);
AcpiOsPrintf ("%20s : %p\n", "AddrHandler", ObjDesc->ThermalZone.AddrHandler);
AcpiExOutPointer ("SysHandler", ObjDesc->ThermalZone.SysHandler);
AcpiExOutPointer ("DrvHandler", ObjDesc->ThermalZone.DrvHandler);
AcpiExOutPointer ("AddrHandler", ObjDesc->ThermalZone.AddrHandler);
break;
case ACPI_TYPE_BUFFER_FIELD:
case INTERNAL_TYPE_REGION_FIELD:
AcpiOsPrintf ("%20s : %p\n", "AccessBitWidth", ObjDesc->Field.AccessBitWidth);
AcpiOsPrintf ("%20s : %p\n", "BitLength", ObjDesc->Field.BitLength);
AcpiOsPrintf ("%20s : %p\n", "BaseByteOffset",ObjDesc->Field.BaseByteOffset);
AcpiOsPrintf ("%20s : %p\n", "BitOffset", ObjDesc->Field.StartFieldBitOffset);
AcpiOsPrintf ("%20s : %p\n", "RegionObj", ObjDesc->Field.RegionObj);
break;
case INTERNAL_TYPE_BANK_FIELD:
AcpiOsPrintf ("%20s : %s\n", "Type", "BankField");
AcpiOsPrintf ("%20s : %X\n", "AccessBitWidth", ObjDesc->BankField.AccessBitWidth);
AcpiOsPrintf ("%20s : %X\n", "LockRule", ObjDesc->BankField.LockRule);
AcpiOsPrintf ("%20s : %X\n", "UpdateRule", ObjDesc->BankField.UpdateRule);
AcpiOsPrintf ("%20s : %X\n", "BitLength", ObjDesc->BankField.BitLength);
AcpiOsPrintf ("%20s : %X\n", "BitOffset", ObjDesc->BankField.StartFieldBitOffset);
AcpiOsPrintf ("%20s : %X\n", "BaseByteOffset", ObjDesc->BankField.BaseByteOffset);
AcpiOsPrintf ("%20s : %X\n", "Value", ObjDesc->BankField.Value);
AcpiOsPrintf ("%20s : %p\n", "RegionObj", ObjDesc->BankField.RegionObj);
AcpiOsPrintf ("%20s : %X\n", "BankRegisterObj", ObjDesc->BankField.BankRegisterObj);
break;
case INTERNAL_TYPE_INDEX_FIELD:
AcpiOsPrintf ("%20s : %s\n", "Type", "IndexField");
AcpiOsPrintf ("%20s : %X\n", "AccessBitWidth", ObjDesc->IndexField.AccessBitWidth);
AcpiOsPrintf ("%20s : %X\n", "LockRule", ObjDesc->IndexField.LockRule);
AcpiOsPrintf ("%20s : %X\n", "UpdateRule", ObjDesc->IndexField.UpdateRule);
AcpiOsPrintf ("%20s : %X\n", "BitLength", ObjDesc->IndexField.BitLength);
AcpiOsPrintf ("%20s : %X\n", "BitOffset", ObjDesc->IndexField.StartFieldBitOffset);
AcpiOsPrintf ("%20s : %X\n", "Value", ObjDesc->IndexField.Value);
AcpiOsPrintf ("%20s : %X\n", "Index", ObjDesc->IndexField.IndexObj);
AcpiOsPrintf ("%20s : %X\n", "Data", ObjDesc->IndexField.DataObj);
AcpiExOutInteger ("FieldFlags", ObjDesc->CommonField.FieldFlags);
AcpiExOutInteger ("AccessBitWidth", ObjDesc->CommonField.AccessBitWidth);
AcpiExOutInteger ("AccessByteWidth", ObjDesc->CommonField.AccessByteWidth);
AcpiExOutInteger ("BitLength", ObjDesc->CommonField.BitLength);
AcpiExOutInteger ("FldBitOffset", ObjDesc->CommonField.StartFieldBitOffset);
AcpiExOutInteger ("BaseByteOffset", ObjDesc->CommonField.BaseByteOffset);
AcpiExOutInteger ("DatumValidBits", ObjDesc->CommonField.DatumValidBits);
AcpiExOutInteger ("EndFldValidBits", ObjDesc->CommonField.EndFieldValidBits);
AcpiExOutInteger ("EndBufValidBits", ObjDesc->CommonField.EndBufferValidBits);
AcpiExOutPointer ("ParentNode", ObjDesc->CommonField.Node);
switch (ObjDesc->Common.Type)
{
case ACPI_TYPE_BUFFER_FIELD:
AcpiExOutPointer ("BufferObj", ObjDesc->BufferField.BufferObj);
break;
case INTERNAL_TYPE_REGION_FIELD:
AcpiExOutPointer ("RegionObj", ObjDesc->Field.RegionObj);
break;
case INTERNAL_TYPE_BANK_FIELD:
AcpiExOutInteger ("Value", ObjDesc->BankField.Value);
AcpiExOutPointer ("RegionObj", ObjDesc->BankField.RegionObj);
AcpiExOutPointer ("BankObj", ObjDesc->BankField.BankObj);
break;
case INTERNAL_TYPE_INDEX_FIELD:
AcpiExOutInteger ("Value", ObjDesc->IndexField.Value);
AcpiExOutPointer ("Index", ObjDesc->IndexField.IndexObj);
AcpiExOutPointer ("Data", ObjDesc->IndexField.DataObj);
break;
}
break;
case INTERNAL_TYPE_REFERENCE:
OpInfo = AcpiPsGetOpcodeInfo (ObjDesc->Reference.Opcode);
AcpiOsPrintf ("%20s : %s\n", "Type", "Reference");
AcpiOsPrintf ("%20s : %X\n", "TargetType", ObjDesc->Reference.TargetType);
AcpiOsPrintf ("%20s : %s\n", "Opcode", OpInfo->Name);
AcpiOsPrintf ("%20s : %X\n", "Offset", ObjDesc->Reference.Offset);
AcpiOsPrintf ("%20s : %p\n", "ObjDesc", ObjDesc->Reference.Object);
AcpiOsPrintf ("%20s : %p\n", "Node", ObjDesc->Reference.Node);
AcpiOsPrintf ("%20s : %p\n", "Where", ObjDesc->Reference.Where);
AcpiExOutInteger ("TargetType", ObjDesc->Reference.TargetType);
AcpiExOutString ("Opcode", (AcpiPsGetOpcodeInfo (ObjDesc->Reference.Opcode))->Name);
AcpiExOutInteger ("Offset", ObjDesc->Reference.Offset);
AcpiExOutPointer ("ObjDesc", ObjDesc->Reference.Object);
AcpiExOutPointer ("Node", ObjDesc->Reference.Node);
AcpiExOutPointer ("Where", ObjDesc->Reference.Where);
break;
case INTERNAL_TYPE_ADDRESS_HANDLER:
AcpiOsPrintf ("%20s : %s\n", "Type", "Address Handler");
AcpiOsPrintf ("%20s : %X\n", "SpaceId", ObjDesc->AddrHandler.SpaceId);
AcpiOsPrintf ("%20s : %p\n", "Next", ObjDesc->AddrHandler.Next);
AcpiOsPrintf ("%20s : %p\n", "RegionList", ObjDesc->AddrHandler.RegionList);
AcpiOsPrintf ("%20s : %p\n", "Node", ObjDesc->AddrHandler.Node);
AcpiOsPrintf ("%20s : %p\n", "Handler", ObjDesc->AddrHandler.Handler);
AcpiOsPrintf ("%20s : %p\n", "Context", ObjDesc->AddrHandler.Context);
AcpiExOutInteger ("SpaceId", ObjDesc->AddrHandler.SpaceId);
AcpiExOutPointer ("Next", ObjDesc->AddrHandler.Next);
AcpiExOutPointer ("RegionList", ObjDesc->AddrHandler.RegionList);
AcpiExOutPointer ("Node", ObjDesc->AddrHandler.Node);
AcpiExOutPointer ("Context", ObjDesc->AddrHandler.Context);
break;
case INTERNAL_TYPE_NOTIFY:
AcpiOsPrintf ("%20s : %s\n", "Type", "Notify Handler");
AcpiOsPrintf ("%20s : %p\n", "Node", ObjDesc->NotifyHandler.Node);
AcpiOsPrintf ("%20s : %p\n", "Handler", ObjDesc->NotifyHandler.Handler);
AcpiOsPrintf ("%20s : %p\n", "Context", ObjDesc->NotifyHandler.Context);
AcpiExOutPointer ("Node", ObjDesc->NotifyHandler.Node);
AcpiExOutPointer ("Context", ObjDesc->NotifyHandler.Context);
break;
@ -982,15 +1021,17 @@ AcpiExDumpObjectDescriptor (
case INTERNAL_TYPE_WHILE:
case INTERNAL_TYPE_SCOPE:
case INTERNAL_TYPE_DEF_ANY:
case INTERNAL_TYPE_EXTRA:
case INTERNAL_TYPE_DATA:
AcpiOsPrintf ("*** Structure display not implemented for type %X! ***\n",
AcpiOsPrintf ("ExDumpObjectDescriptor: Display not implemented for object type %X\n",
ObjDesc->Common.Type);
break;
default:
AcpiOsPrintf ("*** Cannot display unknown type %X! ***\n", ObjDesc->Common.Type);
AcpiOsPrintf ("ExDumpObjectDescriptor: Unknown object type %X\n", ObjDesc->Common.Type);
break;
}

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: exfield - ACPI AML (p-code) execution - field manipulation
* $Revision: 95 $
* $Revision: 101 $
*
*****************************************************************************/
@ -134,14 +134,13 @@
*
* FUNCTION: AcpiExReadDataFromField
*
* PARAMETERS: Mode - ACPI_READ or ACPI_WRITE
* *FieldNode - Parent node for field to be accessed
* *Buffer - Value(s) to be read or written
* BufferLength - Number of bytes to transfer
* PARAMETERS: ObjDesc - The named field
* RetBufferDesc - Where the return data object is stored
*
* RETURN: Status3
* RETURN: Status
*
* DESCRIPTION: Read or write a named field
* DESCRIPTION: Read from a named field. Returns either an Integer or a
* Buffer, depending on the size of the field.
*
******************************************************************************/
@ -154,6 +153,7 @@ AcpiExReadDataFromField (
ACPI_OPERAND_OBJECT *BufferDesc;
UINT32 Length;
void *Buffer;
BOOLEAN Locked;
FUNCTION_TRACE_PTR ("ExReadDataFromField", ObjDesc);
@ -166,6 +166,22 @@ AcpiExReadDataFromField (
return_ACPI_STATUS (AE_AML_NO_OPERAND);
}
if (ObjDesc->Common.Type == ACPI_TYPE_BUFFER_FIELD)
{
/*
* If the BufferField arguments have not been previously evaluated,
* evaluate them now and save the results.
*/
if (!(ObjDesc->Common.Flags & AOPOBJ_DATA_VALID))
{
Status = AcpiDsGetBufferFieldArguments (ObjDesc);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
}
}
/*
* Allocate a buffer for the contents of the field.
*
@ -200,7 +216,6 @@ AcpiExReadDataFromField (
BufferDesc->Buffer.Length = Length;
Buffer = BufferDesc->Buffer.Pointer;
}
else
{
/* Field will fit within an Integer (normal case) */
@ -215,37 +230,30 @@ AcpiExReadDataFromField (
Buffer = &BufferDesc->Integer.Value;
}
ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
"Obj=%p Type=%X Buf=%p Len=%X\n",
ObjDesc, ObjDesc->Common.Type, Buffer, Length));
ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
"FieldWrite: BitLen=%X BitOff=%X ByteOff=%X\n",
ObjDesc->CommonField.BitLength,
ObjDesc->CommonField.StartFieldBitOffset,
ObjDesc->CommonField.BaseByteOffset));
/* Read from the appropriate field */
Locked = AcpiExAcquireGlobalLock (ObjDesc->CommonField.FieldFlags);
switch (ObjDesc->Common.Type)
{
case ACPI_TYPE_BUFFER_FIELD:
Status = AcpiExAccessBufferField (ACPI_READ, ObjDesc, Buffer, Length);
break;
/* Read from the field */
case INTERNAL_TYPE_REGION_FIELD:
Status = AcpiExAccessRegionField (ACPI_READ, ObjDesc, Buffer, Length);
break;
case INTERNAL_TYPE_BANK_FIELD:
Status = AcpiExAccessBankField (ACPI_READ, ObjDesc, Buffer, Length);
break;
case INTERNAL_TYPE_INDEX_FIELD:
Status = AcpiExAccessIndexField (ACPI_READ, ObjDesc, Buffer, Length);
break;
default:
Status = AE_AML_INTERNAL;
}
Status = AcpiExExtractFromField (ObjDesc, Buffer, Length);
/*
* Release global lock if we acquired it earlier
*/
AcpiExReleaseGlobalLock (Locked);
if (ACPI_FAILURE (Status))
{
AcpiUtRemoveReference (BufferDesc);
}
else if (RetBufferDesc)
{
*RetBufferDesc = BufferDesc;
@ -259,18 +267,15 @@ AcpiExReadDataFromField (
*
* FUNCTION: AcpiExWriteDataToField
*
* PARAMETERS: Mode - ACPI_READ or ACPI_WRITE
* *FieldNode - Parent node for field to be accessed
* *Buffer - Value(s) to be read or written
* BufferLength - Number of bytes to transfer
* PARAMETERS: SourceDesc - Contains data to write
* ObjDesc - The named field
*
* RETURN: Status
*
* DESCRIPTION: Read or write a named field
* DESCRIPTION: Write to a named field
*
******************************************************************************/
ACPI_STATUS
AcpiExWriteDataToField (
ACPI_OPERAND_OBJECT *SourceDesc,
@ -278,7 +283,10 @@ AcpiExWriteDataToField (
{
ACPI_STATUS Status;
UINT32 Length;
UINT32 RequiredLength;
void *Buffer;
void *NewBuffer;
BOOLEAN Locked;
FUNCTION_TRACE_PTR ("ExWriteDataToField", ObjDesc);
@ -291,6 +299,21 @@ AcpiExWriteDataToField (
return_ACPI_STATUS (AE_AML_NO_OPERAND);
}
if (ObjDesc->Common.Type == ACPI_TYPE_BUFFER_FIELD)
{
/*
* If the BufferField arguments have not been previously evaluated,
* evaluate them now and save the results.
*/
if (!(ObjDesc->Common.Flags & AOPOBJ_DATA_VALID))
{
Status = AcpiDsGetBufferFieldArguments (ObjDesc);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
}
}
/*
* Get a pointer to the data to be written
@ -314,323 +337,67 @@ AcpiExWriteDataToField (
default:
return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
break;
}
/*
* Decode the type of field to be written
* We must have a buffer that is at least as long as the field
* we are writing to. This is because individual fields are
* indivisible and partial writes are not supported -- as per
* the ACPI specification.
*/
switch (ObjDesc->Common.Type)
NewBuffer = NULL;
RequiredLength = ROUND_BITS_UP_TO_BYTES (ObjDesc->CommonField.BitLength);
if (Length < RequiredLength)
{
case ACPI_TYPE_BUFFER_FIELD:
Status = AcpiExAccessBufferField (ACPI_WRITE, ObjDesc, Buffer, Length);
break;
/* We need to create a new buffer */
case INTERNAL_TYPE_REGION_FIELD:
Status = AcpiExAccessRegionField (ACPI_WRITE, ObjDesc, Buffer, Length);
break;
case INTERNAL_TYPE_BANK_FIELD:
Status = AcpiExAccessBankField (ACPI_WRITE, ObjDesc, Buffer, Length);
break;
case INTERNAL_TYPE_INDEX_FIELD:
Status = AcpiExAccessIndexField (ACPI_WRITE, ObjDesc, Buffer, Length);
break;
default:
return_ACPI_STATUS (AE_AML_INTERNAL);
}
return_ACPI_STATUS (Status);
}
/*******************************************************************************
*
* FUNCTION: AcpiExAccessBufferField
*
* PARAMETERS: Mode - ACPI_READ or ACPI_WRITE
* *FieldNode - Parent node for field to be accessed
* *Buffer - Value(s) to be read or written
* BufferLength - Number of bytes to transfer
*
* RETURN: Status
*
* DESCRIPTION: Read or write a named field
*
******************************************************************************/
ACPI_STATUS
AcpiExAccessBufferField (
UINT32 Mode,
ACPI_OPERAND_OBJECT *ObjDesc,
void *Buffer,
UINT32 BufferLength)
{
ACPI_STATUS Status;
FUNCTION_TRACE_PTR ("ExAccessBufferField", ObjDesc);
/*
* If the BufferField arguments have not been previously evaluated,
* evaluate them now and save the results.
*/
if (!(ObjDesc->Common.Flags & AOPOBJ_DATA_VALID))
{
Status = AcpiDsGetBufferFieldArguments (ObjDesc);
if (ACPI_FAILURE (Status))
NewBuffer = ACPI_MEM_CALLOCATE (RequiredLength);
if (!NewBuffer)
{
return_ACPI_STATUS (Status);
return_ACPI_STATUS (AE_NO_MEMORY);
}
/*
* Copy the original data to the new buffer, starting
* at Byte zero. All unused (upper) bytes of the
* buffer will be 0.
*/
MEMCPY ((char *) NewBuffer, (char *) Buffer, Length);
Buffer = NewBuffer;
Length = RequiredLength;
}
Status = AcpiExCommonAccessField (Mode, ObjDesc, Buffer, BufferLength);
return_ACPI_STATUS (Status);
}
/*******************************************************************************
*
* FUNCTION: AcpiExAccessRegionField
*
* PARAMETERS: Mode - ACPI_READ or ACPI_WRITE
* *FieldNode - Parent node for field to be accessed
* *Buffer - Value(s) to be read or written
* BufferLength - Number of bytes to transfer
*
* RETURN: Status
*
* DESCRIPTION: Read or write a named field
*
******************************************************************************/
ACPI_STATUS
AcpiExAccessRegionField (
UINT32 Mode,
ACPI_OPERAND_OBJECT *ObjDesc,
void *Buffer,
UINT32 BufferLength)
{
ACPI_STATUS Status;
BOOLEAN Locked;
FUNCTION_TRACE_PTR ("ExAccessRegionField", ObjDesc);
/*
* Get the global lock if needed
*/
Locked = AcpiExAcquireGlobalLock (ObjDesc->Field.LockRule);
Status = AcpiExCommonAccessField (Mode, ObjDesc, Buffer, BufferLength);
/*
* Release global lock if we acquired it earlier
*/
AcpiExReleaseGlobalLock (Locked);
return_ACPI_STATUS (Status);
}
/*******************************************************************************
*
* FUNCTION: AcpiExAccessBankField
*
* PARAMETERS: Mode - ACPI_READ or ACPI_WRITE
* *FieldNode - Parent node for field to be accessed
* *Buffer - Value(s) to be read or written
* BufferLength - Number of bytes to transfer
*
* RETURN: Status
*
* DESCRIPTION: Read or write a Bank Field
*
******************************************************************************/
ACPI_STATUS
AcpiExAccessBankField (
UINT32 Mode,
ACPI_OPERAND_OBJECT *ObjDesc,
void *Buffer,
UINT32 BufferLength)
{
ACPI_STATUS Status;
BOOLEAN Locked;
FUNCTION_TRACE_PTR ("ExAccessBankField", ObjDesc);
/*
* Get the global lock if needed
*/
Locked = AcpiExAcquireGlobalLock (ObjDesc->BankField.LockRule);
/*
* Write the BankValue to the BankRegister to select the bank.
* The BankValue for this BankField is specified in the
* BankField ASL declaration. The BankRegister is always a Field in
* an operation region.
*/
Status = AcpiExCommonAccessField (ACPI_WRITE,
ObjDesc->BankField.BankRegisterObj,
&ObjDesc->BankField.Value,
sizeof (ObjDesc->BankField.Value));
if (ACPI_FAILURE (Status))
{
goto Cleanup;
}
/*
* The bank was successfully selected, now read or write the actual
* data.
*/
Status = AcpiExCommonAccessField (Mode, ObjDesc, Buffer, BufferLength);
Cleanup:
/*
* Release global lock if we acquired it earlier
*/
AcpiExReleaseGlobalLock (Locked);
return_ACPI_STATUS (Status);
}
/*******************************************************************************
*
* FUNCTION: AcpiExAccessIndexField
*
* PARAMETERS: Mode - ACPI_READ or ACPI_WRITE
* *FieldNode - Parent node for field to be accessed
* *Buffer - Value(s) to be read or written
* BufferLength - Number of bytes to transfer
*
* RETURN: Status
*
* DESCRIPTION: Read or write a Index Field
*
******************************************************************************/
ACPI_STATUS
AcpiExAccessIndexField (
UINT32 Mode,
ACPI_OPERAND_OBJECT *ObjDesc,
void *Buffer,
UINT32 BufferLength)
{
ACPI_STATUS Status;
BOOLEAN Locked;
FUNCTION_TRACE_PTR ("ExAccessIndexField", ObjDesc);
/*
* Get the global lock if needed
*/
Locked = AcpiExAcquireGlobalLock (ObjDesc->IndexField.LockRule);
/*
* Set Index value to select proper Data register
*/
Status = AcpiExCommonAccessField (ACPI_WRITE,
ObjDesc->IndexField.IndexObj,
&ObjDesc->IndexField.Value,
sizeof (ObjDesc->IndexField.Value));
if (ACPI_FAILURE (Status))
{
goto Cleanup;
}
/* Now read/write the data register */
Status = AcpiExCommonAccessField (Mode, ObjDesc->IndexField.DataObj,
Buffer, BufferLength);
Cleanup:
/*
* Release global lock if we acquired it earlier
*/
AcpiExReleaseGlobalLock (Locked);
return_ACPI_STATUS (Status);
}
/*******************************************************************************
*
* FUNCTION: AcpiExCommonAccessField
*
* PARAMETERS: Mode - ACPI_READ or ACPI_WRITE
* *FieldNode - Parent node for field to be accessed
* *Buffer - Value(s) to be read or written
* BufferLength - Size of buffer, in bytes. Must be large
* enough for all bits of the field.
*
* RETURN: Status
*
* DESCRIPTION: Read or write a named field
*
******************************************************************************/
ACPI_STATUS
AcpiExCommonAccessField (
UINT32 Mode,
ACPI_OPERAND_OBJECT *ObjDesc,
void *Buffer,
UINT32 BufferLength)
{
ACPI_STATUS Status;
FUNCTION_TRACE_PTR ("ExCommonAccessField", ObjDesc);
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Obj=%p Type=%X Buf=%p Len=%X\n",
ObjDesc, ObjDesc->Common.Type, Buffer, BufferLength));
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Mode=%d BitLen=%X BitOff=%X ByteOff=%X\n",
Mode, ObjDesc->CommonField.BitLength,
ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
"Obj=%p Type=%X Buf=%p Len=%X\n",
ObjDesc, ObjDesc->Common.Type, Buffer, Length));
ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
"FieldRead: BitLen=%X BitOff=%X ByteOff=%X\n",
ObjDesc->CommonField.BitLength,
ObjDesc->CommonField.StartFieldBitOffset,
ObjDesc->CommonField.BaseByteOffset));
Locked = AcpiExAcquireGlobalLock (ObjDesc->CommonField.FieldFlags);
/* Perform the actual read or write of the field */
/*
* Write to the field
*/
Status = AcpiExInsertIntoField (ObjDesc, Buffer, Length);
switch (Mode)
/*
* Release global lock if we acquired it earlier
*/
AcpiExReleaseGlobalLock (Locked);
/* Free temporary buffer if we used one */
if (NewBuffer)
{
case ACPI_READ:
Status = AcpiExExtractFromField (ObjDesc, Buffer, BufferLength);
break;
case ACPI_WRITE:
Status = AcpiExInsertIntoField (ObjDesc, Buffer, BufferLength);
break;
default:
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown I/O Mode: %X\n", Mode));
Status = AE_BAD_PARAMETER;
break;
ACPI_MEM_FREE (NewBuffer);
}
return_ACPI_STATUS (Status);
}

View File

@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: exmisc - ACPI AML (p-code) execution - specific opcodes
* $Revision: 92 $
* $Revision: 94 $
*
*****************************************************************************/
@ -129,7 +129,6 @@
MODULE_NAME ("exmisc")
/*******************************************************************************
*
* FUNCTION: AcpiExGetObjectReference
@ -174,8 +173,9 @@ AcpiExGetObjectReference (
case AML_LOCAL_OP:
case AML_ARG_OP:
*ReturnDesc = (void *) AcpiDsMethodDataGetNode (ObjDesc->Reference.Opcode,
ObjDesc->Reference.Offset, WalkState);
Status = AcpiDsMethodDataGetNode (ObjDesc->Reference.Opcode,
ObjDesc->Reference.Offset, WalkState,
(ACPI_NAMESPACE_NODE **) ReturnDesc);
break;
default:
@ -473,7 +473,6 @@ AcpiExDoMathOp (
}
/*******************************************************************************
*
* FUNCTION: AcpiExDoLogicalOp
@ -555,5 +554,3 @@ AcpiExDoLogicalOp (
}

View File

@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: exmutex - ASL Mutex Acquire/Release functions
* $Revision: 7 $
* $Revision: 8 $
*
*****************************************************************************/
@ -143,15 +143,27 @@ void
AcpiExUnlinkMutex (
ACPI_OPERAND_OBJECT *ObjDesc)
{
ACPI_THREAD_STATE *Thread = ObjDesc->Mutex.OwnerThread;
if (!Thread)
{
return;
}
if (ObjDesc->Mutex.Next)
{
(ObjDesc->Mutex.Next)->Mutex.Prev = ObjDesc->Mutex.Prev;
}
if (ObjDesc->Mutex.Prev)
{
(ObjDesc->Mutex.Prev)->Mutex.Next = ObjDesc->Mutex.Next;
}
else
{
Thread->AcquiredMutexList = ObjDesc->Mutex.Next;
}
}
@ -171,24 +183,28 @@ AcpiExUnlinkMutex (
void
AcpiExLinkMutex (
ACPI_OPERAND_OBJECT *ObjDesc,
ACPI_OPERAND_OBJECT *ListHead)
ACPI_THREAD_STATE *Thread)
{
ACPI_OPERAND_OBJECT *ListHead;
ListHead = Thread->AcquiredMutexList;
/* This object will be the first object in the list */
ObjDesc->Mutex.Prev = ListHead;
ObjDesc->Mutex.Next = ListHead->Mutex.Next;
ObjDesc->Mutex.Prev = NULL;
ObjDesc->Mutex.Next = ListHead;
/* Update old first object to point back to this object */
if (ListHead->Mutex.Next)
if (ListHead)
{
(ListHead->Mutex.Next)->Mutex.Prev = ObjDesc;
ListHead->Mutex.Prev = ObjDesc;
}
/* Update list head */
ListHead->Mutex.Next = ObjDesc;
Thread->AcquiredMutexList = ObjDesc;
}
@ -225,17 +241,20 @@ AcpiExAcquireMutex (
* Current Sync must be less than or equal to the sync level of the
* mutex. This mechanism provides some deadlock prevention
*/
if (WalkState->CurrentSyncLevel > ObjDesc->Mutex.SyncLevel)
if (WalkState->Thread->CurrentSyncLevel > ObjDesc->Mutex.SyncLevel)
{
return_ACPI_STATUS (AE_AML_MUTEX_ORDER);
}
/*
* If the mutex is already owned by this thread,
* just increment the acquisition depth
* Support for multiple acquires by the owning thread
*/
if (ObjDesc->Mutex.Owner == WalkState)
if (ObjDesc->Mutex.OwnerThread == WalkState->Thread)
{
/*
* The mutex is already owned by this thread,
* just increment the acquisition depth
*/
ObjDesc->Mutex.AcquisitionDepth++;
return_ACPI_STATUS (AE_OK);
}
@ -252,14 +271,14 @@ AcpiExAcquireMutex (
/* Have the mutex, update mutex and walk info */
ObjDesc->Mutex.Owner = WalkState;
ObjDesc->Mutex.OwnerThread = WalkState->Thread;
ObjDesc->Mutex.AcquisitionDepth = 1;
WalkState->CurrentSyncLevel = ObjDesc->Mutex.SyncLevel;
/* Link the mutex to the walk state for force-unlock at method exit */
WalkState->Thread->CurrentSyncLevel = ObjDesc->Mutex.SyncLevel;
AcpiExLinkMutex (ObjDesc, (ACPI_OPERAND_OBJECT *)
&(WalkState->WalkList->AcquiredMutexList));
/* Link the mutex to the current thread for force-unlock at method exit */
AcpiExLinkMutex (ObjDesc, WalkState->Thread);
return_ACPI_STATUS (AE_OK);
}
@ -295,14 +314,14 @@ AcpiExReleaseMutex (
/* The mutex must have been previously acquired in order to release it */
if (!ObjDesc->Mutex.Owner)
if (!ObjDesc->Mutex.OwnerThread)
{
return_ACPI_STATUS (AE_AML_MUTEX_NOT_ACQUIRED);
}
/* The Mutex is owned, but this thread must be the owner */
if (ObjDesc->Mutex.Owner != WalkState)
if (ObjDesc->Mutex.OwnerThread != WalkState->Thread)
{
return_ACPI_STATUS (AE_AML_NOT_OWNER);
}
@ -311,7 +330,7 @@ AcpiExReleaseMutex (
* The sync level of the mutex must be less than or
* equal to the current sync level
*/
if (ObjDesc->Mutex.SyncLevel > WalkState->CurrentSyncLevel)
if (ObjDesc->Mutex.SyncLevel > WalkState->Thread->CurrentSyncLevel)
{
return_ACPI_STATUS (AE_AML_MUTEX_ORDER);
}
@ -327,6 +346,9 @@ AcpiExReleaseMutex (
return_ACPI_STATUS (AE_OK);
}
/* Unlink the mutex from the owner's list */
AcpiExUnlinkMutex (ObjDesc);
/* Release the mutex */
@ -334,12 +356,8 @@ AcpiExReleaseMutex (
/* Update the mutex and walk state */
ObjDesc->Mutex.Owner = NULL;
WalkState->CurrentSyncLevel = ObjDesc->Mutex.SyncLevel;
/* Unlink the mutex from the owner's list */
AcpiExUnlinkMutex (ObjDesc);
ObjDesc->Mutex.OwnerThread = NULL;
WalkState->Thread->CurrentSyncLevel = ObjDesc->Mutex.SyncLevel;
return_ACPI_STATUS (Status);
}
@ -359,9 +377,9 @@ AcpiExReleaseMutex (
ACPI_STATUS
AcpiExReleaseAllMutexes (
ACPI_OPERAND_OBJECT *ListHead)
ACPI_THREAD_STATE *Thread)
{
ACPI_OPERAND_OBJECT *Next = ListHead->Mutex.Next;
ACPI_OPERAND_OBJECT *Next = Thread->AcquiredMutexList;
ACPI_OPERAND_OBJECT *This;
@ -376,16 +394,17 @@ AcpiExReleaseAllMutexes (
This = Next;
Next = This->Mutex.Next;
/* Mark mutex un-owned */
This->Mutex.Owner = NULL;
This->Mutex.Prev = NULL;
This->Mutex.Next = NULL;
This->Mutex.AcquisitionDepth = 0;
This->Mutex.AcquisitionDepth = 1;
This->Mutex.Prev = NULL;
This->Mutex.Next = NULL;
/* Release the mutex */
AcpiExSystemReleaseMutex (This);
/* Mark mutex unowned */
This->Mutex.OwnerThread = NULL;
}
return (AE_OK);

View File

@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: exoparg1 - AML execution - opcodes with 1 argument
* $Revision: 120 $
* $Revision: 124 $
*
*****************************************************************************/
@ -138,21 +138,20 @@
*
* AcpiExOpcode_xA_yT_zR
*
* Where:
* Where:
*
* xA - ARGUMENTS: The number of arguments (input operands) that are
* xA - ARGUMENTS: The number of arguments (input operands) that are
* required for this opcode type (1 through 6 args).
* yT - TARGETS: The number of targets (output operands) that are required
* yT - TARGETS: The number of targets (output operands) that are required
* for this opcode type (0, 1, or 2 targets).
* zR - RETURN VALUE: Indicates whether this opcode type returns a value
* zR - RETURN VALUE: Indicates whether this opcode type returns a value
* as the function return (0 or 1).
*
* The AcpiExOpcode* functions are called via the Dispatcher component with
* The AcpiExOpcode* functions are called via the Dispatcher component with
* fully resolved operands.
!*/
/*******************************************************************************
*
* FUNCTION: AcpiExOpcode_1A_0T_0R
@ -177,9 +176,9 @@ AcpiExOpcode_1A_0T_0R (
FUNCTION_TRACE_STR ("ExOpcode_1A_0T_0R", AcpiPsGetOpcodeName (WalkState->Opcode));
/* Examine the opcode */
/* Examine the AML opcode */
switch (WalkState->Opcode)
switch (WalkState->Opcode)
{
case AML_RELEASE_OP: /* Release (MutexObject) */
@ -253,9 +252,10 @@ AcpiExOpcode_1A_1T_0R (
FUNCTION_TRACE_STR ("ExOpcode_1A_1T_0R", AcpiPsGetOpcodeName (WalkState->Opcode));
/* Examine the AML opcode */
switch (WalkState->Opcode)
{
case AML_LOAD_OP:
Status = AcpiExLoadOp (Operand[0], Operand[1]);
@ -327,6 +327,7 @@ AcpiExOpcode_1A_1T_1R (
break;
}
/* Examine the AML opcode */
switch (WalkState->Opcode)
{
@ -339,7 +340,6 @@ AcpiExOpcode_1A_1T_1R (
case AML_FIND_SET_LEFT_BIT_OP: /* FindSetLeftBit (Operand, Result) */
ReturnDesc->Integer.Value = Operand[0]->Integer.Value;
/*
@ -357,7 +357,6 @@ AcpiExOpcode_1A_1T_1R (
case AML_FIND_SET_RIGHT_BIT_OP: /* FindSetRightBit (Operand, Result) */
ReturnDesc->Integer.Value = Operand[0]->Integer.Value;
/*
@ -543,13 +542,12 @@ AcpiExOpcode_1A_1T_1R (
break;
/*
* These are two obsolete opcodes
*/
case AML_SHIFT_LEFT_BIT_OP: /* ShiftLeftBit (Source, BitNum) */
case AML_SHIFT_RIGHT_BIT_OP: /* ShiftRightBit (Source, BitNum) */
/*
* These are two obsolete opcodes
*/
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "%s is obsolete and not implemented\n",
AcpiPsGetOpcodeName (WalkState->Opcode)));
Status = AE_SUPPORT;
@ -565,9 +563,8 @@ AcpiExOpcode_1A_1T_1R (
goto Cleanup;
}
/*
* Store the return value computed above into the target object
* Store the return value computed above into the target object
*/
Status = AcpiExStore (ReturnDesc, Operand[1], WalkState);
@ -614,12 +611,10 @@ AcpiExOpcode_1A_0T_1R (
FUNCTION_TRACE_STR ("ExOpcode_1A_0T_0R", AcpiPsGetOpcodeName (WalkState->Opcode));
/* Get the operand and decode the opcode */
/* Examine the AML opcode */
switch (WalkState->Opcode)
{
case AML_LNOT_OP: /* LNot (Operand) */
ReturnDesc = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER);
@ -661,9 +656,9 @@ AcpiExOpcode_1A_0T_1R (
goto Cleanup;
}
/*
/*
* ReturnDesc is now guaranteed to be an Integer object
* Do the actual increment or decrement
* Do the actual increment or decrement
*/
if (AML_INCREMENT_OP == WalkState->Opcode)
{
@ -703,7 +698,7 @@ AcpiExOpcode_1A_0T_1R (
case AML_DEBUG_OP:
/* Per 1.0b spec, Debug object is of type "DebugObject" */
/* The Debug Object is of type "DebugObject" */
Type = ACPI_TYPE_DEBUG_OBJECT;
break;
@ -723,7 +718,6 @@ AcpiExOpcode_1A_0T_1R (
*/
Type = (*(Operand[0]->Reference.Where))->Common.Type;
}
break;
@ -743,7 +737,6 @@ AcpiExOpcode_1A_0T_1R (
goto Cleanup;
}
}
else
{
/*
@ -789,9 +782,13 @@ AcpiExOpcode_1A_0T_1R (
{
Value = 0;
}
else
{
/*
* Type is guaranteed to be a buffer, string, or package at this
* point (even if the original operand was an object reference, it
* will be resolved and typechecked during operand resolution.)
*/
switch (TempDesc->Common.Type)
{
case ACPI_TYPE_BUFFER:
@ -806,16 +803,9 @@ AcpiExOpcode_1A_0T_1R (
Value = TempDesc->Package.Count;
break;
case INTERNAL_TYPE_REFERENCE:
/* TBD: this must be a reference to a buf/str/pkg?? */
Value = 4;
break;
default:
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Not Buf/Str/Pkg - found type %X\n",
TempDesc->Common.Type));
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "SizeOf, Not Buf/Str/Pkg - found type %s\n",
AcpiUtGetTypeName (TempDesc->Common.Type)));
Status = AE_AML_OPERAND_TYPE;
goto Cleanup;
}
@ -857,11 +847,11 @@ AcpiExOpcode_1A_0T_1R (
*/
switch (Operand[0]->Reference.Opcode)
{
/* Set Operand[0] to the value of the local/arg */
case AML_LOCAL_OP:
case AML_ARG_OP:
/* Set Operand[0] to the value of the local/arg */
AcpiDsMethodDataGetValue (Operand[0]->Reference.Opcode,
Operand[0]->Reference.Offset, WalkState, &TempDesc);
@ -875,53 +865,40 @@ AcpiExOpcode_1A_0T_1R (
default:
/* Index op - handled below */
/* Must be an Index op - handled below */
break;
}
}
/* Operand[0] may have changed from the code above */
if (VALID_DESCRIPTOR_TYPE (Operand[0], ACPI_DESC_TYPE_NAMED))
{
/* Get the actual object from the Node (This is the dereference) */
ReturnDesc = ((ACPI_NAMESPACE_NODE *) Operand[0])->Object;
ReturnDesc = AcpiNsGetAttachedObject ((ACPI_NAMESPACE_NODE *) Operand[0]);
/* Returning a pointer to the object, add another reference! */
AcpiUtAddReference (ReturnDesc);
}
else
{
/*
* This must be a reference object produced by the Index
* ASL operation -- check internal opcode
* This must be a reference produced by either the Index() or
* RefOf() operator
*/
if ((Operand[0]->Reference.Opcode != AML_INDEX_OP) &&
(Operand[0]->Reference.Opcode != AML_REF_OF_OP))
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown opcode in ref(%p) - %X\n",
Operand[0], Operand[0]->Reference.Opcode));
Status = AE_TYPE;
goto Cleanup;
}
switch (Operand[0]->Reference.Opcode)
{
case AML_INDEX_OP:
/*
* Supported target types for the Index operator are
* 1) A Buffer
* 2) A Package
* The target type for the Index operator must be
* either a Buffer or a Package
*/
if (Operand[0]->Reference.TargetType == ACPI_TYPE_BUFFER_FIELD)
switch (Operand[0]->Reference.TargetType)
{
case ACPI_TYPE_BUFFER_FIELD:
/*
* The target is a buffer, we must create a new object that
* contains one element of the buffer, the element pointed
@ -938,17 +915,19 @@ AcpiExOpcode_1A_0T_1R (
goto Cleanup;
}
/*
* Since we are returning the value of the buffer at the
* indexed location, we don't need to add an additional
* reference to the buffer itself.
*/
TempDesc = Operand[0]->Reference.Object;
ReturnDesc->Integer.Value =
TempDesc->Buffer.Pointer[Operand[0]->Reference.Offset];
break;
/* TBD: [Investigate] (see below) Don't add an additional
* ref!
*/
}
case ACPI_TYPE_PACKAGE:
else if (Operand[0]->Reference.TargetType == ACPI_TYPE_PACKAGE)
{
/*
* The target is a package, we want to return the referenced
* element of the package. We must add another reference to
@ -962,7 +941,6 @@ AcpiExOpcode_1A_0T_1R (
* an uninitialized package element and is thus a
* severe error.
*/
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "NULL package element obj %p\n",
Operand[0]));
Status = AE_AML_UNINITIALIZED_ELEMENT;
@ -970,16 +948,16 @@ AcpiExOpcode_1A_0T_1R (
}
AcpiUtAddReference (ReturnDesc);
}
break;
else
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown TargetType %X in obj %p\n",
default:
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown Index TargetType %X in obj %p\n",
Operand[0]->Reference.TargetType, Operand[0]));
Status = AE_AML_OPERAND_TYPE;
goto Cleanup;
}
break;
@ -991,9 +969,17 @@ AcpiExOpcode_1A_0T_1R (
AcpiUtAddReference (ReturnDesc);
break;
default:
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown opcode in ref(%p) - %X\n",
Operand[0], Operand[0]->Reference.Opcode));
Status = AE_TYPE;
goto Cleanup;
break;
}
}
break;

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: exoparg2 - AML execution - opcodes with 2 arguments
* $Revision: 97 $
* $Revision: 98 $
*
*****************************************************************************/
@ -139,21 +139,20 @@
*
* AcpiExOpcode_xA_yT_zR
*
* Where:
* Where:
*
* xA - ARGUMENTS: The number of arguments (input operands) that are
* xA - ARGUMENTS: The number of arguments (input operands) that are
* required for this opcode type (1 through 6 args).
* yT - TARGETS: The number of targets (output operands) that are required
* yT - TARGETS: The number of targets (output operands) that are required
* for this opcode type (0, 1, or 2 targets).
* zR - RETURN VALUE: Indicates whether this opcode type returns a value
* zR - RETURN VALUE: Indicates whether this opcode type returns a value
* as the function return (0 or 1).
*
* The AcpiExOpcode* functions are called via the Dispatcher component with
* The AcpiExOpcode* functions are called via the Dispatcher component with
* fully resolved operands.
!*/
/*******************************************************************************
*
* FUNCTION: AcpiExOpcode_2A_0T_0R
@ -378,8 +377,8 @@ AcpiExOpcode_2A_1T_1R (
goto Cleanup;
}
ReturnDesc->Integer.Value = AcpiExDoMathOp (WalkState->Opcode,
Operand[0]->Integer.Value,
ReturnDesc->Integer.Value = AcpiExDoMathOp (WalkState->Opcode,
Operand[0]->Integer.Value,
Operand[1]->Integer.Value);
goto StoreResultToTarget;
}
@ -623,7 +622,7 @@ AcpiExOpcode_2A_0T_1R (
*/
if (WalkState->OpInfo->Flags & AML_LOGICAL) /* LogicalOp (Operand0, Operand1) */
{
LogicalResult = AcpiExDoLogicalOp (WalkState->Opcode,
LogicalResult = AcpiExDoLogicalOp (WalkState->Opcode,
Operand[0]->Integer.Value,
Operand[1]->Integer.Value);
goto StoreLogicalResult;
@ -664,9 +663,9 @@ AcpiExOpcode_2A_0T_1R (
StoreLogicalResult:
/*
/*
* Set return value to according to LogicalResult. logical TRUE (all ones)
* Default is FALSE (zero)
* Default is FALSE (zero)
*/
if (LogicalResult)
{

View File

@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: exoparg3 - AML execution - opcodes with 3 arguments
* $Revision: 3 $
* $Revision: 5 $
*
*****************************************************************************/
@ -137,21 +137,20 @@
*
* AcpiExOpcode_xA_yT_zR
*
* Where:
* Where:
*
* xA - ARGUMENTS: The number of arguments (input operands) that are
* xA - ARGUMENTS: The number of arguments (input operands) that are
* required for this opcode type (1 through 6 args).
* yT - TARGETS: The number of targets (output operands) that are required
* yT - TARGETS: The number of targets (output operands) that are required
* for this opcode type (0, 1, or 2 targets).
* zR - RETURN VALUE: Indicates whether this opcode type returns a value
* zR - RETURN VALUE: Indicates whether this opcode type returns a value
* as the function return (0 or 1).
*
* The AcpiExOpcode* functions are called via the Dispatcher component with
* The AcpiExOpcode* functions are called via the Dispatcher component with
* fully resolved operands.
!*/
/*******************************************************************************
*
* FUNCTION: AcpiExOpcode_3A_0T_0R
@ -216,7 +215,6 @@ AcpiExOpcode_3A_0T_0R (
}
Cleanup:
return_ACPI_STATUS (Status);
@ -250,12 +248,11 @@ AcpiExOpcode_3A_1T_1R (
FUNCTION_TRACE_STR ("ExOpcode_3A_1T_1R", AcpiPsGetOpcodeName (WalkState->Opcode));
switch (WalkState->Opcode)
{
case AML_MID_OP: /* Mid (Source[0], Index[1], Length[2], Result[3]) */
/*
/*
* Create the return object. The Source operand is guaranteed to be
* either a String or a Buffer, so just use its type.
*/
@ -291,7 +288,8 @@ AcpiExOpcode_3A_1T_1R (
Buffer = ACPI_MEM_CALLOCATE (Length + 1);
if (!Buffer)
{
return (AE_NO_MEMORY);
Status = AE_NO_MEMORY;
goto Cleanup;
}
/* Copy the portion requested */
@ -304,7 +302,7 @@ AcpiExOpcode_3A_1T_1R (
ReturnDesc->String.Pointer = Buffer;
ReturnDesc->String.Length = Length;
}
break;
@ -337,5 +335,3 @@ AcpiExOpcode_3A_1T_1R (
}

View File

@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: exoparg6 - AML execution - opcodes with 6 arguments
* $Revision: 4 $
* $Revision: 6 $
*
*****************************************************************************/
@ -128,7 +128,6 @@
MODULE_NAME ("exoparg6")
/*!
* Naming convention for AML interpreter execution routines.
*
@ -138,21 +137,20 @@
*
* AcpiExOpcode_xA_yT_zR
*
* Where:
* Where:
*
* xA - ARGUMENTS: The number of arguments (input operands) that are
* xA - ARGUMENTS: The number of arguments (input operands) that are
* required for this opcode type (1 through 6 args).
* yT - TARGETS: The number of targets (output operands) that are required
* yT - TARGETS: The number of targets (output operands) that are required
* for this opcode type (0, 1, or 2 targets).
* zR - RETURN VALUE: Indicates whether this opcode type returns a value
* zR - RETURN VALUE: Indicates whether this opcode type returns a value
* as the function return (0 or 1).
*
* The AcpiExOpcode* functions are called via the Dispatcher component with
* The AcpiExOpcode* functions are called via the Dispatcher component with
* fully resolved operands.
!*/
/*******************************************************************************
*
* FUNCTION: AcpiExDoMatch
@ -264,9 +262,9 @@ AcpiExOpcode_6A_0T_1R (
switch (WalkState->Opcode)
{
case AML_MATCH_OP:
/*
* Match (SearchPackage[0], MatchOp1[1], MatchObject1[2],
case AML_MATCH_OP:
/*
* Match (SearchPackage[0], MatchOp1[1], MatchObject1[2],
* MatchOp2[3], MatchObject2[4], StartIndex[5])
*/
@ -304,6 +302,7 @@ AcpiExOpcode_6A_0T_1R (
* Examine each element until a match is found. Within the loop,
* "continue" signifies that the current element does not match
* and the next should be examined.
*
* Upon finding a match, the loop will terminate via "break" at
* the bottom. If it terminates "normally", MatchValue will be -1
* (its initial value) indicating that no match was found. When
@ -315,8 +314,6 @@ AcpiExOpcode_6A_0T_1R (
/*
* Treat any NULL or non-numeric elements as non-matching.
* TBD [Unhandled] - if an element is a Name,
* should we examine its value?
*/
if (!ThisElement ||
ThisElement->Common.Type != ACPI_TYPE_INTEGER)
@ -324,21 +321,17 @@ AcpiExOpcode_6A_0T_1R (
continue;
}
/*
* Within these switch statements:
* "break" (exit from the switch) signifies a match;
* "continue" (proceed to next iteration of enclosing
* "for" loop) signifies a non-match.
* "continue" (proceed to next iteration of enclosing
* "for" loop) signifies a non-match.
*/
if (!AcpiExDoMatch ((UINT32) Operand[1]->Integer.Value,
if (!AcpiExDoMatch ((UINT32) Operand[1]->Integer.Value,
ThisElement->Integer.Value, Operand[2]->Integer.Value))
{
continue;
}
if (!AcpiExDoMatch ((UINT32) Operand[3]->Integer.Value,
if (!AcpiExDoMatch ((UINT32) Operand[3]->Integer.Value,
ThisElement->Integer.Value, Operand[4]->Integer.Value))
{
continue;

View File

@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: exprep - ACPI AML (p-code) execution - field prep utilities
* $Revision: 99 $
* $Revision: 109 $
*
*****************************************************************************/
@ -130,74 +130,91 @@
/*******************************************************************************
*
* FUNCTION: AcpiExDecodeFieldAccessType
* FUNCTION: AcpiExDecodeFieldAccess
*
* PARAMETERS: Access - Encoded field access bits
* Length - Field length.
*
* RETURN: Field granularity (8, 16, 32 or 64)
* RETURN: Field granularity (8, 16, 32 or 64) and
* ByteAlignment (1, 2, 3, or 4)
*
* DESCRIPTION: Decode the AccessType bits of a field definition.
*
******************************************************************************/
static UINT32
AcpiExDecodeFieldAccessType (
UINT32 Access,
UINT16 Length,
UINT32 *Alignment)
AcpiExDecodeFieldAccess (
ACPI_OPERAND_OBJECT *ObjDesc,
UINT8 FieldFlags,
UINT32 *ReturnByteAlignment)
{
PROC_NAME ("ExDecodeFieldAccessType");
UINT32 Access;
UINT16 Length;
UINT8 ByteAlignment;
UINT8 BitLength;
PROC_NAME ("ExDecodeFieldAccess");
Access = (FieldFlags & AML_FIELD_ACCESS_TYPE_MASK);
Length = ObjDesc->CommonField.BitLength;
switch (Access)
{
case ACCESS_ANY_ACC:
case AML_FIELD_ACCESS_ANY:
*Alignment = 8;
ByteAlignment = 1;
/* Use the length to set the access type */
if (Length <= 8)
{
return (8);
BitLength = 8;
}
else if (Length <= 16)
{
return (16);
BitLength = 16;
}
else if (Length <= 32)
{
return (32);
BitLength = 32;
}
else if (Length <= 64)
{
return (64);
BitLength = 64;
}
else
{
/* Larger than Qword - just use byte-size chunks */
/* Default is 8 (byte) */
return (8);
BitLength = 8;
}
break;
case ACCESS_BYTE_ACC:
*Alignment = 8;
return (8);
case AML_FIELD_ACCESS_BYTE:
ByteAlignment = 1;
BitLength = 8;
break;
case ACCESS_WORD_ACC:
*Alignment = 16;
return (16);
case AML_FIELD_ACCESS_WORD:
ByteAlignment = 2;
BitLength = 16;
break;
case ACCESS_DWORD_ACC:
*Alignment = 32;
return (32);
case AML_FIELD_ACCESS_DWORD:
ByteAlignment = 4;
BitLength = 32;
break;
case ACCESS_QWORD_ACC: /* ACPI 2.0 */
*Alignment = 64;
return (64);
case AML_FIELD_ACCESS_QWORD: /* ACPI 2.0 */
ByteAlignment = 8;
BitLength = 64;
break;
case AML_FIELD_ACCESS_BUFFER: /* ACPI 2.0 */
ByteAlignment = 8;
BitLength = 8;
break;
default:
@ -208,6 +225,19 @@ AcpiExDecodeFieldAccessType (
Access));
return (0);
}
if (ObjDesc->Common.Type == ACPI_TYPE_BUFFER_FIELD)
{
/*
* BufferField access can be on any byte boundary, so the
* ByteAlignment is always 1 byte -- regardless of any ByteAlignment
* implied by the field access type.
*/
ByteAlignment = 1;
}
*ReturnByteAlignment = ByteAlignment;
return (BitLength);
}
@ -225,7 +255,9 @@ AcpiExDecodeFieldAccessType (
* RETURN: Status
*
* DESCRIPTION: Initialize the areas of the field object that are common
* to the various types of fields.
* to the various types of fields. Note: This is very "sensitive"
* code because we are solving the general case for field
* alignment.
*
******************************************************************************/
@ -233,45 +265,48 @@ ACPI_STATUS
AcpiExPrepCommonFieldObject (
ACPI_OPERAND_OBJECT *ObjDesc,
UINT8 FieldFlags,
UINT8 FieldAttribute,
UINT32 FieldBitPosition,
UINT32 FieldBitLength)
{
UINT32 AccessBitWidth;
UINT32 Alignment;
UINT32 ByteAlignment;
UINT32 NearestByteAddress;
FUNCTION_TRACE ("ExPrepCommonFieldObject");
if (FieldBitLength > ACPI_UINT16_MAX)
{
REPORT_ERROR (("Field size too long (> 0xFFFF), not supported\n"));
return_ACPI_STATUS (AE_SUPPORT);
}
/*
* Note: the structure being initialized is the
* ACPI_COMMON_FIELD_INFO; No structure fields outside of the common area
* are initialized by this procedure.
* ACPI_COMMON_FIELD_INFO; No structure fields outside of the common
* area are initialized by this procedure.
*/
/* Demultiplex the FieldFlags byte */
ObjDesc->CommonField.LockRule = (UINT8) ((FieldFlags & LOCK_RULE_MASK)
>> LOCK_RULE_SHIFT);
ObjDesc->CommonField.UpdateRule = (UINT8) ((FieldFlags & UPDATE_RULE_MASK)
>> UPDATE_RULE_SHIFT);
/* Other misc fields */
ObjDesc->CommonField.FieldFlags = FieldFlags;
ObjDesc->CommonField.Attribute = FieldAttribute;
ObjDesc->CommonField.BitLength = (UINT16) FieldBitLength;
/*
* Decode the access type so we can compute offsets. The access type gives
* two pieces of information - the width of each field access and the
* necessary alignment of the access. For AnyAcc, the width used is the
* largest necessary/possible in an attempt to access the whole field in one
* I/O operation. However, for AnyAcc, the alignment is 8. For all other
* access types (Byte, Word, Dword, Qword), the width is the same as the
* alignment.
* necessary ByteAlignment (address granularity) of the access.
*
* For AnyAcc, the AccessBitWidth is the largest width that is both necessary
* and possible in an attempt to access the whole field in one
* I/O operation. However, for AnyAcc, the ByteAlignment is always one byte.
*
* For all Buffer Fields, the ByteAlignment is always one byte.
*
* For all other access types (Byte, Word, Dword, Qword), the Bitwidth is the
* same (equivalent) as the ByteAlignment.
*/
AccessBitWidth = AcpiExDecodeFieldAccessType (
((FieldFlags & ACCESS_TYPE_MASK) >> ACCESS_TYPE_SHIFT),
ObjDesc->Field.BitLength, &Alignment);
AccessBitWidth = AcpiExDecodeFieldAccess (ObjDesc, FieldFlags, &ByteAlignment);
if (!AccessBitWidth)
{
return_ACPI_STATUS (AE_AML_OPERAND_VALUE);
@ -279,63 +314,49 @@ AcpiExPrepCommonFieldObject (
/* Setup width (access granularity) fields */
ObjDesc->CommonField.AccessBitWidth = (UINT8) AccessBitWidth; /* 8, 16, 32, 64 */
ObjDesc->CommonField.AccessByteWidth = (UINT8) DIV_8 (AccessBitWidth); /* 1, 2, 4, 8 */
if (ObjDesc->Common.Type == ACPI_TYPE_BUFFER_FIELD)
{
/*
* BufferField access can be on any byte boundary, so the
* alignment is always 8 (regardless of any alignment implied by the
* field access type.)
*/
Alignment = 8;
}
ObjDesc->CommonField.AccessBitWidth = (UINT8) AccessBitWidth; /* 8, 16, 32, 64 */
ObjDesc->CommonField.AccessByteWidth = (UINT8) DIV_8 (AccessBitWidth); /* 1, 2, 4, 8 */
/*
* BaseByteOffset is the address of the start of the field within the region. It is
* the byte address of the first *datum* (field-width data unit) of the field.
* (i.e., the first datum that contains at least the first *bit* of the field.)
* Note: ByteAlignment is always either equal to the AccessBitWidth or 8 (Byte access),
* and it defines the addressing granularity of the parent region or buffer.
*/
NearestByteAddress = ROUND_BITS_DOWN_TO_BYTES (FieldBitPosition);
ObjDesc->CommonField.BaseByteOffset = ROUND_DOWN (NearestByteAddress,
DIV_8 (Alignment));
NearestByteAddress = ROUND_BITS_DOWN_TO_BYTES (FieldBitPosition);
ObjDesc->CommonField.BaseByteOffset = ROUND_DOWN (NearestByteAddress, ByteAlignment);
/*
* StartFieldBitOffset is the offset of the first bit of the field within a field datum.
* This is calculated as the number of bits from the BaseByteOffset. In other words,
* the start of the field is relative to a byte address, regardless of the access type
* of the field.
*/
ObjDesc->CommonField.StartFieldBitOffset = (UINT8) (MOD_8 (FieldBitPosition));
/*
* DatumValidBits is the number of valid field bits in the first field datum.
*/
ObjDesc->CommonField.DatumValidBits = (UINT8) (AccessBitWidth -
ObjDesc->CommonField.StartFieldBitOffset);
ObjDesc->CommonField.StartFieldBitOffset = (UINT8) (FieldBitPosition -
MUL_8 (ObjDesc->CommonField.BaseByteOffset));
/*
* Valid bits -- the number of bits that compose a partial datum,
* 1) At the end of the field within the region (arbitrary starting bit offset)
* 2) At the end of a buffer used to contain the field (starting offset always zero)
*/
ObjDesc->CommonField.EndFieldValidBits = (UINT8) ((ObjDesc->CommonField.StartFieldBitOffset +
FieldBitLength) % AccessBitWidth);
ObjDesc->CommonField.EndBufferValidBits = (UINT8) (FieldBitLength % AccessBitWidth); /* StartBufferBitOffset always = 0 */
ObjDesc->CommonField.EndFieldValidBits = (UINT8) ((ObjDesc->CommonField.StartFieldBitOffset + FieldBitLength) %
AccessBitWidth);
ObjDesc->CommonField.EndBufferValidBits = (UINT8) (FieldBitLength % AccessBitWidth); /* StartBufferBitOffset always = 0 */
/*
* Does the entire field fit within a single field access element
* (datum)? (without crossing a datum boundary)
* DatumValidBits is the number of valid field bits in the first field datum.
*/
if ((ObjDesc->CommonField.StartFieldBitOffset + ObjDesc->CommonField.BitLength) <=
(UINT16) ObjDesc->CommonField.AccessBitWidth)
{
ObjDesc->CommonField.AccessFlags |= AFIELD_SINGLE_DATUM;
}
ObjDesc->CommonField.DatumValidBits = (UINT8) (AccessBitWidth -
ObjDesc->CommonField.StartFieldBitOffset);
/*
* Does the entire field fit within a single field access element? (datum)
* (i.e., without crossing a datum boundary)
*/
if ((ObjDesc->CommonField.StartFieldBitOffset + FieldBitLength) <=
(UINT16) AccessBitWidth)
{
ObjDesc->Common.Flags |= AOPOBJ_SINGLE_DATUM;
}
return_ACPI_STATUS (AE_OK);
}
@ -383,14 +404,15 @@ AcpiExPrepFieldValue (
Type = AcpiNsGetType (Info->RegionNode);
if (Type != ACPI_TYPE_REGION)
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Needed Region, found type %X %s\n",
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
"Needed Region, found type %X %s\n",
Type, AcpiUtGetTypeName (Type)));
return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
}
}
/* Allocate a new region object */
/* Allocate a new field object */
ObjDesc = AcpiUtCreateInternalObject (Info->FieldType);
if (!ObjDesc)
@ -400,8 +422,9 @@ AcpiExPrepFieldValue (
/* Initialize areas of the object that are common to all fields */
Status = AcpiExPrepCommonFieldObject (ObjDesc, Info->FieldFlags,
Info->FieldBitPosition, Info->FieldBitLength);
ObjDesc->CommonField.Node = Info->FieldNode;
Status = AcpiExPrepCommonFieldObject (ObjDesc, Info->FieldFlags,
Info->Attribute, Info->FieldBitPosition, Info->FieldBitLength);
if (ACPI_FAILURE (Status))
{
AcpiUtDeleteObjectDesc (ObjDesc);
@ -414,13 +437,14 @@ AcpiExPrepFieldValue (
{
case INTERNAL_TYPE_REGION_FIELD:
ObjDesc->Field.RegionObj = AcpiNsGetAttachedObject (Info->RegionNode);
ObjDesc->Field.RegionObj = AcpiNsGetAttachedObject (Info->RegionNode);
/* An additional reference for the container */
AcpiUtAddReference (ObjDesc->Field.RegionObj);
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "RegionField: Bitoff=%X Off=%X Gran=%X Region %p\n",
ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
"RegionField: Bitoff=%X Off=%X Gran=%X Region %p\n",
ObjDesc->Field.StartFieldBitOffset, ObjDesc->Field.BaseByteOffset,
ObjDesc->Field.AccessBitWidth, ObjDesc->Field.RegionObj));
break;
@ -428,19 +452,19 @@ AcpiExPrepFieldValue (
case INTERNAL_TYPE_BANK_FIELD:
ObjDesc->BankField.Value = Info->BankValue;
ObjDesc->BankField.RegionObj = AcpiNsGetAttachedObject (Info->RegionNode);
ObjDesc->BankField.BankRegisterObj = AcpiNsGetAttachedObject (Info->RegisterNode);
ObjDesc->BankField.Value = Info->BankValue;
ObjDesc->BankField.RegionObj = AcpiNsGetAttachedObject (Info->RegionNode);
ObjDesc->BankField.BankObj = AcpiNsGetAttachedObject (Info->RegisterNode);
/* An additional reference for the attached objects */
AcpiUtAddReference (ObjDesc->BankField.RegionObj);
AcpiUtAddReference (ObjDesc->BankField.BankRegisterObj);
AcpiUtAddReference (ObjDesc->BankField.BankObj);
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Bank Field: BitOff=%X Off=%X Gran=%X Region %p BankReg %p\n",
ObjDesc->BankField.StartFieldBitOffset, ObjDesc->BankField.BaseByteOffset,
ObjDesc->Field.AccessBitWidth, ObjDesc->BankField.RegionObj,
ObjDesc->BankField.BankRegisterObj));
ObjDesc->BankField.BankObj));
break;
@ -473,11 +497,11 @@ AcpiExPrepFieldValue (
* Store the constructed descriptor (ObjDesc) into the parent Node,
* preserving the current type of that NamedObj.
*/
Status = AcpiNsAttachObject (Info->FieldNode, ObjDesc,
Status = AcpiNsAttachObject (Info->FieldNode, ObjDesc,
(UINT8) AcpiNsGetType (Info->FieldNode));
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "set NamedObj %p (%4.4s) val = %p\n",
Info->FieldNode, (char*)&(Info->FieldNode->Name), ObjDesc));
Info->FieldNode, (char*)&(Info->FieldNode->Name), ObjDesc));
/* Remove local reference to the object */

View File

@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: exregion - ACPI default OpRegion (address space) handlers
* $Revision: 61 $
* $Revision: 64 $
*
*****************************************************************************/
@ -153,7 +153,7 @@ AcpiExSystemMemorySpaceHandler (
UINT32 Function,
ACPI_PHYSICAL_ADDRESS Address,
UINT32 BitWidth,
UINT32 *Value,
ACPI_INTEGER *Value,
void *HandlerContext,
void *RegionContext)
{
@ -182,6 +182,10 @@ AcpiExSystemMemorySpaceHandler (
Length = 4;
break;
case 64:
Length = 8;
break;
default:
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Invalid SystemMemory width %d\n",
BitWidth));
@ -233,9 +237,6 @@ AcpiExSystemMemorySpaceHandler (
* Generate a logical pointer corresponding to the address we want to
* access
*/
/* TBD: should these pointers go to 64-bit in all cases ? */
LogicalAddrPtr = MemInfo->MappedLogicalAddress +
((ACPI_INTEGER) Address - (ACPI_INTEGER) MemInfo->MappedPhysicalAddress);
@ -247,8 +248,7 @@ AcpiExSystemMemorySpaceHandler (
switch (Function)
{
case ACPI_READ_ADR_SPACE:
case ACPI_READ:
switch (BitWidth)
{
@ -263,12 +263,14 @@ AcpiExSystemMemorySpaceHandler (
case 32:
MOVE_UNALIGNED32_TO_32 (Value, LogicalAddrPtr);
break;
}
case 64:
MOVE_UNALIGNED64_TO_64 (Value, LogicalAddrPtr);
break;
}
break;
case ACPI_WRITE_ADR_SPACE:
case ACPI_WRITE:
switch (BitWidth)
{
@ -283,11 +285,13 @@ AcpiExSystemMemorySpaceHandler (
case 32:
MOVE_UNALIGNED32_TO_32 (LogicalAddrPtr, Value);
break;
case 64:
MOVE_UNALIGNED64_TO_64 (LogicalAddrPtr, Value);
break;
}
break;
default:
Status = AE_BAD_PARAMETER;
break;
@ -320,7 +324,7 @@ AcpiExSystemIoSpaceHandler (
UINT32 Function,
ACPI_PHYSICAL_ADDRESS Address,
UINT32 BitWidth,
UINT32 *Value,
ACPI_INTEGER *Value,
void *HandlerContext,
void *RegionContext)
{
@ -338,20 +342,17 @@ AcpiExSystemIoSpaceHandler (
switch (Function)
{
case ACPI_READ_ADR_SPACE:
case ACPI_READ:
*Value = 0;
Status = AcpiOsReadPort ((ACPI_IO_ADDRESS) Address, Value, BitWidth);
break;
case ACPI_WRITE_ADR_SPACE:
case ACPI_WRITE:
Status = AcpiOsWritePort ((ACPI_IO_ADDRESS) Address, *Value, BitWidth);
break;
default:
Status = AE_BAD_PARAMETER;
break;
@ -384,7 +385,7 @@ AcpiExPciConfigSpaceHandler (
UINT32 Function,
ACPI_PHYSICAL_ADDRESS Address,
UINT32 BitWidth,
UINT32 *Value,
ACPI_INTEGER *Value,
void *HandlerContext,
void *RegionContext)
{
@ -397,7 +398,7 @@ AcpiExPciConfigSpaceHandler (
/*
* The arguments to AcpiOs(Read|Write)PciCfg(Byte|Word|Dword) are:
* The arguments to AcpiOs(Read|Write)PciConfiguration are:
*
* PciSegment is the PCI bus segment range 0-31
* PciBus is the PCI bus number range 0-255
@ -418,20 +419,17 @@ AcpiExPciConfigSpaceHandler (
switch (Function)
{
case ACPI_READ_ADR_SPACE:
case ACPI_READ:
*Value = 0;
Status = AcpiOsReadPciConfiguration (PciId, PciRegister, Value, BitWidth);
break;
case ACPI_WRITE_ADR_SPACE:
case ACPI_WRITE:
Status = AcpiOsWritePciConfiguration (PciId, PciRegister, *Value, BitWidth);
break;
default:
Status = AE_BAD_PARAMETER;
@ -465,7 +463,7 @@ AcpiExCmosSpaceHandler (
UINT32 Function,
ACPI_PHYSICAL_ADDRESS Address,
UINT32 BitWidth,
UINT32 *Value,
ACPI_INTEGER *Value,
void *HandlerContext,
void *RegionContext)
{
@ -502,7 +500,7 @@ AcpiExPciBarSpaceHandler (
UINT32 Function,
ACPI_PHYSICAL_ADDRESS Address,
UINT32 BitWidth,
UINT32 *Value,
ACPI_INTEGER *Value,
void *HandlerContext,
void *RegionContext)
{

View File

@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: exresnte - AML Interpreter object resolution
* $Revision: 43 $
* $Revision: 45 $
*
*****************************************************************************/
@ -178,14 +178,13 @@ AcpiExResolveNodeToValue (
* The stack pointer points to a ACPI_NAMESPACE_NODE (Node). Get the
* object that is attached to the Node.
*/
Node = *ObjectPtr;
SourceDesc = AcpiNsGetAttachedObject (Node);
EntryType = AcpiNsGetType ((ACPI_HANDLE) Node);
Node = *ObjectPtr;
SourceDesc = AcpiNsGetAttachedObject (Node);
EntryType = AcpiNsGetType ((ACPI_HANDLE) Node);
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Entry=%p SourceDesc=%p Type=%X\n",
Node, SourceDesc, EntryType));
/*
* Several object types require no further processing:
* 1) Devices rarely have an attached object, return the Node
@ -210,7 +209,6 @@ AcpiExResolveNodeToValue (
*/
switch (EntryType)
{
case ACPI_TYPE_PACKAGE:
if (ACPI_TYPE_PACKAGE != SourceDesc->Common.Type)
@ -286,7 +284,6 @@ AcpiExResolveNodeToValue (
Status = AcpiExReadDataFromField (SourceDesc, &ObjDesc);
break;
/*
* For these objects, just return the object attached to the Node
*/
@ -363,7 +360,7 @@ AcpiExResolveNodeToValue (
ObjDesc->Integer.Value = TempVal;
/*
/*
* Truncate value if we are executing from a 32-bit ACPI table
* AND actually executing AML code. If we are resolving
* an object in the namespace via an external call to the

View File

@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: exresolv - AML Interpreter object resolution
* $Revision: 101 $
* $Revision: 103 $
*
*****************************************************************************/
@ -131,118 +131,6 @@
MODULE_NAME ("exresolv")
/*******************************************************************************
*
* FUNCTION: AcpiExGetBufferFieldValue
*
* PARAMETERS: *ObjDesc - Pointer to a BufferField
* *ResultDesc - Pointer to an empty descriptor which will
* become an Integer with the field's value
*
* RETURN: Status
*
* DESCRIPTION: Retrieve the value from a BufferField
*
******************************************************************************/
ACPI_STATUS
AcpiExGetBufferFieldValue (
ACPI_OPERAND_OBJECT *ObjDesc,
ACPI_OPERAND_OBJECT *ResultDesc)
{
ACPI_STATUS Status;
UINT32 Mask;
UINT8 *Location;
FUNCTION_TRACE ("ExGetBufferFieldValue");
/*
* Parameter validation
*/
if (!ObjDesc)
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Internal - null field pointer\n"));
return_ACPI_STATUS (AE_AML_NO_OPERAND);
}
if (!(ObjDesc->Common.Flags & AOPOBJ_DATA_VALID))
{
Status = AcpiDsGetBufferFieldArguments (ObjDesc);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
}
if (!ObjDesc->BufferField.BufferObj)
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Internal - null container pointer\n"));
return_ACPI_STATUS (AE_AML_INTERNAL);
}
if (ACPI_TYPE_BUFFER != ObjDesc->BufferField.BufferObj->Common.Type)
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Internal - container is not a Buffer\n"));
return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
}
if (!ResultDesc)
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Internal - null result pointer\n"));
return_ACPI_STATUS (AE_AML_INTERNAL);
}
/* Field location is (base of buffer) + (byte offset) */
Location = ObjDesc->BufferField.BufferObj->Buffer.Pointer
+ ObjDesc->BufferField.BaseByteOffset;
/*
* Construct Mask with as many 1 bits as the field width
*
* NOTE: Only the bottom 5 bits are valid for a shift operation, so
* special care must be taken for any shift greater than 31 bits.
*
* TBD: [Unhandled] Fields greater than 32 bits will not work.
*/
if (ObjDesc->BufferField.BitLength < 32)
{
Mask = ((UINT32) 1 << ObjDesc->BufferField.BitLength) - (UINT32) 1;
}
else
{
Mask = ACPI_UINT32_MAX;
}
ResultDesc->Integer.Type = (UINT8) ACPI_TYPE_INTEGER;
/* Get the 32 bit value at the location */
MOVE_UNALIGNED32_TO_32 (&ResultDesc->Integer.Value, Location);
/*
* Shift the 32-bit word containing the field, and mask off the
* resulting value
*/
ResultDesc->Integer.Value =
(ResultDesc->Integer.Value >> ObjDesc->BufferField.StartFieldBitOffset) & Mask;
ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
"** Read from buffer %p byte %d bit %d width %d addr %p mask %08X val %8.8X%8.8X\n",
ObjDesc->BufferField.BufferObj->Buffer.Pointer,
ObjDesc->BufferField.BaseByteOffset,
ObjDesc->BufferField.StartFieldBitOffset,
ObjDesc->BufferField.BitLength,
Location, Mask,
HIDWORD(ResultDesc->Integer.Value),
LODWORD(ResultDesc->Integer.Value)));
return_ACPI_STATUS (AE_OK);
}
/*******************************************************************************
*
@ -276,7 +164,6 @@ AcpiExResolveToValue (
return_ACPI_STATUS (AE_AML_NO_OPERAND);
}
/*
* The entity pointed to by the StackPtr can be either
* 1) A valid ACPI_OPERAND_OBJECT, or
@ -305,7 +192,6 @@ AcpiExResolveToValue (
}
}
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Resolved object %p\n", *StackPtr));
return_ACPI_STATUS (AE_OK);
}
@ -347,14 +233,12 @@ AcpiExResolveObjectToValue (
switch (StackDesc->Common.Type)
{
case INTERNAL_TYPE_REFERENCE:
Opcode = StackDesc->Reference.Opcode;
switch (Opcode)
{
case AML_NAME_OP:
/*
@ -398,7 +282,6 @@ AcpiExResolveObjectToValue (
StackDesc->Reference.Offset, ObjDesc));
break;
/*
* For constants, we must change the reference/constant object
* to a real integer object
@ -439,7 +322,7 @@ AcpiExResolveObjectToValue (
break;
}
/*
/*
* Remove a reference from the original reference object
* and put the new object in its place
*/
@ -471,7 +354,6 @@ AcpiExResolveObjectToValue (
AcpiUtAddReference (ObjDesc);
*StackPtr = ObjDesc;
}
else
{
/*
@ -494,7 +376,6 @@ AcpiExResolveObjectToValue (
Status = AE_AML_INTERNAL;
break;
}
break;
@ -515,55 +396,24 @@ AcpiExResolveObjectToValue (
break; /* case INTERNAL_TYPE_REFERENCE */
/*
* These cases may never happen here, but just in case..
*/
case ACPI_TYPE_BUFFER_FIELD:
ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_ANY);
if (!ObjDesc)
{
return_ACPI_STATUS (AE_NO_MEMORY);
}
Status = AcpiExGetBufferFieldValue (StackDesc, ObjDesc);
if (ACPI_FAILURE (Status))
{
AcpiUtRemoveReference (ObjDesc);
ObjDesc = NULL;
}
*StackPtr = (void *) ObjDesc;
break;
case INTERNAL_TYPE_REGION_FIELD:
case INTERNAL_TYPE_BANK_FIELD:
case INTERNAL_TYPE_INDEX_FIELD:
ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_ANY);
if (!ObjDesc)
{
return_ACPI_STATUS (AE_NO_MEMORY);
}
/* TBD: WRONG! */
Status = AcpiExGetBufferFieldValue (StackDesc, ObjDesc);
if (ACPI_FAILURE (Status))
{
AcpiUtRemoveReference (ObjDesc);
ObjDesc = NULL;
}
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "FieldRead SourceDesc=%p Type=%X\n",
StackDesc, StackDesc->Common.Type));
Status = AcpiExReadDataFromField (StackDesc, &ObjDesc);
*StackPtr = (void *) ObjDesc;
break;
/* TBD: [Future] - may need to handle IndexField, and DefField someday */
default:
break;
} /* switch (StackDesc->Common.Type) */
}
return_ACPI_STATUS (Status);
}

View File

@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: exstore - AML Interpreter object store support
* $Revision: 150 $
* $Revision: 154 $
*
*****************************************************************************/
@ -137,14 +137,16 @@
* PARAMETERS: *SourceDesc - Value to be stored
* *DestDesc - Where to store it. Must be an NS node
* or an ACPI_OPERAND_OBJECT of type
* Reference;
* Reference;
* WalkState - Current walk state
*
* RETURN: Status
*
* DESCRIPTION: Store the value described by SourceDesc into the location
* described by DestDesc. Called by various interpreter
* functions to store the result of an operation into
* the destination operand.
* the destination operand -- not just simply the actual STORE
* ASL operator.
*
******************************************************************************/
@ -185,7 +187,6 @@ AcpiExStore (
return_ACPI_STATUS (Status);
}
/* Destination object must be an object of type Reference */
if (DestDesc->Common.Type != INTERNAL_TYPE_REFERENCE)
@ -203,7 +204,6 @@ AcpiExStore (
return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
}
/*
* Examine the Reference opcode. These cases are handled:
*
@ -215,7 +215,6 @@ AcpiExStore (
*/
switch (RefDesc->Reference.Opcode)
{
case AML_NAME_OP:
/* Storing an object into a Name "container" */
@ -299,27 +298,23 @@ AcpiExStore (
case AML_REVISION_OP:
/*
* Storing to a constant is a no-op -- see ACPI Specification
* Delete the reference descriptor, however
* Storing to a constant is a no-op according to the ACPI
* Specification. (Delete the reference descriptor, however.)
*/
break;
default:
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Internal - Unknown Reference subtype %02x\n",
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown Reference subtype %02x\n",
RefDesc->Reference.Opcode));
/* TBD: [Restructure] use object dump routine !! */
DUMP_BUFFER (RefDesc, sizeof (ACPI_OPERAND_OBJECT));
DUMP_ENTRY (RefDesc, ACPI_LV_ERROR);
Status = AE_AML_INTERNAL;
break;
} /* switch (RefDesc->Reference.Opcode) */
return_ACPI_STATUS (Status);
}
@ -328,12 +323,13 @@ AcpiExStore (
*
* FUNCTION: AcpiExStoreObjectToIndex
*
* PARAMETERS: *SourceDesc - Value to be stored
* *Node - Named object to receive the value
* PARAMETERS: *SourceDesc - Value to be stored
* *DestDesc - Named object to receive the value
* WalkState - Current walk state
*
* RETURN: Status
*
* DESCRIPTION: Store the object to the named object.
* DESCRIPTION: Store the object to indexed Buffer or Package element
*
******************************************************************************/
@ -345,8 +341,6 @@ AcpiExStoreObjectToIndex (
{
ACPI_STATUS Status = AE_OK;
ACPI_OPERAND_OBJECT *ObjDesc;
UINT32 Length;
UINT32 i;
UINT8 Value = 0;
@ -395,10 +389,11 @@ AcpiExStoreObjectToIndex (
if (!ObjDesc)
{
/*
* If the ObjDesc is NULL, it means that an uninitialized package
* element has been used as a destination (this is OK), therefore,
* we must create the destination element to match the type of the
* source element NOTE: SourceDesccan be of any type.
* If the ObjDesc is NULL, it means that an uninitialized
* package element has been used as a destination (this is OK),
* therefore, we must create the destination element to match
* the type of the source element NOTE: SourceDesc can be of
* any type.
*/
ObjDesc = AcpiUtCreateInternalObject (SourceDesc->Common.Type);
if (!ObjDesc)
@ -411,7 +406,8 @@ AcpiExStoreObjectToIndex (
*/
if (ACPI_TYPE_PACKAGE == ObjDesc->Common.Type)
{
Status = AcpiUtCopyIpackageToIpackage (SourceDesc, ObjDesc, WalkState);
Status = AcpiUtCopyIpackageToIpackage (SourceDesc, ObjDesc,
WalkState);
if (ACPI_FAILURE (Status))
{
AcpiUtRemoveReference (ObjDesc);
@ -450,18 +446,17 @@ AcpiExStoreObjectToIndex (
case ACPI_TYPE_BUFFER_FIELD:
/* TBD: can probably call the generic Buffer/Field routines */
/*
* Storing into a buffer at a location defined by an Index.
* Store into a Buffer (not actually a real BufferField) at a
* location defined by an Index.
*
* Each 8-bit element of the source object is written to the
* 8-bit Buffer Field of the Index destination object.
* The first 8-bit element of the source object is written to the
* 8-bit Buffer location defined by the Index destination object,
* according to the ACPI 2.0 specification.
*/
/*
* Set the ObjDesc to the destination object and type check.
* Make sure the target is a Buffer
*/
ObjDesc = DestDesc->Reference.Object;
if (ObjDesc->Common.Type != ACPI_TYPE_BUFFER)
@ -476,68 +471,46 @@ AcpiExStoreObjectToIndex (
switch (SourceDesc->Common.Type)
{
case ACPI_TYPE_INTEGER:
/*
* Type is Integer, assign bytewise
* This loop to assign each of the elements is somewhat
* backward because of the Big Endian-ness of IA-64
*/
Length = sizeof (ACPI_INTEGER);
for (i = Length; i != 0; i--)
{
Value = (UINT8)(SourceDesc->Integer.Value >> (MUL_8 (i - 1)));
ObjDesc->Buffer.Pointer[DestDesc->Reference.Offset] = Value;
}
break;
/* Use the least-significant byte of the integer */
Value = (UINT8) (SourceDesc->Integer.Value);
break;
case ACPI_TYPE_BUFFER:
/*
* Type is Buffer, the Length is in the structure.
* Just loop through the elements and assign each one in turn.
*/
Length = SourceDesc->Buffer.Length;
for (i = 0; i < Length; i++)
{
Value = SourceDesc->Buffer.Pointer[i];
ObjDesc->Buffer.Pointer[DestDesc->Reference.Offset] = Value;
}
break;
Value = SourceDesc->Buffer.Pointer[0];
break;
case ACPI_TYPE_STRING:
/*
* Type is String, the Length is in the structure.
* Just loop through the elements and assign each one in turn.
*/
Length = SourceDesc->String.Length;
for (i = 0; i < Length; i++)
{
Value = SourceDesc->String.Pointer[i];
ObjDesc->Buffer.Pointer[DestDesc->Reference.Offset] = Value;
}
break;
Value = SourceDesc->String.Pointer[0];
break;
default:
/* Other types are invalid */
/* All other types are invalid */
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
"Source must be Number/Buffer/String type, not %X\n",
SourceDesc->Common.Type));
Status = AE_AML_OPERAND_TYPE;
"Source must be Integer/Buffer/String type, not %s\n",
AcpiUtGetTypeName (SourceDesc->Common.Type)));
return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
break;
}
/* Store the source value into the target buffer byte */
ObjDesc->Buffer.Pointer[DestDesc->Reference.Offset] = Value;
break;
default:
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Target is not a Package or BufferField\n"));
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
"Target is not a Package or BufferField\n"));
Status = AE_AML_OPERAND_TYPE;
break;
}
return_ACPI_STATUS (Status);
}
@ -546,15 +519,16 @@ AcpiExStoreObjectToIndex (
*
* FUNCTION: AcpiExStoreObjectToNode
*
* PARAMETERS: *SourceDesc - Value to be stored
* *Node - Named object to receive the value
* PARAMETERS: SourceDesc - Value to be stored
* Node - Named object to receive the value
* WalkState - Current walk state
*
* RETURN: Status
*
* DESCRIPTION: Store the object to the named object.
*
* The Assignment of an object to a named object is handled here
* The val passed in will replace the current value (if any)
* The value passed in will replace the current value (if any)
* with the input value.
*
* When storing into an object the data is converted to the
@ -562,10 +536,7 @@ AcpiExStoreObjectToIndex (
* that the target object type (for an initialized target) will
* not be changed by a store operation.
*
* NOTE: the global lock is acquired early. This will result
* in the global lock being held a bit longer. Also, if the
* function fails during set up we may get the lock when we
* don't really need it. I don't think we care.
* Assumes parameters are already validated.
*
******************************************************************************/
@ -583,10 +554,6 @@ AcpiExStoreObjectToNode (
FUNCTION_TRACE ("ExStoreObjectToNode");
/*
* Assuming the parameters were already validated
*/
/*
* Get current type of the node, and object attached to Node
*/
@ -597,7 +564,6 @@ AcpiExStoreObjectToNode (
Node, AcpiUtGetTypeName (SourceDesc->Common.Type),
SourceDesc, AcpiUtGetTypeName (TargetType)));
/*
* Resolve the source object to an actual value
* (If it is a reference object)
@ -608,7 +574,6 @@ AcpiExStoreObjectToNode (
return_ACPI_STATUS (Status);
}
/*
* Do the actual store operation
*/
@ -636,7 +601,8 @@ AcpiExStoreObjectToNode (
*
* Copy and/or convert the source object to a new target object
*/
Status = AcpiExStoreObject (SourceDesc, TargetType, &TargetDesc, WalkState);
Status = AcpiExStoreObject (SourceDesc, TargetType, &TargetDesc,
WalkState);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
@ -668,7 +634,6 @@ AcpiExStoreObjectToNode (
break;
}
return_ACPI_STATUS (Status);
}
@ -677,8 +642,9 @@ AcpiExStoreObjectToNode (
*
* FUNCTION: AcpiExStoreObjectToObject
*
* PARAMETERS: *SourceDesc - Value to be stored
* *DestDesc - Object to receive the value
* PARAMETERS: SourceDesc - Value to be stored
* DestDesc - Object to receive the value
* WalkState - Current walk state
*
* RETURN: Status
*
@ -697,6 +663,8 @@ AcpiExStoreObjectToNode (
* This module allows destination types of Number, String,
* and Buffer.
*
* Assumes parameters are already validated.
*
******************************************************************************/
ACPI_STATUS
@ -711,10 +679,6 @@ AcpiExStoreObjectToObject (
FUNCTION_TRACE ("ExStoreObjectToObject");
/*
* Assuming the parameters are valid!
*/
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Storing %p(%s) to %p(%s)\n",
SourceDesc, AcpiUtGetTypeName (SourceDesc->Common.Type),
DestDesc, AcpiUtGetTypeName (DestDesc->Common.Type)));
@ -737,7 +701,6 @@ AcpiExStoreObjectToObject (
return_ACPI_STATUS (AE_NOT_IMPLEMENTED);
}
/*
* Resolve the source object to an actual value
* (If it is a reference object)
@ -748,13 +711,11 @@ AcpiExStoreObjectToObject (
return_ACPI_STATUS (Status);
}
/*
* Copy and/or convert the source object to the destination object
*/
Status = AcpiExStoreObject (SourceDesc, DestinationType, &DestDesc, WalkState);
Status = AcpiExStoreObject (SourceDesc, DestinationType, &DestDesc,
WalkState);
return_ACPI_STATUS (Status);
}

View File

@ -3,7 +3,7 @@
*
* Module Name: exstoren - AML Interpreter object store support,
* Store to Node (namespace object)
* $Revision: 40 $
* $Revision: 41 $
*
*****************************************************************************/
@ -160,30 +160,28 @@ AcpiExResolveObject (
/*
* Ensure we have a Source that can be stored in the target
* Ensure we have a Target that can be stored to
*/
switch (TargetType)
{
/* This case handles the "interchangeable" types Integer, String, and Buffer. */
/*
* These cases all require only Integers or values that
* can be converted to Integers (Strings or Buffers)
*/
case ACPI_TYPE_BUFFER_FIELD:
case INTERNAL_TYPE_REGION_FIELD:
case INTERNAL_TYPE_BANK_FIELD:
case INTERNAL_TYPE_INDEX_FIELD:
/*
* These cases all require only Integers or values that
* can be converted to Integers (Strings or Buffers)
*/
/*
* Stores into a Field/Region or into a Buffer/String
* are all essentially the same.
*/
case ACPI_TYPE_INTEGER:
case ACPI_TYPE_STRING:
case ACPI_TYPE_BUFFER:
/*
* Stores into a Field/Region or into a Integer/Buffer/String
* are all essentially the same. This case handles the
* "interchangeable" types Integer, String, and Buffer.
*/
/* TBD: FIX - check for source==REF, resolve, then check type */

View File

@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: exutils - interpreter/scanner utilities
* $Revision: 85 $
* $Revision: 88 $
*
*****************************************************************************/
@ -152,7 +152,6 @@
* PARAMETERS: None
*
* DESCRIPTION: Enter the interpreter execution region
* TBD: should be a macro
*
******************************************************************************/
@ -187,8 +186,6 @@ AcpiExEnterInterpreter (void)
* already executing
* 7) About to invoke a user-installed opregion handler
*
* TBD: should be a macro
*
******************************************************************************/
void
@ -281,7 +278,8 @@ AcpiExTruncateFor32bitTable (
*
* FUNCTION: AcpiExAcquireGlobalLock
*
* PARAMETERS: Rule - Lock rule: AlwaysLock, NeverLock
* PARAMETERS: FieldFlags - Flags with Lock rule:
* AlwaysLock or NeverLock
*
* RETURN: TRUE/FALSE indicating whether the lock was actually acquired
*
@ -293,7 +291,7 @@ AcpiExTruncateFor32bitTable (
BOOLEAN
AcpiExAcquireGlobalLock (
UINT32 Rule)
UINT32 FieldFlags)
{
BOOLEAN Locked = FALSE;
ACPI_STATUS Status;
@ -302,9 +300,9 @@ AcpiExAcquireGlobalLock (
FUNCTION_TRACE ("ExAcquireGlobalLock");
/* Only attempt lock if the Rule says so */
/* Only attempt lock if the AlwaysLock bit is set */
if (Rule == (UINT32) GLOCK_ALWAYS_LOCK)
if (FieldFlags & AML_FIELD_LOCK_RULE_MASK)
{
/* We should attempt to get the lock */
@ -392,8 +390,8 @@ AcpiExDigitsNeeded (
/*
* ACPI_INTEGER is unsigned, which is why we don't worry about a '-'
*/
for (NumDigits = 1;
(AcpiUtShortDivide (&Value, Base, &Value, NULL));
for (NumDigits = 1;
(AcpiUtShortDivide (&Value, Base, &Value, NULL));
++NumDigits)
{ ; }
}

View File

@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: hwacpi - ACPI Hardware Initialization/Mode Interface
* $Revision: 46 $
* $Revision: 47 $
*
*****************************************************************************/
@ -158,124 +158,76 @@ AcpiHwInitialize (
return_ACPI_STATUS (AE_NO_ACPI_TABLES);
}
/*
* Save the initial state of the ACPI event enable registers, so
* we can restore them when we exit. We probably won't exit, though.
*
* The location of the PM1aEvtBlk enable registers is defined as the
* base of PM1aEvtBlk + DIV_2(PM1aEvtBlkLength). Since the spec further
* fully defines the PM1aEvtBlk to be a total of 4 bytes, the offset
* for the enable registers is always 2 from the base. It is hard
* coded here. If this changes in the spec, this code will need to
* be modified. The PM1bEvtBlk behaves as expected.
*/
AcpiGbl_Pm1EnableRegisterSave = (UINT16) AcpiHwRegisterRead (
ACPI_MTX_LOCK, PM1_EN);
/* Identify current ACPI/legacy mode */
switch (AcpiGbl_SystemFlags & SYS_MODES_MASK)
/*
* The GPEs behave similarly, except that the length of the register
* block is not fixed, so the buffer must be allocated with malloc
*/
if (ACPI_VALID_ADDRESS (AcpiGbl_FADT->XGpe0Blk.Address) &&
AcpiGbl_FADT->Gpe0BlkLen)
{
case (SYS_MODE_ACPI):
/* GPE0 specified in FADT */
AcpiGbl_OriginalMode = SYS_MODE_ACPI;
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "System supports ACPI mode only.\n"));
break;
case (SYS_MODE_LEGACY):
AcpiGbl_OriginalMode = SYS_MODE_LEGACY;
ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
"Tables loaded from buffer, hardware assumed to support LEGACY mode only.\n"));
break;
case (SYS_MODE_ACPI | SYS_MODE_LEGACY):
if (AcpiHwGetMode () == SYS_MODE_ACPI)
AcpiGbl_Gpe0EnableRegisterSave = ACPI_MEM_ALLOCATE (
DIV_2 (AcpiGbl_FADT->Gpe0BlkLen));
if (!AcpiGbl_Gpe0EnableRegisterSave)
{
AcpiGbl_OriginalMode = SYS_MODE_ACPI;
}
else
{
AcpiGbl_OriginalMode = SYS_MODE_LEGACY;
return_ACPI_STATUS (AE_NO_MEMORY);
}
ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
"System supports both ACPI and LEGACY modes.\n"));
/* Save state of GPE0 enable bits */
ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
"System is currently in %s mode.\n",
(AcpiGbl_OriginalMode == SYS_MODE_ACPI) ? "ACPI" : "LEGACY"));
break;
for (Index = 0; Index < DIV_2 (AcpiGbl_FADT->Gpe0BlkLen); Index++)
{
AcpiGbl_Gpe0EnableRegisterSave[Index] =
(UINT8) AcpiHwRegisterRead (ACPI_MTX_LOCK, GPE0_EN_BLOCK | Index);
}
}
if (AcpiGbl_SystemFlags & SYS_MODE_ACPI)
else
{
/* Target system supports ACPI mode */
AcpiGbl_Gpe0EnableRegisterSave = NULL;
}
/*
* The purpose of this code is to save the initial state
* of the ACPI event enable registers. An exit function will be
* registered which will restore this state when the application
* exits. The exit function will also clear all of the ACPI event
* status bits prior to restoring the original mode.
*
* The location of the PM1aEvtBlk enable registers is defined as the
* base of PM1aEvtBlk + DIV_2(PM1aEvtBlkLength). Since the spec further
* fully defines the PM1aEvtBlk to be a total of 4 bytes, the offset
* for the enable registers is always 2 from the base. It is hard
* coded here. If this changes in the spec, this code will need to
* be modified. The PM1bEvtBlk behaves as expected.
*/
AcpiGbl_Pm1EnableRegisterSave = (UINT16) AcpiHwRegisterRead (
ACPI_MTX_LOCK, PM1_EN);
if (ACPI_VALID_ADDRESS (AcpiGbl_FADT->XGpe1Blk.Address) &&
AcpiGbl_FADT->Gpe1BlkLen)
{
/* GPE1 defined */
/*
* The GPEs behave similarly, except that the length of the register
* block is not fixed, so the buffer must be allocated with malloc
*/
if (ACPI_VALID_ADDRESS (AcpiGbl_FADT->XGpe0Blk.Address) &&
AcpiGbl_FADT->Gpe0BlkLen)
AcpiGbl_Gpe1EnableRegisterSave = ACPI_MEM_ALLOCATE (
DIV_2 (AcpiGbl_FADT->Gpe1BlkLen));
if (!AcpiGbl_Gpe1EnableRegisterSave)
{
/* GPE0 specified in FADT */
AcpiGbl_Gpe0EnableRegisterSave = ACPI_MEM_ALLOCATE (
DIV_2 (AcpiGbl_FADT->Gpe0BlkLen));
if (!AcpiGbl_Gpe0EnableRegisterSave)
{
return_ACPI_STATUS (AE_NO_MEMORY);
}
/* Save state of GPE0 enable bits */
for (Index = 0; Index < DIV_2 (AcpiGbl_FADT->Gpe0BlkLen); Index++)
{
AcpiGbl_Gpe0EnableRegisterSave[Index] =
(UINT8) AcpiHwRegisterRead (ACPI_MTX_LOCK, GPE0_EN_BLOCK | Index);
}
return_ACPI_STATUS (AE_NO_MEMORY);
}
else
/* save state of GPE1 enable bits */
for (Index = 0; Index < DIV_2 (AcpiGbl_FADT->Gpe1BlkLen); Index++)
{
AcpiGbl_Gpe0EnableRegisterSave = NULL;
AcpiGbl_Gpe1EnableRegisterSave[Index] =
(UINT8) AcpiHwRegisterRead (ACPI_MTX_LOCK, GPE1_EN_BLOCK | Index);
}
}
if (ACPI_VALID_ADDRESS (AcpiGbl_FADT->XGpe1Blk.Address) &&
AcpiGbl_FADT->Gpe1BlkLen)
{
/* GPE1 defined */
AcpiGbl_Gpe1EnableRegisterSave = ACPI_MEM_ALLOCATE (
DIV_2 (AcpiGbl_FADT->Gpe1BlkLen));
if (!AcpiGbl_Gpe1EnableRegisterSave)
{
return_ACPI_STATUS (AE_NO_MEMORY);
}
/* save state of GPE1 enable bits */
for (Index = 0; Index < DIV_2 (AcpiGbl_FADT->Gpe1BlkLen); Index++)
{
AcpiGbl_Gpe1EnableRegisterSave[Index] =
(UINT8) AcpiHwRegisterRead (ACPI_MTX_LOCK, GPE1_EN_BLOCK | Index);
}
}
else
{
AcpiGbl_Gpe1EnableRegisterSave = NULL;
}
else
{
AcpiGbl_Gpe1EnableRegisterSave = NULL;
}
return_ACPI_STATUS (Status);
@ -368,68 +320,3 @@ AcpiHwGetMode (void)
return_VALUE (SYS_MODE_LEGACY);
}
}
/******************************************************************************
*
* FUNCTION: AcpiHwGetModeCapabilities
*
* PARAMETERS: none
*
* RETURN: logical OR of SYS_MODE_ACPI and SYS_MODE_LEGACY determined at initial
* system state.
*
* DESCRIPTION: Returns capablities of system
*
******************************************************************************/
UINT32
AcpiHwGetModeCapabilities (void)
{
FUNCTION_TRACE ("HwGetModeCapabilities");
if (!(AcpiGbl_SystemFlags & SYS_MODES_MASK))
{
if (AcpiHwGetMode () == SYS_MODE_LEGACY)
{
/*
* Assume that if this call is being made, AcpiInit has been called
* and ACPI support has been established by the presence of the
* tables. Therefore since we're in SYS_MODE_LEGACY, the system
* must support both modes
*/
AcpiGbl_SystemFlags |= (SYS_MODE_ACPI | SYS_MODE_LEGACY);
}
else
{
/* TBD: [Investigate] !!! this may be unsafe... */
/*
* system is is ACPI mode, so try to switch back to LEGACY to see if
* it is supported
*/
AcpiHwSetMode (SYS_MODE_LEGACY);
if (AcpiHwGetMode () == SYS_MODE_LEGACY)
{
/* Now in SYS_MODE_LEGACY, so both are supported */
AcpiGbl_SystemFlags |= (SYS_MODE_ACPI | SYS_MODE_LEGACY);
AcpiHwSetMode (SYS_MODE_ACPI);
}
else
{
/* Still in SYS_MODE_ACPI so this must be an ACPI only system */
AcpiGbl_SystemFlags |= SYS_MODE_ACPI;
}
}
}
return_VALUE (AcpiGbl_SystemFlags & SYS_MODES_MASK);
}

View File

@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: nsaccess - Top-level functions for accessing ACPI namespace
* $Revision: 135 $
* $Revision: 141 $
*
******************************************************************************/
@ -165,14 +165,12 @@ AcpiNsRootInitialize (void)
goto UnlockAndExit;
}
/*
* Tell the rest of the subsystem that the root is initialized
* (This is OK because the namespace is locked)
*/
AcpiGbl_RootNode = &AcpiGbl_RootNodeStruct;
/* Enter the pre-defined names in the name table */
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Entering predefined entries into namespace\n"));
@ -213,10 +211,8 @@ AcpiNsRootInitialize (void)
* internal representation. Only types actually
* used for initial values are implemented here.
*/
switch (InitVal->Type)
{
case ACPI_TYPE_INTEGER:
ObjDesc->Integer.Value =
@ -248,7 +244,6 @@ AcpiNsRootInitialize (void)
*/
Status = AcpiOsCreateSemaphore (ACPI_NO_UNIT_LIMIT,
1, &ObjDesc->Mutex.Semaphore);
if (ACPI_FAILURE (Status))
{
goto UnlockAndExit;
@ -260,14 +255,12 @@ AcpiNsRootInitialize (void)
*/
AcpiGbl_GlobalLockSemaphore = ObjDesc->Mutex.Semaphore;
}
else
{
/* Create a mutex */
Status = AcpiOsCreateSemaphore (1, 1,
&ObjDesc->Mutex.Semaphore);
if (ACPI_FAILURE (Status))
{
goto UnlockAndExit;
@ -337,7 +330,6 @@ AcpiNsLookup (
ACPI_STATUS Status;
ACPI_NAMESPACE_NODE *PrefixNode;
ACPI_NAMESPACE_NODE *CurrentNode = NULL;
ACPI_NAMESPACE_NODE *ScopeToPush = NULL;
ACPI_NAMESPACE_NODE *ThisNode = NULL;
UINT32 NumSegments;
ACPI_NAME SimpleName;
@ -346,8 +338,6 @@ AcpiNsLookup (
ACPI_OBJECT_TYPE8 ThisSearchType;
UINT32 LocalFlags = Flags & ~NS_ERROR_IF_FOUND;
DEBUG_EXEC (UINT32 i;)
FUNCTION_TRACE ("NsLookup");
@ -357,15 +347,12 @@ AcpiNsLookup (
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
AcpiGbl_NsLookupCount++;
*ReturnNode = ENTRY_NOT_FOUND;
if (!AcpiGbl_RootNode)
{
return (AE_NO_NAMESPACE);
return_ACPI_STATUS (AE_NO_NAMESPACE);
}
/*
@ -375,7 +362,8 @@ AcpiNsLookup (
if ((!ScopeInfo) ||
(!ScopeInfo->Scope.Node))
{
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Null scope prefix, using root node (%p)\n",
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
"Null scope prefix, using root node (%p)\n",
AcpiGbl_RootNode));
PrefixNode = AcpiGbl_RootNode;
@ -385,7 +373,6 @@ AcpiNsLookup (
PrefixNode = ScopeInfo->Scope.Node;
}
/*
* This check is explicitly split to relax the TypeToCheckFor
* conditions for BankFieldDefn. Originally, both BankFieldDefn and
@ -399,34 +386,30 @@ AcpiNsLookup (
TypeToCheckFor = ACPI_TYPE_REGION;
}
else if (INTERNAL_TYPE_BANK_FIELD_DEFN == Type)
{
/* BankFieldDefn defines data fields in a Field Object */
TypeToCheckFor = ACPI_TYPE_ANY;
}
else
{
TypeToCheckFor = Type;
}
/* TBD: [Restructure] - Move the pathname stuff into a new procedure */
/* Examine the name pointer */
/* Examine the pathname */
if (!Pathname)
{
/* 8-12-98 ASL Grammar Update supports null NamePath */
/* Null NamePath -- is allowed */
NullNamePath = TRUE;
NumSegments = 0;
ThisNode = AcpiGbl_RootNode;
NumSegments = 0;
ThisNode = AcpiGbl_RootNode;
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
"Null Pathname (Zero segments), Flags=%x\n", Flags));
"Null Pathname (Zero segments), Flags=%x\n", Flags));
}
else
@ -451,38 +434,37 @@ AcpiNsLookup (
*/
if (*Pathname == AML_ROOT_PREFIX)
{
/* Pathname is fully qualified, look in root name table */
/* Pathname is fully qualified, start from the root */
CurrentNode = AcpiGbl_RootNode;
/* point to segment part */
/* Point to segment part */
Pathname++;
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Searching from root [%p]\n",
CurrentNode));
/* Direct reference to root, "\" */
if (!(*Pathname))
{
/* Direct reference to root, "\" */
ThisNode = AcpiGbl_RootNode;
goto CheckForNewScopeAndExit;
}
}
else
{
/* Pathname is relative to current scope, start there */
CurrentNode = PrefixNode;
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Searching relative to pfx scope [%p]\n",
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
"Searching relative to pfx scope [%p]\n",
PrefixNode));
/*
* Handle up-prefix (carat). More than one prefix
* is supported
* Handle up-prefix (carat). More than one prefix is supported
*/
while (*Pathname == AML_PARENT_PREFIX)
{
@ -490,7 +472,7 @@ AcpiNsLookup (
Pathname++;
/* Backup to the parent's scope */
/* Backup to the parent's scope */
ThisNode = AcpiNsGetParentObject (CurrentNode);
if (!ThisNode)
@ -506,41 +488,36 @@ AcpiNsLookup (
}
}
/*
* Examine the name prefix opcode, if any,
* to determine the number of segments
* Examine the name prefix opcode, if any, to determine the number of
* segments
*/
if (*Pathname == AML_DUAL_NAME_PREFIX)
{
/* Two segments, point to first segment */
NumSegments = 2;
/* point to first segment */
Pathname++;
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
"Dual Pathname (2 segments, Flags=%X)\n", Flags));
}
else if (*Pathname == AML_MULTI_NAME_PREFIX_OP)
{
/* Extract segment count, point to first segment */
NumSegments = (UINT32)* (UINT8 *) ++Pathname;
/* point to first segment */
Pathname++;
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
"Multi Pathname (%d Segments, Flags=%X) \n",
NumSegments, Flags));
}
else
{
/*
* No Dual or Multi prefix, hence there is only one
* segment and Pathname is already pointing to it.
* No Dual or Multi prefix, hence there is only one segment and
* Pathname is already pointing to it.
*/
NumSegments = 1;
@ -548,26 +525,12 @@ AcpiNsLookup (
"Simple Pathname (1 segment, Flags=%X)\n", Flags));
}
#ifdef ACPI_DEBUG
/* TBD: [Restructure] Make this a procedure */
/* Debug only: print the entire name that we are about to lookup */
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "["));
for (i = 0; i < NumSegments; i++)
{
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_NAMES, "%4.4s/", (char*)&Pathname[i * 4]));
}
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_NAMES, "]\n"));
#endif
DEBUG_EXEC (AcpiNsPrintPathname (NumSegments, Pathname));
}
/*
* Search namespace for each segment of the name.
* Loop through and verify/add each name segment.
* Search namespace for each segment of the name. Loop through and
* verify/add each name segment.
*/
while (NumSegments-- && CurrentNode)
{
@ -594,7 +557,6 @@ AcpiNsLookup (
CurrentNode, InterpreterMode,
ThisSearchType, LocalFlags,
&ThisNode);
if (ACPI_FAILURE (Status))
{
if (Status == AE_NOT_FOUND)
@ -609,7 +571,6 @@ AcpiNsLookup (
return_ACPI_STATUS (Status);
}
/*
* If 1) This is the last segment (NumSegments == 0)
* 2) and looking for a specific type
@ -636,7 +597,7 @@ AcpiNsLookup (
REPORT_WARNING (
("NsLookup: %4.4s, type %X, checking for type %X\n",
(char*)&SimpleName, ThisNode->Type, TypeToCheckFor));
(char *) &SimpleName, ThisNode->Type, TypeToCheckFor));
}
/*
@ -676,32 +637,19 @@ AcpiNsLookup (
if (!(Flags & NS_DONT_OPEN_SCOPE) && (WalkState))
{
/*
* If entry is a type which opens a scope,
* push the new scope on the scope stack.
* If entry is a type which opens a scope, push the new scope on the
* scope stack.
*/
if (AcpiNsOpensScope (TypeToCheckFor))
{
/* 8-12-98 ASL Grammar Update supports null NamePath */
if (NullNamePath)
{
/* TBD: [Investigate] - is this the correct thing to do? */
ScopeToPush = NULL;
}
else
{
ScopeToPush = ThisNode;
}
Status = AcpiDsScopeStackPush (ScopeToPush, Type,
WalkState);
Status = AcpiDsScopeStackPush (ThisNode, Type, WalkState);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Set global scope to %p\n", ScopeToPush));
ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
"Set global scope to %p\n", ThisNode));
}
}

View File

@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: nsalloc - Namespace allocation and deletion utilities
* $Revision: 60 $
* $Revision: 62 $
*
******************************************************************************/
@ -216,13 +216,9 @@ AcpiNsDeleteNode (
ACPI_MEM_TRACKING (AcpiGbl_MemoryLists[ACPI_MEM_LIST_NSNODE].TotalFreed++);
/*
* Detach an object if there is one
* Detach an object if there is one then delete the node
*/
if (Node->Object)
{
AcpiNsDetachObject (Node);
}
AcpiNsDetachObject (Node);
ACPI_MEM_FREE (Node);
return_VOID;
}
@ -239,7 +235,11 @@ AcpiNsDeleteNode (
*
* RETURN: None
*
* DESCRIPTION: Initialize a new entry within a namespace table.
* DESCRIPTION: Initialize a new namespace node and install it amongst
* its peers.
*
* Note: Current namespace lookup is linear search, so the nodes
* are not linked in any particular order.
*
******************************************************************************/
@ -267,17 +267,13 @@ AcpiNsInstallNode (
OwnerId = WalkState->OwnerId;
}
/* link the new entry into the parent and existing children */
/* TBD: Could be first, last, or alphabetic */
/* Link the new entry into the parent and existing children */
ChildNode = ParentNode->Child;
if (!ChildNode)
{
ParentNode->Child = Node;
}
else
{
while (!(ChildNode->Flags & ANOBJ_END_OF_PEER_LIST))
@ -498,7 +494,6 @@ AcpiNsDeleteNamespaceSubtree (
ChildNode = 0;
}
}
else
{
/*
@ -641,13 +636,11 @@ AcpiNsDeleteNamespaceByOwner (
ParentNode = ChildNode;
ChildNode = 0;
}
else if (ChildNode->OwnerId == OwnerId)
{
AcpiNsRemoveReference (ChildNode);
}
}
else
{
/*

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: nsdump - table dumping routines for debug
* $Revision: 105 $
* $Revision: 116 $
*
*****************************************************************************/
@ -127,9 +127,48 @@
#define _COMPONENT ACPI_NAMESPACE
MODULE_NAME ("nsdump")
#if defined(ACPI_DEBUG) || defined(ENABLE_DEBUGGER)
/*******************************************************************************
*
* FUNCTION: AcpiNsPrintPathname
*
* PARAMETERS: NumSegment - Number of ACPI name segments
* Pathname - The compressed (internal) path
*
* DESCRIPTION: Print an object's full namespace pathname
*
******************************************************************************/
void
AcpiNsPrintPathname (
UINT32 NumSegments,
char *Pathname)
{
UINT32 i;
PROC_NAME ("AcpiNsPrintPathname");
if (!(AcpiDbgLevel & ACPI_LV_NAMES) || !(AcpiDbgLayer & ACPI_NAMESPACE))
{
return;
}
/* Print the entire name */
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "["));
for (i = 0; i < NumSegments; i++)
{
AcpiOsPrintf ("%4.4s.", (char *) &Pathname[i * 4]);
}
AcpiOsPrintf ("]\n");
}
/*******************************************************************************
*
* FUNCTION: AcpiNsDumpPathname
@ -176,7 +215,7 @@ AcpiNsDumpPathname (
Length = PATHNAME_MAX;
if (ACPI_SUCCESS (AcpiNsHandleToPathname (Handle, &Length, Buffer)))
{
AcpiOsPrintf ("%s %s (%p)\n", Msg, Buffer, Handle);
AcpiOsPrintf ("%s %s (Node %p)\n", Msg, Buffer, Handle);
}
ACPI_MEM_FREE (Buffer);
@ -232,6 +271,11 @@ AcpiNsDumpOneObject (
return (AE_OK);
}
if (!((ACPI_LV_TABLES & AcpiDbgLevel) && (_COMPONENT & AcpiDbgLayer)))
{
return (AE_OK);
}
if (!ObjHandle)
{
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Null object handle\n"));
@ -246,66 +290,58 @@ AcpiNsDumpOneObject (
return (AE_OK);
}
/* Indent the object according to the level */
while (LevelTmp--)
{
/* Print appropriate characters to form tree structure */
if (LevelTmp)
{
if (DownstreamSiblingMask & WhichBit)
{
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "|"));
AcpiOsPrintf ("|");
}
else
{
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " "));
AcpiOsPrintf (" ");
}
WhichBit <<= 1;
}
else
{
if (AcpiNsExistDownstreamSibling (ThisNode + 1))
{
DownstreamSiblingMask |= (1 << (Level - 1));
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "+"));
AcpiOsPrintf ("+");
}
else
{
DownstreamSiblingMask &= ACPI_UINT32_MAX ^ (1 << (Level - 1));
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "+"));
AcpiOsPrintf ("+");
}
if (ThisNode->Child == NULL)
{
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "-"));
AcpiOsPrintf ("-");
}
else if (AcpiNsExistDownstreamSibling (ThisNode->Child))
{
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "+"));
AcpiOsPrintf ("+");
}
else
{
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "-"));
AcpiOsPrintf ("-");
}
}
}
/* Check the integrity of our data */
if (Type > INTERNAL_TYPE_MAX)
{
Type = INTERNAL_TYPE_DEF_ANY; /* prints as *ERROR* */
Type = INTERNAL_TYPE_DEF_ANY; /* prints as *ERROR* */
}
if (!AcpiUtValidAcpiName (ThisNode->Name))
@ -316,10 +352,10 @@ AcpiNsDumpOneObject (
/*
* Now we can print out the pertinent information
*/
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " %4.4s %-12s %p",
(char*)&ThisNode->Name, AcpiUtGetTypeName (Type), ThisNode));
AcpiOsPrintf (" %4.4s %-12s %p",
(char *) &ThisNode->Name, AcpiUtGetTypeName (Type), ThisNode);
ObjDesc = ThisNode->Object;
ObjDesc = AcpiNsGetAttachedObject (ThisNode);
switch (Info->DisplayType)
{
@ -329,116 +365,116 @@ AcpiNsDumpOneObject (
{
/* No attached object, we are done */
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "\n"));
AcpiOsPrintf ("\n");
return (AE_OK);
}
switch (Type)
{
case ACPI_TYPE_PROCESSOR:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " ID %d Addr %.4X Len %.4X\n",
AcpiOsPrintf (" ID %d Addr %.4X Len %.4X\n",
ObjDesc->Processor.ProcId,
ObjDesc->Processor.Address,
ObjDesc->Processor.Length));
ObjDesc->Processor.Length);
break;
case ACPI_TYPE_DEVICE:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Notification object: %p", ObjDesc));
AcpiOsPrintf (" Notification object: %p", ObjDesc);
break;
case ACPI_TYPE_METHOD:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Args %d Len %.4X Aml %p \n",
AcpiOsPrintf (" Args %d Len %.4X Aml %p \n",
ObjDesc->Method.ParamCount,
ObjDesc->Method.AmlLength,
ObjDesc->Method.AmlStart));
ObjDesc->Method.AmlStart);
break;
case ACPI_TYPE_INTEGER:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " = %8.8X%8.8X\n",
AcpiOsPrintf (" = %8.8X%8.8X\n",
HIDWORD (ObjDesc->Integer.Value),
LODWORD (ObjDesc->Integer.Value)));
LODWORD (ObjDesc->Integer.Value));
break;
case ACPI_TYPE_PACKAGE:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Elements %.2X\n",
ObjDesc->Package.Count));
AcpiOsPrintf (" Elements %.2X\n",
ObjDesc->Package.Count);
break;
case ACPI_TYPE_BUFFER:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Len %.2X",
ObjDesc->Buffer.Length));
AcpiOsPrintf (" Len %.2X",
ObjDesc->Buffer.Length);
/* Dump some of the buffer */
if (ObjDesc->Buffer.Length > 0)
{
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " ="));
AcpiOsPrintf (" =");
for (i = 0; (i < ObjDesc->Buffer.Length && i < 12); i++)
{
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " %.2X",
ObjDesc->Buffer.Pointer[i]));
AcpiOsPrintf (" %.2X", ObjDesc->Buffer.Pointer[i]);
}
}
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "\n"));
AcpiOsPrintf ("\n");
break;
case ACPI_TYPE_STRING:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Len %.2X",
ObjDesc->String.Length));
AcpiOsPrintf (" Len %.2X", ObjDesc->String.Length);
if (ObjDesc->String.Length > 0)
{
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " = \"%.32s\"...",
ObjDesc->String.Pointer));
AcpiOsPrintf (" = \"%.32s\"...", ObjDesc->String.Pointer);
}
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "\n"));
AcpiOsPrintf ("\n");
break;
case ACPI_TYPE_REGION:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " [%s]",
AcpiUtGetRegionName (ObjDesc->Region.SpaceId)));
AcpiOsPrintf (" [%s]", AcpiUtGetRegionName (ObjDesc->Region.SpaceId));
if (ObjDesc->Region.Flags & AOPOBJ_DATA_VALID)
{
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Addr %8.8X%8.8X Len %.4X\n",
AcpiOsPrintf (" Addr %8.8X%8.8X Len %.4X\n",
HIDWORD(ObjDesc->Region.Address),
LODWORD(ObjDesc->Region.Address),
ObjDesc->Region.Length));
ObjDesc->Region.Length);
}
else
{
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " [Address/Length not evaluated]\n"));
AcpiOsPrintf (" [Address/Length not evaluated]\n");
}
break;
case INTERNAL_TYPE_REFERENCE:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " [%s]\n",
AcpiPsGetOpcodeName (ObjDesc->Reference.Opcode)));
AcpiOsPrintf (" [%s]\n",
AcpiPsGetOpcodeName (ObjDesc->Reference.Opcode));
break;
case ACPI_TYPE_BUFFER_FIELD:
/* TBD: print Buffer name when we can easily get it */
if (ObjDesc->BufferField.BufferObj &&
ObjDesc->BufferField.BufferObj->Buffer.Node)
{
AcpiOsPrintf (" Buf [%4.4s]",
(char *) &ObjDesc->BufferField.BufferObj->Buffer.Node->Name);
}
break;
case INTERNAL_TYPE_REGION_FIELD:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Rgn [%4.4s]",
(char *) &ObjDesc->CommonField.RegionObj->Region.Node->Name));
AcpiOsPrintf (" Rgn [%4.4s]",
(char *) &ObjDesc->CommonField.RegionObj->Region.Node->Name);
break;
case INTERNAL_TYPE_BANK_FIELD:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Rgn [%4.4s]",
(char *) &ObjDesc->CommonField.RegionObj->Region.Node->Name));
AcpiOsPrintf (" Rgn [%4.4s] Bnk [%4.4s]",
(char *) &ObjDesc->CommonField.RegionObj->Region.Node->Name,
(char *) &ObjDesc->BankField.BankObj->CommonField.Node->Name);
break;
case INTERNAL_TYPE_INDEX_FIELD:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Rgn [%4.4s]",
(char *) &ObjDesc->IndexField.IndexObj->CommonField.RegionObj->Region.Node->Name));
AcpiOsPrintf (" Idx [%4.4s] Dat [%4.4s]",
(char *) &ObjDesc->IndexField.IndexObj->CommonField.Node->Name,
(char *) &ObjDesc->IndexField.DataObj->CommonField.Node->Name);
break;
default:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Object %p\n", ObjDesc));
AcpiOsPrintf (" Object %p\n", ObjDesc);
break;
}
@ -450,10 +486,11 @@ AcpiNsDumpOneObject (
case INTERNAL_TYPE_REGION_FIELD:
case INTERNAL_TYPE_BANK_FIELD:
case INTERNAL_TYPE_INDEX_FIELD:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Off %.2X Len %.2X Acc %.2d\n",
(ObjDesc->CommonField.BaseByteOffset * 8) + ObjDesc->CommonField.StartFieldBitOffset,
ObjDesc->CommonField.BitLength,
ObjDesc->CommonField.AccessBitWidth));
AcpiOsPrintf (" Off %.2X Len %.2X Acc %.2d\n",
(ObjDesc->CommonField.BaseByteOffset * 8)
+ ObjDesc->CommonField.StartFieldBitOffset,
ObjDesc->CommonField.BitLength,
ObjDesc->CommonField.AccessBitWidth);
break;
}
@ -462,64 +499,59 @@ AcpiNsDumpOneObject (
case ACPI_DISPLAY_OBJECTS:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "%p O:%p",
ThisNode, ObjDesc));
AcpiOsPrintf ("%p O:%p",
ThisNode, ObjDesc);
if (!ObjDesc)
{
/* No attached object, we are done */
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "\n"));
AcpiOsPrintf ("\n");
return (AE_OK);
}
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "(R%d)",
ObjDesc->Common.ReferenceCount));
AcpiOsPrintf ("(R%d)",
ObjDesc->Common.ReferenceCount);
switch (Type)
{
case ACPI_TYPE_METHOD:
/* Name is a Method and its AML offset/length are set */
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " M:%p-%X\n",
ObjDesc->Method.AmlStart,
ObjDesc->Method.AmlLength));
AcpiOsPrintf (" M:%p-%X\n", ObjDesc->Method.AmlStart,
ObjDesc->Method.AmlLength);
break;
case ACPI_TYPE_INTEGER:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " N:%X%X\n",
HIDWORD(ObjDesc->Integer.Value),
LODWORD(ObjDesc->Integer.Value)));
AcpiOsPrintf (" N:%X%X\n", HIDWORD(ObjDesc->Integer.Value),
LODWORD(ObjDesc->Integer.Value));
break;
case ACPI_TYPE_STRING:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " S:%p-%X\n",
ObjDesc->String.Pointer,
ObjDesc->String.Length));
AcpiOsPrintf (" S:%p-%X\n", ObjDesc->String.Pointer,
ObjDesc->String.Length);
break;
case ACPI_TYPE_BUFFER:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " B:%p-%X\n",
ObjDesc->Buffer.Pointer,
ObjDesc->Buffer.Length));
AcpiOsPrintf (" B:%p-%X\n", ObjDesc->Buffer.Pointer,
ObjDesc->Buffer.Length);
break;
default:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "\n"));
AcpiOsPrintf ("\n");
break;
}
break;
default:
AcpiOsPrintf ("\n");
break;
}
/* If debug turned off, done */
@ -532,7 +564,7 @@ AcpiNsDumpOneObject (
/* If there is an attached object, display it */
ObjDesc = ThisNode->Object;
ObjDesc = AcpiNsGetAttachedObject (ThisNode);
/* Dump attached objects */
@ -542,36 +574,33 @@ AcpiNsDumpOneObject (
/* Decode the type of attached object and dump the contents */
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Attached Object %p: ", ObjDesc));
AcpiOsPrintf (" Attached Object %p: ", ObjDesc);
if (VALID_DESCRIPTOR_TYPE (ObjDesc, ACPI_DESC_TYPE_NAMED))
{
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "(Ptr to Node)\n"));
AcpiOsPrintf ("(Ptr to Node)\n");
BytesToDump = sizeof (ACPI_NAMESPACE_NODE);
}
else if (VALID_DESCRIPTOR_TYPE (ObjDesc, ACPI_DESC_TYPE_INTERNAL))
{
ObjType = ObjDesc->Common.Type;
if (ObjType > INTERNAL_TYPE_MAX)
{
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "(Ptr to ACPI Object type %X [UNKNOWN])\n", ObjType));
AcpiOsPrintf ("(Ptr to ACPI Object type %X [UNKNOWN])\n", ObjType);
BytesToDump = 32;
}
else
{
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "(Ptr to ACPI Object type %2.2X [%s])\n",
ObjType, AcpiUtGetTypeName (ObjType)));
AcpiOsPrintf ("(Ptr to ACPI Object type %2.2X [%s])\n",
ObjType, AcpiUtGetTypeName (ObjType));
BytesToDump = sizeof (ACPI_OPERAND_OBJECT);
}
}
else
{
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "(String or Buffer - not descriptor)\n"));
AcpiOsPrintf ("(String or Buffer - not descriptor)\n");
BytesToDump = 16;
}
@ -625,11 +654,11 @@ AcpiNsDumpOneObject (
goto Cleanup;
}
ObjType = INTERNAL_TYPE_INVALID; /* Terminate loop after next pass */
ObjType = INTERNAL_TYPE_INVALID; /* Terminate loop after next pass */
}
Cleanup:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "\n"));
AcpiOsPrintf ("\n");
return (AE_OK);
}
@ -799,7 +828,7 @@ AcpiNsDumpTables (
}
AcpiNsDumpObjects (ACPI_TYPE_ANY, ACPI_DISPLAY_OBJECTS, MaxDepth,
AcpiNsDumpObjects (ACPI_TYPE_ANY, ACPI_DISPLAY_OBJECTS, MaxDepth,
ACPI_UINT32_MAX, SearchHandle);
return_VOID;
}
@ -829,6 +858,7 @@ AcpiNsDumpEntry (
Info.DebugLevel = DebugLevel;
Info.OwnerId = ACPI_UINT32_MAX;
Info.DisplayType = ACPI_DISPLAY_SUMMARY;
AcpiNsDumpOneObject (Handle, 1, &Info, NULL);
}

View File

@ -2,7 +2,7 @@
*
* Module Name: nseval - Object evaluation interfaces -- includes control
* method lookup and execution.
* $Revision: 102 $
* $Revision: 104 $
*
******************************************************************************/
@ -217,7 +217,7 @@ AcpiNsEvaluateRelative (
* to evaluate it.
*/
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "%s [%p] Value %p\n",
Pathname, Node, Node->Object));
Pathname, Node, AcpiNsGetAttachedObject (Node)));
Status = AcpiNsEvaluateByHandle (Node, Params, ReturnObject);
@ -295,7 +295,7 @@ AcpiNsEvaluateByName (
* to evaluate it.
*/
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "%s [%p] Value %p\n",
Pathname, Node, Node->Object));
Pathname, Node, AcpiNsGetAttachedObject (Node)));
Status = AcpiNsEvaluateByHandle (Node, Params, ReturnObject);
@ -498,7 +498,7 @@ AcpiNsExecuteControlMethod (
DUMP_PATHNAME (MethodNode, "NsExecuteControlMethod: Executing",
ACPI_LV_NAMES, _COMPONENT);
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "At offset %p\n",
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "At offset %p\n",
ObjDesc->Method.AmlStart + 1));

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: nsinit - namespace initialization
* $Revision: 33 $
* $Revision: 35 $
*
*****************************************************************************/
@ -279,7 +279,7 @@ AcpiNsInitOneObject (
/* And even then, we are only interested in a few object types */
Type = AcpiNsGetType (ObjHandle);
ObjDesc = Node->Object;
ObjDesc = AcpiNsGetAttachedObject (Node);
if (!ObjDesc)
{
return (AE_OK);
@ -412,7 +412,7 @@ AcpiNsInitOneDevice (
if (!Node)
{
AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
return (AE_BAD_PARAMETER);
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: nsload - namespace loading/expanding/contracting procedures
* $Revision: 47 $
* $Revision: 48 $
*
*****************************************************************************/
@ -232,7 +232,7 @@ AcpiNsOneCompleteParse (
return_ACPI_STATUS (AE_NO_MEMORY);
}
Status = AcpiDsInitAmlWalk (WalkState, ParseRoot, NULL, TableDesc->AmlStart,
Status = AcpiDsInitAmlWalk (WalkState, ParseRoot, NULL, TableDesc->AmlStart,
TableDesc->AmlLength, NULL, NULL, PassNumber);
if (ACPI_FAILURE (Status))
{
@ -315,7 +315,7 @@ AcpiNsParseTable (
* FUNCTION: AcpiNsLoadTable
*
* PARAMETERS: TableDesc - Descriptor for table to be loaded
* Node - Owning NS node
* Node - Owning NS node
*
* RETURN: Status
*

View File

@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: nsnames - Name manipulation and search
* $Revision: 64 $
* $Revision: 65 $
*
******************************************************************************/
@ -250,13 +250,6 @@ AcpiNsGetPathnameLength (
Size += PATH_SEGMENT_LENGTH;
}
/* Special case for size still 0 - no parent for "special" nodes */
if (!Size)
{
Size = PATH_SEGMENT_LENGTH;
}
return (Size + 1);
}
@ -327,6 +320,13 @@ AcpiNsHandleToPathname (
goto Exit;
}
if (Size < ACPI_NAME_SIZE)
{
UserBuffer[0] = '\\';
UserBuffer[1] = 0;
goto Exit;
}
/* Store null terminator */
UserBuffer[Size] = 0;

View File

@ -2,7 +2,7 @@
*
* Module Name: nsobject - Utilities for objects attached to namespace
* table entries
* $Revision: 67 $
* $Revision: 73 $
*
******************************************************************************/
@ -141,6 +141,8 @@
* DESCRIPTION: Record the given object as the value associated with the
* name whose ACPI_HANDLE is passed. If Object is NULL
* and Type is ACPI_TYPE_ANY, set the name as having no value.
* Note: Future may require that the Node->Flags field be passed
* as a parameter.
*
* MUTEX: Assumes namespace is locked
*
@ -153,9 +155,8 @@ AcpiNsAttachObject (
ACPI_OBJECT_TYPE8 Type)
{
ACPI_OPERAND_OBJECT *ObjDesc;
ACPI_OPERAND_OBJECT *PreviousObjDesc;
ACPI_OBJECT_TYPE8 ObjType = ACPI_TYPE_ANY;
UINT8 Flags;
ACPI_OPERAND_OBJECT *LastObjDesc;
ACPI_OBJECT_TYPE8 ObjectType = ACPI_TYPE_ANY;
FUNCTION_TRACE ("NsAttachObject");
@ -164,14 +165,6 @@ AcpiNsAttachObject (
/*
* Parameter validation
*/
if (!AcpiGbl_RootNode)
{
/* Name space not initialized */
REPORT_ERROR (("NsAttachObject: Namespace not initialized\n"));
return_ACPI_STATUS (AE_NO_NAMESPACE);
}
if (!Node)
{
/* Invalid handle */
@ -206,19 +199,12 @@ AcpiNsAttachObject (
return_ACPI_STATUS (AE_OK);
}
/* Get the current flags field of the Node */
Flags = Node->Flags;
Flags &= ~ANOBJ_AML_ATTACHMENT;
/* If null object, we will just install it */
if (!Object)
{
ObjDesc = NULL;
ObjType = ACPI_TYPE_ANY;
ObjDesc = NULL;
ObjectType = ACPI_TYPE_ANY;
}
/*
@ -232,19 +218,10 @@ AcpiNsAttachObject (
* Value passed is a name handle and that name has a
* non-null value. Use that name's value and type.
*/
ObjDesc = ((ACPI_NAMESPACE_NODE *) Object)->Object;
ObjType = ((ACPI_NAMESPACE_NODE *) Object)->Type;
/*
* Copy appropriate flags
*/
if (((ACPI_NAMESPACE_NODE *) Object)->Flags & ANOBJ_AML_ATTACHMENT)
{
Flags |= ANOBJ_AML_ATTACHMENT;
}
ObjDesc = ((ACPI_NAMESPACE_NODE *) Object)->Object;
ObjectType = ((ACPI_NAMESPACE_NODE *) Object)->Type;
}
/*
* Otherwise, we will use the parameter object, but we must type
* it first
@ -257,41 +234,16 @@ AcpiNsAttachObject (
if (ACPI_TYPE_ANY != Type)
{
ObjType = Type;
ObjectType = Type;
}
else
{
/*
* Cannot figure out the type -- set to DefAny which
* will print as an error in the name table dump
*/
if (AcpiDbgLevel > 0)
{
DUMP_PATHNAME (Node,
"NsAttachObject confused: setting bogus type for ",
ACPI_LV_INFO, _COMPONENT);
if (VALID_DESCRIPTOR_TYPE (Object, ACPI_DESC_TYPE_NAMED))
{
DUMP_PATHNAME (Object, "name ", ACPI_LV_INFO, _COMPONENT);
}
else
{
DUMP_PATHNAME (Object, "object ", ACPI_LV_INFO, _COMPONENT);
DUMP_STACK_ENTRY (Object);
}
}
ObjType = INTERNAL_TYPE_DEF_ANY;
ObjectType = INTERNAL_TYPE_DEF_ANY;
}
}
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Installing %p into Node %p [%4.4s]\n",
ObjDesc, Node, (char*)&Node->Name));
ObjDesc, Node, (char *) &Node->Name));
/*
* Must increment the new value's reference count
@ -299,31 +251,31 @@ AcpiNsAttachObject (
*/
AcpiUtAddReference (ObjDesc);
/* Save the existing object (if any) for deletion later */
/* Detach an existing attached object if present */
PreviousObjDesc = Node->Object;
/* Install the object and set the type, flags */
Node->Object = ObjDesc;
Node->Type = (UINT8) ObjType;
Node->Flags |= Flags;
/*
* Delete an existing attached object.
*/
if (PreviousObjDesc)
if (Node->Object)
{
/* One for the attach to the Node */
AcpiUtRemoveReference (PreviousObjDesc);
/* Now delete */
AcpiUtRemoveReference (PreviousObjDesc);
AcpiNsDetachObject (Node);
}
/*
* Handle objects with multiple descriptors - walk
* to the end of the descriptor list
*/
LastObjDesc = ObjDesc;
while (LastObjDesc->Common.NextObject)
{
LastObjDesc = LastObjDesc->Common.NextObject;
}
/* Install the object at the front of the object list */
LastObjDesc->Common.NextObject = Node->Object;
Node->Type = (UINT8) ObjectType;
Node->Object = ObjDesc;
return_ACPI_STATUS (AE_OK);
}
@ -353,7 +305,8 @@ AcpiNsDetachObject (
ObjDesc = Node->Object;
if (!ObjDesc)
if (!ObjDesc ||
(ObjDesc->Common.Type == INTERNAL_TYPE_DATA))
{
return_VOID;
}
@ -361,9 +314,22 @@ AcpiNsDetachObject (
/* Clear the entry in all cases */
Node->Object = NULL;
if (VALID_DESCRIPTOR_TYPE (ObjDesc, ACPI_DESC_TYPE_INTERNAL))
{
Node->Object = ObjDesc->Common.NextObject;
if (Node->Object &&
(Node->Object->Common.Type != INTERNAL_TYPE_DATA))
{
Node->Object = Node->Object->Common.NextObject;
}
}
/* Reset the node type to untyped */
Node->Type = ACPI_TYPE_ANY;
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Object=%p Value=%p Name %4.4s\n",
Node, ObjDesc, (char*)&Node->Name));
Node, ObjDesc, (char *) &Node->Name));
/* Remove one reference on the object (and all subobjects) */
@ -383,7 +349,7 @@ AcpiNsDetachObject (
*
******************************************************************************/
void *
ACPI_OPERAND_OBJECT *
AcpiNsGetAttachedObject (
ACPI_NAMESPACE_NODE *Node)
{
@ -392,13 +358,205 @@ AcpiNsGetAttachedObject (
if (!Node)
{
/* handle invalid */
ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "Null Node ptr\n"));
return_PTR (NULL);
}
if (!Node->Object ||
((!(VALID_DESCRIPTOR_TYPE (Node->Object, ACPI_DESC_TYPE_INTERNAL))) &&
(!(VALID_DESCRIPTOR_TYPE (Node->Object, ACPI_DESC_TYPE_NAMED)))) ||
(Node->Object->Common.Type == INTERNAL_TYPE_DATA))
{
return_PTR (NULL);
}
return_PTR (Node->Object);
}
/*******************************************************************************
*
* FUNCTION: AcpiNsGetSecondaryObject
*
* PARAMETERS: Node - Parent Node to be examined
*
* RETURN: Current value of the object field from the Node whose
* handle is passed
*
******************************************************************************/
ACPI_OPERAND_OBJECT *
AcpiNsGetSecondaryObject (
ACPI_OPERAND_OBJECT *ObjDesc)
{
FUNCTION_TRACE_PTR ("AcpiNsGetSecondaryObject", ObjDesc);
if ((!ObjDesc) ||
(ObjDesc->Common.Type == INTERNAL_TYPE_DATA) ||
(!ObjDesc->Common.NextObject) ||
(ObjDesc->Common.NextObject->Common.Type == INTERNAL_TYPE_DATA))
{
return_PTR (NULL);
}
return_PTR (ObjDesc->Common.NextObject);
}
/*******************************************************************************
*
* FUNCTION: AcpiNsAttachData
*
* PARAMETERS:
*
* RETURN: Status
*
* DESCRIPTION:
*
******************************************************************************/
ACPI_STATUS
AcpiNsAttachData (
ACPI_NAMESPACE_NODE *Node,
ACPI_OBJECT_HANDLER Handler,
void *Data)
{
ACPI_OPERAND_OBJECT *PrevObjDesc;
ACPI_OPERAND_OBJECT *ObjDesc;
ACPI_OPERAND_OBJECT *DataDesc;
/* */
PrevObjDesc = NULL;
ObjDesc = Node->Object;
while (ObjDesc)
{
if ((ObjDesc->Common.Type == INTERNAL_TYPE_DATA) &&
(ObjDesc->Data.Handler == Handler))
{
return (AE_ALREADY_EXISTS);
}
PrevObjDesc = ObjDesc;
ObjDesc = ObjDesc->Common.NextObject;
}
/* Create an internal object for the data */
DataDesc = AcpiUtCreateInternalObject (INTERNAL_TYPE_DATA);
if (!DataDesc)
{
return (AE_NO_MEMORY);
}
DataDesc->Data.Handler = Handler;
DataDesc->Data.Pointer = Data;
/* Install the data object */
if (PrevObjDesc)
{
PrevObjDesc->Common.NextObject = DataDesc;
}
else
{
Node->Object = DataDesc;
}
return (AE_OK);
}
/*******************************************************************************
*
* FUNCTION: AcpiNsDetachData
*
* PARAMETERS:
*
* RETURN: Status
*
* DESCRIPTION:
*
******************************************************************************/
ACPI_STATUS
AcpiNsDetachData (
ACPI_NAMESPACE_NODE *Node,
ACPI_OBJECT_HANDLER Handler)
{
ACPI_OPERAND_OBJECT *ObjDesc;
ACPI_OPERAND_OBJECT *PrevObjDesc;
PrevObjDesc = NULL;
ObjDesc = Node->Object;
while (ObjDesc)
{
if ((ObjDesc->Common.Type == INTERNAL_TYPE_DATA) &&
(ObjDesc->Data.Handler == Handler))
{
if (PrevObjDesc)
{
PrevObjDesc->Common.NextObject = ObjDesc->Common.NextObject;
}
else
{
Node->Object = ObjDesc->Common.NextObject;
}
AcpiUtRemoveReference (ObjDesc);
return (AE_OK);
}
PrevObjDesc = ObjDesc;
ObjDesc = ObjDesc->Common.NextObject;
}
return (AE_NOT_FOUND);
}
/*******************************************************************************
*
* FUNCTION: AcpiNsGetAttachedData
*
* PARAMETERS:
*
* RETURN: Status
*
* DESCRIPTION:
*
******************************************************************************/
ACPI_STATUS
AcpiNsGetAttachedData (
ACPI_NAMESPACE_NODE *Node,
ACPI_OBJECT_HANDLER Handler,
void **Data)
{
ACPI_OPERAND_OBJECT *ObjDesc;
ObjDesc = Node->Object;
while (ObjDesc)
{
if ((ObjDesc->Common.Type == INTERNAL_TYPE_DATA) &&
(ObjDesc->Data.Handler == Handler))
{
*Data = ObjDesc->Data.Pointer;
return (AE_OK);
}
ObjDesc = ObjDesc->Common.NextObject;
}
return (AE_NOT_FOUND);
}

View File

@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: nssearch - Namespace search
* $Revision: 75 $
* $Revision: 77 $
*
******************************************************************************/
@ -174,14 +174,13 @@ AcpiNsSearchNode (
if (ScopeName)
{
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Searching %s [%p] For %4.4s (type %X)\n",
ScopeName, Node, (char*)&TargetName, Type));
ScopeName, Node, (char *) &TargetName, Type));
ACPI_MEM_FREE (ScopeName);
}
}
#endif
/*
* Search for name in this table, which is to say that we must search
* for the name among the children of this object
@ -222,13 +221,12 @@ AcpiNsSearchNode (
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
"Name %4.4s (actual type %X) found at %p\n",
(char*)&TargetName, NextNode->Type, NextNode));
(char *) &TargetName, NextNode->Type, NextNode));
*ReturnNode = NextNode;
return_ACPI_STATUS (AE_OK);
}
/*
* The last entry in the list points back to the parent,
* so a flag is used to indicate the end-of-list
@ -245,11 +243,10 @@ AcpiNsSearchNode (
NextNode = NextNode->Peer;
}
/* Searched entire table, not found */
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Name %4.4s (type %X) not found at %p\n",
(char*)&TargetName, Type, NextNode));
(char *) &TargetName, Type, NextNode));
return_ACPI_STATUS (AE_NOT_FOUND);
}
@ -306,22 +303,21 @@ AcpiNsSearchParentTree (
if (!ParentNode)
{
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "[%4.4s] has no parent\n",
(char*)&TargetName));
(char *) &TargetName));
}
if (AcpiNsLocal (Type))
{
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "[%4.4s] type %X is local(no search)\n",
(char*)&TargetName, Type));
(char *) &TargetName, Type));
}
return_ACPI_STATUS (AE_NOT_FOUND);
}
/* Search the parent tree */
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Searching parent for %4.4s\n", (char*)&TargetName));
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Searching parent for %4.4s\n", (char *) &TargetName));
/*
* Search parents until found the target or we have backed up to
@ -329,12 +325,13 @@ AcpiNsSearchParentTree (
*/
while (ParentNode)
{
/* Search parent scope */
/* TBD: [Investigate] Why ACPI_TYPE_ANY? */
/*
* Search parent scope. Use TYPE_ANY because we don't care about the
* object type at this point, we only care about the existence of
* the actual name we are searching for. Typechecking comes later.
*/
Status = AcpiNsSearchNode (TargetName, ParentNode,
ACPI_TYPE_ANY, ReturnNode);
if (ACPI_SUCCESS (Status))
{
return_ACPI_STATUS (Status);
@ -347,7 +344,6 @@ AcpiNsSearchParentTree (
ParentNode = AcpiNsGetParentObject (ParentNode);
}
/* Not found in parent tree */
return_ACPI_STATUS (AE_NOT_FOUND);
@ -407,7 +403,6 @@ AcpiNsSearchAndEnter (
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
/* Name must consist of printable characters */
if (!AcpiUtValidAcpiName (TargetName))
@ -419,7 +414,6 @@ AcpiNsSearchAndEnter (
return_ACPI_STATUS (AE_BAD_CHARACTER);
}
/* Try to find the name in the table specified by the caller */
*ReturnNode = ENTRY_NOT_FOUND;
@ -433,7 +427,7 @@ AcpiNsSearchAndEnter (
if ((Status == AE_OK) &&
(Flags & NS_ERROR_IF_FOUND))
{
Status = AE_EXIST;
Status = AE_ALREADY_EXISTS;
}
/*
@ -443,9 +437,8 @@ AcpiNsSearchAndEnter (
return_ACPI_STATUS (Status);
}
/*
* Not found in the table. If we are NOT performing the
* The name was not found. If we are NOT performing the
* first pass (name entry) of loading the namespace, search
* the parent tree (all the way to the root if necessary.)
* We don't want to perform the parent search when the
@ -468,19 +461,17 @@ AcpiNsSearchAndEnter (
}
}
/*
* In execute mode, just search, never add names. Exit now.
*/
if (InterpreterMode == IMODE_EXECUTE)
{
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "%4.4s Not found in %p [Not adding]\n",
(char*)&TargetName, Node));
(char *) &TargetName, Node));
return_ACPI_STATUS (AE_NOT_FOUND);
}
/* Create the new named object */
NewNode = AcpiNsCreateNode (TargetName);

View File

@ -2,7 +2,7 @@
*
* Module Name: nsutils - Utilities for accessing ACPI namespace, accessing
* parents and siblings and Scope manipulation
* $Revision: 92 $
* $Revision: 93 $
*
*****************************************************************************/
@ -690,6 +690,9 @@ AcpiNsExternalizeName (
*
* DESCRIPTION: Convert a namespace handle to a real Node
*
* Note: Real integer handles allow for more verification
* and keep all pointers within this subsystem.
*
******************************************************************************/
ACPI_NAMESPACE_NODE *
@ -701,9 +704,7 @@ AcpiNsMapHandleToNode (
/*
* Simple implementation for now;
* TBD: [Future] Real integer handles allow for more verification
* and keep all pointers within this subsystem!
* Simple implementation.
*/
if (!Handle)
{
@ -715,7 +716,6 @@ AcpiNsMapHandleToNode (
return (AcpiGbl_RootNode);
}
/* We can at least attempt to verify the handle */
if (!VALID_DESCRIPTOR_TYPE (Handle, ACPI_DESC_TYPE_NAMED))
@ -747,8 +747,6 @@ AcpiNsConvertEntryToHandle (
/*
* Simple implementation for now;
* TBD: [Future] Real integer handles allow for more verification
* and keep all pointers within this subsystem!
*/
return ((ACPI_HANDLE) Node);

View File

@ -2,7 +2,7 @@
*
* Module Name: nsxfobj - Public interfaces to the ACPI subsystem
* ACPI Object oriented interfaces
* $Revision: 95 $
* $Revision: 98 $
*
******************************************************************************/
@ -134,7 +134,7 @@
*
* PARAMETERS: Handle - Object handle (optional)
* *Pathname - Object pathname (optional)
* **ExternalParams - List of parameters to pass to method,
* **ExternalParams - List of parameters to pass to method,
* terminated by NULL. May be NULL
* if no parameters are being passed.
* *ReturnBuffer - Where to put method's return value (if
@ -641,8 +641,8 @@ AcpiWalkNamespace (
* must be allowed to make Acpi calls itself.
*/
AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
Status = AcpiNsWalkNamespace ((ACPI_OBJECT_TYPE8) Type, StartObject,
MaxDepth, NS_WALK_UNLOCK, UserFunction, Context,
Status = AcpiNsWalkNamespace ((ACPI_OBJECT_TYPE8) Type, StartObject,
MaxDepth, NS_WALK_UNLOCK, UserFunction, Context,
ReturnValue);
AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
@ -675,7 +675,8 @@ AcpiNsGetDeviceCallback (
ACPI_STATUS Status;
ACPI_NAMESPACE_NODE *Node;
UINT32 Flags;
ACPI_DEVICE_ID DeviceId;
ACPI_DEVICE_ID Hid;
ACPI_DEVICE_ID Cid;
ACPI_GET_DEVICES_INFO *Info;
@ -701,16 +702,16 @@ AcpiNsGetDeviceCallback (
if (!(Flags & 0x01))
{
/* don't return at the device or children of the device if not there */
/* Don't return at the device or children of the device if not there */
return (AE_CTRL_DEPTH);
}
/*
* Filter based on device HID
* Filter based on device HID & CID
*/
if (Info->Hid != NULL)
{
Status = AcpiUtExecute_HID (Node, &DeviceId);
Status = AcpiUtExecute_HID (Node, &Hid);
if (Status == AE_NOT_FOUND)
{
return (AE_OK);
@ -721,9 +722,25 @@ AcpiNsGetDeviceCallback (
return (AE_CTRL_DEPTH);
}
if (STRNCMP (DeviceId.Buffer, Info->Hid, sizeof (DeviceId.Buffer)) != 0)
if (STRNCMP (Hid.Buffer, Info->Hid, sizeof (Hid.Buffer)) != 0)
{
return (AE_OK);
Status = AcpiUtExecute_CID (Node, &Cid);
if (Status == AE_NOT_FOUND)
{
return (AE_OK);
}
else if (ACPI_FAILURE (Status))
{
return (AE_CTRL_DEPTH);
}
/* TBD: Handle CID packages */
if (STRNCMP (Cid.Buffer, Info->Hid, sizeof (Cid.Buffer)) != 0)
{
return (AE_OK);
}
}
}
@ -803,3 +820,158 @@ AcpiGetDevices (
return_ACPI_STATUS (Status);
}
/*******************************************************************************
*
* FUNCTION: AcpiAttachData
*
* PARAMETERS:
*
* RETURN: Status
*
* DESCRIPTION:
*
******************************************************************************/
ACPI_STATUS
AcpiAttachData (
ACPI_HANDLE ObjHandle,
ACPI_OBJECT_HANDLER Handler,
void *Data)
{
ACPI_NAMESPACE_NODE *Node;
ACPI_STATUS Status;
/* Parameter validation */
if (!ObjHandle ||
!Handler ||
!Data)
{
return (AE_BAD_PARAMETER);
}
AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
/* Convert and validate the handle */
Node = AcpiNsMapHandleToNode (ObjHandle);
if (!Node)
{
Status = AE_BAD_PARAMETER;
goto UnlockAndExit;
}
Status = AcpiNsAttachData (Node, Handler, Data);
UnlockAndExit:
AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
return (Status);
}
/*******************************************************************************
*
* FUNCTION: AcpiDetachData
*
* PARAMETERS:
*
* RETURN: Status
*
* DESCRIPTION:
*
******************************************************************************/
ACPI_STATUS
AcpiDetachData (
ACPI_HANDLE ObjHandle,
ACPI_OBJECT_HANDLER Handler)
{
ACPI_NAMESPACE_NODE *Node;
ACPI_STATUS Status;
/* Parameter validation */
if (!ObjHandle ||
!Handler)
{
return (AE_BAD_PARAMETER);
}
AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
/* Convert and validate the handle */
Node = AcpiNsMapHandleToNode (ObjHandle);
if (!Node)
{
Status = AE_BAD_PARAMETER;
goto UnlockAndExit;
}
Status = AcpiNsDetachData (Node, Handler);
UnlockAndExit:
AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
return (Status);
}
/*******************************************************************************
*
* FUNCTION: AcpiGetData
*
* PARAMETERS:
*
* RETURN: Status
*
* DESCRIPTION:
*
******************************************************************************/
ACPI_STATUS
AcpiGetData (
ACPI_HANDLE ObjHandle,
ACPI_OBJECT_HANDLER Handler,
void **Data)
{
ACPI_NAMESPACE_NODE *Node;
ACPI_STATUS Status;
/* Parameter validation */
if (!ObjHandle ||
!Handler ||
!Data)
{
return (AE_BAD_PARAMETER);
}
AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
/* Convert and validate the handle */
Node = AcpiNsMapHandleToNode (ObjHandle);
if (!Node)
{
Status = AE_BAD_PARAMETER;
goto UnlockAndExit;
}
Status = AcpiNsGetAttachedData (Node, Handler, Data);
UnlockAndExit:
AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
return (Status);
}

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: psargs - Parse AML opcode arguments
* $Revision: 52 $
* $Revision: 54 $
*
*****************************************************************************/
@ -500,12 +500,12 @@ AcpiPsGetNextNamepath (
NameOp->Node = MethodNode;
AcpiPsAppendArg (Arg, NameOp);
if (!MethodNode->Object)
if (!AcpiNsGetAttachedObject (MethodNode))
{
return_VOID;
}
*ArgCount = (MethodNode->Object)->Method.ParamCount;
*ArgCount = (AcpiNsGetAttachedObject (MethodNode))->Method.ParamCount;
}
return_VOID;
@ -713,11 +713,14 @@ AcpiPsGetNextField (
case AML_INT_ACCESSFIELD_OP:
/* Get AccessType and AccessAtrib and merge into the field Op */
Field->Value.Integer = ((GET8 (ParserState->Aml) << 8) |
GET8 (ParserState->Aml));
ParserState->Aml += 2;
/*
* Get AccessType and AccessAttrib and merge into the field Op
* AccessType is first operand, AccessAttribute is second
*/
Field->Value.Integer32 = (GET8 (ParserState->Aml) << 8);
ParserState->Aml++;
Field->Value.Integer32 |= GET8 (ParserState->Aml);
ParserState->Aml++;
break;
}
}

View File

@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: psfind - Parse tree search routine
* $Revision: 30 $
* $Revision: 32 $
*
*****************************************************************************/
@ -138,7 +138,7 @@
*
******************************************************************************/
static ACPI_PARSE_OBJECT*
ACPI_PARSE_OBJECT*
AcpiPsGetParent (
ACPI_PARSE_OBJECT *Op)
{
@ -183,7 +183,7 @@ AcpiPsGetParent (
*
******************************************************************************/
static ACPI_PARSE_OBJECT *
ACPI_PARSE_OBJECT *
AcpiPsFindName (
ACPI_PARSE_OBJECT *Scope,
UINT32 Name,
@ -220,14 +220,12 @@ AcpiPsFindName (
Field = Field->Next;
}
}
else if (OpInfo->Flags & AML_CREATE)
{
if (Op->Opcode == AML_CREATE_FIELD_OP)
{
Field = AcpiPsGetArg (Op, 3);
}
else
{
/* CreateXXXField, check name */
@ -242,7 +240,6 @@ AcpiPsFindName (
return (Op);
}
}
else if ((OpInfo->Flags & AML_NAMED) &&
(AcpiPsGetName (Op) == Name) &&
(!Opcode || Op->Opcode == Opcode || Opcode == AML_SCOPE_OP))
@ -296,17 +293,14 @@ AcpiPsFind (
return_PTR (NULL);
}
AcpiGbl_PsFindCount++;
/* Handle all prefixes in the name path */
while (AcpiPsIsPrefixChar (GET8 (Path)))
{
switch (GET8 (Path))
{
case '\\':
/* Could just use a global for "root scope" here */
@ -315,12 +309,6 @@ AcpiPsFind (
{
Scope = Scope->Parent;
}
/* get first object within the scope */
/* TBD: [Investigate] OR - set next in root scope to point to the same value as arg */
/* Scope = Scope->Value.Arg; */
break;
@ -440,14 +428,12 @@ AcpiPsFind (
{
ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "[%4.4s] Found in parent tree! Op=%p Opcode=%4.4X\n", (char*)&Name, Op, Op->Opcode));
}
else
{
ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "[%4.4s] Not found in parent=%p\n", (char*)&Name, Scope));
}
}
}
else
{
ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Segment [%4.4s] Not Found in scope %p!\n", (char*)&Name, Scope));

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: psopcode - Parser/Interpreter opcode information table
* $Revision: 49 $
* $Revision: 54 $
*
*****************************************************************************/
@ -275,7 +275,7 @@
#define ARGP_TO_STRING_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET)
#define ARGP_TYPE_OP ARGP_LIST1 (ARGP_SUPERNAME)
#define ARGP_UNLOAD_OP ARGP_LIST1 (ARGP_SUPERNAME)
#define ARGP_VAR_PACKAGE_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_BYTEDATA, ARGP_DATAOBJLIST)
#define ARGP_VAR_PACKAGE_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_TERMARG, ARGP_DATAOBJLIST)
#define ARGP_WAIT_OP ARGP_LIST2 (ARGP_SUPERNAME, ARGP_TERMARG)
#define ARGP_WHILE_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_TERMARG, ARGP_TERMLIST)
#define ARGP_WORD_OP ARGP_LIST1 (ARGP_WORDDATA)
@ -419,7 +419,7 @@
/******************************************************************************
Opcodes that have associated namespace objects
Opcodes that have associated namespace objects (AML_NSOBJECT flag)
AML_SCOPE_OP
AML_DEVICE_OP
@ -445,7 +445,7 @@
AML_INT_METHODCALL_OP
AML_INT_NAMEPATH_OP
Opcodes that are "namespace" opcodes
Opcodes that are "namespace" opcodes (AML_NSOPCODE flag)
AML_SCOPE_OP
AML_DEVICE_OP
@ -463,7 +463,7 @@
AML_REGION_OP
AML_INT_NAMEDFIELD_OP
Opcodes that have an associated namespace node
Opcodes that have an associated namespace node (AML_NSNODE flag)
AML_SCOPE_OP
AML_DEVICE_OP
@ -486,7 +486,7 @@
AML_INT_METHODCALL_OP
AML_INT_NAMEPATH_OP
Opcodes that define named ACPI objects
Opcodes that define named ACPI objects (AML_NAMED flag)
AML_SCOPE_OP
AML_DEVICE_OP
@ -501,8 +501,8 @@
AML_REGION_OP
AML_INT_NAMEDFIELD_OP
Opcodes that contain executable AML as part of the definition that
must be deferred until needed
Opcodes that contain executable AML as part of the definition that
must be deferred until needed
AML_METHOD_OP
AML_VAR_PACKAGE_OP
@ -538,145 +538,145 @@
*/
static const ACPI_OPCODE_INFO AmlOpInfo[] =
static const ACPI_OPCODE_INFO AcpiGbl_AmlOpInfo[] =
{
/* Index Name Parser Args Interpreter Args Class Type Flags */
/* 00 */ ACPI_OP ("Zero", ARGP_ZERO_OP, ARGI_ZERO_OP, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, 0),
/* 01 */ ACPI_OP ("One", ARGP_ONE_OP, ARGI_ONE_OP, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, 0),
/* 02 */ ACPI_OP ("Alias", ARGP_ALIAS_OP, ARGI_ALIAS_OP, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
/* 03 */ ACPI_OP ("Name", ARGP_NAME_OP, ARGI_NAME_OP, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_COMPLEX, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
/* 04 */ ACPI_OP ("ByteConst", ARGP_BYTE_OP, ARGI_BYTE_OP, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, 0),
/* 05 */ ACPI_OP ("WordConst", ARGP_WORD_OP, ARGI_WORD_OP, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, 0),
/* 06 */ ACPI_OP ("DwordConst", ARGP_DWORD_OP, ARGI_DWORD_OP, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, 0),
/* 07 */ ACPI_OP ("String", ARGP_STRING_OP, ARGI_STRING_OP, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, 0),
/* 08 */ ACPI_OP ("Scope", ARGP_SCOPE_OP, ARGI_SCOPE_OP, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_NO_OBJ, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
/* 09 */ ACPI_OP ("Buffer", ARGP_BUFFER_OP, ARGI_BUFFER_OP, AML_CLASS_ARGUMENT, AML_TYPE_DATA_TERM, AML_HAS_ARGS),
/* 0A */ ACPI_OP ("Package", ARGP_PACKAGE_OP, ARGI_PACKAGE_OP, AML_CLASS_ARGUMENT, AML_TYPE_DATA_TERM, AML_HAS_ARGS),
/* 0B */ ACPI_OP ("Method", ARGP_METHOD_OP, ARGI_METHOD_OP, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_COMPLEX, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED | AML_DEFER),
/* 0C */ ACPI_OP ("Local0", ARGP_LOCAL0, ARGI_LOCAL0, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0),
/* 0D */ ACPI_OP ("Local1", ARGP_LOCAL1, ARGI_LOCAL1, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0),
/* 0E */ ACPI_OP ("Local2", ARGP_LOCAL2, ARGI_LOCAL2, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0),
/* 0F */ ACPI_OP ("Local3", ARGP_LOCAL3, ARGI_LOCAL3, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0),
/* 10 */ ACPI_OP ("Local4", ARGP_LOCAL4, ARGI_LOCAL4, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0),
/* 11 */ ACPI_OP ("Local5", ARGP_LOCAL5, ARGI_LOCAL5, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0),
/* 12 */ ACPI_OP ("Local6", ARGP_LOCAL6, ARGI_LOCAL6, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0),
/* 13 */ ACPI_OP ("Local7", ARGP_LOCAL7, ARGI_LOCAL7, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0),
/* 14 */ ACPI_OP ("Arg0", ARGP_ARG0, ARGI_ARG0, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0),
/* 15 */ ACPI_OP ("Arg1", ARGP_ARG1, ARGI_ARG1, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0),
/* 16 */ ACPI_OP ("Arg2", ARGP_ARG2, ARGI_ARG2, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0),
/* 17 */ ACPI_OP ("Arg3", ARGP_ARG3, ARGI_ARG3, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0),
/* 18 */ ACPI_OP ("Arg4", ARGP_ARG4, ARGI_ARG4, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0),
/* 19 */ ACPI_OP ("Arg5", ARGP_ARG5, ARGI_ARG5, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0),
/* 1A */ ACPI_OP ("Arg6", ARGP_ARG6, ARGI_ARG6, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0),
/* 1B */ ACPI_OP ("Store", ARGP_STORE_OP, ARGI_STORE_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
/* 1C */ ACPI_OP ("RefOf", ARGP_REF_OF_OP, ARGI_REF_OF_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R),
/* 1D */ ACPI_OP ("Add", ARGP_ADD_OP, ARGI_ADD_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH),
/* 1E */ ACPI_OP ("Concatenate", ARGP_CONCAT_OP, ARGI_CONCAT_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R),
/* 1F */ ACPI_OP ("Subtract", ARGP_SUBTRACT_OP, ARGI_SUBTRACT_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH),
/* 20 */ ACPI_OP ("Increment", ARGP_INCREMENT_OP, ARGI_INCREMENT_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R),
/* 21 */ ACPI_OP ("Decrement", ARGP_DECREMENT_OP, ARGI_DECREMENT_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R),
/* 22 */ ACPI_OP ("Multiply", ARGP_MULTIPLY_OP, ARGI_MULTIPLY_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH),
/* 23 */ ACPI_OP ("Divide", ARGP_DIVIDE_OP, ARGI_DIVIDE_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_2T_1R, AML_FLAGS_EXEC_2A_2T_1R),
/* 24 */ ACPI_OP ("ShiftLeft", ARGP_SHIFT_LEFT_OP, ARGI_SHIFT_LEFT_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH),
/* 25 */ ACPI_OP ("ShiftRight", ARGP_SHIFT_RIGHT_OP, ARGI_SHIFT_RIGHT_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH),
/* 26 */ ACPI_OP ("And", ARGP_BIT_AND_OP, ARGI_BIT_AND_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH),
/* 27 */ ACPI_OP ("NAnd", ARGP_BIT_NAND_OP, ARGI_BIT_NAND_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH),
/* 28 */ ACPI_OP ("Or", ARGP_BIT_OR_OP, ARGI_BIT_OR_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH),
/* 29 */ ACPI_OP ("NOr", ARGP_BIT_NOR_OP, ARGI_BIT_NOR_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH),
/* 2A */ ACPI_OP ("XOr", ARGP_BIT_XOR_OP, ARGI_BIT_XOR_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH),
/* 2B */ ACPI_OP ("Not", ARGP_BIT_NOT_OP, ARGI_BIT_NOT_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
/* 2C */ ACPI_OP ("FindSetLeftBit", ARGP_FIND_SET_LEFT_BIT_OP, ARGI_FIND_SET_LEFT_BIT_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
/* 2D */ ACPI_OP ("FindSetRightBit", ARGP_FIND_SET_RIGHT_BIT_OP,ARGI_FIND_SET_RIGHT_BIT_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
/* 2E */ ACPI_OP ("DerefOf", ARGP_DEREF_OF_OP, ARGI_DEREF_OF_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R),
/* 2F */ ACPI_OP ("Notify", ARGP_NOTIFY_OP, ARGI_NOTIFY_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_0R, AML_FLAGS_EXEC_2A_0T_0R),
/* 30 */ ACPI_OP ("SizeOf", ARGP_SIZE_OF_OP, ARGI_SIZE_OF_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R),
/* 31 */ ACPI_OP ("Index", ARGP_INDEX_OP, ARGI_INDEX_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R),
/* 32 */ ACPI_OP ("Match", ARGP_MATCH_OP, ARGI_MATCH_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_6A_0T_1R, AML_FLAGS_EXEC_6A_0T_1R),
/* 33 */ ACPI_OP ("CreateDWordField", ARGP_CREATE_DWORD_FIELD_OP,ARGI_CREATE_DWORD_FIELD_OP, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE),
/* 34 */ ACPI_OP ("CreateWordField", ARGP_CREATE_WORD_FIELD_OP, ARGI_CREATE_WORD_FIELD_OP, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE),
/* 35 */ ACPI_OP ("CreateByteField", ARGP_CREATE_BYTE_FIELD_OP, ARGI_CREATE_BYTE_FIELD_OP, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE),
/* 36 */ ACPI_OP ("CreateBitField", ARGP_CREATE_BIT_FIELD_OP, ARGI_CREATE_BIT_FIELD_OP, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE),
/* 37 */ ACPI_OP ("ObjectType", ARGP_TYPE_OP, ARGI_TYPE_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R),
/* 38 */ ACPI_OP ("LAnd", ARGP_LAND_OP, ARGI_LAND_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL),
/* 39 */ ACPI_OP ("LOr", ARGP_LOR_OP, ARGI_LOR_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL),
/* 3A */ ACPI_OP ("LNot", ARGP_LNOT_OP, ARGI_LNOT_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R),
/* 3B */ ACPI_OP ("LEqual", ARGP_LEQUAL_OP, ARGI_LEQUAL_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL),
/* 3C */ ACPI_OP ("LGreater", ARGP_LGREATER_OP, ARGI_LGREATER_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL),
/* 3D */ ACPI_OP ("LLess", ARGP_LLESS_OP, ARGI_LLESS_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL),
/* 3E */ ACPI_OP ("If", ARGP_IF_OP, ARGI_IF_OP, AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS),
/* 3F */ ACPI_OP ("Else", ARGP_ELSE_OP, ARGI_ELSE_OP, AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS),
/* 40 */ ACPI_OP ("While", ARGP_WHILE_OP, ARGI_WHILE_OP, AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS),
/* 41 */ ACPI_OP ("Noop", ARGP_NOOP_OP, ARGI_NOOP_OP, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0),
/* 42 */ ACPI_OP ("Return", ARGP_RETURN_OP, ARGI_RETURN_OP, AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS),
/* 43 */ ACPI_OP ("Break", ARGP_BREAK_OP, ARGI_BREAK_OP, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0),
/* 44 */ ACPI_OP ("BreakPoint", ARGP_BREAK_POINT_OP, ARGI_BREAK_POINT_OP, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0),
/* 45 */ ACPI_OP ("Ones", ARGP_ONES_OP, ARGI_ONES_OP, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, 0),
/* 00 */ ACPI_OP ("Zero", ARGP_ZERO_OP, ARGI_ZERO_OP, INTERNAL_TYPE_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, 0),
/* 01 */ ACPI_OP ("One", ARGP_ONE_OP, ARGI_ONE_OP, INTERNAL_TYPE_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, 0),
/* 02 */ ACPI_OP ("Alias", ARGP_ALIAS_OP, ARGI_ALIAS_OP, INTERNAL_TYPE_ALIAS, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
/* 03 */ ACPI_OP ("Name", ARGP_NAME_OP, ARGI_NAME_OP, ACPI_TYPE_ANY, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_COMPLEX, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
/* 04 */ ACPI_OP ("ByteConst", ARGP_BYTE_OP, ARGI_BYTE_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, 0),
/* 05 */ ACPI_OP ("WordConst", ARGP_WORD_OP, ARGI_WORD_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, 0),
/* 06 */ ACPI_OP ("DwordConst", ARGP_DWORD_OP, ARGI_DWORD_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, 0),
/* 07 */ ACPI_OP ("String", ARGP_STRING_OP, ARGI_STRING_OP, ACPI_TYPE_STRING, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, 0),
/* 08 */ ACPI_OP ("Scope", ARGP_SCOPE_OP, ARGI_SCOPE_OP, INTERNAL_TYPE_SCOPE, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_NO_OBJ, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
/* 09 */ ACPI_OP ("Buffer", ARGP_BUFFER_OP, ARGI_BUFFER_OP, ACPI_TYPE_BUFFER, AML_CLASS_ARGUMENT, AML_TYPE_DATA_TERM, AML_HAS_ARGS),
/* 0A */ ACPI_OP ("Package", ARGP_PACKAGE_OP, ARGI_PACKAGE_OP, ACPI_TYPE_PACKAGE, AML_CLASS_ARGUMENT, AML_TYPE_DATA_TERM, AML_HAS_ARGS),
/* 0B */ ACPI_OP ("Method", ARGP_METHOD_OP, ARGI_METHOD_OP, ACPI_TYPE_METHOD, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_COMPLEX, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED | AML_DEFER),
/* 0C */ ACPI_OP ("Local0", ARGP_LOCAL0, ARGI_LOCAL0, INTERNAL_TYPE_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0),
/* 0D */ ACPI_OP ("Local1", ARGP_LOCAL1, ARGI_LOCAL1, INTERNAL_TYPE_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0),
/* 0E */ ACPI_OP ("Local2", ARGP_LOCAL2, ARGI_LOCAL2, INTERNAL_TYPE_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0),
/* 0F */ ACPI_OP ("Local3", ARGP_LOCAL3, ARGI_LOCAL3, INTERNAL_TYPE_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0),
/* 10 */ ACPI_OP ("Local4", ARGP_LOCAL4, ARGI_LOCAL4, INTERNAL_TYPE_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0),
/* 11 */ ACPI_OP ("Local5", ARGP_LOCAL5, ARGI_LOCAL5, INTERNAL_TYPE_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0),
/* 12 */ ACPI_OP ("Local6", ARGP_LOCAL6, ARGI_LOCAL6, INTERNAL_TYPE_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0),
/* 13 */ ACPI_OP ("Local7", ARGP_LOCAL7, ARGI_LOCAL7, INTERNAL_TYPE_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0),
/* 14 */ ACPI_OP ("Arg0", ARGP_ARG0, ARGI_ARG0, INTERNAL_TYPE_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0),
/* 15 */ ACPI_OP ("Arg1", ARGP_ARG1, ARGI_ARG1, INTERNAL_TYPE_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0),
/* 16 */ ACPI_OP ("Arg2", ARGP_ARG2, ARGI_ARG2, INTERNAL_TYPE_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0),
/* 17 */ ACPI_OP ("Arg3", ARGP_ARG3, ARGI_ARG3, INTERNAL_TYPE_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0),
/* 18 */ ACPI_OP ("Arg4", ARGP_ARG4, ARGI_ARG4, INTERNAL_TYPE_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0),
/* 19 */ ACPI_OP ("Arg5", ARGP_ARG5, ARGI_ARG5, INTERNAL_TYPE_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0),
/* 1A */ ACPI_OP ("Arg6", ARGP_ARG6, ARGI_ARG6, INTERNAL_TYPE_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0),
/* 1B */ ACPI_OP ("Store", ARGP_STORE_OP, ARGI_STORE_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
/* 1C */ ACPI_OP ("RefOf", ARGP_REF_OF_OP, ARGI_REF_OF_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R),
/* 1D */ ACPI_OP ("Add", ARGP_ADD_OP, ARGI_ADD_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH),
/* 1E */ ACPI_OP ("Concatenate", ARGP_CONCAT_OP, ARGI_CONCAT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R),
/* 1F */ ACPI_OP ("Subtract", ARGP_SUBTRACT_OP, ARGI_SUBTRACT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH),
/* 20 */ ACPI_OP ("Increment", ARGP_INCREMENT_OP, ARGI_INCREMENT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R),
/* 21 */ ACPI_OP ("Decrement", ARGP_DECREMENT_OP, ARGI_DECREMENT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R),
/* 22 */ ACPI_OP ("Multiply", ARGP_MULTIPLY_OP, ARGI_MULTIPLY_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH),
/* 23 */ ACPI_OP ("Divide", ARGP_DIVIDE_OP, ARGI_DIVIDE_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_2T_1R, AML_FLAGS_EXEC_2A_2T_1R),
/* 24 */ ACPI_OP ("ShiftLeft", ARGP_SHIFT_LEFT_OP, ARGI_SHIFT_LEFT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH),
/* 25 */ ACPI_OP ("ShiftRight", ARGP_SHIFT_RIGHT_OP, ARGI_SHIFT_RIGHT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH),
/* 26 */ ACPI_OP ("And", ARGP_BIT_AND_OP, ARGI_BIT_AND_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH),
/* 27 */ ACPI_OP ("NAnd", ARGP_BIT_NAND_OP, ARGI_BIT_NAND_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH),
/* 28 */ ACPI_OP ("Or", ARGP_BIT_OR_OP, ARGI_BIT_OR_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH),
/* 29 */ ACPI_OP ("NOr", ARGP_BIT_NOR_OP, ARGI_BIT_NOR_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH),
/* 2A */ ACPI_OP ("XOr", ARGP_BIT_XOR_OP, ARGI_BIT_XOR_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH),
/* 2B */ ACPI_OP ("Not", ARGP_BIT_NOT_OP, ARGI_BIT_NOT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
/* 2C */ ACPI_OP ("FindSetLeftBit", ARGP_FIND_SET_LEFT_BIT_OP, ARGI_FIND_SET_LEFT_BIT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
/* 2D */ ACPI_OP ("FindSetRightBit", ARGP_FIND_SET_RIGHT_BIT_OP,ARGI_FIND_SET_RIGHT_BIT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
/* 2E */ ACPI_OP ("DerefOf", ARGP_DEREF_OF_OP, ARGI_DEREF_OF_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R),
/* 2F */ ACPI_OP ("Notify", ARGP_NOTIFY_OP, ARGI_NOTIFY_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_0R, AML_FLAGS_EXEC_2A_0T_0R),
/* 30 */ ACPI_OP ("SizeOf", ARGP_SIZE_OF_OP, ARGI_SIZE_OF_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R),
/* 31 */ ACPI_OP ("Index", ARGP_INDEX_OP, ARGI_INDEX_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R),
/* 32 */ ACPI_OP ("Match", ARGP_MATCH_OP, ARGI_MATCH_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_6A_0T_1R, AML_FLAGS_EXEC_6A_0T_1R),
/* 33 */ ACPI_OP ("CreateDWordField", ARGP_CREATE_DWORD_FIELD_OP,ARGI_CREATE_DWORD_FIELD_OP, ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE),
/* 34 */ ACPI_OP ("CreateWordField", ARGP_CREATE_WORD_FIELD_OP, ARGI_CREATE_WORD_FIELD_OP, ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE),
/* 35 */ ACPI_OP ("CreateByteField", ARGP_CREATE_BYTE_FIELD_OP, ARGI_CREATE_BYTE_FIELD_OP, ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE),
/* 36 */ ACPI_OP ("CreateBitField", ARGP_CREATE_BIT_FIELD_OP, ARGI_CREATE_BIT_FIELD_OP, ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE),
/* 37 */ ACPI_OP ("ObjectType", ARGP_TYPE_OP, ARGI_TYPE_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R),
/* 38 */ ACPI_OP ("LAnd", ARGP_LAND_OP, ARGI_LAND_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL),
/* 39 */ ACPI_OP ("LOr", ARGP_LOR_OP, ARGI_LOR_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL),
/* 3A */ ACPI_OP ("LNot", ARGP_LNOT_OP, ARGI_LNOT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R),
/* 3B */ ACPI_OP ("LEqual", ARGP_LEQUAL_OP, ARGI_LEQUAL_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL),
/* 3C */ ACPI_OP ("LGreater", ARGP_LGREATER_OP, ARGI_LGREATER_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL),
/* 3D */ ACPI_OP ("LLess", ARGP_LLESS_OP, ARGI_LLESS_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL),
/* 3E */ ACPI_OP ("If", ARGP_IF_OP, ARGI_IF_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS),
/* 3F */ ACPI_OP ("Else", ARGP_ELSE_OP, ARGI_ELSE_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS),
/* 40 */ ACPI_OP ("While", ARGP_WHILE_OP, ARGI_WHILE_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS),
/* 41 */ ACPI_OP ("Noop", ARGP_NOOP_OP, ARGI_NOOP_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0),
/* 42 */ ACPI_OP ("Return", ARGP_RETURN_OP, ARGI_RETURN_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS),
/* 43 */ ACPI_OP ("Break", ARGP_BREAK_OP, ARGI_BREAK_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0),
/* 44 */ ACPI_OP ("BreakPoint", ARGP_BREAK_POINT_OP, ARGI_BREAK_POINT_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0),
/* 45 */ ACPI_OP ("Ones", ARGP_ONES_OP, ARGI_ONES_OP, INTERNAL_TYPE_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, 0),
/* Prefixed opcodes (Two-byte opcodes with a prefix op) */
/* 46 */ ACPI_OP ("Mutex", ARGP_MUTEX_OP, ARGI_MUTEX_OP, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
/* 47 */ ACPI_OP ("Event", ARGP_EVENT_OP, ARGI_EVENT_OP, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED ),
/* 48 */ ACPI_OP ("CondRefOf", ARGP_COND_REF_OF_OP, ARGI_COND_REF_OF_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
/* 49 */ ACPI_OP ("CreateField", ARGP_CREATE_FIELD_OP, ARGI_CREATE_FIELD_OP, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_FIELD | AML_CREATE),
/* 4A */ ACPI_OP ("Load", ARGP_LOAD_OP, ARGI_LOAD_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_0R, AML_FLAGS_EXEC_1A_1T_0R),
/* 4B */ ACPI_OP ("Stall", ARGP_STALL_OP, ARGI_STALL_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R),
/* 4C */ ACPI_OP ("Sleep", ARGP_SLEEP_OP, ARGI_SLEEP_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R),
/* 4D */ ACPI_OP ("Acquire", ARGP_ACQUIRE_OP, ARGI_ACQUIRE_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R),
/* 4E */ ACPI_OP ("Signal", ARGP_SIGNAL_OP, ARGI_SIGNAL_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R),
/* 4F */ ACPI_OP ("Wait", ARGP_WAIT_OP, ARGI_WAIT_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R),
/* 50 */ ACPI_OP ("Reset", ARGP_RESET_OP, ARGI_RESET_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R),
/* 51 */ ACPI_OP ("Release", ARGP_RELEASE_OP, ARGI_RELEASE_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R),
/* 52 */ ACPI_OP ("FromBCD", ARGP_FROM_BCD_OP, ARGI_FROM_BCD_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
/* 53 */ ACPI_OP ("ToBCD", ARGP_TO_BCD_OP, ARGI_TO_BCD_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
/* 54 */ ACPI_OP ("Unload", ARGP_UNLOAD_OP, ARGI_UNLOAD_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R),
/* 55 */ ACPI_OP ("Revision", ARGP_REVISION_OP, ARGI_REVISION_OP, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, 0),
/* 56 */ ACPI_OP ("Debug", ARGP_DEBUG_OP, ARGI_DEBUG_OP, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, 0),
/* 57 */ ACPI_OP ("Fatal", ARGP_FATAL_OP, ARGI_FATAL_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_3A_0T_0R, AML_FLAGS_EXEC_3A_0T_0R),
/* 58 */ ACPI_OP ("OpRegion", ARGP_REGION_OP, ARGI_REGION_OP, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_COMPLEX, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED | AML_DEFER),
/* 59 */ ACPI_OP ("Field", ARGP_FIELD_OP, ARGI_FIELD_OP, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_FIELD),
/* 5A */ ACPI_OP ("Device", ARGP_DEVICE_OP, ARGI_DEVICE_OP, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_NO_OBJ, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
/* 5B */ ACPI_OP ("Processor", ARGP_PROCESSOR_OP, ARGI_PROCESSOR_OP, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
/* 5C */ ACPI_OP ("PowerResource", ARGP_POWER_RES_OP, ARGI_POWER_RES_OP, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
/* 5D */ ACPI_OP ("ThermalZone", ARGP_THERMAL_ZONE_OP, ARGI_THERMAL_ZONE_OP, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_NO_OBJ, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
/* 5E */ ACPI_OP ("IndexField", ARGP_INDEX_FIELD_OP, ARGI_INDEX_FIELD_OP, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_FIELD),
/* 5F */ ACPI_OP ("BankField", ARGP_BANK_FIELD_OP, ARGI_BANK_FIELD_OP, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_FIELD),
/* 46 */ ACPI_OP ("Mutex", ARGP_MUTEX_OP, ARGI_MUTEX_OP, ACPI_TYPE_MUTEX, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
/* 47 */ ACPI_OP ("Event", ARGP_EVENT_OP, ARGI_EVENT_OP, ACPI_TYPE_EVENT, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED ),
/* 48 */ ACPI_OP ("CondRefOf", ARGP_COND_REF_OF_OP, ARGI_COND_REF_OF_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
/* 49 */ ACPI_OP ("CreateField", ARGP_CREATE_FIELD_OP, ARGI_CREATE_FIELD_OP, ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_FIELD | AML_CREATE),
/* 4A */ ACPI_OP ("Load", ARGP_LOAD_OP, ARGI_LOAD_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_0R, AML_FLAGS_EXEC_1A_1T_0R),
/* 4B */ ACPI_OP ("Stall", ARGP_STALL_OP, ARGI_STALL_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R),
/* 4C */ ACPI_OP ("Sleep", ARGP_SLEEP_OP, ARGI_SLEEP_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R),
/* 4D */ ACPI_OP ("Acquire", ARGP_ACQUIRE_OP, ARGI_ACQUIRE_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R),
/* 4E */ ACPI_OP ("Signal", ARGP_SIGNAL_OP, ARGI_SIGNAL_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R),
/* 4F */ ACPI_OP ("Wait", ARGP_WAIT_OP, ARGI_WAIT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R),
/* 50 */ ACPI_OP ("Reset", ARGP_RESET_OP, ARGI_RESET_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R),
/* 51 */ ACPI_OP ("Release", ARGP_RELEASE_OP, ARGI_RELEASE_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R),
/* 52 */ ACPI_OP ("FromBCD", ARGP_FROM_BCD_OP, ARGI_FROM_BCD_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
/* 53 */ ACPI_OP ("ToBCD", ARGP_TO_BCD_OP, ARGI_TO_BCD_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
/* 54 */ ACPI_OP ("Unload", ARGP_UNLOAD_OP, ARGI_UNLOAD_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R),
/* 55 */ ACPI_OP ("Revision", ARGP_REVISION_OP, ARGI_REVISION_OP, INTERNAL_TYPE_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, 0),
/* 56 */ ACPI_OP ("Debug", ARGP_DEBUG_OP, ARGI_DEBUG_OP, INTERNAL_TYPE_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, 0),
/* 57 */ ACPI_OP ("Fatal", ARGP_FATAL_OP, ARGI_FATAL_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_3A_0T_0R, AML_FLAGS_EXEC_3A_0T_0R),
/* 58 */ ACPI_OP ("OperationRegion", ARGP_REGION_OP, ARGI_REGION_OP, ACPI_TYPE_REGION, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_COMPLEX, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED | AML_DEFER),
/* 59 */ ACPI_OP ("Field", ARGP_FIELD_OP, ARGI_FIELD_OP, INTERNAL_TYPE_FIELD_DEFN,AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_FIELD),
/* 5A */ ACPI_OP ("Device", ARGP_DEVICE_OP, ARGI_DEVICE_OP, ACPI_TYPE_DEVICE, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_NO_OBJ, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
/* 5B */ ACPI_OP ("Processor", ARGP_PROCESSOR_OP, ARGI_PROCESSOR_OP, ACPI_TYPE_PROCESSOR, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
/* 5C */ ACPI_OP ("PowerResource", ARGP_POWER_RES_OP, ARGI_POWER_RES_OP, ACPI_TYPE_POWER, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
/* 5D */ ACPI_OP ("ThermalZone", ARGP_THERMAL_ZONE_OP, ARGI_THERMAL_ZONE_OP, ACPI_TYPE_THERMAL, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_NO_OBJ, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
/* 5E */ ACPI_OP ("IndexField", ARGP_INDEX_FIELD_OP, ARGI_INDEX_FIELD_OP, INTERNAL_TYPE_INDEX_FIELD_DEFN,AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_FIELD),
/* 5F */ ACPI_OP ("BankField", ARGP_BANK_FIELD_OP, ARGI_BANK_FIELD_OP, INTERNAL_TYPE_BANK_FIELD_DEFN,AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_FIELD),
/* Internal opcodes that map to invalid AML opcodes */
/* 60 */ ACPI_OP ("LNotEqual", ARGP_LNOTEQUAL_OP, ARGI_LNOTEQUAL_OP, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_HAS_ARGS),
/* 61 */ ACPI_OP ("LLessEqual", ARGP_LLESSEQUAL_OP, ARGI_LLESSEQUAL_OP, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_HAS_ARGS),
/* 62 */ ACPI_OP ("LGreaterEqual", ARGP_LGREATEREQUAL_OP, ARGI_LGREATEREQUAL_OP, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_HAS_ARGS),
/* 63 */ ACPI_OP ("[NamePath]", ARGP_NAMEPATH_OP, ARGI_NAMEPATH_OP, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, AML_NSOBJECT | AML_NSNODE ),
/* 64 */ ACPI_OP ("[MethodCall]", ARGP_METHODCALL_OP, ARGI_METHODCALL_OP, AML_CLASS_METHOD_CALL, AML_TYPE_METHOD_CALL, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE),
/* 65 */ ACPI_OP ("[ByteList]", ARGP_BYTELIST_OP, ARGI_BYTELIST_OP, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, 0),
/* 66 */ ACPI_OP ("[ReservedField]", ARGP_RESERVEDFIELD_OP, ARGI_RESERVEDFIELD_OP, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0),
/* 67 */ ACPI_OP ("[NamedField]", ARGP_NAMEDFIELD_OP, ARGI_NAMEDFIELD_OP, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED ),
/* 68 */ ACPI_OP ("[AccessField]", ARGP_ACCESSFIELD_OP, ARGI_ACCESSFIELD_OP, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0),
/* 69 */ ACPI_OP ("[StaticString", ARGP_STATICSTRING_OP, ARGI_STATICSTRING_OP, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0),
/* 6A */ ACPI_OP ("[Return Value]", ARG_NONE, ARG_NONE, AML_CLASS_RETURN_VALUE, AML_TYPE_RETURN, AML_HAS_ARGS | AML_HAS_RETVAL),
/* 6B */ ACPI_OP ("UNKNOWN_OP!", ARG_NONE, ARG_NONE, AML_CLASS_UNKNOWN, AML_TYPE_BOGUS, AML_HAS_ARGS),
/* 6C */ ACPI_OP ("ASCII_ONLY!", ARG_NONE, ARG_NONE, AML_CLASS_ASCII, AML_TYPE_BOGUS, AML_HAS_ARGS),
/* 6D */ ACPI_OP ("PREFIX_ONLY!", ARG_NONE, ARG_NONE, AML_CLASS_PREFIX, AML_TYPE_BOGUS, AML_HAS_ARGS),
/* 60 */ ACPI_OP ("LNotEqual", ARGP_LNOTEQUAL_OP, ARGI_LNOTEQUAL_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_HAS_ARGS),
/* 61 */ ACPI_OP ("LLessEqual", ARGP_LLESSEQUAL_OP, ARGI_LLESSEQUAL_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_HAS_ARGS),
/* 62 */ ACPI_OP ("LGreaterEqual", ARGP_LGREATEREQUAL_OP, ARGI_LGREATEREQUAL_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_HAS_ARGS),
/* 63 */ ACPI_OP ("[NamePath]", ARGP_NAMEPATH_OP, ARGI_NAMEPATH_OP, INTERNAL_TYPE_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, AML_NSOBJECT | AML_NSNODE ),
/* 64 */ ACPI_OP ("[MethodCall]", ARGP_METHODCALL_OP, ARGI_METHODCALL_OP, ACPI_TYPE_METHOD, AML_CLASS_METHOD_CALL, AML_TYPE_METHOD_CALL, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE),
/* 65 */ ACPI_OP ("[ByteList]", ARGP_BYTELIST_OP, ARGI_BYTELIST_OP, ACPI_TYPE_ANY, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, 0),
/* 66 */ ACPI_OP ("[ReservedField]", ARGP_RESERVEDFIELD_OP, ARGI_RESERVEDFIELD_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0),
/* 67 */ ACPI_OP ("[NamedField]", ARGP_NAMEDFIELD_OP, ARGI_NAMEDFIELD_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED ),
/* 68 */ ACPI_OP ("[AccessField]", ARGP_ACCESSFIELD_OP, ARGI_ACCESSFIELD_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0),
/* 69 */ ACPI_OP ("[StaticString", ARGP_STATICSTRING_OP, ARGI_STATICSTRING_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0),
/* 6A */ ACPI_OP ("[Return Value]", ARG_NONE, ARG_NONE, ACPI_TYPE_ANY, AML_CLASS_RETURN_VALUE, AML_TYPE_RETURN, AML_HAS_ARGS | AML_HAS_RETVAL),
/* 6B */ ACPI_OP ("UNKNOWN_OP!", ARG_NONE, ARG_NONE, INTERNAL_TYPE_INVALID, AML_CLASS_UNKNOWN, AML_TYPE_BOGUS, AML_HAS_ARGS),
/* 6C */ ACPI_OP ("ASCII_ONLY!", ARG_NONE, ARG_NONE, ACPI_TYPE_ANY, AML_CLASS_ASCII, AML_TYPE_BOGUS, AML_HAS_ARGS),
/* 6D */ ACPI_OP ("PREFIX_ONLY!", ARG_NONE, ARG_NONE, ACPI_TYPE_ANY, AML_CLASS_PREFIX, AML_TYPE_BOGUS, AML_HAS_ARGS),
/* ACPI 2.0 opcodes */
/* 6E */ ACPI_OP ("QwordConst", ARGP_QWORD_OP, ARGI_QWORD_OP, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, 0),
/* 6F */ ACPI_OP ("VarPackage", ARGP_VAR_PACKAGE_OP, ARGI_VAR_PACKAGE_OP, AML_CLASS_ARGUMENT, AML_TYPE_DATA_TERM, AML_HAS_ARGS | AML_DEFER),
/* 70 */ ACPI_OP ("ConcatRes", ARGP_CONCAT_RES_OP, ARGI_CONCAT_RES_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R),
/* 71 */ ACPI_OP ("Mod", ARGP_MOD_OP, ARGI_MOD_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R),
/* 72 */ ACPI_OP ("CreateQWordField", ARGP_CREATE_QWORD_FIELD_OP,ARGI_CREATE_QWORD_FIELD_OP, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE),
/* 73 */ ACPI_OP ("ToBuffer", ARGP_TO_BUFFER_OP, ARGI_TO_BUFFER_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
/* 74 */ ACPI_OP ("ToDecimalString", ARGP_TO_DEC_STR_OP, ARGI_TO_DEC_STR_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
/* 75 */ ACPI_OP ("ToHexString", ARGP_TO_HEX_STR_OP, ARGI_TO_HEX_STR_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
/* 76 */ ACPI_OP ("ToInteger", ARGP_TO_INTEGER_OP, ARGI_TO_INTEGER_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
/* 77 */ ACPI_OP ("ToString", ARGP_TO_STRING_OP, ARGI_TO_STRING_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R),
/* 78 */ ACPI_OP ("CopyObject", ARGP_COPY_OP, ARGI_COPY_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
/* 79 */ ACPI_OP ("Mid", ARGP_MID_OP, ARGI_MID_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_3A_1T_1R, AML_FLAGS_EXEC_3A_1T_1R),
/* 7A */ ACPI_OP ("Continue", ARGP_CONTINUE_OP, ARGI_CONTINUE_OP, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0),
/* 7B */ ACPI_OP ("LoadTable", ARGP_LOAD_TABLE_OP, ARGI_LOAD_TABLE_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_6A_0T_1R, AML_FLAGS_EXEC_6A_0T_1R),
/* 7C */ ACPI_OP ("DataOpRegion", ARGP_DATA_REGION_OP, ARGI_DATA_REGION_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
/* 6E */ ACPI_OP ("QwordConst", ARGP_QWORD_OP, ARGI_QWORD_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, 0),
/* 6F */ ACPI_OP ("Package /*Var*/", ARGP_VAR_PACKAGE_OP, ARGI_VAR_PACKAGE_OP, ACPI_TYPE_PACKAGE, AML_CLASS_ARGUMENT, AML_TYPE_DATA_TERM, AML_HAS_ARGS | AML_DEFER),
/* 70 */ ACPI_OP ("ConcatenateResTemplate", ARGP_CONCAT_RES_OP, ARGI_CONCAT_RES_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R),
/* 71 */ ACPI_OP ("Mod", ARGP_MOD_OP, ARGI_MOD_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R),
/* 72 */ ACPI_OP ("CreateQWordField", ARGP_CREATE_QWORD_FIELD_OP,ARGI_CREATE_QWORD_FIELD_OP, ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE),
/* 73 */ ACPI_OP ("ToBuffer", ARGP_TO_BUFFER_OP, ARGI_TO_BUFFER_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
/* 74 */ ACPI_OP ("ToDecimalString", ARGP_TO_DEC_STR_OP, ARGI_TO_DEC_STR_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
/* 75 */ ACPI_OP ("ToHexString", ARGP_TO_HEX_STR_OP, ARGI_TO_HEX_STR_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
/* 76 */ ACPI_OP ("ToInteger", ARGP_TO_INTEGER_OP, ARGI_TO_INTEGER_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
/* 77 */ ACPI_OP ("ToString", ARGP_TO_STRING_OP, ARGI_TO_STRING_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R),
/* 78 */ ACPI_OP ("CopyObject", ARGP_COPY_OP, ARGI_COPY_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
/* 79 */ ACPI_OP ("Mid", ARGP_MID_OP, ARGI_MID_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_3A_1T_1R, AML_FLAGS_EXEC_3A_1T_1R),
/* 7A */ ACPI_OP ("Continue", ARGP_CONTINUE_OP, ARGI_CONTINUE_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0),
/* 7B */ ACPI_OP ("LoadTable", ARGP_LOAD_TABLE_OP, ARGI_LOAD_TABLE_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_6A_0T_1R, AML_FLAGS_EXEC_6A_0T_1R),
/* 7C */ ACPI_OP ("DataTableRegion", ARGP_DATA_REGION_OP, ARGI_DATA_REGION_OP, ACPI_TYPE_REGION, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
};
@ -685,7 +685,7 @@ static const ACPI_OPCODE_INFO AmlOpInfo[] =
* index into the table above
*/
static const UINT8 AmlShortOpInfoIndex[256] =
static const UINT8 AcpiGbl_ShortOpIndex[256] =
{
/* 0 1 2 3 4 5 6 7 */
/* 8 9 A B C D E F */
@ -724,7 +724,7 @@ static const UINT8 AmlShortOpInfoIndex[256] =
};
static const UINT8 AmlLongOpInfoIndex[NUM_EXTENDED_OPCODE] =
static const UINT8 AcpiGbl_LongOpIndex[NUM_EXTENDED_OPCODE] =
{
/* 0 1 2 3 4 5 6 7 */
/* 8 9 A B C D E F */
@ -767,35 +767,19 @@ const ACPI_OPCODE_INFO *
AcpiPsGetOpcodeInfo (
UINT16 Opcode)
{
const ACPI_OPCODE_INFO *OpInfo;
UINT8 UpperOpcode;
UINT8 LowerOpcode;
PROC_NAME ("PsGetOpcodeInfo");
/* Split the 16-bit opcode into separate bytes */
UpperOpcode = (UINT8) (Opcode >> 8);
LowerOpcode = (UINT8) Opcode;
/* Default is "unknown opcode" */
OpInfo = &AmlOpInfo [_UNK];
/*
* Detect normal 8-bit opcode or extended 16-bit opcode
*/
switch (UpperOpcode)
switch ((UINT8) (Opcode >> 8))
{
case 0:
/* Simple (8-bit) opcode: 0-255, can't index beyond table */
OpInfo = &AmlOpInfo [AmlShortOpInfoIndex [LowerOpcode]];
return (&AcpiGbl_AmlOpInfo [AcpiGbl_ShortOpIndex [(UINT8) Opcode]]);
break;
@ -803,23 +787,22 @@ AcpiPsGetOpcodeInfo (
/* Extended (16-bit, prefix+opcode) opcode */
if (LowerOpcode <= MAX_EXTENDED_OPCODE)
if (((UINT8) Opcode) <= MAX_EXTENDED_OPCODE)
{
OpInfo = &AmlOpInfo [AmlLongOpInfoIndex [LowerOpcode]];
return (&AcpiGbl_AmlOpInfo [AcpiGbl_LongOpIndex [(UINT8) Opcode]]);
break;
}
break;
default:
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown extended opcode=%X\n", Opcode));
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown extended opcode [%X]\n", Opcode));
break;
}
/* Get the Op info pointer for this opcode */
/* Default is "unknown opcode" */
return (OpInfo);
return (&AcpiGbl_AmlOpInfo [_UNK]);
}

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: psscope - Parser scope stack management routines
* $Revision: 30 $
* $Revision: 31 $
*
*****************************************************************************/
@ -239,7 +239,7 @@ AcpiPsPushScope (
Scope = AcpiUtCreateGenericState ();
if (!Scope)
{
return (AE_NO_MEMORY);
return_ACPI_STATUS (AE_NO_MEMORY);
}

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: pswalk - Parser routines to walk parsed op tree(s)
* $Revision: 58 $
* $Revision: 61 $
*
*****************************************************************************/
@ -173,7 +173,6 @@ AcpiPsGetNextWalkOp (
return_ACPI_STATUS (AE_OK);
}
/*
* No more children, this Op is complete. Save Next and Parent
* in case the Op object gets deleted by the callback routine
@ -222,7 +221,6 @@ AcpiPsGetNextWalkOp (
* the tree
*/
}
else
{
/*
@ -232,7 +230,6 @@ AcpiPsGetNextWalkOp (
Parent = Op;
}
/*
* Look for a sibling of the current Op's parent
* Continue moving up the tree until we find a node that has not been
@ -287,9 +284,10 @@ AcpiPsGetNextWalkOp (
}
/* Got all the way to the top of the tree, we must be done! */
/* However, the code should have terminated in the loop above */
/*
* Got all the way to the top of the tree, we must be done!
* However, the code should have terminated in the loop above
*/
WalkState->NextOp = NULL;
return_ACPI_STATUS (AE_OK);
@ -311,7 +309,7 @@ AcpiPsGetNextWalkOp (
*
******************************************************************************/
static ACPI_STATUS
ACPI_STATUS
AcpiPsDeleteCompletedOp (
ACPI_WALK_STATE *WalkState)
{
@ -338,7 +336,7 @@ AcpiPsDeleteParseTree (
ACPI_PARSE_OBJECT *SubtreeRoot)
{
ACPI_WALK_STATE *WalkState;
ACPI_WALK_LIST WalkList;
ACPI_THREAD_STATE *Thread;
FUNCTION_TRACE_PTR ("PsDeleteParseTree", SubtreeRoot);
@ -351,11 +349,14 @@ AcpiPsDeleteParseTree (
/* Create and initialize a new walk list */
WalkList.WalkState = NULL;
WalkList.AcquiredMutexList.Prev = NULL;
WalkList.AcquiredMutexList.Next = NULL;
Thread = AcpiUtCreateThreadState ();
if (!Thread)
{
return_VOID;
}
WalkState = AcpiDsCreateWalkState (TABLE_ID_DSDT, NULL, NULL, &WalkList);
WalkState = AcpiDsCreateWalkState (TABLE_ID_DSDT, NULL, NULL, Thread);
if (!WalkState)
{
return_VOID;
@ -365,11 +366,9 @@ AcpiPsDeleteParseTree (
WalkState->DescendingCallback = NULL;
WalkState->AscendingCallback = NULL;
WalkState->Origin = SubtreeRoot;
WalkState->NextOp = SubtreeRoot;
/* Head downward in the tree */
WalkState->NextOpInfo = NEXT_OP_DOWNWARD;
@ -384,7 +383,7 @@ AcpiPsDeleteParseTree (
/* We are done with this walk */
AcpiExReleaseAllMutexes ((ACPI_OPERAND_OBJECT *) &WalkList.AcquiredMutexList);
AcpiUtDeleteGenericState ((ACPI_GENERIC_STATE *) Thread);
AcpiDsDeleteWalkState (WalkState);
return_VOID;

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: psxface - Parser external interfaces
* $Revision: 52 $
* $Revision: 56 $
*
*****************************************************************************/
@ -220,11 +220,11 @@ AcpiPsxExecute (
return_ACPI_STATUS (AE_NO_MEMORY);
}
Status = AcpiDsInitAmlWalk (WalkState, Op, MethodNode, ObjDesc->Method.AmlStart,
Status = AcpiDsInitAmlWalk (WalkState, Op, MethodNode, ObjDesc->Method.AmlStart,
ObjDesc->Method.AmlLength, NULL, NULL, 1);
if (ACPI_FAILURE (Status))
{
/* TBD: delete walk state */
AcpiDsDeleteWalkState (WalkState);
return_ACPI_STATUS (Status);
}
@ -263,11 +263,11 @@ AcpiPsxExecute (
return_ACPI_STATUS (AE_NO_MEMORY);
}
Status = AcpiDsInitAmlWalk (WalkState, Op, MethodNode, ObjDesc->Method.AmlStart,
Status = AcpiDsInitAmlWalk (WalkState, Op, MethodNode, ObjDesc->Method.AmlStart,
ObjDesc->Method.AmlLength, Params, ReturnObjDesc, 3);
if (ACPI_FAILURE (Status))
{
/* TBD: delete walk state */
AcpiDsDeleteWalkState (WalkState);
return_ACPI_STATUS (Status);
}
@ -287,14 +287,15 @@ AcpiPsxExecute (
}
}
/* Now check status from the method execution */
if (ACPI_FAILURE (Status))
{
DUMP_PATHNAME (MethodNode, "PsExecute: method failed -",
REPORT_ERROR (("Method execution failed, %s\n", AcpiFormatException (Status)));
DUMP_PATHNAME (MethodNode, "Method pathname: ",
ACPI_LV_ERROR, _COMPONENT);
}
/*
* If the method has returned an object, signal this to the caller with
* a control exception code
@ -308,7 +309,6 @@ AcpiPsxExecute (
Status = AE_CTRL_RETURN_VALUE;
}
return_ACPI_STATUS (Status);
}

View File

@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: rsaddr - Address resource descriptors (16/32/64)
* $Revision: 19 $
* $Revision: 20 $
*
******************************************************************************/
@ -179,6 +179,7 @@ AcpiRsAddress16Resource (
Temp8 = *Buffer;
/* Values 0-2 are valid */
if (Temp8 > 2)
{
return_ACPI_STATUS (AE_AML_INVALID_RESOURCE_TYPE);
@ -192,24 +193,20 @@ AcpiRsAddress16Resource (
Buffer += 1;
Temp8 = *Buffer;
/*
* Producer / Consumer
*/
/* Producer / Consumer */
OutputStruct->Data.Address16.ProducerConsumer = Temp8 & 0x01;
/*
* Decode
*/
/* Decode */
OutputStruct->Data.Address16.Decode = (Temp8 >> 1) & 0x01;
/*
* Min Address Fixed
*/
/* Min Address Fixed */
OutputStruct->Data.Address16.MinAddressFixed = (Temp8 >> 2) & 0x01;
/*
* Max Address Fixed
*/
/* Max Address Fixed */
OutputStruct->Data.Address16.MaxAddressFixed = (Temp8 >> 3) & 0x01;
/*
@ -225,7 +222,6 @@ AcpiRsAddress16Resource (
OutputStruct->Data.Address16.Attribute.Memory.CacheAttribute =
(UINT16) ((Temp8 >> 1) & 0x0F);
}
else
{
if (IO_RANGE == OutputStruct->Data.Address16.ResourceType)
@ -233,7 +229,6 @@ AcpiRsAddress16Resource (
OutputStruct->Data.Address16.Attribute.Io.RangeAttribute =
(UINT16) (Temp8 & 0x03);
}
else
{
/* BUS_NUMBER_RANGE == Address16.Data->ResourceType */
@ -334,7 +329,6 @@ AcpiRsAddress16Resource (
Temp8 = (UINT8) (Index + 1);
StructSize += ROUND_UP_TO_32BITS (Temp8);
}
else
{
OutputStruct->Data.Address16.ResourceSource.Index = 0x00;
@ -434,7 +428,6 @@ AcpiRsAddress16Stream (
(LinkedList->Data.Address16.Attribute.Memory.CacheAttribute &
0x0F) << 1;
}
else if (IO_RANGE == LinkedList->Data.Address16.ResourceType)
{
Temp8 = (UINT8)
@ -632,7 +625,6 @@ AcpiRsAddress32Resource (
OutputStruct->Data.Address32.Attribute.Memory.CacheAttribute =
(UINT16) ((Temp8 >> 1) & 0x0F);
}
else
{
if (IO_RANGE == OutputStruct->Data.Address32.ResourceType)
@ -640,7 +632,6 @@ AcpiRsAddress32Resource (
OutputStruct->Data.Address32.Attribute.Io.RangeAttribute =
(UINT16) (Temp8 & 0x03);
}
else
{
/* BUS_NUMBER_RANGE == OutputStruct->Data.Address32.ResourceType */
@ -715,7 +706,6 @@ AcpiRsAddress32Resource (
/* Copy the string into the buffer */
Index = 0;
while (0x00 != *Buffer)
{
*TempPtr = *Buffer;
@ -739,7 +729,6 @@ AcpiRsAddress32Resource (
Temp8 = (UINT8) (Index + 1);
StructSize += ROUND_UP_TO_32BITS (Temp8);
}
else
{
OutputStruct->Data.Address32.ResourceSource.Index = 0x00;
@ -803,7 +792,6 @@ AcpiRsAddress32Stream (
/*
* Set a pointer to the Length field - to be filled in later
*/
LengthField = (UINT16 *) Buffer;
Buffer += 2;
@ -841,7 +829,6 @@ AcpiRsAddress32Stream (
(LinkedList->Data.Address32.Attribute.Memory.CacheAttribute &
0x0F) << 1;
}
else if (IO_RANGE == LinkedList->Data.Address32.ResourceType)
{
Temp8 = (UINT8)
@ -988,6 +975,7 @@ AcpiRsAddress64Resource (
Temp8 = *Buffer;
/* Values 0-2 are valid */
if(Temp8 > 2)
{
return_ACPI_STATUS (AE_AML_INVALID_RESOURCE_TYPE);
@ -1035,7 +1023,6 @@ AcpiRsAddress64Resource (
OutputStruct->Data.Address64.Attribute.Memory.CacheAttribute =
(UINT16) ((Temp8 >> 1) & 0x0F);
}
else
{
if (IO_RANGE == OutputStruct->Data.Address64.ResourceType)
@ -1043,7 +1030,6 @@ AcpiRsAddress64Resource (
OutputStruct->Data.Address64.Attribute.Io.RangeAttribute =
(UINT16) (Temp8 & 0x03);
}
else
{
/* BUS_NUMBER_RANGE == OutputStruct->Data.Address64.ResourceType */
@ -1120,7 +1106,6 @@ AcpiRsAddress64Resource (
/* Copy the string into the buffer */
Index = 0;
while (0x00 != *Buffer)
{
*TempPtr = *Buffer;
@ -1145,7 +1130,6 @@ AcpiRsAddress64Resource (
Temp8 = (UINT8) (Index + 1);
StructSize += ROUND_UP_TO_32BITS (Temp8);
}
else
{
OutputStruct->Data.Address64.ResourceSource.Index = 0x00;
@ -1247,7 +1231,6 @@ AcpiRsAddress64Stream (
(LinkedList->Data.Address64.Attribute.Memory.CacheAttribute &
0x0F) << 1;
}
else if (IO_RANGE == LinkedList->Data.Address64.ResourceType)
{
Temp8 = (UINT8)

View File

@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: rscalc - Calculate stream and list lengths
* $Revision: 32 $
* $Revision: 33 $
*
******************************************************************************/
@ -627,7 +627,6 @@ AcpiRsCalculateListLength (
{
Temp8 = (UINT8) (Temp16 - (9 + AdditionalBytes));
}
else
{
Temp8 = 0;
@ -656,7 +655,6 @@ AcpiRsCalculateListLength (
{
BytesConsumed = 4;
}
else
{
BytesConsumed = 3;
@ -805,7 +803,6 @@ AcpiRsCalculateListLength (
break;
}
/*
* Update the return value and counter
*/
@ -818,7 +815,6 @@ AcpiRsCalculateListLength (
ByteStreamBuffer += BytesConsumed;
}
/*
* This is the data the caller needs
*/
@ -902,7 +898,6 @@ AcpiRsCalculatePciRoutingTableLength (
{
NameFound = TRUE;
}
else
{
/*
@ -927,14 +922,12 @@ AcpiRsCalculatePciRoutingTableLength (
*/
TempSizeNeeded += (*SubObjectList)->String.Length;
}
else
{
TempSizeNeeded += AcpiNsGetPathnameLength (
(*SubObjectList)->Reference.Node);
}
}
else
{
/*
@ -954,7 +947,6 @@ AcpiRsCalculatePciRoutingTableLength (
TopObjectList++;
}
/*
* Adding an extra element to the end of the list, essentially a NULL terminator
*/

View File

@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: rscreate - Create resource lists/tables
* $Revision: 36 $
* $Revision: 38 $
*
******************************************************************************/
@ -178,46 +178,33 @@ AcpiRsCreateResourceList (
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Status=%X ListSizeNeeded=%X\n",
Status, ListSizeNeeded));
/*
* Exit with the error passed back
*/
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
/*
* If the linked list will fit into the available buffer
* call to fill in the list
* Is caller buffer large enough?
*/
if (ListSizeNeeded <= *OutputBufferLength)
{
/*
* Zero out the return buffer before proceeding
*/
MEMSET (OutputBuffer, 0x00, *OutputBufferLength);
Status = AcpiRsByteStreamToList (ByteStreamStart, ByteStreamBufferLength,
&OutputBuffer);
/*
* Exit with the error passed back
*/
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "OutputBuffer = %p\n", OutputBuffer));
}
else
if (ListSizeNeeded > *OutputBufferLength)
{
*OutputBufferLength = ListSizeNeeded;
return_ACPI_STATUS (AE_BUFFER_OVERFLOW);
}
/*
* Zero out the return buffer before proceeding
*/
MEMSET (OutputBuffer, 0x00, *OutputBufferLength);
Status = AcpiRsByteStreamToList (ByteStreamStart, ByteStreamBufferLength,
&OutputBuffer);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "OutputBuffer = %p\n", OutputBuffer));
*OutputBufferLength = ListSizeNeeded;
return_ACPI_STATUS (AE_OK);
}
@ -268,7 +255,6 @@ AcpiRsCreatePciRoutingTable (
*/
Status = AcpiRsCalculatePciRoutingTableLength (PackageObject,
&BufferSizeNeeded);
if (!ACPI_SUCCESS(Status))
{
return_ACPI_STATUS (Status);
@ -276,195 +262,186 @@ AcpiRsCreatePciRoutingTable (
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "BufferSizeNeeded = %X\n", BufferSizeNeeded));
/* Is caller buffer large enough? */
if (BufferSizeNeeded > *OutputBufferLength)
{
return_ACPI_STATUS (AE_BUFFER_OVERFLOW);
}
*OutputBufferLength = BufferSizeNeeded;
/*
* If the data will fit into the available buffer
* call to fill in the list
* Zero out the return buffer before proceeding
*/
if (BufferSizeNeeded <= *OutputBufferLength)
MEMSET (OutputBuffer, 0x00, *OutputBufferLength);
/*
* Loop through the ACPI_INTERNAL_OBJECTS - Each object should
* contain a UINT32 Address, a UINT8 Pin, a Name and a UINT8
* SourceIndex.
*/
TopObjectList = PackageObject->Package.Elements;
NumberOfElements = PackageObject->Package.Count;
UserPrt = (PCI_ROUTING_TABLE *) Buffer;
Buffer = ROUND_PTR_UP_TO_8 (Buffer, UINT8);
for (Index = 0; Index < NumberOfElements; Index++)
{
/*
* Zero out the return buffer before proceeding
* Point UserPrt past this current structure
*
* NOTE: On the first iteration, UserPrt->Length will
* be zero because we cleared the return buffer earlier
*/
MEMSET (OutputBuffer, 0x00, *OutputBufferLength);
Buffer += UserPrt->Length;
UserPrt = (PCI_ROUTING_TABLE *) Buffer;
/*
* Loop through the ACPI_INTERNAL_OBJECTS - Each object should
* contain a UINT32 Address, a UINT8 Pin, a Name and a UINT8
* SourceIndex.
* Fill in the Length field with the information we
* have at this point.
* The minus four is to subtract the size of the
* UINT8 Source[4] member because it is added below.
*/
TopObjectList = PackageObject->Package.Elements;
NumberOfElements = PackageObject->Package.Count;
UserPrt = (PCI_ROUTING_TABLE *) Buffer;
UserPrt->Length = (sizeof (PCI_ROUTING_TABLE) -4);
/*
* Dereference the sub-package
*/
PackageElement = *TopObjectList;
Buffer = ROUND_PTR_UP_TO_8 (Buffer, UINT8);
/*
* The SubObjectList will now point to an array of
* the four IRQ elements: Address, Pin, Source and
* SourceIndex
*/
SubObjectList = PackageElement->Package.Elements;
for (Index = 0; Index < NumberOfElements; Index++)
/*
* 1) First subobject: Dereference the Address
*/
if (ACPI_TYPE_INTEGER == (*SubObjectList)->Common.Type)
{
/*
* Point UserPrt past this current structure
*
* NOTE: On the first iteration, UserPrt->Length will
* be zero because we cleared the return buffer earlier
*/
Buffer += UserPrt->Length;
UserPrt = (PCI_ROUTING_TABLE *) Buffer;
/*
* Fill in the Length field with the information we
* have at this point.
* The minus four is to subtract the size of the
* UINT8 Source[4] member because it is added below.
*/
UserPrt->Length = (sizeof (PCI_ROUTING_TABLE) -4);
/*
* Dereference the sub-package
*/
PackageElement = *TopObjectList;
/*
* The SubObjectList will now point to an array of
* the four IRQ elements: Address, Pin, Source and
* SourceIndex
*/
SubObjectList = PackageElement->Package.Elements;
/*
* 1) First subobject: Dereference the Address
*/
if (ACPI_TYPE_INTEGER == (*SubObjectList)->Common.Type)
{
UserPrt->Address = (*SubObjectList)->Integer.Value;
}
else
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Need Integer, found %s\n",
AcpiUtGetTypeName ((*SubObjectList)->Common.Type)));
return_ACPI_STATUS (AE_BAD_DATA);
}
/*
* 2) Second subobject: Dereference the Pin
*/
SubObjectList++;
if (ACPI_TYPE_INTEGER == (*SubObjectList)->Common.Type)
{
UserPrt->Pin = (UINT32) (*SubObjectList)->Integer.Value;
}
else
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Need Integer, found %s\n",
AcpiUtGetTypeName ((*SubObjectList)->Common.Type)));
return_ACPI_STATUS (AE_BAD_DATA);
}
/*
* 3) Third subobject: Dereference the Source Name
*/
SubObjectList++;
switch ((*SubObjectList)->Common.Type)
{
case INTERNAL_TYPE_REFERENCE:
if ((*SubObjectList)->Reference.Opcode != AML_INT_NAMEPATH_OP)
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Need name, found reference op %X\n",
(*SubObjectList)->Reference.Opcode));
return_ACPI_STATUS (AE_BAD_DATA);
}
Node = (*SubObjectList)->Reference.Node;
/* TBD: use *remaining* length of the buffer! */
Status = AcpiNsHandleToPathname ((ACPI_HANDLE *) Node,
OutputBufferLength, UserPrt->Source);
UserPrt->Length += STRLEN (UserPrt->Source) + 1; /* include null terminator */
break;
case ACPI_TYPE_STRING:
STRCPY (UserPrt->Source,
(*SubObjectList)->String.Pointer);
/*
* Add to the Length field the length of the string
*/
UserPrt->Length += (*SubObjectList)->String.Length;
break;
case ACPI_TYPE_INTEGER:
/*
* If this is a number, then the Source Name
* is NULL, since the entire buffer was zeroed
* out, we can leave this alone.
*/
/*
* Add to the Length field the length of
* the UINT32 NULL
*/
UserPrt->Length += sizeof (UINT32);
break;
default:
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Need Integer, found %s\n",
AcpiUtGetTypeName ((*SubObjectList)->Common.Type)));
return_ACPI_STATUS (AE_BAD_DATA);
break;
}
/* Now align the current length */
UserPrt->Length = ROUND_UP_TO_64BITS (UserPrt->Length);
/*
* 4) Fourth subobject: Dereference the Source Index
*/
SubObjectList++;
if (ACPI_TYPE_INTEGER == (*SubObjectList)->Common.Type)
{
UserPrt->SourceIndex = (UINT32) (*SubObjectList)->Integer.Value;
}
else
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Need Integer, found %s\n",
AcpiUtGetTypeName ((*SubObjectList)->Common.Type)));
return_ACPI_STATUS (AE_BAD_DATA);
}
/*
* Point to the next ACPI_OPERAND_OBJECT
*/
TopObjectList++;
UserPrt->Address = (*SubObjectList)->Integer.Value;
}
else
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Need Integer, found %s\n",
AcpiUtGetTypeName ((*SubObjectList)->Common.Type)));
return_ACPI_STATUS (AE_BAD_DATA);
}
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "OutputBuffer = %p\n", OutputBuffer));
}
/*
* 2) Second subobject: Dereference the Pin
*/
SubObjectList++;
else
{
*OutputBufferLength = BufferSizeNeeded;
if (ACPI_TYPE_INTEGER == (*SubObjectList)->Common.Type)
{
UserPrt->Pin = (UINT32) (*SubObjectList)->Integer.Value;
}
else
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Need Integer, found %s\n",
AcpiUtGetTypeName ((*SubObjectList)->Common.Type)));
return_ACPI_STATUS (AE_BAD_DATA);
}
return_ACPI_STATUS (AE_BUFFER_OVERFLOW);
/*
* 3) Third subobject: Dereference the Source Name
*/
SubObjectList++;
switch ((*SubObjectList)->Common.Type)
{
case INTERNAL_TYPE_REFERENCE:
if ((*SubObjectList)->Reference.Opcode != AML_INT_NAMEPATH_OP)
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Need name, found reference op %X\n",
(*SubObjectList)->Reference.Opcode));
return_ACPI_STATUS (AE_BAD_DATA);
}
Node = (*SubObjectList)->Reference.Node;
/* Use *remaining* length of the buffer as max for pathname */
BufferSizeNeeded = *OutputBufferLength -
(UINT32) ((UINT8 *) UserPrt->Source - OutputBuffer);
Status = AcpiNsHandleToPathname ((ACPI_HANDLE *) Node,
&BufferSizeNeeded, UserPrt->Source);
UserPrt->Length += STRLEN (UserPrt->Source) + 1; /* include null terminator */
break;
case ACPI_TYPE_STRING:
STRCPY (UserPrt->Source,
(*SubObjectList)->String.Pointer);
/*
* Add to the Length field the length of the string
*/
UserPrt->Length += (*SubObjectList)->String.Length;
break;
case ACPI_TYPE_INTEGER:
/*
* If this is a number, then the Source Name
* is NULL, since the entire buffer was zeroed
* out, we can leave this alone.
*/
/*
* Add to the Length field the length of
* the UINT32 NULL
*/
UserPrt->Length += sizeof (UINT32);
break;
default:
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Need Integer, found %s\n",
AcpiUtGetTypeName ((*SubObjectList)->Common.Type)));
return_ACPI_STATUS (AE_BAD_DATA);
break;
}
/* Now align the current length */
UserPrt->Length = ROUND_UP_TO_64BITS (UserPrt->Length);
/*
* 4) Fourth subobject: Dereference the Source Index
*/
SubObjectList++;
if (ACPI_TYPE_INTEGER == (*SubObjectList)->Common.Type)
{
UserPrt->SourceIndex = (UINT32) (*SubObjectList)->Integer.Value;
}
else
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Need Integer, found %s\n",
AcpiUtGetTypeName ((*SubObjectList)->Common.Type)));
return_ACPI_STATUS (AE_BAD_DATA);
}
/*
* Point to the next ACPI_OPERAND_OBJECT
*/
TopObjectList++;
}
/*
* Report the amount of buffer used
*/
*OutputBufferLength = BufferSizeNeeded;
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "OutputBuffer = %p\n", OutputBuffer));
return_ACPI_STATUS (AE_OK);
}
@ -506,7 +483,7 @@ AcpiRsCreateByteStream (
/*
* Params already validated, so we don't re-validate here
*
* Pass the LinkedListBuffer into a module that can calculate
* Pass the LinkedListBuffer into a module that calculates
* the buffer size needed for the byte stream.
*/
Status = AcpiRsCalculateByteStreamLength (LinkedListBuffer,
@ -514,46 +491,33 @@ AcpiRsCreateByteStream (
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "ByteStreamSizeNeeded=%X, %s\n",
ByteStreamSizeNeeded, AcpiFormatException (Status)));
/*
* Exit with the error passed back
*/
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
/*
* If the linked list will fit into the available buffer
* call to fill in the list
* Is caller buffer large enough?
*/
if (ByteStreamSizeNeeded <= *OutputBufferLength)
{
/*
* Zero out the return buffer before proceeding
*/
MEMSET (OutputBuffer, 0x00, *OutputBufferLength);
Status = AcpiRsListToByteStream (LinkedListBuffer, ByteStreamSizeNeeded,
&OutputBuffer);
/*
* Exit with the error passed back
*/
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "OutputBuffer = %p\n", OutputBuffer));
}
else
if (ByteStreamSizeNeeded > *OutputBufferLength)
{
*OutputBufferLength = ByteStreamSizeNeeded;
return_ACPI_STATUS (AE_BUFFER_OVERFLOW);
}
/*
* Zero out the return buffer before proceeding
*/
MEMSET (OutputBuffer, 0x00, *OutputBufferLength);
Status = AcpiRsListToByteStream (LinkedListBuffer, ByteStreamSizeNeeded,
&OutputBuffer);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "OutputBuffer = %p\n", OutputBuffer));
return_ACPI_STATUS (AE_OK);
}

View File

@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: rsirq - IRQ resource descriptors
* $Revision: 18 $
* $Revision: 19 $
*
******************************************************************************/
@ -213,7 +213,6 @@ AcpiRsIrqResource (
OutputStruct->Data.Irq.EdgeLevel = EDGE_SENSITIVE;
OutputStruct->Data.Irq.ActiveHighLow = ACTIVE_HIGH;
}
else
{
if (Temp8 & 0x8)
@ -221,7 +220,6 @@ AcpiRsIrqResource (
OutputStruct->Data.Irq.EdgeLevel = LEVEL_SENSITIVE;
OutputStruct->Data.Irq.ActiveHighLow = ACTIVE_LOW;
}
else
{
/*
@ -238,7 +236,6 @@ AcpiRsIrqResource (
*/
OutputStruct->Data.Irq.SharedExclusive = (Temp8 >> 3) & 0x01;
}
else
{
/*
@ -307,7 +304,6 @@ AcpiRsIrqStream (
*Buffer = 0x22;
IRQInfoByteNeeded = FALSE;
}
else
{
*Buffer = 0x23;
@ -345,7 +341,6 @@ AcpiRsIrqStream (
{
Temp8 |= 0x08;
}
else
{
Temp8 |= 0x01;
@ -429,7 +424,6 @@ AcpiRsExtendedIrqResource (
OutputStruct->Data.ExtendedIrq.EdgeLevel = EDGE_SENSITIVE;
OutputStruct->Data.ExtendedIrq.ActiveHighLow = ACTIVE_HIGH;
}
else
{
if(Temp8 & 0x4)
@ -437,7 +431,6 @@ AcpiRsExtendedIrqResource (
OutputStruct->Data.ExtendedIrq.EdgeLevel = LEVEL_SENSITIVE;
OutputStruct->Data.ExtendedIrq.ActiveHighLow = ACTIVE_LOW;
}
else
{
/*
@ -516,7 +509,6 @@ AcpiRsExtendedIrqResource (
/* Copy the string into the buffer */
Index = 0;
while (0x00 != *Buffer)
{
*TempPtr = *Buffer;
@ -540,7 +532,6 @@ AcpiRsExtendedIrqResource (
Temp8 = (UINT8) (Index + 1);
StructSize += ROUND_UP_TO_32BITS (Temp8);
}
else
{
OutputStruct->Data.ExtendedIrq.ResourceSource.Index = 0x00;

View File

@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: rsmisc - Miscellaneous resource descriptors
* $Revision: 16 $
* $Revision: 17 $
*
******************************************************************************/
@ -283,8 +283,7 @@ AcpiRsVendorResource (
if (Temp8 & 0x80)
{
/*
* Large Item
* Point to the length field
* Large Item, point to the length field
*/
Buffer += 1;
@ -300,12 +299,10 @@ AcpiRsVendorResource (
Buffer += 2;
}
else
{
/*
* Small Item
* Dereference the size
* Small Item, dereference the size
*/
Temp16 = (UINT8)(*Buffer & 0x07);
@ -385,8 +382,7 @@ AcpiRsVendorStream (
if(LinkedList->Data.VendorSpecific.Length > 7)
{
/*
* Large Item
* Set the descriptor field and length bytes
* Large Item, Set the descriptor field and length bytes
*/
*Buffer = 0x84;
Buffer += 1;
@ -396,12 +392,10 @@ AcpiRsVendorStream (
MOVE_UNALIGNED16_TO_16 (Buffer, &Temp16);
Buffer += 2;
}
else
{
/*
* Small Item
* Set the descriptor field
* Small Item, Set the descriptor field
*/
Temp8 = 0x70;
Temp8 |= LinkedList->Data.VendorSpecific.Length;
@ -504,7 +498,6 @@ AcpiRsStartDependentFunctionsResource (
return_ACPI_STATUS (AE_AML_ERROR);
}
}
else
{
OutputStruct->Data.StartDpf.CompatibilityPriority =

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: tbinstal - ACPI table installation and removal
* $Revision: 45 $
* $Revision: 47 $
*
*****************************************************************************/
@ -321,7 +321,7 @@ AcpiTbInitTableDescriptor (
*/
if (ListHead->Pointer)
{
return_ACPI_STATUS (AE_EXIST);
return_ACPI_STATUS (AE_ALREADY_EXISTS);
}
TableDesc->Count = 1;
@ -659,7 +659,6 @@ AcpiTbUninstallTable (
}
return_PTR (NextDesc);
}

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: tbutils - Table manipulation utilities
* $Revision: 42 $
* $Revision: 43 $
*
*****************************************************************************/
@ -172,87 +172,6 @@ AcpiTbHandleToObject (
}
/*******************************************************************************
*
* FUNCTION: AcpiTbSystemTablePointer
*
* PARAMETERS: *Where - Pointer to be examined
*
* RETURN: TRUE if Where is within the AML stream (in one of the ACPI
* system tables such as the DSDT or an SSDT.)
* FALSE otherwise
*
******************************************************************************/
BOOLEAN
AcpiTbSystemTablePointer (
void *Where)
{
UINT32 i;
ACPI_TABLE_DESC *TableDesc;
ACPI_TABLE_HEADER *Table;
/* No function trace, called too often! */
/* Ignore null pointer */
if (!Where)
{
return (FALSE);
}
/* Check for a pointer within the DSDT */
if ((AcpiGbl_DSDT) &&
(IS_IN_ACPI_TABLE (Where, AcpiGbl_DSDT)))
{
return (TRUE);
}
/* Check each of the loaded SSDTs (if any)*/
TableDesc = &AcpiGbl_AcpiTables[ACPI_TABLE_SSDT];
for (i = 0; i < AcpiGbl_AcpiTables[ACPI_TABLE_SSDT].Count; i++)
{
Table = TableDesc->Pointer;
if (IS_IN_ACPI_TABLE (Where, Table))
{
return (TRUE);
}
TableDesc = TableDesc->Next;
}
/* Check each of the loaded PSDTs (if any)*/
TableDesc = &AcpiGbl_AcpiTables[ACPI_TABLE_PSDT];
for (i = 0; i < AcpiGbl_AcpiTables[ACPI_TABLE_PSDT].Count; i++)
{
Table = TableDesc->Pointer;
if (IS_IN_ACPI_TABLE (Where, Table))
{
return (TRUE);
}
TableDesc = TableDesc->Next;
}
/* Pointer does not point into any system table */
return (FALSE);
}
/*******************************************************************************
*
* FUNCTION: AcpiTbValidateTableHeader

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: utalloc - local cache and memory allocation routines
* $Revision: 106 $
* $Revision: 109 $
*
*****************************************************************************/
@ -590,40 +590,30 @@ AcpiUtDumpAllocations (
NATIVE_CHAR *Module)
{
ACPI_DEBUG_MEM_BLOCK *Element;
UINT32 i;
UINT32 NumOutstanding = 0;
FUNCTION_TRACE ("UtDumpAllocations");
Element = AcpiGbl_MemoryLists[0].ListHead;
if (Element == NULL)
{
ACPI_DEBUG_PRINT ((ACPI_DB_OK,
"No outstanding allocations.\n"));
return_VOID;
}
/*
* Walk the allocation list.
*/
AcpiUtAcquireMutex (ACPI_MTX_MEMORY);
ACPI_DEBUG_PRINT ((ACPI_DB_OK,
"Outstanding allocations:\n"));
for (i = 1; ; i++) /* Just a counter */
Element = AcpiGbl_MemoryLists[0].ListHead;
while (Element)
{
if ((Element->Component & Component) &&
((Module == NULL) || (0 == STRCMP (Module, Element->Module))))
{
/* Ignore allocated objects that are in a cache */
if (((ACPI_OPERAND_OBJECT *)(&Element->UserSpace))->Common.Type != ACPI_CACHED_OBJECT)
{
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK,
"%p Len %04X %9.9s-%d",
AcpiOsPrintf ("%p Len %04X %9.9s-%d ",
&Element->UserSpace, Element->Size, Element->Module,
Element->Line));
Element->Line);
/* Most of the elements will be internal objects. */
@ -631,90 +621,86 @@ AcpiUtDumpAllocations (
(&Element->UserSpace))->Common.DataType)
{
case ACPI_DESC_TYPE_INTERNAL:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK,
" ObjType %12.12s R%d",
AcpiOsPrintf ("ObjType %12.12s R%d",
AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *)(&Element->UserSpace))->Common.Type),
((ACPI_OPERAND_OBJECT *)(&Element->UserSpace))->Common.ReferenceCount));
((ACPI_OPERAND_OBJECT *)(&Element->UserSpace))->Common.ReferenceCount);
break;
case ACPI_DESC_TYPE_PARSER:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK,
" ParseObj Opcode %04X",
((ACPI_PARSE_OBJECT *)(&Element->UserSpace))->Opcode));
AcpiOsPrintf ("ParseObj Opcode %04X",
((ACPI_PARSE_OBJECT *)(&Element->UserSpace))->Opcode);
break;
case ACPI_DESC_TYPE_NAMED:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK,
" Node %4.4s",
(char*)&((ACPI_NAMESPACE_NODE *)(&Element->UserSpace))->Name));
AcpiOsPrintf ("Node %4.4s",
(char *) &((ACPI_NAMESPACE_NODE *)(&Element->UserSpace))->Name);
break;
case ACPI_DESC_TYPE_STATE:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK,
" Untyped StateObj"));
AcpiOsPrintf ("Untyped StateObj");
break;
case ACPI_DESC_TYPE_STATE_UPDATE:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK,
" UPDATE StateObj"));
AcpiOsPrintf ("UPDATE StateObj");
break;
case ACPI_DESC_TYPE_STATE_PACKAGE:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK,
" PACKAGE StateObj"));
AcpiOsPrintf ("PACKAGE StateObj");
break;
case ACPI_DESC_TYPE_STATE_CONTROL:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK,
" CONTROL StateObj"));
AcpiOsPrintf ("CONTROL StateObj");
break;
case ACPI_DESC_TYPE_STATE_RPSCOPE:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK,
" ROOT-PARSE-SCOPE StateObj"));
AcpiOsPrintf ("ROOT-PARSE-SCOPE StateObj");
break;
case ACPI_DESC_TYPE_STATE_PSCOPE:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK,
" PARSE-SCOPE StateObj"));
AcpiOsPrintf ("PARSE-SCOPE StateObj");
break;
case ACPI_DESC_TYPE_STATE_WSCOPE:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK,
" WALK-SCOPE StateObj"));
AcpiOsPrintf ("WALK-SCOPE StateObj");
break;
case ACPI_DESC_TYPE_STATE_RESULT:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK,
" RESULT StateObj"));
AcpiOsPrintf ("RESULT StateObj");
break;
case ACPI_DESC_TYPE_STATE_NOTIFY:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK,
" NOTIFY StateObj"));
AcpiOsPrintf ("NOTIFY StateObj");
break;
case ACPI_DESC_TYPE_STATE_THREAD:
AcpiOsPrintf ("THREAD StateObj");
break;
}
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK, "\n"));
AcpiOsPrintf ( "\n");
NumOutstanding++;
}
}
if (Element->Next == NULL)
{
break;
}
Element = Element->Next;
}
AcpiUtReleaseMutex (ACPI_MTX_MEMORY);
ACPI_DEBUG_PRINT ((ACPI_DB_OK,
"Total number of unfreed allocations = %d(%X)\n", i,i));
/* Print summary */
if (!NumOutstanding)
{
ACPI_DEBUG_PRINT ((ACPI_DB_OK,
"No outstanding allocations.\n"));
}
else
{
ACPI_DEBUG_PRINT ((ACPI_DB_OK,
"%d(%X) Outstanding allocations\n",
NumOutstanding, NumOutstanding));
}
return_VOID;
}

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: utcopy - Internal to external object translation utilities
* $Revision: 83 $
* $Revision: 86 $
*
*****************************************************************************/
@ -332,7 +332,7 @@ AcpiUtCopyIelementToEelement (
case ACPI_COPY_TYPE_SIMPLE:
/*
* This is a simple or null object -- get the size
* This is a simple or null object
*/
Status = AcpiUtCopyIsimpleToEsimple (SourceObject,
TargetObject, Info->FreeSpace, &ObjectSpace);
@ -340,9 +340,9 @@ AcpiUtCopyIelementToEelement (
{
return (Status);
}
break;
case ACPI_COPY_TYPE_PACKAGE:
/*
@ -365,14 +365,14 @@ AcpiUtCopyIelementToEelement (
TargetObject->Package.Count * sizeof (ACPI_OBJECT));
break;
default:
return (AE_BAD_PARAMETER);
break;
}
Info->FreeSpace += ObjectSpace;
Info->Length += ObjectSpace;
return (Status);
}
@ -423,12 +423,10 @@ AcpiUtCopyIpackageToEpackage (
Info.NumPackages = 1;
Info.FreeSpace = Buffer + ROUND_UP_TO_NATIVE_WORD (sizeof (ACPI_OBJECT));
ExternalObject->Type = InternalObject->Common.Type;
ExternalObject->Package.Count = InternalObject->Package.Count;
ExternalObject->Package.Elements = (ACPI_OBJECT *) Info.FreeSpace;
/*
* Build an array of ACPI_OBJECTS in the buffer
* and move the free space past it
@ -436,16 +434,14 @@ AcpiUtCopyIpackageToEpackage (
Info.FreeSpace += ExternalObject->Package.Count *
ROUND_UP_TO_NATIVE_WORD (sizeof (ACPI_OBJECT));
Status = AcpiUtWalkPackageTree (InternalObject, ExternalObject,
AcpiUtCopyIelementToEelement, &Info);
*SpaceUsed = Info.Length;
return_ACPI_STATUS (Status);
}
/*******************************************************************************
*
* FUNCTION: AcpiUtCopyIobjectToEobject
@ -480,7 +476,6 @@ AcpiUtCopyIobjectToEobject (
Status = AcpiUtCopyIpackageToEpackage (InternalObject,
RetBuffer->Pointer, &RetBuffer->Length);
}
else
{
/*
@ -529,7 +524,6 @@ AcpiUtCopyEsimpleToIsimple (
FUNCTION_TRACE ("UtCopyEsimpleToIsimple");
/*
* Simple types supported are: String, Buffer, Integer
*/
@ -568,8 +562,8 @@ AcpiUtCopyEsimpleToIsimple (
return_ACPI_STATUS (AE_NO_MEMORY);
}
MEMCPY (InternalObject->String.Pointer,
ExternalObject->String.Pointer,
MEMCPY (InternalObject->String.Pointer,
ExternalObject->String.Pointer,
ExternalObject->String.Length);
InternalObject->String.Length = ExternalObject->String.Length;
@ -584,8 +578,8 @@ AcpiUtCopyEsimpleToIsimple (
return_ACPI_STATUS (AE_NO_MEMORY);
}
MEMCPY (InternalObject->Buffer.Pointer,
ExternalObject->Buffer.Pointer,
MEMCPY (InternalObject->Buffer.Pointer,
ExternalObject->Buffer.Pointer,
ExternalObject->Buffer.Length);
InternalObject->Buffer.Length = ExternalObject->Buffer.Length;
@ -598,7 +592,6 @@ AcpiUtCopyEsimpleToIsimple (
break;
}
*RetInternalObject = InternalObject;
return_ACPI_STATUS (AE_OK);
}
@ -702,18 +695,8 @@ AcpiUtCopyEobjectToIobject (
if (ExternalObject->Type == ACPI_TYPE_PACKAGE)
{
/*
* Package objects contain other objects (which can be objects)
* buildpackage does it all
*
* TBD: Package conversion must be completed and tested
* NOTE: this code converts packages as input parameters to
* control methods only. This is a very, very rare case.
* Packages as external input to control methods are not supported,
*/
/*
Status = AcpiUtCopyEpackageToIpackage(InternalObject,
RetBuffer->Pointer,
&RetBuffer->Length);
*/
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
"Packages as parameters not implemented!\n"));
@ -789,6 +772,7 @@ AcpiUtCopyIelementToIelement (
case 1:
/*
* This object is a package - go down another nesting level
* Create and build the package object
@ -796,8 +780,6 @@ AcpiUtCopyIelementToIelement (
TargetObject = AcpiUtCreateInternalObject (ACPI_TYPE_PACKAGE);
if (!TargetObject)
{
/* TBD: must delete package created up to this point */
return (AE_NO_MEMORY);
}
@ -814,11 +796,12 @@ AcpiUtCopyIelementToIelement (
*ThisTargetPtr = TargetObject;
break;
default:
return (AE_BAD_PARAMETER);
break;
}
return (Status);
}
@ -858,8 +841,6 @@ AcpiUtCopyIpackageToIpackage (
*/
DestObj->Package.Elements = ACPI_MEM_CALLOCATE ((SourceObj->Package.Count + 1) *
sizeof (void *));
DestObj->Package.NextElement = DestObj->Package.Elements;
if (!DestObj->Package.Elements)
{
REPORT_ERROR (
@ -867,9 +848,22 @@ AcpiUtCopyIpackageToIpackage (
return_ACPI_STATUS (AE_NO_MEMORY);
}
/* Init */
DestObj->Package.NextElement = DestObj->Package.Elements;
/*
* Copy the package element-by-element by walking the package "tree".
* This handles nested packages of arbitrary depth.
*/
Status = AcpiUtWalkPackageTree (SourceObj, DestObj,
AcpiUtCopyIelementToIelement, WalkState);
if (ACPI_FAILURE (Status))
{
/* On failure, delete the destination package object */
AcpiUtRemoveReference (DestObj);
}
return_ACPI_STATUS (Status);
}

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: utdebug - Debug print routines
* $Revision: 90 $
* $Revision: 91 $
*
*****************************************************************************/
@ -127,7 +127,6 @@ char *AcpiGbl_FnEntryStr = "----Entry";
char *AcpiGbl_FnExitStr = "----Exit-";
#ifdef ACPI_DEBUG
@ -573,8 +572,6 @@ AcpiUtPtrExit (
#endif
/*****************************************************************************
*
* FUNCTION: AcpiUtDumpBuffer

View File

@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: utdelete - object deletion and reference count utilities
* $Revision: 81 $
* $Revision: 83 $
*
******************************************************************************/
@ -145,6 +145,7 @@ AcpiUtDeleteInternalObj (
{
void *ObjPointer = NULL;
ACPI_OPERAND_OBJECT *HandlerDesc;
ACPI_OPERAND_OBJECT *SecondDesc;
FUNCTION_TRACE_PTR ("UtDeleteInternalObj", Object);
@ -234,7 +235,6 @@ AcpiUtDeleteInternalObj (
AcpiOsDeleteSemaphore (Object->Method.Semaphore);
Object->Method.Semaphore = NULL;
}
break;
@ -242,7 +242,8 @@ AcpiUtDeleteInternalObj (
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "***** Region %p\n", Object));
if (Object->Region.Extra)
SecondDesc = AcpiNsGetSecondaryObject (Object);
if (SecondDesc)
{
/*
* Free the RegionContext if and only if the handler is one of the
@ -253,12 +254,12 @@ AcpiUtDeleteInternalObj (
if ((HandlerDesc) &&
(HandlerDesc->AddrHandler.Hflags == ADDR_HANDLER_DEFAULT_INSTALLED))
{
ObjPointer = Object->Region.Extra->Extra.RegionContext;
ObjPointer = SecondDesc->Extra.RegionContext;
}
/* Now we can free the Extra object */
AcpiUtDeleteObjectDesc (Object->Region.Extra);
AcpiUtDeleteObjectDesc (SecondDesc);
}
break;
@ -267,12 +268,14 @@ AcpiUtDeleteInternalObj (
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "***** Buffer Field %p\n", Object));
if (Object->BufferField.Extra)
SecondDesc = AcpiNsGetSecondaryObject (Object);
if (SecondDesc)
{
AcpiUtDeleteObjectDesc (Object->BufferField.Extra);
AcpiUtDeleteObjectDesc (SecondDesc);
}
break;
default:
break;
}
@ -610,7 +613,7 @@ AcpiUtUpdateObjectReference (
case INTERNAL_TYPE_BANK_FIELD:
Status = AcpiUtCreateUpdateStateAndPush (
Object->BankField.BankRegisterObj, Action, &StateList);
Object->BankField.BankObj, Action, &StateList);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: uteval - Object evaluation
* $Revision: 31 $
* $Revision: 34 $
*
*****************************************************************************/
@ -250,7 +250,6 @@ AcpiUtExecute_HID (
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "_HID on %4.4s was not found\n",
(char*)&DeviceNode->Name));
}
else
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "_HID on %4.4s failed %s\n",
@ -280,7 +279,6 @@ AcpiUtExecute_HID (
"Type returned from _HID not a number or string: %s(%X) \n",
AcpiUtGetTypeName (ObjDesc->Common.Type), ObjDesc->Common.Type));
}
else
{
if (ObjDesc->Common.Type == ACPI_TYPE_INTEGER)
@ -289,7 +287,6 @@ AcpiUtExecute_HID (
AcpiExEisaIdToString ((UINT32) ObjDesc->Integer.Value, Hid->Buffer);
}
else
{
/* Copy the String HID from the returned object */
@ -298,6 +295,103 @@ AcpiUtExecute_HID (
}
}
/* On exit, we must delete the return object */
AcpiUtRemoveReference (ObjDesc);
return_ACPI_STATUS (Status);
}
/*******************************************************************************
*
* FUNCTION: AcpiUtExecute_CID
*
* PARAMETERS: DeviceNode - Node for the device
* *Cid - Where the CID is returned
*
* RETURN: Status
*
* DESCRIPTION: Executes the _CID control method that returns one or more
* compatible hardware IDs for the device.
*
* NOTE: Internal function, no parameter validation
*
******************************************************************************/
ACPI_STATUS
AcpiUtExecute_CID (
ACPI_NAMESPACE_NODE *DeviceNode,
ACPI_DEVICE_ID *Cid)
{
ACPI_OPERAND_OBJECT *ObjDesc;
ACPI_STATUS Status;
FUNCTION_TRACE ("UtExecute_CID");
/* Execute the method */
Status = AcpiNsEvaluateRelative (DeviceNode,
METHOD_NAME__CID, NULL, &ObjDesc);
if (ACPI_FAILURE (Status))
{
if (Status == AE_NOT_FOUND)
{
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "_CID on %4.4s was not found\n",
(char *)&DeviceNode->Name));
}
else
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "_CID on %4.4s failed %s\n",
(char *)&DeviceNode->Name, AcpiFormatException (Status)));
}
return_ACPI_STATUS (Status);
}
/* Did we get a return object? */
if (!ObjDesc)
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No object was returned from _CID\n"));
return_ACPI_STATUS (AE_TYPE);
}
/*
* A _CID can return either a single compatible ID or a package of compatible
* IDs. Each compatible ID can be a Number (32 bit compressed EISA ID) or
* string (PCI ID format, e.g. "PCI\VEN_vvvv&DEV_dddd&SUBSYS_ssssssss").
*/
switch (ObjDesc->Common.Type)
{
case ACPI_TYPE_INTEGER:
/* Convert the Numeric CID to string */
AcpiExEisaIdToString ((UINT32) ObjDesc->Integer.Value, Cid->Buffer);
break;
case ACPI_TYPE_STRING:
/* Copy the String CID from the returned object */
STRNCPY(Cid->Buffer, ObjDesc->String.Pointer, sizeof(Cid->Buffer));
break;
case ACPI_TYPE_PACKAGE:
/* TBD: Parse package elements; need different return struct, etc. */
break;
default:
Status = AE_TYPE;
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
"Type returned from _CID not a number, string, or package: %s(%X) \n",
AcpiUtGetTypeName (ObjDesc->Common.Type), ObjDesc->Common.Type));
break;
}
/* On exit, we must delete the return object */
@ -346,7 +440,6 @@ AcpiUtExecute_UID (
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "_UID on %4.4s was not found\n",
(char*)&DeviceNode->Name));
}
else
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
@ -377,7 +470,6 @@ AcpiUtExecute_UID (
"Type returned from _UID was not a number or string: %X \n",
ObjDesc->Common.Type));
}
else
{
if (ObjDesc->Common.Type == ACPI_TYPE_INTEGER)
@ -386,7 +478,6 @@ AcpiUtExecute_UID (
AcpiExUnsignedIntegerToString (ObjDesc->Integer.Value, Uid->Buffer);
}
else
{
/* Copy the String UID from the returned object */
@ -472,7 +563,6 @@ AcpiUtExecute_STA (
"Type returned from _STA was not a number: %X \n",
ObjDesc->Common.Type));
}
else
{
/* Extract the status flags */

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: utglobal - Global variables for the ACPI subsystem
* $Revision: 133 $
* $Revision: 136 $
*
*****************************************************************************/
@ -234,10 +234,9 @@ BOOLEAN AcpiGbl_MethodExecuting = FALSE;
/* System flags */
UINT32 AcpiGbl_SystemFlags = 0;
UINT32 AcpiGbl_StartupFlags = 0;
/* System starts unitialized! */
/* System starts uninitialized */
BOOLEAN AcpiGbl_Shutdown = TRUE;
@ -324,7 +323,8 @@ const UINT8 AcpiGbl_NsProperties[] =
NSP_NEWSCOPE, /* 32 Scope */
NSP_LOCAL, /* 33 DefAny */
NSP_NORMAL, /* 34 Extra */
NSP_NORMAL /* 35 Invalid */
NSP_NORMAL, /* 35 Data */
NSP_NORMAL /* 36 Invalid */
};
@ -469,7 +469,8 @@ static const NATIVE_CHAR *AcpiGbl_NsTypeNames[] = /* printable names of AC
/* 32 */ "Scope",
/* 33 */ "DefAny",
/* 34 */ "Extra",
/* 35 */ "Invalid"
/* 35 */ "Data",
/* 36 */ "Invalid"
};
@ -501,7 +502,7 @@ AcpiUtGetTypeName (
/* Region type decoding */
const NATIVE_CHAR *AcpiGbl_RegionTypes[NUM_REGION_TYPES] =
const NATIVE_CHAR *AcpiGbl_RegionTypes[ACPI_NUM_PREDEFINED_REGIONS] =
{
"SystemMemory",
"SystemIO",
@ -530,12 +531,12 @@ AcpiUtGetRegionName (
UINT8 SpaceId)
{
if (SpaceId >= USER_REGION_BEGIN)
if (SpaceId >= ACPI_USER_REGION_BEGIN)
{
return ("UserDefinedRegion");
}
else if (SpaceId >= NUM_REGION_TYPES)
else if (SpaceId >= ACPI_NUM_PREDEFINED_REGIONS)
{
return ("InvalidSpaceID");
}
@ -573,9 +574,8 @@ const NATIVE_CHAR *AcpiGbl_AccessTypes[NUM_ACCESS_TYPES] =
"ByteAcc",
"WordAcc",
"DWordAcc",
"BlockAcc",
"SMBSendRecvAcc",
"SMBQuickAcc"
"QWordAcc",
"BufferAcc",
};
@ -739,15 +739,6 @@ AcpiUtInitGlobals (
AcpiGbl_AcpiTables[i].Count = 0;
}
/* Address Space handler array */
for (i = 0; i < ACPI_NUM_ADDRESS_SPACES; i++)
{
AcpiGbl_AddressSpaces[i].Handler = NULL;
AcpiGbl_AddressSpaces[i].Context = NULL;
}
/* Mutex locked flags */
for (i = 0; i < NUM_MTX; i++)
@ -777,8 +768,6 @@ AcpiUtInitGlobals (
/* Miscellaneous variables */
AcpiGbl_SystemFlags = 0;
AcpiGbl_StartupFlags = 0;
AcpiGbl_RsdpOriginalLocation = 0;
AcpiGbl_CmSingleStep = FALSE;
AcpiGbl_DbTerminateThreads = FALSE;

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: utinit - Common ACPI subsystem initialization
* $Revision: 102 $
* $Revision: 103 $
*
*****************************************************************************/
@ -121,8 +121,6 @@
#include "achware.h"
#include "acnamesp.h"
#include "acevents.h"
#include "acparser.h"
#include "acdispat.h"
#define _COMPONENT ACPI_UTILITIES
MODULE_NAME ("utinit")
@ -322,7 +320,6 @@ AcpiUtSubsystemShutdown (void)
AcpiGbl_Shutdown = TRUE;
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Shutting down ACPI Subsystem...\n"));
/* Close the Namespace */
AcpiNsTerminate ();
@ -335,17 +332,9 @@ AcpiUtSubsystemShutdown (void)
AcpiUtTerminate ();
/* Flush the local cache(s) */
/* Purge the local caches */
AcpiUtDeleteGenericStateCache ();
AcpiUtDeleteObjectCache ();
AcpiDsDeleteWalkStateCache ();
/* Close the Parser */
/* TBD: [Restructure] AcpiPsTerminate () */
AcpiPsDeleteParseCache ();
AcpiPurgeCachedObjects ();
/* Debug only - display leftover memory allocation, if any */

View File

@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: utmath - Integer math support routines
* $Revision: 7 $
* $Revision: 8 $
*
******************************************************************************/
@ -129,7 +129,7 @@
* library is not available.
*/
#ifndef ACPI_USE_NATIVE_DIVIDE
#ifndef ACPI_USE_NATIVE_DIVIDE
/*******************************************************************************
*
* FUNCTION: AcpiUtShortDivide
@ -175,9 +175,9 @@ AcpiUtShortDivide (
* The quotient is 64 bits, the remainder is always 32 bits,
* and is generated by the second divide.
*/
ACPI_DIV_64_BY_32 (0, Dividend.Part.Hi, Divisor,
ACPI_DIV_64_BY_32 (0, Dividend.Part.Hi, Divisor,
Quotient.Part.Hi, Remainder32);
ACPI_DIV_64_BY_32 (Remainder32, Dividend.Part.Lo, Divisor,
ACPI_DIV_64_BY_32 (Remainder32, Dividend.Part.Lo, Divisor,
Quotient.Part.Lo, Remainder32);
/* Return only what was requested */
@ -253,9 +253,9 @@ AcpiUtDivide (
* The quotient is 64 bits, the remainder is always 32 bits,
* and is generated by the second divide.
*/
ACPI_DIV_64_BY_32 (0, Dividend.Part.Hi, Divisor.Part.Lo,
ACPI_DIV_64_BY_32 (0, Dividend.Part.Hi, Divisor.Part.Lo,
Quotient.Part.Hi, Partial1);
ACPI_DIV_64_BY_32 (Partial1, Dividend.Part.Lo, Divisor.Part.Lo,
ACPI_DIV_64_BY_32 (Partial1, Dividend.Part.Lo, Divisor.Part.Lo,
Quotient.Part.Lo, Remainder.Part.Lo);
}
@ -273,18 +273,18 @@ AcpiUtDivide (
do
{
ACPI_SHIFT_RIGHT_64 (NormalizedDivisor.Part.Hi,
ACPI_SHIFT_RIGHT_64 (NormalizedDivisor.Part.Hi,
NormalizedDivisor.Part.Lo);
ACPI_SHIFT_RIGHT_64 (NormalizedDividend.Part.Hi,
ACPI_SHIFT_RIGHT_64 (NormalizedDividend.Part.Hi,
NormalizedDividend.Part.Lo);
} while (NormalizedDivisor.Part.Hi != 0);
/* Partial divide */
ACPI_DIV_64_BY_32 (NormalizedDividend.Part.Hi,
NormalizedDividend.Part.Lo,
NormalizedDivisor.Part.Lo,
ACPI_DIV_64_BY_32 (NormalizedDividend.Part.Hi,
NormalizedDividend.Part.Lo,
NormalizedDivisor.Part.Lo,
Quotient.Part.Lo, Partial1);
/*
@ -351,8 +351,8 @@ AcpiUtDivide (
* DESCRIPTION: Native versions of the UtDivide functions. Use these if either
* 1) The target is a 64-bit platform and therefore 64-bit
* integer math is supported directly by the machine.
* 2) The target is a 32-bit or 16-bit platform, and the
* double-precision integer math library is available to
* 2) The target is a 32-bit or 16-bit platform, and the
* double-precision integer math library is available to
* perform the divide.
*
******************************************************************************/

View File

@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: utmisc - common utility procedures
* $Revision: 52 $
* $Revision: 56 $
*
******************************************************************************/
@ -130,7 +130,6 @@
MODULE_NAME ("utmisc")
/*******************************************************************************
*
* FUNCTION: AcpiUtValidAcpiName
@ -747,6 +746,46 @@ AcpiUtCreateGenericState (void)
}
/*******************************************************************************
*
* FUNCTION: AcpiUtCreateThreadState
*
* PARAMETERS: None
*
* RETURN: Thread State
*
* DESCRIPTION: Create a "Thread State" - a flavor of the generic state used
* to track per-thread info during method execution
*
******************************************************************************/
ACPI_THREAD_STATE *
AcpiUtCreateThreadState (
void)
{
ACPI_GENERIC_STATE *State;
FUNCTION_TRACE ("UtCreateThreadState");
/* Create the generic state object */
State = AcpiUtCreateGenericState ();
if (!State)
{
return_PTR (NULL);
}
/* Init fields specific to the update struct */
State->Common.DataType = ACPI_DESC_TYPE_STATE_THREAD;
State->Thread.ThreadId = AcpiOsGetThreadId ();
return_PTR ((ACPI_THREAD_STATE *) State);
}
/*******************************************************************************
*
* FUNCTION: AcpiUtCreateUpdateState
@ -779,7 +818,7 @@ AcpiUtCreateUpdateState (
State = AcpiUtCreateGenericState ();
if (!State)
{
return (NULL);
return_PTR (NULL);
}
/* Init fields specific to the update struct */
@ -823,7 +862,7 @@ AcpiUtCreatePkgState (
State = AcpiUtCreateGenericState ();
if (!State)
{
return (NULL);
return_PTR (NULL);
}
/* Init fields specific to the update struct */
@ -866,7 +905,7 @@ AcpiUtCreateControlState (
State = AcpiUtCreateGenericState ();
if (!State)
{
return (NULL);
return_PTR (NULL);
}
@ -1077,7 +1116,7 @@ AcpiUtWalkPackageTree (
State->Pkg.SourceObject->Package.Elements[ThisIndex];
/*
* Check for
* Check for:
* 1) An uninitialized package element. It is completely
* legal to declare a package and leave it uninitialized
* 2) Not an internal object - can be a namespace node instead
@ -1095,8 +1134,6 @@ AcpiUtWalkPackageTree (
State, Context);
if (ACPI_FAILURE (Status))
{
/* TBD: must delete package created up to this point */
return_ACPI_STATUS (Status);
}
@ -1113,7 +1150,6 @@ AcpiUtWalkPackageTree (
AcpiUtDeleteGenericState (State);
State = AcpiUtPopGenericState (&StateList);
/* Finished when there are no more states */
if (!State)
@ -1133,35 +1169,26 @@ AcpiUtWalkPackageTree (
State->Pkg.Index++;
}
}
else
{
/* This is a sub-object of type package */
/* This is a subobject of type package */
Status = WalkCallback (ACPI_COPY_TYPE_PACKAGE, ThisSourceObj,
State, Context);
if (ACPI_FAILURE (Status))
{
/* TBD: must delete package created up to this point */
return_ACPI_STATUS (Status);
}
/*
* The callback above returned a new target package object.
*/
/*
* Push the current state and create a new one
* The callback above returned a new target package object.
*/
AcpiUtPushGenericState (&StateList, State);
State = AcpiUtCreatePkgState (ThisSourceObj,
State->Pkg.ThisTargetObj, 0);
if (!State)
{
/* TBD: must delete package created up to this point */
return_ACPI_STATUS (AE_NO_MEMORY);
}
}
@ -1169,7 +1196,7 @@ AcpiUtWalkPackageTree (
/* We should never get here */
return (AE_AML_INTERNAL);
return_ACPI_STATUS (AE_AML_INTERNAL);
}

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: utobject - ACPI object create/delete/size/cache routines
* $Revision: 57 $
* $Revision: 61 $
*
*****************************************************************************/
@ -157,6 +157,7 @@ AcpiUtCreateInternalObjectDbg (
ACPI_OBJECT_TYPE8 Type)
{
ACPI_OPERAND_OBJECT *Object;
ACPI_OPERAND_OBJECT *SecondObject;
FUNCTION_TRACE_STR ("UtCreateInternalObjectDbg", AcpiUtGetTypeName (Type));
@ -167,11 +168,32 @@ AcpiUtCreateInternalObjectDbg (
Object = AcpiUtAllocateObjectDescDbg (ModuleName, LineNumber, ComponentId);
if (!Object)
{
/* Allocation failure */
return_PTR (NULL);
}
switch (Type)
{
case ACPI_TYPE_REGION:
case ACPI_TYPE_BUFFER_FIELD:
/* These types require a secondary object */
SecondObject = AcpiUtAllocateObjectDescDbg (ModuleName, LineNumber, ComponentId);
if (!SecondObject)
{
AcpiUtDeleteObjectDesc (Object);
return_PTR (NULL);
}
SecondObject->Common.Type = INTERNAL_TYPE_EXTRA;
SecondObject->Common.ReferenceCount = 1;
/* Link the second object to the first */
Object->Common.NextObject = SecondObject;
break;
}
/* Save the object type in the object descriptor */
Object->Common.Type = Type;
@ -355,7 +377,6 @@ AcpiUtDeleteObjectCache (
}
/*******************************************************************************
*
* FUNCTION: AcpiUtGetSimpleObjectSize
@ -578,6 +599,10 @@ AcpiUtGetPackageObjectSize (
Status = AcpiUtWalkPackageTree (InternalObject, NULL,
AcpiUtGetElementLength, &Info);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
/*
* We have handled all of the objects in all levels of the package.

View File

@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: utxface - External interfaces for "global" ACPI functions
* $Revision: 82 $
* $Revision: 85 $
*
*****************************************************************************/
@ -125,6 +125,8 @@
#include "amlcode.h"
#include "acdebug.h"
#include "acexcep.h"
#include "acparser.h"
#include "acdispat.h"
#define _COMPONENT ACPI_UTILITIES
@ -295,7 +297,6 @@ AcpiEnableSubsystem (
}
}
/*
* Initialize all device objects in the namespace
* This runs the _STA and _INI methods.
@ -311,7 +312,6 @@ AcpiEnableSubsystem (
}
}
/*
* Initialize the objects that remain uninitialized. This
* runs the executable AML that is part of the declaration of OpRegions
@ -328,8 +328,14 @@ AcpiEnableSubsystem (
}
}
AcpiGbl_StartupFlags |= ACPI_INITIALIZED_OK;
/*
* Empty the caches (delete the cached objects) on the assumption that
* the table load filled them up more than they will be at runtime --
* thus wasting non-paged memory.
*/
Status = AcpiPurgeCachedObjects ();
AcpiGbl_StartupFlags |= ACPI_INITIALIZED_OK;
return_ACPI_STATUS (Status);
}
@ -356,10 +362,6 @@ AcpiTerminate (void)
DEBUGGER_EXEC(AcpiGbl_DbTerminateThreads = TRUE);
/* TBD: [Investigate] This is no longer needed?*/
/* AcpiUtReleaseMutex (ACPI_MTX_DEBUG_CMD_READY); */
/* Shutdown and free all resources */
AcpiUtSubsystemShutdown ();
@ -474,7 +476,7 @@ AcpiGetSystemInfo (
/* System flags (ACPI capabilities) */
InfoPtr->Flags = AcpiGbl_SystemFlags;
InfoPtr->Flags = SYS_MODE_ACPI;
/* Timer resolution - 24 or 32 bits */
if (!AcpiGbl_FADT)
@ -512,3 +514,28 @@ AcpiGetSystemInfo (
}
/*****************************************************************************
*
* FUNCTION: AcpiPurgeCachedObjects
*
* PARAMETERS: None
*
* RETURN: Status
*
* DESCRIPTION: Empty all caches (delete the cached objects)
*
****************************************************************************/
ACPI_STATUS
AcpiPurgeCachedObjects (void)
{
FUNCTION_TRACE ("AcpiPurgeCachedObjects");
AcpiUtDeleteGenericStateCache ();
AcpiUtDeleteObjectCache ();
AcpiDsDeleteWalkStateCache ();
AcpiPsDeleteParseCache ();
return_ACPI_STATUS (AE_OK);
}