[PATCH 2/4] acpica: use latest ACPICA source

Keng-Yu Lin kengyu at canonical.com
Mon Jul 23 05:39:14 UTC 2012


On Wed, Jul 18, 2012 at 7:52 AM, Colin King <colin.king at canonical.com> wrote:
> From: Colin Ian King <colin.king at canonical.com>
>
> Update to ACPICA version 20120711, commit
> b9058029d3bd6216f594a3b5e70b2f6cba1052ad to get the latest
> goodness.
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
>  src/acpica/Makefile.am                             |    2 +
>  src/acpica/source/common/adfile.c                  |   19 +-
>  src/acpica/source/common/adwalk.c                  |   30 +-
>  src/acpica/source/common/dmextern.c                |   36 +-
>  src/acpica/source/common/dmrestag.c                |   21 +-
>  src/acpica/source/compiler/Makefile.am             |    1 +
>  src/acpica/source/compiler/aslcompile.c            |  121 ++++---
>  src/acpica/source/compiler/aslcompiler.h           |    9 +-
>  src/acpica/source/compiler/aslcompiler.l           |    1 +
>  src/acpica/source/compiler/aslcompiler.y           |    4 +-
>  src/acpica/source/compiler/aslerror.c              |   23 +-
>  src/acpica/source/compiler/aslfiles.c              |  126 ++++++-
>  src/acpica/source/compiler/asllookup.c             |    2 +-
>  src/acpica/source/compiler/aslmain.c               |   66 ++--
>  src/acpica/source/compiler/aslmap.c                |    1 +
>  src/acpica/source/compiler/aslmessages.h           |   11 +-
>  src/acpica/source/compiler/aslstartup.c            |    2 +-
>  src/acpica/source/compiler/aslsupport.l            |   52 ++-
>  src/acpica/source/compiler/aslutils.c              |   90 ++---
>  src/acpica/source/compiler/dtio.c                  |   45 ++-
>  src/acpica/source/compiler/dttemplate.c            |    2 +-
>  src/acpica/source/compiler/prscan.c                |    2 +-
>  src/acpica/source/compiler/prutils.c               |   15 +-
>  src/acpica/source/components/debugger/dbcmds.c     |  120 ++++---
>  src/acpica/source/components/debugger/dbdisply.c   |   15 +-
>  src/acpica/source/components/debugger/dbexec.c     |    6 +-
>  src/acpica/source/components/debugger/dbfileio.c   |   13 +
>  src/acpica/source/components/debugger/dbinput.c    |    4 +-
>  src/acpica/source/components/debugger/dbstats.c    |   28 +-
>  src/acpica/source/components/debugger/dbutils.c    |    4 +-
>  .../source/components/disassembler/dmopcode.c      |  213 ++++++++++++
>  src/acpica/source/components/disassembler/dmwalk.c |   55 +++-
>  src/acpica/source/components/dispatcher/dsfield.c  |   88 ++++-
>  src/acpica/source/components/dispatcher/dsopcode.c |   14 +-
>  src/acpica/source/components/dispatcher/dswload.c  |   14 +
>  src/acpica/source/components/dispatcher/dswload2.c |   14 +
>  src/acpica/source/components/events/evgpe.c        |   15 +-
>  src/acpica/source/components/events/evgpeutil.c    |   19 ++
>  src/acpica/source/components/events/evmisc.c       |  183 ++++-------
>  src/acpica/source/components/events/evxface.c      |  344 ++++++++++----------
>  src/acpica/source/components/events/evxfgpe.c      |   86 ++++-
>  src/acpica/source/components/executer/exconfig.c   |    2 +-
>  src/acpica/source/components/executer/exdump.c     |   24 +-
>  src/acpica/source/components/executer/exprep.c     |    4 +-
>  src/acpica/source/components/executer/exresolv.c   |    2 +-
>  src/acpica/source/components/executer/exstore.c    |    6 +-
>  src/acpica/source/components/executer/exutils.c    |    2 +-
>  src/acpica/source/components/hardware/hwsleep.c    |   25 --
>  src/acpica/source/components/hardware/hwxfsleep.c  |    8 +
>  src/acpica/source/components/namespace/nspredef.c  |    2 +-
>  src/acpica/source/components/parser/psxface.c      |    4 +-
>  src/acpica/source/components/resources/rscreate.c  |    6 +-
>  src/acpica/source/components/resources/rsutils.c   |    2 +-
>  src/acpica/source/components/tables/tbfadt.c       |   64 ++--
>  src/acpica/source/components/tables/tbinstal.c     |    5 +-
>  src/acpica/source/components/tables/tbutils.c      |   17 +-
>  src/acpica/source/components/tables/tbxface.c      |  159 +--------
>  src/acpica/source/components/tables/tbxfroot.c     |    2 +-
>  src/acpica/source/components/utilities/utdecode.c  |   62 +---
>  src/acpica/source/components/utilities/utdelete.c  |   21 +-
>  src/acpica/source/components/utilities/utglobal.c  |    9 +-
>  src/acpica/source/components/utilities/utmisc.c    |   81 +----
>  src/acpica/source/components/utilities/utobject.c  |    6 +-
>  src/acpica/source/components/utilities/utresrc.c   |    4 +-
>  src/acpica/source/components/utilities/uttrack.c   |    6 +-
>  src/acpica/source/components/utilities/utxferror.c |   81 +++++
>  src/acpica/source/include/acdebug.h                |    5 +-
>  src/acpica/source/include/acdisasm.h               |    8 +
>  src/acpica/source/include/acexcep.h                |    5 +-
>  src/acpica/source/include/acglobal.h               |   22 +-
>  src/acpica/source/include/aclocal.h                |   45 ++-
>  src/acpica/source/include/acmacros.h               |    4 +-
>  src/acpica/source/include/acobject.h               |   15 +-
>  src/acpica/source/include/acoutput.h               |    4 +
>  src/acpica/source/include/acpiosxf.h               |    2 +-
>  src/acpica/source/include/acpixf.h                 |   36 +-
>  src/acpica/source/include/acpredef.h               |    6 +-
>  src/acpica/source/include/actbl1.h                 |    2 +-
>  src/acpica/source/include/actypes.h                |    7 +-
>  src/acpica/source/include/acutils.h                |    6 +-
>  src/acpica/source/include/platform/acenv.h         |    5 +-
>  .../source/os_specific/service_layers/osunixxf.c   |   31 +-
>  src/acpica/source/tools/acpiexec/aecommon.h        |    1 +
>  src/acpica/source/tools/acpiexec/aehandlers.c      |  163 ++++++++--
>  84 files changed, 1846 insertions(+), 1041 deletions(-)
>
> diff --git a/src/acpica/Makefile.am b/src/acpica/Makefile.am
> index 3187432..e2213d5 100644
> --- a/src/acpica/Makefile.am
> +++ b/src/acpica/Makefile.am
> @@ -175,6 +175,7 @@ libfwtsacpica_la_SOURCES = \
>         $(ACPICA_COMP)/tables/tbutils.c \
>         $(ACPICA_COMP)/tables/tbxface.c \
>         $(ACPICA_COMP)/tables/tbxfroot.c \
> +       $(ACPICA_COMP)/tables/tbxfload.c \
>         $(ACPICA_COMP)/utilities/utaddress.c \
>         $(ACPICA_COMP)/utilities/utalloc.c \
>         $(ACPICA_COMP)/utilities/utcache.c \
> @@ -197,6 +198,7 @@ libfwtsacpica_la_SOURCES = \
>         $(ACPICA_COMP)/utilities/utxferror.c \
>         $(ACPICA_COMP)/utilities/utxface.c \
>         $(ACPICA_COMP)/utilities/utdecode.c \
> +       $(ACPICA_COMP)/utilities/utexcep.c \
>         $(ACPICA_SRC)/tools/acpiexec/aehandlers.c
>
>  libfwtsacpica_la_LIBADD = \
> diff --git a/src/acpica/source/common/adfile.c b/src/acpica/source/common/adfile.c
> index f4e33e2..36c3176 100644
> --- a/src/acpica/source/common/adfile.c
> +++ b/src/acpica/source/common/adfile.c
> @@ -370,20 +370,24 @@ FlSplitInputPathname (
>          return (AE_NO_MEMORY);
>      }
>
> -    Substring = strrchr (DirectoryPath, '\\');
> +    /* Convert backslashes to slashes in the entire path */
> +
> +    UtConvertBackslashes (DirectoryPath);
> +
> +    /* Backup to last slash or colon */
> +
> +    Substring = strrchr (DirectoryPath, '/');
>      if (!Substring)
>      {
> -        Substring = strrchr (DirectoryPath, '/');
> -        if (!Substring)
> -        {
> -            Substring = strrchr (DirectoryPath, ':');
> -        }
> +        Substring = strrchr (DirectoryPath, ':');
>      }
>
> +    /* Extract the simple filename */
> +
>      if (!Substring)
>      {
> +        Filename = FlStrdup (DirectoryPath);
>          DirectoryPath[0] = 0;
> -        Filename = FlStrdup (InputPath);
>      }
>      else
>      {
> @@ -398,7 +402,6 @@ FlSplitInputPathname (
>
>      *OutDirectoryPath = DirectoryPath;
>      *OutFilename = Filename;
> -
>      return (AE_OK);
>  }
>
> diff --git a/src/acpica/source/common/adwalk.c b/src/acpica/source/common/adwalk.c
> index eeb61d8..00d9bb6 100644
> --- a/src/acpica/source/common/adwalk.c
> +++ b/src/acpica/source/common/adwalk.c
> @@ -593,6 +593,7 @@ AcpiDmFindOrphanDescending (
>
>          if ((OpInfo->Class != AML_CLASS_EXECUTE) &&
>              (OpInfo->Class != AML_CLASS_CREATE) &&
> +            (OpInfo->ObjectType != ACPI_TYPE_LOCAL_ALIAS) &&
>              (ParentOp->Common.AmlOpcode != AML_INT_METHODCALL_OP) &&
>              !Op->Common.Node)
>          {
> @@ -815,13 +816,23 @@ AcpiDmXrefDescendingOp (
>
>      if (OpInfo->Flags & AML_NAMED)
>      {
> -        if ((Op->Common.AmlOpcode == AML_ALIAS_OP) ||
> -            (Op->Common.AmlOpcode == AML_SCOPE_OP))
> +        /*
> +         * Only these two operators (Alias, Scope) refer to an existing
> +         * name, it is the first argument
> +         */
> +        if (Op->Common.AmlOpcode == AML_ALIAS_OP)
> +        {
> +            ObjectType = ACPI_TYPE_ANY;
> +
> +            NextOp = Op->Common.Value.Arg;
> +            NextOp = NextOp->Common.Value.Arg;
> +            if (NextOp->Common.AmlOpcode == AML_INT_NAMEPATH_OP)
> +            {
> +                Path = NextOp->Common.Value.String;
> +            }
> +        }
> +        else if (Op->Common.AmlOpcode == AML_SCOPE_OP)
>          {
> -            /*
> -             * Only these two operators refer to an existing name,
> -             * first argument
> -             */
>              Path = (char *) Op->Named.Path;
>          }
>      }
> @@ -829,6 +840,8 @@ AcpiDmXrefDescendingOp (
>      {
>          /* Referenced Buffer Name is the first child */
>
> +        ObjectType = ACPI_TYPE_BUFFER; /* Change from TYPE_BUFFER_FIELD */
> +
>          NextOp = Op->Common.Value.Arg;
>          if (NextOp->Common.AmlOpcode == AML_INT_NAMEPATH_OP)
>          {
> @@ -855,6 +868,11 @@ AcpiDmXrefDescendingOp (
>      Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ACPI_TYPE_ANY,
>                  ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE,
>                  WalkState, &Node);
> +    if (ACPI_SUCCESS (Status) && (Node->Flags & ANOBJ_IS_EXTERNAL))
> +    {
> +        Status = AE_NOT_FOUND;
> +    }
> +
>      if (ACPI_FAILURE (Status))
>      {
>          if (Status == AE_NOT_FOUND)
> diff --git a/src/acpica/source/common/dmextern.c b/src/acpica/source/common/dmextern.c
> index 8b8402e..622db8a 100644
> --- a/src/acpica/source/common/dmextern.c
> +++ b/src/acpica/source/common/dmextern.c
> @@ -293,8 +293,10 @@ AcpiDmNormalizeParentPrefix (
>       */
>      ACPI_STRCAT (Fullpath, ParentPath);
>
> -    /* Add dot separator (don't need dot if parent fullpath is a single "\") */
> -
> +    /*
> +     * Add dot separator
> +     * (don't need dot if parent fullpath is a single backslash)
> +     */
>      if (ParentPath[1])
>      {
>          ACPI_STRCAT (Fullpath, ".");
> @@ -526,12 +528,12 @@ AcpiDmAddToExternalList (
>
>      NewExternal->InternalPath = Path;
>
> -    /* Link the new descriptor into the global list, ordered by string length */
> +    /* Link the new descriptor into the global list, alphabetically ordered */
>
>      NextExternal = AcpiGbl_ExternalList;
>      while (NextExternal)
>      {
> -        if (NewExternal->Length <= NextExternal->Length)
> +        if (AcpiUtStricmp (NewExternal->Path, NextExternal->Path) < 0)
>          {
>              if (PrevExternal)
>              {
> @@ -580,7 +582,7 @@ AcpiDmAddExternalsToNamespace (
>  {
>      ACPI_STATUS             Status;
>      ACPI_NAMESPACE_NODE     *Node;
> -    ACPI_OPERAND_OBJECT     *MethodDesc;
> +    ACPI_OPERAND_OBJECT     *ObjDesc;
>      ACPI_EXTERNAL_LIST      *External = AcpiGbl_ExternalList;
>
>
> @@ -599,13 +601,29 @@ AcpiDmAddExternalsToNamespace (
>                  "while adding external to namespace [%s]",
>                  External->Path));
>          }
> -        else if (External->Type == ACPI_TYPE_METHOD)
> +
> +        else switch (External->Type)
>          {
> +        case ACPI_TYPE_METHOD:
> +
>              /* For methods, we need to save the argument count */
>
> -            MethodDesc = AcpiUtCreateInternalObject (ACPI_TYPE_METHOD);
> -            MethodDesc->Method.ParamCount = (UINT8) External->Value;
> -            Node->Object = MethodDesc;
> +            ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_METHOD);
> +            ObjDesc->Method.ParamCount = (UINT8) External->Value;
> +            Node->Object = ObjDesc;
> +            break;
> +
> +        case ACPI_TYPE_REGION:
> +
> +            /* Regions require a region sub-object */
> +
> +            ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_REGION);
> +            ObjDesc->Region.Node = Node;
> +            Node->Object = ObjDesc;
> +            break;
> +
> +        default:
> +            break;
>          }
>
>          External = External->Next;
> diff --git a/src/acpica/source/common/dmrestag.c b/src/acpica/source/common/dmrestag.c
> index 1f0c5fb..9afaad3 100644
> --- a/src/acpica/source/common/dmrestag.c
> +++ b/src/acpica/source/common/dmrestag.c
> @@ -145,6 +145,7 @@ AcpiDmGetResourceTag (
>
>  static char *
>  AcpiGetTagPathname (
> +    ACPI_PARSE_OBJECT       *Op,
>      ACPI_NAMESPACE_NODE     *BufferNode,
>      ACPI_NAMESPACE_NODE     *ResourceNode,
>      UINT32                  BitIndex);
> @@ -515,7 +516,6 @@ AcpiDmCheckResourceReference (
>      ACPI_NAMESPACE_NODE     *BufferNode;
>      ACPI_NAMESPACE_NODE     *ResourceNode;
>      const ACPI_OPCODE_INFO  *OpInfo;
> -    char                    *Pathname;
>      UINT32                  BitIndex;
>
>
> @@ -591,14 +591,7 @@ AcpiDmCheckResourceReference (
>
>      /* Translate the Index to a resource tag pathname */
>
> -    Pathname = AcpiGetTagPathname (BufferNode, ResourceNode, BitIndex);
> -    if (Pathname)
> -    {
> -        /* Complete the conversion of the Index to a symbol */
> -
> -        IndexOp->Common.AmlOpcode = AML_INT_NAMEPATH_OP;
> -        IndexOp->Common.Value.String = Pathname;
> -    }
> +    AcpiGetTagPathname (IndexOp, BufferNode, ResourceNode, BitIndex);
>  }
>
>
> @@ -669,6 +662,7 @@ AcpiDmGetResourceNode (
>
>  static char *
>  AcpiGetTagPathname (
> +    ACPI_PARSE_OBJECT       *IndexOp,
>      ACPI_NAMESPACE_NODE     *BufferNode,
>      ACPI_NAMESPACE_NODE     *ResourceNode,
>      UINT32                  BitIndex)
> @@ -761,6 +755,15 @@ AcpiGetTagPathname (
>
>      AcpiNsInternalizeName (Pathname, &InternalPath);
>      ACPI_FREE (Pathname);
> +
> +    /* Update the Op with the symbol */
> +
> +    AcpiPsInitOp (IndexOp, AML_INT_NAMEPATH_OP);
> +    IndexOp->Common.Value.String = InternalPath;
> +
> +    /* We will need the tag later. Cheat by putting it in the Node field */
> +
> +    IndexOp->Common.Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Tag);
>      return (InternalPath);
>  }
>
> diff --git a/src/acpica/source/compiler/Makefile.am b/src/acpica/source/compiler/Makefile.am
> index cee1f4f..b7a72c9 100644
> --- a/src/acpica/source/compiler/Makefile.am
> +++ b/src/acpica/source/compiler/Makefile.am
> @@ -183,6 +183,7 @@ libfwtsiasl_la_SOURCES = \
>         $(ACPICA_COMMON)/adfile.c \
>         $(ACPICA_COMMON)/adisasm.c \
>         $(ACPICA_COMMON)/adwalk.c \
> +       $(ACPICA_COMMON)/ahpredef.c \
>         $(ACPICA_COMMON)/dmextern.c \
>         $(ACPICA_COMMON)/dmrestag.c \
>         $(ACPICA_COMMON)/dmtable.c \
> diff --git a/src/acpica/source/compiler/aslcompile.c b/src/acpica/source/compiler/aslcompile.c
> index 371a6e3..623bc3d 100644
> --- a/src/acpica/source/compiler/aslcompile.c
> +++ b/src/acpica/source/compiler/aslcompile.c
> @@ -131,14 +131,18 @@ CmFlushSourceCode (
>
>  static void
>  FlConsumeAnsiComment (
> -    ASL_FILE_INFO           *FileInfo,
> +    FILE                    *Handle,
>      ASL_FILE_STATUS         *Status);
>
>  static void
>  FlConsumeNewComment (
> -    ASL_FILE_INFO           *FileInfo,
> +    FILE                    *Handle,
>      ASL_FILE_STATUS         *Status);
>
> +static void
> +CmDumpAllEvents (
> +    void);
> +
>
>  /*******************************************************************************
>   *
> @@ -325,7 +329,8 @@ CmFlushSourceCode (
>   *
>   * FUNCTION:    FlConsume*
>   *
> - * PARAMETERS:  FileInfo        - Points to an open input file
> + * PARAMETERS:  Handle              - Open input file
> + *              Status              - File current status struct
>   *
>   * RETURN:      Number of lines consumed
>   *
> @@ -335,14 +340,14 @@ CmFlushSourceCode (
>
>  static void
>  FlConsumeAnsiComment (
> -    ASL_FILE_INFO           *FileInfo,
> +    FILE                    *Handle,
>      ASL_FILE_STATUS         *Status)
>  {
>      UINT8                   Byte;
>      BOOLEAN                 ClosingComment = FALSE;
>
>
> -    while (fread (&Byte, 1, 1, FileInfo->Handle))
> +    while (fread (&Byte, 1, 1, Handle))
>      {
>          /* Scan until comment close is found */
>
> @@ -379,13 +384,13 @@ FlConsumeAnsiComment (
>
>  static void
>  FlConsumeNewComment (
> -    ASL_FILE_INFO           *FileInfo,
> +    FILE                    *Handle,
>      ASL_FILE_STATUS         *Status)
>  {
>      UINT8                   Byte;
>
>
> -    while (fread (&Byte, 1, 1, FileInfo->Handle))
> +    while (fread (&Byte, 1, 1, Handle))
>      {
>          Status->Offset++;
>
> @@ -404,7 +409,9 @@ FlConsumeNewComment (
>   *
>   * FUNCTION:    FlCheckForAscii
>   *
> - * PARAMETERS:  FileInfo        - Points to an open input file
> + * PARAMETERS:  Handle              - Open input file
> + *              Filename            - Input filename
> + *              DisplayErrors       - TRUE if error messages desired
>   *
>   * RETURN:      Status
>   *
> @@ -419,7 +426,9 @@ FlConsumeNewComment (
>
>  ACPI_STATUS
>  FlCheckForAscii (
> -    ASL_FILE_INFO           *FileInfo)
> +    FILE                    *Handle,
> +    char                    *Filename,
> +    BOOLEAN                 DisplayErrors)
>  {
>      UINT8                   Byte;
>      ACPI_SIZE               BadBytes = 0;
> @@ -432,7 +441,7 @@ FlCheckForAscii (
>
>      /* Read the entire file */
>
> -    while (fread (&Byte, 1, 1, FileInfo->Handle))
> +    while (fread (&Byte, 1, 1, Handle))
>      {
>          /* Ignore comment fields (allow non-ascii within) */
>
> @@ -442,12 +451,12 @@ FlCheckForAscii (
>
>              if (Byte == '*')
>              {
> -                FlConsumeAnsiComment (FileInfo, &Status);
> +                FlConsumeAnsiComment (Handle, &Status);
>              }
>
>              if (Byte == '/')
>              {
> -                FlConsumeNewComment (FileInfo, &Status);
> +                FlConsumeNewComment (Handle, &Status);
>              }
>
>              /* Reset */
> @@ -463,7 +472,7 @@ FlCheckForAscii (
>
>          if (!ACPI_IS_ASCII (Byte))
>          {
> -            if (BadBytes < 10)
> +            if ((BadBytes < 10) && (DisplayErrors))
>              {
>                  AcpiOsPrintf (
>                      "Non-ASCII character [0x%2.2X] found in line %u, file offset 0x%.2X\n",
> @@ -485,20 +494,24 @@ FlCheckForAscii (
>
>      /* Seek back to the beginning of the source file */
>
> -    fseek (FileInfo->Handle, 0, SEEK_SET);
> +    fseek (Handle, 0, SEEK_SET);
>
>      /* Were there any non-ASCII characters in the file? */
>
>      if (BadBytes)
>      {
> -        AcpiOsPrintf (
> -            "%u non-ASCII characters found in input source text, could be a binary file\n",
> -            BadBytes);
> -        AslError (ASL_ERROR, ASL_MSG_NON_ASCII, NULL, FileInfo->Filename);
> +        if (DisplayErrors)
> +        {
> +            AcpiOsPrintf (
> +                "%u non-ASCII characters found in input source text, could be a binary file\n",
> +                BadBytes);
> +            AslError (ASL_ERROR, ASL_MSG_NON_ASCII, NULL, Filename);
> +        }
> +
>          return (AE_BAD_CHARACTER);
>      }
>
> -    /* File is OK */
> +    /* File is OK (100% ASCII) */
>
>      return (AE_OK);
>  }
> @@ -780,45 +793,65 @@ CmDoOutputFiles (
>
>  /*******************************************************************************
>   *
> - * FUNCTION:    CmDumpEvent
> + * FUNCTION:    CmDumpAllEvents
>   *
> - * PARAMETERS:  Event           - A compiler event struct
> + * PARAMETERS:  None
>   *
>   * RETURN:      None.
>   *
> - * DESCRIPTION: Dump a compiler event struct
> + * DESCRIPTION: Dump all compiler events
>   *
>   ******************************************************************************/
>
>  static void
> -CmDumpEvent (
> -    ASL_EVENT_INFO          *Event)
> +CmDumpAllEvents (
> +    void)
>  {
> +    ASL_EVENT_INFO          *Event;
>      UINT32                  Delta;
>      UINT32                  USec;
>      UINT32                  MSec;
> +    UINT32                  i;
>
> -    if (!Event->Valid)
> +
> +    Event = AslGbl_Events;
> +
> +    DbgPrint (ASL_DEBUG_OUTPUT, "\n\nElapsed time for major events\n\n");
> +    if (Gbl_CompileTimesFlag)
>      {
> -        return;
> +        printf ("\nElapsed time for major events\n\n");
>      }
>
> -    /* Delta will be in 100-nanosecond units */
> +    for (i = 0; i < AslGbl_NextEvent; i++)
> +    {
> +        if (Event->Valid)
> +        {
> +            /* Delta will be in 100-nanosecond units */
>
> -    Delta = (UINT32) (Event->EndTime - Event->StartTime);
> +            Delta = (UINT32) (Event->EndTime - Event->StartTime);
>
> -    USec = Delta / 10;
> -    MSec = Delta / 10000;
> +            USec = Delta / 10;
> +            MSec = Delta / 10000;
>
> -    /* Round milliseconds up */
> +            /* Round milliseconds up */
>
> -    if ((USec - (MSec * 1000)) >= 500)
> -    {
> -        MSec++;
> -    }
> +            if ((USec - (MSec * 1000)) >= 500)
> +            {
> +                MSec++;
> +            }
>
> -    DbgPrint (ASL_DEBUG_OUTPUT, "%8u usec %8u msec - %s\n",
> -        USec, MSec, Event->EventName);
> +            DbgPrint (ASL_DEBUG_OUTPUT, "%8u usec %8u msec - %s\n",
> +                USec, MSec, Event->EventName);
> +
> +            if (Gbl_CompileTimesFlag)
> +            {
> +                printf ("%8u usec %8u msec - %s\n",
> +                    USec, MSec, Event->EventName);
> +            }
> +        }
> +
> +        Event++;
> +    }
>  }
>
>
> @@ -849,20 +882,12 @@ CmCleanupAndExit (
>          AePrintErrorLog (ASL_FILE_STDOUT);
>      }
>
> -    DbgPrint (ASL_DEBUG_OUTPUT, "\n\nElapsed time for major events\n\n");
> -    for (i = 0; i < AslGbl_NextEvent; i++)
> -    {
> -        CmDumpEvent (&AslGbl_Events[i]);
> -    }
> +    /* Emit compile times if enabled */
> +
> +    CmDumpAllEvents ();
>
>      if (Gbl_CompileTimesFlag)
>      {
> -        printf ("\nElapsed time for major events\n\n");
> -        for (i = 0; i < AslGbl_NextEvent; i++)
> -        {
> -            CmDumpEvent (&AslGbl_Events[i]);
> -        }
> -
>          printf ("\nMiscellaneous compile statistics\n\n");
>          printf ("%11u : %s\n", TotalParseNodes, "Parse nodes");
>          printf ("%11u : %s\n", Gbl_NsLookupCount, "Namespace searches");
> diff --git a/src/acpica/source/compiler/aslcompiler.h b/src/acpica/source/compiler/aslcompiler.h
> index 29558fc..03303f5 100644
> --- a/src/acpica/source/compiler/aslcompiler.h
> +++ b/src/acpica/source/compiler/aslcompiler.h
> @@ -238,7 +238,9 @@ CmCleanupAndExit (
>
>  ACPI_STATUS
>  FlCheckForAscii (
> -    ASL_FILE_INFO           *FileInfo);
> +    FILE                    *Handle,
> +    char                    *Filename,
> +    BOOLEAN                 DisplayErrors);
>
>
>  /*
> @@ -680,6 +682,11 @@ void
>  FlAddIncludeDirectory (
>      char                    *Dir);
>
> +char *
> +FlMergePathnames (
> +    char                    *PrefixDir,
> +    char                    *FilePathname);
> +
>  void
>  FlOpenIncludeFile (
>      ACPI_PARSE_OBJECT       *Op);
> diff --git a/src/acpica/source/compiler/aslcompiler.l b/src/acpica/source/compiler/aslcompiler.l
> index f911072..98f9e7e 100644
> --- a/src/acpica/source/compiler/aslcompiler.l
> +++ b/src/acpica/source/compiler/aslcompiler.l
> @@ -595,6 +595,7 @@ NamePathTail                [.]{NameSeg}
>  "IPMI"                      { count (0); return (PARSEOP_REGIONSPACE_IPMI); }
>  "GeneralPurposeIo"          { count (0); return (PARSEOP_REGIONSPACE_GPIO); }       /* ACPI 5.0 */
>  "GenericSerialBus"          { count (0); return (PARSEOP_REGIONSPACE_GSBUS); }      /* ACPI 5.0 */
> +"PCC"                       { count (0); return (PARSEOP_REGIONSPACE_PCC); }        /* ACPI 5.0 */
>  "FFixedHW"                  { count (0); return (PARSEOP_REGIONSPACE_FFIXEDHW); }
>
>      /* ResourceTypeKeyword: Resource Usage - Resource Descriptors */
> diff --git a/src/acpica/source/compiler/aslcompiler.y b/src/acpica/source/compiler/aslcompiler.y
> index 9aa8b51..9675b1d 100644
> --- a/src/acpica/source/compiler/aslcompiler.y
> +++ b/src/acpica/source/compiler/aslcompiler.y
> @@ -435,6 +435,7 @@ void *                      AslLocalAllocate (unsigned int Size);
>  %token <i> PARSEOP_REGIONSPACE_IO
>  %token <i> PARSEOP_REGIONSPACE_IPMI
>  %token <i> PARSEOP_REGIONSPACE_MEM
> +%token <i> PARSEOP_REGIONSPACE_PCC
>  %token <i> PARSEOP_REGIONSPACE_PCI
>  %token <i> PARSEOP_REGIONSPACE_PCIBAR
>  %token <i> PARSEOP_REGIONSPACE_SMBUS
> @@ -2271,7 +2272,7 @@ AddressKeyword
>      ;
>
>  AddressSpaceKeyword
> -    : ByteConst                             {$$ = UtCheckIntegerRange ($1, 0x80, 0xFF);}
> +    : ByteConst                             {$$ = UtCheckIntegerRange ($1, 0x0A, 0xFF);}
>      | RegionSpaceKeyword                    {}
>      ;
>
> @@ -2431,6 +2432,7 @@ RegionSpaceKeyword
>      | PARSEOP_REGIONSPACE_IPMI              {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_IPMI);}
>      | PARSEOP_REGIONSPACE_GPIO              {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_GPIO);}
>      | PARSEOP_REGIONSPACE_GSBUS             {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_GSBUS);}
> +    | PARSEOP_REGIONSPACE_PCC               {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_PCC);}
>      | PARSEOP_REGIONSPACE_FFIXEDHW          {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_FFIXEDHW);}
>      ;
>
> diff --git a/src/acpica/source/compiler/aslerror.c b/src/acpica/source/compiler/aslerror.c
> index c93a1a2..4d7c846 100644
> --- a/src/acpica/source/compiler/aslerror.c
> +++ b/src/acpica/source/compiler/aslerror.c
> @@ -387,12 +387,16 @@ AePrintException (
>          }
>          else
>          {
> +            /*
> +             * Less verbose version of the error message, enabled via the
> +             * -vi switch. The format is compatible with MS Visual Studio.
> +             */
>              fprintf (OutputFile, "%s", Enode->Filename);
>
>              if (Enode->LineNumber)
>              {
> -                fprintf (OutputFile, "(%u) i:%6u : ",
> -                    Enode->LineNumber, Enode->LineNumber);
> +                fprintf (OutputFile, "(%u) : ",
> +                    Enode->LineNumber);
>              }
>          }
>      }
> @@ -407,9 +411,18 @@ AePrintException (
>      {
>          /* Decode the message ID */
>
> -        fprintf (OutputFile, "%s %4.4d - ",
> -                    AslErrorLevel[Enode->Level],
> -                    Enode->MessageId + ((Enode->Level+1) * 1000));
> +        if (Gbl_VerboseErrors)
> +        {
> +            fprintf (OutputFile, "%s %4.4d -",
> +                        AslErrorLevel[Enode->Level],
> +                        Enode->MessageId + ((Enode->Level+1) * 1000));
> +        }
> +        else /* IDE case */
> +        {
> +            fprintf (OutputFile, "%s %4.4d:",
> +                        AslErrorLevelIde[Enode->Level],
> +                        Enode->MessageId + ((Enode->Level+1) * 1000));
> +        }
>
>          MainMessage = AslMessages[Enode->MessageId];
>          ExtraMessage = Enode->Message;
> diff --git a/src/acpica/source/compiler/aslfiles.c b/src/acpica/source/compiler/aslfiles.c
> index ef10668..a2512a6 100644
> --- a/src/acpica/source/compiler/aslfiles.c
> +++ b/src/acpica/source/compiler/aslfiles.c
> @@ -564,6 +564,107 @@ FlAddIncludeDirectory (
>
>  /*******************************************************************************
>   *
> + * FUNCTION:    FlMergePathnames
> + *
> + * PARAMETERS:  PrefixDir       - Prefix directory pathname. Can be NULL or
> + *                                a zero length string.
> + *              FilePathname    - The include filename from the source ASL.
> + *
> + * RETURN:      Merged pathname string
> + *
> + * DESCRIPTION: Merge two pathnames that (probably) have common elements, to
> + *              arrive at a minimal length string. Merge can occur if the
> + *              FilePathname is relative to the PrefixDir.
> + *
> + ******************************************************************************/
> +
> +char *
> +FlMergePathnames (
> +    char                    *PrefixDir,
> +    char                    *FilePathname)
> +{
> +    char                    *CommonPath;
> +    char                    *Pathname;
> +    char                    *LastElement;
> +
> +
> +    DbgPrint (ASL_PARSE_OUTPUT, "Include: Prefix path - \"%s\"\n"
> +        "Include: FilePathname - \"%s\"\n",
> +         PrefixDir, FilePathname);
> +
> +    /*
> +     * If there is no prefix directory or if the file pathname is absolute,
> +     * just return the original file pathname
> +     */
> +    if (!PrefixDir || (!*PrefixDir) ||
> +        (*FilePathname == '/') ||
> +         (FilePathname[1] == ':'))
> +    {
> +        Pathname = ACPI_ALLOCATE (strlen (FilePathname) + 1);
> +        strcpy (Pathname, FilePathname);
> +        goto ConvertBackslashes;
> +    }
> +
> +    /* Need a local copy of the prefix directory path */
> +
> +    CommonPath = ACPI_ALLOCATE (strlen (PrefixDir) + 1);
> +    strcpy (CommonPath, PrefixDir);
> +
> +    /*
> +     * Walk forward through the file path, and simultaneously backward
> +     * through the prefix directory path until there are no more
> +     * relative references at the start of the file path.
> +     */
> +    while (*FilePathname && (!strncmp (FilePathname, "../", 3)))
> +    {
> +        /* Remove last element of the prefix directory path */
> +
> +        LastElement = strrchr (CommonPath, '/');
> +        if (!LastElement)
> +        {
> +            goto ConcatenatePaths;
> +        }
> +
> +        *LastElement = 0;   /* Terminate CommonPath string */
> +        FilePathname += 3;  /* Point to next path element */
> +    }
> +
> +    /*
> +     * Remove the last element of the prefix directory path (it is the same as
> +     * the first element of the file pathname), and build the final merged
> +     * pathname.
> +     */
> +    LastElement = strrchr (CommonPath, '/');
> +    if (LastElement)
> +    {
> +        *LastElement = 0;
> +    }
> +
> +    /* Build the final merged pathname */
> +
> +ConcatenatePaths:
> +    Pathname = ACPI_ALLOCATE_ZEROED (strlen (CommonPath) + strlen (FilePathname) + 2);
> +    if (LastElement && *CommonPath)
> +    {
> +        strcpy (Pathname, CommonPath);
> +        strcat (Pathname, "/");
> +    }
> +    strcat (Pathname, FilePathname);
> +    ACPI_FREE (CommonPath);
> +
> +    /* Convert all backslashes to normal slashes */
> +
> +ConvertBackslashes:
> +    UtConvertBackslashes (Pathname);
> +
> +    DbgPrint (ASL_PARSE_OUTPUT, "Include: Merged Pathname - \"%s\"\n",
> +         Pathname);
> +    return (Pathname);
> +}
> +
> +
> +/*******************************************************************************
> + *
>   * FUNCTION:    FlOpenIncludeWithPrefix
>   *
>   * PARAMETERS:  PrefixDir       - Prefix directory pathname. Can be a zero
> @@ -587,12 +688,9 @@ FlOpenIncludeWithPrefix (
>
>      /* Build the full pathname to the file */
>
> -    Pathname = ACPI_ALLOCATE (strlen (PrefixDir) + strlen (Filename) + 1);
> -
> -    strcpy (Pathname, PrefixDir);
> -    strcat (Pathname, Filename);
> +    Pathname = FlMergePathnames (PrefixDir, Filename);
>
> -    DbgPrint (ASL_PARSE_OUTPUT, "\nAttempt to open include file: path %s\n\n",
> +    DbgPrint (ASL_PARSE_OUTPUT, "Include: Opening file - \"%s\"\n\n",
>          Pathname);
>
>      /* Attempt to open the file, push if successful */
> @@ -728,7 +826,7 @@ FlOpenInputFile (
>
>      /* Open the input ASL file, text mode */
>
> -    FlOpenFile (ASL_FILE_INPUT, InputFilename, "r");
> +    FlOpenFile (ASL_FILE_INPUT, InputFilename, "rt");
>      AslCompilerin = Gbl_Files[ASL_FILE_INPUT].Handle;
>
>      return (AE_OK);
> @@ -812,7 +910,7 @@ FlOpenMiscOutputFiles (
>
>          /* Open the hex file, text mode */
>
> -        FlOpenFile (ASL_FILE_HEX_OUTPUT, Filename, "w+");
> +        FlOpenFile (ASL_FILE_HEX_OUTPUT, Filename, "w+t");
>
>          AslCompilerSignon (ASL_FILE_HEX_OUTPUT);
>          AslCompilerFileHeader (ASL_FILE_HEX_OUTPUT);
> @@ -863,7 +961,7 @@ FlOpenMiscOutputFiles (
>
>          /* Open the listing file, text mode */
>
> -        FlOpenFile (ASL_FILE_LISTING_OUTPUT, Filename, "w+");
> +        FlOpenFile (ASL_FILE_LISTING_OUTPUT, Filename, "w+t");
>
>          AslCompilerSignon (ASL_FILE_LISTING_OUTPUT);
>          AslCompilerFileHeader (ASL_FILE_LISTING_OUTPUT);
> @@ -881,7 +979,7 @@ FlOpenMiscOutputFiles (
>              return (AE_ERROR);
>          }
>
> -        FlOpenFile (ASL_FILE_PREPROCESSOR, Filename, "w+b");
> +        FlOpenFile (ASL_FILE_PREPROCESSOR, Filename, "w+t");
>      }
>
>      /* All done for data table compiler */
> @@ -926,7 +1024,7 @@ FlOpenMiscOutputFiles (
>
>          /* Open the assembly code source file, text mode */
>
> -        FlOpenFile (ASL_FILE_ASM_SOURCE_OUTPUT, Filename, "w+");
> +        FlOpenFile (ASL_FILE_ASM_SOURCE_OUTPUT, Filename, "w+t");
>
>          AslCompilerSignon (ASL_FILE_ASM_SOURCE_OUTPUT);
>          AslCompilerFileHeader (ASL_FILE_ASM_SOURCE_OUTPUT);
> @@ -946,7 +1044,7 @@ FlOpenMiscOutputFiles (
>
>          /* Open the C code source file, text mode */
>
> -        FlOpenFile (ASL_FILE_C_SOURCE_OUTPUT, Filename, "w+");
> +        FlOpenFile (ASL_FILE_C_SOURCE_OUTPUT, Filename, "w+t");
>
>          FlPrintFile (ASL_FILE_C_SOURCE_OUTPUT, "/*\n");
>          AslCompilerSignon (ASL_FILE_C_SOURCE_OUTPUT);
> @@ -967,7 +1065,7 @@ FlOpenMiscOutputFiles (
>
>          /* Open the assembly include file, text mode */
>
> -        FlOpenFile (ASL_FILE_ASM_INCLUDE_OUTPUT, Filename, "w+");
> +        FlOpenFile (ASL_FILE_ASM_INCLUDE_OUTPUT, Filename, "w+t");
>
>          AslCompilerSignon (ASL_FILE_ASM_INCLUDE_OUTPUT);
>          AslCompilerFileHeader (ASL_FILE_ASM_INCLUDE_OUTPUT);
> @@ -987,7 +1085,7 @@ FlOpenMiscOutputFiles (
>
>          /* Open the C include file, text mode */
>
> -        FlOpenFile (ASL_FILE_C_INCLUDE_OUTPUT, Filename, "w+");
> +        FlOpenFile (ASL_FILE_C_INCLUDE_OUTPUT, Filename, "w+t");
>
>          FlPrintFile (ASL_FILE_C_INCLUDE_OUTPUT, "/*\n");
>          AslCompilerSignon (ASL_FILE_C_INCLUDE_OUTPUT);
> @@ -1008,7 +1106,7 @@ FlOpenMiscOutputFiles (
>
>          /* Open the namespace file, text mode */
>
> -        FlOpenFile (ASL_FILE_NAMESPACE_OUTPUT, Filename, "w+");
> +        FlOpenFile (ASL_FILE_NAMESPACE_OUTPUT, Filename, "w+t");
>
>          AslCompilerSignon (ASL_FILE_NAMESPACE_OUTPUT);
>          AslCompilerFileHeader (ASL_FILE_NAMESPACE_OUTPUT);
> diff --git a/src/acpica/source/compiler/asllookup.c b/src/acpica/source/compiler/asllookup.c
> index 0d92c91..8f8dc5d 100644
> --- a/src/acpica/source/compiler/asllookup.c
> +++ b/src/acpica/source/compiler/asllookup.c
> @@ -1170,7 +1170,7 @@ LkNamespaceLocateBegin (
>
>              if (Message)
>              {
> -                sprintf (MsgBuffer, "Tag: %u bit%s, Field: %u bit%s",
> +                sprintf (MsgBuffer, "Size mismatch, Tag: %u bit%s, Field: %u bit%s",
>                      TagBitLength, (TagBitLength > 1) ? "s" : "",
>                      FieldBitLength, (FieldBitLength > 1) ? "s" : "");
>
> diff --git a/src/acpica/source/compiler/aslmain.c b/src/acpica/source/compiler/aslmain.c
> index 285d765..efd5906 100644
> --- a/src/acpica/source/compiler/aslmain.c
> +++ b/src/acpica/source/compiler/aslmain.c
> @@ -135,7 +135,7 @@ Options (
>      void);
>
>  static void
> -HelpMessage (
> +FilenameHelp (
>      void);
>
>  static void
> @@ -168,7 +168,7 @@ AslDoResponseFile (
>
>
>  #define ASL_TOKEN_SEPARATORS    " \t\n"
> -#define ASL_SUPPORTED_OPTIONS   "@:2b|c|d^D:e:fgh^i|I:l^mno|p:P^r:s|t|T:G^v|w|x:z"
> +#define ASL_SUPPORTED_OPTIONS   "@:2b|c|d^D:e:fgh^i|I:l^mno|p:P^r:s|t|T:G^v^w|x:z"
>
>
>  /*******************************************************************************
> @@ -191,6 +191,7 @@ Options (
>      printf ("\nGlobal:\n");
>      ACPI_OPTION ("-@ <file>",       "Specify command file");
>      ACPI_OPTION ("-I <dir>",        "Specify additional include directory");
> +    ACPI_OPTION ("-v",              "Display compiler version");
>
>      printf ("\nPreprocessor:\n");
>      ACPI_OPTION ("-D <symbol>",     "Define symbol for preprocessor use");
> @@ -242,27 +243,36 @@ Options (
>      ACPI_OPTION ("-g",              "Get ACPI tables and write to files (*.dat)");
>
>      printf ("\nHelp:\n");
> -    ACPI_OPTION ("-h",              "Additional help and compiler debug options");
> +    ACPI_OPTION ("-h",              "This message");
>      ACPI_OPTION ("-hc",             "Display operators allowed in constant expressions");
> +    ACPI_OPTION ("-hf",             "Display help for output filename generation");
>      ACPI_OPTION ("-hr",             "Display ACPI reserved method names");
>      ACPI_OPTION ("-ht",             "Display currently supported ACPI table names");
> +
> +    printf ("\nDebug Options:\n");
> +    ACPI_OPTION ("-bf -bt",         "Create debug file (full or parse tree only) (*.txt)");
> +    ACPI_OPTION ("-f",              "Ignore errors, force creation of AML output file(s)");
> +    ACPI_OPTION ("-n",              "Parse only, no output generation");
> +    ACPI_OPTION ("-ot",             "Display compile times and statistics");
> +    ACPI_OPTION ("-x <level>",      "Set debug level for trace output");
> +    ACPI_OPTION ("-z",              "Do not insert new compiler ID for DataTables");
>  }
>
>
>  /*******************************************************************************
>   *
> - * FUNCTION:    HelpMessage
> + * FUNCTION:    FilenameHelp
>   *
>   * PARAMETERS:  None
>   *
>   * RETURN:      None
>   *
> - * DESCRIPTION: Display help message
> + * DESCRIPTION: Display help message for output filename generation
>   *
>   ******************************************************************************/
>
>  static void
> -HelpMessage (
> +FilenameHelp (
>      void)
>  {
>
> @@ -274,17 +284,6 @@ HelpMessage (
>      printf ("    2) The prefix of the AMLFileName in the ASL Definition Block\n");
>      printf ("    3) The prefix of the input filename\n");
>      printf ("\n");
> -
> -    Options ();
> -
> -    printf ("\nCompiler/Disassembler Debug Options:\n");
> -    ACPI_OPTION ("-bb -bp -bt",     "Create compiler debug/trace file (*.txt)");
> -    ACPI_OPTION ("",                "Types: Parse/Tree/Both");
> -    ACPI_OPTION ("-f",              "Ignore errors, force creation of AML output file(s)");
> -    ACPI_OPTION ("-n",              "Parse only, no output generation");
> -    ACPI_OPTION ("-ot",             "Display compile times");
> -    ACPI_OPTION ("-x <level>",      "Set debug level for trace output");
> -    ACPI_OPTION ("-z",              "Do not insert new compiler ID for DataTables");
>  }
>
>
> @@ -502,13 +501,7 @@ AslDoOptions (
>      case 'b':   /* Debug output options */
>          switch (AcpiGbl_Optarg[0])
>          {
> -        case 'b':
> -            AslCompilerdebug = 1; /* same as yydebug */
> -            DtParserdebug = 1;
> -            PrParserdebug = 1;
> -            break;
> -
> -        case 'p':
> +        case 'f':
>              AslCompilerdebug = 1; /* same as yydebug */
>              DtParserdebug = 1;
>              PrParserdebug = 1;
> @@ -602,13 +595,17 @@ AslDoOptions (
>          switch (AcpiGbl_Optarg[0])
>          {
>          case '^':
> -            HelpMessage ();
> +            Usage ();
>              exit (0);
>
>          case 'c':
>              UtDisplayConstantOpcodes ();
>              exit (0);
>
> +        case 'f':
> +            FilenameHelp ();
> +            exit (0);
> +
>          case 'r':
>              /* reserved names */
>
> @@ -827,9 +824,13 @@ AslDoOptions (
>          break;
>
>
> -    case 'v':   /* Verbosity settings */
> +    case 'v':   /* Version and verbosity settings */
>          switch (AcpiGbl_Optarg[0])
>          {
> +        case '^':
> +            printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME));
> +            exit (0);
> +
>          case 'a':
>              /* Disable All error/warning messages */
>
> @@ -837,9 +838,18 @@ AslDoOptions (
>              break;
>
>          case 'i':
> -            /* Less verbose error messages */
> -
> +            /*
> +             * Support for integrated development environment(s).
> +             *
> +             * 1) No compiler signon
> +             * 2) Send stderr messages to stdout
> +             * 3) Less verbose error messages (single line only for each)
> +             * 4) Error/warning messages are formatted appropriately to
> +             *    be recognized by MS Visual Studio
> +             */
>              Gbl_VerboseErrors = FALSE;
> +            Gbl_DoSignon = FALSE;
> +            Gbl_Files[ASL_FILE_STDERR].Handle = stdout;
>              break;
>
>          case 'o':
> diff --git a/src/acpica/source/compiler/aslmap.c b/src/acpica/source/compiler/aslmap.c
> index 498ca42..c276972 100644
> --- a/src/acpica/source/compiler/aslmap.c
> +++ b/src/acpica/source/compiler/aslmap.c
> @@ -439,6 +439,7 @@ const ASL_MAPPING_ENTRY     AslKeywordMapping [] =
>  /* REGIONSPACE_IO */            OP_TABLE_ENTRY (AML_RAW_DATA_BYTE,          ACPI_ADR_SPACE_SYSTEM_IO,       0,                  0),
>  /* REGIONSPACE_IPMI */          OP_TABLE_ENTRY (AML_RAW_DATA_BYTE,          ACPI_ADR_SPACE_IPMI,            0,                  0),
>  /* REGIONSPACE_MEM */           OP_TABLE_ENTRY (AML_RAW_DATA_BYTE,          ACPI_ADR_SPACE_SYSTEM_MEMORY,   0,                  0),
> +/* REGIONSPACE_PCC */           OP_TABLE_ENTRY (AML_RAW_DATA_BYTE,          ACPI_ADR_SPACE_PLATFORM_COMM,   0,                  0),
>  /* REGIONSPACE_PCI */           OP_TABLE_ENTRY (AML_RAW_DATA_BYTE,          ACPI_ADR_SPACE_PCI_CONFIG,      0,                  0),
>  /* REGIONSPACE_PCIBAR */        OP_TABLE_ENTRY (AML_RAW_DATA_BYTE,          ACPI_ADR_SPACE_PCI_BAR_TARGET,  0,                  0),
>  /* REGIONSPACE_SMBUS */         OP_TABLE_ENTRY (AML_RAW_DATA_BYTE,          ACPI_ADR_SPACE_SMBUS,           0,                  0),
> diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h
> index 4e5bb31..56951bc 100644
> --- a/src/acpica/source/compiler/aslmessages.h
> +++ b/src/acpica/source/compiler/aslmessages.h
> @@ -474,7 +474,7 @@ char                        *AslMessages [] = {
>  };
>
>
> -char                    *AslErrorLevel [ASL_NUM_REPORT_LEVELS] = {
> +const char              *AslErrorLevel [ASL_NUM_REPORT_LEVELS] = {
>      "Warning ",
>      "Warning ",
>      "Warning ",
> @@ -483,6 +483,15 @@ char                    *AslErrorLevel [ASL_NUM_REPORT_LEVELS] = {
>      "Optimize"
>  };
>
> +const char              *AslErrorLevelIde [ASL_NUM_REPORT_LEVELS] = {
> +    "warning ",
> +    "warning ",
> +    "warning ",
> +    "error   ",
> +    "remark  ",
> +    "optimize"
> +};
> +
>  #define ASL_ERROR_LEVEL_LENGTH          8       /* Length of strings above */
>
>  #endif  /* ASL_EXCEPTIONS */
> diff --git a/src/acpica/source/compiler/aslstartup.c b/src/acpica/source/compiler/aslstartup.c
> index 49b25d9..2fbe0d3 100644
> --- a/src/acpica/source/compiler/aslstartup.c
> +++ b/src/acpica/source/compiler/aslstartup.c
> @@ -299,7 +299,7 @@ AslDetectSourceFileType (
>
>      /* Check for 100% ASCII source file (comments are ignored) */
>
> -    Status = FlCheckForAscii (Info);
> +    Status = FlCheckForAscii (Info->Handle, Info->Filename, TRUE);
>      if (ACPI_FAILURE (Status))
>      {
>          printf ("Non-ascii input file - %s\n", Info->Filename);
> diff --git a/src/acpica/source/compiler/aslsupport.l b/src/acpica/source/compiler/aslsupport.l
> index cdaf2b8..0ce5a20 100644
> --- a/src/acpica/source/compiler/aslsupport.l
> +++ b/src/acpica/source/compiler/aslsupport.l
> @@ -164,19 +164,23 @@ static void
>  AslDoLineDirective (
>      void)
>  {
> -    char                    c;
> +    int                     c;
>      char                    *Token;
>      UINT32                  LineNumber;
>      char                    *Filename;
> +    UINT32                  i;
>
>
>      /* Eat the entire line that contains the #line directive */
>
> -    while ((c = (char) input()) != '\n' && c != EOF)
> +    Gbl_LineBufPtr = Gbl_CurrentLineBuffer;
> +
> +    while ((c = input()) != '\n' && c != EOF)
>      {
> -        AslInsertLineBuffer (c);
> +        *Gbl_LineBufPtr = c;
> +        Gbl_LineBufPtr++;
>      }
> -    AslInsertLineBuffer (0);
> +    *Gbl_LineBufPtr = 0;
>
>      /* First argument is the actual line number */
>
> @@ -186,10 +190,23 @@ AslDoLineDirective (
>          goto ResetAndExit;
>      }
>
> -    /* Convert line number. Subtract one to handle _this_ line */
> +    /* First argument is the line number */
>
>      LineNumber = (UINT32) UtDoConstant (Token);
> -    FlSetLineNumber (LineNumber - 1);
> +
> +    /* Emit the appropriate number of newlines */
> +
> +    Gbl_CurrentColumn = 0;
> +    if (LineNumber > Gbl_CurrentLineNumber)
> +    {
> +        for (i = 0; i < (LineNumber - Gbl_CurrentLineNumber); i++)
> +        {
> +            FlWriteFile (ASL_FILE_SOURCE_OUTPUT, "\n", 1);
> +            Gbl_CurrentColumn++;
> +        }
> +    }
> +
> +    FlSetLineNumber (LineNumber);
>
>      /* Second argument is the optional filename (in double quotes) */
>
> @@ -204,7 +221,12 @@ AslDoLineDirective (
>      /* Third argument is not supported at this time */
>
>  ResetAndExit:
> -    AslResetCurrentLineBuffer ();
> +
> +    /* Reset globals for a new line */
> +
> +    Gbl_CurrentLineOffset += Gbl_CurrentColumn;
> +    Gbl_CurrentColumn = 0;
> +    Gbl_LineBufPtr = Gbl_CurrentLineBuffer;
>  }
>
>
> @@ -480,8 +502,8 @@ static char
>  AslDoComment (
>      void)
>  {
> -    char                c;
> -    char                c1 = 0;
> +    int                 c;
> +    int                 c1 = 0;
>
>
>      AslInsertLineBuffer ('/');
> @@ -491,7 +513,7 @@ loop:
>
>      /* Eat chars until end-of-comment */
>
> -    while ((c = (char) input()) != '*' && c != EOF)
> +    while ((c = input()) != '*' && c != EOF)
>      {
>          AslInsertLineBuffer (c);
>          c1 = c;
> @@ -518,7 +540,7 @@ loop:
>
>      AslInsertLineBuffer (c);
>
> -    if ((c1 = (char) input()) != '/' && c1 != EOF)
> +    if ((c1 = input()) != '/' && c1 != EOF)
>      {
>          unput(c1);
>          goto loop;
> @@ -561,13 +583,13 @@ static char
>  AslDoCommentType2 (
>      void)
>  {
> -    char                c;
> +    int                 c;
>
>
>      AslInsertLineBuffer ('/');
>      AslInsertLineBuffer ('/');
>
> -    while ((c = (char) input()) != '\n' && c != EOF)
> +    while ((c = input()) != '\n' && c != EOF)
>      {
>          AslInsertLineBuffer (c);
>      }
> @@ -603,7 +625,7 @@ AslDoStringLiteral (
>      char                *StringBuffer = MsgBuffer;
>      char                *EndBuffer = MsgBuffer + ASL_MSG_BUFFER_SIZE;
>      char                *CleanString;
> -    char                StringChar;
> +    int                 StringChar;
>      UINT32              State = ASL_NORMAL_CHAR;
>      UINT32              i = 0;
>      UINT8               Digit;
> @@ -616,7 +638,7 @@ AslDoStringLiteral (
>       * source line buffer.
>       */
>      AslInsertLineBuffer ('\"');
> -    while ((StringChar = (char) input()) != EOF)
> +    while ((StringChar = input()) != EOF)
>      {
>          AslInsertLineBuffer (StringChar);
>
> diff --git a/src/acpica/source/compiler/aslutils.c b/src/acpica/source/compiler/aslutils.c
> index 8a7dbba..de7ea0d 100644
> --- a/src/acpica/source/compiler/aslutils.c
> +++ b/src/acpica/source/compiler/aslutils.c
> @@ -211,7 +211,7 @@ UtDisplaySupportedTables (
>
>  /*******************************************************************************
>   *
> - * FUNCTION:    AcpiPsDisplayConstantOpcodes
> + * FUNCTION:    UtDisplayConstantOpcodes
>   *
>   * PARAMETERS:  None
>   *
> @@ -244,11 +244,11 @@ UtDisplayConstantOpcodes (
>   *
>   * FUNCTION:    UtLocalCalloc
>   *
> - * PARAMETERS:  Size        - Bytes to be allocated
> + * PARAMETERS:  Size                - Bytes to be allocated
>   *
> - * RETURN:      Pointer to the allocated memory.  Guaranteed to be valid.
> + * RETURN:      Pointer to the allocated memory. Guaranteed to be valid.
>   *
> - * DESCRIPTION: Allocate zero-initialized memory.  Aborts the compile on an
> + * DESCRIPTION: Allocate zero-initialized memory. Aborts the compile on an
>   *              allocation failure, on the assumption that nothing more can be
>   *              accomplished.
>   *
> @@ -283,9 +283,9 @@ UtLocalCalloc (
>   *
>   * FUNCTION:    UtBeginEvent
>   *
> - * PARAMETERS:  Name        - Ascii name of this event
> + * PARAMETERS:  Name                - Ascii name of this event
>   *
> - * RETURN:      Event       - Event number (integer index)
> + * RETURN:      Event number (integer index)
>   *
>   * DESCRIPTION: Saves the current time with this event
>   *
> @@ -316,7 +316,7 @@ UtBeginEvent (
>   *
>   * FUNCTION:    UtEndEvent
>   *
> - * PARAMETERS:  Event       - Event number (integer index)
> + * PARAMETERS:  Event               - Event number (integer index)
>   *
>   * RETURN:      None
>   *
> @@ -326,7 +326,7 @@ UtBeginEvent (
>
>  void
>  UtEndEvent (
> -    UINT8                  Event)
> +    UINT8                   Event)
>  {
>
>      if (Event >= ASL_NUM_EVENTS)
> @@ -344,7 +344,7 @@ UtEndEvent (
>   *
>   * FUNCTION:    UtHexCharToValue
>   *
> - * PARAMETERS:  HexChar         - Hex character in Ascii
> + * PARAMETERS:  HexChar             - Hex character in Ascii
>   *
>   * RETURN:      The binary value of the hex character
>   *
> @@ -375,12 +375,13 @@ UtHexCharToValue (
>   *
>   * FUNCTION:    UtConvertByteToHex
>   *
> - * PARAMETERS:  RawByte         - Binary data
> - *              Buffer          - Pointer to where the hex bytes will be stored
> + * PARAMETERS:  RawByte             - Binary data
> + *              Buffer              - Pointer to where the hex bytes will be
> + *                                    stored
>   *
>   * RETURN:      Ascii hex byte is stored in Buffer.
>   *
> - * DESCRIPTION: Perform hex-to-ascii translation.  The return data is prefixed
> + * DESCRIPTION: Perform hex-to-ascii translation. The return data is prefixed
>   *              with "0x"
>   *
>   ******************************************************************************/
> @@ -403,12 +404,13 @@ UtConvertByteToHex (
>   *
>   * FUNCTION:    UtConvertByteToAsmHex
>   *
> - * PARAMETERS:  RawByte         - Binary data
> - *              Buffer          - Pointer to where the hex bytes will be stored
> + * PARAMETERS:  RawByte             - Binary data
> + *              Buffer              - Pointer to where the hex bytes will be
> + *                                    stored
>   *
>   * RETURN:      Ascii hex byte is stored in Buffer.
>   *
> - * DESCRIPTION: Perform hex-to-ascii translation.  The return data is prefixed
> + * DESCRIPTION: Perform hex-to-ascii translation. The return data is prefixed
>   *              with "0x"
>   *
>   ******************************************************************************/
> @@ -430,13 +432,13 @@ UtConvertByteToAsmHex (
>   *
>   * FUNCTION:    DbgPrint
>   *
> - * PARAMETERS:  Type            - Type of output
> - *              Fmt             - Printf format string
> - *              ...             - variable printf list
> + * PARAMETERS:  Type                - Type of output
> + *              Fmt                 - Printf format string
> + *              ...                 - variable printf list
>   *
>   * RETURN:      None
>   *
> - * DESCRIPTION: Conditional print statement.  Prints to stderr only if the
> + * DESCRIPTION: Conditional print statement. Prints to stderr only if the
>   *              debug flag is set.
>   *
>   ******************************************************************************/
> @@ -510,7 +512,7 @@ UtPrintFormattedName (
>   *
>   * FUNCTION:    UtSetParseOpName
>   *
> - * PARAMETERS:  Op
> + * PARAMETERS:  Op                  - Parse op to be named.
>   *
>   * RETURN:      None
>   *
> @@ -532,7 +534,7 @@ UtSetParseOpName (
>   *
>   * FUNCTION:    UtDisplaySummary
>   *
> - * PARAMETERS:  FileID          - ID of outpout file
> + * PARAMETERS:  FileID              - ID of outpout file
>   *
>   * RETURN:      None
>   *
> @@ -643,11 +645,11 @@ UtDisplaySummary (
>
>  /*******************************************************************************
>   *
> - * FUNCTION:    UtDisplaySummary
> + * FUNCTION:    UtCheckIntegerRange
>   *
> - * PARAMETERS:  Op              - Integer parse node
> - *              LowValue        - Smallest allowed value
> - *              HighValue       - Largest allowed value
> + * PARAMETERS:  Op                  - Integer parse node
> + *              LowValue            - Smallest allowed value
> + *              HighValue           - Largest allowed value
>   *
>   * RETURN:      Op if OK, otherwise NULL
>   *
> @@ -698,11 +700,11 @@ UtCheckIntegerRange (
>   *
>   * FUNCTION:    UtGetStringBuffer
>   *
> - * PARAMETERS:  Length          - Size of buffer requested
> + * PARAMETERS:  Length              - Size of buffer requested
>   *
> - * RETURN:      Pointer to the buffer.  Aborts on allocation failure
> + * RETURN:      Pointer to the buffer. Aborts on allocation failure
>   *
> - * DESCRIPTION: Allocate a string buffer.  Bypass the local
> + * DESCRIPTION: Allocate a string buffer. Bypass the local
>   *              dynamic memory manager for performance reasons (This has a
>   *              major impact on the speed of the compiler.)
>   *
> @@ -733,8 +735,8 @@ UtGetStringBuffer (
>   *
>   * FUNCTION:    UtInternalizeName
>   *
> - * PARAMETERS:  ExternalName            - Name to convert
> - *              ConvertedName           - Where the converted name is returned
> + * PARAMETERS:  ExternalName        - Name to convert
> + *              ConvertedName       - Where the converted name is returned
>   *
>   * RETURN:      Status
>   *
> @@ -786,8 +788,8 @@ UtInternalizeName (
>   *
>   * FUNCTION:    UtPadNameWithUnderscores
>   *
> - * PARAMETERS:  NameSeg         - Input nameseg
> - *              PaddedNameSeg   - Output padded nameseg
> + * PARAMETERS:  NameSeg             - Input nameseg
> + *              PaddedNameSeg       - Output padded nameseg
>   *
>   * RETURN:      Padded nameseg.
>   *
> @@ -824,8 +826,8 @@ UtPadNameWithUnderscores (
>   *
>   * FUNCTION:    UtAttachNameseg
>   *
> - * PARAMETERS:  Op              - Parent parse node
> - *              Name            - Full ExternalName
> + * PARAMETERS:  Op                  - Parent parse node
> + *              Name                - Full ExternalName
>   *
>   * RETURN:      None; Sets the NameSeg field in parent node
>   *
> @@ -881,12 +883,12 @@ UtAttachNameseg (
>   *
>   * FUNCTION:    UtAttachNamepathToOwner
>   *
> - * PARAMETERS:  Op            - Parent parse node
> - *              NameOp        - Node that contains the name
> + * PARAMETERS:  Op                  - Parent parse node
> + *              NameOp              - Node that contains the name
>   *
>   * RETURN:      Sets the ExternalName and Namepath in the parent node
>   *
> - * DESCRIPTION: Store the name in two forms in the parent node:  The original
> + * DESCRIPTION: Store the name in two forms in the parent node: The original
>   *              (external) name, and the internalized name that is used within
>   *              the ACPI namespace manager.
>   *
> @@ -926,11 +928,11 @@ UtAttachNamepathToOwner (
>   *
>   * FUNCTION:    UtDoConstant
>   *
> - * PARAMETERS:  String      - Hex, Octal, or Decimal string
> + * PARAMETERS:  String              - Hex, Octal, or Decimal string
>   *
>   * RETURN:      Converted Integer
>   *
> - * DESCRIPTION: Convert a string to an integer.  With error checking.
> + * DESCRIPTION: Convert a string to an integer, with error checking.
>   *
>   ******************************************************************************/
>
> @@ -961,10 +963,10 @@ UtDoConstant (
>   *
>   * FUNCTION:    UtStrtoul64
>   *
> - * PARAMETERS:  String          - Null terminated string
> - *              Terminater      - Where a pointer to the terminating byte is
> - *                                returned
> - *              Base            - Radix of the string
> + * PARAMETERS:  String              - Null terminated string
> + *              Terminater          - Where a pointer to the terminating byte
> + *                                    is returned
> + *              Base                - Radix of the string
>   *
>   * RETURN:      Converted value
>   *
> @@ -1144,5 +1146,3 @@ ErrorExit:
>
>      return (Status);
>  }
> -
> -
> diff --git a/src/acpica/source/compiler/dtio.c b/src/acpica/source/compiler/dtio.c
> index 91d4aba..7a68e84 100644
> --- a/src/acpica/source/compiler/dtio.c
> +++ b/src/acpica/source/compiler/dtio.c
> @@ -161,6 +161,7 @@ DtDumpBuffer (
>  #define DT_SLASH_SLASH_COMMENT      4
>  #define DT_END_COMMENT              5
>  #define DT_MERGE_LINES              6
> +#define DT_ESCAPE_SEQUENCE          7
>
>  static UINT32  Gbl_NextLineOffset;
>
> @@ -498,7 +499,6 @@ DtGetNextLine (
>              {
>              case DT_START_QUOTED_STRING:
>              case DT_SLASH_ASTERISK_COMMENT:
> -            case DT_SLASH_SLASH_COMMENT:
>
>                  AcpiOsPrintf ("**** EOF within comment/string %u\n", State);
>                  break;
> @@ -507,7 +507,22 @@ DtGetNextLine (
>                  break;
>              }
>
> -            return (ASL_EOF);
> +            /* Standalone EOF is OK */
> +
> +            if (i == 0)
> +            {
> +                return (ASL_EOF);
> +            }
> +
> +            /*
> +             * Received an EOF in the middle of a line. Terminate the
> +             * line with a newline. The next call to this function will
> +             * return a standalone EOF. Thus, the upper parsing software
> +             * never has to deal with an EOF within a valid line (or
> +             * the last line does not get tossed on the floor.)
> +             */
> +            c = '\n';
> +            State = DT_NORMAL_TEXT;
>          }
>
>          switch (State)
> @@ -576,12 +591,36 @@ DtGetNextLine (
>              Gbl_CurrentLineBuffer[i] = c;
>              i++;
>
> -            if (c == '"')
> +            switch (c)
>              {
> +            case '"':
>                  State = DT_NORMAL_TEXT;
> +                break;
> +
> +            case '\\':
> +                State = DT_ESCAPE_SEQUENCE;
> +                break;
> +
> +            case '\n':
> +                AcpiOsPrintf ("ERROR at line %u: Unterminated quoted string\n",
> +                    Gbl_CurrentLineNumber++);
> +                State = DT_NORMAL_TEXT;
> +                break;
> +
> +            default:    /* Get next character */
> +                break;
>              }
>              break;
>
> +        case DT_ESCAPE_SEQUENCE:
> +
> +            /* Just copy the escaped character. TBD: sufficient for table compiler? */
> +
> +            Gbl_CurrentLineBuffer[i] = c;
> +            i++;
> +            State = DT_START_QUOTED_STRING;
> +            break;
> +
>          case DT_START_COMMENT:
>
>              /* Open comment if this character is an asterisk or slash */
> diff --git a/src/acpica/source/compiler/dttemplate.c b/src/acpica/source/compiler/dttemplate.c
> index ed5f79b..1d92b78 100644
> --- a/src/acpica/source/compiler/dttemplate.c
> +++ b/src/acpica/source/compiler/dttemplate.c
> @@ -298,7 +298,7 @@ DtCreateAllTemplates (
>      }
>
>      /*
> -     * Create the "special ACPI tables:
> +     * Create the special ACPI tables:
>       * 1) DSDT/SSDT are AML tables, not data tables
>       * 2) FACS and RSDP have non-standard headers
>       */
> diff --git a/src/acpica/source/compiler/prscan.c b/src/acpica/source/compiler/prscan.c
> index e98e186..687af45 100644
> --- a/src/acpica/source/compiler/prscan.c
> +++ b/src/acpica/source/compiler/prscan.c
> @@ -726,7 +726,7 @@ PrDoDirective (
>          }
>
>          DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID
> -            "Start #include file %s\n", Gbl_CurrentLineNumber,
> +            "Start #include file \"%s\"\n", Gbl_CurrentLineNumber,
>              Token, Gbl_CurrentLineNumber);
>
>          PrOpenIncludeFile (Token);
> diff --git a/src/acpica/source/compiler/prutils.c b/src/acpica/source/compiler/prutils.c
> index a5fb46a..64dc9e8 100644
> --- a/src/acpica/source/compiler/prutils.c
> +++ b/src/acpica/source/compiler/prutils.c
> @@ -318,13 +318,11 @@ PrOpenIncludeFile (
>      ASL_INCLUDE_DIR         *NextDir;
>
>
> -    /*
> -     * start the actual include file on the next line
> -     */
> +    /* Start the actual include file on the next line */
> +
>      Gbl_CurrentLineOffset++;
>
>      /* Attempt to open the include file */
> -
>      /* If the file specifies an absolute path, just open it */
>
>      if ((Filename[0] == '/')  ||
> @@ -402,13 +400,10 @@ PrOpenIncludeWithPrefix (
>
>      /* Build the full pathname to the file */
>
> -    Pathname = ACPI_ALLOCATE (strlen (PrefixDir) + strlen (Filename) + 1);
> +    Pathname = FlMergePathnames (PrefixDir, Filename);
>
> -    strcpy (Pathname, PrefixDir);
> -    strcat (Pathname, Filename);
> -
> -    DbgPrint (ASL_PARSE_OUTPUT, "\n" PR_PREFIX_ID
> -        "Opening include file: path %s\n",
> +    DbgPrint (ASL_PARSE_OUTPUT, PR_PREFIX_ID
> +        "Include: Opening file - \"%s\"\n",
>          Gbl_CurrentLineNumber, Pathname);
>
>      /* Attempt to open the file, push if successful */
> diff --git a/src/acpica/source/components/debugger/dbcmds.c b/src/acpica/source/components/debugger/dbcmds.c
> index 4c34a79..27aa4cd 100644
> --- a/src/acpica/source/components/debugger/dbcmds.c
> +++ b/src/acpica/source/components/debugger/dbcmds.c
> @@ -326,12 +326,53 @@ AcpiDbDisplayTableInfo (
>      ACPI_STATUS             Status;
>
>
> +    /* Header */
> +
> +    AcpiOsPrintf ("Idx ID Status    Type            Sig  Address  Len   Header\n");
> +
>      /* Walk the entire root table list */
>
>      for (i = 0; i < AcpiGbl_RootTableList.CurrentTableCount; i++)
>      {
>          TableDesc = &AcpiGbl_RootTableList.Tables[i];
> -        AcpiOsPrintf ("%u ", i);
> +
> +        /* Index and Table ID */
> +
> +        AcpiOsPrintf ("%3u %.2u ", i, TableDesc->OwnerId);
> +
> +        /* Decode the table flags */
> +
> +        if (!(TableDesc->Flags & ACPI_TABLE_IS_LOADED))
> +        {
> +            AcpiOsPrintf ("NotLoaded ");
> +        }
> +        else
> +        {
> +            AcpiOsPrintf ("   Loaded ");
> +        }
> +
> +        switch (TableDesc->Flags & ACPI_TABLE_ORIGIN_MASK)
> +        {
> +        case ACPI_TABLE_ORIGIN_UNKNOWN:
> +            AcpiOsPrintf ("Unknown   ");
> +            break;
> +
> +        case ACPI_TABLE_ORIGIN_MAPPED:
> +            AcpiOsPrintf ("Mapped    ");
> +            break;
> +
> +        case ACPI_TABLE_ORIGIN_ALLOCATED:
> +            AcpiOsPrintf ("Allocated ");
> +            break;
> +
> +        case ACPI_TABLE_ORIGIN_OVERRIDE:
> +            AcpiOsPrintf ("Override  ");
> +            break;
> +
> +        default:
> +            AcpiOsPrintf ("INVALID   ");
> +            break;
> +        }
>
>          /* Make sure that the table is mapped */
>
> @@ -362,55 +403,45 @@ AcpiDbDisplayTableInfo (
>   *
>   * FUNCTION:    AcpiDbUnloadAcpiTable
>   *
> - * PARAMETERS:  TableArg        - Name of the table to be unloaded
> - *              InstanceArg     - Which instance of the table to unload (if
> - *                                there are multiple tables of the same type)
> + * PARAMETERS:  ObjectName          - Namespace pathname for an object that
> + *                                    is owned by the table to be unloaded
>   *
> - * RETURN:      Nonde
> + * RETURN:      None
>   *
> - * DESCRIPTION: Unload an ACPI table.
> - *              Instance is not implemented
> + * DESCRIPTION: Unload an ACPI table, via any namespace node that is owned
> + *              by the table.
>   *
>   ******************************************************************************/
>
>  void
>  AcpiDbUnloadAcpiTable (
> -    char                    *TableArg,
> -    char                    *InstanceArg)
> +    char                    *ObjectName)
>  {
> -/* TBD: Need to reimplement for new data structures */
> -
> -#if 0
> -    UINT32                  i;
> +    ACPI_NAMESPACE_NODE     *Node;
>      ACPI_STATUS             Status;
>
>
> -    /* Search all tables for the target type */
> +    /* Translate name to an Named object */
>
> -    for (i = 0; i < (ACPI_TABLE_ID_MAX+1); i++)
> +    Node = AcpiDbConvertToNode (ObjectName);
> +    if (!Node)
>      {
> -        if (!ACPI_STRNCMP (TableArg, AcpiGbl_TableData[i].Signature,
> -                AcpiGbl_TableData[i].SigLength))
> -        {
> -            /* Found the table, unload it */
> -
> -            Status = AcpiUnloadTable (i);
> -            if (ACPI_SUCCESS (Status))
> -            {
> -                AcpiOsPrintf ("[%s] unloaded and uninstalled\n", TableArg);
> -            }
> -            else
> -            {
> -                AcpiOsPrintf ("%s, while unloading [%s]\n",
> -                    AcpiFormatException (Status), TableArg);
> -            }
> -
> -            return;
> -        }
> +        AcpiOsPrintf ("Could not find [%s] in namespace\n",
> +            ObjectName);
> +        return;
>      }
>
> -    AcpiOsPrintf ("Unknown table type [%s]\n", TableArg);
> -#endif
> +    Status = AcpiUnloadParentTable (ACPI_CAST_PTR (ACPI_HANDLE, Node));
> +    if (ACPI_SUCCESS (Status))
> +    {
> +        AcpiOsPrintf ("Parent of [%s] (%p) unloaded and uninstalled\n",
> +            ObjectName, Node);
> +    }
> +    else
> +    {
> +        AcpiOsPrintf ("%s, while unloading parent table of [%s]\n",
> +            AcpiFormatException (Status), ObjectName);
> +    }
>  }
>
>
> @@ -445,25 +476,20 @@ AcpiDbSendNotify (
>          return;
>      }
>
> -    /* Decode Named object type */
> +    /* Dispatch the notify if legal */
>
> -    switch (Node->Type)
> +    if (AcpiEvIsNotifyObject (Node))
>      {
> -    case ACPI_TYPE_DEVICE:
> -    case ACPI_TYPE_THERMAL:
> -
> -         /* Send the notify */
> -
>          Status = AcpiEvQueueNotifyRequest (Node, Value);
>          if (ACPI_FAILURE (Status))
>          {
>              AcpiOsPrintf ("Could not queue notify\n");
>          }
> -        break;
> -
> -    default:
> -        AcpiOsPrintf ("Named object is not a device or a thermal object\n");
> -        break;
> +    }
> +    else
> +    {
> +        AcpiOsPrintf ("Named object [%4.4s] Type %s, must be Device/Thermal/Processor type\n",
> +            AcpiUtGetNodeName (Node), AcpiUtGetTypeName (Node->Type));
>      }
>  }
>
> diff --git a/src/acpica/source/components/debugger/dbdisply.c b/src/acpica/source/components/debugger/dbdisply.c
> index d8b3aa9..2e91c88 100644
> --- a/src/acpica/source/components/debugger/dbdisply.c
> +++ b/src/acpica/source/components/debugger/dbdisply.c
> @@ -179,8 +179,8 @@ typedef struct acpi_handler_info
>
>  static ACPI_HANDLER_INFO    AcpiGbl_HandlerList[] =
>  {
> -    {&AcpiGbl_SystemNotify.Handler,     "System Notifications"},
> -    {&AcpiGbl_DeviceNotify.Handler,     "Device Notifications"},
> +    {&AcpiGbl_GlobalNotify[0].Handler,  "System Notifications"},
> +    {&AcpiGbl_GlobalNotify[1].Handler,  "Device Notifications"},
>      {&AcpiGbl_TableHandler,             "ACPI Table Events"},
>      {&AcpiGbl_ExceptionHandler,         "Control Method Exceptions"},
>      {&AcpiGbl_InterfaceHandler,         "OSI Invocations"}
> @@ -864,10 +864,12 @@ AcpiDbDisplayGpes (
>      ACPI_GPE_EVENT_INFO     *GpeEventInfo;
>      ACPI_GPE_REGISTER_INFO  *GpeRegisterInfo;
>      char                    *GpeType;
> +    ACPI_GPE_NOTIFY_INFO    *Notify;
>      UINT32                  GpeIndex;
>      UINT32                  Block = 0;
>      UINT32                  i;
>      UINT32                  j;
> +    UINT32                  Count;
>      char                    Buffer[80];
>      ACPI_BUFFER             RetBuf;
>      ACPI_STATUS             Status;
> @@ -988,7 +990,14 @@ AcpiDbDisplayGpes (
>                          AcpiOsPrintf ("Handler");
>                          break;
>                      case ACPI_GPE_DISPATCH_NOTIFY:
> -                        AcpiOsPrintf ("Notify");
> +                        Count = 0;
> +                        Notify = GpeEventInfo->Dispatch.NotifyList;
> +                        while (Notify)
> +                        {
> +                            Count++;
> +                            Notify = Notify->Next;
> +                        }
> +                        AcpiOsPrintf ("Implicit Notify on %u devices", Count);
>                          break;
>                      default:
>                          AcpiOsPrintf ("UNKNOWN: %X",
> diff --git a/src/acpica/source/components/debugger/dbexec.c b/src/acpica/source/components/debugger/dbexec.c
> index eb85998..174f77a 100644
> --- a/src/acpica/source/components/debugger/dbexec.c
> +++ b/src/acpica/source/components/debugger/dbexec.c
> @@ -944,8 +944,8 @@ AcpiDbMethodThread (
>
>      if (Info->InitArgs)
>      {
> -        AcpiDbUInt32ToHexString (Info->NumCreated, Info->IndexOfThreadStr);
> -        AcpiDbUInt32ToHexString ((UINT32) AcpiOsGetThreadId (), Info->IdOfThreadStr);
> +        AcpiDbUint32ToHexString (Info->NumCreated, Info->IndexOfThreadStr);
> +        AcpiDbUint32ToHexString ((UINT32) AcpiOsGetThreadId (), Info->IdOfThreadStr);
>      }
>
>      if (Info->Threads && (Info->NumCreated < Info->NumThreads))
> @@ -1135,7 +1135,7 @@ AcpiDbCreateExecutionThreads (
>      AcpiGbl_DbMethodInfo.ArgTypes[1] = ACPI_TYPE_INTEGER;
>      AcpiGbl_DbMethodInfo.ArgTypes[2] = ACPI_TYPE_INTEGER;
>
> -    AcpiDbUInt32ToHexString (NumThreads, AcpiGbl_DbMethodInfo.NumThreadsStr);
> +    AcpiDbUint32ToHexString (NumThreads, AcpiGbl_DbMethodInfo.NumThreadsStr);
>
>      AcpiDbExecuteSetup (&AcpiGbl_DbMethodInfo);
>
> diff --git a/src/acpica/source/components/debugger/dbfileio.c b/src/acpica/source/components/debugger/dbfileio.c
> index 495d609..8e36c87 100644
> --- a/src/acpica/source/components/debugger/dbfileio.c
> +++ b/src/acpica/source/components/debugger/dbfileio.c
> @@ -123,6 +123,10 @@
>  #include "actables.h"
>  #endif
>
> +#ifdef ACPI_ASL_COMPILER
> +#include "aslcompiler.h"
> +#endif
> +
>  #if (defined ACPI_DEBUGGER || defined ACPI_DISASSEMBLER)
>
>  #define _COMPONENT          ACPI_CA_DEBUGGER
> @@ -381,6 +385,15 @@ AcpiDbReadTable (
>              AcpiOsPrintf (
>                  "TableHeader length [0x%X] greater than the input file size [0x%X]\n",
>                  TableHeader.Length, FileSize);
> +
> +#ifdef ACPI_ASL_COMPILER
> +            Status = FlCheckForAscii (fp, NULL, FALSE);
> +            if (ACPI_SUCCESS (Status))
> +            {
> +                AcpiOsPrintf ("File appears to be ASCII only, must be binary\n",
> +                    TableHeader.Length, FileSize);
> +            }
> +#endif
>              return (AE_BAD_HEADER);
>          }
>
> diff --git a/src/acpica/source/components/debugger/dbinput.c b/src/acpica/source/components/debugger/dbinput.c
> index 3e61bdb..1b2ee1d 100644
> --- a/src/acpica/source/components/debugger/dbinput.c
> +++ b/src/acpica/source/components/debugger/dbinput.c
> @@ -322,7 +322,7 @@ AcpiDbDisplayHelp (
>      AcpiOsPrintf ("     Stack                            Display CPU stack usage\n");
>      AcpiOsPrintf ("     Tables                           Info about current ACPI table(s)\n");
>      AcpiOsPrintf ("  Tables                              Display info about loaded ACPI tables\n");
> -    AcpiOsPrintf ("  Unload <TableSig> [Instance]        Unload an ACPI table\n");
> +    AcpiOsPrintf ("  Unload <Namepath>                   Unload an ACPI table via namespace object\n");
>      AcpiOsPrintf ("  ! <CommandNumber>                   Execute command from history buffer\n");
>      AcpiOsPrintf ("  !!                                  Execute last command again\n");
>
> @@ -966,7 +966,7 @@ AcpiDbCommandDispatch (
>          break;
>
>      case CMD_UNLOAD:
> -        AcpiDbUnloadAcpiTable (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]);
> +        AcpiDbUnloadAcpiTable (AcpiGbl_DbArgs[1]);
>          break;
>
>      case CMD_EXIT:
> diff --git a/src/acpica/source/components/debugger/dbstats.c b/src/acpica/source/components/debugger/dbstats.c
> index 8a6e713..e309668 100644
> --- a/src/acpica/source/components/debugger/dbstats.c
> +++ b/src/acpica/source/components/debugger/dbstats.c
> @@ -299,8 +299,8 @@ AcpiDbEnumerateObject (
>
>      case ACPI_TYPE_DEVICE:
>
> -        AcpiDbEnumerateObject (ObjDesc->Device.SystemNotify);
> -        AcpiDbEnumerateObject (ObjDesc->Device.DeviceNotify);
> +        AcpiDbEnumerateObject (ObjDesc->Device.NotifyList[0]);
> +        AcpiDbEnumerateObject (ObjDesc->Device.NotifyList[1]);
>          AcpiDbEnumerateObject (ObjDesc->Device.Handler);
>          break;
>
> @@ -320,21 +320,21 @@ AcpiDbEnumerateObject (
>
>      case ACPI_TYPE_POWER:
>
> -        AcpiDbEnumerateObject (ObjDesc->PowerResource.SystemNotify);
> -        AcpiDbEnumerateObject (ObjDesc->PowerResource.DeviceNotify);
> +        AcpiDbEnumerateObject (ObjDesc->PowerResource.NotifyList[0]);
> +        AcpiDbEnumerateObject (ObjDesc->PowerResource.NotifyList[1]);
>          break;
>
>      case ACPI_TYPE_PROCESSOR:
>
> -        AcpiDbEnumerateObject (ObjDesc->Processor.SystemNotify);
> -        AcpiDbEnumerateObject (ObjDesc->Processor.DeviceNotify);
> +        AcpiDbEnumerateObject (ObjDesc->Processor.NotifyList[0]);
> +        AcpiDbEnumerateObject (ObjDesc->Processor.NotifyList[1]);
>          AcpiDbEnumerateObject (ObjDesc->Processor.Handler);
>          break;
>
>      case ACPI_TYPE_THERMAL:
>
> -        AcpiDbEnumerateObject (ObjDesc->ThermalZone.SystemNotify);
> -        AcpiDbEnumerateObject (ObjDesc->ThermalZone.DeviceNotify);
> +        AcpiDbEnumerateObject (ObjDesc->ThermalZone.NotifyList[0]);
> +        AcpiDbEnumerateObject (ObjDesc->ThermalZone.NotifyList[1]);
>          AcpiDbEnumerateObject (ObjDesc->ThermalZone.Handler);
>          break;
>
> @@ -594,6 +594,18 @@ AcpiDbDisplayStatistics (
>          AcpiOsPrintf ("NamespaceNode    %3d\n", sizeof (ACPI_NAMESPACE_NODE));
>          AcpiOsPrintf ("AcpiObject       %3d\n", sizeof (ACPI_OBJECT));
>
> +        AcpiOsPrintf ("\n");
> +
> +        AcpiOsPrintf ("Generic State    %3d\n", sizeof (ACPI_GENERIC_STATE));
> +        AcpiOsPrintf ("Common State     %3d\n", sizeof (ACPI_COMMON_STATE));
> +        AcpiOsPrintf ("Control State    %3d\n", sizeof (ACPI_CONTROL_STATE));
> +        AcpiOsPrintf ("Update State     %3d\n", sizeof (ACPI_UPDATE_STATE));
> +        AcpiOsPrintf ("Scope State      %3d\n", sizeof (ACPI_SCOPE_STATE));
> +        AcpiOsPrintf ("Parse Scope      %3d\n", sizeof (ACPI_PSCOPE_STATE));
> +        AcpiOsPrintf ("Package State    %3d\n", sizeof (ACPI_PKG_STATE));
> +        AcpiOsPrintf ("Thread State     %3d\n", sizeof (ACPI_THREAD_STATE));
> +        AcpiOsPrintf ("Result Values    %3d\n", sizeof (ACPI_RESULT_VALUES));
> +        AcpiOsPrintf ("Notify Info      %3d\n", sizeof (ACPI_NOTIFY_INFO));
>          break;
>
>
> diff --git a/src/acpica/source/components/debugger/dbutils.c b/src/acpica/source/components/debugger/dbutils.c
> index fd318d9..f913c64 100644
> --- a/src/acpica/source/components/debugger/dbutils.c
> +++ b/src/acpica/source/components/debugger/dbutils.c
> @@ -432,7 +432,7 @@ AcpiDbLocalNsLookup (
>
>  /*******************************************************************************
>   *
> - * FUNCTION:    AcpiDbUInt32ToHexString
> + * FUNCTION:    AcpiDbUint32ToHexString
>   *
>   * PARAMETERS:  Value           - The value to be converted to string
>   *              Buffer          - Buffer for result (not less than 11 bytes)
> @@ -447,7 +447,7 @@ AcpiDbLocalNsLookup (
>   ******************************************************************************/
>
>  void
> -AcpiDbUInt32ToHexString (
> +AcpiDbUint32ToHexString (
>      UINT32                  Value,
>      char                    *Buffer)
>  {
> diff --git a/src/acpica/source/components/disassembler/dmopcode.c b/src/acpica/source/components/disassembler/dmopcode.c
> index ed457ed..252b1b8 100644
> --- a/src/acpica/source/components/disassembler/dmopcode.c
> +++ b/src/acpica/source/components/disassembler/dmopcode.c
> @@ -118,6 +118,7 @@
>  #include "acparser.h"
>  #include "amlcode.h"
>  #include "acdisasm.h"
> +#include "acnamesp.h"
>
>  #ifdef ACPI_DISASSEMBLER
>
> @@ -133,6 +134,218 @@ AcpiDmMatchKeyword (
>
>  /*******************************************************************************
>   *
> + * FUNCTION:    AcpiDmPredefinedDescription
> + *
> + * PARAMETERS:  Op              - Name() parse object
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Emit a description comment for a predefined ACPI name.
> + *              Used for iASL compiler only.
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmPredefinedDescription (
> +    ACPI_PARSE_OBJECT       *Op)
> +{
> +#ifdef ACPI_ASL_COMPILER
> +    const AH_PREDEFINED_NAME    *Info;
> +    char                        *NameString;
> +    int                         LastCharIsDigit;
> +    int                         LastCharsAreHex;
> +
> +
> +    if (!Op)
> +    {
> +        return;
> +    }
> +
> +    /* Ensure that the comment field is emitted only once */
> +
> +    if (Op->Common.DisasmFlags & ACPI_PARSEOP_PREDEF_CHECKED)
> +    {
> +        return;
> +    }
> +    Op->Common.DisasmFlags |= ACPI_PARSEOP_PREDEF_CHECKED;
> +
> +    /* Predefined name must start with an underscore */
> +
> +    NameString = ACPI_CAST_PTR (char, &Op->Named.Name);
> +    if (NameString[0] != '_')
> +    {
> +        return;
> +    }
> +
> +    /*
> +     * Check for the special ACPI names:
> +     * _ACd, _ALd, _EJd, _Exx, _Lxx, _Qxx, _Wxx, _T_a
> +     * (where d=decimal_digit, x=hex_digit, a=anything)
> +     *
> +     * Convert these to the generic name for table lookup.
> +     * Note: NameString is guaranteed to be upper case here.
> +     */
> +    LastCharIsDigit =
> +        (ACPI_IS_DIGIT (NameString[3]));    /* d */
> +    LastCharsAreHex =
> +        (ACPI_IS_XDIGIT (NameString[2]) &&  /* xx */
> +         ACPI_IS_XDIGIT (NameString[3]));
> +
> +    switch (NameString[1])
> +    {
> +    case 'A':
> +        if ((NameString[2] == 'C') && (LastCharIsDigit))
> +        {
> +            NameString = "_ACx";
> +        }
> +        else if ((NameString[2] == 'L') && (LastCharIsDigit))
> +        {
> +            NameString = "_ALx";
> +        }
> +        break;
> +
> +    case 'E':
> +        if ((NameString[2] == 'J') && (LastCharIsDigit))
> +        {
> +            NameString = "_EJx";
> +        }
> +        else if (LastCharsAreHex)
> +        {
> +            NameString = "_Exx";
> +        }
> +        break;
> +
> +    case 'L':
> +        if (LastCharsAreHex)
> +        {
> +            NameString = "_Lxx";
> +        }
> +        break;
> +
> +    case 'Q':
> +        if (LastCharsAreHex)
> +        {
> +            NameString = "_Qxx";
> +        }
> +        break;
> +
> +    case 'T':
> +        if (NameString[2] == '_')
> +        {
> +            NameString = "_T_x";
> +        }
> +        break;
> +
> +    case 'W':
> +        if (LastCharsAreHex)
> +        {
> +            NameString = "_Wxx";
> +        }
> +        break;
> +
> +    default:
> +        break;
> +    }
> +
> +    /* Match the name in the info table */
> +
> +    for (Info = AslPredefinedInfo; Info->Name; Info++)
> +    {
> +        if (ACPI_COMPARE_NAME (NameString, Info->Name))
> +        {
> +            AcpiOsPrintf ("  // %4.4s: %s",
> +                NameString, ACPI_CAST_PTR (char, Info->Description));
> +            return;
> +        }
> +    }
> +
> +#endif
> +    return;
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiDmFieldPredefinedDescription
> + *
> + * PARAMETERS:  Op              - Parse object
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Emit a description comment for a resource descriptor tag
> + *              (which is a predefined ACPI name.) Used for iASL compiler only.
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmFieldPredefinedDescription (
> +    ACPI_PARSE_OBJECT       *Op)
> +{
> +#ifdef ACPI_ASL_COMPILER
> +    ACPI_PARSE_OBJECT       *IndexOp;
> +    char                    *Tag;
> +    const ACPI_OPCODE_INFO  *OpInfo;
> +    const AH_PREDEFINED_NAME *Info;
> +
> +
> +    if (!Op)
> +    {
> +        return;
> +    }
> +
> +    /* Ensure that the comment field is emitted only once */
> +
> +    if (Op->Common.DisasmFlags & ACPI_PARSEOP_PREDEF_CHECKED)
> +    {
> +        return;
> +    }
> +    Op->Common.DisasmFlags |= ACPI_PARSEOP_PREDEF_CHECKED;
> +
> +    /*
> +     * Op must be one of the Create* operators: CreateField, CreateBitField,
> +     * CreateByteField, CreateWordField, CreateDwordField, CreateQwordField
> +     */
> +    OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
> +    if (!(OpInfo->Flags & AML_CREATE))
> +    {
> +        return;
> +    }
> +
> +    /* Second argument is the Index argument */
> +
> +    IndexOp = Op->Common.Value.Arg;
> +    IndexOp = IndexOp->Common.Next;
> +
> +    /* Index argument must be a namepath */
> +
> +    if (IndexOp->Common.AmlOpcode != AML_INT_NAMEPATH_OP)
> +    {
> +        return;
> +    }
> +
> +    /* Major cheat: We previously put the Tag ptr in the Node field */
> +
> +    Tag = ACPI_CAST_PTR (char, IndexOp->Common.Node);
> +
> +    /* Match the name in the info table */
> +
> +    for (Info = AslPredefinedInfo; Info->Name; Info++)
> +    {
> +        if (ACPI_COMPARE_NAME (Tag, Info->Name))
> +        {
> +            AcpiOsPrintf ("  // %4.4s: %s", Tag,
> +                ACPI_CAST_PTR (char, Info->Description));
> +            return;
> +        }
> +    }
> +
> +#endif
> +    return;
> +}
> +
> +
> +/*******************************************************************************
> + *
>   * FUNCTION:    AcpiDmMethodFlags
>   *
>   * PARAMETERS:  Op              - Method Object to be examined
> diff --git a/src/acpica/source/components/disassembler/dmwalk.c b/src/acpica/source/components/disassembler/dmwalk.c
> index 2bec308..dd655d8 100644
> --- a/src/acpica/source/components/disassembler/dmwalk.c
> +++ b/src/acpica/source/components/disassembler/dmwalk.c
> @@ -525,7 +525,7 @@ AcpiDmDescendingOp (
>       * keep track of the current column.
>       */
>      Info->Count++;
> -    if (Info->Count /*+Info->LastLevel*/ > 10)
> +    if (Info->Count /* +Info->LastLevel */ > 10)
>      {
>          Info->Count = 0;
>          AcpiOsPrintf ("\n");
> @@ -605,6 +605,10 @@ AcpiDmDescendingOp (
>
>                  AcpiDmMethodFlags (Op);
>                  AcpiOsPrintf (")");
> +
> +                /* Emit description comment for Method() with a predefined ACPI name */
> +
> +                AcpiDmPredefinedDescription (Op);
>                  break;
>
>
> @@ -675,7 +679,8 @@ AcpiDmDescendingOp (
>
>              default:
>
> -                AcpiOsPrintf ("*** Unhandled named opcode %X\n", Op->Common.AmlOpcode);
> +                AcpiOsPrintf ("*** Unhandled named opcode %X\n",
> +                    Op->Common.AmlOpcode);
>                  break;
>              }
>          }
> @@ -716,7 +721,8 @@ AcpiDmDescendingOp (
>                  NextOp = NextOp->Common.Next;
>
>                  Info->Flags = ACPI_PARSEOP_PARAMLIST;
> -                AcpiDmWalkParseTree (NextOp, AcpiDmDescendingOp, AcpiDmAscendingOp, Info);
> +                AcpiDmWalkParseTree (NextOp, AcpiDmDescendingOp,
> +                    AcpiDmAscendingOp, Info);
>                  Info->Flags = 0;
>                  Info->Level = Level;
>
> @@ -758,12 +764,18 @@ AcpiDmDescendingOp (
>              if (Op->Common.DisasmOpcode == ACPI_DASM_RESOURCE)
>              {
>                  /*
> -                 * We have a resource list.  Don't need to output
> -                 * the buffer size Op.  Open up a new block
> +                 * We have a resource list. Don't need to output
> +                 * the buffer size Op. Open up a new block
>                   */
>                  NextOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
>                  NextOp = NextOp->Common.Next;
> -                AcpiOsPrintf (")\n");
> +                AcpiOsPrintf (")");
> +
> +                /* Emit description comment for Name() with a predefined ACPI name */
> +
> +                AcpiDmPredefinedDescription (Op->Asl.Parent);
> +
> +                AcpiOsPrintf ("\n");
>                  AcpiDmIndent (Info->Level);
>                  AcpiOsPrintf ("{\n");
>                  return (AE_OK);
> @@ -791,7 +803,7 @@ AcpiDmDescendingOp (
>
>          case AML_PACKAGE_OP:
>
> -            /* The next op is the size or predicate parameter */
> +            /* The next op is the size parameter */
>
>              NextOp = AcpiPsGetDepthNext (NULL, Op);
>              if (NextOp)
> @@ -844,6 +856,7 @@ AcpiDmAscendingOp (
>      void                    *Context)
>  {
>      ACPI_OP_WALK_INFO       *Info = Context;
> +    ACPI_PARSE_OBJECT       *ParentOp;
>
>
>      if (Op->Common.DisasmFlags & ACPI_PARSEOP_IGNORE)
> @@ -869,6 +882,19 @@ AcpiDmAscendingOp (
>
>          AcpiOsPrintf (")");
>
> +        if (Op->Common.AmlOpcode == AML_NAME_OP)
> +        {
> +            /* Emit description comment for Name() with a predefined ACPI name */
> +
> +            AcpiDmPredefinedDescription (Op);
> +        }
> +        else
> +        {
> +            /* For Create* operators, attempt to emit resource tag description */
> +
> +            AcpiDmFieldPredefinedDescription (Op);
> +        }
> +
>          /* Could be a nested operator, check if comma required */
>
>          if (!AcpiDmCommaIfListMember (Op))
> @@ -983,7 +1009,20 @@ AcpiDmAscendingOp (
>           */
>          if (Op->Common.Next)
>          {
> -            AcpiOsPrintf (")\n");
> +            AcpiOsPrintf (")");
> +
> +            /* Emit description comment for Name() with a predefined ACPI name */
> +
> +            ParentOp = Op->Common.Parent;
> +            if (ParentOp)
> +            {
> +                ParentOp = ParentOp->Common.Parent;
> +                if (ParentOp && ParentOp->Asl.AmlOpcode == AML_NAME_OP)
> +                {
> +                    AcpiDmPredefinedDescription (ParentOp);
> +                }
> +            }
> +            AcpiOsPrintf ("\n");
>              AcpiDmIndent (Level - 1);
>              AcpiOsPrintf ("{\n");
>          }
> diff --git a/src/acpica/source/components/dispatcher/dsfield.c b/src/acpica/source/components/dispatcher/dsfield.c
> index 526d478..3047c5f 100644
> --- a/src/acpica/source/components/dispatcher/dsfield.c
> +++ b/src/acpica/source/components/dispatcher/dsfield.c
> @@ -129,6 +129,18 @@
>
>  /* Local prototypes */
>
> +#ifdef ACPI_ASL_COMPILER
> +#include "acdisasm.h"
> +
> +static ACPI_STATUS
> +AcpiDsCreateExternalRegion (
> +    ACPI_STATUS             LookupStatus,
> +    ACPI_PARSE_OBJECT       *Op,
> +    char                    *Path,
> +    ACPI_WALK_STATE         *WalkState,
> +    ACPI_NAMESPACE_NODE     **Node);
> +#endif
> +
>  static ACPI_STATUS
>  AcpiDsGetFieldNames (
>      ACPI_CREATE_FIELD_INFO  *Info,
> @@ -136,6 +148,69 @@ AcpiDsGetFieldNames (
>      ACPI_PARSE_OBJECT       *Arg);
>
>
> +#ifdef ACPI_ASL_COMPILER
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiDsCreateExternalRegion (iASL Disassembler only)
> + *
> + * PARAMETERS:  LookupStatus    - Status from NsLookup operation
> + *              Op              - Op containing the Field definition and args
> + *              Path            - Pathname of the region
> + *  `           WalkState       - Current method state
> + *              Node            - Where the new region node is returned
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Add region to the external list if NOT_FOUND. Create a new
> + *              region node/object.
> + *
> + ******************************************************************************/
> +
> +static ACPI_STATUS
> +AcpiDsCreateExternalRegion (
> +    ACPI_STATUS             LookupStatus,
> +    ACPI_PARSE_OBJECT       *Op,
> +    char                    *Path,
> +    ACPI_WALK_STATE         *WalkState,
> +    ACPI_NAMESPACE_NODE     **Node)
> +{
> +    ACPI_STATUS             Status;
> +    ACPI_OPERAND_OBJECT     *ObjDesc;
> +
> +
> +    if (LookupStatus != AE_NOT_FOUND)
> +    {
> +        return (LookupStatus);
> +    }
> +
> +    /*
> +     * Table disassembly:
> +     * OperationRegion not found. Generate an External for it, and
> +     * insert the name into the namespace.
> +     */
> +    AcpiDmAddToExternalList (Op, Path, ACPI_TYPE_REGION, 0);
> +    Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ACPI_TYPE_REGION,
> +       ACPI_IMODE_LOAD_PASS1, ACPI_NS_SEARCH_PARENT, WalkState, Node);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return (Status);
> +    }
> +
> +    /* Must create and install a region object for the new node */
> +
> +    ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_REGION);
> +    if (!ObjDesc)
> +    {
> +        return (AE_NO_MEMORY);
> +    }
> +
> +    ObjDesc->Region.Node = *Node;
> +    Status = AcpiNsAttachObject (*Node, ObjDesc, ACPI_TYPE_REGION);
> +    return (Status);
> +}
> +#endif
> +
> +
>  /*******************************************************************************
>   *
>   * FUNCTION:    AcpiDsCreateBufferField
> @@ -149,8 +224,8 @@ AcpiDsGetFieldNames (
>   *              CreateBitFieldOp,
>   *              CreateByteFieldOp,
>   *              CreateWordFieldOp,
> - *              CreateDWordFieldOp,
> - *              CreateQWordFieldOp,
> + *              CreateDwordFieldOp,
> + *              CreateQwordFieldOp,
>   *              CreateFieldOp       (all of which define a field in a buffer)
>   *
>   ******************************************************************************/
> @@ -510,11 +585,16 @@ AcpiDsCreateField (
>      /* First arg is the name of the parent OpRegion (must already exist) */
>
>      Arg = Op->Common.Value.Arg;
> +
>      if (!RegionNode)
>      {
>          Status = AcpiNsLookup (WalkState->ScopeInfo, Arg->Common.Value.Name,
>                          ACPI_TYPE_REGION, ACPI_IMODE_EXECUTE,
>                          ACPI_NS_SEARCH_PARENT, WalkState, &RegionNode);
> +#ifdef ACPI_ASL_COMPILER
> +        Status = AcpiDsCreateExternalRegion (Status, Arg,
> +            Arg->Common.Value.Name, WalkState, &RegionNode);
> +#endif
>          if (ACPI_FAILURE (Status))
>          {
>              ACPI_ERROR_NAMESPACE (Arg->Common.Value.Name, Status);
> @@ -700,6 +780,10 @@ AcpiDsCreateBankField (
>          Status = AcpiNsLookup (WalkState->ScopeInfo, Arg->Common.Value.Name,
>                          ACPI_TYPE_REGION, ACPI_IMODE_EXECUTE,
>                          ACPI_NS_SEARCH_PARENT, WalkState, &RegionNode);
> +#ifdef ACPI_ASL_COMPILER
> +        Status = AcpiDsCreateExternalRegion (Status, Arg,
> +            Arg->Common.Value.Name, WalkState, &RegionNode);
> +#endif
>          if (ACPI_FAILURE (Status))
>          {
>              ACPI_ERROR_NAMESPACE (Arg->Common.Value.Name, Status);
> diff --git a/src/acpica/source/components/dispatcher/dsopcode.c b/src/acpica/source/components/dispatcher/dsopcode.c
> index 5da09bd..d6ddbfa 100644
> --- a/src/acpica/source/components/dispatcher/dsopcode.c
> +++ b/src/acpica/source/components/dispatcher/dsopcode.c
> @@ -595,18 +595,18 @@ AcpiDsEvalTableRegionOperands (
>
>
>      /*
> -     * This is where we evaluate the SignatureString and OemIDString
> -     * and OemTableIDString of the DataTableRegion declaration
> +     * This is where we evaluate the Signature string, OemId string,
> +     * and OemTableId string of the Data Table Region declaration
>       */
>      Node =  Op->Common.Node;
>
> -    /* NextOp points to SignatureString op */
> +    /* NextOp points to Signature string op */
>
>      NextOp = Op->Common.Value.Arg;
>
>      /*
> -     * Evaluate/create the SignatureString and OemIDString
> -     * and OemTableIDString operands
> +     * Evaluate/create the Signature string, OemId string,
> +     * and OemTableId string operands
>       */
>      Status = AcpiDsCreateOperands (WalkState, NextOp);
>      if (ACPI_FAILURE (Status))
> @@ -615,8 +615,8 @@ AcpiDsEvalTableRegionOperands (
>      }
>
>      /*
> -     * Resolve the SignatureString and OemIDString
> -     * and OemTableIDString operands
> +     * Resolve the Signature string, OemId string,
> +     * and OemTableId string operands
>       */
>      Status = AcpiExResolveOperands (Op->Common.AmlOpcode,
>                  ACPI_WALK_OPERANDS, WalkState);
> diff --git a/src/acpica/source/components/dispatcher/dswload.c b/src/acpica/source/components/dispatcher/dswload.c
> index 1f689d6..7a4a84f 100644
> --- a/src/acpica/source/components/dispatcher/dswload.c
> +++ b/src/acpica/source/components/dispatcher/dswload.c
> @@ -313,6 +313,20 @@ AcpiDsLoad1BeginOp (
>              WalkState->ScopeInfo->Common.Value = ACPI_TYPE_ANY;
>              break;
>
> +        case ACPI_TYPE_METHOD:
> +
> +            /*
> +             * Allow scope change to root during execution of module-level
> +             * code. Root is typed METHOD during this time.
> +             */
> +            if ((Node == AcpiGbl_RootNode) &&
> +                (WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL))
> +            {
> +                break;
> +            }
> +
> +            /*lint -fallthrough */
> +
>          default:
>
>              /* All other types are an error */
> diff --git a/src/acpica/source/components/dispatcher/dswload2.c b/src/acpica/source/components/dispatcher/dswload2.c
> index 85a86ec..139ff95 100644
> --- a/src/acpica/source/components/dispatcher/dswload2.c
> +++ b/src/acpica/source/components/dispatcher/dswload2.c
> @@ -315,6 +315,20 @@ AcpiDsLoad2BeginOp (
>              WalkState->ScopeInfo->Common.Value = ACPI_TYPE_ANY;
>              break;
>
> +        case ACPI_TYPE_METHOD:
> +
> +            /*
> +             * Allow scope change to root during execution of module-level
> +             * code. Root is typed METHOD during this time.
> +             */
> +            if ((Node == AcpiGbl_RootNode) &&
> +                (WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL))
> +            {
> +                break;
> +            }
> +
> +            /*lint -fallthrough */
> +
>          default:
>
>              /* All other types are an error */
> diff --git a/src/acpica/source/components/events/evgpe.c b/src/acpica/source/components/events/evgpe.c
> index de32275..bb72a6e 100644
> --- a/src/acpica/source/components/events/evgpe.c
> +++ b/src/acpica/source/components/events/evgpe.c
> @@ -590,6 +590,7 @@ AcpiEvAsynchExecuteGpeMethod (
>      ACPI_STATUS             Status;
>      ACPI_GPE_EVENT_INFO     *LocalGpeEventInfo;
>      ACPI_EVALUATE_INFO      *Info;
> +    ACPI_GPE_NOTIFY_INFO    *Notify;
>
>
>      ACPI_FUNCTION_TRACE (EvAsynchExecuteGpeMethod);
> @@ -645,10 +646,18 @@ AcpiEvAsynchExecuteGpeMethod (
>           * completes. The notify handlers are NOT invoked synchronously
>           * from this thread -- because handlers may in turn run other
>           * control methods.
> +         *
> +         * June 2012: Expand implicit notify mechanism to support
> +         * notifies on multiple device objects.
>           */
> -        Status = AcpiEvQueueNotifyRequest (
> -                    LocalGpeEventInfo->Dispatch.DeviceNode,
> -                    ACPI_NOTIFY_DEVICE_WAKE);
> +        Notify = LocalGpeEventInfo->Dispatch.NotifyList;
> +        while (ACPI_SUCCESS (Status) && Notify)
> +        {
> +            Status = AcpiEvQueueNotifyRequest (Notify->DeviceNode,
> +                        ACPI_NOTIFY_DEVICE_WAKE);
> +
> +            Notify = Notify->Next;
> +        }
>          break;
>
>      case ACPI_GPE_DISPATCH_METHOD:
> diff --git a/src/acpica/source/components/events/evgpeutil.c b/src/acpica/source/components/events/evgpeutil.c
> index a5ad320..38c7928 100644
> --- a/src/acpica/source/components/events/evgpeutil.c
> +++ b/src/acpica/source/components/events/evgpeutil.c
> @@ -463,6 +463,8 @@ AcpiEvDeleteGpeHandlers (
>      void                    *Context)
>  {
>      ACPI_GPE_EVENT_INFO     *GpeEventInfo;
> +    ACPI_GPE_NOTIFY_INFO    *Notify;
> +    ACPI_GPE_NOTIFY_INFO    *Next;
>      UINT32                  i;
>      UINT32                  j;
>
> @@ -484,10 +486,27 @@ AcpiEvDeleteGpeHandlers (
>              if ((GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK) ==
>                      ACPI_GPE_DISPATCH_HANDLER)
>              {
> +                /* Delete an installed handler block */
> +
>                  ACPI_FREE (GpeEventInfo->Dispatch.Handler);
>                  GpeEventInfo->Dispatch.Handler = NULL;
>                  GpeEventInfo->Flags &= ~ACPI_GPE_DISPATCH_MASK;
>              }
> +            else if ((GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK) ==
> +                    ACPI_GPE_DISPATCH_NOTIFY)
> +            {
> +                /* Delete the implicit notification device list */
> +
> +                Notify = GpeEventInfo->Dispatch.NotifyList;
> +                while (Notify)
> +                {
> +                    Next = Notify->Next;
> +                    ACPI_FREE (Notify);
> +                    Notify = Next;
> +                }
> +                GpeEventInfo->Dispatch.NotifyList = NULL;
> +                GpeEventInfo->Flags &= ~ACPI_GPE_DISPATCH_MASK;
> +            }
>          }
>      }
>
> diff --git a/src/acpica/source/components/events/evmisc.c b/src/acpica/source/components/events/evmisc.c
> index 7369daa..ae3cecd 100644
> --- a/src/acpica/source/components/events/evmisc.c
> +++ b/src/acpica/source/components/events/evmisc.c
> @@ -183,107 +183,82 @@ AcpiEvQueueNotifyRequest (
>      UINT32                  NotifyValue)
>  {
>      ACPI_OPERAND_OBJECT     *ObjDesc;
> -    ACPI_OPERAND_OBJECT     *HandlerObj = NULL;
> -    ACPI_GENERIC_STATE      *NotifyInfo;
> +    ACPI_OPERAND_OBJECT     *HandlerListHead = NULL;
> +    ACPI_GENERIC_STATE      *Info;
> +    UINT8                   HandlerListId = 0;
>      ACPI_STATUS             Status = AE_OK;
>
>
>      ACPI_FUNCTION_NAME (EvQueueNotifyRequest);
>
>
> -    /*
> -     * For value 0x03 (Ejection Request), may need to run a device method.
> -     * For value 0x02 (Device Wake), if _PRW exists, may need to run
> -     *   the _PS0 method.
> -     * For value 0x80 (Status Change) on the power button or sleep button,
> -     *   initiate soft-off or sleep operation.
> -     *
> -     * For all cases, simply dispatch the notify to the handler.
> -     */
> -    ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
> -        "Dispatching Notify on [%4.4s] (%s) Value 0x%2.2X (%s) Node %p\n",
> -        AcpiUtGetNodeName (Node), AcpiUtGetTypeName (Node->Type),
> -        NotifyValue, AcpiUtGetNotifyName (NotifyValue), Node));
> +    /* Are Notifies allowed on this object? */
>
> -    /* Get the notify object attached to the NS Node */
> -
> -    ObjDesc = AcpiNsGetAttachedObject (Node);
> -    if (ObjDesc)
> +    if (!AcpiEvIsNotifyObject (Node))
>      {
> -        /* We have the notify object, Get the correct handler */
> -
> -        switch (Node->Type)
> -        {
> -        /* Notify is allowed only on these types */
> +        return (AE_TYPE);
> +    }
>
> -        case ACPI_TYPE_DEVICE:
> -        case ACPI_TYPE_THERMAL:
> -        case ACPI_TYPE_PROCESSOR:
> +    /* Get the correct notify list type (System or Device) */
>
> -            if (NotifyValue <= ACPI_MAX_SYS_NOTIFY)
> -            {
> -                HandlerObj = ObjDesc->CommonNotify.SystemNotify;
> -            }
> -            else
> -            {
> -                HandlerObj = ObjDesc->CommonNotify.DeviceNotify;
> -            }
> -            break;
> +    if (NotifyValue <= ACPI_MAX_SYS_NOTIFY)
> +    {
> +        HandlerListId = ACPI_SYSTEM_HANDLER_LIST;
> +    }
> +    else
> +    {
> +        HandlerListId = ACPI_DEVICE_HANDLER_LIST;
> +    }
>
> -        default:
> +    /* Get the notify object attached to the namespace Node */
>
> -            /* All other types are not supported */
> +    ObjDesc = AcpiNsGetAttachedObject (Node);
> +    if (ObjDesc)
> +    {
> +        /* We have an attached object, Get the correct handler list */
>
> -            return (AE_TYPE);
> -        }
> +        HandlerListHead = ObjDesc->CommonNotify.NotifyList[HandlerListId];
>      }
>
>      /*
> -     * If there is a handler to run, schedule the dispatcher.
> -     * Check for:
> -     * 1) Global system notify handler
> -     * 2) Global device notify handler
> -     * 3) Per-device notify handler
> +     * If there is no notify handler (Global or Local)
> +     * for this object, just ignore the notify
>       */
> -    if ((AcpiGbl_SystemNotify.Handler &&
> -            (NotifyValue <= ACPI_MAX_SYS_NOTIFY)) ||
> -        (AcpiGbl_DeviceNotify.Handler &&
> -            (NotifyValue > ACPI_MAX_SYS_NOTIFY))  ||
> -        HandlerObj)
> +    if (!AcpiGbl_GlobalNotify[HandlerListId].Handler && !HandlerListHead)
>      {
> -        NotifyInfo = AcpiUtCreateGenericState ();
> -        if (!NotifyInfo)
> -        {
> -            return (AE_NO_MEMORY);
> -        }
> +        ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
> +            "No notify handler for Notify, ignoring (%4.4s, %X) node %p\n",
> +            AcpiUtGetNodeName (Node), NotifyValue, Node));
>
> -        if (!HandlerObj)
> -        {
> -            ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
> -                "Executing system notify handler for Notify (%4.4s, %X) "
> -                "node %p\n",
> -                AcpiUtGetNodeName (Node), NotifyValue, Node));
> -        }
> +        return (AE_OK);
> +    }
>
> -        NotifyInfo->Common.DescriptorType = ACPI_DESC_TYPE_STATE_NOTIFY;
> -        NotifyInfo->Notify.Node = Node;
> -        NotifyInfo->Notify.Value = (UINT16) NotifyValue;
> -        NotifyInfo->Notify.HandlerObj = HandlerObj;
> +    /* Setup notify info and schedule the notify dispatcher */
>
> -        Status = AcpiOsExecute (
> -                    OSL_NOTIFY_HANDLER, AcpiEvNotifyDispatch, NotifyInfo);
> -        if (ACPI_FAILURE (Status))
> -        {
> -            AcpiUtDeleteGenericState (NotifyInfo);
> -        }
> -    }
> -    else
> +    Info = AcpiUtCreateGenericState ();
> +    if (!Info)
>      {
> -        /* There is no notify handler (per-device or system) for this device */
> +        return (AE_NO_MEMORY);
> +    }
>
> -        ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
> -            "No notify handler for Notify (%4.4s, %X) node %p\n",
> -            AcpiUtGetNodeName (Node), NotifyValue, Node));
> +    Info->Common.DescriptorType = ACPI_DESC_TYPE_STATE_NOTIFY;
> +
> +    Info->Notify.Node = Node;
> +    Info->Notify.Value = (UINT16) NotifyValue;
> +    Info->Notify.HandlerListId = HandlerListId;
> +    Info->Notify.HandlerListHead = HandlerListHead;
> +    Info->Notify.Global = &AcpiGbl_GlobalNotify[HandlerListId];
> +
> +    ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
> +        "Dispatching Notify on [%4.4s] (%s) Value 0x%2.2X (%s) Node %p\n",
> +        AcpiUtGetNodeName (Node), AcpiUtGetTypeName (Node->Type),
> +        NotifyValue, AcpiUtGetNotifyName (NotifyValue), Node));
> +
> +    Status = AcpiOsExecute (OSL_NOTIFY_HANDLER, AcpiEvNotifyDispatch,
> +        Info);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        AcpiUtDeleteGenericState (Info);
>      }
>
>      return (Status);
> @@ -307,61 +282,37 @@ static void ACPI_SYSTEM_XFACE
>  AcpiEvNotifyDispatch (
>      void                    *Context)
>  {
> -    ACPI_GENERIC_STATE      *NotifyInfo = (ACPI_GENERIC_STATE *) Context;
> -    ACPI_NOTIFY_HANDLER     GlobalHandler = NULL;
> -    void                    *GlobalContext = NULL;
> +    ACPI_GENERIC_STATE      *Info = (ACPI_GENERIC_STATE *) Context;
>      ACPI_OPERAND_OBJECT     *HandlerObj;
>
>
>      ACPI_FUNCTION_ENTRY ();
>
>
> -    /*
> -     * We will invoke a global notify handler if installed. This is done
> -     * _before_ we invoke the per-device handler attached to the device.
> -     */
> -    if (NotifyInfo->Notify.Value <= ACPI_MAX_SYS_NOTIFY)
> -    {
> -        /* Global system notification handler */
> +    /* Invoke a global notify handler if installed */
>
> -        if (AcpiGbl_SystemNotify.Handler)
> -        {
> -            GlobalHandler = AcpiGbl_SystemNotify.Handler;
> -            GlobalContext = AcpiGbl_SystemNotify.Context;
> -        }
> -    }
> -    else
> +    if (Info->Notify.Global->Handler)
>      {
> -        /* Global driver notification handler */
> -
> -        if (AcpiGbl_DeviceNotify.Handler)
> -        {
> -            GlobalHandler = AcpiGbl_DeviceNotify.Handler;
> -            GlobalContext = AcpiGbl_DeviceNotify.Context;
> -        }
> +        Info->Notify.Global->Handler (Info->Notify.Node,
> +            Info->Notify.Value,
> +            Info->Notify.Global->Context);
>      }
>
> -    /* Invoke the system handler first, if present */
> +    /* Now invoke the local notify handler(s) if any are installed */
>
> -    if (GlobalHandler)
> +    HandlerObj = Info->Notify.HandlerListHead;
> +    while (HandlerObj)
>      {
> -        GlobalHandler (NotifyInfo->Notify.Node, NotifyInfo->Notify.Value,
> -            GlobalContext);
> -    }
> -
> -    /* Now invoke the per-device handler, if present */
> -
> -    HandlerObj = NotifyInfo->Notify.HandlerObj;
> -    if (HandlerObj)
> -    {
> -        HandlerObj->Notify.Handler (NotifyInfo->Notify.Node,
> -            NotifyInfo->Notify.Value,
> +        HandlerObj->Notify.Handler (Info->Notify.Node,
> +            Info->Notify.Value,
>              HandlerObj->Notify.Context);
> +
> +        HandlerObj = HandlerObj->Notify.Next[Info->Notify.HandlerListId];
>      }
>
>      /* All done with the info object */
>
> -    AcpiUtDeleteGenericState (NotifyInfo);
> +    AcpiUtDeleteGenericState (Info);
>  }
>
>
> diff --git a/src/acpica/source/components/events/evxface.c b/src/acpica/source/components/events/evxface.c
> index a6aea09..b0c5ce3 100644
> --- a/src/acpica/source/components/events/evxface.c
> +++ b/src/acpica/source/components/events/evxface.c
> @@ -132,15 +132,21 @@
>   *
>   * PARAMETERS:  Device          - The device for which notifies will be handled
>   *              HandlerType     - The type of handler:
> - *                                  ACPI_SYSTEM_NOTIFY: SystemHandler (00-7f)
> - *                                  ACPI_DEVICE_NOTIFY: DriverHandler (80-ff)
> - *                                  ACPI_ALL_NOTIFY:  both system and device
> + *                                  ACPI_SYSTEM_NOTIFY: System Handler (00-7F)
> + *                                  ACPI_DEVICE_NOTIFY: Device Handler (80-FF)
> + *                                  ACPI_ALL_NOTIFY:    Both System and Device
>   *              Handler         - Address of the handler
>   *              Context         - Value passed to the handler on each GPE
>   *
>   * RETURN:      Status
>   *
> - * DESCRIPTION: Install a handler for notifies on an ACPI device
> + * DESCRIPTION: Install a handler for notifications on an ACPI Device,
> + *              ThermalZone, or Processor object.
> + *
> + * NOTES:       The Root namespace object may have only one handler for each
> + *              type of notify (System/Device). Device/Thermal/Processor objects
> + *              may have one device notify handler, and multiple system notify
> + *              handlers.
>   *
>   ******************************************************************************/
>
> @@ -151,10 +157,11 @@ AcpiInstallNotifyHandler (
>      ACPI_NOTIFY_HANDLER     Handler,
>      void                    *Context)
>  {
> +    ACPI_NAMESPACE_NODE     *Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Device);
>      ACPI_OPERAND_OBJECT     *ObjDesc;
> -    ACPI_OPERAND_OBJECT     *NotifyObj;
> -    ACPI_NAMESPACE_NODE     *Node;
> +    ACPI_OPERAND_OBJECT     *HandlerObj;
>      ACPI_STATUS             Status;
> +    UINT32                  i;
>
>
>      ACPI_FUNCTION_TRACE (AcpiInstallNotifyHandler);
> @@ -162,8 +169,7 @@ AcpiInstallNotifyHandler (
>
>      /* Parameter validation */
>
> -    if ((!Device)  ||
> -        (!Handler) ||
> +    if ((!Device) || (!Handler) || (!HandlerType) ||
>          (HandlerType > ACPI_MAX_NOTIFY_HANDLER_TYPE))
>      {
>          return_ACPI_STATUS (AE_BAD_PARAMETER);
> @@ -175,135 +181,124 @@ AcpiInstallNotifyHandler (
>          return_ACPI_STATUS (Status);
>      }
>
> -    /* Convert and validate the device handle */
> -
> -    Node = AcpiNsValidateHandle (Device);
> -    if (!Node)
> -    {
> -        Status = AE_BAD_PARAMETER;
> -        goto UnlockAndExit;
> -    }
> -
>      /*
>       * Root Object:
>       * Registering a notify handler on the root object indicates that the
>       * caller wishes to receive notifications for all objects. Note that
> -     * only one <external> global handler can be regsitered (per notify type).
> +     * only one global handler can be registered per notify type.
> +     * Ensure that a handler is not already installed.
>       */
>      if (Device == ACPI_ROOT_OBJECT)
>      {
> -        /* Make sure the handler is not already installed */
> -
> -        if (((HandlerType & ACPI_SYSTEM_NOTIFY) &&
> -                AcpiGbl_SystemNotify.Handler)       ||
> -            ((HandlerType & ACPI_DEVICE_NOTIFY) &&
> -                AcpiGbl_DeviceNotify.Handler))
> -        {
> -            Status = AE_ALREADY_EXISTS;
> -            goto UnlockAndExit;
> -        }
> -
> -        if (HandlerType & ACPI_SYSTEM_NOTIFY)
> -        {
> -            AcpiGbl_SystemNotify.Node    = Node;
> -            AcpiGbl_SystemNotify.Handler = Handler;
> -            AcpiGbl_SystemNotify.Context = Context;
> -        }
> -
> -        if (HandlerType & ACPI_DEVICE_NOTIFY)
> +        for (i = 0; i < ACPI_NUM_NOTIFY_TYPES; i++)
>          {
> -            AcpiGbl_DeviceNotify.Node    = Node;
> -            AcpiGbl_DeviceNotify.Handler = Handler;
> -            AcpiGbl_DeviceNotify.Context = Context;
> +            if (HandlerType & (i+1))
> +            {
> +                if (AcpiGbl_GlobalNotify[i].Handler)
> +                {
> +                    Status = AE_ALREADY_EXISTS;
> +                    goto UnlockAndExit;
> +                }
> +
> +                AcpiGbl_GlobalNotify[i].Handler = Handler;
> +                AcpiGbl_GlobalNotify[i].Context = Context;
> +            }
>          }
>
> -        /* Global notify handler installed */
> +        goto UnlockAndExit; /* Global notify handler installed, all done */
>      }
>
>      /*
>       * All Other Objects:
> -     * Caller will only receive notifications specific to the target object.
> -     * Note that only certain object types can receive notifications.
> +     * Caller will only receive notifications specific to the target
> +     * object. Note that only certain object types are allowed to
> +     * receive notifications.
>       */
> -    else
> +
> +    /* Are Notifies allowed on this object? */
> +
> +    if (!AcpiEvIsNotifyObject (Node))
> +    {
> +        Status = AE_TYPE;
> +        goto UnlockAndExit;
> +    }
> +
> +    /* Check for an existing internal object, might not exist */
> +
> +    ObjDesc = AcpiNsGetAttachedObject (Node);
> +    if (!ObjDesc)
>      {
> -        /* Notifies allowed on this object? */
> +        /* Create a new object */
>
> -        if (!AcpiEvIsNotifyObject (Node))
> +        ObjDesc = AcpiUtCreateInternalObject (Node->Type);
> +        if (!ObjDesc)
>          {
> -            Status = AE_TYPE;
> +            Status = AE_NO_MEMORY;
>              goto UnlockAndExit;
>          }
>
> -        /* Check for an existing internal object */
> +        /* Attach new object to the Node, remove local reference */
>
> -        ObjDesc = AcpiNsGetAttachedObject (Node);
> -        if (ObjDesc)
> +        Status = AcpiNsAttachObject (Device, ObjDesc, Node->Type);
> +        AcpiUtRemoveReference (ObjDesc);
> +        if (ACPI_FAILURE (Status))
>          {
> -            /* Object exists - make sure there's no handler */
> -
> -            if (((HandlerType & ACPI_SYSTEM_NOTIFY) &&
> -                    ObjDesc->CommonNotify.SystemNotify)   ||
> -                ((HandlerType & ACPI_DEVICE_NOTIFY) &&
> -                    ObjDesc->CommonNotify.DeviceNotify))
> -            {
> -                Status = AE_ALREADY_EXISTS;
> -                goto UnlockAndExit;
> -            }
> +            goto UnlockAndExit;
>          }
> -        else
> -        {
> -            /* Create a new object */
> -
> -            ObjDesc = AcpiUtCreateInternalObject (Node->Type);
> -            if (!ObjDesc)
> -            {
> -                Status = AE_NO_MEMORY;
> -                goto UnlockAndExit;
> -            }
> -
> -            /* Attach new object to the Node */
> -
> -            Status = AcpiNsAttachObject (Device, ObjDesc, Node->Type);
> +    }
>
> -            /* Remove local reference to the object */
> +    /* Ensure that the handler is not already installed in the lists */
>
> -            AcpiUtRemoveReference (ObjDesc);
> -            if (ACPI_FAILURE (Status))
> +    for (i = 0; i < ACPI_NUM_NOTIFY_TYPES; i++)
> +    {
> +        if (HandlerType & (i+1))
> +        {
> +            HandlerObj = ObjDesc->CommonNotify.NotifyList[i];
> +            while (HandlerObj)
>              {
> -                goto UnlockAndExit;
> +                if (HandlerObj->Notify.Handler == Handler)
> +                {
> +                    Status = AE_ALREADY_EXISTS;
> +                    goto UnlockAndExit;
> +                }
> +
> +                HandlerObj = HandlerObj->Notify.Next[i];
>              }
>          }
> +    }
>
> -        /* Install the handler */
> +    /* Create and populate a new notify handler object */
>
> -        NotifyObj = AcpiUtCreateInternalObject (ACPI_TYPE_LOCAL_NOTIFY);
> -        if (!NotifyObj)
> -        {
> -            Status = AE_NO_MEMORY;
> -            goto UnlockAndExit;
> -        }
> +    HandlerObj = AcpiUtCreateInternalObject (ACPI_TYPE_LOCAL_NOTIFY);
> +    if (!HandlerObj)
> +    {
> +        Status = AE_NO_MEMORY;
> +        goto UnlockAndExit;
> +    }
>
> -        NotifyObj->Notify.Node    = Node;
> -        NotifyObj->Notify.Handler = Handler;
> -        NotifyObj->Notify.Context = Context;
> +    HandlerObj->Notify.Node = Node;
> +    HandlerObj->Notify.HandlerType = HandlerType;
> +    HandlerObj->Notify.Handler = Handler;
> +    HandlerObj->Notify.Context = Context;
>
> -        if (HandlerType & ACPI_SYSTEM_NOTIFY)
> -        {
> -            ObjDesc->CommonNotify.SystemNotify = NotifyObj;
> -        }
> +    /* Install the handler at the list head(s) */
>
> -        if (HandlerType & ACPI_DEVICE_NOTIFY)
> +    for (i = 0; i < ACPI_NUM_NOTIFY_TYPES; i++)
> +    {
> +        if (HandlerType & (i+1))
>          {
> -            ObjDesc->CommonNotify.DeviceNotify = NotifyObj;
> +            HandlerObj->Notify.Next[i] =
> +                ObjDesc->CommonNotify.NotifyList[i];
> +
> +            ObjDesc->CommonNotify.NotifyList[i] = HandlerObj;
>          }
> +    }
>
> -        if (HandlerType == ACPI_ALL_NOTIFY)
> -        {
> -            /* Extra ref if installed in both */
> +    /* Add an extra reference if handler was installed in both lists */
>
> -            AcpiUtAddReference (NotifyObj);
> -        }
> +    if (HandlerType == ACPI_ALL_NOTIFY)
> +    {
> +        AcpiUtAddReference (HandlerObj);
>      }
>
>
> @@ -319,11 +314,11 @@ ACPI_EXPORT_SYMBOL (AcpiInstallNotifyHandler)
>   *
>   * FUNCTION:    AcpiRemoveNotifyHandler
>   *
> - * PARAMETERS:  Device          - The device for which notifies will be handled
> + * PARAMETERS:  Device          - The device for which the handler is installed
>   *              HandlerType     - The type of handler:
> - *                                  ACPI_SYSTEM_NOTIFY: SystemHandler (00-7f)
> - *                                  ACPI_DEVICE_NOTIFY: DriverHandler (80-ff)
> - *                                  ACPI_ALL_NOTIFY:  both system and device
> + *                                  ACPI_SYSTEM_NOTIFY: System Handler (00-7F)
> + *                                  ACPI_DEVICE_NOTIFY: Device Handler (80-FF)
> + *                                  ACPI_ALL_NOTIFY:    Both System and Device
>   *              Handler         - Address of the handler
>   *
>   * RETURN:      Status
> @@ -338,10 +333,12 @@ AcpiRemoveNotifyHandler (
>      UINT32                  HandlerType,
>      ACPI_NOTIFY_HANDLER     Handler)
>  {
> -    ACPI_OPERAND_OBJECT     *NotifyObj;
> +    ACPI_NAMESPACE_NODE     *Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Device);
>      ACPI_OPERAND_OBJECT     *ObjDesc;
> -    ACPI_NAMESPACE_NODE     *Node;
> +    ACPI_OPERAND_OBJECT     *HandlerObj;
> +    ACPI_OPERAND_OBJECT     *PreviousHandlerObj;
>      ACPI_STATUS             Status;
> +    UINT32                  i;
>
>
>      ACPI_FUNCTION_TRACE (AcpiRemoveNotifyHandler);
> @@ -349,122 +346,103 @@ AcpiRemoveNotifyHandler (
>
>      /* Parameter validation */
>
> -    if ((!Device)  ||
> -        (!Handler) ||
> +    if ((!Device) || (!Handler) || (!HandlerType) ||
>          (HandlerType > ACPI_MAX_NOTIFY_HANDLER_TYPE))
>      {
>          return_ACPI_STATUS (AE_BAD_PARAMETER);
>      }
>
> +    /* Make sure all deferred notify tasks are completed */
> +
> +    AcpiOsWaitEventsComplete ();
> +
>      Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
>      if (ACPI_FAILURE (Status))
>      {
>          return_ACPI_STATUS (Status);
>      }
>
> -    /* Convert and validate the device handle */
> -
> -    Node = AcpiNsValidateHandle (Device);
> -    if (!Node)
> -    {
> -        Status = AE_BAD_PARAMETER;
> -        goto UnlockAndExit;
> -    }
> -
> -    /* Root Object */
> +    /* Root Object. Global handlers are removed here */
>
>      if (Device == ACPI_ROOT_OBJECT)
>      {
> -        ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
> -            "Removing notify handler for namespace root object\n"));
> -
> -        if (((HandlerType & ACPI_SYSTEM_NOTIFY) &&
> -              !AcpiGbl_SystemNotify.Handler)        ||
> -            ((HandlerType & ACPI_DEVICE_NOTIFY) &&
> -              !AcpiGbl_DeviceNotify.Handler))
> -        {
> -            Status = AE_NOT_EXIST;
> -            goto UnlockAndExit;
> -        }
> -
> -        if (HandlerType & ACPI_SYSTEM_NOTIFY)
> +        for (i = 0; i < ACPI_NUM_NOTIFY_TYPES; i++)
>          {
> -            AcpiGbl_SystemNotify.Node    = NULL;
> -            AcpiGbl_SystemNotify.Handler = NULL;
> -            AcpiGbl_SystemNotify.Context = NULL;
> +            if (HandlerType & (i+1))
> +            {
> +                if (!AcpiGbl_GlobalNotify[i].Handler ||
> +                    (AcpiGbl_GlobalNotify[i].Handler != Handler))
> +                {
> +                    Status = AE_NOT_EXIST;
> +                    goto UnlockAndExit;
> +                }
> +
> +                ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
> +                    "Removing global notify handler\n"));
> +
> +                AcpiGbl_GlobalNotify[i].Handler = NULL;
> +                AcpiGbl_GlobalNotify[i].Context = NULL;
> +            }
>          }
>
> -        if (HandlerType & ACPI_DEVICE_NOTIFY)
> -        {
> -            AcpiGbl_DeviceNotify.Node    = NULL;
> -            AcpiGbl_DeviceNotify.Handler = NULL;
> -            AcpiGbl_DeviceNotify.Context = NULL;
> -        }
> +        goto UnlockAndExit;
>      }
>
> -    /* All Other Objects */
> +    /* All other objects: Are Notifies allowed on this object? */
>
> -    else
> +    if (!AcpiEvIsNotifyObject (Node))
>      {
> -        /* Notifies allowed on this object? */
> +        Status = AE_TYPE;
> +        goto UnlockAndExit;
> +    }
>
> -        if (!AcpiEvIsNotifyObject (Node))
> -        {
> -            Status = AE_TYPE;
> -            goto UnlockAndExit;
> -        }
> +    /* Must have an existing internal object */
> +
> +    ObjDesc = AcpiNsGetAttachedObject (Node);
> +    if (!ObjDesc)
> +    {
> +        Status = AE_NOT_EXIST;
> +        goto UnlockAndExit;
> +    }
>
> -        /* Check for an existing internal object */
> +    /* Internal object exists. Find the handler and remove it */
>
> -        ObjDesc = AcpiNsGetAttachedObject (Node);
> -        if (!ObjDesc)
> +    for (i = 0; i < ACPI_NUM_NOTIFY_TYPES; i++)
> +    {
> +        if (HandlerType & (i+1))
>          {
> -            Status = AE_NOT_EXIST;
> -            goto UnlockAndExit;
> -        }
> +            HandlerObj = ObjDesc->CommonNotify.NotifyList[i];
> +            PreviousHandlerObj = NULL;
>
> -        /* Object exists - make sure there's an existing handler */
> +            /* Attempt to find the handler in the handler list */
>
> -        if (HandlerType & ACPI_SYSTEM_NOTIFY)
> -        {
> -            NotifyObj = ObjDesc->CommonNotify.SystemNotify;
> -            if (!NotifyObj)
> +            while (HandlerObj &&
> +                  (HandlerObj->Notify.Handler != Handler))
>              {
> -                Status = AE_NOT_EXIST;
> -                goto UnlockAndExit;
> +                PreviousHandlerObj = HandlerObj;
> +                HandlerObj = HandlerObj->Notify.Next[i];
>              }
>
> -            if (NotifyObj->Notify.Handler != Handler)
> +            if (!HandlerObj)
>              {
> -                Status = AE_BAD_PARAMETER;
> +                Status = AE_NOT_EXIST;
>                  goto UnlockAndExit;
>              }
>
> -            /* Remove the handler */
> +            /* Remove the handler object from the list */
>
> -            ObjDesc->CommonNotify.SystemNotify = NULL;
> -            AcpiUtRemoveReference (NotifyObj);
> -        }
> -
> -        if (HandlerType & ACPI_DEVICE_NOTIFY)
> -        {
> -            NotifyObj = ObjDesc->CommonNotify.DeviceNotify;
> -            if (!NotifyObj)
> +            if (PreviousHandlerObj) /* Handler is not at the list head */
>              {
> -                Status = AE_NOT_EXIST;
> -                goto UnlockAndExit;
> +                PreviousHandlerObj->Notify.Next[i] =
> +                    HandlerObj->Notify.Next[i];
>              }
> -
> -            if (NotifyObj->Notify.Handler != Handler)
> +            else /* Handler is at the list head */
>              {
> -                Status = AE_BAD_PARAMETER;
> -                goto UnlockAndExit;
> +                ObjDesc->CommonNotify.NotifyList[i] =
> +                    HandlerObj->Notify.Next[i];
>              }
>
> -            /* Remove the handler */
> -
> -            ObjDesc->CommonNotify.DeviceNotify = NULL;
> -            AcpiUtRemoveReference (NotifyObj);
> +            AcpiUtRemoveReference (HandlerObj);
>          }
>      }
>
> @@ -894,6 +872,10 @@ AcpiRemoveGpeHandler (
>          return_ACPI_STATUS (AE_BAD_PARAMETER);
>      }
>
> +    /* Make sure all deferred GPE tasks are completed */
> +
> +    AcpiOsWaitEventsComplete ();
> +
>      Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS);
>      if (ACPI_FAILURE (Status))
>      {
> diff --git a/src/acpica/source/components/events/evxfgpe.c b/src/acpica/source/components/events/evxfgpe.c
> index 7018513..29e1d68 100644
> --- a/src/acpica/source/components/events/evxfgpe.c
> +++ b/src/acpica/source/components/events/evxfgpe.c
> @@ -155,7 +155,7 @@ AcpiUpdateAllGpes (
>      ACPI_STATUS             Status;
>
>
> -    ACPI_FUNCTION_TRACE (AcpiUpdateGpes);
> +    ACPI_FUNCTION_TRACE (AcpiUpdateAllGpes);
>
>
>      Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS);
> @@ -367,9 +367,11 @@ AcpiSetupGpeForWake (
>      ACPI_HANDLE             GpeDevice,
>      UINT32                  GpeNumber)
>  {
> -    ACPI_STATUS             Status = AE_BAD_PARAMETER;
> +    ACPI_STATUS             Status;
>      ACPI_GPE_EVENT_INFO     *GpeEventInfo;
>      ACPI_NAMESPACE_NODE     *DeviceNode;
> +    ACPI_GPE_NOTIFY_INFO    *Notify;
> +    ACPI_GPE_NOTIFY_INFO    *NewNotify;
>      ACPI_CPU_FLAGS          Flags;
>
>
> @@ -405,32 +407,88 @@ AcpiSetupGpeForWake (
>          return_ACPI_STATUS (AE_BAD_PARAMETER);
>      }
>
> +    /*
> +     * Allocate a new notify object up front, in case it is needed.
> +     * Memory allocation while holding a spinlock is a big no-no
> +     * on some hosts.
> +     */
> +    NewNotify = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_GPE_NOTIFY_INFO));
> +    if (!NewNotify)
> +    {
> +        return_ACPI_STATUS (AE_NO_MEMORY);
> +    }
> +
>      Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock);
>
>      /* Ensure that we have a valid GPE number */
>
>      GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber);
> -    if (GpeEventInfo)
> +    if (!GpeEventInfo)
> +    {
> +        Status = AE_BAD_PARAMETER;
> +        goto UnlockAndExit;
> +    }
> +
> +    /*
> +     * If there is no method or handler for this GPE, then the
> +     * WakeDevice will be notified whenever this GPE fires. This is
> +     * known as an "implicit notify". Note: The GPE is assumed to be
> +     * level-triggered (for windows compatibility).
> +     */
> +    if ((GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK) ==
> +            ACPI_GPE_DISPATCH_NONE)
>      {
>          /*
> -         * If there is no method or handler for this GPE, then the
> -         * WakeDevice will be notified whenever this GPE fires (aka
> -         * "implicit notify") Note: The GPE is assumed to be
> -         * level-triggered (for windows compatibility).
> +         * This is the first device for implicit notify on this GPE.
> +         * Just set the flags here, and enter the NOTIFY block below.
>           */
> -        if ((GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK) ==
> -                ACPI_GPE_DISPATCH_NONE)
> +        GpeEventInfo->Flags =
> +            (ACPI_GPE_DISPATCH_NOTIFY | ACPI_GPE_LEVEL_TRIGGERED);
> +    }
> +
> +    /*
> +     * If we already have an implicit notify on this GPE, add
> +     * this device to the notify list.
> +     */
> +    if ((GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK) ==
> +            ACPI_GPE_DISPATCH_NOTIFY)
> +    {
> +        /* Ensure that the device is not already in the list */
> +
> +        Notify = GpeEventInfo->Dispatch.NotifyList;
> +        while (Notify)
>          {
> -            GpeEventInfo->Flags =
> -                (ACPI_GPE_DISPATCH_NOTIFY | ACPI_GPE_LEVEL_TRIGGERED);
> -            GpeEventInfo->Dispatch.DeviceNode = DeviceNode;
> +            if (Notify->DeviceNode == DeviceNode)
> +            {
> +                Status = AE_ALREADY_EXISTS;
> +                goto UnlockAndExit;
> +            }
> +            Notify = Notify->Next;
>          }
>
> -        GpeEventInfo->Flags |= ACPI_GPE_CAN_WAKE;
> -        Status = AE_OK;
> +        /* Add this device to the notify list for this GPE */
> +
> +        NewNotify->DeviceNode = DeviceNode;
> +        NewNotify->Next = GpeEventInfo->Dispatch.NotifyList;
> +        GpeEventInfo->Dispatch.NotifyList = NewNotify;
> +        NewNotify = NULL;
>      }
>
> +    /* Mark the GPE as a possible wake event */
> +
> +    GpeEventInfo->Flags |= ACPI_GPE_CAN_WAKE;
> +    Status = AE_OK;
> +
> +
> +UnlockAndExit:
>      AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags);
> +
> +    /* Delete the notify object if it was not used above */
> +
> +    if (NewNotify)
> +    {
> +        ACPI_FREE (NewNotify);
> +    }
>      return_ACPI_STATUS (Status);
>  }
>
> diff --git a/src/acpica/source/components/executer/exconfig.c b/src/acpica/source/components/executer/exconfig.c
> index 69361d5..55cef28 100644
> --- a/src/acpica/source/components/executer/exconfig.c
> +++ b/src/acpica/source/components/executer/exconfig.c
> @@ -252,7 +252,7 @@ AcpiExLoadTableOp (
>      ACPI_FUNCTION_TRACE (ExLoadTableOp);
>
>
> -    /* Validate lengths for the SignatureString, OEMIDString, OEMTableID */
> +    /* Validate lengths for the Signature, OemId, and OemTableId strings */
>
>      if ((Operand[0]->String.Length > ACPI_NAME_SIZE) ||
>          (Operand[1]->String.Length > ACPI_OEM_ID_SIZE) ||
> diff --git a/src/acpica/source/components/executer/exdump.c b/src/acpica/source/components/executer/exdump.c
> index 5aab606..b525333 100644
> --- a/src/acpica/source/components/executer/exdump.c
> +++ b/src/acpica/source/components/executer/exdump.c
> @@ -203,8 +203,8 @@ static ACPI_EXDUMP_INFO     AcpiExDumpDevice[4] =
>  {
>      {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpDevice),         NULL},
>      {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Device.Handler),               "Handler"},
> -    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Device.SystemNotify),          "System Notify"},
> -    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Device.DeviceNotify),          "Device Notify"}
> +    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Device.NotifyList[0]),         "System Notify"},
> +    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Device.NotifyList[1]),         "Device Notify"}
>  };
>
>  static ACPI_EXDUMP_INFO     AcpiExDumpEvent[2] =
> @@ -251,8 +251,8 @@ static ACPI_EXDUMP_INFO     AcpiExDumpPower[5] =
>      {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpPower),          NULL},
>      {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (PowerResource.SystemLevel),    "System Level"},
>      {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (PowerResource.ResourceOrder),  "Resource Order"},
> -    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (PowerResource.SystemNotify),   "System Notify"},
> -    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (PowerResource.DeviceNotify),   "Device Notify"}
> +    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (PowerResource.NotifyList[0]),  "System Notify"},
> +    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (PowerResource.NotifyList[1]),  "Device Notify"}
>  };
>
>  static ACPI_EXDUMP_INFO     AcpiExDumpProcessor[7] =
> @@ -261,16 +261,16 @@ static ACPI_EXDUMP_INFO     AcpiExDumpProcessor[7] =
>      {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Processor.ProcId),             "Processor ID"},
>      {ACPI_EXD_UINT8 ,   ACPI_EXD_OFFSET (Processor.Length),             "Length"},
>      {ACPI_EXD_ADDRESS,  ACPI_EXD_OFFSET (Processor.Address),            "Address"},
> -    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Processor.SystemNotify),       "System Notify"},
> -    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Processor.DeviceNotify),       "Device Notify"},
> +    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Processor.NotifyList[0]),      "System Notify"},
> +    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Processor.NotifyList[1]),      "Device Notify"},
>      {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Processor.Handler),            "Handler"}
>  };
>
>  static ACPI_EXDUMP_INFO     AcpiExDumpThermal[4] =
>  {
>      {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpThermal),        NULL},
> -    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (ThermalZone.SystemNotify),     "System Notify"},
> -    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (ThermalZone.DeviceNotify),     "Device Notify"},
> +    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (ThermalZone.NotifyList[0]),    "System Notify"},
> +    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (ThermalZone.NotifyList[1]),    "Device Notify"},
>      {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (ThermalZone.Handler),          "Handler"}
>  };
>
> @@ -330,11 +330,15 @@ static ACPI_EXDUMP_INFO     AcpiExDumpAddressHandler[6] =
>      {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (AddressSpace.Context),         "Context"}
>  };
>
> -static ACPI_EXDUMP_INFO     AcpiExDumpNotify[3] =
> +static ACPI_EXDUMP_INFO     AcpiExDumpNotify[7] =
>  {
>      {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpNotify),         NULL},
>      {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Node),                  "Node"},
> -    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Context),               "Context"}
> +    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Notify.HandlerType),           "Handler Type"},
> +    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Handler),               "Handler"},
> +    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Context),               "Context"},
> +    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Next[0]),               "Next System Notify"},
> +    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Next[1]),               "Next Device Notify"}
>  };
>
>
> diff --git a/src/acpica/source/components/executer/exprep.c b/src/acpica/source/components/executer/exprep.c
> index 0b65ab9..9b05f9d 100644
> --- a/src/acpica/source/components/executer/exprep.c
> +++ b/src/acpica/source/components/executer/exprep.c
> @@ -490,8 +490,8 @@ AcpiExPrepCommonFieldObject (
>   *
>   * RETURN:      Status
>   *
> - * DESCRIPTION: Construct an ACPI_OPERAND_OBJECT of type DefField and
> - *              connect it to the parent Node.
> + * DESCRIPTION: Construct an object of type ACPI_OPERAND_OBJECT with a
> + *              subtype of DefField and connect it to the parent Node.
>   *
>   ******************************************************************************/
>
> diff --git a/src/acpica/source/components/executer/exresolv.c b/src/acpica/source/components/executer/exresolv.c
> index 8d3893b..4b9e9b3 100644
> --- a/src/acpica/source/components/executer/exresolv.c
> +++ b/src/acpica/source/components/executer/exresolv.c
> @@ -237,7 +237,7 @@ AcpiExResolveObjectToValue (
>
>      StackDesc = *StackPtr;
>
> -    /* This is an ACPI_OPERAND_OBJECT  */
> +    /* This is an object of type ACPI_OPERAND_OBJECT */
>
>      switch (StackDesc->Common.Type)
>      {
> diff --git a/src/acpica/source/components/executer/exstore.c b/src/acpica/source/components/executer/exstore.c
> index 8bea79b..36fccf8 100644
> --- a/src/acpica/source/components/executer/exstore.c
> +++ b/src/acpica/source/components/executer/exstore.c
> @@ -140,15 +140,15 @@ AcpiExStoreObjectToIndex (
>   * FUNCTION:    AcpiExStore
>   *
>   * PARAMETERS:  *SourceDesc         - Value to be stored
> - *              *DestDesc           - Where to store it.  Must be an NS node
> - *                                    or an ACPI_OPERAND_OBJECT of type
> + *              *DestDesc           - Where to store it. Must be an NS node
> + *                                    or ACPI_OPERAND_OBJECT of type
>   *                                    Reference;
>   *              WalkState           - Current walk state
>   *
>   * RETURN:      Status
>   *
>   * DESCRIPTION: Store the value described by SourceDesc into the location
> - *              described by DestDesc.  Called by various interpreter
> + *              described by DestDesc. Called by various interpreter
>   *              functions to store the result of an operation into
>   *              the destination operand -- not just simply the actual "Store"
>   *              ASL operator.
> diff --git a/src/acpica/source/components/executer/exutils.c b/src/acpica/source/components/executer/exutils.c
> index 3ebcbe5..28a18ad 100644
> --- a/src/acpica/source/components/executer/exutils.c
> +++ b/src/acpica/source/components/executer/exutils.c
> @@ -193,7 +193,7 @@ AcpiExEnterInterpreter (
>   *
>   * DESCRIPTION: Reacquire the interpreter execution region from within the
>   *              interpreter code. Failure to enter the interpreter region is a
> - *              fatal system error. Used in  conjuction with
> + *              fatal system error. Used in conjunction with
>   *              RelinquishInterpreter
>   *
>   ******************************************************************************/
> diff --git a/src/acpica/source/components/hardware/hwsleep.c b/src/acpica/source/components/hardware/hwsleep.c
> index 6fd9d66..a2e4c43 100644
> --- a/src/acpica/source/components/hardware/hwsleep.c
> +++ b/src/acpica/source/components/hardware/hwsleep.c
> @@ -171,20 +171,6 @@ AcpiHwLegacySleep (
>          return_ACPI_STATUS (Status);
>      }
>
> -    if (SleepState != ACPI_STATE_S5)
> -    {
> -        /*
> -         * Disable BM arbitration. This feature is contained within an
> -         * optional register (PM2 Control), so ignore a BAD_ADDRESS
> -         * exception.
> -         */
> -        Status = AcpiWriteBitRegister (ACPI_BITREG_ARB_DISABLE, 1);
> -        if (ACPI_FAILURE (Status) && (Status != AE_BAD_ADDRESS))
> -        {
> -            return_ACPI_STATUS (Status);
> -        }
> -    }
> -
>      /*
>       * 1) Disable/Clear all GPEs
>       * 2) Enable all wakeup GPEs
> @@ -452,17 +438,6 @@ AcpiHwLegacyWake (
>              AcpiGbl_FixedEventInfo[ACPI_EVENT_POWER_BUTTON].StatusRegisterId,
>              ACPI_CLEAR_STATUS);
>
> -    /*
> -     * Enable BM arbitration. This feature is contained within an
> -     * optional register (PM2 Control), so ignore a BAD_ADDRESS
> -     * exception.
> -     */
> -    Status = AcpiWriteBitRegister (ACPI_BITREG_ARB_DISABLE, 0);
> -    if (ACPI_FAILURE (Status) && (Status != AE_BAD_ADDRESS))
> -    {
> -        return_ACPI_STATUS (Status);
> -    }
> -
>      AcpiHwExecuteSleepMethod (METHOD_PATHNAME__SST, ACPI_SST_WORKING);
>      return_ACPI_STATUS (Status);
>  }
> diff --git a/src/acpica/source/components/hardware/hwxfsleep.c b/src/acpica/source/components/hardware/hwxfsleep.c
> index 631b81e..dfb7112 100644
> --- a/src/acpica/source/components/hardware/hwxfsleep.c
> +++ b/src/acpica/source/components/hardware/hwxfsleep.c
> @@ -173,6 +173,14 @@ AcpiSetFirmwareWakingVector (
>      ACPI_FUNCTION_TRACE (AcpiSetFirmwareWakingVector);
>
>
> +    /*
> +     * According to the ACPI specification 2.0c and later, the 64-bit
> +     * waking vector should be cleared and the 32-bit waking vector should
> +     * be used, unless we want the wake-up code to be called by the BIOS in
> +     * Protected Mode. Some systems (for example HP dv5-1004nr) are known
> +     * to fail to resume if the 64-bit vector is used.
> +     */
> +
>      /* Set the 32-bit vector */
>
>      AcpiGbl_FACS->FirmwareWakingVector = PhysicalAddress;
> diff --git a/src/acpica/source/components/namespace/nspredef.c b/src/acpica/source/components/namespace/nspredef.c
> index e6c7cf6..8bc2591 100644
> --- a/src/acpica/source/components/namespace/nspredef.c
> +++ b/src/acpica/source/components/namespace/nspredef.c
> @@ -753,7 +753,7 @@ AcpiNsCheckPackage (
>          {
>              /* Create the new outer package and populate it */
>
> -            Status = AcpiNsWrapWithPackage (Data, *Elements, ReturnObjectPtr);
> +            Status = AcpiNsWrapWithPackage (Data, ReturnObject, ReturnObjectPtr);
>              if (ACPI_FAILURE (Status))
>              {
>                  return (Status);
> diff --git a/src/acpica/source/components/parser/psxface.c b/src/acpica/source/components/parser/psxface.c
> index 11c5fc2..5da1b6a 100644
> --- a/src/acpica/source/components/parser/psxface.c
> +++ b/src/acpica/source/components/parser/psxface.c
> @@ -420,8 +420,8 @@ AcpiPsExecuteMethod (
>      }
>
>      /*
> -     * Start method evaluation with an implicit return of zero. This is done
> -     * for Windows compatibility.
> +     * Start method evaluation with an implicit return of zero.
> +     * This is done for Windows compatibility.
>       */
>      if (AcpiGbl_EnableInterpreterSlack)
>      {
> diff --git a/src/acpica/source/components/resources/rscreate.c b/src/acpica/source/components/resources/rscreate.c
> index d75ceb6..6aaf4bb 100644
> --- a/src/acpica/source/components/resources/rscreate.c
> +++ b/src/acpica/source/components/resources/rscreate.c
> @@ -281,8 +281,8 @@ AcpiRsCreateResourceList (
>   *
>   * FUNCTION:    AcpiRsCreatePciRoutingTable
>   *
> - * PARAMETERS:  PackageObject           - Pointer to an ACPI_OPERAND_OBJECT
> - *                                        package
> + * PARAMETERS:  PackageObject           - Pointer to a package containing one
> + *                                        of more ACPI_OPERAND_OBJECTs
>   *              OutputBuffer            - Pointer to the user's buffer
>   *
>   * RETURN:      Status  AE_OK if okay, else a valid ACPI_STATUS code.
> @@ -290,7 +290,7 @@ AcpiRsCreateResourceList (
>   *              AE_BUFFER_OVERFLOW and OutputBuffer->Length will point
>   *              to the size buffer needed.
>   *
> - * DESCRIPTION: Takes the ACPI_OPERAND_OBJECT  package and creates a
> + * DESCRIPTION: Takes the ACPI_OPERAND_OBJECT package and creates a
>   *              linked list of PCI interrupt descriptions
>   *
>   * NOTE: It is the caller's responsibility to ensure that the start of the
> diff --git a/src/acpica/source/components/resources/rsutils.c b/src/acpica/source/components/resources/rsutils.c
> index ce3143c..a45b3d6 100644
> --- a/src/acpica/source/components/resources/rsutils.c
> +++ b/src/acpica/source/components/resources/rsutils.c
> @@ -253,7 +253,7 @@ AcpiRsMoveData (
>
>          /*
>           * 16-, 32-, and 64-bit cases must use the move macros that perform
> -         * endian conversion and/or accomodate hardware that cannot perform
> +         * endian conversion and/or accommodate hardware that cannot perform
>           * misaligned memory transfers
>           */
>          case ACPI_RSC_MOVE16:
> diff --git a/src/acpica/source/components/tables/tbfadt.c b/src/acpica/source/components/tables/tbfadt.c
> index fa43dbb..2c51511 100644
> --- a/src/acpica/source/components/tables/tbfadt.c
> +++ b/src/acpica/source/components/tables/tbfadt.c
> @@ -124,12 +124,13 @@
>
>  /* Local prototypes */
>
> -static ACPI_INLINE void
> +static void
>  AcpiTbInitGenericAddress (
>      ACPI_GENERIC_ADDRESS    *GenericAddress,
>      UINT8                   SpaceId,
>      UINT8                   ByteWidth,
> -    UINT64                  Address);
> +    UINT64                  Address,
> +    char                    *RegisterName);
>
>  static void
>  AcpiTbConvertFadt (
> @@ -263,7 +264,7 @@ static ACPI_FADT_PM_INFO    FadtPmInfoTable[] =
>   *
>   * PARAMETERS:  GenericAddress      - GAS struct to be initialized
>   *              SpaceId             - ACPI Space ID for this register
> - *              ByteWidth           - Width of this register, in bytes
> + *              ByteWidth           - Width of this register
>   *              Address             - Address of the register
>   *
>   * RETURN:      None
> @@ -274,13 +275,30 @@ static ACPI_FADT_PM_INFO    FadtPmInfoTable[] =
>   *
>   ******************************************************************************/
>
> -static ACPI_INLINE void
> +static void
>  AcpiTbInitGenericAddress (
>      ACPI_GENERIC_ADDRESS    *GenericAddress,
>      UINT8                   SpaceId,
>      UINT8                   ByteWidth,
> -    UINT64                  Address)
> +    UINT64                  Address,
> +    char                    *RegisterName)
>  {
> +    UINT8                   BitWidth;
> +
> +
> +    /* Bit width field in the GAS is only one byte long, 255 max */
> +
> +    BitWidth = (UINT8) (ByteWidth * 8);
> +
> +    if (ByteWidth > 31) /* (31*8)=248 */
> +    {
> +        ACPI_ERROR ((AE_INFO,
> +            "%s - 32-bit FADT register is too long (%u bytes, %u bits) "
> +            "to convert to GAS struct - 255 bits max, truncating",
> +            RegisterName, ByteWidth, (ByteWidth * 8)));
> +
> +        BitWidth = 255;
> +    }
>
>      /*
>       * The 64-bit Address field is non-aligned in the byte packed
> @@ -291,7 +309,7 @@ AcpiTbInitGenericAddress (
>      /* All other fields are byte-wide */
>
>      GenericAddress->SpaceId = SpaceId;
> -    GenericAddress->BitWidth = (UINT8) ACPI_MUL_8 (ByteWidth);
> +    GenericAddress->BitWidth = BitWidth;
>      GenericAddress->BitOffset = 0;
>      GenericAddress->AccessWidth = 0; /* Access width ANY */
>  }
> @@ -392,7 +410,7 @@ AcpiTbCreateLocalFadt (
>       */
>      if (Length > sizeof (ACPI_TABLE_FADT))
>      {
> -        ACPI_WARNING ((AE_INFO,
> +        ACPI_BIOS_WARNING ((AE_INFO,
>              "FADT (revision %u) is longer than ACPI 5.0 version, "
>              "truncating length %u to %u",
>              Table->Revision, Length, (UINT32) sizeof (ACPI_TABLE_FADT)));
> @@ -540,8 +558,9 @@ AcpiTbConvertFadt (
>          if (Address64->Address && Address32 &&
>             (Address64->Address != (UINT64) Address32))
>          {
> -            ACPI_ERROR ((AE_INFO,
> -                "32/64X address mismatch in %s: 0x%8.8X/0x%8.8X%8.8X, using 32",
> +            ACPI_BIOS_ERROR ((AE_INFO,
> +                "32/64X address mismatch in FADT/%s: "
> +                "0x%8.8X/0x%8.8X%8.8X, using 32",
>                  FadtInfoTable[i].Name, Address32,
>                  ACPI_FORMAT_UINT64 (Address64->Address)));
>          }
> @@ -556,7 +575,7 @@ AcpiTbConvertFadt (
>               */
>              AcpiTbInitGenericAddress (Address64, ACPI_ADR_SPACE_SYSTEM_IO,
>                  *ACPI_ADD_PTR (UINT8, &AcpiGbl_FADT, FadtInfoTable[i].Length),
> -                (UINT64) Address32);
> +                (UINT64) Address32, FadtInfoTable[i].Name);
>          }
>      }
>  }
> @@ -600,7 +619,7 @@ AcpiTbValidateFadt (
>      if (AcpiGbl_FADT.Facs &&
>          (AcpiGbl_FADT.XFacs != (UINT64) AcpiGbl_FADT.Facs))
>      {
> -        ACPI_WARNING ((AE_INFO,
> +        ACPI_BIOS_WARNING ((AE_INFO,
>              "32/64X FACS address mismatch in FADT - "
>              "0x%8.8X/0x%8.8X%8.8X, using 32",
>              AcpiGbl_FADT.Facs, ACPI_FORMAT_UINT64 (AcpiGbl_FADT.XFacs)));
> @@ -611,7 +630,7 @@ AcpiTbValidateFadt (
>      if (AcpiGbl_FADT.Dsdt &&
>          (AcpiGbl_FADT.XDsdt != (UINT64) AcpiGbl_FADT.Dsdt))
>      {
> -        ACPI_WARNING ((AE_INFO,
> +        ACPI_BIOS_WARNING ((AE_INFO,
>              "32/64X DSDT address mismatch in FADT - "
>              "0x%8.8X/0x%8.8X%8.8X, using 32",
>              AcpiGbl_FADT.Dsdt, ACPI_FORMAT_UINT64 (AcpiGbl_FADT.XDsdt)));
> @@ -647,8 +666,8 @@ AcpiTbValidateFadt (
>          if (Address64->Address &&
>             (Address64->BitWidth != ACPI_MUL_8 (Length)))
>          {
> -            ACPI_WARNING ((AE_INFO,
> -                "32/64X length mismatch in %s: %u/%u",
> +            ACPI_BIOS_WARNING ((AE_INFO,
> +                "32/64X length mismatch in FADT/%s: %u/%u",
>                  Name, ACPI_MUL_8 (Length), Address64->BitWidth));
>          }
>
> @@ -660,9 +679,9 @@ AcpiTbValidateFadt (
>               */
>              if (!Address64->Address || !Length)
>              {
> -                ACPI_ERROR ((AE_INFO,
> -                    "Required field %s has zero address and/or length:"
> -                    " 0x%8.8X%8.8X/0x%X",
> +                ACPI_BIOS_ERROR ((AE_INFO,
> +                    "Required FADT field %s has zero address and/or length: "
> +                    "0x%8.8X%8.8X/0x%X",
>                      Name, ACPI_FORMAT_UINT64 (Address64->Address), Length));
>              }
>          }
> @@ -676,8 +695,8 @@ AcpiTbValidateFadt (
>              if ((Address64->Address && !Length) ||
>                  (!Address64->Address && Length))
>              {
> -                ACPI_WARNING ((AE_INFO,
> -                    "Optional field %s has zero address or length: "
> +                ACPI_BIOS_WARNING ((AE_INFO,
> +                    "Optional FADT field %s has zero address or length: "
>                      "0x%8.8X%8.8X/0x%X",
>                      Name, ACPI_FORMAT_UINT64 (Address64->Address), Length));
>              }
> @@ -728,8 +747,8 @@ AcpiTbSetupFadtRegisters (
>                  (FadtInfoTable[i].DefaultLength > 0) &&
>                  (FadtInfoTable[i].DefaultLength != Target64->BitWidth))
>              {
> -                ACPI_WARNING ((AE_INFO,
> -                    "Invalid length for %s: %u, using default %u",
> +                ACPI_BIOS_WARNING ((AE_INFO,
> +                    "Invalid length for FADT/%s: %u, using default %u",
>                      FadtInfoTable[i].Name, Target64->BitWidth,
>                      FadtInfoTable[i].DefaultLength));
>
> @@ -772,7 +791,8 @@ AcpiTbSetupFadtRegisters (
>              AcpiTbInitGenericAddress (FadtPmInfoTable[i].Target,
>                  Source64->SpaceId, Pm1RegisterByteWidth,
>                  Source64->Address +
> -                    (FadtPmInfoTable[i].RegisterNum * Pm1RegisterByteWidth));
> +                    (FadtPmInfoTable[i].RegisterNum * Pm1RegisterByteWidth),
> +                "PmRegisters");
>          }
>      }
>  }
> diff --git a/src/acpica/source/components/tables/tbinstal.c b/src/acpica/source/components/tables/tbinstal.c
> index 00fd2a2..5e112dc 100644
> --- a/src/acpica/source/components/tables/tbinstal.c
> +++ b/src/acpica/source/components/tables/tbinstal.c
> @@ -229,8 +229,9 @@ AcpiTbAddTable (
>         (!ACPI_COMPARE_NAME (TableDesc->Pointer->Signature, ACPI_SIG_SSDT)) &&
>         (ACPI_STRNCMP (TableDesc->Pointer->Signature, "OEM", 3)))
>      {
> -        ACPI_ERROR ((AE_INFO,
> -            "Table has invalid signature [%4.4s] (0x%8.8X), must be SSDT or OEMx",
> +        ACPI_BIOS_ERROR ((AE_INFO,
> +            "Table has invalid signature [%4.4s] (0x%8.8X), "
> +            "must be SSDT or OEMx",
>              AcpiUtValidAcpiName (*(UINT32 *) TableDesc->Pointer->Signature) ?
>                  TableDesc->Pointer->Signature : "????",
>              *(UINT32 *) TableDesc->Pointer->Signature));
> diff --git a/src/acpica/source/components/tables/tbutils.c b/src/acpica/source/components/tables/tbutils.c
> index 4ad777c..4f0b75d 100644
> --- a/src/acpica/source/components/tables/tbutils.c
> +++ b/src/acpica/source/components/tables/tbutils.c
> @@ -359,8 +359,9 @@ AcpiTbVerifyChecksum (
>
>      if (Checksum)
>      {
> -        ACPI_WARNING ((AE_INFO,
> -            "Incorrect checksum in table [%4.4s] - 0x%2.2X, should be 0x%2.2X",
> +        ACPI_BIOS_WARNING ((AE_INFO,
> +            "Incorrect checksum in table [%4.4s] - 0x%2.2X, "
> +            "should be 0x%2.2X",
>              Table->Signature, Table->Checksum,
>              (UINT8) (Table->Checksum - Checksum)));
>
> @@ -428,8 +429,9 @@ AcpiTbCheckDsdtHeader (
>      if (AcpiGbl_OriginalDsdtHeader.Length != AcpiGbl_DSDT->Length ||
>          AcpiGbl_OriginalDsdtHeader.Checksum != AcpiGbl_DSDT->Checksum)
>      {
> -        ACPI_ERROR ((AE_INFO,
> -            "The DSDT has been corrupted or replaced - old, new headers below"));
> +        ACPI_BIOS_ERROR ((AE_INFO,
> +            "The DSDT has been corrupted or replaced - "
> +            "old, new headers below"));
>          AcpiTbPrintTableHeader (0, &AcpiGbl_OriginalDsdtHeader);
>          AcpiTbPrintTableHeader (0, AcpiGbl_DSDT);
>
> @@ -537,7 +539,7 @@ AcpiTbInstallTable (
>      if (Signature &&
>          !ACPI_COMPARE_NAME (Table->Signature, Signature))
>      {
> -        ACPI_ERROR ((AE_INFO,
> +        ACPI_BIOS_ERROR ((AE_INFO,
>              "Invalid signature 0x%X for ACPI table, expected [%s]",
>              *ACPI_CAST_PTR (UINT32, Table->Signature), Signature));
>          goto UnmapAndExit;
> @@ -656,7 +658,7 @@ AcpiTbGetRootTableEntry (
>          {
>              /* Will truncate 64-bit address to 32 bits, issue warning */
>
> -            ACPI_WARNING ((AE_INFO,
> +            ACPI_BIOS_WARNING ((AE_INFO,
>                  "64-bit Physical Address in XSDT is too large (0x%8.8X%8.8X),"
>                  " truncating",
>                  ACPI_FORMAT_UINT64 (Address64)));
> @@ -758,7 +760,8 @@ AcpiTbParseRootTable (
>
>      if (Length < sizeof (ACPI_TABLE_HEADER))
>      {
> -        ACPI_ERROR ((AE_INFO, "Invalid length 0x%X in RSDT/XSDT", Length));
> +        ACPI_BIOS_ERROR ((AE_INFO,
> +            "Invalid table length 0x%X in RSDT/XSDT", Length));
>          return_ACPI_STATUS (AE_INVALID_TABLE_LENGTH);
>      }
>
> diff --git a/src/acpica/source/components/tables/tbxface.c b/src/acpica/source/components/tables/tbxface.c
> index 860dc2e..b91cce1 100644
> --- a/src/acpica/source/components/tables/tbxface.c
> +++ b/src/acpica/source/components/tables/tbxface.c
> @@ -1,7 +1,6 @@
>  /******************************************************************************
>   *
> - * Module Name: tbxface - Public interfaces to the ACPI subsystem
> - *                         ACPI table oriented interfaces
> + * Module Name: tbxface - ACPI table oriented external interfaces
>   *
>   *****************************************************************************/
>
> @@ -118,18 +117,11 @@
>
>  #include "acpi.h"
>  #include "accommon.h"
> -#include "acnamesp.h"
>  #include "actables.h"
>
>  #define _COMPONENT          ACPI_TABLES
>          ACPI_MODULE_NAME    ("tbxface")
>
> -/* Local prototypes */
> -
> -static ACPI_STATUS
> -AcpiTbLoadNamespace (
> -    void);
> -
>
>  /*******************************************************************************
>   *
> @@ -530,155 +522,6 @@ ACPI_EXPORT_SYMBOL (AcpiGetTableByIndex)
>
>  /*******************************************************************************
>   *
> - * FUNCTION:    AcpiTbLoadNamespace
> - *
> - * PARAMETERS:  None
> - *
> - * RETURN:      Status
> - *
> - * DESCRIPTION: Load the namespace from the DSDT and all SSDTs/PSDTs found in
> - *              the RSDT/XSDT.
> - *
> - ******************************************************************************/
> -
> -static ACPI_STATUS
> -AcpiTbLoadNamespace (
> -    void)
> -{
> -    ACPI_STATUS             Status;
> -    UINT32                  i;
> -    ACPI_TABLE_HEADER       *NewDsdt;
> -
> -
> -    ACPI_FUNCTION_TRACE (TbLoadNamespace);
> -
> -
> -    (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES);
> -
> -    /*
> -     * Load the namespace. The DSDT is required, but any SSDT and
> -     * PSDT tables are optional. Verify the DSDT.
> -     */
> -    if (!AcpiGbl_RootTableList.CurrentTableCount ||
> -        !ACPI_COMPARE_NAME (
> -            &(AcpiGbl_RootTableList.Tables[ACPI_TABLE_INDEX_DSDT].Signature),
> -            ACPI_SIG_DSDT) ||
> -         ACPI_FAILURE (AcpiTbVerifyTable (
> -            &AcpiGbl_RootTableList.Tables[ACPI_TABLE_INDEX_DSDT])))
> -    {
> -        Status = AE_NO_ACPI_TABLES;
> -        goto UnlockAndExit;
> -    }
> -
> -    /*
> -     * Save the DSDT pointer for simple access. This is the mapped memory
> -     * address. We must take care here because the address of the .Tables
> -     * array can change dynamically as tables are loaded at run-time. Note:
> -     * .Pointer field is not validated until after call to AcpiTbVerifyTable.
> -     */
> -    AcpiGbl_DSDT = AcpiGbl_RootTableList.Tables[ACPI_TABLE_INDEX_DSDT].Pointer;
> -
> -    /*
> -     * Optionally copy the entire DSDT to local memory (instead of simply
> -     * mapping it.) There are some BIOSs that corrupt or replace the original
> -     * DSDT, creating the need for this option. Default is FALSE, do not copy
> -     * the DSDT.
> -     */
> -    if (AcpiGbl_CopyDsdtLocally)
> -    {
> -        NewDsdt = AcpiTbCopyDsdt (ACPI_TABLE_INDEX_DSDT);
> -        if (NewDsdt)
> -        {
> -            AcpiGbl_DSDT = NewDsdt;
> -        }
> -    }
> -
> -    /*
> -     * Save the original DSDT header for detection of table corruption
> -     * and/or replacement of the DSDT from outside the OS.
> -     */
> -    ACPI_MEMCPY (&AcpiGbl_OriginalDsdtHeader, AcpiGbl_DSDT,
> -        sizeof (ACPI_TABLE_HEADER));
> -
> -    (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES);
> -
> -    /* Load and parse tables */
> -
> -    Status = AcpiNsLoadTable (ACPI_TABLE_INDEX_DSDT, AcpiGbl_RootNode);
> -    if (ACPI_FAILURE (Status))
> -    {
> -        return_ACPI_STATUS (Status);
> -    }
> -
> -    /* Load any SSDT or PSDT tables. Note: Loop leaves tables locked */
> -
> -    (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES);
> -    for (i = 0; i < AcpiGbl_RootTableList.CurrentTableCount; ++i)
> -    {
> -        if ((!ACPI_COMPARE_NAME (&(AcpiGbl_RootTableList.Tables[i].Signature),
> -                    ACPI_SIG_SSDT) &&
> -             !ACPI_COMPARE_NAME (&(AcpiGbl_RootTableList.Tables[i].Signature),
> -                    ACPI_SIG_PSDT)) ||
> -             ACPI_FAILURE (AcpiTbVerifyTable (
> -                &AcpiGbl_RootTableList.Tables[i])))
> -        {
> -            continue;
> -        }
> -
> -        /* Ignore errors while loading tables, get as many as possible */
> -
> -        (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES);
> -        (void) AcpiNsLoadTable (i, AcpiGbl_RootNode);
> -        (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES);
> -    }
> -
> -    ACPI_DEBUG_PRINT ((ACPI_DB_INIT, "ACPI Tables successfully acquired\n"));
> -
> -UnlockAndExit:
> -    (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES);
> -    return_ACPI_STATUS (Status);
> -}
> -
> -
> -/*******************************************************************************
> - *
> - * FUNCTION:    AcpiLoadTables
> - *
> - * PARAMETERS:  None
> - *
> - * RETURN:      Status
> - *
> - * DESCRIPTION: Load the ACPI tables from the RSDT/XSDT
> - *
> - ******************************************************************************/
> -
> -ACPI_STATUS
> -AcpiLoadTables (
> -    void)
> -{
> -    ACPI_STATUS             Status;
> -
> -
> -    ACPI_FUNCTION_TRACE (AcpiLoadTables);
> -
> -
> -    /* Load the namespace from the tables */
> -
> -    Status = AcpiTbLoadNamespace ();
> -    if (ACPI_FAILURE (Status))
> -    {
> -        ACPI_EXCEPTION ((AE_INFO, Status,
> -            "While loading namespace from ACPI tables"));
> -    }
> -
> -    return_ACPI_STATUS (Status);
> -}
> -
> -ACPI_EXPORT_SYMBOL (AcpiLoadTables)
> -
> -
> -/*******************************************************************************
> - *
>   * FUNCTION:    AcpiInstallTableHandler
>   *
>   * PARAMETERS:  Handler         - Table event handler
> diff --git a/src/acpica/source/components/tables/tbxfroot.c b/src/acpica/source/components/tables/tbxfroot.c
> index e85c1fd..d00db5f 100644
> --- a/src/acpica/source/components/tables/tbxfroot.c
> +++ b/src/acpica/source/components/tables/tbxfroot.c
> @@ -306,7 +306,7 @@ AcpiFindRootPointer (
>
>      /* A valid RSDP was not found */
>
> -    ACPI_ERROR ((AE_INFO, "A valid RSDP was not found"));
> +    ACPI_BIOS_ERROR ((AE_INFO, "A valid RSDP was not found"));
>      return_ACPI_STATUS (AE_NOT_FOUND);
>  }
>
> diff --git a/src/acpica/source/components/utilities/utdecode.c b/src/acpica/source/components/utilities/utdecode.c
> index b36aa45..a88c581 100644
> --- a/src/acpica/source/components/utilities/utdecode.c
> +++ b/src/acpica/source/components/utilities/utdecode.c
> @@ -123,47 +123,6 @@
>          ACPI_MODULE_NAME    ("utdecode")
>
>
> -/*******************************************************************************
> - *
> - * FUNCTION:    AcpiFormatException
> - *
> - * PARAMETERS:  Status       - The ACPI_STATUS code to be formatted
> - *
> - * RETURN:      A string containing the exception text. A valid pointer is
> - *              always returned.
> - *
> - * DESCRIPTION: This function translates an ACPI exception into an ASCII string
> - *              It is here instead of utxface.c so it is always present.
> - *
> - ******************************************************************************/
> -
> -const char *
> -AcpiFormatException (
> -    ACPI_STATUS             Status)
> -{
> -    const char              *Exception = NULL;
> -
> -
> -    ACPI_FUNCTION_ENTRY ();
> -
> -
> -    Exception = AcpiUtValidateException (Status);
> -    if (!Exception)
> -    {
> -        /* Exception code was not recognized */
> -
> -        ACPI_ERROR ((AE_INFO,
> -            "Unknown exception code: 0x%8.8X", Status));
> -
> -        Exception = "UNKNOWN_STATUS_CODE";
> -    }
> -
> -    return (ACPI_CAST_PTR (const char, Exception));
> -}
> -
> -ACPI_EXPORT_SYMBOL (AcpiFormatException)
> -
> -
>  /*
>   * Properties of the ACPI Object Types, both internal and external.
>   * The table is indexed by values of ACPI_OBJECT_TYPE
> @@ -252,16 +211,17 @@ AcpiUtHexToAsciiChar (
>
>  const char        *AcpiGbl_RegionTypes[ACPI_NUM_PREDEFINED_REGIONS] =
>  {
> -    "SystemMemory",
> -    "SystemIO",
> -    "PCI_Config",
> -    "EmbeddedControl",
> -    "SMBus",
> -    "SystemCMOS",
> -    "PCIBARTarget",
> -    "IPMI",
> -    "GeneralPurposeIo",
> -    "GenericSerialBus"
> +    "SystemMemory",     /* 0x00 */
> +    "SystemIO",         /* 0x01 */
> +    "PCI_Config",       /* 0x02 */
> +    "EmbeddedControl",  /* 0x03 */
> +    "SMBus",            /* 0x04 */
> +    "SystemCMOS",       /* 0x05 */
> +    "PCIBARTarget",     /* 0x06 */
> +    "IPMI",             /* 0x07 */
> +    "GeneralPurposeIo", /* 0x08 */
> +    "GenericSerialBus", /* 0x09 */
> +    "PCC"               /* 0x0A */
>  };
>
>
> diff --git a/src/acpica/source/components/utilities/utdelete.c b/src/acpica/source/components/utilities/utdelete.c
> index 3130e6d..b64a585 100644
> --- a/src/acpica/source/components/utilities/utdelete.c
> +++ b/src/acpica/source/components/utilities/utdelete.c
> @@ -239,7 +239,7 @@ AcpiUtDeleteInternalObj (
>      case ACPI_TYPE_PROCESSOR:
>      case ACPI_TYPE_THERMAL:
>
> -        /* Walk the notify handler list for this object */
> +        /* Walk the address handler list for this object */
>
>          HandlerDesc = Object->CommonNotify.Handler;
>          while (HandlerDesc)
> @@ -595,6 +595,7 @@ AcpiUtUpdateObjectReference (
>      ACPI_STATUS             Status = AE_OK;
>      ACPI_GENERIC_STATE      *StateList = NULL;
>      ACPI_OPERAND_OBJECT     *NextObject = NULL;
> +    ACPI_OPERAND_OBJECT     *PrevObject;
>      ACPI_GENERIC_STATE      *State;
>      UINT32                  i;
>
> @@ -624,10 +625,20 @@ AcpiUtUpdateObjectReference (
>          case ACPI_TYPE_POWER:
>          case ACPI_TYPE_THERMAL:
>
> -            /* Update the notify objects for these types (if present) */
> -
> -            AcpiUtUpdateRefCount (Object->CommonNotify.SystemNotify, Action);
> -            AcpiUtUpdateRefCount (Object->CommonNotify.DeviceNotify, Action);
> +            /*
> +             * Update the notify objects for these types (if present)
> +             * Two lists, system and device notify handlers.
> +             */
> +            for (i = 0; i < ACPI_NUM_NOTIFY_TYPES; i++)
> +            {
> +                PrevObject = Object->CommonNotify.NotifyList[i];
> +                while (PrevObject)
> +                {
> +                    NextObject = PrevObject->Notify.Next[i];
> +                    AcpiUtUpdateRefCount (PrevObject, Action);
> +                    PrevObject = NextObject;
> +                }
> +            }
>              break;
>
>          case ACPI_TYPE_PACKAGE:
> diff --git a/src/acpica/source/components/utilities/utglobal.c b/src/acpica/source/components/utilities/utglobal.c
> index 8ebbaec..98b1e48 100644
> --- a/src/acpica/source/components/utilities/utglobal.c
> +++ b/src/acpica/source/components/utilities/utglobal.c
> @@ -283,8 +283,9 @@ ACPI_FIXED_EVENT_INFO       AcpiGbl_FixedEventInfo[ACPI_NUM_FIXED_EVENTS] =
>   *
>   * RETURN:      Status
>   *
> - * DESCRIPTION: Init ACPICA globals.  All globals that require specific
> - *              initialization should be initialized here!
> + * DESCRIPTION: Initialize ACPICA globals. All globals that require specific
> + *              initialization should be initialized here. This allows for
> + *              a warm restart.
>   *
>   ******************************************************************************/
>
> @@ -359,8 +360,8 @@ AcpiUtInitGlobals (
>
>      /* Global handlers */
>
> -    AcpiGbl_SystemNotify.Handler        = NULL;
> -    AcpiGbl_DeviceNotify.Handler        = NULL;
> +    AcpiGbl_GlobalNotify[0].Handler     = NULL;
> +    AcpiGbl_GlobalNotify[1].Handler     = NULL;
>      AcpiGbl_ExceptionHandler            = NULL;
>      AcpiGbl_InitHandler                 = NULL;
>      AcpiGbl_TableHandler                = NULL;
> diff --git a/src/acpica/source/components/utilities/utmisc.c b/src/acpica/source/components/utilities/utmisc.c
> index 44dd533..7318f68 100644
> --- a/src/acpica/source/components/utilities/utmisc.c
> +++ b/src/acpica/source/components/utilities/utmisc.c
> @@ -125,84 +125,41 @@
>          ACPI_MODULE_NAME    ("utmisc")
>
>
> +#if defined ACPI_ASL_COMPILER || defined ACPI_EXEC_APP
>  /*******************************************************************************
>   *
> - * FUNCTION:    AcpiUtValidateException
> + * FUNCTION:    UtConvertBackslashes
>   *
> - * PARAMETERS:  Status       - The ACPI_STATUS code to be formatted
> + * PARAMETERS:  Pathname        - File pathname string to be converted
>   *
> - * RETURN:      A string containing the exception text. NULL if exception is
> - *              not valid.
> + * RETURN:      Modifies the input Pathname
>   *
> - * DESCRIPTION: This function validates and translates an ACPI exception into
> - *              an ASCII string.
> + * DESCRIPTION: Convert all backslashes (0x5C) to forward slashes (0x2F) within
> + *              the entire input file pathname string.
>   *
>   ******************************************************************************/
>
> -const char *
> -AcpiUtValidateException (
> -    ACPI_STATUS             Status)
> +void
> +UtConvertBackslashes (
> +    char                    *Pathname)
>  {
> -    UINT32                  SubStatus;
> -    const char              *Exception = NULL;
> -
> -
> -    ACPI_FUNCTION_ENTRY ();
> -
>
> -    /*
> -     * Status is composed of two parts, a "type" and an actual code
> -     */
> -    SubStatus = (Status & ~AE_CODE_MASK);
> -
> -    switch (Status & AE_CODE_MASK)
> +    if (!Pathname)
>      {
> -    case AE_CODE_ENVIRONMENTAL:
> -
> -        if (SubStatus <= AE_CODE_ENV_MAX)
> -        {
> -            Exception = AcpiGbl_ExceptionNames_Env [SubStatus];
> -        }
> -        break;
> -
> -    case AE_CODE_PROGRAMMER:
> -
> -        if (SubStatus <= AE_CODE_PGM_MAX)
> -        {
> -            Exception = AcpiGbl_ExceptionNames_Pgm [SubStatus];
> -        }
> -        break;
> -
> -    case AE_CODE_ACPI_TABLES:
> -
> -        if (SubStatus <= AE_CODE_TBL_MAX)
> -        {
> -            Exception = AcpiGbl_ExceptionNames_Tbl [SubStatus];
> -        }
> -        break;
> -
> -    case AE_CODE_AML:
> -
> -        if (SubStatus <= AE_CODE_AML_MAX)
> -        {
> -            Exception = AcpiGbl_ExceptionNames_Aml [SubStatus];
> -        }
> -        break;
> -
> -    case AE_CODE_CONTROL:
> +        return;
> +    }
>
> -        if (SubStatus <= AE_CODE_CTRL_MAX)
> +    while (*Pathname)
> +    {
> +        if (*Pathname == '\\')
>          {
> -            Exception = AcpiGbl_ExceptionNames_Ctrl [SubStatus];
> +            *Pathname = '/';
>          }
> -        break;
>
> -    default:
> -        break;
> +        Pathname++;
>      }
> -
> -    return (ACPI_CAST_PTR (const char, Exception));
>  }
> +#endif
>
>
>  /*******************************************************************************
> @@ -1367,5 +1324,3 @@ AcpiUtWalkPackageTree (
>
>      return_ACPI_STATUS (AE_AML_INTERNAL);
>  }
> -
> -
> diff --git a/src/acpica/source/components/utilities/utobject.c b/src/acpica/source/components/utilities/utobject.c
> index ade2980..4914159 100644
> --- a/src/acpica/source/components/utilities/utobject.c
> +++ b/src/acpica/source/components/utilities/utobject.c
> @@ -438,7 +438,7 @@ AcpiUtCreateStringObject (
>   *
>   * RETURN:      TRUE if object is valid, FALSE otherwise
>   *
> - * DESCRIPTION: Validate a pointer to be an ACPI_OPERAND_OBJECT
> + * DESCRIPTION: Validate a pointer to be of type ACPI_OPERAND_OBJECT
>   *
>   ******************************************************************************/
>
> @@ -464,7 +464,7 @@ AcpiUtValidInternalObject (
>      {
>      case ACPI_DESC_TYPE_OPERAND:
>
> -        /* The object appears to be a valid ACPI_OPERAND_OBJECT  */
> +        /* The object appears to be a valid ACPI_OPERAND_OBJECT */
>
>          return (TRUE);
>
> @@ -545,7 +545,7 @@ AcpiUtDeleteObjectDesc (
>      ACPI_FUNCTION_TRACE_PTR (UtDeleteObjectDesc, Object);
>
>
> -    /* Object must be an ACPI_OPERAND_OBJECT  */
> +    /* Object must be of type ACPI_OPERAND_OBJECT */
>
>      if (ACPI_GET_DESCRIPTOR_TYPE (Object) != ACPI_DESC_TYPE_OPERAND)
>      {
> diff --git a/src/acpica/source/components/utilities/utresrc.c b/src/acpica/source/components/utilities/utresrc.c
> index 69df740..3835b47 100644
> --- a/src/acpica/source/components/utilities/utresrc.c
> +++ b/src/acpica/source/components/utilities/utresrc.c
> @@ -1,6 +1,6 @@
>  /*******************************************************************************
>   *
> - * Module Name: utresrc - Resource managment utilities
> + * Module Name: utresrc - Resource management utilities
>   *
>   ******************************************************************************/
>
> @@ -129,7 +129,7 @@
>
>  /*
>   * Strings used to decode resource descriptors.
> - * Used by both the disasssembler and the debugger resource dump routines
> + * Used by both the disassembler and the debugger resource dump routines
>   */
>  const char                      *AcpiGbl_BmDecode[] =
>  {
> diff --git a/src/acpica/source/components/utilities/uttrack.c b/src/acpica/source/components/utilities/uttrack.c
> index 7f2311a..3d73fc5 100644
> --- a/src/acpica/source/components/utilities/uttrack.c
> +++ b/src/acpica/source/components/utilities/uttrack.c
> @@ -705,21 +705,21 @@ AcpiUtDumpAllocations (
>                      switch (ACPI_GET_DESCRIPTOR_TYPE (Descriptor))
>                      {
>                      case ACPI_DESC_TYPE_OPERAND:
> -                        if (Element->Size == sizeof (ACPI_DESC_TYPE_OPERAND))
> +                        if (Element->Size == sizeof (ACPI_OPERAND_OBJECT))
>                          {
>                              DescriptorType = ACPI_DESC_TYPE_OPERAND;
>                          }
>                          break;
>
>                      case ACPI_DESC_TYPE_PARSER:
> -                        if (Element->Size == sizeof (ACPI_DESC_TYPE_PARSER))
> +                        if (Element->Size == sizeof (ACPI_PARSE_OBJECT))
>                          {
>                              DescriptorType = ACPI_DESC_TYPE_PARSER;
>                          }
>                          break;
>
>                      case ACPI_DESC_TYPE_NAMED:
> -                        if (Element->Size == sizeof (ACPI_DESC_TYPE_NAMED))
> +                        if (Element->Size == sizeof (ACPI_NAMESPACE_NODE))
>                          {
>                              DescriptorType = ACPI_DESC_TYPE_NAMED;
>                          }
> diff --git a/src/acpica/source/components/utilities/utxferror.c b/src/acpica/source/components/utilities/utxferror.c
> index 8a98a89..c0961a2 100644
> --- a/src/acpica/source/components/utilities/utxferror.c
> +++ b/src/acpica/source/components/utilities/utxferror.c
> @@ -159,6 +159,9 @@ extern FILE                 *AcpiGbl_OutputFile;
>  #define ACPI_MSG_WARNING        "ACPI Warning: "
>  #define ACPI_MSG_INFO           "ACPI: "
>
> +#define ACPI_MSG_BIOS_ERROR     "ACPI Firmware Error: "
> +#define ACPI_MSG_BIOS_WARNING   "ACPI Firmware Warning: "
> +
>  /*
>   * Common message suffix
>   */
> @@ -324,6 +327,84 @@ AcpiInfo (
>  ACPI_EXPORT_SYMBOL (AcpiInfo)
>
>
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiBiosError
> + *
> + * PARAMETERS:  ModuleName          - Caller's module name (for error output)
> + *              LineNumber          - Caller's line number (for error output)
> + *              Format              - Printf format string + additional args
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Print "ACPI Firmware Error" message with module/line/version
> + *              info
> + *
> + ******************************************************************************/
> +
> +void ACPI_INTERNAL_VAR_XFACE
> +AcpiBiosError (
> +    const char              *ModuleName,
> +    UINT32                  LineNumber,
> +    const char              *Format,
> +    ...)
> +{
> +    va_list                 ArgList;
> +
> +
> +    ACPI_MSG_REDIRECT_BEGIN;
> +    AcpiOsPrintf (ACPI_MSG_BIOS_ERROR);
> +
> +    va_start (ArgList, Format);
> +    AcpiOsVprintf (Format, ArgList);
> +    ACPI_MSG_SUFFIX;
> +    va_end (ArgList);
> +
> +    ACPI_MSG_REDIRECT_END;
> +}
> +
> +ACPI_EXPORT_SYMBOL (AcpiBiosError)
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiBiosWarning
> + *
> + * PARAMETERS:  ModuleName          - Caller's module name (for error output)
> + *              LineNumber          - Caller's line number (for error output)
> + *              Format              - Printf format string + additional args
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Print "ACPI Firmware Warning" message with module/line/version
> + *              info
> + *
> + ******************************************************************************/
> +
> +void ACPI_INTERNAL_VAR_XFACE
> +AcpiBiosWarning (
> +    const char              *ModuleName,
> +    UINT32                  LineNumber,
> +    const char              *Format,
> +    ...)
> +{
> +    va_list                 ArgList;
> +
> +
> +    ACPI_MSG_REDIRECT_BEGIN;
> +    AcpiOsPrintf (ACPI_MSG_BIOS_WARNING);
> +
> +    va_start (ArgList, Format);
> +    AcpiOsVprintf (Format, ArgList);
> +    ACPI_MSG_SUFFIX;
> +    va_end (ArgList);
> +
> +    ACPI_MSG_REDIRECT_END;
> +}
> +
> +ACPI_EXPORT_SYMBOL (AcpiBiosWarning)
> +
> +
>  /*
>   * The remainder of this module contains internal error functions that may
>   * be configured out.
> diff --git a/src/acpica/source/include/acdebug.h b/src/acpica/source/include/acdebug.h
> index 4a9ecf0..45cfb26 100644
> --- a/src/acpica/source/include/acdebug.h
> +++ b/src/acpica/source/include/acdebug.h
> @@ -184,8 +184,7 @@ AcpiDbDisplayTemplate (
>
>  void
>  AcpiDbUnloadAcpiTable (
> -    char                    *TableArg,
> -    char                    *InstanceArg);
> +    char                    *Name);
>
>  void
>  AcpiDbSendNotify (
> @@ -477,7 +476,7 @@ AcpiDbLocalNsLookup (
>      char                    *Name);
>
>  void
> -AcpiDbUInt32ToHexString (
> +AcpiDbUint32ToHexString (
>      UINT32                  Value,
>      char                    *Buffer);
>
> diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h
> index 9e8f2e3..056e8ea 100644
> --- a/src/acpica/source/include/acdisasm.h
> +++ b/src/acpica/source/include/acdisasm.h
> @@ -591,6 +591,14 @@ AcpiDmMethodFlags (
>      ACPI_PARSE_OBJECT       *Op);
>
>  void
> +AcpiDmPredefinedDescription (
> +    ACPI_PARSE_OBJECT       *Op);
> +
> +void
> +AcpiDmFieldPredefinedDescription (
> +    ACPI_PARSE_OBJECT       *Op);
> +
> +void
>  AcpiDmFieldFlags (
>      ACPI_PARSE_OBJECT       *Op);
>
> diff --git a/src/acpica/source/include/acexcep.h b/src/acpica/source/include/acexcep.h
> index 7129954..ccc6f71 100644
> --- a/src/acpica/source/include/acexcep.h
> +++ b/src/acpica/source/include/acexcep.h
> @@ -125,6 +125,7 @@
>  #define AE_CODE_ACPI_TABLES             0x2000
>  #define AE_CODE_AML                     0x3000
>  #define AE_CODE_CONTROL                 0x4000
> +#define AE_CODE_MAX                     0x4000
>  #define AE_CODE_MASK                    0xF000
>
>
> @@ -260,7 +261,7 @@
>
>  /* Exception strings for AcpiFormatException */
>
> -#ifdef DEFINE_ACPI_GLOBALS
> +#ifdef ACPI_DEFINE_EXCEPTION_TABLE
>
>  /*
>   * String versions of the exception codes above
> @@ -379,6 +380,6 @@ char const   *AcpiGbl_ExceptionNames_Ctrl[] =
>      "AE_CTRL_PARSE_PENDING"
>  };
>
> -#endif /* ACPI GLOBALS */
> +#endif /* EXCEPTION_TABLE */
>
>  #endif /* __ACEXCEP_H__ */
> diff --git a/src/acpica/source/include/acglobal.h b/src/acpica/source/include/acglobal.h
> index b27ee3a..b96b658 100644
> --- a/src/acpica/source/include/acglobal.h
> +++ b/src/acpica/source/include/acglobal.h
> @@ -326,8 +326,7 @@ ACPI_EXTERN ACPI_CACHE_T               *AcpiGbl_OperandCache;
>
>  /* Global handlers */
>
> -ACPI_EXTERN ACPI_OBJECT_NOTIFY_HANDLER  AcpiGbl_DeviceNotify;
> -ACPI_EXTERN ACPI_OBJECT_NOTIFY_HANDLER  AcpiGbl_SystemNotify;
> +ACPI_EXTERN ACPI_GLOBAL_NOTIFY_HANDLER  AcpiGbl_GlobalNotify[2];
>  ACPI_EXTERN ACPI_EXCEPTION_HANDLER      AcpiGbl_ExceptionHandler;
>  ACPI_EXTERN ACPI_INIT_HANDLER           AcpiGbl_InitHandler;
>  ACPI_EXTERN ACPI_TABLE_HANDLER          AcpiGbl_TableHandler;
> @@ -360,17 +359,8 @@ ACPI_EXTERN UINT8                       AcpiGbl_OsiData;
>  ACPI_EXTERN ACPI_INTERFACE_INFO        *AcpiGbl_SupportedInterfaces;
>  ACPI_EXTERN ACPI_ADDRESS_RANGE         *AcpiGbl_AddressRangeList[ACPI_ADDRESS_RANGE_MAX];
>
> -
>  #ifndef DEFINE_ACPI_GLOBALS
>
> -/* Exception codes */
> -
> -extern char const                       *AcpiGbl_ExceptionNames_Env[];
> -extern char const                       *AcpiGbl_ExceptionNames_Pgm[];
> -extern char const                       *AcpiGbl_ExceptionNames_Tbl[];
> -extern char const                       *AcpiGbl_ExceptionNames_Aml[];
> -extern char const                       *AcpiGbl_ExceptionNames_Ctrl[];
> -
>  /* Other miscellaneous */
>
>  extern BOOLEAN                          AcpiGbl_Shutdown;
> @@ -552,4 +542,14 @@ ACPI_EXTERN UINT32                      AcpiGbl_SizeOfAcpiObjects;
>
>  #endif /* ACPI_DEBUGGER */
>
> +
> +/*****************************************************************************
> + *
> + * Info/help support
> + *
> + ****************************************************************************/
> +
> +extern const AH_PREDEFINED_NAME     AslPredefinedInfo[];
> +
> +
>  #endif /* __ACGLOBAL_H__ */
> diff --git a/src/acpica/source/include/aclocal.h b/src/acpica/source/include/aclocal.h
> index f9065af..00d933e 100644
> --- a/src/acpica/source/include/aclocal.h
> +++ b/src/acpica/source/include/aclocal.h
> @@ -534,6 +534,15 @@ typedef struct acpi_gpe_handler_info
>
>  } ACPI_GPE_HANDLER_INFO;
>
> +/* Notify info for implicit notify, multiple device objects */
> +
> +typedef struct acpi_gpe_notify_info
> +{
> +    ACPI_NAMESPACE_NODE             *DeviceNode;    /* Device to be notified */
> +    struct acpi_gpe_notify_info     *Next;
> +
> +} ACPI_GPE_NOTIFY_INFO;
> +
>  /*
>   * GPE dispatch info. At any time, the GPE can have at most one type
>   * of dispatch - Method, Handler, or Implicit Notify.
> @@ -541,8 +550,8 @@ typedef struct acpi_gpe_handler_info
>  typedef union acpi_gpe_dispatch_info
>  {
>      ACPI_NAMESPACE_NODE             *MethodNode;    /* Method node for this GPE level */
> -    struct acpi_gpe_handler_info    *Handler;       /* Installed GPE handler */
> -    ACPI_NAMESPACE_NODE             *DeviceNode;    /* Parent _PRW device for implicit notify */
> +    ACPI_GPE_HANDLER_INFO           *Handler;       /* Installed GPE handler */
> +    ACPI_GPE_NOTIFY_INFO            *NotifyList;    /* List of _PRW devices for implicit notifies */
>
>  } ACPI_GPE_DISPATCH_INFO;
>
> @@ -552,7 +561,7 @@ typedef union acpi_gpe_dispatch_info
>   */
>  typedef struct acpi_gpe_event_info
>  {
> -    union acpi_gpe_dispatch_info    Dispatch;       /* Either Method or Handler */
> +    union acpi_gpe_dispatch_info    Dispatch;       /* Either Method, Handler, or NotifyList */
>      struct acpi_gpe_register_info   *RegisterInfo;  /* Backpointer to register info */
>      UINT8                           Flags;          /* Misc info about this GPE */
>      UINT8                           GpeNumber;      /* This GPE */
> @@ -788,6 +797,15 @@ ACPI_STATUS (*ACPI_PARSE_UPWARDS) (
>      struct acpi_walk_state          *WalkState);
>
>
> +/* Global handlers for AML Notifies */
> +
> +typedef struct acpi_global_notify_handler
> +{
> +    ACPI_NOTIFY_HANDLER             Handler;
> +    void                            *Context;
> +
> +} ACPI_GLOBAL_NOTIFY_HANDLER;
> +
>  /*
>   * Notify info - used to pass info to the deferred notify
>   * handler/dispatcher.
> @@ -795,8 +813,10 @@ ACPI_STATUS (*ACPI_PARSE_UPWARDS) (
>  typedef struct acpi_notify_info
>  {
>      ACPI_STATE_COMMON
> +    UINT8                           HandlerListId;
>      ACPI_NAMESPACE_NODE             *Node;
> -    union acpi_operand_object       *HandlerObj;
> +    union acpi_operand_object       *HandlerListHead;
> +    ACPI_GLOBAL_NOTIFY_HANDLER      *Global;
>
>  } ACPI_NOTIFY_INFO;
>
> @@ -1021,6 +1041,7 @@ typedef struct acpi_parse_state
>  #define ACPI_PARSEOP_IGNORE             0x01
>  #define ACPI_PARSEOP_PARAMLIST          0x02
>  #define ACPI_PARSEOP_EMPTY_TERMLIST     0x04
> +#define ACPI_PARSEOP_PREDEF_CHECKED     0x08
>  #define ACPI_PARSEOP_SPECIAL            0x10
>
>
> @@ -1372,4 +1393,20 @@ typedef struct acpi_debug_mem_block
>  #define ACPI_NUM_MEM_LISTS              2
>
>
> +/*****************************************************************************
> + *
> + * Info/help support
> + *
> + ****************************************************************************/
> +
> +typedef struct ah_predefined_name
> +{
> +    char            *Name;
> +    char            *Description;
> +#ifndef ACPI_ASL_COMPILER
> +    char            *Action;
> +#endif
> +
> +} AH_PREDEFINED_NAME;
> +
>  #endif /* __ACLOCAL_H__ */
> diff --git a/src/acpica/source/include/acmacros.h b/src/acpica/source/include/acmacros.h
> index 5451d84..3cf0ac0 100644
> --- a/src/acpica/source/include/acmacros.h
> +++ b/src/acpica/source/include/acmacros.h
> @@ -346,8 +346,8 @@
>  #define ACPI_INSERT_BITS(Target, Mask, Source)          Target = ((Target & (~(Mask))) | (Source & Mask))
>
>  /*
> - * An ACPI_NAMESPACE_NODE can appear in some contexts
> - * where a pointer to an ACPI_OPERAND_OBJECT can also
> + * An object of type ACPI_NAMESPACE_NODE can appear in some contexts
> + * where a pointer to an object of type ACPI_OPERAND_OBJECT can also
>   * appear. This macro is used to distinguish them.
>   *
>   * The "Descriptor" field is the first field in both structures.
> diff --git a/src/acpica/source/include/acobject.h b/src/acpica/source/include/acobject.h
> index 009232a..9014d4f 100644
> --- a/src/acpica/source/include/acobject.h
> +++ b/src/acpica/source/include/acobject.h
> @@ -166,7 +166,7 @@
>
>  #define AOPOBJ_AML_CONSTANT         0x01    /* Integer is an AML constant */
>  #define AOPOBJ_STATIC_POINTER       0x02    /* Data is part of an ACPI table, don't delete */
> -#define AOPOBJ_DATA_VALID           0x04    /* Object is intialized and data is valid */
> +#define AOPOBJ_DATA_VALID           0x04    /* Object is initialized and data is valid */
>  #define AOPOBJ_OBJECT_INITIALIZED   0x08    /* Region is initialized, _REG was run */
>  #define AOPOBJ_SETUP_COMPLETE       0x10    /* Region setup is complete */
>  #define AOPOBJ_INVALID              0x20    /* Host OS won't allow a Region address */
> @@ -195,8 +195,8 @@ typedef struct acpi_object_integer
>
>
>  /*
> - * Note: The String and Buffer object must be identical through the Pointer
> - * and length elements.  There is code that depends on this.
> + * Note: The String and Buffer object must be identical through the
> + * pointer and length elements. There is code that depends on this.
>   *
>   * Fields common to both Strings and Buffers
>   */
> @@ -318,8 +318,7 @@ typedef struct acpi_object_method
>   * Common fields for objects that support ASL notifications
>   */
>  #define ACPI_COMMON_NOTIFY_INFO \
> -    union acpi_operand_object       *SystemNotify;      /* Handler for system notifies */\
> -    union acpi_operand_object       *DeviceNotify;      /* Handler for driver notifies */\
> +    union acpi_operand_object       *NotifyList[2];     /* Handlers for system/device notifies */\
>      union acpi_operand_object       *Handler;           /* Handler for Address space */
>
>
> @@ -461,8 +460,10 @@ typedef struct acpi_object_notify_handler
>  {
>      ACPI_OBJECT_COMMON_HEADER
>      ACPI_NAMESPACE_NODE             *Node;              /* Parent device */
> -    ACPI_NOTIFY_HANDLER             Handler;
> +    UINT32                          HandlerType;        /* Type: Device/System/Both */
> +    ACPI_NOTIFY_HANDLER             Handler;            /* Handler address */
>      void                            *Context;
> +    union acpi_operand_object       *Next[2];           /* Device and System handler lists */
>
>  } ACPI_OBJECT_NOTIFY_HANDLER;
>
> @@ -476,7 +477,7 @@ typedef struct acpi_object_addr_handler
>      ACPI_NAMESPACE_NODE             *Node;              /* Parent device */
>      void                            *Context;
>      ACPI_ADR_SPACE_SETUP            Setup;
> -    union acpi_operand_object       *RegionList;        /* regions using this handler */
> +    union acpi_operand_object       *RegionList;        /* Regions using this handler */
>      union acpi_operand_object       *Next;
>
>  } ACPI_OBJECT_ADDR_HANDLER;
> diff --git a/src/acpica/source/include/acoutput.h b/src/acpica/source/include/acoutput.h
> index 12f7851..cbdbd8f 100644
> --- a/src/acpica/source/include/acoutput.h
> +++ b/src/acpica/source/include/acoutput.h
> @@ -289,6 +289,8 @@
>  #define ACPI_WARNING(plist)             AcpiWarning plist
>  #define ACPI_EXCEPTION(plist)           AcpiException plist
>  #define ACPI_ERROR(plist)               AcpiError plist
> +#define ACPI_BIOS_WARNING(plist)        AcpiBiosWarning plist
> +#define ACPI_BIOS_ERROR(plist)          AcpiBiosError plist
>  #define ACPI_DEBUG_OBJECT(obj,l,i)      AcpiExDoDebugObject(obj,l,i)
>
>  #else
> @@ -299,6 +301,8 @@
>  #define ACPI_WARNING(plist)
>  #define ACPI_EXCEPTION(plist)
>  #define ACPI_ERROR(plist)
> +#define ACPI_BIOS_WARNING(plist)
> +#define ACPI_BIOS_ERROR(plist)
>  #define ACPI_DEBUG_OBJECT(obj,l,i)
>
>  #endif /* ACPI_NO_ERROR_MESSAGES */
> diff --git a/src/acpica/source/include/acpiosxf.h b/src/acpica/source/include/acpiosxf.h
> index d6d205f..48d8aa4 100644
> --- a/src/acpica/source/include/acpiosxf.h
> +++ b/src/acpica/source/include/acpiosxf.h
> @@ -348,7 +348,7 @@ AcpiOsExecute (
>
>  void
>  AcpiOsWaitEventsComplete (
> -    void                    *Context);
> +    void);
>
>  void
>  AcpiOsSleep (
> diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
> index 2d4a5f8..036d817 100644
> --- a/src/acpica/source/include/acpixf.h
> +++ b/src/acpica/source/include/acpixf.h
> @@ -120,7 +120,7 @@
>
>  /* Current ACPICA subsystem version in YYYYMMDD format */
>
> -#define ACPI_CA_VERSION                 0x20120320
> +#define ACPI_CA_VERSION                 0x20120711
>
>  #include "acconfig.h"
>  #include "actypes.h"
> @@ -273,6 +273,22 @@ AcpiFree (
>
>
>  /*
> + * ACPI table load/unload interfaces
> + */
> +ACPI_STATUS
> +AcpiLoadTable (
> +    ACPI_TABLE_HEADER       *Table);
> +
> +ACPI_STATUS
> +AcpiUnloadParentTable (
> +    ACPI_HANDLE             Object);
> +
> +ACPI_STATUS
> +AcpiLoadTables (
> +    void);
> +
> +
> +/*
>   * ACPI table manipulation interfaces
>   */
>  ACPI_STATUS
> @@ -284,10 +300,6 @@ AcpiFindRootPointer (
>      ACPI_SIZE               *RsdpAddress);
>
>  ACPI_STATUS
> -AcpiLoadTables (
> -    void);
> -
> -ACPI_STATUS
>  AcpiGetTableHeader (
>      ACPI_STRING             Signature,
>      UINT32                  Instance,
> @@ -829,6 +841,20 @@ AcpiInfo (
>      const char              *Format,
>      ...) ACPI_PRINTF_LIKE(3);
>
> +void ACPI_INTERNAL_VAR_XFACE
> +AcpiBiosError (
> +    const char              *ModuleName,
> +    UINT32                  LineNumber,
> +    const char              *Format,
> +    ...) ACPI_PRINTF_LIKE(3);
> +
> +void ACPI_INTERNAL_VAR_XFACE
> +AcpiBiosWarning (
> +    const char              *ModuleName,
> +    UINT32                  LineNumber,
> +    const char              *Format,
> +    ...) ACPI_PRINTF_LIKE(3);
> +
>
>  /*
>   * Debug output
> diff --git a/src/acpica/source/include/acpredef.h b/src/acpica/source/include/acpredef.h
> index 82a1cb3..8da4836 100644
> --- a/src/acpica/source/include/acpredef.h
> +++ b/src/acpica/source/include/acpredef.h
> @@ -584,14 +584,14 @@ static const ACPI_PREDEFINED_INFO     PredefinedNames[] =
>      {{"_TMP", 0, ACPI_RTYPE_INTEGER}},
>      {{"_TPC", 0, ACPI_RTYPE_INTEGER}},
>      {{"_TPT", 1, 0}},
> -    {{"_TRT", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Pkgs) each 2Ref/6Int */
> +    {{"_TRT", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Pkgs) each 2 Ref/6 Int */
>                      {{{ACPI_PTYPE2, ACPI_RTYPE_REFERENCE, 2, ACPI_RTYPE_INTEGER}, 6, 0}},
>
> -    {{"_TSD", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Pkgs) each 5Int with count */
> +    {{"_TSD", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Pkgs) each 5 Int with count */
>                      {{{ACPI_PTYPE2_COUNT,ACPI_RTYPE_INTEGER, 5,0}, 0,0}},
>
>      {{"_TSP", 0, ACPI_RTYPE_INTEGER}},
> -    {{"_TSS", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Pkgs) each 5Int */
> +    {{"_TSS", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Pkgs) each 5 Int */
>                      {{{ACPI_PTYPE2, ACPI_RTYPE_INTEGER, 5,0}, 0,0}},
>
>      {{"_TST", 0, ACPI_RTYPE_INTEGER}},
> diff --git a/src/acpica/source/include/actbl1.h b/src/acpica/source/include/actbl1.h
> index 6e6edcc..c046b05 100644
> --- a/src/acpica/source/include/actbl1.h
> +++ b/src/acpica/source/include/actbl1.h
> @@ -202,7 +202,7 @@ typedef struct acpi_table_bert
>  {
>      ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
>      UINT32                  RegionLength;       /* Length of the boot error region */
> -    UINT64                  Address;            /* Physical addresss of the error region */
> +    UINT64                  Address;            /* Physical address of the error region */
>
>  } ACPI_TABLE_BERT;
>
> diff --git a/src/acpica/source/include/actypes.h b/src/acpica/source/include/actypes.h
> index ff90c38..5d01e32 100644
> --- a/src/acpica/source/include/actypes.h
> +++ b/src/acpica/source/include/actypes.h
> @@ -780,10 +780,14 @@ typedef UINT32                          ACPI_EVENT_STATUS;
>  #define ACPI_DEVICE_NOTIFY              0x2
>  #define ACPI_ALL_NOTIFY                 (ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY)
>  #define ACPI_MAX_NOTIFY_HANDLER_TYPE    0x3
> +#define ACPI_NUM_NOTIFY_TYPES           2
>
>  #define ACPI_MAX_SYS_NOTIFY             0x7F
>  #define ACPI_MAX_DEVICE_SPECIFIC_NOTIFY 0xBF
>
> +#define ACPI_SYSTEM_HANDLER_LIST        0 /* Used as index, must be SYSTEM_NOTIFY -1 */
> +#define ACPI_DEVICE_HANDLER_LIST        1 /* Used as index, must be DEVICE_NOTIFY -1 */
> +
>
>  /* Address Space (Operation Region) Types */
>
> @@ -799,8 +803,9 @@ typedef UINT8                           ACPI_ADR_SPACE_TYPE;
>  #define ACPI_ADR_SPACE_IPMI             (ACPI_ADR_SPACE_TYPE) 7
>  #define ACPI_ADR_SPACE_GPIO             (ACPI_ADR_SPACE_TYPE) 8
>  #define ACPI_ADR_SPACE_GSBUS            (ACPI_ADR_SPACE_TYPE) 9
> +#define ACPI_ADR_SPACE_PLATFORM_COMM    (ACPI_ADR_SPACE_TYPE) 10
>
> -#define ACPI_NUM_PREDEFINED_REGIONS     10
> +#define ACPI_NUM_PREDEFINED_REGIONS     11
>
>  /*
>   * Special Address Spaces
> diff --git a/src/acpica/source/include/acutils.h b/src/acpica/source/include/acutils.h
> index 5c21320..50b5b99 100644
> --- a/src/acpica/source/include/acutils.h
> +++ b/src/acpica/source/include/acutils.h
> @@ -501,7 +501,7 @@ AcpiUtDumpBuffer (
>      UINT8                   *Buffer,
>      UINT32                  Count,
>      UINT32                  Display,
> -    UINT32                  componentId);
> +    UINT32                  ComponentId);
>
>  void
>  AcpiUtDumpBuffer2 (
> @@ -775,6 +775,10 @@ AcpiUtShortDivide (
>  /*
>   * utmisc
>   */
> +void
> +UtConvertBackslashes (
> +    char                    *Pathname);
> +
>  const char *
>  AcpiUtValidateException (
>      ACPI_STATUS             Status);
> diff --git a/src/acpica/source/include/platform/acenv.h b/src/acpica/source/include/platform/acenv.h
> index 342615f..1f3596a 100644
> --- a/src/acpica/source/include/platform/acenv.h
> +++ b/src/acpica/source/include/platform/acenv.h
> @@ -180,9 +180,9 @@
>  #endif
>
>  #ifdef ACPI_HELP_APP
> -#define ACPI_DEBUG_OUTPUT
>  #define ACPI_APPLICATION
>  #define ACPI_SINGLE_THREADED
> +#define ACPI_NO_ERROR_MESSAGES
>  #endif
>
>  /* Linkable ACPICA library */
> @@ -252,6 +252,9 @@
>  #elif defined(_AED_EFI)
>  #include "acefi.h"
>
> +#elif defined(__HAIKU__)
> +#include "achaiku.h"
> +
>  #else
>
>  /* Unknown environment */
> diff --git a/src/acpica/source/os_specific/service_layers/osunixxf.c b/src/acpica/source/os_specific/service_layers/osunixxf.c
> index d5e3af9..840328b 100644
> --- a/src/acpica/source/os_specific/service_layers/osunixxf.c
> +++ b/src/acpica/source/os_specific/service_layers/osunixxf.c
> @@ -425,7 +425,7 @@ AcpiOsGetLine (
>      UINT32                  BufferLength,
>      UINT32                  *BytesRead)
>  {
> -    UINT8                   Temp;
> +    int                     Temp;
>      UINT32                  i;
>
>
> @@ -436,13 +436,17 @@ AcpiOsGetLine (
>              return (AE_BUFFER_OVERFLOW);
>          }
>
> -        scanf ("%1c", &Temp);
> +        if ((Temp = getchar ()) == EOF)
> +        {
> +            return (AE_ERROR);
> +        }
> +
>          if (!Temp || Temp == '\n')
>          {
>              break;
>          }
>
> -        Buffer [i] = Temp;
> +        Buffer [i] = (char) Temp;
>      }
>
>      /* Null terminate the buffer */
> @@ -1313,3 +1317,24 @@ AcpiOsExecute (
>  }
>
>  #endif /* ACPI_SINGLE_THREADED */
> +
> +
> +/******************************************************************************
> + *
> + * FUNCTION:    AcpiOsWaitEventsComplete
> + *
> + * PARAMETERS:  None
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Wait for all asynchronous events to complete. This
> + *              implementation does nothing.
> + *
> + *****************************************************************************/
> +
> +void
> +AcpiOsWaitEventsComplete (
> +    void)
> +{
> +    return;
> +}
> diff --git a/src/acpica/source/tools/acpiexec/aecommon.h b/src/acpica/source/tools/acpiexec/aecommon.h
> index 01615b1..0f5f789 100644
> --- a/src/acpica/source/tools/acpiexec/aecommon.h
> +++ b/src/acpica/source/tools/acpiexec/aecommon.h
> @@ -140,6 +140,7 @@ extern BOOLEAN              AcpiGbl_IgnoreErrors;
>  extern UINT8                AcpiGbl_RegionFillValue;
>  extern UINT8                AcpiGbl_UseHwReducedFadt;
>  extern BOOLEAN              AcpiGbl_DisplayRegionAccess;
> +extern BOOLEAN              AcpiGbl_DoInterfaceTests;
>
>  /* Check for unexpected exceptions */
>
> diff --git a/src/acpica/source/tools/acpiexec/aehandlers.c b/src/acpica/source/tools/acpiexec/aehandlers.c
> index ccf6966..ba7e5a1 100644
> --- a/src/acpica/source/tools/acpiexec/aehandlers.c
> +++ b/src/acpica/source/tools/acpiexec/aehandlers.c
> @@ -121,12 +121,24 @@
>  /* Local prototypes */
>
>  static void
> -AeNotifyHandler (
> +AeNotifyHandler1 (
>      ACPI_HANDLE             Device,
>      UINT32                  Value,
>      void                    *Context);
>
>  static void
> +AeNotifyHandler2 (
> +    ACPI_HANDLE             Device,
> +    UINT32                  Value,
> +    void                    *Context);
> +
> +static void
> +AeCommonNotifyHandler (
> +    ACPI_HANDLE             Device,
> +    UINT32                  Value,
> +    UINT32                  HandlerId);
> +
> +static void
>  AeDeviceNotifyHandler (
>      ACPI_HANDLE             Device,
>      UINT32                  Value,
> @@ -258,24 +270,51 @@ AeCtrlCHandler (
>
>  /******************************************************************************
>   *
> - * FUNCTION:    AeNotifyHandler
> + * FUNCTION:    AeNotifyHandler(s)
>   *
>   * PARAMETERS:  Standard notify handler parameters
>   *
>   * RETURN:      Status
>   *
> - * DESCRIPTION: System notify handler for AcpiExec utility.  Used by the ASL
> + * DESCRIPTION: Notify handlers for AcpiExec utility. Used by the ASL
>   *              test suite(s) to communicate errors and other information to
> - *              this utility via the Notify() operator.
> + *              this utility via the Notify() operator. Tests notify handling
> + *              and multiple notify handler support.
>   *
>   *****************************************************************************/
>
>  static void
> -AeNotifyHandler (
> -    ACPI_HANDLE                 Device,
> -    UINT32                      Value,
> -    void                        *Context)
> +AeNotifyHandler1 (
> +    ACPI_HANDLE             Device,
> +    UINT32                  Value,
> +    void                    *Context)
> +{
> +    AeCommonNotifyHandler (Device, Value, 1);
> +}
> +
> +static void
> +AeNotifyHandler2 (
> +    ACPI_HANDLE             Device,
> +    UINT32                  Value,
> +    void                    *Context)
>  {
> +    AeCommonNotifyHandler (Device, Value, 2);
> +}
> +
> +static void
> +AeCommonNotifyHandler (
> +    ACPI_HANDLE             Device,
> +    UINT32                  Value,
> +    UINT32                  HandlerId)
> +{
> +    char                    *Type;
> +
> +
> +    Type = "Device";
> +    if (Value <= ACPI_MAX_SYS_NOTIFY)
> +    {
> +        Type = "System";
> +    }
>
>      switch (Value)
>      {
> @@ -309,12 +348,13 @@ AeNotifyHandler (
>  #endif
>
>      default:
> -        printf ("[AcpiExec] Received a System Notify on [%4.4s] %p Value 0x%2.2X (%s)\n",
> -            AcpiUtGetNodeName (Device), Device, Value,
> +        printf ("[AcpiExec] Handler %u: Received a %s Notify on [%4.4s] %p Value 0x%2.2X (%s)\n",
> +            HandlerId, Type, AcpiUtGetNodeName (Device), Device, Value,
>              AcpiUtGetNotifyName (Value));
>          if (AcpiGbl_DebugFile)
>          {
> -            AcpiOsPrintf ("[AcpiExec] Received a system notify, Value 0x%2.2X\n", Value);
> +            AcpiOsPrintf ("[AcpiExec] Handler %u: Received a %s notify, Value 0x%2.2X\n",
> +                HandlerId, Type, Value);
>          }
>
>          (void) AcpiEvaluateObject (Device, "_NOT", NULL, NULL);
> @@ -325,6 +365,39 @@ AeNotifyHandler (
>
>  /******************************************************************************
>   *
> + * FUNCTION:    AeSystemNotifyHandler
> + *
> + * PARAMETERS:  Standard notify handler parameters
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: System notify handler for AcpiExec utility.  Used by the ASL
> + *              test suite(s) to communicate errors and other information to
> + *              this utility via the Notify() operator.
> + *
> + *****************************************************************************/
> +
> +static void
> +AeSystemNotifyHandler (
> +    ACPI_HANDLE                 Device,
> +    UINT32                      Value,
> +    void                        *Context)
> +{
> +
> +    printf ("[AcpiExec] Global:    Received a System Notify on [%4.4s] %p Value 0x%2.2X (%s)\n",
> +        AcpiUtGetNodeName (Device), Device, Value,
> +        AcpiUtGetNotifyName (Value));
> +    if (AcpiGbl_DebugFile)
> +    {
> +        AcpiOsPrintf ("[AcpiExec] Global:    Received a System Notify, Value 0x%2.2X\n", Value);
> +    }
> +
> +    (void) AcpiEvaluateObject (Device, "_NOT", NULL, NULL);
> +}
> +
> +
> +/******************************************************************************
> + *
>   * FUNCTION:    AeDeviceNotifyHandler
>   *
>   * PARAMETERS:  Standard notify handler parameters
> @@ -344,12 +417,12 @@ AeDeviceNotifyHandler (
>      void                        *Context)
>  {
>
> -    printf ("[AcpiExec] Received a Device Notify on [%4.4s] %p Value 0x%2.2X (%s)\n",
> +    printf ("[AcpiExec] Global:    Received a Device Notify on [%4.4s] %p Value 0x%2.2X (%s)\n",
>          AcpiUtGetNodeName (Device), Device, Value,
>          AcpiUtGetNotifyName (Value));
>      if (AcpiGbl_DebugFile)
>      {
> -        AcpiOsPrintf ("[AcpiExec] Received a device notify, Value 0x%2.2X\n", Value);
> +        AcpiOsPrintf ("[AcpiExec] Global:    Received a Device Notify, Value 0x%2.2X\n", Value);
>      }
>
>      (void) AcpiEvaluateObject (Device, "_NOT", NULL, NULL);
> @@ -759,18 +832,18 @@ AeInstallEarlyHandlers (
>              AcpiFormatException (Status));
>      }
>
> -    /* Install global notify handler */
> +    /* Install global notify handlers */
>
>      Status = AcpiInstallNotifyHandler (ACPI_ROOT_OBJECT, ACPI_SYSTEM_NOTIFY,
> -                                        AeNotifyHandler, NULL);
> +        AeSystemNotifyHandler, NULL);
>      if (ACPI_FAILURE (Status))
>      {
> -        printf ("Could not install a global notify handler, %s\n",
> +        printf ("Could not install a global system notify handler, %s\n",
>              AcpiFormatException (Status));
>      }
>
>      Status = AcpiInstallNotifyHandler (ACPI_ROOT_OBJECT, ACPI_DEVICE_NOTIFY,
> -                                        AeDeviceNotifyHandler, NULL);
> +        AeDeviceNotifyHandler, NULL);
>      if (ACPI_FAILURE (Status))
>      {
>          printf ("Could not install a global notify handler, %s\n",
> @@ -781,7 +854,7 @@ AeInstallEarlyHandlers (
>      if (ACPI_SUCCESS (Status))
>      {
>          Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY,
> -                                            AeNotifyHandler, NULL);
> +            AeNotifyHandler1, NULL);
>          if (ACPI_FAILURE (Status))
>          {
>              printf ("Could not install a notify handler, %s\n",
> @@ -789,7 +862,7 @@ AeInstallEarlyHandlers (
>          }
>
>          Status = AcpiRemoveNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY,
> -                                            AeNotifyHandler);
> +            AeNotifyHandler1);
>          if (ACPI_FAILURE (Status))
>          {
>              printf ("Could not remove a notify handler, %s\n",
> @@ -797,20 +870,35 @@ AeInstallEarlyHandlers (
>          }
>
>          Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY,
> -                                            AeNotifyHandler, NULL);
> +            AeNotifyHandler1, NULL);
>          AE_CHECK_OK (AcpiInstallNotifyHandler, Status);
>
>          Status = AcpiRemoveNotifyHandler (Handle, ACPI_ALL_NOTIFY,
> -                                            AeNotifyHandler);
> +            AeNotifyHandler1);
>          AE_CHECK_OK (AcpiRemoveNotifyHandler, Status);
>
> +#if 0
>          Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY,
> -                                            AeNotifyHandler, NULL);
> +            AeNotifyHandler1, NULL);
>          if (ACPI_FAILURE (Status))
>          {
>              printf ("Could not install a notify handler, %s\n",
>                  AcpiFormatException (Status));
>          }
> +#endif
> +
> +        /* Install two handlers for _SB_ */
> +
> +        Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY,
> +            AeNotifyHandler1, ACPI_CAST_PTR (void, 0x01234567));
> +
> +        Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY,
> +            AeNotifyHandler2, ACPI_CAST_PTR (void, 0x89ABCDEF));
> +
> +        /* Attempt duplicate handler installation, should fail */
> +
> +        Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY,
> +            AeNotifyHandler1, ACPI_CAST_PTR (void, 0x77777777));
>
>          Status = AcpiAttachData (Handle, AeAttachedDataHandler, Handle);
>          AE_CHECK_OK (AcpiAttachData, Status);
> @@ -827,6 +915,37 @@ AeInstallEarlyHandlers (
>      }
>
>
> +    Status = AcpiGetHandle (NULL, "\\_TZ.TZ1", &Handle);
> +    if (ACPI_SUCCESS (Status))
> +    {
> +        Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY,
> +            AeNotifyHandler1, ACPI_CAST_PTR (void, 0x01234567));
> +
> +        Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY,
> +            AeNotifyHandler2, ACPI_CAST_PTR (void, 0x89ABCDEF));
> +
> +        Status = AcpiRemoveNotifyHandler (Handle, ACPI_ALL_NOTIFY,
> +            AeNotifyHandler1);
> +        Status = AcpiRemoveNotifyHandler (Handle, ACPI_ALL_NOTIFY,
> +            AeNotifyHandler2);
> +
> +        Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY,
> +            AeNotifyHandler2, ACPI_CAST_PTR (void, 0x89ABCDEF));
> +
> +        Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY,
> +            AeNotifyHandler1, ACPI_CAST_PTR (void, 0x01234567));
> +    }
> +
> +    Status = AcpiGetHandle (NULL, "\\_PR.CPU0", &Handle);
> +    if (ACPI_SUCCESS (Status))
> +    {
> +        Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY,
> +            AeNotifyHandler1, ACPI_CAST_PTR (void, 0x01234567));
> +
> +        Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY,
> +            AeNotifyHandler2, ACPI_CAST_PTR (void, 0x89ABCDEF));
> +    }
> +
>      /*
>       * Install handlers that will override the default handlers for some of
>       * the space IDs.
> --
> 1.7.10.4
>
Acked-by: Keng-Yu Lin <kengyu at canonical.com>



More information about the fwts-devel mailing list