ACK: [PATCH 1/2][V2] ACPICA: Update to version 20201008
ivanhu
ivan.hu at canonical.com
Mon Oct 12 02:46:00 UTC 2020
On 10/9/20 12:45 AM, Colin King wrote:
> From: Colin Ian King <colin.king at canonical.com>
>
> 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 <colin.king at canonical.com>
> ---
> 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 <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))
> @@ -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[] =
> {
> {"<NOT FOUND>", 0},
> {"<NULL>", 0},
> + {"ALL", 1},
> {"ALLOCATIONS", 0},
> {"ARGS", 0},
> {"ARGUMENTS", 0},
> @@ -377,6 +379,7 @@ static const ACPI_DB_COMMAND_HELP AcpiGbl_DbCommandHelp[] =
> {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
> @@ -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
>
Acked-by: Ivan Hu <ivan.hu at canonical.com>
More information about the fwts-devel
mailing list