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. * *****************************************************************************/