Sync ACPICA with Intel's version 20181213.
authorSascha Wildner <saw@online.de>
Fri, 14 Dec 2018 23:04:38 +0000 (00:04 +0100)
committerSascha Wildner <saw@online.de>
Fri, 14 Dec 2018 23:04:38 +0000 (00:04 +0100)
* Fix buffer length issues with the GenericSerialStatus.

* New object evaluation trace mechanism for control methods and data
  objects (ACPI_LV_EVALUATION).

* _OSI strings sync.

* New options in iasl (-ww) and acpiexec (-eo).

* Various smaller fixes and additions.

For detailed list, please see sys/contrib/dev/acpica/changes.txt.

50 files changed:
share/man/man4/acpi.4
sys/contrib/dev/acpica/changes.txt
sys/contrib/dev/acpica/source/common/ahpredef.c
sys/contrib/dev/acpica/source/common/dmswitch.c
sys/contrib/dev/acpica/source/compiler/aslcodegen.c
sys/contrib/dev/acpica/source/compiler/aslcompile.c
sys/contrib/dev/acpica/source/compiler/aslcompiler.h
sys/contrib/dev/acpica/source/compiler/aslerror.c
sys/contrib/dev/acpica/source/compiler/aslglobal.h
sys/contrib/dev/acpica/source/compiler/aslhelp.c
sys/contrib/dev/acpica/source/compiler/asllength.c
sys/contrib/dev/acpica/source/compiler/aslopcodes.c
sys/contrib/dev/acpica/source/compiler/asloptions.c
sys/contrib/dev/acpica/source/compiler/asltransform.c
sys/contrib/dev/acpica/source/components/dispatcher/dsmethod.c
sys/contrib/dev/acpica/source/components/dispatcher/dsobject.c
sys/contrib/dev/acpica/source/components/dispatcher/dspkginit.c
sys/contrib/dev/acpica/source/components/dispatcher/dsutils.c
sys/contrib/dev/acpica/source/components/dispatcher/dswload.c
sys/contrib/dev/acpica/source/components/dispatcher/dswload2.c
sys/contrib/dev/acpica/source/components/dispatcher/dswstate.c
sys/contrib/dev/acpica/source/components/executer/exconvrt.c
sys/contrib/dev/acpica/source/components/executer/excreate.c
sys/contrib/dev/acpica/source/components/executer/exoparg2.c
sys/contrib/dev/acpica/source/components/executer/exserial.c
sys/contrib/dev/acpica/source/components/executer/exutils.c
sys/contrib/dev/acpica/source/components/namespace/nseval.c
sys/contrib/dev/acpica/source/components/namespace/nsload.c
sys/contrib/dev/acpica/source/components/namespace/nsparse.c
sys/contrib/dev/acpica/source/components/parser/psloop.c
sys/contrib/dev/acpica/source/components/parser/psparse.c
sys/contrib/dev/acpica/source/components/parser/psxface.c
sys/contrib/dev/acpica/source/components/utilities/utglobal.c
sys/contrib/dev/acpica/source/components/utilities/utmisc.c
sys/contrib/dev/acpica/source/components/utilities/utosi.c
sys/contrib/dev/acpica/source/include/acglobal.h
sys/contrib/dev/acpica/source/include/acoutput.h
sys/contrib/dev/acpica/source/include/acpixf.h
sys/contrib/dev/acpica/source/include/acstruct.h
sys/contrib/dev/acpica/source/include/actbl.h
sys/contrib/dev/acpica/source/include/actypes.h
sys/contrib/dev/acpica/source/tools/acpibin/abcompare.c
sys/contrib/dev/acpica/source/tools/acpiexec/aemain.c
sys/contrib/dev/acpica/source/tools/acpihelp/ahdecode.c
sys/contrib/dev/acpica/source/tools/acpixtract/acpixtract.c
sys/contrib/dev/acpica/source/tools/acpixtract/acpixtract.h
sys/contrib/dev/acpica/source/tools/acpixtract/axutils.c
sys/dev/acpica/acpi.c
usr.sbin/acpi/acpiexec/acpiexec.8
usr.sbin/acpi/iasl/iasl.8

index e11e4a7..697a87d 100644 (file)
@@ -25,7 +25,7 @@
 .\"
 .\" $FreeBSD: src/share/man/man4/acpi.4,v 1.61.8.1 2009/04/15 03:14:26 kensmith Exp $
 .\"
-.Dd January 15, 2018
+.Dd December 14, 2018
 .Dt ACPI 4
 .Os
 .Sh NAME
@@ -556,6 +556,7 @@ All the previous levels
 .It Li ACPI_LV_RESOURCES
 .It Li ACPI_LV_USER_REQUESTS
 .It Li ACPI_LV_PACKAGE
+.It Li ACPI_LV_EVALUATION
 .It Li ACPI_LV_VERBOSITY1
 All the previous levels
 .It Li ACPI_LV_ALLOCATIONS
index 91ac04c..3104ba1 100644 (file)
@@ -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 
index 0a55872..1c3af7e 100644 (file)
  */
 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"),
index f04ec74..46546fb 100644 (file)
@@ -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 */
index 7b2e3e5..356011f 100644 (file)
@@ -773,12 +773,6 @@ CgWriteNode (
         return;
     }
 
-    if ((Op->Asl.ParseOpcode == PARSEOP_EXTERNAL) &&
-        AslGbl_DoExternals == FALSE)
-    {
-        return;
-    }
-
     Op->Asl.FinalAmlLength = 0;
 
     switch (Op->Asl.AmlOpcode)
index 4ae1907..1b8838a 100644 (file)
@@ -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
index bd02879..c5e8cb0 100644 (file)
@@ -474,6 +474,10 @@ ACPI_STATUS
 AslExpectException (
     char                    *MessageIdString);
 
+ACPI_STATUS
+AslElevateException (
+    char                    *MessageIdString);
+
 ACPI_STATUS
 AslDisableException (
     char                    *MessageIdString);
index 10ea3ec..2a18dde 100644 (file)
@@ -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
@@ -1155,6 +1199,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
index c3e69cb..fd00da7 100644 (file)
@@ -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 */
index 608f185..4377f83 100644 (file)
@@ -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)");
index 696dc24..8fef83b 100644 (file)
@@ -519,10 +519,7 @@ CgGenerateAmlLengths (
 
     case PARSEOP_EXTERNAL:
 
-        if (AslGbl_DoExternals == TRUE)
-        {
-            CgGenerateAmlOpcodeLength (Op);
-        }
+        CgGenerateAmlOpcodeLength (Op);
         break;
 
     default:
index 218223b..32d0478 100644 (file)
@@ -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)
index 1551963..325ee4a 100644 (file)
@@ -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);
index 324b036..2bf32db 100644 (file)
@@ -460,11 +460,7 @@ TrTransformSubtree (
 
     case PARSEOP_EXTERNAL:
 
-        if (AslGbl_DoExternals == TRUE)
-        {
-            ExDoExternal (Op);
-        }
-
+        ExDoExternal (Op);
         break;
 
     case PARSEOP___METHOD__:
index 3db8010..009151f 100644 (file)
@@ -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)
index e9b7413..4ec23d4 100644 (file)
         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 */
index 9e1cd61..1e7e738 100644 (file)
@@ -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)
             {
                 /*
index c03f926..20a9e25 100644 (file)
@@ -209,7 +209,6 @@ AcpiDsClearImplicitReturn (
 }
 
 
-#ifndef ACPI_NO_METHOD_EXECUTION
 /*******************************************************************************
  *
  * FUNCTION:    AcpiDsDoImplicitReturn
@@ -583,7 +582,6 @@ AcpiDsClearOperands (
     WalkState->NumOperands = 0;
     return_VOID;
 }
-#endif
 
 
 /*******************************************************************************
index 91f5b30..db0f0e8 100644 (file)
@@ -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)
     {
index 4b6e41d..7387690 100644 (file)
@@ -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:
 
index 7994cb1..409d7f7 100644 (file)
@@ -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
 
index 5c58746..a147ba2 100644 (file)
@@ -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;
         }
 
         /*
index 524960c..f4dd829 100644 (file)
         ACPI_MODULE_NAME    ("excreate")
 
 
-#ifndef ACPI_NO_METHOD_EXECUTION
 /*******************************************************************************
  *
  * FUNCTION:    AcpiExCreateAlias
@@ -573,7 +572,6 @@ AcpiExCreatePowerResource (
     AcpiUtRemoveReference (ObjDesc);
     return_ACPI_STATUS (Status);
 }
-#endif
 
 
 /*******************************************************************************
index 73d0bd2..0693dcb 100644 (file)
@@ -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++;
         }
index 73f2aa4..553aedf 100644 (file)
@@ -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 */
index a38ce94..06ad2b5 100644 (file)
@@ -181,7 +181,6 @@ AcpiExDigitsNeeded (
     UINT32                  Base);
 
 
-#ifndef ACPI_NO_METHOD_EXECUTION
 /*******************************************************************************
  *
  * FUNCTION:    AcpiExEnterInterpreter
@@ -615,4 +614,3 @@ AcpiIsValidSpaceId (
     return (TRUE);
 }
 
-#endif
index 8262d99..0dbac5b 100644 (file)
@@ -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
index 698d3a5..6894607 100644 (file)
@@ -173,7 +173,6 @@ AcpiNsDeleteSubtree (
 #endif
 
 
-#ifndef ACPI_NO_METHOD_EXECUTION
 /*******************************************************************************
  *
  * FUNCTION:    AcpiNsLoadTable
@@ -477,4 +476,3 @@ AcpiNsUnloadNamespace (
     return_ACPI_STATUS (Status);
 }
 #endif
-#endif
index 8e86ee4..e781a4d 100644 (file)
@@ -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)
     {
index 9625834..1fa2c88 100644 (file)
@@ -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)
     {
index 0ad62b7..378bfab 100644 (file)
@@ -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)
         {
             /*
index 8516fe3..54f54ea 100644 (file)
@@ -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;
index a41c17d..d4cde4d 100644 (file)
@@ -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 */
 
index 0e04aff..c6dbf91 100644 (file)
@@ -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);
     }
index e636907..3713d03 100644 (file)
@@ -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 */
 
index b48b6c5..51944f2 100644 (file)
@@ -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);
index 1860aee..f37a6b2 100644 (file)
 #define ACPI_LV_RESOURCES           0x00010000
 #define ACPI_LV_USER_REQUESTS       0x00020000
 #define ACPI_LV_PACKAGE             0x00040000
-#define ACPI_LV_VERBOSITY1          0x0007FFE0 | ACPI_LV_ALL_EXCEPTIONS
+#define ACPI_LV_EVALUATION          0x00080000
+#define ACPI_LV_VERBOSITY1          0x000FFFE0 | ACPI_LV_ALL_EXCEPTIONS
 
 /* Trace verbosity level 2 [Function tracing and memory allocation] */
 
 #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)
 
 
 /* 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)
 
index 27e9aa7..24deae6 100644 (file)
 
 /* Current ACPICA subsystem version in YYYYMMDD format */
 
-#define ACPI_CA_VERSION                 0x20181031
+#define ACPI_CA_VERSION                 0x20181213
 
 #include "acconfig.h"
 #include "actypes.h"
index 9c55d35..1770572 100644 (file)
@@ -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] */
index 58a9b73..f6a2f7c 100644 (file)
 #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 */
 
 
 /*
index 4d2438c..396fb52 100644 (file)
@@ -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 */
index 740d995..ca80def 100644 (file)
@@ -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);
index e8ae348..58e639f 100644 (file)
@@ -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;
index 4c68503..416acf4 100644 (file)
@@ -167,6 +167,10 @@ static void
 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)
@@ -328,6 +339,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
@@ -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)
index be9a521..cf52515 100644 (file)
@@ -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;
+    int                     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);
index 88b1667..3adf890 100644 (file)
@@ -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);
index 8fba700..61cb2d8 100644 (file)
@@ -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)
     {
index a31371c..3f78775 100644 (file)
@@ -3481,6 +3481,7 @@ static struct debugtag dbg_level[] = {
     {"ACPI_LV_RESOURCES",      ACPI_LV_RESOURCES},
     {"ACPI_LV_USER_REQUESTS",  ACPI_LV_USER_REQUESTS},
     {"ACPI_LV_PACKAGE",                ACPI_LV_PACKAGE},
+    {"ACPI_LV_EVALUATION",     ACPI_LV_EVALUATION},
     {"ACPI_LV_VERBOSITY1",     ACPI_LV_VERBOSITY1},
 
     /* Trace verbosity level 2 [Function tracing and memory allocation] */
index 160bf12..41336e9 100644 (file)
@@ -28,7 +28,7 @@
 .\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd November 1, 2018
+.Dd December 14, 2018
 .Dt ACPIEXEC 8
 .Os
 .Sh NAME
@@ -68,6 +68,8 @@ Enable display of final memory statistics.
 Enable additional tests for ACPICA interfaces.
 .It Fl el
 Enable loading of additional test tables.
+.It Fl eo
+Enable object evaluation log.
 .It Fl es
 Enable Interpreter Slack Mode.
 .It Fl et
index add4a84..bd4aace 100644 (file)
@@ -28,7 +28,7 @@
 .\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd September 1, 2017
+.Dd December 14, 2018
 .Dt IASL 8
 .Os
 .Sh NAME
@@ -194,6 +194,8 @@ Expect a specific warning, remark, or error.
 Set warning reporting level.
 .It Fl we
 Report warnings as errors.
+.It Fl ww Ar messageid
+Report a specific warning or remark as error.
 .It Fl x Ar level
 Set debug level for trace output.
 .It Fl z