aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJung-uk Kim <jkim@FreeBSD.org>2018-12-13 19:04:25 +0000
committerJung-uk Kim <jkim@FreeBSD.org>2018-12-13 19:04:25 +0000
commitd28459aaaf532373b12c80aa5b869f8b591954e7 (patch)
tree22941844047df08d63d286d7dfbf38f3a8f79e0f
parent4d4b15a0e8524e15826ac932bd05252dbd246422 (diff)
Import ACPICA 20181213.vendor/acpica/20181213
Notes
Notes: svn path=/vendor-sys/acpica/dist/; revision=342049 svn path=/vendor-sys/acpica/20181213/; revision=342050; tag=vendor/acpica/20181213
-rw-r--r--changes.txt65
-rw-r--r--source/common/ahpredef.c16
-rw-r--r--source/common/dmswitch.c6
-rw-r--r--source/compiler/aslcodegen.c6
-rw-r--r--source/compiler/aslcompile.c27
-rw-r--r--source/compiler/aslcompiler.h4
-rw-r--r--source/compiler/aslerror.c97
-rw-r--r--source/compiler/aslglobal.h4
-rw-r--r--source/compiler/aslhelp.c1
-rw-r--r--source/compiler/asllength.c5
-rw-r--r--source/compiler/aslopcodes.c9
-rw-r--r--source/compiler/asloptions.c17
-rw-r--r--source/compiler/asltransform.c6
-rw-r--r--source/components/dispatcher/dsmethod.c12
-rw-r--r--source/components/dispatcher/dsobject.c10
-rw-r--r--source/components/dispatcher/dspkginit.c26
-rw-r--r--source/components/dispatcher/dsutils.c2
-rw-r--r--source/components/dispatcher/dswload.c6
-rw-r--r--source/components/dispatcher/dswload2.c6
-rw-r--r--source/components/dispatcher/dswstate.c2
-rw-r--r--source/components/executer/exconvrt.c49
-rw-r--r--source/components/executer/excreate.c2
-rw-r--r--source/components/executer/exoparg2.c6
-rw-r--r--source/components/executer/exserial.c20
-rw-r--r--source/components/executer/exutils.c2
-rw-r--r--source/components/namespace/nseval.c12
-rw-r--r--source/components/namespace/nsload.c2
-rw-r--r--source/components/namespace/nsparse.c10
-rw-r--r--source/components/parser/psloop.c2
-rw-r--r--source/components/parser/psparse.c12
-rw-r--r--source/components/parser/psxface.c6
-rw-r--r--source/components/utilities/utglobal.c3
-rw-r--r--source/components/utilities/utmisc.c3
-rw-r--r--source/components/utilities/utosi.c2
-rw-r--r--source/include/acglobal.h4
-rw-r--r--source/include/acoutput.h6
-rw-r--r--source/include/acpixf.h2
-rw-r--r--source/include/acstruct.h5
-rw-r--r--source/include/actbl.h1
-rw-r--r--source/include/actypes.h6
-rw-r--r--source/tools/acpibin/abcompare.c6
-rw-r--r--source/tools/acpiexec/aemain.c7
-rw-r--r--source/tools/acpihelp/ahdecode.c120
-rw-r--r--source/tools/acpixtract/acpixtract.c27
-rw-r--r--source/tools/acpixtract/acpixtract.h7
-rw-r--r--source/tools/acpixtract/axutils.c33
46 files changed, 516 insertions, 166 deletions
diff --git a/changes.txt b/changes.txt
index 91ac04cfef80..3104ba1f38b8 100644
--- a/changes.txt
+++ b/changes.txt
@@ -1,7 +1,68 @@
----------------------------------------
-31 October 2018. Summary of changes for version 20181031:
+13 December 2018. Summary of changes for version 20181213:
-This release is available at https://acpica.org/downloads
+
+1) ACPICA Kernel-resident Subsystem:
+
+Fixed some buffer length issues with the GenericSerialBus, related to two
+of the bidirectional protocols: AttribRawProcessBytes and AttribRawBytes,
+which are rarely seen in the field. For these, the LEN field of the ASL
+buffer is now ignored. Hans de Goede
+
+Implemented a new object evaluation trace mechanism for control methods
+and data objects. This includes nested control methods. It is
+particularly useful for examining the ACPI execution during system
+initialization since the output is relatively terse. The flag below
+enables the output of the trace via the ACPI_DEBUG_PRINT_RAW interface:
+ #define ACPI_LV_EVALUATION 0x00080000
+
+Examples:
+ Enter evaluation : _SB.PCI0._INI (Method)
+ Exit evaluation : _SB.PCI0._INI
+ Enter evaluation : _OSI (Method)
+ Exit evaluation : _OSI
+ Enter evaluation : _SB.PCI0.TEST (Method)
+ Nested method call : _SB.PCI0.NST1
+ Exit nested method : _SB.PCI0.NST1
+ Exit evaluation : _SB.PCI0.TEST
+
+Added two recently-defined _OSI strings. See
+https://docs.microsoft.com/en-us/windows-hardware/drivers/acpi/winacpi-
+osi.
+ "Windows 2018"
+ "Windows 2018.2"
+
+Update for buffer-to-string conversions via the ToHexString ASL operator.
+A "0x" is now prepended to each of the hex values in the output string.
+This provides compatibility with other ACPI implementations. The ACPI
+specification is somewhat vague on this issue.
+ Example output string after conversion:
+"0x01,0x02,0x03,0x04,0x05,0x06"
+
+Return a run-time error for TermArg expressions within individual package
+elements. Although this is technically supported by the ASL grammar,
+other ACPI implementations do not support this either. Also, this fixes a
+fault if this type of construct is ever encountered (it never has been).
+
+
+2) iASL Compiler/Disassembler and Tools:
+
+iASL: Implemented a new compile option (-ww) that will promote individual
+warnings and remarks to errors. This is intended to enhance the firmware
+build process.
+
+AcpiExec: Implemented a new command-line option (-eo) to support the new
+object evaluation trace mechanism described above.
+
+Disassembler: Added support to disassemble OEMx tables as AML/ASL tables
+instead of a "unknown table" message.
+
+AcpiHelp: Improved support for the "special" predefined names such as
+_Lxx, _Exx, _EJx, _T_x, etc. For these, any legal hex value can now be
+used for "xx" and "x".
+
+----------------------------------------
+31 October 2018. Summary of changes for version 20181031:
An Operation Region regression was fixed by properly adding address
diff --git a/source/common/ahpredef.c b/source/common/ahpredef.c
index 0a5587227e90..1c3af7ef8e19 100644
--- a/source/common/ahpredef.c
+++ b/source/common/ahpredef.c
@@ -171,7 +171,7 @@
*/
const AH_PREDEFINED_NAME AslPredefinedInfo[] =
{
- AH_PREDEF ("_ACx", "Active Cooling", "Returns the active cooling policy threshold values"),
+ AH_PREDEF ("_ACx", "Active Cooling, x=0-9", "Returns the active cooling policy threshold values"),
AH_PREDEF ("_ADR", "Address", "Returns address of a device on parent bus, and resource field"),
AH_PREDEF ("_AEI", "ACPI Event Interrupts", "Returns a list of GPIO events to be used as ACPI events"),
AH_PREDEF ("_ALC", "Ambient Light Chromaticity", "Returns the ambient light color chromaticity"),
@@ -180,7 +180,7 @@ const AH_PREDEFINED_NAME AslPredefinedInfo[] =
AH_PREDEF ("_ALP", "Ambient Light Polling", "Returns the ambient light sensor polling frequency"),
AH_PREDEF ("_ALR", "Ambient Light Response", "Returns the ambient light brightness to display brightness mappings"),
AH_PREDEF ("_ALT", "Ambient Light Temperature", "Returns the ambient light color temperature"),
- AH_PREDEF ("_ALx", "Active List", "Returns a list of active cooling device objects"),
+ AH_PREDEF ("_ALx", "Active List, x=0-9", "Returns a list of active cooling device objects"),
AH_PREDEF ("_ART", "Active Cooling Relationship Table", "Returns thermal relationship information between platform devices and fan devices"),
AH_PREDEF ("_ASI", "Address Space Id", "Resource Descriptor field"),
AH_PREDEF ("_ASZ", "Access Size", "Resource Descriptor field"),
@@ -237,11 +237,11 @@ const AH_PREDEFINED_NAME AslPredefinedInfo[] =
AH_PREDEF ("_DSS", "Device Set State", "Sets the display device state"),
AH_PREDEF ("_DSW", "Device Sleep Wake", "Sets the sleep and wake transition states for a device"),
AH_PREDEF ("_DTI", "Device Temperature Indication", "Conveys native device temperature to the platform"),
- AH_PREDEF ("_Exx", "Edge-Triggered GPE", "Method executed as a result of a general-purpose event"),
+ AH_PREDEF ("_Exx", "Edge-Triggered GPE, xx=0x00-0xFF", "Method executed as a result of a general-purpose event"),
AH_PREDEF ("_EC_", "Embedded Controller", "returns EC offset and query information"),
AH_PREDEF ("_EDL", "Eject Device List", "Returns a list of devices that are dependent on a device (docking)"),
AH_PREDEF ("_EJD", "Ejection Dependent Device", "Returns the name of dependent (parent) device (docking)"),
- AH_PREDEF ("_EJx", "Eject Device", "Begin or cancel a device ejection request (docking)"),
+ AH_PREDEF ("_EJx", "Eject Device, x=0-9", "Begin or cancel a device ejection request (docking)"),
AH_PREDEF ("_END", "Endianness", "Endian orientation, Resource Descriptor field"),
AH_PREDEF ("_EVT", "Event", "Event method for GPIO events"),
AH_PREDEF ("_FDE", "Floppy Disk Enumerate", "Returns floppy disk configuration information"),
@@ -281,7 +281,7 @@ const AH_PREDEFINED_NAME AslPredefinedInfo[] =
AH_PREDEF ("_INT", "Interrupts", "Interrupt mask bits, Resource Descriptor field"),
AH_PREDEF ("_IOR", "I/O Restriction", "Restriction type, Resource Descriptor field"),
AH_PREDEF ("_IRC", "Inrush Current", "Presence indicates that a device has a significant inrush current draw"),
- AH_PREDEF ("_Lxx", "Level-Triggered GPE", "Control method executed as a result of a general-purpose event"),
+ AH_PREDEF ("_Lxx", "Level-Triggered GPE, xx=0x00-0xFF", "Control method executed as a result of a general-purpose event"),
AH_PREDEF ("_LCK", "Lock Device", "Locks or unlocks a device (docking)"),
AH_PREDEF ("_LEN", "Length", "Range length, Resource Descriptor field"),
AH_PREDEF ("_LID", "Lid Status", "Returns the open/closed status of the lid on a mobile system"),
@@ -358,7 +358,7 @@ const AH_PREDEFINED_NAME AslPredefinedInfo[] =
AH_PREDEF ("_PTS", "Prepare To Sleep", "Inform the platform of an impending sleep transition"),
AH_PREDEF ("_PUR", "Processor Utilization Request", "Returns the number of processors that the platform would like to idle"),
AH_PREDEF ("_PXM", "Device Proximity", "Returns a device's proximity domain identifier"),
- AH_PREDEF ("_Qxx", "EC Query", "Embedded Controller query and SMBus Alarm control method"),
+ AH_PREDEF ("_Qxx", "EC Query, xx=0x00-0xFF", "Embedded Controller query and SMBus Alarm control method"),
AH_PREDEF ("_RBO", "Register Bit Offset", "Resource Descriptor field"),
AH_PREDEF ("_RBW", "Register Bit Width", "Resource Descriptor field"),
AH_PREDEF ("_RDI", "Resource Dependencies for Idle", "Returns a list of dependencies for idle states"),
@@ -413,7 +413,7 @@ const AH_PREDEFINED_NAME AslPredefinedInfo[] =
AH_PREDEF ("_SUB", "Subsystem ID", "Returns the subsystem ID for a device"),
AH_PREDEF ("_SUN", "Slot User Number", "Returns the slot unique ID number"),
AH_PREDEF ("_SWS", "System Wake Source", "Returns the source event that caused the system to wake"),
- AH_PREDEF ("_T_x", "Emitted by ASL Compiler", "Reserved for use by ASL compilers"),
+ AH_PREDEF ("_T_x", "Emitted by ASL Compiler, x=0-9, A-Z", "Reserved for use by ASL compilers"),
AH_PREDEF ("_TC1", "Thermal Constant 1", "Returns TC1 for the passive cooling formula"),
AH_PREDEF ("_TC2", "Thermal Constant 2", "Returns TC2 for the passive cooling formula"),
AH_PREDEF ("_TDL", "T-State Depth Limit", "Returns the _TSS entry number of the lowest power throttling state"),
@@ -447,7 +447,7 @@ const AH_PREDEFINED_NAME AslPredefinedInfo[] =
AH_PREDEF ("_VAL", "Pin Configuration Value", "Resource Descriptor field"),
AH_PREDEF ("_VEN", "Vendor Data", "Resource Descriptor field"),
AH_PREDEF ("_VPO", "Video Post Options", "Returns the implemented video post options"),
- AH_PREDEF ("_Wxx", "Wake Event", "Method executed as a result of a wake event"),
+ AH_PREDEF ("_Wxx", "Wake Event, xx=0x00-0xFF", "Method executed as a result of a wake event"),
AH_PREDEF ("_WAK", "Wake", "Inform AML that the system has just awakened"),
AH_PREDEF ("_WPC", "Wireless Power Calibration", "Calibrate power and notify wireless device"),
AH_PREDEF ("_WPP", "Wireless Power Polling", "Get recommended polling interval"),
diff --git a/source/common/dmswitch.c b/source/common/dmswitch.c
index f04ec7434c1c..46546fbb43b2 100644
--- a/source/common/dmswitch.c
+++ b/source/common/dmswitch.c
@@ -325,6 +325,8 @@ AcpiDmClearTempList (
* FUNCTION: AcpiDmIsSwitchBlock
*
* PARAMETERS: Op - While Object
+ * Temp - Where the compiler temp name is returned
+ * (_T_x)
*
* RETURN: TRUE if While block can be converted to a Switch/Case block
*
@@ -550,6 +552,10 @@ AcpiDmIsSwitchBlock (
if (CurrentOp->Common.AmlOpcode == AML_ELSE_OP)
{
CurrentOp = CurrentOp->Common.Next;
+ if (!CurrentOp)
+ {
+ return (FALSE);
+ }
}
/* Ignore the Break Op */
diff --git a/source/compiler/aslcodegen.c b/source/compiler/aslcodegen.c
index 7b2e3e5ce0c8..356011f0608c 100644
--- a/source/compiler/aslcodegen.c
+++ b/source/compiler/aslcodegen.c
@@ -773,12 +773,6 @@ CgWriteNode (
return;
}
- if ((Op->Asl.ParseOpcode == PARSEOP_EXTERNAL) &&
- AslGbl_DoExternals == FALSE)
- {
- return;
- }
-
Op->Asl.FinalAmlLength = 0;
switch (Op->Asl.AmlOpcode)
diff --git a/source/compiler/aslcompile.c b/source/compiler/aslcompile.c
index 4ae190763cc9..1b8838aabae6 100644
--- a/source/compiler/aslcompile.c
+++ b/source/compiler/aslcompile.c
@@ -388,23 +388,20 @@ CmDoCompile (
/* Resolve External Declarations */
- if (AslGbl_DoExternals)
- {
- Event = UtBeginEvent ("Resolve all Externals");
- DbgPrint (ASL_DEBUG_OUTPUT, "\nResolve Externals\n\n");
+ Event = UtBeginEvent ("Resolve all Externals");
+ DbgPrint (ASL_DEBUG_OUTPUT, "\nResolve Externals\n\n");
- if (AslGbl_DoExternalsInPlace)
- {
- TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_DOWNWARD,
- ExAmlExternalWalkBegin, NULL, NULL);
- }
- else
- {
- TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_TWICE,
- ExAmlExternalWalkBegin, ExAmlExternalWalkEnd, NULL);
- }
- UtEndEvent (Event);
+ if (AslGbl_DoExternalsInPlace)
+ {
+ TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_DOWNWARD,
+ ExAmlExternalWalkBegin, NULL, NULL);
}
+ else
+ {
+ TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_TWICE,
+ ExAmlExternalWalkBegin, ExAmlExternalWalkEnd, NULL);
+ }
+ UtEndEvent (Event);
/*
* Semantic analysis. This can happen only after the
diff --git a/source/compiler/aslcompiler.h b/source/compiler/aslcompiler.h
index bd02879d584a..c5e8cb0c2537 100644
--- a/source/compiler/aslcompiler.h
+++ b/source/compiler/aslcompiler.h
@@ -475,6 +475,10 @@ AslExpectException (
char *MessageIdString);
ACPI_STATUS
+AslElevateException (
+ char *MessageIdString);
+
+ACPI_STATUS
AslDisableException (
char *MessageIdString);
diff --git a/source/compiler/aslerror.c b/source/compiler/aslerror.c
index 10ea3ec1b4bd..2a18dded597e 100644
--- a/source/compiler/aslerror.c
+++ b/source/compiler/aslerror.c
@@ -201,6 +201,11 @@ AePrintSubError (
FILE *OutputFile,
ASL_ERROR_MSG *Enode);
+static UINT8
+GetModifiedLevel (
+ UINT8 Level,
+ UINT16 MessageId);
+
/*******************************************************************************
*
@@ -968,11 +973,12 @@ AslLogNewError (
ASL_ERROR_MSG *SubError)
{
ASL_ERROR_MSG *Enode = NULL;
+ UINT8 ModifiedLevel = GetModifiedLevel (Level, MessageId);
- AslInitEnode (&Enode, Level, MessageId, LineNumber, LogicalLineNumber,
- LogicalByteOffset, Column, Filename, Message, SourceLine,
- SubError);
+ AslInitEnode (&Enode, ModifiedLevel, MessageId, LineNumber,
+ LogicalLineNumber, LogicalByteOffset, Column, Filename, Message,
+ SourceLine, SubError);
/* Add the new node to the error node list */
@@ -985,7 +991,7 @@ AslLogNewError (
AePrintException (ASL_FILE_STDERR, Enode, NULL);
}
- AslGbl_ExceptionCount[Level]++;
+ AslGbl_ExceptionCount[ModifiedLevel]++;
if (AslGbl_ExceptionCount[ASL_ERROR] > ASL_MAX_ERROR_COUNT)
{
printf ("\nMaximum error count (%u) exceeded\n", ASL_MAX_ERROR_COUNT);
@@ -999,6 +1005,44 @@ AslLogNewError (
return;
}
+
+/*******************************************************************************
+ *
+ * FUNCTION: GetModifiedLevel
+ *
+ * PARAMETERS: Level - Seriousness (Warning/error, etc.)
+ * MessageId - Index into global message buffer
+ *
+ * RETURN: UINT8 - modified level
+ *
+ * DESCRIPTION: Get the modified level of exception codes that are reported as
+ * errors from the -ww option.
+ *
+ ******************************************************************************/
+
+static UINT8
+GetModifiedLevel (
+ UINT8 Level,
+ UINT16 MessageId)
+{
+ UINT16 i;
+ UINT16 ExceptionCode;
+
+
+ ExceptionCode = AeBuildFullExceptionCode (Level, MessageId);
+
+ for (i = 0; i < AslGbl_ElevatedMessagesIndex; i++)
+ {
+ if (ExceptionCode == AslGbl_ElevatedMessages[i])
+ {
+ return (ASL_ERROR);
+ }
+ }
+
+ return (Level);
+}
+
+
/*******************************************************************************
*
* FUNCTION: AslIsExceptionIgnored
@@ -1157,6 +1201,51 @@ AslDisableException (
/*******************************************************************************
*
+ * FUNCTION: AslElevateException
+ *
+ * PARAMETERS: MessageIdString - ID of excepted exception during compile
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Enter a message ID into the global elevated exceptions table.
+ * These messages will be considered as compilation errors.
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AslElevateException (
+ char *MessageIdString)
+{
+ UINT32 MessageId;
+
+
+ /* Convert argument to an integer and validate it */
+
+ MessageId = (UINT32) strtoul (MessageIdString, NULL, 0);
+
+ if (MessageId > 6999)
+ {
+ printf ("\"%s\" is not a valid warning/remark/erro ID\n",
+ MessageIdString);
+ return (AE_BAD_PARAMETER);
+ }
+
+ /* Insert value into the global expected message array */
+
+ if (AslGbl_ElevatedMessagesIndex >= ASL_MAX_ELEVATED_MESSAGES)
+ {
+ printf ("Too many messages have been registered as elevated (max %d)\n",
+ ASL_MAX_DISABLED_MESSAGES);
+ return (AE_LIMIT);
+ }
+
+ AslGbl_ElevatedMessages[AslGbl_ExpectedMessagesIndex] = MessageId;
+ AslGbl_ElevatedMessagesIndex++;
+ return (AE_OK);
+}
+
+/*******************************************************************************
+ *
* FUNCTION: AslIsExceptionDisabled
*
* PARAMETERS: Level - Seriousness (Warning/error, etc.)
diff --git a/source/compiler/aslglobal.h b/source/compiler/aslglobal.h
index c3e69cbbda3d..fd00da7802db 100644
--- a/source/compiler/aslglobal.h
+++ b/source/compiler/aslglobal.h
@@ -255,6 +255,7 @@ extern int AslCompilerdebug;
#define ASL_STRING_BUFFER_SIZE (1024 * 32) /* 32k */
#define ASL_MAX_DISABLED_MESSAGES 32
#define ASL_MAX_EXPECTED_MESSAGES 32
+#define ASL_MAX_ELEVATED_MESSAGES 32
#define HEX_TABLE_LINE_SIZE 8
#define HEX_LISTING_LINE_SIZE 8
@@ -319,7 +320,6 @@ ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_AllExceptionsDisable
ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_PruneParseTree, FALSE);
ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_DoTypechecking, TRUE);
ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_EnableReferenceTypechecking, FALSE);
-ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_DoExternals, TRUE);
ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_DoExternalsInPlace, FALSE);
ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_DoAslConversion, FALSE);
ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_OptimizeTrivialParseNodes, TRUE);
@@ -394,6 +394,7 @@ ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_CurrentAmlOffset, 0)
ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_CurrentLine, 0);
ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_DisabledMessagesIndex, 0);
ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_ExpectedMessagesIndex, 0);
+ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_ElevatedMessagesIndex, 0);
ASL_EXTERN UINT8 ASL_INIT_GLOBAL (AslGbl_HexBytesWereWritten, FALSE);
ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_NumNamespaceObjects, 0);
ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_ReservedMethods, 0);
@@ -435,6 +436,7 @@ ASL_EXTERN char AslGbl_StringBuffer[ASL_STRING_BUFFER_SIZE];
ASL_EXTERN char AslGbl_StringBuffer2[ASL_STRING_BUFFER_SIZE];
ASL_EXTERN UINT32 AslGbl_DisabledMessages[ASL_MAX_DISABLED_MESSAGES];
ASL_EXTERN ASL_EXPECTED_MESSAGE AslGbl_ExpectedMessages[ASL_MAX_EXPECTED_MESSAGES];
+ASL_EXTERN UINT32 AslGbl_ElevatedMessages[ASL_MAX_ELEVATED_MESSAGES];
#endif /* __ASLGLOBAL_H */
diff --git a/source/compiler/aslhelp.c b/source/compiler/aslhelp.c
index 608f18532b54..4377f83c6221 100644
--- a/source/compiler/aslhelp.c
+++ b/source/compiler/aslhelp.c
@@ -209,6 +209,7 @@ Usage (
ACPI_OPTION ("-vx <messageid>", "Expect a specific warning, remark, or error");
ACPI_OPTION ("-w <1|2|3>", "Set warning reporting level");
ACPI_OPTION ("-we", "Report warnings as errors");
+ ACPI_OPTION ("-ww <messageid>", "Report specific warning or remark as error");
printf ("\nAML Bytecode Generation (*.aml):\n");
ACPI_OPTION ("-oa", "Disable all optimizations (compatibility mode)");
diff --git a/source/compiler/asllength.c b/source/compiler/asllength.c
index 696dc2424128..8fef83b91742 100644
--- a/source/compiler/asllength.c
+++ b/source/compiler/asllength.c
@@ -519,10 +519,7 @@ CgGenerateAmlLengths (
case PARSEOP_EXTERNAL:
- if (AslGbl_DoExternals == TRUE)
- {
- CgGenerateAmlOpcodeLength (Op);
- }
+ CgGenerateAmlOpcodeLength (Op);
break;
default:
diff --git a/source/compiler/aslopcodes.c b/source/compiler/aslopcodes.c
index 218223b836b1..32d04781c5d4 100644
--- a/source/compiler/aslopcodes.c
+++ b/source/compiler/aslopcodes.c
@@ -927,15 +927,6 @@ OpcGenerateAmlOpcode (
AslGbl_HasIncludeFiles = TRUE;
break;
- case PARSEOP_EXTERNAL:
-
- if (AslGbl_DoExternals == FALSE)
- {
- Op->Asl.Child->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG;
- Op->Asl.Child->Asl.Next->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG;
- }
- break;
-
case PARSEOP_TIMER:
if (AcpiGbl_IntegerBitWidth == 32)
diff --git a/source/compiler/asloptions.c b/source/compiler/asloptions.c
index 15519634ae92..325ee4aca7ca 100644
--- a/source/compiler/asloptions.c
+++ b/source/compiler/asloptions.c
@@ -982,6 +982,23 @@ AslDoOptions (
AslGbl_WarningsAsErrors = TRUE;
break;
+ case 'w':
+
+ /* Get the required argument */
+
+ if (AcpiGetoptArgument (argc, argv))
+ {
+ return (-1);
+ }
+
+ Status = AslElevateException (AcpiGbl_Optarg);
+ if (ACPI_FAILURE (Status))
+ {
+ return (-1);
+ }
+ break;
+
+
default:
printf ("Unknown option: -w%s\n", AcpiGbl_Optarg);
diff --git a/source/compiler/asltransform.c b/source/compiler/asltransform.c
index 324b0364dc9d..2bf32db4b9f8 100644
--- a/source/compiler/asltransform.c
+++ b/source/compiler/asltransform.c
@@ -460,11 +460,7 @@ TrTransformSubtree (
case PARSEOP_EXTERNAL:
- if (AslGbl_DoExternals == TRUE)
- {
- ExDoExternal (Op);
- }
-
+ ExDoExternal (Op);
break;
case PARSEOP___METHOD__:
diff --git a/source/components/dispatcher/dsmethod.c b/source/components/dispatcher/dsmethod.c
index 3db8010f7311..009151f91061 100644
--- a/source/components/dispatcher/dsmethod.c
+++ b/source/components/dispatcher/dsmethod.c
@@ -720,6 +720,8 @@ AcpiDsCallControlMethod (
goto Cleanup;
}
+ NextWalkState->MethodNestingDepth = ThisWalkState->MethodNestingDepth + 1;
+
/*
* Delete the operands on the previous walkstate operand stack
* (they were copied to new objects)
@@ -738,6 +740,16 @@ AcpiDsCallControlMethod (
"**** Begin nested execution of [%4.4s] **** WalkState=%p\n",
MethodNode->Name.Ascii, NextWalkState));
+ ThisWalkState->MethodPathname = AcpiNsGetNormalizedPathname (MethodNode, TRUE);
+ ThisWalkState->MethodIsNested = TRUE;
+
+ /* Optional object evaluation log */
+
+ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EVALUATION,
+ "%-26s: %*s%s\n", " Nested method call",
+ NextWalkState->MethodNestingDepth * 3, " ",
+ &ThisWalkState->MethodPathname[1]));
+
/* Invoke an internal method if necessary */
if (ObjDesc->Method.InfoFlags & ACPI_METHOD_INTERNAL_ONLY)
diff --git a/source/components/dispatcher/dsobject.c b/source/components/dispatcher/dsobject.c
index e9b7413a2feb..4ec23d466c48 100644
--- a/source/components/dispatcher/dsobject.c
+++ b/source/components/dispatcher/dsobject.c
@@ -161,7 +161,6 @@
ACPI_MODULE_NAME ("dsobject")
-#ifndef ACPI_NO_METHOD_EXECUTION
/*******************************************************************************
*
* FUNCTION: AcpiDsBuildInternalObject
@@ -460,7 +459,6 @@ AcpiDsCreateNode (
return_ACPI_STATUS (Status);
}
-#endif /* ACPI_NO_METHOD_EXECUTION */
/*******************************************************************************
@@ -571,9 +569,7 @@ AcpiDsInitObjectFromOp (
/* Truncate value if we are executing from a 32-bit ACPI table */
-#ifndef ACPI_NO_METHOD_EXECUTION
(void) AcpiExTruncateFor32bitTable (ObjDesc);
-#endif
break;
case AML_REVISION_OP:
@@ -594,7 +590,6 @@ AcpiDsInitObjectFromOp (
ObjDesc->Integer.Value = Op->Common.Value.Integer;
-#ifndef ACPI_NO_METHOD_EXECUTION
if (AcpiExTruncateFor32bitTable (ObjDesc))
{
/* Warn if we found a 64-bit constant in a 32-bit table */
@@ -604,7 +599,6 @@ AcpiDsInitObjectFromOp (
ACPI_FORMAT_UINT64 (Op->Common.Value.Integer),
(UINT32) ObjDesc->Integer.Value));
}
-#endif
break;
default:
@@ -642,12 +636,10 @@ AcpiDsInitObjectFromOp (
ObjDesc->Reference.Value = ((UINT32) Opcode) - AML_FIRST_LOCAL_OP;
ObjDesc->Reference.Class = ACPI_REFCLASS_LOCAL;
-#ifndef ACPI_NO_METHOD_EXECUTION
Status = AcpiDsMethodDataGetNode (ACPI_REFCLASS_LOCAL,
ObjDesc->Reference.Value, WalkState,
ACPI_CAST_INDIRECT_PTR (ACPI_NAMESPACE_NODE,
&ObjDesc->Reference.Object));
-#endif
break;
case AML_TYPE_METHOD_ARGUMENT:
@@ -657,12 +649,10 @@ AcpiDsInitObjectFromOp (
ObjDesc->Reference.Value = ((UINT32) Opcode) - AML_FIRST_ARG_OP;
ObjDesc->Reference.Class = ACPI_REFCLASS_ARG;
-#ifndef ACPI_NO_METHOD_EXECUTION
Status = AcpiDsMethodDataGetNode (ACPI_REFCLASS_ARG,
ObjDesc->Reference.Value, WalkState,
ACPI_CAST_INDIRECT_PTR (ACPI_NAMESPACE_NODE,
&ObjDesc->Reference.Object));
-#endif
break;
default: /* Object name or Debug object */
diff --git a/source/components/dispatcher/dspkginit.c b/source/components/dispatcher/dspkginit.c
index 9e1cd6115fd4..1e7e7383a088 100644
--- a/source/components/dispatcher/dspkginit.c
+++ b/source/components/dispatcher/dspkginit.c
@@ -308,6 +308,32 @@ AcpiDsBuildInternalPackageObj (
{
if (Arg->Common.AmlOpcode == AML_INT_RETURN_VALUE_OP)
{
+ if (!Arg->Common.Node)
+ {
+ /*
+ * This is the case where an expression has returned a value.
+ * The use of expressions (TermArgs) within individual
+ * package elements is not supported by the AML interpreter,
+ * even though the ASL grammar supports it. Example:
+ *
+ * Name (INT1, 0x1234)
+ *
+ * Name (PKG3, Package () {
+ * Add (INT1, 0xAAAA0000)
+ * })
+ *
+ * 1) No known AML interpreter supports this type of construct
+ * 2) This fixes a fault if the construct is encountered
+ */
+ ACPI_EXCEPTION ((AE_INFO, AE_SUPPORT,
+ "Expressions within package elements are not supported"));
+
+ /* Cleanup the return object, it is not needed */
+
+ AcpiUtRemoveReference (WalkState->Results->Results.ObjDesc[0]);
+ return_ACPI_STATUS (AE_SUPPORT);
+ }
+
if (Arg->Common.Node->Type == ACPI_TYPE_METHOD)
{
/*
diff --git a/source/components/dispatcher/dsutils.c b/source/components/dispatcher/dsutils.c
index c03f9268f886..20a9e25602d4 100644
--- a/source/components/dispatcher/dsutils.c
+++ b/source/components/dispatcher/dsutils.c
@@ -209,7 +209,6 @@ AcpiDsClearImplicitReturn (
}
-#ifndef ACPI_NO_METHOD_EXECUTION
/*******************************************************************************
*
* FUNCTION: AcpiDsDoImplicitReturn
@@ -583,7 +582,6 @@ AcpiDsClearOperands (
WalkState->NumOperands = 0;
return_VOID;
}
-#endif
/*******************************************************************************
diff --git a/source/components/dispatcher/dswload.c b/source/components/dispatcher/dswload.c
index 91f5b3050042..db0f0e8596dd 100644
--- a/source/components/dispatcher/dswload.c
+++ b/source/components/dispatcher/dswload.c
@@ -221,12 +221,10 @@ AcpiDsInitCallbacks (
/* Execution pass */
-#ifndef ACPI_NO_METHOD_EXECUTION
WalkState->ParseFlags |= ACPI_PARSE_EXECUTE |
ACPI_PARSE_DELETE_TREE;
WalkState->DescendingCallback = AcpiDsExecBeginOp;
WalkState->AscendingCallback = AcpiDsExecEndOp;
-#endif
break;
default:
@@ -517,7 +515,7 @@ AcpiDsLoad1BeginOp (
/* Initialize the op */
-#if (defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY))
+#ifdef ACPI_CONSTANT_EVAL_ONLY
Op->Named.Path = Path;
#endif
@@ -580,7 +578,6 @@ AcpiDsLoad1EndOp (
ObjectType = WalkState->OpInfo->ObjectType;
-#ifndef ACPI_NO_METHOD_EXECUTION
if (WalkState->OpInfo->Flags & AML_FIELD)
{
/*
@@ -626,7 +623,6 @@ AcpiDsLoad1EndOp (
}
}
}
-#endif
if (Op->Common.AmlOpcode == AML_NAME_OP)
{
diff --git a/source/components/dispatcher/dswload2.c b/source/components/dispatcher/dswload2.c
index 4b6e41d8dd30..7387690e2a09 100644
--- a/source/components/dispatcher/dswload2.c
+++ b/source/components/dispatcher/dswload2.c
@@ -529,10 +529,8 @@ AcpiDsLoad2EndOp (
ACPI_NAMESPACE_NODE *Node;
ACPI_PARSE_OBJECT *Arg;
ACPI_NAMESPACE_NODE *NewNode;
-#ifndef ACPI_NO_METHOD_EXECUTION
UINT32 i;
UINT8 RegionSpace;
-#endif
ACPI_FUNCTION_TRACE (DsLoad2EndOp);
@@ -622,7 +620,6 @@ AcpiDsLoad2EndOp (
switch (WalkState->OpInfo->Type)
{
-#ifndef ACPI_NO_METHOD_EXECUTION
case AML_TYPE_CREATE_FIELD:
/*
@@ -718,13 +715,11 @@ AcpiDsLoad2EndOp (
}
break;
-#endif /* ACPI_NO_METHOD_EXECUTION */
case AML_TYPE_NAMED_COMPLEX:
switch (Op->Common.AmlOpcode)
{
-#ifndef ACPI_NO_METHOD_EXECUTION
case AML_REGION_OP:
case AML_DATA_REGION_OP:
@@ -809,7 +804,6 @@ AcpiDsLoad2EndOp (
}
break;
-#endif /* ACPI_NO_METHOD_EXECUTION */
default:
diff --git a/source/components/dispatcher/dswstate.c b/source/components/dispatcher/dswstate.c
index 7994cb12dd1c..409d7f71fa64 100644
--- a/source/components/dispatcher/dswstate.c
+++ b/source/components/dispatcher/dswstate.c
@@ -733,7 +733,7 @@ AcpiDsCreateWalkState (
/* Init the method args/local */
-#if (!defined (ACPI_NO_METHOD_EXECUTION) && !defined (ACPI_CONSTANT_EVAL_ONLY))
+#ifndef ACPI_CONSTANT_EVAL_ONLY
AcpiDsMethodDataInit (WalkState);
#endif
diff --git a/source/components/executer/exconvrt.c b/source/components/executer/exconvrt.c
index 5c58746e3a4d..a147ba214107 100644
--- a/source/components/executer/exconvrt.c
+++ b/source/components/executer/exconvrt.c
@@ -496,7 +496,7 @@ AcpiExConvertToAscii (
/* HexLength: 2 ascii hex chars per data byte */
- HexLength = ACPI_MUL_2 (DataWidth);
+ HexLength = (DataWidth * 2);
for (i = 0, j = (HexLength-1); i < HexLength; i++, j--)
{
/* Get one hex digit, most significant digits first */
@@ -539,7 +539,8 @@ AcpiExConvertToAscii (
*
* RETURN: Status
*
- * DESCRIPTION: Convert an ACPI Object to a string
+ * DESCRIPTION: Convert an ACPI Object to a string. Supports both implicit
+ * and explicit conversions and related rules.
*
******************************************************************************/
@@ -574,9 +575,11 @@ AcpiExConvertToString (
switch (Type)
{
case ACPI_EXPLICIT_CONVERT_DECIMAL:
-
- /* Make room for maximum decimal number */
-
+ /*
+ * From ToDecimalString, integer source.
+ *
+ * Make room for the maximum decimal number size
+ */
StringLength = ACPI_MAX_DECIMAL_DIGITS;
Base = 10;
break;
@@ -620,8 +623,10 @@ AcpiExConvertToString (
{
case ACPI_EXPLICIT_CONVERT_DECIMAL: /* Used by ToDecimalString */
/*
- * From ACPI: "If Data is a buffer, it is converted to a string of
- * decimal values separated by commas."
+ * Explicit conversion from the ToDecimalString ASL operator.
+ *
+ * From ACPI: "If the input is a buffer, it is converted to a
+ * a string of decimal values separated by commas."
*/
Base = 10;
@@ -648,20 +653,29 @@ AcpiExConvertToString (
case ACPI_IMPLICIT_CONVERT_HEX:
/*
+ * Implicit buffer-to-string conversion
+ *
* From the ACPI spec:
- *"The entire contents of the buffer are converted to a string of
+ * "The entire contents of the buffer are converted to a string of
* two-character hexadecimal numbers, each separated by a space."
+ *
+ * Each hex number is prefixed with 0x (11/2018)
*/
Separator = ' ';
- StringLength = (ObjDesc->Buffer.Length * 3);
+ StringLength = (ObjDesc->Buffer.Length * 5);
break;
- case ACPI_EXPLICIT_CONVERT_HEX: /* Used by ToHexString */
+ case ACPI_EXPLICIT_CONVERT_HEX:
/*
+ * Explicit conversion from the ToHexString ASL operator.
+ *
* From ACPI: "If Data is a buffer, it is converted to a string of
* hexadecimal values separated by commas."
+ *
+ * Each hex number is prefixed with 0x (11/2018)
*/
- StringLength = (ObjDesc->Buffer.Length * 3);
+ Separator = ',';
+ StringLength = (ObjDesc->Buffer.Length * 5);
break;
default:
@@ -692,9 +706,20 @@ AcpiExConvertToString (
*/
for (i = 0; i < ObjDesc->Buffer.Length; i++)
{
+ if (Base == 16)
+ {
+ /* Emit 0x prefix for explict/implicit hex conversion */
+
+ *NewBuf++ = '0';
+ *NewBuf++ = 'x';
+ }
+
NewBuf += AcpiExConvertToAscii (
(UINT64) ObjDesc->Buffer.Pointer[i], Base, NewBuf, 1);
- *NewBuf++ = Separator; /* each separated by a comma or space */
+
+ /* Each digit is separated by either a comma or space */
+
+ *NewBuf++ = Separator;
}
/*
diff --git a/source/components/executer/excreate.c b/source/components/executer/excreate.c
index 524960c2f5cc..f4dd8298f4c4 100644
--- a/source/components/executer/excreate.c
+++ b/source/components/executer/excreate.c
@@ -161,7 +161,6 @@
ACPI_MODULE_NAME ("excreate")
-#ifndef ACPI_NO_METHOD_EXECUTION
/*******************************************************************************
*
* FUNCTION: AcpiExCreateAlias
@@ -573,7 +572,6 @@ AcpiExCreatePowerResource (
AcpiUtRemoveReference (ObjDesc);
return_ACPI_STATUS (Status);
}
-#endif
/*******************************************************************************
diff --git a/source/components/executer/exoparg2.c b/source/components/executer/exoparg2.c
index 73d0bd26cc39..0693dcbe2441 100644
--- a/source/components/executer/exoparg2.c
+++ b/source/components/executer/exoparg2.c
@@ -460,9 +460,9 @@ AcpiExOpcode_2A_1T_1R (
* NOTE: A length of zero is ok, and will create a zero-length, null
* terminated string.
*/
- while ((Length < Operand[0]->Buffer.Length) &&
- (Length < Operand[1]->Integer.Value) &&
- (Operand[0]->Buffer.Pointer[Length]))
+ while ((Length < Operand[0]->Buffer.Length) && /* Length of input buffer */
+ (Length < Operand[1]->Integer.Value) && /* Length operand */
+ (Operand[0]->Buffer.Pointer[Length])) /* Null terminator */
{
Length++;
}
diff --git a/source/components/executer/exserial.c b/source/components/executer/exserial.c
index 73f2aa4a3e12..553aedfb6312 100644
--- a/source/components/executer/exserial.c
+++ b/source/components/executer/exserial.c
@@ -445,14 +445,12 @@ AcpiExWriteSerialBus (
case ACPI_ADR_SPACE_SMBUS:
BufferLength = ACPI_SMBUS_BUFFER_SIZE;
- DataLength = ACPI_SMBUS_DATA_SIZE;
Function = ACPI_WRITE | (ObjDesc->Field.Attribute << 16);
break;
case ACPI_ADR_SPACE_IPMI:
BufferLength = ACPI_IPMI_BUFFER_SIZE;
- DataLength = ACPI_IPMI_DATA_SIZE;
Function = ACPI_WRITE;
break;
@@ -471,7 +469,6 @@ AcpiExWriteSerialBus (
/* Add header length to get the full size of the buffer */
BufferLength += ACPI_SERIAL_HEADER_SIZE;
- DataLength = SourceDesc->Buffer.Pointer[1];
Function = ACPI_WRITE | (AccessorType << 16);
break;
@@ -479,21 +476,6 @@ AcpiExWriteSerialBus (
return_ACPI_STATUS (AE_AML_INVALID_SPACE_ID);
}
-#if 0
-OBSOLETE?
- /* Check for possible buffer overflow */
-
- if (DataLength > SourceDesc->Buffer.Length)
- {
- ACPI_ERROR ((AE_INFO,
- "Length in buffer header (%u)(%u) is greater than "
- "the physical buffer length (%u) and will overflow",
- DataLength, BufferLength, SourceDesc->Buffer.Length));
-
- return_ACPI_STATUS (AE_AML_BUFFER_LIMIT);
- }
-#endif
-
/* Create the transfer/bidirectional/return buffer */
BufferDesc = AcpiUtCreateBufferObject (BufferLength);
@@ -505,6 +487,8 @@ OBSOLETE?
/* Copy the input buffer data to the transfer buffer */
Buffer = BufferDesc->Buffer.Pointer;
+ DataLength = (BufferLength < SourceDesc->Buffer.Length ?
+ BufferLength : SourceDesc->Buffer.Length);
memcpy (Buffer, SourceDesc->Buffer.Pointer, DataLength);
/* Lock entire transaction if requested */
diff --git a/source/components/executer/exutils.c b/source/components/executer/exutils.c
index a38ce940c481..06ad2b5f32b3 100644
--- a/source/components/executer/exutils.c
+++ b/source/components/executer/exutils.c
@@ -181,7 +181,6 @@ AcpiExDigitsNeeded (
UINT32 Base);
-#ifndef ACPI_NO_METHOD_EXECUTION
/*******************************************************************************
*
* FUNCTION: AcpiExEnterInterpreter
@@ -615,4 +614,3 @@ AcpiIsValidSpaceId (
return (TRUE);
}
-#endif
diff --git a/source/components/namespace/nseval.c b/source/components/namespace/nseval.c
index 8262d992fec5..0dbac5bf0f9c 100644
--- a/source/components/namespace/nseval.c
+++ b/source/components/namespace/nseval.c
@@ -259,6 +259,12 @@ AcpiNsEvaluate (
return_ACPI_STATUS (AE_NO_MEMORY);
}
+ /* Optional object evaluation log */
+
+ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EVALUATION,
+ "%-26s: %s (%s)\n", " Enter evaluation",
+ &Info->FullPathname[1], AcpiUtGetTypeName (Info->Node->Type)));
+
/* Count the number of arguments being passed in */
Info->ParamCount = 0;
@@ -445,6 +451,12 @@ AcpiNsEvaluate (
Info->RelativePathname));
Cleanup:
+ /* Optional object evaluation log */
+
+ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EVALUATION,
+ "%-26s: %s\n", " Exit evaluation",
+ &Info->FullPathname[1]));
+
/*
* Namespace was unlocked by the handling AcpiNs* function, so we
* just free the pathname and return
diff --git a/source/components/namespace/nsload.c b/source/components/namespace/nsload.c
index 698d3a572326..68946074e18d 100644
--- a/source/components/namespace/nsload.c
+++ b/source/components/namespace/nsload.c
@@ -173,7 +173,6 @@ AcpiNsDeleteSubtree (
#endif
-#ifndef ACPI_NO_METHOD_EXECUTION
/*******************************************************************************
*
* FUNCTION: AcpiNsLoadTable
@@ -477,4 +476,3 @@ AcpiNsUnloadNamespace (
return_ACPI_STATUS (Status);
}
#endif
-#endif
diff --git a/source/components/namespace/nsparse.c b/source/components/namespace/nsparse.c
index 8e86ee4c5de9..e781a4ded6b0 100644
--- a/source/components/namespace/nsparse.c
+++ b/source/components/namespace/nsparse.c
@@ -261,8 +261,18 @@ AcpiNsExecuteTable (
goto Cleanup;
}
+ /* Optional object evaluation log */
+
+ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EVALUATION,
+ "%-26s: (Definition Block level)\n", "Module-level evaluation"));
+
Status = AcpiPsExecuteTable (Info);
+ /* Optional object evaluation log */
+
+ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EVALUATION,
+ "%-26s: (Definition Block level)\n", "Module-level complete"));
+
Cleanup:
if (Info)
{
diff --git a/source/components/parser/psloop.c b/source/components/parser/psloop.c
index 9625834c56f6..1fa2c880ca43 100644
--- a/source/components/parser/psloop.c
+++ b/source/components/parser/psloop.c
@@ -580,7 +580,7 @@ AcpiPsParseLoop (
ParserState = &WalkState->ParserState;
WalkState->ArgTypes = 0;
-#if (!defined (ACPI_NO_METHOD_EXECUTION) && !defined (ACPI_CONSTANT_EVAL_ONLY))
+#ifndef ACPI_CONSTANT_EVAL_ONLY
if (WalkState->WalkType & ACPI_WALK_METHOD_RESTART)
{
diff --git a/source/components/parser/psparse.c b/source/components/parser/psparse.c
index 0ad62b771bef..378bfab5b212 100644
--- a/source/components/parser/psparse.c
+++ b/source/components/parser/psparse.c
@@ -637,6 +637,18 @@ AcpiPsParseAml (
"Completed one call to walk loop, %s State=%p\n",
AcpiFormatException (Status), WalkState));
+ if (WalkState->MethodPathname && WalkState->MethodIsNested)
+ {
+ /* Optional object evaluation log */
+
+ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EVALUATION, "%-26s: %*s%s\n",
+ " Exit nested method",
+ (WalkState->MethodNestingDepth + 1) * 3, " ",
+ &WalkState->MethodPathname[1]));
+
+ ACPI_FREE (WalkState->MethodPathname);
+ WalkState->MethodIsNested = FALSE;
+ }
if (Status == AE_CTRL_TRANSFER)
{
/*
diff --git a/source/components/parser/psxface.c b/source/components/parser/psxface.c
index 8516fe3a35df..54f54eab15cd 100644
--- a/source/components/parser/psxface.c
+++ b/source/components/parser/psxface.c
@@ -307,6 +307,9 @@ AcpiPsExecuteMethod (
goto Cleanup;
}
+ WalkState->MethodPathname = Info->FullPathname;
+ WalkState->MethodIsNested = FALSE;
+
if (Info->ObjDesc->Method.InfoFlags & ACPI_METHOD_MODULE_LEVEL)
{
WalkState->ParseFlags |= ACPI_PARSE_MODULE_LEVEL;
@@ -437,6 +440,9 @@ AcpiPsExecuteTable (
goto Cleanup;
}
+ WalkState->MethodPathname = Info->FullPathname;
+ WalkState->MethodIsNested = FALSE;
+
if (Info->ObjDesc->Method.InfoFlags & ACPI_METHOD_MODULE_LEVEL)
{
WalkState->ParseFlags |= ACPI_PARSE_MODULE_LEVEL;
diff --git a/source/components/utilities/utglobal.c b/source/components/utilities/utglobal.c
index a41c17da727b..d4cde4dbea99 100644
--- a/source/components/utilities/utglobal.c
+++ b/source/components/utilities/utglobal.c
@@ -235,10 +235,7 @@ const ACPI_PREDEFINED_NAMES AcpiGbl_PreDefinedNames[] =
{"_REV", ACPI_TYPE_INTEGER, ACPI_CAST_PTR (char, 2)},
{"_OS_", ACPI_TYPE_STRING, ACPI_OS_NAME},
{"_GL_", ACPI_TYPE_MUTEX, ACPI_CAST_PTR (char, 1)},
-
-#if !defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY)
{"_OSI", ACPI_TYPE_METHOD, ACPI_CAST_PTR (char, 1)},
-#endif
/* Table terminator */
diff --git a/source/components/utilities/utmisc.c b/source/components/utilities/utmisc.c
index 0e04aff06972..c6dbf915c513 100644
--- a/source/components/utilities/utmisc.c
+++ b/source/components/utilities/utmisc.c
@@ -217,7 +217,8 @@ AcpiUtIsAmlTable (
if (ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_DSDT) ||
ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_PSDT) ||
ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_SSDT) ||
- ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_OSDT))
+ ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_OSDT) ||
+ ACPI_IS_OEM_SIG (Table->Signature))
{
return (TRUE);
}
diff --git a/source/components/utilities/utosi.c b/source/components/utilities/utosi.c
index e63690786417..3713d033b7e7 100644
--- a/source/components/utilities/utosi.c
+++ b/source/components/utilities/utosi.c
@@ -217,6 +217,8 @@ static ACPI_INTERFACE_INFO AcpiDefaultSupportedInterfaces[] =
{"Windows 2016", NULL, 0, ACPI_OSI_WIN_10_RS1}, /* Windows 10 version 1607 - Added 12/2017 */
{"Windows 2017", NULL, 0, ACPI_OSI_WIN_10_RS2}, /* Windows 10 version 1703 - Added 12/2017 */
{"Windows 2017.2", NULL, 0, ACPI_OSI_WIN_10_RS3}, /* Windows 10 version 1709 - Added 02/2018 */
+ {"Windows 2018", NULL, 0, ACPI_OSI_WIN_10_RS4}, /* Windows 10 version 1803 - Added 11/2018 */
+ {"Windows 2018.2", NULL, 0, ACPI_OSI_WIN_10_RS5}, /* Windows 10 version 1809 - Added 11/2018 */
/* Feature Group Strings */
diff --git a/source/include/acglobal.h b/source/include/acglobal.h
index 3c2a4ed4ce0e..b21c92bdeb98 100644
--- a/source/include/acglobal.h
+++ b/source/include/acglobal.h
@@ -317,11 +317,7 @@ ACPI_GLOBAL (BOOLEAN, AcpiGbl_DisableMemTracking);
*
****************************************************************************/
-#if !defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY)
#define NUM_PREDEFINED_NAMES 10
-#else
-#define NUM_PREDEFINED_NAMES 9
-#endif
ACPI_GLOBAL (ACPI_NAMESPACE_NODE, AcpiGbl_RootNodeStruct);
ACPI_GLOBAL (ACPI_NAMESPACE_NODE *, AcpiGbl_RootNode);
diff --git a/source/include/acoutput.h b/source/include/acoutput.h
index 358ff55a08bf..2a4d31574bc7 100644
--- a/source/include/acoutput.h
+++ b/source/include/acoutput.h
@@ -216,7 +216,8 @@
#define ACPI_LV_RESOURCES 0x00010000
#define ACPI_LV_USER_REQUESTS 0x00020000
#define ACPI_LV_PACKAGE 0x00040000
-#define ACPI_LV_VERBOSITY1 0x0007FF40 | ACPI_LV_ALL_EXCEPTIONS
+#define ACPI_LV_EVALUATION 0x00080000
+#define ACPI_LV_VERBOSITY1 0x000FFF40 | ACPI_LV_ALL_EXCEPTIONS
/* Trace verbosity level 2 [Function tracing and memory allocation] */
@@ -285,6 +286,7 @@
#define ACPI_DB_INTERRUPTS ACPI_DEBUG_LEVEL (ACPI_LV_INTERRUPTS)
#define ACPI_DB_USER_REQUESTS ACPI_DEBUG_LEVEL (ACPI_LV_USER_REQUESTS)
#define ACPI_DB_PACKAGE ACPI_DEBUG_LEVEL (ACPI_LV_PACKAGE)
+#define ACPI_DB_EVALUATION ACPI_DEBUG_LEVEL (ACPI_LV_EVALUATION)
#define ACPI_DB_MUTEX ACPI_DEBUG_LEVEL (ACPI_LV_MUTEX)
#define ACPI_DB_EVENTS ACPI_DEBUG_LEVEL (ACPI_LV_EVENTS)
@@ -292,7 +294,7 @@
/* Defaults for DebugLevel, debug and normal */
-#define ACPI_DEBUG_DEFAULT (ACPI_LV_INIT | ACPI_LV_DEBUG_OBJECT | ACPI_LV_REPAIR)
+#define ACPI_DEBUG_DEFAULT (ACPI_LV_INIT | ACPI_LV_DEBUG_OBJECT | ACPI_LV_EVALUATION | ACPI_LV_REPAIR)
#define ACPI_NORMAL_DEFAULT (ACPI_LV_INIT | ACPI_LV_DEBUG_OBJECT | ACPI_LV_REPAIR)
#define ACPI_DEBUG_ALL (ACPI_LV_AML_DISASSEMBLE | ACPI_LV_ALL_EXCEPTIONS | ACPI_LV_ALL)
diff --git a/source/include/acpixf.h b/source/include/acpixf.h
index 27e9aa7f298d..24deae67851a 100644
--- a/source/include/acpixf.h
+++ b/source/include/acpixf.h
@@ -154,7 +154,7 @@
/* Current ACPICA subsystem version in YYYYMMDD format */
-#define ACPI_CA_VERSION 0x20181031
+#define ACPI_CA_VERSION 0x20181213
#include "acconfig.h"
#include "actypes.h"
diff --git a/source/include/acstruct.h b/source/include/acstruct.h
index 9c55d357ec58..177057266edf 100644
--- a/source/include/acstruct.h
+++ b/source/include/acstruct.h
@@ -205,6 +205,8 @@ typedef struct acpi_walk_state
ACPI_PARSE_STATE ParserState; /* Current state of parser */
UINT32 PrevArgTypes;
UINT32 ArgCount; /* push for fixed or var args */
+ UINT16 MethodNestingDepth;
+ UINT8 MethodIsNested;
struct acpi_namespace_node Arguments[ACPI_METHOD_NUM_ARGS]; /* Control method arguments */
struct acpi_namespace_node LocalVariables[ACPI_METHOD_NUM_LOCALS]; /* Control method locals */
@@ -219,7 +221,8 @@ typedef struct acpi_walk_state
struct acpi_namespace_node *MethodCallNode; /* Called method Node*/
ACPI_PARSE_OBJECT *MethodCallOp; /* MethodCall Op if running a method */
union acpi_operand_object *MethodDesc; /* Method descriptor if running a method */
- struct acpi_namespace_node *MethodNode; /* Method node if running a method. */
+ struct acpi_namespace_node *MethodNode; /* Method node if running a method */
+ char *MethodPathname; /* Full pathname of running method */
ACPI_PARSE_OBJECT *Op; /* Current parser op */
const ACPI_OPCODE_INFO *OpInfo; /* Info on current opcode */
ACPI_PARSE_OBJECT *Origin; /* Start of walk [Obsolete] */
diff --git a/source/include/actbl.h b/source/include/actbl.h
index 58a9b73455fb..f6a2f7c50b1c 100644
--- a/source/include/actbl.h
+++ b/source/include/actbl.h
@@ -182,6 +182,7 @@
#define ACPI_SIG_XSDT "XSDT" /* Extended System Description Table */
#define ACPI_SIG_SSDT "SSDT" /* Secondary System Description Table */
#define ACPI_RSDP_NAME "RSDP" /* Short name for RSDP, not signature */
+#define ACPI_OEM_NAME "OEM" /* Short name for OEM, not signature */
/*
diff --git a/source/include/actypes.h b/source/include/actypes.h
index 4d2438c9ec69..396fb52440ac 100644
--- a/source/include/actypes.h
+++ b/source/include/actypes.h
@@ -678,6 +678,10 @@ typedef UINT64 ACPI_INTEGER;
#define ACPI_VALIDATE_RSDP_SIG(a) (!strncmp (ACPI_CAST_PTR (char, (a)), ACPI_SIG_RSDP, 8))
#define ACPI_MAKE_RSDP_SIG(dest) (memcpy (ACPI_CAST_PTR (char, (dest)), ACPI_SIG_RSDP, 8))
+/* Support for OEMx signature (x can be any character) */
+#define ACPI_IS_OEM_SIG(a) (!strncmp (ACPI_CAST_PTR (char, (a)), ACPI_OEM_NAME, 3) &&\
+ strnlen (a, ACPI_NAME_SIZE) == ACPI_NAME_SIZE)
+
/*
* Algorithm to obtain access bit width.
* Can be used with AccessWidth of ACPI_GENERIC_ADDRESS and AccessSize of
@@ -1512,6 +1516,8 @@ typedef enum
#define ACPI_OSI_WIN_10_RS1 0x0E
#define ACPI_OSI_WIN_10_RS2 0x0F
#define ACPI_OSI_WIN_10_RS3 0x10
+#define ACPI_OSI_WIN_10_RS4 0x11
+#define ACPI_OSI_WIN_10_RS5 0x12
/* Definitions of getopt */
diff --git a/source/tools/acpibin/abcompare.c b/source/tools/acpibin/abcompare.c
index 740d995fc2bf..ca80def96406 100644
--- a/source/tools/acpibin/abcompare.c
+++ b/source/tools/acpibin/abcompare.c
@@ -537,7 +537,11 @@ AbCompareAmlFiles (
printf ("Compare offset: %u\n", AbGbl_CompareOffset);
if (AbGbl_CompareOffset)
{
- fseek (File2, AbGbl_CompareOffset, SEEK_CUR);
+ if (fseek (File2, AbGbl_CompareOffset, SEEK_CUR))
+ {
+ printf ("Seek error on file %s\n", File2Path);
+ goto Exit2;
+ }
}
Actual1 = fread (&Char1, 1, 1, File1);
diff --git a/source/tools/acpiexec/aemain.c b/source/tools/acpiexec/aemain.c
index e8ae348cdf9b..58e639fae8dd 100644
--- a/source/tools/acpiexec/aemain.c
+++ b/source/tools/acpiexec/aemain.c
@@ -266,6 +266,7 @@ usage (
ACPI_OPTION ("-ef", "Enable display of final memory statistics");
ACPI_OPTION ("-ei", "Enable additional tests for ACPICA interfaces");
ACPI_OPTION ("-el", "Enable loading of additional test tables");
+ ACPI_OPTION ("-eo", "Enable object evaluation log");
ACPI_OPTION ("-es", "Enable Interpreter Slack Mode");
ACPI_OPTION ("-et", "Enable debug semaphore timeout");
printf ("\n");
@@ -406,6 +407,12 @@ AeDoOptions (
AcpiGbl_LoadTestTables = TRUE;
break;
+ case 'o':
+
+ AcpiDbgLevel |= ACPI_LV_EVALUATION;
+ AcpiGbl_DbConsoleDebugLevel |= ACPI_LV_EVALUATION;
+ break;
+
case 's':
AcpiGbl_EnableInterpreterSlack = TRUE;
diff --git a/source/tools/acpihelp/ahdecode.c b/source/tools/acpihelp/ahdecode.c
index 4c6850385cb1..416acf4d3787 100644
--- a/source/tools/acpihelp/ahdecode.c
+++ b/source/tools/acpihelp/ahdecode.c
@@ -168,6 +168,10 @@ AhDisplayPredefinedInfo (
char *Name);
static void
+AhDoSpecialNames (
+ char *Name);
+
+static void
AhDisplayResourceName (
const ACPI_PREDEFINED_INFO *ThisName);
@@ -293,15 +297,23 @@ AhFindPredefinedNames (
{
UINT32 Length;
BOOLEAN Found;
- char Name[9];
+ char Name[ACPI_NAME_SIZE + 1];
- if (!NamePrefix || (NamePrefix[0] == '*'))
+ if (!NamePrefix || (*NamePrefix == '*'))
{
Found = AhDisplayPredefinedName (NULL, 0);
return;
}
+ Length = strlen (NamePrefix);
+ if (Length > ACPI_NAME_SIZE)
+ {
+ printf ("%.8s: Predefined name must be 4 characters maximum\n",
+ NamePrefix);
+ return;
+ }
+
/* Contruct a local name or name prefix */
AcpiUtStrupr (NamePrefix);
@@ -311,14 +323,13 @@ AhFindPredefinedNames (
}
Name[0] = '_';
- AcpiUtSafeStrncpy (&Name[1], NamePrefix, 7);
+ AcpiUtSafeStrncpy (&Name[1], NamePrefix, 4);
- Length = strlen (Name);
- if (Length > ACPI_NAME_SIZE)
- {
- printf ("%.8s: Predefined name must be 4 characters maximum\n", Name);
- return;
- }
+ /* Check for special names such as _Exx, _ACx, etc. */
+
+ AhDoSpecialNames (Name);
+
+ /* Lookup and display the name(s) */
Found = AhDisplayPredefinedName (Name, Length);
if (!Found)
@@ -330,6 +341,95 @@ AhFindPredefinedNames (
/*******************************************************************************
*
+ * FUNCTION: AhDoSpecialNames
+ *
+ * PARAMETERS: Name - Name or prefix to find
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Detect and handle the "special" names such as _Exx, _ACx, etc.
+ *
+ * Current support:
+ * _EJx
+ * _Exx
+ * _Lxx
+ * _Qxx
+ * _Wxx
+ * _ACx
+ * _ALx
+ * _T_x
+ *
+ ******************************************************************************/
+
+static void
+AhDoSpecialNames (
+ char *Name)
+{
+
+ /*
+ * Check for the special names that have one or more numeric
+ * suffixes. For example, _Lxx can have 256 different flavors,
+ * from _L00 to _LFF.
+ */
+ switch (Name[1])
+ {
+ case 'E':
+ if (Name[2] == 'J')
+ {
+ if (isdigit (Name[3]) || (Name[3] == 'X'))
+ {
+ /* _EJx */
+
+ Name[3] = 'x';
+ break;
+ }
+ }
+
+ /* Fallthrough */
+
+ case 'L':
+ case 'Q':
+ case 'W':
+ if ((isxdigit (Name[2]) && isxdigit (Name[3]))
+ ||
+ ((Name[2] == 'X') && (Name[3] == 'X')))
+ {
+ /* _Exx, _Lxx, _Qxx, or _Wxx */
+
+ Name[2] = 'x';
+ Name[3] = 'x';
+ }
+ break;
+
+ case 'A':
+ if ((Name[2] == 'C') || (Name[2] == 'L'))
+ {
+ if (isdigit (Name[3]) || (Name[3] == 'X'))
+ {
+ /* _ACx or _ALx */
+
+ Name[3] = 'x';
+ }
+ }
+ break;
+
+ case 'T':
+ if (Name[2] == '_')
+ {
+ /* _T_x (Reserved for iASL compiler */
+
+ Name[3] = 'x';
+ }
+ break;
+
+ default:
+ break;
+ }
+}
+
+
+/*******************************************************************************
+ *
* FUNCTION: AhDisplayPredefinedName
*
* PARAMETERS: Name - Name or name prefix
@@ -420,7 +520,7 @@ AhDisplayPredefinedInfo (
/* NOTE: we check both tables always because there are some dupes */
- /* Check against the predefine methods first */
+ /* Check against the predefined methods first */
ThisName = AcpiUtMatchPredefinedMethod (Name);
if (ThisName)
diff --git a/source/tools/acpixtract/acpixtract.c b/source/tools/acpixtract/acpixtract.c
index be9a5210de63..6de90de2d5bd 100644
--- a/source/tools/acpixtract/acpixtract.c
+++ b/source/tools/acpixtract/acpixtract.c
@@ -176,8 +176,8 @@ AxExtractTables (
{
FILE *InputFile;
FILE *OutputFile = NULL;
- unsigned int BytesConverted;
- unsigned int ThisTableBytesWritten = 0;
+ int BytesConverted;
+ int ThisTableBytesWritten = 0;
unsigned int FoundTable = 0;
unsigned int Instances = 0;
unsigned int ThisInstance;
@@ -323,8 +323,7 @@ AxExtractTables (
/* Empty line or non-data line terminates the data block */
- BytesConverted = AxConvertAndWrite (OutputFile, ThisSignature,
- ThisTableBytesWritten);
+ BytesConverted = AxConvertAndWrite (OutputFile, ThisSignature);
switch (BytesConverted)
{
case 0:
@@ -334,6 +333,7 @@ AxExtractTables (
case -1:
+ Status = -1;
goto CleanupAndExit; /* There was a write error */
default: /* Normal case, get next line */
@@ -397,8 +397,8 @@ AxExtractToMultiAmlFile (
FILE *InputFile;
FILE *OutputFile;
int Status = 0;
- unsigned int TotalBytesWritten = 0;
- unsigned int ThisTableBytesWritten = 0;
+ int TotalBytesWritten = 0;
+ int ThisTableBytesWritten = 0;
unsigned int BytesConverted;
char ThisSignature[4];
unsigned int State = AX_STATE_FIND_HEADER;
@@ -494,8 +494,7 @@ AxExtractToMultiAmlFile (
/* Empty line or non-data line terminates the data block */
- BytesConverted = AxConvertAndWrite (
- OutputFile, ThisSignature, ThisTableBytesWritten);
+ BytesConverted = AxConvertAndWrite (OutputFile, ThisSignature);
switch (BytesConverted)
{
case 0:
@@ -505,6 +504,7 @@ AxExtractToMultiAmlFile (
case -1:
+ Status = -1;
goto CleanupAndExit; /* There was a write error */
default: /* Normal case, get next line */
@@ -561,6 +561,7 @@ AxListAllTables (
FILE *InputFile;
unsigned char Header[48];
UINT32 ByteCount = 0;
+ UINT32 ThisLineByteCount;
unsigned int State = AX_STATE_FIND_HEADER;
@@ -633,7 +634,15 @@ AxListAllTables (
/* Convert header to hex and display it */
- ByteCount += AxConvertToBinary (Gbl_LineBuffer, &Header[ByteCount]);
+ ThisLineByteCount = AxConvertToBinary (Gbl_LineBuffer,
+ &Header[ByteCount]);
+ if (ThisLineByteCount == EOF)
+ {
+ fclose (InputFile);
+ return (-1);
+ }
+
+ ByteCount += ThisLineByteCount;
if (ByteCount >= sizeof (ACPI_TABLE_HEADER))
{
AxDumpTableHeader (Header);
diff --git a/source/tools/acpixtract/acpixtract.h b/source/tools/acpixtract/acpixtract.h
index 88b16670ec10..3adf89055fe6 100644
--- a/source/tools/acpixtract/acpixtract.h
+++ b/source/tools/acpixtract/acpixtract.h
@@ -276,13 +276,12 @@ BOOLEAN
AxIsDataBlockHeader (
void);
-long
+int
AxConvertAndWrite (
FILE *OutputFile,
- char *ThisSignature,
- unsigned int ThisTableBytesWritten);
+ char *ThisSignature);
-size_t
+int
AxConvertToBinary (
char *InputLine,
unsigned char *OutputData);
diff --git a/source/tools/acpixtract/axutils.c b/source/tools/acpixtract/axutils.c
index 8fba70047f93..61cb2d8a8b6a 100644
--- a/source/tools/acpixtract/axutils.c
+++ b/source/tools/acpixtract/axutils.c
@@ -427,7 +427,7 @@ AxNormalizeSignature (
*
******************************************************************************/
-size_t
+int
AxConvertToBinary (
char *InputLine,
unsigned char *OutputData)
@@ -468,14 +468,22 @@ AxConvertToBinary (
&Converted[8], &Converted[9], &Converted[10], &Converted[11],
&Converted[12], &Converted[13], &Converted[14], &Converted[15]);
- /* Pack converted data into a byte array */
+ if (BytesConverted == EOF)
+ {
+ printf ("EOF while converting ASCII line to binary\n");
+ return (-1);
+ }
+ /*
+ * Pack converted data into a byte array.
+ * Note: BytesConverted == 0 is acceptable.
+ */
for (i = 0; i < BytesConverted; i++)
{
OutputData[i] = (unsigned char) Converted[i];
}
- return ((size_t) BytesConverted);
+ return (BytesConverted);
}
@@ -603,7 +611,6 @@ AxGetNextInstance (
*
* PARAMETERS: OutputFile - Where to write the binary data
* ThisSignature - Signature of current ACPI table
- * ThisTableBytesWritten - Total count of data written
*
* RETURN: Length of the converted line
*
@@ -616,27 +623,29 @@ AxGetNextInstance (
*
******************************************************************************/
-long
+int
AxConvertAndWrite (
FILE *OutputFile,
- char *ThisSignature,
- unsigned int ThisTableBytesWritten)
+ char *ThisSignature)
{
- size_t BytesWritten;
- size_t BytesConverted;
+ int BytesWritten;
+ int BytesConverted;
/* Convert one line of ascii hex data to binary */
BytesConverted = AxConvertToBinary (Gbl_LineBuffer, Gbl_BinaryData);
-
- /* Write the binary data */
-
+ if (BytesConverted == EOF)
+ {
+ return (EOF);
+ }
if (!BytesConverted)
{
return (0);
}
+ /* Write the binary data */
+
BytesWritten = fwrite (Gbl_BinaryData, 1, BytesConverted, OutputFile);
if (BytesWritten != BytesConverted)
{