diff mbox series

ACPICA: Update to version 20180810

Message ID 20180810164900.20617-1-colin.king@canonical.com
State Accepted
Headers show
Series ACPICA: Update to version 20180810 | expand

Commit Message

Colin Ian King Aug. 10, 2018, 4:49 p.m. UTC
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-August/001819.html

Signed-off-by: Colin Ian King <colin.king@canonical.com>
---
 src/acpica/Makefile.am                        |   1 +
 src/acpica/fwts_acpica.c                      |   3 +
 .../source/components/debugger/dbinput.c      |  10 +-
 .../source/components/debugger/dbmethod.c     |   7 +-
 .../source/components/debugger/dbxface.c      |  10 +-
 .../source/components/dispatcher/dsfield.c    |  26 ++++
 .../source/components/hardware/hwregs.c       |  11 +-
 .../source/components/hardware/hwsleep.c      |  19 ++-
 .../source/components/namespace/nsaccess.c    |  16 ++
 src/acpica/source/components/parser/psloop.c  |  41 ++++-
 src/acpica/source/components/tables/tbdata.c  |   4 +-
 .../source/components/utilities/utdelete.c    |   7 +-
 .../source/components/utilities/uterror.c     |   6 +-
 .../source/components/utilities/utstrsuppt.c  |  30 +++-
 .../source/components/utilities/utstrtoul64.c |   2 +-
 src/acpica/source/include/acconfig.h          |   2 +-
 src/acpica/source/include/acexcep.h           |   7 +
 src/acpica/source/include/aclocal.h           |   1 +
 src/acpica/source/include/acnamesp.h          |  17 +-
 src/acpica/source/include/acpixf.h            |   2 +-
 src/acpica/source/include/acutils.h           |   4 +
 src/acpica/source/tools/acpiexec/aecommon.h   |  18 ++-
 src/acpica/source/tools/acpiexec/aeinitfile.c | 147 +++++++++++-------
 src/acpica/source/tools/acpiexec/aeregion.c   |   8 +-
 24 files changed, 301 insertions(+), 98 deletions(-)

Comments

Alex Hung Aug. 10, 2018, 8:02 p.m. UTC | #1
On 2018-08-10 09:49 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-August/001819.html
> 
> Signed-off-by: Colin Ian King <colin.king@canonical.com>
> ---
>   src/acpica/Makefile.am                        |   1 +
>   src/acpica/fwts_acpica.c                      |   3 +
>   .../source/components/debugger/dbinput.c      |  10 +-
>   .../source/components/debugger/dbmethod.c     |   7 +-
>   .../source/components/debugger/dbxface.c      |  10 +-
>   .../source/components/dispatcher/dsfield.c    |  26 ++++
>   .../source/components/hardware/hwregs.c       |  11 +-
>   .../source/components/hardware/hwsleep.c      |  19 ++-
>   .../source/components/namespace/nsaccess.c    |  16 ++
>   src/acpica/source/components/parser/psloop.c  |  41 ++++-
>   src/acpica/source/components/tables/tbdata.c  |   4 +-
>   .../source/components/utilities/utdelete.c    |   7 +-
>   .../source/components/utilities/uterror.c     |   6 +-
>   .../source/components/utilities/utstrsuppt.c  |  30 +++-
>   .../source/components/utilities/utstrtoul64.c |   2 +-
>   src/acpica/source/include/acconfig.h          |   2 +-
>   src/acpica/source/include/acexcep.h           |   7 +
>   src/acpica/source/include/aclocal.h           |   1 +
>   src/acpica/source/include/acnamesp.h          |  17 +-
>   src/acpica/source/include/acpixf.h            |   2 +-
>   src/acpica/source/include/acutils.h           |   4 +
>   src/acpica/source/tools/acpiexec/aecommon.h   |  18 ++-
>   src/acpica/source/tools/acpiexec/aeinitfile.c | 147 +++++++++++-------
>   src/acpica/source/tools/acpiexec/aeregion.c   |   8 +-
>   24 files changed, 301 insertions(+), 98 deletions(-)
> 
> diff --git a/src/acpica/Makefile.am b/src/acpica/Makefile.am
> index 114c6a5f..73d10449 100644
> --- a/src/acpica/Makefile.am
> +++ b/src/acpica/Makefile.am
> @@ -26,6 +26,7 @@ AM_CPPFLAGS = 						\
>   	-D_LINUX -DNDEBUG -D_CONSOLE -DACPI_EXEC_APP	\
>   	-I$(top_srcdir)/src/lib/include			\
>   	-I$(srcdir)/source/include			\
> +	-I$(srcdir)/source/tools/acpiexec		\
>   	`pkg-config --silence-errors --cflags json`	\
>   	`pkg-config --silence-errors --cflags json-c`	\
>   	-Wall -fno-strict-aliasing
> diff --git a/src/acpica/fwts_acpica.c b/src/acpica/fwts_acpica.c
> index d985e18a..1d7d1abb 100644
> --- a/src/acpica/fwts_acpica.c
> +++ b/src/acpica/fwts_acpica.c
> @@ -48,6 +48,7 @@
>   #include "acinterp.h"
>   #include "acapps.h"
>   #include "amlresrc.h"
> +#include "aecommon.h"
>   
>   #define ACPI_MAX_INIT_TABLES		(64)	/* Number of ACPI tables */
>   
> @@ -82,6 +83,8 @@ BOOLEAN AcpiGbl_AbortLoopOnTimeout = FALSE;
>   BOOLEAN AcpiGbl_IgnoreErrors = FALSE;
>   BOOLEAN AcpiGbl_VerboseHandlers = FALSE;
>   UINT8   AcpiGbl_RegionFillValue = 0;
> +INIT_FILE_ENTRY *AcpiGbl_InitEntries = NULL;
> +UINT32  AcpiGbl_InitFileLineCount = 0;
>   
>   static ACPI_TABLE_DESC		Tables[ACPI_MAX_INIT_TABLES];	/* ACPICA Table descriptors */
>   static bool			region_handler_called;		/* Region handler tracking */
> diff --git a/src/acpica/source/components/debugger/dbinput.c b/src/acpica/source/components/debugger/dbinput.c
> index 75e7a37f..0daca95b 100644
> --- a/src/acpica/source/components/debugger/dbinput.c
> +++ b/src/acpica/source/components/debugger/dbinput.c
> @@ -969,7 +969,11 @@ AcpiDbCommandDispatch (
>       case CMD_DISASSEMBLE:
>       case CMD_DISASM:
>   
> +#ifdef ACPI_DISASSEMBLER
>           (void) AcpiDbDisassembleMethod (AcpiGbl_DbArgs[1]);
> +#else
> +        AcpiOsPrintf ("The AML Disassembler is not configured/present\n");
> +#endif
>           break;
>   
>       case CMD_DUMP:
> @@ -1083,7 +1087,11 @@ AcpiDbCommandDispatch (
>   
>       case CMD_LIST:
>   
> -        AcpiDbDisassembleAml (AcpiGbl_DbArgs[1], Op);
> +#ifdef ACPI_DISASSEMBLER
> +        AcpiDbDisassembleAml (AcpiGbl_DbArgs[1], Op);;
> +#else
> +        AcpiOsPrintf ("The AML Disassembler is not configured/present\n");
> +#endif
>           break;
>   
>       case CMD_LOCKS:
> diff --git a/src/acpica/source/components/debugger/dbmethod.c b/src/acpica/source/components/debugger/dbmethod.c
> index d6c6aa55..a030823c 100644
> --- a/src/acpica/source/components/debugger/dbmethod.c
> +++ b/src/acpica/source/components/debugger/dbmethod.c
> @@ -393,6 +393,7 @@ Cleanup:
>   }
>   
>   
> +#ifdef ACPI_DISASSEMBLER
>   /*******************************************************************************
>    *
>    * FUNCTION:    AcpiDbDisassembleAml
> @@ -426,9 +427,7 @@ AcpiDbDisassembleAml (
>           NumStatements = strtoul (Statements, NULL, 0);
>       }
>   
> -#ifdef ACPI_DISASSEMBLER
>       AcpiDmDisassemble (NULL, Op, NumStatements);
> -#endif
>   }
>   
>   
> @@ -511,8 +510,6 @@ AcpiDbDisassembleMethod (
>       WalkState->ParseFlags |= ACPI_PARSE_DISASSEMBLE;
>   
>       Status = AcpiPsParseAml (WalkState);
> -
> -#ifdef ACPI_DISASSEMBLER
>       (void) AcpiDmParseDeferredOps (Op);
>   
>       /* Now we can disassemble the method */
> @@ -520,7 +517,6 @@ AcpiDbDisassembleMethod (
>       AcpiGbl_DmOpt_Verbose = FALSE;
>       AcpiDmDisassemble (NULL, Op, 0);
>       AcpiGbl_DmOpt_Verbose = TRUE;
> -#endif
>   
>       AcpiPsDeleteParseTree (Op);
>   
> @@ -531,6 +527,7 @@ AcpiDbDisassembleMethod (
>       AcpiUtReleaseOwnerId (&ObjDesc->Method.OwnerId);
>       return (AE_OK);
>   }
> +#endif
>   
>   
>   /*******************************************************************************
> diff --git a/src/acpica/source/components/debugger/dbxface.c b/src/acpica/source/components/debugger/dbxface.c
> index 0b964f69..c661b248 100644
> --- a/src/acpica/source/components/debugger/dbxface.c
> +++ b/src/acpica/source/components/debugger/dbxface.c
> @@ -154,6 +154,7 @@
>   #include "amlcode.h"
>   #include "acdebug.h"
>   #include "acinterp.h"
> +#include "acparser.h"
>   
>   
>   #define _COMPONENT          ACPI_CA_DEBUGGER
> @@ -435,10 +436,17 @@ AcpiDbSingleStep (
>               }
>           }
>   
> -        /* Now we can display it */
> +        /* Now we can disassemble and display it */
>   
>   #ifdef ACPI_DISASSEMBLER
>           AcpiDmDisassemble (WalkState, DisplayOp, ACPI_UINT32_MAX);
> +#else
> +        /*
> +         * The AML Disassembler is not configured - at least we can
> +         * display the opcode value and name
> +         */
> +        AcpiOsPrintf ("AML Opcode: %4.4X  %s\n", Op->Common.AmlOpcode,
> +            AcpiPsGetOpcodeName (Op->Common.AmlOpcode));
>   #endif
>   
>           if ((Op->Common.AmlOpcode == AML_IF_OP) ||
> diff --git a/src/acpica/source/components/dispatcher/dsfield.c b/src/acpica/source/components/dispatcher/dsfield.c
> index df770c1c..3db39fb8 100644
> --- a/src/acpica/source/components/dispatcher/dsfield.c
> +++ b/src/acpica/source/components/dispatcher/dsfield.c
> @@ -157,6 +157,10 @@
>   #include "acnamesp.h"
>   #include "acparser.h"
>   
> +#ifdef ACPI_EXEC_APP
> +#include "aecommon.h"
> +#endif
> +
>   
>   #define _COMPONENT          ACPI_DISPATCHER
>           ACPI_MODULE_NAME    ("dsfield")
> @@ -430,6 +434,13 @@ AcpiDsGetFieldNames (
>       UINT64                  Position;
>       ACPI_PARSE_OBJECT       *Child;
>   
> +#ifdef ACPI_EXEC_APP
> +    UINT64                  Value = 0;
> +    ACPI_OPERAND_OBJECT     *ResultDesc;
> +    ACPI_OPERAND_OBJECT     *ObjDesc;
> +    char                    *NamePath;
> +#endif
> +
>   
>       ACPI_FUNCTION_TRACE_PTR (DsGetFieldNames, Info);
>   
> @@ -564,6 +575,18 @@ AcpiDsGetFieldNames (
>                       {
>                           return_ACPI_STATUS (Status);
>                       }
> +#ifdef ACPI_EXEC_APP
> +                    NamePath = AcpiNsGetExternalPathname (Info->FieldNode);
> +                    ObjDesc = AcpiUtCreateIntegerObject (Value);
> +                    if (ACPI_SUCCESS (AeLookupInitFileEntry (NamePath, &Value)))
> +                    {
> +                        AcpiExWriteDataToField (ObjDesc,
> +                            AcpiNsGetAttachedObject (Info->FieldNode),
> +                            &ResultDesc);
> +                    }
> +                    AcpiUtRemoveReference (ObjDesc);
> +                    ACPI_FREE (NamePath);
> +#endif
>                   }
>               }
>   
> @@ -756,6 +779,9 @@ AcpiDsInitFieldObjects (
>           Flags |= ACPI_NS_TEMPORARY;
>       }
>   
> +#ifdef ACPI_EXEC_APP
> +        Flags |= ACPI_NS_OVERRIDE_IF_FOUND;
> +#endif
>       /*
>        * Walk the list of entries in the FieldList
>        * Note: FieldList can be of zero length. In this case, Arg will be NULL.
> diff --git a/src/acpica/source/components/hardware/hwregs.c b/src/acpica/source/components/hardware/hwregs.c
> index c0deed33..ec106847 100644
> --- a/src/acpica/source/components/hardware/hwregs.c
> +++ b/src/acpica/source/components/hardware/hwregs.c
> @@ -724,13 +724,20 @@ AcpiHwRegisterRead (
>       case ACPI_REGISTER_PM2_CONTROL:          /* 8-bit access */
>   
>           Status = AcpiHwRead (&Value64, &AcpiGbl_FADT.XPm2ControlBlock);
> -        Value = (UINT32) Value64;
> +        if (ACPI_SUCCESS (Status))
> +        {
> +            Value = (UINT32) Value64;
> +        }
>           break;
>   
>       case ACPI_REGISTER_PM_TIMER:             /* 32-bit access */
>   
>           Status = AcpiHwRead (&Value64, &AcpiGbl_FADT.XPmTimerBlock);
> -        Value = (UINT32) Value64;
> +        if (ACPI_SUCCESS (Status))
> +        {
> +            Value = (UINT32) Value64;
> +        }
> +
>           break;
>   
>       case ACPI_REGISTER_SMI_COMMAND_BLOCK:    /* 8-bit access */
> diff --git a/src/acpica/source/components/hardware/hwsleep.c b/src/acpica/source/components/hardware/hwsleep.c
> index fe111872..7e435ace 100644
> --- a/src/acpica/source/components/hardware/hwsleep.c
> +++ b/src/acpica/source/components/hardware/hwsleep.c
> @@ -198,17 +198,28 @@ AcpiHwLegacySleep (
>           return_ACPI_STATUS (Status);
>       }
>   
> -    /*
> -     * 1) Disable all GPEs
> -     * 2) Enable all wakeup GPEs
> -     */
> +    /* Disable all GPEs */
> +
>       Status = AcpiHwDisableAllGpes ();
>       if (ACPI_FAILURE (Status))
>       {
>           return_ACPI_STATUS (Status);
>       }
> +    /*
> +     * If the target sleep state is S5, clear all GPEs and fixed events too
> +     */
> +    if (SleepState == ACPI_STATE_S5)
> +    {
> +        Status = AcpiHwClearAcpiStatus();
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return_ACPI_STATUS (Status);
> +        }
> +    }
>       AcpiGbl_SystemAwakeAndRunning = FALSE;
>   
> +    /* Enable all wakeup GPEs */
> +
>       Status = AcpiHwEnableAllWakeupGpes ();
>       if (ACPI_FAILURE (Status))
>       {
> diff --git a/src/acpica/source/components/namespace/nsaccess.c b/src/acpica/source/components/namespace/nsaccess.c
> index bf530d48..af97c51f 100644
> --- a/src/acpica/source/components/namespace/nsaccess.c
> +++ b/src/acpica/source/components/namespace/nsaccess.c
> @@ -724,6 +724,15 @@ AcpiNsLookup (
>                       CurrentNode));
>               }
>   
> +#ifdef ACPI_EXEC_APP
> +            if ((Status == AE_ALREADY_EXISTS) &&
> +                (ThisNode->Flags & ANOBJ_NODE_EARLY_INIT))
> +            {
> +                ThisNode->Flags &= ~ANOBJ_NODE_EARLY_INIT;
> +                Status = AE_OK;
> +            }
> +#endif
> +
>   #ifdef ACPI_ASL_COMPILER
>               /*
>                * If this ACPI name already exists within the namespace as an
> @@ -845,6 +854,13 @@ AcpiNsLookup (
>           }
>       }
>   
> +#ifdef ACPI_EXEC_APP
> +    if (Flags & ACPI_NS_EARLY_INIT)
> +    {
> +        ThisNode->Flags |= ANOBJ_NODE_EARLY_INIT;
> +    }
> +#endif
> +
>       *ReturnNode = ThisNode;
>       return_ACPI_STATUS (AE_OK);
>   }
> diff --git a/src/acpica/source/components/parser/psloop.c b/src/acpica/source/components/parser/psloop.c
> index fd6773c1..ef517b54 100644
> --- a/src/acpica/source/components/parser/psloop.c
> +++ b/src/acpica/source/components/parser/psloop.c
> @@ -164,6 +164,7 @@
>   #include "acdispat.h"
>   #include "amlcode.h"
>   #include "acconvert.h"
> +#include "acnamesp.h"
>   
>   #define _COMPONENT          ACPI_PARSER
>           ACPI_MODULE_NAME    ("psloop")
> @@ -645,6 +646,18 @@ AcpiPsParseLoop (
>               Status = AcpiPsCreateOp (WalkState, AmlOpStart, &Op);
>               if (ACPI_FAILURE (Status))
>               {
> +                /*
> +                 * ACPI_PARSE_MODULE_LEVEL means that we are loading a table by
> +                 * executing it as a control method. However, if we encounter
> +                 * an error while loading the table, we need to keep trying to
> +                 * load the table rather than aborting the table load. Set the
> +                 * status to AE_OK to proceed with the table load.
> +                 */
> +                if ((WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL) &&
> +                    Status == AE_ALREADY_EXISTS)
> +                {
> +                    Status = AE_OK;
> +                }
>                   if (Status == AE_CTRL_PARSE_CONTINUE)
>                   {
>                       continue;
> @@ -665,18 +678,20 @@ AcpiPsParseLoop (
>                   {
>                       return_ACPI_STATUS (Status);
>                   }
> -                if (WalkState->Opcode == AML_SCOPE_OP)
> +                if (AcpiNsOpensScope (
> +                    AcpiPsGetOpcodeInfo (WalkState->Opcode)->ObjectType))
>                   {
>                       /*
> -                     * If the scope op fails to parse, skip the body of the
> -                     * scope op because the parse failure indicates that the
> -                     * device may not exist.
> +                     * If the scope/device op fails to parse, skip the body of
> +                     * the scope op because the parse failure indicates that
> +                     * the device may not exist.
>                        */
> +                    ACPI_ERROR ((AE_INFO, "Skip parsing opcode %s",
> +                        AcpiPsGetOpcodeName (WalkState->Opcode)));
>                       WalkState->ParserState.Aml = WalkState->Aml + 1;
>                       WalkState->ParserState.Aml =
>                           AcpiPsGetNextPackageEnd(&WalkState->ParserState);
>                       WalkState->Aml = WalkState->ParserState.Aml;
> -                    ACPI_ERROR ((AE_INFO, "Skipping Scope block"));
>                   }
>   
>                   continue;
> @@ -834,6 +849,22 @@ AcpiPsParseLoop (
>               {
>                   Status = AE_OK;
>               }
> +            else if ((WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL) &&
> +                (ACPI_AML_EXCEPTION(Status) || Status == AE_ALREADY_EXISTS ||
> +                Status == AE_NOT_FOUND))
> +            {
> +                /*
> +                 * ACPI_PARSE_MODULE_LEVEL flag means that we are currently
> +                 * loading a table by executing it as a control method.
> +                 * However, if we encounter an error while loading the table,
> +                 * we need to keep trying to load the table rather than
> +                 * aborting the table load (setting the status to AE_OK
> +                 * continues the table load). If we get a failure at this
> +                 * point, it means that the dispatcher got an error while
> +                 * trying to execute the Op.
> +                 */
> +                Status = AE_OK;
> +            }
>           }
>   
>           Status = AcpiPsCompleteOp (WalkState, &Op, Status);
> diff --git a/src/acpica/source/components/tables/tbdata.c b/src/acpica/source/components/tables/tbdata.c
> index 61a2d340..7b44fc74 100644
> --- a/src/acpica/source/components/tables/tbdata.c
> +++ b/src/acpica/source/components/tables/tbdata.c
> @@ -711,9 +711,9 @@ AcpiTbVerifyTempTable (
>               {
>                   if (Status != AE_CTRL_TERMINATE)
>                   {
> -                    ACPI_EXCEPTION ((AE_INFO, AE_NO_MEMORY,
> +                    ACPI_EXCEPTION ((AE_INFO, Status,
>                           "%4.4s 0x%8.8X%8.8X"
> -                        " Table is duplicated",
> +                        " Table is already loaded",
>                           AcpiUtValidNameseg (TableDesc->Signature.Ascii) ?
>                               TableDesc->Signature.Ascii : "????",
>                           ACPI_FORMAT_UINT64 (TableDesc->Address)));
> diff --git a/src/acpica/source/components/utilities/utdelete.c b/src/acpica/source/components/utilities/utdelete.c
> index 4565d8fa..da2e31ff 100644
> --- a/src/acpica/source/components/utilities/utdelete.c
> +++ b/src/acpica/source/components/utilities/utdelete.c
> @@ -520,6 +520,7 @@ AcpiUtUpdateRefCount (
>       UINT16                  OriginalCount;
>       UINT16                  NewCount = 0;
>       ACPI_CPU_FLAGS          LockFlags;
> +    char                    *Message;
>   
>   
>       ACPI_FUNCTION_NAME (UtUpdateRefCount);
> @@ -560,6 +561,7 @@ AcpiUtUpdateRefCount (
>               "Obj %p Type %.2X [%s] Refs %.2X [Incremented]\n",
>               Object, Object->Common.Type,
>               AcpiUtGetObjectTypeName (Object), NewCount));
> +        Message = "Incremement";
>           break;
>   
>       case REF_DECREMENT:
> @@ -591,6 +593,7 @@ AcpiUtUpdateRefCount (
>           {
>               AcpiUtDeleteInternalObj (Object);
>           }
> +        Message = "Decrement";
>           break;
>   
>       default:
> @@ -608,8 +611,8 @@ AcpiUtUpdateRefCount (
>       if (NewCount > ACPI_MAX_REFERENCE_COUNT)
>       {
>           ACPI_WARNING ((AE_INFO,
> -            "Large Reference Count (0x%X) in object %p, Type=0x%.2X",
> -            NewCount, Object, Object->Common.Type));
> +            "Large Reference Count (0x%X) in object %p, Type=0x%.2X Operation=%s",
> +            NewCount, Object, Object->Common.Type, Message));
>       }
>   }
>   
> diff --git a/src/acpica/source/components/utilities/uterror.c b/src/acpica/source/components/utilities/uterror.c
> index eca92f3b..67c22330 100644
> --- a/src/acpica/source/components/utilities/uterror.c
> +++ b/src/acpica/source/components/utilities/uterror.c
> @@ -352,19 +352,19 @@ AcpiUtPrefixedNamespaceError (
>       {
>       case AE_ALREADY_EXISTS:
>   
> -        AcpiOsPrintf ("\n" ACPI_MSG_BIOS_ERROR);
> +        AcpiOsPrintf (ACPI_MSG_BIOS_ERROR);
>           Message = "Failure creating";
>           break;
>   
>       case AE_NOT_FOUND:
>   
> -        AcpiOsPrintf ("\n" ACPI_MSG_BIOS_ERROR);
> +        AcpiOsPrintf (ACPI_MSG_BIOS_ERROR);
>           Message = "Could not resolve";
>           break;
>   
>       default:
>   
> -        AcpiOsPrintf ("\n" ACPI_MSG_ERROR);
> +        AcpiOsPrintf (ACPI_MSG_ERROR);
>           Message = "Failure resolving";
>           break;
>       }
> diff --git a/src/acpica/source/components/utilities/utstrsuppt.c b/src/acpica/source/components/utilities/utstrsuppt.c
> index 2e7232a3..b482da21 100644
> --- a/src/acpica/source/components/utilities/utstrsuppt.c
> +++ b/src/acpica/source/components/utilities/utstrsuppt.c
> @@ -419,15 +419,39 @@ BOOLEAN
>   AcpiUtDetectHexPrefix (
>       char                    **String)
>   {
> +    char                    *InitialPosition = *String;
>   
> +    AcpiUtRemoveHexPrefix (String);
> +    if (*String != InitialPosition)
> +    {
> +        return (TRUE); /* String is past leading 0x */
> +    }
> +
> +    return (FALSE);     /* Not a hex string */
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiUtRemoveHexPrefix
> + *
> + * PARAMETERS:  String                  - Pointer to input ASCII string
> + *
> + * RETURN:      none
> + *
> + * DESCRIPTION: Remove a hex "0x" prefix
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiUtRemoveHexPrefix (
> +    char                    **String)
> +{
>       if ((**String == ACPI_ASCII_ZERO) &&
>           (tolower ((int) *(*String + 1)) == 'x'))
>       {
>           *String += 2;        /* Go past the leading 0x */
> -        return (TRUE);
>       }
> -
> -    return (FALSE);     /* Not a hex string */
>   }
>   
>   
> diff --git a/src/acpica/source/components/utilities/utstrtoul64.c b/src/acpica/source/components/utilities/utstrtoul64.c
> index 5bbf24fd..77190e10 100644
> --- a/src/acpica/source/components/utilities/utstrtoul64.c
> +++ b/src/acpica/source/components/utilities/utstrtoul64.c
> @@ -383,7 +383,7 @@ AcpiUtImplicitStrtoul64 (
>        * implicit conversions, and the "0x" prefix is "not allowed".
>        * However, allow a "0x" prefix as an ACPI extension.
>        */
> -    AcpiUtDetectHexPrefix (&String);
> +    AcpiUtRemoveHexPrefix (&String);
>   
>       if (!AcpiUtRemoveLeadingZeros (&String))
>       {
> diff --git a/src/acpica/source/include/acconfig.h b/src/acpica/source/include/acconfig.h
> index c5a67ca0..41f3dff0 100644
> --- a/src/acpica/source/include/acconfig.h
> +++ b/src/acpica/source/include/acconfig.h
> @@ -233,7 +233,7 @@
>   
>   /* Maximum object reference count (detects object deletion issues) */
>   
> -#define ACPI_MAX_REFERENCE_COUNT        0x800
> +#define ACPI_MAX_REFERENCE_COUNT        0x4000
>   
>   /* Default page size for use in mapping memory for operation regions */
>   
> diff --git a/src/acpica/source/include/acexcep.h b/src/acpica/source/include/acexcep.h
> index 828f9fb9..ec2304c5 100644
> --- a/src/acpica/source/include/acexcep.h
> +++ b/src/acpica/source/include/acexcep.h
> @@ -204,6 +204,13 @@ typedef struct acpi_exception_info
>   
>   #define AE_OK                           (ACPI_STATUS) 0x0000
>   
> +#define ACPI_ENV_EXCEPTION(Status)      (Status & AE_CODE_ENVIRONMENTAL)
> +#define ACPI_AML_EXCEPTION(Status)      (Status & AE_CODE_AML)
> +#define ACPI_PROG_EXCEPTION(Status)     (Status & AE_CODE_PROGRAMMER)
> +#define ACPI_TABLE_EXCEPTION(Status)    (Status & AE_CODE_ACPI_TABLES)
> +#define ACPI_CNTL_EXCEPTION(Status)     (Status & AE_CODE_CONTROL)
> +
> +
>   /*
>    * Environmental exceptions
>    */
> diff --git a/src/acpica/source/include/aclocal.h b/src/acpica/source/include/aclocal.h
> index 58c09379..2e2bcd0d 100644
> --- a/src/acpica/source/include/aclocal.h
> +++ b/src/acpica/source/include/aclocal.h
> @@ -327,6 +327,7 @@ typedef struct acpi_namespace_node
>   #define ANOBJ_SUBTREE_HAS_INI           0x10    /* Used to optimize device initialization */
>   #define ANOBJ_EVALUATED                 0x20    /* Set on first evaluation of node */
>   #define ANOBJ_ALLOCATED_BUFFER          0x40    /* Method AML buffer is dynamic (InstallMethod) */
> +#define ANOBJ_NODE_EARLY_INIT           0x80    /* AcpiExec only: Node was create via init file (-fi) */
>   
>   #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 */
> diff --git a/src/acpica/source/include/acnamesp.h b/src/acpica/source/include/acnamesp.h
> index 529fc6e7..1e3db8d1 100644
> --- a/src/acpica/source/include/acnamesp.h
> +++ b/src/acpica/source/include/acnamesp.h
> @@ -168,14 +168,15 @@
>   /* Flags for AcpiNsLookup, AcpiNsSearchAndEnter */
>   
>   #define ACPI_NS_NO_UPSEARCH         0
> -#define ACPI_NS_SEARCH_PARENT       0x01
> -#define ACPI_NS_DONT_OPEN_SCOPE     0x02
> -#define ACPI_NS_NO_PEER_SEARCH      0x04
> -#define ACPI_NS_ERROR_IF_FOUND      0x08
> -#define ACPI_NS_PREFIX_IS_SCOPE     0x10
> -#define ACPI_NS_EXTERNAL            0x20
> -#define ACPI_NS_TEMPORARY           0x40
> -#define ACPI_NS_OVERRIDE_IF_FOUND   0x80
> +#define ACPI_NS_SEARCH_PARENT       0x0001
> +#define ACPI_NS_DONT_OPEN_SCOPE     0x0002
> +#define ACPI_NS_NO_PEER_SEARCH      0x0004
> +#define ACPI_NS_ERROR_IF_FOUND      0x0008
> +#define ACPI_NS_PREFIX_IS_SCOPE     0x0010
> +#define ACPI_NS_EXTERNAL            0x0020
> +#define ACPI_NS_TEMPORARY           0x0040
> +#define ACPI_NS_OVERRIDE_IF_FOUND   0x0080
> +#define ACPI_NS_EARLY_INIT          0x0100
>   
>   /* Flags for AcpiNsWalkNamespace */
>   
> diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
> index 110b375b..5097fcc1 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                 0x20180629
> +#define ACPI_CA_VERSION                 0x20180810
>   
>   #include "acconfig.h"
>   #include "actypes.h"
> diff --git a/src/acpica/source/include/acutils.h b/src/acpica/source/include/acutils.h
> index 8dfce901..1f760884 100644
> --- a/src/acpica/source/include/acutils.h
> +++ b/src/acpica/source/include/acutils.h
> @@ -362,6 +362,10 @@ BOOLEAN
>   AcpiUtDetectHexPrefix (
>       char                    **String);
>   
> +void
> +AcpiUtRemoveHexPrefix (
> +    char                    **String);
> +
>   BOOLEAN
>   AcpiUtDetectOctalPrefix (
>       char                    **String);
> diff --git a/src/acpica/source/tools/acpiexec/aecommon.h b/src/acpica/source/tools/acpiexec/aecommon.h
> index 233edc2b..8ada9021 100644
> --- a/src/acpica/source/tools/acpiexec/aecommon.h
> +++ b/src/acpica/source/tools/acpiexec/aecommon.h
> @@ -189,11 +189,22 @@ typedef struct ae_debug_regions
>   } AE_DEBUG_REGIONS;
>   
>   
> +/*
> + * Init file entry
> + */
> +typedef struct init_file_entry
> +{
> +    char                    *Name;
> +    UINT64                  Value;
> +} INIT_FILE_ENTRY;
> +
>   extern BOOLEAN              AcpiGbl_UseLocalFaultHandler;
>   extern BOOLEAN              AcpiGbl_VerboseHandlers;
>   extern BOOLEAN              AcpiGbl_IgnoreErrors;
>   extern BOOLEAN              AcpiGbl_AbortLoopOnTimeout;
>   extern UINT8                AcpiGbl_RegionFillValue;
> +extern INIT_FILE_ENTRY      *AcpiGbl_InitEntries;
> +extern UINT32               AcpiGbl_InitFileLineCount;
>   extern UINT8                AcpiGbl_UseHwReducedFadt;
>   extern BOOLEAN              AcpiGbl_DisplayRegionAccess;
>   extern BOOLEAN              AcpiGbl_DoInterfaceTests;
> @@ -331,13 +342,18 @@ AeOpenInitializationFile (
>       char                    *Filename);
>   
>   void
> -AeDoObjectOverrides (
> +AeProcessInitFile (
>       void);
>   
>   ACPI_STATUS
>   AeSetupConfiguration (
>       void                    *RegionAddr);
>   
> +ACPI_STATUS
> +AeLookupInitFileEntry (
> +    char                    *Pathname,
> +    UINT64                  *Value);
> +
>   /* aeexec */
>   
>   void
> diff --git a/src/acpica/source/tools/acpiexec/aeinitfile.c b/src/acpica/source/tools/acpiexec/aeinitfile.c
> index 804a2cbc..79b797e0 100644
> --- a/src/acpica/source/tools/acpiexec/aeinitfile.c
> +++ b/src/acpica/source/tools/acpiexec/aeinitfile.c
> @@ -159,10 +159,8 @@
>   /* Local prototypes */
>   
>   static void
> -AeDoOneOverride (
> -    char                    *Pathname,
> -    char                    *ValueString,
> -    ACPI_OPERAND_OBJECT     *ObjDesc,
> +AeEnterInitFileEntry (
> +    INIT_FILE_ENTRY         InitEntry,
>       ACPI_WALK_STATE         *WalkState);
>   
>   
> @@ -206,13 +204,15 @@ AeOpenInitializationFile (
>   
>   /******************************************************************************
>    *
> - * FUNCTION:    AeDoObjectOverrides
> + * FUNCTION:    AeProcessInitFile
>    *
>    * PARAMETERS:  None
>    *
>    * RETURN:      None
>    *
> - * DESCRIPTION: Read the initialization file and perform all overrides
> + * DESCRIPTION: Read the initialization file and perform all namespace
> + *              initializations. AcpiGbl_InitEntries will be used for region
> + *              field initialization.
>    *
>    * NOTE:        The format of the file is multiple lines, each of format:
>    *                  <ACPI-pathname> <Integer Value>
> @@ -220,12 +220,13 @@ AeOpenInitializationFile (
>    *****************************************************************************/
>   
>   void
> -AeDoObjectOverrides (
> +AeProcessInitFile(
>       void)
>   {
> -    ACPI_OPERAND_OBJECT     *ObjDesc;
>       ACPI_WALK_STATE         *WalkState;
>       int                     i;
> +    UINT64                  idx;
> +    ACPI_STATUS             Status;
>   
>   
>       if (!InitFile)
> @@ -235,13 +236,18 @@ AeDoObjectOverrides (
>   
>       /* Create needed objects to be reused for each init entry */
>   
> -    ObjDesc = AcpiUtCreateIntegerObject (0);
>       WalkState = AcpiDsCreateWalkState (0, NULL, NULL, NULL);
>       NameBuffer[0] = '\\';
>   
> -    /* Read the entire file line-by-line */
> -
>       while (fgets (LineBuffer, AE_FILE_BUFFER_SIZE, InitFile) != NULL)
> +    {
> +        ++AcpiGbl_InitFileLineCount;
> +    }
> +    rewind (InitFile);
> +
> +    AcpiGbl_InitEntries =
> +        AcpiOsAllocate (sizeof (INIT_FILE_ENTRY) * AcpiGbl_InitFileLineCount);
> +    for (idx = 0; fgets (LineBuffer, AE_FILE_BUFFER_SIZE, InitFile); ++idx)
>       {
>           if (sscanf (LineBuffer, "%s %s\n",
>                   &NameBuffer[1], ValueBuffer) != 2)
> @@ -257,7 +263,20 @@ AeDoObjectOverrides (
>               i = 1;
>           }
>   
> -        AeDoOneOverride (&NameBuffer[i], ValueBuffer, ObjDesc, WalkState);
> +        AcpiGbl_InitEntries[idx].Name =
> +            AcpiOsAllocateZeroed (strnlen (NameBuffer + i, AE_FILE_BUFFER_SIZE) + 1);
> +
> +        strcpy (AcpiGbl_InitEntries[idx].Name, NameBuffer + i);
> +
> +        Status = AcpiUtStrtoul64 (ValueBuffer, &AcpiGbl_InitEntries[idx].Value);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            AcpiOsPrintf ("%s %s\n", ValueBuffer,
> +                AcpiFormatException (Status));
> +            goto CleanupAndExit;
> +        }
> +
> +        AeEnterInitFileEntry (AcpiGbl_InitEntries[idx], WalkState);
>       }
>   
>       /* Cleanup */
> @@ -265,77 +284,97 @@ AeDoObjectOverrides (
>   CleanupAndExit:
>       fclose (InitFile);
>       AcpiDsDeleteWalkState (WalkState);
> -    AcpiUtRemoveReference (ObjDesc);
>   }
>   
>   
>   /******************************************************************************
>    *
> - * FUNCTION:    AeDoOneOverride
> + * FUNCTION:    AeInitFileEntry
>    *
> - * PARAMETERS:  Pathname            - AML namepath
> - *              ValueString         - New integer value to be stored
> - *              ObjDesc             - Descriptor with integer override value
> + * PARAMETERS:  InitEntry           - Entry of the init file
>    *              WalkState           - Used for the Store operation
>    *
>    * RETURN:      None
>    *
> - * DESCRIPTION: Perform an override for a single namespace object
> + * DESCRIPTION: Perform initialization of a single namespace object
> + *
> + *              Note: namespace of objects are limited to integers and region
> + *              fields units of 8 bytes at this time.
>    *
>    *****************************************************************************/
>   
>   static void
> -AeDoOneOverride (
> -    char                    *Pathname,
> -    char                    *ValueString,
> -    ACPI_OPERAND_OBJECT     *ObjDesc,
> +AeEnterInitFileEntry (
> +    INIT_FILE_ENTRY         InitEntry,
>       ACPI_WALK_STATE         *WalkState)
>   {
> -    ACPI_HANDLE             Handle;
> +    char                    *Pathname = InitEntry.Name;
> +    UINT64                  Value = InitEntry.Value;
> +    ACPI_OPERAND_OBJECT     *ObjDesc;
> +    ACPI_NAMESPACE_NODE     *NewNode;
>       ACPI_STATUS             Status;
> -    UINT64                  Value;
> -
>   
> -    AcpiOsPrintf ("Value Override: %s, ", Pathname);
>   
> -    /*
> -     * Get the namespace node associated with the override
> -     * pathname from the init file.
> -     */
> -    Status = AcpiGetHandle (NULL, Pathname, &Handle);
> +    AcpiOsPrintf ("Initializing namespace element: %s\n", Pathname);
> +    Status = AcpiNsLookup (NULL, Pathname, ACPI_TYPE_INTEGER,
> +        ACPI_IMODE_LOAD_PASS2, ACPI_NS_ERROR_IF_FOUND | ACPI_NS_NO_UPSEARCH |
> +        ACPI_NS_EARLY_INIT, NULL, &NewNode);
>       if (ACPI_FAILURE (Status))
>       {
> -        AcpiOsPrintf ("%s\n", AcpiFormatException (Status));
> +        ACPI_EXCEPTION ((AE_INFO, Status,
> +            "While creating name from namespace initialization file: %s",
> +            Pathname));
>           return;
>       }
>   
> -    /* Extract the 64-bit integer */
> +    ObjDesc = AcpiUtCreateIntegerObject (Value);
>   
> -    Status = AcpiUtStrtoul64 (ValueString, &Value);
> -    if (ACPI_FAILURE (Status))
> -    {
> -        AcpiOsPrintf ("%s %s\n", ValueString,
> -            AcpiFormatException (Status));
> -        return;
> -    }
> +    AcpiOsPrintf ("New value: 0x%8.8X%8.8X\n",
> +        ACPI_FORMAT_UINT64 (Value));
>   
> -    ObjDesc->Integer.Value = Value;
> +    /* Store pointer to value descriptor in the Node */
>   
> -    /*
> -     * At the point this function is called, the namespace is fully
> -     * built and initialized. We can simply store the new object to
> -     * the target node.
> -     */
> -    AcpiExEnterInterpreter ();
> -    Status = AcpiExStore (ObjDesc, Handle, WalkState);
> -    AcpiExExitInterpreter ();
> +    Status = AcpiNsAttachObject (NewNode, ObjDesc,
> +         ACPI_TYPE_INTEGER);
>   
> -    if (ACPI_FAILURE (Status))
> +    /* Remove local reference to the object */
> +
> +    AcpiUtRemoveReference (ObjDesc);
> +}
> +
> +
> +/******************************************************************************
> + *
> + * FUNCTION:    AeLookupInitFileEntry
> + *
> + * PARAMETERS:  Pathname            - AML namepath in external format
> + *              ValueString         - value of the namepath if it exitst
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Search the init file for a particular name and its value.
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +AeLookupInitFileEntry (
> +    char                    *Pathname,
> +    UINT64                  *Value)
> +{
> +    UINT32                  i;
> +
> +    if (!AcpiGbl_InitEntries)
>       {
> -        AcpiOsPrintf ("%s\n", AcpiFormatException (Status));
> -        return;
> +        return AE_NOT_FOUND;
>       }
>   
> -    AcpiOsPrintf ("New value: 0x%8.8X%8.8X\n",
> -        ACPI_FORMAT_UINT64 (Value));
> +    for (i = 0; i < AcpiGbl_InitFileLineCount; ++i)
> +    {
> +        if (!strcmp(AcpiGbl_InitEntries[i].Name, Pathname))
> +        {
> +            *Value = AcpiGbl_InitEntries[i].Value;
> +            return AE_OK;
> +        }
> +    }
> +    return AE_NOT_FOUND;
>   }
> diff --git a/src/acpica/source/tools/acpiexec/aeregion.c b/src/acpica/source/tools/acpiexec/aeregion.c
> index 56f93946..5bad8359 100644
> --- a/src/acpica/source/tools/acpiexec/aeregion.c
> +++ b/src/acpica/source/tools/acpiexec/aeregion.c
> @@ -234,9 +234,9 @@ AeRegionHandler (
>       SpaceId = RegionObject->Region.SpaceId;
>   
>       ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION,
> -        "Operation Region request on %s at 0x%X\n",
> +        "Operation Region request on %s at 0x%X, BitWidth 0x%X, RegionLength 0x%X\n",
>           AcpiUtGetRegionName (RegionObject->Region.SpaceId),
> -        (UINT32) Address));
> +        (UINT32) Address, BitWidth, (UINT32) Length));
>   
>       /*
>        * Region support can be disabled with the -do option.
> @@ -410,7 +410,7 @@ AeRegionHandler (
>           if (AcpiGbl_DisplayRegionAccess)
>           {
>               AcpiOsPrintf ("AcpiExec: %s "
> -                "%s: Attr %X Addr %.4X BaseAddr %.4X Len %.2X Width %X BufLen %X",
> +                "%s: Attr %X Addr %.4X BaseAddr %.4X Length %.2X BitWidth %X BufLen %X",
>                   AcpiUtGetRegionName (SpaceId),
>                   (Function & ACPI_IO_MASK) ? "Write" : "Read ",
>                   (UINT32) (Function >> 16),
> @@ -424,7 +424,7 @@ AeRegionHandler (
>                   Status = AcpiBufferToResource (MyContext->Connection,
>                       MyContext->Length, &Resource);
>   
> -                AcpiOsPrintf (" [AccLen %.2X Conn %p]",
> +                AcpiOsPrintf (" [AccessLength %.2X Connnection %p]",
>                       MyContext->AccessLength, MyContext->Connection);
>               }
>               AcpiOsPrintf ("\n");
> 


Acked-by: Alex Hung <alex.hung@canonical.com>
Ivan Hu Aug. 14, 2018, 7:45 a.m. UTC | #2
On 08/11/2018 12:49 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-August/001819.html
> 
> Signed-off-by: Colin Ian King <colin.king@canonical.com>
> ---
>   src/acpica/Makefile.am                        |   1 +
>   src/acpica/fwts_acpica.c                      |   3 +
>   .../source/components/debugger/dbinput.c      |  10 +-
>   .../source/components/debugger/dbmethod.c     |   7 +-
>   .../source/components/debugger/dbxface.c      |  10 +-
>   .../source/components/dispatcher/dsfield.c    |  26 ++++
>   .../source/components/hardware/hwregs.c       |  11 +-
>   .../source/components/hardware/hwsleep.c      |  19 ++-
>   .../source/components/namespace/nsaccess.c    |  16 ++
>   src/acpica/source/components/parser/psloop.c  |  41 ++++-
>   src/acpica/source/components/tables/tbdata.c  |   4 +-
>   .../source/components/utilities/utdelete.c    |   7 +-
>   .../source/components/utilities/uterror.c     |   6 +-
>   .../source/components/utilities/utstrsuppt.c  |  30 +++-
>   .../source/components/utilities/utstrtoul64.c |   2 +-
>   src/acpica/source/include/acconfig.h          |   2 +-
>   src/acpica/source/include/acexcep.h           |   7 +
>   src/acpica/source/include/aclocal.h           |   1 +
>   src/acpica/source/include/acnamesp.h          |  17 +-
>   src/acpica/source/include/acpixf.h            |   2 +-
>   src/acpica/source/include/acutils.h           |   4 +
>   src/acpica/source/tools/acpiexec/aecommon.h   |  18 ++-
>   src/acpica/source/tools/acpiexec/aeinitfile.c | 147 +++++++++++-------
>   src/acpica/source/tools/acpiexec/aeregion.c   |   8 +-
>   24 files changed, 301 insertions(+), 98 deletions(-)
> 
> diff --git a/src/acpica/Makefile.am b/src/acpica/Makefile.am
> index 114c6a5f..73d10449 100644
> --- a/src/acpica/Makefile.am
> +++ b/src/acpica/Makefile.am
> @@ -26,6 +26,7 @@ AM_CPPFLAGS = 						\
>   	-D_LINUX -DNDEBUG -D_CONSOLE -DACPI_EXEC_APP	\
>   	-I$(top_srcdir)/src/lib/include			\
>   	-I$(srcdir)/source/include			\
> +	-I$(srcdir)/source/tools/acpiexec		\
>   	`pkg-config --silence-errors --cflags json`	\
>   	`pkg-config --silence-errors --cflags json-c`	\
>   	-Wall -fno-strict-aliasing
> diff --git a/src/acpica/fwts_acpica.c b/src/acpica/fwts_acpica.c
> index d985e18a..1d7d1abb 100644
> --- a/src/acpica/fwts_acpica.c
> +++ b/src/acpica/fwts_acpica.c
> @@ -48,6 +48,7 @@
>   #include "acinterp.h"
>   #include "acapps.h"
>   #include "amlresrc.h"
> +#include "aecommon.h"
>   
>   #define ACPI_MAX_INIT_TABLES		(64)	/* Number of ACPI tables */
>   
> @@ -82,6 +83,8 @@ BOOLEAN AcpiGbl_AbortLoopOnTimeout = FALSE;
>   BOOLEAN AcpiGbl_IgnoreErrors = FALSE;
>   BOOLEAN AcpiGbl_VerboseHandlers = FALSE;
>   UINT8   AcpiGbl_RegionFillValue = 0;
> +INIT_FILE_ENTRY *AcpiGbl_InitEntries = NULL;
> +UINT32  AcpiGbl_InitFileLineCount = 0;
>   
>   static ACPI_TABLE_DESC		Tables[ACPI_MAX_INIT_TABLES];	/* ACPICA Table descriptors */
>   static bool			region_handler_called;		/* Region handler tracking */
> diff --git a/src/acpica/source/components/debugger/dbinput.c b/src/acpica/source/components/debugger/dbinput.c
> index 75e7a37f..0daca95b 100644
> --- a/src/acpica/source/components/debugger/dbinput.c
> +++ b/src/acpica/source/components/debugger/dbinput.c
> @@ -969,7 +969,11 @@ AcpiDbCommandDispatch (
>       case CMD_DISASSEMBLE:
>       case CMD_DISASM:
>   
> +#ifdef ACPI_DISASSEMBLER
>           (void) AcpiDbDisassembleMethod (AcpiGbl_DbArgs[1]);
> +#else
> +        AcpiOsPrintf ("The AML Disassembler is not configured/present\n");
> +#endif
>           break;
>   
>       case CMD_DUMP:
> @@ -1083,7 +1087,11 @@ AcpiDbCommandDispatch (
>   
>       case CMD_LIST:
>   
> -        AcpiDbDisassembleAml (AcpiGbl_DbArgs[1], Op);
> +#ifdef ACPI_DISASSEMBLER
> +        AcpiDbDisassembleAml (AcpiGbl_DbArgs[1], Op);;
> +#else
> +        AcpiOsPrintf ("The AML Disassembler is not configured/present\n");
> +#endif
>           break;
>   
>       case CMD_LOCKS:
> diff --git a/src/acpica/source/components/debugger/dbmethod.c b/src/acpica/source/components/debugger/dbmethod.c
> index d6c6aa55..a030823c 100644
> --- a/src/acpica/source/components/debugger/dbmethod.c
> +++ b/src/acpica/source/components/debugger/dbmethod.c
> @@ -393,6 +393,7 @@ Cleanup:
>   }
>   
>   
> +#ifdef ACPI_DISASSEMBLER
>   /*******************************************************************************
>    *
>    * FUNCTION:    AcpiDbDisassembleAml
> @@ -426,9 +427,7 @@ AcpiDbDisassembleAml (
>           NumStatements = strtoul (Statements, NULL, 0);
>       }
>   
> -#ifdef ACPI_DISASSEMBLER
>       AcpiDmDisassemble (NULL, Op, NumStatements);
> -#endif
>   }
>   
>   
> @@ -511,8 +510,6 @@ AcpiDbDisassembleMethod (
>       WalkState->ParseFlags |= ACPI_PARSE_DISASSEMBLE;
>   
>       Status = AcpiPsParseAml (WalkState);
> -
> -#ifdef ACPI_DISASSEMBLER
>       (void) AcpiDmParseDeferredOps (Op);
>   
>       /* Now we can disassemble the method */
> @@ -520,7 +517,6 @@ AcpiDbDisassembleMethod (
>       AcpiGbl_DmOpt_Verbose = FALSE;
>       AcpiDmDisassemble (NULL, Op, 0);
>       AcpiGbl_DmOpt_Verbose = TRUE;
> -#endif
>   
>       AcpiPsDeleteParseTree (Op);
>   
> @@ -531,6 +527,7 @@ AcpiDbDisassembleMethod (
>       AcpiUtReleaseOwnerId (&ObjDesc->Method.OwnerId);
>       return (AE_OK);
>   }
> +#endif
>   
>   
>   /*******************************************************************************
> diff --git a/src/acpica/source/components/debugger/dbxface.c b/src/acpica/source/components/debugger/dbxface.c
> index 0b964f69..c661b248 100644
> --- a/src/acpica/source/components/debugger/dbxface.c
> +++ b/src/acpica/source/components/debugger/dbxface.c
> @@ -154,6 +154,7 @@
>   #include "amlcode.h"
>   #include "acdebug.h"
>   #include "acinterp.h"
> +#include "acparser.h"
>   
>   
>   #define _COMPONENT          ACPI_CA_DEBUGGER
> @@ -435,10 +436,17 @@ AcpiDbSingleStep (
>               }
>           }
>   
> -        /* Now we can display it */
> +        /* Now we can disassemble and display it */
>   
>   #ifdef ACPI_DISASSEMBLER
>           AcpiDmDisassemble (WalkState, DisplayOp, ACPI_UINT32_MAX);
> +#else
> +        /*
> +         * The AML Disassembler is not configured - at least we can
> +         * display the opcode value and name
> +         */
> +        AcpiOsPrintf ("AML Opcode: %4.4X  %s\n", Op->Common.AmlOpcode,
> +            AcpiPsGetOpcodeName (Op->Common.AmlOpcode));
>   #endif
>   
>           if ((Op->Common.AmlOpcode == AML_IF_OP) ||
> diff --git a/src/acpica/source/components/dispatcher/dsfield.c b/src/acpica/source/components/dispatcher/dsfield.c
> index df770c1c..3db39fb8 100644
> --- a/src/acpica/source/components/dispatcher/dsfield.c
> +++ b/src/acpica/source/components/dispatcher/dsfield.c
> @@ -157,6 +157,10 @@
>   #include "acnamesp.h"
>   #include "acparser.h"
>   
> +#ifdef ACPI_EXEC_APP
> +#include "aecommon.h"
> +#endif
> +
>   
>   #define _COMPONENT          ACPI_DISPATCHER
>           ACPI_MODULE_NAME    ("dsfield")
> @@ -430,6 +434,13 @@ AcpiDsGetFieldNames (
>       UINT64                  Position;
>       ACPI_PARSE_OBJECT       *Child;
>   
> +#ifdef ACPI_EXEC_APP
> +    UINT64                  Value = 0;
> +    ACPI_OPERAND_OBJECT     *ResultDesc;
> +    ACPI_OPERAND_OBJECT     *ObjDesc;
> +    char                    *NamePath;
> +#endif
> +
>   
>       ACPI_FUNCTION_TRACE_PTR (DsGetFieldNames, Info);
>   
> @@ -564,6 +575,18 @@ AcpiDsGetFieldNames (
>                       {
>                           return_ACPI_STATUS (Status);
>                       }
> +#ifdef ACPI_EXEC_APP
> +                    NamePath = AcpiNsGetExternalPathname (Info->FieldNode);
> +                    ObjDesc = AcpiUtCreateIntegerObject (Value);
> +                    if (ACPI_SUCCESS (AeLookupInitFileEntry (NamePath, &Value)))
> +                    {
> +                        AcpiExWriteDataToField (ObjDesc,
> +                            AcpiNsGetAttachedObject (Info->FieldNode),
> +                            &ResultDesc);
> +                    }
> +                    AcpiUtRemoveReference (ObjDesc);
> +                    ACPI_FREE (NamePath);
> +#endif
>                   }
>               }
>   
> @@ -756,6 +779,9 @@ AcpiDsInitFieldObjects (
>           Flags |= ACPI_NS_TEMPORARY;
>       }
>   
> +#ifdef ACPI_EXEC_APP
> +        Flags |= ACPI_NS_OVERRIDE_IF_FOUND;
> +#endif
>       /*
>        * Walk the list of entries in the FieldList
>        * Note: FieldList can be of zero length. In this case, Arg will be NULL.
> diff --git a/src/acpica/source/components/hardware/hwregs.c b/src/acpica/source/components/hardware/hwregs.c
> index c0deed33..ec106847 100644
> --- a/src/acpica/source/components/hardware/hwregs.c
> +++ b/src/acpica/source/components/hardware/hwregs.c
> @@ -724,13 +724,20 @@ AcpiHwRegisterRead (
>       case ACPI_REGISTER_PM2_CONTROL:          /* 8-bit access */
>   
>           Status = AcpiHwRead (&Value64, &AcpiGbl_FADT.XPm2ControlBlock);
> -        Value = (UINT32) Value64;
> +        if (ACPI_SUCCESS (Status))
> +        {
> +            Value = (UINT32) Value64;
> +        }
>           break;
>   
>       case ACPI_REGISTER_PM_TIMER:             /* 32-bit access */
>   
>           Status = AcpiHwRead (&Value64, &AcpiGbl_FADT.XPmTimerBlock);
> -        Value = (UINT32) Value64;
> +        if (ACPI_SUCCESS (Status))
> +        {
> +            Value = (UINT32) Value64;
> +        }
> +
>           break;
>   
>       case ACPI_REGISTER_SMI_COMMAND_BLOCK:    /* 8-bit access */
> diff --git a/src/acpica/source/components/hardware/hwsleep.c b/src/acpica/source/components/hardware/hwsleep.c
> index fe111872..7e435ace 100644
> --- a/src/acpica/source/components/hardware/hwsleep.c
> +++ b/src/acpica/source/components/hardware/hwsleep.c
> @@ -198,17 +198,28 @@ AcpiHwLegacySleep (
>           return_ACPI_STATUS (Status);
>       }
>   
> -    /*
> -     * 1) Disable all GPEs
> -     * 2) Enable all wakeup GPEs
> -     */
> +    /* Disable all GPEs */
> +
>       Status = AcpiHwDisableAllGpes ();
>       if (ACPI_FAILURE (Status))
>       {
>           return_ACPI_STATUS (Status);
>       }
> +    /*
> +     * If the target sleep state is S5, clear all GPEs and fixed events too
> +     */
> +    if (SleepState == ACPI_STATE_S5)
> +    {
> +        Status = AcpiHwClearAcpiStatus();
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return_ACPI_STATUS (Status);
> +        }
> +    }
>       AcpiGbl_SystemAwakeAndRunning = FALSE;
>   
> +    /* Enable all wakeup GPEs */
> +
>       Status = AcpiHwEnableAllWakeupGpes ();
>       if (ACPI_FAILURE (Status))
>       {
> diff --git a/src/acpica/source/components/namespace/nsaccess.c b/src/acpica/source/components/namespace/nsaccess.c
> index bf530d48..af97c51f 100644
> --- a/src/acpica/source/components/namespace/nsaccess.c
> +++ b/src/acpica/source/components/namespace/nsaccess.c
> @@ -724,6 +724,15 @@ AcpiNsLookup (
>                       CurrentNode));
>               }
>   
> +#ifdef ACPI_EXEC_APP
> +            if ((Status == AE_ALREADY_EXISTS) &&
> +                (ThisNode->Flags & ANOBJ_NODE_EARLY_INIT))
> +            {
> +                ThisNode->Flags &= ~ANOBJ_NODE_EARLY_INIT;
> +                Status = AE_OK;
> +            }
> +#endif
> +
>   #ifdef ACPI_ASL_COMPILER
>               /*
>                * If this ACPI name already exists within the namespace as an
> @@ -845,6 +854,13 @@ AcpiNsLookup (
>           }
>       }
>   
> +#ifdef ACPI_EXEC_APP
> +    if (Flags & ACPI_NS_EARLY_INIT)
> +    {
> +        ThisNode->Flags |= ANOBJ_NODE_EARLY_INIT;
> +    }
> +#endif
> +
>       *ReturnNode = ThisNode;
>       return_ACPI_STATUS (AE_OK);
>   }
> diff --git a/src/acpica/source/components/parser/psloop.c b/src/acpica/source/components/parser/psloop.c
> index fd6773c1..ef517b54 100644
> --- a/src/acpica/source/components/parser/psloop.c
> +++ b/src/acpica/source/components/parser/psloop.c
> @@ -164,6 +164,7 @@
>   #include "acdispat.h"
>   #include "amlcode.h"
>   #include "acconvert.h"
> +#include "acnamesp.h"
>   
>   #define _COMPONENT          ACPI_PARSER
>           ACPI_MODULE_NAME    ("psloop")
> @@ -645,6 +646,18 @@ AcpiPsParseLoop (
>               Status = AcpiPsCreateOp (WalkState, AmlOpStart, &Op);
>               if (ACPI_FAILURE (Status))
>               {
> +                /*
> +                 * ACPI_PARSE_MODULE_LEVEL means that we are loading a table by
> +                 * executing it as a control method. However, if we encounter
> +                 * an error while loading the table, we need to keep trying to
> +                 * load the table rather than aborting the table load. Set the
> +                 * status to AE_OK to proceed with the table load.
> +                 */
> +                if ((WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL) &&
> +                    Status == AE_ALREADY_EXISTS)
> +                {
> +                    Status = AE_OK;
> +                }
>                   if (Status == AE_CTRL_PARSE_CONTINUE)
>                   {
>                       continue;
> @@ -665,18 +678,20 @@ AcpiPsParseLoop (
>                   {
>                       return_ACPI_STATUS (Status);
>                   }
> -                if (WalkState->Opcode == AML_SCOPE_OP)
> +                if (AcpiNsOpensScope (
> +                    AcpiPsGetOpcodeInfo (WalkState->Opcode)->ObjectType))
>                   {
>                       /*
> -                     * If the scope op fails to parse, skip the body of the
> -                     * scope op because the parse failure indicates that the
> -                     * device may not exist.
> +                     * If the scope/device op fails to parse, skip the body of
> +                     * the scope op because the parse failure indicates that
> +                     * the device may not exist.
>                        */
> +                    ACPI_ERROR ((AE_INFO, "Skip parsing opcode %s",
> +                        AcpiPsGetOpcodeName (WalkState->Opcode)));
>                       WalkState->ParserState.Aml = WalkState->Aml + 1;
>                       WalkState->ParserState.Aml =
>                           AcpiPsGetNextPackageEnd(&WalkState->ParserState);
>                       WalkState->Aml = WalkState->ParserState.Aml;
> -                    ACPI_ERROR ((AE_INFO, "Skipping Scope block"));
>                   }
>   
>                   continue;
> @@ -834,6 +849,22 @@ AcpiPsParseLoop (
>               {
>                   Status = AE_OK;
>               }
> +            else if ((WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL) &&
> +                (ACPI_AML_EXCEPTION(Status) || Status == AE_ALREADY_EXISTS ||
> +                Status == AE_NOT_FOUND))
> +            {
> +                /*
> +                 * ACPI_PARSE_MODULE_LEVEL flag means that we are currently
> +                 * loading a table by executing it as a control method.
> +                 * However, if we encounter an error while loading the table,
> +                 * we need to keep trying to load the table rather than
> +                 * aborting the table load (setting the status to AE_OK
> +                 * continues the table load). If we get a failure at this
> +                 * point, it means that the dispatcher got an error while
> +                 * trying to execute the Op.
> +                 */
> +                Status = AE_OK;
> +            }
>           }
>   
>           Status = AcpiPsCompleteOp (WalkState, &Op, Status);
> diff --git a/src/acpica/source/components/tables/tbdata.c b/src/acpica/source/components/tables/tbdata.c
> index 61a2d340..7b44fc74 100644
> --- a/src/acpica/source/components/tables/tbdata.c
> +++ b/src/acpica/source/components/tables/tbdata.c
> @@ -711,9 +711,9 @@ AcpiTbVerifyTempTable (
>               {
>                   if (Status != AE_CTRL_TERMINATE)
>                   {
> -                    ACPI_EXCEPTION ((AE_INFO, AE_NO_MEMORY,
> +                    ACPI_EXCEPTION ((AE_INFO, Status,
>                           "%4.4s 0x%8.8X%8.8X"
> -                        " Table is duplicated",
> +                        " Table is already loaded",
>                           AcpiUtValidNameseg (TableDesc->Signature.Ascii) ?
>                               TableDesc->Signature.Ascii : "????",
>                           ACPI_FORMAT_UINT64 (TableDesc->Address)));
> diff --git a/src/acpica/source/components/utilities/utdelete.c b/src/acpica/source/components/utilities/utdelete.c
> index 4565d8fa..da2e31ff 100644
> --- a/src/acpica/source/components/utilities/utdelete.c
> +++ b/src/acpica/source/components/utilities/utdelete.c
> @@ -520,6 +520,7 @@ AcpiUtUpdateRefCount (
>       UINT16                  OriginalCount;
>       UINT16                  NewCount = 0;
>       ACPI_CPU_FLAGS          LockFlags;
> +    char                    *Message;
>   
>   
>       ACPI_FUNCTION_NAME (UtUpdateRefCount);
> @@ -560,6 +561,7 @@ AcpiUtUpdateRefCount (
>               "Obj %p Type %.2X [%s] Refs %.2X [Incremented]\n",
>               Object, Object->Common.Type,
>               AcpiUtGetObjectTypeName (Object), NewCount));
> +        Message = "Incremement";
>           break;
>   
>       case REF_DECREMENT:
> @@ -591,6 +593,7 @@ AcpiUtUpdateRefCount (
>           {
>               AcpiUtDeleteInternalObj (Object);
>           }
> +        Message = "Decrement";
>           break;
>   
>       default:
> @@ -608,8 +611,8 @@ AcpiUtUpdateRefCount (
>       if (NewCount > ACPI_MAX_REFERENCE_COUNT)
>       {
>           ACPI_WARNING ((AE_INFO,
> -            "Large Reference Count (0x%X) in object %p, Type=0x%.2X",
> -            NewCount, Object, Object->Common.Type));
> +            "Large Reference Count (0x%X) in object %p, Type=0x%.2X Operation=%s",
> +            NewCount, Object, Object->Common.Type, Message));
>       }
>   }
>   
> diff --git a/src/acpica/source/components/utilities/uterror.c b/src/acpica/source/components/utilities/uterror.c
> index eca92f3b..67c22330 100644
> --- a/src/acpica/source/components/utilities/uterror.c
> +++ b/src/acpica/source/components/utilities/uterror.c
> @@ -352,19 +352,19 @@ AcpiUtPrefixedNamespaceError (
>       {
>       case AE_ALREADY_EXISTS:
>   
> -        AcpiOsPrintf ("\n" ACPI_MSG_BIOS_ERROR);
> +        AcpiOsPrintf (ACPI_MSG_BIOS_ERROR);
>           Message = "Failure creating";
>           break;
>   
>       case AE_NOT_FOUND:
>   
> -        AcpiOsPrintf ("\n" ACPI_MSG_BIOS_ERROR);
> +        AcpiOsPrintf (ACPI_MSG_BIOS_ERROR);
>           Message = "Could not resolve";
>           break;
>   
>       default:
>   
> -        AcpiOsPrintf ("\n" ACPI_MSG_ERROR);
> +        AcpiOsPrintf (ACPI_MSG_ERROR);
>           Message = "Failure resolving";
>           break;
>       }
> diff --git a/src/acpica/source/components/utilities/utstrsuppt.c b/src/acpica/source/components/utilities/utstrsuppt.c
> index 2e7232a3..b482da21 100644
> --- a/src/acpica/source/components/utilities/utstrsuppt.c
> +++ b/src/acpica/source/components/utilities/utstrsuppt.c
> @@ -419,15 +419,39 @@ BOOLEAN
>   AcpiUtDetectHexPrefix (
>       char                    **String)
>   {
> +    char                    *InitialPosition = *String;
>   
> +    AcpiUtRemoveHexPrefix (String);
> +    if (*String != InitialPosition)
> +    {
> +        return (TRUE); /* String is past leading 0x */
> +    }
> +
> +    return (FALSE);     /* Not a hex string */
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiUtRemoveHexPrefix
> + *
> + * PARAMETERS:  String                  - Pointer to input ASCII string
> + *
> + * RETURN:      none
> + *
> + * DESCRIPTION: Remove a hex "0x" prefix
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiUtRemoveHexPrefix (
> +    char                    **String)
> +{
>       if ((**String == ACPI_ASCII_ZERO) &&
>           (tolower ((int) *(*String + 1)) == 'x'))
>       {
>           *String += 2;        /* Go past the leading 0x */
> -        return (TRUE);
>       }
> -
> -    return (FALSE);     /* Not a hex string */
>   }
>   
>   
> diff --git a/src/acpica/source/components/utilities/utstrtoul64.c b/src/acpica/source/components/utilities/utstrtoul64.c
> index 5bbf24fd..77190e10 100644
> --- a/src/acpica/source/components/utilities/utstrtoul64.c
> +++ b/src/acpica/source/components/utilities/utstrtoul64.c
> @@ -383,7 +383,7 @@ AcpiUtImplicitStrtoul64 (
>        * implicit conversions, and the "0x" prefix is "not allowed".
>        * However, allow a "0x" prefix as an ACPI extension.
>        */
> -    AcpiUtDetectHexPrefix (&String);
> +    AcpiUtRemoveHexPrefix (&String);
>   
>       if (!AcpiUtRemoveLeadingZeros (&String))
>       {
> diff --git a/src/acpica/source/include/acconfig.h b/src/acpica/source/include/acconfig.h
> index c5a67ca0..41f3dff0 100644
> --- a/src/acpica/source/include/acconfig.h
> +++ b/src/acpica/source/include/acconfig.h
> @@ -233,7 +233,7 @@
>   
>   /* Maximum object reference count (detects object deletion issues) */
>   
> -#define ACPI_MAX_REFERENCE_COUNT        0x800
> +#define ACPI_MAX_REFERENCE_COUNT        0x4000
>   
>   /* Default page size for use in mapping memory for operation regions */
>   
> diff --git a/src/acpica/source/include/acexcep.h b/src/acpica/source/include/acexcep.h
> index 828f9fb9..ec2304c5 100644
> --- a/src/acpica/source/include/acexcep.h
> +++ b/src/acpica/source/include/acexcep.h
> @@ -204,6 +204,13 @@ typedef struct acpi_exception_info
>   
>   #define AE_OK                           (ACPI_STATUS) 0x0000
>   
> +#define ACPI_ENV_EXCEPTION(Status)      (Status & AE_CODE_ENVIRONMENTAL)
> +#define ACPI_AML_EXCEPTION(Status)      (Status & AE_CODE_AML)
> +#define ACPI_PROG_EXCEPTION(Status)     (Status & AE_CODE_PROGRAMMER)
> +#define ACPI_TABLE_EXCEPTION(Status)    (Status & AE_CODE_ACPI_TABLES)
> +#define ACPI_CNTL_EXCEPTION(Status)     (Status & AE_CODE_CONTROL)
> +
> +
>   /*
>    * Environmental exceptions
>    */
> diff --git a/src/acpica/source/include/aclocal.h b/src/acpica/source/include/aclocal.h
> index 58c09379..2e2bcd0d 100644
> --- a/src/acpica/source/include/aclocal.h
> +++ b/src/acpica/source/include/aclocal.h
> @@ -327,6 +327,7 @@ typedef struct acpi_namespace_node
>   #define ANOBJ_SUBTREE_HAS_INI           0x10    /* Used to optimize device initialization */
>   #define ANOBJ_EVALUATED                 0x20    /* Set on first evaluation of node */
>   #define ANOBJ_ALLOCATED_BUFFER          0x40    /* Method AML buffer is dynamic (InstallMethod) */
> +#define ANOBJ_NODE_EARLY_INIT           0x80    /* AcpiExec only: Node was create via init file (-fi) */
>   
>   #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 */
> diff --git a/src/acpica/source/include/acnamesp.h b/src/acpica/source/include/acnamesp.h
> index 529fc6e7..1e3db8d1 100644
> --- a/src/acpica/source/include/acnamesp.h
> +++ b/src/acpica/source/include/acnamesp.h
> @@ -168,14 +168,15 @@
>   /* Flags for AcpiNsLookup, AcpiNsSearchAndEnter */
>   
>   #define ACPI_NS_NO_UPSEARCH         0
> -#define ACPI_NS_SEARCH_PARENT       0x01
> -#define ACPI_NS_DONT_OPEN_SCOPE     0x02
> -#define ACPI_NS_NO_PEER_SEARCH      0x04
> -#define ACPI_NS_ERROR_IF_FOUND      0x08
> -#define ACPI_NS_PREFIX_IS_SCOPE     0x10
> -#define ACPI_NS_EXTERNAL            0x20
> -#define ACPI_NS_TEMPORARY           0x40
> -#define ACPI_NS_OVERRIDE_IF_FOUND   0x80
> +#define ACPI_NS_SEARCH_PARENT       0x0001
> +#define ACPI_NS_DONT_OPEN_SCOPE     0x0002
> +#define ACPI_NS_NO_PEER_SEARCH      0x0004
> +#define ACPI_NS_ERROR_IF_FOUND      0x0008
> +#define ACPI_NS_PREFIX_IS_SCOPE     0x0010
> +#define ACPI_NS_EXTERNAL            0x0020
> +#define ACPI_NS_TEMPORARY           0x0040
> +#define ACPI_NS_OVERRIDE_IF_FOUND   0x0080
> +#define ACPI_NS_EARLY_INIT          0x0100
>   
>   /* Flags for AcpiNsWalkNamespace */
>   
> diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
> index 110b375b..5097fcc1 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                 0x20180629
> +#define ACPI_CA_VERSION                 0x20180810
>   
>   #include "acconfig.h"
>   #include "actypes.h"
> diff --git a/src/acpica/source/include/acutils.h b/src/acpica/source/include/acutils.h
> index 8dfce901..1f760884 100644
> --- a/src/acpica/source/include/acutils.h
> +++ b/src/acpica/source/include/acutils.h
> @@ -362,6 +362,10 @@ BOOLEAN
>   AcpiUtDetectHexPrefix (
>       char                    **String);
>   
> +void
> +AcpiUtRemoveHexPrefix (
> +    char                    **String);
> +
>   BOOLEAN
>   AcpiUtDetectOctalPrefix (
>       char                    **String);
> diff --git a/src/acpica/source/tools/acpiexec/aecommon.h b/src/acpica/source/tools/acpiexec/aecommon.h
> index 233edc2b..8ada9021 100644
> --- a/src/acpica/source/tools/acpiexec/aecommon.h
> +++ b/src/acpica/source/tools/acpiexec/aecommon.h
> @@ -189,11 +189,22 @@ typedef struct ae_debug_regions
>   } AE_DEBUG_REGIONS;
>   
>   
> +/*
> + * Init file entry
> + */
> +typedef struct init_file_entry
> +{
> +    char                    *Name;
> +    UINT64                  Value;
> +} INIT_FILE_ENTRY;
> +
>   extern BOOLEAN              AcpiGbl_UseLocalFaultHandler;
>   extern BOOLEAN              AcpiGbl_VerboseHandlers;
>   extern BOOLEAN              AcpiGbl_IgnoreErrors;
>   extern BOOLEAN              AcpiGbl_AbortLoopOnTimeout;
>   extern UINT8                AcpiGbl_RegionFillValue;
> +extern INIT_FILE_ENTRY      *AcpiGbl_InitEntries;
> +extern UINT32               AcpiGbl_InitFileLineCount;
>   extern UINT8                AcpiGbl_UseHwReducedFadt;
>   extern BOOLEAN              AcpiGbl_DisplayRegionAccess;
>   extern BOOLEAN              AcpiGbl_DoInterfaceTests;
> @@ -331,13 +342,18 @@ AeOpenInitializationFile (
>       char                    *Filename);
>   
>   void
> -AeDoObjectOverrides (
> +AeProcessInitFile (
>       void);
>   
>   ACPI_STATUS
>   AeSetupConfiguration (
>       void                    *RegionAddr);
>   
> +ACPI_STATUS
> +AeLookupInitFileEntry (
> +    char                    *Pathname,
> +    UINT64                  *Value);
> +
>   /* aeexec */
>   
>   void
> diff --git a/src/acpica/source/tools/acpiexec/aeinitfile.c b/src/acpica/source/tools/acpiexec/aeinitfile.c
> index 804a2cbc..79b797e0 100644
> --- a/src/acpica/source/tools/acpiexec/aeinitfile.c
> +++ b/src/acpica/source/tools/acpiexec/aeinitfile.c
> @@ -159,10 +159,8 @@
>   /* Local prototypes */
>   
>   static void
> -AeDoOneOverride (
> -    char                    *Pathname,
> -    char                    *ValueString,
> -    ACPI_OPERAND_OBJECT     *ObjDesc,
> +AeEnterInitFileEntry (
> +    INIT_FILE_ENTRY         InitEntry,
>       ACPI_WALK_STATE         *WalkState);
>   
>   
> @@ -206,13 +204,15 @@ AeOpenInitializationFile (
>   
>   /******************************************************************************
>    *
> - * FUNCTION:    AeDoObjectOverrides
> + * FUNCTION:    AeProcessInitFile
>    *
>    * PARAMETERS:  None
>    *
>    * RETURN:      None
>    *
> - * DESCRIPTION: Read the initialization file and perform all overrides
> + * DESCRIPTION: Read the initialization file and perform all namespace
> + *              initializations. AcpiGbl_InitEntries will be used for region
> + *              field initialization.
>    *
>    * NOTE:        The format of the file is multiple lines, each of format:
>    *                  <ACPI-pathname> <Integer Value>
> @@ -220,12 +220,13 @@ AeOpenInitializationFile (
>    *****************************************************************************/
>   
>   void
> -AeDoObjectOverrides (
> +AeProcessInitFile(
>       void)
>   {
> -    ACPI_OPERAND_OBJECT     *ObjDesc;
>       ACPI_WALK_STATE         *WalkState;
>       int                     i;
> +    UINT64                  idx;
> +    ACPI_STATUS             Status;
>   
>   
>       if (!InitFile)
> @@ -235,13 +236,18 @@ AeDoObjectOverrides (
>   
>       /* Create needed objects to be reused for each init entry */
>   
> -    ObjDesc = AcpiUtCreateIntegerObject (0);
>       WalkState = AcpiDsCreateWalkState (0, NULL, NULL, NULL);
>       NameBuffer[0] = '\\';
>   
> -    /* Read the entire file line-by-line */
> -
>       while (fgets (LineBuffer, AE_FILE_BUFFER_SIZE, InitFile) != NULL)
> +    {
> +        ++AcpiGbl_InitFileLineCount;
> +    }
> +    rewind (InitFile);
> +
> +    AcpiGbl_InitEntries =
> +        AcpiOsAllocate (sizeof (INIT_FILE_ENTRY) * AcpiGbl_InitFileLineCount);
> +    for (idx = 0; fgets (LineBuffer, AE_FILE_BUFFER_SIZE, InitFile); ++idx)
>       {
>           if (sscanf (LineBuffer, "%s %s\n",
>                   &NameBuffer[1], ValueBuffer) != 2)
> @@ -257,7 +263,20 @@ AeDoObjectOverrides (
>               i = 1;
>           }
>   
> -        AeDoOneOverride (&NameBuffer[i], ValueBuffer, ObjDesc, WalkState);
> +        AcpiGbl_InitEntries[idx].Name =
> +            AcpiOsAllocateZeroed (strnlen (NameBuffer + i, AE_FILE_BUFFER_SIZE) + 1);
> +
> +        strcpy (AcpiGbl_InitEntries[idx].Name, NameBuffer + i);
> +
> +        Status = AcpiUtStrtoul64 (ValueBuffer, &AcpiGbl_InitEntries[idx].Value);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            AcpiOsPrintf ("%s %s\n", ValueBuffer,
> +                AcpiFormatException (Status));
> +            goto CleanupAndExit;
> +        }
> +
> +        AeEnterInitFileEntry (AcpiGbl_InitEntries[idx], WalkState);
>       }
>   
>       /* Cleanup */
> @@ -265,77 +284,97 @@ AeDoObjectOverrides (
>   CleanupAndExit:
>       fclose (InitFile);
>       AcpiDsDeleteWalkState (WalkState);
> -    AcpiUtRemoveReference (ObjDesc);
>   }
>   
>   
>   /******************************************************************************
>    *
> - * FUNCTION:    AeDoOneOverride
> + * FUNCTION:    AeInitFileEntry
>    *
> - * PARAMETERS:  Pathname            - AML namepath
> - *              ValueString         - New integer value to be stored
> - *              ObjDesc             - Descriptor with integer override value
> + * PARAMETERS:  InitEntry           - Entry of the init file
>    *              WalkState           - Used for the Store operation
>    *
>    * RETURN:      None
>    *
> - * DESCRIPTION: Perform an override for a single namespace object
> + * DESCRIPTION: Perform initialization of a single namespace object
> + *
> + *              Note: namespace of objects are limited to integers and region
> + *              fields units of 8 bytes at this time.
>    *
>    *****************************************************************************/
>   
>   static void
> -AeDoOneOverride (
> -    char                    *Pathname,
> -    char                    *ValueString,
> -    ACPI_OPERAND_OBJECT     *ObjDesc,
> +AeEnterInitFileEntry (
> +    INIT_FILE_ENTRY         InitEntry,
>       ACPI_WALK_STATE         *WalkState)
>   {
> -    ACPI_HANDLE             Handle;
> +    char                    *Pathname = InitEntry.Name;
> +    UINT64                  Value = InitEntry.Value;
> +    ACPI_OPERAND_OBJECT     *ObjDesc;
> +    ACPI_NAMESPACE_NODE     *NewNode;
>       ACPI_STATUS             Status;
> -    UINT64                  Value;
> -
>   
> -    AcpiOsPrintf ("Value Override: %s, ", Pathname);
>   
> -    /*
> -     * Get the namespace node associated with the override
> -     * pathname from the init file.
> -     */
> -    Status = AcpiGetHandle (NULL, Pathname, &Handle);
> +    AcpiOsPrintf ("Initializing namespace element: %s\n", Pathname);
> +    Status = AcpiNsLookup (NULL, Pathname, ACPI_TYPE_INTEGER,
> +        ACPI_IMODE_LOAD_PASS2, ACPI_NS_ERROR_IF_FOUND | ACPI_NS_NO_UPSEARCH |
> +        ACPI_NS_EARLY_INIT, NULL, &NewNode);
>       if (ACPI_FAILURE (Status))
>       {
> -        AcpiOsPrintf ("%s\n", AcpiFormatException (Status));
> +        ACPI_EXCEPTION ((AE_INFO, Status,
> +            "While creating name from namespace initialization file: %s",
> +            Pathname));
>           return;
>       }
>   
> -    /* Extract the 64-bit integer */
> +    ObjDesc = AcpiUtCreateIntegerObject (Value);
>   
> -    Status = AcpiUtStrtoul64 (ValueString, &Value);
> -    if (ACPI_FAILURE (Status))
> -    {
> -        AcpiOsPrintf ("%s %s\n", ValueString,
> -            AcpiFormatException (Status));
> -        return;
> -    }
> +    AcpiOsPrintf ("New value: 0x%8.8X%8.8X\n",
> +        ACPI_FORMAT_UINT64 (Value));
>   
> -    ObjDesc->Integer.Value = Value;
> +    /* Store pointer to value descriptor in the Node */
>   
> -    /*
> -     * At the point this function is called, the namespace is fully
> -     * built and initialized. We can simply store the new object to
> -     * the target node.
> -     */
> -    AcpiExEnterInterpreter ();
> -    Status = AcpiExStore (ObjDesc, Handle, WalkState);
> -    AcpiExExitInterpreter ();
> +    Status = AcpiNsAttachObject (NewNode, ObjDesc,
> +         ACPI_TYPE_INTEGER);
>   
> -    if (ACPI_FAILURE (Status))
> +    /* Remove local reference to the object */
> +
> +    AcpiUtRemoveReference (ObjDesc);
> +}
> +
> +
> +/******************************************************************************
> + *
> + * FUNCTION:    AeLookupInitFileEntry
> + *
> + * PARAMETERS:  Pathname            - AML namepath in external format
> + *              ValueString         - value of the namepath if it exitst
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Search the init file for a particular name and its value.
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +AeLookupInitFileEntry (
> +    char                    *Pathname,
> +    UINT64                  *Value)
> +{
> +    UINT32                  i;
> +
> +    if (!AcpiGbl_InitEntries)
>       {
> -        AcpiOsPrintf ("%s\n", AcpiFormatException (Status));
> -        return;
> +        return AE_NOT_FOUND;
>       }
>   
> -    AcpiOsPrintf ("New value: 0x%8.8X%8.8X\n",
> -        ACPI_FORMAT_UINT64 (Value));
> +    for (i = 0; i < AcpiGbl_InitFileLineCount; ++i)
> +    {
> +        if (!strcmp(AcpiGbl_InitEntries[i].Name, Pathname))
> +        {
> +            *Value = AcpiGbl_InitEntries[i].Value;
> +            return AE_OK;
> +        }
> +    }
> +    return AE_NOT_FOUND;
>   }
> diff --git a/src/acpica/source/tools/acpiexec/aeregion.c b/src/acpica/source/tools/acpiexec/aeregion.c
> index 56f93946..5bad8359 100644
> --- a/src/acpica/source/tools/acpiexec/aeregion.c
> +++ b/src/acpica/source/tools/acpiexec/aeregion.c
> @@ -234,9 +234,9 @@ AeRegionHandler (
>       SpaceId = RegionObject->Region.SpaceId;
>   
>       ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION,
> -        "Operation Region request on %s at 0x%X\n",
> +        "Operation Region request on %s at 0x%X, BitWidth 0x%X, RegionLength 0x%X\n",
>           AcpiUtGetRegionName (RegionObject->Region.SpaceId),
> -        (UINT32) Address));
> +        (UINT32) Address, BitWidth, (UINT32) Length));
>   
>       /*
>        * Region support can be disabled with the -do option.
> @@ -410,7 +410,7 @@ AeRegionHandler (
>           if (AcpiGbl_DisplayRegionAccess)
>           {
>               AcpiOsPrintf ("AcpiExec: %s "
> -                "%s: Attr %X Addr %.4X BaseAddr %.4X Len %.2X Width %X BufLen %X",
> +                "%s: Attr %X Addr %.4X BaseAddr %.4X Length %.2X BitWidth %X BufLen %X",
>                   AcpiUtGetRegionName (SpaceId),
>                   (Function & ACPI_IO_MASK) ? "Write" : "Read ",
>                   (UINT32) (Function >> 16),
> @@ -424,7 +424,7 @@ AeRegionHandler (
>                   Status = AcpiBufferToResource (MyContext->Connection,
>                       MyContext->Length, &Resource);
>   
> -                AcpiOsPrintf (" [AccLen %.2X Conn %p]",
> +                AcpiOsPrintf (" [AccessLength %.2X Connnection %p]",
>                       MyContext->AccessLength, MyContext->Connection);
>               }
>               AcpiOsPrintf ("\n");
> 

Acked-by: Ivan Hu <ivan.hu@canonical.com>
diff mbox series

Patch

diff --git a/src/acpica/Makefile.am b/src/acpica/Makefile.am
index 114c6a5f..73d10449 100644
--- a/src/acpica/Makefile.am
+++ b/src/acpica/Makefile.am
@@ -26,6 +26,7 @@  AM_CPPFLAGS = 						\
 	-D_LINUX -DNDEBUG -D_CONSOLE -DACPI_EXEC_APP	\
 	-I$(top_srcdir)/src/lib/include			\
 	-I$(srcdir)/source/include			\
+	-I$(srcdir)/source/tools/acpiexec		\
 	`pkg-config --silence-errors --cflags json`	\
 	`pkg-config --silence-errors --cflags json-c`	\
 	-Wall -fno-strict-aliasing
diff --git a/src/acpica/fwts_acpica.c b/src/acpica/fwts_acpica.c
index d985e18a..1d7d1abb 100644
--- a/src/acpica/fwts_acpica.c
+++ b/src/acpica/fwts_acpica.c
@@ -48,6 +48,7 @@ 
 #include "acinterp.h"
 #include "acapps.h"
 #include "amlresrc.h"
+#include "aecommon.h"
 
 #define ACPI_MAX_INIT_TABLES		(64)	/* Number of ACPI tables */
 
@@ -82,6 +83,8 @@  BOOLEAN AcpiGbl_AbortLoopOnTimeout = FALSE;
 BOOLEAN AcpiGbl_IgnoreErrors = FALSE;
 BOOLEAN AcpiGbl_VerboseHandlers = FALSE;
 UINT8   AcpiGbl_RegionFillValue = 0;
+INIT_FILE_ENTRY *AcpiGbl_InitEntries = NULL;
+UINT32  AcpiGbl_InitFileLineCount = 0;
 
 static ACPI_TABLE_DESC		Tables[ACPI_MAX_INIT_TABLES];	/* ACPICA Table descriptors */
 static bool			region_handler_called;		/* Region handler tracking */
diff --git a/src/acpica/source/components/debugger/dbinput.c b/src/acpica/source/components/debugger/dbinput.c
index 75e7a37f..0daca95b 100644
--- a/src/acpica/source/components/debugger/dbinput.c
+++ b/src/acpica/source/components/debugger/dbinput.c
@@ -969,7 +969,11 @@  AcpiDbCommandDispatch (
     case CMD_DISASSEMBLE:
     case CMD_DISASM:
 
+#ifdef ACPI_DISASSEMBLER
         (void) AcpiDbDisassembleMethod (AcpiGbl_DbArgs[1]);
+#else
+        AcpiOsPrintf ("The AML Disassembler is not configured/present\n");
+#endif
         break;
 
     case CMD_DUMP:
@@ -1083,7 +1087,11 @@  AcpiDbCommandDispatch (
 
     case CMD_LIST:
 
-        AcpiDbDisassembleAml (AcpiGbl_DbArgs[1], Op);
+#ifdef ACPI_DISASSEMBLER
+        AcpiDbDisassembleAml (AcpiGbl_DbArgs[1], Op);;
+#else
+        AcpiOsPrintf ("The AML Disassembler is not configured/present\n");
+#endif
         break;
 
     case CMD_LOCKS:
diff --git a/src/acpica/source/components/debugger/dbmethod.c b/src/acpica/source/components/debugger/dbmethod.c
index d6c6aa55..a030823c 100644
--- a/src/acpica/source/components/debugger/dbmethod.c
+++ b/src/acpica/source/components/debugger/dbmethod.c
@@ -393,6 +393,7 @@  Cleanup:
 }
 
 
+#ifdef ACPI_DISASSEMBLER
 /*******************************************************************************
  *
  * FUNCTION:    AcpiDbDisassembleAml
@@ -426,9 +427,7 @@  AcpiDbDisassembleAml (
         NumStatements = strtoul (Statements, NULL, 0);
     }
 
-#ifdef ACPI_DISASSEMBLER
     AcpiDmDisassemble (NULL, Op, NumStatements);
-#endif
 }
 
 
@@ -511,8 +510,6 @@  AcpiDbDisassembleMethod (
     WalkState->ParseFlags |= ACPI_PARSE_DISASSEMBLE;
 
     Status = AcpiPsParseAml (WalkState);
-
-#ifdef ACPI_DISASSEMBLER
     (void) AcpiDmParseDeferredOps (Op);
 
     /* Now we can disassemble the method */
@@ -520,7 +517,6 @@  AcpiDbDisassembleMethod (
     AcpiGbl_DmOpt_Verbose = FALSE;
     AcpiDmDisassemble (NULL, Op, 0);
     AcpiGbl_DmOpt_Verbose = TRUE;
-#endif
 
     AcpiPsDeleteParseTree (Op);
 
@@ -531,6 +527,7 @@  AcpiDbDisassembleMethod (
     AcpiUtReleaseOwnerId (&ObjDesc->Method.OwnerId);
     return (AE_OK);
 }
+#endif
 
 
 /*******************************************************************************
diff --git a/src/acpica/source/components/debugger/dbxface.c b/src/acpica/source/components/debugger/dbxface.c
index 0b964f69..c661b248 100644
--- a/src/acpica/source/components/debugger/dbxface.c
+++ b/src/acpica/source/components/debugger/dbxface.c
@@ -154,6 +154,7 @@ 
 #include "amlcode.h"
 #include "acdebug.h"
 #include "acinterp.h"
+#include "acparser.h"
 
 
 #define _COMPONENT          ACPI_CA_DEBUGGER
@@ -435,10 +436,17 @@  AcpiDbSingleStep (
             }
         }
 
-        /* Now we can display it */
+        /* Now we can disassemble and display it */
 
 #ifdef ACPI_DISASSEMBLER
         AcpiDmDisassemble (WalkState, DisplayOp, ACPI_UINT32_MAX);
+#else
+        /*
+         * The AML Disassembler is not configured - at least we can
+         * display the opcode value and name
+         */
+        AcpiOsPrintf ("AML Opcode: %4.4X  %s\n", Op->Common.AmlOpcode,
+            AcpiPsGetOpcodeName (Op->Common.AmlOpcode));
 #endif
 
         if ((Op->Common.AmlOpcode == AML_IF_OP) ||
diff --git a/src/acpica/source/components/dispatcher/dsfield.c b/src/acpica/source/components/dispatcher/dsfield.c
index df770c1c..3db39fb8 100644
--- a/src/acpica/source/components/dispatcher/dsfield.c
+++ b/src/acpica/source/components/dispatcher/dsfield.c
@@ -157,6 +157,10 @@ 
 #include "acnamesp.h"
 #include "acparser.h"
 
+#ifdef ACPI_EXEC_APP
+#include "aecommon.h"
+#endif
+
 
 #define _COMPONENT          ACPI_DISPATCHER
         ACPI_MODULE_NAME    ("dsfield")
@@ -430,6 +434,13 @@  AcpiDsGetFieldNames (
     UINT64                  Position;
     ACPI_PARSE_OBJECT       *Child;
 
+#ifdef ACPI_EXEC_APP
+    UINT64                  Value = 0;
+    ACPI_OPERAND_OBJECT     *ResultDesc;
+    ACPI_OPERAND_OBJECT     *ObjDesc;
+    char                    *NamePath;
+#endif
+
 
     ACPI_FUNCTION_TRACE_PTR (DsGetFieldNames, Info);
 
@@ -564,6 +575,18 @@  AcpiDsGetFieldNames (
                     {
                         return_ACPI_STATUS (Status);
                     }
+#ifdef ACPI_EXEC_APP
+                    NamePath = AcpiNsGetExternalPathname (Info->FieldNode);
+                    ObjDesc = AcpiUtCreateIntegerObject (Value);
+                    if (ACPI_SUCCESS (AeLookupInitFileEntry (NamePath, &Value)))
+                    {
+                        AcpiExWriteDataToField (ObjDesc,
+                            AcpiNsGetAttachedObject (Info->FieldNode),
+                            &ResultDesc);
+                    }
+                    AcpiUtRemoveReference (ObjDesc);
+                    ACPI_FREE (NamePath);
+#endif
                 }
             }
 
@@ -756,6 +779,9 @@  AcpiDsInitFieldObjects (
         Flags |= ACPI_NS_TEMPORARY;
     }
 
+#ifdef ACPI_EXEC_APP
+        Flags |= ACPI_NS_OVERRIDE_IF_FOUND;
+#endif
     /*
      * Walk the list of entries in the FieldList
      * Note: FieldList can be of zero length. In this case, Arg will be NULL.
diff --git a/src/acpica/source/components/hardware/hwregs.c b/src/acpica/source/components/hardware/hwregs.c
index c0deed33..ec106847 100644
--- a/src/acpica/source/components/hardware/hwregs.c
+++ b/src/acpica/source/components/hardware/hwregs.c
@@ -724,13 +724,20 @@  AcpiHwRegisterRead (
     case ACPI_REGISTER_PM2_CONTROL:          /* 8-bit access */
 
         Status = AcpiHwRead (&Value64, &AcpiGbl_FADT.XPm2ControlBlock);
-        Value = (UINT32) Value64;
+        if (ACPI_SUCCESS (Status))
+        {
+            Value = (UINT32) Value64;
+        }
         break;
 
     case ACPI_REGISTER_PM_TIMER:             /* 32-bit access */
 
         Status = AcpiHwRead (&Value64, &AcpiGbl_FADT.XPmTimerBlock);
-        Value = (UINT32) Value64;
+        if (ACPI_SUCCESS (Status))
+        {
+            Value = (UINT32) Value64;
+        }
+
         break;
 
     case ACPI_REGISTER_SMI_COMMAND_BLOCK:    /* 8-bit access */
diff --git a/src/acpica/source/components/hardware/hwsleep.c b/src/acpica/source/components/hardware/hwsleep.c
index fe111872..7e435ace 100644
--- a/src/acpica/source/components/hardware/hwsleep.c
+++ b/src/acpica/source/components/hardware/hwsleep.c
@@ -198,17 +198,28 @@  AcpiHwLegacySleep (
         return_ACPI_STATUS (Status);
     }
 
-    /*
-     * 1) Disable all GPEs
-     * 2) Enable all wakeup GPEs
-     */
+    /* Disable all GPEs */
+
     Status = AcpiHwDisableAllGpes ();
     if (ACPI_FAILURE (Status))
     {
         return_ACPI_STATUS (Status);
     }
+    /*
+     * If the target sleep state is S5, clear all GPEs and fixed events too
+     */
+    if (SleepState == ACPI_STATE_S5)
+    {
+        Status = AcpiHwClearAcpiStatus();
+        if (ACPI_FAILURE (Status))
+        {
+            return_ACPI_STATUS (Status);
+        }
+    }
     AcpiGbl_SystemAwakeAndRunning = FALSE;
 
+    /* Enable all wakeup GPEs */
+
     Status = AcpiHwEnableAllWakeupGpes ();
     if (ACPI_FAILURE (Status))
     {
diff --git a/src/acpica/source/components/namespace/nsaccess.c b/src/acpica/source/components/namespace/nsaccess.c
index bf530d48..af97c51f 100644
--- a/src/acpica/source/components/namespace/nsaccess.c
+++ b/src/acpica/source/components/namespace/nsaccess.c
@@ -724,6 +724,15 @@  AcpiNsLookup (
                     CurrentNode));
             }
 
+#ifdef ACPI_EXEC_APP
+            if ((Status == AE_ALREADY_EXISTS) &&
+                (ThisNode->Flags & ANOBJ_NODE_EARLY_INIT))
+            {
+                ThisNode->Flags &= ~ANOBJ_NODE_EARLY_INIT;
+                Status = AE_OK;
+            }
+#endif
+
 #ifdef ACPI_ASL_COMPILER
             /*
              * If this ACPI name already exists within the namespace as an
@@ -845,6 +854,13 @@  AcpiNsLookup (
         }
     }
 
+#ifdef ACPI_EXEC_APP
+    if (Flags & ACPI_NS_EARLY_INIT)
+    {
+        ThisNode->Flags |= ANOBJ_NODE_EARLY_INIT;
+    }
+#endif
+
     *ReturnNode = ThisNode;
     return_ACPI_STATUS (AE_OK);
 }
diff --git a/src/acpica/source/components/parser/psloop.c b/src/acpica/source/components/parser/psloop.c
index fd6773c1..ef517b54 100644
--- a/src/acpica/source/components/parser/psloop.c
+++ b/src/acpica/source/components/parser/psloop.c
@@ -164,6 +164,7 @@ 
 #include "acdispat.h"
 #include "amlcode.h"
 #include "acconvert.h"
+#include "acnamesp.h"
 
 #define _COMPONENT          ACPI_PARSER
         ACPI_MODULE_NAME    ("psloop")
@@ -645,6 +646,18 @@  AcpiPsParseLoop (
             Status = AcpiPsCreateOp (WalkState, AmlOpStart, &Op);
             if (ACPI_FAILURE (Status))
             {
+                /*
+                 * ACPI_PARSE_MODULE_LEVEL means that we are loading a table by
+                 * executing it as a control method. However, if we encounter
+                 * an error while loading the table, we need to keep trying to
+                 * load the table rather than aborting the table load. Set the
+                 * status to AE_OK to proceed with the table load.
+                 */
+                if ((WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL) &&
+                    Status == AE_ALREADY_EXISTS)
+                {
+                    Status = AE_OK;
+                }
                 if (Status == AE_CTRL_PARSE_CONTINUE)
                 {
                     continue;
@@ -665,18 +678,20 @@  AcpiPsParseLoop (
                 {
                     return_ACPI_STATUS (Status);
                 }
-                if (WalkState->Opcode == AML_SCOPE_OP)
+                if (AcpiNsOpensScope (
+                    AcpiPsGetOpcodeInfo (WalkState->Opcode)->ObjectType))
                 {
                     /*
-                     * If the scope op fails to parse, skip the body of the
-                     * scope op because the parse failure indicates that the
-                     * device may not exist.
+                     * If the scope/device op fails to parse, skip the body of
+                     * the scope op because the parse failure indicates that
+                     * the device may not exist.
                      */
+                    ACPI_ERROR ((AE_INFO, "Skip parsing opcode %s",
+                        AcpiPsGetOpcodeName (WalkState->Opcode)));
                     WalkState->ParserState.Aml = WalkState->Aml + 1;
                     WalkState->ParserState.Aml =
                         AcpiPsGetNextPackageEnd(&WalkState->ParserState);
                     WalkState->Aml = WalkState->ParserState.Aml;
-                    ACPI_ERROR ((AE_INFO, "Skipping Scope block"));
                 }
 
                 continue;
@@ -834,6 +849,22 @@  AcpiPsParseLoop (
             {
                 Status = AE_OK;
             }
+            else if ((WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL) &&
+                (ACPI_AML_EXCEPTION(Status) || Status == AE_ALREADY_EXISTS ||
+                Status == AE_NOT_FOUND))
+            {
+                /*
+                 * ACPI_PARSE_MODULE_LEVEL flag means that we are currently
+                 * loading a table by executing it as a control method.
+                 * However, if we encounter an error while loading the table,
+                 * we need to keep trying to load the table rather than
+                 * aborting the table load (setting the status to AE_OK
+                 * continues the table load). If we get a failure at this
+                 * point, it means that the dispatcher got an error while
+                 * trying to execute the Op.
+                 */
+                Status = AE_OK;
+            }
         }
 
         Status = AcpiPsCompleteOp (WalkState, &Op, Status);
diff --git a/src/acpica/source/components/tables/tbdata.c b/src/acpica/source/components/tables/tbdata.c
index 61a2d340..7b44fc74 100644
--- a/src/acpica/source/components/tables/tbdata.c
+++ b/src/acpica/source/components/tables/tbdata.c
@@ -711,9 +711,9 @@  AcpiTbVerifyTempTable (
             {
                 if (Status != AE_CTRL_TERMINATE)
                 {
-                    ACPI_EXCEPTION ((AE_INFO, AE_NO_MEMORY,
+                    ACPI_EXCEPTION ((AE_INFO, Status,
                         "%4.4s 0x%8.8X%8.8X"
-                        " Table is duplicated",
+                        " Table is already loaded",
                         AcpiUtValidNameseg (TableDesc->Signature.Ascii) ?
                             TableDesc->Signature.Ascii : "????",
                         ACPI_FORMAT_UINT64 (TableDesc->Address)));
diff --git a/src/acpica/source/components/utilities/utdelete.c b/src/acpica/source/components/utilities/utdelete.c
index 4565d8fa..da2e31ff 100644
--- a/src/acpica/source/components/utilities/utdelete.c
+++ b/src/acpica/source/components/utilities/utdelete.c
@@ -520,6 +520,7 @@  AcpiUtUpdateRefCount (
     UINT16                  OriginalCount;
     UINT16                  NewCount = 0;
     ACPI_CPU_FLAGS          LockFlags;
+    char                    *Message;
 
 
     ACPI_FUNCTION_NAME (UtUpdateRefCount);
@@ -560,6 +561,7 @@  AcpiUtUpdateRefCount (
             "Obj %p Type %.2X [%s] Refs %.2X [Incremented]\n",
             Object, Object->Common.Type,
             AcpiUtGetObjectTypeName (Object), NewCount));
+        Message = "Incremement";
         break;
 
     case REF_DECREMENT:
@@ -591,6 +593,7 @@  AcpiUtUpdateRefCount (
         {
             AcpiUtDeleteInternalObj (Object);
         }
+        Message = "Decrement";
         break;
 
     default:
@@ -608,8 +611,8 @@  AcpiUtUpdateRefCount (
     if (NewCount > ACPI_MAX_REFERENCE_COUNT)
     {
         ACPI_WARNING ((AE_INFO,
-            "Large Reference Count (0x%X) in object %p, Type=0x%.2X",
-            NewCount, Object, Object->Common.Type));
+            "Large Reference Count (0x%X) in object %p, Type=0x%.2X Operation=%s",
+            NewCount, Object, Object->Common.Type, Message));
     }
 }
 
diff --git a/src/acpica/source/components/utilities/uterror.c b/src/acpica/source/components/utilities/uterror.c
index eca92f3b..67c22330 100644
--- a/src/acpica/source/components/utilities/uterror.c
+++ b/src/acpica/source/components/utilities/uterror.c
@@ -352,19 +352,19 @@  AcpiUtPrefixedNamespaceError (
     {
     case AE_ALREADY_EXISTS:
 
-        AcpiOsPrintf ("\n" ACPI_MSG_BIOS_ERROR);
+        AcpiOsPrintf (ACPI_MSG_BIOS_ERROR);
         Message = "Failure creating";
         break;
 
     case AE_NOT_FOUND:
 
-        AcpiOsPrintf ("\n" ACPI_MSG_BIOS_ERROR);
+        AcpiOsPrintf (ACPI_MSG_BIOS_ERROR);
         Message = "Could not resolve";
         break;
 
     default:
 
-        AcpiOsPrintf ("\n" ACPI_MSG_ERROR);
+        AcpiOsPrintf (ACPI_MSG_ERROR);
         Message = "Failure resolving";
         break;
     }
diff --git a/src/acpica/source/components/utilities/utstrsuppt.c b/src/acpica/source/components/utilities/utstrsuppt.c
index 2e7232a3..b482da21 100644
--- a/src/acpica/source/components/utilities/utstrsuppt.c
+++ b/src/acpica/source/components/utilities/utstrsuppt.c
@@ -419,15 +419,39 @@  BOOLEAN
 AcpiUtDetectHexPrefix (
     char                    **String)
 {
+    char                    *InitialPosition = *String;
 
+    AcpiUtRemoveHexPrefix (String);
+    if (*String != InitialPosition)
+    {
+        return (TRUE); /* String is past leading 0x */
+    }
+
+    return (FALSE);     /* Not a hex string */
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiUtRemoveHexPrefix
+ *
+ * PARAMETERS:  String                  - Pointer to input ASCII string
+ *
+ * RETURN:      none
+ *
+ * DESCRIPTION: Remove a hex "0x" prefix
+ *
+ ******************************************************************************/
+
+void
+AcpiUtRemoveHexPrefix (
+    char                    **String)
+{
     if ((**String == ACPI_ASCII_ZERO) &&
         (tolower ((int) *(*String + 1)) == 'x'))
     {
         *String += 2;        /* Go past the leading 0x */
-        return (TRUE);
     }
-
-    return (FALSE);     /* Not a hex string */
 }
 
 
diff --git a/src/acpica/source/components/utilities/utstrtoul64.c b/src/acpica/source/components/utilities/utstrtoul64.c
index 5bbf24fd..77190e10 100644
--- a/src/acpica/source/components/utilities/utstrtoul64.c
+++ b/src/acpica/source/components/utilities/utstrtoul64.c
@@ -383,7 +383,7 @@  AcpiUtImplicitStrtoul64 (
      * implicit conversions, and the "0x" prefix is "not allowed".
      * However, allow a "0x" prefix as an ACPI extension.
      */
-    AcpiUtDetectHexPrefix (&String);
+    AcpiUtRemoveHexPrefix (&String);
 
     if (!AcpiUtRemoveLeadingZeros (&String))
     {
diff --git a/src/acpica/source/include/acconfig.h b/src/acpica/source/include/acconfig.h
index c5a67ca0..41f3dff0 100644
--- a/src/acpica/source/include/acconfig.h
+++ b/src/acpica/source/include/acconfig.h
@@ -233,7 +233,7 @@ 
 
 /* Maximum object reference count (detects object deletion issues) */
 
-#define ACPI_MAX_REFERENCE_COUNT        0x800
+#define ACPI_MAX_REFERENCE_COUNT        0x4000
 
 /* Default page size for use in mapping memory for operation regions */
 
diff --git a/src/acpica/source/include/acexcep.h b/src/acpica/source/include/acexcep.h
index 828f9fb9..ec2304c5 100644
--- a/src/acpica/source/include/acexcep.h
+++ b/src/acpica/source/include/acexcep.h
@@ -204,6 +204,13 @@  typedef struct acpi_exception_info
 
 #define AE_OK                           (ACPI_STATUS) 0x0000
 
+#define ACPI_ENV_EXCEPTION(Status)      (Status & AE_CODE_ENVIRONMENTAL)
+#define ACPI_AML_EXCEPTION(Status)      (Status & AE_CODE_AML)
+#define ACPI_PROG_EXCEPTION(Status)     (Status & AE_CODE_PROGRAMMER)
+#define ACPI_TABLE_EXCEPTION(Status)    (Status & AE_CODE_ACPI_TABLES)
+#define ACPI_CNTL_EXCEPTION(Status)     (Status & AE_CODE_CONTROL)
+
+
 /*
  * Environmental exceptions
  */
diff --git a/src/acpica/source/include/aclocal.h b/src/acpica/source/include/aclocal.h
index 58c09379..2e2bcd0d 100644
--- a/src/acpica/source/include/aclocal.h
+++ b/src/acpica/source/include/aclocal.h
@@ -327,6 +327,7 @@  typedef struct acpi_namespace_node
 #define ANOBJ_SUBTREE_HAS_INI           0x10    /* Used to optimize device initialization */
 #define ANOBJ_EVALUATED                 0x20    /* Set on first evaluation of node */
 #define ANOBJ_ALLOCATED_BUFFER          0x40    /* Method AML buffer is dynamic (InstallMethod) */
+#define ANOBJ_NODE_EARLY_INIT           0x80    /* AcpiExec only: Node was create via init file (-fi) */
 
 #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 */
diff --git a/src/acpica/source/include/acnamesp.h b/src/acpica/source/include/acnamesp.h
index 529fc6e7..1e3db8d1 100644
--- a/src/acpica/source/include/acnamesp.h
+++ b/src/acpica/source/include/acnamesp.h
@@ -168,14 +168,15 @@ 
 /* Flags for AcpiNsLookup, AcpiNsSearchAndEnter */
 
 #define ACPI_NS_NO_UPSEARCH         0
-#define ACPI_NS_SEARCH_PARENT       0x01
-#define ACPI_NS_DONT_OPEN_SCOPE     0x02
-#define ACPI_NS_NO_PEER_SEARCH      0x04
-#define ACPI_NS_ERROR_IF_FOUND      0x08
-#define ACPI_NS_PREFIX_IS_SCOPE     0x10
-#define ACPI_NS_EXTERNAL            0x20
-#define ACPI_NS_TEMPORARY           0x40
-#define ACPI_NS_OVERRIDE_IF_FOUND   0x80
+#define ACPI_NS_SEARCH_PARENT       0x0001
+#define ACPI_NS_DONT_OPEN_SCOPE     0x0002
+#define ACPI_NS_NO_PEER_SEARCH      0x0004
+#define ACPI_NS_ERROR_IF_FOUND      0x0008
+#define ACPI_NS_PREFIX_IS_SCOPE     0x0010
+#define ACPI_NS_EXTERNAL            0x0020
+#define ACPI_NS_TEMPORARY           0x0040
+#define ACPI_NS_OVERRIDE_IF_FOUND   0x0080
+#define ACPI_NS_EARLY_INIT          0x0100
 
 /* Flags for AcpiNsWalkNamespace */
 
diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
index 110b375b..5097fcc1 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                 0x20180629
+#define ACPI_CA_VERSION                 0x20180810
 
 #include "acconfig.h"
 #include "actypes.h"
diff --git a/src/acpica/source/include/acutils.h b/src/acpica/source/include/acutils.h
index 8dfce901..1f760884 100644
--- a/src/acpica/source/include/acutils.h
+++ b/src/acpica/source/include/acutils.h
@@ -362,6 +362,10 @@  BOOLEAN
 AcpiUtDetectHexPrefix (
     char                    **String);
 
+void
+AcpiUtRemoveHexPrefix (
+    char                    **String);
+
 BOOLEAN
 AcpiUtDetectOctalPrefix (
     char                    **String);
diff --git a/src/acpica/source/tools/acpiexec/aecommon.h b/src/acpica/source/tools/acpiexec/aecommon.h
index 233edc2b..8ada9021 100644
--- a/src/acpica/source/tools/acpiexec/aecommon.h
+++ b/src/acpica/source/tools/acpiexec/aecommon.h
@@ -189,11 +189,22 @@  typedef struct ae_debug_regions
 } AE_DEBUG_REGIONS;
 
 
+/*
+ * Init file entry
+ */
+typedef struct init_file_entry
+{
+    char                    *Name;
+    UINT64                  Value;
+} INIT_FILE_ENTRY;
+
 extern BOOLEAN              AcpiGbl_UseLocalFaultHandler;
 extern BOOLEAN              AcpiGbl_VerboseHandlers;
 extern BOOLEAN              AcpiGbl_IgnoreErrors;
 extern BOOLEAN              AcpiGbl_AbortLoopOnTimeout;
 extern UINT8                AcpiGbl_RegionFillValue;
+extern INIT_FILE_ENTRY      *AcpiGbl_InitEntries;
+extern UINT32               AcpiGbl_InitFileLineCount;
 extern UINT8                AcpiGbl_UseHwReducedFadt;
 extern BOOLEAN              AcpiGbl_DisplayRegionAccess;
 extern BOOLEAN              AcpiGbl_DoInterfaceTests;
@@ -331,13 +342,18 @@  AeOpenInitializationFile (
     char                    *Filename);
 
 void
-AeDoObjectOverrides (
+AeProcessInitFile (
     void);
 
 ACPI_STATUS
 AeSetupConfiguration (
     void                    *RegionAddr);
 
+ACPI_STATUS
+AeLookupInitFileEntry (
+    char                    *Pathname,
+    UINT64                  *Value);
+
 /* aeexec */
 
 void
diff --git a/src/acpica/source/tools/acpiexec/aeinitfile.c b/src/acpica/source/tools/acpiexec/aeinitfile.c
index 804a2cbc..79b797e0 100644
--- a/src/acpica/source/tools/acpiexec/aeinitfile.c
+++ b/src/acpica/source/tools/acpiexec/aeinitfile.c
@@ -159,10 +159,8 @@ 
 /* Local prototypes */
 
 static void
-AeDoOneOverride (
-    char                    *Pathname,
-    char                    *ValueString,
-    ACPI_OPERAND_OBJECT     *ObjDesc,
+AeEnterInitFileEntry (
+    INIT_FILE_ENTRY         InitEntry,
     ACPI_WALK_STATE         *WalkState);
 
 
@@ -206,13 +204,15 @@  AeOpenInitializationFile (
 
 /******************************************************************************
  *
- * FUNCTION:    AeDoObjectOverrides
+ * FUNCTION:    AeProcessInitFile
  *
  * PARAMETERS:  None
  *
  * RETURN:      None
  *
- * DESCRIPTION: Read the initialization file and perform all overrides
+ * DESCRIPTION: Read the initialization file and perform all namespace
+ *              initializations. AcpiGbl_InitEntries will be used for region
+ *              field initialization.
  *
  * NOTE:        The format of the file is multiple lines, each of format:
  *                  <ACPI-pathname> <Integer Value>
@@ -220,12 +220,13 @@  AeOpenInitializationFile (
  *****************************************************************************/
 
 void
-AeDoObjectOverrides (
+AeProcessInitFile(
     void)
 {
-    ACPI_OPERAND_OBJECT     *ObjDesc;
     ACPI_WALK_STATE         *WalkState;
     int                     i;
+    UINT64                  idx;
+    ACPI_STATUS             Status;
 
 
     if (!InitFile)
@@ -235,13 +236,18 @@  AeDoObjectOverrides (
 
     /* Create needed objects to be reused for each init entry */
 
-    ObjDesc = AcpiUtCreateIntegerObject (0);
     WalkState = AcpiDsCreateWalkState (0, NULL, NULL, NULL);
     NameBuffer[0] = '\\';
 
-    /* Read the entire file line-by-line */
-
     while (fgets (LineBuffer, AE_FILE_BUFFER_SIZE, InitFile) != NULL)
+    {
+        ++AcpiGbl_InitFileLineCount;
+    }
+    rewind (InitFile);
+
+    AcpiGbl_InitEntries =
+        AcpiOsAllocate (sizeof (INIT_FILE_ENTRY) * AcpiGbl_InitFileLineCount);
+    for (idx = 0; fgets (LineBuffer, AE_FILE_BUFFER_SIZE, InitFile); ++idx)
     {
         if (sscanf (LineBuffer, "%s %s\n",
                 &NameBuffer[1], ValueBuffer) != 2)
@@ -257,7 +263,20 @@  AeDoObjectOverrides (
             i = 1;
         }
 
-        AeDoOneOverride (&NameBuffer[i], ValueBuffer, ObjDesc, WalkState);
+        AcpiGbl_InitEntries[idx].Name =
+            AcpiOsAllocateZeroed (strnlen (NameBuffer + i, AE_FILE_BUFFER_SIZE) + 1);
+
+        strcpy (AcpiGbl_InitEntries[idx].Name, NameBuffer + i);
+
+        Status = AcpiUtStrtoul64 (ValueBuffer, &AcpiGbl_InitEntries[idx].Value);
+        if (ACPI_FAILURE (Status))
+        {
+            AcpiOsPrintf ("%s %s\n", ValueBuffer,
+                AcpiFormatException (Status));
+            goto CleanupAndExit;
+        }
+
+        AeEnterInitFileEntry (AcpiGbl_InitEntries[idx], WalkState);
     }
 
     /* Cleanup */
@@ -265,77 +284,97 @@  AeDoObjectOverrides (
 CleanupAndExit:
     fclose (InitFile);
     AcpiDsDeleteWalkState (WalkState);
-    AcpiUtRemoveReference (ObjDesc);
 }
 
 
 /******************************************************************************
  *
- * FUNCTION:    AeDoOneOverride
+ * FUNCTION:    AeInitFileEntry
  *
- * PARAMETERS:  Pathname            - AML namepath
- *              ValueString         - New integer value to be stored
- *              ObjDesc             - Descriptor with integer override value
+ * PARAMETERS:  InitEntry           - Entry of the init file
  *              WalkState           - Used for the Store operation
  *
  * RETURN:      None
  *
- * DESCRIPTION: Perform an override for a single namespace object
+ * DESCRIPTION: Perform initialization of a single namespace object
+ *
+ *              Note: namespace of objects are limited to integers and region
+ *              fields units of 8 bytes at this time.
  *
  *****************************************************************************/
 
 static void
-AeDoOneOverride (
-    char                    *Pathname,
-    char                    *ValueString,
-    ACPI_OPERAND_OBJECT     *ObjDesc,
+AeEnterInitFileEntry (
+    INIT_FILE_ENTRY         InitEntry,
     ACPI_WALK_STATE         *WalkState)
 {
-    ACPI_HANDLE             Handle;
+    char                    *Pathname = InitEntry.Name;
+    UINT64                  Value = InitEntry.Value;
+    ACPI_OPERAND_OBJECT     *ObjDesc;
+    ACPI_NAMESPACE_NODE     *NewNode;
     ACPI_STATUS             Status;
-    UINT64                  Value;
-
 
-    AcpiOsPrintf ("Value Override: %s, ", Pathname);
 
-    /*
-     * Get the namespace node associated with the override
-     * pathname from the init file.
-     */
-    Status = AcpiGetHandle (NULL, Pathname, &Handle);
+    AcpiOsPrintf ("Initializing namespace element: %s\n", Pathname);
+    Status = AcpiNsLookup (NULL, Pathname, ACPI_TYPE_INTEGER,
+        ACPI_IMODE_LOAD_PASS2, ACPI_NS_ERROR_IF_FOUND | ACPI_NS_NO_UPSEARCH |
+        ACPI_NS_EARLY_INIT, NULL, &NewNode);
     if (ACPI_FAILURE (Status))
     {
-        AcpiOsPrintf ("%s\n", AcpiFormatException (Status));
+        ACPI_EXCEPTION ((AE_INFO, Status,
+            "While creating name from namespace initialization file: %s",
+            Pathname));
         return;
     }
 
-    /* Extract the 64-bit integer */
+    ObjDesc = AcpiUtCreateIntegerObject (Value);
 
-    Status = AcpiUtStrtoul64 (ValueString, &Value);
-    if (ACPI_FAILURE (Status))
-    {
-        AcpiOsPrintf ("%s %s\n", ValueString,
-            AcpiFormatException (Status));
-        return;
-    }
+    AcpiOsPrintf ("New value: 0x%8.8X%8.8X\n",
+        ACPI_FORMAT_UINT64 (Value));
 
-    ObjDesc->Integer.Value = Value;
+    /* Store pointer to value descriptor in the Node */
 
-    /*
-     * At the point this function is called, the namespace is fully
-     * built and initialized. We can simply store the new object to
-     * the target node.
-     */
-    AcpiExEnterInterpreter ();
-    Status = AcpiExStore (ObjDesc, Handle, WalkState);
-    AcpiExExitInterpreter ();
+    Status = AcpiNsAttachObject (NewNode, ObjDesc,
+         ACPI_TYPE_INTEGER);
 
-    if (ACPI_FAILURE (Status))
+    /* Remove local reference to the object */
+
+    AcpiUtRemoveReference (ObjDesc);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION:    AeLookupInitFileEntry
+ *
+ * PARAMETERS:  Pathname            - AML namepath in external format
+ *              ValueString         - value of the namepath if it exitst
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Search the init file for a particular name and its value.
+ *
+ *****************************************************************************/
+
+ACPI_STATUS
+AeLookupInitFileEntry (
+    char                    *Pathname,
+    UINT64                  *Value)
+{
+    UINT32                  i;
+
+    if (!AcpiGbl_InitEntries)
     {
-        AcpiOsPrintf ("%s\n", AcpiFormatException (Status));
-        return;
+        return AE_NOT_FOUND;
     }
 
-    AcpiOsPrintf ("New value: 0x%8.8X%8.8X\n",
-        ACPI_FORMAT_UINT64 (Value));
+    for (i = 0; i < AcpiGbl_InitFileLineCount; ++i)
+    {
+        if (!strcmp(AcpiGbl_InitEntries[i].Name, Pathname))
+        {
+            *Value = AcpiGbl_InitEntries[i].Value;
+            return AE_OK;
+        }
+    }
+    return AE_NOT_FOUND;
 }
diff --git a/src/acpica/source/tools/acpiexec/aeregion.c b/src/acpica/source/tools/acpiexec/aeregion.c
index 56f93946..5bad8359 100644
--- a/src/acpica/source/tools/acpiexec/aeregion.c
+++ b/src/acpica/source/tools/acpiexec/aeregion.c
@@ -234,9 +234,9 @@  AeRegionHandler (
     SpaceId = RegionObject->Region.SpaceId;
 
     ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION,
-        "Operation Region request on %s at 0x%X\n",
+        "Operation Region request on %s at 0x%X, BitWidth 0x%X, RegionLength 0x%X\n",
         AcpiUtGetRegionName (RegionObject->Region.SpaceId),
-        (UINT32) Address));
+        (UINT32) Address, BitWidth, (UINT32) Length));
 
     /*
      * Region support can be disabled with the -do option.
@@ -410,7 +410,7 @@  AeRegionHandler (
         if (AcpiGbl_DisplayRegionAccess)
         {
             AcpiOsPrintf ("AcpiExec: %s "
-                "%s: Attr %X Addr %.4X BaseAddr %.4X Len %.2X Width %X BufLen %X",
+                "%s: Attr %X Addr %.4X BaseAddr %.4X Length %.2X BitWidth %X BufLen %X",
                 AcpiUtGetRegionName (SpaceId),
                 (Function & ACPI_IO_MASK) ? "Write" : "Read ",
                 (UINT32) (Function >> 16),
@@ -424,7 +424,7 @@  AeRegionHandler (
                 Status = AcpiBufferToResource (MyContext->Connection,
                     MyContext->Length, &Resource);
 
-                AcpiOsPrintf (" [AccLen %.2X Conn %p]",
+                AcpiOsPrintf (" [AccessLength %.2X Connnection %p]",
                     MyContext->AccessLength, MyContext->Connection);
             }
             AcpiOsPrintf ("\n");