svn commit: r357927 - in vendor-sys/acpica/dist: . generate/lint generate/unix generate/unix/acpidump generate/unix/acpiexec source/common source/compiler source/components/events source/components...

Jung-uk Kim jkim at FreeBSD.org
Fri Feb 14 19:19:43 UTC 2020


Author: jkim
Date: Fri Feb 14 19:19:39 2020
New Revision: 357927
URL: https://svnweb.freebsd.org/changeset/base/357927

Log:
  Merge ACPICA 20200214.

Deleted:
  vendor-sys/acpica/dist/source/compiler/aslcompiler.y
Modified:
  vendor-sys/acpica/dist/changes.txt
  vendor-sys/acpica/dist/generate/lint/files.lnt
  vendor-sys/acpica/dist/generate/lint/lint.bat
  vendor-sys/acpica/dist/generate/lint/readme.txt
  vendor-sys/acpica/dist/generate/lint/std16.lnt
  vendor-sys/acpica/dist/generate/lint/std64.lnt
  vendor-sys/acpica/dist/generate/unix/Makefile.config
  vendor-sys/acpica/dist/generate/unix/acpidump/Makefile
  vendor-sys/acpica/dist/generate/unix/acpiexec/Makefile
  vendor-sys/acpica/dist/source/common/adisasm.c
  vendor-sys/acpica/dist/source/common/dmtables.c
  vendor-sys/acpica/dist/source/compiler/aslanalyze.c
  vendor-sys/acpica/dist/source/compiler/aslcompile.c
  vendor-sys/acpica/dist/source/compiler/aslcompiler.h
  vendor-sys/acpica/dist/source/compiler/aslexternal.c
  vendor-sys/acpica/dist/source/compiler/aslload.c
  vendor-sys/acpica/dist/source/compiler/aslmessages.c
  vendor-sys/acpica/dist/source/compiler/aslmessages.h
  vendor-sys/acpica/dist/source/compiler/aslmethod.c
  vendor-sys/acpica/dist/source/compiler/aslparseop.c
  vendor-sys/acpica/dist/source/compiler/aslprimaries.y
  vendor-sys/acpica/dist/source/compiler/aslrules.y
  vendor-sys/acpica/dist/source/compiler/asltransform.c
  vendor-sys/acpica/dist/source/compiler/aslutils.c
  vendor-sys/acpica/dist/source/compiler/aslxref.c
  vendor-sys/acpica/dist/source/compiler/cvparser.c
  vendor-sys/acpica/dist/source/components/events/evevent.c
  vendor-sys/acpica/dist/source/components/events/evxfgpe.c
  vendor-sys/acpica/dist/source/components/hardware/hwgpe.c
  vendor-sys/acpica/dist/source/components/hardware/hwsleep.c
  vendor-sys/acpica/dist/source/components/namespace/nsnames.c
  vendor-sys/acpica/dist/source/components/namespace/nsxfname.c
  vendor-sys/acpica/dist/source/components/tables/tbxface.c
  vendor-sys/acpica/dist/source/components/utilities/utobject.c
  vendor-sys/acpica/dist/source/include/acconvert.h
  vendor-sys/acpica/dist/source/include/achware.h
  vendor-sys/acpica/dist/source/include/acmacros.h
  vendor-sys/acpica/dist/source/include/acpixf.h
  vendor-sys/acpica/dist/source/include/actbl1.h
  vendor-sys/acpica/dist/source/include/actypes.h
  vendor-sys/acpica/dist/source/os_specific/service_layers/oswintbl.c
  vendor-sys/acpica/dist/tests/misc/grammar.asl
  vendor-sys/acpica/dist/tests/templates/templates.sh

Modified: vendor-sys/acpica/dist/changes.txt
==============================================================================
--- vendor-sys/acpica/dist/changes.txt	Fri Feb 14 19:06:59 2020	(r357926)
+++ vendor-sys/acpica/dist/changes.txt	Fri Feb 14 19:19:39 2020	(r357927)
@@ -1,4 +1,102 @@
 ----------------------------------------
+14 February 2020. Summary of changes for version 20200214:
+
+
+1) ACPICA kernel-resident subsystem:
+
+Enable sleep button on ACPI legacy wake:  Hibernation (S4) is triggered 
+in a guest when it receives a sleep trigger from the hypervisor. When the 
+guest resumes from this power state, it does not see the SleepEnabled 
+bit. In other words, the sleepHibernation (S4) is triggered in a guest 
+when it receives a sleep trigger from the hypervisor. When the guest 
+resumes from this power state, it does not see the SleepEnabled bit. In 
+other words, the sleep button is not enabled on waking from an S4 state. 
+This causes subsequent invocation of sleep state to fail since the 
+guest.button is not enabled on waking from an S4 state. This causes 
+subsequent invocation of sleep state to fail in the guest. Fix this 
+problem by enabling the sleep button in ACPI legacy wake. From Anchal 
+Agarwal <anchalag at amazon.com>.
+
+Implemented a new external interface, AcpiAnyGpeStatusSet (). To be used 
+for checking the status bits of all enabled GPEs in one go. It is needed 
+to distinguish spurious SCIs from genuine ones when deciding whether or 
+not to wake up the system from suspend-to-idle.
+
+Generic Makefiles: replace HOST name with ACPI_HOST: Some machines may be 
+using HOST in their environment to represent the host name for their 
+machines. Avoid this problem by renaming this variable from HOST to 
+ACPI_HOST.
+
+MSVC 2017 project files: Enable multiprocessor generation to improve 
+build performance.
+
+Added a macro to get the byte width of a Generic Address structure. New 
+ACPI_ACCESS_BYTE_WIDTH is in addition to the existing 
+ACPI_ACCESS_BIT_WIDTH. From Mika Westerberg.
+
+
+2) iASL Compiler/Disassembler and ACPICA tools: 
+
+iASL: Implemented full support for the (optional, rarely used) ReturnType 
+and ParameterTypesList for the Method, Function, and External operators. 
+For Method declarations, the number of individual ParameterTypes must 
+match the declaration of the number of arguments (NumArgs). This also 
+Fixes a problem with the External operator where extra/extraneous bytes 
+were emitted in the AML code if the optional ReturnType/ParameterTypes 
+were specified for a MethodObj declaration.
+New error message:
+1) Method NumArgs count does not match length of ParameterTypes list
+
+iASL: Implemented detection of type mismatches between External 
+declarations and named object declarations. Also, detect type mismatches 
+between multiple External declarations of the same Name.
+New error messages:
+1) Type mismatch between external declaration and actual object 
+declaration detected
+2) Type mismatch between multiple external declarations detected
+
+iASL: Implemented new error messages for External operators that specify 
+a ReturnType and/or ParameterTypesList for any object type other than 
+control methods (MethodObj).
+New error messages:
+1) Return type is only allowed for Externals declared as MethodObj
+2) Parameter type is only allowed for Externals declared as MethodObj
+
+iASL: Implemented two new remark/warning messages for ASL code that 
+creates named objects from within a control method. This is very 
+inefficient since the named object must be created and deleted each time 
+the method is executed.
+New messages:
+1) Creation of named objects within a method is highly inefficient, use 
+globals or method local variables instead (remark)
+2) Static OperationRegion should be declared outside control method 
+(warning)
+
+iASL: Improved illegal forward reference detection by adding support to 
+detect forward-reference method invocations.
+
+iASL: Detect and issue an error message for NameStrings that contain too 
+many individual NameSegs (>255). This is an AML limitation that is 
+defined in the ACPI specification.
+New message:
+1) NameString contains too many NameSegs (>255)
+
+acpidump: windows: use GetSystemFirmwareTable API for all tables except 
+SSDT. By using this API, acpidump is able to get all tables in the XSDT
+
+iASL: Removed unused parser file and updated msvc2017 project files. 
+Removed the obsolete AslCompiler.y from the repository.
+
+iASL: msvc2017: Fixed macros in the file dependency list to prevent 
+unnecessary rebuilds. Replace %(Directory) with %(RelativeDir).
+
+Disassembler: Prevent spilling error messages to the output file. All 
+errors are directed to the console instead. These error messages 
+prevented re-compilation of the resulting disassembled ASL output file 
+(.DSL).
+
+
+----------------------------------------
 10 January 2020. Summary of changes for version 20200110:
 
 
@@ -8845,8 +8943,8 @@ much larger code and data size.
 
 Fix build error under Bison-2.4.
 
-Dissasembler: Enhanced FADT support. Added decoding of the Boot 
-Architecture 
+Disassembler: Enhanced FADT support. Added decoding of the Boot
+Architecture
 flags. Now decode all flags, regardless of the FADT version. Flag output 
 includes the FADT version which first defined each flag.
 

Modified: vendor-sys/acpica/dist/generate/lint/files.lnt
==============================================================================
--- vendor-sys/acpica/dist/generate/lint/files.lnt	Fri Feb 14 19:06:59 2020	(r357926)
+++ vendor-sys/acpica/dist/generate/lint/files.lnt	Fri Feb 14 19:19:39 2020	(r357927)
@@ -12,4 +12,3 @@
 ..\..\source\components\resources\*.c
 ..\..\source\components\tables\*.c
 ..\..\source\components\utilities\*.c
-

Modified: vendor-sys/acpica/dist/generate/lint/lint.bat
==============================================================================
--- vendor-sys/acpica/dist/generate/lint/lint.bat	Fri Feb 14 19:06:59 2020	(r357926)
+++ vendor-sys/acpica/dist/generate/lint/lint.bat	Fri Feb 14 19:19:39 2020	(r357927)
@@ -13,4 +13,3 @@ echo 32-bit lint completed >> LintOut.txt
 @echo off
 echo ---
 echo  Output placed in LintOut.txt
-

Modified: vendor-sys/acpica/dist/generate/lint/readme.txt
==============================================================================
--- vendor-sys/acpica/dist/generate/lint/readme.txt	Fri Feb 14 19:06:59 2020	(r357926)
+++ vendor-sys/acpica/dist/generate/lint/readme.txt	Fri Feb 14 19:19:39 2020	(r357927)
@@ -11,4 +11,3 @@ std32.lnt   - 32-bit options
 std64.lnt   - 64-bit options
 options.lnt - common options
 others      - windows/dos compiler option files
-

Modified: vendor-sys/acpica/dist/generate/lint/std16.lnt
==============================================================================
--- vendor-sys/acpica/dist/generate/lint/std16.lnt	Fri Feb 14 19:06:59 2020	(r357926)
+++ vendor-sys/acpica/dist/generate/lint/std16.lnt	Fri Feb 14 19:19:39 2020	(r357927)
@@ -13,4 +13,3 @@ c:\acpi\generate\lint\co-msc40.lnt
 
 
 options.lnt  -mL -si2 -spN2 -spF4 -sl4
-

Modified: vendor-sys/acpica/dist/generate/lint/std64.lnt
==============================================================================
--- vendor-sys/acpica/dist/generate/lint/std64.lnt	Fri Feb 14 19:06:59 2020	(r357926)
+++ vendor-sys/acpica/dist/generate/lint/std64.lnt	Fri Feb 14 19:19:39 2020	(r357927)
@@ -15,4 +15,3 @@
 
 co.lnt
 options.lnt  
-

Modified: vendor-sys/acpica/dist/generate/unix/Makefile.config
==============================================================================
--- vendor-sys/acpica/dist/generate/unix/Makefile.config	Fri Feb 14 19:06:59 2020	(r357926)
+++ vendor-sys/acpica/dist/generate/unix/Makefile.config	Fri Feb 14 19:19:39 2020	(r357927)
@@ -26,15 +26,15 @@
 # Notes:
 #   gcc should be version 4 or greater, otherwise some of the options
 #     used will not be recognized.
-#   Optional: Set HOST to an appropriate value (_LINUX, _FreeBSD, _APPLE, _CYGWIN, etc.)
+#   Optional: Set ACPI_HOST to an appropriate value (_LINUX, _FreeBSD, _APPLE, _CYGWIN, etc.)
 #     See include/platform/acenv.h for supported values.
-#     Note: HOST is not nearly as important for applications as it
+#     Note: ACPI_HOST is not nearly as important for applications as it
 #     is for the kernel-resident version of ACPICA, and it may
 #     not be necessary to change it.
 #
 .SUFFIXES :
 PROGS = acpibin acpidump acpiexamples acpiexec acpihelp acpinames acpisrc acpixtract iasl
-HOST ?= _CYGWIN
+ACPI_HOST ?= _CYGWIN
 CC ?=    gcc
 
 #
@@ -52,26 +52,26 @@ UNAME_S := $(shell uname -s)
 # Host detection and configuration
 #
 ifeq ($(UNAME_S), Darwin)  # Mac OS X
-HOST =       _APPLE
+ACPI_HOST =       _APPLE
 endif
 
 ifeq ($(UNAME_S), DragonFly)
-HOST =       _DragonFly
+ACPI_HOST =       _DragonFly
 endif
 
 ifeq ($(UNAME_S), FreeBSD)
-HOST =       _FreeBSD
+ACPI_HOST =       _FreeBSD
 endif
 
 ifeq ($(UNAME_S), NetBSD)
-HOST =       _NetBSD
+ACPI_HOST =       _NetBSD
 endif
 
 ifeq ($(UNAME_S), QNX)
-HOST =       _QNX
+ACPI_HOST =       _QNX
 endif
 
-ifeq ($(HOST), _APPLE)
+ifeq ($(ACPI_HOST), _APPLE)
 INSTALL  =   cp
 INSTALLFLAGS ?= -f
 else
@@ -183,7 +183,7 @@ OPT_CFLAGS += -D_FORTIFY_SOURCE=2
 endif
 
 CFLAGS += \
-    -D$(HOST)\
+    -D$(ACPI_HOST)\
     -D_GNU_SOURCE\
     -I$(ACPICA_INCLUDE)
 
@@ -191,7 +191,7 @@ CFLAGS += \
 # QNX requires __EXT to enable most functions in its C library, analogous
 # to _GNU_SOURCE.
 #
-ifeq ($(HOST), _QNX)
+ifeq ($(ACPI_HOST), _QNX)
     CFLAGS+=-D__EXT
 endif
 
@@ -231,11 +231,11 @@ CWARNINGFLAGS += \
 #
 # Per-host flags and exclusions
 #
-ifneq ($(HOST), _FreeBSD)
+ifneq ($(ACPI_HOST), _FreeBSD)
     CWARNINGFLAGS += \
         -Wempty-body
 
-    ifneq ($(HOST), _APPLE)
+    ifneq ($(ACPI_HOST), _APPLE)
         CWARNINGFLAGS += \
             -Woverride-init\
             -Wlogical-op\

Modified: vendor-sys/acpica/dist/generate/unix/acpidump/Makefile
==============================================================================
--- vendor-sys/acpica/dist/generate/unix/acpidump/Makefile	Fri Feb 14 19:06:59 2020	(r357926)
+++ vendor-sys/acpica/dist/generate/unix/acpidump/Makefile	Fri Feb 14 19:19:39 2020	(r357927)
@@ -54,19 +54,19 @@ OBJECTS = \
 #
 # Per-host interfaces
 #
-ifeq ($(HOST), _DragonFly)
+ifeq ($(ACPI_HOST), _DragonFly)
 HOST_FAMILY = BSD
 endif
 
-ifeq ($(HOST), _FreeBSD)
+ifeq ($(ACPI_HOST), _FreeBSD)
 HOST_FAMILY = BSD
 endif
 
-ifeq ($(HOST), _NetBSD)
+ifeq ($(ACPI_HOST), _NetBSD)
 HOST_FAMILY = BSD
 endif
 
-ifeq ($(HOST), _QNX)
+ifeq ($(ACPI_HOST), _QNX)
 HOST_FAMILY = BSD
 endif
 

Modified: vendor-sys/acpica/dist/generate/unix/acpiexec/Makefile
==============================================================================
--- vendor-sys/acpica/dist/generate/unix/acpiexec/Makefile	Fri Feb 14 19:06:59 2020	(r357926)
+++ vendor-sys/acpica/dist/generate/unix/acpiexec/Makefile	Fri Feb 14 19:19:39 2020	(r357927)
@@ -255,12 +255,12 @@ CFLAGS += \
     -DACPI_CHECKSUM_ABORT=TRUE
 endif
 
-ifneq ($(HOST),_QNX)
+ifneq ($(ACPI_HOST),_QNX)
 LDFLAGS += -lpthread
 endif
 
-ifneq ($(HOST),_APPLE)
-ifneq ($(HOST),_QNX)
+ifneq ($(ACPI_HOST),_APPLE)
+ifneq ($(ACPI_HOST),_QNX)
 LDFLAGS += -lrt
 endif
 endif

Modified: vendor-sys/acpica/dist/source/common/adisasm.c
==============================================================================
--- vendor-sys/acpica/dist/source/common/adisasm.c	Fri Feb 14 19:06:59 2020	(r357926)
+++ vendor-sys/acpica/dist/source/common/adisasm.c	Fri Feb 14 19:19:39 2020	(r357927)
@@ -156,6 +156,7 @@
 #include "acnamesp.h"
 #include "acparser.h"
 #include "acapps.h"
+#include "acconvert.h"
 
 
 #define _COMPONENT          ACPI_TOOLS
@@ -379,8 +380,6 @@ AdAmlDisassemble (
             Status = AE_ERROR;
             goto Cleanup;
         }
-
-        AcpiOsRedirectOutput (File);
     }
 
     *OutFilename = DisasmFilename;
@@ -467,6 +466,11 @@ AdDisassembleOneTable (
 
     if (!AcpiGbl_ForceAmlDisassembly && !AcpiUtIsAmlTable (Table))
     {
+        if (File)
+        {
+            AcpiOsRedirectOutput (File);
+        }
+
         AdDisassemblerHeader (Filename, ACPI_IS_DATA_TABLE);
 
         /* This is a "Data Table" (non-AML table) */
@@ -489,6 +493,10 @@ AdDisassembleOneTable (
         return (AE_OK);
     }
 
+    /* Initialize the converter output file */
+
+    ASL_CV_INIT_FILETREE(Table, File);
+
     /*
      * This is an AML table (DSDT or SSDT).
      * Always parse the tables, only option is what to display
@@ -499,6 +507,13 @@ AdDisassembleOneTable (
         AcpiOsPrintf ("Could not parse ACPI tables, %s\n",
             AcpiFormatException (Status));
         return (Status);
+    }
+
+    /* Redirect output for code generation and debugging output */
+
+    if (File)
+    {
+        AcpiOsRedirectOutput (File);
     }
 
     /* Debug output, namespace and parse tree */

Modified: vendor-sys/acpica/dist/source/common/dmtables.c
==============================================================================
--- vendor-sys/acpica/dist/source/common/dmtables.c	Fri Feb 14 19:06:59 2020	(r357926)
+++ vendor-sys/acpica/dist/source/common/dmtables.c	Fri Feb 14 19:19:39 2020	(r357927)
@@ -506,7 +506,6 @@ AdParseTable (
 
     AmlLength = Table->Length - sizeof (ACPI_TABLE_HEADER);
     AmlStart = ((UINT8 *) Table + sizeof (ACPI_TABLE_HEADER));
-    ASL_CV_INIT_FILETREE(Table, AmlStart, AmlLength);
 
     AcpiUtSetIntegerWidth (Table->Revision);
 

Modified: vendor-sys/acpica/dist/source/compiler/aslanalyze.c
==============================================================================
--- vendor-sys/acpica/dist/source/compiler/aslanalyze.c	Fri Feb 14 19:06:59 2020	(r357926)
+++ vendor-sys/acpica/dist/source/compiler/aslanalyze.c	Fri Feb 14 19:19:39 2020	(r357927)
@@ -151,6 +151,7 @@
 
 #include "aslcompiler.h"
 #include "aslcompiler.y.h"
+#include "acnamesp.h"
 #include <string.h>
 
 
@@ -421,6 +422,7 @@ AnCheckMethodReturnValue (
 {
     ACPI_PARSE_OBJECT       *OwningOp;
     ACPI_NAMESPACE_NODE     *Node;
+    char                    *ExternalPath;
 
 
     Node = ArgOp->Asl.Node;
@@ -435,18 +437,19 @@ AnCheckMethodReturnValue (
     /* Examine the parent op of this method */
 
     OwningOp = Node->Op;
+    ExternalPath = AcpiNsGetNormalizedPathname (Node, TRUE);
+
     if (OwningOp->Asl.CompileFlags & OP_METHOD_NO_RETVAL)
     {
         /* Method NEVER returns a value */
 
-        AslError (ASL_ERROR, ASL_MSG_NO_RETVAL, Op, Op->Asl.ExternalName);
+        AslError (ASL_ERROR, ASL_MSG_NO_RETVAL, Op, ExternalPath);
     }
     else if (OwningOp->Asl.CompileFlags & OP_METHOD_SOME_NO_RETVAL)
     {
         /* Method SOMETIMES returns a value, SOMETIMES not */
 
-        AslError (ASL_WARNING, ASL_MSG_SOME_NO_RETVAL,
-            Op, Op->Asl.ExternalName);
+        AslError (ASL_WARNING, ASL_MSG_SOME_NO_RETVAL, Op, ExternalPath);
     }
     else if (!(ThisNodeBtype & RequiredBtypes))
     {
@@ -469,6 +472,11 @@ AnCheckMethodReturnValue (
 
             AslError (ASL_ERROR, ASL_MSG_INVALID_TYPE, ArgOp, AslGbl_MsgBuffer);
         }
+    }
+
+    if (ExternalPath)
+    {
+        ACPI_FREE (ExternalPath);
     }
 }
 

Modified: vendor-sys/acpica/dist/source/compiler/aslcompile.c
==============================================================================
--- vendor-sys/acpica/dist/source/compiler/aslcompile.c	Fri Feb 14 19:06:59 2020	(r357926)
+++ vendor-sys/acpica/dist/source/compiler/aslcompile.c	Fri Feb 14 19:19:39 2020	(r357927)
@@ -647,7 +647,7 @@ void
 AslCompilerFileHeader (
     UINT32                  FileId)
 {
-    struct tm               *NewTime;
+    char                    *NewTime;
     time_t                  Aclock;
     char                    *Prefix = "";
 
@@ -691,13 +691,17 @@ AslCompilerFileHeader (
 
     /* Compilation header with timestamp */
 
-    (void) time (&Aclock);
-    NewTime = localtime (&Aclock);
+    Aclock = time (NULL);
+    NewTime = ctime (&Aclock);
 
     FlPrintFile (FileId,
-        "%sCompilation of \"%s\" - %s%s\n",
-        Prefix, AslGbl_Files[ASL_FILE_INPUT].Filename, asctime (NewTime),
-        Prefix);
+        "%sCompilation of \"%s\" -",
+        Prefix, AslGbl_Files[ASL_FILE_INPUT].Filename);
+
+    if (NewTime)
+    {
+        FlPrintFile (FileId, " %s%s\n", NewTime, Prefix);
+    }
 
     switch (FileId)
     {

Modified: vendor-sys/acpica/dist/source/compiler/aslcompiler.h
==============================================================================
--- vendor-sys/acpica/dist/source/compiler/aslcompiler.h	Fri Feb 14 19:06:59 2020	(r357926)
+++ vendor-sys/acpica/dist/source/compiler/aslcompiler.h	Fri Feb 14 19:19:39 2020	(r357927)
@@ -373,7 +373,16 @@ MtMethodAnalysisWalkEnd (
     UINT32                  Level,
     void                    *Context);
 
+UINT32
+MtProcessTypeOp (
+    ACPI_PARSE_OBJECT       *TypeOp);
 
+UINT8
+MtProcessParameterTypeList (
+    ACPI_PARSE_OBJECT       *ParamTypeOp,
+    UINT32                  *TypeList);
+
+
 /*
  * aslbtypes - bitfield data types
  */
@@ -1233,9 +1242,13 @@ UtDumpBasicOp (
     ACPI_PARSE_OBJECT       *Op,
     UINT32                  Level);
 
-void *
-UtGetParentMethod (
+ACPI_NAMESPACE_NODE *
+UtGetParentMethodNode (
     ACPI_NAMESPACE_NODE     *Node);
+
+ACPI_PARSE_OBJECT *
+UtGetParentMethodOp (
+    ACPI_PARSE_OBJECT       *Op);
 
 BOOLEAN
 UtNodeIsDescendantOf (

Modified: vendor-sys/acpica/dist/source/compiler/aslexternal.c
==============================================================================
--- vendor-sys/acpica/dist/source/compiler/aslexternal.c	Fri Feb 14 19:06:59 2020	(r357926)
+++ vendor-sys/acpica/dist/source/compiler/aslexternal.c	Fri Feb 14 19:19:39 2020	(r357927)
@@ -192,12 +192,54 @@ ExDoExternal (
     ACPI_PARSE_OBJECT       *Prev;
     ACPI_PARSE_OBJECT       *Next;
     ACPI_PARSE_OBJECT       *ArgCountOp;
+    ACPI_PARSE_OBJECT       *TypeOp;
+    ACPI_PARSE_OBJECT       *ExternTypeOp = Op->Asl.Child->Asl.Next;
+    UINT32                  ExternType;
+    UINT8                   ParamCount = ASL_EXTERNAL_METHOD_UNKNOWN_PARAMS;
+    UINT32                  ParamTypes[ACPI_METHOD_NUM_ARGS];
 
 
+    ExternType = AnMapObjTypeToBtype (ExternTypeOp);
+
+    /*
+     * The parser allows optional parameter return types regardless of the
+     * type. Check object type keyword emit error if optional parameter/return
+     * types exist.
+     *
+     * Check the parameter return type
+     */
+    TypeOp = ExternTypeOp->Asl.Next;
+    if (TypeOp->Asl.Child)
+    {
+        /* Ignore the return type for now. */
+
+        (void) MtProcessTypeOp (TypeOp->Asl.Child);
+        if (ExternType != ACPI_BTYPE_METHOD)
+        {
+            sprintf (AslGbl_MsgBuffer, "Found type [%s]", AcpiUtGetTypeName(ExternType));
+            AslError (ASL_ERROR, ASL_MSG_EXTERN_INVALID_RET_TYPE, TypeOp,
+                AslGbl_MsgBuffer);
+        }
+    }
+
+    /* Check the parameter types */
+
+    TypeOp = TypeOp->Asl.Next;
+    if (TypeOp->Asl.Child)
+    {
+        ParamCount = MtProcessParameterTypeList (TypeOp->Asl.Child, ParamTypes);
+        if (ExternType != ACPI_BTYPE_METHOD)
+        {
+            sprintf (AslGbl_MsgBuffer, "Found type [%s]", AcpiUtGetTypeName(ExternType));
+            AslError (ASL_ERROR, ASL_MSG_EXTERN_INVALID_PARAM_TYPE, TypeOp,
+                AslGbl_MsgBuffer);
+        }
+    }
+
     ArgCountOp = Op->Asl.Child->Asl.Next->Asl.Next;
     ArgCountOp->Asl.AmlOpcode = AML_RAW_DATA_BYTE;
     ArgCountOp->Asl.ParseOpcode = PARSEOP_BYTECONST;
-    ArgCountOp->Asl.Value.Integer = 0;
+    ArgCountOp->Asl.Value.Integer = ParamCount;
     UtSetParseOpName (ArgCountOp);
 
     /* Create new list node of arbitrary type */

Modified: vendor-sys/acpica/dist/source/compiler/aslload.c
==============================================================================
--- vendor-sys/acpica/dist/source/compiler/aslload.c	Fri Feb 14 19:06:59 2020	(r357926)
+++ vendor-sys/acpica/dist/source/compiler/aslload.c	Fri Feb 14 19:19:39 2020	(r357927)
@@ -196,6 +196,15 @@ LdCheckSpecialNames (
     ACPI_NAMESPACE_NODE     *Node,
     ACPI_PARSE_OBJECT       *Op);
 
+static ACPI_STATUS
+LdAnalyzeExternals (
+    ACPI_NAMESPACE_NODE     *Node,
+    ACPI_PARSE_OBJECT       *Op,
+    ACPI_OBJECT_TYPE        ExternalOpType,
+    ACPI_OBJECT_TYPE        ObjectType,
+    ACPI_WALK_STATE         *WalkState);
+
+
 /*******************************************************************************
  *
  * FUNCTION:    LdLoadNamespace
@@ -575,7 +584,8 @@ LdNamespace1Begin (
     /* Check for a possible illegal forward reference */
 
     if ((Op->Asl.ParseOpcode == PARSEOP_NAMESEG) ||
-        (Op->Asl.ParseOpcode == PARSEOP_NAMESTRING))
+        (Op->Asl.ParseOpcode == PARSEOP_NAMESTRING) ||
+        (Op->Asl.ParseOpcode == PARSEOP_METHODCALL))
     {
         /*
          * Op->Asl.Namepath will be NULL for these opcodes.
@@ -591,7 +601,8 @@ LdNamespace1Begin (
          * We only want references to named objects:
          *      Store (2, WXYZ) -> Attempt to resolve the name
          */
-        if (OpInfo->Class == AML_CLASS_NAMED_OBJECT)
+        if ((Op->Asl.ParseOpcode != PARSEOP_METHODCALL) &&
+            (OpInfo->Class == AML_CLASS_NAMED_OBJECT))
         {
             return (AE_OK);
         }
@@ -899,58 +910,26 @@ LdNamespace1Begin (
                 Node->Type = (UINT8) ObjectType;
                 Status = AE_OK;
             }
-            else if ((Node->Flags & ANOBJ_IS_EXTERNAL) &&
-                     (Op->Asl.ParseOpcode != PARSEOP_EXTERNAL))
+            else if ((Node->Flags & ANOBJ_IS_EXTERNAL) ||
+                     (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL))
             {
-                /*
-                 * Allow one create on an object or segment that was
-                 * previously declared External
-                 */
-                Node->Flags &= ~ANOBJ_IS_EXTERNAL;
-                Node->Type = (UINT8) ObjectType;
-
-                /* Just retyped a node, probably will need to open a scope */
-
-                if (AcpiNsOpensScope (ObjectType))
+                Status = LdAnalyzeExternals (Node, Op, ActualObjectType,
+                    ObjectType, WalkState);
+                if (ACPI_FAILURE (Status))
                 {
-                    Status = AcpiDsScopeStackPush (Node, ObjectType, WalkState);
-                    if (ACPI_FAILURE (Status))
+                    if (Status == AE_ERROR)
                     {
-                        return_ACPI_STATUS (Status);
+                        /*
+                         * The use of AE_ERROR here indicates that there was a
+                         * compiler error emitted in LdAnalyzeExternals which
+                         * means that the caller should proceed to the next Op
+                         * for analysis of subsequent parse objects.
+                         */
+                        Status = AE_OK;
                     }
+                    return_ACPI_STATUS (Status);
                 }
-
-                Status = AE_OK;
             }
-            else if (!(Node->Flags & ANOBJ_IS_EXTERNAL) &&
-                     (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL))
-            {
-                /*
-                 * Allow externals in same scope as the definition of the
-                 * actual object. Similar to C. Allows multiple definition
-                 * blocks that refer to each other in the same file.
-                 */
-                Status = AE_OK;
-            }
-            else if ((Node->Flags & ANOBJ_IS_EXTERNAL) &&
-                     (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL) &&
-                     (ObjectType == ACPI_TYPE_ANY))
-            {
-                /* Allow update of externals of unknown type. */
-
-                if (AcpiNsOpensScope (ActualObjectType))
-                {
-                    Node->Type = (UINT8) ActualObjectType;
-                    Status = AE_OK;
-                }
-                else
-                {
-                    sprintf (AslGbl_MsgBuffer, "%s [%s]", Op->Asl.ExternalName,
-                        AcpiUtGetTypeName (Node->Type));
-                    AslError (ASL_ERROR, ASL_MSG_SCOPE_TYPE, Op, AslGbl_MsgBuffer);
-                    return_ACPI_STATUS (AE_OK);
-                }
-            }
             else
             {
                 /* Valid error, object already exists */
@@ -1013,15 +992,17 @@ FinishNode:
      * Set the actual data type if appropriate (EXTERNAL term only)
      * As of 11/19/2019, ASL External() does not support parameter
      * counts. When an External method is loaded, the parameter count is
-     * unknown setting Node->Value to ASL_EXTERNAL_METHOD_UNKNOWN_PARAMS
-     * indicates that the parameter count for this method is unknown.
-     * This information is used in ASL cross reference to help determine the
-     * parameter count through method calls.
+     * recorded in the external's arg count parameter. The parameter count may
+     * or may not be known in the declaration. If the value of this node turns
+     * out to be ASL_EXTERNAL_METHOD_UNKNOWN_PARAMS, it indicates that
+     * we do not know the parameter count and that we must look at the usage of
+     * the External method call to get this information.
      */
     if (ActualObjectType != ACPI_TYPE_ANY)
     {
         Node->Type = (UINT8) ActualObjectType;
-        Node->Value = ASL_EXTERNAL_METHOD_UNKNOWN_PARAMS;
+        Node->Value = (UINT32)
+            Op->Asl.Child->Asl.Next->Asl.Next->Asl.Value.Integer;
     }
 
     if (Op->Asl.ParseOpcode == PARSEOP_METHOD)
@@ -1034,6 +1015,145 @@ FinishNode:
     }
 
     return_ACPI_STATUS (Status);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    LdAnalyzeExternals
+ *
+ * PARAMETERS:  Node            - Node that represents the named object
+ *              Op              - Named object declaring this named object
+ *              ExternalOpType  - Type of ExternalOp
+ *              ObjectType      - Type of Declared object
+ *              WalkState       - Current WalkState
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Node and Op represents an identically named object declaration
+ *              that is either declared by the ASL external keyword or declared
+ *              by operators that declare named objects (i.e. Name, Device,
+ *              OperationRegion, and etc.). This function ensures that the
+ *              declarations do not contradict each other.
+ *
+ ******************************************************************************/
+
+static ACPI_STATUS
+LdAnalyzeExternals (
+    ACPI_NAMESPACE_NODE     *Node,
+    ACPI_PARSE_OBJECT       *Op,
+    ACPI_OBJECT_TYPE        ExternalOpType,
+    ACPI_OBJECT_TYPE        ObjectType,
+    ACPI_WALK_STATE         *WalkState)
+{
+    ACPI_STATUS             Status = AE_OK;
+    ACPI_OBJECT_TYPE        ActualExternalOpType;
+    ACPI_OBJECT_TYPE        ActualOpType;
+    ACPI_PARSE_OBJECT       *ExternalOp;
+    ACPI_PARSE_OBJECT       *ActualOp;
+
+
+    /*
+     * The declaration represented by Node and Op must have the same type.
+     * The type of the external Op is represented by ExternalOpType. However,
+     * the type of the pre-existing declaration depends on whether if Op
+     * is an external declaration or an actual declaration.
+     */
+    if (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL)
+    {
+        ActualExternalOpType = ExternalOpType;
+        ActualOpType = Node->Type;
+    }
+    else
+    {
+        ActualExternalOpType = Node->Type;
+        ActualOpType = ObjectType;
+    }
+
+    if ((ActualOpType != ACPI_TYPE_ANY) &&
+        (ActualExternalOpType != ACPI_TYPE_ANY) &&
+        (ActualExternalOpType != ActualOpType))
+    {
+        if (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL &&
+            Node->Op->Asl.ParseOpcode == PARSEOP_EXTERNAL)
+        {
+            AslDualParseOpError (ASL_ERROR,
+                ASL_MSG_DUPLICATE_EXTERN_MISMATCH, Op, NULL,
+                ASL_MSG_DUPLICATE_EXTERN_FOUND_HERE, Node->Op, NULL);
+        }
+        else
+        {
+            if (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL &&
+                Node->Op->Asl.ParseOpcode != PARSEOP_EXTERNAL)
+            {
+                ExternalOp = Op;
+                ActualOp = Node->Op;
+            }
+            else
+            {
+                ExternalOp = Node->Op;
+                ActualOp = Op;
+            }
+            AslDualParseOpError (ASL_ERROR,
+                ASL_MSG_DECLARATION_TYPE_MISMATCH, ExternalOp, NULL,
+                ASL_MSG_TYPE_MISMATCH_FOUND_HERE, ActualOp, NULL);
+        }
+    }
+
+    if ((Node->Flags & ANOBJ_IS_EXTERNAL) &&
+        (Op->Asl.ParseOpcode != PARSEOP_EXTERNAL))
+    {
+        /*
+         * Allow one create on an object or segment that was
+         * previously declared External
+         */
+        Node->Flags &= ~ANOBJ_IS_EXTERNAL;
+        Node->Type = (UINT8) ObjectType;
+
+        /* Just retyped a node, probably will need to open a scope */
+
+        if (AcpiNsOpensScope (ObjectType))
+        {
+            Status = AcpiDsScopeStackPush (Node, ObjectType, WalkState);
+            if (ACPI_FAILURE (Status))
+            {
+                return (Status);
+            }
+        }
+
+        Status = AE_OK;
+    }
+    else if (!(Node->Flags & ANOBJ_IS_EXTERNAL) &&
+             (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL))
+    {
+        /*
+         * Allow externals in same scope as the definition of the
+         * actual object. Similar to C. Allows multiple definition
+         * blocks that refer to each other in the same file.
+         */
+        Status = AE_OK;
+    }
+    else if ((Node->Flags & ANOBJ_IS_EXTERNAL) &&
+             (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL) &&
+             (ObjectType == ACPI_TYPE_ANY))
+    {
+        /* Allow update of externals of unknown type. */
+
+        if (AcpiNsOpensScope (ExternalOpType))
+        {
+            Node->Type = (UINT8) ExternalOpType;
+            Status = AE_OK;
+        }
+        else
+        {
+            sprintf (AslGbl_MsgBuffer, "%s [%s]", Op->Asl.ExternalName,
+                AcpiUtGetTypeName (Node->Type));
+            AslError (ASL_ERROR, ASL_MSG_SCOPE_TYPE, Op, AslGbl_MsgBuffer);
+            Status = AE_ERROR;
+        }
+    }
+
+    return (Status);
 }
 
 

Modified: vendor-sys/acpica/dist/source/compiler/aslmessages.c
==============================================================================
--- vendor-sys/acpica/dist/source/compiler/aslmessages.c	Fri Feb 14 19:06:59 2020	(r357926)
+++ vendor-sys/acpica/dist/source/compiler/aslmessages.c	Fri Feb 14 19:19:39 2020	(r357927)
@@ -320,7 +320,7 @@ const char                      *AslCompilerMsgs [] =
 /*    ASL_MSG_SCOPE_TYPE */                 "Existing object has invalid type for Scope operator",
 /*    ASL_MSG_SEEK */                       "Could not seek file",
 /*    ASL_MSG_SERIALIZED */                 "Control Method marked Serialized",
-/*    ASL_MSG_SERIALIZED_REQUIRED */        "Control Method should be made Serialized",
+/*    ASL_MSG_SERIALIZED_REQUIRED */        "Control Method should be made Serialized due to creation of named objects within",
 /*    ASL_MSG_SINGLE_NAME_OPTIMIZATION */   "NamePath optimized to NameSeg (uses run-time search path)",
 /*    ASL_MSG_SOME_NO_RETVAL */             "Called method may not always return a value",
 /*    ASL_MSG_STRING_LENGTH */              "String literal too long",
@@ -370,7 +370,16 @@ const char                      *AslCompilerMsgs [] =
 /*    ASL_MSG_INVALID_PROCESSOR_UID */      "_UID inside processor declaration must be an integer",
 /*    ASL_MSG_LEGACY_PROCESSOR_OP */        "Legacy Processor() keyword detected. Use Device() keyword instead.",
 /*    ASL_MSG_NAMESTRING_LENGTH */          "NameString contains too many NameSegs (>255)",
-/*    ASL_MSG_CASE_FOUND_HERE */            "Original Case value below:"
+/*    ASL_MSG_CASE_FOUND_HERE */            "Original Case value below:",
+/*    ASL_MSG_EXTERN_INVALID_RET_TYPE */    "Return type is only allowed for Externals declared as MethodObj",
+/*    ASL_MSG_EXTERN_INVALID_PARAM_TYPE */  "Parameter type is only allowed for Externals declared as MethodObj",
+/*    ASL_MSG_NAMED_OBJECT_CREATION */      "Creation of named objects within a method is highly inefficient, use globals or method local variables instead",
+/*    ASL_MSG_ARG_COUNT_MISMATCH */         "Method NumArgs count does not match length of ParameterTypes list",
+/*    ASL_MSG_STATIC_OPREGION_IN_METHOD */  "Static OperationRegion should be declared outside control method",
+/*    ASL_MSG_DECLARATION_TYPE_MISMATCH */  "Type mismatch between external declaration and actual object declaration detected",
+/*    ASL_MSG_TYPE_MISMATCH_FOUND_HERE */   "Actual object declaration:",
+/*    ASL_MSG_DUPLICATE_EXTERN_MISMATCH */  "Type mismatch between multiple external declarations detected",
+/*    ASL_MSG_DUPLICATE_EXTERN_FOUND_HERE */"Duplicate external declaration:",
 };
 
 /* Table compiler */

Modified: vendor-sys/acpica/dist/source/compiler/aslmessages.h
==============================================================================
--- vendor-sys/acpica/dist/source/compiler/aslmessages.h	Fri Feb 14 19:06:59 2020	(r357926)
+++ vendor-sys/acpica/dist/source/compiler/aslmessages.h	Fri Feb 14 19:19:39 2020	(r357927)
@@ -373,6 +373,16 @@ typedef enum
     ASL_MSG_LEGACY_PROCESSOR_OP,
     ASL_MSG_NAMESTRING_LENGTH,
     ASL_MSG_CASE_FOUND_HERE,
+    ASL_MSG_EXTERN_INVALID_RET_TYPE,
+    ASL_MSG_EXTERN_INVALID_PARAM_TYPE,
+    ASL_MSG_NAMED_OBJECT_CREATION,
+    ASL_MSG_ARG_COUNT_MISMATCH,
+    ASL_MSG_STATIC_OPREGION_IN_METHOD,
+    ASL_MSG_DECLARATION_TYPE_MISMATCH,
+    ASL_MSG_TYPE_MISMATCH_FOUND_HERE,
+    ASL_MSG_DUPLICATE_EXTERN_MISMATCH,
+    ASL_MSG_DUPLICATE_EXTERN_FOUND_HERE,
+
 
     /* These messages are used by the Data Table compiler only */
 

Modified: vendor-sys/acpica/dist/source/compiler/aslmethod.c
==============================================================================
--- vendor-sys/acpica/dist/source/compiler/aslmethod.c	Fri Feb 14 19:06:59 2020	(r357926)
+++ vendor-sys/acpica/dist/source/compiler/aslmethod.c	Fri Feb 14 19:19:39 2020	(r357927)
@@ -151,6 +151,7 @@
 
 #include "aslcompiler.h"
 #include "aslcompiler.y.h"
+#include "acnamesp.h"
 #include "acparser.h"
 #include "amlcode.h"
 
@@ -166,7 +167,11 @@ MtCheckNamedObjectInMethod (
     ACPI_PARSE_OBJECT       *Op,
     ASL_METHOD_INFO         *MethodInfo);
 
+static void
+MtCheckStaticOperationRegionInMethod (
+    ACPI_PARSE_OBJECT       *Op);
 
+
 /*******************************************************************************
  *
  * FUNCTION:    MtMethodAnalysisWalkBegin
@@ -197,7 +202,6 @@ MtMethodAnalysisWalkBegin (
     char                    ArgName[] = "Arg0";
     ACPI_PARSE_OBJECT       *ArgNode;
     ACPI_PARSE_OBJECT       *NextType;
-    ACPI_PARSE_OBJECT       *NextParamType;
     UINT8                   ActualArgs = 0;
     BOOLEAN                 HidExists;
     BOOLEAN                 AdrExists;
@@ -282,50 +286,35 @@ MtMethodAnalysisWalkBegin (
         Next = Next->Asl.Next;
 
         NextType = Next->Asl.Child;
-        while (NextType)
-        {
-            /* Get and map each of the ReturnTypes */
 
-            MethodInfo->ValidReturnTypes |= AnMapObjTypeToBtype (NextType);
-            NextType->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG;
-            NextType = NextType->Asl.Next;
-        }
+        MethodInfo->ValidReturnTypes = MtProcessTypeOp (NextType);
 
         /* Get the ParameterType node */
 
         Next = Next->Asl.Next;
 
         NextType = Next->Asl.Child;
-        while (NextType)
+        if (!NextType)
         {
-            if (NextType->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG)
-            {
-                NextParamType = NextType->Asl.Child;
-                while (NextParamType)
-                {
-                    MethodInfo->ValidArgTypes[ActualArgs] |=
-                        AnMapObjTypeToBtype (NextParamType);
-
-                    NextParamType->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG;
-                    NextParamType = NextParamType->Asl.Next;
-                }
-            }
-            else
-            {
-                MethodInfo->ValidArgTypes[ActualArgs] =
-                    AnMapObjTypeToBtype (NextType);
-
-                NextType->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG;
-                ActualArgs++;
-            }
-
-            NextType = NextType->Asl.Next;
+            /*
+             * The optional parameter types list was omitted  at the source
+             * level. Use the Argument count parameter instead.
+             */
+            ActualArgs = MethodInfo->NumArguments;
         }
+        else
+        {
+            ActualArgs = MtProcessParameterTypeList (NextType,
+                MethodInfo->ValidArgTypes);
+        }
 
         if ((MethodInfo->NumArguments) &&
             (MethodInfo->NumArguments != ActualArgs))
         {
-            /* error: Param list did not match number of args */
+            sprintf (AslGbl_MsgBuffer,
+                "Length = %u", ActualArgs);
+            AslError (ASL_ERROR, ASL_MSG_ARG_COUNT_MISMATCH,
+                Op->Asl.Child->Asl.Next, AslGbl_MsgBuffer);
         }
 
         /* Allow numarguments == 0 for Function() */
@@ -576,6 +565,8 @@ MtMethodAnalysisWalkBegin (
             AslError (ASL_ERROR, ASL_MSG_RESERVED_USE,
                 Op, Op->Asl.ExternalName);
         }
+
+        MtCheckStaticOperationRegionInMethod (Op);
         break;
 
     case PARSEOP_NAME:
@@ -630,6 +621,71 @@ MtMethodAnalysisWalkBegin (
 
 /*******************************************************************************
  *
+ * FUNCTION:    MtProcessTypeOp
+ *
+ * PARAMETERS:  Op                  - Op representing a btype
+ *
+ * RETURN:      Btype represented by Op
+ *
+ * DESCRIPTION: Process a parse object that represents single parameter type or
+ *              a return type in method, function, and external declarations.
+ *
+ ******************************************************************************/
+
+UINT32
+MtProcessTypeOp (
+    ACPI_PARSE_OBJECT       *TypeOp)
+{
+    UINT32                  Btype = ACPI_BTYPE_ANY;
+
+
+    while (TypeOp)
+    {
+        Btype |= AnMapObjTypeToBtype (TypeOp);
+        TypeOp->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG;
+        TypeOp = TypeOp->Asl.Next;
+    }
+
+    return (Btype);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    MtProcessParameterTypeList
+ *
+ * PARAMETERS:  Op                  - Op representing a btype
+ *

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-src-vendor mailing list