Module Name: src
Committed By: christos
Date: Fri Nov 27 16:58:33 UTC 2020
Modified Files:
src/sys/external/bsd/acpica/dist/compiler: aslcompiler.l aslload.c
aslopcodes.c aslprepkg.c aslutils.c aslxref.c
src/sys/external/bsd/acpica/dist/debugger: dbexec.c dbinput.c
dbmethod.c
src/sys/external/bsd/acpica/dist/disassembler: dmbuffer.c dmcstyle.c
src/sys/external/bsd/acpica/dist/events: evregion.c evrgnini.c
src/sys/external/bsd/acpica/dist/include: acdebug.h acexcep.h acpixf.h
actbl1.h actypes.h
src/sys/external/bsd/acpica/dist/namespace: nsrepair2.c
src/sys/external/bsd/acpica/dist/os_specific/service_layers:
oslinuxtbl.c
Log Message:
merge conflicts
To generate a diff of this commit:
cvs rdiff -u -r1.17 -r1.18 \
src/sys/external/bsd/acpica/dist/compiler/aslcompiler.l
cvs rdiff -u -r1.19 -r1.20 \
src/sys/external/bsd/acpica/dist/compiler/aslload.c \
src/sys/external/bsd/acpica/dist/compiler/aslxref.c
cvs rdiff -u -r1.12 -r1.13 \
src/sys/external/bsd/acpica/dist/compiler/aslopcodes.c
cvs rdiff -u -r1.13 -r1.14 \
src/sys/external/bsd/acpica/dist/compiler/aslprepkg.c
cvs rdiff -u -r1.26 -r1.27 \
src/sys/external/bsd/acpica/dist/compiler/aslutils.c
cvs rdiff -u -r1.17 -r1.18 src/sys/external/bsd/acpica/dist/debugger/dbexec.c
cvs rdiff -u -r1.22 -r1.23 \
src/sys/external/bsd/acpica/dist/debugger/dbinput.c
cvs rdiff -u -r1.15 -r1.16 \
src/sys/external/bsd/acpica/dist/debugger/dbmethod.c
cvs rdiff -u -r1.12 -r1.13 \
src/sys/external/bsd/acpica/dist/disassembler/dmbuffer.c
cvs rdiff -u -r1.11 -r1.12 \
src/sys/external/bsd/acpica/dist/disassembler/dmcstyle.c
cvs rdiff -u -r1.11 -r1.12 src/sys/external/bsd/acpica/dist/events/evregion.c
cvs rdiff -u -r1.16 -r1.17 src/sys/external/bsd/acpica/dist/events/evrgnini.c
cvs rdiff -u -r1.17 -r1.18 src/sys/external/bsd/acpica/dist/include/acdebug.h
cvs rdiff -u -r1.13 -r1.14 src/sys/external/bsd/acpica/dist/include/acexcep.h
cvs rdiff -u -r1.27 -r1.28 src/sys/external/bsd/acpica/dist/include/acpixf.h
cvs rdiff -u -r1.15 -r1.16 src/sys/external/bsd/acpica/dist/include/actbl1.h
cvs rdiff -u -r1.22 -r1.23 src/sys/external/bsd/acpica/dist/include/actypes.h
cvs rdiff -u -r1.15 -r1.16 \
src/sys/external/bsd/acpica/dist/namespace/nsrepair2.c
cvs rdiff -u -r1.12 -r1.13 \
src/sys/external/bsd/acpica/dist/os_specific/service_layers/oslinuxtbl.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/external/bsd/acpica/dist/compiler/aslcompiler.l
diff -u src/sys/external/bsd/acpica/dist/compiler/aslcompiler.l:1.17 src/sys/external/bsd/acpica/dist/compiler/aslcompiler.l:1.18
--- src/sys/external/bsd/acpica/dist/compiler/aslcompiler.l:1.17 Sun Aug 2 16:25:54 2020
+++ src/sys/external/bsd/acpica/dist/compiler/aslcompiler.l Fri Nov 27 11:58:32 2020
@@ -171,8 +171,8 @@ NamePathTail [.]{NameSeg}
/*
* Begin standard ASL grammar
*/
-[0-9][a-zA-Z0-9]* { AslCompilerlval.i = UtDoConstant ((char *) AslCompilertext);
- count (1); return (PARSEOP_INTEGER); }
+[0-9][a-zA-Z0-9]* { count (1); AslCompilerlval.i = UtDoConstant ((char *) AslCompilertext);
+ return (PARSEOP_INTEGER); }
"Include" { count (1); return (PARSEOP_INCLUDE); }
"External" { count (1); return (PARSEOP_EXTERNAL); }
@@ -733,7 +733,6 @@ NamePathTail [.]{NameSeg}
* the required length.
*/
strcpy (s, "____");
- AcpiUtStrupr (AslCompilertext);
}
memcpy (s, AslCompilertext, strlen (AslCompilertext));
AslCompilerlval.s = s;
@@ -743,7 +742,6 @@ NamePathTail [.]{NameSeg}
{NameString} { char *s;
count (0);
s=UtLocalCacheCalloc (strlen (AslCompilertext)+1);
- AcpiUtStrupr (AslCompilertext);
strcpy (s, AslCompilertext);
AslCompilerlval.s = s;
DbgPrint (ASL_PARSE_OUTPUT, "NameString: %s\n", s);
Index: src/sys/external/bsd/acpica/dist/compiler/aslload.c
diff -u src/sys/external/bsd/acpica/dist/compiler/aslload.c:1.19 src/sys/external/bsd/acpica/dist/compiler/aslload.c:1.20
--- src/sys/external/bsd/acpica/dist/compiler/aslload.c:1.19 Sun Aug 2 16:25:54 2020
+++ src/sys/external/bsd/acpica/dist/compiler/aslload.c Fri Nov 27 11:58:32 2020
@@ -1296,9 +1296,16 @@ LdNamespace2Begin (
return (AE_OK);
}
- /* Save the target node within the alias node */
+ /* Save the target node within the alias node as well as type information */
Node->Object = ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, TargetNode);
+ Node->Type = TargetNode->Type;
+ if (Node->Type == ACPI_TYPE_METHOD)
+ {
+ /* Save the parameter count for methods */
+
+ Node->Value = TargetNode->Value;
+ }
}
return (AE_OK);
Index: src/sys/external/bsd/acpica/dist/compiler/aslxref.c
diff -u src/sys/external/bsd/acpica/dist/compiler/aslxref.c:1.19 src/sys/external/bsd/acpica/dist/compiler/aslxref.c:1.20
--- src/sys/external/bsd/acpica/dist/compiler/aslxref.c:1.19 Sun Aug 2 16:25:54 2020
+++ src/sys/external/bsd/acpica/dist/compiler/aslxref.c Fri Nov 27 11:58:32 2020
@@ -325,6 +325,7 @@ XfNamespaceLocateBegin (
UINT32 i;
ACPI_NAMESPACE_NODE *DeclarationParentMethod;
ACPI_PARSE_OBJECT *ReferenceParentMethod;
+ char *ExternalPath;
ACPI_FUNCTION_TRACE_PTR (XfNamespaceLocateBegin, Op);
@@ -1156,7 +1157,15 @@ XfNamespaceLocateBegin (
Op->Asl.Parent->Asl.ParseOpcode != PARSEOP_CONDREFOF &&
!XfRefIsGuardedByIfCondRefOf (Node, Op))
{
- AslError (ASL_ERROR, ASL_MSG_UNDEFINED_EXTERNAL, Op, NULL);
+ ExternalPath = AcpiNsGetNormalizedPathname (Node, TRUE);
+ sprintf (AslGbl_MsgBuffer, "full path of external object: %s",
+ ExternalPath);
+ AslDualParseOpError (ASL_ERROR, ASL_MSG_UNDEFINED_EXTERNAL, Op, NULL,
+ ASL_MSG_EXTERNAL_FOUND_HERE, Node->Op, AslGbl_MsgBuffer);
+ if (ExternalPath)
+ {
+ ACPI_FREE (ExternalPath);
+ }
}
/* 5) Check for a connection object */
Index: src/sys/external/bsd/acpica/dist/compiler/aslopcodes.c
diff -u src/sys/external/bsd/acpica/dist/compiler/aslopcodes.c:1.12 src/sys/external/bsd/acpica/dist/compiler/aslopcodes.c:1.13
--- src/sys/external/bsd/acpica/dist/compiler/aslopcodes.c:1.12 Sat Mar 28 15:49:26 2020
+++ src/sys/external/bsd/acpica/dist/compiler/aslopcodes.c Fri Nov 27 11:58:32 2020
@@ -690,7 +690,13 @@ OpcDoUuId (
}
else
{
+ /* Convert UUID string to a buffer, check for a known UUID */
+
AcpiUtConvertStringToUuid (InString, Buffer);
+ if (!AcpiAhMatchUuid (Buffer))
+ {
+ AslError (ASL_REMARK, ASL_MSG_UUID_NOT_FOUND, Op, NULL);
+ }
}
/* Change Op to a Buffer */
Index: src/sys/external/bsd/acpica/dist/compiler/aslprepkg.c
diff -u src/sys/external/bsd/acpica/dist/compiler/aslprepkg.c:1.13 src/sys/external/bsd/acpica/dist/compiler/aslprepkg.c:1.14
--- src/sys/external/bsd/acpica/dist/compiler/aslprepkg.c:1.13 Sat Mar 28 15:49:26 2020
+++ src/sys/external/bsd/acpica/dist/compiler/aslprepkg.c Fri Nov 27 11:58:32 2020
@@ -210,6 +210,17 @@ ApCheckPackage (
*/
for (i = 0; i < Count; i++)
{
+ if (!Op)
+ {
+ /*
+ * If we get to this point, it means that the package length
+ * is larger than the initializer list. Stop processing the
+ * package and return because we have run out of package
+ * elements to analyze.
+ */
+ return;
+ }
+
ApCheckObjectType (Predefined->Info.Name, Op,
Package->RetInfo.ObjectType1, i);
Op = Op->Asl.Next;
@@ -809,7 +820,7 @@ ApPackageTooSmall (
UINT32 ExpectedCount)
{
- snprintf (AslGbl_MsgBuffer, sizeof(AslGbl_MsgBuffer), "%s: length %u, required minimum is %u",
+ snprintf (AslGbl_MsgBuffer, sizeof(AslGbl_MsgBuffer), "%4.4s: length %u, required minimum is %u",
PredefinedName, Count, ExpectedCount);
AslError (ASL_ERROR, ASL_MSG_RESERVED_PACKAGE_LENGTH, Op, AslGbl_MsgBuffer);
@@ -838,7 +849,7 @@ ApZeroLengthPackage (
ACPI_PARSE_OBJECT *Op)
{
- snprintf (AslGbl_MsgBuffer, sizeof(AslGbl_MsgBuffer), "%s: length is zero", PredefinedName);
+ snprintf (AslGbl_MsgBuffer, sizeof(AslGbl_MsgBuffer), "%4.4s: length is zero", PredefinedName);
AslError (ASL_ERROR, ASL_MSG_RESERVED_PACKAGE_LENGTH, Op, AslGbl_MsgBuffer);
}
@@ -867,7 +878,7 @@ ApPackageTooLarge (
UINT32 ExpectedCount)
{
- snprintf (AslGbl_MsgBuffer, sizeof(AslGbl_MsgBuffer), "%s: length is %u, only %u required",
+ snprintf (AslGbl_MsgBuffer, sizeof(AslGbl_MsgBuffer), "%4.4s: length is %u, only %u required",
PredefinedName, Count, ExpectedCount);
AslError (ASL_REMARK, ASL_MSG_RESERVED_PACKAGE_LENGTH, Op, AslGbl_MsgBuffer);
Index: src/sys/external/bsd/acpica/dist/compiler/aslutils.c
diff -u src/sys/external/bsd/acpica/dist/compiler/aslutils.c:1.26 src/sys/external/bsd/acpica/dist/compiler/aslutils.c:1.27
--- src/sys/external/bsd/acpica/dist/compiler/aslutils.c:1.26 Sat Mar 28 15:49:26 2020
+++ src/sys/external/bsd/acpica/dist/compiler/aslutils.c Fri Nov 27 11:58:32 2020
@@ -966,14 +966,16 @@ UtDoConstant (
{
ACPI_STATUS Status;
UINT64 ConvertedInteger;
- char ErrBuf[64];
+ char ErrBuf[128];
+ const ACPI_EXCEPTION_INFO *ExceptionInfo;
Status = AcpiUtStrtoul64 (String, &ConvertedInteger);
if (ACPI_FAILURE (Status))
{
- snprintf (ErrBuf, sizeof(ErrBuf), "While creating 64-bit constant: %s\n",
- AcpiFormatException (Status));
+ ExceptionInfo = AcpiUtValidateException ((ACPI_STATUS) Status);
+ snprintf (ErrBuf, sizeof(ErrBuf), " %s while converting to 64-bit integer",
+ ExceptionInfo->Description);
AslCommonError (ASL_ERROR, ASL_MSG_SYNTAX, AslGbl_CurrentLineNumber,
AslGbl_LogicalLineNumber, AslGbl_CurrentLineOffset,
Index: src/sys/external/bsd/acpica/dist/debugger/dbexec.c
diff -u src/sys/external/bsd/acpica/dist/debugger/dbexec.c:1.17 src/sys/external/bsd/acpica/dist/debugger/dbexec.c:1.18
--- src/sys/external/bsd/acpica/dist/debugger/dbexec.c:1.17 Sat Mar 28 15:49:26 2020
+++ src/sys/external/bsd/acpica/dist/debugger/dbexec.c Fri Nov 27 11:58:32 2020
@@ -144,7 +144,8 @@ AcpiDbDeleteObjects (
*
* RETURN: Status
*
- * DESCRIPTION: Execute a control method.
+ * DESCRIPTION: Execute a control method. Used to evaluate objects via the
+ * "EXECUTE" or "EVALUATE" commands.
*
******************************************************************************/
@@ -398,11 +399,12 @@ AcpiDbExecutionWalk (
Status = AcpiEvaluateObject (Node, NULL, NULL, &ReturnObj);
+ AcpiGbl_MethodExecuting = FALSE;
+
AcpiOsPrintf ("Evaluation of [%4.4s] returned %s\n",
AcpiUtGetNodeName (Node),
AcpiFormatException (Status));
- AcpiGbl_MethodExecuting = FALSE;
return (AE_OK);
}
@@ -419,7 +421,8 @@ AcpiDbExecutionWalk (
* RETURN: None
*
* DESCRIPTION: Execute a control method. Name is relative to the current
- * scope.
+ * scope. Function used for the "EXECUTE", "EVALUATE", and
+ * "ALL" commands
*
******************************************************************************/
@@ -463,6 +466,12 @@ AcpiDbExecute (
return;
}
+ if ((Flags & EX_ALL) && (strlen (Name) > 4))
+ {
+ AcpiOsPrintf ("Input name (%s) must be a 4-char NameSeg\n", Name);
+ return;
+ }
+
NameString = ACPI_ALLOCATE (strlen (Name) + 1);
if (!NameString)
{
@@ -482,13 +491,27 @@ AcpiDbExecute (
return;
}
- AcpiGbl_DbMethodInfo.Name = NameString;
- AcpiGbl_DbMethodInfo.Args = Args;
- AcpiGbl_DbMethodInfo.Types = Types;
- AcpiGbl_DbMethodInfo.Flags = Flags;
+ /* Command (ALL <nameseg>) to execute all methods of a particular name */
- ReturnObj.Pointer = NULL;
- ReturnObj.Length = ACPI_ALLOCATE_BUFFER;
+ else if (Flags & EX_ALL)
+ {
+ AcpiGbl_DbMethodInfo.Name = NameString;
+ ReturnObj.Pointer = NULL;
+ ReturnObj.Length = ACPI_ALLOCATE_BUFFER;
+ AcpiDbEvaluateAll (NameString);
+ ACPI_FREE (NameString);
+ return;
+ }
+ else
+ {
+ AcpiGbl_DbMethodInfo.Name = NameString;
+ AcpiGbl_DbMethodInfo.Args = Args;
+ AcpiGbl_DbMethodInfo.Types = Types;
+ AcpiGbl_DbMethodInfo.Flags = Flags;
+
+ ReturnObj.Pointer = NULL;
+ ReturnObj.Length = ACPI_ALLOCATE_BUFFER;
+ }
Status = AcpiDbExecuteSetup (&AcpiGbl_DbMethodInfo);
if (ACPI_FAILURE (Status))
@@ -549,6 +572,7 @@ AcpiDbExecute (
(UINT32) ReturnObj.Length);
AcpiDbDumpExternalObject (ReturnObj.Pointer, 1);
+ AcpiOsPrintf ("\n");
/* Dump a _PLD buffer if present */
Index: src/sys/external/bsd/acpica/dist/debugger/dbinput.c
diff -u src/sys/external/bsd/acpica/dist/debugger/dbinput.c:1.22 src/sys/external/bsd/acpica/dist/debugger/dbinput.c:1.23
--- src/sys/external/bsd/acpica/dist/debugger/dbinput.c:1.22 Wed Nov 18 01:49:13 2020
+++ src/sys/external/bsd/acpica/dist/debugger/dbinput.c Fri Nov 27 11:58:32 2020
@@ -87,6 +87,7 @@ enum AcpiExDebuggerCommands
{
CMD_NOT_FOUND = 0,
CMD_NULL,
+ CMD_ALL,
CMD_ALLOCATIONS,
CMD_ARGS,
CMD_ARGUMENTS,
@@ -167,6 +168,7 @@ static const ACPI_DB_COMMAND_INFO Acpi
{
{"<NOT FOUND>", 0},
{"<NULL>", 0},
+ {"ALL", 1},
{"ALLOCATIONS", 0},
{"ARGS", 0},
{"ARGUMENTS", 0},
@@ -269,6 +271,7 @@ static const ACPI_DB_COMMAND_HELP Acpi
{1, " Type <Object>", "Display object type\n"},
{0, "\nControl Method Execution:", "\n"},
+ {1, " All <NameSeg>", "Evaluate all objects named NameSeg\n"},
{1, " Evaluate <Namepath> [Arguments]", "Evaluate object or control method\n"},
{1, " Execute <Namepath> [Arguments]", "Synonym for Evaluate\n"},
#ifdef ACPI_APPLICATION
@@ -491,7 +494,7 @@ AcpiDbDisplayHelp (
}
else
{
- /* Display help for all commands that match the subtring */
+ /* Display help for all commands that match the substring */
AcpiDbDisplayCommandInfo (Command, TRUE);
}
@@ -839,6 +842,13 @@ AcpiDbCommandDispatch (
}
break;
+ case CMD_ALL:
+
+ AcpiOsPrintf ("Executing all objects with NameSeg: %s\n", AcpiGbl_DbArgs[1]);
+ AcpiDbExecute (AcpiGbl_DbArgs[1],
+ &AcpiGbl_DbArgs[2], &AcpiGbl_DbArgTypes[2], EX_NO_SINGLE_STEP | EX_ALL);
+ break;
+
case CMD_ALLOCATIONS:
#ifdef ACPI_DBG_TRACK_ALLOCATIONS
Index: src/sys/external/bsd/acpica/dist/debugger/dbmethod.c
diff -u src/sys/external/bsd/acpica/dist/debugger/dbmethod.c:1.15 src/sys/external/bsd/acpica/dist/debugger/dbmethod.c:1.16
--- src/sys/external/bsd/acpica/dist/debugger/dbmethod.c:1.15 Sat Mar 28 15:49:26 2020
+++ src/sys/external/bsd/acpica/dist/debugger/dbmethod.c Fri Nov 27 11:58:32 2020
@@ -62,6 +62,10 @@ AcpiDbWalkForExecute (
void *Context,
void **ReturnValue);
+static ACPI_STATUS
+AcpiDbEvaluateObject (
+ ACPI_NAMESPACE_NODE *Node);
+
/*******************************************************************************
*
@@ -434,46 +438,29 @@ AcpiDbDisassembleMethod (
/*******************************************************************************
*
- * FUNCTION: AcpiDbWalkForExecute
+ * FUNCTION: AcpiDbEvaluateObject
*
- * PARAMETERS: Callback from WalkNamespace
+ * PARAMETERS: Node - Namespace node for the object
*
* RETURN: Status
*
- * DESCRIPTION: Batch execution module. Currently only executes predefined
- * ACPI names.
+ * DESCRIPTION: Main execution function for the Evaluate/Execute/All debugger
+ * commands.
*
******************************************************************************/
static ACPI_STATUS
-AcpiDbWalkForExecute (
- ACPI_HANDLE ObjHandle,
- UINT32 NestingLevel,
- void *Context,
- void **ReturnValue)
+AcpiDbEvaluateObject (
+ ACPI_NAMESPACE_NODE *Node)
{
- ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle;
- ACPI_DB_EXECUTE_WALK *Info = (ACPI_DB_EXECUTE_WALK *) Context;
- ACPI_BUFFER ReturnObj;
- ACPI_STATUS Status;
char *Pathname;
UINT32 i;
ACPI_DEVICE_INFO *ObjInfo;
ACPI_OBJECT_LIST ParamObjects;
ACPI_OBJECT Params[ACPI_METHOD_NUM_ARGS];
- const ACPI_PREDEFINED_INFO *Predefined;
-
-
- Predefined = AcpiUtMatchPredefinedMethod (Node->Name.Ascii);
- if (!Predefined)
- {
- return (AE_OK);
- }
+ ACPI_BUFFER ReturnObj;
+ ACPI_STATUS Status;
- if (Node->Type == ACPI_TYPE_LOCAL_SCOPE)
- {
- return (AE_OK);
- }
Pathname = AcpiNsGetExternalPathname (Node);
if (!Pathname)
@@ -483,7 +470,7 @@ AcpiDbWalkForExecute (
/* Get the object info for number of method parameters */
- Status = AcpiGetObjectInfo (ObjHandle, &ObjInfo);
+ Status = AcpiGetObjectInfo (Node, &ObjInfo);
if (ACPI_FAILURE (Status))
{
ACPI_FREE (Pathname);
@@ -516,13 +503,70 @@ AcpiDbWalkForExecute (
AcpiGbl_MethodExecuting = TRUE;
Status = AcpiEvaluateObject (Node, NULL, &ParamObjects, &ReturnObj);
+ AcpiGbl_MethodExecuting = FALSE;
AcpiOsPrintf ("%-32s returned %s\n", Pathname, AcpiFormatException (Status));
- AcpiGbl_MethodExecuting = FALSE;
+ if (ReturnObj.Length)
+ {
+ AcpiOsPrintf ("Evaluation of %s returned object %p, "
+ "external buffer length %X\n",
+ Pathname, ReturnObj.Pointer, (UINT32) ReturnObj.Length);
+
+ AcpiDbDumpExternalObject (ReturnObj.Pointer, 1);
+ AcpiOsPrintf ("\n");
+ }
+
ACPI_FREE (Pathname);
/* Ignore status from method execution */
+ return (AE_OK);
+
+ /* Update count, check if we have executed enough methods */
+
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDbWalkForExecute
+ *
+ * PARAMETERS: Callback from WalkNamespace
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Batch execution function. Evaluates all "predefined" objects --
+ * the nameseg begins with an underscore.
+ *
+ ******************************************************************************/
+
+static ACPI_STATUS
+AcpiDbWalkForExecute (
+ ACPI_HANDLE ObjHandle,
+ UINT32 NestingLevel,
+ void *Context,
+ void **ReturnValue)
+{
+ ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle;
+ ACPI_DB_EXECUTE_WALK *Info = (ACPI_DB_EXECUTE_WALK *) Context;
+ ACPI_STATUS Status;
+ const ACPI_PREDEFINED_INFO *Predefined;
+
+
+ Predefined = AcpiUtMatchPredefinedMethod (Node->Name.Ascii);
+ if (!Predefined)
+ {
+ return (AE_OK);
+ }
+
+ if (Node->Type == ACPI_TYPE_LOCAL_SCOPE)
+ {
+ return (AE_OK);
+ }
+
+ AcpiDbEvaluateObject (Node);
+
+ /* Ignore status from object evaluation */
+
Status = AE_OK;
/* Update count, check if we have executed enough methods */
@@ -539,6 +583,56 @@ AcpiDbWalkForExecute (
/*******************************************************************************
*
+ * FUNCTION: AcpiDbWalkForExecuteAll
+ *
+ * PARAMETERS: Callback from WalkNamespace
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Batch execution function. Evaluates all objects whose path ends
+ * with the nameseg "Info->NameSeg". Used for the "ALL" command.
+ *
+ ******************************************************************************/
+
+static ACPI_STATUS
+AcpiDbWalkForExecuteAll (
+ ACPI_HANDLE ObjHandle,
+ UINT32 NestingLevel,
+ void *Context,
+ void **ReturnValue)
+{
+ ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle;
+ ACPI_DB_EXECUTE_WALK *Info = (ACPI_DB_EXECUTE_WALK *) Context;
+ ACPI_STATUS Status;
+
+
+ if (!ACPI_COMPARE_NAMESEG (Node->Name.Ascii, Info->NameSeg))
+ {
+ return (AE_OK);
+ }
+
+ if (Node->Type == ACPI_TYPE_LOCAL_SCOPE)
+ {
+ return (AE_OK);
+ }
+
+ /* Now evaluate the input object (node) */
+
+ AcpiDbEvaluateObject (Node);
+
+ /* Ignore status from method execution */
+
+ Status = AE_OK;
+
+ /* Update count of executed methods/objects */
+
+ Info->Count++;
+ return (Status);
+}
+
+
+/*******************************************************************************
+ *
* FUNCTION: AcpiDbEvaluatePredefinedNames
*
* PARAMETERS: None
@@ -567,3 +661,38 @@ AcpiDbEvaluatePredefinedNames (
AcpiOsPrintf ("Evaluated %u predefined names in the namespace\n", Info.Count);
}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDbEvaluateAll
+ *
+ * PARAMETERS: NoneAcpiGbl_DbMethodInfo
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Namespace batch execution. Implements the "ALL" command.
+ * Execute all namepaths whose final nameseg matches the
+ * input nameseg.
+ *
+ ******************************************************************************/
+
+void
+AcpiDbEvaluateAll (
+ char *NameSeg)
+{
+ ACPI_DB_EXECUTE_WALK Info;
+
+
+ Info.Count = 0;
+ Info.MaxCount = ACPI_UINT32_MAX;
+ ACPI_COPY_NAMESEG (Info.NameSeg, NameSeg);
+ Info.NameSeg[ACPI_NAMESEG_SIZE] = 0;
+
+ /* Search all nodes in namespace */
+
+ (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
+ AcpiDbWalkForExecuteAll, NULL, (void *) &Info, NULL);
+
+ AcpiOsPrintf ("Evaluated %u names in the namespace\n", Info.Count);
+}
Index: src/sys/external/bsd/acpica/dist/disassembler/dmbuffer.c
diff -u src/sys/external/bsd/acpica/dist/disassembler/dmbuffer.c:1.12 src/sys/external/bsd/acpica/dist/disassembler/dmbuffer.c:1.13
--- src/sys/external/bsd/acpica/dist/disassembler/dmbuffer.c:1.12 Mon May 25 19:19:28 2020
+++ src/sys/external/bsd/acpica/dist/disassembler/dmbuffer.c Fri Nov 27 11:58:32 2020
@@ -386,6 +386,10 @@ AcpiDmUuid (
{
AcpiOsPrintf (" /* %s */", Description);
}
+ else
+ {
+ AcpiOsPrintf (" /* Unknown UUID */");
+ }
}
Index: src/sys/external/bsd/acpica/dist/disassembler/dmcstyle.c
diff -u src/sys/external/bsd/acpica/dist/disassembler/dmcstyle.c:1.11 src/sys/external/bsd/acpica/dist/disassembler/dmcstyle.c:1.12
--- src/sys/external/bsd/acpica/dist/disassembler/dmcstyle.c:1.11 Sat Mar 28 15:49:26 2020
+++ src/sys/external/bsd/acpica/dist/disassembler/dmcstyle.c Fri Nov 27 11:58:32 2020
@@ -636,7 +636,7 @@ AcpiDmIsOptimizationIgnored (
* Only a small subset of ASL/AML operators can be optimized.
* Can only optimize/fold if there is no target (or targets)
* specified for the operator. And of course, the operator
- * is surrrounded by a Store() operator.
+ * is surrounded by a Store() operator.
*/
switch (StoreArgument->Common.AmlOpcode)
{
Index: src/sys/external/bsd/acpica/dist/events/evregion.c
diff -u src/sys/external/bsd/acpica/dist/events/evregion.c:1.11 src/sys/external/bsd/acpica/dist/events/evregion.c:1.12
--- src/sys/external/bsd/acpica/dist/events/evregion.c:1.11 Sat Mar 28 15:49:26 2020
+++ src/sys/external/bsd/acpica/dist/events/evregion.c Fri Nov 27 11:58:32 2020
@@ -56,8 +56,10 @@ extern UINT8 AcpiGbl_DefaultAddre
/* Local prototypes */
static void
-AcpiEvOrphanEcRegMethod (
- ACPI_NAMESPACE_NODE *EcDeviceNode);
+AcpiEvExecuteOrphanRegMethod (
+ ACPI_NAMESPACE_NODE *DeviceNode,
+ ACPI_ADR_SPACE_TYPE SpaceId);
+
static ACPI_STATUS
AcpiEvRegRun (
@@ -761,11 +763,13 @@ AcpiEvExecuteRegMethods (
(void) AcpiNsWalkNamespace (ACPI_TYPE_ANY, Node, ACPI_UINT32_MAX,
ACPI_NS_WALK_UNLOCK, AcpiEvRegRun, NULL, &Info, NULL);
- /* Special case for EC: handle "orphan" _REG methods with no region */
-
- if (SpaceId == ACPI_ADR_SPACE_EC)
+ /*
+ * Special case for EC and GPIO: handle "orphan" _REG methods with
+ * no region.
+ */
+ if (SpaceId == ACPI_ADR_SPACE_EC || SpaceId == ACPI_ADR_SPACE_GPIO)
{
- AcpiEvOrphanEcRegMethod (Node);
+ AcpiEvExecuteOrphanRegMethod (Node, SpaceId);
}
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_NAMES,
@@ -846,32 +850,29 @@ AcpiEvRegRun (
/*******************************************************************************
*
- * FUNCTION: AcpiEvOrphanEcRegMethod
+ * FUNCTION: AcpiEvExecuteOrphanRegMethod
*
- * PARAMETERS: EcDeviceNode - Namespace node for an EC device
+ * PARAMETERS: DeviceNode - Namespace node for an ACPI device
+ * SpaceId - The address space ID
*
* RETURN: None
*
- * DESCRIPTION: Execute an "orphan" _REG method that appears under the EC
+ * DESCRIPTION: Execute an "orphan" _REG method that appears under an ACPI
* device. This is a _REG method that has no corresponding region
- * within the EC device scope. The orphan _REG method appears to
- * have been enabled by the description of the ECDT in the ACPI
- * specification: "The availability of the region space can be
- * detected by providing a _REG method object underneath the
- * Embedded Controller device."
- *
- * To quickly access the EC device, we use the EcDeviceNode used
- * during EC handler installation. Otherwise, we would need to
- * perform a time consuming namespace walk, executing _HID
- * methods to find the EC device.
+ * within the device's scope. ACPI tables depending on these
+ * "orphan" _REG methods have been seen for both EC and GPIO
+ * Operation Regions. Presumably the Windows ACPI implementation
+ * always calls the _REG method independent of the presence of
+ * an actual Operation Region with the correct address space ID.
*
* MUTEX: Assumes the namespace is locked
*
******************************************************************************/
static void
-AcpiEvOrphanEcRegMethod (
- ACPI_NAMESPACE_NODE *EcDeviceNode)
+AcpiEvExecuteOrphanRegMethod (
+ ACPI_NAMESPACE_NODE *DeviceNode,
+ ACPI_ADR_SPACE_TYPE SpaceId)
{
ACPI_HANDLE RegMethod;
ACPI_NAMESPACE_NODE *NextNode;
@@ -880,10 +881,10 @@ AcpiEvOrphanEcRegMethod (
ACPI_OBJECT Objects[2];
- ACPI_FUNCTION_TRACE (EvOrphanEcRegMethod);
+ ACPI_FUNCTION_TRACE (EvExecuteOrphanRegMethod);
- if (!EcDeviceNode)
+ if (!DeviceNode)
{
return_VOID;
}
@@ -894,7 +895,7 @@ AcpiEvOrphanEcRegMethod (
/* Get a handle to a _REG method immediately under the EC device */
- Status = AcpiGetHandle (EcDeviceNode, METHOD_NAME__REG, &RegMethod);
+ Status = AcpiGetHandle (DeviceNode, METHOD_NAME__REG, &RegMethod);
if (ACPI_FAILURE (Status))
{
goto Exit; /* There is no _REG method present */
@@ -907,25 +908,25 @@ AcpiEvOrphanEcRegMethod (
* with other space IDs to be present; but the code below will then
* execute the _REG method with the EmbeddedControl SpaceID argument.
*/
- NextNode = AcpiNsGetNextNode (EcDeviceNode, NULL);
+ NextNode = AcpiNsGetNextNode (DeviceNode, NULL);
while (NextNode)
{
if ((NextNode->Type == ACPI_TYPE_REGION) &&
(NextNode->Object) &&
- (NextNode->Object->Region.SpaceId == ACPI_ADR_SPACE_EC))
+ (NextNode->Object->Region.SpaceId == SpaceId))
{
goto Exit; /* Do not execute the _REG */
}
- NextNode = AcpiNsGetNextNode (EcDeviceNode, NextNode);
+ NextNode = AcpiNsGetNextNode (DeviceNode, NextNode);
}
- /* Evaluate the _REG(EmbeddedControl,Connect) method */
+ /* Evaluate the _REG(SpaceId,Connect) method */
Args.Count = 2;
Args.Pointer = Objects;
Objects[0].Type = ACPI_TYPE_INTEGER;
- Objects[0].Integer.Value = ACPI_ADR_SPACE_EC;
+ Objects[0].Integer.Value = SpaceId;
Objects[1].Type = ACPI_TYPE_INTEGER;
Objects[1].Integer.Value = ACPI_REG_CONNECT;
Index: src/sys/external/bsd/acpica/dist/events/evrgnini.c
diff -u src/sys/external/bsd/acpica/dist/events/evrgnini.c:1.16 src/sys/external/bsd/acpica/dist/events/evrgnini.c:1.17
--- src/sys/external/bsd/acpica/dist/events/evrgnini.c:1.16 Sat Mar 28 15:49:26 2020
+++ src/sys/external/bsd/acpica/dist/events/evrgnini.c Fri Nov 27 11:58:32 2020
@@ -75,6 +75,7 @@ AcpiEvSystemMemoryRegionSetup (
{
ACPI_OPERAND_OBJECT *RegionDesc = (ACPI_OPERAND_OBJECT *) Handle;
ACPI_MEM_SPACE_CONTEXT *LocalRegionContext;
+ ACPI_MEM_MAPPING *Mm;
ACPI_FUNCTION_TRACE (EvSystemMemoryRegionSetup);
@@ -86,12 +87,14 @@ AcpiEvSystemMemoryRegionSetup (
{
LocalRegionContext = (ACPI_MEM_SPACE_CONTEXT *) *RegionContext;
- /* Delete a cached mapping if present */
+ /* Delete memory mappings if present */
- if (LocalRegionContext->MappedLength)
+ while (LocalRegionContext->FirstMm)
{
- AcpiOsUnmapMemory (LocalRegionContext->MappedLogicalAddress,
- LocalRegionContext->MappedLength);
+ Mm = LocalRegionContext->FirstMm;
+ LocalRegionContext->FirstMm = Mm->NextMm;
+ AcpiOsUnmapMemory(Mm->LogicalAddress, Mm->Length);
+ ACPI_FREE(Mm);
}
ACPI_FREE (LocalRegionContext);
*RegionContext = NULL;
Index: src/sys/external/bsd/acpica/dist/include/acdebug.h
diff -u src/sys/external/bsd/acpica/dist/include/acdebug.h:1.17 src/sys/external/bsd/acpica/dist/include/acdebug.h:1.18
--- src/sys/external/bsd/acpica/dist/include/acdebug.h:1.17 Sat Mar 28 15:49:27 2020
+++ src/sys/external/bsd/acpica/dist/include/acdebug.h Fri Nov 27 11:58:32 2020
@@ -79,6 +79,7 @@ typedef struct acpi_db_execute_walk
{
UINT32 Count;
UINT32 MaxCount;
+ char NameSeg[ACPI_NAMESEG_SIZE + 1];
} ACPI_DB_EXECUTE_WALK;
@@ -87,6 +88,7 @@ typedef struct acpi_db_execute_walk
#define EX_NO_SINGLE_STEP 1
#define EX_SINGLE_STEP 2
+#define EX_ALL 4
/*
@@ -237,6 +239,10 @@ void
AcpiDbEvaluatePredefinedNames (
void);
+void
+AcpiDbEvaluateAll (
+ char *NameSeg);
+
/*
* dbnames - namespace commands
Index: src/sys/external/bsd/acpica/dist/include/acexcep.h
diff -u src/sys/external/bsd/acpica/dist/include/acexcep.h:1.13 src/sys/external/bsd/acpica/dist/include/acexcep.h:1.14
--- src/sys/external/bsd/acpica/dist/include/acexcep.h:1.13 Sat Mar 28 15:49:27 2020
+++ src/sys/external/bsd/acpica/dist/include/acexcep.h Fri Nov 27 11:58:32 2020
@@ -76,12 +76,12 @@ typedef struct acpi_exception_info
{
const char *Name;
-#ifdef ACPI_HELP_APP
+#if defined (ACPI_HELP_APP) || defined (ACPI_ASL_COMPILER)
const char *Description;
#endif
} ACPI_EXCEPTION_INFO;
-#ifdef ACPI_HELP_APP
+#if defined (ACPI_HELP_APP) || defined (ACPI_ASL_COMPILER)
#define EXCEP_TXT(Name,Description) {Name, Description}
#else
#define EXCEP_TXT(Name,Description) {Name}
Index: src/sys/external/bsd/acpica/dist/include/acpixf.h
diff -u src/sys/external/bsd/acpica/dist/include/acpixf.h:1.27 src/sys/external/bsd/acpica/dist/include/acpixf.h:1.28
--- src/sys/external/bsd/acpica/dist/include/acpixf.h:1.27 Sun Aug 2 16:25:55 2020
+++ src/sys/external/bsd/acpica/dist/include/acpixf.h Fri Nov 27 11:58:32 2020
@@ -46,7 +46,7 @@
/* Current ACPICA subsystem version in YYYYMMDD format */
-#define ACPI_CA_VERSION 0x20200717
+#define ACPI_CA_VERSION 0x20201113
#include "acconfig.h"
#include "actypes.h"
Index: src/sys/external/bsd/acpica/dist/include/actbl1.h
diff -u src/sys/external/bsd/acpica/dist/include/actbl1.h:1.15 src/sys/external/bsd/acpica/dist/include/actbl1.h:1.16
--- src/sys/external/bsd/acpica/dist/include/actbl1.h:1.15 Sat Mar 28 15:49:27 2020
+++ src/sys/external/bsd/acpica/dist/include/actbl1.h Fri Nov 27 11:58:32 2020
@@ -1659,8 +1659,7 @@ typedef struct acpi_hest_ia_deferred_che
/*******************************************************************************
*
- * HMAT - Heterogeneous Memory Attributes Table (ACPI 6.2)
- * Version 1
+ * HMAT - Heterogeneous Memory Attributes Table (ACPI 6.3)
*
******************************************************************************/
@@ -1702,7 +1701,7 @@ typedef struct acpi_hmat_proximity_domai
ACPI_HMAT_STRUCTURE Header;
UINT16 Flags;
UINT16 Reserved1;
- UINT32 ProcessorPD; /* Processor proximity domain */
+ UINT32 InitiatorPD; /* Attached Initiator proximity domain */
UINT32 MemoryPD; /* Memory proximity domain */
UINT32 Reserved2;
UINT64 Reserved3;
@@ -1712,9 +1711,7 @@ typedef struct acpi_hmat_proximity_domai
/* Masks for Flags field above */
-#define ACPI_HMAT_PROCESSOR_PD_VALID (1) /* 1: ProcessorPD field is valid */
-#define ACPI_HMAT_MEMORY_PD_VALID (1<<1) /* 1: MemoryPD field is valid */
-#define ACPI_HMAT_RESERVATION_HINT (1<<2) /* 1: Reservation hint */
+#define ACPI_HMAT_INITIATOR_PD_VALID (1) /* 1: InitiatorPD field is valid */
/* 1: System locality latency and bandwidth information */
@@ -1739,10 +1736,9 @@ typedef struct acpi_hmat_locality
/* Values for Memory Hierarchy flag */
#define ACPI_HMAT_MEMORY 0
-#define ACPI_HMAT_LAST_LEVEL_CACHE 1
-#define ACPI_HMAT_1ST_LEVEL_CACHE 2
-#define ACPI_HMAT_2ND_LEVEL_CACHE 3
-#define ACPI_HMAT_3RD_LEVEL_CACHE 4
+#define ACPI_HMAT_1ST_LEVEL_CACHE 1
+#define ACPI_HMAT_2ND_LEVEL_CACHE 2
+#define ACPI_HMAT_3RD_LEVEL_CACHE 3
/* Values for DataType field above */
Index: src/sys/external/bsd/acpica/dist/include/actypes.h
diff -u src/sys/external/bsd/acpica/dist/include/actypes.h:1.22 src/sys/external/bsd/acpica/dist/include/actypes.h:1.23
--- src/sys/external/bsd/acpica/dist/include/actypes.h:1.22 Sun Aug 2 16:25:55 2020
+++ src/sys/external/bsd/acpica/dist/include/actypes.h Fri Nov 27 11:58:32 2020
@@ -874,7 +874,7 @@ typedef UINT8
*
* Note: A Data Table region is a special type of operation region
* that has its own AML opcode. However, internally, the AML
- * interpreter simply creates an operation region with an an address
+ * interpreter simply creates an operation region with an address
* space type of ACPI_ADR_SPACE_DATA_TABLE.
*/
#define ACPI_ADR_SPACE_DATA_TABLE (ACPI_ADR_SPACE_TYPE) 0x7E /* Internal to ACPICA only */
@@ -1337,13 +1337,21 @@ typedef struct acpi_pci_id
} ACPI_PCI_ID;
+typedef struct acpi_mem_mapping
+{
+ ACPI_PHYSICAL_ADDRESS PhysicalAddress;
+ UINT8 *LogicalAddress;
+ ACPI_SIZE Length;
+ struct acpi_mem_mapping *NextMm;
+
+} ACPI_MEM_MAPPING;
+
typedef struct acpi_mem_space_context
{
UINT32 Length;
ACPI_PHYSICAL_ADDRESS Address;
- ACPI_PHYSICAL_ADDRESS MappedPhysicalAddress;
- UINT8 *MappedLogicalAddress;
- ACPI_SIZE MappedLength;
+ ACPI_MEM_MAPPING *CurMm;
+ ACPI_MEM_MAPPING *FirstMm;
} ACPI_MEM_SPACE_CONTEXT;
Index: src/sys/external/bsd/acpica/dist/namespace/nsrepair2.c
diff -u src/sys/external/bsd/acpica/dist/namespace/nsrepair2.c:1.15 src/sys/external/bsd/acpica/dist/namespace/nsrepair2.c:1.16
--- src/sys/external/bsd/acpica/dist/namespace/nsrepair2.c:1.15 Sat Mar 28 15:49:27 2020
+++ src/sys/external/bsd/acpica/dist/namespace/nsrepair2.c Fri Nov 27 11:58:32 2020
@@ -213,16 +213,18 @@ AcpiNsComplexRepairs (
ACPI_STATUS Status;
+ ACPI_FUNCTION_TRACE (NsComplexRepairs);
+
/* Check if this name is in the list of repairable names */
Predefined = AcpiNsMatchComplexRepair (Node);
if (!Predefined)
{
- return (ValidateStatus);
+ return_ACPI_STATUS (ValidateStatus);
}
Status = Predefined->RepairFunction (Info, ReturnObjectPtr);
- return (Status);
+ return_ACPI_STATUS (Status);
}
@@ -418,20 +420,21 @@ AcpiNsRepair_CID (
UINT16 OriginalRefCount;
UINT32 i;
+ ACPI_FUNCTION_TRACE (NsRepair_CID);
/* Check for _CID as a simple string */
if (ReturnObject->Common.Type == ACPI_TYPE_STRING)
{
Status = AcpiNsRepair_HID (Info, ReturnObjectPtr);
- return (Status);
+ return_ACPI_STATUS (Status);
}
/* Exit if not a Package */
if (ReturnObject->Common.Type != ACPI_TYPE_PACKAGE)
{
- return (AE_OK);
+ return_ACPI_STATUS (AE_OK);
}
/* Examine each element of the _CID package */
@@ -445,7 +448,7 @@ AcpiNsRepair_CID (
Status = AcpiNsRepair_HID (Info, ElementPtr);
if (ACPI_FAILURE (Status))
{
- return (Status);
+ return_ACPI_STATUS (Status);
}
if (OriginalElement != *ElementPtr)
@@ -459,7 +462,7 @@ AcpiNsRepair_CID (
ElementPtr++;
}
- return (AE_OK);
+ return_ACPI_STATUS (AE_OK);
}
@@ -579,9 +582,8 @@ AcpiNsRepair_HID (
ACPI_OPERAND_OBJECT **ReturnObjectPtr)
{
ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr;
- ACPI_OPERAND_OBJECT *NewString;
- char *Source;
char *Dest;
+ char *Source;
ACPI_FUNCTION_NAME (NsRepair_HID);
@@ -591,7 +593,7 @@ AcpiNsRepair_HID (
if (ReturnObject->Common.Type != ACPI_TYPE_STRING)
{
- return (AE_OK);
+ return_ACPI_STATUS (AE_OK);
}
if (ReturnObject->String.Length == 0)
@@ -603,15 +605,7 @@ AcpiNsRepair_HID (
/* Return AE_OK anyway, let driver handle it */
Info->ReturnFlags |= ACPI_OBJECT_REPAIRED;
- return (AE_OK);
- }
-
- /* It is simplest to always create a new string object */
-
- NewString = AcpiUtCreateStringObject (ReturnObject->String.Length);
- if (!NewString)
- {
- return (AE_NO_MEMORY);
+ return_ACPI_STATUS (AE_OK);
}
/*
@@ -624,7 +618,7 @@ AcpiNsRepair_HID (
if (*Source == '*')
{
Source++;
- NewString->String.Length--;
+ ReturnObject->String.Length--;
ACPI_DEBUG_PRINT ((ACPI_DB_REPAIR,
"%s: Removed invalid leading asterisk\n", Info->FullPathname));
@@ -638,14 +632,13 @@ AcpiNsRepair_HID (
* "NNNN####" where N is an uppercase letter or decimal digit, and
* # is a hex digit.
*/
- for (Dest = NewString->String.Pointer; *Source; Dest++, Source++)
+ for (Dest = ReturnObject->String.Pointer; *Source; Dest++, Source++)
{
*Dest = (char) toupper ((int) *Source);
}
+ ReturnObject->String.Pointer[ReturnObject->String.Length] = 0;
- AcpiUtRemoveReference (ReturnObject);
- *ReturnObjectPtr = NewString;
- return (AE_OK);
+ return_ACPI_STATUS (AE_OK);
}
Index: src/sys/external/bsd/acpica/dist/os_specific/service_layers/oslinuxtbl.c
diff -u src/sys/external/bsd/acpica/dist/os_specific/service_layers/oslinuxtbl.c:1.12 src/sys/external/bsd/acpica/dist/os_specific/service_layers/oslinuxtbl.c:1.13
--- src/sys/external/bsd/acpica/dist/os_specific/service_layers/oslinuxtbl.c:1.12 Sun Aug 2 16:25:55 2020
+++ src/sys/external/bsd/acpica/dist/os_specific/service_layers/oslinuxtbl.c Fri Nov 27 11:58:32 2020
@@ -179,7 +179,7 @@ UINT32 Gbl_TableCount =
*
* RETURN: Status; Converted from errno.
*
- * DESCRIPTION: Get last errno and conver it to ACPI_STATUS.
+ * DESCRIPTION: Get last errno and convert it to ACPI_STATUS.
*
*****************************************************************************/