This commit was generated by cvs2svn to compensate for changes in r128212,
which included commits to RCS files with non-trunk default branches.
This commit is contained in:
commit
565e13e588
@ -1,3 +1,110 @@
|
||||
----------------------------------------
|
||||
02 April 2004. Summary of changes for version 20040402:
|
||||
|
||||
1) ACPI CA Core Subsystem:
|
||||
|
||||
Fixed an interpreter problem where an indirect store through an
|
||||
ArgX parameter was incorrectly applying the "implicit conversion
|
||||
rules" during the store. From the ACPI specification: "If the
|
||||
target is a method local or argument (LocalX or ArgX), no
|
||||
conversion is performed and the result is stored directly to the
|
||||
target". The new behavior is to disable implicit conversion
|
||||
during ALL stores to an ArgX.
|
||||
|
||||
Changed the behavior of the _PRW method scan to ignore any and
|
||||
all errors returned by a given _PRW. This prevents the scan from
|
||||
aborting from the failure of any single _PRW.
|
||||
|
||||
Moved the runtime configuration parameters from the global init
|
||||
procedure to static variables in acglobal.h. This will allow the
|
||||
host to override the default values easily.
|
||||
|
||||
Code and Data Size: Current and previous core subsystem library
|
||||
sizes are shown below. These are the code and data sizes for the
|
||||
acpica.lib produced by the Microsoft Visual C++ 6.0 compiler, and
|
||||
these values do not include any ACPI driver or OSPM code. The
|
||||
debug version of the code includes the debug output trace
|
||||
mechanism and has a much larger code and data size. Note that
|
||||
these values will vary depending on the efficiency of the
|
||||
compiler and the compiler options used during generation.
|
||||
|
||||
Previous Release:
|
||||
Non-Debug Version: 76.9K Code, 11.4K Data, 88.3K Total
|
||||
Debug Version: 160.8K Code, 66.1K Data, 226.9K Total
|
||||
Current Release:
|
||||
Non-Debug Version: 77.0K Code, 11.4K Data, 88.4K Total
|
||||
Debug Version: 161.0K Code, 66.3K Data, 227.3K Total
|
||||
|
||||
|
||||
2) iASL Compiler/Disassembler:
|
||||
|
||||
iASL now fully disassembles SSDTs. However, External()
|
||||
statements are not generated automatically for unresolved symbols
|
||||
at this time. This is a planned feature for future
|
||||
implementation.
|
||||
|
||||
Fixed a scoping problem in the disassembler that occurs when the
|
||||
type of the target of a Scope() operator is overridden. This
|
||||
problem caused an incorrectly nested internal namespace to be
|
||||
constructed.
|
||||
|
||||
Any warnings or errors that are emitted during disassembly are
|
||||
now commented out automatically so that the resulting file can be
|
||||
recompiled without any hand editing.
|
||||
|
||||
----------------------------------------
|
||||
26 March 2004. Summary of changes for version 20040326:
|
||||
|
||||
1) ACPI CA Core Subsystem:
|
||||
|
||||
Implemented support for "wake" GPEs via interaction between GPEs
|
||||
and the _PRW methods. Every GPE that is pointed to by one or
|
||||
more _PRWs is identified as a WAKE GPE and by default will no
|
||||
longer be enabled at runtime. Previously, we were blindly
|
||||
enabling all GPEs with a corresponding _Lxx or _Exx method - but
|
||||
most of these turn out to be WAKE GPEs anyway. We believe this
|
||||
has been the cause of thousands of "spurious" GPEs on some
|
||||
systems.
|
||||
|
||||
This new GPE behavior is can be reverted to the original behavior
|
||||
(enable ALL GPEs at runtime) via a runtime flag.
|
||||
|
||||
Fixed a problem where aliased control methods could not access
|
||||
objects properly. The proper scope within the namespace was not
|
||||
initialized (transferred to the target of the aliased method)
|
||||
before executing the target method.
|
||||
|
||||
Fixed a potential race condition on internal object deletion on
|
||||
the return object in AcpiEvaluateObject.
|
||||
|
||||
Integrated a fix for resource descriptors where both _MEM and
|
||||
_MTP were being extracted instead of just _MEM. (i.e. bitmask
|
||||
was incorrectly too wide, 0x0F instead of 0x03.)
|
||||
|
||||
Added a special case for ACPI_ROOT_OBJECT in AcpiUtGetNodeName,
|
||||
preventing a fault in some cases.
|
||||
|
||||
Updated Notify() values for debug statements in evmisc.c
|
||||
|
||||
Return proper status from AcpiUtMutexInitialize, not just simply
|
||||
AE_OK.
|
||||
|
||||
Code and Data Size: Current and previous core subsystem library
|
||||
sizes are shown below. These are the code and data sizes for the
|
||||
acpica.lib produced by the Microsoft Visual C++ 6.0 compiler, and
|
||||
these values do not include any ACPI driver or OSPM code. The
|
||||
debug version of the code includes the debug output trace
|
||||
mechanism and has a much larger code and data size. Note that
|
||||
these values will vary depending on the efficiency of the
|
||||
compiler and the compiler options used during generation.
|
||||
|
||||
Previous Release:
|
||||
Non-Debug Version: 76.5K Code, 11.3K Data, 87.8K Total
|
||||
Debug Version: 160.3K Code, 66.0K Data, 226.3K Total
|
||||
Current Release:
|
||||
Non-Debug Version: 76.9K Code, 11.4K Data, 88.3K Total
|
||||
Debug Version: 160.8K Code, 66.1K Data, 226.9K Total
|
||||
|
||||
----------------------------------------
|
||||
11 March 2004. Summary of changes for version 20040311:
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Name: acdisasm.h - AML disassembler
|
||||
* $Revision: 11 $
|
||||
* $Revision: 12 $
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@ -125,6 +125,14 @@
|
||||
#define BLOCK_BRACE 2
|
||||
#define BLOCK_COMMA_LIST 4
|
||||
|
||||
typedef struct acpi_external_list
|
||||
{
|
||||
char *Path;
|
||||
struct acpi_external_list *Next;
|
||||
|
||||
} ACPI_EXTERNAL_LIST;
|
||||
|
||||
extern ACPI_EXTERNAL_LIST *AcpiGbl_ExternalList;
|
||||
extern const char *AcpiGbl_IoDecode[2];
|
||||
extern const char *AcpiGbl_WordDecode[4];
|
||||
extern const char *AcpiGbl_ConsumeDecode[2];
|
||||
@ -473,4 +481,12 @@ AcpiDmVendorSmallDescriptor (
|
||||
UINT32 Level);
|
||||
|
||||
|
||||
/*
|
||||
* dmutils
|
||||
*/
|
||||
|
||||
void
|
||||
AcpiDmAddToExternalList (
|
||||
char *Path);
|
||||
|
||||
#endif /* __ACDISASM_H__ */
|
||||
|
@ -1,7 +1,7 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Name: acglobal.h - Declarations for global variables
|
||||
* $Revision: 148 $
|
||||
* $Revision: 152 $
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@ -119,15 +119,17 @@
|
||||
|
||||
|
||||
/*
|
||||
* Ensure that the globals are actually defined only once.
|
||||
* Ensure that the globals are actually defined and initialized only once.
|
||||
*
|
||||
* The use of these defines allows a single list of globals (here) in order
|
||||
* The use of these macros allows a single list of globals (here) in order
|
||||
* to simplify maintenance of the code.
|
||||
*/
|
||||
#ifdef DEFINE_ACPI_GLOBALS
|
||||
#define ACPI_EXTERN
|
||||
#define ACPI_INIT_GLOBAL(a,b) a=b
|
||||
#else
|
||||
#define ACPI_EXTERN extern
|
||||
#define ACPI_INIT_GLOBAL(a,b) a
|
||||
#endif
|
||||
|
||||
/*
|
||||
@ -137,6 +139,7 @@
|
||||
ACPI_EXTERN ACPI_GENERIC_ADDRESS AcpiGbl_XPm1aEnable;
|
||||
ACPI_EXTERN ACPI_GENERIC_ADDRESS AcpiGbl_XPm1bEnable;
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Debug support
|
||||
@ -152,14 +155,35 @@ extern UINT32 AcpiDbgLayer;
|
||||
|
||||
extern UINT32 AcpiGbl_NestingLevel;
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Runtime configuration
|
||||
* Runtime configuration (static defaults that can be overriden at runtime)
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
ACPI_EXTERN UINT8 AcpiGbl_CreateOsiMethod;
|
||||
ACPI_EXTERN UINT8 AcpiGbl_AllMethodsSerialized;
|
||||
/*
|
||||
* Create the predefined _OSI method in the namespace? Default is TRUE
|
||||
* because ACPI CA is fully compatible with other ACPI implementations.
|
||||
* Changing this will revert ACPI CA (and machine ASL) to pre-OSI behavior.
|
||||
*/
|
||||
ACPI_EXTERN UINT8 ACPI_INIT_GLOBAL (AcpiGbl_CreateOsiMethod, TRUE);
|
||||
|
||||
/*
|
||||
* Automatically serialize ALL control methods? Default is FALSE, meaning
|
||||
* to use the Serialized/NotSerialized method flags on a per method basis.
|
||||
* Only change this if the ASL code is poorly written and cannot handle
|
||||
* reentrancy even though methods are marked "NotSerialized".
|
||||
*/
|
||||
ACPI_EXTERN UINT8 ACPI_INIT_GLOBAL (AcpiGbl_AllMethodsSerialized, FALSE);
|
||||
|
||||
/*
|
||||
* Disable wakeup GPEs during runtime? Default is TRUE because WAKE and
|
||||
* RUNTIME GPEs should never be shared, and WAKE GPEs should typically only
|
||||
* be enabled just before going to sleep.
|
||||
*/
|
||||
ACPI_EXTERN UINT8 ACPI_INIT_GLOBAL (AcpiGbl_LeaveWakeGpesDisabled, TRUE);
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
@ -174,7 +198,6 @@ ACPI_EXTERN UINT8 AcpiGbl_AllMethodsSerialized;
|
||||
*
|
||||
* These tables are single-table only; meaning that there can be at most one
|
||||
* of each in the system. Each global points to the actual table.
|
||||
*
|
||||
*/
|
||||
ACPI_EXTERN UINT32 AcpiGbl_TableFlags;
|
||||
ACPI_EXTERN UINT32 AcpiGbl_RsdtTableCount;
|
||||
@ -269,6 +292,7 @@ extern const char *AcpiGbl_ValidOsiStrings[ACPI_NUM_OSI_STR
|
||||
|
||||
ACPI_EXTERN ACPI_NAMESPACE_NODE AcpiGbl_RootNodeStruct;
|
||||
ACPI_EXTERN ACPI_NAMESPACE_NODE *AcpiGbl_RootNode;
|
||||
ACPI_EXTERN ACPI_NAMESPACE_NODE *AcpiGbl_FadtGpeDevice;
|
||||
|
||||
extern const UINT8 AcpiGbl_NsProperties[NUM_NS_TYPES];
|
||||
extern const ACPI_PREDEFINED_NAMES AcpiGbl_PreDefinedNames [NUM_PREDEFINED_NAMES];
|
||||
|
@ -1,7 +1,7 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Name: achware.h -- hardware specific interfaces
|
||||
* $Revision: 68 $
|
||||
* $Revision: 69 $
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@ -222,11 +222,11 @@ AcpiHwGetGpeStatus (
|
||||
ACPI_EVENT_STATUS *EventStatus);
|
||||
|
||||
ACPI_STATUS
|
||||
AcpiHwDisableNonWakeupGpes (
|
||||
AcpiHwPrepareGpesForSleep (
|
||||
void);
|
||||
|
||||
ACPI_STATUS
|
||||
AcpiHwEnableNonWakeupGpes (
|
||||
AcpiHwRestoreGpesOnWake (
|
||||
void);
|
||||
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Name: acinterp.h - Interpreter subcomponent prototypes and defines
|
||||
* $Revision: 147 $
|
||||
* $Revision: 148 $
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@ -636,8 +636,11 @@ ACPI_STATUS
|
||||
AcpiExStoreObjectToNode (
|
||||
ACPI_OPERAND_OBJECT *SourceDesc,
|
||||
ACPI_NAMESPACE_NODE *Node,
|
||||
ACPI_WALK_STATE *WalkState);
|
||||
ACPI_WALK_STATE *WalkState,
|
||||
UINT8 ImplicitConversion);
|
||||
|
||||
#define ACPI_IMPLICIT_CONVERSION TRUE
|
||||
#define ACPI_NO_IMPLICIT_CONVERSION FALSE
|
||||
|
||||
/*
|
||||
* exstoren
|
||||
|
@ -1,7 +1,7 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Name: aclocal.h - Internal data types used across the ACPI subsystem
|
||||
* $Revision: 198 $
|
||||
* $Revision: 199 $
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@ -447,6 +447,14 @@ typedef struct acpi_gpe_xrupt_info
|
||||
} ACPI_GPE_XRUPT_INFO;
|
||||
|
||||
|
||||
typedef struct acpi_gpe_walk_info
|
||||
{
|
||||
ACPI_NAMESPACE_NODE *GpeDevice;
|
||||
ACPI_GPE_BLOCK_INFO *GpeBlock;
|
||||
|
||||
} ACPI_GPE_WALK_INFO;
|
||||
|
||||
|
||||
typedef ACPI_STATUS (*ACPI_GPE_CALLBACK) (
|
||||
ACPI_GPE_XRUPT_INFO *GpeXruptInfo,
|
||||
ACPI_GPE_BLOCK_INFO *GpeBlock);
|
||||
|
@ -1,7 +1,7 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Name: actypes.h - Common data types for the entire ACPI subsystem
|
||||
* $Revision: 265 $
|
||||
* $Revision: 266 $
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@ -492,7 +492,7 @@ typedef UINT32 ACPI_TABLE_TYPE;
|
||||
* of the ACPI ObjectType() operator (See the ACPI Spec). Therefore,
|
||||
* only add to the first group if the spec changes.
|
||||
*
|
||||
* Types must be kept in sync with the global AcpiNsProperties
|
||||
* NOTE: Types must be kept in sync with the global AcpiNsProperties
|
||||
* and AcpiNsTypeNames arrays.
|
||||
*/
|
||||
typedef UINT32 ACPI_OBJECT_TYPE;
|
||||
@ -529,26 +529,27 @@ typedef UINT32 ACPI_OBJECT_TYPE;
|
||||
#define ACPI_TYPE_LOCAL_INDEX_FIELD 0x13
|
||||
#define ACPI_TYPE_LOCAL_REFERENCE 0x14 /* Arg#, Local#, Name, Debug, RefOf, Index */
|
||||
#define ACPI_TYPE_LOCAL_ALIAS 0x15
|
||||
#define ACPI_TYPE_LOCAL_NOTIFY 0x16
|
||||
#define ACPI_TYPE_LOCAL_ADDRESS_HANDLER 0x17
|
||||
#define ACPI_TYPE_LOCAL_RESOURCE 0x18
|
||||
#define ACPI_TYPE_LOCAL_RESOURCE_FIELD 0x19
|
||||
#define ACPI_TYPE_LOCAL_SCOPE 0x1A /* 1 Name, multiple ObjectList Nodes */
|
||||
#define ACPI_TYPE_LOCAL_METHOD_ALIAS 0x16
|
||||
#define ACPI_TYPE_LOCAL_NOTIFY 0x17
|
||||
#define ACPI_TYPE_LOCAL_ADDRESS_HANDLER 0x18
|
||||
#define ACPI_TYPE_LOCAL_RESOURCE 0x19
|
||||
#define ACPI_TYPE_LOCAL_RESOURCE_FIELD 0x1A
|
||||
#define ACPI_TYPE_LOCAL_SCOPE 0x1B /* 1 Name, multiple ObjectList Nodes */
|
||||
|
||||
#define ACPI_TYPE_NS_NODE_MAX 0x1A /* Last typecode used within a NS Node */
|
||||
#define ACPI_TYPE_NS_NODE_MAX 0x1B /* Last typecode used within a NS Node */
|
||||
|
||||
/*
|
||||
* These are special object types that never appear in
|
||||
* a Namespace node, only in an ACPI_OPERAND_OBJECT
|
||||
*/
|
||||
#define ACPI_TYPE_LOCAL_EXTRA 0x1B
|
||||
#define ACPI_TYPE_LOCAL_DATA 0x1C
|
||||
#define ACPI_TYPE_LOCAL_EXTRA 0x1C
|
||||
#define ACPI_TYPE_LOCAL_DATA 0x1D
|
||||
|
||||
#define ACPI_TYPE_LOCAL_MAX 0x1C
|
||||
#define ACPI_TYPE_LOCAL_MAX 0x1D
|
||||
|
||||
/* All types above here are invalid */
|
||||
|
||||
#define ACPI_TYPE_INVALID 0x1D
|
||||
#define ACPI_TYPE_INVALID 0x1E
|
||||
#define ACPI_TYPE_NOT_FOUND 0xFF
|
||||
|
||||
|
||||
@ -590,9 +591,8 @@ typedef UINT32 ACPI_OBJECT_TYPE;
|
||||
#define ACPI_WRITE 1
|
||||
#define ACPI_IO_MASK 1
|
||||
|
||||
|
||||
/*
|
||||
* Acpi Event Types: Fixed & General Purpose
|
||||
* Event Types: Fixed & General Purpose
|
||||
*/
|
||||
typedef UINT32 ACPI_EVENT_TYPE;
|
||||
|
||||
@ -607,25 +607,8 @@ typedef UINT32 ACPI_EVENT_TYPE;
|
||||
#define ACPI_EVENT_MAX 4
|
||||
#define ACPI_NUM_FIXED_EVENTS ACPI_EVENT_MAX + 1
|
||||
|
||||
#define ACPI_GPE_INVALID 0xFF
|
||||
#define ACPI_GPE_MAX 0xFF
|
||||
#define ACPI_NUM_GPE 256
|
||||
|
||||
#define ACPI_EVENT_LEVEL_TRIGGERED 1
|
||||
#define ACPI_EVENT_EDGE_TRIGGERED 2
|
||||
|
||||
/*
|
||||
* Flags for GPE and Lock interfaces
|
||||
*/
|
||||
#define ACPI_EVENT_WAKE_ENABLE 0x2
|
||||
#define ACPI_EVENT_WAKE_DISABLE 0x2
|
||||
|
||||
#define ACPI_NOT_ISR 0x1
|
||||
#define ACPI_ISR 0x0
|
||||
|
||||
|
||||
/*
|
||||
* AcpiEvent Status:
|
||||
* Event Status - Per event
|
||||
* -------------
|
||||
* The encoding of ACPI_EVENT_STATUS is illustrated below.
|
||||
* Note that a set bit (1) indicates the property is TRUE
|
||||
@ -646,6 +629,45 @@ typedef UINT32 ACPI_EVENT_STATUS;
|
||||
#define ACPI_EVENT_FLAG_WAKE_ENABLED (ACPI_EVENT_STATUS) 0x02
|
||||
#define ACPI_EVENT_FLAG_SET (ACPI_EVENT_STATUS) 0x04
|
||||
|
||||
/*
|
||||
* General Purpose Events (GPE)
|
||||
*/
|
||||
#define ACPI_GPE_INVALID 0xFF
|
||||
#define ACPI_GPE_MAX 0xFF
|
||||
#define ACPI_NUM_GPE 256
|
||||
|
||||
/*
|
||||
* GPE info flags - Per GPE
|
||||
* +---------+-+-+-+
|
||||
* |Bits 8:3 |2|1|0|
|
||||
* +---------+-+-+-+
|
||||
* | | | |
|
||||
* | | | +- Edge or Level Triggered
|
||||
* | | +--- Type: Wake or Runtime
|
||||
* | +----- Enabled for wake?
|
||||
* +--------<Reserved>
|
||||
*/
|
||||
#define ACPI_GPE_XRUPT_TYPE_MASK (UINT8) 1
|
||||
#define ACPI_GPE_LEVEL_TRIGGERED (UINT8) 1
|
||||
#define ACPI_GPE_EDGE_TRIGGERED (UINT8) 0
|
||||
|
||||
#define ACPI_GPE_TYPE_MASK (UINT8) 2
|
||||
#define ACPI_GPE_TYPE_WAKE (UINT8) 2
|
||||
#define ACPI_GPE_TYPE_RUNTIME (UINT8) 0 /* Default */
|
||||
|
||||
#define ACPI_GPE_ENABLE_MASK (UINT8) 4
|
||||
#define ACPI_GPE_ENABLED (UINT8) 4
|
||||
#define ACPI_GPE_DISABLED (UINT8) 0 /* Default */
|
||||
|
||||
/*
|
||||
* Flags for GPE and Lock interfaces
|
||||
*/
|
||||
#define ACPI_EVENT_WAKE_ENABLE 0x2
|
||||
#define ACPI_EVENT_WAKE_DISABLE 0x2
|
||||
|
||||
#define ACPI_NOT_ISR 0x1
|
||||
#define ACPI_ISR 0x0
|
||||
|
||||
|
||||
/* Notify types */
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Module Name: adisasm - Application-level disassembler routines
|
||||
* $Revision: 64 $
|
||||
* $Revision: 65 $
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@ -146,7 +146,6 @@ AcpiDsIsResultUsed (
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
ACPI_STATUS
|
||||
AcpiDsRestartControlMethod (
|
||||
ACPI_WALK_STATE *WalkState,
|
||||
@ -548,6 +547,18 @@ AdAmlDisassemble (
|
||||
goto Cleanup;
|
||||
}
|
||||
|
||||
/*
|
||||
* TBD: We want to cross reference the namespace here, in order to
|
||||
* generate External() statements. The problem is that the parse
|
||||
* tree is in run-time (interpreter) format, not compiler format,
|
||||
* so we cannot directly use the function below:
|
||||
*
|
||||
* Status = LkCrossReferenceNamespace ();
|
||||
*
|
||||
* We need to either convert the parse tree or create a new
|
||||
* cross ref function that can handle interpreter parse trees
|
||||
*/
|
||||
|
||||
/* Optional displays */
|
||||
|
||||
if (AcpiGbl_DbOpt_disasm)
|
||||
@ -959,10 +970,6 @@ AdGetLocalTables (
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef _HPET
|
||||
AfGetHpet ();
|
||||
#endif
|
||||
|
||||
return AE_OK;
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Module Name: dswload - Dispatcher namespace load callbacks
|
||||
* $Revision: 60 $
|
||||
* $Revision: 62 $
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@ -518,14 +518,19 @@ LdNamespace1Begin (
|
||||
* Which is used to workaround the fact that the MS interpreter
|
||||
* does not allow Scope() forward references.
|
||||
*/
|
||||
sprintf (MsgBuffer, "%s, %s, Changing type to (Scope)",
|
||||
sprintf (MsgBuffer, "%s [%s], changing type to [Scope]",
|
||||
Op->Asl.ExternalName, AcpiUtGetTypeName (Node->Type));
|
||||
AslError (ASL_REMARK, ASL_MSG_SCOPE_TYPE, Op, MsgBuffer);
|
||||
|
||||
/*
|
||||
* Switch the type
|
||||
* Switch the type to scope, open the new scope
|
||||
*/
|
||||
Node->Type = ACPI_TYPE_ANY;
|
||||
Node->Type = ACPI_TYPE_LOCAL_SCOPE;
|
||||
Status = AcpiDsScopeStackPush (Node, ACPI_TYPE_LOCAL_SCOPE, WalkState);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -533,15 +538,20 @@ LdNamespace1Begin (
|
||||
/*
|
||||
* All other types are an error
|
||||
*/
|
||||
sprintf (MsgBuffer, "%s, %s", Op->Asl.ExternalName, AcpiUtGetTypeName (Node->Type));
|
||||
sprintf (MsgBuffer, "%s [%s]", Op->Asl.ExternalName, AcpiUtGetTypeName (Node->Type));
|
||||
AslError (ASL_ERROR, ASL_MSG_SCOPE_TYPE, Op, MsgBuffer);
|
||||
|
||||
/*
|
||||
* However, switch the type to be an actual scope so
|
||||
* that compilation can continue without generating a whole
|
||||
* cascade of additional errors.
|
||||
* cascade of additional errors. Open the new scope.
|
||||
*/
|
||||
Node->Type = ACPI_TYPE_ANY;
|
||||
Node->Type = ACPI_TYPE_LOCAL_SCOPE;
|
||||
Status = AcpiDsScopeStackPush (Node, ACPI_TYPE_LOCAL_SCOPE, WalkState);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*******************************************************************************
|
||||
*
|
||||
* Module Name: dbexec - debugger control method execution
|
||||
* $Revision: 59 $
|
||||
* $Revision: 60 $
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
@ -484,7 +484,7 @@ AcpiDbMethodThread (
|
||||
}
|
||||
}
|
||||
|
||||
if ((i % 1000) == 0)
|
||||
if ((i % 100) == 0)
|
||||
{
|
||||
AcpiOsPrintf ("%d executions\n", i);
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*******************************************************************************
|
||||
*
|
||||
* Module Name: dmutils - AML disassembler utilities
|
||||
* $Revision: 9 $
|
||||
* $Revision: 10 $
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
@ -118,6 +118,7 @@
|
||||
#include "acpi.h"
|
||||
#include "amlcode.h"
|
||||
#include "acdisasm.h"
|
||||
#include "acnamesp.h"
|
||||
|
||||
|
||||
#ifdef ACPI_DISASSEMBLER
|
||||
@ -126,6 +127,9 @@
|
||||
ACPI_MODULE_NAME ("dmutils")
|
||||
|
||||
|
||||
ACPI_EXTERNAL_LIST *AcpiGbl_ExternalList = NULL;
|
||||
|
||||
|
||||
/* Data used in keeping track of fields */
|
||||
#if 0
|
||||
const char *AcpiGbl_FENames[ACPI_NUM_FIELD_NAMES] =
|
||||
@ -287,6 +291,56 @@ const char *AcpiGbl_SIZDecode[4] =
|
||||
};
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDmAddToExternalList
|
||||
*
|
||||
* PARAMETERS: Path - Internal (AML) path to the object
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
* DESCRIPTION: Insert a new path into the list of Externals which will in
|
||||
* turn be emitted as an External() declaration in the disassembled
|
||||
* output.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
void
|
||||
AcpiDmAddToExternalList (
|
||||
char *Path)
|
||||
{
|
||||
char *ExternalPath;
|
||||
ACPI_EXTERNAL_LIST *NewExternal;
|
||||
ACPI_STATUS Status;
|
||||
|
||||
|
||||
if (!Path)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* Externalize the ACPI path */
|
||||
|
||||
Status = AcpiNsExternalizeName (ACPI_UINT32_MAX, Path,
|
||||
NULL, &ExternalPath);
|
||||
if (ACPI_SUCCESS (Status))
|
||||
{
|
||||
/* Allocate and init a new External() descriptor */
|
||||
|
||||
NewExternal = ACPI_MEM_CALLOCATE (sizeof (ACPI_EXTERNAL_LIST));
|
||||
NewExternal->Path = ExternalPath;
|
||||
|
||||
/* Link the new descriptor into the global list */
|
||||
|
||||
if (AcpiGbl_ExternalList)
|
||||
{
|
||||
NewExternal->Next = AcpiGbl_ExternalList;
|
||||
}
|
||||
AcpiGbl_ExternalList = NewExternal;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDmDecodeAttribute
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*******************************************************************************
|
||||
*
|
||||
* Module Name: dmwalk - AML disassembly tree walk
|
||||
* $Revision: 11 $
|
||||
* $Revision: 12 $
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
@ -434,6 +434,7 @@ AcpiDmDescendingOp (
|
||||
const ACPI_OPCODE_INFO *OpInfo;
|
||||
UINT32 Name;
|
||||
ACPI_PARSE_OBJECT *NextOp;
|
||||
ACPI_EXTERNAL_LIST *NextExternal;
|
||||
|
||||
|
||||
if (Op->Common.DisasmFlags & ACPI_PARSEOP_IGNORE)
|
||||
@ -443,6 +444,7 @@ AcpiDmDescendingOp (
|
||||
return (AE_CTRL_DEPTH);
|
||||
}
|
||||
|
||||
/* Level 0 is at the Definition Block level */
|
||||
|
||||
if (Level == 0)
|
||||
{
|
||||
@ -453,7 +455,30 @@ AcpiDmDescendingOp (
|
||||
|
||||
if (Op->Common.AmlOpcode == AML_SCOPE_OP)
|
||||
{
|
||||
/* This is the beginning of the Definition Block */
|
||||
|
||||
AcpiOsPrintf ("{\n");
|
||||
|
||||
/* Emit all External() declarations here */
|
||||
|
||||
if (AcpiGbl_ExternalList)
|
||||
{
|
||||
AcpiOsPrintf (" /*\n * These objects were referenced but not defined in this table\n */\n");
|
||||
|
||||
/* Walk the list of externals (unresolved references) found during parsing */
|
||||
|
||||
while (AcpiGbl_ExternalList)
|
||||
{
|
||||
AcpiOsPrintf (" External (%s)\n", AcpiGbl_ExternalList->Path);
|
||||
|
||||
NextExternal = AcpiGbl_ExternalList->Next;
|
||||
ACPI_MEM_FREE (AcpiGbl_ExternalList->Path);
|
||||
ACPI_MEM_FREE (AcpiGbl_ExternalList);
|
||||
AcpiGbl_ExternalList = NextExternal;
|
||||
}
|
||||
AcpiOsPrintf ("\n");
|
||||
}
|
||||
|
||||
return (AE_OK);
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*******************************************************************************
|
||||
*
|
||||
* Module Name: dsmthdat - control method arguments and local variables
|
||||
* $Revision: 77 $
|
||||
* $Revision: 78 $
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
@ -760,11 +760,13 @@ AcpiDsStoreObjectToLocal (
|
||||
NewObjDesc, CurrentObjDesc));
|
||||
|
||||
/*
|
||||
* Store this object to the Node
|
||||
* (perform the indirect store)
|
||||
* Store this object to the Node (perform the indirect store)
|
||||
* NOTE: No implicit conversion is performed, as per the ACPI
|
||||
* specification rules on storing to Locals/Args.
|
||||
*/
|
||||
Status = AcpiExStoreObjectToNode (NewObjDesc,
|
||||
CurrentObjDesc->Reference.Object, WalkState);
|
||||
CurrentObjDesc->Reference.Object, WalkState,
|
||||
ACPI_NO_IMPLICIT_CONVERSION);
|
||||
|
||||
/* Remove local reference if we copied the object above */
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Module Name: dswload - Dispatcher namespace load callbacks
|
||||
* $Revision: 86 $
|
||||
* $Revision: 87 $
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@ -124,6 +124,9 @@
|
||||
#include "acnamesp.h"
|
||||
#include "acevents.h"
|
||||
|
||||
#ifdef _ACPI_ASL_COMPILER
|
||||
#include "acdisasm.h"
|
||||
#endif
|
||||
|
||||
#define _COMPONENT ACPI_DISPATCHER
|
||||
ACPI_MODULE_NAME ("dswload")
|
||||
@ -261,7 +264,19 @@ AcpiDsLoad1BeginOp (
|
||||
ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, WalkState, &(Node));
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
#ifdef _ACPI_ASL_COMPILER
|
||||
if (Status == AE_NOT_FOUND)
|
||||
{
|
||||
AcpiDmAddToExternalList (Path);
|
||||
Status = AE_OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
ACPI_REPORT_NSERROR (Path, Status);
|
||||
}
|
||||
#else
|
||||
ACPI_REPORT_NSERROR (Path, Status);
|
||||
#endif
|
||||
return (Status);
|
||||
}
|
||||
|
||||
@ -637,7 +652,18 @@ AcpiDsLoad2BeginOp (
|
||||
ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, WalkState, &(Node));
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
#ifdef _ACPI_ASL_COMPILER
|
||||
if (Status == AE_NOT_FOUND)
|
||||
{
|
||||
Status = AE_OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
ACPI_REPORT_NSERROR (BufferPtr, Status);
|
||||
}
|
||||
#else
|
||||
ACPI_REPORT_NSERROR (BufferPtr, Status);
|
||||
#endif
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
/*
|
||||
|
@ -1,7 +1,7 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Module Name: evgpe - General Purpose Event handling and dispatch
|
||||
* $Revision: 34 $
|
||||
* $Revision: 35 $
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@ -176,9 +176,8 @@ AcpiEvGetGpeEventInfo (
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* A Non-null GpeDevice means this is a GPE Block Device.
|
||||
*/
|
||||
/* A Non-NULL GpeDevice means this is a GPE Block Device */
|
||||
|
||||
ObjDesc = AcpiNsGetAttachedObject ((ACPI_NAMESPACE_NODE *) GpeDevice);
|
||||
if (!ObjDesc ||
|
||||
!ObjDesc->Device.GpeBlock)
|
||||
@ -389,7 +388,7 @@ AcpiEvAsynchExecuteGpeMethod (
|
||||
}
|
||||
}
|
||||
|
||||
if (LocalGpeEventInfo.Flags & ACPI_EVENT_LEVEL_TRIGGERED)
|
||||
if ((LocalGpeEventInfo.Flags & ACPI_GPE_XRUPT_TYPE_MASK) == ACPI_GPE_LEVEL_TRIGGERED)
|
||||
{
|
||||
/*
|
||||
* GPE is level-triggered, we clear the GPE status bit after handling
|
||||
@ -440,7 +439,7 @@ AcpiEvGpeDispatch (
|
||||
* If edge-triggered, clear the GPE status bit now. Note that
|
||||
* level-triggered events are cleared after the GPE is serviced.
|
||||
*/
|
||||
if (GpeEventInfo->Flags & ACPI_EVENT_EDGE_TRIGGERED)
|
||||
if ((GpeEventInfo->Flags & ACPI_GPE_XRUPT_TYPE_MASK) == ACPI_GPE_EDGE_TRIGGERED)
|
||||
{
|
||||
Status = AcpiHwClearGpe (GpeEventInfo);
|
||||
if (ACPI_FAILURE (Status))
|
||||
@ -466,7 +465,7 @@ AcpiEvGpeDispatch (
|
||||
|
||||
/* It is now safe to clear level-triggered events. */
|
||||
|
||||
if (GpeEventInfo->Flags & ACPI_EVENT_LEVEL_TRIGGERED)
|
||||
if ((GpeEventInfo->Flags & ACPI_GPE_XRUPT_TYPE_MASK) == ACPI_GPE_LEVEL_TRIGGERED)
|
||||
{
|
||||
Status = AcpiHwClearGpe (GpeEventInfo);
|
||||
if (ACPI_FAILURE (Status))
|
||||
|
@ -1,7 +1,7 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Module Name: evgpeblk - GPE block creation and initialization.
|
||||
* $Revision: 27 $
|
||||
* $Revision: 29 $
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@ -247,11 +247,11 @@ AcpiEvWalkGpeList (
|
||||
* information for quick lookup during GPE dispatch
|
||||
*
|
||||
* The name of each GPE control method is of the form:
|
||||
* "_Lnn" or "_Enn"
|
||||
* Where:
|
||||
* L - means that the GPE is level triggered
|
||||
* E - means that the GPE is edge triggered
|
||||
* nn - is the GPE number [in HEX]
|
||||
* "_Lxx" or "_Exx"
|
||||
* Where:
|
||||
* L - means that the GPE is level triggered
|
||||
* E - means that the GPE is edge triggered
|
||||
* xx - is the GPE number [in HEX]
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
@ -267,37 +267,42 @@ AcpiEvSaveMethodInfo (
|
||||
UINT32 GpeNumber;
|
||||
char Name[ACPI_NAME_SIZE + 1];
|
||||
UINT8 Type;
|
||||
ACPI_STATUS Status;
|
||||
|
||||
|
||||
ACPI_FUNCTION_TRACE ("EvSaveMethodInfo");
|
||||
|
||||
|
||||
/* Extract the name from the object and convert to a string */
|
||||
|
||||
/*
|
||||
* _Lxx and _Exx GPE method support
|
||||
*
|
||||
* 1) Extract the name from the object and convert to a string
|
||||
*/
|
||||
ACPI_MOVE_32_TO_32 (Name,
|
||||
&((ACPI_NAMESPACE_NODE *) ObjHandle)->Name.Integer);
|
||||
Name[ACPI_NAME_SIZE] = 0;
|
||||
|
||||
/*
|
||||
* Edge/Level determination is based on the 2nd character
|
||||
* of the method name
|
||||
* 2) Edge/Level determination is based on the 2nd character
|
||||
* of the method name
|
||||
*
|
||||
* NOTE: Default GPE type is RUNTIME. May be changed later to WAKE if a
|
||||
* _PRW object is found that points to this GPE.
|
||||
*/
|
||||
switch (Name[1])
|
||||
{
|
||||
case 'L':
|
||||
Type = ACPI_EVENT_LEVEL_TRIGGERED;
|
||||
Type = ACPI_GPE_LEVEL_TRIGGERED | ACPI_GPE_TYPE_RUNTIME;
|
||||
break;
|
||||
|
||||
case 'E':
|
||||
Type = ACPI_EVENT_EDGE_TRIGGERED;
|
||||
Type = ACPI_GPE_EDGE_TRIGGERED | ACPI_GPE_TYPE_RUNTIME;
|
||||
break;
|
||||
|
||||
default:
|
||||
/* Unknown method type, just ignore it! */
|
||||
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
|
||||
"Unknown GPE method type: %s (name not of form _Lnn or _Enn)\n",
|
||||
"Unknown GPE method type: %s (name not of form _Lxx or _Exx)\n",
|
||||
Name));
|
||||
return_ACPI_STATUS (AE_OK);
|
||||
}
|
||||
@ -310,7 +315,7 @@ AcpiEvSaveMethodInfo (
|
||||
/* Conversion failed; invalid method, just ignore it */
|
||||
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
|
||||
"Could not extract GPE number from name: %s (name is not of form _Lnn or _Enn)\n",
|
||||
"Could not extract GPE number from name: %s (name is not of form _Lxx or _Exx)\n",
|
||||
Name));
|
||||
return_ACPI_STATUS (AE_OK);
|
||||
}
|
||||
@ -337,14 +342,6 @@ AcpiEvSaveMethodInfo (
|
||||
GpeEventInfo->Flags = Type;
|
||||
GpeEventInfo->MethodNode = (ACPI_NAMESPACE_NODE *) ObjHandle;
|
||||
|
||||
/* Enable the GPE (SCIs should be disabled at this point) */
|
||||
|
||||
Status = AcpiHwEnableGpe (GpeEventInfo);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_LOAD,
|
||||
"Registered GPE method %s as GPE number 0x%.2X\n",
|
||||
Name, GpeNumber));
|
||||
@ -352,6 +349,127 @@ AcpiEvSaveMethodInfo (
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiEvGetGpeType
|
||||
*
|
||||
* PARAMETERS: Callback from WalkNamespace
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Called from AcpiWalkNamespace. Expects each object to be a
|
||||
* Device. Run the _PRW method. If present, extract the GPE
|
||||
* number and mark the GPE as a WAKE GPE.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static ACPI_STATUS
|
||||
AcpiEvGetGpeType (
|
||||
ACPI_HANDLE ObjHandle,
|
||||
UINT32 Level,
|
||||
void *Info,
|
||||
void **ReturnValue)
|
||||
{
|
||||
ACPI_GPE_WALK_INFO *GpeInfo = (void *) Info;
|
||||
ACPI_NAMESPACE_NODE *GpeDevice;
|
||||
ACPI_GPE_BLOCK_INFO *GpeBlock;
|
||||
ACPI_NAMESPACE_NODE *TargetGpeDevice;
|
||||
ACPI_GPE_EVENT_INFO *GpeEventInfo;
|
||||
ACPI_OPERAND_OBJECT *PkgDesc;
|
||||
ACPI_OPERAND_OBJECT *ObjDesc;
|
||||
UINT32 GpeNumber;
|
||||
ACPI_STATUS Status;
|
||||
|
||||
|
||||
ACPI_FUNCTION_TRACE ("EvGetGpeType");
|
||||
|
||||
|
||||
/* Check for a _PRW method under this device */
|
||||
|
||||
Status = AcpiUtEvaluateObject (ObjHandle, METHOD_NAME__PRW,
|
||||
ACPI_BTYPE_PACKAGE, &PkgDesc);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
/* Ignore all errors from _PRW, we don't want to abort the subsystem */
|
||||
|
||||
return_ACPI_STATUS (AE_OK);
|
||||
}
|
||||
|
||||
/* The returned _PRW package must have at least two elements */
|
||||
|
||||
if (PkgDesc->Package.Count < 2)
|
||||
{
|
||||
goto Cleanup;
|
||||
}
|
||||
|
||||
/* Extract pointers from the input context */
|
||||
|
||||
GpeDevice = GpeInfo->GpeDevice;
|
||||
GpeBlock = GpeInfo->GpeBlock;
|
||||
|
||||
/*
|
||||
* The _PRW object must return a package, we are only interested
|
||||
* in the first element
|
||||
*/
|
||||
ObjDesc = PkgDesc->Package.Elements[0];
|
||||
|
||||
if (ACPI_GET_OBJECT_TYPE (ObjDesc) == ACPI_TYPE_INTEGER)
|
||||
{
|
||||
/* Use FADT-defined GPE device (from definition of _PRW) */
|
||||
|
||||
TargetGpeDevice = AcpiGbl_FadtGpeDevice;
|
||||
|
||||
/* Integer is the GPE number in the FADT described GPE blocks */
|
||||
|
||||
GpeNumber = (UINT32) ObjDesc->Integer.Value;
|
||||
}
|
||||
else if (ACPI_GET_OBJECT_TYPE (ObjDesc) == ACPI_TYPE_PACKAGE)
|
||||
{
|
||||
/* Package contains a GPE reference and GPE number within a GPE block */
|
||||
|
||||
if ((ObjDesc->Package.Count < 2) ||
|
||||
(ACPI_GET_OBJECT_TYPE (ObjDesc->Package.Elements[0]) != ACPI_TYPE_LOCAL_REFERENCE) ||
|
||||
(ACPI_GET_OBJECT_TYPE (ObjDesc->Package.Elements[1]) != ACPI_TYPE_INTEGER))
|
||||
{
|
||||
goto Cleanup;
|
||||
}
|
||||
|
||||
/* Get GPE block reference and decode */
|
||||
|
||||
TargetGpeDevice = ObjDesc->Package.Elements[0]->Reference.Node;
|
||||
GpeNumber = (UINT32) ObjDesc->Package.Elements[1]->Integer.Value;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Unknown type, just ignore it */
|
||||
|
||||
goto Cleanup;
|
||||
}
|
||||
|
||||
/*
|
||||
* Is this GPE within this block?
|
||||
*
|
||||
* TRUE iff these conditions are true:
|
||||
* 1) The GPE devices match.
|
||||
* 2) The GPE index(number) is within the range of the Gpe Block
|
||||
* associated with the GPE device.
|
||||
*/
|
||||
if ((GpeDevice == TargetGpeDevice) &&
|
||||
(GpeNumber >= GpeBlock->BlockBaseNumber) &&
|
||||
(GpeNumber < GpeBlock->BlockBaseNumber + (GpeBlock->RegisterCount * 8)))
|
||||
{
|
||||
/* Mark GPE for WAKE but DISABLED (even for wake) */
|
||||
|
||||
GpeEventInfo = &GpeBlock->EventInfo[GpeNumber - GpeBlock->BlockBaseNumber];
|
||||
GpeEventInfo->Flags |= ACPI_GPE_TYPE_WAKE;
|
||||
}
|
||||
|
||||
Cleanup:
|
||||
AcpiUtRemoveReference (PkgDesc);
|
||||
return_ACPI_STATUS (AE_OK);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiEvGetGpeXruptBlock
|
||||
@ -810,8 +928,13 @@ AcpiEvCreateGpeBlock (
|
||||
ACPI_GPE_BLOCK_INFO **ReturnGpeBlock)
|
||||
{
|
||||
ACPI_GPE_BLOCK_INFO *GpeBlock;
|
||||
ACPI_GPE_EVENT_INFO *GpeEventInfo;
|
||||
ACPI_NATIVE_UINT i;
|
||||
ACPI_NATIVE_UINT j;
|
||||
UINT32 WakeGpeCount;
|
||||
UINT32 GpeEnabledCount;
|
||||
ACPI_STATUS Status;
|
||||
|
||||
ACPI_GPE_WALK_INFO GpeInfo;
|
||||
|
||||
ACPI_FUNCTION_TRACE ("EvCreateGpeBlock");
|
||||
|
||||
@ -856,7 +979,8 @@ AcpiEvCreateGpeBlock (
|
||||
|
||||
/* Dump info about this GPE block */
|
||||
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_INIT, "GPE %02d to %02d [%4.4s] %d regs at %8.8X%8.8X on int %d\n",
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_INIT,
|
||||
"GPE %02d to %02d [%4.4s] %d regs at %8.8X%8.8X on int %d\n",
|
||||
GpeBlock->BlockBaseNumber,
|
||||
(UINT32) (GpeBlock->BlockBaseNumber +
|
||||
((GpeBlock->RegisterCount * ACPI_GPE_REGISTER_WIDTH) -1)),
|
||||
@ -868,8 +992,66 @@ AcpiEvCreateGpeBlock (
|
||||
/* Find all GPE methods (_Lxx, _Exx) for this block */
|
||||
|
||||
Status = AcpiNsWalkNamespace (ACPI_TYPE_METHOD, GpeDevice,
|
||||
ACPI_UINT32_MAX, ACPI_NS_WALK_NO_UNLOCK, AcpiEvSaveMethodInfo,
|
||||
GpeBlock, NULL);
|
||||
ACPI_UINT32_MAX, ACPI_NS_WALK_NO_UNLOCK, AcpiEvSaveMethodInfo,
|
||||
GpeBlock, NULL);
|
||||
|
||||
/*
|
||||
* Runtime option: Should Wake GPEs be enabled at runtime? The default is
|
||||
* No,they should only be enabled just as the machine goes to sleep.
|
||||
*/
|
||||
if (AcpiGbl_LeaveWakeGpesDisabled)
|
||||
{
|
||||
/*
|
||||
* Differentiate RUNTIME vs WAKE GPEs, via the _PRW control methods. (Each
|
||||
* GPE that has one or more _PRWs that reference it is by definition a
|
||||
* WAKE GPE and will not be enabled while the machine is running.)
|
||||
*/
|
||||
GpeInfo.GpeBlock = GpeBlock;
|
||||
GpeInfo.GpeDevice = GpeDevice;
|
||||
|
||||
Status = AcpiNsWalkNamespace (ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
|
||||
ACPI_UINT32_MAX, ACPI_NS_WALK_UNLOCK, AcpiEvGetGpeType,
|
||||
&GpeInfo, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Enable all GPEs in this block that are 1) "runtime" GPEs, and 2) have
|
||||
* a corresponding _Lxx or _Exx method. All other GPEs must be enabled via
|
||||
* the AcpiEnableGpe() external interface.
|
||||
*/
|
||||
WakeGpeCount = 0;
|
||||
GpeEnabledCount = 0;
|
||||
|
||||
for (i = 0; i < GpeBlock->RegisterCount; i++)
|
||||
{
|
||||
for (j = 0; j < 8; j++)
|
||||
{
|
||||
/* Get the info block for this particular GPE */
|
||||
|
||||
GpeEventInfo = &GpeBlock->EventInfo[(i * ACPI_GPE_REGISTER_WIDTH) + j];
|
||||
if ((GpeEventInfo->MethodNode) &&
|
||||
((GpeEventInfo->Flags & ACPI_GPE_TYPE_MASK) == ACPI_GPE_TYPE_RUNTIME))
|
||||
{
|
||||
/* Enable this GPE, it is 1) RUNTIME and 2) has an _Lxx or _Exx method */
|
||||
|
||||
Status = AcpiHwEnableGpe (GpeEventInfo);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
GpeEnabledCount++;
|
||||
}
|
||||
|
||||
if ((GpeEventInfo->Flags & ACPI_GPE_TYPE_MASK) == ACPI_GPE_TYPE_WAKE)
|
||||
{
|
||||
WakeGpeCount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_INIT,
|
||||
"Found %u Wake, Enabled %u Runtime GPEs in this block\n",
|
||||
WakeGpeCount, GpeEnabledCount));
|
||||
|
||||
/* Return the new block */
|
||||
|
||||
@ -895,28 +1077,26 @@ AcpiEvCreateGpeBlock (
|
||||
******************************************************************************/
|
||||
|
||||
ACPI_STATUS
|
||||
AcpiEvGpeInitialize (void)
|
||||
AcpiEvGpeInitialize (
|
||||
void)
|
||||
{
|
||||
UINT32 RegisterCount0 = 0;
|
||||
UINT32 RegisterCount1 = 0;
|
||||
UINT32 GpeNumberMax = 0;
|
||||
ACPI_HANDLE GpeDevice;
|
||||
ACPI_STATUS Status;
|
||||
|
||||
|
||||
ACPI_FUNCTION_TRACE ("EvGpeInitialize");
|
||||
|
||||
|
||||
/* Get a handle to the predefined _GPE object */
|
||||
|
||||
Status = AcpiGetHandle (NULL, "\\_GPE", &GpeDevice);
|
||||
Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize the GPE Blocks defined in the FADT
|
||||
* Initialize the GPE Block(s) defined in the FADT
|
||||
*
|
||||
* Why the GPE register block lengths are divided by 2: From the ACPI Spec,
|
||||
* section "General-Purpose Event Registers", we have:
|
||||
@ -951,8 +1131,9 @@ AcpiEvGpeInitialize (void)
|
||||
|
||||
/* Install GPE Block 0 */
|
||||
|
||||
Status = AcpiEvCreateGpeBlock (GpeDevice, &AcpiGbl_FADT->XGpe0Blk,
|
||||
Status = AcpiEvCreateGpeBlock (AcpiGbl_FadtGpeDevice, &AcpiGbl_FADT->XGpe0Blk,
|
||||
RegisterCount0, 0, AcpiGbl_FADT->SciInt, &AcpiGbl_GpeFadtBlocks[0]);
|
||||
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
ACPI_REPORT_ERROR ((
|
||||
@ -987,9 +1168,10 @@ AcpiEvGpeInitialize (void)
|
||||
{
|
||||
/* Install GPE Block 1 */
|
||||
|
||||
Status = AcpiEvCreateGpeBlock (GpeDevice, &AcpiGbl_FADT->XGpe1Blk,
|
||||
Status = AcpiEvCreateGpeBlock (AcpiGbl_FadtGpeDevice, &AcpiGbl_FADT->XGpe1Blk,
|
||||
RegisterCount1, AcpiGbl_FADT->Gpe1Base,
|
||||
AcpiGbl_FADT->SciInt, &AcpiGbl_GpeFadtBlocks[1]);
|
||||
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
ACPI_REPORT_ERROR ((
|
||||
@ -1013,7 +1195,8 @@ AcpiEvGpeInitialize (void)
|
||||
/* GPEs are not required by ACPI, this is OK */
|
||||
|
||||
ACPI_REPORT_INFO (("There are no GPE blocks defined in the FADT\n"));
|
||||
return_ACPI_STATUS (AE_OK);
|
||||
Status = AE_OK;
|
||||
goto Cleanup;
|
||||
}
|
||||
|
||||
/* Check for Max GPE number out-of-range */
|
||||
@ -1022,9 +1205,12 @@ AcpiEvGpeInitialize (void)
|
||||
{
|
||||
ACPI_REPORT_ERROR (("Maximum GPE number from FADT is too large: 0x%X\n",
|
||||
GpeNumberMax));
|
||||
return_ACPI_STATUS (AE_BAD_VALUE);
|
||||
Status = AE_BAD_VALUE;
|
||||
goto Cleanup;
|
||||
}
|
||||
|
||||
Cleanup:
|
||||
(void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
|
||||
return_ACPI_STATUS (AE_OK);
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Module Name: evmisc - Miscellaneous event manager support functions
|
||||
* $Revision: 70 $
|
||||
* $Revision: 72 $
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@ -171,6 +171,20 @@ AcpiEvIsNotifyObject (
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef ACPI_DEBUG_OUTPUT
|
||||
static const char *AcpiNotifyValueNames[] =
|
||||
{
|
||||
"Bus Check",
|
||||
"Device Check",
|
||||
"Device Wake",
|
||||
"Eject request",
|
||||
"Device Check Light",
|
||||
"Frequency Mismatch",
|
||||
"Bus Mode Mismatch",
|
||||
"Power Fault"
|
||||
};
|
||||
#endif
|
||||
|
||||
ACPI_STATUS
|
||||
AcpiEvQueueNotifyRequest (
|
||||
ACPI_NAMESPACE_NODE *Node,
|
||||
@ -186,7 +200,7 @@ AcpiEvQueueNotifyRequest (
|
||||
|
||||
|
||||
/*
|
||||
* For value 1 (Ejection Request), some device method may need to be run.
|
||||
* For value 3 (Ejection Request), some device method may need to be run.
|
||||
* For value 2 (Device Wake) if _PRW exists, the _PS0 method may need to be run.
|
||||
* For value 0x80 (Status Change) on the power button or sleep button,
|
||||
* initiate soft-off or sleep operation?
|
||||
@ -194,27 +208,15 @@ AcpiEvQueueNotifyRequest (
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
|
||||
"Dispatching Notify(%X) on node %p\n", NotifyValue, Node));
|
||||
|
||||
switch (NotifyValue)
|
||||
if (NotifyValue <= 7)
|
||||
{
|
||||
case 0:
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Notify value: Re-enumerate Devices\n"));
|
||||
break;
|
||||
|
||||
case 1:
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Notify value: Ejection Request\n"));
|
||||
break;
|
||||
|
||||
case 2:
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Notify value: Device Wake\n"));
|
||||
break;
|
||||
|
||||
case 0x80:
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Notify value: Status Change\n"));
|
||||
break;
|
||||
|
||||
default:
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Unknown Notify Value: %X \n", NotifyValue));
|
||||
break;
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Notify value: %s\n",
|
||||
AcpiNotifyValueNames[NotifyValue]));
|
||||
}
|
||||
else
|
||||
{
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Notify value: 0x%2.2X **Device Specific**\n",
|
||||
NotifyValue));
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1,7 +1,7 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Module Name: evxfevnt - External Interfaces, ACPI event disable/enable
|
||||
* $Revision: 74 $
|
||||
* $Revision: 75 $
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@ -337,18 +337,33 @@ AcpiEnableGpe (
|
||||
goto UnlockAndExit;
|
||||
}
|
||||
|
||||
/* Enable the requested GPE number */
|
||||
|
||||
Status = AcpiHwEnableGpe (GpeEventInfo);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
goto UnlockAndExit;
|
||||
}
|
||||
/* Check for Wake vs Runtime GPE */
|
||||
|
||||
if (Flags & ACPI_EVENT_WAKE_ENABLE)
|
||||
{
|
||||
/* Ensure the requested wake GPE is disabled */
|
||||
|
||||
Status = AcpiHwDisableGpe (GpeEventInfo);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
goto UnlockAndExit;
|
||||
}
|
||||
|
||||
/* Defer Enable of Wake GPE until sleep time */
|
||||
|
||||
AcpiHwEnableGpeForWakeup (GpeEventInfo);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Enable the requested runtime GPE */
|
||||
|
||||
Status = AcpiHwEnableGpe (GpeEventInfo);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
goto UnlockAndExit;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
UnlockAndExit:
|
||||
if (Flags & ACPI_NOT_ISR)
|
||||
|
@ -1,7 +1,7 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Module Name: excreate - Named object creation
|
||||
* $Revision: 102 $
|
||||
* $Revision: 103 $
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@ -159,7 +159,8 @@ AcpiExCreateAlias (
|
||||
AliasNode = (ACPI_NAMESPACE_NODE *) WalkState->Operands[0];
|
||||
TargetNode = (ACPI_NAMESPACE_NODE *) WalkState->Operands[1];
|
||||
|
||||
if (TargetNode->Type == ACPI_TYPE_LOCAL_ALIAS)
|
||||
if ((TargetNode->Type == ACPI_TYPE_LOCAL_ALIAS) ||
|
||||
(TargetNode->Type == ACPI_TYPE_LOCAL_METHOD_ALIAS))
|
||||
{
|
||||
/*
|
||||
* Dereference an existing alias so that we don't create a chain
|
||||
@ -167,7 +168,7 @@ AcpiExCreateAlias (
|
||||
* always exactly one level of indirection away from the
|
||||
* actual aliased name.
|
||||
*/
|
||||
TargetNode = (ACPI_NAMESPACE_NODE *) TargetNode->Object;
|
||||
TargetNode = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, TargetNode->Object);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -194,6 +195,17 @@ AcpiExCreateAlias (
|
||||
AliasNode->Object = ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, TargetNode);
|
||||
break;
|
||||
|
||||
case ACPI_TYPE_METHOD:
|
||||
|
||||
/*
|
||||
* The new alias has the type ALIAS and points to the original
|
||||
* NS node, not the object itself. This is because for these
|
||||
* types, the object can change dynamically via a Store.
|
||||
*/
|
||||
AliasNode->Type = ACPI_TYPE_LOCAL_METHOD_ALIAS;
|
||||
AliasNode->Object = ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, TargetNode);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
/* Attach the original source object to the new Alias Node */
|
||||
|
@ -1,7 +1,7 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Module Name: exdump - Interpreter debug output routines
|
||||
* $Revision: 172 $
|
||||
* $Revision: 173 $
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@ -881,6 +881,7 @@ AcpiExDumpObjectDescriptor (
|
||||
|
||||
|
||||
case ACPI_TYPE_LOCAL_ALIAS:
|
||||
case ACPI_TYPE_LOCAL_METHOD_ALIAS:
|
||||
case ACPI_TYPE_LOCAL_EXTRA:
|
||||
case ACPI_TYPE_LOCAL_DATA:
|
||||
default:
|
||||
|
@ -2,7 +2,7 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Module Name: exresnte - AML Interpreter object resolution
|
||||
* $Revision: 64 $
|
||||
* $Revision: 65 $
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@ -182,11 +182,12 @@ AcpiExResolveNodeToValue (
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Entry=%p SourceDesc=%p [%s]\n",
|
||||
Node, SourceDesc, AcpiUtGetTypeName (EntryType)));
|
||||
|
||||
if (EntryType == ACPI_TYPE_LOCAL_ALIAS)
|
||||
if ((EntryType == ACPI_TYPE_LOCAL_ALIAS) ||
|
||||
(EntryType == ACPI_TYPE_LOCAL_METHOD_ALIAS))
|
||||
{
|
||||
/* There is always exactly one level of indirection */
|
||||
|
||||
Node = (ACPI_NAMESPACE_NODE *) Node->Object;
|
||||
Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Node->Object);
|
||||
SourceDesc = AcpiNsGetAttachedObject (Node);
|
||||
EntryType = AcpiNsGetType ((ACPI_HANDLE) Node);
|
||||
*ObjectPtr = Node;
|
||||
|
@ -2,7 +2,7 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Module Name: exstore - AML Interpreter object store support
|
||||
* $Revision: 180 $
|
||||
* $Revision: 181 $
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@ -178,7 +178,8 @@ AcpiExStore (
|
||||
* Storing an object into a Named node.
|
||||
*/
|
||||
Status = AcpiExStoreObjectToNode (SourceDesc,
|
||||
(ACPI_NAMESPACE_NODE *) DestDesc, WalkState);
|
||||
(ACPI_NAMESPACE_NODE *) DestDesc, WalkState,
|
||||
ACPI_IMPLICIT_CONVERSION);
|
||||
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
@ -232,7 +233,7 @@ AcpiExStore (
|
||||
/* Storing an object into a Name "container" */
|
||||
|
||||
Status = AcpiExStoreObjectToNode (SourceDesc, RefDesc->Reference.Object,
|
||||
WalkState);
|
||||
WalkState, ACPI_IMPLICIT_CONVERSION);
|
||||
break;
|
||||
|
||||
|
||||
@ -486,6 +487,7 @@ AcpiExStoreObjectToIndex (
|
||||
* PARAMETERS: SourceDesc - Value to be stored
|
||||
* Node - Named object to receive the value
|
||||
* WalkState - Current walk state
|
||||
* ImplicitConversion - Perform implicit conversion (yes/no)
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
@ -508,7 +510,8 @@ ACPI_STATUS
|
||||
AcpiExStoreObjectToNode (
|
||||
ACPI_OPERAND_OBJECT *SourceDesc,
|
||||
ACPI_NAMESPACE_NODE *Node,
|
||||
ACPI_WALK_STATE *WalkState)
|
||||
ACPI_WALK_STATE *WalkState,
|
||||
UINT8 ImplicitConversion)
|
||||
{
|
||||
ACPI_STATUS Status = AE_OK;
|
||||
ACPI_OPERAND_OBJECT *TargetDesc;
|
||||
@ -539,6 +542,15 @@ AcpiExStoreObjectToNode (
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
|
||||
/* If no implicit conversion, drop into the default case below */
|
||||
|
||||
if (!ImplicitConversion)
|
||||
{
|
||||
/* Force execution of default (no implicit conversion) */
|
||||
|
||||
TargetType = ACPI_TYPE_ANY;
|
||||
}
|
||||
|
||||
/*
|
||||
* Do the actual store operation
|
||||
*/
|
||||
|
@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exstoren - AML Interpreter object store support,
|
||||
* Store to Node (namespace object)
|
||||
* $Revision: 58 $
|
||||
* $Revision: 59 $
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@ -217,6 +217,7 @@ AcpiExResolveObject (
|
||||
|
||||
|
||||
case ACPI_TYPE_LOCAL_ALIAS:
|
||||
case ACPI_TYPE_LOCAL_METHOD_ALIAS:
|
||||
|
||||
/*
|
||||
* Aliases are resolved by AcpiExPrepOperands
|
||||
|
@ -2,7 +2,7 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Module Name: hwgpe - Low level GPE enable/disable/clear functions
|
||||
* $Revision: 56 $
|
||||
* $Revision: 57 $
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@ -126,9 +126,9 @@
|
||||
*
|
||||
* FUNCTION: AcpiHwEnableGpe
|
||||
*
|
||||
* PARAMETERS: GpeNumber - The GPE
|
||||
* PARAMETERS: GpeEventInfo - Info block for the GPE to be enabled
|
||||
*
|
||||
* RETURN: None
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Enable a single GPE.
|
||||
*
|
||||
@ -169,7 +169,7 @@ AcpiHwEnableGpe (
|
||||
*
|
||||
* FUNCTION: AcpiHwEnableGpeForWakeup
|
||||
*
|
||||
* PARAMETERS: GpeNumber - The GPE
|
||||
* PARAMETERS: GpeEventInfo - Info block for the GPE to be enabled
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
@ -197,9 +197,11 @@ AcpiHwEnableGpeForWakeup (
|
||||
}
|
||||
|
||||
/*
|
||||
* Set the bit so we will not disable this when sleeping
|
||||
* Set the bit so we will not enable this GPE when sleeping (and disable
|
||||
* it upon wake)
|
||||
*/
|
||||
GpeRegisterInfo->WakeEnable |= GpeEventInfo->BitMask;
|
||||
GpeEventInfo->Flags |= (ACPI_GPE_TYPE_WAKE | ACPI_GPE_ENABLED);
|
||||
}
|
||||
|
||||
|
||||
@ -207,9 +209,9 @@ AcpiHwEnableGpeForWakeup (
|
||||
*
|
||||
* FUNCTION: AcpiHwDisableGpe
|
||||
*
|
||||
* PARAMETERS: GpeNumber - The GPE
|
||||
* PARAMETERS: GpeEventInfo - Info block for the GPE to be disabled
|
||||
*
|
||||
* RETURN: None
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Disable a single GPE.
|
||||
*
|
||||
@ -255,6 +257,8 @@ AcpiHwDisableGpe (
|
||||
return (Status);
|
||||
}
|
||||
|
||||
/* Make sure this GPE is disabled for wake, also */
|
||||
|
||||
AcpiHwDisableGpeForWakeup (GpeEventInfo);
|
||||
return (AE_OK);
|
||||
}
|
||||
@ -264,7 +268,7 @@ AcpiHwDisableGpe (
|
||||
*
|
||||
* FUNCTION: AcpiHwDisableGpeForWakeup
|
||||
*
|
||||
* PARAMETERS: GpeNumber - The GPE
|
||||
* PARAMETERS: GpeEventInfo - Info block for the GPE to be disabled
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
@ -291,9 +295,8 @@ AcpiHwDisableGpeForWakeup (
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Clear the bit so we will disable this when sleeping
|
||||
*/
|
||||
/* Clear the bit so we will disable this when sleeping */
|
||||
|
||||
GpeRegisterInfo->WakeEnable &= ~(GpeEventInfo->BitMask);
|
||||
}
|
||||
|
||||
@ -302,11 +305,11 @@ AcpiHwDisableGpeForWakeup (
|
||||
*
|
||||
* FUNCTION: AcpiHwClearGpe
|
||||
*
|
||||
* PARAMETERS: GpeNumber - The GPE
|
||||
* PARAMETERS: GpeEventInfo - Info block for the GPE to be cleared
|
||||
*
|
||||
* RETURN: None
|
||||
* RETURN: StatusStatus
|
||||
*
|
||||
* DESCRIPTION: Clear a single GPE.
|
||||
* DESCRIPTION: Clear the status bit for a single GPE.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
@ -335,9 +338,10 @@ AcpiHwClearGpe (
|
||||
*
|
||||
* FUNCTION: AcpiHwGetGpeStatus
|
||||
*
|
||||
* PARAMETERS: GpeNumber - The GPE
|
||||
* PARAMETERS: GpeEventInfo - Info block for the GPE to queried
|
||||
* EventStatus - Where the GPE status is returned
|
||||
*
|
||||
* RETURN: None
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Return the status of a single GPE.
|
||||
*
|
||||
@ -463,7 +467,7 @@ AcpiHwDisableGpeBlock (
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Clear all GPEs within a GPE block
|
||||
* DESCRIPTION: Clear status bits for all GPEs within a GPE block
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
@ -480,7 +484,7 @@ AcpiHwClearGpeBlock (
|
||||
|
||||
for (i = 0; i < GpeBlock->RegisterCount; i++)
|
||||
{
|
||||
/* Clear all GPEs in this register */
|
||||
/* Clear status on all GPEs in this register */
|
||||
|
||||
Status = AcpiHwLowLevelWrite (8, 0xFF,
|
||||
&GpeBlock->RegisterInfo[i].StatusAddress);
|
||||
@ -496,19 +500,20 @@ AcpiHwClearGpeBlock (
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiHwDisableNonWakeupGpeBlock
|
||||
* FUNCTION: AcpiHwPrepareGpeBlockForSleep
|
||||
*
|
||||
* PARAMETERS: GpeXruptInfo - GPE Interrupt info
|
||||
* GpeBlock - Gpe Block info
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Disable all GPEs except wakeup GPEs in a GPE block
|
||||
* DESCRIPTION: Disable all runtime GPEs and enable all wakeup GPEs -- within
|
||||
* a single GPE block
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static ACPI_STATUS
|
||||
AcpiHwDisableNonWakeupGpeBlock (
|
||||
AcpiHwPrepareGpeBlockForSleep (
|
||||
ACPI_GPE_XRUPT_INFO *GpeXruptInfo,
|
||||
ACPI_GPE_BLOCK_INFO *GpeBlock)
|
||||
{
|
||||
@ -527,8 +532,11 @@ AcpiHwDisableNonWakeupGpeBlock (
|
||||
for (i = 0; i < GpeBlock->RegisterCount; i++)
|
||||
{
|
||||
/*
|
||||
* Read the enabled status of all GPEs. We
|
||||
* Read the enabled/disabled status of all GPEs. We
|
||||
* will be using it to restore all the GPEs later.
|
||||
*
|
||||
* NOTE: Wake GPEs are are ALL disabled at this time, so when we wake
|
||||
* and restore this register, they will be automatically disabled.
|
||||
*/
|
||||
Status = AcpiHwLowLevelRead (8, &InValue,
|
||||
&GpeRegisterInfo->EnableAddress);
|
||||
@ -540,7 +548,8 @@ AcpiHwDisableNonWakeupGpeBlock (
|
||||
GpeRegisterInfo->Enable = (UINT8) InValue;
|
||||
|
||||
/*
|
||||
* Disable all GPEs except wakeup GPEs.
|
||||
* 1) Disable all runtime GPEs
|
||||
* 2) Enable all wakeup GPEs
|
||||
*/
|
||||
Status = AcpiHwLowLevelWrite (8, GpeRegisterInfo->WakeEnable,
|
||||
&GpeRegisterInfo->EnableAddress);
|
||||
@ -549,6 +558,8 @@ AcpiHwDisableNonWakeupGpeBlock (
|
||||
return (Status);
|
||||
}
|
||||
|
||||
/* Point to next GPE register */
|
||||
|
||||
GpeRegisterInfo++;
|
||||
}
|
||||
|
||||
@ -558,22 +569,22 @@ AcpiHwDisableNonWakeupGpeBlock (
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiHwDisableNonWakeupGpes
|
||||
* FUNCTION: AcpiHwPrepareGpesForSleep
|
||||
*
|
||||
* PARAMETERS: None
|
||||
*
|
||||
* RETURN: None
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Disable all non-wakeup GPEs
|
||||
* DESCRIPTION: Disable all runtime GPEs, enable all wake GPEs.
|
||||
* Called with interrupts disabled. The interrupt handler also
|
||||
* modifies GpeRegisterInfo->Enable, so it should not be
|
||||
* given the chance to run until after non-wake GPEs are
|
||||
* given the chance to run until after the runtime GPEs are
|
||||
* re-enabled.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
ACPI_STATUS
|
||||
AcpiHwDisableNonWakeupGpes (
|
||||
AcpiHwPrepareGpesForSleep (
|
||||
void)
|
||||
{
|
||||
ACPI_STATUS Status;
|
||||
@ -582,27 +593,27 @@ AcpiHwDisableNonWakeupGpes (
|
||||
ACPI_FUNCTION_ENTRY ();
|
||||
|
||||
|
||||
Status = AcpiEvWalkGpeList (AcpiHwDisableNonWakeupGpeBlock);
|
||||
|
||||
Status = AcpiEvWalkGpeList (AcpiHwPrepareGpeBlockForSleep);
|
||||
return (Status);
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiHwEnableNonWakeupGpeBlock
|
||||
* FUNCTION: AcpiHwRestoreGpeBlockOnWake
|
||||
*
|
||||
* PARAMETERS: GpeXruptInfo - GPE Interrupt info
|
||||
* GpeBlock - Gpe Block info
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Enable a single GPE.
|
||||
* DESCRIPTION: Enable all runtime GPEs and disable all wake GPEs -- in one
|
||||
* GPE block
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static ACPI_STATUS
|
||||
AcpiHwEnableNonWakeupGpeBlock (
|
||||
AcpiHwRestoreGpeBlockOnWake (
|
||||
ACPI_GPE_XRUPT_INFO *GpeXruptInfo,
|
||||
ACPI_GPE_BLOCK_INFO *GpeBlock)
|
||||
{
|
||||
@ -631,8 +642,12 @@ AcpiHwEnableNonWakeupGpeBlock (
|
||||
}
|
||||
|
||||
/*
|
||||
* We previously stored the enabled status of all GPEs.
|
||||
* Blast them back in.
|
||||
* Restore the GPE Enable register, which will do the following:
|
||||
*
|
||||
* 1) Disable all wakeup GPEs
|
||||
* 2) Enable all runtime GPEs
|
||||
*
|
||||
* (On sleep, we saved the enabled status of all GPEs)
|
||||
*/
|
||||
Status = AcpiHwLowLevelWrite (8, GpeRegisterInfo->Enable,
|
||||
&GpeRegisterInfo->EnableAddress);
|
||||
@ -641,28 +656,30 @@ AcpiHwEnableNonWakeupGpeBlock (
|
||||
return (Status);
|
||||
}
|
||||
|
||||
/* Point to next GPE register */
|
||||
|
||||
GpeRegisterInfo++;
|
||||
}
|
||||
|
||||
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiHwEnableNonWakeupGpes
|
||||
* FUNCTION: AcpiHwRestoreGpesOnWake
|
||||
*
|
||||
* PARAMETERS: None
|
||||
*
|
||||
* RETURN: None
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Enable all non-wakeup GPEs we previously enabled.
|
||||
* DESCRIPTION: Enable all runtime GPEs and disable all wake GPEs -- in all
|
||||
* GPE blocks
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
ACPI_STATUS
|
||||
AcpiHwEnableNonWakeupGpes (
|
||||
AcpiHwRestoreGpesOnWake (
|
||||
void)
|
||||
{
|
||||
ACPI_STATUS Status;
|
||||
@ -671,7 +688,6 @@ AcpiHwEnableNonWakeupGpes (
|
||||
ACPI_FUNCTION_ENTRY ();
|
||||
|
||||
|
||||
Status = AcpiEvWalkGpeList (AcpiHwEnableNonWakeupGpeBlock);
|
||||
|
||||
Status = AcpiEvWalkGpeList (AcpiHwRestoreGpeBlockOnWake);
|
||||
return (Status);
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*******************************************************************************
|
||||
*
|
||||
* Module Name: nsaccess - Top-level functions for accessing ACPI namespace
|
||||
* $Revision: 179 $
|
||||
* $Revision: 180 $
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
@ -335,6 +335,15 @@ AcpiNsRootInitialize (void)
|
||||
|
||||
UnlockAndExit:
|
||||
(void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
|
||||
|
||||
/* Save a handle to "_GPE", it is always present */
|
||||
|
||||
if (ACPI_SUCCESS (Status))
|
||||
{
|
||||
Status = AcpiNsGetNodeByPath ("\\_GPE", NULL, ACPI_NS_NO_UPSEARCH,
|
||||
&AcpiGbl_FadtGpeDevice);
|
||||
}
|
||||
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
|
||||
@ -685,6 +694,7 @@ AcpiNsLookup (
|
||||
if ((NumSegments == 0) &&
|
||||
(TypeToCheckFor != ACPI_TYPE_ANY) &&
|
||||
(TypeToCheckFor != ACPI_TYPE_LOCAL_ALIAS) &&
|
||||
(TypeToCheckFor != ACPI_TYPE_LOCAL_METHOD_ALIAS) &&
|
||||
(TypeToCheckFor != ACPI_TYPE_LOCAL_SCOPE) &&
|
||||
(ThisNode->Type != ACPI_TYPE_ANY) &&
|
||||
(ThisNode->Type != TypeToCheckFor))
|
||||
|
@ -1,7 +1,7 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Module Name: nsdump - table dumping routines for debug
|
||||
* $Revision: 157 $
|
||||
* $Revision: 158 $
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@ -447,6 +447,7 @@ AcpiNsDumpOneObject (
|
||||
|
||||
|
||||
case ACPI_TYPE_LOCAL_ALIAS:
|
||||
case ACPI_TYPE_LOCAL_METHOD_ALIAS:
|
||||
|
||||
AcpiOsPrintf ("Target %4.4s (%p)\n", AcpiUtGetNodeName (ObjDesc), ObjDesc);
|
||||
break;
|
||||
|
@ -2,7 +2,7 @@
|
||||
*
|
||||
* Module Name: nseval - Object evaluation interfaces -- includes control
|
||||
* method lookup and execution.
|
||||
* $Revision: 124 $
|
||||
* $Revision: 125 $
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
@ -400,6 +400,16 @@ AcpiNsEvaluateByHandle (
|
||||
return_ACPI_STATUS (AE_BAD_PARAMETER);
|
||||
}
|
||||
|
||||
/*
|
||||
* For a method alias, we must grab the actual method node
|
||||
* so that proper scoping context will be established
|
||||
* before execution.
|
||||
*/
|
||||
if (AcpiNsGetType (Node) == ACPI_TYPE_LOCAL_METHOD_ALIAS)
|
||||
{
|
||||
Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Node->Object);
|
||||
}
|
||||
|
||||
/*
|
||||
* Two major cases here:
|
||||
* 1) The object is an actual control method -- execute it.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*******************************************************************************
|
||||
*
|
||||
* Module Name: nssearch - Namespace search
|
||||
* $Revision: 100 $
|
||||
* $Revision: 101 $
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
@ -191,6 +191,13 @@ AcpiNsSearchNode (
|
||||
|
||||
if (NextNode->Name.Integer == TargetName)
|
||||
{
|
||||
/* Resolve a control method alias if any */
|
||||
|
||||
if (AcpiNsGetType (NextNode) == ACPI_TYPE_LOCAL_METHOD_ALIAS)
|
||||
{
|
||||
NextNode = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, NextNode->Object);
|
||||
}
|
||||
|
||||
/*
|
||||
* Found matching entry.
|
||||
*/
|
||||
|
@ -2,7 +2,7 @@
|
||||
*
|
||||
* Module Name: nsutils - Utilities for accessing ACPI namespace, accessing
|
||||
* parents and siblings and Scope manipulation
|
||||
* $Revision: 133 $
|
||||
* $Revision: 134 $
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@ -341,7 +341,7 @@ AcpiNsGetType (
|
||||
|
||||
if (!Node)
|
||||
{
|
||||
ACPI_REPORT_WARNING (("NsGetType: Null Node ptr"));
|
||||
ACPI_REPORT_WARNING (("NsGetType: Null Node input pointer\n"));
|
||||
return_VALUE (ACPI_TYPE_ANY);
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
*
|
||||
* Module Name: nsxfeval - Public interfaces to the ACPI subsystem
|
||||
* ACPI Object evaluation interfaces
|
||||
* $Revision: 11 $
|
||||
* $Revision: 12 $
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
@ -120,6 +120,7 @@
|
||||
|
||||
#include "acpi.h"
|
||||
#include "acnamesp.h"
|
||||
#include "acinterp.h"
|
||||
|
||||
|
||||
#define _COMPONENT ACPI_NAMESPACE
|
||||
@ -231,11 +232,11 @@ AcpiEvaluateObjectTyped (
|
||||
* FUNCTION: AcpiEvaluateObject
|
||||
*
|
||||
* PARAMETERS: Handle - Object handle (optional)
|
||||
* *Pathname - Object pathname (optional)
|
||||
* **ExternalParams - List of parameters to pass to method,
|
||||
* Pathname - Object pathname (optional)
|
||||
* 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
|
||||
* ReturnBuffer - Where to put method's return value (if
|
||||
* any). If NULL, no value is returned.
|
||||
*
|
||||
* RETURN: Status
|
||||
@ -254,6 +255,7 @@ AcpiEvaluateObject (
|
||||
ACPI_BUFFER *ReturnBuffer)
|
||||
{
|
||||
ACPI_STATUS Status;
|
||||
ACPI_STATUS Status2;
|
||||
ACPI_OPERAND_OBJECT **InternalParams = NULL;
|
||||
ACPI_OPERAND_OBJECT *InternalReturnObj = NULL;
|
||||
ACPI_SIZE BufferSpaceNeeded;
|
||||
@ -288,7 +290,7 @@ AcpiEvaluateObject (
|
||||
for (i = 0; i < ExternalParams->Count; i++)
|
||||
{
|
||||
Status = AcpiUtCopyEobjectToIobject (&ExternalParams->Pointer[i],
|
||||
&InternalParams[i]);
|
||||
&InternalParams[i]);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
AcpiUtDeleteInternalObjectList (InternalParams);
|
||||
@ -422,15 +424,22 @@ AcpiEvaluateObject (
|
||||
}
|
||||
}
|
||||
|
||||
/* Delete the return and parameter objects */
|
||||
|
||||
if (InternalReturnObj)
|
||||
{
|
||||
/*
|
||||
* Delete the internal return object. (Or at least
|
||||
* decrement the reference count by one)
|
||||
/*
|
||||
* Delete the internal return object. NOTE: Interpreter
|
||||
* must be locked to avoid race condition.
|
||||
*/
|
||||
AcpiUtRemoveReference (InternalReturnObj);
|
||||
Status2 = AcpiExEnterInterpreter ();
|
||||
if (ACPI_SUCCESS (Status2))
|
||||
{
|
||||
/*
|
||||
* Delete the internal return object. (Or at least
|
||||
* decrement the reference count by one)
|
||||
*/
|
||||
AcpiUtRemoveReference (InternalReturnObj);
|
||||
AcpiExExitInterpreter ();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*******************************************************************************
|
||||
*
|
||||
* Module Name: rsaddr - Address resource descriptors (16/32/64)
|
||||
* $Revision: 34 $
|
||||
* $Revision: 35 $
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
@ -162,6 +162,7 @@ AcpiRsAddress16Resource (
|
||||
|
||||
ACPI_FUNCTION_TRACE ("RsAddress16Resource");
|
||||
|
||||
|
||||
/*
|
||||
* Point past the Descriptor to get the number of bytes consumed
|
||||
*/
|
||||
@ -226,7 +227,7 @@ AcpiRsAddress16Resource (
|
||||
OutputStruct->Data.Address16.Attribute.Memory.ReadWriteAttribute =
|
||||
(UINT16) (Temp8 & 0x01);
|
||||
OutputStruct->Data.Address16.Attribute.Memory.CacheAttribute =
|
||||
(UINT16) ((Temp8 >> 1) & 0x0F);
|
||||
(UINT16) ((Temp8 >> 1) & 0x03);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -431,7 +432,7 @@ AcpiRsAddress16Stream (
|
||||
|
||||
Temp8 |=
|
||||
(LinkedList->Data.Address16.Attribute.Memory.CacheAttribute &
|
||||
0x0F) << 1;
|
||||
0x03) << 1;
|
||||
}
|
||||
else if (ACPI_IO_RANGE == LinkedList->Data.Address16.ResourceType)
|
||||
{
|
||||
@ -628,7 +629,7 @@ AcpiRsAddress32Resource (
|
||||
(UINT16) (Temp8 & 0x01);
|
||||
|
||||
OutputStruct->Data.Address32.Attribute.Memory.CacheAttribute =
|
||||
(UINT16) ((Temp8 >> 1) & 0x0F);
|
||||
(UINT16) ((Temp8 >> 1) & 0x03);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -831,7 +832,7 @@ AcpiRsAddress32Stream (
|
||||
|
||||
Temp8 |=
|
||||
(LinkedList->Data.Address32.Attribute.Memory.CacheAttribute &
|
||||
0x0F) << 1;
|
||||
0x03) << 1;
|
||||
}
|
||||
else if (ACPI_IO_RANGE == LinkedList->Data.Address32.ResourceType)
|
||||
{
|
||||
@ -1027,7 +1028,7 @@ AcpiRsAddress64Resource (
|
||||
(UINT16) (Temp8 & 0x01);
|
||||
|
||||
OutputStruct->Data.Address64.Attribute.Memory.CacheAttribute =
|
||||
(UINT16) ((Temp8 >> 1) & 0x0F);
|
||||
(UINT16) ((Temp8 >> 1) & 0x03);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1232,7 +1233,7 @@ AcpiRsAddress64Stream (
|
||||
|
||||
Temp8 |=
|
||||
(LinkedList->Data.Address64.Attribute.Memory.CacheAttribute &
|
||||
0x0F) << 1;
|
||||
0x03) << 1;
|
||||
}
|
||||
else if (ACPI_IO_RANGE == LinkedList->Data.Address64.ResourceType)
|
||||
{
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*******************************************************************************
|
||||
*
|
||||
* Module Name: utmisc - common utility procedures
|
||||
* $Revision: 99 $
|
||||
* $Revision: 100 $
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
@ -636,6 +636,7 @@ AcpiUtStrupr (
|
||||
return (SrcString);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiUtMutexInitialize
|
||||
@ -671,10 +672,8 @@ AcpiUtMutexInitialize (
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Status = AcpiOsCreateLock (&AcpiGbl_GpeLock);
|
||||
|
||||
return_ACPI_STATUS (AE_OK);
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user