aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJung-uk Kim <jkim@FreeBSD.org>2019-08-01 17:45:43 +0000
committerJung-uk Kim <jkim@FreeBSD.org>2019-08-01 17:45:43 +0000
commit2e578044134b742546a8cf7d49597f34528bdbec (patch)
tree955c6f511c35636f66684e0f62bba9edf3ed632e
parent197c67982470ac932c5e5c475147b6fb57df8c4a (diff)
Revert r349863 (ACPICA 20190703).
This commit caused boot failures on some systems. Requested by: scottl
Notes
Notes: svn path=/head/; revision=350510
-rw-r--r--sys/contrib/dev/acpica/changes.txt49
-rw-r--r--sys/contrib/dev/acpica/compiler/asldefine.h16
-rw-r--r--sys/contrib/dev/acpica/compiler/aslglobal.h15
-rw-r--r--sys/contrib/dev/acpica/compiler/aslload.c59
-rw-r--r--sys/contrib/dev/acpica/compiler/aslmessages.c3
-rw-r--r--sys/contrib/dev/acpica/compiler/aslmessages.h1
-rw-r--r--sys/contrib/dev/acpica/compiler/aslstubs.c6
-rw-r--r--sys/contrib/dev/acpica/compiler/aslsupport.l18
-rw-r--r--sys/contrib/dev/acpica/components/dispatcher/dsinit.c2
-rw-r--r--sys/contrib/dev/acpica/components/events/evgpe.c9
-rw-r--r--sys/contrib/dev/acpica/components/events/evgpeblk.c2
-rw-r--r--sys/contrib/dev/acpica/components/events/evxface.c2
-rw-r--r--sys/contrib/dev/acpica/components/events/evxfgpe.c2
-rw-r--r--sys/contrib/dev/acpica/components/executer/exconfig.c12
-rw-r--r--sys/contrib/dev/acpica/components/namespace/nsaccess.c57
-rw-r--r--sys/contrib/dev/acpica/components/namespace/nseval.c210
-rw-r--r--sys/contrib/dev/acpica/components/namespace/nsinit.c51
-rw-r--r--sys/contrib/dev/acpica/components/namespace/nsload.c12
-rw-r--r--sys/contrib/dev/acpica/components/namespace/nsutils.c13
-rw-r--r--sys/contrib/dev/acpica/components/tables/tbdata.c13
-rw-r--r--sys/contrib/dev/acpica/components/tables/tbxfload.c7
-rw-r--r--sys/contrib/dev/acpica/components/utilities/utinit.c1
-rw-r--r--sys/contrib/dev/acpica/components/utilities/utxfinit.c18
-rw-r--r--sys/contrib/dev/acpica/include/acevents.h3
-rw-r--r--sys/contrib/dev/acpica/include/acglobal.h1
-rw-r--r--sys/contrib/dev/acpica/include/acnamesp.h4
-rw-r--r--sys/contrib/dev/acpica/include/acpixf.h2
27 files changed, 341 insertions, 247 deletions
diff --git a/sys/contrib/dev/acpica/changes.txt b/sys/contrib/dev/acpica/changes.txt
index 0020457b5d2a..6d7724949565 100644
--- a/sys/contrib/dev/acpica/changes.txt
+++ b/sys/contrib/dev/acpica/changes.txt
@@ -1,53 +1,4 @@
----------------------------------------
-03 July 2019. Summary of changes for version 20190703:
-
-
-1) ACPICA kernel-resident subsystem:
-
-Remove legacy module-level support code. There were still some remnants
-of the legacy module-level code executions. Since we no longer support
-this option, this is essentially dead code and has been removed from the
-ACPICA source.
-
-iASL: ensure that _WAK, _PTS, _TTS, and _Sx are declared only at the root
-scope. If these named objects are declared outside the root scope, they
-will not be invoked by any host Operating System.
-
-Clear status of GPEs on first direct enable. ACPI GPEs (other than the EC
-one) can be enabled in two situations. First, the GPEs with existing _Lxx
-and _Exx methods are enabled implicitly by ACPICA during system
-initialization. Second, the GPEs without these methods (like GPEs listed
-by _PRW objects for wakeup devices) need to be enabled directly by the
-code that is going to use them (e.g. ACPI power management or device
-drivers).
-
-In the former case, if the status of a given GPE is set to start with,
-its handler method (either _Lxx or _Exx) needs to be invoked to take care
-of the events (possibly) signaled before the GPE was enabled. In the
-latter case, however, the first caller of AcpiEnableGpe() for a given GPE
-should not be expected to care about any events that might be signaled
-through it earlier. In that case, it is better to clear the status of
-the GPE before enabling it, to prevent stale events from triggering
-unwanted actions (like spurious system resume, for example).
-
-For this reason, modify AcpiEvAddGpeReference() to take an additional
-boolean argument indicating whether or not the GPE status needs to be
-cleared when its reference counter changes from zero to one and make
-AcpiEnableGpe() pass TRUE to it through that new argument.
-
-
-2) iASL Compiler/Disassembler and ACPICA tools:
-
-The tool generation process has been migrated to MSVC 2017, and all
-project files have been upgraded. The new project files appear in the
-directory \acpica\generate\msvc2017. This change effectively deprecates
-the older project files in \acpica\generate\msvc9.
-
-iASL: ensure that _WAK, _PTS, _TTS, and _Sx are declared only at the root
-scope. If these named objects are declared outside the root scope, they
-will not be invoked by any host Operating System
-
-----------------------------------------
09 May 2019. Summary of changes for version 20190509:
diff --git a/sys/contrib/dev/acpica/compiler/asldefine.h b/sys/contrib/dev/acpica/compiler/asldefine.h
index c511187529ed..cffb0af1fe52 100644
--- a/sys/contrib/dev/acpica/compiler/asldefine.h
+++ b/sys/contrib/dev/acpica/compiler/asldefine.h
@@ -298,20 +298,4 @@
#define COMMENT_CAPTURE_ON AslGbl_CommentState.CaptureComments = TRUE;
#define COMMENT_CAPTURE_OFF AslGbl_CommentState.CaptureComments = FALSE;
-/*
- * Special name segments - these must only be declared at the root scope
- */
-#define NAMESEG__PTS "_PTS"
-#define NAMESEG__WAK "_WAK"
-#define NAMESEG__S0 "_S0_"
-#define NAMESEG__S1 "_S1_"
-#define NAMESEG__S2 "_S2_"
-#define NAMESEG__S3 "_S3_"
-#define NAMESEG__S4 "_S4_"
-#define NAMESEG__S5 "_S5_"
-#define NAMESEG__TTS "_TTS"
-
-#define MAX_SPECIAL_NAMES 9
-
-
#endif /* ASLDEFINE.H */
diff --git a/sys/contrib/dev/acpica/compiler/aslglobal.h b/sys/contrib/dev/acpica/compiler/aslglobal.h
index 740f7f34ae51..213c540875f5 100644
--- a/sys/contrib/dev/acpica/compiler/aslglobal.h
+++ b/sys/contrib/dev/acpica/compiler/aslglobal.h
@@ -223,28 +223,13 @@ const char *AslGbl_OpFlagNames[ACPI_NUM_OP_FLAGS] =
"OP_NOT_FOUND_DURING_LOAD"
};
-const char *AslGbl_SpecialNamedObjects [MAX_SPECIAL_NAMES] =
-{
- NAMESEG__PTS,
- NAMESEG__WAK,
- NAMESEG__S0,
- NAMESEG__S1,
- NAMESEG__S2,
- NAMESEG__S3,
- NAMESEG__S4,
- NAMESEG__S5,
- NAMESEG__TTS
-};
-
#else
extern ASL_FILE_DESC AslGbl_FileDescs [ASL_NUM_FILES];
extern UINT32 AslGbl_ExceptionCount[ASL_NUM_REPORT_LEVELS];
extern const char *AslGbl_OpFlagNames[ACPI_NUM_OP_FLAGS];
-extern const char *AslGbl_SpecialNamedObjects[MAX_SPECIAL_NAMES];
#endif
-
/*
* Parser and other externals
*/
diff --git a/sys/contrib/dev/acpica/compiler/aslload.c b/sys/contrib/dev/acpica/compiler/aslload.c
index 19a4ce1edb7c..1ab2f997cfe2 100644
--- a/sys/contrib/dev/acpica/compiler/aslload.c
+++ b/sys/contrib/dev/acpica/compiler/aslload.c
@@ -164,7 +164,6 @@
static ACPI_STATUS
LdLoadFieldElements (
- UINT32 AmlType,
ACPI_PARSE_OBJECT *Op,
ACPI_WALK_STATE *WalkState);
@@ -191,10 +190,6 @@ LdCommonNamespaceEnd (
UINT32 Level,
void *Context);
-static void
-LdCheckSpecialNames (
- ACPI_NAMESPACE_NODE *Node,
- ACPI_PARSE_OBJECT *Op);
/*******************************************************************************
*
@@ -252,8 +247,7 @@ LdLoadNamespace (
*
* FUNCTION: LdLoadFieldElements
*
- * PARAMETERS: AmlType - Type to search
- * Op - Parent node (Field)
+ * PARAMETERS: Op - Parent node (Field)
* WalkState - Current walk state
*
* RETURN: Status
@@ -265,7 +259,6 @@ LdLoadNamespace (
static ACPI_STATUS
LdLoadFieldElements (
- UINT32 AmlType,
ACPI_PARSE_OBJECT *Op,
ACPI_WALK_STATE *WalkState)
{
@@ -281,7 +274,7 @@ LdLoadFieldElements (
{
Status = AcpiNsLookup (WalkState->ScopeInfo,
SourceRegion->Asl.Value.String,
- AmlType, ACPI_IMODE_EXECUTE,
+ ACPI_TYPE_REGION, ACPI_IMODE_EXECUTE,
ACPI_NS_DONT_OPEN_SCOPE, NULL, &Node);
if (Status == AE_NOT_FOUND)
{
@@ -514,15 +507,11 @@ LdNamespace1Begin (
*/
switch (Op->Asl.AmlOpcode)
{
- case AML_INDEX_FIELD_OP:
-
- Status = LdLoadFieldElements (ACPI_TYPE_LOCAL_REGION_FIELD, Op, WalkState);
- return (Status);
-
case AML_BANK_FIELD_OP:
+ case AML_INDEX_FIELD_OP:
case AML_FIELD_OP:
- Status = LdLoadFieldElements (ACPI_TYPE_REGION, Op, WalkState);
+ Status = LdLoadFieldElements (Op, WalkState);
return (Status);
case AML_INT_CONNECTION_OP:
@@ -977,10 +966,6 @@ LdNamespace1Begin (
}
}
- /* Check special names like _WAK and _PTS */
-
- LdCheckSpecialNames (Node, Op);
-
if (ForceNewScope)
{
Status = AcpiDsScopeStackPush (Node, ObjectType, WalkState);
@@ -1021,42 +1006,6 @@ FinishNode:
/*******************************************************************************
*
- * FUNCTION: LdCheckSpecialNames
- *
- * PARAMETERS: Node - Node that represents the named object
- * Op - Named object declaring this named object
- *
- * RETURN: None
- *
- * DESCRIPTION: Check if certain named objects are declared in the incorrect
- * scope. Special named objects are listed in
- * AslGbl_SpecialNamedObjects and can only be declared at the root
- * scope.
- *
- ******************************************************************************/
-
-static void
-LdCheckSpecialNames (
- ACPI_NAMESPACE_NODE *Node,
- ACPI_PARSE_OBJECT *Op)
-{
- UINT32 i;
-
-
- for (i = 0; i < MAX_SPECIAL_NAMES; i++)
- {
- if (ACPI_COMPARE_NAMESEG(Node->Name.Ascii, AslGbl_SpecialNamedObjects[i]) &&
- Node->Parent != AcpiGbl_RootNode)
- {
- AslError (ASL_ERROR, ASL_MSG_INVALID_SPECIAL_NAME, Op, Op->Asl.ExternalName);
- return;
- }
- }
-}
-
-
-/*******************************************************************************
- *
* FUNCTION: LdNamespace2Begin
*
* PARAMETERS: ASL_WALK_CALLBACK
diff --git a/sys/contrib/dev/acpica/compiler/aslmessages.c b/sys/contrib/dev/acpica/compiler/aslmessages.c
index 4a7e3449dffa..eb9a24148657 100644
--- a/sys/contrib/dev/acpica/compiler/aslmessages.c
+++ b/sys/contrib/dev/acpica/compiler/aslmessages.c
@@ -365,8 +365,7 @@ const char *AslCompilerMsgs [] =
/* ASL_MSG_REGION_LENGTH */ "Operation Region declared with zero length",
/* ASL_MSG_TEMPORARY_OBJECT */ "Object is created temporarily in another method and cannot be accessed",
/* ASL_MSG_UNDEFINED_EXTERNAL */ "Named object was declared external but the actual definition does not exist",
-/* ASL_MSG_BUFFER_FIELD_OVERFLOW */ "Buffer field extends beyond end of target buffer",
-/* ASL_MSG_INVALID_SPECIAL_NAME */ "declaration of this named object outside root scope is illegal"
+/* ASL_MSG_BUFFER_FIELD_OVERFLOW */ "Buffer field extends beyond end of target buffer"
};
/* Table compiler */
diff --git a/sys/contrib/dev/acpica/compiler/aslmessages.h b/sys/contrib/dev/acpica/compiler/aslmessages.h
index d998f0fe8eda..15613685d192 100644
--- a/sys/contrib/dev/acpica/compiler/aslmessages.h
+++ b/sys/contrib/dev/acpica/compiler/aslmessages.h
@@ -368,7 +368,6 @@ typedef enum
ASL_MSG_TEMPORARY_OBJECT,
ASL_MSG_UNDEFINED_EXTERNAL,
ASL_MSG_BUFFER_FIELD_OVERFLOW,
- ASL_MSG_INVALID_SPECIAL_NAME,
/* These messages are used by the Data Table compiler only */
diff --git a/sys/contrib/dev/acpica/compiler/aslstubs.c b/sys/contrib/dev/acpica/compiler/aslstubs.c
index 00799096d351..e4aef584b202 100644
--- a/sys/contrib/dev/acpica/compiler/aslstubs.c
+++ b/sys/contrib/dev/acpica/compiler/aslstubs.c
@@ -166,6 +166,12 @@
* Things like Events, Global Lock, etc. are not used
* by the compiler, so they are stubbed out here.
*/
+void
+AcpiNsExecModuleCodeList (
+ void)
+{
+}
+
ACPI_STATUS
AcpiNsInitializeObjects (
void)
diff --git a/sys/contrib/dev/acpica/compiler/aslsupport.l b/sys/contrib/dev/acpica/compiler/aslsupport.l
index 297bf2ee6bcc..69c1399a9ec4 100644
--- a/sys/contrib/dev/acpica/compiler/aslsupport.l
+++ b/sys/contrib/dev/acpica/compiler/aslsupport.l
@@ -220,7 +220,7 @@ AslDoLineDirective (
while ((c = input()) != '\n' && c != EOF)
{
- *AslGbl_LineBufPtr = (char) c;
+ *AslGbl_LineBufPtr = c;
AslGbl_LineBufPtr++;
}
*AslGbl_LineBufPtr = 0;
@@ -498,7 +498,7 @@ AslInsertLineBuffer (
if (AcpiGbl_CaptureComments)
{
- CvProcessCommentState ((char) SourceChar);
+ CvProcessCommentState (SourceChar);
}
}
}
@@ -601,7 +601,7 @@ loop:
AslInsertLineBuffer (c);
if (AcpiGbl_CaptureComments && CurrentState.CaptureComments)
{
- *StringBuffer = (char) c;
+ *StringBuffer = c;
++StringBuffer;
}
c1 = c;
@@ -629,7 +629,7 @@ loop:
AslInsertLineBuffer (c);
if (AcpiGbl_CaptureComments && CurrentState.CaptureComments)
{
- *StringBuffer = (char) c;
+ *StringBuffer = c;
++StringBuffer;
}
@@ -720,7 +720,7 @@ AslDoCommentType2 (
AslInsertLineBuffer (c);
if (AcpiGbl_CaptureComments && CurrentState.CaptureComments)
{
- *StringBuffer = (char) c;
+ *StringBuffer = c;
++StringBuffer;
}
}
@@ -878,7 +878,7 @@ DoCharacter:
if (ACPI_IS_OCTAL_DIGIT (StringChar))
{
State = ASL_OCTAL_CONSTANT;
- ConvertBuffer[0] = (char) StringChar;
+ ConvertBuffer[0] = StringChar;
i = 1;
continue;
}
@@ -934,7 +934,7 @@ DoCharacter:
/* Append another digit of the constant */
- ConvertBuffer[i] = (char) StringChar;
+ ConvertBuffer[i] = StringChar;
i++;
continue;
@@ -978,7 +978,7 @@ DoCharacter:
/* Append another digit of the constant */
- ConvertBuffer[i] = (char) StringChar;
+ ConvertBuffer[i] = StringChar;
i++;
continue;
@@ -989,7 +989,7 @@ DoCharacter:
/* Save the finished character */
- *StringBuffer = (char) StringChar;
+ *StringBuffer = StringChar;
StringBuffer++;
if (StringBuffer >= EndBuffer)
{
diff --git a/sys/contrib/dev/acpica/components/dispatcher/dsinit.c b/sys/contrib/dev/acpica/components/dispatcher/dsinit.c
index e07d4fcde76c..561f57e6e2ef 100644
--- a/sys/contrib/dev/acpica/components/dispatcher/dsinit.c
+++ b/sys/contrib/dev/acpica/components/dispatcher/dsinit.c
@@ -362,7 +362,7 @@ AcpiDsInitializeObjects (
if (ACPI_COMPARE_NAMESEG (Table->Signature, ACPI_SIG_DSDT))
{
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT,
- "\nACPI table initialization:\n"));
+ "\nInitializing Namespace objects:\n"));
}
/* Summary of objects initialized */
diff --git a/sys/contrib/dev/acpica/components/events/evgpe.c b/sys/contrib/dev/acpica/components/events/evgpe.c
index 6b0791987468..3fcb12fb352e 100644
--- a/sys/contrib/dev/acpica/components/events/evgpe.c
+++ b/sys/contrib/dev/acpica/components/events/evgpe.c
@@ -316,7 +316,6 @@ AcpiEvMaskGpe (
* FUNCTION: AcpiEvAddGpeReference
*
* PARAMETERS: GpeEventInfo - Add a reference to this GPE
- * ClearOnEnable - Clear GPE status before enabling it
*
* RETURN: Status
*
@@ -327,8 +326,7 @@ AcpiEvMaskGpe (
ACPI_STATUS
AcpiEvAddGpeReference (
- ACPI_GPE_EVENT_INFO *GpeEventInfo,
- BOOLEAN ClearOnEnable)
+ ACPI_GPE_EVENT_INFO *GpeEventInfo)
{
ACPI_STATUS Status = AE_OK;
@@ -346,11 +344,6 @@ AcpiEvAddGpeReference (
{
/* Enable on first reference */
- if (ClearOnEnable)
- {
- (void) AcpiHwClearGpe (GpeEventInfo);
- }
-
Status = AcpiEvUpdateGpeEnableMask (GpeEventInfo);
if (ACPI_SUCCESS (Status))
{
diff --git a/sys/contrib/dev/acpica/components/events/evgpeblk.c b/sys/contrib/dev/acpica/components/events/evgpeblk.c
index d7f1e860ed66..edca99d8e016 100644
--- a/sys/contrib/dev/acpica/components/events/evgpeblk.c
+++ b/sys/contrib/dev/acpica/components/events/evgpeblk.c
@@ -637,7 +637,7 @@ AcpiEvInitializeGpeBlock (
continue;
}
- Status = AcpiEvAddGpeReference (GpeEventInfo, FALSE);
+ Status = AcpiEvAddGpeReference (GpeEventInfo);
if (ACPI_FAILURE (Status))
{
ACPI_EXCEPTION ((AE_INFO, Status,
diff --git a/sys/contrib/dev/acpica/components/events/evxface.c b/sys/contrib/dev/acpica/components/events/evxface.c
index 31f7576aa94e..31134c4210a4 100644
--- a/sys/contrib/dev/acpica/components/events/evxface.c
+++ b/sys/contrib/dev/acpica/components/events/evxface.c
@@ -1256,7 +1256,7 @@ AcpiRemoveGpeHandler (
ACPI_GPE_DISPATCH_NOTIFY)) &&
Handler->OriginallyEnabled)
{
- (void) AcpiEvAddGpeReference (GpeEventInfo, FALSE);
+ (void) AcpiEvAddGpeReference (GpeEventInfo);
if (ACPI_GPE_IS_POLLING_NEEDED (GpeEventInfo))
{
/* Poll edge triggered GPEs to handle existing events */
diff --git a/sys/contrib/dev/acpica/components/events/evxfgpe.c b/sys/contrib/dev/acpica/components/events/evxfgpe.c
index 7519c8bbfe86..22f3f6b0c560 100644
--- a/sys/contrib/dev/acpica/components/events/evxfgpe.c
+++ b/sys/contrib/dev/acpica/components/events/evxfgpe.c
@@ -267,7 +267,7 @@ AcpiEnableGpe (
if (ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags) !=
ACPI_GPE_DISPATCH_NONE)
{
- Status = AcpiEvAddGpeReference (GpeEventInfo, TRUE);
+ Status = AcpiEvAddGpeReference (GpeEventInfo);
if (ACPI_SUCCESS (Status) &&
ACPI_GPE_IS_POLLING_NEEDED (GpeEventInfo))
{
diff --git a/sys/contrib/dev/acpica/components/executer/exconfig.c b/sys/contrib/dev/acpica/components/executer/exconfig.c
index 14c2becdbf31..a8b7f9752c3f 100644
--- a/sys/contrib/dev/acpica/components/executer/exconfig.c
+++ b/sys/contrib/dev/acpica/components/executer/exconfig.c
@@ -342,9 +342,10 @@ AcpiExLoadTableOp (
return_ACPI_STATUS (Status);
}
- /* Complete the initialization/resolution of new objects */
+ /* Complete the initialization/resolution of package objects */
- AcpiNsInitializeObjects ();
+ Status = AcpiNsWalkNamespace (ACPI_TYPE_PACKAGE, ACPI_ROOT_OBJECT,
+ ACPI_UINT32_MAX, 0, AcpiNsInitOnePackage, NULL, NULL, NULL);
/* Parameter Data (optional) */
@@ -619,11 +620,10 @@ AcpiExLoadOp (
return_ACPI_STATUS (Status);
}
- /* Complete the initialization/resolution of new objects */
+ /* Complete the initialization/resolution of package objects */
- AcpiExExitInterpreter ();
- AcpiNsInitializeObjects ();
- AcpiExEnterInterpreter ();
+ Status = AcpiNsWalkNamespace (ACPI_TYPE_PACKAGE, ACPI_ROOT_OBJECT,
+ ACPI_UINT32_MAX, 0, AcpiNsInitOnePackage, NULL, NULL, NULL);
/* Store the DdbHandle into the Target operand */
diff --git a/sys/contrib/dev/acpica/components/namespace/nsaccess.c b/sys/contrib/dev/acpica/components/namespace/nsaccess.c
index 843705a5f23f..891fe94061c7 100644
--- a/sys/contrib/dev/acpica/components/namespace/nsaccess.c
+++ b/sys/contrib/dev/acpica/components/namespace/nsaccess.c
@@ -184,7 +184,6 @@ AcpiNsRootInitialize (
ACPI_STATUS Status;
const ACPI_PREDEFINED_NAMES *InitVal = NULL;
ACPI_NAMESPACE_NODE *NewNode;
- ACPI_NAMESPACE_NODE *PrevNode = NULL;
ACPI_OPERAND_OBJECT *ObjDesc;
ACPI_STRING Val = NULL;
@@ -214,30 +213,13 @@ AcpiNsRootInitialize (
*/
AcpiGbl_RootNode = &AcpiGbl_RootNodeStruct;
- /* Enter the predefined names in the name table */
+ /* Enter the pre-defined names in the name table */
ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
"Entering predefined entries into namespace\n"));
- /*
- * Create the initial (default) namespace.
- * This namespace looks like something similar to this:
- *
- * ACPI Namespace (from Namespace Root):
- * 0 _GPE Scope 00203160 00
- * 0 _PR_ Scope 002031D0 00
- * 0 _SB_ Device 00203240 00 Notify Object: 0020ADD8
- * 0 _SI_ Scope 002032B0 00
- * 0 _TZ_ Device 00203320 00
- * 0 _REV Integer 00203390 00 = 0000000000000002
- * 0 _OS_ String 00203488 00 Len 14 "Microsoft Windows NT"
- * 0 _GL_ Mutex 00203580 00 Object 002035F0
- * 0 _OSI Method 00203678 00 Args 1 Len 0000 Aml 00000000
- */
for (InitVal = AcpiGbl_PreDefinedNames; InitVal->Name; InitVal++)
{
- Status = AE_OK;
-
/* _OSI is optional for now, will be permanent later */
if (!strcmp (InitVal->Name, "_OSI") && !AcpiGbl_CreateOsiMethod)
@@ -245,35 +227,17 @@ AcpiNsRootInitialize (
continue;
}
- /*
- * Create, init, and link the new predefined name
- * Note: No need to use AcpiNsLookup here because all the
- * predefined names are at the root level. It is much easier to
- * just create and link the new node(s) here.
- */
- NewNode = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_NAMESPACE_NODE));
- if (!NewNode)
- {
- Status = AE_NO_MEMORY;
- goto UnlockAndExit;
- }
-
- ACPI_COPY_NAMESEG (NewNode->Name.Ascii, InitVal->Name);
- NewNode->DescriptorType = ACPI_DESC_TYPE_NAMED;
- NewNode->Type = InitVal->Type;
-
- if (!PrevNode)
- {
- AcpiGbl_RootNodeStruct.Child = NewNode;
- }
- else
+ Status = AcpiNsLookup (NULL, ACPI_CAST_PTR (char, InitVal->Name),
+ InitVal->Type, ACPI_IMODE_LOAD_PASS2, ACPI_NS_NO_UPSEARCH,
+ NULL, &NewNode);
+ if (ACPI_FAILURE (Status))
{
- PrevNode->Peer = NewNode;
+ ACPI_EXCEPTION ((AE_INFO, Status,
+ "Could not create predefined name %s",
+ InitVal->Name));
+ continue;
}
- NewNode->Parent = &AcpiGbl_RootNodeStruct;
- PrevNode = NewNode;
-
/*
* Name entered successfully. If entry in PreDefinedNames[] specifies
* an initial value, create the initial value.
@@ -322,7 +286,7 @@ AcpiNsRootInitialize (
NewNode->Value = ObjDesc->Method.ParamCount;
#else
- /* Mark this as a very SPECIAL method (_OSI) */
+ /* Mark this as a very SPECIAL method */
ObjDesc->Method.InfoFlags = ACPI_METHOD_INTERNAL_ONLY;
ObjDesc->Method.Dispatch.Implementation = AcpiUtOsiImplementation;
@@ -395,6 +359,7 @@ AcpiNsRootInitialize (
}
}
+
UnlockAndExit:
(void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
diff --git a/sys/contrib/dev/acpica/components/namespace/nseval.c b/sys/contrib/dev/acpica/components/namespace/nseval.c
index 67e5f27ba69e..560a0bdf7fcc 100644
--- a/sys/contrib/dev/acpica/components/namespace/nseval.c
+++ b/sys/contrib/dev/acpica/components/namespace/nseval.c
@@ -160,6 +160,13 @@
#define _COMPONENT ACPI_NAMESPACE
ACPI_MODULE_NAME ("nseval")
+/* Local prototypes */
+
+static void
+AcpiNsExecModuleCode (
+ ACPI_OPERAND_OBJECT *MethodObj,
+ ACPI_EVALUATE_INFO *Info);
+
/*******************************************************************************
*
@@ -458,3 +465,206 @@ Cleanup:
Info->FullPathname = NULL;
return_ACPI_STATUS (Status);
}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiNsExecModuleCodeList
+ *
+ * PARAMETERS: None
+ *
+ * RETURN: None. Exceptions during method execution are ignored, since
+ * we cannot abort a table load.
+ *
+ * DESCRIPTION: Execute all elements of the global module-level code list.
+ * Each element is executed as a single control method.
+ *
+ * NOTE: With this option enabled, each block of detected executable AML
+ * code that is outside of any control method is wrapped with a temporary
+ * control method object and placed on a global list. The methods on this
+ * list are executed below.
+ *
+ * This function executes the module-level code for all tables only after
+ * all of the tables have been loaded. It is a legacy option and is
+ * not compatible with other ACPI implementations. See AcpiNsLoadTable.
+ *
+ * This function will be removed when the legacy option is removed.
+ *
+ ******************************************************************************/
+
+void
+AcpiNsExecModuleCodeList (
+ void)
+{
+ ACPI_OPERAND_OBJECT *Prev;
+ ACPI_OPERAND_OBJECT *Next;
+ ACPI_EVALUATE_INFO *Info;
+ UINT32 MethodCount = 0;
+
+
+ ACPI_FUNCTION_TRACE (NsExecModuleCodeList);
+
+
+ /* Exit now if the list is empty */
+
+ Next = AcpiGbl_ModuleCodeList;
+ if (!Next)
+ {
+ ACPI_DEBUG_PRINT ((ACPI_DB_INIT_NAMES,
+ "Legacy MLC block list is empty\n"));
+
+ return_VOID;
+ }
+
+ /* Allocate the evaluation information block */
+
+ Info = ACPI_ALLOCATE (sizeof (ACPI_EVALUATE_INFO));
+ if (!Info)
+ {
+ return_VOID;
+ }
+
+ /* Walk the list, executing each "method" */
+
+ while (Next)
+ {
+ Prev = Next;
+ Next = Next->Method.Mutex;
+
+ /* Clear the link field and execute the method */
+
+ Prev->Method.Mutex = NULL;
+ AcpiNsExecModuleCode (Prev, Info);
+ MethodCount++;
+
+ /* Delete the (temporary) method object */
+
+ AcpiUtRemoveReference (Prev);
+ }
+
+ ACPI_INFO ((
+ "Executed %u blocks of module-level executable AML code",
+ MethodCount));
+
+ ACPI_FREE (Info);
+ AcpiGbl_ModuleCodeList = NULL;
+ return_VOID;
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiNsExecModuleCode
+ *
+ * PARAMETERS: MethodObj - Object container for the module-level code
+ * Info - Info block for method evaluation
+ *
+ * RETURN: None. Exceptions during method execution are ignored, since
+ * we cannot abort a table load.
+ *
+ * DESCRIPTION: Execute a control method containing a block of module-level
+ * executable AML code. The control method is temporarily
+ * installed to the root node, then evaluated.
+ *
+ ******************************************************************************/
+
+static void
+AcpiNsExecModuleCode (
+ ACPI_OPERAND_OBJECT *MethodObj,
+ ACPI_EVALUATE_INFO *Info)
+{
+ ACPI_OPERAND_OBJECT *ParentObj;
+ ACPI_NAMESPACE_NODE *ParentNode;
+ ACPI_OBJECT_TYPE Type;
+ ACPI_STATUS Status;
+
+
+ ACPI_FUNCTION_TRACE (NsExecModuleCode);
+
+
+ /*
+ * Get the parent node. We cheat by using the NextObject field
+ * of the method object descriptor.
+ */
+ ParentNode = ACPI_CAST_PTR (
+ ACPI_NAMESPACE_NODE, MethodObj->Method.NextObject);
+ Type = AcpiNsGetType (ParentNode);
+
+ /*
+ * Get the region handler and save it in the method object. We may need
+ * this if an operation region declaration causes a _REG method to be run.
+ *
+ * We can't do this in AcpiPsLinkModuleCode because
+ * AcpiGbl_RootNode->Object is NULL at PASS1.
+ */
+ if ((Type == ACPI_TYPE_DEVICE) && ParentNode->Object)
+ {
+ MethodObj->Method.Dispatch.Handler =
+ ParentNode->Object->Device.Handler;
+ }
+
+ /* Must clear NextObject (AcpiNsAttachObject needs the field) */
+
+ MethodObj->Method.NextObject = NULL;
+
+ /* Initialize the evaluation information block */
+
+ memset (Info, 0, sizeof (ACPI_EVALUATE_INFO));
+ Info->PrefixNode = ParentNode;
+
+ /*
+ * Get the currently attached parent object. Add a reference,
+ * because the ref count will be decreased when the method object
+ * is installed to the parent node.
+ */
+ ParentObj = AcpiNsGetAttachedObject (ParentNode);
+ if (ParentObj)
+ {
+ AcpiUtAddReference (ParentObj);
+ }
+
+ /* Install the method (module-level code) in the parent node */
+
+ Status = AcpiNsAttachObject (ParentNode, MethodObj, ACPI_TYPE_METHOD);
+ if (ACPI_FAILURE (Status))
+ {
+ goto Exit;
+ }
+
+ /* Execute the parent node as a control method */
+
+ Status = AcpiNsEvaluate (Info);
+
+ ACPI_DEBUG_PRINT ((ACPI_DB_INIT_NAMES,
+ "Executed module-level code at %p\n",
+ MethodObj->Method.AmlStart));
+
+ /* Delete a possible implicit return value (in slack mode) */
+
+ if (Info->ReturnObject)
+ {
+ AcpiUtRemoveReference (Info->ReturnObject);
+ }
+
+ /* Detach the temporary method object */
+
+ AcpiNsDetachObject (ParentNode);
+
+ /* Restore the original parent object */
+
+ if (ParentObj)
+ {
+ Status = AcpiNsAttachObject (ParentNode, ParentObj, Type);
+ }
+ else
+ {
+ ParentNode->Type = (UINT8) Type;
+ }
+
+Exit:
+ if (ParentObj)
+ {
+ AcpiUtRemoveReference (ParentObj);
+ }
+ return_VOID;
+}
diff --git a/sys/contrib/dev/acpica/components/namespace/nsinit.c b/sys/contrib/dev/acpica/components/namespace/nsinit.c
index 0d60c5724334..1f21e85de819 100644
--- a/sys/contrib/dev/acpica/components/namespace/nsinit.c
+++ b/sys/contrib/dev/acpica/components/namespace/nsinit.c
@@ -212,30 +212,29 @@ AcpiNsInitializeObjects (
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
"**** Starting initialization of namespace objects ****\n"));
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT,
- "Final data object initialization: "));
+ "Completing Region/Field/Buffer/Package initialization:\n"));
- /* Clear the info block */
+ /* Set all init info to zero */
memset (&Info, 0, sizeof (ACPI_INIT_WALK_INFO));
/* Walk entire namespace from the supplied root */
- /*
- * TBD: will become ACPI_TYPE_PACKAGE as this type object
- * is now the only one that supports deferred initialization
- * (forward references).
- */
Status = AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT,
- ACPI_UINT32_MAX, AcpiNsInitOneObject, NULL, &Info, NULL);
+ ACPI_UINT32_MAX, AcpiNsInitOneObject, NULL,
+ &Info, NULL);
if (ACPI_FAILURE (Status))
{
ACPI_EXCEPTION ((AE_INFO, Status, "During WalkNamespace"));
}
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT,
- "Namespace contains %u (0x%X) objects\n",
- Info.ObjectCount,
- Info.ObjectCount));
+ " Initialized %u/%u Regions %u/%u Fields %u/%u "
+ "Buffers %u/%u Packages (%u nodes)\n",
+ Info.OpRegionInit, Info.OpRegionCount,
+ Info.FieldInit, Info.FieldCount,
+ Info.BufferInit, Info.BufferCount,
+ Info.PackageInit, Info.PackageCount, Info.ObjectCount));
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
"%u Control Methods found\n%u Op Regions found\n",
@@ -562,19 +561,35 @@ AcpiNsInitOneObject (
AcpiExEnterInterpreter ();
/*
- * Only initialization of Package objects can be deferred, in order
- * to support forward references.
+ * Each of these types can contain executable AML code within the
+ * declaration.
*/
switch (Type)
{
- case ACPI_TYPE_LOCAL_BANK_FIELD:
+ case ACPI_TYPE_REGION:
+
+ Info->OpRegionInit++;
+ Status = AcpiDsGetRegionArguments (ObjDesc);
+ break;
+
+ case ACPI_TYPE_BUFFER_FIELD:
+
+ Info->FieldInit++;
+ Status = AcpiDsGetBufferFieldArguments (ObjDesc);
+ break;
- /* TBD: BankFields do not require deferred init, remove this code */
+ case ACPI_TYPE_LOCAL_BANK_FIELD:
Info->FieldInit++;
Status = AcpiDsGetBankFieldArguments (ObjDesc);
break;
+ case ACPI_TYPE_BUFFER:
+
+ Info->BufferInit++;
+ Status = AcpiDsGetBufferArguments (ObjDesc);
+ break;
+
case ACPI_TYPE_PACKAGE:
/* Complete the initialization/resolution of the package object */
@@ -585,12 +600,8 @@ AcpiNsInitOneObject (
default:
- /* No other types should get here */
+ /* No other types can get here */
- Status = AE_TYPE;
- ACPI_EXCEPTION ((AE_INFO, Status,
- "Opcode is not deferred [%4.4s] (%s)",
- AcpiUtGetNodeName (Node), AcpiUtGetTypeName (Type)));
break;
}
diff --git a/sys/contrib/dev/acpica/components/namespace/nsload.c b/sys/contrib/dev/acpica/components/namespace/nsload.c
index cf8b17255a43..dbaf0840bf8c 100644
--- a/sys/contrib/dev/acpica/components/namespace/nsload.c
+++ b/sys/contrib/dev/acpica/components/namespace/nsload.c
@@ -268,6 +268,18 @@ Unlock:
ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
"**** Completed Table Object Initialization\n"));
+ /*
+ * This case handles the legacy option that groups all module-level
+ * code blocks together and defers execution until all of the tables
+ * are loaded. Execute all of these blocks at this time.
+ * Execute any module-level code that was detected during the table
+ * load phase.
+ *
+ * Note: this option is deprecated and will be eliminated in the
+ * future. Use of this option can cause problems with AML code that
+ * depends upon in-order immediate execution of module-level code.
+ */
+ AcpiNsExecModuleCodeList ();
return_ACPI_STATUS (Status);
}
diff --git a/sys/contrib/dev/acpica/components/namespace/nsutils.c b/sys/contrib/dev/acpica/components/namespace/nsutils.c
index 388ec784621f..b7912ac3649f 100644
--- a/sys/contrib/dev/acpica/components/namespace/nsutils.c
+++ b/sys/contrib/dev/acpica/components/namespace/nsutils.c
@@ -802,11 +802,24 @@ AcpiNsTerminate (
void)
{
ACPI_STATUS Status;
+ ACPI_OPERAND_OBJECT *Prev;
+ ACPI_OPERAND_OBJECT *Next;
ACPI_FUNCTION_TRACE (NsTerminate);
+ /* Delete any module-level code blocks */
+
+ Next = AcpiGbl_ModuleCodeList;
+ while (Next)
+ {
+ Prev = Next;
+ Next = Next->Method.Mutex;
+ Prev->Method.Mutex = NULL; /* Clear the Mutex (cheated) field */
+ AcpiUtRemoveReference (Prev);
+ }
+
/*
* Free the entire namespace -- all nodes and all objects
* attached to the nodes
diff --git a/sys/contrib/dev/acpica/components/tables/tbdata.c b/sys/contrib/dev/acpica/components/tables/tbdata.c
index 8e8e2a808ac2..590648c0a9d3 100644
--- a/sys/contrib/dev/acpica/components/tables/tbdata.c
+++ b/sys/contrib/dev/acpica/components/tables/tbdata.c
@@ -1191,6 +1191,19 @@ AcpiTbLoadTable (
Status = AcpiNsLoadTable (TableIndex, ParentNode);
/*
+ * This case handles the legacy option that groups all module-level
+ * code blocks together and defers execution until all of the tables
+ * are loaded. Execute all of these blocks at this time.
+ * Execute any module-level code that was detected during the table
+ * load phase.
+ *
+ * Note: this option is deprecated and will be eliminated in the
+ * future. Use of this option can cause problems with AML code that
+ * depends upon in-order immediate execution of module-level code.
+ */
+ AcpiNsExecModuleCodeList ();
+
+ /*
* Update GPEs for any new _Lxx/_Exx methods. Ignore errors. The host is
* responsible for discovering any new wake GPEs by running _PRW methods
* that may have been loaded by this table.
diff --git a/sys/contrib/dev/acpica/components/tables/tbxfload.c b/sys/contrib/dev/acpica/components/tables/tbxfload.c
index 1fb867565664..87bf7e500fde 100644
--- a/sys/contrib/dev/acpica/components/tables/tbxfload.c
+++ b/sys/contrib/dev/acpica/components/tables/tbxfload.c
@@ -479,13 +479,6 @@ AcpiLoadTable (
ACPI_INFO (("Host-directed Dynamic ACPI Table Load:"));
Status = AcpiTbInstallAndLoadTable (ACPI_PTR_TO_PHYSADDR (Table),
ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL, FALSE, &TableIndex);
- if (ACPI_SUCCESS (Status))
- {
- /* Complete the initialization/resolution of new objects */
-
- AcpiNsInitializeObjects ();
- }
-
return_ACPI_STATUS (Status);
}
diff --git a/sys/contrib/dev/acpica/components/utilities/utinit.c b/sys/contrib/dev/acpica/components/utilities/utinit.c
index 513f309b0b93..d0727f866bb7 100644
--- a/sys/contrib/dev/acpica/components/utilities/utinit.c
+++ b/sys/contrib/dev/acpica/components/utilities/utinit.c
@@ -342,6 +342,7 @@ AcpiUtInitGlobals (
/* Namespace */
+ AcpiGbl_ModuleCodeList = NULL;
AcpiGbl_RootNode = NULL;
AcpiGbl_RootNodeStruct.Name.Integer = ACPI_ROOT_NAME;
AcpiGbl_RootNodeStruct.DescriptorType = ACPI_DESC_TYPE_NAMED;
diff --git a/sys/contrib/dev/acpica/components/utilities/utxfinit.c b/sys/contrib/dev/acpica/components/utilities/utxfinit.c
index 901af7121733..504db455948c 100644
--- a/sys/contrib/dev/acpica/components/utilities/utxfinit.c
+++ b/sys/contrib/dev/acpica/components/utilities/utxfinit.c
@@ -381,17 +381,24 @@ AcpiInitializeObjects (
ACPI_FUNCTION_TRACE (AcpiInitializeObjects);
-#ifdef ACPI_OBSOLETE_BEHAVIOR
/*
- * 05/2019: Removed, initialization now happens at both object
- * creation and table load time
+ * This case handles the legacy option that groups all module-level
+ * code blocks together and defers execution until all of the tables
+ * are loaded. Execute all of these blocks at this time.
+ * Execute any module-level code that was detected during the table
+ * load phase.
+ *
+ * Note: this option is deprecated and will be eliminated in the
+ * future. Use of this option can cause problems with AML code that
+ * depends upon in-order immediate execution of module-level code.
*/
+ AcpiNsExecModuleCodeList ();
/*
* Initialize the objects that remain uninitialized. This
* runs the executable AML that may be part of the
- * declaration of these objects: OperationRegions, BufferFields,
- * BankFields, Buffers, and Packages.
+ * declaration of these objects:
+ * OperationRegions, BufferFields, Buffers, and Packages.
*/
if (!(Flags & ACPI_NO_OBJECT_INIT))
{
@@ -401,7 +408,6 @@ AcpiInitializeObjects (
return_ACPI_STATUS (Status);
}
}
-#endif
/*
* Initialize all device/region objects in the namespace. This runs
diff --git a/sys/contrib/dev/acpica/include/acevents.h b/sys/contrib/dev/acpica/include/acevents.h
index c2eb7324b25c..f10923421b29 100644
--- a/sys/contrib/dev/acpica/include/acevents.h
+++ b/sys/contrib/dev/acpica/include/acevents.h
@@ -245,8 +245,7 @@ AcpiEvMaskGpe (
ACPI_STATUS
AcpiEvAddGpeReference (
- ACPI_GPE_EVENT_INFO *GpeEventInfo,
- BOOLEAN ClearOnEnable);
+ ACPI_GPE_EVENT_INFO *GpeEventInfo);
ACPI_STATUS
AcpiEvRemoveGpeReference (
diff --git a/sys/contrib/dev/acpica/include/acglobal.h b/sys/contrib/dev/acpica/include/acglobal.h
index e9e3206af0d7..78bc7ca0be1c 100644
--- a/sys/contrib/dev/acpica/include/acglobal.h
+++ b/sys/contrib/dev/acpica/include/acglobal.h
@@ -323,6 +323,7 @@ ACPI_GLOBAL (BOOLEAN, AcpiGbl_VerboseLeakDump);
ACPI_GLOBAL (ACPI_NAMESPACE_NODE, AcpiGbl_RootNodeStruct);
ACPI_GLOBAL (ACPI_NAMESPACE_NODE *, AcpiGbl_RootNode);
ACPI_GLOBAL (ACPI_NAMESPACE_NODE *, AcpiGbl_FadtGpeDevice);
+ACPI_GLOBAL (ACPI_OPERAND_OBJECT *, AcpiGbl_ModuleCodeList);
extern const UINT8 AcpiGbl_NsProperties [ACPI_NUM_NS_TYPES];
extern const ACPI_PREDEFINED_NAMES AcpiGbl_PreDefinedNames [NUM_PREDEFINED_NAMES];
diff --git a/sys/contrib/dev/acpica/include/acnamesp.h b/sys/contrib/dev/acpica/include/acnamesp.h
index 6d148fea83ba..eaa2f1b4e898 100644
--- a/sys/contrib/dev/acpica/include/acnamesp.h
+++ b/sys/contrib/dev/acpica/include/acnamesp.h
@@ -419,6 +419,10 @@ ACPI_STATUS
AcpiNsEvaluate (
ACPI_EVALUATE_INFO *Info);
+void
+AcpiNsExecModuleCodeList (
+ void);
+
/*
* nsarguments - Argument count/type checking for predefined/reserved names
diff --git a/sys/contrib/dev/acpica/include/acpixf.h b/sys/contrib/dev/acpica/include/acpixf.h
index 3e6682766ef7..c4a0e07048b6 100644
--- a/sys/contrib/dev/acpica/include/acpixf.h
+++ b/sys/contrib/dev/acpica/include/acpixf.h
@@ -154,7 +154,7 @@
/* Current ACPICA subsystem version in YYYYMMDD format */
-#define ACPI_CA_VERSION 0x20190703
+#define ACPI_CA_VERSION 0x20190509
#include <contrib/dev/acpica/include/acconfig.h>
#include <contrib/dev/acpica/include/actypes.h>