summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJung-uk Kim <jkim@FreeBSD.org>2020-10-08 16:44:28 +0000
committerJung-uk Kim <jkim@FreeBSD.org>2020-10-08 16:44:28 +0000
commite09636e66f40fad3b03a8dd4b86b1a371c435631 (patch)
tree7b65a7c39bdcce933c0b6ad825b31a72f28fd631
parentb1dc29fa09052190e87f93cf1888edea9c42df24 (diff)
Notes
-rw-r--r--changes.txt78
-rwxr-xr-xgenerate/release/build.sh2
-rwxr-xr-xgenerate/release/release.sh4
-rw-r--r--source/common/ahpredef.c5
-rw-r--r--source/common/ahuuids.c8
-rw-r--r--source/common/dmtbinfo1.c2
-rw-r--r--source/compiler/aslcompiler.l6
-rw-r--r--source/compiler/aslload.c9
-rw-r--r--source/compiler/aslmessages.c3
-rw-r--r--source/compiler/aslmessages.h3
-rw-r--r--source/compiler/aslparseop.c26
-rw-r--r--source/compiler/aslprepkg.c17
-rw-r--r--source/compiler/aslutils.c8
-rw-r--r--source/compiler/aslxref.c11
-rw-r--r--source/components/debugger/dbexec.c42
-rw-r--r--source/components/debugger/dbinput.c12
-rw-r--r--source/components/debugger/dbmethod.c183
-rw-r--r--source/components/disassembler/dmbuffer.c4
-rw-r--r--source/components/disassembler/dmcstyle.c2
-rw-r--r--source/components/events/evrgnini.c11
-rw-r--r--source/components/executer/exregion.c70
-rw-r--r--source/components/namespace/nsalloc.c2
-rw-r--r--source/components/namespace/nsarguments.c4
-rw-r--r--source/components/namespace/nsxfobj.c3
-rw-r--r--source/components/parser/psparse.c4
-rw-r--r--source/components/utilities/utpredef.c4
-rw-r--r--source/components/utilities/utstrsuppt.c30
-rw-r--r--source/include/acconfig.h2
-rw-r--r--source/include/acdebug.h6
-rw-r--r--source/include/acexcep.h4
-rw-r--r--source/include/acpixf.h2
-rw-r--r--source/include/acpredef.h23
-rw-r--r--source/include/actbl1.h16
-rw-r--r--source/include/actypes.h16
-rw-r--r--source/include/acuuid.h8
-rw-r--r--source/include/platform/aclinux.h3
-rw-r--r--source/os_specific/service_layers/oslinuxtbl.c2
-rw-r--r--source/tools/acpiexec/aemain.c2
38 files changed, 523 insertions, 114 deletions
diff --git a/changes.txt b/changes.txt
index a483f7ec92df..3c60c27d366b 100644
--- a/changes.txt
+++ b/changes.txt
@@ -1,6 +1,80 @@
----------------------------------------
+25 September 2020. Summary of changes for version 20200925:
+
+This release is available at https://acpica.org/downloads
+
+
+1) ACPICA kernel-resident subsystem:
+
+Preserve memory opregion mappings. The ACPICA's strategy with respect to
+the handling of memory mappings associated with memory operation regions
+is to avoid mapping the entire region at once which may be problematic at
+least in principle (for example, it may lead to conflicts with
+overlapping mappings having different attributes created by drivers). It
+may also be wasteful, because memory opregions on some systems take up
+vastchunks of address space while the fields in those regions actually
+accessed by AML are sparsely distributed.
+
+For this reason, a one-page "window" is mapped for a given opregion on
+the first memory access through it and if that "window" does not cover an
+address range accessed through that opregion subsequently, it is unmapped
+and a new "window" is mapped to replace it. Next, if the new "window" is
+not sufficient to access memory through the opregion in question in the
+future, it will be replaced with yet another "window" and so on. That
+may lead to a suboptimal sequence of memory mapping and unmapping
+operations, for example if two fields in one opregion separated from each
+other by a sufficiently wide chunk of unused address space are accessed
+in an alternating pattern.
+
+Added support for 64 bit risc-v compilation. Useful for acpica tools and
+incorporating ACPICA into the Firmware Test Suite. Colin Ian King
+<colin.king@canonical.com>.
+
+Added support for SMBus predefined names (from SMBus Control Method
+Interface Specification, Version 1.0, December 10, 1999. New predefined
+names:
+ _SBA
+ _SBI
+ _SBR
+ _SBT
+ _SBW
+
+AML Disassembler: Added a new command, "All <NameSeg". This command will
+evaluate all objects in the current namespace whose NameString contains
+the input NameSeg as the last element of the NameString. Useful for
+debugging.
+
+
+2) iASL Compiler/Disassembler and ACPICA tools:
+
+iASL: fixed a crash that occurred when predefined objects return packages
+with lengths that exceed the initializer list.
+
+iASL: added more detail to external resolution error message when
+compiling multiple definition blocks.
+
+iASL: improve alias analysis by saving object type. If the alias is a
+method type, the parameter count is also recorded.
+
+AcpiExec: Increase the default loop timeout value. Was 1 second, is now
+10 seconds. Prevents unnecessary timeouts when executing control methods
+from the command line.
+
+AcpiHelp/disassembler: Added a bunch of "known" UUIDs to the internal
+list. Includes:
+ Memory Device
+ Generic Buttons Device
+ NVDIMM Root Device
+ Control Method Battery
+ Device Graphs for _DSD method
+ Hierarchical Data Extension
+....ARM CoreSight Graph
+
+----------------------------------------
+
+
17 July 2020. Summary of changes for version 20200717:
This release is available at https://acpica.org/downloads
@@ -94,7 +168,7 @@ would need to be updated to match the same behavior as the acpiexec
utility and since acpiexec can already dump the entire namespace (via the
'namespace' command), we no longer have the need to maintain acpinames.
- In order to dump the contents of the ACPI namepsace using acpiexec,
+ In order to dump the contents of the ACPI namespace using acpiexec,
execute the following command from the command line:
acpiexec -b "n" [aml files]
@@ -17606,7 +17680,7 @@ bypass the "implicit conversion" mechanism of the Store operator.)
The ACPI 2.0 semantics for the SizeOf operator are fully
implemented. The change is that performing a SizeOf on a
reference object causes an automatic dereference of the object to
-tha actual value before the size is evaluated. This behavior was
+the actual value before the size is evaluated. This behavior was
undefined in ACPI 1.0.
The ACPI 2.0 semantics for the Extended IRQ resource descriptor
diff --git a/generate/release/build.sh b/generate/release/build.sh
index da9f43a2f212..825f525ee74a 100755
--- a/generate/release/build.sh
+++ b/generate/release/build.sh
@@ -455,7 +455,7 @@ cd ../..
# Ensure that the temporary directory is created fresh
#
rm -rf $TEMP_DIR
-
+
#
# Parameter evaluation
#
diff --git a/generate/release/release.sh b/generate/release/release.sh
index 7bb9c3d4919a..a1f7047889cd 100755
--- a/generate/release/release.sh
+++ b/generate/release/release.sh
@@ -83,7 +83,7 @@ set -e # Abort on any error
if [ $NPARAM -gt 1 ]; then
usage "Wrong argument count ($NPARAM)"
exit 1
-
+
elif [ $NPARAM -eq 1 ]; then
if [ $1 == notest ]; then
BUILD_TESTS=0
@@ -131,7 +131,7 @@ if [ $BUILD_TESTS -eq 1 ]; then
bash build.sh test win
bash build.sh test unix
-
+
else
echo "**** Test suites not built because the notest option was used"
fi
diff --git a/source/common/ahpredef.c b/source/common/ahpredef.c
index be1b37abeede..182a83ad4967 100644
--- a/source/common/ahpredef.c
+++ b/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/source/common/ahuuids.c b/source/common/ahuuids.c
index 64d45e3f70ed..3c14b10e86d0 100644
--- a/source/common/ahuuids.c
+++ b/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/source/common/dmtbinfo1.c b/source/common/dmtbinfo1.c
index 9661f495a130..750e29d54c6f 100644
--- a/source/common/dmtbinfo1.c
+++ b/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/source/compiler/aslcompiler.l b/source/compiler/aslcompiler.l
index 4016faeda806..8e448fb76ead 100644
--- a/source/compiler/aslcompiler.l
+++ b/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/source/compiler/aslload.c b/source/compiler/aslload.c
index 454fa8f5f0db..c9fae99a9dd6 100644
--- a/source/compiler/aslload.c
+++ b/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/source/compiler/aslmessages.c b/source/compiler/aslmessages.c
index eb3449409b53..320ad2aefa9b 100644
--- a/source/compiler/aslmessages.c
+++ b/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/source/compiler/aslmessages.h b/source/compiler/aslmessages.h
index 9a7215c63f23..8a2b5c6c7da7 100644
--- a/source/compiler/aslmessages.h
+++ b/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/source/compiler/aslparseop.c b/source/compiler/aslparseop.c
index 46875413e439..51ef9b8c413c 100644
--- a/source/compiler/aslparseop.c
+++ b/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/source/compiler/aslprepkg.c b/source/compiler/aslprepkg.c
index f3042caef432..35b947c84bdf 100644
--- a/source/compiler/aslprepkg.c
+++ b/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/source/compiler/aslutils.c b/source/compiler/aslutils.c
index 42ef2c0b88c1..16fad62733f4 100644
--- a/source/compiler/aslutils.c
+++ b/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/source/compiler/aslxref.c b/source/compiler/aslxref.c
index 9306af200f50..163799a8beea 100644
--- a/source/compiler/aslxref.c
+++ b/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/source/components/debugger/dbexec.c b/source/components/debugger/dbexec.c
index f4b024e2444a..5fd05f5adae8 100644
--- a/source/components/debugger/dbexec.c
+++ b/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/source/components/debugger/dbinput.c b/source/components/debugger/dbinput.c
index 378e3db1a165..0cc97310fa10 100644
--- a/source/components/debugger/dbinput.c
+++ b/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/source/components/debugger/dbmethod.c b/source/components/debugger/dbmethod.c
index a7b6911a0d67..d259a3efa6bf 100644
--- a/source/components/debugger/dbmethod.c
+++ b/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 */
@@ -647,6 +691,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
@@ -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/source/components/disassembler/dmbuffer.c b/source/components/disassembler/dmbuffer.c
index 47279a2c2a82..810f727fa8fa 100644
--- a/source/components/disassembler/dmbuffer.c
+++ b/source/components/disassembler/dmbuffer.c
@@ -494,6 +494,10 @@ AcpiDmUuid (
{
AcpiOsPrintf (" /* %s */", Description);
}
+ else
+ {
+ AcpiOsPrintf (" /* Unknown UUID */");
+ }
}
diff --git a/source/components/disassembler/dmcstyle.c b/source/components/disassembler/dmcstyle.c
index 4fcc5e6d0af0..c8541aaf4d7a 100644
--- a/source/components/disassembler/dmcstyle.c
+++ b/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/source/components/events/evrgnini.c b/source/components/events/evrgnini.c
index 54f91a3639c9..a58765e3669b 100644
--- a/source/components/events/evrgnini.c
+++ b/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/source/components/executer/exregion.c b/source/components/executer/exregion.c
index 920aa1e36fb5..0985e7a51e93 100644
--- a/source/components/executer/exregion.c
+++ b/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/source/components/namespace/nsalloc.c b/source/components/namespace/nsalloc.c
index 6610c7f3b750..e75648717ec0 100644
--- a/source/components/namespace/nsalloc.c
+++ b/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/source/components/namespace/nsarguments.c b/source/components/namespace/nsarguments.c
index 2e2828dd3e7d..1a2d1099e6e4 100644
--- a/source/components/namespace/nsarguments.c
+++ b/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/source/components/namespace/nsxfobj.c b/source/components/namespace/nsxfobj.c
index 68e64033b1f2..de793323adfd 100644
--- a/source/components/namespace/nsxfobj.c
+++ b/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/source/components/parser/psparse.c b/source/components/parser/psparse.c
index 729c929ee1fd..d935ebc2df76 100644
--- a/source/components/parser/psparse.c
+++ b/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/source/components/utilities/utpredef.c b/source/components/utilities/utpredef.c
index 05708ab5912e..d6d98d0f2a55 100644
--- a/source/components/utilities/utpredef.c
+++ b/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/source/components/utilities/utstrsuppt.c b/source/components/utilities/utstrsuppt.c
index f0805ccf7db7..153b56e85cff 100644
--- a/source/components/utilities/utstrsuppt.c
+++ b/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/source/include/acconfig.h b/source/include/acconfig.h
index 2c50ddc49a49..d717aa52ce59 100644
--- a/source/include/acconfig.h
+++ b/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/source/include/acdebug.h b/source/include/acdebug.h
index 5012d35d9d12..41f87320bfc3 100644
--- a/source/include/acdebug.h
+++ b/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/source/include/acexcep.h b/source/include/acexcep.h
index 90b369a1cbc1..11c81398e915 100644
--- a/source/include/acexcep.h
+++ b/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/source/include/acpixf.h b/source/include/acpixf.h
index c1b55401a360..a16b683099b3 100644
--- a/source/include/acpixf.h
+++ b/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/source/include/acpredef.h b/source/include/acpredef.h
index 924d7b90af9a..2564fa55bdfc 100644
--- a/source/include/acpredef.h
+++ b/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/source/include/actbl1.h b/source/include/actbl1.h
index 1f0d5c2f4568..47e5f059a55a 100644
--- a/source/include/actbl1.h
+++ b/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/source/include/actypes.h b/source/include/actypes.h
index 0ec14a36ada9..48388c2198ed 100644
--- a/source/include/actypes.h
+++ b/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/source/include/acuuid.h b/source/include/acuuid.h
index b856219c605a..468244a6b373 100644
--- a/source/include/acuuid.h
+++ b/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/source/include/platform/aclinux.h b/source/include/platform/aclinux.h
index 8c8154824fec..ff859c497a8a 100644
--- a/source/include/platform/aclinux.h
+++ b/source/include/platform/aclinux.h
@@ -324,7 +324,8 @@
#if defined(__ia64__) || (defined(__x86_64__) && !defined(__ILP32__)) ||\
defined(__aarch64__) || defined(__PPC64__) ||\
- defined(__s390x__)
+ defined(__s390x__) ||\
+ (defined(__riscv) && (defined(__LP64__) || defined(_LP64)))
#define ACPI_MACHINE_WIDTH 64
#define COMPILER_DEPENDENT_INT64 long
#define COMPILER_DEPENDENT_UINT64 unsigned long
diff --git a/source/os_specific/service_layers/oslinuxtbl.c b/source/os_specific/service_layers/oslinuxtbl.c
index 6131b1010718..4fb133d2e894 100644
--- a/source/os_specific/service_layers/oslinuxtbl.c
+++ b/source/os_specific/service_layers/oslinuxtbl.c
@@ -287,7 +287,7 @@ UINT32 Gbl_TableCount = 0;
*
* 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.
*
*****************************************************************************/
diff --git a/source/tools/acpiexec/aemain.c b/source/tools/acpiexec/aemain.c
index 3a4f503b3e6d..2ed08763734b 100644
--- a/source/tools/acpiexec/aemain.c
+++ b/source/tools/acpiexec/aemain.c
@@ -639,7 +639,7 @@ main (
/* Use a shorter timeout value for acpiexec */
- AcpiGbl_MaxLoopIterations = 1;
+ AcpiGbl_MaxLoopIterations = 10;
/* Initialize the AML debugger */