[1/2] ACPICA: Update to version 20180629

Message ID 20180629161128.6402-2-colin.king@canonical.com
State Accepted
Headers show
Series
  • ACPICA: Update to version 20180629
Related show

Commit Message

Colin King June 29, 2018, 4:11 p.m.
From: Colin Ian King <colin.king@canonical.com>

changes in this release of ACPICA are detailed at the following
link on the ACPICA developer mailing list:

https://lists.acpica.org/pipermail/devel/2018-June/001810.html

Signed-off-by: Colin Ian King <colin.king@canonical.com>
---
 src/acpica/source/common/dmextern.c           |  2 +-
 src/acpica/source/compiler/aslglobal.h        |  7 +-
 src/acpica/source/compiler/aslhelpers.y       | 32 ++++++++
 src/acpica/source/compiler/aslload.c          | 79 +------------------
 src/acpica/source/compiler/aslmain.c          | 15 +---
 src/acpica/source/compiler/aslmessages.c      |  3 +-
 src/acpica/source/compiler/aslmessages.h      |  1 +
 src/acpica/source/compiler/aslparser.y        |  2 +-
 src/acpica/source/compiler/aslprimaries.y     | 28 +++----
 src/acpica/source/compiler/asltransform.c     |  5 ++
 src/acpica/source/compiler/asltypes.y         |  4 +
 .../source/components/hardware/hwxfsleep.c    | 12 +--
 .../source/components/namespace/nsaccess.c    |  7 --
 .../source/components/namespace/nseval.c      |  4 +-
 .../source/components/namespace/nssearch.c    |  1 -
 src/acpica/source/include/aclocal.h           |  1 -
 src/acpica/source/include/acpixf.h            |  2 +-
 17 files changed, 80 insertions(+), 125 deletions(-)

Comments

ivanhu July 3, 2018, 9:28 a.m. | #1
On 06/30/2018 12:11 AM, Colin King wrote:
> From: Colin Ian King <colin.king@canonical.com>
>
> changes in this release of ACPICA are detailed at the following
> link on the ACPICA developer mailing list:
>
> https://lists.acpica.org/pipermail/devel/2018-June/001810.html
>
> Signed-off-by: Colin Ian King <colin.king@canonical.com>
> ---
>  src/acpica/source/common/dmextern.c           |  2 +-
>  src/acpica/source/compiler/aslglobal.h        |  7 +-
>  src/acpica/source/compiler/aslhelpers.y       | 32 ++++++++
>  src/acpica/source/compiler/aslload.c          | 79 +------------------
>  src/acpica/source/compiler/aslmain.c          | 15 +---
>  src/acpica/source/compiler/aslmessages.c      |  3 +-
>  src/acpica/source/compiler/aslmessages.h      |  1 +
>  src/acpica/source/compiler/aslparser.y        |  2 +-
>  src/acpica/source/compiler/aslprimaries.y     | 28 +++----
>  src/acpica/source/compiler/asltransform.c     |  5 ++
>  src/acpica/source/compiler/asltypes.y         |  4 +
>  .../source/components/hardware/hwxfsleep.c    | 12 +--
>  .../source/components/namespace/nsaccess.c    |  7 --
>  .../source/components/namespace/nseval.c      |  4 +-
>  .../source/components/namespace/nssearch.c    |  1 -
>  src/acpica/source/include/aclocal.h           |  1 -
>  src/acpica/source/include/acpixf.h            |  2 +-
>  17 files changed, 80 insertions(+), 125 deletions(-)
>
> diff --git a/src/acpica/source/common/dmextern.c b/src/acpica/source/common/dmextern.c
> index 8aab4807..df0e1b97 100644
> --- a/src/acpica/source/common/dmextern.c
> +++ b/src/acpica/source/common/dmextern.c
> @@ -538,7 +538,7 @@ AcpiDmGetExternalsFromFile (
>  
>      /* Each line defines a method */
>  
> -    while (fgets (StringBuffer, ASL_MSG_BUFFER_SIZE, ExternalRefFile))
> +    while (fgets (StringBuffer, ASL_STRING_BUFFER_SIZE, ExternalRefFile))
>      {
>          Token = strtok (StringBuffer, METHOD_SEPARATORS);   /* "External" */
>          if (!Token)
> diff --git a/src/acpica/source/compiler/aslglobal.h b/src/acpica/source/compiler/aslglobal.h
> index 93c51fae..e22f476f 100644
> --- a/src/acpica/source/compiler/aslglobal.h
> +++ b/src/acpica/source/compiler/aslglobal.h
> @@ -251,7 +251,8 @@ extern int                  AslCompilerdebug;
>  
>  
>  #define ASL_DEFAULT_LINE_BUFFER_SIZE    (1024 * 32) /* 32K */
> -#define ASL_MSG_BUFFER_SIZE             (1024 * 32) /* 32k */
> +#define ASL_MSG_BUFFER_SIZE             (1024 * 128) /* 128k */
> +#define ASL_STRING_BUFFER_SIZE          (1024 * 32) /* 32k */
>  #define ASL_MAX_DISABLED_MESSAGES       32
>  #define ASL_MAX_EXPECTED_MESSAGES       32
>  #define HEX_TABLE_LINE_SIZE             8
> @@ -438,8 +439,8 @@ ASL_EXTERN UINT8                    AslGbl_NamespaceEvent;
>  
>  ASL_EXTERN UINT8                    Gbl_AmlBuffer[HEX_LISTING_LINE_SIZE];
>  ASL_EXTERN char                     MsgBuffer[ASL_MSG_BUFFER_SIZE];
> -ASL_EXTERN char                     StringBuffer[ASL_MSG_BUFFER_SIZE];
> -ASL_EXTERN char                     StringBuffer2[ASL_MSG_BUFFER_SIZE];
> +ASL_EXTERN char                     StringBuffer[ASL_STRING_BUFFER_SIZE];
> +ASL_EXTERN char                     StringBuffer2[ASL_STRING_BUFFER_SIZE];
>  ASL_EXTERN UINT32                   Gbl_DisabledMessages[ASL_MAX_DISABLED_MESSAGES];
>  ASL_EXTERN ASL_EXPECTED_MESSAGE     Gbl_ExpectedMessages[ASL_MAX_EXPECTED_MESSAGES];
>  
> diff --git a/src/acpica/source/compiler/aslhelpers.y b/src/acpica/source/compiler/aslhelpers.y
> index bb9ff625..3a680a81 100644
> --- a/src/acpica/source/compiler/aslhelpers.y
> +++ b/src/acpica/source/compiler/aslhelpers.y
> @@ -183,6 +183,14 @@ OptionalAccessSize
>      | ',' ByteConstExpr             {$$ = $2;}
>      ;
>  
> +OptionalAccessTypeKeyword   /* Default: AnyAcc */
> +    :                               {$$ = TrCreateLeafOp (
> +                                        PARSEOP_ACCESSTYPE_ANY);}
> +    | ','                           {$$ = TrCreateLeafOp (
> +                                        PARSEOP_ACCESSTYPE_ANY);}
> +    | ',' AccessTypeKeyword         {$$ = $2;}
> +    ;
> +
>  OptionalAddressingMode
>      : ','                           {$$ = NULL;}
>      | ',' AddressingModeKeyword     {$$ = $2;}
> @@ -252,6 +260,14 @@ OptionalListString
>      | ',' TermArg                   {$$ = $2;}
>      ;
>  
> +OptionalLockRuleKeyword     /* Default: NoLock */
> +    :                               {$$ = TrCreateLeafOp (
> +                                        PARSEOP_LOCKRULE_NOLOCK);}
> +    | ','                           {$$ = TrCreateLeafOp (
> +                                        PARSEOP_LOCKRULE_NOLOCK);}
> +    | ',' LockRuleKeyword           {$$ = $2;}
> +    ;
> +
>  OptionalMaxType
>      : ','                           {$$ = NULL;}
>      | ',' MaxKeyword                {$$ = $2;}
> @@ -366,6 +382,14 @@ OptionalStringData
>      | ',' StringData                {$$ = $2;}
>      ;
>  
> +OptionalSyncLevel           /* Default: 0 */
> +    :                               {$$ = TrCreateValuedLeafOp (
> +                                        PARSEOP_BYTECONST, 0);}
> +    | ','                           {$$ = TrCreateValuedLeafOp (
> +                                        PARSEOP_BYTECONST, 0);}
> +    | ',' ByteConstExpr             {$$ = $2;}
> +    ;
> +
>  OptionalTranslationType_Last
>      :                               {$$ = NULL;}
>      | ','                           {$$ = NULL;}
> @@ -384,6 +408,14 @@ OptionalType_Last
>      | ',' TypeKeyword               {$$ = $2;}
>      ;
>  
> +OptionalUpdateRuleKeyword   /* Default: Preserve */
> +    :                               {$$ = TrCreateLeafOp (
> +                                        PARSEOP_UPDATERULE_PRESERVE);}
> +    | ','                           {$$ = TrCreateLeafOp (
> +                                        PARSEOP_UPDATERULE_PRESERVE);}
> +    | ',' UpdateRuleKeyword         {$$ = $2;}
> +    ;
> +
>  OptionalWireMode
>      : ','                           {$$ = NULL;}
>      | ',' WireModeKeyword           {$$ = $2;}
> diff --git a/src/acpica/source/compiler/aslload.c b/src/acpica/source/compiler/aslload.c
> index a57ba5e0..95fea9cd 100644
> --- a/src/acpica/source/compiler/aslload.c
> +++ b/src/acpica/source/compiler/aslload.c
> @@ -321,8 +321,7 @@ LdLoadFieldElements (
>                      return (Status);
>                  }
>                  else if (Status == AE_ALREADY_EXISTS &&
> -                    (Node->Flags & ANOBJ_IS_EXTERNAL) &&
> -                    Node->OwnerId != WalkState->OwnerId)
> +                    (Node->Flags & ANOBJ_IS_EXTERNAL))
>                  {
>                      Node->Type = (UINT8) ACPI_TYPE_LOCAL_REGION_FIELD;
>                  }
> @@ -474,7 +473,6 @@ LdNamespace1Begin (
>      ACPI_PARSE_OBJECT       *Arg;
>      UINT32                  i;
>      BOOLEAN                 ForceNewScope = FALSE;
> -    ACPI_OWNER_ID           OwnerId = 0;
>      const ACPI_OPCODE_INFO  *OpInfo;
>      ACPI_PARSE_OBJECT       *ParentOp;
>  
> @@ -485,23 +483,6 @@ LdNamespace1Begin (
>      ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op %p [%s]\n",
>          Op, Op->Asl.ParseOpName));
>  
> -    if (Op->Asl.ParseOpcode == PARSEOP_DEFINITION_BLOCK)
> -    {
> -        /*
> -         * Allocate an OwnerId for this block. This helps identify the owners
> -         * of each namespace node. This is used in determining whether if
> -         * certain external declarations cause redefinition errors.
> -         */
> -        Status = AcpiUtAllocateOwnerId (&OwnerId);
> -        WalkState->OwnerId = OwnerId;
> -        if (ACPI_FAILURE (Status))
> -        {
> -            AslCoreSubsystemError (Op, Status,
> -                "Failure to allocate owner ID to this definition block.", FALSE);
> -            return_ACPI_STATUS (Status);
> -        }
> -    }
> -
>      /*
>       * We are only interested in opcodes that have an associated name
>       * (or multiple names)
> @@ -877,9 +858,7 @@ LdNamespace1Begin (
>              {
>                  /*
>                   * Allow one create on an object or segment that was
> -                 * previously declared External only if WalkState->OwnerId and
> -                 * Node->OwnerId are different (meaning that the current WalkState
> -                 * and the Node are in different tables).
> +                 * previously declared External
>                   */
>                  Node->Flags &= ~ANOBJ_IS_EXTERNAL;
>                  Node->Type = (UINT8) ObjectType;
> @@ -896,18 +875,6 @@ LdNamespace1Begin (
>                  }
>  
>                  Status = AE_OK;
> -
> -                if (Node->OwnerId == WalkState->OwnerId &&
> -                    !(Node->Flags & IMPLICIT_EXTERNAL))
> -                {
> -                    AslDualParseOpError (ASL_WARNING, ASL_MSG_EXTERN_COLLISION, Op,
> -                        Op->Asl.ExternalName, ASL_MSG_EXTERN_FOUND_HERE, Node->Op,
> -                        Node->Op->Asl.ExternalName);
> -                }
> -                if (Node->Flags & IMPLICIT_EXTERNAL)
> -                {
> -                    Node->Flags &= ~IMPLICIT_EXTERNAL;
> -                }
>              }
>              else if (!(Node->Flags & ANOBJ_IS_EXTERNAL) &&
>                       (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL))
> @@ -915,53 +882,15 @@ LdNamespace1Begin (
>                  /*
>                   * 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. However,
> -                 * do not allow name declaration and an external declaration
> -                 * within the same table. This is considered a re-declaration.
> +                 * blocks that refer to each other in the same file.
>                   */
>                  Status = AE_OK;
> -
> -                if (Node->OwnerId == WalkState->OwnerId)
> -                {
> -                    AslDualParseOpError (ASL_WARNING, ASL_MSG_EXTERN_COLLISION, Op,
> -                        Op->Asl.ExternalName, ASL_MSG_EXTERN_FOUND_HERE, Node->Op,
> -                        Node->Op->Asl.ExternalName);
> -                }
>              }
>              else if ((Node->Flags & ANOBJ_IS_EXTERNAL) &&
>                       (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL) &&
>                       (ObjectType == ACPI_TYPE_ANY))
>              {
> -                /*
> -                 * Allow update of externals of unknown type.
> -                 * In the case that multiple definition blocks are being
> -                 * parsed, updating the OwnerId allows enables subsequent calls
> -                 * of this method to understand which table the most recent
> -                 * external declaration was seen. Without this OwnerId update,
> -                 * code like the following is allowed to compile:
> -                 *
> -                 * DefinitionBlock("externtest.aml", "DSDT", 0x02, "Intel", "Many", 0x00000001)
> -                 * {
> -                 *     External(ERRS,methodobj)
> -                 *     Method (MAIN)
> -                 *     {
> -                 *         Name(NUM2, 0)
> -                 *         ERRS(1,2,3)
> -                 *     }
> -                 * }
> -                 *
> -                 * DefinitionBlock("externtest.aml", "SSDT", 0x02, "Intel", "Many", 0x00000001)
> -                 * {
> -                 *     if (0)
> -                 *     {
> -                 *         External(ERRS,methodobj)
> -                 *     }
> -                 *     Method (ERRS,3)
> -                 *     {}
> -                 *
> -                 * }
> -                 */
> -                Node->OwnerId = WalkState->OwnerId;
> +                /* Allow update of externals of unknown type. */
>  
>                  if (AcpiNsOpensScope (ActualObjectType))
>                  {
> diff --git a/src/acpica/source/compiler/aslmain.c b/src/acpica/source/compiler/aslmain.c
> index 6827d1e6..227e6f31 100644
> --- a/src/acpica/source/compiler/aslmain.c
> +++ b/src/acpica/source/compiler/aslmain.c
> @@ -208,7 +208,6 @@ main (
>  
>  
>      signal (SIGINT, AslSignalHandler);
> -    signal (SIGSEGV, AslSignalHandler);
>  
>      /*
>       * Big-endian machines are not currently supported. ACPI tables must
> @@ -306,8 +305,7 @@ CleanupAndExit:
>   *
>   * DESCRIPTION: Signal interrupt handler. Delete any intermediate files and
>   *              any output files that may be left in an indeterminate state.
> - *              Currently handles SIGINT (control-c) and SIGSEGV (segmentation
> - *              fault).
> + *              Currently handles SIGINT (control-c).
>   *
>   *****************************************************************************/
>  
> @@ -329,17 +327,10 @@ AslSignalHandler (
>          printf ("\n" ASL_PREFIX "<Control-C>\n");
>          break;
>  
> -    case SIGSEGV:
> -
> -        /* Even on a seg fault, we will try to delete any partial files */
> -
> -        printf (ASL_PREFIX "Segmentation Fault\n");
> -        break;
> -
>      default:
>  
> -        printf (ASL_PREFIX "Unknown interrupt signal (%u), ignoring\n", Sig);
> -        return;
> +        printf (ASL_PREFIX "Unknown interrupt signal (%u)\n", Sig);
> +        break;
>      }
>  
>      /*
> diff --git a/src/acpica/source/compiler/aslmessages.c b/src/acpica/source/compiler/aslmessages.c
> index 7f5cde73..b9e9f801 100644
> --- a/src/acpica/source/compiler/aslmessages.c
> +++ b/src/acpica/source/compiler/aslmessages.c
> @@ -356,7 +356,8 @@ const char                      *AslCompilerMsgs [] =
>  /*    ASL_MSG_EXTERN_COLLISION */           "A name cannot be defined and declared external in the same table",
>  /*    ASL_MSG_FOUND_HERE_EXTERN */          "Remove one of the declarations indicated above or below:",
>  /*    ASL_MSG_OEM_TABLE_ID */               "Invalid OEM Table ID",
> -/*    ASL_MSG_OEM_ID */                     "Invalid OEM ID"
> +/*    ASL_MSG_OEM_ID */                     "Invalid OEM ID",
> +/*    ASL_MSG_UNLOAD */                     "Unload is not supported by all operating systems"
>  };
>  
>  /* Table compiler */
> diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h
> index 18e81445..dcd2aa0d 100644
> --- a/src/acpica/source/compiler/aslmessages.h
> +++ b/src/acpica/source/compiler/aslmessages.h
> @@ -359,6 +359,7 @@ typedef enum
>      ASL_MSG_EXTERN_FOUND_HERE,
>      ASL_MSG_OEM_TABLE_ID,
>      ASL_MSG_OEM_ID,
> +    ASL_MSG_UNLOAD,
>  
>      /* These messages are used by the Data Table compiler only */
>  
> diff --git a/src/acpica/source/compiler/aslparser.y b/src/acpica/source/compiler/aslparser.y
> index 38c033d5..5ba4d4ab 100644
> --- a/src/acpica/source/compiler/aslparser.y
> +++ b/src/acpica/source/compiler/aslparser.y
> @@ -208,7 +208,7 @@ AslLocalAllocate (
>   * These shift/reduce conflicts are expected. There should be zero
>   * reduce/reduce conflicts.
>   */
> -%expect 118
> +%expect 124
>  
>  /*! [Begin] no source code translation */
>  
> diff --git a/src/acpica/source/compiler/aslprimaries.y b/src/acpica/source/compiler/aslprimaries.y
> index b131f2a9..e2faf9a9 100644
> --- a/src/acpica/source/compiler/aslprimaries.y
> +++ b/src/acpica/source/compiler/aslprimaries.y
> @@ -235,12 +235,12 @@ BankFieldTerm
>          NameString
>          NameStringItem
>          TermArgItem
> -        ',' AccessTypeKeyword
> -        ',' LockRuleKeyword
> -        ',' UpdateRuleKeyword
> +        OptionalAccessTypeKeyword
> +        OptionalLockRuleKeyword
> +        OptionalUpdateRuleKeyword
>          PARSEOP_CLOSE_PAREN '{'
>              FieldUnitList '}'       {$$ = TrLinkOpChildren ($<n>3,7,
> -                                        $4,$5,$6,$8,$10,$12,$15);}
> +                                        $4,$5,$6,$7,$8,$9,$12);}
>      | PARSEOP_BANKFIELD
>          PARSEOP_OPEN_PAREN
>          error PARSEOP_CLOSE_PAREN
> @@ -579,11 +579,11 @@ FieldTerm
>      : PARSEOP_FIELD
>          PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafOp (PARSEOP_FIELD);}
>          NameString
> -        ',' AccessTypeKeyword
> -        ',' LockRuleKeyword
> -        ',' UpdateRuleKeyword
> +        OptionalAccessTypeKeyword
> +        OptionalLockRuleKeyword
> +        OptionalUpdateRuleKeyword
>          PARSEOP_CLOSE_PAREN '{'
> -            FieldUnitList '}'       {$$ = TrLinkOpChildren ($<n>3,5,$4,$6,$8,$10,$13);}
> +            FieldUnitList '}'       {$$ = TrLinkOpChildren ($<n>3,5,$4,$5,$6,$7,$10);}
>      | PARSEOP_FIELD
>          PARSEOP_OPEN_PAREN
>          error PARSEOP_CLOSE_PAREN
> @@ -711,11 +711,11 @@ IndexFieldTerm
>          PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafOp (PARSEOP_INDEXFIELD);}
>          NameString
>          NameStringItem
> -        ',' AccessTypeKeyword
> -        ',' LockRuleKeyword
> -        ',' UpdateRuleKeyword
> +        OptionalAccessTypeKeyword
> +        OptionalLockRuleKeyword
> +        OptionalUpdateRuleKeyword
>          PARSEOP_CLOSE_PAREN '{'
> -            FieldUnitList '}'       {$$ = TrLinkOpChildren ($<n>3,6,$4,$5,$7,$9,$11,$14);}
> +            FieldUnitList '}'       {$$ = TrLinkOpChildren ($<n>3,6,$4,$5,$6,$7,$8,$11);}
>      | PARSEOP_INDEXFIELD
>          PARSEOP_OPEN_PAREN
>          error PARSEOP_CLOSE_PAREN
> @@ -946,9 +946,9 @@ MutexTerm
>      : PARSEOP_MUTEX
>          PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafOp (PARSEOP_MUTEX);}
>          NameString
> -        ',' ByteConstExpr
> +        OptionalSyncLevel
>          PARSEOP_CLOSE_PAREN         {$$ = TrLinkOpChildren ($<n>3,2,
> -                                        TrSetOpFlags ($4, OP_IS_NAME_DECLARATION),$6);}
> +                                        TrSetOpFlags ($4, OP_IS_NAME_DECLARATION),$5);}
>      | PARSEOP_MUTEX
>          PARSEOP_OPEN_PAREN
>          error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
> diff --git a/src/acpica/source/compiler/asltransform.c b/src/acpica/source/compiler/asltransform.c
> index c74499ea..559b4f8f 100644
> --- a/src/acpica/source/compiler/asltransform.c
> +++ b/src/acpica/source/compiler/asltransform.c
> @@ -496,6 +496,11 @@ TrTransformSubtree (
>          Op->Asl.Value.String = "\\";
>          break;
>  
> +    case PARSEOP_UNLOAD:
> +
> +        AslError (ASL_WARNING, ASL_MSG_UNLOAD, Op, NULL);
> +        break;
> +
>      default:
>  
>          /* Nothing to do here for other opcodes */
> diff --git a/src/acpica/source/compiler/asltypes.y b/src/acpica/source/compiler/asltypes.y
> index 361d476f..4112969d 100644
> --- a/src/acpica/source/compiler/asltypes.y
> +++ b/src/acpica/source/compiler/asltypes.y
> @@ -461,6 +461,7 @@ NoEcho('
>  %type <n> TermArgItem
>  
>  %type <n> OptionalAccessSize
> +%type <n> OptionalAccessTypeKeyword
>  %type <n> OptionalAddressingMode
>  %type <n> OptionalAddressRange
>  %type <n> OptionalBitsPerByte
> @@ -475,6 +476,7 @@ NoEcho('
>  %type <n> OptionalFlowControl
>  %type <n> OptionalIoRestriction
>  %type <n> OptionalListString
> +%type <n> OptionalLockRuleKeyword
>  %type <n> OptionalMaxType
>  %type <n> OptionalMemType
>  %type <n> OptionalMinType
> @@ -500,10 +502,12 @@ NoEcho('
>  %type <n> OptionalSlaveMode
>  %type <n> OptionalStopBits
>  %type <n> OptionalStringData
> +%type <n> OptionalSyncLevel
>  %type <n> OptionalTermArg
>  %type <n> OptionalTranslationType_Last
>  %type <n> OptionalType
>  %type <n> OptionalType_Last
> +%type <n> OptionalUpdateRuleKeyword
>  %type <n> OptionalWireMode
>  %type <n> OptionalWordConst
>  %type <n> OptionalWordConstExpr
> diff --git a/src/acpica/source/components/hardware/hwxfsleep.c b/src/acpica/source/components/hardware/hwxfsleep.c
> index 8ebb8c1d..b2f856c5 100644
> --- a/src/acpica/source/components/hardware/hwxfsleep.c
> +++ b/src/acpica/source/components/hardware/hwxfsleep.c
> @@ -184,17 +184,17 @@ AcpiHwSleepDispatch (
>  
>  static ACPI_SLEEP_FUNCTIONS         AcpiSleepDispatch[] =
>  {
> -    {ACPI_STRUCT_INIT (legacy_function,
> +    {ACPI_STRUCT_INIT (LegacyFunction,
>                         ACPI_HW_OPTIONAL_FUNCTION (AcpiHwLegacySleep)),
> -     ACPI_STRUCT_INIT (extended_function,
> +     ACPI_STRUCT_INIT (ExtendedFunction,
>                         AcpiHwExtendedSleep) },
> -    {ACPI_STRUCT_INIT (legacy_function,
> +    {ACPI_STRUCT_INIT (LegacyFunction,
>                         ACPI_HW_OPTIONAL_FUNCTION (AcpiHwLegacyWakePrep)),
> -     ACPI_STRUCT_INIT (extended_function,
> +     ACPI_STRUCT_INIT (ExtendedFunction,
>                         AcpiHwExtendedWakePrep) },
> -    {ACPI_STRUCT_INIT (legacy_function,
> +    {ACPI_STRUCT_INIT (Legacy_function,
>                         ACPI_HW_OPTIONAL_FUNCTION (AcpiHwLegacyWake)),
> -     ACPI_STRUCT_INIT (extended_function,
> +     ACPI_STRUCT_INIT (ExtendedFunction,
>                         AcpiHwExtendedWake) }
>  };
>  
> diff --git a/src/acpica/source/components/namespace/nsaccess.c b/src/acpica/source/components/namespace/nsaccess.c
> index d084c6fe..bf530d48 100644
> --- a/src/acpica/source/components/namespace/nsaccess.c
> +++ b/src/acpica/source/components/namespace/nsaccess.c
> @@ -781,13 +781,6 @@ AcpiNsLookup (
>  
>          else
>          {
> -#ifdef ACPI_ASL_COMPILER
> -            if (!AcpiGbl_DisasmFlag && (ThisNode->Flags & ANOBJ_IS_EXTERNAL))
> -            {
> -                ThisNode->Flags &= ~IMPLICIT_EXTERNAL;
> -            }
> -#endif
> -
>              /*
>               * Sanity typecheck of the target object:
>               *
> diff --git a/src/acpica/source/components/namespace/nseval.c b/src/acpica/source/components/namespace/nseval.c
> index 2a7eb8f5..8262d992 100644
> --- a/src/acpica/source/components/namespace/nseval.c
> +++ b/src/acpica/source/components/namespace/nseval.c
> @@ -429,11 +429,11 @@ AcpiNsEvaluate (
>  
>          Status = AE_OK;
>      }
> -    else if (ACPI_FAILURE(Status)) 
> +    else if (ACPI_FAILURE(Status))
>      {
>          /* If ReturnObject exists, delete it */
>  
> -        if (Info->ReturnObject) 
> +        if (Info->ReturnObject)
>          {
>              AcpiUtRemoveReference (Info->ReturnObject);
>              Info->ReturnObject = NULL;
> diff --git a/src/acpica/source/components/namespace/nssearch.c b/src/acpica/source/components/namespace/nssearch.c
> index 02fd8b40..dab4b570 100644
> --- a/src/acpica/source/components/namespace/nssearch.c
> +++ b/src/acpica/source/components/namespace/nssearch.c
> @@ -545,7 +545,6 @@ AcpiNsSearchAndEnter (
>          (WalkState && WalkState->Opcode == AML_SCOPE_OP))
>      {
>          NewNode->Flags |= ANOBJ_IS_EXTERNAL;
> -        NewNode->Flags |= IMPLICIT_EXTERNAL;
>      }
>  #endif
>  
> diff --git a/src/acpica/source/include/aclocal.h b/src/acpica/source/include/aclocal.h
> index f487a4ec..58c09379 100644
> --- a/src/acpica/source/include/aclocal.h
> +++ b/src/acpica/source/include/aclocal.h
> @@ -328,7 +328,6 @@ typedef struct acpi_namespace_node
>  #define ANOBJ_EVALUATED                 0x20    /* Set on first evaluation of node */
>  #define ANOBJ_ALLOCATED_BUFFER          0x40    /* Method AML buffer is dynamic (InstallMethod) */
>  
> -#define IMPLICIT_EXTERNAL               0x02    /* iASL only: This object created implicitly via External */
>  #define ANOBJ_IS_EXTERNAL               0x08    /* iASL only: This object created via External() */
>  #define ANOBJ_METHOD_NO_RETVAL          0x10    /* iASL only: Method has no return value */
>  #define ANOBJ_METHOD_SOME_NO_RETVAL     0x20    /* iASL only: Method has at least one return value */
> diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
> index cfe83791..110b375b 100644
> --- a/src/acpica/source/include/acpixf.h
> +++ b/src/acpica/source/include/acpixf.h
> @@ -154,7 +154,7 @@
>  
>  /* Current ACPICA subsystem version in YYYYMMDD format */
>  
> -#define ACPI_CA_VERSION                 0x20180531
> +#define ACPI_CA_VERSION                 0x20180629
>  
>  #include "acconfig.h"
>  #include "actypes.h"
Acked-by: Ivan Hu <ivan.hu@canonical.com>
Alex Hung July 3, 2018, 9:27 p.m. | #2
On 2018-06-29 09:11 AM, Colin King wrote:
> From: Colin Ian King <colin.king@canonical.com>
> 
> changes in this release of ACPICA are detailed at the following
> link on the ACPICA developer mailing list:
> 
> https://lists.acpica.org/pipermail/devel/2018-June/001810.html
> 
> Signed-off-by: Colin Ian King <colin.king@canonical.com>
> ---
>   src/acpica/source/common/dmextern.c           |  2 +-
>   src/acpica/source/compiler/aslglobal.h        |  7 +-
>   src/acpica/source/compiler/aslhelpers.y       | 32 ++++++++
>   src/acpica/source/compiler/aslload.c          | 79 +------------------
>   src/acpica/source/compiler/aslmain.c          | 15 +---
>   src/acpica/source/compiler/aslmessages.c      |  3 +-
>   src/acpica/source/compiler/aslmessages.h      |  1 +
>   src/acpica/source/compiler/aslparser.y        |  2 +-
>   src/acpica/source/compiler/aslprimaries.y     | 28 +++----
>   src/acpica/source/compiler/asltransform.c     |  5 ++
>   src/acpica/source/compiler/asltypes.y         |  4 +
>   .../source/components/hardware/hwxfsleep.c    | 12 +--
>   .../source/components/namespace/nsaccess.c    |  7 --
>   .../source/components/namespace/nseval.c      |  4 +-
>   .../source/components/namespace/nssearch.c    |  1 -
>   src/acpica/source/include/aclocal.h           |  1 -
>   src/acpica/source/include/acpixf.h            |  2 +-
>   17 files changed, 80 insertions(+), 125 deletions(-)
> 
> diff --git a/src/acpica/source/common/dmextern.c b/src/acpica/source/common/dmextern.c
> index 8aab4807..df0e1b97 100644
> --- a/src/acpica/source/common/dmextern.c
> +++ b/src/acpica/source/common/dmextern.c
> @@ -538,7 +538,7 @@ AcpiDmGetExternalsFromFile (
>   
>       /* Each line defines a method */
>   
> -    while (fgets (StringBuffer, ASL_MSG_BUFFER_SIZE, ExternalRefFile))
> +    while (fgets (StringBuffer, ASL_STRING_BUFFER_SIZE, ExternalRefFile))
>       {
>           Token = strtok (StringBuffer, METHOD_SEPARATORS);   /* "External" */
>           if (!Token)
> diff --git a/src/acpica/source/compiler/aslglobal.h b/src/acpica/source/compiler/aslglobal.h
> index 93c51fae..e22f476f 100644
> --- a/src/acpica/source/compiler/aslglobal.h
> +++ b/src/acpica/source/compiler/aslglobal.h
> @@ -251,7 +251,8 @@ extern int                  AslCompilerdebug;
>   
>   
>   #define ASL_DEFAULT_LINE_BUFFER_SIZE    (1024 * 32) /* 32K */
> -#define ASL_MSG_BUFFER_SIZE             (1024 * 32) /* 32k */
> +#define ASL_MSG_BUFFER_SIZE             (1024 * 128) /* 128k */
> +#define ASL_STRING_BUFFER_SIZE          (1024 * 32) /* 32k */
>   #define ASL_MAX_DISABLED_MESSAGES       32
>   #define ASL_MAX_EXPECTED_MESSAGES       32
>   #define HEX_TABLE_LINE_SIZE             8
> @@ -438,8 +439,8 @@ ASL_EXTERN UINT8                    AslGbl_NamespaceEvent;
>   
>   ASL_EXTERN UINT8                    Gbl_AmlBuffer[HEX_LISTING_LINE_SIZE];
>   ASL_EXTERN char                     MsgBuffer[ASL_MSG_BUFFER_SIZE];
> -ASL_EXTERN char                     StringBuffer[ASL_MSG_BUFFER_SIZE];
> -ASL_EXTERN char                     StringBuffer2[ASL_MSG_BUFFER_SIZE];
> +ASL_EXTERN char                     StringBuffer[ASL_STRING_BUFFER_SIZE];
> +ASL_EXTERN char                     StringBuffer2[ASL_STRING_BUFFER_SIZE];
>   ASL_EXTERN UINT32                   Gbl_DisabledMessages[ASL_MAX_DISABLED_MESSAGES];
>   ASL_EXTERN ASL_EXPECTED_MESSAGE     Gbl_ExpectedMessages[ASL_MAX_EXPECTED_MESSAGES];
>   
> diff --git a/src/acpica/source/compiler/aslhelpers.y b/src/acpica/source/compiler/aslhelpers.y
> index bb9ff625..3a680a81 100644
> --- a/src/acpica/source/compiler/aslhelpers.y
> +++ b/src/acpica/source/compiler/aslhelpers.y
> @@ -183,6 +183,14 @@ OptionalAccessSize
>       | ',' ByteConstExpr             {$$ = $2;}
>       ;
>   
> +OptionalAccessTypeKeyword   /* Default: AnyAcc */
> +    :                               {$$ = TrCreateLeafOp (
> +                                        PARSEOP_ACCESSTYPE_ANY);}
> +    | ','                           {$$ = TrCreateLeafOp (
> +                                        PARSEOP_ACCESSTYPE_ANY);}
> +    | ',' AccessTypeKeyword         {$$ = $2;}
> +    ;
> +
>   OptionalAddressingMode
>       : ','                           {$$ = NULL;}
>       | ',' AddressingModeKeyword     {$$ = $2;}
> @@ -252,6 +260,14 @@ OptionalListString
>       | ',' TermArg                   {$$ = $2;}
>       ;
>   
> +OptionalLockRuleKeyword     /* Default: NoLock */
> +    :                               {$$ = TrCreateLeafOp (
> +                                        PARSEOP_LOCKRULE_NOLOCK);}
> +    | ','                           {$$ = TrCreateLeafOp (
> +                                        PARSEOP_LOCKRULE_NOLOCK);}
> +    | ',' LockRuleKeyword           {$$ = $2;}
> +    ;
> +
>   OptionalMaxType
>       : ','                           {$$ = NULL;}
>       | ',' MaxKeyword                {$$ = $2;}
> @@ -366,6 +382,14 @@ OptionalStringData
>       | ',' StringData                {$$ = $2;}
>       ;
>   
> +OptionalSyncLevel           /* Default: 0 */
> +    :                               {$$ = TrCreateValuedLeafOp (
> +                                        PARSEOP_BYTECONST, 0);}
> +    | ','                           {$$ = TrCreateValuedLeafOp (
> +                                        PARSEOP_BYTECONST, 0);}
> +    | ',' ByteConstExpr             {$$ = $2;}
> +    ;
> +
>   OptionalTranslationType_Last
>       :                               {$$ = NULL;}
>       | ','                           {$$ = NULL;}
> @@ -384,6 +408,14 @@ OptionalType_Last
>       | ',' TypeKeyword               {$$ = $2;}
>       ;
>   
> +OptionalUpdateRuleKeyword   /* Default: Preserve */
> +    :                               {$$ = TrCreateLeafOp (
> +                                        PARSEOP_UPDATERULE_PRESERVE);}
> +    | ','                           {$$ = TrCreateLeafOp (
> +                                        PARSEOP_UPDATERULE_PRESERVE);}
> +    | ',' UpdateRuleKeyword         {$$ = $2;}
> +    ;
> +
>   OptionalWireMode
>       : ','                           {$$ = NULL;}
>       | ',' WireModeKeyword           {$$ = $2;}
> diff --git a/src/acpica/source/compiler/aslload.c b/src/acpica/source/compiler/aslload.c
> index a57ba5e0..95fea9cd 100644
> --- a/src/acpica/source/compiler/aslload.c
> +++ b/src/acpica/source/compiler/aslload.c
> @@ -321,8 +321,7 @@ LdLoadFieldElements (
>                       return (Status);
>                   }
>                   else if (Status == AE_ALREADY_EXISTS &&
> -                    (Node->Flags & ANOBJ_IS_EXTERNAL) &&
> -                    Node->OwnerId != WalkState->OwnerId)
> +                    (Node->Flags & ANOBJ_IS_EXTERNAL))
>                   {
>                       Node->Type = (UINT8) ACPI_TYPE_LOCAL_REGION_FIELD;
>                   }
> @@ -474,7 +473,6 @@ LdNamespace1Begin (
>       ACPI_PARSE_OBJECT       *Arg;
>       UINT32                  i;
>       BOOLEAN                 ForceNewScope = FALSE;
> -    ACPI_OWNER_ID           OwnerId = 0;
>       const ACPI_OPCODE_INFO  *OpInfo;
>       ACPI_PARSE_OBJECT       *ParentOp;
>   
> @@ -485,23 +483,6 @@ LdNamespace1Begin (
>       ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op %p [%s]\n",
>           Op, Op->Asl.ParseOpName));
>   
> -    if (Op->Asl.ParseOpcode == PARSEOP_DEFINITION_BLOCK)
> -    {
> -        /*
> -         * Allocate an OwnerId for this block. This helps identify the owners
> -         * of each namespace node. This is used in determining whether if
> -         * certain external declarations cause redefinition errors.
> -         */
> -        Status = AcpiUtAllocateOwnerId (&OwnerId);
> -        WalkState->OwnerId = OwnerId;
> -        if (ACPI_FAILURE (Status))
> -        {
> -            AslCoreSubsystemError (Op, Status,
> -                "Failure to allocate owner ID to this definition block.", FALSE);
> -            return_ACPI_STATUS (Status);
> -        }
> -    }
> -
>       /*
>        * We are only interested in opcodes that have an associated name
>        * (or multiple names)
> @@ -877,9 +858,7 @@ LdNamespace1Begin (
>               {
>                   /*
>                    * Allow one create on an object or segment that was
> -                 * previously declared External only if WalkState->OwnerId and
> -                 * Node->OwnerId are different (meaning that the current WalkState
> -                 * and the Node are in different tables).
> +                 * previously declared External
>                    */
>                   Node->Flags &= ~ANOBJ_IS_EXTERNAL;
>                   Node->Type = (UINT8) ObjectType;
> @@ -896,18 +875,6 @@ LdNamespace1Begin (
>                   }
>   
>                   Status = AE_OK;
> -
> -                if (Node->OwnerId == WalkState->OwnerId &&
> -                    !(Node->Flags & IMPLICIT_EXTERNAL))
> -                {
> -                    AslDualParseOpError (ASL_WARNING, ASL_MSG_EXTERN_COLLISION, Op,
> -                        Op->Asl.ExternalName, ASL_MSG_EXTERN_FOUND_HERE, Node->Op,
> -                        Node->Op->Asl.ExternalName);
> -                }
> -                if (Node->Flags & IMPLICIT_EXTERNAL)
> -                {
> -                    Node->Flags &= ~IMPLICIT_EXTERNAL;
> -                }
>               }
>               else if (!(Node->Flags & ANOBJ_IS_EXTERNAL) &&
>                        (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL))
> @@ -915,53 +882,15 @@ LdNamespace1Begin (
>                   /*
>                    * 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. However,
> -                 * do not allow name declaration and an external declaration
> -                 * within the same table. This is considered a re-declaration.
> +                 * blocks that refer to each other in the same file.
>                    */
>                   Status = AE_OK;
> -
> -                if (Node->OwnerId == WalkState->OwnerId)
> -                {
> -                    AslDualParseOpError (ASL_WARNING, ASL_MSG_EXTERN_COLLISION, Op,
> -                        Op->Asl.ExternalName, ASL_MSG_EXTERN_FOUND_HERE, Node->Op,
> -                        Node->Op->Asl.ExternalName);
> -                }
>               }
>               else if ((Node->Flags & ANOBJ_IS_EXTERNAL) &&
>                        (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL) &&
>                        (ObjectType == ACPI_TYPE_ANY))
>               {
> -                /*
> -                 * Allow update of externals of unknown type.
> -                 * In the case that multiple definition blocks are being
> -                 * parsed, updating the OwnerId allows enables subsequent calls
> -                 * of this method to understand which table the most recent
> -                 * external declaration was seen. Without this OwnerId update,
> -                 * code like the following is allowed to compile:
> -                 *
> -                 * DefinitionBlock("externtest.aml", "DSDT", 0x02, "Intel", "Many", 0x00000001)
> -                 * {
> -                 *     External(ERRS,methodobj)
> -                 *     Method (MAIN)
> -                 *     {
> -                 *         Name(NUM2, 0)
> -                 *         ERRS(1,2,3)
> -                 *     }
> -                 * }
> -                 *
> -                 * DefinitionBlock("externtest.aml", "SSDT", 0x02, "Intel", "Many", 0x00000001)
> -                 * {
> -                 *     if (0)
> -                 *     {
> -                 *         External(ERRS,methodobj)
> -                 *     }
> -                 *     Method (ERRS,3)
> -                 *     {}
> -                 *
> -                 * }
> -                 */
> -                Node->OwnerId = WalkState->OwnerId;
> +                /* Allow update of externals of unknown type. */
>   
>                   if (AcpiNsOpensScope (ActualObjectType))
>                   {
> diff --git a/src/acpica/source/compiler/aslmain.c b/src/acpica/source/compiler/aslmain.c
> index 6827d1e6..227e6f31 100644
> --- a/src/acpica/source/compiler/aslmain.c
> +++ b/src/acpica/source/compiler/aslmain.c
> @@ -208,7 +208,6 @@ main (
>   
>   
>       signal (SIGINT, AslSignalHandler);
> -    signal (SIGSEGV, AslSignalHandler);
>   
>       /*
>        * Big-endian machines are not currently supported. ACPI tables must
> @@ -306,8 +305,7 @@ CleanupAndExit:
>    *
>    * DESCRIPTION: Signal interrupt handler. Delete any intermediate files and
>    *              any output files that may be left in an indeterminate state.
> - *              Currently handles SIGINT (control-c) and SIGSEGV (segmentation
> - *              fault).
> + *              Currently handles SIGINT (control-c).
>    *
>    *****************************************************************************/
>   
> @@ -329,17 +327,10 @@ AslSignalHandler (
>           printf ("\n" ASL_PREFIX "<Control-C>\n");
>           break;
>   
> -    case SIGSEGV:
> -
> -        /* Even on a seg fault, we will try to delete any partial files */
> -
> -        printf (ASL_PREFIX "Segmentation Fault\n");
> -        break;
> -
>       default:
>   
> -        printf (ASL_PREFIX "Unknown interrupt signal (%u), ignoring\n", Sig);
> -        return;
> +        printf (ASL_PREFIX "Unknown interrupt signal (%u)\n", Sig);
> +        break;
>       }
>   
>       /*
> diff --git a/src/acpica/source/compiler/aslmessages.c b/src/acpica/source/compiler/aslmessages.c
> index 7f5cde73..b9e9f801 100644
> --- a/src/acpica/source/compiler/aslmessages.c
> +++ b/src/acpica/source/compiler/aslmessages.c
> @@ -356,7 +356,8 @@ const char                      *AslCompilerMsgs [] =
>   /*    ASL_MSG_EXTERN_COLLISION */           "A name cannot be defined and declared external in the same table",
>   /*    ASL_MSG_FOUND_HERE_EXTERN */          "Remove one of the declarations indicated above or below:",
>   /*    ASL_MSG_OEM_TABLE_ID */               "Invalid OEM Table ID",
> -/*    ASL_MSG_OEM_ID */                     "Invalid OEM ID"
> +/*    ASL_MSG_OEM_ID */                     "Invalid OEM ID",
> +/*    ASL_MSG_UNLOAD */                     "Unload is not supported by all operating systems"
>   };
>   
>   /* Table compiler */
> diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h
> index 18e81445..dcd2aa0d 100644
> --- a/src/acpica/source/compiler/aslmessages.h
> +++ b/src/acpica/source/compiler/aslmessages.h
> @@ -359,6 +359,7 @@ typedef enum
>       ASL_MSG_EXTERN_FOUND_HERE,
>       ASL_MSG_OEM_TABLE_ID,
>       ASL_MSG_OEM_ID,
> +    ASL_MSG_UNLOAD,
>   
>       /* These messages are used by the Data Table compiler only */
>   
> diff --git a/src/acpica/source/compiler/aslparser.y b/src/acpica/source/compiler/aslparser.y
> index 38c033d5..5ba4d4ab 100644
> --- a/src/acpica/source/compiler/aslparser.y
> +++ b/src/acpica/source/compiler/aslparser.y
> @@ -208,7 +208,7 @@ AslLocalAllocate (
>    * These shift/reduce conflicts are expected. There should be zero
>    * reduce/reduce conflicts.
>    */
> -%expect 118
> +%expect 124
>   
>   /*! [Begin] no source code translation */
>   
> diff --git a/src/acpica/source/compiler/aslprimaries.y b/src/acpica/source/compiler/aslprimaries.y
> index b131f2a9..e2faf9a9 100644
> --- a/src/acpica/source/compiler/aslprimaries.y
> +++ b/src/acpica/source/compiler/aslprimaries.y
> @@ -235,12 +235,12 @@ BankFieldTerm
>           NameString
>           NameStringItem
>           TermArgItem
> -        ',' AccessTypeKeyword
> -        ',' LockRuleKeyword
> -        ',' UpdateRuleKeyword
> +        OptionalAccessTypeKeyword
> +        OptionalLockRuleKeyword
> +        OptionalUpdateRuleKeyword
>           PARSEOP_CLOSE_PAREN '{'
>               FieldUnitList '}'       {$$ = TrLinkOpChildren ($<n>3,7,
> -                                        $4,$5,$6,$8,$10,$12,$15);}
> +                                        $4,$5,$6,$7,$8,$9,$12);}
>       | PARSEOP_BANKFIELD
>           PARSEOP_OPEN_PAREN
>           error PARSEOP_CLOSE_PAREN
> @@ -579,11 +579,11 @@ FieldTerm
>       : PARSEOP_FIELD
>           PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafOp (PARSEOP_FIELD);}
>           NameString
> -        ',' AccessTypeKeyword
> -        ',' LockRuleKeyword
> -        ',' UpdateRuleKeyword
> +        OptionalAccessTypeKeyword
> +        OptionalLockRuleKeyword
> +        OptionalUpdateRuleKeyword
>           PARSEOP_CLOSE_PAREN '{'
> -            FieldUnitList '}'       {$$ = TrLinkOpChildren ($<n>3,5,$4,$6,$8,$10,$13);}
> +            FieldUnitList '}'       {$$ = TrLinkOpChildren ($<n>3,5,$4,$5,$6,$7,$10);}
>       | PARSEOP_FIELD
>           PARSEOP_OPEN_PAREN
>           error PARSEOP_CLOSE_PAREN
> @@ -711,11 +711,11 @@ IndexFieldTerm
>           PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafOp (PARSEOP_INDEXFIELD);}
>           NameString
>           NameStringItem
> -        ',' AccessTypeKeyword
> -        ',' LockRuleKeyword
> -        ',' UpdateRuleKeyword
> +        OptionalAccessTypeKeyword
> +        OptionalLockRuleKeyword
> +        OptionalUpdateRuleKeyword
>           PARSEOP_CLOSE_PAREN '{'
> -            FieldUnitList '}'       {$$ = TrLinkOpChildren ($<n>3,6,$4,$5,$7,$9,$11,$14);}
> +            FieldUnitList '}'       {$$ = TrLinkOpChildren ($<n>3,6,$4,$5,$6,$7,$8,$11);}
>       | PARSEOP_INDEXFIELD
>           PARSEOP_OPEN_PAREN
>           error PARSEOP_CLOSE_PAREN
> @@ -946,9 +946,9 @@ MutexTerm
>       : PARSEOP_MUTEX
>           PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafOp (PARSEOP_MUTEX);}
>           NameString
> -        ',' ByteConstExpr
> +        OptionalSyncLevel
>           PARSEOP_CLOSE_PAREN         {$$ = TrLinkOpChildren ($<n>3,2,
> -                                        TrSetOpFlags ($4, OP_IS_NAME_DECLARATION),$6);}
> +                                        TrSetOpFlags ($4, OP_IS_NAME_DECLARATION),$5);}
>       | PARSEOP_MUTEX
>           PARSEOP_OPEN_PAREN
>           error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
> diff --git a/src/acpica/source/compiler/asltransform.c b/src/acpica/source/compiler/asltransform.c
> index c74499ea..559b4f8f 100644
> --- a/src/acpica/source/compiler/asltransform.c
> +++ b/src/acpica/source/compiler/asltransform.c
> @@ -496,6 +496,11 @@ TrTransformSubtree (
>           Op->Asl.Value.String = "\\";
>           break;
>   
> +    case PARSEOP_UNLOAD:
> +
> +        AslError (ASL_WARNING, ASL_MSG_UNLOAD, Op, NULL);
> +        break;
> +
>       default:
>   
>           /* Nothing to do here for other opcodes */
> diff --git a/src/acpica/source/compiler/asltypes.y b/src/acpica/source/compiler/asltypes.y
> index 361d476f..4112969d 100644
> --- a/src/acpica/source/compiler/asltypes.y
> +++ b/src/acpica/source/compiler/asltypes.y
> @@ -461,6 +461,7 @@ NoEcho('
>   %type <n> TermArgItem
>   
>   %type <n> OptionalAccessSize
> +%type <n> OptionalAccessTypeKeyword
>   %type <n> OptionalAddressingMode
>   %type <n> OptionalAddressRange
>   %type <n> OptionalBitsPerByte
> @@ -475,6 +476,7 @@ NoEcho('
>   %type <n> OptionalFlowControl
>   %type <n> OptionalIoRestriction
>   %type <n> OptionalListString
> +%type <n> OptionalLockRuleKeyword
>   %type <n> OptionalMaxType
>   %type <n> OptionalMemType
>   %type <n> OptionalMinType
> @@ -500,10 +502,12 @@ NoEcho('
>   %type <n> OptionalSlaveMode
>   %type <n> OptionalStopBits
>   %type <n> OptionalStringData
> +%type <n> OptionalSyncLevel
>   %type <n> OptionalTermArg
>   %type <n> OptionalTranslationType_Last
>   %type <n> OptionalType
>   %type <n> OptionalType_Last
> +%type <n> OptionalUpdateRuleKeyword
>   %type <n> OptionalWireMode
>   %type <n> OptionalWordConst
>   %type <n> OptionalWordConstExpr
> diff --git a/src/acpica/source/components/hardware/hwxfsleep.c b/src/acpica/source/components/hardware/hwxfsleep.c
> index 8ebb8c1d..b2f856c5 100644
> --- a/src/acpica/source/components/hardware/hwxfsleep.c
> +++ b/src/acpica/source/components/hardware/hwxfsleep.c
> @@ -184,17 +184,17 @@ AcpiHwSleepDispatch (
>   
>   static ACPI_SLEEP_FUNCTIONS         AcpiSleepDispatch[] =
>   {
> -    {ACPI_STRUCT_INIT (legacy_function,
> +    {ACPI_STRUCT_INIT (LegacyFunction,
>                          ACPI_HW_OPTIONAL_FUNCTION (AcpiHwLegacySleep)),
> -     ACPI_STRUCT_INIT (extended_function,
> +     ACPI_STRUCT_INIT (ExtendedFunction,
>                          AcpiHwExtendedSleep) },
> -    {ACPI_STRUCT_INIT (legacy_function,
> +    {ACPI_STRUCT_INIT (LegacyFunction,
>                          ACPI_HW_OPTIONAL_FUNCTION (AcpiHwLegacyWakePrep)),
> -     ACPI_STRUCT_INIT (extended_function,
> +     ACPI_STRUCT_INIT (ExtendedFunction,
>                          AcpiHwExtendedWakePrep) },
> -    {ACPI_STRUCT_INIT (legacy_function,
> +    {ACPI_STRUCT_INIT (Legacy_function,
>                          ACPI_HW_OPTIONAL_FUNCTION (AcpiHwLegacyWake)),
> -     ACPI_STRUCT_INIT (extended_function,
> +     ACPI_STRUCT_INIT (ExtendedFunction,
>                          AcpiHwExtendedWake) }
>   };
>   
> diff --git a/src/acpica/source/components/namespace/nsaccess.c b/src/acpica/source/components/namespace/nsaccess.c
> index d084c6fe..bf530d48 100644
> --- a/src/acpica/source/components/namespace/nsaccess.c
> +++ b/src/acpica/source/components/namespace/nsaccess.c
> @@ -781,13 +781,6 @@ AcpiNsLookup (
>   
>           else
>           {
> -#ifdef ACPI_ASL_COMPILER
> -            if (!AcpiGbl_DisasmFlag && (ThisNode->Flags & ANOBJ_IS_EXTERNAL))
> -            {
> -                ThisNode->Flags &= ~IMPLICIT_EXTERNAL;
> -            }
> -#endif
> -
>               /*
>                * Sanity typecheck of the target object:
>                *
> diff --git a/src/acpica/source/components/namespace/nseval.c b/src/acpica/source/components/namespace/nseval.c
> index 2a7eb8f5..8262d992 100644
> --- a/src/acpica/source/components/namespace/nseval.c
> +++ b/src/acpica/source/components/namespace/nseval.c
> @@ -429,11 +429,11 @@ AcpiNsEvaluate (
>   
>           Status = AE_OK;
>       }
> -    else if (ACPI_FAILURE(Status))
> +    else if (ACPI_FAILURE(Status))
>       {
>           /* If ReturnObject exists, delete it */
>   
> -        if (Info->ReturnObject)
> +        if (Info->ReturnObject)
>           {
>               AcpiUtRemoveReference (Info->ReturnObject);
>               Info->ReturnObject = NULL;
> diff --git a/src/acpica/source/components/namespace/nssearch.c b/src/acpica/source/components/namespace/nssearch.c
> index 02fd8b40..dab4b570 100644
> --- a/src/acpica/source/components/namespace/nssearch.c
> +++ b/src/acpica/source/components/namespace/nssearch.c
> @@ -545,7 +545,6 @@ AcpiNsSearchAndEnter (
>           (WalkState && WalkState->Opcode == AML_SCOPE_OP))
>       {
>           NewNode->Flags |= ANOBJ_IS_EXTERNAL;
> -        NewNode->Flags |= IMPLICIT_EXTERNAL;
>       }
>   #endif
>   
> diff --git a/src/acpica/source/include/aclocal.h b/src/acpica/source/include/aclocal.h
> index f487a4ec..58c09379 100644
> --- a/src/acpica/source/include/aclocal.h
> +++ b/src/acpica/source/include/aclocal.h
> @@ -328,7 +328,6 @@ typedef struct acpi_namespace_node
>   #define ANOBJ_EVALUATED                 0x20    /* Set on first evaluation of node */
>   #define ANOBJ_ALLOCATED_BUFFER          0x40    /* Method AML buffer is dynamic (InstallMethod) */
>   
> -#define IMPLICIT_EXTERNAL               0x02    /* iASL only: This object created implicitly via External */
>   #define ANOBJ_IS_EXTERNAL               0x08    /* iASL only: This object created via External() */
>   #define ANOBJ_METHOD_NO_RETVAL          0x10    /* iASL only: Method has no return value */
>   #define ANOBJ_METHOD_SOME_NO_RETVAL     0x20    /* iASL only: Method has at least one return value */
> diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
> index cfe83791..110b375b 100644
> --- a/src/acpica/source/include/acpixf.h
> +++ b/src/acpica/source/include/acpixf.h
> @@ -154,7 +154,7 @@
>   
>   /* Current ACPICA subsystem version in YYYYMMDD format */
>   
> -#define ACPI_CA_VERSION                 0x20180531
> +#define ACPI_CA_VERSION                 0x20180629
>   
>   #include "acconfig.h"
>   #include "actypes.h"
> 


Acked-by: Alex Hung <alex.hung@canonical.com>

Patch

diff --git a/src/acpica/source/common/dmextern.c b/src/acpica/source/common/dmextern.c
index 8aab4807..df0e1b97 100644
--- a/src/acpica/source/common/dmextern.c
+++ b/src/acpica/source/common/dmextern.c
@@ -538,7 +538,7 @@  AcpiDmGetExternalsFromFile (
 
     /* Each line defines a method */
 
-    while (fgets (StringBuffer, ASL_MSG_BUFFER_SIZE, ExternalRefFile))
+    while (fgets (StringBuffer, ASL_STRING_BUFFER_SIZE, ExternalRefFile))
     {
         Token = strtok (StringBuffer, METHOD_SEPARATORS);   /* "External" */
         if (!Token)
diff --git a/src/acpica/source/compiler/aslglobal.h b/src/acpica/source/compiler/aslglobal.h
index 93c51fae..e22f476f 100644
--- a/src/acpica/source/compiler/aslglobal.h
+++ b/src/acpica/source/compiler/aslglobal.h
@@ -251,7 +251,8 @@  extern int                  AslCompilerdebug;
 
 
 #define ASL_DEFAULT_LINE_BUFFER_SIZE    (1024 * 32) /* 32K */
-#define ASL_MSG_BUFFER_SIZE             (1024 * 32) /* 32k */
+#define ASL_MSG_BUFFER_SIZE             (1024 * 128) /* 128k */
+#define ASL_STRING_BUFFER_SIZE          (1024 * 32) /* 32k */
 #define ASL_MAX_DISABLED_MESSAGES       32
 #define ASL_MAX_EXPECTED_MESSAGES       32
 #define HEX_TABLE_LINE_SIZE             8
@@ -438,8 +439,8 @@  ASL_EXTERN UINT8                    AslGbl_NamespaceEvent;
 
 ASL_EXTERN UINT8                    Gbl_AmlBuffer[HEX_LISTING_LINE_SIZE];
 ASL_EXTERN char                     MsgBuffer[ASL_MSG_BUFFER_SIZE];
-ASL_EXTERN char                     StringBuffer[ASL_MSG_BUFFER_SIZE];
-ASL_EXTERN char                     StringBuffer2[ASL_MSG_BUFFER_SIZE];
+ASL_EXTERN char                     StringBuffer[ASL_STRING_BUFFER_SIZE];
+ASL_EXTERN char                     StringBuffer2[ASL_STRING_BUFFER_SIZE];
 ASL_EXTERN UINT32                   Gbl_DisabledMessages[ASL_MAX_DISABLED_MESSAGES];
 ASL_EXTERN ASL_EXPECTED_MESSAGE     Gbl_ExpectedMessages[ASL_MAX_EXPECTED_MESSAGES];
 
diff --git a/src/acpica/source/compiler/aslhelpers.y b/src/acpica/source/compiler/aslhelpers.y
index bb9ff625..3a680a81 100644
--- a/src/acpica/source/compiler/aslhelpers.y
+++ b/src/acpica/source/compiler/aslhelpers.y
@@ -183,6 +183,14 @@  OptionalAccessSize
     | ',' ByteConstExpr             {$$ = $2;}
     ;
 
+OptionalAccessTypeKeyword   /* Default: AnyAcc */
+    :                               {$$ = TrCreateLeafOp (
+                                        PARSEOP_ACCESSTYPE_ANY);}
+    | ','                           {$$ = TrCreateLeafOp (
+                                        PARSEOP_ACCESSTYPE_ANY);}
+    | ',' AccessTypeKeyword         {$$ = $2;}
+    ;
+
 OptionalAddressingMode
     : ','                           {$$ = NULL;}
     | ',' AddressingModeKeyword     {$$ = $2;}
@@ -252,6 +260,14 @@  OptionalListString
     | ',' TermArg                   {$$ = $2;}
     ;
 
+OptionalLockRuleKeyword     /* Default: NoLock */
+    :                               {$$ = TrCreateLeafOp (
+                                        PARSEOP_LOCKRULE_NOLOCK);}
+    | ','                           {$$ = TrCreateLeafOp (
+                                        PARSEOP_LOCKRULE_NOLOCK);}
+    | ',' LockRuleKeyword           {$$ = $2;}
+    ;
+
 OptionalMaxType
     : ','                           {$$ = NULL;}
     | ',' MaxKeyword                {$$ = $2;}
@@ -366,6 +382,14 @@  OptionalStringData
     | ',' StringData                {$$ = $2;}
     ;
 
+OptionalSyncLevel           /* Default: 0 */
+    :                               {$$ = TrCreateValuedLeafOp (
+                                        PARSEOP_BYTECONST, 0);}
+    | ','                           {$$ = TrCreateValuedLeafOp (
+                                        PARSEOP_BYTECONST, 0);}
+    | ',' ByteConstExpr             {$$ = $2;}
+    ;
+
 OptionalTranslationType_Last
     :                               {$$ = NULL;}
     | ','                           {$$ = NULL;}
@@ -384,6 +408,14 @@  OptionalType_Last
     | ',' TypeKeyword               {$$ = $2;}
     ;
 
+OptionalUpdateRuleKeyword   /* Default: Preserve */
+    :                               {$$ = TrCreateLeafOp (
+                                        PARSEOP_UPDATERULE_PRESERVE);}
+    | ','                           {$$ = TrCreateLeafOp (
+                                        PARSEOP_UPDATERULE_PRESERVE);}
+    | ',' UpdateRuleKeyword         {$$ = $2;}
+    ;
+
 OptionalWireMode
     : ','                           {$$ = NULL;}
     | ',' WireModeKeyword           {$$ = $2;}
diff --git a/src/acpica/source/compiler/aslload.c b/src/acpica/source/compiler/aslload.c
index a57ba5e0..95fea9cd 100644
--- a/src/acpica/source/compiler/aslload.c
+++ b/src/acpica/source/compiler/aslload.c
@@ -321,8 +321,7 @@  LdLoadFieldElements (
                     return (Status);
                 }
                 else if (Status == AE_ALREADY_EXISTS &&
-                    (Node->Flags & ANOBJ_IS_EXTERNAL) &&
-                    Node->OwnerId != WalkState->OwnerId)
+                    (Node->Flags & ANOBJ_IS_EXTERNAL))
                 {
                     Node->Type = (UINT8) ACPI_TYPE_LOCAL_REGION_FIELD;
                 }
@@ -474,7 +473,6 @@  LdNamespace1Begin (
     ACPI_PARSE_OBJECT       *Arg;
     UINT32                  i;
     BOOLEAN                 ForceNewScope = FALSE;
-    ACPI_OWNER_ID           OwnerId = 0;
     const ACPI_OPCODE_INFO  *OpInfo;
     ACPI_PARSE_OBJECT       *ParentOp;
 
@@ -485,23 +483,6 @@  LdNamespace1Begin (
     ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op %p [%s]\n",
         Op, Op->Asl.ParseOpName));
 
-    if (Op->Asl.ParseOpcode == PARSEOP_DEFINITION_BLOCK)
-    {
-        /*
-         * Allocate an OwnerId for this block. This helps identify the owners
-         * of each namespace node. This is used in determining whether if
-         * certain external declarations cause redefinition errors.
-         */
-        Status = AcpiUtAllocateOwnerId (&OwnerId);
-        WalkState->OwnerId = OwnerId;
-        if (ACPI_FAILURE (Status))
-        {
-            AslCoreSubsystemError (Op, Status,
-                "Failure to allocate owner ID to this definition block.", FALSE);
-            return_ACPI_STATUS (Status);
-        }
-    }
-
     /*
      * We are only interested in opcodes that have an associated name
      * (or multiple names)
@@ -877,9 +858,7 @@  LdNamespace1Begin (
             {
                 /*
                  * Allow one create on an object or segment that was
-                 * previously declared External only if WalkState->OwnerId and
-                 * Node->OwnerId are different (meaning that the current WalkState
-                 * and the Node are in different tables).
+                 * previously declared External
                  */
                 Node->Flags &= ~ANOBJ_IS_EXTERNAL;
                 Node->Type = (UINT8) ObjectType;
@@ -896,18 +875,6 @@  LdNamespace1Begin (
                 }
 
                 Status = AE_OK;
-
-                if (Node->OwnerId == WalkState->OwnerId &&
-                    !(Node->Flags & IMPLICIT_EXTERNAL))
-                {
-                    AslDualParseOpError (ASL_WARNING, ASL_MSG_EXTERN_COLLISION, Op,
-                        Op->Asl.ExternalName, ASL_MSG_EXTERN_FOUND_HERE, Node->Op,
-                        Node->Op->Asl.ExternalName);
-                }
-                if (Node->Flags & IMPLICIT_EXTERNAL)
-                {
-                    Node->Flags &= ~IMPLICIT_EXTERNAL;
-                }
             }
             else if (!(Node->Flags & ANOBJ_IS_EXTERNAL) &&
                      (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL))
@@ -915,53 +882,15 @@  LdNamespace1Begin (
                 /*
                  * 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. However,
-                 * do not allow name declaration and an external declaration
-                 * within the same table. This is considered a re-declaration.
+                 * blocks that refer to each other in the same file.
                  */
                 Status = AE_OK;
-
-                if (Node->OwnerId == WalkState->OwnerId)
-                {
-                    AslDualParseOpError (ASL_WARNING, ASL_MSG_EXTERN_COLLISION, Op,
-                        Op->Asl.ExternalName, ASL_MSG_EXTERN_FOUND_HERE, Node->Op,
-                        Node->Op->Asl.ExternalName);
-                }
             }
             else if ((Node->Flags & ANOBJ_IS_EXTERNAL) &&
                      (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL) &&
                      (ObjectType == ACPI_TYPE_ANY))
             {
-                /*
-                 * Allow update of externals of unknown type.
-                 * In the case that multiple definition blocks are being
-                 * parsed, updating the OwnerId allows enables subsequent calls
-                 * of this method to understand which table the most recent
-                 * external declaration was seen. Without this OwnerId update,
-                 * code like the following is allowed to compile:
-                 *
-                 * DefinitionBlock("externtest.aml", "DSDT", 0x02, "Intel", "Many", 0x00000001)
-                 * {
-                 *     External(ERRS,methodobj)
-                 *     Method (MAIN)
-                 *     {
-                 *         Name(NUM2, 0)
-                 *         ERRS(1,2,3)
-                 *     }
-                 * }
-                 *
-                 * DefinitionBlock("externtest.aml", "SSDT", 0x02, "Intel", "Many", 0x00000001)
-                 * {
-                 *     if (0)
-                 *     {
-                 *         External(ERRS,methodobj)
-                 *     }
-                 *     Method (ERRS,3)
-                 *     {}
-                 *
-                 * }
-                 */
-                Node->OwnerId = WalkState->OwnerId;
+                /* Allow update of externals of unknown type. */
 
                 if (AcpiNsOpensScope (ActualObjectType))
                 {
diff --git a/src/acpica/source/compiler/aslmain.c b/src/acpica/source/compiler/aslmain.c
index 6827d1e6..227e6f31 100644
--- a/src/acpica/source/compiler/aslmain.c
+++ b/src/acpica/source/compiler/aslmain.c
@@ -208,7 +208,6 @@  main (
 
 
     signal (SIGINT, AslSignalHandler);
-    signal (SIGSEGV, AslSignalHandler);
 
     /*
      * Big-endian machines are not currently supported. ACPI tables must
@@ -306,8 +305,7 @@  CleanupAndExit:
  *
  * DESCRIPTION: Signal interrupt handler. Delete any intermediate files and
  *              any output files that may be left in an indeterminate state.
- *              Currently handles SIGINT (control-c) and SIGSEGV (segmentation
- *              fault).
+ *              Currently handles SIGINT (control-c).
  *
  *****************************************************************************/
 
@@ -329,17 +327,10 @@  AslSignalHandler (
         printf ("\n" ASL_PREFIX "<Control-C>\n");
         break;
 
-    case SIGSEGV:
-
-        /* Even on a seg fault, we will try to delete any partial files */
-
-        printf (ASL_PREFIX "Segmentation Fault\n");
-        break;
-
     default:
 
-        printf (ASL_PREFIX "Unknown interrupt signal (%u), ignoring\n", Sig);
-        return;
+        printf (ASL_PREFIX "Unknown interrupt signal (%u)\n", Sig);
+        break;
     }
 
     /*
diff --git a/src/acpica/source/compiler/aslmessages.c b/src/acpica/source/compiler/aslmessages.c
index 7f5cde73..b9e9f801 100644
--- a/src/acpica/source/compiler/aslmessages.c
+++ b/src/acpica/source/compiler/aslmessages.c
@@ -356,7 +356,8 @@  const char                      *AslCompilerMsgs [] =
 /*    ASL_MSG_EXTERN_COLLISION */           "A name cannot be defined and declared external in the same table",
 /*    ASL_MSG_FOUND_HERE_EXTERN */          "Remove one of the declarations indicated above or below:",
 /*    ASL_MSG_OEM_TABLE_ID */               "Invalid OEM Table ID",
-/*    ASL_MSG_OEM_ID */                     "Invalid OEM ID"
+/*    ASL_MSG_OEM_ID */                     "Invalid OEM ID",
+/*    ASL_MSG_UNLOAD */                     "Unload is not supported by all operating systems"
 };
 
 /* Table compiler */
diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h
index 18e81445..dcd2aa0d 100644
--- a/src/acpica/source/compiler/aslmessages.h
+++ b/src/acpica/source/compiler/aslmessages.h
@@ -359,6 +359,7 @@  typedef enum
     ASL_MSG_EXTERN_FOUND_HERE,
     ASL_MSG_OEM_TABLE_ID,
     ASL_MSG_OEM_ID,
+    ASL_MSG_UNLOAD,
 
     /* These messages are used by the Data Table compiler only */
 
diff --git a/src/acpica/source/compiler/aslparser.y b/src/acpica/source/compiler/aslparser.y
index 38c033d5..5ba4d4ab 100644
--- a/src/acpica/source/compiler/aslparser.y
+++ b/src/acpica/source/compiler/aslparser.y
@@ -208,7 +208,7 @@  AslLocalAllocate (
  * These shift/reduce conflicts are expected. There should be zero
  * reduce/reduce conflicts.
  */
-%expect 118
+%expect 124
 
 /*! [Begin] no source code translation */
 
diff --git a/src/acpica/source/compiler/aslprimaries.y b/src/acpica/source/compiler/aslprimaries.y
index b131f2a9..e2faf9a9 100644
--- a/src/acpica/source/compiler/aslprimaries.y
+++ b/src/acpica/source/compiler/aslprimaries.y
@@ -235,12 +235,12 @@  BankFieldTerm
         NameString
         NameStringItem
         TermArgItem
-        ',' AccessTypeKeyword
-        ',' LockRuleKeyword
-        ',' UpdateRuleKeyword
+        OptionalAccessTypeKeyword
+        OptionalLockRuleKeyword
+        OptionalUpdateRuleKeyword
         PARSEOP_CLOSE_PAREN '{'
             FieldUnitList '}'       {$$ = TrLinkOpChildren ($<n>3,7,
-                                        $4,$5,$6,$8,$10,$12,$15);}
+                                        $4,$5,$6,$7,$8,$9,$12);}
     | PARSEOP_BANKFIELD
         PARSEOP_OPEN_PAREN
         error PARSEOP_CLOSE_PAREN
@@ -579,11 +579,11 @@  FieldTerm
     : PARSEOP_FIELD
         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafOp (PARSEOP_FIELD);}
         NameString
-        ',' AccessTypeKeyword
-        ',' LockRuleKeyword
-        ',' UpdateRuleKeyword
+        OptionalAccessTypeKeyword
+        OptionalLockRuleKeyword
+        OptionalUpdateRuleKeyword
         PARSEOP_CLOSE_PAREN '{'
-            FieldUnitList '}'       {$$ = TrLinkOpChildren ($<n>3,5,$4,$6,$8,$10,$13);}
+            FieldUnitList '}'       {$$ = TrLinkOpChildren ($<n>3,5,$4,$5,$6,$7,$10);}
     | PARSEOP_FIELD
         PARSEOP_OPEN_PAREN
         error PARSEOP_CLOSE_PAREN
@@ -711,11 +711,11 @@  IndexFieldTerm
         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafOp (PARSEOP_INDEXFIELD);}
         NameString
         NameStringItem
-        ',' AccessTypeKeyword
-        ',' LockRuleKeyword
-        ',' UpdateRuleKeyword
+        OptionalAccessTypeKeyword
+        OptionalLockRuleKeyword
+        OptionalUpdateRuleKeyword
         PARSEOP_CLOSE_PAREN '{'
-            FieldUnitList '}'       {$$ = TrLinkOpChildren ($<n>3,6,$4,$5,$7,$9,$11,$14);}
+            FieldUnitList '}'       {$$ = TrLinkOpChildren ($<n>3,6,$4,$5,$6,$7,$8,$11);}
     | PARSEOP_INDEXFIELD
         PARSEOP_OPEN_PAREN
         error PARSEOP_CLOSE_PAREN
@@ -946,9 +946,9 @@  MutexTerm
     : PARSEOP_MUTEX
         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafOp (PARSEOP_MUTEX);}
         NameString
-        ',' ByteConstExpr
+        OptionalSyncLevel
         PARSEOP_CLOSE_PAREN         {$$ = TrLinkOpChildren ($<n>3,2,
-                                        TrSetOpFlags ($4, OP_IS_NAME_DECLARATION),$6);}
+                                        TrSetOpFlags ($4, OP_IS_NAME_DECLARATION),$5);}
     | PARSEOP_MUTEX
         PARSEOP_OPEN_PAREN
         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
diff --git a/src/acpica/source/compiler/asltransform.c b/src/acpica/source/compiler/asltransform.c
index c74499ea..559b4f8f 100644
--- a/src/acpica/source/compiler/asltransform.c
+++ b/src/acpica/source/compiler/asltransform.c
@@ -496,6 +496,11 @@  TrTransformSubtree (
         Op->Asl.Value.String = "\\";
         break;
 
+    case PARSEOP_UNLOAD:
+
+        AslError (ASL_WARNING, ASL_MSG_UNLOAD, Op, NULL);
+        break;
+
     default:
 
         /* Nothing to do here for other opcodes */
diff --git a/src/acpica/source/compiler/asltypes.y b/src/acpica/source/compiler/asltypes.y
index 361d476f..4112969d 100644
--- a/src/acpica/source/compiler/asltypes.y
+++ b/src/acpica/source/compiler/asltypes.y
@@ -461,6 +461,7 @@  NoEcho('
 %type <n> TermArgItem
 
 %type <n> OptionalAccessSize
+%type <n> OptionalAccessTypeKeyword
 %type <n> OptionalAddressingMode
 %type <n> OptionalAddressRange
 %type <n> OptionalBitsPerByte
@@ -475,6 +476,7 @@  NoEcho('
 %type <n> OptionalFlowControl
 %type <n> OptionalIoRestriction
 %type <n> OptionalListString
+%type <n> OptionalLockRuleKeyword
 %type <n> OptionalMaxType
 %type <n> OptionalMemType
 %type <n> OptionalMinType
@@ -500,10 +502,12 @@  NoEcho('
 %type <n> OptionalSlaveMode
 %type <n> OptionalStopBits
 %type <n> OptionalStringData
+%type <n> OptionalSyncLevel
 %type <n> OptionalTermArg
 %type <n> OptionalTranslationType_Last
 %type <n> OptionalType
 %type <n> OptionalType_Last
+%type <n> OptionalUpdateRuleKeyword
 %type <n> OptionalWireMode
 %type <n> OptionalWordConst
 %type <n> OptionalWordConstExpr
diff --git a/src/acpica/source/components/hardware/hwxfsleep.c b/src/acpica/source/components/hardware/hwxfsleep.c
index 8ebb8c1d..b2f856c5 100644
--- a/src/acpica/source/components/hardware/hwxfsleep.c
+++ b/src/acpica/source/components/hardware/hwxfsleep.c
@@ -184,17 +184,17 @@  AcpiHwSleepDispatch (
 
 static ACPI_SLEEP_FUNCTIONS         AcpiSleepDispatch[] =
 {
-    {ACPI_STRUCT_INIT (legacy_function,
+    {ACPI_STRUCT_INIT (LegacyFunction,
                        ACPI_HW_OPTIONAL_FUNCTION (AcpiHwLegacySleep)),
-     ACPI_STRUCT_INIT (extended_function,
+     ACPI_STRUCT_INIT (ExtendedFunction,
                        AcpiHwExtendedSleep) },
-    {ACPI_STRUCT_INIT (legacy_function,
+    {ACPI_STRUCT_INIT (LegacyFunction,
                        ACPI_HW_OPTIONAL_FUNCTION (AcpiHwLegacyWakePrep)),
-     ACPI_STRUCT_INIT (extended_function,
+     ACPI_STRUCT_INIT (ExtendedFunction,
                        AcpiHwExtendedWakePrep) },
-    {ACPI_STRUCT_INIT (legacy_function,
+    {ACPI_STRUCT_INIT (Legacy_function,
                        ACPI_HW_OPTIONAL_FUNCTION (AcpiHwLegacyWake)),
-     ACPI_STRUCT_INIT (extended_function,
+     ACPI_STRUCT_INIT (ExtendedFunction,
                        AcpiHwExtendedWake) }
 };
 
diff --git a/src/acpica/source/components/namespace/nsaccess.c b/src/acpica/source/components/namespace/nsaccess.c
index d084c6fe..bf530d48 100644
--- a/src/acpica/source/components/namespace/nsaccess.c
+++ b/src/acpica/source/components/namespace/nsaccess.c
@@ -781,13 +781,6 @@  AcpiNsLookup (
 
         else
         {
-#ifdef ACPI_ASL_COMPILER
-            if (!AcpiGbl_DisasmFlag && (ThisNode->Flags & ANOBJ_IS_EXTERNAL))
-            {
-                ThisNode->Flags &= ~IMPLICIT_EXTERNAL;
-            }
-#endif
-
             /*
              * Sanity typecheck of the target object:
              *
diff --git a/src/acpica/source/components/namespace/nseval.c b/src/acpica/source/components/namespace/nseval.c
index 2a7eb8f5..8262d992 100644
--- a/src/acpica/source/components/namespace/nseval.c
+++ b/src/acpica/source/components/namespace/nseval.c
@@ -429,11 +429,11 @@  AcpiNsEvaluate (
 
         Status = AE_OK;
     }
-    else if (ACPI_FAILURE(Status)) 
+    else if (ACPI_FAILURE(Status))
     {
         /* If ReturnObject exists, delete it */
 
-        if (Info->ReturnObject) 
+        if (Info->ReturnObject)
         {
             AcpiUtRemoveReference (Info->ReturnObject);
             Info->ReturnObject = NULL;
diff --git a/src/acpica/source/components/namespace/nssearch.c b/src/acpica/source/components/namespace/nssearch.c
index 02fd8b40..dab4b570 100644
--- a/src/acpica/source/components/namespace/nssearch.c
+++ b/src/acpica/source/components/namespace/nssearch.c
@@ -545,7 +545,6 @@  AcpiNsSearchAndEnter (
         (WalkState && WalkState->Opcode == AML_SCOPE_OP))
     {
         NewNode->Flags |= ANOBJ_IS_EXTERNAL;
-        NewNode->Flags |= IMPLICIT_EXTERNAL;
     }
 #endif
 
diff --git a/src/acpica/source/include/aclocal.h b/src/acpica/source/include/aclocal.h
index f487a4ec..58c09379 100644
--- a/src/acpica/source/include/aclocal.h
+++ b/src/acpica/source/include/aclocal.h
@@ -328,7 +328,6 @@  typedef struct acpi_namespace_node
 #define ANOBJ_EVALUATED                 0x20    /* Set on first evaluation of node */
 #define ANOBJ_ALLOCATED_BUFFER          0x40    /* Method AML buffer is dynamic (InstallMethod) */
 
-#define IMPLICIT_EXTERNAL               0x02    /* iASL only: This object created implicitly via External */
 #define ANOBJ_IS_EXTERNAL               0x08    /* iASL only: This object created via External() */
 #define ANOBJ_METHOD_NO_RETVAL          0x10    /* iASL only: Method has no return value */
 #define ANOBJ_METHOD_SOME_NO_RETVAL     0x20    /* iASL only: Method has at least one return value */
diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
index cfe83791..110b375b 100644
--- a/src/acpica/source/include/acpixf.h
+++ b/src/acpica/source/include/acpixf.h
@@ -154,7 +154,7 @@ 
 
 /* Current ACPICA subsystem version in YYYYMMDD format */
 
-#define ACPI_CA_VERSION                 0x20180531
+#define ACPI_CA_VERSION                 0x20180629
 
 #include "acconfig.h"
 #include "actypes.h"