aboutsummaryrefslogtreecommitdiff
path: root/sys/contrib/dev
diff options
context:
space:
mode:
authorJung-uk Kim <jkim@FreeBSD.org>2020-10-09 05:27:02 +0000
committerJung-uk Kim <jkim@FreeBSD.org>2020-10-09 05:27:02 +0000
commitf15e9afb1f64d00403e702d41934dacc425582d7 (patch)
tree9a8159d4709f108a9342efbe84c42ce21971287a /sys/contrib/dev
parent0d948bff71998d00d06335dedc6702609483d6de (diff)
parente09636e66f40fad3b03a8dd4b86b1a371c435631 (diff)
downloadsrc-f15e9afb1f64d00403e702d41934dacc425582d7.tar.gz
src-f15e9afb1f64d00403e702d41934dacc425582d7.zip
MFV: r366539
Merge ACPICA 20200925.
Notes
Notes: svn path=/head/; revision=366562
Diffstat (limited to 'sys/contrib/dev')
-rw-r--r--sys/contrib/dev/acpica/changes.txt78
-rw-r--r--sys/contrib/dev/acpica/common/ahpredef.c5
-rw-r--r--sys/contrib/dev/acpica/common/ahuuids.c8
-rw-r--r--sys/contrib/dev/acpica/common/dmtbinfo1.c2
-rw-r--r--sys/contrib/dev/acpica/compiler/aslcompiler.l6
-rw-r--r--sys/contrib/dev/acpica/compiler/aslload.c9
-rw-r--r--sys/contrib/dev/acpica/compiler/aslmessages.c3
-rw-r--r--sys/contrib/dev/acpica/compiler/aslmessages.h3
-rw-r--r--sys/contrib/dev/acpica/compiler/aslparseop.c26
-rw-r--r--sys/contrib/dev/acpica/compiler/aslprepkg.c17
-rw-r--r--sys/contrib/dev/acpica/compiler/aslutils.c8
-rw-r--r--sys/contrib/dev/acpica/compiler/aslxref.c11
-rw-r--r--sys/contrib/dev/acpica/components/debugger/dbexec.c42
-rw-r--r--sys/contrib/dev/acpica/components/debugger/dbinput.c12
-rw-r--r--sys/contrib/dev/acpica/components/debugger/dbmethod.c183
-rw-r--r--sys/contrib/dev/acpica/components/disassembler/dmbuffer.c4
-rw-r--r--sys/contrib/dev/acpica/components/disassembler/dmcstyle.c2
-rw-r--r--sys/contrib/dev/acpica/components/events/evrgnini.c11
-rw-r--r--sys/contrib/dev/acpica/components/executer/exregion.c70
-rw-r--r--sys/contrib/dev/acpica/components/namespace/nsalloc.c2
-rw-r--r--sys/contrib/dev/acpica/components/namespace/nsarguments.c4
-rw-r--r--sys/contrib/dev/acpica/components/namespace/nsxfobj.c3
-rw-r--r--sys/contrib/dev/acpica/components/parser/psparse.c4
-rw-r--r--sys/contrib/dev/acpica/components/utilities/utpredef.c4
-rw-r--r--sys/contrib/dev/acpica/components/utilities/utstrsuppt.c30
-rw-r--r--sys/contrib/dev/acpica/include/acconfig.h2
-rw-r--r--sys/contrib/dev/acpica/include/acdebug.h6
-rw-r--r--sys/contrib/dev/acpica/include/acexcep.h4
-rw-r--r--sys/contrib/dev/acpica/include/acpixf.h2
-rw-r--r--sys/contrib/dev/acpica/include/acpredef.h23
-rw-r--r--sys/contrib/dev/acpica/include/actbl1.h16
-rw-r--r--sys/contrib/dev/acpica/include/actypes.h16
-rw-r--r--sys/contrib/dev/acpica/include/acuuid.h8
33 files changed, 516 insertions, 108 deletions
diff --git a/sys/contrib/dev/acpica/changes.txt b/sys/contrib/dev/acpica/changes.txt
index a483f7ec92df..3c60c27d366b 100644
--- a/sys/contrib/dev/acpica/changes.txt
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/common/ahpredef.c b/sys/contrib/dev/acpica/common/ahpredef.c
index 625a0b4854d8..6853c7d359c1 100644
--- a/sys/contrib/dev/acpica/common/ahpredef.c
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/common/ahuuids.c b/sys/contrib/dev/acpica/common/ahuuids.c
index e5e26ffd6de3..2a7455cd2391 100644
--- a/sys/contrib/dev/acpica/common/ahuuids.c
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/common/dmtbinfo1.c b/sys/contrib/dev/acpica/common/dmtbinfo1.c
index b03aea5f7071..133bec7b6220 100644
--- a/sys/contrib/dev/acpica/common/dmtbinfo1.c
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/compiler/aslcompiler.l b/sys/contrib/dev/acpica/compiler/aslcompiler.l
index ecbdb5993340..524dd0a67ff5 100644
--- a/sys/contrib/dev/acpica/compiler/aslcompiler.l
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/compiler/aslload.c b/sys/contrib/dev/acpica/compiler/aslload.c
index d30f79633ec2..9effbd296d6e 100644
--- a/sys/contrib/dev/acpica/compiler/aslload.c
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/compiler/aslmessages.c b/sys/contrib/dev/acpica/compiler/aslmessages.c
index 13ca3e005f2f..1c0eec06bea6 100644
--- a/sys/contrib/dev/acpica/compiler/aslmessages.c
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/compiler/aslmessages.h b/sys/contrib/dev/acpica/compiler/aslmessages.h
index 9a7215c63f23..8a2b5c6c7da7 100644
--- a/sys/contrib/dev/acpica/compiler/aslmessages.h
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/compiler/aslparseop.c b/sys/contrib/dev/acpica/compiler/aslparseop.c
index 5f16077a437a..c3b9630a53fe 100644
--- a/sys/contrib/dev/acpica/compiler/aslparseop.c
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/compiler/aslprepkg.c b/sys/contrib/dev/acpica/compiler/aslprepkg.c
index d2810b7cda88..0444a5f347c9 100644
--- a/sys/contrib/dev/acpica/compiler/aslprepkg.c
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/compiler/aslutils.c b/sys/contrib/dev/acpica/compiler/aslutils.c
index c7d9f6e98db7..24ddb05c27c8 100644
--- a/sys/contrib/dev/acpica/compiler/aslutils.c
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/compiler/aslxref.c b/sys/contrib/dev/acpica/compiler/aslxref.c
index b3cb3a1d6bff..4b56d25cde15 100644
--- a/sys/contrib/dev/acpica/compiler/aslxref.c
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/components/debugger/dbexec.c b/sys/contrib/dev/acpica/components/debugger/dbexec.c
index 88194fc16ad4..09e1de3d8733 100644
--- a/sys/contrib/dev/acpica/components/debugger/dbexec.c
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/components/debugger/dbinput.c b/sys/contrib/dev/acpica/components/debugger/dbinput.c
index 154e3ea727f9..50463d06d461 100644
--- a/sys/contrib/dev/acpica/components/debugger/dbinput.c
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/components/debugger/dbmethod.c b/sys/contrib/dev/acpica/components/debugger/dbmethod.c
index 66d93298b36b..30e08d97a89b 100644
--- a/sys/contrib/dev/acpica/components/debugger/dbmethod.c
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/components/disassembler/dmbuffer.c b/sys/contrib/dev/acpica/components/disassembler/dmbuffer.c
index 0b48154ac6d4..e850acc7b1c8 100644
--- a/sys/contrib/dev/acpica/components/disassembler/dmbuffer.c
+++ b/sys/contrib/dev/acpica/components/disassembler/dmbuffer.c
@@ -494,6 +494,10 @@ AcpiDmUuid (
{
AcpiOsPrintf (" /* %s */", Description);
}
+ else
+ {
+ AcpiOsPrintf (" /* Unknown UUID */");
+ }
}
diff --git a/sys/contrib/dev/acpica/components/disassembler/dmcstyle.c b/sys/contrib/dev/acpica/components/disassembler/dmcstyle.c
index 139272cd7a7a..f35308a3db33 100644
--- a/sys/contrib/dev/acpica/components/disassembler/dmcstyle.c
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/components/events/evrgnini.c b/sys/contrib/dev/acpica/components/events/evrgnini.c
index 7b5b81ed4724..68f9b9d5e4cf 100644
--- a/sys/contrib/dev/acpica/components/events/evrgnini.c
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/components/executer/exregion.c b/sys/contrib/dev/acpica/components/executer/exregion.c
index b85343065b8d..5c5d735291e7 100644
--- a/sys/contrib/dev/acpica/components/executer/exregion.c
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/components/namespace/nsalloc.c b/sys/contrib/dev/acpica/components/namespace/nsalloc.c
index a97aa3a97cd2..6012b658baea 100644
--- a/sys/contrib/dev/acpica/components/namespace/nsalloc.c
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/components/namespace/nsarguments.c b/sys/contrib/dev/acpica/components/namespace/nsarguments.c
index 9a81cdfeaa53..e66c35d3a270 100644
--- a/sys/contrib/dev/acpica/components/namespace/nsarguments.c
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/components/namespace/nsxfobj.c b/sys/contrib/dev/acpica/components/namespace/nsxfobj.c
index fabe58f6110a..ce8057283597 100644
--- a/sys/contrib/dev/acpica/components/namespace/nsxfobj.c
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/components/parser/psparse.c b/sys/contrib/dev/acpica/components/parser/psparse.c
index 41f0c7b7214f..75ec3dca1aad 100644
--- a/sys/contrib/dev/acpica/components/parser/psparse.c
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/components/utilities/utpredef.c b/sys/contrib/dev/acpica/components/utilities/utpredef.c
index 1be826e59cb8..0b86feb4dc79 100644
--- a/sys/contrib/dev/acpica/components/utilities/utpredef.c
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/components/utilities/utstrsuppt.c b/sys/contrib/dev/acpica/components/utilities/utstrsuppt.c
index 4432715fe08d..3c5e591735b0 100644
--- a/sys/contrib/dev/acpica/components/utilities/utstrsuppt.c
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/include/acconfig.h b/sys/contrib/dev/acpica/include/acconfig.h
index 2c50ddc49a49..d717aa52ce59 100644
--- a/sys/contrib/dev/acpica/include/acconfig.h
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/include/acdebug.h b/sys/contrib/dev/acpica/include/acdebug.h
index 205e402123e8..bef5dd936447 100644
--- a/sys/contrib/dev/acpica/include/acdebug.h
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/include/acexcep.h b/sys/contrib/dev/acpica/include/acexcep.h
index 90b369a1cbc1..11c81398e915 100644
--- a/sys/contrib/dev/acpica/include/acexcep.h
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/include/acpixf.h b/sys/contrib/dev/acpica/include/acpixf.h
index 07c4b758a20d..aca4c1d49d6d 100644
--- a/sys/contrib/dev/acpica/include/acpixf.h
+++ b/sys/contrib/dev/acpica/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 <contrib/dev/acpica/include/acconfig.h>
#include <contrib/dev/acpica/include/actypes.h>
diff --git a/sys/contrib/dev/acpica/include/acpredef.h b/sys/contrib/dev/acpica/include/acpredef.h
index 924d7b90af9a..2564fa55bdfc 100644
--- a/sys/contrib/dev/acpica/include/acpredef.h
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/include/actbl1.h b/sys/contrib/dev/acpica/include/actbl1.h
index 1f0d5c2f4568..47e5f059a55a 100644
--- a/sys/contrib/dev/acpica/include/actbl1.h
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/include/actypes.h b/sys/contrib/dev/acpica/include/actypes.h
index 0ec14a36ada9..48388c2198ed 100644
--- a/sys/contrib/dev/acpica/include/actypes.h
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/include/acuuid.h b/sys/contrib/dev/acpica/include/acuuid.h
index b856219c605a..468244a6b373 100644
--- a/sys/contrib/dev/acpica/include/acuuid.h
+++ b/sys/contrib/dev/acpica/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__ */