Import ACPICA 20200925.
This commit is contained in:
parent
b1dc29fa09
commit
e09636e66f
78
changes.txt
78
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
|
||||
|
@ -455,7 +455,7 @@ cd ../..
|
||||
# Ensure that the temporary directory is created fresh
|
||||
#
|
||||
rm -rf $TEMP_DIR
|
||||
|
||||
|
||||
#
|
||||
# Parameter evaluation
|
||||
#
|
||||
|
@ -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
|
||||
|
@ -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"),
|
||||
|
@ -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}
|
||||
};
|
||||
|
||||
|
@ -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},
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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 */
|
||||
|
@ -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 */
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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,
|
||||
|
@ -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 */
|
||||
|
@ -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 */
|
||||
|
||||
|
@ -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
|
||||
|
@ -170,6 +170,10 @@ AcpiDbWalkForExecute (
|
||||
void *Context,
|
||||
void **ReturnValue);
|
||||
|
||||
static ACPI_STATUS
|
||||
AcpiDbEvaluateObject (
|
||||
ACPI_NAMESPACE_NODE *Node);
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
@ -542,47 +546,30 @@ 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;
|
||||
ACPI_BUFFER ReturnObj;
|
||||
ACPI_STATUS Status;
|
||||
|
||||
|
||||
Predefined = AcpiUtMatchPredefinedMethod (Node->Name.Ascii);
|
||||
if (!Predefined)
|
||||
{
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
if (Node->Type == ACPI_TYPE_LOCAL_SCOPE)
|
||||
{
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
Pathname = AcpiNsGetExternalPathname (Node);
|
||||
if (!Pathname)
|
||||
{
|
||||
@ -591,7 +578,7 @@ AcpiDbWalkForExecute (
|
||||
|
||||
/* Get the object info for number of method parameters */
|
||||
|
||||
Status = AcpiGetObjectInfo (ObjHandle, &ObjInfo);
|
||||
Status = AcpiGetObjectInfo (Node, &ObjInfo);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
ACPI_FREE (Pathname);
|
||||
@ -624,13 +611,70 @@ AcpiDbWalkForExecute (
|
||||
AcpiGbl_MethodExecuting = TRUE;
|
||||
|
||||
Status = AcpiEvaluateObject (Node, NULL, &ParamObjects, &ReturnObj);
|
||||
AcpiGbl_MethodExecuting = FALSE;
|
||||
|
||||
AcpiOsPrintf ("%-32s returned %s\n", Pathname, AcpiFormatException (Status));
|
||||
AcpiGbl_MethodExecuting = FALSE;
|
||||
if (ReturnObj.Length)
|
||||
{
|
||||
AcpiOsPrintf ("Evaluation of %s returned object %p, "
|
||||
"external buffer length %X\n",
|
||||
Pathname, ReturnObj.Pointer, (UINT32) ReturnObj.Length);
|
||||
|
||||
AcpiDbDumpExternalObject (ReturnObj.Pointer, 1);
|
||||
AcpiOsPrintf ("\n");
|
||||
}
|
||||
|
||||
ACPI_FREE (Pathname);
|
||||
|
||||
/* Ignore status from method execution */
|
||||
|
||||
return (AE_OK);
|
||||
|
||||
/* Update count, check if we have executed enough methods */
|
||||
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDbWalkForExecute
|
||||
*
|
||||
* PARAMETERS: Callback from WalkNamespace
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Batch execution function. Evaluates all "predefined" objects --
|
||||
* the nameseg begins with an underscore.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static ACPI_STATUS
|
||||
AcpiDbWalkForExecute (
|
||||
ACPI_HANDLE ObjHandle,
|
||||
UINT32 NestingLevel,
|
||||
void *Context,
|
||||
void **ReturnValue)
|
||||
{
|
||||
ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle;
|
||||
ACPI_DB_EXECUTE_WALK *Info = (ACPI_DB_EXECUTE_WALK *) Context;
|
||||
ACPI_STATUS Status;
|
||||
const ACPI_PREDEFINED_INFO *Predefined;
|
||||
|
||||
|
||||
Predefined = AcpiUtMatchPredefinedMethod (Node->Name.Ascii);
|
||||
if (!Predefined)
|
||||
{
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
if (Node->Type == ACPI_TYPE_LOCAL_SCOPE)
|
||||
{
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
AcpiDbEvaluateObject (Node);
|
||||
|
||||
/* Ignore status from object evaluation */
|
||||
|
||||
Status = AE_OK;
|
||||
|
||||
/* Update count, check if we have executed enough methods */
|
||||
@ -645,6 +689,56 @@ AcpiDbWalkForExecute (
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDbWalkForExecuteAll
|
||||
*
|
||||
* PARAMETERS: Callback from WalkNamespace
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Batch execution function. Evaluates all objects whose path ends
|
||||
* with the nameseg "Info->NameSeg". Used for the "ALL" command.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static ACPI_STATUS
|
||||
AcpiDbWalkForExecuteAll (
|
||||
ACPI_HANDLE ObjHandle,
|
||||
UINT32 NestingLevel,
|
||||
void *Context,
|
||||
void **ReturnValue)
|
||||
{
|
||||
ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle;
|
||||
ACPI_DB_EXECUTE_WALK *Info = (ACPI_DB_EXECUTE_WALK *) Context;
|
||||
ACPI_STATUS Status;
|
||||
|
||||
|
||||
if (!ACPI_COMPARE_NAMESEG (Node->Name.Ascii, Info->NameSeg))
|
||||
{
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
if (Node->Type == ACPI_TYPE_LOCAL_SCOPE)
|
||||
{
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
/* Now evaluate the input object (node) */
|
||||
|
||||
AcpiDbEvaluateObject (Node);
|
||||
|
||||
/* Ignore status from method execution */
|
||||
|
||||
Status = AE_OK;
|
||||
|
||||
/* Update count of executed methods/objects */
|
||||
|
||||
Info->Count++;
|
||||
return (Status);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDbEvaluatePredefinedNames
|
||||
@ -675,3 +769,38 @@ AcpiDbEvaluatePredefinedNames (
|
||||
|
||||
AcpiOsPrintf ("Evaluated %u predefined names in the namespace\n", Info.Count);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDbEvaluateAll
|
||||
*
|
||||
* PARAMETERS: NoneAcpiGbl_DbMethodInfo
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
* DESCRIPTION: Namespace batch execution. Implements the "ALL" command.
|
||||
* Execute all namepaths whose final nameseg matches the
|
||||
* input nameseg.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
void
|
||||
AcpiDbEvaluateAll (
|
||||
char *NameSeg)
|
||||
{
|
||||
ACPI_DB_EXECUTE_WALK Info;
|
||||
|
||||
|
||||
Info.Count = 0;
|
||||
Info.MaxCount = ACPI_UINT32_MAX;
|
||||
ACPI_COPY_NAMESEG (Info.NameSeg, NameSeg);
|
||||
Info.NameSeg[ACPI_NAMESEG_SIZE] = 0;
|
||||
|
||||
/* Search all nodes in namespace */
|
||||
|
||||
(void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
|
||||
AcpiDbWalkForExecuteAll, NULL, (void *) &Info, NULL);
|
||||
|
||||
AcpiOsPrintf ("Evaluated %u names in the namespace\n", Info.Count);
|
||||
}
|
||||
|
@ -494,6 +494,10 @@ AcpiDmUuid (
|
||||
{
|
||||
AcpiOsPrintf (" /* %s */", Description);
|
||||
}
|
||||
else
|
||||
{
|
||||
AcpiOsPrintf (" /* Unknown UUID */");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
AcpiOsUnmapMemory (MemInfo->MappedLogicalAddress,
|
||||
MemInfo->MappedLength);
|
||||
if (Address < Mm->PhysicalAddress)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((UINT64) Address + Length > (UINT64) Mm->PhysicalAddress + Mm->Length)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
MemInfo->CurMm = Mm;
|
||||
goto access;
|
||||
}
|
||||
|
||||
/* 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",
|
||||
|
@ -481,7 +481,7 @@ AcpiNsDeleteChildren (
|
||||
NodeToDelete = NextNode;
|
||||
NextNode = NextNode->Peer;
|
||||
AcpiNsDeleteNode (NodeToDelete);
|
||||
};
|
||||
}
|
||||
|
||||
/* Clear the parent's child pointer */
|
||||
|
||||
|
@ -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 - "
|
||||
|
@ -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
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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}
|
||||
|
@ -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"
|
||||
|
@ -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. */
|
||||
|
||||
|
@ -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 */
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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__ */
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
@ -639,7 +639,7 @@ main (
|
||||
|
||||
/* Use a shorter timeout value for acpiexec */
|
||||
|
||||
AcpiGbl_MaxLoopIterations = 1;
|
||||
AcpiGbl_MaxLoopIterations = 10;
|
||||
|
||||
/* Initialize the AML debugger */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user