From patchwork Thu Oct 8 16:45:09 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Colin Ian King X-Patchwork-Id: 1378798 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=fwts-devel-bounces@lists.ubuntu.com; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=canonical.com Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4C6cWk4mpzz9sSn for ; Fri, 9 Oct 2020 03:45:22 +1100 (AEDT) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1kQZ2b-0001Ci-88; Thu, 08 Oct 2020 16:45:17 +0000 Received: from youngberry.canonical.com ([91.189.89.112]) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1kQZ2V-0001C3-Kq for fwts-devel@lists.ubuntu.com; Thu, 08 Oct 2020 16:45:11 +0000 Received: from 1.general.cking.uk.vpn ([10.172.193.212] helo=localhost) by youngberry.canonical.com with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1kQZ2U-00058G-W1; Thu, 08 Oct 2020 16:45:11 +0000 From: Colin King To: fwts-devel@lists.ubuntu.com Subject: [PATCH 1/2][V2] ACPICA: Update to version 20201008 Date: Thu, 8 Oct 2020 17:45:09 +0100 Message-Id: <20201008164510.198150-2-colin.king@canonical.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20201008164510.198150-1-colin.king@canonical.com> References: <20201008164510.198150-1-colin.king@canonical.com> MIME-Version: 1.0 X-BeenThere: fwts-devel@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Firmware Test Suite Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: fwts-devel-bounces@lists.ubuntu.com Sender: "fwts-devel" From: Colin Ian King Changes in this release of ACPICA are detailed at the following link on the ACPICA developer mailing list: https://lists.acpica.org/hyperkitty/list/devel@acpica.org/thread/JTW2JORTHXTV7NG5FE2C4WD3OL35NZS2/ Signed-off-by: Colin Ian King Acked-by: Alex Hung Acked-by: Ivan Hu --- src/acpica/source/common/ahpredef.c | 5 + src/acpica/source/common/ahuuids.c | 8 +- src/acpica/source/common/dmtbinfo1.c | 2 +- src/acpica/source/compiler/aslcompiler.l | 6 +- src/acpica/source/compiler/aslload.c | 9 +- src/acpica/source/compiler/aslmessages.c | 3 + src/acpica/source/compiler/aslmessages.h | 3 + src/acpica/source/compiler/aslparseop.c | 26 +++ src/acpica/source/compiler/aslprepkg.c | 17 +- src/acpica/source/compiler/aslutils.c | 8 +- src/acpica/source/compiler/aslxref.c | 11 +- .../source/components/debugger/dbexec.c | 42 +++- .../source/components/debugger/dbinput.c | 12 +- .../source/components/debugger/dbmethod.c | 183 +++++++++++++++--- .../source/components/disassembler/dmbuffer.c | 4 + .../source/components/disassembler/dmcstyle.c | 2 +- .../source/components/events/evrgnini.c | 11 +- .../source/components/executer/exregion.c | 70 +++++-- .../source/components/namespace/nsalloc.c | 2 +- .../source/components/namespace/nsarguments.c | 4 +- .../source/components/namespace/nsxfobj.c | 3 +- src/acpica/source/components/parser/psparse.c | 4 +- .../source/components/utilities/utpredef.c | 4 +- .../source/components/utilities/utstrsuppt.c | 30 ++- src/acpica/source/include/acconfig.h | 2 +- src/acpica/source/include/acdebug.h | 6 + src/acpica/source/include/acexcep.h | 4 +- src/acpica/source/include/acpixf.h | 2 +- src/acpica/source/include/acpredef.h | 23 ++- src/acpica/source/include/actbl1.h | 16 +- src/acpica/source/include/actypes.h | 16 +- src/acpica/source/include/acuuid.h | 8 +- src/acpica/source/include/platform/aclinux.h | 3 +- 33 files changed, 442 insertions(+), 107 deletions(-) diff --git a/src/acpica/source/common/ahpredef.c b/src/acpica/source/common/ahpredef.c index be1b37ab..182a83ad 100644 --- a/src/acpica/source/common/ahpredef.c +++ b/src/acpica/source/common/ahpredef.c @@ -393,6 +393,11 @@ const AH_PREDEFINED_NAME AslPredefinedInfo[] = AH_PREDEF ("_S3W", "S3 Device Wake State", "Returns the lowest D-state for this device that can wake the system from S3"), AH_PREDEF ("_S4W", "S4 Device Wake State", "Returns the lowest D-state for this device that can wake the system from S4"), AH_PREDEF ("_SB_", "System Bus", "Predefined scope for device and bus objects"), + AH_PREDEF ("_SBA", "SM Bus Alert information", "Returns info on an SMBus alert"), + AH_PREDEF ("_SBI", "SM Bus General information", "Returns info on an SMBus segment"), + AH_PREDEF ("_SBR", "SM Bus Data read", "Reads Byte, Word, or Block data from an SMBus segment"), + AH_PREDEF ("_SBT", "SM Bus Data transfer", "Performs data transfer to/from an SMBus segment. Implements ProcessCall protocol"), + AH_PREDEF ("_SBW", "SM Bus Data write", "Writes Byte, Word, or Block data to an SMBus segment"), AH_PREDEF ("_SBS", "Smart Battery Subsystem", "Returns the subsystem configuration"), AH_PREDEF ("_SCP", "Set Cooling Policy", "Sets the cooling policy (active or passive)"), AH_PREDEF ("_SDD", "Set Device Data", "Sets data for a SATA device"), diff --git a/src/acpica/source/common/ahuuids.c b/src/acpica/source/common/ahuuids.c index 64d45e3f..3c14b10e 100644 --- a/src/acpica/source/common/ahuuids.c +++ b/src/acpica/source/common/ahuuids.c @@ -171,6 +171,10 @@ const AH_UUID Gbl_AcpiUuids[] = {"PCI Host Bridge Device", UUID_PCI_HOST_BRIDGE}, {"HID I2C Device", UUID_I2C_DEVICE}, {"Power Button Device", UUID_POWER_BUTTON}, + {"Memory Device", UUID_MEMORY_DEVICE}, + {"Generic Buttons Device", UUID_GENERIC_BUTTONS_DEVICE}, + {"NVDIMM Root Device", UUID_NVDIMM_ROOT_DEVICE}, + {"Control Method Battery", UUID_CONTROL_METHOD_BATTERY}, {"[Interfaces]", NULL}, {"Device Labeling Interface", UUID_DEVICE_LABELING}, @@ -196,7 +200,9 @@ const AH_UUID Gbl_AcpiUuids[] = {"Battery Thermal Limit", UUID_BATTERY_THERMAL_LIMIT}, {"Thermal Extensions", UUID_THERMAL_EXTENSIONS}, {"Device Properties for _DSD", UUID_DEVICE_PROPERTIES}, - + {"Device Graphs for _DSD", UUID_DEVICE_GRAPHS}, + {"Hierarchical Data Extension", UUID_HIERARCHICAL_DATA_EXTENSION}, + {"ARM Coresight Graph", UUID_CORESIGHT_GRAPH}, {NULL, NULL} }; diff --git a/src/acpica/source/common/dmtbinfo1.c b/src/acpica/source/common/dmtbinfo1.c index 9661f495..750e29d5 100644 --- a/src/acpica/source/common/dmtbinfo1.c +++ b/src/acpica/source/common/dmtbinfo1.c @@ -1121,7 +1121,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoHmat0[] = {ACPI_DMT_UINT16, ACPI_HMAT0_OFFSET (Flags), "Flags (decoded below)", 0}, {ACPI_DMT_FLAG0, ACPI_HMAT0_FLAG_OFFSET (Flags,0), "Processor Proximity Domain Valid", 0}, {ACPI_DMT_UINT16, ACPI_HMAT0_OFFSET (Reserved1), "Reserved1", 0}, - {ACPI_DMT_UINT32, ACPI_HMAT0_OFFSET (ProcessorPD), "Processor Proximity Domain", 0}, + {ACPI_DMT_UINT32, ACPI_HMAT0_OFFSET (InitiatorPD), "Attached Initiator Proximity Domain", 0}, {ACPI_DMT_UINT32, ACPI_HMAT0_OFFSET (MemoryPD), "Memory Proximity Domain", 0}, {ACPI_DMT_UINT32, ACPI_HMAT0_OFFSET (Reserved2), "Reserved2", 0}, {ACPI_DMT_UINT64, ACPI_HMAT0_OFFSET (Reserved3), "Reserved3", 0}, diff --git a/src/acpica/source/compiler/aslcompiler.l b/src/acpica/source/compiler/aslcompiler.l index 4016faed..8e448fb7 100644 --- a/src/acpica/source/compiler/aslcompiler.l +++ b/src/acpica/source/compiler/aslcompiler.l @@ -279,8 +279,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); } @@ -841,7 +841,6 @@ NamePathTail [.]{NameSeg} * the required length. */ strcpy (s, "____"); - AcpiUtStrupr (AslCompilertext); } memcpy (s, AslCompilertext, strlen (AslCompilertext)); AslCompilerlval.s = s; @@ -851,7 +850,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); diff --git a/src/acpica/source/compiler/aslload.c b/src/acpica/source/compiler/aslload.c index 454fa8f5..c9fae99a 100644 --- a/src/acpica/source/compiler/aslload.c +++ b/src/acpica/source/compiler/aslload.c @@ -1404,9 +1404,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); diff --git a/src/acpica/source/compiler/aslmessages.c b/src/acpica/source/compiler/aslmessages.c index eb344940..320ad2ae 100644 --- a/src/acpica/source/compiler/aslmessages.c +++ b/src/acpica/source/compiler/aslmessages.c @@ -381,6 +381,9 @@ const char *AslCompilerMsgs [] = /* ASL_MSG_DUPLICATE_EXTERN_MISMATCH */ "Type mismatch between multiple external declarations detected", /* ASL_MSG_DUPLICATE_EXTERN_FOUND_HERE */"Duplicate external declaration:", /* ASL_MSG_CONDREF_NEEDS_EXTERNAL_DECL */"CondRefOf parameter requires External() declaration", +/* ASL_MSG_EXTERNAL_FOUND_HERE */ "External declaration below ", +/* ASL_MSG_LOWER_CASE_NAMESEG */ "At least one lower case letter found in NameSeg, ASL is case insensitive - converting to upper case", +/* ASL_MSG_LOWER_CASE_NAMEPATH */ "At least one lower case letter found in NamePath, ASL is case insensitive - converting to upper case", }; /* Table compiler */ diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h index 9a7215c6..8a2b5c6c 100644 --- a/src/acpica/source/compiler/aslmessages.h +++ b/src/acpica/source/compiler/aslmessages.h @@ -383,6 +383,9 @@ typedef enum ASL_MSG_DUPLICATE_EXTERN_MISMATCH, ASL_MSG_DUPLICATE_EXTERN_FOUND_HERE, ASL_MSG_CONDREF_NEEDS_EXTERNAL_DECL, + ASL_MSG_EXTERNAL_FOUND_HERE, + ASL_MSG_LOWER_CASE_NAMESEG, + ASL_MSG_LOWER_CASE_NAMEPATH, /* These messages are used by the Data Table compiler only */ diff --git a/src/acpica/source/compiler/aslparseop.c b/src/acpica/source/compiler/aslparseop.c index 46875413..51ef9b8c 100644 --- a/src/acpica/source/compiler/aslparseop.c +++ b/src/acpica/source/compiler/aslparseop.c @@ -388,6 +388,8 @@ TrCreateValuedLeafOp ( UINT64 Value) { ACPI_PARSE_OBJECT *Op; + UINT32 i; + char *StringPtr = NULL; Op = TrAllocateOp (ParseOpcode); @@ -408,11 +410,35 @@ TrCreateValuedLeafOp ( case PARSEOP_NAMESEG: + /* Check for mixed case (or all lower case). Issue a remark in this case */ + + for (i = 0; i < ACPI_NAMESEG_SIZE; i++) + { + if (islower (Op->Asl.Value.Name[i])) + { + AcpiUtStrupr (&Op->Asl.Value.Name[i]); + AslError (ASL_REMARK, ASL_MSG_LOWER_CASE_NAMESEG, Op, Op->Asl.Value.Name); + break; + } + } DbgPrint (ASL_PARSE_OUTPUT, "NAMESEG->%s", Op->Asl.Value.String); break; case PARSEOP_NAMESTRING: + /* Check for mixed case (or all lower case). Issue a remark in this case */ + + StringPtr = Op->Asl.Value.Name; + for (i = 0; *StringPtr; i++) + { + if (islower (*StringPtr)) + { + AcpiUtStrupr (&Op->Asl.Value.Name[i]); + AslError (ASL_REMARK, ASL_MSG_LOWER_CASE_NAMEPATH, Op, Op->Asl.Value.Name); + break; + } + StringPtr++; + } DbgPrint (ASL_PARSE_OUTPUT, "NAMESTRING->%s", Op->Asl.Value.String); break; diff --git a/src/acpica/source/compiler/aslprepkg.c b/src/acpica/source/compiler/aslprepkg.c index f3042cae..35b947c8 100644 --- a/src/acpica/source/compiler/aslprepkg.c +++ b/src/acpica/source/compiler/aslprepkg.c @@ -318,6 +318,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; @@ -917,7 +928,7 @@ ApPackageTooSmall ( UINT32 ExpectedCount) { - sprintf (AslGbl_MsgBuffer, "%s: length %u, required minimum is %u", + sprintf (AslGbl_MsgBuffer, "%4.4s: length %u, required minimum is %u", PredefinedName, Count, ExpectedCount); AslError (ASL_ERROR, ASL_MSG_RESERVED_PACKAGE_LENGTH, Op, AslGbl_MsgBuffer); @@ -946,7 +957,7 @@ ApZeroLengthPackage ( ACPI_PARSE_OBJECT *Op) { - sprintf (AslGbl_MsgBuffer, "%s: length is zero", PredefinedName); + sprintf (AslGbl_MsgBuffer, "%4.4s: length is zero", PredefinedName); AslError (ASL_ERROR, ASL_MSG_RESERVED_PACKAGE_LENGTH, Op, AslGbl_MsgBuffer); } @@ -975,7 +986,7 @@ ApPackageTooLarge ( UINT32 ExpectedCount) { - sprintf (AslGbl_MsgBuffer, "%s: length is %u, only %u required", + sprintf (AslGbl_MsgBuffer, "%4.4s: length is %u, only %u required", PredefinedName, Count, ExpectedCount); AslError (ASL_REMARK, ASL_MSG_RESERVED_PACKAGE_LENGTH, Op, AslGbl_MsgBuffer); diff --git a/src/acpica/source/compiler/aslutils.c b/src/acpica/source/compiler/aslutils.c index 42ef2c0b..16fad627 100644 --- a/src/acpica/source/compiler/aslutils.c +++ b/src/acpica/source/compiler/aslutils.c @@ -1074,14 +1074,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)) { - sprintf (ErrBuf, "While creating 64-bit constant: %s\n", - AcpiFormatException (Status)); + ExceptionInfo = AcpiUtValidateException ((ACPI_STATUS) Status); + sprintf (ErrBuf, " %s while converting to 64-bit integer", + ExceptionInfo->Description); AslCommonError (ASL_ERROR, ASL_MSG_SYNTAX, AslGbl_CurrentLineNumber, AslGbl_LogicalLineNumber, AslGbl_CurrentLineOffset, diff --git a/src/acpica/source/compiler/aslxref.c b/src/acpica/source/compiler/aslxref.c index 9306af20..163799a8 100644 --- a/src/acpica/source/compiler/aslxref.c +++ b/src/acpica/source/compiler/aslxref.c @@ -433,6 +433,7 @@ XfNamespaceLocateBegin ( UINT32 i; ACPI_NAMESPACE_NODE *DeclarationParentMethod; ACPI_PARSE_OBJECT *ReferenceParentMethod; + char *ExternalPath; ACPI_FUNCTION_TRACE_PTR (XfNamespaceLocateBegin, Op); @@ -1263,7 +1264,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 */ diff --git a/src/acpica/source/components/debugger/dbexec.c b/src/acpica/source/components/debugger/dbexec.c index f4b024e2..5fd05f5a 100644 --- a/src/acpica/source/components/debugger/dbexec.c +++ b/src/acpica/source/components/debugger/dbexec.c @@ -252,7 +252,8 @@ AcpiDbDeleteObjects ( * * RETURN: Status * - * DESCRIPTION: Execute a control method. + * DESCRIPTION: Execute a control method. Used to evaluate objects via the + * "EXECUTE" or "EVALUATE" commands. * ******************************************************************************/ @@ -504,11 +505,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); } @@ -525,7 +527,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 * ******************************************************************************/ @@ -569,6 +572,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) { @@ -588,13 +597,27 @@ AcpiDbExecute ( return; } - AcpiGbl_DbMethodInfo.Name = NameString; - AcpiGbl_DbMethodInfo.Args = Args; - AcpiGbl_DbMethodInfo.Types = Types; - AcpiGbl_DbMethodInfo.Flags = Flags; + /* Command (ALL ) 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)) @@ -655,6 +678,7 @@ AcpiDbExecute ( (UINT32) ReturnObj.Length); AcpiDbDumpExternalObject (ReturnObj.Pointer, 1); + AcpiOsPrintf ("\n"); /* Dump a _PLD buffer if present */ diff --git a/src/acpica/source/components/debugger/dbinput.c b/src/acpica/source/components/debugger/dbinput.c index 378e3db1..0cc97310 100644 --- a/src/acpica/source/components/debugger/dbinput.c +++ b/src/acpica/source/components/debugger/dbinput.c @@ -195,6 +195,7 @@ enum AcpiExDebuggerCommands { CMD_NOT_FOUND = 0, CMD_NULL, + CMD_ALL, CMD_ALLOCATIONS, CMD_ARGS, CMD_ARGUMENTS, @@ -275,6 +276,7 @@ static const ACPI_DB_COMMAND_INFO AcpiGbl_DbCommands[] = { {"", 0}, {"", 0}, + {"ALL", 1}, {"ALLOCATIONS", 0}, {"ARGS", 0}, {"ARGUMENTS", 0}, @@ -377,6 +379,7 @@ static const ACPI_DB_COMMAND_HELP AcpiGbl_DbCommandHelp[] = {1, " Type ", "Display object type\n"}, {0, "\nControl Method Execution:", "\n"}, + {1, " All ", "Evaluate all objects named NameSeg\n"}, {1, " Evaluate [Arguments]", "Evaluate object or control method\n"}, {1, " Execute [Arguments]", "Synonym for Evaluate\n"}, #ifdef ACPI_APPLICATION @@ -599,7 +602,7 @@ AcpiDbDisplayHelp ( } else { - /* Display help for all commands that match the subtring */ + /* Display help for all commands that match the substring */ AcpiDbDisplayCommandInfo (Command, TRUE); } @@ -947,6 +950,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 diff --git a/src/acpica/source/components/debugger/dbmethod.c b/src/acpica/source/components/debugger/dbmethod.c index a7b6911a..d259a3ef 100644 --- a/src/acpica/source/components/debugger/dbmethod.c +++ b/src/acpica/source/components/debugger/dbmethod.c @@ -170,6 +170,10 @@ AcpiDbWalkForExecute ( void *Context, void **ReturnValue); +static ACPI_STATUS +AcpiDbEvaluateObject ( + ACPI_NAMESPACE_NODE *Node); + /******************************************************************************* * @@ -542,46 +546,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) @@ -591,7 +578,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); @@ -624,13 +611,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 */ @@ -645,6 +689,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 @@ -675,3 +769,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); +} diff --git a/src/acpica/source/components/disassembler/dmbuffer.c b/src/acpica/source/components/disassembler/dmbuffer.c index 47279a2c..810f727f 100644 --- a/src/acpica/source/components/disassembler/dmbuffer.c +++ b/src/acpica/source/components/disassembler/dmbuffer.c @@ -494,6 +494,10 @@ AcpiDmUuid ( { AcpiOsPrintf (" /* %s */", Description); } + else + { + AcpiOsPrintf (" /* Unknown UUID */"); + } } diff --git a/src/acpica/source/components/disassembler/dmcstyle.c b/src/acpica/source/components/disassembler/dmcstyle.c index 4fcc5e6d..c8541aaf 100644 --- a/src/acpica/source/components/disassembler/dmcstyle.c +++ b/src/acpica/source/components/disassembler/dmcstyle.c @@ -744,7 +744,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) { diff --git a/src/acpica/source/components/events/evrgnini.c b/src/acpica/source/components/events/evrgnini.c index 54f91a36..a58765e3 100644 --- a/src/acpica/source/components/events/evrgnini.c +++ b/src/acpica/source/components/events/evrgnini.c @@ -183,6 +183,7 @@ AcpiEvSystemMemoryRegionSetup ( { ACPI_OPERAND_OBJECT *RegionDesc = (ACPI_OPERAND_OBJECT *) Handle; ACPI_MEM_SPACE_CONTEXT *LocalRegionContext; + ACPI_MEM_MAPPING *Mm; ACPI_FUNCTION_TRACE (EvSystemMemoryRegionSetup); @@ -194,12 +195,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; diff --git a/src/acpica/source/components/executer/exregion.c b/src/acpica/source/components/executer/exregion.c index 920aa1e3..0985e7a5 100644 --- a/src/acpica/source/components/executer/exregion.c +++ b/src/acpica/source/components/executer/exregion.c @@ -188,6 +188,7 @@ AcpiExSystemMemorySpaceHandler ( ACPI_STATUS Status = AE_OK; void *LogicalAddrPtr = NULL; ACPI_MEM_SPACE_CONTEXT *MemInfo = RegionContext; + ACPI_MEM_MAPPING *Mm = MemInfo->CurMm; UINT32 Length; ACPI_SIZE MapLength; ACPI_SIZE PageBoundaryMapLength; @@ -247,21 +248,46 @@ AcpiExSystemMemorySpaceHandler ( * Is 1) Address below the current mapping? OR * 2) Address beyond the current mapping? */ - if ((Address < MemInfo->MappedPhysicalAddress) || - (((UINT64) Address + Length) > - ((UINT64) - MemInfo->MappedPhysicalAddress + MemInfo->MappedLength))) + if (!Mm || (Address < Mm->PhysicalAddress) || + ((UINT64) Address + Length > (UINT64) Mm->PhysicalAddress + Mm->Length)) { /* - * The request cannot be resolved by the current memory mapping; - * Delete the existing mapping and create a new one. + * The request cannot be resolved by the current memory mapping. + * + * Look for an existing saved mapping covering the address range + * at hand. If found, save it as the current one and carry out + * the access. */ - if (MemInfo->MappedLength) + for (Mm = MemInfo->FirstMm; Mm; Mm = Mm->NextMm) { - /* Valid mapping, delete it */ + if (Mm == MemInfo->CurMm) + { + continue; + } + + if (Address < Mm->PhysicalAddress) + { + continue; + } + + if ((UINT64) Address + Length > (UINT64) Mm->PhysicalAddress + Mm->Length) + { + continue; + } + + MemInfo->CurMm = Mm; + goto access; + } - AcpiOsUnmapMemory (MemInfo->MappedLogicalAddress, - MemInfo->MappedLength); + /* Create a new mappings list entry */ + + Mm = ACPI_ALLOCATE_ZEROED(sizeof(*Mm)); + if (!Mm) + { + ACPI_ERROR((AE_INFO, + "Unable to save memory mapping at 0x%8.8X%8.8X, size %u", + ACPI_FORMAT_UINT64(Address), Length)); + return_ACPI_STATUS(AE_NO_MEMORY); } /* @@ -297,28 +323,38 @@ AcpiExSystemMemorySpaceHandler ( /* Create a new mapping starting at the address given */ - MemInfo->MappedLogicalAddress = AcpiOsMapMemory (Address, MapLength); - if (!MemInfo->MappedLogicalAddress) + LogicalAddrPtr = AcpiOsMapMemory(Address, MapLength); + if (!LogicalAddrPtr) { ACPI_ERROR ((AE_INFO, "Could not map memory at 0x%8.8X%8.8X, size %u", ACPI_FORMAT_UINT64 (Address), (UINT32) MapLength)); - MemInfo->MappedLength = 0; + ACPI_FREE(Mm); return_ACPI_STATUS (AE_NO_MEMORY); } /* Save the physical address and mapping size */ - MemInfo->MappedPhysicalAddress = Address; - MemInfo->MappedLength = MapLength; + Mm->LogicalAddress = LogicalAddrPtr; + Mm->PhysicalAddress = Address; + Mm->Length = MapLength; + + /* + * Add the new entry to the mappigs list and save it as the + * current mapping. + */ + Mm->NextMm = MemInfo->FirstMm; + MemInfo->FirstMm = Mm; + MemInfo->CurMm = Mm; } +access: /* * Generate a logical pointer corresponding to the address we want to * access */ - LogicalAddrPtr = MemInfo->MappedLogicalAddress + - ((UINT64) Address - (UINT64) MemInfo->MappedPhysicalAddress); + LogicalAddrPtr = Mm->LogicalAddress + + ((UINT64) Address - (UINT64) Mm->PhysicalAddress); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "System-Memory (width %u) R/W %u Address=%8.8X%8.8X\n", diff --git a/src/acpica/source/components/namespace/nsalloc.c b/src/acpica/source/components/namespace/nsalloc.c index 6610c7f3..e7564871 100644 --- a/src/acpica/source/components/namespace/nsalloc.c +++ b/src/acpica/source/components/namespace/nsalloc.c @@ -481,7 +481,7 @@ AcpiNsDeleteChildren ( NodeToDelete = NextNode; NextNode = NextNode->Peer; AcpiNsDeleteNode (NodeToDelete); - }; + } /* Clear the parent's child pointer */ diff --git a/src/acpica/source/components/namespace/nsarguments.c b/src/acpica/source/components/namespace/nsarguments.c index 2e2828dd..1a2d1099 100644 --- a/src/acpica/source/components/namespace/nsarguments.c +++ b/src/acpica/source/components/namespace/nsarguments.c @@ -205,7 +205,9 @@ AcpiNsCheckArgumentTypes ( ArgType = METHOD_GET_NEXT_TYPE (ArgTypeList); UserArgType = Info->Parameters[i]->Common.Type; - if (UserArgType != ArgType) + /* No typechecking for ACPI_TYPE_ANY */ + + if ((UserArgType != ArgType) && (ArgType != ACPI_TYPE_ANY)) { ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, ACPI_WARN_ALWAYS, "Argument #%u type mismatch - " diff --git a/src/acpica/source/components/namespace/nsxfobj.c b/src/acpica/source/components/namespace/nsxfobj.c index 68e64033..de793323 100644 --- a/src/acpica/source/components/namespace/nsxfobj.c +++ b/src/acpica/source/components/namespace/nsxfobj.c @@ -169,7 +169,8 @@ * * RETURN: Status * - * DESCRIPTION: This routine returns the type associatd with a particular handle + * DESCRIPTION: This routine returns the type associated with a particular + * handle * ******************************************************************************/ diff --git a/src/acpica/source/components/parser/psparse.c b/src/acpica/source/components/parser/psparse.c index 729c929e..d935ebc2 100644 --- a/src/acpica/source/components/parser/psparse.c +++ b/src/acpica/source/components/parser/psparse.c @@ -662,8 +662,8 @@ AcpiPsParseAml ( } /* - * If the transfer to the new method method call worked - *, a new walk state was created -- get it + * If the transfer to the new method method call worked, + * a new walk state was created -- get it */ WalkState = AcpiDsGetCurrentWalkState (Thread); continue; diff --git a/src/acpica/source/components/utilities/utpredef.c b/src/acpica/source/components/utilities/utpredef.c index 05708ab5..d6d98d0f 100644 --- a/src/acpica/source/components/utilities/utpredef.c +++ b/src/acpica/source/components/utilities/utpredef.c @@ -317,7 +317,7 @@ AcpiUtGetArgumentTypes ( static const char *UtExternalTypeNames[] = /* Indexed by ACPI_TYPE_* */ { - ", UNSUPPORTED-TYPE", + ", Type_ANY", ", Integer", ", String", ", Buffer", @@ -499,7 +499,7 @@ AcpiUtGetArgumentTypes ( { ThisArgumentType = METHOD_GET_NEXT_TYPE (ArgumentTypes); - if (!ThisArgumentType || (ThisArgumentType > METHOD_MAX_ARG_TYPE)) + if (ThisArgumentType > METHOD_MAX_ARG_TYPE) { printf ("**** Invalid argument type (%u) " "in predefined info structure\n", ThisArgumentType); diff --git a/src/acpica/source/components/utilities/utstrsuppt.c b/src/acpica/source/components/utilities/utstrsuppt.c index f0805ccf..153b56e8 100644 --- a/src/acpica/source/components/utilities/utstrsuppt.c +++ b/src/acpica/source/components/utilities/utstrsuppt.c @@ -207,10 +207,16 @@ AcpiUtConvertOctalString ( while (*String) { - /* Character must be ASCII 0-7, otherwise terminate with no error */ - + /* + * Character must be ASCII 0-7, otherwise: + * 1) Runtime: terminate with no error, per the ACPI spec + * 2) Compiler: return an error + */ if (!(ACPI_IS_OCTAL_DIGIT (*String))) { +#ifdef ACPI_ASL_COMPILER + Status = AE_BAD_OCTAL_CONSTANT; +#endif break; } @@ -263,10 +269,16 @@ AcpiUtConvertDecimalString ( while (*String) { - /* Character must be ASCII 0-9, otherwise terminate with no error */ - + /* + * Character must be ASCII 0-9, otherwise: + * 1) Runtime: terminate with no error, per the ACPI spec + * 2) Compiler: return an error + */ if (!isdigit (*String)) { +#ifdef ACPI_ASL_COMPILER + Status = AE_BAD_DECIMAL_CONSTANT; +#endif break; } @@ -319,10 +331,16 @@ AcpiUtConvertHexString ( while (*String) { - /* Must be ASCII A-F, a-f, or 0-9, otherwise terminate with no error */ - + /* + * Character must be ASCII A-F, a-f, or 0-9, otherwise: + * 1) Runtime: terminate with no error, per the ACPI spec + * 2) Compiler: return an error + */ if (!isxdigit (*String)) { +#ifdef ACPI_ASL_COMPILER + Status = AE_BAD_HEX_CONSTANT; +#endif break; } diff --git a/src/acpica/source/include/acconfig.h b/src/acpica/source/include/acconfig.h index 2c50ddc4..d717aa52 100644 --- a/src/acpica/source/include/acconfig.h +++ b/src/acpica/source/include/acconfig.h @@ -266,7 +266,7 @@ * *****************************************************************************/ -/* Method info (in WALK_STATE), containing local variables and argumetns */ +/* Method info (in WALK_STATE), containing local variables and arguments */ #define ACPI_METHOD_NUM_LOCALS 8 #define ACPI_METHOD_MAX_LOCAL 7 diff --git a/src/acpica/source/include/acdebug.h b/src/acpica/source/include/acdebug.h index 5012d35d..41f87320 100644 --- a/src/acpica/source/include/acdebug.h +++ b/src/acpica/source/include/acdebug.h @@ -187,6 +187,7 @@ typedef struct acpi_db_execute_walk { UINT32 Count; UINT32 MaxCount; + char NameSeg[ACPI_NAMESEG_SIZE + 1]; } ACPI_DB_EXECUTE_WALK; @@ -195,6 +196,7 @@ typedef struct acpi_db_execute_walk #define EX_NO_SINGLE_STEP 1 #define EX_SINGLE_STEP 2 +#define EX_ALL 4 /* @@ -345,6 +347,10 @@ void AcpiDbEvaluatePredefinedNames ( void); +void +AcpiDbEvaluateAll ( + char *NameSeg); + /* * dbnames - namespace commands diff --git a/src/acpica/source/include/acexcep.h b/src/acpica/source/include/acexcep.h index 90b369a1..11c81398 100644 --- a/src/acpica/source/include/acexcep.h +++ b/src/acpica/source/include/acexcep.h @@ -184,12 +184,12 @@ typedef struct acpi_exception_info { char *Name; -#ifdef ACPI_HELP_APP +#if defined (ACPI_HELP_APP) || defined (ACPI_ASL_COMPILER) 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} diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h index c1b55401..a16b6830 100644 --- a/src/acpica/source/include/acpixf.h +++ b/src/acpica/source/include/acpixf.h @@ -154,7 +154,7 @@ /* Current ACPICA subsystem version in YYYYMMDD format */ -#define ACPI_CA_VERSION 0x20200717 +#define ACPI_CA_VERSION 0x20200925 #include "acconfig.h" #include "actypes.h" diff --git a/src/acpica/source/include/acpredef.h b/src/acpica/source/include/acpredef.h index 924d7b90..2564fa55 100644 --- a/src/acpica/source/include/acpredef.h +++ b/src/acpica/source/include/acpredef.h @@ -246,7 +246,7 @@ enum AcpiReturnPackageTypes /* Support macros for users of the predefined info table */ -#define METHOD_PREDEF_ARGS_MAX 4 +#define METHOD_PREDEF_ARGS_MAX 5 #define METHOD_ARG_BIT_WIDTH 3 #define METHOD_ARG_MASK 0x0007 #define ARG_COUNT_IS_MINIMUM 0x8000 @@ -262,6 +262,7 @@ enum AcpiReturnPackageTypes #define METHOD_2ARGS(a1,a2) (2 | (a1 << 3) | (a2 << 6)) #define METHOD_3ARGS(a1,a2,a3) (3 | (a1 << 3) | (a2 << 6) | (a3 << 9)) #define METHOD_4ARGS(a1,a2,a3,a4) (4 | (a1 << 3) | (a2 << 6) | (a3 << 9) | (a4 << 12)) +#define METHOD_5ARGS(a1,a2,a3,a4,a5) (5 | (a1 << 3) | (a2 << 6) | (a3 << 9) | (a4 << 12) | (a5 << 15)) #define METHOD_RETURNS(type) (type) #define METHOD_NO_RETURN_VALUE 0 @@ -1023,9 +1024,29 @@ const ACPI_PREDEFINED_INFO AcpiGbl_PredefinedMethods[] = {{"_S4W", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, + {{"_SBA", METHOD_0ARGS, + METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (4 Int) */ + PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 4,0,0,0), + + {{"_SBI", METHOD_0ARGS, + METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (1 Int, 1 Buf) */ + PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 1, ACPI_RTYPE_BUFFER,1,0), + + {{"_SBR", METHOD_3ARGS (ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER), + METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (2 Int) */ + PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 2, ACPI_RTYPE_BUFFER | ACPI_RTYPE_INTEGER, 1,0), + {{"_SBS", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, + {{"_SBT", METHOD_4ARGS (ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_ANY), + METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (2 Int, 1 Buf | Int) */ + PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 2, ACPI_RTYPE_BUFFER | ACPI_RTYPE_INTEGER, 1,0), + + {{"_SBW", METHOD_5ARGS (ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_ANY), + METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, + PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_BUFFER | ACPI_RTYPE_INTEGER, 1, 0,0,0), + {{"_SCP", METHOD_1ARGS (ACPI_TYPE_INTEGER) | ARG_COUNT_IS_MINIMUM, METHOD_NO_RETURN_VALUE}}, /* Acpi 1.0 allowed 1 integer arg. Acpi 3.0 expanded to 3 args. Allow both. */ diff --git a/src/acpica/source/include/actbl1.h b/src/acpica/source/include/actbl1.h index 1f0d5c2f..47e5f059 100644 --- a/src/acpica/source/include/actbl1.h +++ b/src/acpica/source/include/actbl1.h @@ -1767,8 +1767,7 @@ typedef struct acpi_hest_ia_deferred_check /******************************************************************************* * - * HMAT - Heterogeneous Memory Attributes Table (ACPI 6.2) - * Version 1 + * HMAT - Heterogeneous Memory Attributes Table (ACPI 6.3) * ******************************************************************************/ @@ -1810,7 +1809,7 @@ typedef struct acpi_hmat_proximity_domain 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; @@ -1820,9 +1819,7 @@ typedef struct acpi_hmat_proximity_domain /* 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 */ @@ -1847,10 +1844,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 */ diff --git a/src/acpica/source/include/actypes.h b/src/acpica/source/include/actypes.h index 0ec14a36..48388c21 100644 --- a/src/acpica/source/include/actypes.h +++ b/src/acpica/source/include/actypes.h @@ -977,7 +977,7 @@ typedef UINT8 ACPI_ADR_SPACE_TYPE; * * 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 */ @@ -1440,13 +1440,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; diff --git a/src/acpica/source/include/acuuid.h b/src/acpica/source/include/acuuid.h index b856219c..468244a6 100644 --- a/src/acpica/source/include/acuuid.h +++ b/src/acpica/source/include/acuuid.h @@ -169,6 +169,10 @@ #define UUID_PCI_HOST_BRIDGE "33db4d5b-1ff7-401c-9657-7441c03dd766" #define UUID_I2C_DEVICE "3cdff6f7-4267-4555-ad05-b30a3d8938de" #define UUID_POWER_BUTTON "dfbcf3c5-e7a5-44e6-9c1f-29c76f6e059c" +#define UUID_MEMORY_DEVICE "03b19910-f473-11dd-87af-0800200c9a66" +#define UUID_GENERIC_BUTTONS_DEVICE "fa6bd625-9ce8-470d-a2c7-b3ca36c4282e" +#define UUID_NVDIMM_ROOT_DEVICE "2f10e7a4-9e91-11e4-89d3-123b93f75cba" +#define UUID_CONTROL_METHOD_BATTERY "f18fc78b-0f15-4978-b793-53f833a1d35b" /* Interfaces */ @@ -198,6 +202,8 @@ #define UUID_BATTERY_THERMAL_LIMIT "4c2067e3-887d-475c-9720-4af1d3ed602e" #define UUID_THERMAL_EXTENSIONS "14d399cd-7a27-4b18-8fb4-7cb7b9f4e500" #define UUID_DEVICE_PROPERTIES "daffd814-6eba-4d8c-8a91-bc9bbf4aa301" - +#define UUID_DEVICE_GRAPHS "ab02a46b-74c7-45a2-bd68-f7d344ef2153" +#define UUID_HIERARCHICAL_DATA_EXTENSION "dbb8e3e6-5886-4ba6-8795-1319f52a966b" +#define UUID_CORESIGHT_GRAPH "3ecbc8b6-1d0e-4fb3-8107-e627f805c6cd" #endif /* __ACUUID_H__ */ diff --git a/src/acpica/source/include/platform/aclinux.h b/src/acpica/source/include/platform/aclinux.h index aee2e85a..ff859c49 100644 --- a/src/acpica/source/include/platform/aclinux.h +++ b/src/acpica/source/include/platform/aclinux.h @@ -324,7 +324,8 @@ #if defined(__ia64__) || (defined(__x86_64__) && !defined(__ILP32__)) ||\ defined(__aarch64__) || defined(__PPC64__) ||\ - defined(__s390x__) || (defined(__riscv) && (__INTPTR_WIDTH__ == 64)) + defined(__s390x__) ||\ + (defined(__riscv) && (defined(__LP64__) || defined(_LP64))) #define ACPI_MACHINE_WIDTH 64 #define COMPILER_DEPENDENT_INT64 long #define COMPILER_DEPENDENT_UINT64 unsigned long