[PATCH 02/11] acpica: updates to existing ACPICA sources

Keng-Yu Lin kengyu at canonical.com
Thu Apr 12 02:25:04 UTC 2012


On Thu, Apr 12, 2012 at 7:50 AM, Colin King <colin.king at canonical.com> wrote:
> From: Colin Ian King <colin.king at canonical.com>
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
>  src/acpica/source/common/adfile.c                  |    2 +-
>  src/acpica/source/common/adisasm.c                 |  106 +-
>  src/acpica/source/common/adwalk.c                  |    6 +-
>  src/acpica/source/common/dmextern.c                |    2 +-
>  src/acpica/source/common/dmrestag.c                |  195 +++-
>  src/acpica/source/common/dmtable.c                 |   64 +-
>  src/acpica/source/common/dmtbdump.c                |  586 +++++++++-
>  src/acpica/source/common/dmtbinfo.c                |  591 ++++++++--
>  src/acpica/source/compiler/aslanalyze.c            |   59 +-
>  src/acpica/source/compiler/aslbtypes.c             |    2 +-
>  src/acpica/source/compiler/aslcodegen.c            |   13 +-
>  src/acpica/source/compiler/aslcompile.c            |   81 +-
>  src/acpica/source/compiler/aslcompiler.h           |   75 +-
>  src/acpica/source/compiler/aslcompiler.l           | 1162 ++++++--------------
>  src/acpica/source/compiler/aslcompiler.y           | 1134 +++++++++++++------
>  src/acpica/source/compiler/asldefine.h             |   24 +-
>  src/acpica/source/compiler/aslerror.c              |  215 +++-
>  src/acpica/source/compiler/aslfiles.c              |   86 +-
>  src/acpica/source/compiler/aslfold.c               |    2 +-
>  src/acpica/source/compiler/aslglobal.h             |   15 +-
>  src/acpica/source/compiler/asllength.c             |    2 +-
>  src/acpica/source/compiler/asllisting.c            |   12 +-
>  src/acpica/source/compiler/aslload.c               |   22 +-
>  src/acpica/source/compiler/asllookup.c             |  113 +-
>  src/acpica/source/compiler/aslmain.c               |  139 ++-
>  src/acpica/source/compiler/aslmap.c                |   81 +-
>  src/acpica/source/compiler/aslmessages.h           |  194 ++--
>  src/acpica/source/compiler/aslopcodes.c            |  133 ++-
>  src/acpica/source/compiler/asloperands.c           |   10 +-
>  src/acpica/source/compiler/aslopt.c                |    2 +-
>  src/acpica/source/compiler/aslpredef.c             |   23 +-
>  src/acpica/source/compiler/aslresource.c           |  103 +-
>  src/acpica/source/compiler/aslrestype1.c           |   30 +-
>  src/acpica/source/compiler/aslrestype1i.c          |   96 +-
>  src/acpica/source/compiler/aslrestype2.c           |    7 +-
>  src/acpica/source/compiler/aslrestype2d.c          |   44 +-
>  src/acpica/source/compiler/aslrestype2e.c          |   50 +-
>  src/acpica/source/compiler/aslrestype2q.c          |   42 +-
>  src/acpica/source/compiler/aslrestype2w.c          |   36 +-
>  src/acpica/source/compiler/aslstartup.c            |  108 +-
>  src/acpica/source/compiler/aslstubs.c              |   18 +-
>  src/acpica/source/compiler/asltransform.c          |   19 +-
>  src/acpica/source/compiler/asltree.c               |   22 +-
>  src/acpica/source/compiler/asltypes.h              |   16 +-
>  src/acpica/source/compiler/aslutils.c              |   73 +-
>  src/acpica/source/compiler/asluuid.c               |    2 +-
>  src/acpica/source/compiler/aslwalks.c              |   75 +-
>  src/acpica/source/compiler/dtcompile.c             |   41 +-
>  src/acpica/source/compiler/dtcompiler.h            |   28 +-
>  src/acpica/source/compiler/dtexpress.c             |   13 +-
>  src/acpica/source/compiler/dtfield.c               |   15 +-
>  src/acpica/source/compiler/dtio.c                  |   21 +-
>  src/acpica/source/compiler/dtparser.l              |    2 +-
>  src/acpica/source/compiler/dtparser.y              |    6 +-
>  src/acpica/source/compiler/dtsubtable.c            |    7 +-
>  src/acpica/source/compiler/dttable.c               |  453 +++++++-
>  src/acpica/source/compiler/dttemplate.c            |    2 +-
>  src/acpica/source/compiler/dttemplate.h            |  131 ++-
>  src/acpica/source/compiler/dtutils.c               |   13 +-
>  src/acpica/source/components/debugger/dbcmds.c     |  454 ++++++--
>  src/acpica/source/components/debugger/dbdisply.c   |   30 +-
>  src/acpica/source/components/debugger/dbexec.c     |    2 +-
>  src/acpica/source/components/debugger/dbfileio.c   |    7 +-
>  src/acpica/source/components/debugger/dbhistry.c   |    2 +-
>  src/acpica/source/components/debugger/dbinput.c    |   14 +-
>  src/acpica/source/components/debugger/dbmethod.c   |    2 +-
>  src/acpica/source/components/debugger/dbnames.c    |    2 +-
>  src/acpica/source/components/debugger/dbstats.c    |    2 +-
>  src/acpica/source/components/debugger/dbutils.c    |    9 +-
>  src/acpica/source/components/debugger/dbxface.c    |    2 +-
>  .../source/components/disassembler/dmbuffer.c      |   10 +-
>  .../source/components/disassembler/dmnames.c       |    2 +-
>  .../source/components/disassembler/dmobject.c      |    2 +-
>  .../source/components/disassembler/dmopcode.c      |   75 +-
>  .../source/components/disassembler/dmresrc.c       |   15 +-
>  .../source/components/disassembler/dmresrcl.c      |    3 +-
>  .../source/components/disassembler/dmresrcs.c      |   51 +-
>  .../source/components/disassembler/dmutils.c       |   52 +-
>  src/acpica/source/components/disassembler/dmwalk.c |    5 +-
>  src/acpica/source/components/dispatcher/dsargs.c   |   12 +-
>  .../source/components/dispatcher/dscontrol.c       |    2 +-
>  src/acpica/source/components/dispatcher/dsfield.c  |   80 +-
>  src/acpica/source/components/dispatcher/dsinit.c   |    2 +-
>  src/acpica/source/components/dispatcher/dsmethod.c |    2 +-
>  src/acpica/source/components/dispatcher/dsmthdat.c |    2 +-
>  src/acpica/source/components/dispatcher/dsobject.c |    2 +-
>  src/acpica/source/components/dispatcher/dsopcode.c |    2 +-
>  src/acpica/source/components/dispatcher/dsutils.c  |    2 +-
>  src/acpica/source/components/dispatcher/dswexec.c  |    2 +-
>  src/acpica/source/components/dispatcher/dswload.c  |    2 +-
>  src/acpica/source/components/dispatcher/dswload2.c |    2 +-
>  src/acpica/source/components/dispatcher/dswscope.c |    2 +-
>  src/acpica/source/components/dispatcher/dswstate.c |    2 +-
>  src/acpica/source/components/events/evevent.c      |   20 +-
>  src/acpica/source/components/events/evglock.c      |   12 +-
>  src/acpica/source/components/events/evgpe.c        |    5 +-
>  src/acpica/source/components/events/evgpeblk.c     |    5 +-
>  src/acpica/source/components/events/evgpeinit.c    |    5 +-
>  src/acpica/source/components/events/evgpeutil.c    |    5 +-
>  src/acpica/source/components/events/evmisc.c       |   27 +-
>  src/acpica/source/components/events/evregion.c     |   32 +-
>  src/acpica/source/components/events/evrgnini.c     |    2 +-
>  src/acpica/source/components/events/evsci.c        |    6 +-
>  src/acpica/source/components/events/evxface.c      |  506 ++++-----
>  src/acpica/source/components/events/evxfevnt.c     |    5 +-
>  src/acpica/source/components/events/evxfgpe.c      |    5 +-
>  src/acpica/source/components/events/evxfregn.c     |    2 +-
>  src/acpica/source/components/executer/exconfig.c   |    4 +-
>  src/acpica/source/components/executer/exconvrt.c   |    2 +-
>  src/acpica/source/components/executer/excreate.c   |   30 +-
>  src/acpica/source/components/executer/exdebug.c    |    2 +-
>  src/acpica/source/components/executer/exdump.c     |   13 +-
>  src/acpica/source/components/executer/exfield.c    |   28 +-
>  src/acpica/source/components/executer/exfldio.c    |   28 +-
>  src/acpica/source/components/executer/exmisc.c     |    2 +-
>  src/acpica/source/components/executer/exmutex.c    |    2 +-
>  src/acpica/source/components/executer/exnames.c    |    2 +-
>  src/acpica/source/components/executer/exoparg1.c   |    2 +-
>  src/acpica/source/components/executer/exoparg2.c   |    2 +-
>  src/acpica/source/components/executer/exoparg3.c   |    2 +-
>  src/acpica/source/components/executer/exoparg6.c   |    2 +-
>  src/acpica/source/components/executer/exprep.c     |   29 +-
>  src/acpica/source/components/executer/exregion.c   |    2 +-
>  src/acpica/source/components/executer/exresnte.c   |    2 +-
>  src/acpica/source/components/executer/exresolv.c   |    2 +-
>  src/acpica/source/components/executer/exresop.c    |    2 +-
>  src/acpica/source/components/executer/exstore.c    |    2 +-
>  src/acpica/source/components/executer/exstoren.c   |    2 +-
>  src/acpica/source/components/executer/exstorob.c   |    2 +-
>  src/acpica/source/components/executer/exsystem.c   |    2 +-
>  src/acpica/source/components/executer/exutils.c    |   32 +-
>  src/acpica/source/components/hardware/hwacpi.c     |    5 +-
>  src/acpica/source/components/hardware/hwgpe.c      |    5 +-
>  src/acpica/source/components/hardware/hwpci.c      |    2 +-
>  src/acpica/source/components/hardware/hwregs.c     |   16 +-
>  src/acpica/source/components/hardware/hwsleep.c    |  395 ++-----
>  src/acpica/source/components/hardware/hwvalid.c    |    4 +-
>  src/acpica/source/components/hardware/hwxface.c    |   57 +-
>  src/acpica/source/components/namespace/nsaccess.c  |    2 +-
>  src/acpica/source/components/namespace/nsalloc.c   |    2 +-
>  src/acpica/source/components/namespace/nsdump.c    |   18 +-
>  src/acpica/source/components/namespace/nsdumpdv.c  |    4 +-
>  src/acpica/source/components/namespace/nseval.c    |    2 +-
>  src/acpica/source/components/namespace/nsinit.c    |    2 +-
>  src/acpica/source/components/namespace/nsload.c    |    2 +-
>  src/acpica/source/components/namespace/nsnames.c   |    2 +-
>  src/acpica/source/components/namespace/nsobject.c  |    2 +-
>  src/acpica/source/components/namespace/nsparse.c   |    2 +-
>  src/acpica/source/components/namespace/nspredef.c  |   28 +-
>  src/acpica/source/components/namespace/nsrepair.c  |  167 +--
>  src/acpica/source/components/namespace/nsrepair2.c |    7 +-
>  src/acpica/source/components/namespace/nssearch.c  |    2 +-
>  src/acpica/source/components/namespace/nsutils.c   |    4 +-
>  src/acpica/source/components/namespace/nswalk.c    |    2 +-
>  src/acpica/source/components/namespace/nsxfeval.c  |    2 +-
>  src/acpica/source/components/namespace/nsxfname.c  |    2 +-
>  src/acpica/source/components/namespace/nsxfobj.c   |    2 +-
>  src/acpica/source/components/parser/psargs.c       |  147 ++-
>  src/acpica/source/components/parser/psloop.c       |    2 +-
>  src/acpica/source/components/parser/psopcode.c     |   13 +-
>  src/acpica/source/components/parser/psparse.c      |    2 +-
>  src/acpica/source/components/parser/psscope.c      |    2 +-
>  src/acpica/source/components/parser/pstree.c       |    9 +-
>  src/acpica/source/components/parser/psutils.c      |    2 +-
>  src/acpica/source/components/parser/pswalk.c       |    2 +-
>  src/acpica/source/components/parser/psxface.c      |    2 +-
>  src/acpica/source/components/resources/rsaddr.c    |    2 +-
>  src/acpica/source/components/resources/rscalc.c    |   69 +-
>  src/acpica/source/components/resources/rscreate.c  |   75 +-
>  src/acpica/source/components/resources/rsdump.c    |  158 ++-
>  src/acpica/source/components/resources/rsinfo.c    |   61 +-
>  src/acpica/source/components/resources/rsio.c      |    2 +-
>  src/acpica/source/components/resources/rsirq.c     |   34 +-
>  src/acpica/source/components/resources/rslist.c    |   77 +-
>  src/acpica/source/components/resources/rsmemory.c  |    2 +-
>  src/acpica/source/components/resources/rsmisc.c    |  268 ++++-
>  src/acpica/source/components/resources/rsutils.c   |   61 +-
>  src/acpica/source/components/resources/rsxface.c   |   58 +-
>  src/acpica/source/components/tables/tbfadt.c       |   54 +-
>  src/acpica/source/components/tables/tbfind.c       |    2 +-
>  src/acpica/source/components/tables/tbinstal.c     |  121 +-
>  src/acpica/source/components/tables/tbutils.c      |  103 +-
>  src/acpica/source/components/tables/tbxface.c      |    2 +-
>  src/acpica/source/components/tables/tbxfroot.c     |    2 +-
>  src/acpica/source/components/utilities/utalloc.c   |    2 +-
>  src/acpica/source/components/utilities/utcache.c   |    2 +-
>  src/acpica/source/components/utilities/utcopy.c    |    2 +-
>  src/acpica/source/components/utilities/utdebug.c   |    2 +-
>  src/acpica/source/components/utilities/utdecode.c  |   41 +-
>  src/acpica/source/components/utilities/utdelete.c  |   12 +-
>  src/acpica/source/components/utilities/uteval.c    |    2 +-
>  src/acpica/source/components/utilities/utglobal.c  |   18 +-
>  src/acpica/source/components/utilities/utids.c     |    2 +-
>  src/acpica/source/components/utilities/utinit.c    |   46 +-
>  src/acpica/source/components/utilities/utlock.c    |    2 +-
>  src/acpica/source/components/utilities/utmath.c    |    2 +-
>  src/acpica/source/components/utilities/utmisc.c    |   40 +-
>  src/acpica/source/components/utilities/utmutex.c   |   11 +-
>  src/acpica/source/components/utilities/utobject.c  |    2 +-
>  src/acpica/source/components/utilities/utosi.c     |    2 +-
>  src/acpica/source/components/utilities/utresrc.c   |  295 ++++-
>  src/acpica/source/components/utilities/utstate.c   |    2 +-
>  src/acpica/source/components/utilities/uttrack.c   |    2 +-
>  src/acpica/source/components/utilities/utxface.c   |   54 +-
>  src/acpica/source/components/utilities/utxferror.c |    2 +-
>  src/acpica/source/include/acapps.h                 |    4 +-
>  src/acpica/source/include/accommon.h               |    2 +-
>  src/acpica/source/include/acconfig.h               |   30 +-
>  src/acpica/source/include/acdebug.h                |   12 +-
>  src/acpica/source/include/acdisasm.h               |  202 +++-
>  src/acpica/source/include/acdispat.h               |    2 +-
>  src/acpica/source/include/acevents.h               |   21 +-
>  src/acpica/source/include/acexcep.h                |    8 +-
>  src/acpica/source/include/acglobal.h               |   25 +-
>  src/acpica/source/include/achware.h                |   63 +-
>  src/acpica/source/include/acinterp.h               |    6 +-
>  src/acpica/source/include/aclocal.h                |   42 +-
>  src/acpica/source/include/acmacros.h               |   11 +-
>  src/acpica/source/include/acnames.h                |   15 +-
>  src/acpica/source/include/acnamesp.h               |    5 +-
>  src/acpica/source/include/acobject.h               |    6 +-
>  src/acpica/source/include/acopcode.h               |    6 +-
>  src/acpica/source/include/acoutput.h               |    3 +-
>  src/acpica/source/include/acparser.h               |    2 +-
>  src/acpica/source/include/acpi.h                   |    2 +-
>  src/acpica/source/include/acpiosxf.h               |   12 +-
>  src/acpica/source/include/acpixf.h                 |  200 +++-
>  src/acpica/source/include/acpredef.h               |   40 +-
>  src/acpica/source/include/acresrc.h                |  117 +-
>  src/acpica/source/include/acrestyp.h               |  228 +++-
>  src/acpica/source/include/acstruct.h               |    2 +-
>  src/acpica/source/include/actables.h               |    7 +-
>  src/acpica/source/include/actbl.h                  |   32 +-
>  src/acpica/source/include/actbl1.h                 |   87 +-
>  src/acpica/source/include/actbl2.h                 |    2 +-
>  src/acpica/source/include/actypes.h                |   44 +-
>  src/acpica/source/include/acutils.h                |   50 +-
>  src/acpica/source/include/amlcode.h                |   31 +-
>  src/acpica/source/include/amlresrc.h               |  162 ++-
>  src/acpica/source/include/platform/acenv.h         |    2 +-
>  src/acpica/source/include/platform/acgcc.h         |    2 +-
>  src/acpica/source/include/platform/aclinux.h       |    2 +-
>  .../source/os_specific/service_layers/osunixxf.c   |   51 +-
>  src/acpica/source/tools/acpiexec/aecommon.h        |    4 +-
>  src/acpica/source/tools/acpiexec/aehandlers.c      |  278 ++++-
>  245 files changed, 9266 insertions(+), 3483 deletions(-)
>
> diff --git a/src/acpica/source/common/adfile.c b/src/acpica/source/common/adfile.c
> index a7020cb..f4e33e2 100644
> --- a/src/acpica/source/common/adfile.c
> +++ b/src/acpica/source/common/adfile.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/common/adisasm.c b/src/acpica/source/common/adisasm.c
> index 748561f..6cd67c7 100644
> --- a/src/acpica/source/common/adisasm.c
> +++ b/src/acpica/source/common/adisasm.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -147,6 +147,10 @@ LsSetupNsList (
>
>  /* Local prototypes */
>
> +static UINT32
> +AdGetFileSize (
> +    FILE                    *File);
> +
>  static void
>  AdCreateTableHeader (
>     char                    *Filename,
> @@ -232,6 +236,38 @@ static ACPI_PARSE_OBJECT    *AcpiGbl_ParseOpRoot;
>
>  /*******************************************************************************
>  *
> + * FUNCTION:    AdGetFileSize
> + *
> + * PARAMETERS:  File                - Open file handle
> + *
> + * RETURN:      File Size
> + *
> + * DESCRIPTION: Get current file size. Uses seek-to-EOF. File must be open.
> + *
> + ******************************************************************************/
> +
> +static UINT32
> +AdGetFileSize (
> +    FILE                    *File)
> +{
> +    UINT32                  FileSize;
> +    long                    Offset;
> +
> +
> +    Offset = ftell (File);
> +
> +    fseek (File, 0, SEEK_END);
> +    FileSize = (UINT32) ftell (File);
> +
> +    /* Restore file pointer */
> +
> +    fseek (File, Offset, SEEK_SET);
> +    return (FileSize);
> +}
> +
> +
> +/*******************************************************************************
> + *
>  * FUNCTION:    AdInitialize
>  *
>  * PARAMETERS:  None
> @@ -448,11 +484,14 @@ AdAmlDisassemble (
>         AdDisassemblerHeader (Filename);
>         AcpiOsPrintf (" * ACPI Data Table [%4.4s]\n *\n",
>             Table->Signature);
> -        AcpiOsPrintf (" * Format: [HexOffset DecimalOffset ByteLength]  FieldName : FieldValue\n */\n\n");
> +        AcpiOsPrintf (" * Format: [HexOffset DecimalOffset ByteLength]  "
> +            "FieldName : FieldValue\n */\n\n");
>
>         AcpiDmDumpDataTable (Table);
> -        fprintf (stderr, "Acpi Data Table [%4.4s] decoded, written to \"%s\"\n",
> -            Table->Signature, DisasmFilename);
> +        fprintf (stderr, "Acpi Data Table [%4.4s] decoded\n",
> +            Table->Signature);
> +        fprintf (stderr, "Formatted output:  %s - %u bytes\n",
> +            DisasmFilename, AdGetFileSize (File));
>     }
>     else
>     {
> @@ -475,15 +514,17 @@ AdAmlDisassemble (
>             AcpiOsPrintf ("*****/\n");
>         }
>
> -        /*
> -         * Load namespace from names created within control methods
> -         */
> -        AcpiDmFinishNamespaceLoad (AcpiGbl_ParseOpRoot, AcpiGbl_RootNode, OwnerId);
> +        /* Load namespace from names created within control methods */
> +
> +        AcpiDmFinishNamespaceLoad (AcpiGbl_ParseOpRoot,
> +            AcpiGbl_RootNode, OwnerId);
>
>         /*
> -         * Cross reference the namespace here, in order to generate External() statements
> +         * Cross reference the namespace here, in order to
> +         * generate External() statements
>          */
> -        AcpiDmCrossReferenceNamespace (AcpiGbl_ParseOpRoot, AcpiGbl_RootNode, OwnerId);
> +        AcpiDmCrossReferenceNamespace (AcpiGbl_ParseOpRoot,
> +            AcpiGbl_RootNode, OwnerId);
>
>         if (AslCompilerdebug)
>         {
> @@ -494,24 +535,20 @@ AdAmlDisassemble (
>
>         AcpiDmFindOrphanMethods (AcpiGbl_ParseOpRoot);
>
> -        /* Convert fixed-offset references to resource descriptors to symbolic references */
> -
> -        AcpiDmConvertResourceIndexes (AcpiGbl_ParseOpRoot, AcpiGbl_RootNode);
> -
>         /*
> -         * If we found any external control methods, we must reparse the entire
> -         * tree with the new information (namely, the number of arguments per
> -         * method)
> +         * If we found any external control methods, we must reparse
> +         * the entire tree with the new information (namely, the
> +         * number of arguments per method)
>          */
>         if (AcpiDmGetExternalMethodCount ())
>         {
>             fprintf (stderr,
> -                "\nFound %u external control methods, reparsing with new information\n",
> +                "\nFound %u external control methods, "
> +                "reparsing with new information\n",
>                 AcpiDmGetExternalMethodCount ());
>
> -            /*
> -             * Reparse, rebuild namespace. no need to xref namespace
> -             */
> +            /* Reparse, rebuild namespace. no need to xref namespace */
> +
>             AcpiPsDeleteParseTree (AcpiGbl_ParseOpRoot);
>             AcpiNsDeleteNamespaceSubtree (AcpiGbl_RootNode);
>
> @@ -528,7 +565,7 @@ AdAmlDisassemble (
>             Status = AcpiNsRootInitialize ();
>             AcpiDmAddExternalsToNamespace ();
>
> -            /* Parse table. No need to reload it, however (FALSE) */
> +            /* Parse the table again. No need to reload it, however */
>
>             Status = AdParseTable (Table, NULL, FALSE, FALSE);
>             if (ACPI_FAILURE (Status))
> @@ -549,14 +586,23 @@ AdAmlDisassemble (
>             }
>         }
>
> +        /*
> +         * Now that the namespace is finalized, we can perform namespace
> +         * transforms.
> +         *
> +         * 1) Convert fixed-offset references to resource descriptors
> +         *    to symbolic references (Note: modifies namespace)
> +         */
> +        AcpiDmConvertResourceIndexes (AcpiGbl_ParseOpRoot, AcpiGbl_RootNode);
> +
>         /* Optional displays */
>
>         if (AcpiGbl_DbOpt_disasm)
>         {
>             AdDisplayTables (Filename, Table);
> -            fprintf (stderr,
> -                "Disassembly completed, written to \"%s\"\n",
> -                DisasmFilename);
> +            fprintf (stderr, "Disassembly completed\n");
> +            fprintf (stderr, "ASL Output:    %s - %u bytes\n",
> +                DisasmFilename, AdGetFileSize (File));
>         }
>     }
>
> @@ -574,11 +620,12 @@ Cleanup:
>
>     if (OutToFile && File)
>     {
> +        if (AslCompilerdebug) /* Display final namespace, with transforms */
> +        {
> +            LsSetupNsList (File);
> +            LsDisplayNamespace ();
> +        }
>
> -#ifdef ASL_DISASM_DEBUG
> -        LsSetupNsList (File);
> -        LsDisplayNamespace ();
> -#endif
>         fclose (File);
>         AcpiOsRedirectOutput (stdout);
>     }
> @@ -940,6 +987,7 @@ AdParseDeferredOps (
>             break;
>
>         case AML_REGION_OP:
> +        case AML_DATA_REGION_OP:
>         case AML_CREATE_QWORD_FIELD_OP:
>         case AML_CREATE_DWORD_FIELD_OP:
>         case AML_CREATE_WORD_FIELD_OP:
> diff --git a/src/acpica/source/common/adwalk.c b/src/acpica/source/common/adwalk.c
> index b4e227d..eeb61d8 100644
> --- a/src/acpica/source/common/adwalk.c
> +++ b/src/acpica/source/common/adwalk.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -450,6 +450,10 @@ AcpiDmDumpDescending (
>         AcpiOsPrintf ("%X", (UINT32) Op->Common.Value.Integer);
>         break;
>
> +    case AML_QWORD_OP:
> +        AcpiOsPrintf ("%8.8X%8.8X", ACPI_FORMAT_UINT64 (Op->Common.Value.Integer));
> +        break;
> +
>     case AML_INT_NAMEPATH_OP:
>         if (Op->Common.Value.String)
>         {
> diff --git a/src/acpica/source/common/dmextern.c b/src/acpica/source/common/dmextern.c
> index b2e2acb..8b8402e 100644
> --- a/src/acpica/source/common/dmextern.c
> +++ b/src/acpica/source/common/dmextern.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/common/dmrestag.c b/src/acpica/source/common/dmrestag.c
> index 827dc26..1f0c5fb 100644
> --- a/src/acpica/source/common/dmrestag.c
> +++ b/src/acpica/source/common/dmrestag.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -135,7 +135,7 @@ AcpiDmUpdateResourceName (
>  static char *
>  AcpiDmSearchTagList (
>     UINT32                  BitIndex,
> -    ACPI_RESOURCE_TAG       *TagList);
> +    const ACPI_RESOURCE_TAG *TagList);
>
>  static char *
>  AcpiDmGetResourceTag (
> @@ -180,7 +180,7 @@ AcpiDmAddResourcesToNamespace (
>  *
>  ******************************************************************************/
>
> -static ACPI_RESOURCE_TAG        AcpiDmIrqTags[] =
> +static const ACPI_RESOURCE_TAG      AcpiDmIrqTags[] =
>  {
>     {( 1 * 8),      ACPI_RESTAG_INTERRUPT},
>     {( 3 * 8) + 0,  ACPI_RESTAG_INTERRUPTTYPE},
> @@ -189,7 +189,7 @@ static ACPI_RESOURCE_TAG        AcpiDmIrqTags[] =
>     {0,             NULL}
>  };
>
> -static ACPI_RESOURCE_TAG        AcpiDmDmaTags[] =
> +static const ACPI_RESOURCE_TAG      AcpiDmDmaTags[] =
>  {
>     {( 1 * 8),      ACPI_RESTAG_DMA},
>     {( 2 * 8) + 0,  ACPI_RESTAG_XFERTYPE},
> @@ -198,7 +198,7 @@ static ACPI_RESOURCE_TAG        AcpiDmDmaTags[] =
>     {0,             NULL}
>  };
>
> -static ACPI_RESOURCE_TAG        AcpiDmIoTags[] =
> +static const ACPI_RESOURCE_TAG      AcpiDmIoTags[] =
>  {
>     {( 1 * 8) + 0,  ACPI_RESTAG_DECODE},
>     {( 2 * 8),      ACPI_RESTAG_MINADDR},
> @@ -208,14 +208,22 @@ static ACPI_RESOURCE_TAG        AcpiDmIoTags[] =
>     {0,             NULL}
>  };
>
> -static ACPI_RESOURCE_TAG        AcpiDmFixedIoTags[] =
> +static const ACPI_RESOURCE_TAG      AcpiDmFixedIoTags[] =
>  {
>     {( 1 * 8),      ACPI_RESTAG_BASEADDRESS},
>     {( 3 * 8),      ACPI_RESTAG_LENGTH},
>     {0,             NULL}
>  };
>
> -static ACPI_RESOURCE_TAG        AcpiDmMemory24Tags[] =
> +static const ACPI_RESOURCE_TAG      AcpiDmFixedDmaTags[] =
> +{
> +    {( 1 * 8),      ACPI_RESTAG_DMA},
> +    {( 3 * 8),      ACPI_RESTAG_DMATYPE},
> +    {( 5 * 8),      ACPI_RESTAG_XFERTYPE},
> +    {0,             NULL}
> +};
> +
> +static const ACPI_RESOURCE_TAG      AcpiDmMemory24Tags[] =
>  {
>     {( 3 * 8) + 0,  ACPI_RESTAG_READWRITETYPE},
>     {( 4 * 8),      ACPI_RESTAG_MINADDR},
> @@ -225,7 +233,7 @@ static ACPI_RESOURCE_TAG        AcpiDmMemory24Tags[] =
>     {0,             NULL}
>  };
>
> -static ACPI_RESOURCE_TAG        AcpiDmRegisterTags[] =
> +static const ACPI_RESOURCE_TAG      AcpiDmRegisterTags[] =
>  {
>     {( 3 * 8),      ACPI_RESTAG_ADDRESSSPACE},
>     {( 4 * 8),      ACPI_RESTAG_REGISTERBITWIDTH},
> @@ -235,7 +243,7 @@ static ACPI_RESOURCE_TAG        AcpiDmRegisterTags[] =
>     {0,             NULL}
>  };
>
> -static ACPI_RESOURCE_TAG        AcpiDmMemory32Tags[] =
> +static const ACPI_RESOURCE_TAG      AcpiDmMemory32Tags[] =
>  {
>     {( 3 * 8) + 0,  ACPI_RESTAG_READWRITETYPE},
>     {( 4 * 8),      ACPI_RESTAG_MINADDR},
> @@ -245,7 +253,7 @@ static ACPI_RESOURCE_TAG        AcpiDmMemory32Tags[] =
>     {0,             NULL}
>  };
>
> -static ACPI_RESOURCE_TAG        AcpiDmFixedMemory32Tags[] =
> +static const ACPI_RESOURCE_TAG      AcpiDmFixedMemory32Tags[] =
>  {
>     {( 3 * 8) + 0,  ACPI_RESTAG_READWRITETYPE},
>     {( 4 * 8),      ACPI_RESTAG_BASEADDRESS},
> @@ -253,7 +261,7 @@ static ACPI_RESOURCE_TAG        AcpiDmFixedMemory32Tags[] =
>     {0,             NULL}
>  };
>
> -static ACPI_RESOURCE_TAG        AcpiDmInterruptTags[] =
> +static const ACPI_RESOURCE_TAG      AcpiDmInterruptTags[] =
>  {
>     {( 3 * 8) + 1,  ACPI_RESTAG_INTERRUPTTYPE},
>     {( 3 * 8) + 2,  ACPI_RESTAG_INTERRUPTLEVEL},
> @@ -262,7 +270,7 @@ static ACPI_RESOURCE_TAG        AcpiDmInterruptTags[] =
>     {0,             NULL}
>  };
>
> -static ACPI_RESOURCE_TAG        AcpiDmAddress16Tags[] =
> +static const ACPI_RESOURCE_TAG      AcpiDmAddress16Tags[] =
>  {
>     {( 4 * 8) + 1,  ACPI_RESTAG_DECODE},
>     {( 4 * 8) + 2,  ACPI_RESTAG_MINTYPE},
> @@ -275,7 +283,7 @@ static ACPI_RESOURCE_TAG        AcpiDmAddress16Tags[] =
>     {0,             NULL}
>  };
>
> -static ACPI_RESOURCE_TAG        AcpiDmAddress32Tags[] =
> +static const ACPI_RESOURCE_TAG      AcpiDmAddress32Tags[] =
>  {
>     {( 4 * 8) + 1,  ACPI_RESTAG_DECODE},
>     {( 4 * 8) + 2,  ACPI_RESTAG_MINTYPE},
> @@ -288,7 +296,7 @@ static ACPI_RESOURCE_TAG        AcpiDmAddress32Tags[] =
>     {0,             NULL}
>  };
>
> -static ACPI_RESOURCE_TAG        AcpiDmAddress64Tags[] =
> +static const ACPI_RESOURCE_TAG      AcpiDmAddress64Tags[] =
>  {
>     {( 4 * 8) + 1,  ACPI_RESTAG_DECODE},
>     {( 4 * 8) + 2,  ACPI_RESTAG_MINTYPE},
> @@ -301,7 +309,7 @@ static ACPI_RESOURCE_TAG        AcpiDmAddress64Tags[] =
>     {0,             NULL}
>  };
>
> -static ACPI_RESOURCE_TAG        AcpiDmExtendedAddressTags[] =
> +static const ACPI_RESOURCE_TAG      AcpiDmExtendedAddressTags[] =
>  {
>     {( 4 * 8) + 1,  ACPI_RESTAG_DECODE},
>     {( 4 * 8) + 2,  ACPI_RESTAG_MINTYPE},
> @@ -315,9 +323,71 @@ static ACPI_RESOURCE_TAG        AcpiDmExtendedAddressTags[] =
>     {0,             NULL}
>  };
>
> -/* Special-case tables for the type-specific flags */
> +/* Subtype tables for GPIO descriptors */
> +
> +static const ACPI_RESOURCE_TAG      AcpiDmGpioIntTags[] =
> +{
> +    {( 7 * 8) + 0,  ACPI_RESTAG_MODE},
> +    {( 7 * 8) + 1,  ACPI_RESTAG_POLARITY},
> +    {( 7 * 8) + 3,  ACPI_RESTAG_INTERRUPTSHARE},
> +    {( 9 * 8),      ACPI_RESTAG_PINCONFIG},
> +    {(10 * 8),      ACPI_RESTAG_DRIVESTRENGTH},
> +    {(12 * 8),      ACPI_RESTAG_DEBOUNCETIME},
> +    {0,             NULL}
> +};
> +
> +static const ACPI_RESOURCE_TAG      AcpiDmGpioIoTags[] =
> +{
> +    {( 7 * 8) + 0,  ACPI_RESTAG_IORESTRICTION},
> +    {( 7 * 8) + 3,  ACPI_RESTAG_INTERRUPTSHARE},
> +    {( 9 * 8),      ACPI_RESTAG_PINCONFIG},
> +    {(10 * 8),      ACPI_RESTAG_DRIVESTRENGTH},
> +    {(12 * 8),      ACPI_RESTAG_DEBOUNCETIME},
> +    {0,             NULL}
> +};
> +
> +/* Subtype tables for SerialBus descriptors */
> +
> +static const ACPI_RESOURCE_TAG      AcpiDmI2cSerialBusTags[] =
> +{
> +    {( 6 * 8) + 0,  ACPI_RESTAG_SLAVEMODE},
> +    {( 7 * 8) + 0,  ACPI_RESTAG_MODE},
> +    {(12 * 8),      ACPI_RESTAG_SPEED},
> +    {(16 * 8),      ACPI_RESTAG_ADDRESS},
> +    {0,             NULL}
> +};
> +
> +static const ACPI_RESOURCE_TAG      AcpiDmSpiSerialBusTags[] =
> +{
> +    {( 6 * 8) + 0,  ACPI_RESTAG_SLAVEMODE},
> +    {( 7 * 8) + 0,  ACPI_RESTAG_MODE},
> +    {( 7 * 8) + 1,  ACPI_RESTAG_DEVICEPOLARITY},
> +    {(12 * 8),      ACPI_RESTAG_SPEED},
> +    {(16 * 8),      ACPI_RESTAG_LENGTH},
> +    {(17 * 8),      ACPI_RESTAG_PHASE},
> +    {(18 * 8),      ACPI_RESTAG_POLARITY},
> +    {(19 * 8),      ACPI_RESTAG_ADDRESS},
> +    {0,             NULL}
> +};
> +
> +static const ACPI_RESOURCE_TAG      AcpiDmUartSerialBusTags[] =
> +{
> +    {( 6 * 8) + 0,  ACPI_RESTAG_SLAVEMODE}, /* Note: not part of original macro */
> +    {( 7 * 8) + 0,  ACPI_RESTAG_FLOWCONTROL},
> +    {( 7 * 8) + 2,  ACPI_RESTAG_STOPBITS},
> +    {( 7 * 8) + 4,  ACPI_RESTAG_LENGTH},
> +    {( 7 * 8) + 7,  ACPI_RESTAG_ENDIANNESS},
> +    {(12 * 8),      ACPI_RESTAG_SPEED},
> +    {(16 * 8),      ACPI_RESTAG_LENGTH_RX},
> +    {(18 * 8),      ACPI_RESTAG_LENGTH_TX},
> +    {(20 * 8),      ACPI_RESTAG_PARITY},
> +    {(21 * 8),      ACPI_RESTAG_LINE},
> +    {0,             NULL}
> +};
> +
> +/* Subtype tables for Address descriptor type-specific flags */
>
> -static ACPI_RESOURCE_TAG        AcpiDmMemoryFlagTags[] =
> +static const ACPI_RESOURCE_TAG      AcpiDmMemoryFlagTags[] =
>  {
>     {( 5 * 8) + 0,  ACPI_RESTAG_READWRITETYPE},
>     {( 5 * 8) + 1,  ACPI_RESTAG_MEMTYPE},
> @@ -326,7 +396,7 @@ static ACPI_RESOURCE_TAG        AcpiDmMemoryFlagTags[] =
>     {0,             NULL}
>  };
>
> -static ACPI_RESOURCE_TAG        AcpiDmIoFlagTags[] =
> +static const ACPI_RESOURCE_TAG      AcpiDmIoFlagTags[] =
>  {
>     {( 5 * 8) + 0,  ACPI_RESTAG_RANGETYPE},
>     {( 5 * 8) + 4,  ACPI_RESTAG_TYPE},
> @@ -335,9 +405,15 @@ static ACPI_RESOURCE_TAG        AcpiDmIoFlagTags[] =
>  };
>
>
> -/* Dispatch table used to obtain the correct tag table for a descriptor */
> -
> -static ACPI_RESOURCE_TAG        *AcpiGbl_ResourceTags [] =
> +/*
> + * Dispatch table used to obtain the correct tag table for a descriptor.
> + *
> + * A NULL in this table means one of three things:
> + * 1) The descriptor ID is reserved and invalid
> + * 2) The descriptor has no tags associated with it
> + * 3) The descriptor has subtypes and a separate table will be used.
> + */
> +static const ACPI_RESOURCE_TAG      *AcpiGbl_ResourceTags[] =
>  {
>     /* Small descriptors */
>
> @@ -351,7 +427,7 @@ static ACPI_RESOURCE_TAG        *AcpiGbl_ResourceTags [] =
>     NULL,                           /* 0x07, ACPI_RESOURCE_NAME_END_DEPENDENT */
>     AcpiDmIoTags,                   /* 0x08, ACPI_RESOURCE_NAME_IO_PORT */
>     AcpiDmFixedIoTags,              /* 0x09, ACPI_RESOURCE_NAME_FIXED_IO_PORT */
> -    NULL,                           /* 0x0A, Reserved */
> +    AcpiDmFixedDmaTags,             /* 0x0A, ACPI_RESOURCE_NAME_FIXED_DMA */
>     NULL,                           /* 0x0B, Reserved */
>     NULL,                           /* 0x0C, Reserved */
>     NULL,                           /* 0x0D, Reserved */
> @@ -371,9 +447,29 @@ static ACPI_RESOURCE_TAG        *AcpiGbl_ResourceTags [] =
>     AcpiDmAddress16Tags,            /* 0x08, ACPI_RESOURCE_NAME_WORD_ADDRESS_SPACE */
>     AcpiDmInterruptTags,            /* 0x09, ACPI_RESOURCE_NAME_EXTENDED_XRUPT */
>     AcpiDmAddress64Tags,            /* 0x0A, ACPI_RESOURCE_NAME_QWORD_ADDRESS_SPACE */
> -    AcpiDmExtendedAddressTags       /* 0x0B, ACPI_RESOURCE_NAME_EXTENDED_ADDRESS_SPACE */
> +    AcpiDmExtendedAddressTags,      /* 0x0B, ACPI_RESOURCE_NAME_EXTENDED_ADDRESS_SPACE */
> +    NULL,                           /* 0x0C, ACPI_RESOURCE_NAME_GPIO - Use Subtype table below */
> +    NULL,                           /* 0x0D, Reserved */
> +    NULL                            /* 0x0E, ACPI_RESOURCE_NAME_SERIAL_BUS - Use Subtype table below */
> +};
> +
> +/* GPIO Subtypes */
> +
> +static const ACPI_RESOURCE_TAG      *AcpiGbl_GpioResourceTags[] =
> +{
> +    AcpiDmGpioIntTags,              /* 0x00 Interrupt Connection */
> +    AcpiDmGpioIoTags                /* 0x01 I/O Connection */
>  };
>
> +/* Serial Bus Subtypes */
> +
> +static const ACPI_RESOURCE_TAG      *AcpiGbl_SerialResourceTags[] =
> +{
> +    NULL,                           /* 0x00 Reserved */
> +    AcpiDmI2cSerialBusTags,         /* 0x01 I2C SerialBus */
> +    AcpiDmSpiSerialBusTags,         /* 0x02 SPI SerialBus */
> +    AcpiDmUartSerialBusTags         /* 0x03 UART SerialBus */
> +};
>
>  /*
>  * Globals used to generate unique resource descriptor names. We use names that
> @@ -738,6 +834,9 @@ AcpiDmUpdateResourceName (
>  *
>  * DESCRIPTION: Convert a BitIndex into a symbolic resource tag.
>  *
> + * Note: ResourceIndex should be previously validated and guaranteed to ve
> + *       valid.
> + *
>  ******************************************************************************/
>
>  static char *
> @@ -746,23 +845,16 @@ AcpiDmGetResourceTag (
>     AML_RESOURCE            *Resource,
>     UINT8                   ResourceIndex)
>  {
> -    ACPI_RESOURCE_TAG       *TagList;
> +    const ACPI_RESOURCE_TAG *TagList;
>     char                    *Tag = NULL;
>
>
>     /* Get the tag list for this resource descriptor type */
>
>     TagList = AcpiGbl_ResourceTags[ResourceIndex];
> -    if (!TagList)
> -    {
> -        /* There are no tags for this resource type */
> -
> -        return (NULL);
> -    }
>
>     /*
> -     * Handle the type-specific flags field for the address descriptors.
> -     * Kindof brute force, but just blindly search for an index match.
> +     * Handle descriptors that have multiple subtypes
>      */
>     switch (Resource->DescriptorType)
>     {
> @@ -771,6 +863,10 @@ AcpiDmGetResourceTag (
>     case ACPI_RESOURCE_NAME_ADDRESS64:
>     case ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64:
>
> +        /*
> +         * Subtype differentiation is the flags.
> +         * Kindof brute force, but just blindly search for an index match
> +         */
>         if (Resource->Address.ResourceType == ACPI_ADDRESS_TYPE_MEMORY_RANGE)
>         {
>             Tag = AcpiDmSearchTagList (BitIndex, AcpiDmMemoryFlagTags);
> @@ -788,13 +884,42 @@ AcpiDmGetResourceTag (
>         }
>         break;
>
> +    case ACPI_RESOURCE_NAME_GPIO:
> +
> +        /* GPIO connection has 2 subtypes: Interrupt and I/O */
> +
> +        if (Resource->Gpio.ConnectionType > AML_RESOURCE_MAX_GPIOTYPE)
> +        {
> +            return (NULL);
> +        }
> +
> +        TagList = AcpiGbl_GpioResourceTags[Resource->Gpio.ConnectionType];
> +        break;
> +
> +    case ACPI_RESOURCE_NAME_SERIAL_BUS:
> +
> +        /* SerialBus has 3 subtypes: I2C, SPI, and UART */
> +
> +        if ((Resource->CommonSerialBus.Type == 0) ||
> +            (Resource->CommonSerialBus.Type > AML_RESOURCE_MAX_SERIALBUSTYPE))
> +        {
> +            return (NULL);
> +        }
> +
> +        TagList = AcpiGbl_SerialResourceTags[Resource->CommonSerialBus.Type];
> +        break;
> +
>     default:
>         break;
>     }
>
> -    /* Search the tag list for this descriptor type */
> +    /* Search for a match against the BitIndex */
> +
> +    if (TagList)
> +    {
> +        Tag = AcpiDmSearchTagList (BitIndex, TagList);
> +    }
>
> -    Tag = AcpiDmSearchTagList (BitIndex, TagList);
>     return (Tag);
>  }
>
> @@ -816,7 +941,7 @@ AcpiDmGetResourceTag (
>  static char *
>  AcpiDmSearchTagList (
>     UINT32                  BitIndex,
> -    ACPI_RESOURCE_TAG       *TagList)
> +    const ACPI_RESOURCE_TAG *TagList)
>  {
>
>     /*
> diff --git a/src/acpica/source/common/dmtable.c b/src/acpica/source/common/dmtable.c
> index b2ed5dd..5c9d5be 100644
> --- a/src/acpica/source/common/dmtable.c
> +++ b/src/acpica/source/common/dmtable.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -268,6 +268,16 @@ static const char           *AcpiDmMadtSubnames[] =
>     "Platform Interrupt Sources",   /* ACPI_MADT_TYPE_INTERRUPT_SOURCE */
>     "Processor Local x2APIC",       /* ACPI_MADT_TYPE_LOCAL_X2APIC */
>     "Local x2APIC NMI",             /* ACPI_MADT_TYPE_LOCAL_X2APIC_NMI */
> +    "Generic Interrupt Controller", /* ACPI_MADT_GENERIC_INTERRUPT */
> +    "Generic Interrupt Distributor",/* ACPI_MADT_GENERIC_DISTRIBUTOR */
> +    "Unknown SubTable Type"         /* Reserved */
> +};
> +
> +static const char           *AcpiDmPmttSubnames[] =
> +{
> +    "Socket",                       /* ACPI_PMTT_TYPE_SOCKET */
> +    "Memory Controller",            /* ACPI_PMTT_TYPE_CONTROLLER */
> +    "Physical Component (DIMM)",    /* ACPI_PMTT_TYPE_DIMM  */
>     "Unknown SubTable Type"         /* Reserved */
>  };
>
> @@ -294,7 +304,7 @@ static const char           *AcpiDmIvrsSubnames[] =
>  };
>
>
> -#define ACPI_FADT_PM_RESERVED       8
> +#define ACPI_FADT_PM_RESERVED       9
>
>  static const char           *AcpiDmFadtProfiles[] =
>  {
> @@ -306,6 +316,7 @@ static const char           *AcpiDmFadtProfiles[] =
>     "SOHO Server",
>     "Appliance PC",
>     "Performance Server",
> +    "Tablet",
>     "Unknown Profile Type"
>  };
>
> @@ -340,6 +351,7 @@ ACPI_DMTABLE_DATA    AcpiDmTableData[] =
>     {ACPI_SIG_ASF,  NULL,                   AcpiDmDumpAsf,  DtCompileAsf,   TemplateAsf,    "Alert Standard Format table"},
>     {ACPI_SIG_BOOT, AcpiDmTableInfoBoot,    NULL,           NULL,           TemplateBoot,   "Simple Boot Flag Table"},
>     {ACPI_SIG_BERT, AcpiDmTableInfoBert,    NULL,           NULL,           TemplateBert,   "Boot Error Record Table"},
> +    {ACPI_SIG_BGRT, AcpiDmTableInfoBgrt,    NULL,           NULL,           TemplateBgrt,   "Boot Graphics Resource Table"},
>     {ACPI_SIG_CPEP, NULL,                   AcpiDmDumpCpep, DtCompileCpep,  TemplateCpep,   "Corrected Platform Error Polling table"},
>     {ACPI_SIG_DBGP, AcpiDmTableInfoDbgp,    NULL,           NULL,           TemplateDbgp,   "Debug Port table"},
>     {ACPI_SIG_DMAR, NULL,                   AcpiDmDumpDmar, DtCompileDmar,  TemplateDmar,   "DMA Remapping table"},
> @@ -347,14 +359,20 @@ ACPI_DMTABLE_DATA    AcpiDmTableData[] =
>     {ACPI_SIG_EINJ, NULL,                   AcpiDmDumpEinj, DtCompileEinj,  TemplateEinj,   "Error Injection table"},
>     {ACPI_SIG_ERST, NULL,                   AcpiDmDumpErst, DtCompileErst,  TemplateErst,   "Error Record Serialization Table"},
>     {ACPI_SIG_FADT, NULL,                   AcpiDmDumpFadt, DtCompileFadt,  TemplateFadt,   "Fixed ACPI Description Table"},
> +    {ACPI_SIG_FPDT, NULL,                   AcpiDmDumpFpdt, DtCompileFpdt,  TemplateFpdt,   "Firmware Performance Data Table"},
> +    {ACPI_SIG_GTDT, AcpiDmTableInfoGtdt,    NULL,           NULL,           TemplateGtdt,   "Generic Timer Description Table"},
>     {ACPI_SIG_HEST, NULL,                   AcpiDmDumpHest, DtCompileHest,  TemplateHest,   "Hardware Error Source Table"},
>     {ACPI_SIG_HPET, AcpiDmTableInfoHpet,    NULL,           NULL,           TemplateHpet,   "High Precision Event Timer table"},
>     {ACPI_SIG_IVRS, NULL,                   AcpiDmDumpIvrs, DtCompileIvrs,  TemplateIvrs,   "I/O Virtualization Reporting Structure"},
>     {ACPI_SIG_MADT, NULL,                   AcpiDmDumpMadt, DtCompileMadt,  TemplateMadt,   "Multiple APIC Description Table"},
>     {ACPI_SIG_MCFG, NULL,                   AcpiDmDumpMcfg, DtCompileMcfg,  TemplateMcfg,   "Memory Mapped Configuration table"},
>     {ACPI_SIG_MCHI, AcpiDmTableInfoMchi,    NULL,           NULL,           TemplateMchi,   "Management Controller Host Interface table"},
> +    {ACPI_SIG_MPST, AcpiDmTableInfoMpst,    AcpiDmDumpMpst, DtCompileMpst,  TemplateMpst,   "Memory Power State Table"},
>     {ACPI_SIG_MSCT, NULL,                   AcpiDmDumpMsct, DtCompileMsct,  TemplateMsct,   "Maximum System Characteristics Table"},
> +    {ACPI_SIG_PCCT, NULL,                   AcpiDmDumpPcct, NULL,           NULL,           "Platform Communications Channel Table"},
> +    {ACPI_SIG_PMTT, NULL,                   AcpiDmDumpPmtt, DtCompilePmtt,  TemplatePmtt,   "Platform Memory Topology Table"},
>     {ACPI_SIG_RSDT, NULL,                   AcpiDmDumpRsdt, DtCompileRsdt,  TemplateRsdt,   "Root System Description Table"},
> +    {ACPI_SIG_S3PT, NULL,                   NULL,           NULL,           TemplateS3pt,   "S3 Performance Table"},
>     {ACPI_SIG_SBST, AcpiDmTableInfoSbst,    NULL,           NULL,           TemplateSbst,   "Smart Battery Specification Table"},
>     {ACPI_SIG_SLIC, NULL,                   AcpiDmDumpSlic, DtCompileSlic,  TemplateSlic,   "Software Licensing Description Table"},
>     {ACPI_SIG_SLIT, NULL,                   AcpiDmDumpSlit, DtCompileSlit,  TemplateSlit,   "System Locality Information Table"},
> @@ -472,7 +490,7 @@ AcpiDmDumpDataTable (
>
>     /*
>      * Handle tables that don't use the common ACPI table header structure.
> -     * Currently, these are the FACS and RSDP.
> +     * Currently, these are the FACS, RSDP, and S3PT.
>      */
>     if (ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_FACS))
>     {
> @@ -483,6 +501,10 @@ AcpiDmDumpDataTable (
>     {
>         Length = AcpiDmDumpRsdp (Table);
>     }
> +    else if (ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_S3PT))
> +    {
> +        Length = AcpiDmDumpS3pt (Table);
> +    }
>     else
>     {
>         /*
> @@ -718,6 +740,7 @@ AcpiDmDumpTable (
>         case ACPI_DMT_ACCWIDTH:
>         case ACPI_DMT_IVRS:
>         case ACPI_DMT_MADT:
> +        case ACPI_DMT_PMTT:
>         case ACPI_DMT_SRAT:
>         case ACPI_DMT_ASF:
>         case ACPI_DMT_HESTNTYP:
> @@ -742,6 +765,10 @@ AcpiDmDumpTable (
>         case ACPI_DMT_SLIC:
>             ByteLength = 4;
>             break;
> +        case ACPI_DMT_UINT40:
> +            ByteLength = 5;
> +            break;
> +        case ACPI_DMT_UINT48:
>         case ACPI_DMT_NAME6:
>             ByteLength = 6;
>             break;
> @@ -790,6 +817,12 @@ AcpiDmDumpTable (
>             return (AE_BAD_DATA);
>         }
>
> +        if (Info->Opcode == ACPI_DMT_EXTRA_TEXT)
> +        {
> +            AcpiOsPrintf ("%s", Info->Name);
> +            continue;
> +        }
> +
>         /* Start a new line and decode the opcode */
>
>         AcpiDmLineHeader (CurrentOffset, ByteLength, Info->Name);
> @@ -817,17 +850,29 @@ AcpiDmDumpTable (
>             AcpiOsPrintf ("%1.1X\n", *Target & 0x03);
>             break;
>
> +        case ACPI_DMT_FLAGS1:
> +
> +            AcpiOsPrintf ("%1.1X\n", (*Target >> 1) & 0x03);
> +            break;
> +
>         case ACPI_DMT_FLAGS2:
>
>             AcpiOsPrintf ("%1.1X\n", (*Target >> 2) & 0x03);
>             break;
>
> +        case ACPI_DMT_FLAGS4:
> +
> +            AcpiOsPrintf ("%1.1X\n", (*Target >> 4) & 0x03);
> +            break;
> +
>         /* Integer Data Types */
>
>         case ACPI_DMT_UINT8:
>         case ACPI_DMT_UINT16:
>         case ACPI_DMT_UINT24:
>         case ACPI_DMT_UINT32:
> +        case ACPI_DMT_UINT40:
> +        case ACPI_DMT_UINT48:
>         case ACPI_DMT_UINT56:
>         case ACPI_DMT_UINT64:
>             /*
> @@ -1093,6 +1138,19 @@ AcpiDmDumpTable (
>             AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmMadtSubnames[Temp8]);
>             break;
>
> +        case ACPI_DMT_PMTT:
> +
> +            /* PMTT subtable types */
> +
> +            Temp8 = *Target;
> +            if (Temp8 > ACPI_PMTT_TYPE_RESERVED)
> +            {
> +                Temp8 = ACPI_PMTT_TYPE_RESERVED;
> +            }
> +
> +            AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmPmttSubnames[Temp8]);
> +            break;
> +
>         case ACPI_DMT_SLIC:
>
>             /* SLIC subtable types */
> diff --git a/src/acpica/source/common/dmtbdump.c b/src/acpica/source/common/dmtbdump.c
> index 2102bab..0ff0082 100644
> --- a/src/acpica/source/common/dmtbdump.c
> +++ b/src/acpica/source/common/dmtbdump.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -302,11 +302,18 @@ AcpiDmDumpFadt (
>         AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt2);
>     }
>
> -    /* Check for FADT revision 3 fields and up (ACPI 2.0+ extended data) */
> +    /* Check for FADT revision 3/4 fields and up (ACPI 2.0+ extended data) */
>
>     else if (Table->Length > ACPI_FADT_V2_SIZE)
>     {
>         AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt3);
> +
> +        /* Check for FADT revision 5 fields and up (ACPI 5.0+) */
> +
> +        if (Table->Length > ACPI_FADT_V3_SIZE)
> +        {
> +            AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt5);
> +        }
>     }
>
>     /* Validate various fields in the FADT, including length */
> @@ -362,6 +369,10 @@ AcpiDmValidateFadtLength (
>         ExpectedLength = ACPI_FADT_V3_SIZE;
>         break;
>
> +    case 5:
> +        ExpectedLength = ACPI_FADT_V5_SIZE;
> +        break;
> +
>     default:
>         return;
>     }
> @@ -823,6 +834,84 @@ AcpiDmDumpErst (
>
>  /*******************************************************************************
>  *
> + * FUNCTION:    AcpiDmDumpFpdt
> + *
> + * PARAMETERS:  Table               - A FPDT table
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Format the contents of a FPDT. This table type consists
> + *              of an open-ended number of subtables.
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmDumpFpdt (
> +    ACPI_TABLE_HEADER       *Table)
> +{
> +    ACPI_STATUS             Status;
> +    ACPI_FPDT_HEADER        *SubTable;
> +    UINT32                  Length = Table->Length;
> +    UINT32                  Offset = sizeof (ACPI_TABLE_FPDT);
> +    ACPI_DMTABLE_INFO       *InfoTable;
> +
> +
> +    /* There is no main table (other than the standard ACPI header) */
> +
> +    /* Sub-tables */
> +
> +    SubTable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Table, Offset);
> +    while (Offset < Table->Length)
> +    {
> +        /* Common sub-table header */
> +
> +        AcpiOsPrintf ("\n");
> +        Status = AcpiDmDumpTable (Length, Offset, SubTable,
> +                    SubTable->Length, AcpiDmTableInfoFpdtHdr);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return;
> +        }
> +
> +        switch (SubTable->Type)
> +        {
> +        case ACPI_FPDT_TYPE_BOOT:
> +            InfoTable = AcpiDmTableInfoFpdt0;
> +            break;
> +        case ACPI_FPDT_TYPE_S3PERF:
> +            InfoTable = AcpiDmTableInfoFpdt1;
> +            break;
> +        default:
> +            AcpiOsPrintf ("\n**** Unknown FPDT sub-table type 0x%X\n\n", SubTable->Type);
> +
> +            /* Attempt to continue */
> +
> +            if (!SubTable->Length)
> +            {
> +                AcpiOsPrintf ("Invalid zero length subtable\n");
> +                return;
> +            }
> +            goto NextSubTable;
> +        }
> +
> +        Status = AcpiDmDumpTable (Length, Offset, SubTable,
> +                    SubTable->Length, InfoTable);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return;
> +        }
> +
> +NextSubTable:
> +        /* Point to next sub-table */
> +
> +        Offset += SubTable->Length;
> +        SubTable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, SubTable, SubTable->Length);
> +    }
> +}
> +
> +
> +/*******************************************************************************
> + *
>  * FUNCTION:    AcpiDmDumpHest
>  *
>  * PARAMETERS:  Table               - A HEST table
> @@ -1206,6 +1295,12 @@ AcpiDmDumpMadt (
>         case ACPI_MADT_TYPE_LOCAL_X2APIC_NMI:
>             InfoTable = AcpiDmTableInfoMadt10;
>             break;
> +        case ACPI_MADT_TYPE_GENERIC_INTERRUPT:
> +            InfoTable = AcpiDmTableInfoMadt11;
> +            break;
> +        case ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR:
> +            InfoTable = AcpiDmTableInfoMadt12;
> +            break;
>         default:
>             AcpiOsPrintf ("\n**** Unknown MADT sub-table type 0x%X\n\n", SubTable->Type);
>
> @@ -1295,6 +1390,150 @@ AcpiDmDumpMcfg (
>
>  /*******************************************************************************
>  *
> + * FUNCTION:    AcpiDmDumpMpst
> + *
> + * PARAMETERS:  Table               - A MPST Table
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Format the contents of a MPST table
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmDumpMpst (
> +    ACPI_TABLE_HEADER       *Table)
> +{
> +    ACPI_STATUS             Status;
> +    UINT32                  Offset = sizeof (ACPI_TABLE_MPST);
> +    ACPI_MPST_POWER_NODE    *SubTable0;
> +    ACPI_MPST_POWER_STATE   *SubTable0A;
> +    ACPI_MPST_COMPONENT     *SubTable0B;
> +    ACPI_MPST_DATA_HDR      *SubTable1;
> +    ACPI_MPST_POWER_DATA    *SubTable2;
> +    UINT16                  SubtableCount;
> +    UINT8                   PowerStateCount;
> +    UINT8                   ComponentCount;
> +
> +
> +    /* Main table */
> +
> +    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMpst);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return;
> +    }
> +
> +    /* Subtable: Memory Power Node(s) */
> +
> +    SubtableCount = (ACPI_CAST_PTR (ACPI_TABLE_MPST, Table))->PowerNodeCount;
> +    SubTable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Table, Offset);
> +
> +    while ((Offset < Table->Length) && SubtableCount)
> +    {
> +        AcpiOsPrintf ("\n");
> +        Status = AcpiDmDumpTable (Table->Length, Offset, SubTable0,
> +                    sizeof (ACPI_MPST_POWER_NODE), AcpiDmTableInfoMpst0);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return;
> +        }
> +
> +        /* Extract the sub-subtable counts */
> +
> +        PowerStateCount = SubTable0->NumPowerStates;
> +        ComponentCount = SubTable0->NumPhysicalComponents;
> +        Offset += sizeof (ACPI_MPST_POWER_NODE);
> +
> +        /* Sub-subtables - Memory Power State Structure(s) */
> +
> +        SubTable0A = ACPI_ADD_PTR (ACPI_MPST_POWER_STATE, SubTable0,
> +            sizeof (ACPI_MPST_POWER_NODE));
> +
> +        while (PowerStateCount)
> +        {
> +            AcpiOsPrintf ("\n");
> +            Status = AcpiDmDumpTable (Table->Length, Offset, SubTable0A,
> +                        sizeof (ACPI_MPST_POWER_STATE), AcpiDmTableInfoMpst0A);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return;
> +            }
> +
> +            SubTable0A++;
> +            PowerStateCount--;
> +            Offset += sizeof (ACPI_MPST_POWER_STATE);
> +       }
> +
> +        /* Sub-subtables - Physical Component ID Structure(s) */
> +
> +        SubTable0B = ACPI_CAST_PTR (ACPI_MPST_COMPONENT, SubTable0A);
> +
> +        if (ComponentCount)
> +        {
> +            AcpiOsPrintf ("\n");
> +        }
> +
> +        while (ComponentCount)
> +        {
> +            Status = AcpiDmDumpTable (Table->Length, Offset, SubTable0B,
> +                        sizeof (ACPI_MPST_COMPONENT), AcpiDmTableInfoMpst0B);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return;
> +            }
> +
> +            SubTable0B++;
> +            ComponentCount--;
> +            Offset += sizeof (ACPI_MPST_COMPONENT);
> +        }
> +
> +        /* Point to next Memory Power Node subtable */
> +
> +        SubtableCount--;
> +        SubTable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, SubTable0,
> +            sizeof (ACPI_MPST_POWER_NODE) +
> +            (sizeof (ACPI_MPST_POWER_STATE) * SubTable0->NumPowerStates) +
> +            (sizeof (ACPI_MPST_COMPONENT) * SubTable0->NumPhysicalComponents));
> +    }
> +
> +    /* Subtable: Count of Memory Power State Characteristic structures */
> +
> +    AcpiOsPrintf ("\n");
> +    SubTable1 = ACPI_CAST_PTR (ACPI_MPST_DATA_HDR, SubTable0);
> +    Status = AcpiDmDumpTable (Table->Length, Offset, SubTable1,
> +                sizeof (ACPI_MPST_DATA_HDR), AcpiDmTableInfoMpst1);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return;
> +    }
> +
> +    SubtableCount = SubTable1->CharacteristicsCount;
> +    Offset += sizeof (ACPI_MPST_DATA_HDR);
> +
> +    /* Subtable: Memory Power State Characteristics structure(s) */
> +
> +    SubTable2 = ACPI_ADD_PTR (ACPI_MPST_POWER_DATA, SubTable1, sizeof (ACPI_MPST_DATA_HDR));
> +
> +    while ((Offset < Table->Length) && SubtableCount)
> +    {
> +        AcpiOsPrintf ("\n");
> +        Status = AcpiDmDumpTable (Table->Length, Offset, SubTable2,
> +                    sizeof (ACPI_MPST_POWER_DATA), AcpiDmTableInfoMpst2);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return;
> +        }
> +
> +        SubTable2++;
> +        SubtableCount--;
> +        Offset += sizeof (ACPI_MPST_POWER_DATA);
> +    }
> +}
> +
> +
> +/*******************************************************************************
> + *
>  * FUNCTION:    AcpiDmDumpMsct
>  *
>  * PARAMETERS:  Table               - A MSCT table
> @@ -1347,6 +1586,349 @@ AcpiDmDumpMsct (
>
>  /*******************************************************************************
>  *
> + * FUNCTION:    AcpiDmDumpPcct
> + *
> + * PARAMETERS:  Table               - A PCCT table
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Format the contents of a PCCT. This table type consists
> + *              of an open-ended number of subtables.
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmDumpPcct (
> +    ACPI_TABLE_HEADER       *Table)
> +{
> +    ACPI_STATUS             Status;
> +    ACPI_PCCT_SUBSPACE      *SubTable;
> +    UINT32                  Length = Table->Length;
> +    UINT32                  Offset = sizeof (ACPI_TABLE_PCCT);
> +
> +
> +    /* Main table */
> +
> +    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPcct);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return;
> +    }
> +
> +    /* Sub-tables */
> +
> +    SubTable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Table, Offset);
> +    while (Offset < Table->Length)
> +    {
> +        AcpiOsPrintf ("\n");
> +        Status = AcpiDmDumpTable (Length, Offset, SubTable,
> +                    SubTable->Header.Length, AcpiDmTableInfoPcct0);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return;
> +        }
> +
> +        /* Point to next sub-table */
> +
> +        Offset += SubTable->Header.Length;
> +        SubTable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, SubTable,
> +                    SubTable->Header.Length);
> +    }
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiDmDumpPmtt
> + *
> + * PARAMETERS:  Table               - A PMTT table
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Format the contents of a PMTT. This table type consists
> + *              of an open-ended number of subtables.
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmDumpPmtt (
> +    ACPI_TABLE_HEADER       *Table)
> +{
> +    ACPI_STATUS             Status;
> +    ACPI_PMTT_HEADER        *SubTable;
> +    ACPI_PMTT_HEADER        *MemSubTable;
> +    ACPI_PMTT_HEADER        *DimmSubTable;
> +    ACPI_PMTT_DOMAIN        *DomainArray;
> +    UINT32                  Length = Table->Length;
> +    UINT32                  Offset = sizeof (ACPI_TABLE_PMTT);
> +    UINT32                  MemOffset;
> +    UINT32                  DimmOffset;
> +    UINT32                  DomainOffset;
> +    UINT32                  DomainCount;
> +
> +
> +    /* Main table */
> +
> +    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPmtt);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return;
> +    }
> +
> +    /* Subtables */
> +
> +    SubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Table, Offset);
> +    while (Offset < Table->Length)
> +    {
> +        /* Common subtable header */
> +
> +        AcpiOsPrintf ("\n");
> +        Status = AcpiDmDumpTable (Length, Offset, SubTable,
> +                    SubTable->Length, AcpiDmTableInfoPmttHdr);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return;
> +        }
> +
> +        /* Only Socket subtables are expected at this level */
> +
> +        if (SubTable->Type != ACPI_PMTT_TYPE_SOCKET)
> +        {
> +            AcpiOsPrintf (
> +                "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n",
> +                SubTable->Type);
> +            return;
> +        }
> +
> +        /* Dump the fixed-length portion of the subtable */
> +
> +        Status = AcpiDmDumpTable (Length, Offset, SubTable,
> +                    SubTable->Length, AcpiDmTableInfoPmtt0);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return;
> +        }
> +
> +        /* Walk the memory controller subtables */
> +
> +        MemOffset = sizeof (ACPI_PMTT_SOCKET);
> +        MemSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, SubTable,
> +            sizeof (ACPI_PMTT_SOCKET));
> +
> +        while (((Offset + MemOffset) < Table->Length) &&
> +            (MemOffset < SubTable->Length))
> +        {
> +            /* Common subtable header */
> +
> +            AcpiOsPrintf ("\n");
> +            Status = AcpiDmDumpTable (Length,
> +                        Offset + MemOffset, MemSubTable,
> +                        MemSubTable->Length, AcpiDmTableInfoPmttHdr);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return;
> +            }
> +
> +            /* Only memory controller subtables are expected at this level */
> +
> +            if (MemSubTable->Type != ACPI_PMTT_TYPE_CONTROLLER)
> +            {
> +                AcpiOsPrintf (
> +                    "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n",
> +                    MemSubTable->Type);
> +                return;
> +            }
> +
> +            /* Dump the fixed-length portion of the controller subtable */
> +
> +            Status = AcpiDmDumpTable (Length,
> +                        Offset + MemOffset, MemSubTable,
> +                        MemSubTable->Length, AcpiDmTableInfoPmtt1);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return;
> +            }
> +
> +            /* Walk the variable count of proximity domains */
> +
> +            DomainCount = ((ACPI_PMTT_CONTROLLER *) MemSubTable)->DomainCount;
> +            DomainOffset = sizeof (ACPI_PMTT_CONTROLLER);
> +            DomainArray = ACPI_ADD_PTR (ACPI_PMTT_DOMAIN, MemSubTable,
> +                sizeof (ACPI_PMTT_CONTROLLER));
> +
> +            while (((Offset + MemOffset + DomainOffset) < Table->Length) &&
> +                ((MemOffset + DomainOffset) < SubTable->Length) &&
> +                DomainCount)
> +            {
> +                Status = AcpiDmDumpTable (Length,
> +                            Offset + MemOffset + DomainOffset, DomainArray,
> +                            sizeof (ACPI_PMTT_DOMAIN), AcpiDmTableInfoPmtt1a);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return;
> +                }
> +
> +                DomainOffset += sizeof (ACPI_PMTT_DOMAIN);
> +                DomainArray++;
> +                DomainCount--;
> +            }
> +
> +            if (DomainCount)
> +            {
> +                AcpiOsPrintf (
> +                    "\n**** DomainCount exceeds subtable length\n\n",
> +                    MemSubTable->Type);
> +            }
> +
> +            /* Walk the physical component (DIMM) subtables */
> +
> +            DimmOffset = DomainOffset;
> +            DimmSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, MemSubTable,
> +                DomainOffset);
> +
> +            while (((Offset + MemOffset + DimmOffset) < Table->Length) &&
> +                (DimmOffset < MemSubTable->Length))
> +            {
> +                /* Common subtable header */
> +
> +                AcpiOsPrintf ("\n");
> +                Status = AcpiDmDumpTable (Length,
> +                            Offset + MemOffset + DimmOffset, DimmSubTable,
> +                            DimmSubTable->Length, AcpiDmTableInfoPmttHdr);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return;
> +                }
> +
> +                /* Only DIMM subtables are expected at this level */
> +
> +                if (DimmSubTable->Type != ACPI_PMTT_TYPE_DIMM)
> +                {
> +                    AcpiOsPrintf (
> +                        "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n",
> +                        DimmSubTable->Type);
> +                    return;
> +                }
> +
> +                /* Dump the fixed-length DIMM subtable */
> +
> +                Status = AcpiDmDumpTable (Length,
> +                            Offset + MemOffset + DimmOffset, DimmSubTable,
> +                            DimmSubTable->Length, AcpiDmTableInfoPmtt2);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return;
> +                }
> +
> +                /* Point to next DIMM subtable */
> +
> +                DimmOffset += DimmSubTable->Length;
> +                DimmSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER,
> +                    DimmSubTable, DimmSubTable->Length);
> +            }
> +
> +            /* Point to next Controller subtable */
> +
> +            MemOffset += MemSubTable->Length;
> +            MemSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER,
> +                MemSubTable, MemSubTable->Length);
> +        }
> +
> +        /* Point to next Socket subtable */
> +
> +        Offset += SubTable->Length;
> +        SubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER,
> +            SubTable, SubTable->Length);
> +    }
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiDmDumpS3pt
> + *
> + * PARAMETERS:  Table               - A S3PT table
> + *
> + * RETURN:      Length of the table
> + *
> + * DESCRIPTION: Format the contents of a S3PT
> + *
> + ******************************************************************************/
> +
> +UINT32
> +AcpiDmDumpS3pt (
> +    ACPI_TABLE_HEADER       *Tables)
> +{
> +    ACPI_STATUS             Status;
> +    UINT32                  Offset = sizeof (ACPI_TABLE_S3PT);
> +    ACPI_S3PT_HEADER        *SubTable;
> +    ACPI_DMTABLE_INFO       *InfoTable;
> +    ACPI_TABLE_S3PT         *S3ptTable = ACPI_CAST_PTR (ACPI_TABLE_S3PT, Tables);
> +
> +
> +    /* Main table */
> +
> +    Status = AcpiDmDumpTable (Offset, 0, S3ptTable, 0, AcpiDmTableInfoS3pt);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return 0;
> +    }
> +
> +    SubTable = ACPI_ADD_PTR (ACPI_S3PT_HEADER, S3ptTable, Offset);
> +    while (Offset < S3ptTable->Length)
> +    {
> +        /* Common sub-table header */
> +
> +        AcpiOsPrintf ("\n");
> +        Status = AcpiDmDumpTable (S3ptTable->Length, Offset, SubTable,
> +                    SubTable->Length, AcpiDmTableInfoS3ptHdr);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return 0;
> +        }
> +
> +        switch (SubTable->Type)
> +        {
> +        case ACPI_S3PT_TYPE_RESUME:
> +            InfoTable = AcpiDmTableInfoS3pt0;
> +            break;
> +        case ACPI_S3PT_TYPE_SUSPEND:
> +            InfoTable = AcpiDmTableInfoS3pt1;
> +            break;
> +        default:
> +            AcpiOsPrintf ("\n**** Unknown S3PT sub-table type 0x%X\n", SubTable->Type);
> +
> +            /* Attempt to continue */
> +
> +            if (!SubTable->Length)
> +            {
> +                AcpiOsPrintf ("Invalid zero length subtable\n");
> +                return 0;
> +            }
> +            goto NextSubTable;
> +        }
> +
> +        AcpiOsPrintf ("\n");
> +        Status = AcpiDmDumpTable (S3ptTable->Length, Offset, SubTable,
> +                    SubTable->Length, InfoTable);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return 0;
> +        }
> +
> +NextSubTable:
> +        /* Point to next sub-table */
> +
> +        Offset += SubTable->Length;
> +        SubTable = ACPI_ADD_PTR (ACPI_S3PT_HEADER, SubTable, SubTable->Length);
> +    }
> +
> +    return (S3ptTable->Length);
> +}
> +
> +
> +/*******************************************************************************
> + *
>  * FUNCTION:    AcpiDmDumpSlic
>  *
>  * PARAMETERS:  Table               - A SLIC table
> diff --git a/src/acpica/source/common/dmtbinfo.c b/src/acpica/source/common/dmtbinfo.c
> index 05e5709..361e7fb 100644
> --- a/src/acpica/source/common/dmtbinfo.c
> +++ b/src/acpica/source/common/dmtbinfo.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -150,97 +150,123 @@
>  /*
>  * Macros used to generate offsets to specific table fields
>  */
> -#define ACPI_FACS_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_FACS,f)
> -#define ACPI_GAS_OFFSET(f)              (UINT8) ACPI_OFFSET (ACPI_GENERIC_ADDRESS,f)
> -#define ACPI_HDR_OFFSET(f)              (UINT8) ACPI_OFFSET (ACPI_TABLE_HEADER,f)
> -#define ACPI_RSDP_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_RSDP,f)
> -#define ACPI_BOOT_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_BOOT,f)
> -#define ACPI_BERT_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_BERT,f)
> -#define ACPI_CPEP_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_CPEP,f)
> -#define ACPI_DBGP_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_DBGP,f)
> -#define ACPI_DMAR_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_DMAR,f)
> -#define ACPI_ECDT_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_ECDT,f)
> -#define ACPI_EINJ_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_EINJ,f)
> -#define ACPI_ERST_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_ERST,f)
> -#define ACPI_HEST_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_HEST,f)
> -#define ACPI_HPET_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_HPET,f)
> -#define ACPI_IVRS_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_IVRS,f)
> -#define ACPI_MADT_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_MADT,f)
> -#define ACPI_MCFG_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_MCFG,f)
> -#define ACPI_MCHI_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_MCHI,f)
> -#define ACPI_MSCT_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_MSCT,f)
> -#define ACPI_SBST_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_SBST,f)
> -#define ACPI_SLIT_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_SLIT,f)
> -#define ACPI_SPCR_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_SPCR,f)
> -#define ACPI_SPMI_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_SPMI,f)
> -#define ACPI_SRAT_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_SRAT,f)
> -#define ACPI_TCPA_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_TCPA,f)
> -#define ACPI_UEFI_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_UEFI,f)
> -#define ACPI_WAET_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_WAET,f)
> -#define ACPI_WDAT_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_WDAT,f)
> -#define ACPI_WDDT_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_WDDT,f)
> -#define ACPI_WDRT_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_WDRT,f)
> +#define ACPI_FACS_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_FACS,f)
> +#define ACPI_GAS_OFFSET(f)              (UINT16) ACPI_OFFSET (ACPI_GENERIC_ADDRESS,f)
> +#define ACPI_HDR_OFFSET(f)              (UINT16) ACPI_OFFSET (ACPI_TABLE_HEADER,f)
> +#define ACPI_RSDP_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_RSDP,f)
> +#define ACPI_BERT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_BERT,f)
> +#define ACPI_BGRT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_BGRT,f)
> +#define ACPI_BOOT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_BOOT,f)
> +#define ACPI_CPEP_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_CPEP,f)
> +#define ACPI_DBGP_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_DBGP,f)
> +#define ACPI_DMAR_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_DMAR,f)
> +#define ACPI_DRTM_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_DRTM,f)
> +#define ACPI_ECDT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_ECDT,f)
> +#define ACPI_EINJ_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_EINJ,f)
> +#define ACPI_ERST_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_ERST,f)
> +#define ACPI_GTDT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_GTDT,f)
> +#define ACPI_HEST_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_HEST,f)
> +#define ACPI_HPET_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_HPET,f)
> +#define ACPI_IVRS_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_IVRS,f)
> +#define ACPI_MADT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_MADT,f)
> +#define ACPI_MCFG_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_MCFG,f)
> +#define ACPI_MCHI_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_MCHI,f)
> +#define ACPI_MPST_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_MPST,f)
> +#define ACPI_MSCT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_MSCT,f)
> +#define ACPI_PCCT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_PCCT,f)
> +#define ACPI_PMTT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_PMTT,f)
> +#define ACPI_S3PT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_S3PT,f)
> +#define ACPI_SBST_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SBST,f)
> +#define ACPI_SLIT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SLIT,f)
> +#define ACPI_SPCR_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SPCR,f)
> +#define ACPI_SPMI_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SPMI,f)
> +#define ACPI_SRAT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SRAT,f)
> +#define ACPI_TCPA_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA,f)
> +#define ACPI_UEFI_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_UEFI,f)
> +#define ACPI_WAET_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_WAET,f)
> +#define ACPI_WDAT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_WDAT,f)
> +#define ACPI_WDDT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_WDDT,f)
> +#define ACPI_WDRT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_WDRT,f)
>
>  /* Subtables */
>
> -#define ACPI_ASF0_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_ASF_INFO,f)
> -#define ACPI_ASF1_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_ASF_ALERT,f)
> -#define ACPI_ASF1a_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_ASF_ALERT_DATA,f)
> -#define ACPI_ASF2_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_ASF_REMOTE,f)
> -#define ACPI_ASF2a_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_ASF_CONTROL_DATA,f)
> -#define ACPI_ASF3_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_ASF_RMCP,f)
> -#define ACPI_ASF4_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_ASF_ADDRESS,f)
> -#define ACPI_CPEP0_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_CPEP_POLLING,f)
> -#define ACPI_DMARS_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_DMAR_DEVICE_SCOPE,f)
> -#define ACPI_DMAR0_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_DMAR_HARDWARE_UNIT,f)
> -#define ACPI_DMAR1_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_DMAR_RESERVED_MEMORY,f)
> -#define ACPI_DMAR2_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_DMAR_ATSR,f)
> -#define ACPI_DMAR3_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_DMAR_RHSA,f)
> -#define ACPI_EINJ0_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_WHEA_HEADER,f)
> -#define ACPI_ERST0_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_WHEA_HEADER,f)
> -#define ACPI_HEST0_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_HEST_IA_MACHINE_CHECK,f)
> -#define ACPI_HEST1_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_HEST_IA_CORRECTED,f)
> -#define ACPI_HEST2_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_HEST_IA_NMI,f)
> -#define ACPI_HEST6_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_HEST_AER_ROOT,f)
> -#define ACPI_HEST7_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_HEST_AER,f)
> -#define ACPI_HEST8_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_HEST_AER_BRIDGE,f)
> -#define ACPI_HEST9_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_HEST_GENERIC,f)
> -#define ACPI_HESTN_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_HEST_NOTIFY,f)
> -#define ACPI_HESTB_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_HEST_IA_ERROR_BANK,f)
> -#define ACPI_IVRSH_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_IVRS_HEADER,f)
> -#define ACPI_IVRS0_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_IVRS_HARDWARE,f)
> -#define ACPI_IVRS1_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_IVRS_MEMORY,f)
> -#define ACPI_IVRSD_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_IVRS_DE_HEADER,f)
> -#define ACPI_IVRS8A_OFFSET(f)           (UINT8) ACPI_OFFSET (ACPI_IVRS_DEVICE8A,f)
> -#define ACPI_IVRS8B_OFFSET(f)           (UINT8) ACPI_OFFSET (ACPI_IVRS_DEVICE8B,f)
> -#define ACPI_IVRS8C_OFFSET(f)           (UINT8) ACPI_OFFSET (ACPI_IVRS_DEVICE8C,f)
> -#define ACPI_MADT0_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_MADT_LOCAL_APIC,f)
> -#define ACPI_MADT1_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_MADT_IO_APIC,f)
> -#define ACPI_MADT2_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_MADT_INTERRUPT_OVERRIDE,f)
> -#define ACPI_MADT3_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_MADT_NMI_SOURCE,f)
> -#define ACPI_MADT4_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_MADT_LOCAL_APIC_NMI,f)
> -#define ACPI_MADT5_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_MADT_LOCAL_APIC_OVERRIDE,f)
> -#define ACPI_MADT6_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_MADT_IO_SAPIC,f)
> -#define ACPI_MADT7_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_MADT_LOCAL_SAPIC,f)
> -#define ACPI_MADT8_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_MADT_INTERRUPT_SOURCE,f)
> -#define ACPI_MADT9_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_MADT_LOCAL_X2APIC,f)
> -#define ACPI_MADT10_OFFSET(f)           (UINT8) ACPI_OFFSET (ACPI_MADT_LOCAL_X2APIC_NMI,f)
> -#define ACPI_MADTH_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_SUBTABLE_HEADER,f)
> -#define ACPI_MCFG0_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_MCFG_ALLOCATION,f)
> -#define ACPI_MSCT0_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_MSCT_PROXIMITY,f)
> -#define ACPI_SLICH_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_SLIC_HEADER,f)
> -#define ACPI_SLIC0_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_SLIC_KEY,f)
> -#define ACPI_SLIC1_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_SLIC_MARKER,f)
> -#define ACPI_SRATH_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_SUBTABLE_HEADER,f)
> -#define ACPI_SRAT0_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_SRAT_CPU_AFFINITY,f)
> -#define ACPI_SRAT1_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_SRAT_MEM_AFFINITY,f)
> -#define ACPI_SRAT2_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_SRAT_X2APIC_CPU_AFFINITY,f)
> -#define ACPI_WDAT0_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_WDAT_ENTRY,f)
> +#define ACPI_ASF0_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_ASF_INFO,f)
> +#define ACPI_ASF1_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_ASF_ALERT,f)
> +#define ACPI_ASF1a_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_ASF_ALERT_DATA,f)
> +#define ACPI_ASF2_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_ASF_REMOTE,f)
> +#define ACPI_ASF2a_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_ASF_CONTROL_DATA,f)
> +#define ACPI_ASF3_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_ASF_RMCP,f)
> +#define ACPI_ASF4_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_ASF_ADDRESS,f)
> +#define ACPI_CPEP0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_CPEP_POLLING,f)
> +#define ACPI_DMARS_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_DMAR_DEVICE_SCOPE,f)
> +#define ACPI_DMAR0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_DMAR_HARDWARE_UNIT,f)
> +#define ACPI_DMAR1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_DMAR_RESERVED_MEMORY,f)
> +#define ACPI_DMAR2_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_DMAR_ATSR,f)
> +#define ACPI_DMAR3_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_DMAR_RHSA,f)
> +#define ACPI_EINJ0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_WHEA_HEADER,f)
> +#define ACPI_ERST0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_WHEA_HEADER,f)
> +#define ACPI_FPDTH_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_FPDT_HEADER,f)
> +#define ACPI_FPDT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_FPDT_BOOT,f)
> +#define ACPI_FPDT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_FPDT_S3PT_PTR,f)
> +#define ACPI_HEST0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_HEST_IA_MACHINE_CHECK,f)
> +#define ACPI_HEST1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_HEST_IA_CORRECTED,f)
> +#define ACPI_HEST2_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_HEST_IA_NMI,f)
> +#define ACPI_HEST6_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_HEST_AER_ROOT,f)
> +#define ACPI_HEST7_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_HEST_AER,f)
> +#define ACPI_HEST8_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_HEST_AER_BRIDGE,f)
> +#define ACPI_HEST9_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_HEST_GENERIC,f)
> +#define ACPI_HESTN_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_HEST_NOTIFY,f)
> +#define ACPI_HESTB_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_HEST_IA_ERROR_BANK,f)
> +#define ACPI_IVRSH_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_IVRS_HEADER,f)
> +#define ACPI_IVRS0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_IVRS_HARDWARE,f)
> +#define ACPI_IVRS1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_IVRS_MEMORY,f)
> +#define ACPI_IVRSD_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_IVRS_DE_HEADER,f)
> +#define ACPI_IVRS8A_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_IVRS_DEVICE8A,f)
> +#define ACPI_IVRS8B_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_IVRS_DEVICE8B,f)
> +#define ACPI_IVRS8C_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_IVRS_DEVICE8C,f)
> +#define ACPI_MADT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_APIC,f)
> +#define ACPI_MADT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_MADT_IO_APIC,f)
> +#define ACPI_MADT2_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_MADT_INTERRUPT_OVERRIDE,f)
> +#define ACPI_MADT3_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_MADT_NMI_SOURCE,f)
> +#define ACPI_MADT4_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_APIC_NMI,f)
> +#define ACPI_MADT5_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_APIC_OVERRIDE,f)
> +#define ACPI_MADT6_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_MADT_IO_SAPIC,f)
> +#define ACPI_MADT7_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_SAPIC,f)
> +#define ACPI_MADT8_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_MADT_INTERRUPT_SOURCE,f)
> +#define ACPI_MADT9_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_X2APIC,f)
> +#define ACPI_MADT10_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_X2APIC_NMI,f)
> +#define ACPI_MADT11_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_INTERRUPT,f)
> +#define ACPI_MADT12_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_DISTRIBUTOR,f)
> +#define ACPI_MADTH_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_SUBTABLE_HEADER,f)
> +#define ACPI_MCFG0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_MCFG_ALLOCATION,f)
> +#define ACPI_MPST0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_MPST_POWER_NODE,f)
> +#define ACPI_MPST0A_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_MPST_POWER_STATE,f)
> +#define ACPI_MPST0B_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_MPST_COMPONENT,f)
> +#define ACPI_MPST1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_MPST_DATA_HDR,f)
> +#define ACPI_MPST2_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_MPST_POWER_DATA,f)
> +#define ACPI_MSCT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_MSCT_PROXIMITY,f)
> +#define ACPI_PCCT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PCCT_SUBSPACE,f)
> +#define ACPI_PMTT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PMTT_SOCKET,f)
> +#define ACPI_PMTT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PMTT_CONTROLLER,f)
> +#define ACPI_PMTT1A_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_PMTT_DOMAIN,f)
> +#define ACPI_PMTT2_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PMTT_PHYSICAL_COMPONENT,f)
> +#define ACPI_PMTTH_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PMTT_HEADER,f)
> +#define ACPI_S3PTH_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_S3PT_HEADER,f)
> +#define ACPI_S3PT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_S3PT_RESUME,f)
> +#define ACPI_S3PT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_S3PT_SUSPEND,f)
> +#define ACPI_SLICH_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_SLIC_HEADER,f)
> +#define ACPI_SLIC0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_SLIC_KEY,f)
> +#define ACPI_SLIC1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_SLIC_MARKER,f)
> +#define ACPI_SRATH_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_SUBTABLE_HEADER,f)
> +#define ACPI_SRAT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_SRAT_CPU_AFFINITY,f)
> +#define ACPI_SRAT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_SRAT_MEM_AFFINITY,f)
> +#define ACPI_SRAT2_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_SRAT_X2APIC_CPU_AFFINITY,f)
> +#define ACPI_WDAT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_WDAT_ENTRY,f)
>
>  /*
>  * Simplify access to flag fields by breaking them up into bytes
>  */
> -#define ACPI_FLAG_OFFSET(d,f,o)         (UINT8) (ACPI_OFFSET (d,f) + o)
> +#define ACPI_FLAG_OFFSET(d,f,o)         (UINT16) (ACPI_OFFSET (d,f) + o)
>
>  /* Flags */
>
> @@ -250,6 +276,7 @@
>  #define ACPI_SRAT0_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_SRAT_CPU_AFFINITY,f,o)
>  #define ACPI_SRAT1_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_SRAT_MEM_AFFINITY,f,o)
>  #define ACPI_SRAT2_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_SRAT_X2APIC_CPU_AFFINITY,f,o)
> +#define ACPI_GTDT_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_TABLE_GTDT,f,o)
>  #define ACPI_MADT_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_TABLE_MADT,f,o)
>  #define ACPI_MADT0_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_APIC,f,o)
>  #define ACPI_MADT2_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_MADT_INTERRUPT_OVERRIDE,f,o)
> @@ -259,6 +286,11 @@
>  #define ACPI_MADT8_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_MADT_INTERRUPT_SOURCE,f,o)
>  #define ACPI_MADT9_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_X2APIC,f,o)
>  #define ACPI_MADT10_FLAG_OFFSET(f,o)    ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_X2APIC_NMI,f,o)
> +#define ACPI_MADT11_FLAG_OFFSET(f,o)    ACPI_FLAG_OFFSET (ACPI_MADT_GENERIC_INTERRUPT,f,o)
> +#define ACPI_MPST0_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_MPST_POWER_NODE,f,o)
> +#define ACPI_MPST2_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_MPST_POWER_DATA,f,o)
> +#define ACPI_PCCT_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_TABLE_PCCT,f,o)
> +#define ACPI_PMTTH_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_PMTT_HEADER,f,o)
>  #define ACPI_WDDT_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_TABLE_WDDT,f,o)
>  #define ACPI_EINJ0_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_WHEA_HEADER,f,o)
>  #define ACPI_ERST0_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_WHEA_HEADER,f,o)
> @@ -270,6 +302,7 @@
>  * Required terminator for all tables below
>  */
>  #define ACPI_DMT_TERMINATOR             {ACPI_DMT_EXIT, 0, NULL, 0}
> +#define ACPI_DMT_NEW_LINE               {ACPI_DMT_EXTRA_TEXT, 0, "\n", 0}
>
>
>  /*
> @@ -423,6 +456,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoFadt1[] =
>     {ACPI_DMT_FLAG2,    ACPI_FADT_FLAG_OFFSET (BootFlags,0),        "VGA Not Present (V4)", 0},
>     {ACPI_DMT_FLAG3,    ACPI_FADT_FLAG_OFFSET (BootFlags,0),        "MSI Not Supported (V4)", 0},
>     {ACPI_DMT_FLAG4,    ACPI_FADT_FLAG_OFFSET (BootFlags,0),        "PCIe ASPM Not Supported (V4)", 0},
> +    {ACPI_DMT_FLAG5,    ACPI_FADT_FLAG_OFFSET (BootFlags,0),        "CMOS RTC Not Present (V5)", 0},
>
>     {ACPI_DMT_UINT8,    ACPI_FADT_OFFSET (Reserved),                "Reserved", 0},
>     {ACPI_DMT_UINT32,   ACPI_FADT_OFFSET (Flags),                   "Flags (decoded below)", DT_FLAG},
> @@ -455,6 +489,8 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoFadt1[] =
>     {ACPI_DMT_FLAG1,    ACPI_FADT_FLAG_OFFSET (Flags,2),            "Remote Power-on capable (V4)", 0},
>     {ACPI_DMT_FLAG2,    ACPI_FADT_FLAG_OFFSET (Flags,2),            "Use APIC Cluster Model (V4)", 0},
>     {ACPI_DMT_FLAG3,    ACPI_FADT_FLAG_OFFSET (Flags,2),            "Use APIC Physical Destination Mode (V4)", 0},
> +    {ACPI_DMT_FLAG4,    ACPI_FADT_FLAG_OFFSET (Flags,2),            "Hardware Reduced (V5)", 0},
> +    {ACPI_DMT_FLAG5,    ACPI_FADT_FLAG_OFFSET (Flags,2),            "Low Power S0 Idle (V5)", 0},
>     ACPI_DMT_TERMINATOR
>  };
>
> @@ -468,7 +504,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoFadt2[] =
>     ACPI_DMT_TERMINATOR
>  };
>
> -/* ACPI 2.0+ Extensions (FADT version 3+) */
> +/* ACPI 2.0+ Extensions (FADT version 3 and 4) */
>
>  ACPI_DMTABLE_INFO           AcpiDmTableInfoFadt3[] =
>  {
> @@ -488,6 +524,15 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoFadt3[] =
>     ACPI_DMT_TERMINATOR
>  };
>
> +/* ACPI 5.0 Extensions (FADT version 5) */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoFadt5[] =
> +{
> +    {ACPI_DMT_GAS,      ACPI_FADT_OFFSET (SleepControl),            "Sleep Control Register", 0},
> +    {ACPI_DMT_GAS,      ACPI_FADT_OFFSET (SleepStatus),             "Sleep Status Register", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
>
>  /*
>  * Remaining tables are not consumed directly by the ACPICA subsystem
> @@ -613,6 +658,24 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoBert[] =
>
>  /*******************************************************************************
>  *
> + * BGRT -  Boot Graphics Resource Table (ACPI 5.0)
> + *
> + ******************************************************************************/
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoBgrt[] =
> +{
> +    {ACPI_DMT_UINT16,   ACPI_BGRT_OFFSET (Version),                 "Version", 0},
> +    {ACPI_DMT_UINT8,    ACPI_BGRT_OFFSET (Status),                  "Status", 0},
> +    {ACPI_DMT_UINT8,    ACPI_BGRT_OFFSET (ImageType),               "Image Type", 0},
> +    {ACPI_DMT_UINT64,   ACPI_BGRT_OFFSET (ImageAddress),            "Image Address", 0},
> +    {ACPI_DMT_UINT32,   ACPI_BGRT_OFFSET (ImageOffsetX),            "Image OffsetX", 0},
> +    {ACPI_DMT_UINT32,   ACPI_BGRT_OFFSET (ImageOffsetY),            "Image OffsetY", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +
> +/*******************************************************************************
> + *
>  * BOOT - Simple Boot Flag Table
>  *
>  ******************************************************************************/
> @@ -744,6 +807,19 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoDmar3[] =
>
>  /*******************************************************************************
>  *
> + * DRTM - Dynamic Root of Trust for Measurement table
> + *
> + ******************************************************************************/
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoDrtm[] =
> +{
> +
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +
> +/*******************************************************************************
> + *
>  * ECDT - Embedded Controller Boot Resources Table
>  *
>  ******************************************************************************/
> @@ -820,6 +896,82 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoErst0[] =
>
>  /*******************************************************************************
>  *
> + * FPDT - Firmware Performance Data Table (ACPI 5.0)
> + *
> + ******************************************************************************/
> +
> +/* Main table consists of only the standard ACPI header - subtables follow */
> +
> +/* FPDT subtable header */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoFpdtHdr[] =
> +{
> +    {ACPI_DMT_UINT16,   ACPI_FPDTH_OFFSET (Type),                   "Subtable Type", 0},
> +    {ACPI_DMT_UINT8,    ACPI_FPDTH_OFFSET (Length),                 "Length", DT_LENGTH},
> +    {ACPI_DMT_UINT8,    ACPI_FPDTH_OFFSET (Revision),               "Revision", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 0: Firmware Basic Boot Performance Record */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoFpdt0[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_FPDT0_OFFSET (Reserved),               "Reserved", 0},
> +    {ACPI_DMT_UINT64,   ACPI_FPDT0_OFFSET (ResetEnd),               "Reset End", 0},
> +    {ACPI_DMT_UINT64,   ACPI_FPDT0_OFFSET (LoadStart),              "Load Image Start", 0},
> +    {ACPI_DMT_UINT64,   ACPI_FPDT0_OFFSET (StartupStart),           "Start Image Start", 0},
> +    {ACPI_DMT_UINT64,   ACPI_FPDT0_OFFSET (ExitServicesEntry),      "Exit Services Entry", 0},
> +    {ACPI_DMT_UINT64,   ACPI_FPDT0_OFFSET (ExitServicesExit),       "Exit Services Exit", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 1: S3 Performance Table Pointer Record */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoFpdt1[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_FPDT1_OFFSET (Reserved),               "Reserved", 0},
> +    {ACPI_DMT_UINT64,   ACPI_FPDT1_OFFSET (Address),                "S3PT Address", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +
> +/*******************************************************************************
> + *
> + * GTDT - Generic Timer Description Table
> + *
> + ******************************************************************************/
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoGtdt[] =
> +{
> +    {ACPI_DMT_UINT64,   ACPI_GTDT_OFFSET (Address),                 "Timer Address", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (Flags),                   "Flags (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_GTDT_FLAG_OFFSET (Flags,0),            "Memory Present", 0},
> +    ACPI_DMT_NEW_LINE,
> +    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (SecurePl1Interrupt),      "Secure PL1 Interrupt", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (SecurePl1Flags),          "SPL1 Flags (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_GTDT_FLAG_OFFSET (SecurePl1Flags,0),   "Trigger Mode", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_GTDT_FLAG_OFFSET (SecurePl1Flags,0),   "Polarity", 0},
> +    ACPI_DMT_NEW_LINE,
> +    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (NonSecurePl1Interrupt),   "Non-Secure PL1 Interrupt", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (NonSecurePl1Flags),       "NSPL1 Flags (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_GTDT_FLAG_OFFSET (NonSecurePl1Flags,0),"Trigger Mode", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_GTDT_FLAG_OFFSET (NonSecurePl1Flags,0),"Polarity", 0},
> +    ACPI_DMT_NEW_LINE,
> +    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (VirtualTimerInterrupt),   "Virtual Timer Interrupt", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (VirtualTimerFlags),       "VT Flags (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Trigger Mode", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Polarity", 0},
> +    ACPI_DMT_NEW_LINE,
> +    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (NonSecurePl2Interrupt),   "Non-Secure PL2 Interrupt", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (NonSecurePl2Flags),       "NSPL2 Flags (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_GTDT_FLAG_OFFSET (NonSecurePl2Flags,0),"Trigger Mode", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_GTDT_FLAG_OFFSET (NonSecurePl2Flags,0),"Polarity", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +
> +/*******************************************************************************
> + *
>  * HEST - Hardware Error Source table
>  *
>  ******************************************************************************/
> @@ -1262,6 +1414,34 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoMadt10[] =
>     ACPI_DMT_TERMINATOR
>  };
>
> +/* 11: Generic Interrupt Controller (ACPI 5.0) */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoMadt11[] =
> +{
> +    {ACPI_DMT_UINT16,   ACPI_MADT11_OFFSET (Reserved),              "Reserved", 0},
> +    {ACPI_DMT_UINT32,   ACPI_MADT11_OFFSET (GicId),                 "Local GIC Hardware ID", 0},
> +    {ACPI_DMT_UINT32,   ACPI_MADT11_OFFSET (Uid),                   "Processor UID", 0},
> +    {ACPI_DMT_UINT32,   ACPI_MADT11_OFFSET (Flags),                 "Flags (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_MADT11_FLAG_OFFSET (Flags,0),          "Processor Enabled", 0},
> +    {ACPI_DMT_UINT32,   ACPI_MADT11_OFFSET (ParkingVersion),        "Parking Protocol Version", 0},
> +    {ACPI_DMT_UINT32,   ACPI_MADT11_OFFSET (PerformanceInterrupt),  "Performance Interrupt", 0},
> +    {ACPI_DMT_UINT64,   ACPI_MADT11_OFFSET (ParkedAddress),         "Parked Address", 0},
> +    {ACPI_DMT_UINT64,   ACPI_MADT11_OFFSET (BaseAddress),           "Base Address", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 12: Generic Interrupt Distributor (ACPI 5.0) */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoMadt12[] =
> +{
> +    {ACPI_DMT_UINT16,   ACPI_MADT12_OFFSET (Reserved),              "Reserved", 0},
> +    {ACPI_DMT_UINT32,   ACPI_MADT12_OFFSET (GicId),                 "Local GIC Hardware ID", 0},
> +    {ACPI_DMT_UINT64,   ACPI_MADT12_OFFSET (BaseAddress),           "Base Address", 0},
> +    {ACPI_DMT_UINT32,   ACPI_MADT12_OFFSET (GlobalIrqBase),         "Interrupt Base", 0},
> +    {ACPI_DMT_UINT32,   ACPI_MADT12_OFFSET (Reserved2),             "Reserved", 0},
> +   ACPI_DMT_TERMINATOR
> +};
> +
>
>  /*******************************************************************************
>  *
> @@ -1312,6 +1492,87 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoMchi[] =
>
>  /*******************************************************************************
>  *
> + * MPST - Memory Power State Table
> + *
> + ******************************************************************************/
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoMpst[] =
> +{
> +    {ACPI_DMT_UINT16,   ACPI_MPST_OFFSET (Reserved1),               "Reserved", 0},
> +    {ACPI_DMT_UINT8,    ACPI_MPST_OFFSET (ChannelId),               "Channel ID", 0},
> +    {ACPI_DMT_UINT8,    ACPI_MPST_OFFSET (Reserved2),               "Reserved", 0},
> +    {ACPI_DMT_UINT16,   ACPI_MPST_OFFSET (PowerNodeCount),          "Power Node Count", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* MPST subtables */
> +
> +/* 0: Memory Power Node Structure */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoMpst0[] =
> +{
> +    {ACPI_DMT_UINT8,    ACPI_MPST0_OFFSET (Flags),                  "Flags (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_MPST0_FLAG_OFFSET (Flags,0),           "Node Enabled", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_MPST0_FLAG_OFFSET (Flags,0),           "Power Managed", 0},
> +    {ACPI_DMT_FLAG2,    ACPI_MPST0_FLAG_OFFSET (Flags,0),           "Hot Plug Capable", 0},
> +
> +    {ACPI_DMT_UINT8,    ACPI_MPST0_OFFSET (Reserved1),              "Reserved", 0},
> +    {ACPI_DMT_UINT16,   ACPI_MPST0_OFFSET (NodeId),                 "Node ID", 0},
> +    {ACPI_DMT_UINT32,   ACPI_MPST0_OFFSET (Length),                 "Length", DT_LENGTH},
> +    {ACPI_DMT_UINT64,   ACPI_MPST0_OFFSET (RangeAddress),           "Range Address", 0},
> +    {ACPI_DMT_UINT64,   ACPI_MPST0_OFFSET (RangeLength),            "Range Length", 0},
> +    {ACPI_DMT_UINT8,    ACPI_MPST0_OFFSET (NumPowerStates),         "Num Power States", 0},
> +    {ACPI_DMT_UINT8,    ACPI_MPST0_OFFSET (NumPhysicalComponents),  "Num Physical Components", 0},
> +    {ACPI_DMT_UINT16,   ACPI_MPST0_OFFSET (Reserved2),              "Reserved", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 0A: Sub-subtable - Memory Power State Structure (follows Memory Power Node above) */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoMpst0A[] =
> +{
> +    {ACPI_DMT_UINT8,    ACPI_MPST0A_OFFSET (PowerState),            "Power State", 0},
> +    {ACPI_DMT_UINT8,    ACPI_MPST0A_OFFSET (InfoIndex),             "InfoIndex", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 0B: Sub-subtable - Physical Component ID Structure (follows Memory Power State(s) above) */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoMpst0B[] =
> +{
> +    {ACPI_DMT_UINT16,   ACPI_MPST0B_OFFSET (ComponentId),           "Component Id", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 01: Power Characteristics Count (follows all Power Node(s) above) */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoMpst1[] =
> +{
> +    {ACPI_DMT_UINT16,   ACPI_MPST1_OFFSET (CharacteristicsCount),   "Characteristics Count", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 02: Memory Power State Characteristics Structure */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoMpst2[] =
> +{
> +    {ACPI_DMT_UINT8,    ACPI_MPST2_OFFSET (Revision),               "Revision", 0},
> +    {ACPI_DMT_UINT8,    ACPI_MPST2_OFFSET (Flags),                  "Flags (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_MPST2_FLAG_OFFSET (Flags,0),           "Memory Preserved", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_MPST2_FLAG_OFFSET (Flags,0),           "Auto Entry", 0},
> +    {ACPI_DMT_FLAG2,    ACPI_MPST2_FLAG_OFFSET (Flags,0),           "Auto Exit", 0},
> +
> +    {ACPI_DMT_UINT16,   ACPI_MPST2_OFFSET (Reserved1),              "Reserved", 0},
> +    {ACPI_DMT_UINT32,   ACPI_MPST2_OFFSET (AveragePower),           "Average Power", 0},
> +    {ACPI_DMT_UINT32,   ACPI_MPST2_OFFSET (PowerSaving),            "Power Saving", 0},
> +    {ACPI_DMT_UINT64,   ACPI_MPST2_OFFSET (ExitLatency),            "Exit Latency", 0},
> +    {ACPI_DMT_UINT64,   ACPI_MPST2_OFFSET (Reserved2),              "Reserved", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +
> +/*******************************************************************************
> + *
>  * MSCT - Maximum System Characteristics Table (ACPI 4.0)
>  *
>  ******************************************************************************/
> @@ -1341,6 +1602,155 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoMsct0[] =
>
>  /*******************************************************************************
>  *
> + * PCCT - Platform Communications Channel Table (ACPI 5.0)
> + *
> + ******************************************************************************/
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoPcct[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_PCCT_OFFSET (Flags),                   "Flags (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_PCCT_FLAG_OFFSET (Flags,0),            "Doorbell", 0},
> +    {ACPI_DMT_UINT32,   ACPI_PCCT_OFFSET (Latency),                 "Command Latency", 0},
> +    {ACPI_DMT_UINT32,   ACPI_PCCT_OFFSET (Reserved),                "Reserved", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* PCCT subtables */
> +
> +/* 0: Generic Communications Subspace */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoPcct0[] =
> +{
> +    {ACPI_DMT_UINT8,    ACPI_PCCT0_OFFSET (Header.Type),            "Subtable Type", 0},
> +    {ACPI_DMT_UINT8,    ACPI_PCCT0_OFFSET (Header.Length),          "Length", DT_LENGTH},
> +    {ACPI_DMT_UINT48,   ACPI_PCCT0_OFFSET (Reserved[0]),            "Reserved", 0},
> +    {ACPI_DMT_UINT64,   ACPI_PCCT0_OFFSET (BaseAddress),            "Base Address", 0},
> +    {ACPI_DMT_UINT64,   ACPI_PCCT0_OFFSET (Length),                 "Address Length", 0},
> +    {ACPI_DMT_GAS,      ACPI_PCCT0_OFFSET (DoorbellRegister),       "Doorbell Register", 0},
> +    {ACPI_DMT_UINT64,   ACPI_PCCT0_OFFSET (PreserveMask),           "Preserve Mask", 0},
> +    {ACPI_DMT_UINT64,   ACPI_PCCT0_OFFSET (WriteMask),              "Write Mask", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +
> +/*******************************************************************************
> + *
> + * PMTT - Platform Memory Topology Table
> + *
> + ******************************************************************************/
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoPmtt[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_PMTT_OFFSET (Reserved),                "Reserved", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* Common Subtable header (one per Subtable) */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoPmttHdr[] =
> +{
> +    {ACPI_DMT_PMTT,     ACPI_PMTTH_OFFSET (Type),                   "Subtable Type", 0},
> +    {ACPI_DMT_UINT8,    ACPI_PMTTH_OFFSET (Reserved1),              "Reserved", 0},
> +    {ACPI_DMT_UINT16,   ACPI_PMTTH_OFFSET (Length),                 "Length", DT_LENGTH},
> +    {ACPI_DMT_UINT16,   ACPI_PMTTH_OFFSET (Flags),                  "Flags (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_PMTTH_FLAG_OFFSET (Flags,0),           "Top-level Device", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_PMTTH_FLAG_OFFSET (Flags,0),           "Physical Element", 0},
> +    {ACPI_DMT_FLAGS2,   ACPI_PMTTH_FLAG_OFFSET (Flags,0),           "Memory Type", 0},
> +    {ACPI_DMT_UINT16,   ACPI_PMTTH_OFFSET (Reserved2),              "Reserved", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* PMTT Subtables */
> +
> +/* 0: Socket */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoPmtt0[] =
> +{
> +    {ACPI_DMT_UINT16,   ACPI_PMTT0_OFFSET (SocketId),               "Socket ID", 0},
> +    {ACPI_DMT_UINT16,   ACPI_PMTT0_OFFSET (Reserved),               "Reserved", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 1: Memory Controller */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoPmtt1[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_PMTT1_OFFSET (ReadLatency),            "Read Latency", 0},
> +    {ACPI_DMT_UINT32,   ACPI_PMTT1_OFFSET (WriteLatency),           "Write Latency", 0},
> +    {ACPI_DMT_UINT32,   ACPI_PMTT1_OFFSET (ReadBandwidth),          "Read Bandwidth", 0},
> +    {ACPI_DMT_UINT32,   ACPI_PMTT1_OFFSET (WriteBandwidth),         "Write Bandwidth", 0},
> +    {ACPI_DMT_UINT16,   ACPI_PMTT1_OFFSET (AccessWidth),            "Access Width", 0},
> +    {ACPI_DMT_UINT16,   ACPI_PMTT1_OFFSET (Alignment),              "Alignment", 0},
> +    {ACPI_DMT_UINT16,   ACPI_PMTT1_OFFSET (Reserved),               "Reserved", 0},
> +    {ACPI_DMT_UINT16,   ACPI_PMTT1_OFFSET (DomainCount),            "Domain Count", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 1a: Proximity Domain */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoPmtt1a[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_PMTT1A_OFFSET (ProximityDomain),       "Proximity Domain", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 2: Physical Component */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoPmtt2[] =
> +{
> +    {ACPI_DMT_UINT16,   ACPI_PMTT2_OFFSET (ComponentId),            "Component ID", 0},
> +    {ACPI_DMT_UINT16,   ACPI_PMTT2_OFFSET (Reserved),               "Reserved", 0},
> +    {ACPI_DMT_UINT32,   ACPI_PMTT2_OFFSET (MemorySize),             "Memory Size", 0},
> +    {ACPI_DMT_UINT32,   ACPI_PMTT2_OFFSET (BiosHandle),             "Bios Handle", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +
> +/*******************************************************************************
> + *
> + * S3PT - S3 Performance Table
> + *
> + ******************************************************************************/
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoS3pt[] =
> +{
> +    {ACPI_DMT_SIG,     ACPI_S3PT_OFFSET (Signature[0]),             "Signature", 0},
> +    {ACPI_DMT_UINT32,  ACPI_S3PT_OFFSET (Length),                   "Length", DT_LENGTH},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* S3PT subtable header */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoS3ptHdr[] =
> +{
> +    {ACPI_DMT_UINT16,  ACPI_S3PTH_OFFSET (Type),                    "Type", 0},
> +    {ACPI_DMT_UINT8,   ACPI_S3PTH_OFFSET (Length),                  "Length", DT_LENGTH},
> +    {ACPI_DMT_UINT8,   ACPI_S3PTH_OFFSET (Revision),                "Revision", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 0: Basic S3 Resume Performance Record */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoS3pt0[] =
> +{
> +    {ACPI_DMT_UINT32,  ACPI_S3PT0_OFFSET (ResumeCount),             "Resume Count", 0},
> +    {ACPI_DMT_UINT64,  ACPI_S3PT0_OFFSET (FullResume),              "Full Resume", 0},
> +    {ACPI_DMT_UINT64,  ACPI_S3PT0_OFFSET (AverageResume),           "Average Resume", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 1: Basic S3 Suspend Performance Record */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoS3pt1[] =
> +{
> +    {ACPI_DMT_UINT64,  ACPI_S3PT1_OFFSET (SuspendStart),            "Suspend Start", 0},
> +    {ACPI_DMT_UINT64,  ACPI_S3PT1_OFFSET (SuspendEnd),              "Suspend End", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +
> +/*******************************************************************************
> + *
>  * SBST - Smart Battery Specification Table
>  *
>  ******************************************************************************/
> @@ -1681,8 +2091,10 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoWdrt[] =
>     ACPI_DMT_TERMINATOR
>  };
>
> +/*! [Begin] no source code translation */
> +
>  /*
> - * Generic types (used in UEFI)
> + * Generic types (used in UEFI and custom tables)
>  *
>  * Examples:
>  *
> @@ -1701,7 +2113,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoWdrt[] =
>  * DevicePath : "\PciRoot(0)\Pci(0x1f,1)\Usb(0,0)"
>  */
>
> -#define ACPI_DM_GENERIC_ENTRY(FieldType, FieldName)\
> +#define ACPI_DM_GENERIC_ENTRY(FieldType, FieldName) \
>     {{FieldType, 0, FieldName, 0}, ACPI_DMT_TERMINATOR}
>
>  ACPI_DMTABLE_INFO           AcpiDmTableInfoGeneric[][2] =
> @@ -1710,6 +2122,8 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoGeneric[][2] =
>     ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT16,     "UINT16"),
>     ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT24,     "UINT24"),
>     ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT32,     "UINT32"),
> +    ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT40,     "UINT40"),
> +    ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT48,     "UINT48"),
>     ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT56,     "UINT56"),
>     ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT64,     "UINT64"),
>     ACPI_DM_GENERIC_ENTRY (ACPI_DMT_STRING,     "String"),
> @@ -1720,3 +2134,4 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoGeneric[][2] =
>     ACPI_DM_GENERIC_ENTRY (ACPI_DMT_LABEL,      "Label"),
>     {ACPI_DMT_TERMINATOR}
>  };
> +/*! [End] no source code translation !*/
> diff --git a/src/acpica/source/compiler/aslanalyze.c b/src/acpica/source/compiler/aslanalyze.c
> index 256ea6f..4a39e41 100644
> --- a/src/acpica/source/compiler/aslanalyze.c
> +++ b/src/acpica/source/compiler/aslanalyze.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -198,7 +198,6 @@ AnCheckId (
>  {
>     UINT32                  i;
>     ACPI_SIZE               Length;
> -    UINT32                  AlphaPrefixLength;
>
>
>     /* Only care about string versions of _HID/_CID (integers are legal) */
> @@ -246,12 +245,18 @@ AnCheckId (
>         {
>             AslError (ASL_ERROR, ASL_MSG_ALPHANUMERIC_STRING,
>                 Op, Op->Asl.Value.String);
> -            break;
> +            return;
>         }
>     }
>
> -    /* _HID String must be of the form "XXX####" or "ACPI####" */
> -
> +    /*
> +     * _HID String must be one of these forms:
> +     *
> +     * "AAA####"    A is an uppercase letter and # is a hex digit
> +     * "ACPI####"   # is a hex digit
> +     * "NNNN####"   N is an uppercase letter or decimal digit (0-9)
> +     *              # is a hex digit (ACPI 5.0)
> +     */
>     if ((Length < 7) || (Length > 8))
>     {
>         AslError (ASL_ERROR, ASL_MSG_HID_LENGTH,
> @@ -259,22 +264,48 @@ AnCheckId (
>         return;
>     }
>
> -    /* _HID Length is valid, now check for uppercase (first 3 or 4 chars) */
> +    /* _HID Length is valid (7 or 8), now check the prefix (first 3 or 4 chars) */
>
> -    AlphaPrefixLength = 3;
> -    if (Length >= 8)
> +    if (Length == 7)
>     {
> -        AlphaPrefixLength = 4;
> +        /* AAA####: Ensure the alphabetic prefix is all uppercase */
> +
> +        for (i = 0; i < 3; i++)
> +        {
> +            if (!isupper ((int) Op->Asl.Value.String[i]))
> +            {
> +                AslError (ASL_ERROR, ASL_MSG_UPPER_CASE,
> +                    Op, &Op->Asl.Value.String[i]);
> +                return;
> +            }
> +        }
> +    }
> +    else /* Length == 8 */
> +    {
> +        /*
> +         * ACPI#### or NNNN####:
> +         * Ensure the prefix contains only uppercase alpha or decimal digits
> +         */
> +        for (i = 0; i < 4; i++)
> +        {
> +            if (!isupper ((int) Op->Asl.Value.String[i]) &&
> +                !isdigit ((int) Op->Asl.Value.String[i]))
> +            {
> +                AslError (ASL_ERROR, ASL_MSG_HID_PREFIX,
> +                    Op, &Op->Asl.Value.String[i]);
> +                return;
> +            }
> +        }
>     }
>
> -    /* Ensure the alphabetic prefix is all uppercase */
> +    /* Remaining characters (suffix) must be hex digits */
>
> -    for (i = 0; (i < AlphaPrefixLength) && Op->Asl.Value.String[i]; i++)
> +    for (; i < Length; i++)
>     {
> -        if (!isupper ((int) Op->Asl.Value.String[i]))
> +        if (!isxdigit ((int) Op->Asl.Value.String[i]))
>         {
> -            AslError (ASL_ERROR, ASL_MSG_UPPER_CASE,
> -                Op, &Op->Asl.Value.String[i]);
> +         AslError (ASL_ERROR, ASL_MSG_HID_SUFFIX,
> +            Op, &Op->Asl.Value.String[i]);
>             break;
>         }
>     }
> diff --git a/src/acpica/source/compiler/aslbtypes.c b/src/acpica/source/compiler/aslbtypes.c
> index d170671..962ae7a 100644
> --- a/src/acpica/source/compiler/aslbtypes.c
> +++ b/src/acpica/source/compiler/aslbtypes.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/compiler/aslcodegen.c b/src/acpica/source/compiler/aslcodegen.c
> index 715e537..2252ab4 100644
> --- a/src/acpica/source/compiler/aslcodegen.c
> +++ b/src/acpica/source/compiler/aslcodegen.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -336,19 +336,24 @@ CgWriteAmlOpcode (
>         /* These opcodes should not get here */
>
>         printf ("Found a node with an unassigned AML opcode\n");
> -        fprintf (stderr, "Found a node with an unassigned AML opcode\n");
> +        FlPrintFile (ASL_FILE_STDERR, "Found a node with an unassigned AML opcode\n");
>         return;
>
>     case AML_INT_RESERVEDFIELD_OP:
>
>         /* Special opcodes for within a field definition */
>
> -        Aml.Opcode = 0x00;
> +        Aml.Opcode = AML_FIELD_OFFSET_OP;
>         break;
>
>     case AML_INT_ACCESSFIELD_OP:
>
> -        Aml.Opcode = 0x01;
> +        Aml.Opcode = AML_FIELD_ACCESS_OP;
> +        break;
> +
> +    case AML_INT_CONNECTION_OP:
> +
> +        Aml.Opcode = AML_FIELD_CONNECTION_OP;
>         break;
>
>     default:
> diff --git a/src/acpica/source/compiler/aslcompile.c b/src/acpica/source/compiler/aslcompile.c
> index 5becc6e..371a6e3 100644
> --- a/src/acpica/source/compiler/aslcompile.c
> +++ b/src/acpica/source/compiler/aslcompile.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -314,10 +314,10 @@ CmFlushSourceCode (
>
>     while (FlReadFile (ASL_FILE_INPUT, &Buffer, 1) != AE_ERROR)
>     {
> -        InsertLineBuffer ((int) Buffer);
> +        AslInsertLineBuffer ((int) Buffer);
>     }
>
> -    ResetCurrentLineBuffer ();
> +    AslResetCurrentLineBuffer ();
>  }
>
>
> @@ -529,6 +529,21 @@ CmDoCompile (
>     Event = UtBeginEvent ("Open input and output files");
>     UtEndEvent (Event);
>
> +    Event = UtBeginEvent ("Preprocess input file");
> +    if (Gbl_PreprocessFlag)
> +    {
> +        /* Preprocessor */
> +
> +        PrDoPreprocess ();
> +        if (Gbl_PreprocessOnly)
> +        {
> +            UtEndEvent (Event);
> +            CmCleanupAndExit ();
> +            return 0;
> +        }
> +    }
> +    UtEndEvent (Event);
> +
>     /* Build the parse tree */
>
>     Event = UtBeginEvent ("Parse source code and build parse tree");
> @@ -544,8 +559,18 @@ CmDoCompile (
>
>     if (!RootNode)
>     {
> -        CmCleanupAndExit ();
> -        return -1;
> +        /*
> +         * If there are no errors, then we have some sort of
> +         * internal problem.
> +         */
> +        Status = AslCheckForErrorExit ();
> +        if (Status == AE_OK)
> +        {
> +            AslError (ASL_ERROR, ASL_MSG_COMPILER_INTERNAL,
> +                NULL, "- Could not resolve parse tree root node");
> +        }
> +
> +        goto ErrorExit;
>     }
>
>     /* Optional parse tree dump, compiler debug output only */
> @@ -578,12 +603,12 @@ CmDoCompile (
>      */
>     Event = UtBeginEvent ("Open AML output file");
>     Status = FlOpenAmlOutputFile (Gbl_OutputFilenamePrefix);
> +    UtEndEvent (Event);
>     if (ACPI_FAILURE (Status))
>     {
>         AePrintErrorLog (ASL_FILE_STDERR);
>         return -1;
>     }
> -    UtEndEvent (Event);
>
>     /* Interpret and generate all compile-time constants */
>
> @@ -613,15 +638,16 @@ CmDoCompile (
>
>     if (Gbl_ParseOnlyFlag)
>     {
> -        AePrintErrorLog (ASL_FILE_STDOUT);
> -        UtDisplaySummary (ASL_FILE_STDOUT);
> +        AePrintErrorLog (ASL_FILE_STDERR);
> +        UtDisplaySummary (ASL_FILE_STDERR);
>         if (Gbl_DebugFlag)
>         {
> -            /* Print error summary to the debug file */
> +            /* Print error summary to the stdout also */
>
> -            AePrintErrorLog (ASL_FILE_STDERR);
> -            UtDisplaySummary (ASL_FILE_STDERR);
> +            AePrintErrorLog (ASL_FILE_STDOUT);
> +            UtDisplaySummary (ASL_FILE_STDOUT);
>         }
> +        UtEndEvent (FullCompile);
>         return 0;
>     }
>
> @@ -636,7 +662,7 @@ CmDoCompile (
>     UtEndEvent (Event);
>     if (ACPI_FAILURE (Status))
>     {
> -        return -1;
> +        goto ErrorExit;
>     }
>
>     /* Namespace cross-reference */
> @@ -645,7 +671,7 @@ CmDoCompile (
>     Status = LkCrossReferenceNamespace ();
>     if (ACPI_FAILURE (Status))
>     {
> -        return -1;
> +        goto ErrorExit;
>     }
>
>     /* Namespace - Check for non-referenced objects */
> @@ -716,6 +742,11 @@ CmDoCompile (
>     UtEndEvent (FullCompile);
>     CmCleanupAndExit ();
>     return 0;
> +
> +ErrorExit:
> +    UtEndEvent (FullCompile);
> +    CmCleanupAndExit ();
> +    return (-1);
>  }
>
>
> @@ -810,12 +841,12 @@ CmCleanupAndExit (
>     UINT32                  i;
>
>
> -    AePrintErrorLog (ASL_FILE_STDOUT);
> +    AePrintErrorLog (ASL_FILE_STDERR);
>     if (Gbl_DebugFlag)
>     {
> -        /* Print error summary to the debug file */
> +        /* Print error summary to stdout also */
>
> -        AePrintErrorLog (ASL_FILE_STDERR);
> +        AePrintErrorLog (ASL_FILE_STDOUT);
>     }
>
>     DbgPrint (ASL_DEBUG_OUTPUT, "\n\nElapsed time for major events\n\n");
> @@ -869,7 +900,9 @@ CmCleanupAndExit (
>
>     /* Close all open files */
>
> -    for (i = 2; i < ASL_MAX_FILE_TYPE; i++)
> +    Gbl_Files[ASL_FILE_PREPROCESSOR].Handle = NULL; /* the .i file is same as source file */
> +
> +    for (i = ASL_FILE_INPUT; i < ASL_MAX_FILE_TYPE; i++)
>     {
>         FlCloseFile (i);
>     }
> @@ -887,6 +920,20 @@ CmCleanupAndExit (
>         }
>     }
>
> +    /* Delete the preprocessor output file (.i) unless -li flag is set */
> +
> +    if (!Gbl_PreprocessorOutputFlag &&
> +        Gbl_PreprocessFlag &&
> +        Gbl_Files[ASL_FILE_PREPROCESSOR].Filename)
> +    {
> +        if (remove (Gbl_Files[ASL_FILE_PREPROCESSOR].Filename))
> +        {
> +            printf ("%s: ",
> +                Gbl_Files[ASL_FILE_PREPROCESSOR].Filename);
> +            perror ("Could not delete preprocessor .i file");
> +        }
> +    }
> +
>     /*
>      * Delete intermediate ("combined") source file (if -ls flag not set)
>      * This file is created during normal ASL/AML compiles. It is not
> diff --git a/src/acpica/source/compiler/aslcompiler.h b/src/acpica/source/compiler/aslcompiler.h
> index ba5b7f8..29558fc 100644
> --- a/src/acpica/source/compiler/aslcompiler.h
> +++ b/src/acpica/source/compiler/aslcompiler.h
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -147,6 +147,7 @@
>  #include "asltypes.h"
>  #include "aslmessages.h"
>  #include "aslglobal.h"
> +#include "preprocess.h"
>
>
>  /*******************************************************************************
> @@ -156,7 +157,7 @@
>  ******************************************************************************/
>
>  /*
> - * parser - generated from flex/bison, lex/yacc, etc.
> + * Main ASL parser - generated from flex/bison, lex/yacc, etc.
>  */
>  int
>  AslCompilerparse(
> @@ -171,11 +172,11 @@ AslCompilerlex(
>     void);
>
>  void
> -ResetCurrentLineBuffer (
> +AslResetCurrentLineBuffer (
>     void);
>
>  void
> -InsertLineBuffer (
> +AslInsertLineBuffer (
>     int                     SourceChar);
>
>  int
> @@ -207,6 +208,11 @@ ACPI_STATUS
>  AslDoOneFile (
>     char                    *Filename);
>
> +ACPI_STATUS
> +AslCheckForErrorExit (
> +    void);
> +
> +
>  /*
>  * aslcompile - compile mainline
>  */
> @@ -375,6 +381,16 @@ AslCommonError (
>     char                    *ExtraMessage);
>
>  void
> +AslCommonError2 (
> +    UINT8                   Level,
> +    UINT8                   MessageId,
> +    UINT32                  LineNumber,
> +    UINT32                  Column,
> +    char                    *SourceLine,
> +    char                    *Filename,
> +    char                    *ExtraMessage);
> +
> +void
>  AePrintException (
>     UINT32                  FileId,
>     ASL_ERROR_MSG           *Enode,
> @@ -706,7 +722,11 @@ FlPrintFile (
>
>  void
>  FlSetLineNumber (
> -    ACPI_PARSE_OBJECT       *Op);
> +    UINT32                  LineNumber);
> +
> +void
> +FlSetFilename (
> +    char                    *Filename);
>
>  ACPI_STATUS
>  FlOpenInputFile (
> @@ -901,21 +921,23 @@ RsAllocateResourceNode (
>     UINT32                  Size);
>
>  void
> -RsCreateBitField (
> +RsCreateResourceField (
>     ACPI_PARSE_OBJECT       *Op,
>     char                    *Name,
>     UINT32                  ByteOffset,
> -    UINT32                  BitOffset);
> +    UINT32                  BitOffset,
> +    UINT32                  BitLength);
>
>  void
> -RsCreateByteField (
> +RsSetFlagBits (
> +    UINT8                   *Flags,
>     ACPI_PARSE_OBJECT       *Op,
> -    char                    *Name,
> -    UINT32                  ByteOffset);
> +    UINT8                   Position,
> +    UINT8                   DefaultBit);
>
>  void
> -RsSetFlagBits (
> -    UINT8                   *Flags,
> +RsSetFlagBits16 (
> +    UINT16                  *Flags,
>     ACPI_PARSE_OBJECT       *Op,
>     UINT8                   Position,
>     UINT8                   DefaultBit);
> @@ -1003,6 +1025,11 @@ RsDoDmaDescriptor (
>     UINT32                  CurrentByteOffset);
>
>  ASL_RESOURCE_NODE *
> +RsDoFixedDmaDescriptor (
> +    ACPI_PARSE_OBJECT       *Op,
> +    UINT32                  CurrentByteOffset);
> +
> +ASL_RESOURCE_NODE *
>  RsDoFixedIoDescriptor (
>     ACPI_PARSE_OBJECT       *Op,
>     UINT32                  CurrentByteOffset);
> @@ -1041,6 +1068,30 @@ RsDoGeneralRegisterDescriptor (
>     ACPI_PARSE_OBJECT       *Op,
>     UINT32                  CurrentByteOffset);
>
> +ASL_RESOURCE_NODE *
> +RsDoGpioIntDescriptor (
> +    ACPI_PARSE_OBJECT       *Op,
> +    UINT32                  CurrentByteOffset);
> +
> +ASL_RESOURCE_NODE *
> +RsDoGpioIoDescriptor (
> +    ACPI_PARSE_OBJECT       *Op,
> +    UINT32                  CurrentByteOffset);
> +
> +ASL_RESOURCE_NODE *
> +RsDoI2cSerialBusDescriptor (
> +    ACPI_PARSE_OBJECT       *Op,
> +    UINT32                  CurrentByteOffset);
> +
> +ASL_RESOURCE_NODE *
> +RsDoSpiSerialBusDescriptor (
> +    ACPI_PARSE_OBJECT       *Op,
> +    UINT32                  CurrentByteOffset);
> +
> +ASL_RESOURCE_NODE *
> +RsDoUartSerialBusDescriptor (
> +    ACPI_PARSE_OBJECT       *Op,
> +    UINT32                  CurrentByteOffset);
>
>  /*
>  * aslrestype2d - DWord address descriptors
> diff --git a/src/acpica/source/compiler/aslcompiler.l b/src/acpica/source/compiler/aslcompiler.l
> index 4215ee3..f911072 100644
> --- a/src/acpica/source/compiler/aslcompiler.l
> +++ b/src/acpica/source/compiler/aslcompiler.l
> @@ -1,8 +1,7 @@
> -
>  %{
>  /******************************************************************************
>  *
> - * Module Name: aslcompiler.l - Flex input file
> + * Module Name: aslcompiler.l - Flex/lex input file
>  *
>  *****************************************************************************/
>
> @@ -10,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -131,22 +130,31 @@ YYSTYPE AslCompilerlval;
>  */
>
>  #define _COMPONENT          ACPI_COMPILER
> -        ACPI_MODULE_NAME    ("aslscan")
> -char
> -comment (void);
> -char
> -comment2 (void);
> -void
> +        ACPI_MODULE_NAME    ("aslscanner")
> +
> +
> +/* Local prototypes */
> +
> +static void
> +AslDoLineDirective (void);
> +
> +static char
> +AslDoComment (void);
> +
> +static char
> +AslDoCommentType2 (void);
> +
> +static char
> +AslDoStringLiteral (void);
> +
> +static void
>  count (int type);
> -char
> -literal (void);
> -void
> -copy (void);
> +
>
>  /*! [Begin] no source code translation */
>
>  %}
> -
> +    /* Definitions */
>
>  LeadNameChar                [A-Za-z_]
>  DigitChar                   [0-9]
> @@ -166,6 +174,7 @@ NonEmptyNamePath            {NameSeg}{NamePathTail}*
>  NamePathTail                [.]{NameSeg}
>
>  %%
> +    /* Rules */
>
>  [ ]                         { count (0); }
>  [\n]                        { count (0); } /* Handle files with both LF and CR/LF */
> @@ -173,10 +182,11 @@ NamePathTail                [.]{NameSeg}
>  [ \t]                       { count (0); }
>
>
> -"/*"                        { if (!comment ()) yyterminate (); }
> -"//"                        { if (!comment2 ()) yyterminate (); }
> +"/*"                        { if (!AslDoComment ()) yyterminate (); }
> +"//"                        { if (!AslDoCommentType2 ()) yyterminate (); }
>
> -"\""                        { if (literal ()) return (PARSEOP_STRING_LITERAL); else yyterminate (); }
> +"\""                        { if (AslDoStringLiteral ()) return (PARSEOP_STRING_LITERAL); else yyterminate (); }
> +";"                         { count (0); return(';'); }
>
>
>  0[xX]{HexDigitChar}+ |
> @@ -184,77 +194,66 @@ NamePathTail                [.]{NameSeg}
>                                 count (1); return (PARSEOP_INTEGER); }
>
>  "Include"                   { count (1); return (PARSEOP_INCLUDE); }
> -"#include"                  { count (1); return (PARSEOP_INCLUDE_CSTYLE); }
> -"#line"                                                { count (1); return (PARSEOP_LINE_CSTYLE); }
>  "External"                  { count (1); return (PARSEOP_EXTERNAL); }
>
> + /*
> +  * The #line directive is emitted by the preprocessor and handled
> +  * here in the main iASL lexer - simply set the line number and
> +  * optionally the current filename.
> +  */
> +"#line"                     { AslDoLineDirective ();}
>
> -"Ones"                      { count (1); return (PARSEOP_ONES); }
> -"One"                       { count (1); return (PARSEOP_ONE); }
> -"Zero"                      { count (1); return (PARSEOP_ZERO); }
> -"Revision"                  { count (1); return (PARSEOP_REVISION); }
>
> -"Offset"                    { count (1); return (PARSEOP_OFFSET); }
> + /****************************************************************************
> +  *
> +  * Main ASL operators
> +  *
> +  ****************************************************************************/
> +
>  "AccessAs"                  { count (1); return (PARSEOP_ACCESSAS); }
> -"BankField"                 { count (2); return (PARSEOP_BANKFIELD); }
> -"CreateBitField"            { count (2); return (PARSEOP_CREATEBITFIELD); }
> -"CreateByteField"           { count (2); return (PARSEOP_CREATEBYTEFIELD); }
> -"CreateDWordField"          { count (2); return (PARSEOP_CREATEDWORDFIELD); }
> -"CreateField"               { count (2); return (PARSEOP_CREATEFIELD); }
> -"CreateQWordField"          { count (2); return (PARSEOP_CREATEQWORDFIELD); }
> -"CreateWordField"           { count (2); return (PARSEOP_CREATEWORDFIELD); }
> -"DataTableRegion"           { count (2); return (PARSEOP_DATATABLEREGION); }
> -"Device"                    { count (2); return (PARSEOP_DEVICE); }
> -"Event"                     { count (2); return (PARSEOP_EVENT); }
> -"Field"                     { count (2); return (PARSEOP_FIELD); }
> -"Function"                  { count (2); return (PARSEOP_FUNCTION); }
> -"IndexField"                { count (2); return (PARSEOP_INDEXFIELD); }
> -"Method"                    { count (2); return (PARSEOP_METHOD); }
> -"Mutex"                     { count (2); return (PARSEOP_MUTEX); }
> -"OperationRegion"           { count (2); return (PARSEOP_OPERATIONREGION); }
> -"PowerResource"             { count (2); return (PARSEOP_POWERRESOURCE); }
> -"Processor"                 { count (2); return (PARSEOP_PROCESSOR); }
> -"ThermalZone"               { count (2); return (PARSEOP_THERMALZONE); }
> +"Acquire"                   { count (3); return (PARSEOP_ACQUIRE); }
> +"Add"                       { count (3); return (PARSEOP_ADD); }
>  "Alias"                     { count (2); return (PARSEOP_ALIAS); }
> -"Name"                      { count (2); return (PARSEOP_NAME); }
> -"Scope"                     { count (2); return (PARSEOP_SCOPE); }
> +"And"                       { count (3); return (PARSEOP_AND); }
> +"BankField"                 { count (2); return (PARSEOP_BANKFIELD); }
>  "Break"                     { count (3); return (PARSEOP_BREAK); }
>  "BreakPoint"                { count (3); return (PARSEOP_BREAKPOINT); }
> -"Continue"                  { count (3); return (PARSEOP_CONTINUE); }
> -"Fatal"                     { count (3); return (PARSEOP_FATAL); }
> -"If"                        { count (3); return (PARSEOP_IF); }
> -"Else"                      { count (3); return (PARSEOP_ELSE); }
> -"ElseIf"                    { count (3); return (PARSEOP_ELSEIF); }
> -"Load"                      { count (3); return (PARSEOP_LOAD); }
> -"Noop"                      { count (3); return (PARSEOP_NOOP); }
> -"Notify"                    { count (3); return (PARSEOP_NOTIFY); }
> -"Release"                   { count (3); return (PARSEOP_RELEASE); }
> -"Reset"                     { count (3); return (PARSEOP_RESET); }
> -"Return"                    { count (3); return (PARSEOP_RETURN); }
> -"Signal"                    { count (3); return (PARSEOP_SIGNAL); }
> -"Sleep"                     { count (3); return (PARSEOP_SLEEP); }
> -"Stall"                     { count (3); return (PARSEOP_STALL); }
> -"Switch"                    { count (3); return (PARSEOP_SWITCH); }
> +"Buffer"                    { count (1); return (PARSEOP_BUFFER); }
>  "Case"                      { count (3); return (PARSEOP_CASE); }
> -"Default"                   { count (3); return (PARSEOP_DEFAULT); }
> -"Unload"                    { count (3); return (PARSEOP_UNLOAD); }
> -"While"                     { count (3); return (PARSEOP_WHILE); }
> -
> -"Acquire"                   { count (3); return (PARSEOP_ACQUIRE); }
> -"Add"                       { count (3); return (PARSEOP_ADD); }
> -"And"                       { count (3); return (PARSEOP_AND); }
>  "Concatenate"               { count (3); return (PARSEOP_CONCATENATE); }
>  "ConcatenateResTemplate"    { count (3); return (PARSEOP_CONCATENATERESTEMPLATE); }
>  "CondRefOf"                 { count (3); return (PARSEOP_CONDREFOF); }
> +"Connection"                { count (2); return (PARSEOP_CONNECTION); }
> +"Continue"                  { count (3); return (PARSEOP_CONTINUE); }
>  "CopyObject"                { count (3); return (PARSEOP_COPYOBJECT); }
> +"CreateBitField"            { count (2); return (PARSEOP_CREATEBITFIELD); }
> +"CreateByteField"           { count (2); return (PARSEOP_CREATEBYTEFIELD); }
> +"CreateDWordField"          { count (2); return (PARSEOP_CREATEDWORDFIELD); }
> +"CreateField"               { count (2); return (PARSEOP_CREATEFIELD); }
> +"CreateQWordField"          { count (2); return (PARSEOP_CREATEQWORDFIELD); }
> +"CreateWordField"           { count (2); return (PARSEOP_CREATEWORDFIELD); }
> +"DataTableRegion"           { count (2); return (PARSEOP_DATATABLEREGION); }
> +"Debug"                     { count (1); return (PARSEOP_DEBUG); }
>  "Decrement"                 { count (3); return (PARSEOP_DECREMENT); }
> +"Default"                   { count (3); return (PARSEOP_DEFAULT); }
> +"DefinitionBlock"           { count (1); return (PARSEOP_DEFINITIONBLOCK); }
>  "DeRefOf"                   { count (3); return (PARSEOP_DEREFOF); }
> +"Device"                    { count (2); return (PARSEOP_DEVICE); }
>  "Divide"                    { count (3); return (PARSEOP_DIVIDE); }
> +"Eisaid"                    { count (1); return (PARSEOP_EISAID); }
> +"Else"                      { count (3); return (PARSEOP_ELSE); }
> +"ElseIf"                    { count (3); return (PARSEOP_ELSEIF); }
> +"Event"                     { count (2); return (PARSEOP_EVENT); }
> +"Fatal"                     { count (3); return (PARSEOP_FATAL); }
> +"Field"                     { count (2); return (PARSEOP_FIELD); }
>  "FindSetLeftBit"            { count (3); return (PARSEOP_FINDSETLEFTBIT); }
>  "FindSetRightBit"           { count (3); return (PARSEOP_FINDSETRIGHTBIT); }
> -"FromBCD"                   { count (3); return (PARSEOP_FROMBCD); }
> +"FromBcd"                   { count (3); return (PARSEOP_FROMBCD); }
> +"Function"                  { count (2); return (PARSEOP_FUNCTION); }
> +"If"                        { count (3); return (PARSEOP_IF); }
>  "Increment"                 { count (3); return (PARSEOP_INCREMENT); }
>  "Index"                     { count (3); return (PARSEOP_INDEX); }
> +"IndexField"                { count (2); return (PARSEOP_INDEXFIELD); }
>  "LAnd"                      { count (3); return (PARSEOP_LAND); }
>  "LEqual"                    { count (3); return (PARSEOP_LEQUAL); }
>  "LGreater"                  { count (3); return (PARSEOP_LGREATER); }
> @@ -263,32 +262,62 @@ NamePathTail                [.]{NameSeg}
>  "LLessEqual"                { count (3); return (PARSEOP_LLESSEQUAL); }
>  "LNot"                      { count (3); return (PARSEOP_LNOT); }
>  "LNotEqual"                 { count (3); return (PARSEOP_LNOTEQUAL); }
> +"Load"                      { count (3); return (PARSEOP_LOAD); }
>  "LoadTable"                 { count (3); return (PARSEOP_LOADTABLE); }
>  "LOr"                       { count (3); return (PARSEOP_LOR); }
>  "Match"                     { count (3); return (PARSEOP_MATCH); }
> +"Method"                    { count (2); return (PARSEOP_METHOD); }
>  "Mid"                       { count (3); return (PARSEOP_MID); }
>  "Mod"                       { count (3); return (PARSEOP_MOD); }
>  "Multiply"                  { count (3); return (PARSEOP_MULTIPLY); }
> +"Mutex"                     { count (2); return (PARSEOP_MUTEX); }
> +"Name"                      { count (2); return (PARSEOP_NAME); }
>  "NAnd"                      { count (3); return (PARSEOP_NAND); }
> +"Noop"                      { count (3); return (PARSEOP_NOOP); }
>  "NOr"                       { count (3); return (PARSEOP_NOR); }
>  "Not"                       { count (3); return (PARSEOP_NOT); }
> +"Notify"                    { count (3); return (PARSEOP_NOTIFY); }
>  "ObjectType"                { count (3); return (PARSEOP_OBJECTTYPE); }
> +"Offset"                    { count (1); return (PARSEOP_OFFSET); }
> +"One"                       { count (1); return (PARSEOP_ONE); }
> +"Ones"                      { count (1); return (PARSEOP_ONES); }
> +"OperationRegion"           { count (2); return (PARSEOP_OPERATIONREGION); }
>  "Or"                        { count (3); return (PARSEOP_OR); }
> +"Package"                   { count (1); return (PARSEOP_PACKAGE); }
> +"PowerResource"             { count (2); return (PARSEOP_POWERRESOURCE); }
> +"Processor"                 { count (2); return (PARSEOP_PROCESSOR); }
>  "RefOf"                     { count (3); return (PARSEOP_REFOF); }
> +"Release"                   { count (3); return (PARSEOP_RELEASE); }
> +"Reset"                     { count (3); return (PARSEOP_RESET); }
> +"Return"                    { count (3); return (PARSEOP_RETURN); }
> +"Revision"                  { count (1); return (PARSEOP_REVISION); }
> +"Scope"                     { count (2); return (PARSEOP_SCOPE); }
>  "ShiftLeft"                 { count (3); return (PARSEOP_SHIFTLEFT); }
>  "ShiftRight"                { count (3); return (PARSEOP_SHIFTRIGHT); }
> +"Signal"                    { count (3); return (PARSEOP_SIGNAL); }
>  "SizeOf"                    { count (3); return (PARSEOP_SIZEOF); }
> +"Sleep"                     { count (3); return (PARSEOP_SLEEP); }
> +"Stall"                     { count (3); return (PARSEOP_STALL); }
>  "Store"                     { count (3); return (PARSEOP_STORE); }
>  "Subtract"                  { count (3); return (PARSEOP_SUBTRACT); }
> +"Switch"                    { count (3); return (PARSEOP_SWITCH); }
> +"ThermalZone"               { count (2); return (PARSEOP_THERMALZONE); }
>  "Timer"                     { count (3); return (PARSEOP_TIMER); }
> -"ToBCD"                     { count (3); return (PARSEOP_TOBCD); }
> +"ToBcd"                     { count (3); return (PARSEOP_TOBCD); }
>  "ToBuffer"                  { count (3); return (PARSEOP_TOBUFFER); }
>  "ToDecimalString"           { count (3); return (PARSEOP_TODECIMALSTRING); }
>  "ToHexString"               { count (3); return (PARSEOP_TOHEXSTRING); }
>  "ToInteger"                 { count (3); return (PARSEOP_TOINTEGER); }
>  "ToString"                  { count (3); return (PARSEOP_TOSTRING); }
> +"ToUuid"                    { count (1); return (PARSEOP_TOUUID); }
> +"Unicode"                   { count (1); return (PARSEOP_UNICODE); }
> +"Unload"                    { count (3); return (PARSEOP_UNLOAD); }
>  "Wait"                      { count (3); return (PARSEOP_WAIT); }
> +"While"                     { count (3); return (PARSEOP_WHILE); }
>  "XOr"                       { count (3); return (PARSEOP_XOR); }
> +"Zero"                      { count (1); return (PARSEOP_ZERO); }
> +
> +    /* Control method arguments and locals */
>
>  "Arg0"                      { count (1); return (PARSEOP_ARG0); }
>  "Arg1"                      { count (1); return (PARSEOP_ARG1); }
> @@ -297,7 +326,6 @@ NamePathTail                [.]{NameSeg}
>  "Arg4"                      { count (1); return (PARSEOP_ARG4); }
>  "Arg5"                      { count (1); return (PARSEOP_ARG5); }
>  "Arg6"                      { count (1); return (PARSEOP_ARG6); }
> -
>  "Local0"                    { count (1); return (PARSEOP_LOCAL0); }
>  "Local1"                    { count (1); return (PARSEOP_LOCAL1); }
>  "Local2"                    { count (1); return (PARSEOP_LOCAL2); }
> @@ -307,16 +335,16 @@ NamePathTail                [.]{NameSeg}
>  "Local6"                    { count (1); return (PARSEOP_LOCAL6); }
>  "Local7"                    { count (1); return (PARSEOP_LOCAL7); }
>
> -"Debug"                     { count (1); return (PARSEOP_DEBUG); }
>
> -"DefinitionBlock"           { count (1); return (PARSEOP_DEFINITIONBLOCK); }
> -"Buffer"                    { count (1); return (PARSEOP_BUFFER); }
> -"Package"                   { count (1); return (PARSEOP_PACKAGE); }
> + /****************************************************************************
> +  *
> +  * Resource Descriptor macros
> +  *
> +  ****************************************************************************/
>
> -"EISAID"                    { count (1); return (PARSEOP_EISAID); }
>  "ResourceTemplate"          { count (1); return (PARSEOP_RESOURCETEMPLATE); }
> -"ToUUID"                    { count (1); return (PARSEOP_TOUUID); }
> -"Unicode"                   { count (1); return (PARSEOP_UNICODE); }
> +"RawDataBuffer"             { count (1); return (PARSEOP_DATABUFFER); }
> +
>  "DMA"                       { count (1); return (PARSEOP_DMA); }
>  "DWordIO"                   { count (1); return (PARSEOP_DWORDIO); }
>  "DWordMemory"               { count (1); return (PARSEOP_DWORDMEMORY); }
> @@ -325,70 +353,50 @@ NamePathTail                [.]{NameSeg}
>  "ExtendedIO"                { count (1); return (PARSEOP_EXTENDEDIO); }
>  "ExtendedMemory"            { count (1); return (PARSEOP_EXTENDEDMEMORY); }
>  "ExtendedSpace"             { count (1); return (PARSEOP_EXTENDEDSPACE); }
> +"FixedDma"                  { count (1); return (PARSEOP_FIXEDDMA); }
>  "FixedIO"                   { count (1); return (PARSEOP_FIXEDIO); }
> +"GpioInt"                   { count (1); return (PARSEOP_GPIO_INT); }
> +"GpioIo"                    { count (1); return (PARSEOP_GPIO_IO); }
> +"I2cSerialBus"              { count (1); return (PARSEOP_I2C_SERIALBUS); }
>  "Interrupt"                 { count (1); return (PARSEOP_INTERRUPT); }
>  "IO"                        { count (1); return (PARSEOP_IO); }
> -"IRQNoFlags"                { count (1); return (PARSEOP_IRQNOFLAGS); }
>  "IRQ"                       { count (1); return (PARSEOP_IRQ); }
> +"IRQNoFlags"                { count (1); return (PARSEOP_IRQNOFLAGS); }
>  "Memory24"                  { count (1); return (PARSEOP_MEMORY24); }
> -"Memory32Fixed"             { count (1); return (PARSEOP_MEMORY32FIXED); }
>  "Memory32"                  { count (1); return (PARSEOP_MEMORY32); }
> +"Memory32Fixed"             { count (1); return (PARSEOP_MEMORY32FIXED); }
>  "QWordIO"                   { count (1); return (PARSEOP_QWORDIO); }
>  "QWordMemory"               { count (1); return (PARSEOP_QWORDMEMORY); }
>  "QWordSpace"                { count (1); return (PARSEOP_QWORDSPACE); }
>  "Register"                  { count (1); return (PARSEOP_REGISTER); }
> +"SpiSerialBus"              { count (1); return (PARSEOP_SPI_SERIALBUS); }
>  "StartDependentFn"          { count (1); return (PARSEOP_STARTDEPENDENTFN); }
>  "StartDependentFnNoPri"     { count (1); return (PARSEOP_STARTDEPENDENTFN_NOPRI); }
> +"UartSerialBus"             { count (1); return (PARSEOP_UART_SERIALBUS); }
>  "VendorLong"                { count (1); return (PARSEOP_VENDORLONG); }
>  "VendorShort"               { count (1); return (PARSEOP_VENDORSHORT); }
>  "WordBusNumber"             { count (1); return (PARSEOP_WORDBUSNUMBER); }
>  "WordIO"                    { count (1); return (PARSEOP_WORDIO); }
>  "WordSpace"                 { count (1); return (PARSEOP_WORDSPACE); }
>
> -"UnknownObj"                { count (0); return (PARSEOP_OBJECTTYPE_UNK); }
> -"IntObj"                    { count (0); return (PARSEOP_OBJECTTYPE_INT); }
> -"StrObj"                    { count (0); return (PARSEOP_OBJECTTYPE_STR); }
> -"BuffObj"                   { count (0); return (PARSEOP_OBJECTTYPE_BUF); }
> -"PkgObj"                    { count (0); return (PARSEOP_OBJECTTYPE_PKG); }
> -"FieldUnitObj"              { count (0); return (PARSEOP_OBJECTTYPE_FLD); }
> -"DeviceObj"                 { count (0); return (PARSEOP_OBJECTTYPE_DEV); }
> -"EventObj"                  { count (0); return (PARSEOP_OBJECTTYPE_EVT); }
> -"MethodObj"                 { count (0); return (PARSEOP_OBJECTTYPE_MTH); }
> -"MutexObj"                  { count (0); return (PARSEOP_OBJECTTYPE_MTX); }
> -"OpRegionObj"               { count (0); return (PARSEOP_OBJECTTYPE_OPR); }
> -"PowerResObj"               { count (0); return (PARSEOP_OBJECTTYPE_POW); }
> -"ProcessorObj"              { count (0); return (PARSEOP_OBJECTTYPE_PRO); }
> -"ThermalZoneObj"            { count (0); return (PARSEOP_OBJECTTYPE_THZ); }
> -"BuffFieldObj"              { count (0); return (PARSEOP_OBJECTTYPE_BFF); }
> -"DDBHandleObj"              { count (0); return (PARSEOP_OBJECTTYPE_DDB); }
> -
> -"AnyAcc"                    { count (0); return (PARSEOP_ACCESSTYPE_ANY); }
> -"ByteAcc"                   { count (0); return (PARSEOP_ACCESSTYPE_BYTE); }
> -"WordAcc"                   { count (0); return (PARSEOP_ACCESSTYPE_WORD); }
> -"DWordAcc"                  { count (0); return (PARSEOP_ACCESSTYPE_DWORD); }
> -"QWordAcc"                  { count (0); return (PARSEOP_ACCESSTYPE_QWORD); }
> -"BufferAcc"                 { count (0); return (PARSEOP_ACCESSTYPE_BUF); }
> -
> -"Lock"                      { count (0); return (PARSEOP_LOCKRULE_LOCK); }
> -"NoLock"                    { count (0); return (PARSEOP_LOCKRULE_NOLOCK); }
>
> -"Preserve"                  { count (0); return (PARSEOP_UPDATERULE_PRESERVE); }
> -"WriteAsOnes"               { count (0); return (PARSEOP_UPDATERULE_ONES); }
> -"WriteAsZeros"              { count (0); return (PARSEOP_UPDATERULE_ZEROS); }
> + /****************************************************************************
> +  *
> +  * Keywords used as arguments to ASL operators and macros
> +  *
> +  ****************************************************************************/
>
> -"Serialized"                { count (0); return (PARSEOP_SERIALIZERULE_SERIAL); }
> -"NotSerialized"             { count (0); return (PARSEOP_SERIALIZERULE_NOTSERIAL); }
> +    /*  AccessAttribKeyword: Serial Bus Attributes (ACPI 5.0) */
>
> -"SystemIO"                  { count (0); return (PARSEOP_REGIONSPACE_IO); }
> -"SystemMemory"              { count (0); return (PARSEOP_REGIONSPACE_MEM); }
> -"PCI_Config"                { count (0); return (PARSEOP_REGIONSPACE_PCI); }
> -"EmbeddedControl"           { count (0); return (PARSEOP_REGIONSPACE_EC); }
> -"SMBus"                     { count (0); return (PARSEOP_REGIONSPACE_SMBUS); }
> -"SystemCMOS"                { count (0); return (PARSEOP_REGIONSPACE_CMOS); }
> -"PciBarTarget"              { count (0); return (PARSEOP_REGIONSPACE_PCIBAR); }
> -"IPMI"                      { count (0); return (PARSEOP_REGIONSPACE_IPMI); }
> +"AttribQuick"               { count (0); return (PARSEOP_ACCESSATTRIB_QUICK); }
> +"AttribSendReceive"         { count (0); return (PARSEOP_ACCESSATTRIB_SND_RCV); }
> +"AttribByte"                { count (0); return (PARSEOP_ACCESSATTRIB_BYTE); }
> +"AttribWord"                { count (0); return (PARSEOP_ACCESSATTRIB_WORD); }
> +"AttribBlock"               { count (0); return (PARSEOP_ACCESSATTRIB_BLOCK); }
> +"AttribProcessCall"         { count (0); return (PARSEOP_ACCESSATTRIB_WORD_CALL); }
> +"AttribBlockProcessCall"    { count (0); return (PARSEOP_ACCESSATTRIB_BLOCK_CALL); }
>
> -"FFixedHW"                  { count (0); return (PARSEOP_ADDRESSSPACE_FFIXEDHW); }
> +    /* AccessAttribKeyword: Legacy synonyms for above (pre-ACPI 5.0) */
>
>  "SMBQuick"                  { count (0); return (PARSEOP_ACCESSATTRIB_QUICK); }
>  "SMBSendReceive"            { count (0); return (PARSEOP_ACCESSATTRIB_SND_RCV); }
> @@ -398,789 +406,319 @@ NamePathTail                [.]{NameSeg}
>  "SMBProcessCall"            { count (0); return (PARSEOP_ACCESSATTRIB_WORD_CALL); }
>  "SMBBlockProcessCall"       { count (0); return (PARSEOP_ACCESSATTRIB_BLOCK_CALL); }
>
> -"MTR"                       { count (0); return (PARSEOP_MATCHTYPE_MTR); }
> -"MEQ"                       { count (0); return (PARSEOP_MATCHTYPE_MEQ); }
> -"MLE"                       { count (0); return (PARSEOP_MATCHTYPE_MLE); }
> -"MLT"                       { count (0); return (PARSEOP_MATCHTYPE_MLT); }
> -"MGE"                       { count (0); return (PARSEOP_MATCHTYPE_MGE); }
> -"MGT"                       { count (0); return (PARSEOP_MATCHTYPE_MGT); }
> +    /* AccessTypeKeyword: Field Access Types */
>
> -"Compatibility"             { count (0); return (PARSEOP_DMATYPE_COMPATIBILITY); }
> -"TypeA"                     { count (0); return (PARSEOP_DMATYPE_A); }
> -"TypeB"                     { count (0); return (PARSEOP_DMATYPE_B); }
> -"TypeF"                     { count (0); return (PARSEOP_DMATYPE_F); }
> -
> -"BusMaster"                 { count (0); return (PARSEOP_BUSMASTERTYPE_MASTER); }
> -"NotBusMaster"              { count (0); return (PARSEOP_BUSMASTERTYPE_NOTMASTER); }
> -
> -"Transfer8"                 { count (0); return (PARSEOP_XFERTYPE_8); }
> -"Transfer8_16"              { count (0); return (PARSEOP_XFERTYPE_8_16); }
> -"Transfer16"                { count (0); return (PARSEOP_XFERTYPE_16); }
> -
> -"ResourceConsumer"          { count (0); return (PARSEOP_RESOURCETYPE_CONSUMER); }
> -"ResourceProducer"          { count (0); return (PARSEOP_RESOURCETYPE_PRODUCER); }
> -
> -"MinFixed"                  { count (0); return (PARSEOP_MINTYPE_FIXED); }
> -"MinNotFixed"               { count (0); return (PARSEOP_MINTYPE_NOTFIXED); }
> -
> -"MaxFixed"                  { count (0); return (PARSEOP_MAXTYPE_FIXED); }
> -"MaxNotFixed"               { count (0); return (PARSEOP_MAXTYPE_NOTFIXED); }
> -
> -"PosDecode"                 { count (0); return (PARSEOP_DECODETYPE_POS); }
> -"SubDecode"                 { count (0); return (PARSEOP_DECODETYPE_SUB); }
> -
> -"ISAOnlyRanges"             { count (0); return (PARSEOP_RANGETYPE_ISAONLY); }
> -"NonISAOnlyRanges"          { count (0); return (PARSEOP_RANGETYPE_NONISAONLY); }
> -"EntireRange"               { count (0); return (PARSEOP_RANGETYPE_ENTIRE); }
> -
> -"Cacheable"                 { count (0); return (PARSEOP_MEMTYPE_CACHEABLE); }
> -"WriteCombining"            { count (0); return (PARSEOP_MEMTYPE_WRITECOMBINING); }
> -"Prefetchable"              { count (0); return (PARSEOP_MEMTYPE_PREFETCHABLE); }
> -"NonCacheable"              { count (0); return (PARSEOP_MEMTYPE_NONCACHEABLE); }
> -
> -"ReadWrite"                 { count (0); return (PARSEOP_READWRITETYPE_BOTH); }
> -"ReadOnly"                  { count (0); return (PARSEOP_READWRITETYPE_READONLY); }
> -
> -"Edge"                      { count (0); return (PARSEOP_INTTYPE_EDGE); }
> -"Level"                     { count (0); return (PARSEOP_INTTYPE_LEVEL); }
> -
> -"ActiveHigh"                { count (0); return (PARSEOP_INTLEVEL_ACTIVEHIGH); }
> -"ActiveLow"                 { count (0); return (PARSEOP_INTLEVEL_ACTIVELOW); }
> -
> -"Shared"                    { count (0); return (PARSEOP_SHARETYPE_SHARED); }
> -"Exclusive"                 { count (0); return (PARSEOP_SHARETYPE_EXCLUSIVE); }
> +"AnyAcc"                    { count (0); return (PARSEOP_ACCESSTYPE_ANY); }
> +"ByteAcc"                   { count (0); return (PARSEOP_ACCESSTYPE_BYTE); }
> +"WordAcc"                   { count (0); return (PARSEOP_ACCESSTYPE_WORD); }
> +"DWordAcc"                  { count (0); return (PARSEOP_ACCESSTYPE_DWORD); }
> +"QWordAcc"                  { count (0); return (PARSEOP_ACCESSTYPE_QWORD); }
> +"BufferAcc"                 { count (0); return (PARSEOP_ACCESSTYPE_BUF); }
>
> -"Decode10"                  { count (0); return (PARSEOP_IODECODETYPE_10); }
> -"Decode16"                  { count (0); return (PARSEOP_IODECODETYPE_16); }
> +    /* AddressingModeKeyword: Mode - Resource Descriptors (ACPI 5.0) */
>
> -"TypeTranslation"           { count (0); return (PARSEOP_TYPE_TRANSLATION); }
> -"TypeStatic"                { count (0); return (PARSEOP_TYPE_STATIC); }
> +"AddressingMode7Bit"        { count (0); return (PARSEOP_ADDRESSINGMODE_7BIT); }
> +"AddressingMode10Bit"       { count (0); return (PARSEOP_ADDRESSINGMODE_10BIT); }
>
> -"SparseTranslation"         { count (0); return (PARSEOP_TRANSLATIONTYPE_SPARSE); }
> -"DenseTranslation"          { count (0); return (PARSEOP_TRANSLATIONTYPE_DENSE); }
> +    /* AddressKeyword: ACPI memory range types */
>
>  "AddressRangeMemory"        { count (0); return (PARSEOP_ADDRESSTYPE_MEMORY); }
>  "AddressRangeReserved"      { count (0); return (PARSEOP_ADDRESSTYPE_RESERVED); }
>  "AddressRangeNVS"           { count (0); return (PARSEOP_ADDRESSTYPE_NVS); }
>  "AddressRangeACPI"          { count (0); return (PARSEOP_ADDRESSTYPE_ACPI); }
>
> -"__DATE__"                  { count (0); return (PARSEOP___DATE__); }
> -"__FILE__"                  { count (0); return (PARSEOP___FILE__); }
> -"__LINE__"                  { count (0); return (PARSEOP___LINE__); }
> -
> -"{"                         { count (0); return('{'); }
> -"}"                         { count (0); return('}'); }
> -","                         { count (0); return(','); }
> -"("                         { count (0); return('('); }
> -")"                         { count (0); return(')'); }
> -
> -
> -{NameSeg}                   { char *s;
> -                                count (0);
> -                                s=malloc (ACPI_NAME_SIZE + 1);
> -                                if (strcmp (AslCompilertext, "\\"))
> -                                {
> -                                    strcpy (s, "____");
> -                                    AcpiUtStrupr (AslCompilertext);
> -                                }
> -                                memcpy (s, AslCompilertext, strlen (AslCompilertext));
> -                                AslCompilerlval.s = s;
> -                                DbgPrint (ASL_PARSE_OUTPUT, "NameSeg: %s\n", s);
> -                                return (PARSEOP_NAMESEG); }
> -
> -{NameString}                { char *s;
> -                                count (0);
> -                                s=malloc (strlen (AslCompilertext)+1);
> -                                AcpiUtStrupr (AslCompilertext);
> -                                strcpy (s, AslCompilertext);
> -                                s[strlen (AslCompilertext)] = 0;
> -                                AslCompilerlval.s = s;
> -                                DbgPrint (ASL_PARSE_OUTPUT, "NameString: %s\n", s);
> -                                return (PARSEOP_NAMESTRING); }
> -
> -"*" |
> -"/"                         { count (1);
> -                                AslCompilererror ("Parse error, expecting ASL keyword or name");}
> -
> -.                           { count (1);
> -                                sprintf (MsgBuffer,
> -                                    "Invalid character (0x%2.2X), expecting ASL keyword or name",
> -                                    *AslCompilertext);
> -                                AslCompilererror (MsgBuffer);}
> -
> -<<EOF>>                     { if (AslPopInputFileStack ())
> -                                yyterminate();
> -                              else
> -                                return (PARSEOP_INCLUDE_END);};
> -
> -%%
> -
> -/*! [End] no source code translation !*/
> -
> -typedef struct asl_file_node
> -{
> -    FILE                    *File;
> -    UINT32                  CurrentLineNumber;
> -    YY_BUFFER_STATE         State;
> -    char                    *Filename;
> -    struct asl_file_node    *Next;
> -
> -} ASL_FILE_NODE;
> -
> -ASL_FILE_NODE               *InputStack = NULL;
> +    /* BusMasterKeyword: DMA Bus Mastering */
>
> +"BusMaster"                 { count (0); return (PARSEOP_BUSMASTERTYPE_MASTER); }
> +"NotBusMaster"              { count (0); return (PARSEOP_BUSMASTERTYPE_NOTMASTER); }
>
> -/*******************************************************************************
> - *
> - * FUNCTION:    AslPopInputFileStack
> - *
> - * PARAMETERS:  None
> - *
> - * RETURN:      0 if a node was popped, -1 otherwise
> - *
> - * DESCRIPTION: Pop the top of the input file stack and point the parser to
> - *              the saved parse buffer contained in the fnode.  Also, set the
> - *              global line counters to the saved values.  This function is
> - *              called when an include file reaches EOF.
> - *
> - ******************************************************************************/
> -
> -int
> -AslPopInputFileStack (
> -    void)
> -{
> -    ASL_FILE_NODE           *Fnode;
> -    FILE                    *InputFile = NULL;
> -
> -
> -    Fnode = InputStack;
> -    DbgPrint (ASL_PARSE_OUTPUT, "\nPop InputFile Stack, Fnode %p\n\n", Fnode);
> -
> -
> -    if (!Fnode)
> -    {
> -        return -1;
> -    }
> -
> -    /* Close the current include file */
> -
> -    fclose (yyin);
> +    /* ByteLengthKeyword: Bits per Byte - Resource Descriptors (ACPI 5.0) */
>
> -    /* Update the top-of-stack */
> +"DataBitsFive"              { count (0); return (PARSEOP_BITSPERBYTE_FIVE); }
> +"DataBitsSix"               { count (0); return (PARSEOP_BITSPERBYTE_SIX); }
> +"DataBitsSeven"             { count (0); return (PARSEOP_BITSPERBYTE_SEVEN); }
> +"DataBitsEight"             { count (0); return (PARSEOP_BITSPERBYTE_EIGHT); }
> +"DataBitsNine"              { count (0); return (PARSEOP_BITSPERBYTE_NINE); }
>
> -    InputStack = Fnode->Next;
> -    InputFile = Fnode->File;
> +    /* ClockPhaseKeyword: Resource Descriptors (ACPI 5.0) */
>
> -    /* Reset global line counter and filename */
> +"ClockPhaseFirst"           { count (0); return (PARSEOP_CLOCKPHASE_FIRST); }
> +"ClockPhaseSecond"          { count (0); return (PARSEOP_CLOCKPHASE_SECOND); }
>
> -    Gbl_Files[ASL_FILE_INPUT].Filename = Fnode->Filename;
> -    Gbl_CurrentLineNumber = Fnode->CurrentLineNumber;
> +    /* ClockPolarityKeyword: Resource Descriptors (ACPI 5.0) */
>
> -    /* Point the parser to the popped file */
> +"ClockPolarityLow"          { count (0); return (PARSEOP_CLOCKPOLARITY_LOW); }
> +"ClockPolarityHigh"         { count (0); return (PARSEOP_CLOCKPOLARITY_HIGH); }
>
> -    yy_delete_buffer (YY_CURRENT_BUFFER);
> -    yy_switch_to_buffer (Fnode->State);
> +    /* DecodeKeyword: Type of Memory Decoding - Resource Descriptors */
>
> -    /* All done with this node */
> +"PosDecode"                 { count (0); return (PARSEOP_DECODETYPE_POS); }
> +"SubDecode"                 { count (0); return (PARSEOP_DECODETYPE_SUB); }
>
> -    ACPI_FREE (Fnode);
> -    return 0;
> -}
> +    /* DmaTypeKeyword: DMA Types - DMA Resource Descriptor */
>
> +"Compatibility"             { count (0); return (PARSEOP_DMATYPE_COMPATIBILITY); }
> +"TypeA"                     { count (0); return (PARSEOP_DMATYPE_A); }
> +"TypeB"                     { count (0); return (PARSEOP_DMATYPE_B); }
> +"TypeF"                     { count (0); return (PARSEOP_DMATYPE_F); }
>
> -/*******************************************************************************
> - *
> - * FUNCTION:    AslPushInputFileStack
> - *
> - * PARAMETERS:  InputFile           - Open file pointer
> - *              Filename            - Name of the file
> - *
> - * RETURN:      None
> - *
> - * DESCRIPTION: Push the InputFile onto the file stack, and point the parser
> - *              to this file.  Called when an include file is successfully
> - *              opened.
> - *
> - ******************************************************************************/
> +    /* EndianKeyword: Endian type - Resource Descriptor (ACPI 5.0) */
>
> -void
> -AslPushInputFileStack (
> -    FILE                    *InputFile,
> -    char                    *Filename)
> -{
> -    ASL_FILE_NODE           *Fnode;
> -    YY_BUFFER_STATE         State;
> +"LittleEndian"              { count (0); return (PARSEOP_ENDIAN_LITTLE); }
> +"BigEndian"                 { count (0); return (PARSEOP_ENDIAN_BIG); }
>
> +    /* ExtendedAttribKeyword: Bus attributes, AccessAs operator (ACPI 5.0) */
>
> -    /* Save the current state in an Fnode */
> +"AttribBytes"               { count (0); return (PARSEOP_ACCESSATTRIB_MULTIBYTE); }
> +"AttribRawBytes"            { count (0); return (PARSEOP_ACCESSATTRIB_RAW_BYTES); }
> +"AttribRawProcessBytes"     { count (0); return (PARSEOP_ACCESSATTRIB_RAW_PROCESS); }
>
> -    Fnode = UtLocalCalloc (sizeof (ASL_FILE_NODE));
> +    /* FlowControlKeyword: Resource Descriptors (ACPI 5.0) */
>
> -    Fnode->File                 = yyin;
> -    Fnode->Next                 = InputStack;
> -    Fnode->State                = YY_CURRENT_BUFFER;
> -    Fnode->CurrentLineNumber    = Gbl_CurrentLineNumber;
> -    Fnode->Filename             = Gbl_Files[ASL_FILE_INPUT].Filename;
> +"FlowControlHardware"       { count (0); return (PARSEOP_FLOWCONTROL_HW); }
> +"FlowControlNone"           { count (0); return (PARSEOP_FLOWCONTROL_NONE); }
> +"FlowControlXon"            { count (0); return (PARSEOP_FLOWCONTROL_SW); }
>
> -    /* Push it on the stack */
> +    /* InterruptLevelKeyword: Interrupt Active Types */
>
> -    InputStack = Fnode;
> +"ActiveBoth"                { count (0); return (PARSEOP_INTLEVEL_ACTIVEBOTH); }
> +"ActiveHigh"                { count (0); return (PARSEOP_INTLEVEL_ACTIVEHIGH); }
> +"ActiveLow"                 { count (0); return (PARSEOP_INTLEVEL_ACTIVELOW); }
>
> -    /* Point the parser to this file */
> +    /* InterruptTypeKeyword: Interrupt Types */
>
> -    State = yy_create_buffer (InputFile, YY_BUF_SIZE);
> -    yy_switch_to_buffer (State);
> +"Edge"                      { count (0); return (PARSEOP_INTTYPE_EDGE); }
> +"Level"                     { count (0); return (PARSEOP_INTTYPE_LEVEL); }
>
> -    DbgPrint (ASL_PARSE_OUTPUT, "\nPush InputFile Stack, returning %p\n\n", InputFile);
> +    /* IoDecodeKeyword: Type of Memory Decoding - Resource Descriptors */
>
> -    /* Reset the global line count and filename */
> +"Decode10"                  { count (0); return (PARSEOP_IODECODETYPE_10); }
> +"Decode16"                  { count (0); return (PARSEOP_IODECODETYPE_16); }
>
> -    Gbl_Files[ASL_FILE_INPUT].Filename = Filename;
> -    Gbl_CurrentLineNumber = 1;
> -    yyin = InputFile;
> -}
> +    /* IoRestrictionKeyword: I/O Restriction - GPIO Resource Descriptors (ACPI 5.0) */
>
> +"IoRestrictionNone"         { count (0); return (PARSEOP_IORESTRICT_NONE); }
> +"IoRestrictionInputOnly"    { count (0); return (PARSEOP_IORESTRICT_IN); }
> +"IoRestrictionOutputOnly"   { count (0); return (PARSEOP_IORESTRICT_OUT); }
> +"IoRestrictionNoneAndPreserve"   { count (0); return (PARSEOP_IORESTRICT_PRESERVE); }
>
> -/*******************************************************************************
> - *
> - * FUNCTION:    ResetCurrentLineBuffer
> - *
> - * PARAMETERS:  None
> - *
> - * RETURN:      None
> - *
> - * DESCRIPTION: Reset the Line Buffer to zero, increment global line numbers.
> - *
> - ******************************************************************************/
> +    /* LockRuleKeyword: Global Lock use for Field Operator */
>
> -void
> -ResetCurrentLineBuffer (
> -    void)
> -{
> +"Lock"                      { count (0); return (PARSEOP_LOCKRULE_LOCK); }
> +"NoLock"                    { count (0); return (PARSEOP_LOCKRULE_NOLOCK); }
>
> -    if (Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Handle)
> -    {
> -        FlWriteFile (ASL_FILE_SOURCE_OUTPUT, Gbl_CurrentLineBuffer,
> -            Gbl_LineBufPtr - Gbl_CurrentLineBuffer);
> -    }
> +    /* MatchOpKeyword: Types for Match Operator */
>
> -    Gbl_CurrentLineOffset += Gbl_CurrentColumn;
> -    Gbl_CurrentColumn = 0;
> +"MTR"                       { count (0); return (PARSEOP_MATCHTYPE_MTR); }
> +"MEQ"                       { count (0); return (PARSEOP_MATCHTYPE_MEQ); }
> +"MLE"                       { count (0); return (PARSEOP_MATCHTYPE_MLE); }
> +"MLT"                       { count (0); return (PARSEOP_MATCHTYPE_MLT); }
> +"MGE"                       { count (0); return (PARSEOP_MATCHTYPE_MGE); }
> +"MGT"                       { count (0); return (PARSEOP_MATCHTYPE_MGT); }
>
> -    Gbl_CurrentLineNumber++;
> -    Gbl_LogicalLineNumber++;
> -    Gbl_LineBufPtr = Gbl_CurrentLineBuffer;
> -}
> +    /* MaxKeyword: Max Range Type - Resource Descriptors */
>
> +"MaxFixed"                  { count (0); return (PARSEOP_MAXTYPE_FIXED); }
> +"MaxNotFixed"               { count (0); return (PARSEOP_MAXTYPE_NOTFIXED); }
>
> -/*******************************************************************************
> - *
> - * FUNCTION:    InsertLineBuffer
> - *
> - * PARAMETERS:  SourceChar      - One char from the input ASL source file
> - *
> - * RETURN:      None
> - *
> - * DESCRIPTION: Put one character of the source file into the temp line buffer
> - *
> - ******************************************************************************/
> +    /* MemTypeKeyword: Memory Types - Resource Descriptors */
>
> -#define ASL_SPACES_PER_TAB  4
> +"Cacheable"                 { count (0); return (PARSEOP_MEMTYPE_CACHEABLE); }
> +"WriteCombining"            { count (0); return (PARSEOP_MEMTYPE_WRITECOMBINING); }
> +"Prefetchable"              { count (0); return (PARSEOP_MEMTYPE_PREFETCHABLE); }
> +"NonCacheable"              { count (0); return (PARSEOP_MEMTYPE_NONCACHEABLE); }
>
> -void
> -InsertLineBuffer (
> -    int                     SourceChar)
> -{
> -    UINT32                  i;
> -    UINT32                  Count = 1;
> +    /* MinKeyword: Min Range Type - Resource Descriptors */
>
> +"MinFixed"                  { count (0); return (PARSEOP_MINTYPE_FIXED); }
> +"MinNotFixed"               { count (0); return (PARSEOP_MINTYPE_NOTFIXED); }
>
> -    if (SourceChar == EOF)
> -    {
> -        return;
> -    }
> +    /* ObjectTypeKeyword: ACPI Object Types */
>
> -    Gbl_InputByteCount++;
> +"UnknownObj"                { count (0); return (PARSEOP_OBJECTTYPE_UNK); }
> +"IntObj"                    { count (0); return (PARSEOP_OBJECTTYPE_INT); }
> +"StrObj"                    { count (0); return (PARSEOP_OBJECTTYPE_STR); }
> +"BuffObj"                   { count (0); return (PARSEOP_OBJECTTYPE_BUF); }
> +"PkgObj"                    { count (0); return (PARSEOP_OBJECTTYPE_PKG); }
> +"FieldUnitObj"              { count (0); return (PARSEOP_OBJECTTYPE_FLD); }
> +"DeviceObj"                 { count (0); return (PARSEOP_OBJECTTYPE_DEV); }
> +"EventObj"                  { count (0); return (PARSEOP_OBJECTTYPE_EVT); }
> +"MethodObj"                 { count (0); return (PARSEOP_OBJECTTYPE_MTH); }
> +"MutexObj"                  { count (0); return (PARSEOP_OBJECTTYPE_MTX); }
> +"OpRegionObj"               { count (0); return (PARSEOP_OBJECTTYPE_OPR); }
> +"PowerResObj"               { count (0); return (PARSEOP_OBJECTTYPE_POW); }
> +"ProcessorObj"              { count (0); return (PARSEOP_OBJECTTYPE_PRO); }
> +"ThermalZoneObj"            { count (0); return (PARSEOP_OBJECTTYPE_THZ); }
> +"BuffFieldObj"              { count (0); return (PARSEOP_OBJECTTYPE_BFF); }
> +"DDBHandleObj"              { count (0); return (PARSEOP_OBJECTTYPE_DDB); }
>
> -    /* Handle tabs.  Convert to spaces */
> +    /* ParityKeyword: Resource Descriptors (ACPI 5.0) */
>
> -    if (SourceChar == '\t')
> -    {
> -        SourceChar = ' ';
> -        Count = ASL_SPACES_PER_TAB -
> -                    (Gbl_CurrentColumn & (ASL_SPACES_PER_TAB-1));
> -    }
> +"ParityTypeSpace"           { count (0); return (PARSEOP_PARITYTYPE_SPACE); }
> +"ParityTypeMark"            { count (0); return (PARSEOP_PARITYTYPE_MARK); }
> +"ParityTypeOdd"             { count (0); return (PARSEOP_PARITYTYPE_ODD); }
> +"ParityTypeEven"            { count (0); return (PARSEOP_PARITYTYPE_EVEN); }
> +"ParityTypeNone"            { count (0); return (PARSEOP_PARITYTYPE_NONE); }
>
> +    /* PinConfigKeyword: Pin Configuration - GPIO Resource Descriptors (ACPI 5.0) */
>
> -    for (i = 0; i < Count; i++)
> -    {
> -        Gbl_CurrentColumn++;
> +"PullDefault"               { count (0); return (PARSEOP_PIN_PULLDEFAULT); }
> +"PullUp"                    { count (0); return (PARSEOP_PIN_PULLUP); }
> +"PullDown"                  { count (0); return (PARSEOP_PIN_PULLDOWN); }
> +"PullNone"                  { count (0); return (PARSEOP_PIN_NOPULL); }
>
> -        /* Insert the character into the line buffer */
> +    /* PolarityKeyword: Resource Descriptors (ACPI 5.0) */
>
> -        *Gbl_LineBufPtr = (UINT8) SourceChar;
> -        Gbl_LineBufPtr++;
> +"PolarityLow"               { count (0); return (PARSEOP_DEVICEPOLARITY_LOW); }
> +"PolarityHigh"              { count (0); return (PARSEOP_DEVICEPOLARITY_HIGH); }
>
> -        if (Gbl_LineBufPtr > (Gbl_CurrentLineBuffer + (ASL_LINE_BUFFER_SIZE - 1)))
> -        {
> -#if 0
> -            /*
> -             * Warning if we have split a long source line.
> -             * <Probably overkill>
> -             */
> -            sprintf (MsgBuffer, "Max %u", ASL_LINE_BUFFER_SIZE);
> -            AslCommonError (ASL_WARNING, ASL_MSG_LONG_LINE,
> -                            Gbl_CurrentLineNumber, Gbl_LogicalLineNumber,
> -                            Gbl_CurrentLineOffset, Gbl_CurrentColumn,
> -                            Gbl_Files[ASL_FILE_INPUT].Filename, MsgBuffer);
> -#endif
> +    /* RangeTypeKeyword: I/O Range Types - Resource Descriptors */
>
> -            ResetCurrentLineBuffer ();
> -        }
> -        else if (SourceChar == '\n')
> -        {
> -            /* End of line */
> +"ISAOnlyRanges"             { count (0); return (PARSEOP_RANGETYPE_ISAONLY); }
> +"NonISAOnlyRanges"          { count (0); return (PARSEOP_RANGETYPE_NONISAONLY); }
> +"EntireRange"               { count (0); return (PARSEOP_RANGETYPE_ENTIRE); }
>
> -            ResetCurrentLineBuffer ();
> -        }
> -    }
> -}
> +    /* ReadWriteKeyword: Memory Access Types - Resource Descriptors */
>
> +"ReadWrite"                 { count (0); return (PARSEOP_READWRITETYPE_BOTH); }
> +"ReadOnly"                  { count (0); return (PARSEOP_READWRITETYPE_READONLY); }
>
> -/*******************************************************************************
> - *
> - * FUNCTION:    count
> - *
> - * PARAMETERS:  yytext      - Contains the matched keyword.
> - *              Type        - Keyword/Character type:
> - *                             0 = anything except a keyword
> - *                             1 = pseudo-keywords
> - *                             2 = non-executable ASL keywords
> - *                             3 = executable ASL keywords
> - *
> - * RETURN:      None
> - *
> - * DESCRIPTION: Count keywords and put them into the line buffer
> - *
> - ******************************************************************************/
> +    /* RegionSpaceKeyword: Operation Region Address Space Types */
>
> -void
> -count (
> -    int                 Type)
> -{
> -    int                 i;
> +"SystemIO"                  { count (0); return (PARSEOP_REGIONSPACE_IO); }
> +"SystemMemory"              { count (0); return (PARSEOP_REGIONSPACE_MEM); }
> +"PCI_Config"                { count (0); return (PARSEOP_REGIONSPACE_PCI); }
> +"EmbeddedControl"           { count (0); return (PARSEOP_REGIONSPACE_EC); }
> +"SMBus"                     { count (0); return (PARSEOP_REGIONSPACE_SMBUS); }
> +"SystemCMOS"                { count (0); return (PARSEOP_REGIONSPACE_CMOS); }
> +"PciBarTarget"              { count (0); return (PARSEOP_REGIONSPACE_PCIBAR); }
> +"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 */
> +"FFixedHW"                  { count (0); return (PARSEOP_REGIONSPACE_FFIXEDHW); }
>
> +    /* ResourceTypeKeyword: Resource Usage - Resource Descriptors */
>
> -    switch (Type)
> -    {
> -    case 2:
> -        TotalKeywords++;
> -        TotalNamedObjects++;
> -        break;
> +"ResourceConsumer"          { count (0); return (PARSEOP_RESOURCETYPE_CONSUMER); }
> +"ResourceProducer"          { count (0); return (PARSEOP_RESOURCETYPE_PRODUCER); }
>
> -    case 3:
> -        TotalKeywords++;
> -        TotalExecutableOpcodes++;
> -        break;
> -    }
> +    /* SerializeRuleKeyword: Control Method Serialization */
>
> -    for (i = 0; (yytext[i] != 0) && (yytext[i] != EOF); i++)
> -    {
> -        InsertLineBuffer (yytext[i]);
> -        *Gbl_LineBufPtr = 0;
> -    }
> -}
> +"Serialized"                { count (0); return (PARSEOP_SERIALIZERULE_SERIAL); }
> +"NotSerialized"             { count (0); return (PARSEOP_SERIALIZERULE_NOTSERIAL); }
>
> +    /* ShareTypeKeyword: Interrupt Sharing - Resource Descriptors */
>
> -/*******************************************************************************
> - *
> - * FUNCTION:    comment
> - *
> - * PARAMETERS:  none
> - *
> - * RETURN:      none
> - *
> - * DESCRIPTION: Process a standard comment.
> - *
> - ******************************************************************************/
> +"Shared"                    { count (0); return (PARSEOP_SHARETYPE_SHARED); }
> +"Exclusive"                 { count (0); return (PARSEOP_SHARETYPE_EXCLUSIVE); }
> +"SharedAndWake"             { count (0); return (PARSEOP_SHARETYPE_SHAREDWAKE); }       /* ACPI 5.0 */
> +"ExclusiveAndWake"          { count (0); return (PARSEOP_SHARETYPE_EXCLUSIVEWAKE); }    /* ACPI 5.0 */
>
> -char
> -comment (void)
> -{
> -    char                c;
> -    char                c1 = 0;
> +    /* SlaveModeKeyword: Resource Descriptors (ACPI 5.0) */
>
> +"ControllerInitiated"       { count (0); return (PARSEOP_SLAVEMODE_CONTROLLERINIT); }
> +"DeviceInitiated"           { count (0); return (PARSEOP_SLAVEMODE_DEVICEINIT); }
>
> -    InsertLineBuffer ('/');
> -    InsertLineBuffer ('*');
> +    /* StopBitsKeyword: Resource Descriptors (ACPI 5.0) */
>
> -loop:
> +"StopBitsOne"               { count (0); return (PARSEOP_STOPBITS_ONE); }
> +"StopBitsOnePlusHalf"       { count (0); return (PARSEOP_STOPBITS_ONEPLUSHALF); }
> +"StopBitsTwo"               { count (0); return (PARSEOP_STOPBITS_TWO); }
> +"StopBitsZero"              { count (0); return (PARSEOP_STOPBITS_ZERO); }
>
> -    /* Eat chars until end-of-comment */
> +    /* TransferWidthKeyword: DMA Widths - Fixed DMA Resource Descriptor (ACPI 5.0) */
>
> -    while ((c = (char) input()) != '*' && c != EOF)
> -    {
> -        InsertLineBuffer (c);
> -        c1 = c;
> -    }
> +"Width8bit"                 { count (0); return (PARSEOP_XFERSIZE_8); }
> +"Width16bit"                { count (0); return (PARSEOP_XFERSIZE_16); }
> +"Width32bit"                { count (0); return (PARSEOP_XFERSIZE_32); }
> +"Width64bit"                { count (0); return (PARSEOP_XFERSIZE_64); }
> +"Width128bit"               { count (0); return (PARSEOP_XFERSIZE_128); }
> +"Width256bit"               { count (0); return (PARSEOP_XFERSIZE_256); }
>
> -    if (c == EOF)
> -    {
> -        goto EarlyEOF;
> -    }
> +    /* TranslationKeyword: Translation Density Types - Resource Descriptors */
>
> -    /*
> -     * Check for nested comment -- can help catch cases where a previous
> -     * comment was accidently left unterminated
> -     */
> -    if ((c1 == '/') && (c == '*'))
> -    {
> -        AslCommonError (ASL_WARNING, ASL_MSG_NESTED_COMMENT,
> -                        Gbl_CurrentLineNumber, Gbl_LogicalLineNumber,
> -                        Gbl_InputByteCount, Gbl_CurrentColumn,
> -                        Gbl_Files[ASL_FILE_INPUT].Filename, NULL);
> -    }
> +"SparseTranslation"         { count (0); return (PARSEOP_TRANSLATIONTYPE_SPARSE); }
> +"DenseTranslation"          { count (0); return (PARSEOP_TRANSLATIONTYPE_DENSE); }
>
> -    /* Comment is closed only if the NEXT character is a slash */
> +    /* TypeKeyword: Translation Types - Resource Descriptors */
>
> -    InsertLineBuffer (c);
> +"TypeTranslation"           { count (0); return (PARSEOP_TYPE_TRANSLATION); }
> +"TypeStatic"                { count (0); return (PARSEOP_TYPE_STATIC); }
>
> -    if ((c1 = (char) input()) != '/' && c1 != EOF)
> -    {
> -        unput(c1);
> -        goto loop;
> -    }
> +    /* UpdateRuleKeyword: Field Update Rules */
>
> -    if (c1 == EOF)
> -    {
> -        goto EarlyEOF;
> -    }
> +"Preserve"                  { count (0); return (PARSEOP_UPDATERULE_PRESERVE); }
> +"WriteAsOnes"               { count (0); return (PARSEOP_UPDATERULE_ONES); }
> +"WriteAsZeros"              { count (0); return (PARSEOP_UPDATERULE_ZEROS); }
>
> -    InsertLineBuffer (c1);
> -    return TRUE;
> +    /* WireModeKeyword: SPI Wire Mode - Resource Descriptors (ACPI 5.0) */
>
> +"FourWireMode"              { count (0); return (PARSEOP_WIREMODE_FOUR); }
> +"ThreeWireMode"             { count (0); return (PARSEOP_WIREMODE_THREE); }
>
> -EarlyEOF:
> -    /*
> -     * Premature End-Of-File
> -     */
> -    AslCommonError (ASL_ERROR, ASL_MSG_EARLY_EOF,
> -                    Gbl_CurrentLineNumber, Gbl_LogicalLineNumber,
> -                    Gbl_CurrentLineOffset, Gbl_CurrentColumn,
> -                    Gbl_Files[ASL_FILE_INPUT].Filename, NULL);
> -    return (FALSE);
> -}
> +    /* XferTypeKeyword: DMA Transfer Types */
>
> +"Transfer8"                 { count (0); return (PARSEOP_XFERTYPE_8); }
> +"Transfer8_16"              { count (0); return (PARSEOP_XFERTYPE_8_16); }
> +"Transfer16"                { count (0); return (PARSEOP_XFERTYPE_16); }
>
> -/*******************************************************************************
> - *
> - * FUNCTION:    comment
> - *
> - * PARAMETERS:  none
> - *
> - * RETURN:      none
> - *
> - * DESCRIPTION: Process a new "//" comment.
> - *
> - ******************************************************************************/
> +    /* Predefined compiler names */
>
> -char
> -comment2 (void)
> -{
> -    char                c;
> +"__DATE__"                  { count (0); return (PARSEOP___DATE__); }
> +"__FILE__"                  { count (0); return (PARSEOP___FILE__); }
> +"__LINE__"                  { count (0); return (PARSEOP___LINE__); }
> +"__PATH__"                  { count (0); return (PARSEOP___PATH__); }
>
>
> -    InsertLineBuffer ('/');
> -    InsertLineBuffer ('/');
> +"{"                         { count (0); return('{'); }
> +"}"                         { count (0); return('}'); }
> +","                         { count (0); return(','); }
> +"("                         { count (0); return('('); }
> +")"                         { count (0); return(')'); }
>
> -    while ((c = (char) input()) != '\n' && c != EOF)
> -    {
> -        InsertLineBuffer (c);
> -    }
> +{NameSeg}                   { char *s;
> +                                count (0);
> +                                s=malloc (ACPI_NAME_SIZE + 1);
> +                                if (strcmp (AslCompilertext, "\\"))
> +                                {
> +                                    strcpy (s, "____");
> +                                    AcpiUtStrupr (AslCompilertext);
> +                                }
> +                                memcpy (s, AslCompilertext, strlen (AslCompilertext));
> +                                AslCompilerlval.s = s;
> +                                DbgPrint (ASL_PARSE_OUTPUT, "NameSeg: %s\n", s);
> +                                return (PARSEOP_NAMESEG); }
>
> -    if (c == EOF)
> -    {
> -        /* End of file is OK, change to newline. Let parser detect EOF later */
> +{NameString}                { char *s;
> +                                count (0);
> +                                s=malloc (strlen (AslCompilertext)+1);
> +                                AcpiUtStrupr (AslCompilertext);
> +                                strcpy (s, AslCompilertext);
> +                                s[strlen (AslCompilertext)] = 0;
> +                                AslCompilerlval.s = s;
> +                                DbgPrint (ASL_PARSE_OUTPUT, "NameString: %s\n", s);
> +                                return (PARSEOP_NAMESTRING); }
>
> -        c = '\n';
> -    }
> +"*" |
> +"/"                         { count (1);
> +                                AslCompilererror ("Parse error, expecting ASL keyword or name");}
>
> -    InsertLineBuffer (c);
> -    return (TRUE);
> -}
> +.                           { count (1);
> +                                sprintf (MsgBuffer,
> +                                    "Invalid character (0x%2.2X), expecting ASL keyword or name",
> +                                    *AslCompilertext);
> +                                AslCompilererror (MsgBuffer);}
>
> +<<EOF>>                     { if (AslPopInputFileStack ())
> +                                yyterminate();
> +                              else
> +                                return (PARSEOP_INCLUDE_END);};
>
> -/*******************************************************************************
> - *
> - * FUNCTION:    literal
> - *
> - * PARAMETERS:  none
> - *
> - * RETURN:      none
> - *
> - * DESCRIPTION: Process a string literal (surrounded by quotes)
> - *
> - ******************************************************************************/
> -
> -#define ASL_NORMAL_CHAR         0
> -#define ASL_ESCAPE_SEQUENCE     1
> -#define ASL_OCTAL_CONSTANT      2
> -#define ASL_HEX_CONSTANT        3
> -
> -char
> -literal (void)
> -{
> -    char                *StringBuffer = MsgBuffer;
> -    char                *EndBuffer = MsgBuffer + ASL_MSG_BUFFER_SIZE;
> -    char                *CleanString;
> -    char                StringChar;
> -    UINT32              State = ASL_NORMAL_CHAR;
> -    UINT32              i = 0;
> -    UINT8               Digit;
> -    char                ConvertBuffer[4];
> -
> -
> -    /*
> -     * Eat chars until end-of-literal.
> -     * NOTE:  Put back the original surrounding quotes into the
> -     * source line buffer.
> -     */
> -    InsertLineBuffer ('\"');
> -    while ((StringChar = (char) input()) != EOF)
> -    {
> -        InsertLineBuffer (StringChar);
> -
> -DoCharacter:
> -
> -        switch (State)
> -        {
> -        case ASL_NORMAL_CHAR:
> -
> -            switch (StringChar)
> -            {
> -            case '\\':
> -                /*
> -                 * Special handling for backslash-escape sequence.  We will
> -                 * toss the backslash and translate the escape char(s).
> -                 */
> -                State = ASL_ESCAPE_SEQUENCE;
> -                continue;
> -
> -            case '\"':
> -
> -                /* String terminator */
> -
> -                goto CompletedString;
> -            }
> -            break;
> -
> -
> -        case ASL_ESCAPE_SEQUENCE:
> -
> -            State = ASL_NORMAL_CHAR;
> -            switch (StringChar)
> -            {
> -            case 'a':
> -                StringChar = 0x07;      /* BELL */
> -                break;
> -
> -            case 'b':
> -                StringChar = 0x08;      /* BACKSPACE */
> -                break;
> -
> -            case 'f':
> -                StringChar = 0x0C;      /* FORMFEED */
> -                break;
> -
> -            case 'n':
> -                StringChar = 0x0A;      /* LINEFEED */
> -                break;
> -
> -            case 'r':
> -                StringChar = 0x0D;      /* CARRIAGE RETURN*/
> -                break;
> -
> -            case 't':
> -                StringChar = 0x09;      /* HORIZONTAL TAB */
> -                break;
> -
> -            case 'v':
> -                StringChar = 0x0B;      /* VERTICAL TAB */
> -                break;
> -
> -            case 'x':
> -                State = ASL_HEX_CONSTANT;
> -                i = 0;
> -                continue;
> -
> -            case '\'':                  /* Single Quote */
> -            case '\"':                  /* Double Quote */
> -            case '\\':                  /* Backslash */
> -                break;
> -
> -            default:
> -
> -                /* Check for an octal digit (0-7) */
> -
> -                if (ACPI_IS_OCTAL_DIGIT (StringChar))
> -                {
> -                    State = ASL_OCTAL_CONSTANT;
> -                    ConvertBuffer[0] = StringChar;
> -                    i = 1;
> -                    continue;
> -                }
> -
> -                /* Unknown escape sequence issue warning, but use the character */
> -
> -                AslCommonError (ASL_WARNING, ASL_MSG_INVALID_ESCAPE,
> -                                Gbl_CurrentLineNumber, Gbl_LogicalLineNumber,
> -                                Gbl_CurrentLineOffset, Gbl_CurrentColumn,
> -                                Gbl_Files[ASL_FILE_INPUT].Filename, NULL);
> -                               break;
> -            }
> -            break;
> -
> -
> -        case ASL_OCTAL_CONSTANT:
> -
> -            /* Up to three octal digits allowed */
> -
> -            if (!ACPI_IS_OCTAL_DIGIT (StringChar) ||
> -                (i > 2))
> -            {
> -                /*
> -                 * Reached end of the constant.  Convert the assembled ASCII
> -                 * string and resume processing of the next character
> -                 */
> -                ConvertBuffer[i] = 0;
> -                Digit = (UINT8) ACPI_STRTOUL (ConvertBuffer, NULL, 8);
> -
> -                /* Check for NULL or non-ascii character (ignore if so) */
> -
> -                if ((Digit == 0) || (Digit > ACPI_ASCII_MAX))
> -                {
> -                    AslCommonError (ASL_WARNING, ASL_MSG_INVALID_STRING,
> -                                    Gbl_CurrentLineNumber, Gbl_LogicalLineNumber,
> -                                    Gbl_CurrentLineOffset, Gbl_CurrentColumn,
> -                                    Gbl_Files[ASL_FILE_INPUT].Filename, NULL);
> -                }
> -                else
> -                {
> -                    *StringBuffer = (char) Digit;
> -                    StringBuffer++;
> -                    if (StringBuffer >= EndBuffer)
> -                    {
> -                        goto BufferOverflow;
> -                    }
> -                }
> -
> -                State = ASL_NORMAL_CHAR;
> -                goto DoCharacter;
> -                break;
> -            }
> -
> -            /* Append another digit of the constant */
> -
> -            ConvertBuffer[i] = StringChar;
> -            i++;
> -            continue;
> -
> -
> -        case ASL_HEX_CONSTANT:
> -
> -            /* Up to two hex digits allowed */
> -
> -            if (!ACPI_IS_XDIGIT (StringChar) ||
> -                (i > 1))
> -            {
> -                /*
> -                 * Reached end of the constant.  Convert the assembled ASCII
> -                 * string and resume processing of the next character
> -                 */
> -                ConvertBuffer[i] = 0;
> -                Digit = (UINT8) ACPI_STRTOUL (ConvertBuffer, NULL, 16);
> -
> -                /* Check for NULL or non-ascii character (ignore if so) */
> -
> -                if ((Digit == 0) || (Digit > ACPI_ASCII_MAX))
> -                {
> -                    AslCommonError (ASL_WARNING, ASL_MSG_INVALID_STRING,
> -                                    Gbl_CurrentLineNumber, Gbl_LogicalLineNumber,
> -                                    Gbl_CurrentLineOffset, Gbl_CurrentColumn,
> -                                    Gbl_Files[ASL_FILE_INPUT].Filename, NULL);
> -                }
> -                else
> -                {
> -                    *StringBuffer = (char) Digit;
> -                    StringBuffer++;
> -                    if (StringBuffer >= EndBuffer)
> -                    {
> -                        goto BufferOverflow;
> -                    }
> -                }
> -
> -                State = ASL_NORMAL_CHAR;
> -                goto DoCharacter;
> -                break;
> -            }
> -
> -            /* Append another digit of the constant */
> -
> -            ConvertBuffer[i] = StringChar;
> -            i++;
> -            continue;
> -        }
> -
> -        /* Save the finished character */
> -
> -        *StringBuffer = StringChar;
> -        StringBuffer++;
> -        if (StringBuffer >= EndBuffer)
> -        {
> -            goto BufferOverflow;
> -        }
> -    }
> -
> -    /*
> -     * Premature End-Of-File
> -     */
> -    AslCommonError (ASL_ERROR, ASL_MSG_EARLY_EOF,
> -                    Gbl_CurrentLineNumber, Gbl_LogicalLineNumber,
> -                    Gbl_CurrentLineOffset, Gbl_CurrentColumn,
> -                    Gbl_Files[ASL_FILE_INPUT].Filename, NULL);
> -    return (FALSE);
> -
> -
> -CompletedString:
> -    /*
> -     * Null terminate the input string and copy string to a new buffer
> -     */
> -    *StringBuffer = 0;
> -
> -    CleanString = UtGetStringBuffer (strlen (MsgBuffer) + 1);
> -    if (!CleanString)
> -    {
> -        AslCommonError (ASL_ERROR, ASL_MSG_MEMORY_ALLOCATION,
> -                        Gbl_CurrentLineNumber, Gbl_LogicalLineNumber,
> -                        Gbl_CurrentLineOffset, Gbl_CurrentColumn,
> -                        Gbl_Files[ASL_FILE_INPUT].Filename, NULL);
> -        return (FALSE);
> -    }
> -
> -    ACPI_STRCPY (CleanString, MsgBuffer);
> -    AslCompilerlval.s = CleanString;
> -    return (TRUE);
> -
> -
> -BufferOverflow:
> -
> -    /* Literal was too long */
> -
> -    AslCommonError (ASL_ERROR, ASL_MSG_STRING_LENGTH,
> -                    Gbl_CurrentLineNumber, Gbl_LogicalLineNumber,
> -                    Gbl_CurrentLineOffset, Gbl_CurrentColumn,
> -                    Gbl_Files[ASL_FILE_INPUT].Filename, "Max length 4096");
> -    return (FALSE);
> -}
> +%%
>
> +/*! [End] no source code translation !*/
>
> +/*
> + * Bring in the scanner support routines
> + */
> +#include "aslsupport.l"
> diff --git a/src/acpica/source/compiler/aslcompiler.y b/src/acpica/source/compiler/aslcompiler.y
> index 6156b52..9aa8b51 100644
> --- a/src/acpica/source/compiler/aslcompiler.y
> +++ b/src/acpica/source/compiler/aslcompiler.y
> @@ -1,8 +1,7 @@
> -
>  %{
>  /******************************************************************************
>  *
> - * Module Name: aslcompiler.y - Bison input file (ASL grammar and actions)
> + * Module Name: aslcompiler.y - Bison/Yacc input file (ASL grammar and actions)
>  *
>  *****************************************************************************/
>
> @@ -10,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -151,6 +150,11 @@ void *                      AslLocalAllocate (unsigned int Size);
>  #define YYDEBUG             1               /* Enable debug output */
>  #define YYERROR_VERBOSE     1               /* Verbose error messages */
>
> +/* Define YYMALLOC/YYFREE to prevent redefinition errors  */
> +
> +#define YYMALLOC            malloc
> +#define YYFREE              free
> +
>  /*
>  * The windows version of bison defines this incorrectly as "32768" (Not negative).
>  * We use a custom (edited binary) version of bison that defines YYFLAG as YYFBAD
> @@ -178,22 +182,28 @@ void *                      AslLocalAllocate (unsigned int Size);
>  * These shift/reduce conflicts are expected. There should be zero
>  * reduce/reduce conflicts.
>  */
> -%expect 60
> +%expect 86
>
> -/*
> +/******************************************************************************
> + *
>  * Token types: These are returned by the lexer
>  *
>  * NOTE: This list MUST match the AslKeywordMapping table found
>  *       in aslmap.c EXACTLY!  Double check any changes!
> - */
> + *
> + *****************************************************************************/
> +
>  %token <i> PARSEOP_ACCESSAS
>  %token <i> PARSEOP_ACCESSATTRIB_BLOCK
>  %token <i> PARSEOP_ACCESSATTRIB_BLOCK_CALL
>  %token <i> PARSEOP_ACCESSATTRIB_BYTE
> -%token <i> PARSEOP_ACCESSATTRIB_WORD_CALL
> +%token <i> PARSEOP_ACCESSATTRIB_MULTIBYTE
>  %token <i> PARSEOP_ACCESSATTRIB_QUICK
> +%token <i> PARSEOP_ACCESSATTRIB_RAW_BYTES
> +%token <i> PARSEOP_ACCESSATTRIB_RAW_PROCESS
>  %token <i> PARSEOP_ACCESSATTRIB_SND_RCV
>  %token <i> PARSEOP_ACCESSATTRIB_WORD
> +%token <i> PARSEOP_ACCESSATTRIB_WORD_CALL
>  %token <i> PARSEOP_ACCESSTYPE_ANY
>  %token <i> PARSEOP_ACCESSTYPE_BUF
>  %token <i> PARSEOP_ACCESSTYPE_BYTE
> @@ -202,7 +212,8 @@ void *                      AslLocalAllocate (unsigned int Size);
>  %token <i> PARSEOP_ACCESSTYPE_WORD
>  %token <i> PARSEOP_ACQUIRE
>  %token <i> PARSEOP_ADD
> -%token <i> PARSEOP_ADDRESSSPACE_FFIXEDHW
> +%token <i> PARSEOP_ADDRESSINGMODE_7BIT
> +%token <i> PARSEOP_ADDRESSINGMODE_10BIT
>  %token <i> PARSEOP_ADDRESSTYPE_ACPI
>  %token <i> PARSEOP_ADDRESSTYPE_MEMORY
>  %token <i> PARSEOP_ADDRESSTYPE_NVS
> @@ -217,6 +228,11 @@ void *                      AslLocalAllocate (unsigned int Size);
>  %token <i> PARSEOP_ARG5
>  %token <i> PARSEOP_ARG6
>  %token <i> PARSEOP_BANKFIELD
> +%token <i> PARSEOP_BITSPERBYTE_EIGHT
> +%token <i> PARSEOP_BITSPERBYTE_FIVE
> +%token <i> PARSEOP_BITSPERBYTE_NINE
> +%token <i> PARSEOP_BITSPERBYTE_SEVEN
> +%token <i> PARSEOP_BITSPERBYTE_SIX
>  %token <i> PARSEOP_BREAK
>  %token <i> PARSEOP_BREAKPOINT
>  %token <i> PARSEOP_BUFFER
> @@ -224,9 +240,14 @@ void *                      AslLocalAllocate (unsigned int Size);
>  %token <i> PARSEOP_BUSMASTERTYPE_NOTMASTER
>  %token <i> PARSEOP_BYTECONST
>  %token <i> PARSEOP_CASE
> +%token <i> PARSEOP_CLOCKPHASE_FIRST
> +%token <i> PARSEOP_CLOCKPHASE_SECOND
> +%token <i> PARSEOP_CLOCKPOLARITY_HIGH
> +%token <i> PARSEOP_CLOCKPOLARITY_LOW
>  %token <i> PARSEOP_CONCATENATE
>  %token <i> PARSEOP_CONCATENATERESTEMPLATE
>  %token <i> PARSEOP_CONDREFOF
> +%token <i> PARSEOP_CONNECTION
>  %token <i> PARSEOP_CONTINUE
>  %token <i> PARSEOP_COPYOBJECT
>  %token <i> PARSEOP_CREATEBITFIELD
> @@ -235,6 +256,7 @@ void *                      AslLocalAllocate (unsigned int Size);
>  %token <i> PARSEOP_CREATEFIELD
>  %token <i> PARSEOP_CREATEQWORDFIELD
>  %token <i> PARSEOP_CREATEWORDFIELD
> +%token <i> PARSEOP_DATABUFFER
>  %token <i> PARSEOP_DATATABLEREGION
>  %token <i> PARSEOP_DEBUG
>  %token <i> PARSEOP_DECODETYPE_POS
> @@ -245,6 +267,8 @@ void *                      AslLocalAllocate (unsigned int Size);
>  %token <i> PARSEOP_DEFINITIONBLOCK
>  %token <i> PARSEOP_DEREFOF
>  %token <i> PARSEOP_DEVICE
> +%token <i> PARSEOP_DEVICEPOLARITY_HIGH
> +%token <i> PARSEOP_DEVICEPOLARITY_LOW
>  %token <i> PARSEOP_DIVIDE
>  %token <i> PARSEOP_DMA
>  %token <i> PARSEOP_DMATYPE_A
> @@ -259,6 +283,8 @@ void *                      AslLocalAllocate (unsigned int Size);
>  %token <i> PARSEOP_ELSE
>  %token <i> PARSEOP_ELSEIF
>  %token <i> PARSEOP_ENDDEPENDENTFN
> +%token <i> PARSEOP_ENDIAN_BIG
> +%token <i> PARSEOP_ENDIAN_LITTLE
>  %token <i> PARSEOP_ENDTAG
>  %token <i> PARSEOP_ERRORNODE
>  %token <i> PARSEOP_EVENT
> @@ -270,18 +296,25 @@ void *                      AslLocalAllocate (unsigned int Size);
>  %token <i> PARSEOP_FIELD
>  %token <i> PARSEOP_FINDSETLEFTBIT
>  %token <i> PARSEOP_FINDSETRIGHTBIT
> +%token <i> PARSEOP_FIXEDDMA
>  %token <i> PARSEOP_FIXEDIO
> +%token <i> PARSEOP_FLOWCONTROL_HW
> +%token <i> PARSEOP_FLOWCONTROL_NONE
> +%token <i> PARSEOP_FLOWCONTROL_SW
>  %token <i> PARSEOP_FROMBCD
>  %token <i> PARSEOP_FUNCTION
> +%token <i> PARSEOP_GPIO_INT
> +%token <i> PARSEOP_GPIO_IO
> +%token <i> PARSEOP_I2C_SERIALBUS
>  %token <i> PARSEOP_IF
>  %token <i> PARSEOP_INCLUDE
> -%token <i> PARSEOP_INCLUDE_CSTYLE
>  %token <i> PARSEOP_INCLUDE_END
>  %token <i> PARSEOP_INCREMENT
>  %token <i> PARSEOP_INDEX
>  %token <i> PARSEOP_INDEXFIELD
>  %token <i> PARSEOP_INTEGER
>  %token <i> PARSEOP_INTERRUPT
> +%token <i> PARSEOP_INTLEVEL_ACTIVEBOTH
>  %token <i> PARSEOP_INTLEVEL_ACTIVEHIGH
>  %token <i> PARSEOP_INTLEVEL_ACTIVELOW
>  %token <i> PARSEOP_INTTYPE_EDGE
> @@ -289,13 +322,16 @@ void *                      AslLocalAllocate (unsigned int Size);
>  %token <i> PARSEOP_IO
>  %token <i> PARSEOP_IODECODETYPE_10
>  %token <i> PARSEOP_IODECODETYPE_16
> +%token <i> PARSEOP_IORESTRICT_IN
> +%token <i> PARSEOP_IORESTRICT_NONE
> +%token <i> PARSEOP_IORESTRICT_OUT
> +%token <i> PARSEOP_IORESTRICT_PRESERVE
>  %token <i> PARSEOP_IRQ
>  %token <i> PARSEOP_IRQNOFLAGS
>  %token <i> PARSEOP_LAND
>  %token <i> PARSEOP_LEQUAL
>  %token <i> PARSEOP_LGREATER
>  %token <i> PARSEOP_LGREATEREQUAL
> -%token <i> PARSEOP_LINE_CSTYLE
>  %token <i> PARSEOP_LLESS
>  %token <i> PARSEOP_LLESSEQUAL
>  %token <i> PARSEOP_LNOT
> @@ -369,6 +405,15 @@ void *                      AslLocalAllocate (unsigned int Size);
>  %token <i> PARSEOP_OR
>  %token <i> PARSEOP_PACKAGE
>  %token <i> PARSEOP_PACKAGE_LENGTH
> +%token <i> PARSEOP_PARITYTYPE_EVEN
> +%token <i> PARSEOP_PARITYTYPE_MARK
> +%token <i> PARSEOP_PARITYTYPE_NONE
> +%token <i> PARSEOP_PARITYTYPE_ODD
> +%token <i> PARSEOP_PARITYTYPE_SPACE
> +%token <i> PARSEOP_PIN_NOPULL
> +%token <i> PARSEOP_PIN_PULLDEFAULT
> +%token <i> PARSEOP_PIN_PULLDOWN
> +%token <i> PARSEOP_PIN_PULLUP
>  %token <i> PARSEOP_POWERRESOURCE
>  %token <i> PARSEOP_PROCESSOR
>  %token <i> PARSEOP_QWORDCONST
> @@ -384,6 +429,9 @@ void *                      AslLocalAllocate (unsigned int Size);
>  %token <i> PARSEOP_REFOF
>  %token <i> PARSEOP_REGIONSPACE_CMOS
>  %token <i> PARSEOP_REGIONSPACE_EC
> +%token <i> PARSEOP_REGIONSPACE_FFIXEDHW
> +%token <i> PARSEOP_REGIONSPACE_GPIO
> +%token <i> PARSEOP_REGIONSPACE_GSBUS
>  %token <i> PARSEOP_REGIONSPACE_IO
>  %token <i> PARSEOP_REGIONSPACE_IPMI
>  %token <i> PARSEOP_REGIONSPACE_MEM
> @@ -403,15 +451,24 @@ void *                      AslLocalAllocate (unsigned int Size);
>  %token <i> PARSEOP_SERIALIZERULE_NOTSERIAL
>  %token <i> PARSEOP_SERIALIZERULE_SERIAL
>  %token <i> PARSEOP_SHARETYPE_EXCLUSIVE
> +%token <i> PARSEOP_SHARETYPE_EXCLUSIVEWAKE
>  %token <i> PARSEOP_SHARETYPE_SHARED
> +%token <i> PARSEOP_SHARETYPE_SHAREDWAKE
>  %token <i> PARSEOP_SHIFTLEFT
>  %token <i> PARSEOP_SHIFTRIGHT
>  %token <i> PARSEOP_SIGNAL
>  %token <i> PARSEOP_SIZEOF
> +%token <i> PARSEOP_SLAVEMODE_CONTROLLERINIT
> +%token <i> PARSEOP_SLAVEMODE_DEVICEINIT
>  %token <i> PARSEOP_SLEEP
> +%token <i> PARSEOP_SPI_SERIALBUS
>  %token <i> PARSEOP_STALL
>  %token <i> PARSEOP_STARTDEPENDENTFN
>  %token <i> PARSEOP_STARTDEPENDENTFN_NOPRI
> +%token <i> PARSEOP_STOPBITS_ONE
> +%token <i> PARSEOP_STOPBITS_ONEPLUSHALF
> +%token <i> PARSEOP_STOPBITS_TWO
> +%token <i> PARSEOP_STOPBITS_ZERO
>  %token <i> PARSEOP_STORE
>  %token <s> PARSEOP_STRING_LITERAL
>  %token <i> PARSEOP_SUBTRACT
> @@ -429,6 +486,7 @@ void *                      AslLocalAllocate (unsigned int Size);
>  %token <i> PARSEOP_TRANSLATIONTYPE_SPARSE
>  %token <i> PARSEOP_TYPE_STATIC
>  %token <i> PARSEOP_TYPE_TRANSLATION
> +%token <i> PARSEOP_UART_SERIALBUS
>  %token <i> PARSEOP_UNICODE
>  %token <i> PARSEOP_UNLOAD
>  %token <i> PARSEOP_UPDATERULE_ONES
> @@ -439,10 +497,18 @@ void *                      AslLocalAllocate (unsigned int Size);
>  %token <i> PARSEOP_VENDORSHORT
>  %token <i> PARSEOP_WAIT
>  %token <i> PARSEOP_WHILE
> +%token <i> PARSEOP_WIREMODE_FOUR
> +%token <i> PARSEOP_WIREMODE_THREE
>  %token <i> PARSEOP_WORDBUSNUMBER
>  %token <i> PARSEOP_WORDCONST
>  %token <i> PARSEOP_WORDIO
>  %token <i> PARSEOP_WORDSPACE
> +%token <i> PARSEOP_XFERSIZE_8
> +%token <i> PARSEOP_XFERSIZE_16
> +%token <i> PARSEOP_XFERSIZE_32
> +%token <i> PARSEOP_XFERSIZE_64
> +%token <i> PARSEOP_XFERSIZE_128
> +%token <i> PARSEOP_XFERSIZE_256
>  %token <i> PARSEOP_XFERTYPE_8
>  %token <i> PARSEOP_XFERTYPE_8_16
>  %token <i> PARSEOP_XFERTYPE_16
> @@ -456,64 +522,62 @@ void *                      AslLocalAllocate (unsigned int Size);
>  %token <i> PARSEOP___DATE__
>  %token <i> PARSEOP___FILE__
>  %token <i> PARSEOP___LINE__
> +%token <i> PARSEOP___PATH__
>
> -/*
> +
> +/******************************************************************************
> + *
>  * Production names
> - */
> + *
> + *****************************************************************************/
>
> +%type <n> ArgList
>  %type <n> ASLCode
> -%type <n> DefinitionBlockTerm
> -%type <n> TermList
> -%type <n> Term
> +%type <n> BufferData
> +%type <n> BufferTermData
>  %type <n> CompilerDirective
> -%type <n> ObjectList
> -%type <n> Object
>  %type <n> DataObject
> -%type <n> BufferData
> -%type <n> PackageData
> +%type <n> DefinitionBlockTerm
>  %type <n> IntegerData
> -%type <n> StringData
>  %type <n> NamedObject
>  %type <n> NameSpaceModifier
> -%type <n> UserTerm
> -%type <n> ArgList
> -%type <n> TermArg
> -%type <n> Target
> -%type <n> RequiredTarget
> -%type <n> SimpleTarget
> -%type <n> BufferTermData
> +%type <n> Object
> +%type <n> ObjectList
> +%type <n> PackageData
>  %type <n> ParameterTypePackage
>  %type <n> ParameterTypePackageList
>  %type <n> ParameterTypesPackage
>  %type <n> ParameterTypesPackageList
> +%type <n> RequiredTarget
> +%type <n> SimpleTarget
> +%type <n> StringData
> +%type <n> Target
> +%type <n> Term
> +%type <n> TermArg
> +%type <n> TermList
> +%type <n> UserTerm
> +
> +/* Type4Opcode is obsolete */
>
>  %type <n> Type1Opcode
> -%type <n> Type2Opcode
> -%type <n> Type2IntegerOpcode
> -%type <n> Type2StringOpcode
>  %type <n> Type2BufferOpcode
>  %type <n> Type2BufferOrStringOpcode
> +%type <n> Type2IntegerOpcode
> +%type <n> Type2Opcode
> +%type <n> Type2StringOpcode
>  %type <n> Type3Opcode
> -
> -/* Obsolete %type <n> Type4Opcode */
> -
>  %type <n> Type5Opcode
>  %type <n> Type6Opcode
>
> -%type <n> LineTerm
> -%type <n> IncludeTerm
> -%type <n> IncludeCStyleTerm
> +%type <n> AccessAsTerm
>  %type <n> ExternalTerm
> -
> -%type <n> FieldUnitList
>  %type <n> FieldUnit
>  %type <n> FieldUnitEntry
> -
> +%type <n> FieldUnitList
> +%type <n> IncludeTerm
>  %type <n> OffsetTerm
> -%type <n> AccessAsTerm
>  %type <n> OptionalAccessAttribTerm
>
> -
>  /* Named Objects */
>
>  %type <n> BankFieldTerm
> @@ -537,7 +601,6 @@ void *                      AslLocalAllocate (unsigned int Size);
>  %type <n> ProcessorTerm
>  %type <n> ThermalZoneTerm
>
> -
>  /* Namespace modifiers */
>
>  %type <n> AliasTerm
> @@ -546,13 +609,16 @@ void *                      AslLocalAllocate (unsigned int Size);
>
>  /* Type 1 opcodes */
>
> -%type <n> BreakTerm
>  %type <n> BreakPointTerm
> +%type <n> BreakTerm
> +%type <n> CaseDefaultTermList
> +%type <n> CaseTerm
>  %type <n> ContinueTerm
> +%type <n> DefaultTerm
> +%type <n> ElseTerm
>  %type <n> FatalTerm
>  %type <n> IfElseTerm
>  %type <n> IfTerm
> -%type <n> ElseTerm
>  %type <n> LoadTerm
>  %type <n> NoOpTerm
>  %type <n> NotifyTerm
> @@ -563,20 +629,17 @@ void *                      AslLocalAllocate (unsigned int Size);
>  %type <n> SleepTerm
>  %type <n> StallTerm
>  %type <n> SwitchTerm
> -%type <n> CaseDefaultTermList
> -//%type <n> CaseTermList
> -%type <n> CaseTerm
> -%type <n> DefaultTerm
>  %type <n> UnloadTerm
>  %type <n> WhileTerm
> +//%type <n> CaseTermList
>
>  /* Type 2 opcodes */
>
>  %type <n> AcquireTerm
>  %type <n> AddTerm
>  %type <n> AndTerm
> -%type <n> ConcatTerm
>  %type <n> ConcatResTerm
> +%type <n> ConcatTerm
>  %type <n> CondRefOfTerm
>  %type <n> CopyObjectTerm
>  %type <n> DecTerm
> @@ -589,12 +652,12 @@ void *                      AslLocalAllocate (unsigned int Size);
>  %type <n> IndexTerm
>  %type <n> LAndTerm
>  %type <n> LEqualTerm
> -%type <n> LGreaterTerm
>  %type <n> LGreaterEqualTerm
> -%type <n> LLessTerm
> +%type <n> LGreaterTerm
>  %type <n> LLessEqualTerm
> -%type <n> LNotTerm
> +%type <n> LLessTerm
>  %type <n> LNotEqualTerm
> +%type <n> LNotTerm
>  %type <n> LoadTableTerm
>  %type <n> LOrTerm
>  %type <n> MatchTerm
> @@ -622,39 +685,49 @@ void *                      AslLocalAllocate (unsigned int Size);
>  %type <n> WaitTerm
>  %type <n> XOrTerm
>
> -%type <n> OptionalTermArg
> -%type <n> OptionalReturnArg
> -%type <n> OptionalListString
> -
> -
>  /* Keywords */
>
> -%type <n> ObjectTypeKeyword
> -%type <n> AccessTypeKeyword
>  %type <n> AccessAttribKeyword
> -%type <n> LockRuleKeyword
> -%type <n> UpdateRuleKeyword
> -%type <n> RegionSpaceKeyword
> +%type <n> AccessTypeKeyword
> +%type <n> AddressingModeKeyword
> +%type <n> AddressKeyword
>  %type <n> AddressSpaceKeyword
> -%type <n> MatchOpKeyword
> -%type <n> SerializeRuleKeyword
> +%type <n> BitsPerByteKeyword
> +%type <n> ClockPhaseKeyword
> +%type <n> ClockPolarityKeyword
> +%type <n> DecodeKeyword
> +%type <n> DevicePolarityKeyword
>  %type <n> DMATypeKeyword
> -%type <n> OptionalBusMasterKeyword
> -%type <n> XferTypeKeyword
> -%type <n> ResourceTypeKeyword
> -%type <n> MinKeyword
> +%type <n> EndianKeyword
> +%type <n> FlowControlKeyword
> +%type <n> InterruptLevel
> +%type <n> InterruptTypeKeyword
> +%type <n> IODecodeKeyword
> +%type <n> IoRestrictionKeyword
> +%type <n> LockRuleKeyword
> +%type <n> MatchOpKeyword
>  %type <n> MaxKeyword
> -%type <n> DecodeKeyword
> -%type <n> RangeTypeKeyword
>  %type <n> MemTypeKeyword
> +%type <n> MinKeyword
> +%type <n> ObjectTypeKeyword
> +%type <n> OptionalBusMasterKeyword
>  %type <n> OptionalReadWriteKeyword
> -%type <n> InterruptTypeKeyword
> -%type <n> InterruptLevel
> +%type <n> ParityTypeKeyword
> +%type <n> PinConfigByte
> +%type <n> PinConfigKeyword
> +%type <n> RangeTypeKeyword
> +%type <n> RegionSpaceKeyword
> +%type <n> ResourceTypeKeyword
> +%type <n> SerializeRuleKeyword
>  %type <n> ShareTypeKeyword
> -%type <n> IODecodeKeyword
> -%type <n> TypeKeyword
> +%type <n> SlaveModeKeyword
> +%type <n> StopBitsKeyword
>  %type <n> TranslationKeyword
> -%type <n> AddressKeyword
> +%type <n> TypeKeyword
> +%type <n> UpdateRuleKeyword
> +%type <n> WireModeKeyword
> +%type <n> XferSizeKeyword
> +%type <n> XferTypeKeyword
>
>  /* Types */
>
> @@ -671,31 +744,34 @@ void *                      AslLocalAllocate (unsigned int Size);
>  %type <n> String
>
>  %type <n> ConstTerm
> +%type <n> ConstExprTerm
>  %type <n> ByteConstExpr
>  %type <n> WordConstExpr
>  %type <n> DWordConstExpr
>  %type <n> QWordConstExpr
> -%type <n> ConstExprTerm
>
> +%type <n> DWordList
>  %type <n> BufferTerm
>  %type <n> ByteList
> -%type <n> DWordList
>
> -%type <n> PackageTerm
> -%type <n> PackageList
>  %type <n> PackageElement
> -
> +%type <n> PackageList
> +%type <n> PackageTerm
>  %type <n> VarPackageLengthTerm
>
>  /* Macros */
>
>  %type <n> EISAIDTerm
> +%type <n> ResourceMacroList
> +%type <n> ResourceMacroTerm
>  %type <n> ResourceTemplateTerm
>  %type <n> ToUUIDTerm
>  %type <n> UnicodeTerm
> -%type <n> ResourceMacroList
> -%type <n> ResourceMacroTerm
>
> +/* Resource Descriptors */
> +
> +%type <n> ConnectionTerm
> +%type <n> DataBufferTerm
>  %type <n> DMATerm
>  %type <n> DWordIOTerm
>  %type <n> DWordMemoryTerm
> @@ -704,7 +780,11 @@ void *                      AslLocalAllocate (unsigned int Size);
>  %type <n> ExtendedIOTerm
>  %type <n> ExtendedMemoryTerm
>  %type <n> ExtendedSpaceTerm
> +%type <n> FixedDmaTerm
>  %type <n> FixedIOTerm
> +%type <n> GpioIntTerm
> +%type <n> GpioIoTerm
> +%type <n> I2cSerialBusTerm
>  %type <n> InterruptTerm
>  %type <n> IOTerm
>  %type <n> IRQNoFlagsTerm
> @@ -712,59 +792,75 @@ void *                      AslLocalAllocate (unsigned int Size);
>  %type <n> Memory24Term
>  %type <n> Memory32FixedTerm
>  %type <n> Memory32Term
> +%type <n> NameSeg
> +%type <n> NameString
>  %type <n> QWordIOTerm
>  %type <n> QWordMemoryTerm
>  %type <n> QWordSpaceTerm
>  %type <n> RegisterTerm
> -%type <n> StartDependentFnTerm
> +%type <n> SpiSerialBusTerm
>  %type <n> StartDependentFnNoPriTerm
> +%type <n> StartDependentFnTerm
> +%type <n> UartSerialBusTerm
>  %type <n> VendorLongTerm
>  %type <n> VendorShortTerm
>  %type <n> WordBusNumberTerm
>  %type <n> WordIOTerm
>  %type <n> WordSpaceTerm
>
> -%type <n> NameString
> -%type <n> NameSeg
> -
> -
>  /* Local types that help construct the AML, not in ACPI spec */
>
> -%type <n> IncludeEndTerm
>  %type <n> AmlPackageLengthTerm
> +%type <n> IncludeEndTerm
> +%type <n> NameStringItem
> +%type <n> TermArgItem
> +
> +%type <n> OptionalAccessSize
> +%type <n> OptionalAddressingMode
> +%type <n> OptionalAddressRange
> +%type <n> OptionalBitsPerByte
> +%type <n> OptionalBuffer_Last
>  %type <n> OptionalByteConstExpr
> +%type <n> OptionalCount
> +%type <n> OptionalDecodeType
> +%type <n> OptionalDevicePolarity
>  %type <n> OptionalDWordConstExpr
> -%type <n> OptionalQWordConstExpr
> -%type <n> OptionalSerializeRuleKeyword
> -%type <n> OptionalResourceType_First
> -%type <n> OptionalResourceType
> -%type <n> OptionalMinType
> +%type <n> OptionalEndian
> +%type <n> OptionalFlowControl
> +%type <n> OptionalIoRestriction
> +%type <n> OptionalListString
>  %type <n> OptionalMaxType
>  %type <n> OptionalMemType
> -%type <n> OptionalCount
> -%type <n> OptionalDecodeType
> -%type <n> OptionalRangeType
> -%type <n> OptionalShareType
> -%type <n> OptionalType
> -%type <n> OptionalType_Last
> -%type <n> OptionalTranslationType_Last
> -%type <n> OptionalStringData
> +%type <n> OptionalMinType
>  %type <n> OptionalNameString
>  %type <n> OptionalNameString_First
>  %type <n> OptionalNameString_Last
> -%type <n> OptionalAddressRange
>  %type <n> OptionalObjectTypeKeyword
>  %type <n> OptionalParameterTypePackage
>  %type <n> OptionalParameterTypesPackage
> +%type <n> OptionalParityType
> +%type <n> OptionalQWordConstExpr
> +%type <n> OptionalRangeType
>  %type <n> OptionalReference
> -%type <n> OptionalAccessSize
> -
> -%type <n> TermArgItem
> -%type <n> NameStringItem
> +%type <n> OptionalResourceType
> +%type <n> OptionalResourceType_First
> +%type <n> OptionalReturnArg
> +%type <n> OptionalSerializeRuleKeyword
> +%type <n> OptionalShareType
> +%type <n> OptionalShareType_First
> +%type <n> OptionalSlaveMode
> +%type <n> OptionalStopBits
> +%type <n> OptionalStringData
> +%type <n> OptionalTermArg
> +%type <n> OptionalTranslationType_Last
> +%type <n> OptionalType
> +%type <n> OptionalType_Last
> +%type <n> OptionalWireMode
> +%type <n> OptionalWordConst
> +%type <n> OptionalWordConstExpr
> +%type <n> OptionalXferSize
>
>  %%
> -
> -
>  /*******************************************************************************
>  *
>  * Production rules start here
> @@ -777,15 +873,19 @@ void *                      AslLocalAllocate (unsigned int Size);
>
>
>  /*
> - * Blocks, Data, and Opcodes
> + * Root rule. Allow multiple #line directives before the definition block
> + * to handle output from preprocessors
>  */
> -
>  ASLCode
>     : DefinitionBlockTerm
>     | error                         {YYABORT; $$ = NULL;}
>     ;
>
>  /*
> + * Blocks, Data, and Opcodes
> + */
> +
> +/*
>  * Note concerning support for "module-level code".
>  *
>  * ACPI 1.0 allowed Type1 and Type2 executable opcodes outside of control
> @@ -801,7 +901,7 @@ ASLCode
>  * of Type1 and Type2 opcodes at module level.
>  */
>  DefinitionBlockTerm
> -    : PARSEOP_DEFINITIONBLOCK '('      {$<n>$ = TrCreateLeafNode (PARSEOP_DEFINITIONBLOCK);}
> +    : PARSEOP_DEFINITIONBLOCK '('   {$<n>$ = TrCreateLeafNode (PARSEOP_DEFINITIONBLOCK);}
>         String ','
>         String ','
>         ByteConst ','
> @@ -817,7 +917,9 @@ DefinitionBlockTerm
>  TermList
>     :                               {$$ = NULL;}
>     | TermList Term                 {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$2);}
> +    | TermList Term ';'             {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$2);}
>     | TermList ';' Term             {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$3);}
> +    | TermList ';' Term ';'         {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$3);}
>     ;
>
>  Term
> @@ -833,8 +935,6 @@ Term
>
>  CompilerDirective
>     : IncludeTerm                   {}
> -    | IncludeCStyleTerm             {$$ = NULL;}
> -    | LineTerm                                         {$$ = NULL;}
>     | ExternalTerm                  {}
>     ;
>
> @@ -1118,26 +1218,16 @@ Type6Opcode
>     ;
>
>  IncludeTerm
> -    : PARSEOP_INCLUDE '('                      {$<n>$ = TrCreateLeafNode (PARSEOP_INCLUDE);}
> +    : PARSEOP_INCLUDE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_INCLUDE);}
>         String  ')'                 {TrLinkChildren ($<n>3,1,$4);FlOpenIncludeFile ($4);}
>         TermList
>         IncludeEndTerm              {$$ = TrLinkPeerNodes (3,$<n>3,$7,$8);}
>     ;
>
>  IncludeEndTerm
> -    : PARSEOP_INCLUDE_END                      {$$ = TrCreateLeafNode (PARSEOP_INCLUDE_END);}
> +    : PARSEOP_INCLUDE_END           {$$ = TrCreateLeafNode (PARSEOP_INCLUDE_END);}
>     ;
>
> -IncludeCStyleTerm
> -    : PARSEOP_INCLUDE_CSTYLE
> -        String                      {FlOpenIncludeFile ($2);}
> -    ;
> -
> -LineTerm
> -       : PARSEOP_LINE_CSTYLE
> -               Integer                                         {FlSetLineNumber ($2);}
> -       ;
> -
>  ExternalTerm
>     : PARSEOP_EXTERNAL '('
>         NameString
> @@ -1154,7 +1244,7 @@ ExternalTerm
>
>
>  BankFieldTerm
> -    : PARSEOP_BANKFIELD '('                    {$<n>$ = TrCreateLeafNode (PARSEOP_BANKFIELD);}
> +    : PARSEOP_BANKFIELD '('         {$<n>$ = TrCreateLeafNode (PARSEOP_BANKFIELD);}
>         NameString
>         NameStringItem
>         TermArgItem
> @@ -1179,6 +1269,7 @@ FieldUnit
>     : FieldUnitEntry                {}
>     | OffsetTerm                    {}
>     | AccessAsTerm                  {}
> +    | ConnectionTerm                {}
>     ;
>
>  FieldUnitEntry
> @@ -1204,8 +1295,23 @@ AccessAsTerm
>         error ')'                   {$$ = AslDoError(); yyclearin;}
>     ;
>
> +ConnectionTerm
> +    : PARSEOP_CONNECTION '('
> +        NameString
> +        ')'                         {$$ = TrCreateNode (PARSEOP_CONNECTION,1,$3);}
> +    | PARSEOP_CONNECTION '('        {$<n>$ = TrCreateLeafNode (PARSEOP_CONNECTION);}
> +        ResourceMacroTerm
> +        ')'                         {$$ = TrLinkChildren ($<n>3, 1,
> +                                            TrLinkChildren (TrCreateLeafNode (PARSEOP_RESOURCETEMPLATE), 3,
> +                                                TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
> +                                                TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
> +                                                $4));}
> +    | PARSEOP_CONNECTION '('
> +        error ')'                   {$$ = AslDoError(); yyclearin;}
> +    ;
> +
>  CreateBitFieldTerm
> -    : PARSEOP_CREATEBITFIELD '('       {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEBITFIELD);}
> +    : PARSEOP_CREATEBITFIELD '('    {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEBITFIELD);}
>         TermArg
>         TermArgItem
>         NameStringItem
> @@ -1215,7 +1321,7 @@ CreateBitFieldTerm
>     ;
>
>  CreateByteFieldTerm
> -    : PARSEOP_CREATEBYTEFIELD '('      {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEBYTEFIELD);}
> +    : PARSEOP_CREATEBYTEFIELD '('   {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEBYTEFIELD);}
>         TermArg
>         TermArgItem
>         NameStringItem
> @@ -1225,7 +1331,7 @@ CreateByteFieldTerm
>     ;
>
>  CreateDWordFieldTerm
> -    : PARSEOP_CREATEDWORDFIELD '('     {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEDWORDFIELD);}
> +    : PARSEOP_CREATEDWORDFIELD '('  {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEDWORDFIELD);}
>         TermArg
>         TermArgItem
>         NameStringItem
> @@ -1235,7 +1341,7 @@ CreateDWordFieldTerm
>     ;
>
>  CreateFieldTerm
> -    : PARSEOP_CREATEFIELD '('          {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEFIELD);}
> +    : PARSEOP_CREATEFIELD '('       {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEFIELD);}
>         TermArg
>         TermArgItem
>         TermArgItem
> @@ -1246,7 +1352,7 @@ CreateFieldTerm
>     ;
>
>  CreateQWordFieldTerm
> -    : PARSEOP_CREATEQWORDFIELD '('     {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEQWORDFIELD);}
> +    : PARSEOP_CREATEQWORDFIELD '('  {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEQWORDFIELD);}
>         TermArg
>         TermArgItem
>         NameStringItem
> @@ -1256,7 +1362,7 @@ CreateQWordFieldTerm
>     ;
>
>  CreateWordFieldTerm
> -    : PARSEOP_CREATEWORDFIELD '('      {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEWORDFIELD);}
> +    : PARSEOP_CREATEWORDFIELD '('   {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEWORDFIELD);}
>         TermArg
>         TermArgItem
>         NameStringItem
> @@ -1266,7 +1372,7 @@ CreateWordFieldTerm
>     ;
>
>  DataRegionTerm
> -    : PARSEOP_DATATABLEREGION '('      {$<n>$ = TrCreateLeafNode (PARSEOP_DATATABLEREGION);}
> +    : PARSEOP_DATATABLEREGION '('   {$<n>$ = TrCreateLeafNode (PARSEOP_DATATABLEREGION);}
>         NameString
>         TermArgItem
>         TermArgItem
> @@ -1277,7 +1383,7 @@ DataRegionTerm
>     ;
>
>  DeviceTerm
> -    : PARSEOP_DEVICE '('                       {$<n>$ = TrCreateLeafNode (PARSEOP_DEVICE);}
> +    : PARSEOP_DEVICE '('            {$<n>$ = TrCreateLeafNode (PARSEOP_DEVICE);}
>         NameString
>         ')' '{'
>             ObjectList '}'          {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
> @@ -1286,7 +1392,7 @@ DeviceTerm
>     ;
>
>  EventTerm
> -    : PARSEOP_EVENT '('                                {$<n>$ = TrCreateLeafNode (PARSEOP_EVENT);}
> +    : PARSEOP_EVENT '('             {$<n>$ = TrCreateLeafNode (PARSEOP_EVENT);}
>         NameString
>         ')'                         {$$ = TrLinkChildren ($<n>3,1,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION));}
>     | PARSEOP_EVENT '('
> @@ -1294,7 +1400,7 @@ EventTerm
>     ;
>
>  FieldTerm
> -    : PARSEOP_FIELD '('                                {$<n>$ = TrCreateLeafNode (PARSEOP_FIELD);}
> +    : PARSEOP_FIELD '('             {$<n>$ = TrCreateLeafNode (PARSEOP_FIELD);}
>         NameString
>         ',' AccessTypeKeyword
>         ',' LockRuleKeyword
> @@ -1306,7 +1412,7 @@ FieldTerm
>     ;
>
>  FunctionTerm
> -    : PARSEOP_FUNCTION '('                     {$<n>$ = TrCreateLeafNode (PARSEOP_METHOD);}
> +    : PARSEOP_FUNCTION '('          {$<n>$ = TrCreateLeafNode (PARSEOP_METHOD);}
>         NameString
>         OptionalParameterTypePackage
>         OptionalParameterTypesPackage
> @@ -1320,7 +1426,7 @@ FunctionTerm
>     ;
>
>  IndexFieldTerm
> -    : PARSEOP_INDEXFIELD '('           {$<n>$ = TrCreateLeafNode (PARSEOP_INDEXFIELD);}
> +    : PARSEOP_INDEXFIELD '('        {$<n>$ = TrCreateLeafNode (PARSEOP_INDEXFIELD);}
>         NameString
>         NameStringItem
>         ',' AccessTypeKeyword
> @@ -1333,7 +1439,7 @@ IndexFieldTerm
>     ;
>
>  MethodTerm
> -    : PARSEOP_METHOD  '('                      {$<n>$ = TrCreateLeafNode (PARSEOP_METHOD);}
> +    : PARSEOP_METHOD  '('           {$<n>$ = TrCreateLeafNode (PARSEOP_METHOD);}
>         NameString
>         OptionalByteConstExpr       {UtCheckIntegerRange ($5, 0, 7);}
>         OptionalSerializeRuleKeyword
> @@ -1347,7 +1453,7 @@ MethodTerm
>     ;
>
>  MutexTerm
> -    : PARSEOP_MUTEX '('                                {$<n>$ = TrCreateLeafNode (PARSEOP_MUTEX);}
> +    : PARSEOP_MUTEX '('             {$<n>$ = TrCreateLeafNode (PARSEOP_MUTEX);}
>         NameString
>         ',' ByteConstExpr
>         ')'                         {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6);}
> @@ -1356,7 +1462,7 @@ MutexTerm
>     ;
>
>  OpRegionTerm
> -    : PARSEOP_OPERATIONREGION '('      {$<n>$ = TrCreateLeafNode (PARSEOP_OPERATIONREGION);}
> +    : PARSEOP_OPERATIONREGION '('   {$<n>$ = TrCreateLeafNode (PARSEOP_OPERATIONREGION);}
>         NameString
>         ',' OpRegionSpaceIdTerm
>         TermArgItem
> @@ -1372,7 +1478,7 @@ OpRegionSpaceIdTerm
>     ;
>
>  PowerResTerm
> -    : PARSEOP_POWERRESOURCE '('                {$<n>$ = TrCreateLeafNode (PARSEOP_POWERRESOURCE);}
> +    : PARSEOP_POWERRESOURCE '('     {$<n>$ = TrCreateLeafNode (PARSEOP_POWERRESOURCE);}
>         NameString
>         ',' ByteConstExpr
>         ',' WordConstExpr
> @@ -1383,7 +1489,7 @@ PowerResTerm
>     ;
>
>  ProcessorTerm
> -    : PARSEOP_PROCESSOR '('                    {$<n>$ = TrCreateLeafNode (PARSEOP_PROCESSOR);}
> +    : PARSEOP_PROCESSOR '('         {$<n>$ = TrCreateLeafNode (PARSEOP_PROCESSOR);}
>         NameString
>         ',' ByteConstExpr
>         OptionalDWordConstExpr
> @@ -1395,7 +1501,7 @@ ProcessorTerm
>     ;
>
>  ThermalZoneTerm
> -    : PARSEOP_THERMALZONE '('          {$<n>$ = TrCreateLeafNode (PARSEOP_THERMALZONE);}
> +    : PARSEOP_THERMALZONE '('       {$<n>$ = TrCreateLeafNode (PARSEOP_THERMALZONE);}
>         NameString
>         ')' '{'
>             ObjectList '}'          {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
> @@ -1408,7 +1514,7 @@ ThermalZoneTerm
>
>
>  AliasTerm
> -    : PARSEOP_ALIAS '('                                {$<n>$ = TrCreateLeafNode (PARSEOP_ALIAS);}
> +    : PARSEOP_ALIAS '('             {$<n>$ = TrCreateLeafNode (PARSEOP_ALIAS);}
>         NameString
>         NameStringItem
>         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,TrSetNodeFlags ($5, NODE_IS_NAME_DECLARATION));}
> @@ -1417,7 +1523,7 @@ AliasTerm
>     ;
>
>  NameTerm
> -    : PARSEOP_NAME '('                         {$<n>$ = TrCreateLeafNode (PARSEOP_NAME);}
> +    : PARSEOP_NAME '('              {$<n>$ = TrCreateLeafNode (PARSEOP_NAME);}
>         NameString
>         ',' DataObject
>         ')'                         {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6);}
> @@ -1426,7 +1532,7 @@ NameTerm
>     ;
>
>  ScopeTerm
> -    : PARSEOP_SCOPE '('                                {$<n>$ = TrCreateLeafNode (PARSEOP_SCOPE);}
> +    : PARSEOP_SCOPE '('             {$<n>$ = TrCreateLeafNode (PARSEOP_SCOPE);}
>         NameString
>         ')' '{'
>             ObjectList '}'          {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
> @@ -1439,19 +1545,19 @@ ScopeTerm
>
>
>  BreakTerm
> -    : PARSEOP_BREAK                                    {$$ = TrCreateNode (PARSEOP_BREAK, 0);}
> +    : PARSEOP_BREAK                 {$$ = TrCreateNode (PARSEOP_BREAK, 0);}
>     ;
>
>  BreakPointTerm
> -    : PARSEOP_BREAKPOINT                       {$$ = TrCreateNode (PARSEOP_BREAKPOINT, 0);}
> +    : PARSEOP_BREAKPOINT            {$$ = TrCreateNode (PARSEOP_BREAKPOINT, 0);}
>     ;
>
>  ContinueTerm
> -    : PARSEOP_CONTINUE                         {$$ = TrCreateNode (PARSEOP_CONTINUE, 0);}
> +    : PARSEOP_CONTINUE              {$$ = TrCreateNode (PARSEOP_CONTINUE, 0);}
>     ;
>
>  FatalTerm
> -    : PARSEOP_FATAL '('                                {$<n>$ = TrCreateLeafNode (PARSEOP_FATAL);}
> +    : PARSEOP_FATAL '('             {$<n>$ = TrCreateLeafNode (PARSEOP_FATAL);}
>         ByteConstExpr
>         ',' DWordConstExpr
>         TermArgItem
> @@ -1465,7 +1571,7 @@ IfElseTerm
>     ;
>
>  IfTerm
> -    : PARSEOP_IF '('                           {$<n>$ = TrCreateLeafNode (PARSEOP_IF);}
> +    : PARSEOP_IF '('                {$<n>$ = TrCreateLeafNode (PARSEOP_IF);}
>         TermArg
>         ')' '{'
>             TermList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
> @@ -1476,7 +1582,7 @@ IfTerm
>
>  ElseTerm
>     :                               {$$ = NULL;}
> -    | PARSEOP_ELSE '{'                         {$<n>$ = TrCreateLeafNode (PARSEOP_ELSE);}
> +    | PARSEOP_ELSE '{'              {$<n>$ = TrCreateLeafNode (PARSEOP_ELSE);}
>         TermList '}'                {$$ = TrLinkChildren ($<n>3,1,$4);}
>
>     | PARSEOP_ELSE '{'
> @@ -1485,10 +1591,10 @@ ElseTerm
>     | PARSEOP_ELSE
>         error                       {$$ = AslDoError(); yyclearin;}
>
> -    | PARSEOP_ELSEIF '('                       {$<n>$ = TrCreateLeafNode (PARSEOP_ELSE);}
> -        TermArg                                                {$<n>$ = TrCreateLeafNode (PARSEOP_IF);}
> +    | PARSEOP_ELSEIF '('            {$<n>$ = TrCreateLeafNode (PARSEOP_ELSE);}
> +        TermArg                     {$<n>$ = TrCreateLeafNode (PARSEOP_IF);}
>         ')' '{'
> -            TermList '}'                   {TrLinkChildren ($<n>5,2,$4,$8);}
> +            TermList '}'            {TrLinkChildren ($<n>5,2,$4,$8);}
>         ElseTerm                    {TrLinkPeerNode ($<n>5,$11);}
>                                     {$$ = TrLinkChildren ($<n>3,1,$<n>5);}
>
> @@ -1500,7 +1606,7 @@ ElseTerm
>     ;
>
>  LoadTerm
> -    : PARSEOP_LOAD '('                         {$<n>$ = TrCreateLeafNode (PARSEOP_LOAD);}
> +    : PARSEOP_LOAD '('              {$<n>$ = TrCreateLeafNode (PARSEOP_LOAD);}
>         NameString
>         RequiredTarget
>         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
> @@ -1509,11 +1615,11 @@ LoadTerm
>     ;
>
>  NoOpTerm
> -    : PARSEOP_NOOP                                     {$$ = TrCreateNode (PARSEOP_NOOP, 0);}
> +    : PARSEOP_NOOP                  {$$ = TrCreateNode (PARSEOP_NOOP, 0);}
>     ;
>
>  NotifyTerm
> -    : PARSEOP_NOTIFY '('                       {$<n>$ = TrCreateLeafNode (PARSEOP_NOTIFY);}
> +    : PARSEOP_NOTIFY '('            {$<n>$ = TrCreateLeafNode (PARSEOP_NOTIFY);}
>         SuperName
>         TermArgItem
>         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
> @@ -1522,7 +1628,7 @@ NotifyTerm
>     ;
>
>  ReleaseTerm
> -    : PARSEOP_RELEASE '('                      {$<n>$ = TrCreateLeafNode (PARSEOP_RELEASE);}
> +    : PARSEOP_RELEASE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_RELEASE);}
>         SuperName
>         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
>     | PARSEOP_RELEASE '('
> @@ -1530,7 +1636,7 @@ ReleaseTerm
>     ;
>
>  ResetTerm
> -    : PARSEOP_RESET '('                                {$<n>$ = TrCreateLeafNode (PARSEOP_RESET);}
> +    : PARSEOP_RESET '('             {$<n>$ = TrCreateLeafNode (PARSEOP_RESET);}
>         SuperName
>         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
>     | PARSEOP_RESET '('
> @@ -1538,16 +1644,16 @@ ResetTerm
>     ;
>
>  ReturnTerm
> -    : PARSEOP_RETURN '('                       {$<n>$ = TrCreateLeafNode (PARSEOP_RETURN);}
> +    : PARSEOP_RETURN '('            {$<n>$ = TrCreateLeafNode (PARSEOP_RETURN);}
>         OptionalReturnArg
>         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
> -    | PARSEOP_RETURN                           {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_RETURN),1,TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO), NODE_IS_NULL_RETURN));}
> +    | PARSEOP_RETURN                {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_RETURN),1,TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO), NODE_IS_NULL_RETURN));}
>     | PARSEOP_RETURN '('
>         error ')'                   {$$ = AslDoError(); yyclearin;}
>     ;
>
>  SignalTerm
> -    : PARSEOP_SIGNAL '('                       {$<n>$ = TrCreateLeafNode (PARSEOP_SIGNAL);}
> +    : PARSEOP_SIGNAL '('            {$<n>$ = TrCreateLeafNode (PARSEOP_SIGNAL);}
>         SuperName
>         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
>     | PARSEOP_SIGNAL '('
> @@ -1555,7 +1661,7 @@ SignalTerm
>     ;
>
>  SleepTerm
> -    : PARSEOP_SLEEP '('                                {$<n>$ = TrCreateLeafNode (PARSEOP_SLEEP);}
> +    : PARSEOP_SLEEP '('             {$<n>$ = TrCreateLeafNode (PARSEOP_SLEEP);}
>         TermArg
>         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
>     | PARSEOP_SLEEP '('
> @@ -1563,7 +1669,7 @@ SleepTerm
>     ;
>
>  StallTerm
> -    : PARSEOP_STALL '('                                {$<n>$ = TrCreateLeafNode (PARSEOP_STALL);}
> +    : PARSEOP_STALL '('             {$<n>$ = TrCreateLeafNode (PARSEOP_STALL);}
>         TermArg
>         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
>     | PARSEOP_STALL '('
> @@ -1571,7 +1677,7 @@ StallTerm
>     ;
>
>  SwitchTerm
> -    : PARSEOP_SWITCH '('                       {$<n>$ = TrCreateLeafNode (PARSEOP_SWITCH);}
> +    : PARSEOP_SWITCH '('            {$<n>$ = TrCreateLeafNode (PARSEOP_SWITCH);}
>         TermArg
>         ')' '{'
>             CaseDefaultTermList '}'
> @@ -1614,7 +1720,7 @@ CaseTermList
>  */
>
>  CaseTerm
> -    : PARSEOP_CASE '('                         {$<n>$ = TrCreateLeafNode (PARSEOP_CASE);}
> +    : PARSEOP_CASE '('              {$<n>$ = TrCreateLeafNode (PARSEOP_CASE);}
>         DataObject
>         ')' '{'
>             TermList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
> @@ -1623,14 +1729,14 @@ CaseTerm
>     ;
>
>  DefaultTerm
> -    : PARSEOP_DEFAULT '{'                      {$<n>$ = TrCreateLeafNode (PARSEOP_DEFAULT);}
> +    : PARSEOP_DEFAULT '{'           {$<n>$ = TrCreateLeafNode (PARSEOP_DEFAULT);}
>         TermList '}'                {$$ = TrLinkChildren ($<n>3,1,$4);}
>     | PARSEOP_DEFAULT '{'
>         error '}'                   {$$ = AslDoError(); yyclearin;}
>     ;
>
>  UnloadTerm
> -    : PARSEOP_UNLOAD '('                       {$<n>$ = TrCreateLeafNode (PARSEOP_UNLOAD);}
> +    : PARSEOP_UNLOAD '('            {$<n>$ = TrCreateLeafNode (PARSEOP_UNLOAD);}
>         SuperName
>         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
>     | PARSEOP_UNLOAD '('
> @@ -1638,7 +1744,7 @@ UnloadTerm
>     ;
>
>  WhileTerm
> -    : PARSEOP_WHILE '('                                {$<n>$ = TrCreateLeafNode (PARSEOP_WHILE);}
> +    : PARSEOP_WHILE '('             {$<n>$ = TrCreateLeafNode (PARSEOP_WHILE);}
>         TermArg
>         ')' '{' TermList '}'
>                                     {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
> @@ -1650,7 +1756,7 @@ WhileTerm
>  /******* Type 2 opcodes *******************************************************/
>
>  AcquireTerm
> -    : PARSEOP_ACQUIRE '('                      {$<n>$ = TrCreateLeafNode (PARSEOP_ACQUIRE);}
> +    : PARSEOP_ACQUIRE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_ACQUIRE);}
>         SuperName
>         ',' WordConstExpr
>         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$6);}
> @@ -1659,7 +1765,7 @@ AcquireTerm
>     ;
>
>  AddTerm
> -    : PARSEOP_ADD '('                          {$<n>$ = TrCreateLeafNode (PARSEOP_ADD);}
> +    : PARSEOP_ADD '('               {$<n>$ = TrCreateLeafNode (PARSEOP_ADD);}
>         TermArg
>         TermArgItem
>         Target
> @@ -1669,7 +1775,7 @@ AddTerm
>     ;
>
>  AndTerm
> -    : PARSEOP_AND '('                          {$<n>$ = TrCreateLeafNode (PARSEOP_AND);}
> +    : PARSEOP_AND '('               {$<n>$ = TrCreateLeafNode (PARSEOP_AND);}
>         TermArg
>         TermArgItem
>         Target
> @@ -1679,7 +1785,7 @@ AndTerm
>     ;
>
>  ConcatTerm
> -    : PARSEOP_CONCATENATE '('          {$<n>$ = TrCreateLeafNode (PARSEOP_CONCATENATE);}
> +    : PARSEOP_CONCATENATE '('       {$<n>$ = TrCreateLeafNode (PARSEOP_CONCATENATE);}
>         TermArg
>         TermArgItem
>         Target
> @@ -1699,7 +1805,7 @@ ConcatResTerm
>     ;
>
>  CondRefOfTerm
> -    : PARSEOP_CONDREFOF '('                    {$<n>$ = TrCreateLeafNode (PARSEOP_CONDREFOF);}
> +    : PARSEOP_CONDREFOF '('         {$<n>$ = TrCreateLeafNode (PARSEOP_CONDREFOF);}
>         SuperName
>         Target
>         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
> @@ -1708,7 +1814,7 @@ CondRefOfTerm
>     ;
>
>  CopyObjectTerm
> -    : PARSEOP_COPYOBJECT '('           {$<n>$ = TrCreateLeafNode (PARSEOP_COPYOBJECT);}
> +    : PARSEOP_COPYOBJECT '('        {$<n>$ = TrCreateLeafNode (PARSEOP_COPYOBJECT);}
>         TermArg
>         ',' SimpleTarget
>         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,TrSetNodeFlags ($6, NODE_IS_TARGET));}
> @@ -1717,7 +1823,7 @@ CopyObjectTerm
>     ;
>
>  DecTerm
> -    : PARSEOP_DECREMENT '('                    {$<n>$ = TrCreateLeafNode (PARSEOP_DECREMENT);}
> +    : PARSEOP_DECREMENT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_DECREMENT);}
>         SuperName
>         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
>     | PARSEOP_DECREMENT '('
> @@ -1725,7 +1831,7 @@ DecTerm
>     ;
>
>  DerefOfTerm
> -    : PARSEOP_DEREFOF '('                      {$<n>$ = TrCreateLeafNode (PARSEOP_DEREFOF);}
> +    : PARSEOP_DEREFOF '('           {$<n>$ = TrCreateLeafNode (PARSEOP_DEREFOF);}
>         TermArg
>         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
>     | PARSEOP_DEREFOF '('
> @@ -1733,7 +1839,7 @@ DerefOfTerm
>     ;
>
>  DivideTerm
> -    : PARSEOP_DIVIDE '('                       {$<n>$ = TrCreateLeafNode (PARSEOP_DIVIDE);}
> +    : PARSEOP_DIVIDE '('            {$<n>$ = TrCreateLeafNode (PARSEOP_DIVIDE);}
>         TermArg
>         TermArgItem
>         Target
> @@ -1744,7 +1850,7 @@ DivideTerm
>     ;
>
>  FindSetLeftBitTerm
> -    : PARSEOP_FINDSETLEFTBIT '('       {$<n>$ = TrCreateLeafNode (PARSEOP_FINDSETLEFTBIT);}
> +    : PARSEOP_FINDSETLEFTBIT '('    {$<n>$ = TrCreateLeafNode (PARSEOP_FINDSETLEFTBIT);}
>         TermArg
>         Target
>         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
> @@ -1753,7 +1859,7 @@ FindSetLeftBitTerm
>     ;
>
>  FindSetRightBitTerm
> -    : PARSEOP_FINDSETRIGHTBIT '('      {$<n>$ = TrCreateLeafNode (PARSEOP_FINDSETRIGHTBIT);}
> +    : PARSEOP_FINDSETRIGHTBIT '('   {$<n>$ = TrCreateLeafNode (PARSEOP_FINDSETRIGHTBIT);}
>         TermArg
>         Target
>         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
> @@ -1762,7 +1868,7 @@ FindSetRightBitTerm
>     ;
>
>  FromBCDTerm
> -    : PARSEOP_FROMBCD '('                      {$<n>$ = TrCreateLeafNode (PARSEOP_FROMBCD);}
> +    : PARSEOP_FROMBCD '('           {$<n>$ = TrCreateLeafNode (PARSEOP_FROMBCD);}
>         TermArg
>         Target
>         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
> @@ -1771,7 +1877,7 @@ FromBCDTerm
>     ;
>
>  IncTerm
> -    : PARSEOP_INCREMENT '('                    {$<n>$ = TrCreateLeafNode (PARSEOP_INCREMENT);}
> +    : PARSEOP_INCREMENT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_INCREMENT);}
>         SuperName
>         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
>     | PARSEOP_INCREMENT '('
> @@ -1779,7 +1885,7 @@ IncTerm
>     ;
>
>  IndexTerm
> -    : PARSEOP_INDEX '('                                {$<n>$ = TrCreateLeafNode (PARSEOP_INDEX);}
> +    : PARSEOP_INDEX '('             {$<n>$ = TrCreateLeafNode (PARSEOP_INDEX);}
>         TermArg
>         TermArgItem
>         Target
> @@ -1789,7 +1895,7 @@ IndexTerm
>     ;
>
>  LAndTerm
> -    : PARSEOP_LAND '('                         {$<n>$ = TrCreateLeafNode (PARSEOP_LAND);}
> +    : PARSEOP_LAND '('              {$<n>$ = TrCreateLeafNode (PARSEOP_LAND);}
>         TermArg
>         TermArgItem
>         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
> @@ -1798,7 +1904,7 @@ LAndTerm
>     ;
>
>  LEqualTerm
> -    : PARSEOP_LEQUAL '('                       {$<n>$ = TrCreateLeafNode (PARSEOP_LEQUAL);}
> +    : PARSEOP_LEQUAL '('            {$<n>$ = TrCreateLeafNode (PARSEOP_LEQUAL);}
>         TermArg
>         TermArgItem
>         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
> @@ -1807,7 +1913,7 @@ LEqualTerm
>     ;
>
>  LGreaterTerm
> -    : PARSEOP_LGREATER '('                     {$<n>$ = TrCreateLeafNode (PARSEOP_LGREATER);}
> +    : PARSEOP_LGREATER '('          {$<n>$ = TrCreateLeafNode (PARSEOP_LGREATER);}
>         TermArg
>         TermArgItem
>         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
> @@ -1816,7 +1922,7 @@ LGreaterTerm
>     ;
>
>  LGreaterEqualTerm
> -    : PARSEOP_LGREATEREQUAL '('                {$<n>$ = TrCreateLeafNode (PARSEOP_LLESS);}
> +    : PARSEOP_LGREATEREQUAL '('     {$<n>$ = TrCreateLeafNode (PARSEOP_LLESS);}
>         TermArg
>         TermArgItem
>         ')'                         {$$ = TrCreateNode (PARSEOP_LNOT, 1, TrLinkChildren ($<n>3,2,$4,$5));}
> @@ -1825,7 +1931,7 @@ LGreaterEqualTerm
>     ;
>
>  LLessTerm
> -    : PARSEOP_LLESS '('                                {$<n>$ = TrCreateLeafNode (PARSEOP_LLESS);}
> +    : PARSEOP_LLESS '('             {$<n>$ = TrCreateLeafNode (PARSEOP_LLESS);}
>         TermArg
>         TermArgItem
>         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
> @@ -1834,7 +1940,7 @@ LLessTerm
>     ;
>
>  LLessEqualTerm
> -    : PARSEOP_LLESSEQUAL '('           {$<n>$ = TrCreateLeafNode (PARSEOP_LGREATER);}
> +    : PARSEOP_LLESSEQUAL '('        {$<n>$ = TrCreateLeafNode (PARSEOP_LGREATER);}
>         TermArg
>         TermArgItem
>         ')'                         {$$ = TrCreateNode (PARSEOP_LNOT, 1, TrLinkChildren ($<n>3,2,$4,$5));}
> @@ -1843,7 +1949,7 @@ LLessEqualTerm
>     ;
>
>  LNotTerm
> -    : PARSEOP_LNOT '('                         {$<n>$ = TrCreateLeafNode (PARSEOP_LNOT);}
> +    : PARSEOP_LNOT '('              {$<n>$ = TrCreateLeafNode (PARSEOP_LNOT);}
>         TermArg
>         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
>     | PARSEOP_LNOT '('
> @@ -1851,7 +1957,7 @@ LNotTerm
>     ;
>
>  LNotEqualTerm
> -    : PARSEOP_LNOTEQUAL '('                    {$<n>$ = TrCreateLeafNode (PARSEOP_LEQUAL);}
> +    : PARSEOP_LNOTEQUAL '('         {$<n>$ = TrCreateLeafNode (PARSEOP_LEQUAL);}
>         TermArg
>         TermArgItem
>         ')'                         {$$ = TrCreateNode (PARSEOP_LNOT, 1, TrLinkChildren ($<n>3,2,$4,$5));}
> @@ -1860,7 +1966,7 @@ LNotEqualTerm
>     ;
>
>  LoadTableTerm
> -    : PARSEOP_LOADTABLE '('                    {$<n>$ = TrCreateLeafNode (PARSEOP_LOADTABLE);}
> +    : PARSEOP_LOADTABLE '('         {$<n>$ = TrCreateLeafNode (PARSEOP_LOADTABLE);}
>         TermArg
>         TermArgItem
>         TermArgItem
> @@ -1873,7 +1979,7 @@ LoadTableTerm
>     ;
>
>  LOrTerm
> -    : PARSEOP_LOR '('                          {$<n>$ = TrCreateLeafNode (PARSEOP_LOR);}
> +    : PARSEOP_LOR '('               {$<n>$ = TrCreateLeafNode (PARSEOP_LOR);}
>         TermArg
>         TermArgItem
>         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
> @@ -1882,7 +1988,7 @@ LOrTerm
>     ;
>
>  MatchTerm
> -    : PARSEOP_MATCH '('                                {$<n>$ = TrCreateLeafNode (PARSEOP_MATCH);}
> +    : PARSEOP_MATCH '('             {$<n>$ = TrCreateLeafNode (PARSEOP_MATCH);}
>         TermArg
>         ',' MatchOpKeyword
>         TermArgItem
> @@ -1895,7 +2001,7 @@ MatchTerm
>     ;
>
>  MidTerm
> -    : PARSEOP_MID '('                          {$<n>$ = TrCreateLeafNode (PARSEOP_MID);}
> +    : PARSEOP_MID '('               {$<n>$ = TrCreateLeafNode (PARSEOP_MID);}
>         TermArg
>         TermArgItem
>         TermArgItem
> @@ -1906,7 +2012,7 @@ MidTerm
>     ;
>
>  ModTerm
> -    : PARSEOP_MOD '('                          {$<n>$ = TrCreateLeafNode (PARSEOP_MOD);}
> +    : PARSEOP_MOD '('               {$<n>$ = TrCreateLeafNode (PARSEOP_MOD);}
>         TermArg
>         TermArgItem
>         Target
> @@ -1916,7 +2022,7 @@ ModTerm
>     ;
>
>  MultiplyTerm
> -    : PARSEOP_MULTIPLY '('                     {$<n>$ = TrCreateLeafNode (PARSEOP_MULTIPLY);}
> +    : PARSEOP_MULTIPLY '('          {$<n>$ = TrCreateLeafNode (PARSEOP_MULTIPLY);}
>         TermArg
>         TermArgItem
>         Target
> @@ -1926,7 +2032,7 @@ MultiplyTerm
>     ;
>
>  NAndTerm
> -    : PARSEOP_NAND '('                         {$<n>$ = TrCreateLeafNode (PARSEOP_NAND);}
> +    : PARSEOP_NAND '('              {$<n>$ = TrCreateLeafNode (PARSEOP_NAND);}
>         TermArg
>         TermArgItem
>         Target
> @@ -1936,7 +2042,7 @@ NAndTerm
>     ;
>
>  NOrTerm
> -    : PARSEOP_NOR '('                          {$<n>$ = TrCreateLeafNode (PARSEOP_NOR);}
> +    : PARSEOP_NOR '('               {$<n>$ = TrCreateLeafNode (PARSEOP_NOR);}
>         TermArg
>         TermArgItem
>         Target
> @@ -1946,7 +2052,7 @@ NOrTerm
>     ;
>
>  NotTerm
> -    : PARSEOP_NOT '('                          {$<n>$ = TrCreateLeafNode (PARSEOP_NOT);}
> +    : PARSEOP_NOT '('               {$<n>$ = TrCreateLeafNode (PARSEOP_NOT);}
>         TermArg
>         Target
>         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
> @@ -1955,7 +2061,7 @@ NotTerm
>     ;
>
>  ObjectTypeTerm
> -    : PARSEOP_OBJECTTYPE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE);}
> +    : PARSEOP_OBJECTTYPE '('        {$<n>$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE);}
>         SuperName
>         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
>     | PARSEOP_OBJECTTYPE '('
> @@ -1963,7 +2069,7 @@ ObjectTypeTerm
>     ;
>
>  OrTerm
> -    : PARSEOP_OR '('                           {$<n>$ = TrCreateLeafNode (PARSEOP_OR);}
> +    : PARSEOP_OR '('                {$<n>$ = TrCreateLeafNode (PARSEOP_OR);}
>         TermArg
>         TermArgItem
>         Target
> @@ -1977,7 +2083,7 @@ OrTerm
>  * we've taken a pointer to it. (hard to tell if a local becomes initialized this way.)
>  */
>  RefOfTerm
> -    : PARSEOP_REFOF '('                                {$<n>$ = TrCreateLeafNode (PARSEOP_REFOF);}
> +    : PARSEOP_REFOF '('             {$<n>$ = TrCreateLeafNode (PARSEOP_REFOF);}
>         SuperName
>         ')'                         {$$ = TrLinkChildren ($<n>3,1,TrSetNodeFlags ($4, NODE_IS_TARGET));}
>     | PARSEOP_REFOF '('
> @@ -1985,7 +2091,7 @@ RefOfTerm
>     ;
>
>  ShiftLeftTerm
> -    : PARSEOP_SHIFTLEFT '('                    {$<n>$ = TrCreateLeafNode (PARSEOP_SHIFTLEFT);}
> +    : PARSEOP_SHIFTLEFT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_SHIFTLEFT);}
>         TermArg
>         TermArgItem
>         Target
> @@ -1995,7 +2101,7 @@ ShiftLeftTerm
>     ;
>
>  ShiftRightTerm
> -    : PARSEOP_SHIFTRIGHT '('           {$<n>$ = TrCreateLeafNode (PARSEOP_SHIFTRIGHT);}
> +    : PARSEOP_SHIFTRIGHT '('        {$<n>$ = TrCreateLeafNode (PARSEOP_SHIFTRIGHT);}
>         TermArg
>         TermArgItem
>         Target
> @@ -2005,7 +2111,7 @@ ShiftRightTerm
>     ;
>
>  SizeOfTerm
> -    : PARSEOP_SIZEOF '('                       {$<n>$ = TrCreateLeafNode (PARSEOP_SIZEOF);}
> +    : PARSEOP_SIZEOF '('            {$<n>$ = TrCreateLeafNode (PARSEOP_SIZEOF);}
>         SuperName
>         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
>     | PARSEOP_SIZEOF '('
> @@ -2013,7 +2119,7 @@ SizeOfTerm
>     ;
>
>  StoreTerm
> -    : PARSEOP_STORE '('                                {$<n>$ = TrCreateLeafNode (PARSEOP_STORE);}
> +    : PARSEOP_STORE '('             {$<n>$ = TrCreateLeafNode (PARSEOP_STORE);}
>         TermArg
>         ',' SuperName
>         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,TrSetNodeFlags ($6, NODE_IS_TARGET));}
> @@ -2022,7 +2128,7 @@ StoreTerm
>     ;
>
>  SubtractTerm
> -    : PARSEOP_SUBTRACT '('                     {$<n>$ = TrCreateLeafNode (PARSEOP_SUBTRACT);}
> +    : PARSEOP_SUBTRACT '('          {$<n>$ = TrCreateLeafNode (PARSEOP_SUBTRACT);}
>         TermArg
>         TermArgItem
>         Target
> @@ -2032,15 +2138,15 @@ SubtractTerm
>     ;
>
>  TimerTerm
> -    : PARSEOP_TIMER '('                            {$<n>$ = TrCreateLeafNode (PARSEOP_TIMER);}
> +    : PARSEOP_TIMER '('             {$<n>$ = TrCreateLeafNode (PARSEOP_TIMER);}
>         ')'                         {$$ = TrLinkChildren ($<n>3,0);}
> -    | PARSEOP_TIMER                        {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_TIMER),0);}
> +    | PARSEOP_TIMER                 {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_TIMER),0);}
>     | PARSEOP_TIMER '('
>         error ')'                   {$$ = AslDoError(); yyclearin;}
>     ;
>
>  ToBCDTerm
> -    : PARSEOP_TOBCD '('                                {$<n>$ = TrCreateLeafNode (PARSEOP_TOBCD);}
> +    : PARSEOP_TOBCD '('             {$<n>$ = TrCreateLeafNode (PARSEOP_TOBCD);}
>         TermArg
>         Target
>         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
> @@ -2049,7 +2155,7 @@ ToBCDTerm
>     ;
>
>  ToBufferTerm
> -    : PARSEOP_TOBUFFER '('                     {$<n>$ = TrCreateLeafNode (PARSEOP_TOBUFFER);}
> +    : PARSEOP_TOBUFFER '('          {$<n>$ = TrCreateLeafNode (PARSEOP_TOBUFFER);}
>         TermArg
>         Target
>         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
> @@ -2058,7 +2164,7 @@ ToBufferTerm
>     ;
>
>  ToDecimalStringTerm
> -    : PARSEOP_TODECIMALSTRING '('      {$<n>$ = TrCreateLeafNode (PARSEOP_TODECIMALSTRING);}
> +    : PARSEOP_TODECIMALSTRING '('   {$<n>$ = TrCreateLeafNode (PARSEOP_TODECIMALSTRING);}
>         TermArg
>         Target
>         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
> @@ -2067,7 +2173,7 @@ ToDecimalStringTerm
>     ;
>
>  ToHexStringTerm
> -    : PARSEOP_TOHEXSTRING '('          {$<n>$ = TrCreateLeafNode (PARSEOP_TOHEXSTRING);}
> +    : PARSEOP_TOHEXSTRING '('       {$<n>$ = TrCreateLeafNode (PARSEOP_TOHEXSTRING);}
>         TermArg
>         Target
>         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
> @@ -2076,7 +2182,7 @@ ToHexStringTerm
>     ;
>
>  ToIntegerTerm
> -    : PARSEOP_TOINTEGER '('                    {$<n>$ = TrCreateLeafNode (PARSEOP_TOINTEGER);}
> +    : PARSEOP_TOINTEGER '('         {$<n>$ = TrCreateLeafNode (PARSEOP_TOINTEGER);}
>         TermArg
>         Target
>         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
> @@ -2085,7 +2191,7 @@ ToIntegerTerm
>     ;
>
>  ToStringTerm
> -    : PARSEOP_TOSTRING '('                     {$<n>$ = TrCreateLeafNode (PARSEOP_TOSTRING);}
> +    : PARSEOP_TOSTRING '('          {$<n>$ = TrCreateLeafNode (PARSEOP_TOSTRING);}
>         TermArg
>         OptionalCount
>         Target
> @@ -2102,7 +2208,7 @@ ToUUIDTerm
>     ;
>
>  WaitTerm
> -    : PARSEOP_WAIT '('                         {$<n>$ = TrCreateLeafNode (PARSEOP_WAIT);}
> +    : PARSEOP_WAIT '('              {$<n>$ = TrCreateLeafNode (PARSEOP_WAIT);}
>         SuperName
>         TermArgItem
>         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
> @@ -2111,7 +2217,7 @@ WaitTerm
>     ;
>
>  XOrTerm
> -    : PARSEOP_XOR '('                          {$<n>$ = TrCreateLeafNode (PARSEOP_XOR);}
> +    : PARSEOP_XOR '('               {$<n>$ = TrCreateLeafNode (PARSEOP_XOR);}
>         TermArg
>         TermArgItem
>         Target
> @@ -2124,23 +2230,23 @@ XOrTerm
>  /******* Keywords *************************************************************/
>
>
> -ObjectTypeKeyword
> -    : PARSEOP_OBJECTTYPE_UNK                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_UNK);}
> -    | PARSEOP_OBJECTTYPE_INT                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_INT);}
> -    | PARSEOP_OBJECTTYPE_STR                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_STR);}
> -    | PARSEOP_OBJECTTYPE_BUF                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_BUF);}
> -    | PARSEOP_OBJECTTYPE_PKG                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_PKG);}
> -    | PARSEOP_OBJECTTYPE_FLD                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_FLD);}
> -    | PARSEOP_OBJECTTYPE_DEV                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_DEV);}
> -    | PARSEOP_OBJECTTYPE_EVT                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_EVT);}
> -    | PARSEOP_OBJECTTYPE_MTH                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_MTH);}
> -    | PARSEOP_OBJECTTYPE_MTX                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_MTX);}
> -    | PARSEOP_OBJECTTYPE_OPR                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_OPR);}
> -    | PARSEOP_OBJECTTYPE_POW                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_POW);}
> -    | PARSEOP_OBJECTTYPE_PRO                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_PRO);}
> -    | PARSEOP_OBJECTTYPE_THZ                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_THZ);}
> -    | PARSEOP_OBJECTTYPE_BFF                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_BFF);}
> -    | PARSEOP_OBJECTTYPE_DDB                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_DDB);}
> +AccessAttribKeyword
> +    : PARSEOP_ACCESSATTRIB_BLOCK            {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_BLOCK);}
> +    | PARSEOP_ACCESSATTRIB_BLOCK_CALL       {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_BLOCK_CALL);}
> +    | PARSEOP_ACCESSATTRIB_BYTE             {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_BYTE);}
> +    | PARSEOP_ACCESSATTRIB_QUICK            {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_QUICK );}
> +    | PARSEOP_ACCESSATTRIB_SND_RCV          {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_SND_RCV);}
> +    | PARSEOP_ACCESSATTRIB_WORD             {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_WORD);}
> +    | PARSEOP_ACCESSATTRIB_WORD_CALL        {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_WORD_CALL);}
> +    | PARSEOP_ACCESSATTRIB_MULTIBYTE '('    {$<n>$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_MULTIBYTE);}
> +        ByteConst
> +        ')'                                 {$$ = TrLinkChildren ($<n>3,1,$4);}
> +    | PARSEOP_ACCESSATTRIB_RAW_BYTES '('    {$<n>$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_RAW_BYTES);}
> +        ByteConst
> +        ')'                                 {$$ = TrLinkChildren ($<n>3,1,$4);}
> +    | PARSEOP_ACCESSATTRIB_RAW_PROCESS '('  {$<n>$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_RAW_PROCESS);}
> +        ByteConst
> +        ')'                                 {$$ = TrLinkChildren ($<n>3,1,$4);}
>     ;
>
>  AccessTypeKeyword
> @@ -2152,49 +2258,95 @@ AccessTypeKeyword
>     | PARSEOP_ACCESSTYPE_BUF                {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_BUF);}
>     ;
>
> -AccessAttribKeyword
> -    : PARSEOP_ACCESSATTRIB_QUICK            {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_QUICK );}
> -    | PARSEOP_ACCESSATTRIB_SND_RCV          {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_SND_RCV);}
> -    | PARSEOP_ACCESSATTRIB_BYTE             {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_BYTE);}
> -    | PARSEOP_ACCESSATTRIB_WORD             {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_WORD);}
> -    | PARSEOP_ACCESSATTRIB_BLOCK            {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_BLOCK);}
> -    | PARSEOP_ACCESSATTRIB_WORD_CALL        {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_WORD_CALL);}
> -    | PARSEOP_ACCESSATTRIB_BLOCK_CALL       {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_BLOCK_CALL);}
> +AddressingModeKeyword
> +    : PARSEOP_ADDRESSINGMODE_7BIT           {$$ = TrCreateLeafNode (PARSEOP_ADDRESSINGMODE_7BIT);}
> +    | PARSEOP_ADDRESSINGMODE_10BIT          {$$ = TrCreateLeafNode (PARSEOP_ADDRESSINGMODE_10BIT);}
>     ;
>
> -LockRuleKeyword
> -    : PARSEOP_LOCKRULE_LOCK                 {$$ = TrCreateLeafNode (PARSEOP_LOCKRULE_LOCK);}
> -    | PARSEOP_LOCKRULE_NOLOCK               {$$ = TrCreateLeafNode (PARSEOP_LOCKRULE_NOLOCK);}
> +AddressKeyword
> +    : PARSEOP_ADDRESSTYPE_MEMORY            {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_MEMORY);}
> +    | PARSEOP_ADDRESSTYPE_RESERVED          {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_RESERVED);}
> +    | PARSEOP_ADDRESSTYPE_NVS               {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_NVS);}
> +    | PARSEOP_ADDRESSTYPE_ACPI              {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_ACPI);}
>     ;
>
> -UpdateRuleKeyword
> -    : PARSEOP_UPDATERULE_PRESERVE           {$$ = TrCreateLeafNode (PARSEOP_UPDATERULE_PRESERVE);}
> -    | PARSEOP_UPDATERULE_ONES               {$$ = TrCreateLeafNode (PARSEOP_UPDATERULE_ONES);}
> -    | PARSEOP_UPDATERULE_ZEROS              {$$ = TrCreateLeafNode (PARSEOP_UPDATERULE_ZEROS);}
> +AddressSpaceKeyword
> +    : ByteConst                             {$$ = UtCheckIntegerRange ($1, 0x80, 0xFF);}
> +    | RegionSpaceKeyword                    {}
>     ;
>
> +BitsPerByteKeyword
> +    : PARSEOP_BITSPERBYTE_FIVE              {$$ = TrCreateLeafNode (PARSEOP_BITSPERBYTE_FIVE);}
> +    | PARSEOP_BITSPERBYTE_SIX               {$$ = TrCreateLeafNode (PARSEOP_BITSPERBYTE_SIX);}
> +    | PARSEOP_BITSPERBYTE_SEVEN             {$$ = TrCreateLeafNode (PARSEOP_BITSPERBYTE_SEVEN);}
> +    | PARSEOP_BITSPERBYTE_EIGHT             {$$ = TrCreateLeafNode (PARSEOP_BITSPERBYTE_EIGHT);}
> +    | PARSEOP_BITSPERBYTE_NINE              {$$ = TrCreateLeafNode (PARSEOP_BITSPERBYTE_NINE);}
> +    ;
>
> -RegionSpaceKeyword
> -    : PARSEOP_REGIONSPACE_IO                {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_IO);}
> -    | PARSEOP_REGIONSPACE_MEM               {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_MEM);}
> -    | PARSEOP_REGIONSPACE_PCI               {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_PCI);}
> -    | PARSEOP_REGIONSPACE_EC                {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_EC);}
> -    | PARSEOP_REGIONSPACE_SMBUS             {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_SMBUS);}
> -    | PARSEOP_REGIONSPACE_CMOS              {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_CMOS);}
> -    | PARSEOP_REGIONSPACE_PCIBAR            {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_PCIBAR);}
> -    | PARSEOP_REGIONSPACE_IPMI              {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_IPMI);}
> +ClockPhaseKeyword
> +    : PARSEOP_CLOCKPHASE_FIRST              {$$ = TrCreateLeafNode (PARSEOP_CLOCKPHASE_FIRST);}
> +    | PARSEOP_CLOCKPHASE_SECOND             {$$ = TrCreateLeafNode (PARSEOP_CLOCKPHASE_SECOND);}
>     ;
>
> -AddressSpaceKeyword
> -    : ByteConst                                                                {$$ = UtCheckIntegerRange ($1, 0x80, 0xFF);}
> -    | RegionSpaceKeyword                                       {}
> -    | PARSEOP_ADDRESSSPACE_FFIXEDHW         {$$ = TrCreateLeafNode (PARSEOP_ADDRESSSPACE_FFIXEDHW);}
> +ClockPolarityKeyword
> +    : PARSEOP_CLOCKPOLARITY_LOW             {$$ = TrCreateLeafNode (PARSEOP_CLOCKPOLARITY_LOW);}
> +    | PARSEOP_CLOCKPOLARITY_HIGH            {$$ = TrCreateLeafNode (PARSEOP_CLOCKPOLARITY_HIGH);}
>     ;
>
> +DecodeKeyword
> +    : PARSEOP_DECODETYPE_POS                {$$ = TrCreateLeafNode (PARSEOP_DECODETYPE_POS);}
> +    | PARSEOP_DECODETYPE_SUB                {$$ = TrCreateLeafNode (PARSEOP_DECODETYPE_SUB);}
> +    ;
>
> -SerializeRuleKeyword
> -    : PARSEOP_SERIALIZERULE_SERIAL          {$$ = TrCreateLeafNode (PARSEOP_SERIALIZERULE_SERIAL);}
> -    | PARSEOP_SERIALIZERULE_NOTSERIAL       {$$ = TrCreateLeafNode (PARSEOP_SERIALIZERULE_NOTSERIAL);}
> +DevicePolarityKeyword
> +    : PARSEOP_DEVICEPOLARITY_LOW            {$$ = TrCreateLeafNode (PARSEOP_DEVICEPOLARITY_LOW);}
> +    | PARSEOP_DEVICEPOLARITY_HIGH           {$$ = TrCreateLeafNode (PARSEOP_DEVICEPOLARITY_HIGH);}
> +    ;
> +
> +DMATypeKeyword
> +    : PARSEOP_DMATYPE_A                     {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_A);}
> +    | PARSEOP_DMATYPE_COMPATIBILITY         {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_COMPATIBILITY);}
> +    | PARSEOP_DMATYPE_B                     {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_B);}
> +    | PARSEOP_DMATYPE_F                     {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_F);}
> +    ;
> +
> +EndianKeyword
> +    : PARSEOP_ENDIAN_LITTLE                 {$$ = TrCreateLeafNode (PARSEOP_ENDIAN_LITTLE);}
> +    | PARSEOP_ENDIAN_BIG                    {$$ = TrCreateLeafNode (PARSEOP_ENDIAN_BIG);}
> +    ;
> +
> +FlowControlKeyword
> +    : PARSEOP_FLOWCONTROL_HW                {$$ = TrCreateLeafNode (PARSEOP_FLOWCONTROL_HW);}
> +    | PARSEOP_FLOWCONTROL_NONE              {$$ = TrCreateLeafNode (PARSEOP_FLOWCONTROL_NONE);}
> +    | PARSEOP_FLOWCONTROL_SW                {$$ = TrCreateLeafNode (PARSEOP_FLOWCONTROL_SW);}
> +    ;
> +
> +InterruptLevel
> +    : PARSEOP_INTLEVEL_ACTIVEBOTH           {$$ = TrCreateLeafNode (PARSEOP_INTLEVEL_ACTIVEBOTH);}
> +    | PARSEOP_INTLEVEL_ACTIVEHIGH           {$$ = TrCreateLeafNode (PARSEOP_INTLEVEL_ACTIVEHIGH);}
> +    | PARSEOP_INTLEVEL_ACTIVELOW            {$$ = TrCreateLeafNode (PARSEOP_INTLEVEL_ACTIVELOW);}
> +    ;
> +
> +InterruptTypeKeyword
> +    : PARSEOP_INTTYPE_EDGE                  {$$ = TrCreateLeafNode (PARSEOP_INTTYPE_EDGE);}
> +    | PARSEOP_INTTYPE_LEVEL                 {$$ = TrCreateLeafNode (PARSEOP_INTTYPE_LEVEL);}
> +    ;
> +
> +IODecodeKeyword
> +    : PARSEOP_IODECODETYPE_16               {$$ = TrCreateLeafNode (PARSEOP_IODECODETYPE_16);}
> +    | PARSEOP_IODECODETYPE_10               {$$ = TrCreateLeafNode (PARSEOP_IODECODETYPE_10);}
> +    ;
> +
> +IoRestrictionKeyword
> +    : PARSEOP_IORESTRICT_IN                 {$$ = TrCreateLeafNode (PARSEOP_IORESTRICT_IN);}
> +    | PARSEOP_IORESTRICT_OUT                {$$ = TrCreateLeafNode (PARSEOP_IORESTRICT_OUT);}
> +    | PARSEOP_IORESTRICT_NONE               {$$ = TrCreateLeafNode (PARSEOP_IORESTRICT_NONE);}
> +    | PARSEOP_IORESTRICT_PRESERVE           {$$ = TrCreateLeafNode (PARSEOP_IORESTRICT_PRESERVE);}
> +    ;
> +
> +LockRuleKeyword
> +    : PARSEOP_LOCKRULE_LOCK                 {$$ = TrCreateLeafNode (PARSEOP_LOCKRULE_LOCK);}
> +    | PARSEOP_LOCKRULE_NOLOCK               {$$ = TrCreateLeafNode (PARSEOP_LOCKRULE_NOLOCK);}
>     ;
>
>  MatchOpKeyword
> @@ -2206,22 +2358,16 @@ MatchOpKeyword
>     | PARSEOP_MATCHTYPE_MGT                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MGT);}
>     ;
>
> -DMATypeKeyword
> -    : PARSEOP_DMATYPE_A                     {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_A);}
> -    | PARSEOP_DMATYPE_COMPATIBILITY         {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_COMPATIBILITY);}
> -    | PARSEOP_DMATYPE_B                     {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_B);}
> -    | PARSEOP_DMATYPE_F                     {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_F);}
> -    ;
> -
> -XferTypeKeyword
> -    : PARSEOP_XFERTYPE_8                    {$$ = TrCreateLeafNode (PARSEOP_XFERTYPE_8);}
> -    | PARSEOP_XFERTYPE_8_16                 {$$ = TrCreateLeafNode (PARSEOP_XFERTYPE_8_16);}
> -    | PARSEOP_XFERTYPE_16                   {$$ = TrCreateLeafNode (PARSEOP_XFERTYPE_16);}
> +MaxKeyword
> +    : PARSEOP_MAXTYPE_FIXED                 {$$ = TrCreateLeafNode (PARSEOP_MAXTYPE_FIXED);}
> +    | PARSEOP_MAXTYPE_NOTFIXED              {$$ = TrCreateLeafNode (PARSEOP_MAXTYPE_NOTFIXED);}
>     ;
>
> -ResourceTypeKeyword
> -    : PARSEOP_RESOURCETYPE_CONSUMER         {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
> -    | PARSEOP_RESOURCETYPE_PRODUCER         {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_PRODUCER);}
> +MemTypeKeyword
> +    : PARSEOP_MEMTYPE_CACHEABLE             {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_CACHEABLE);}
> +    | PARSEOP_MEMTYPE_WRITECOMBINING        {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_WRITECOMBINING);}
> +    | PARSEOP_MEMTYPE_PREFETCHABLE          {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_PREFETCHABLE);}
> +    | PARSEOP_MEMTYPE_NONCACHEABLE          {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_NONCACHEABLE);}
>     ;
>
>  MinKeyword
> @@ -2229,14 +2375,43 @@ MinKeyword
>     | PARSEOP_MINTYPE_NOTFIXED              {$$ = TrCreateLeafNode (PARSEOP_MINTYPE_NOTFIXED);}
>     ;
>
> -MaxKeyword
> -    : PARSEOP_MAXTYPE_FIXED                 {$$ = TrCreateLeafNode (PARSEOP_MAXTYPE_FIXED);}
> -    | PARSEOP_MAXTYPE_NOTFIXED              {$$ = TrCreateLeafNode (PARSEOP_MAXTYPE_NOTFIXED);}
> +ObjectTypeKeyword
> +    : PARSEOP_OBJECTTYPE_UNK                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_UNK);}
> +    | PARSEOP_OBJECTTYPE_INT                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_INT);}
> +    | PARSEOP_OBJECTTYPE_STR                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_STR);}
> +    | PARSEOP_OBJECTTYPE_BUF                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_BUF);}
> +    | PARSEOP_OBJECTTYPE_PKG                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_PKG);}
> +    | PARSEOP_OBJECTTYPE_FLD                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_FLD);}
> +    | PARSEOP_OBJECTTYPE_DEV                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_DEV);}
> +    | PARSEOP_OBJECTTYPE_EVT                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_EVT);}
> +    | PARSEOP_OBJECTTYPE_MTH                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_MTH);}
> +    | PARSEOP_OBJECTTYPE_MTX                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_MTX);}
> +    | PARSEOP_OBJECTTYPE_OPR                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_OPR);}
> +    | PARSEOP_OBJECTTYPE_POW                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_POW);}
> +    | PARSEOP_OBJECTTYPE_PRO                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_PRO);}
> +    | PARSEOP_OBJECTTYPE_THZ                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_THZ);}
> +    | PARSEOP_OBJECTTYPE_BFF                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_BFF);}
> +    | PARSEOP_OBJECTTYPE_DDB                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_DDB);}
>     ;
>
> -DecodeKeyword
> -    : PARSEOP_DECODETYPE_POS                {$$ = TrCreateLeafNode (PARSEOP_DECODETYPE_POS);}
> -    | PARSEOP_DECODETYPE_SUB                {$$ = TrCreateLeafNode (PARSEOP_DECODETYPE_SUB);}
> +ParityTypeKeyword
> +    : PARSEOP_PARITYTYPE_SPACE              {$$ = TrCreateLeafNode (PARSEOP_PARITYTYPE_SPACE);}
> +    | PARSEOP_PARITYTYPE_MARK               {$$ = TrCreateLeafNode (PARSEOP_PARITYTYPE_MARK);}
> +    | PARSEOP_PARITYTYPE_ODD                {$$ = TrCreateLeafNode (PARSEOP_PARITYTYPE_ODD);}
> +    | PARSEOP_PARITYTYPE_EVEN               {$$ = TrCreateLeafNode (PARSEOP_PARITYTYPE_EVEN);}
> +    | PARSEOP_PARITYTYPE_NONE               {$$ = TrCreateLeafNode (PARSEOP_PARITYTYPE_NONE);}
> +    ;
> +
> +PinConfigByte
> +    : PinConfigKeyword                      {$$ = $1;}
> +    | ByteConstExpr                         {$$ = UtCheckIntegerRange ($1, 0x80, 0xFF);}
> +    ;
> +
> +PinConfigKeyword
> +    : PARSEOP_PIN_NOPULL                    {$$ = TrCreateLeafNode (PARSEOP_PIN_NOPULL);}
> +    | PARSEOP_PIN_PULLDOWN                  {$$ = TrCreateLeafNode (PARSEOP_PIN_PULLDOWN);}
> +    | PARSEOP_PIN_PULLUP                    {$$ = TrCreateLeafNode (PARSEOP_PIN_PULLUP);}
> +    | PARSEOP_PIN_PULLDEFAULT               {$$ = TrCreateLeafNode (PARSEOP_PIN_PULLDEFAULT);}
>     ;
>
>  RangeTypeKeyword
> @@ -2245,37 +2420,52 @@ RangeTypeKeyword
>     | PARSEOP_RANGETYPE_ENTIRE              {$$ = TrCreateLeafNode (PARSEOP_RANGETYPE_ENTIRE);}
>     ;
>
> -MemTypeKeyword
> -    : PARSEOP_MEMTYPE_CACHEABLE             {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_CACHEABLE);}
> -    | PARSEOP_MEMTYPE_WRITECOMBINING        {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_WRITECOMBINING);}
> -    | PARSEOP_MEMTYPE_PREFETCHABLE          {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_PREFETCHABLE);}
> -    | PARSEOP_MEMTYPE_NONCACHEABLE          {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_NONCACHEABLE);}
> -    ;
> -
> -OptionalReadWriteKeyword
> -    :                                       {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_BOTH);}
> -    | PARSEOP_READWRITETYPE_BOTH            {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_BOTH);}
> -    | PARSEOP_READWRITETYPE_READONLY        {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_READONLY);}
> +RegionSpaceKeyword
> +    : PARSEOP_REGIONSPACE_IO                {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_IO);}
> +    | PARSEOP_REGIONSPACE_MEM               {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_MEM);}
> +    | PARSEOP_REGIONSPACE_PCI               {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_PCI);}
> +    | PARSEOP_REGIONSPACE_EC                {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_EC);}
> +    | PARSEOP_REGIONSPACE_SMBUS             {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_SMBUS);}
> +    | PARSEOP_REGIONSPACE_CMOS              {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_CMOS);}
> +    | PARSEOP_REGIONSPACE_PCIBAR            {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_PCIBAR);}
> +    | PARSEOP_REGIONSPACE_IPMI              {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_IPMI);}
> +    | PARSEOP_REGIONSPACE_GPIO              {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_GPIO);}
> +    | PARSEOP_REGIONSPACE_GSBUS             {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_GSBUS);}
> +    | PARSEOP_REGIONSPACE_FFIXEDHW          {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_FFIXEDHW);}
>     ;
>
> -InterruptTypeKeyword
> -    : PARSEOP_INTTYPE_EDGE                  {$$ = TrCreateLeafNode (PARSEOP_INTTYPE_EDGE);}
> -    | PARSEOP_INTTYPE_LEVEL                 {$$ = TrCreateLeafNode (PARSEOP_INTTYPE_LEVEL);}
> +ResourceTypeKeyword
> +    : PARSEOP_RESOURCETYPE_CONSUMER         {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
> +    | PARSEOP_RESOURCETYPE_PRODUCER         {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_PRODUCER);}
>     ;
>
> -InterruptLevel
> -    : PARSEOP_INTLEVEL_ACTIVEHIGH           {$$ = TrCreateLeafNode (PARSEOP_INTLEVEL_ACTIVEHIGH);}
> -    | PARSEOP_INTLEVEL_ACTIVELOW            {$$ = TrCreateLeafNode (PARSEOP_INTLEVEL_ACTIVELOW);}
> +SerializeRuleKeyword
> +    : PARSEOP_SERIALIZERULE_SERIAL          {$$ = TrCreateLeafNode (PARSEOP_SERIALIZERULE_SERIAL);}
> +    | PARSEOP_SERIALIZERULE_NOTSERIAL       {$$ = TrCreateLeafNode (PARSEOP_SERIALIZERULE_NOTSERIAL);}
>     ;
>
>  ShareTypeKeyword
>     : PARSEOP_SHARETYPE_SHARED              {$$ = TrCreateLeafNode (PARSEOP_SHARETYPE_SHARED);}
>     | PARSEOP_SHARETYPE_EXCLUSIVE           {$$ = TrCreateLeafNode (PARSEOP_SHARETYPE_EXCLUSIVE);}
> +    | PARSEOP_SHARETYPE_SHAREDWAKE          {$$ = TrCreateLeafNode (PARSEOP_SHARETYPE_SHAREDWAKE);}
> +    | PARSEOP_SHARETYPE_EXCLUSIVEWAKE       {$$ = TrCreateLeafNode (PARSEOP_SHARETYPE_EXCLUSIVEWAKE);}
> +   ;
> +
> +SlaveModeKeyword
> +    : PARSEOP_SLAVEMODE_CONTROLLERINIT      {$$ = TrCreateLeafNode (PARSEOP_SLAVEMODE_CONTROLLERINIT);}
> +    | PARSEOP_SLAVEMODE_DEVICEINIT          {$$ = TrCreateLeafNode (PARSEOP_SLAVEMODE_DEVICEINIT);}
>     ;
>
> -IODecodeKeyword
> -    : PARSEOP_IODECODETYPE_16               {$$ = TrCreateLeafNode (PARSEOP_IODECODETYPE_16);}
> -    | PARSEOP_IODECODETYPE_10               {$$ = TrCreateLeafNode (PARSEOP_IODECODETYPE_10);}
> +StopBitsKeyword
> +    : PARSEOP_STOPBITS_TWO                  {$$ = TrCreateLeafNode (PARSEOP_STOPBITS_TWO);}
> +    | PARSEOP_STOPBITS_ONEPLUSHALF          {$$ = TrCreateLeafNode (PARSEOP_STOPBITS_ONEPLUSHALF);}
> +    | PARSEOP_STOPBITS_ONE                  {$$ = TrCreateLeafNode (PARSEOP_STOPBITS_ONE);}
> +    | PARSEOP_STOPBITS_ZERO                 {$$ = TrCreateLeafNode (PARSEOP_STOPBITS_ZERO);}
> +    ;
> +
> +TranslationKeyword
> +    : PARSEOP_TRANSLATIONTYPE_SPARSE        {$$ = TrCreateLeafNode (PARSEOP_TRANSLATIONTYPE_SPARSE);}
> +    | PARSEOP_TRANSLATIONTYPE_DENSE         {$$ = TrCreateLeafNode (PARSEOP_TRANSLATIONTYPE_DENSE);}
>     ;
>
>  TypeKeyword
> @@ -2283,16 +2473,30 @@ TypeKeyword
>     | PARSEOP_TYPE_STATIC                   {$$ = TrCreateLeafNode (PARSEOP_TYPE_STATIC);}
>     ;
>
> -TranslationKeyword
> -    : PARSEOP_TRANSLATIONTYPE_SPARSE        {$$ = TrCreateLeafNode (PARSEOP_TRANSLATIONTYPE_SPARSE);}
> -    | PARSEOP_TRANSLATIONTYPE_DENSE         {$$ = TrCreateLeafNode (PARSEOP_TRANSLATIONTYPE_DENSE);}
> +UpdateRuleKeyword
> +    : PARSEOP_UPDATERULE_PRESERVE           {$$ = TrCreateLeafNode (PARSEOP_UPDATERULE_PRESERVE);}
> +    | PARSEOP_UPDATERULE_ONES               {$$ = TrCreateLeafNode (PARSEOP_UPDATERULE_ONES);}
> +    | PARSEOP_UPDATERULE_ZEROS              {$$ = TrCreateLeafNode (PARSEOP_UPDATERULE_ZEROS);}
>     ;
>
> -AddressKeyword
> -    : PARSEOP_ADDRESSTYPE_MEMORY            {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_MEMORY);}
> -    | PARSEOP_ADDRESSTYPE_RESERVED          {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_RESERVED);}
> -    | PARSEOP_ADDRESSTYPE_NVS               {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_NVS);}
> -    | PARSEOP_ADDRESSTYPE_ACPI              {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_ACPI);}
> +WireModeKeyword
> +    : PARSEOP_WIREMODE_FOUR                 {$$ = TrCreateLeafNode (PARSEOP_WIREMODE_FOUR);}
> +    | PARSEOP_WIREMODE_THREE                {$$ = TrCreateLeafNode (PARSEOP_WIREMODE_THREE);}
> +    ;
> +
> +XferSizeKeyword
> +    : PARSEOP_XFERSIZE_8                    {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_8,   0);}
> +    | PARSEOP_XFERSIZE_16                   {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_16,  1);}
> +    | PARSEOP_XFERSIZE_32                   {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_32,  2);}
> +    | PARSEOP_XFERSIZE_64                   {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_64,  3);}
> +    | PARSEOP_XFERSIZE_128                  {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_128, 4);}
> +    | PARSEOP_XFERSIZE_256                  {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_256, 5);}
> +    ;
> +
> +XferTypeKeyword
> +    : PARSEOP_XFERTYPE_8                    {$$ = TrCreateLeafNode (PARSEOP_XFERTYPE_8);}
> +    | PARSEOP_XFERTYPE_8_16                 {$$ = TrCreateLeafNode (PARSEOP_XFERTYPE_8_16);}
> +    | PARSEOP_XFERTYPE_16                   {$$ = TrCreateLeafNode (PARSEOP_XFERTYPE_16);}
>     ;
>
>
> @@ -2363,6 +2567,16 @@ ConstTerm
>     | PARSEOP_REVISION              {$$ = TrCreateLeafNode (PARSEOP_REVISION);}
>     ;
>
> +ConstExprTerm
> +    : PARSEOP_ZERO                  {$$ = TrCreateValuedLeafNode (PARSEOP_ZERO, 0);}
> +    | PARSEOP_ONE                   {$$ = TrCreateValuedLeafNode (PARSEOP_ONE, 1);}
> +    | PARSEOP_ONES                  {$$ = TrCreateValuedLeafNode (PARSEOP_ONES, ACPI_UINT64_MAX);}
> +    | PARSEOP___DATE__              {$$ = TrCreateConstantLeafNode (PARSEOP___DATE__);}
> +    | PARSEOP___FILE__              {$$ = TrCreateConstantLeafNode (PARSEOP___FILE__);}
> +    | PARSEOP___LINE__              {$$ = TrCreateConstantLeafNode (PARSEOP___LINE__);}
> +    | PARSEOP___PATH__              {$$ = TrCreateConstantLeafNode (PARSEOP___PATH__);}
> +    ;
> +
>  ByteConstExpr
>     : Type3Opcode                   {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);}
>     | Type2IntegerOpcode            {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);}
> @@ -2391,15 +2605,6 @@ QWordConstExpr
>     | QWordConst                    {}
>     ;
>
> -ConstExprTerm
> -    : PARSEOP_ZERO                  {$$ = TrCreateValuedLeafNode (PARSEOP_ZERO, 0);}
> -    | PARSEOP_ONE                   {$$ = TrCreateValuedLeafNode (PARSEOP_ONE, 1);}
> -    | PARSEOP_ONES                  {$$ = TrCreateValuedLeafNode (PARSEOP_ONES, ACPI_UINT64_MAX);}
> -    | PARSEOP___DATE__              {$$ = TrCreateConstantLeafNode (PARSEOP___DATE__);}
> -    | PARSEOP___FILE__              {$$ = TrCreateConstantLeafNode (PARSEOP___FILE__);}
> -    | PARSEOP___LINE__              {$$ = TrCreateConstantLeafNode (PARSEOP___LINE__);}
> -    ;
> -
>  /* OptionalCount must appear before ByteList or an incorrect reduction will result */
>
>  OptionalCount
> @@ -2408,7 +2613,6 @@ OptionalCount
>     | ',' TermArg                   {$$ = $2;}
>     ;
>
> -
>  BufferTerm
>     : PARSEOP_BUFFER '('            {$<n>$ = TrCreateLeafNode (PARSEOP_BUFFER);}
>         OptionalTermArg
> @@ -2431,6 +2635,15 @@ ByteList
>         ByteConstExpr               {$$ = TrLinkPeerNode ($1,$3);}
>     ;
>
> +DataBufferTerm
> +    : PARSEOP_DATABUFFER  '('       {$<n>$ = TrCreateLeafNode (PARSEOP_DATABUFFER);}
> +        OptionalWordConst
> +        ')' '{'
> +            ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
> +    | PARSEOP_DATABUFFER '('
> +        error ')'                   {$$ = AslDoError(); yyclearin;}
> +    ;
> +
>  DWordList
>     :                               {$$ = NULL;}
>     | DWordConstExpr
> @@ -2448,11 +2661,6 @@ PackageTerm
>         error ')'                   {$$ = AslDoError(); yyclearin;}
>     ;
>
> -VarPackageLengthTerm
> -    :                               {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
> -    | TermArg                       {$$ = $1;}
> -    ;
> -
>  PackageList
>     :                               {$$ = NULL;}
>     | PackageElement
> @@ -2466,6 +2674,15 @@ PackageElement
>     | NameString                    {}
>     ;
>
> +VarPackageLengthTerm
> +    :                               {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
> +    | TermArg                       {$$ = $1;}
> +    ;
> +
> +
> +/******* Macros ***********************************************/
> +
> +
>  EISAIDTerm
>     : PARSEOP_EISAID '('
>         StringData ')'              {$$ = TrUpdateNode (PARSEOP_EISAID, $3);}
> @@ -2473,6 +2690,14 @@ EISAIDTerm
>         error ')'                   {$$ = AslDoError(); yyclearin;}
>     ;
>
> +UnicodeTerm
> +    : PARSEOP_UNICODE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_UNICODE);}
> +        StringData
> +        ')'                         {$$ = TrLinkChildren ($<n>3,2,0,$4);}
> +    | PARSEOP_UNICODE '('
> +        error ')'                   {$$ = AslDoError(); yyclearin;}
> +    ;
> +
>
>  /******* Resources and Memory ***********************************************/
>
> @@ -2491,14 +2716,6 @@ ResourceTemplateTerm
>                                           TrCreateLeafNode (PARSEOP_ENDTAG));}
>     ;
>
> -UnicodeTerm
> -    : PARSEOP_UNICODE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_UNICODE);}
> -        StringData
> -        ')'                         {$$ = TrLinkChildren ($<n>3,2,0,$4);}
> -    | PARSEOP_UNICODE '('
> -        error ')'                   {$$ = AslDoError(); yyclearin;}
> -    ;
> -
>  ResourceMacroList
>     :                               {$$ = NULL;}
>     | ResourceMacroList
> @@ -2514,7 +2731,11 @@ ResourceMacroTerm
>     | ExtendedIOTerm                {}
>     | ExtendedMemoryTerm            {}
>     | ExtendedSpaceTerm             {}
> +    | FixedDmaTerm                  {}
>     | FixedIOTerm                   {}
> +    | GpioIntTerm                   {}
> +    | GpioIoTerm                    {}
> +    | I2cSerialBusTerm              {}
>     | InterruptTerm                 {}
>     | IOTerm                        {}
>     | IRQNoFlagsTerm                {}
> @@ -2526,8 +2747,10 @@ ResourceMacroTerm
>     | QWordMemoryTerm               {}
>     | QWordSpaceTerm                {}
>     | RegisterTerm                  {}
> -    | StartDependentFnTerm          {}
> +    | SpiSerialBusTerm              {}
>     | StartDependentFnNoPriTerm     {}
> +    | StartDependentFnTerm          {}
> +    | UartSerialBusTerm             {}
>     | VendorLongTerm                {}
>     | VendorShortTerm               {}
>     | WordBusNumberTerm             {}
> @@ -2684,6 +2907,17 @@ ExtendedSpaceTerm
>         error ')'                   {$$ = AslDoError(); yyclearin;}
>     ;
>
> +FixedDmaTerm
> +    : PARSEOP_FIXEDDMA '('          {$<n>$ = TrCreateLeafNode (PARSEOP_FIXEDDMA);}
> +        WordConstExpr               // 04: DMA RequestLines
> +        ',' WordConstExpr           // 06: DMA Channels
> +        OptionalXferSize            // 07: DMA TransferSize
> +        OptionalNameString          // 08: DescriptorName
> +        ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$6,$7,$8);}
> +    | PARSEOP_FIXEDDMA '('
> +        error ')'                   {$$ = AslDoError(); yyclearin;}
> +    ;
> +
>  FixedIOTerm
>     : PARSEOP_FIXEDIO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_FIXEDIO);}
>         WordConstExpr
> @@ -2694,6 +2928,58 @@ FixedIOTerm
>         error ')'                   {$$ = AslDoError(); yyclearin;}
>     ;
>
> +GpioIntTerm
> +    : PARSEOP_GPIO_INT '('          {$<n>$ = TrCreateLeafNode (PARSEOP_GPIO_INT);}
> +        InterruptTypeKeyword        // 04: InterruptType
> +        ',' InterruptLevel          // 06: InterruptLevel
> +        OptionalShareType           // 07: SharedType
> +        ',' PinConfigByte           // 09: PinConfig
> +        OptionalWordConstExpr       // 10: DebounceTimeout
> +        ',' StringData              // 12: ResourceSource
> +        OptionalByteConstExpr       // 13: ResourceSourceIndex
> +        OptionalResourceType        // 14: ResourceType
> +        OptionalNameString          // 15: DescriptorName
> +        OptionalBuffer_Last         // 16: VendorData
> +        ')' '{'
> +            DWordConstExpr '}'      {$$ = TrLinkChildren ($<n>3,11,$4,$6,$7,$9,$10,$12,$13,$14,$15,$16,$19);}
> +    | PARSEOP_GPIO_INT '('
> +        error ')'                   {$$ = AslDoError(); yyclearin;}
> +    ;
> +
> +GpioIoTerm
> +    : PARSEOP_GPIO_IO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_GPIO_IO);}
> +        OptionalShareType_First     // 04: SharedType
> +        ',' PinConfigByte           // 06: PinConfig
> +        OptionalWordConstExpr       // 07: DebounceTimeout
> +        OptionalWordConstExpr       // 08: DriveStrength
> +        OptionalIoRestriction       // 09: IoRestriction
> +        ',' StringData              // 11: ResourceSource
> +        OptionalByteConstExpr       // 12: ResourceSourceIndex
> +        OptionalResourceType        // 13: ResourceType
> +        OptionalNameString          // 14: DescriptorName
> +        OptionalBuffer_Last         // 15: VendorData
> +        ')' '{'
> +            DWordList '}'           {$$ = TrLinkChildren ($<n>3,11,$4,$6,$7,$8,$9,$11,$12,$13,$14,$15,$18);}
> +    | PARSEOP_GPIO_IO '('
> +        error ')'                   {$$ = AslDoError(); yyclearin;}
> +    ;
> +
> +I2cSerialBusTerm
> +    : PARSEOP_I2C_SERIALBUS '('     {$<n>$ = TrCreateLeafNode (PARSEOP_I2C_SERIALBUS);}
> +        WordConstExpr               // 04: SlaveAddress
> +        OptionalSlaveMode           // 05: SlaveMode
> +        ',' DWordConstExpr          // 07: ConnectionSpeed
> +        OptionalAddressingMode      // 08: AddressingMode
> +        ',' StringData              // 10: ResourceSource
> +        OptionalByteConstExpr       // 11: ResourceSourceIndex
> +        OptionalResourceType        // 12: ResourceType
> +        OptionalNameString          // 13: DescriptorName
> +        OptionalBuffer_Last         // 14: VendorData
> +        ')'                         {$$ = TrLinkChildren ($<n>3,9,$4,$5,$7,$8,$10,$11,$12,$13,$14);}
> +    | PARSEOP_I2C_SERIALBUS '('
> +        error ')'                   {$$ = AslDoError(); yyclearin;}
> +    ;
> +
>  InterruptTerm
>     : PARSEOP_INTERRUPT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_INTERRUPT);}
>         OptionalResourceType_First
> @@ -2859,6 +3145,34 @@ RegisterTerm
>         error ')'                   {$$ = AslDoError(); yyclearin;}
>     ;
>
> +SpiSerialBusTerm
> +    : PARSEOP_SPI_SERIALBUS '('     {$<n>$ = TrCreateLeafNode (PARSEOP_SPI_SERIALBUS);}
> +        WordConstExpr               // 04: DeviceSelection
> +        OptionalDevicePolarity      // 05: DevicePolarity
> +        OptionalWireMode            // 06: WireMode
> +        ',' ByteConstExpr           // 08: DataBitLength
> +        OptionalSlaveMode           // 09: SlaveMode
> +        ',' DWordConstExpr          // 11: ConnectionSpeed
> +        ',' ClockPolarityKeyword    // 13: ClockPolarity
> +        ',' ClockPhaseKeyword       // 15: ClockPhase
> +        ',' StringData              // 17: ResourceSource
> +        OptionalByteConstExpr       // 18: ResourceSourceIndex
> +        OptionalResourceType        // 19: ResourceType
> +        OptionalNameString          // 20: DescriptorName
> +        OptionalBuffer_Last         // 21: VendorData
> +        ')'                         {$$ = TrLinkChildren ($<n>3,13,$4,$5,$6,$8,$9,$11,$13,$15,$17,$18,$19,$20,$21);}
> +    | PARSEOP_SPI_SERIALBUS '('
> +        error ')'                   {$$ = AslDoError(); yyclearin;}
> +    ;
> +
> +StartDependentFnNoPriTerm
> +    : PARSEOP_STARTDEPENDENTFN_NOPRI '('    {$<n>$ = TrCreateLeafNode (PARSEOP_STARTDEPENDENTFN_NOPRI);}
> +        ')' '{'
> +        ResourceMacroList '}'       {$$ = TrLinkChildren ($<n>3,1,$6);}
> +    | PARSEOP_STARTDEPENDENTFN_NOPRI '('
> +        error ')'                   {$$ = AslDoError(); yyclearin;}
> +    ;
> +
>  StartDependentFnTerm
>     : PARSEOP_STARTDEPENDENTFN '('  {$<n>$ = TrCreateLeafNode (PARSEOP_STARTDEPENDENTFN);}
>         ByteConstExpr
> @@ -2869,11 +3183,24 @@ StartDependentFnTerm
>         error ')'                   {$$ = AslDoError(); yyclearin;}
>     ;
>
> -StartDependentFnNoPriTerm
> -    : PARSEOP_STARTDEPENDENTFN_NOPRI '('    {$<n>$ = TrCreateLeafNode (PARSEOP_STARTDEPENDENTFN_NOPRI);}
> -        ')' '{'
> -        ResourceMacroList '}'       {$$ = TrLinkChildren ($<n>3,1,$6);}
> -    | PARSEOP_STARTDEPENDENTFN_NOPRI '('
> +UartSerialBusTerm
> +    : PARSEOP_UART_SERIALBUS '('    {$<n>$ = TrCreateLeafNode (PARSEOP_UART_SERIALBUS);}
> +        DWordConstExpr              // 04: ConnectionSpeed
> +        OptionalBitsPerByte         // 05: BitsPerByte
> +        OptionalStopBits            // 06: StopBits
> +        ',' ByteConstExpr           // 08: LinesInUse
> +        OptionalEndian              // 09: Endianess
> +        OptionalParityType          // 10: Parity
> +        OptionalFlowControl         // 11: FlowControl
> +        ',' WordConstExpr           // 13: Rx BufferSize
> +        ',' WordConstExpr           // 15: Tx BufferSize
> +        ',' StringData              // 17: ResourceSource
> +        OptionalByteConstExpr       // 18: ResourceSourceIndex
> +        OptionalResourceType        // 19: ResourceType
> +        OptionalNameString          // 20: DescriptorName
> +        OptionalBuffer_Last         // 21: VendorData
> +        ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$5,$6,$8,$9,$10,$11,$13,$15,$17,$18,$19,$20,$21);}
> +    | PARSEOP_UART_SERIALBUS '('
>         error ')'                   {$$ = AslDoError(); yyclearin;}
>     ;
>
> @@ -2982,6 +3309,16 @@ AmlPackageLengthTerm
>     : Integer                       {$$ = TrUpdateNode (PARSEOP_PACKAGE_LENGTH,(ACPI_PARSE_OBJECT *) $1);}
>     ;
>
> +NameStringItem
> +    : ',' NameString                {$$ = $2;}
> +    | ',' error                     {$$ = AslDoError (); yyclearin;}
> +    ;
> +
> +TermArgItem
> +    : ',' TermArg                   {$$ = $2;}
> +    | ',' error                     {$$ = AslDoError (); yyclearin;}
> +    ;
> +
>  OptionalBusMasterKeyword
>     : ','                                       {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_MASTER);}
>     | ',' PARSEOP_BUSMASTERTYPE_MASTER          {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_MASTER);}
> @@ -3001,12 +3338,28 @@ OptionalAccessSize
>     | ',' ByteConstExpr             {$$ = $2;}
>     ;
>
> +OptionalAddressingMode
> +    : ','                           {$$ = NULL;}
> +    | ',' AddressingModeKeyword     {$$ = $2;}
> +    ;
> +
>  OptionalAddressRange
>     :                               {$$ = NULL;}
>     | ','                           {$$ = NULL;}
>     | ',' AddressKeyword            {$$ = $2;}
>     ;
>
> +OptionalBitsPerByte
> +    : ','                           {$$ = NULL;}
> +    | ',' BitsPerByteKeyword        {$$ = $2;}
> +    ;
> +
> +OptionalBuffer_Last
> +    :                               {$$ = NULL;}
> +    | ','                           {$$ = NULL;}
> +    | ',' DataBufferTerm            {$$ = $2;}
> +    ;
> +
>  OptionalByteConstExpr
>     :                               {$$ = NULL;}
>     | ','                           {$$ = NULL;}
> @@ -3018,12 +3371,32 @@ OptionalDecodeType
>     | ',' DecodeKeyword             {$$ = $2;}
>     ;
>
> +OptionalDevicePolarity
> +    : ','                           {$$ = NULL;}
> +    | ',' DevicePolarityKeyword     {$$ = $2;}
> +    ;
> +
>  OptionalDWordConstExpr
>     :                               {$$ = NULL;}
>     | ','                           {$$ = NULL;}
>     | ',' DWordConstExpr            {$$ = $2;}
>     ;
>
> +OptionalEndian
> +    : ','                           {$$ = NULL;}
> +    | ',' EndianKeyword             {$$ = $2;}
> +    ;
> +
> +OptionalFlowControl
> +    : ','                           {$$ = NULL;}
> +    | ',' FlowControlKeyword        {$$ = $2;}
> +    ;
> +
> +OptionalIoRestriction
> +    : ','                           {$$ = NULL;}
> +    | ',' IoRestrictionKeyword      {$$ = $2;}
> +    ;
> +
>  OptionalListString
>     :                               {$$ = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL, ACPI_TO_INTEGER (""));}   /* Placeholder is a NULL string */
>     | ','                           {$$ = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL, ACPI_TO_INTEGER (""));}   /* Placeholder is a NULL string */
> @@ -3067,6 +3440,11 @@ OptionalObjectTypeKeyword
>     | ',' ObjectTypeKeyword         {$$ = $2;}
>     ;
>
> +OptionalParityType
> +    : ','                           {$$ = NULL;}
> +    | ',' ParityTypeKeyword         {$$ = $2;}
> +    ;
> +
>  OptionalQWordConstExpr
>     :                               {$$ = NULL;}
>     | ','                           {$$ = NULL;}
> @@ -3078,6 +3456,12 @@ OptionalRangeType
>     | ',' RangeTypeKeyword          {$$ = $2;}
>     ;
>
> +OptionalReadWriteKeyword
> +    :                                   {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_BOTH);}
> +    | PARSEOP_READWRITETYPE_BOTH        {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_BOTH);}
> +    | PARSEOP_READWRITETYPE_READONLY    {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_READONLY);}
> +    ;
> +
>  OptionalReference
>     :                               {$$ = TrCreateLeafNode (PARSEOP_ZERO);}       /* Placeholder is a ZeroOp object */
>     | ','                           {$$ = TrCreateLeafNode (PARSEOP_ZERO);}       /* Placeholder is a ZeroOp object */
> @@ -3085,27 +3469,48 @@ OptionalReference
>     ;
>
>  OptionalResourceType_First
> -    :                               {$$ = NULL;}
> +    :                               {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
>     | ResourceTypeKeyword           {$$ = $1;}
>     ;
>
>  OptionalResourceType
> -    : ','                           {$$ = NULL;}
> +    :                               {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
> +    | ','                           {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
>     | ',' ResourceTypeKeyword       {$$ = $2;}
>     ;
>
> +OptionalReturnArg
> +    :                               {$$ = TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO), NODE_IS_NULL_RETURN);}       /* Placeholder is a ZeroOp object */
> +    | TermArg                       {$$ = $1;}
> +    ;
> +
>  OptionalSerializeRuleKeyword
>     :                               {$$ = NULL;}
>     | ','                           {$$ = NULL;}
>     | ',' SerializeRuleKeyword      {$$ = $2;}
>     ;
>
> +OptionalSlaveMode
> +    : ','                           {$$ = NULL;}
> +    | ',' SlaveModeKeyword          {$$ = $2;}
> +    ;
> +
>  OptionalShareType
>     :                               {$$ = NULL;}
>     | ','                           {$$ = NULL;}
>     | ',' ShareTypeKeyword          {$$ = $2;}
>     ;
>
> +OptionalShareType_First
> +    :                               {$$ = NULL;}
> +    | ShareTypeKeyword              {$$ = $1;}
> +    ;
> +
> +OptionalStopBits
> +    : ','                           {$$ = NULL;}
> +    | ',' StopBitsKeyword           {$$ = $2;}
> +    ;
> +
>  OptionalStringData
>     :                               {$$ = NULL;}
>     | ','                           {$$ = NULL;}
> @@ -3117,11 +3522,6 @@ OptionalTermArg
>     | TermArg                       {$$ = $1;}
>     ;
>
> -OptionalReturnArg
> -    :                               {$$ = TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO), NODE_IS_NULL_RETURN);}       /* Placeholder is a ZeroOp object */
> -    | TermArg                       {$$ = $1;}
> -    ;
> -
>  OptionalType
>     :                               {$$ = NULL;}
>     | ','                           {$$ = NULL;}
> @@ -3140,23 +3540,33 @@ OptionalTranslationType_Last
>     | ',' TranslationKeyword        {$$ = $2;}
>     ;
>
> -
> -TermArgItem
> -    : ',' TermArg                   {$$ = $2;}
> -    | ',' error                     {$$ = AslDoError (); yyclearin;}
> +OptionalWireMode
> +    : ','                           {$$ = NULL;}
> +    | ',' WireModeKeyword           {$$ = $2;}
>     ;
>
> -NameStringItem
> -    : ',' NameString                {$$ = $2;}
> -    | ',' error                     {$$ = AslDoError (); yyclearin;}
> +OptionalWordConst
> +    :                               {$$ = NULL;}
> +    | WordConst                     {$$ = $1;}
>     ;
>
> -%%
> +OptionalWordConstExpr
> +    : ','                           {$$ = NULL;}
> +    | ',' WordConstExpr             {$$ = $2;}
> +    ;
>
> +OptionalXferSize
> +    :                               {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_32, 2);}
> +    | ','                           {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_32, 2);}
> +    | ',' XferSizeKeyword           {$$ = $2;}
> +    ;
>
> -/*
> +%%
> +/******************************************************************************
> + *
>  * Local support functions
> - */
> + *
> + *****************************************************************************/
>
>  int
>  AslCompilerwrap(void)
> diff --git a/src/acpica/source/compiler/asldefine.h b/src/acpica/source/compiler/asldefine.h
> index b09beab..146ab6d 100644
> --- a/src/acpica/source/compiler/asldefine.h
> +++ b/src/acpica/source/compiler/asldefine.h
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -128,7 +128,7 @@
>  #define ASL_INVOCATION_NAME         "iasl"
>  #define ASL_CREATOR_ID              "INTL"
>
> -#define ASL_COMPLIANCE              "Supports ACPI Specification Revision 4.0a"
> +#define ASL_COMPLIANCE              "Supports ACPI Specification Revision 5.0"
>
>
>  /* Configuration constants */
> @@ -225,5 +225,25 @@
>  #define POSITIVE                    0
>
>
> +/* Helper macros for resource tag creation */
> +
> +#define RsCreateMultiBitField \
> +    RsCreateResourceField
> +
> +#define RsCreateBitField(Op, Name, ByteOffset, BitOffset) \
> +    RsCreateResourceField (Op, Name, ByteOffset, BitOffset, 1)
> +
> +#define RsCreateByteField(Op, Name, ByteOffset) \
> +    RsCreateResourceField (Op, Name, ByteOffset, 0, 8);
> +
> +#define RsCreateWordField(Op, Name, ByteOffset) \
> +    RsCreateResourceField (Op, Name, ByteOffset, 0, 16);
> +
> +#define RsCreateDwordField(Op, Name, ByteOffset) \
> +    RsCreateResourceField (Op, Name, ByteOffset, 0, 32);
> +
> +#define RsCreateQwordField(Op, Name, ByteOffset) \
> +    RsCreateResourceField (Op, Name, ByteOffset, 0, 64);
> +
>  #endif /* ASLDEFINE.H */
>
> diff --git a/src/acpica/source/compiler/aslerror.c b/src/acpica/source/compiler/aslerror.c
> index 82dc85a..c93a1a2 100644
> --- a/src/acpica/source/compiler/aslerror.c
> +++ b/src/acpica/source/compiler/aslerror.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -127,6 +127,18 @@ AeAddToErrorLog (
>     ASL_ERROR_MSG           *Enode);
>
>
> +/*******************************************************************************
> + *
> + * FUNCTION:    AeClearErrorLog
> + *
> + * PARAMETERS:  None
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Empty the error list
> + *
> + ******************************************************************************/
> +
>  void
>  AeClearErrorLog (
>     void)
> @@ -240,7 +252,7 @@ AePrintException (
>     UINT32                  SourceColumn;
>     UINT32                  ErrorColumn;
>     FILE                    *OutputFile;
> -    FILE                    *SourceFile;
> +    FILE                    *SourceFile = NULL;
>     long                    FileSize;
>     BOOLEAN                 PrematureEOF = FALSE;
>
> @@ -283,24 +295,28 @@ AePrintException (
>
>     OutputFile = Gbl_Files[FileId].Handle;
>
> -    /* Use the merged header/source file if present, otherwise use input file */
>
> -    SourceFile = Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Handle;
> -    if (!SourceFile)
> +    if (!Enode->SourceLine)
>     {
> -        SourceFile = Gbl_Files[ASL_FILE_INPUT].Handle;
> -    }
> +        /* Use the merged header/source file if present, otherwise use input file */
>
> -    if (SourceFile)
> -    {
> -        /* Determine if the error occurred at source file EOF */
> -
> -        fseek (SourceFile, 0, SEEK_END);
> -        FileSize = ftell (SourceFile);
> +        SourceFile = Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Handle;
> +        if (!SourceFile)
> +        {
> +            SourceFile = Gbl_Files[ASL_FILE_INPUT].Handle;
> +        }
>
> -        if ((long) Enode->LogicalByteOffset >= FileSize)
> +        if (SourceFile)
>         {
> -            PrematureEOF = TRUE;
> +            /* Determine if the error occurred at source file EOF */
> +
> +            fseek (SourceFile, 0, SEEK_END);
> +            FileSize = ftell (SourceFile);
> +
> +            if ((long) Enode->LogicalByteOffset >= FileSize)
> +            {
> +                PrematureEOF = TRUE;
> +            }
>         }
>     }
>
> @@ -315,50 +331,58 @@ AePrintException (
>     {
>         if (Gbl_VerboseErrors)
>         {
> -            fprintf (OutputFile, "%6s", Enode->Filename);
> +            fprintf (OutputFile, "%-8s", Enode->Filename);
>
>             if (Enode->LineNumber)
>             {
> -                fprintf (OutputFile, " %6u: ", Enode->LineNumber);
> -
> -                /*
> -                 * If not at EOF, get the corresponding source code line and
> -                 * display it. Don't attempt this if we have a premature EOF
> -                 * condition.
> -                 */
> -                if (!PrematureEOF)
> +                if (Enode->SourceLine)
> +                {
> +                    fprintf (OutputFile, " %6u: %s",
> +                        Enode->LineNumber, Enode->SourceLine);
> +                }
> +                else
>                 {
> +                    fprintf (OutputFile, " %6u: ", Enode->LineNumber);
> +
>                     /*
> -                     * Seek to the offset in the combined source file, read
> -                     * the source line, and write it to the output.
> +                     * If not at EOF, get the corresponding source code line and
> +                     * display it. Don't attempt this if we have a premature EOF
> +                     * condition.
>                      */
> -                    Actual = fseek (SourceFile, (long) Enode->LogicalByteOffset,
> -                                (int) SEEK_SET);
> -                    if (Actual)
> -                    {
> -                        fprintf (OutputFile,
> -                            "[*** iASL: Seek error on source code temp file %s ***]",
> -                            Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename);
> -                    }
> -                    else
> +                    if (!PrematureEOF)
>                     {
> -                        RActual = fread (&SourceByte, 1, 1, SourceFile);
> -                        if (!RActual)
> +                        /*
> +                         * Seek to the offset in the combined source file, read
> +                         * the source line, and write it to the output.
> +                         */
> +                        Actual = fseek (SourceFile, (long) Enode->LogicalByteOffset,
> +                                    (int) SEEK_SET);
> +                        if (Actual)
>                         {
>                             fprintf (OutputFile,
> -                                "[*** iASL: Read error on source code temp file %s ***]",
> +                                "[*** iASL: Seek error on source code temp file %s ***]",
>                                 Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename);
>                         }
> -
> -                        else while (RActual && SourceByte && (SourceByte != '\n'))
> +                        else
>                         {
> -                            fwrite (&SourceByte, 1, 1, OutputFile);
>                             RActual = fread (&SourceByte, 1, 1, SourceFile);
> +                            if (!RActual)
> +                            {
> +                                fprintf (OutputFile,
> +                                    "[*** iASL: Read error on source code temp file %s ***]",
> +                                    Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename);
> +                            }
> +
> +                            else while (RActual && SourceByte && (SourceByte != '\n'))
> +                            {
> +                                fwrite (&SourceByte, 1, 1, OutputFile);
> +                                RActual = fread (&SourceByte, 1, 1, SourceFile);
> +                            }
>                         }
>                     }
> -                }
>
> -                fprintf (OutputFile, "\n");
> +                    fprintf (OutputFile, "\n");
> +                }
>             }
>         }
>         else
> @@ -367,7 +391,8 @@ AePrintException (
>
>             if (Enode->LineNumber)
>             {
> -                fprintf (OutputFile, "(%u) : ", Enode->LineNumber);
> +                fprintf (OutputFile, "(%u) i:%6u : ",
> +                    Enode->LineNumber, Enode->LineNumber);
>             }
>         }
>     }
> @@ -391,10 +416,23 @@ AePrintException (
>
>         if (Enode->LineNumber)
>         {
> +            /* Main message: try to use string from AslMessages first */
> +
> +            if (!MainMessage)
> +            {
> +                MainMessage = "";
> +            }
> +
>             MsgLength = strlen (MainMessage);
>             if (MsgLength == 0)
>             {
> +                /* Use the secondary/extra message as main message */
> +
>                 MainMessage = Enode->Message;
> +                if (!MainMessage)
> +                {
> +                    MainMessage = "";
> +                }
>
>                 MsgLength = strlen (MainMessage);
>                 ExtraMessage = NULL;
> @@ -480,6 +518,91 @@ AePrintErrorLog (
>
>  /*******************************************************************************
>  *
> + * FUNCTION:    AslCommonError2
> + *
> + * PARAMETERS:  Level               - Seriousness (Warning/error, etc.)
> + *              MessageId           - Index into global message buffer
> + *              LineNumber          - Actual file line number
> + *              Column              - Column in current line
> + *              SourceLine          - Actual source code line
> + *              Filename            - source filename
> + *              ExtraMessage        - additional error message
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Create a new error node and add it to the error log
> + *
> + ******************************************************************************/
> +
> +void
> +AslCommonError2 (
> +    UINT8                   Level,
> +    UINT8                   MessageId,
> +    UINT32                  LineNumber,
> +    UINT32                  Column,
> +    char                    *SourceLine,
> +    char                    *Filename,
> +    char                    *ExtraMessage)
> +{
> +    char                    *MessageBuffer = NULL;
> +    char                    *LineBuffer;
> +    ASL_ERROR_MSG           *Enode;
> +
> +
> +    Enode = UtLocalCalloc (sizeof (ASL_ERROR_MSG));
> +
> +    if (ExtraMessage)
> +    {
> +        /* Allocate a buffer for the message and a new error node */
> +
> +        MessageBuffer = UtLocalCalloc (strlen (ExtraMessage) + 1);
> +
> +        /* Keep a copy of the extra message */
> +
> +        ACPI_STRCPY (MessageBuffer, ExtraMessage);
> +    }
> +
> +    LineBuffer = UtLocalCalloc (strlen (SourceLine) + 1);
> +    ACPI_STRCPY (LineBuffer, SourceLine);
> +
> +    /* Initialize the error node */
> +
> +    if (Filename)
> +    {
> +        Enode->Filename       = Filename;
> +        Enode->FilenameLength = strlen (Filename);
> +        if (Enode->FilenameLength < 6)
> +        {
> +            Enode->FilenameLength = 6;
> +        }
> +    }
> +
> +    Enode->MessageId            = MessageId;
> +    Enode->Level                = Level;
> +    Enode->LineNumber           = LineNumber;
> +    Enode->LogicalLineNumber    = LineNumber;
> +    Enode->LogicalByteOffset    = 0;
> +    Enode->Column               = Column;
> +    Enode->Message              = MessageBuffer;
> +    Enode->SourceLine           = LineBuffer;
> +
> +    /* Add the new node to the error node list */
> +
> +    AeAddToErrorLog (Enode);
> +
> +    if (Gbl_DebugFlag)
> +    {
> +        /* stderr is a file, send error to it immediately */
> +
> +        AePrintException (ASL_FILE_STDERR, Enode, NULL);
> +    }
> +
> +    Gbl_ExceptionCount[Level]++;
> +}
> +
> +
> +/*******************************************************************************
> + *
>  * FUNCTION:    AslCommonError
>  *
>  * PARAMETERS:  Level               - Seriousness (Warning/error, etc.)
> @@ -546,6 +669,7 @@ AslCommonError (
>     Enode->LogicalByteOffset    = LogicalByteOffset;
>     Enode->Column               = Column;
>     Enode->Message              = MessageBuffer;
> +    Enode->SourceLine           = NULL;
>
>     /* Add the new node to the error node list */
>
> @@ -612,7 +736,6 @@ AslError (
>         break;
>     }
>
> -
>     if (Op)
>     {
>         AslCommonError (Level, MessageId, Op->Asl.LineNumber,
> @@ -702,5 +825,3 @@ AslCompilererror (
>
>     return 0;
>  }
> -
> -
> diff --git a/src/acpica/source/compiler/aslfiles.c b/src/acpica/source/compiler/aslfiles.c
> index 8a1fcd0..ef10668 100644
> --- a/src/acpica/source/compiler/aslfiles.c
> +++ b/src/acpica/source/compiler/aslfiles.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -122,7 +122,7 @@
>
>  /* Local prototypes */
>
> -static FILE *
> +FILE *
>  FlOpenIncludeWithPrefix (
>     char                    *PrefixDir,
>     char                    *Filename);
> @@ -153,12 +153,12 @@ AslAbort (
>     void)
>  {
>
> -    AePrintErrorLog (ASL_FILE_STDOUT);
> +    AePrintErrorLog (ASL_FILE_STDERR);
>     if (Gbl_DebugFlag)
>     {
> -        /* Print error summary to the debug file */
> +        /* Print error summary to stdout also */
>
> -        AePrintErrorLog (ASL_FILE_STDERR);
> +        AePrintErrorLog (ASL_FILE_STDOUT);
>     }
>
>     exit (1);
> @@ -246,14 +246,18 @@ FlGetFileSize (
>  {
>     FILE                    *fp;
>     UINT32                  FileSize;
> +    long                    Offset;
>
>
>     fp = Gbl_Files[FileId].Handle;
> +    Offset = ftell (fp);
>
>     fseek (fp, 0, SEEK_END);
>     FileSize = (UINT32) ftell (fp);
> -    fseek (fp, 0, SEEK_SET);
>
> +    /* Restore file pointer */
> +
> +    fseek (fp, Offset, SEEK_SET);
>     return (FileSize);
>  }
>
> @@ -431,14 +435,13 @@ FlCloseFile (
>     }
>
>     Error = fclose (Gbl_Files[FileId].Handle);
> -    Gbl_Files[FileId].Handle = NULL;
> -
>     if (Error)
>     {
>         FlFileError (FileId, ASL_MSG_CLOSE);
>         AslAbort ();
>     }
>
> +    Gbl_Files[FileId].Handle = NULL;
>     return;
>  }
>
> @@ -457,11 +460,38 @@ FlCloseFile (
>
>  void
>  FlSetLineNumber (
> -    ACPI_PARSE_OBJECT       *Op)
> +    UINT32                  LineNumber)
>  {
>
> -    Gbl_CurrentLineNumber = (UINT32) Op->Asl.Value.Integer;
> -    Gbl_LogicalLineNumber = (UINT32) Op->Asl.Value.Integer;
> +    DbgPrint (ASL_PARSE_OUTPUT, "\n#line: New line number %u (old %u)\n",
> +         LineNumber, Gbl_LogicalLineNumber);
> +
> +    Gbl_CurrentLineNumber = LineNumber;
> +    Gbl_LogicalLineNumber = LineNumber;
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    FlSetFilename
> + *
> + * PARAMETERS:  Op        - Parse node for the LINE asl statement
> + *
> + * RETURN:      None.
> + *
> + * DESCRIPTION: Set the current filename
> + *
> + ******************************************************************************/
> +
> +void
> +FlSetFilename (
> +    char                    *Filename)
> +{
> +
> +    DbgPrint (ASL_PARSE_OUTPUT, "\n#line: New filename %s (old %s)\n",
> +         Filename, Gbl_Files[ASL_FILE_INPUT].Filename);
> +
> +    Gbl_Files[ASL_FILE_INPUT].Filename = Filename;
>  }
>
>
> @@ -546,7 +576,7 @@ FlAddIncludeDirectory (
>  *
>  ******************************************************************************/
>
> -static FILE *
> +FILE *
>  FlOpenIncludeWithPrefix (
>     char                    *PrefixDir,
>     char                    *Filename)
> @@ -617,7 +647,7 @@ FlOpenIncludeFile (
>      * Flush out the "include ()" statement on this line, start
>      * the actual include file on the next line
>      */
> -    ResetCurrentLineBuffer ();
> +    AslResetCurrentLineBuffer ();
>     FlPrintFile (ASL_FILE_SOURCE_OUTPUT, "\n");
>     Gbl_CurrentLineOffset++;
>
> @@ -808,6 +838,13 @@ FlOpenMiscOutputFiles (
>         Gbl_Files[ASL_FILE_DEBUG_OUTPUT].Handle =
>             freopen (Filename, "w+t", stderr);
>
> +        if (!Gbl_Files[ASL_FILE_DEBUG_OUTPUT].Handle)
> +        {
> +            AslCommonError (ASL_ERROR, ASL_MSG_DEBUG_FILENAME,
> +                0, 0, 0, 0, NULL, NULL);
> +            return (AE_ERROR);
> +        }
> +
>         AslCompilerSignon (ASL_FILE_DEBUG_OUTPUT);
>         AslCompilerFileHeader (ASL_FILE_DEBUG_OUTPUT);
>     }
> @@ -832,12 +869,29 @@ FlOpenMiscOutputFiles (
>         AslCompilerFileHeader (ASL_FILE_LISTING_OUTPUT);
>     }
>
> +    /* Create the preprocessor output file if preprocessor enabled */
> +
> +    if (Gbl_PreprocessFlag)
> +    {
> +        Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_PREPROCESSOR);
> +        if (!Filename)
> +        {
> +            AslCommonError (ASL_ERROR, ASL_MSG_PREPROCESSOR_FILENAME,
> +                0, 0, 0, 0, NULL, NULL);
> +            return (AE_ERROR);
> +        }
> +
> +        FlOpenFile (ASL_FILE_PREPROCESSOR, Filename, "w+b");
> +    }
> +
> +    /* All done for data table compiler */
> +
>     if (Gbl_FileType == ASL_INPUT_TYPE_ASCII_DATA)
>     {
>         return (AE_OK);
>     }
>
> -    /* Create/Open a combined source output file */
> +   /* Create/Open a combined source output file */
>
>     Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_SOURCE);
>     if (!Filename)
> @@ -854,6 +908,10 @@ FlOpenMiscOutputFiles (
>      */
>     FlOpenFile (ASL_FILE_SOURCE_OUTPUT, Filename, "w+b");
>
> +/*
> +// TBD: TEMP
> +//    AslCompilerin = Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Handle;
> +*/
>     /* Create/Open a assembly code source output file if asked */
>
>     if (Gbl_AsmOutputFlag)
> diff --git a/src/acpica/source/compiler/aslfold.c b/src/acpica/source/compiler/aslfold.c
> index d31c173..dffcc57 100644
> --- a/src/acpica/source/compiler/aslfold.c
> +++ b/src/acpica/source/compiler/aslfold.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/compiler/aslglobal.h b/src/acpica/source/compiler/aslglobal.h
> index f36e46a..5207f3b 100644
> --- a/src/acpica/source/compiler/aslglobal.h
> +++ b/src/acpica/source/compiler/aslglobal.h
> @@ -10,7 +10,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -142,10 +142,11 @@ extern int                          yydebug;
>  extern FILE                         *AslCompilerin;
>  extern int                          AslCompilerdebug;
>  extern int                          DtParserdebug;
> +extern int                          PrParserdebug;
>  extern const ASL_MAPPING_ENTRY      AslKeywordMapping[];
>  extern char                         *AslCompilertext;
>
> -#define ASL_LINE_BUFFER_SIZE        1024
> +#define ASL_LINE_BUFFER_SIZE        (4096 * 4) /* 16K */
>  #define ASL_MSG_BUFFER_SIZE         4096
>  #define HEX_TABLE_LINE_SIZE         8
>  #define HEX_LISTING_LINE_SIZE       8
> @@ -155,27 +156,29 @@ extern char                         *AslCompilertext;
>
>  ASL_EXTERN char                     Gbl_CurrentLineBuffer[ASL_LINE_BUFFER_SIZE];
>  ASL_EXTERN UINT32                   ASL_INIT_GLOBAL (Gbl_CurrentColumn, 0);
> +ASL_EXTERN UINT32                   ASL_INIT_GLOBAL (Gbl_PreviousLineNumber, 0);
>  ASL_EXTERN UINT32                   ASL_INIT_GLOBAL (Gbl_CurrentLineNumber, 1);
>  ASL_EXTERN UINT32                   ASL_INIT_GLOBAL (Gbl_LogicalLineNumber, 1);
>  ASL_EXTERN UINT32                   ASL_INIT_GLOBAL (Gbl_CurrentLineOffset, 0);
>  ASL_EXTERN char                     ASL_INIT_GLOBAL (*Gbl_LineBufPtr, Gbl_CurrentLineBuffer);
>
> -
>  /* Exception reporting */
>
>  ASL_EXTERN ASL_ERROR_MSG            ASL_INIT_GLOBAL (*Gbl_ErrorLog,NULL);
>  ASL_EXTERN ASL_ERROR_MSG            ASL_INIT_GLOBAL (*Gbl_NextError,NULL);
>
> -
>  /* Option flags */
>
>  ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_DoCompile, TRUE);
>  ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_DoSignon, TRUE);
> +ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_PreprocessOnly, FALSE);
> +ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_PreprocessFlag, TRUE);
>  ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_DisassembleAll, FALSE);
>
>  ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_Acpi2, FALSE);
>  ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_UseDefaultAmlFilename, TRUE);
>  ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_NsOutputFlag, FALSE);
> +ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_PreprocessorOutputFlag, FALSE);
>  ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_DebugFlag, FALSE);
>  ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_AsmOutputFlag, FALSE);
>  ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_C_OutputFlag, FALSE);
> @@ -189,6 +192,7 @@ ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_CompileTimesFlag, FALSE
>  ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_FoldConstants, TRUE);
>  ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_VerboseErrors, TRUE);
>  ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_NoErrors, FALSE);
> +ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_WarningsAsErrors, FALSE);
>  ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_NoResourceChecking, FALSE);
>  ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_DisasmFlag, FALSE);
>  ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_GetAllTables, FALSE);
> @@ -200,6 +204,7 @@ ASL_EXTERN UINT8                    ASL_INIT_GLOBAL (Gbl_WarningLevel, ASL_WARNI
>  ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_UseOriginalCompilerId, FALSE);
>  ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_VerboseTemplates, FALSE);
>  ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_DoTemplates, FALSE);
> +ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_CompileGeneric, FALSE);
>
>
>  #define HEX_OUTPUT_NONE         0
> @@ -274,7 +279,7 @@ extern char                         AslHexLookup[];
>
>  /* Event timing */
>
> -#define ASL_NUM_EVENTS              19
> +#define ASL_NUM_EVENTS              20
>  ASL_EXTERN ASL_EVENT_INFO           AslGbl_Events[ASL_NUM_EVENTS];
>  ASL_EXTERN UINT8                    AslGbl_NextEvent;
>  ASL_EXTERN UINT8                    AslGbl_NamespaceEvent;
> diff --git a/src/acpica/source/compiler/asllength.c b/src/acpica/source/compiler/asllength.c
> index c330626..7b13669 100644
> --- a/src/acpica/source/compiler/asllength.c
> +++ b/src/acpica/source/compiler/asllength.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/compiler/asllisting.c b/src/acpica/source/compiler/asllisting.c
> index f46e2cd..7cb00d1 100644
> --- a/src/acpica/source/compiler/asllisting.c
> +++ b/src/acpica/source/compiler/asllisting.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -922,9 +922,9 @@ LsFinishSourceListing (
>
>         FlPrintFile (FileId, "\n\nSummary of errors and warnings\n\n");
>         AePrintErrorLog (FileId);
> -        FlPrintFile (FileId, "\n\n");
> +        FlPrintFile (FileId, "\n");
>         UtDisplaySummary (FileId);
> -        FlPrintFile (FileId, "\n\n");
> +        FlPrintFile (FileId, "\n");
>     }
>  }
>
> @@ -1381,6 +1381,7 @@ LsDoHexOutputC (
>     /* Get AML size, seek back to start */
>
>     AmlFileSize = FlGetFileSize (ASL_FILE_AML_OUTPUT);
> +    FlSeekFile (ASL_FILE_AML_OUTPUT, 0);
>
>     FlPrintFile (ASL_FILE_HEX_OUTPUT, " * C source code output\n");
>     FlPrintFile (ASL_FILE_HEX_OUTPUT, " * AML code block contains 0x%X bytes\n *\n */\n",
> @@ -1437,7 +1438,6 @@ LsDoHexOutputC (
>     }
>
>     FlPrintFile (ASL_FILE_HEX_OUTPUT, "};\n");
> -    FlCloseFile (ASL_FILE_HEX_OUTPUT);
>  }
>
>
> @@ -1469,6 +1469,7 @@ LsDoHexOutputAsl (
>     /* Get AML size, seek back to start */
>
>     AmlFileSize = FlGetFileSize (ASL_FILE_AML_OUTPUT);
> +    FlSeekFile (ASL_FILE_AML_OUTPUT, 0);
>
>     FlPrintFile (ASL_FILE_HEX_OUTPUT, " * ASL source code output\n");
>     FlPrintFile (ASL_FILE_HEX_OUTPUT, " * AML code block contains 0x%X bytes\n *\n */\n",
> @@ -1525,7 +1526,6 @@ LsDoHexOutputAsl (
>     }
>
>     FlPrintFile (ASL_FILE_HEX_OUTPUT, "    })\n");
> -    FlCloseFile (ASL_FILE_HEX_OUTPUT);
>  }
>
>
> @@ -1557,6 +1557,7 @@ LsDoHexOutputAsm (
>     /* Get AML size, seek back to start */
>
>     AmlFileSize = FlGetFileSize (ASL_FILE_AML_OUTPUT);
> +    FlSeekFile (ASL_FILE_AML_OUTPUT, 0);
>
>     FlPrintFile (ASL_FILE_HEX_OUTPUT, "; Assembly code source output\n");
>     FlPrintFile (ASL_FILE_HEX_OUTPUT, "; AML code block contains 0x%X bytes\n;\n",
> @@ -1608,7 +1609,6 @@ LsDoHexOutputAsm (
>     }
>
>     FlPrintFile (ASL_FILE_HEX_OUTPUT, "\n");
> -    FlCloseFile (ASL_FILE_HEX_OUTPUT);
>  }
>
>
> diff --git a/src/acpica/source/compiler/aslload.c b/src/acpica/source/compiler/aslload.c
> index 4a8eefd..8bac44a 100644
> --- a/src/acpica/source/compiler/aslload.c
> +++ b/src/acpica/source/compiler/aslload.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -261,7 +261,7 @@ LdLoadFieldElements (
>         {
>         case AML_INT_RESERVEDFIELD_OP:
>         case AML_INT_ACCESSFIELD_OP:
> -
> +        case AML_INT_CONNECTION_OP:
>             break;
>
>         default:
> @@ -296,8 +296,10 @@ LdLoadFieldElements (
>             }
>             break;
>         }
> +
>         Child = Child->Asl.Next;
>     }
> +
>     return (AE_OK);
>  }
>
> @@ -362,7 +364,6 @@ LdLoadResourceElements (
>     InitializerOp = ASL_GET_CHILD_NODE (Op);
>     while (InitializerOp)
>     {
> -
>         if (InitializerOp->Asl.ExternalName)
>         {
>             Status = AcpiNsLookup (WalkState->ScopeInfo,
> @@ -377,20 +378,15 @@ LdLoadResourceElements (
>             }
>
>             /*
> -             * Store the field offset in the namespace node so it
> -             * can be used when the field is referenced
> +             * Store the field offset and length in the namespace node
> +             * so it can be used when the field is referenced
>              */
> -            Node->Value = (UINT32) InitializerOp->Asl.Value.Integer;
> +            Node->Value = InitializerOp->Asl.Value.Tag.BitOffset;
> +            Node->Length = InitializerOp->Asl.Value.Tag.BitLength;
>             InitializerOp->Asl.Node = Node;
>             Node->Op = InitializerOp;
> -
> -            /* Pass thru the field type (Bitfield or Bytefield) */
> -
> -            if (InitializerOp->Asl.CompileFlags & NODE_IS_BIT_OFFSET)
> -            {
> -                Node->Flags |= ANOBJ_IS_BIT_OFFSET;
> -            }
>         }
> +
>         InitializerOp = ASL_GET_PEER_NODE (InitializerOp);
>     }
>
> diff --git a/src/acpica/source/compiler/asllookup.c b/src/acpica/source/compiler/asllookup.c
> index 0f62b94..0d92c91 100644
> --- a/src/acpica/source/compiler/asllookup.c
> +++ b/src/acpica/source/compiler/asllookup.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -894,7 +894,10 @@ LkNamespaceLocateBegin (
>     ACPI_PARSE_OBJECT       *OwningOp;
>     ACPI_PARSE_OBJECT       *SpaceIdOp;
>     UINT32                  MinimumLength;
> -    UINT32                  Temp;
> +    UINT32                  Offset;
> +    UINT32                  FieldBitLength;
> +    UINT32                  TagBitLength;
> +    UINT8                   Message = 0;
>     const ACPI_OPCODE_INFO  *OpInfo;
>     UINT32                  Flags;
>
> @@ -1098,74 +1101,106 @@ LkNamespaceLocateBegin (
>     /* 2) Check for a reference to a resource descriptor */
>
>     if ((Node->Type == ACPI_TYPE_LOCAL_RESOURCE_FIELD) ||
> -             (Node->Type == ACPI_TYPE_LOCAL_RESOURCE))
> +        (Node->Type == ACPI_TYPE_LOCAL_RESOURCE))
>     {
>         /*
> -         * This was a reference to a field within a resource descriptor.  Extract
> -         * the associated field offset (either a bit or byte offset depending on
> -         * the field type) and change the named reference into an integer for
> -         * AML code generation
> +         * This was a reference to a field within a resource descriptor.
> +         * Extract the associated field offset (either a bit or byte
> +         * offset depending on the field type) and change the named
> +         * reference into an integer for AML code generation
>          */
> -        Temp = Node->Value;
> -        if (Node->Flags & ANOBJ_IS_BIT_OFFSET)
> -        {
> -            Op->Asl.CompileFlags |= NODE_IS_BIT_OFFSET;
> -        }
> -
> -        /* Perform BitOffset <--> ByteOffset conversion if necessary */
> +        Offset = Node->Value;
> +        TagBitLength = Node->Length;
>
> +        /*
> +         * If a field is being created, generate the length (in bits) of
> +         * the field. Note: Opcodes other than CreateXxxField and Index
> +         * can come through here. For other opcodes, we just need to
> +         * convert the resource tag reference to an integer offset.
> +         */
>         switch (Op->Asl.Parent->Asl.AmlOpcode)
>         {
> -        case AML_CREATE_FIELD_OP:
> +        case AML_CREATE_FIELD_OP: /* Variable "Length" field, in bits */
> +            /*
> +             * We know the length operand is an integer constant because
> +             * we know that it contains a reference to a resource
> +             * descriptor tag.
> +             */
> +            FieldBitLength = (UINT32) Op->Asl.Next->Asl.Value.Integer;
> +            break;
>
> -            /* We allow a Byte offset to Bit Offset conversion for this op */
> +        case AML_CREATE_BIT_FIELD_OP:
> +            FieldBitLength = 1;
> +            break;
>
> -            if (!(Op->Asl.CompileFlags & NODE_IS_BIT_OFFSET))
> -            {
> -                /* Simply multiply byte offset times 8 to get bit offset */
> +        case AML_CREATE_BYTE_FIELD_OP:
> +        case AML_INDEX_OP:
> +            FieldBitLength = 8;
> +            break;
>
> -                Temp = ACPI_MUL_8 (Temp);
> -            }
> +        case AML_CREATE_WORD_FIELD_OP:
> +            FieldBitLength = 16;
>             break;
>
> +        case AML_CREATE_DWORD_FIELD_OP:
> +            FieldBitLength = 32;
> +            break;
>
> -        case AML_CREATE_BIT_FIELD_OP:
> +        case AML_CREATE_QWORD_FIELD_OP:
> +            FieldBitLength = 64;
> +            break;
> +
> +        default:
> +            FieldBitLength = 0;
> +            break;
> +        }
>
> -            /* This op requires a Bit Offset */
> +        /* Check the field length against the length of the resource tag */
>
> -            if (!(Op->Asl.CompileFlags & NODE_IS_BIT_OFFSET))
> +        if (FieldBitLength)
> +        {
> +            if (TagBitLength < FieldBitLength)
>             {
> -                AslError (ASL_ERROR, ASL_MSG_BYTES_TO_BITS, Op, NULL);
> +                Message = ASL_MSG_TAG_SMALLER;
>             }
> -            break;
> +            else if (TagBitLength > FieldBitLength)
> +            {
> +                Message = ASL_MSG_TAG_LARGER;
> +            }
> +
> +            if (Message)
> +            {
> +                sprintf (MsgBuffer, "Tag: %u bit%s, Field: %u bit%s",
> +                    TagBitLength, (TagBitLength > 1) ? "s" : "",
> +                    FieldBitLength, (FieldBitLength > 1) ? "s" : "");
>
> +                AslError (ASL_WARNING, Message, Op, MsgBuffer);
> +            }
> +        }
>
> +        /* Convert the BitOffset to a ByteOffset for certain opcodes */
> +
> +        switch (Op->Asl.Parent->Asl.AmlOpcode)
> +        {
>         case AML_CREATE_BYTE_FIELD_OP:
>         case AML_CREATE_WORD_FIELD_OP:
>         case AML_CREATE_DWORD_FIELD_OP:
>         case AML_CREATE_QWORD_FIELD_OP:
>         case AML_INDEX_OP:
>
> -            /* These Ops require Byte offsets */
> -
> -            if (Op->Asl.CompileFlags & NODE_IS_BIT_OFFSET)
> -            {
> -                AslError (ASL_ERROR, ASL_MSG_BITS_TO_BYTES, Op, NULL);
> -            }
> +            Offset = ACPI_DIV_8 (Offset);
>             break;
>
> -
>         default:
> -            /* Nothing to do for other opcodes */
>             break;
>         }
>
>         /* Now convert this node to an integer whose value is the field offset */
>
> -        Op->Asl.AmlLength       = 0;
> -        Op->Asl.ParseOpcode     = PARSEOP_INTEGER;
> -        Op->Asl.Value.Integer   = (UINT64) Temp;
> -        Op->Asl.CompileFlags   |= NODE_IS_RESOURCE_FIELD;
> +        Op->Asl.AmlLength = 0;
> +        Op->Asl.ParseOpcode = PARSEOP_INTEGER;
> +        Op->Asl.Value.Integer = (UINT64) Offset;
> +        Op->Asl.CompileFlags |= NODE_IS_RESOURCE_FIELD;
>
>         OpcGenerateAmlOpcode (Op);
>     }
> @@ -1325,6 +1360,7 @@ LkNamespaceLocateBegin (
>             {
>             case ACPI_ADR_SPACE_EC:
>             case ACPI_ADR_SPACE_CMOS:
> +            case ACPI_ADR_SPACE_GPIO:
>
>                 if ((UINT8) Op->Asl.Parent->Asl.Value.Integer != AML_FIELD_ACCESS_BYTE)
>                 {
> @@ -1334,6 +1370,7 @@ LkNamespaceLocateBegin (
>
>             case ACPI_ADR_SPACE_SMBUS:
>             case ACPI_ADR_SPACE_IPMI:
> +            case ACPI_ADR_SPACE_GSBUS:
>
>                 if ((UINT8) Op->Asl.Parent->Asl.Value.Integer != AML_FIELD_ACCESS_BUFFER)
>                 {
> diff --git a/src/acpica/source/compiler/aslmain.c b/src/acpica/source/compiler/aslmain.c
> index 69e5c4a..285d765 100644
> --- a/src/acpica/source/compiler/aslmain.c
> +++ b/src/acpica/source/compiler/aslmain.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -168,7 +168,7 @@ AslDoResponseFile (
>
>
>  #define ASL_TOKEN_SEPARATORS    " \t\n"
> -#define ASL_SUPPORTED_OPTIONS   "@:2b:c:d^e:fgh^i^I:l^no:p:r:s:t:T: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"
>
>
>  /*******************************************************************************
> @@ -192,6 +192,12 @@ Options (
>     ACPI_OPTION ("-@ <file>",       "Specify command file");
>     ACPI_OPTION ("-I <dir>",        "Specify additional include directory");
>
> +    printf ("\nPreprocessor:\n");
> +    ACPI_OPTION ("-D <symbol>",     "Define symbol for preprocessor use");
> +    ACPI_OPTION ("-li",             "Create preprocessed output file (*.i)");
> +    ACPI_OPTION ("-P",              "Preprocess only and create preprocessor output file (*.i)");
> +    ACPI_OPTION ("-Pn",             "Disable preprocessor");
> +
>     printf ("\nGeneral Output:\n");
>     ACPI_OPTION ("-p <prefix>",     "Specify path/filename prefix for all output files");
>     ACPI_OPTION ("-va",             "Disable all errors and warnings (summary only)");
> @@ -199,12 +205,13 @@ Options (
>     ACPI_OPTION ("-vo",             "Enable optimization comments");
>     ACPI_OPTION ("-vr",             "Disable remarks");
>     ACPI_OPTION ("-vs",             "Disable signon");
> -    ACPI_OPTION ("-w <1|2|3>",      "Set warning reporting level");
> +    ACPI_OPTION ("-w1 -w2 -w3",     "Set warning reporting level");
> +    ACPI_OPTION ("-we",             "Report warnings as errors");
>
>     printf ("\nAML Output Files:\n");
> -    ACPI_OPTION ("-s <a|c>",        "Create AML in assembler or C source file (*.asm or *.c)");
> -    ACPI_OPTION ("-i <a|c>",        "Create assembler or C include file (*.inc or *.h)");
> -    ACPI_OPTION ("-t <a|c|s>",      "Create AML in assembler, C, or ASL hex table (*.hex)");
> +    ACPI_OPTION ("-sa -sc",         "Create AML in assembler or C source file (*.asm or *.c)");
> +    ACPI_OPTION ("-ia -ic",         "Create assembler or C include file (*.inc or *.h)");
> +    ACPI_OPTION ("-ta -tc -ts",     "Create AML in assembler, C, or ASL hex table (*.hex)");
>
>     printf ("\nAML Code Generation:\n");
>     ACPI_OPTION ("-oa",             "Disable all optimizations (compatibility mode)");
> @@ -220,6 +227,7 @@ Options (
>     ACPI_OPTION ("-ls",             "Create combined source file (expanded includes) (*.src)");
>
>     printf ("\nACPI Data Tables:\n");
> +    ACPI_OPTION ("-G",              "Compile custom table containing generic operators");
>     ACPI_OPTION ("-T <sig>|ALL|*",  "Create table template file(s) for <Sig>");
>     ACPI_OPTION ("-vt",             "Create verbose templates (full disassembly)");
>
> @@ -229,6 +237,7 @@ Options (
>     ACPI_OPTION ("-dc [file]",      "Disassemble AML and immediately compile it");
>     ACPI_OPTION ("",                "(Obtain DSDT from current system if no input file)");
>     ACPI_OPTION ("-e  [f1,f2]",     "Include ACPI table(s) for external symbol resolution");
> +    ACPI_OPTION ("-m",              "Do not translate Buffers to Resource Templates");
>     ACPI_OPTION ("-2",              "Emit ACPI 2.0 compatible ASL code");
>     ACPI_OPTION ("-g",              "Get ACPI tables and write to files (*.dat)");
>
> @@ -269,12 +278,12 @@ HelpMessage (
>     Options ();
>
>     printf ("\nCompiler/Disassembler Debug Options:\n");
> -    ACPI_OPTION ("-b<p|t|b>",       "Create compiler debug/trace file (*.txt)");
> +    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 ("-x <level>",      "Set debug level for trace output");
>     ACPI_OPTION ("-z",              "Do not insert new compiler ID for DataTables");
>  }
>
> @@ -475,34 +484,34 @@ AslDoOptions (
>         if (IsResponseFile)
>         {
>             printf ("Nested command files are not supported\n");
> -            return -1;
> +            return (-1);
>         }
>
>         if (AslDoResponseFile (AcpiGbl_Optarg))
>         {
> -            return -1;
> +            return (-1);
>         }
>         break;
>
>
> -    case '2':
> -
> +    case '2':   /* ACPI 2.0 compatibility mode */
>         Gbl_Acpi2 = TRUE;
>         break;
>
>
> -    case 'b':
> -
> +    case 'b':   /* Debug output options */
>         switch (AcpiGbl_Optarg[0])
>         {
>         case 'b':
>             AslCompilerdebug = 1; /* same as yydebug */
>             DtParserdebug = 1;
> +            PrParserdebug = 1;
>             break;
>
>         case 'p':
>             AslCompilerdebug = 1; /* same as yydebug */
>             DtParserdebug = 1;
> +            PrParserdebug = 1;
>             break;
>
>         case 't':
> @@ -533,7 +542,7 @@ AslDoOptions (
>         break;
>
>
> -    case 'd':
> +    case 'd':   /* Disassembler */
>         switch (AcpiGbl_Optarg[0])
>         {
>         case '^':
> @@ -557,7 +566,12 @@ AslDoOptions (
>         break;
>
>
> -    case 'e':
> +    case 'D':   /* Define a symbol */
> +        PrAddDefine (AcpiGbl_Optarg, NULL, TRUE);
> +        break;
> +
> +
> +    case 'e':   /* External files for disassembler */
>         Status = AcpiDmAddToExternalFileList (AcpiGbl_Optarg);
>         if (ACPI_FAILURE (Status))
>         {
> @@ -567,17 +581,17 @@ AslDoOptions (
>         break;
>
>
> -    case 'f':
> -
> -        /* Ignore errors and force creation of aml file */
> -
> +    case 'f':   /* Ignore errors and force creation of aml file */
>         Gbl_IgnoreErrors = TRUE;
>         break;
>
>
> -    case 'g':
> +    case 'G':
> +        Gbl_CompileGeneric = TRUE;
> +        break;
> +
>
> -        /* Get all ACPI tables */
> +    case 'g':   /* Get all ACPI tables */
>
>         Gbl_GetAllTables = TRUE;
>         Gbl_DoCompile = FALSE;
> @@ -585,7 +599,6 @@ AslDoOptions (
>
>
>     case 'h':
> -
>         switch (AcpiGbl_Optarg[0])
>         {
>         case '^':
> @@ -612,14 +625,12 @@ AslDoOptions (
>         }
>
>
> -    case 'I': /* Add an include file search directory */
> -
> +    case 'I':   /* Add an include file search directory */
>         FlAddIncludeDirectory (AcpiGbl_Optarg);
>         break;
>
>
> -    case 'i':
> -
> +    case 'i':   /* Output AML as an include file */
>         switch (AcpiGbl_Optarg[0])
>         {
>         case 'a':
> @@ -637,14 +648,13 @@ AslDoOptions (
>             break;
>
>         default:
> -            printf ("Unknown option: -s%s\n", AcpiGbl_Optarg);
> +            printf ("Unknown option: -i%s\n", AcpiGbl_Optarg);
>             return (-1);
>         }
>         break;
>
>
> -    case 'l':
> -
> +    case 'l':   /* Listing files */
>         switch (AcpiGbl_Optarg[0])
>         {
>         case '^':
> @@ -653,6 +663,12 @@ AslDoOptions (
>             Gbl_ListingFlag = TRUE;
>             break;
>
> +        case 'i':
> +            /* Produce preprocessor output file */
> +
> +            Gbl_PreprocessorOutputFlag = TRUE;
> +            break;
> +
>         case 'n':
>             /* Produce namespace file */
>
> @@ -672,8 +688,17 @@ AslDoOptions (
>         break;
>
>
> -    case 'o':
> +    case 'm':   /* Do not convert buffers to resource descriptors */
> +        AcpiGbl_NoResourceDisassembly = TRUE;
> +        break;
> +
>
> +    case 'n':   /* Parse only */
> +        Gbl_ParseOnlyFlag = TRUE;
> +        break;
> +
> +
> +    case 'o':   /* Control compiler AML optimizations */
>         switch (AcpiGbl_Optarg[0])
>         {
>         case 'a':
> @@ -720,30 +745,37 @@ AslDoOptions (
>         break;
>
>
> -    case 'n':
> +    case 'P':   /* Preprocessor options */
> +        switch (AcpiGbl_Optarg[0])
> +        {
> +        case '^':   /* Proprocess only, emit (.i) file */
> +            Gbl_PreprocessOnly = TRUE;
> +            Gbl_PreprocessorOutputFlag = TRUE;
> +            break;
>
> -        /* Parse only */
> +        case 'n':   /* Disable preprocessor */
> +            Gbl_PreprocessFlag = FALSE;
> +            break;
>
> -        Gbl_ParseOnlyFlag = TRUE;
> +        default:
> +            printf ("Unknown option: -P%s\n", AcpiGbl_Optarg);
> +            return (-1);
> +        }
>         break;
>
>
> -    case 'p':
> -
> -        /* Override default AML output filename */
> -
> +    case 'p':   /* Override default AML output filename */
>         Gbl_OutputFilenamePrefix = AcpiGbl_Optarg;
>         Gbl_UseDefaultAmlFilename = FALSE;
>         break;
>
>
> -    case 'r':
> +    case 'r':   /* Override revision found in table header */
>         Gbl_RevisionOverride = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0);
>         break;
>
>
> -    case 's':
> -
> +    case 's':   /* Create AML in a source code file */
>         switch (AcpiGbl_Optarg[0])
>         {
>         case 'a':
> @@ -767,10 +799,7 @@ AslDoOptions (
>         break;
>
>
> -    case 't':
> -
> -        /* Produce hex table output file */
> -
> +    case 't':   /* Produce hex table output file */
>         switch (AcpiGbl_Optarg[0])
>         {
>         case 'a':
> @@ -792,14 +821,13 @@ AslDoOptions (
>         break;
>
>
> -    case 'T':
> +    case 'T':   /* Create a ACPI table template file */
>         Gbl_DoTemplates = TRUE;
>         Gbl_TemplateSignature = AcpiGbl_Optarg;
>         break;
>
>
> -    case 'v':
> -
> +    case 'v':   /* Verbosity settings */
>         switch (AcpiGbl_Optarg[0])
>         {
>         case 'a':
> @@ -838,7 +866,6 @@ AslDoOptions (
>
>
>     case 'w': /* Set warning levels */
> -
>         switch (AcpiGbl_Optarg[0])
>         {
>         case '1':
> @@ -853,6 +880,10 @@ AslDoOptions (
>             Gbl_WarningLevel = ASL_WARNING3;
>             break;
>
> +        case 'e':
> +            Gbl_WarningsAsErrors = TRUE;
> +            break;
> +
>         default:
>             printf ("Unknown option: -w%s\n", AcpiGbl_Optarg);
>             return (-1);
> @@ -860,20 +891,17 @@ AslDoOptions (
>         break;
>
>
> -    case 'x':
> -
> +    case 'x':   /* Set debug print output level */
>         AcpiDbgLevel = strtoul (AcpiGbl_Optarg, NULL, 16);
>         break;
>
>
>     case 'z':
> -
>         Gbl_UseOriginalCompilerId = TRUE;
>         break;
>
>
>     default:
> -
>         return (-1);
>     }
>
> @@ -938,6 +966,10 @@ AslCommandLine (
>     if (Gbl_DoSignon)
>     {
>         printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME));
> +        if (Gbl_IgnoreErrors)
> +        {
> +            printf ("Ignoring all errors, forcing AML file generation\n\n");
> +        }
>     }
>
>     /* Abort if anything went wrong on the command line */
> @@ -986,6 +1018,7 @@ main (
>     /* Init and command line */
>
>     AslInitialize ();
> +    PrInitializePreprocessor ();
>     Index1 = Index2 = AslCommandLine (argc, argv);
>
>     /* Options that have no additional parameters or pathnames */
> diff --git a/src/acpica/source/compiler/aslmap.c b/src/acpica/source/compiler/aslmap.c
> index 6e2a7e8..498ca42 100644
> --- a/src/acpica/source/compiler/aslmap.c
> +++ b/src/acpica/source/compiler/aslmap.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -198,13 +198,16 @@ const ASL_MAPPING_ENTRY     AslKeywordMapping [] =
>
>
>  /* ACCESSAS */                  OP_TABLE_ENTRY (AML_INT_ACCESSFIELD_OP,     0,                              0,                  0),
> -/* ACCESSATTRIB_BLOCK */        OP_TABLE_ENTRY (AML_BYTE_OP,                AML_FIELD_ATTRIB_SMB_BLOCK,     0,                  0),
> -/* ACCESSATTRIB_BLOCK_CALL */   OP_TABLE_ENTRY (AML_BYTE_OP,                AML_FIELD_ATTRIB_SMB_BLOCK_CALL,0,                  0),
> -/* ACCESSATTRIB_BYTE */         OP_TABLE_ENTRY (AML_BYTE_OP,                AML_FIELD_ATTRIB_SMB_BYTE,      0,                  0),
> -/* ACCESSATTRIB_WORD_CALL */    OP_TABLE_ENTRY (AML_BYTE_OP,                AML_FIELD_ATTRIB_SMB_WORD_CALL, 0,                  0),
> -/* ACCESSATTRIB_QUICK */        OP_TABLE_ENTRY (AML_BYTE_OP,                AML_FIELD_ATTRIB_SMB_QUICK,     0,                  0),
> -/* ACCESSATTRIB_SND_RCV */      OP_TABLE_ENTRY (AML_BYTE_OP,                AML_FIELD_ATTRIB_SMB_SEND_RCV,  0,                  0),
> -/* ACCESSATTRIB_WORD */         OP_TABLE_ENTRY (AML_BYTE_OP,                AML_FIELD_ATTRIB_SMB_WORD,      0,                  0),
> +/* ACCESSATTRIB_BLOCK */        OP_TABLE_ENTRY (AML_BYTE_OP,                AML_FIELD_ATTRIB_BLOCK,         0,                  0),
> +/* ACCESSATTRIB_BLOCK_CALL */   OP_TABLE_ENTRY (AML_BYTE_OP,                AML_FIELD_ATTRIB_BLOCK_CALL,    0,                  0),
> +/* ACCESSATTRIB_BYTE */         OP_TABLE_ENTRY (AML_BYTE_OP,                AML_FIELD_ATTRIB_BYTE,          0,                  0),
> +/* ACCESSATTRIB_MULTIBYTE */    OP_TABLE_ENTRY (AML_BYTE_OP,                AML_FIELD_ATTRIB_MULTIBYTE,     0,                  0),
> +/* ACCESSATTRIB_QUICK */        OP_TABLE_ENTRY (AML_BYTE_OP,                AML_FIELD_ATTRIB_QUICK,         0,                  0),
> +/* ACCESSATTRIB_RAW_BYTES */    OP_TABLE_ENTRY (AML_BYTE_OP,                AML_FIELD_ATTRIB_RAW_BYTES,     0,                  0),
> +/* ACCESSATTRIB_RAW_PROCESS */  OP_TABLE_ENTRY (AML_BYTE_OP,                AML_FIELD_ATTRIB_RAW_PROCESS,   0,                  0),
> +/* ACCESSATTRIB_SND_RCV */      OP_TABLE_ENTRY (AML_BYTE_OP,                AML_FIELD_ATTRIB_SEND_RCV,      0,                  0),
> +/* ACCESSATTRIB_WORD */         OP_TABLE_ENTRY (AML_BYTE_OP,                AML_FIELD_ATTRIB_WORD,          0,                  0),
> +/* ACCESSATTRIB_WORD_CALL */    OP_TABLE_ENTRY (AML_BYTE_OP,                AML_FIELD_ATTRIB_WORD_CALL,     0,                  0),
>  /* ACCESSTYPE_ANY */            OP_TABLE_ENTRY (AML_BYTE_OP,                AML_FIELD_ACCESS_ANY,           0,                  0),
>  /* ACCESSTYPE_BUF */            OP_TABLE_ENTRY (AML_BYTE_OP,                AML_FIELD_ACCESS_BUFFER,        0,                  0),
>  /* ACCESSTYPE_BYTE */           OP_TABLE_ENTRY (AML_BYTE_OP,                AML_FIELD_ACCESS_BYTE,          0,                  0),
> @@ -213,7 +216,8 @@ const ASL_MAPPING_ENTRY     AslKeywordMapping [] =
>  /* ACCESSTYPE_WORD */           OP_TABLE_ENTRY (AML_BYTE_OP,                AML_FIELD_ACCESS_WORD,          0,                  0),
>  /* ACQUIRE */                   OP_TABLE_ENTRY (AML_ACQUIRE_OP,             0,                              0,                  ACPI_BTYPE_INTEGER),
>  /* ADD */                       OP_TABLE_ENTRY (AML_ADD_OP,                 0,                              0,                  ACPI_BTYPE_INTEGER),
> -/* ADDRESSSPACE_FFIXEDHW */     OP_TABLE_ENTRY (AML_BYTE_OP,                ACPI_ADR_SPACE_FIXED_HARDWARE,  0,                  0),
> +/* ADDRESSINGMODE_7BIT */       OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
> +/* ADDRESSINGMODE_10BIT */      OP_TABLE_ENTRY (AML_BYTE_OP,                1,                              0,                  0),
>  /* ADDRESSTYPE_ACPI */          OP_TABLE_ENTRY (AML_BYTE_OP,                2,                              0,                  0),
>  /* ADDRESSTYPE_MEMORY */        OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
>  /* ADDRESSTYPE_NVS */           OP_TABLE_ENTRY (AML_BYTE_OP,                3,                              0,                  0),
> @@ -228,6 +232,11 @@ const ASL_MAPPING_ENTRY     AslKeywordMapping [] =
>  /* ARG5 */                      OP_TABLE_ENTRY (AML_ARG5,                   0,                              0,                  ACPI_BTYPE_OBJECTS_AND_REFS),
>  /* ARG6 */                      OP_TABLE_ENTRY (AML_ARG6,                   0,                              0,                  ACPI_BTYPE_OBJECTS_AND_REFS),
>  /* BANKFIELD */                 OP_TABLE_ENTRY (AML_BANK_FIELD_OP,          0,                              NODE_AML_PACKAGE,   0),
> +/* BITSPERBYTE_EIGHT */         OP_TABLE_ENTRY (AML_BYTE_OP,                3,                              0,                  0),
> +/* BITSPERBYTE_FIVE */          OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
> +/* BITSPERBYTE_NINE */          OP_TABLE_ENTRY (AML_BYTE_OP,                4,                              0,                  0),
> +/* BITSPERBYTE_SEVEN */         OP_TABLE_ENTRY (AML_BYTE_OP,                2,                              0,                  0),
> +/* BITSPERBYTE_SIX */           OP_TABLE_ENTRY (AML_BYTE_OP,                1,                              0,                  0),
>  /* BREAK */                     OP_TABLE_ENTRY (AML_BREAK_OP,               0,                              0,                  0),
>  /* BREAKPOINT */                OP_TABLE_ENTRY (AML_BREAK_POINT_OP,         0,                              0,                  0),
>  /* BUFFER */                    OP_TABLE_ENTRY (AML_BUFFER_OP,              0,                              NODE_AML_PACKAGE,   ACPI_BTYPE_BUFFER),
> @@ -235,9 +244,14 @@ const ASL_MAPPING_ENTRY     AslKeywordMapping [] =
>  /* BUSMASTERTYPE_NOTMASTER */   OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
>  /* BYTECONST */                 OP_TABLE_ENTRY (AML_RAW_DATA_BYTE,          0,                              0,                  ACPI_BTYPE_INTEGER),
>  /* CASE */                      OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
> +/* CLOCKPHASE_FIRST */          OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
> +/* CLOCKPHASE_SECOND */         OP_TABLE_ENTRY (AML_BYTE_OP,                1,                              0,                  0),
> +/* CLOCKPOLARITY_HIGH */        OP_TABLE_ENTRY (AML_BYTE_OP,                1,                              0,                  0),
> +/* CLOCKPOLARITY_LOW */         OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
>  /* CONCATENATE */               OP_TABLE_ENTRY (AML_CONCAT_OP,              0,                              0,                  ACPI_BTYPE_COMPUTE_DATA),
>  /* CONCATENATERESTEMPLATE */    OP_TABLE_ENTRY (AML_CONCAT_RES_OP,          0,                              0,                  ACPI_BTYPE_BUFFER),
>  /* CONDREFOF */                 OP_TABLE_ENTRY (AML_COND_REF_OF_OP,         0,                              0,                  ACPI_BTYPE_INTEGER),
> +/* CONNECTION */                OP_TABLE_ENTRY (AML_INT_CONNECTION_OP,      0,                              0,                  0),
>  /* CONTINUE */                  OP_TABLE_ENTRY (AML_CONTINUE_OP,            0,                              0,                  0),
>  /* COPY */                      OP_TABLE_ENTRY (AML_COPY_OP,                0,                              0,                  ACPI_BTYPE_DATA_REFERENCE),
>  /* CREATEBITFIELD */            OP_TABLE_ENTRY (AML_CREATE_BIT_FIELD_OP,    0,                              0,                  0),
> @@ -246,6 +260,7 @@ const ASL_MAPPING_ENTRY     AslKeywordMapping [] =
>  /* CREATEFIELD */               OP_TABLE_ENTRY (AML_CREATE_FIELD_OP,        0,                              0,                  0),
>  /* CREATEQWORDFIELD */          OP_TABLE_ENTRY (AML_CREATE_QWORD_FIELD_OP,  0,                              0,                  0),
>  /* CREATEWORDFIELD */           OP_TABLE_ENTRY (AML_CREATE_WORD_FIELD_OP,   0,                              0,                  0),
> +/* DATABUFFER */                OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
>  /* DATATABLEREGION */           OP_TABLE_ENTRY (AML_DATA_REGION_OP,         0,                              0,                  0),
>  /* DEBUG */                     OP_TABLE_ENTRY (AML_DEBUG_OP,               0,                              0,                  ACPI_BTYPE_DEBUG_OBJECT),
>  /* DECODETYPE_POS */            OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
> @@ -256,6 +271,8 @@ const ASL_MAPPING_ENTRY     AslKeywordMapping [] =
>  /* DEFINITIONBLOCK */           OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
>  /* DEREFOF */                   OP_TABLE_ENTRY (AML_DEREF_OF_OP,            0,                              0,                  ACPI_BTYPE_DATA_REFERENCE | ACPI_BTYPE_STRING),
>  /* DEVICE */                    OP_TABLE_ENTRY (AML_DEVICE_OP,              0,                              NODE_AML_PACKAGE,   0),
> +/* DEVICEPOLARITY_HIGH */       OP_TABLE_ENTRY (AML_BYTE_OP,                1,                              0,                  0),
> +/* DEVICEPOLARITY_LOW */        OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
>  /* DIVIDE */                    OP_TABLE_ENTRY (AML_DIVIDE_OP,              0,                              0,                  ACPI_BTYPE_INTEGER),
>  /* DMA */                       OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
>  /* DMATYPE_A */                 OP_TABLE_ENTRY (AML_BYTE_OP,                1,                              0,                  0),
> @@ -270,6 +287,8 @@ const ASL_MAPPING_ENTRY     AslKeywordMapping [] =
>  /* ELSE */                      OP_TABLE_ENTRY (AML_ELSE_OP,                0,                              NODE_AML_PACKAGE,   0),
>  /* ELSEIF */                    OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              NODE_AML_PACKAGE,   0),
>  /* ENDDEPENDENTFN */            OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
> +/* ENDIAN_BIG */                OP_TABLE_ENTRY (AML_BYTE_OP,                1,                              0,                  0),
> +/* ENDIAN_LITTLE */             OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
>  /* ENDTAG */                    OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
>  /* ERRORNODE */                 OP_TABLE_ENTRY (AML_NOOP_OP,                0,                              0,                  0),
>  /* EVENT */                     OP_TABLE_ENTRY (AML_EVENT_OP,               0,                              0,                  0),
> @@ -281,18 +300,25 @@ const ASL_MAPPING_ENTRY     AslKeywordMapping [] =
>  /* FIELD */                     OP_TABLE_ENTRY (AML_FIELD_OP,               0,                              NODE_AML_PACKAGE,   0),
>  /* FINDSETLEFTBIT */            OP_TABLE_ENTRY (AML_FIND_SET_LEFT_BIT_OP,   0,                              0,                  ACPI_BTYPE_INTEGER),
>  /* FINDSETRIGHTBIT */           OP_TABLE_ENTRY (AML_FIND_SET_RIGHT_BIT_OP,  0,                              0,                  ACPI_BTYPE_INTEGER),
> +/* FIXEDDMA */                  OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
>  /* FIXEDIO */                   OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
> +/* FLOWCONTROL_HW */            OP_TABLE_ENTRY (AML_BYTE_OP,                1,                              0,                  0),
> +/* FLOWCONTROL_NONE */          OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
> +/* FLOWCONTROL_SW */            OP_TABLE_ENTRY (AML_BYTE_OP,                2,                              0,                  0),
>  /* FROMBCD */                   OP_TABLE_ENTRY (AML_FROM_BCD_OP,            0,                              0,                  ACPI_BTYPE_INTEGER),
>  /* FUNCTION */                  OP_TABLE_ENTRY (AML_METHOD_OP,              0,                              NODE_AML_PACKAGE,   0),
> +/* GPIOINT */                   OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
> +/* GPIOIO */                    OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
> +/* I2CSERIALBUS */              OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
>  /* IF */                        OP_TABLE_ENTRY (AML_IF_OP,                  0,                              NODE_AML_PACKAGE,   0),
>  /* INCLUDE */                   OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
> -/* INCLUDE_CSTYLE */            OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
>  /* INCLUDE_END */               OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
>  /* INCREMENT */                 OP_TABLE_ENTRY (AML_INCREMENT_OP,           0,                              0,                  ACPI_BTYPE_INTEGER),
>  /* INDEX */                     OP_TABLE_ENTRY (AML_INDEX_OP,               0,                              0,                  ACPI_BTYPE_REFERENCE),
>  /* INDEXFIELD */                OP_TABLE_ENTRY (AML_INDEX_FIELD_OP,         0,                              NODE_AML_PACKAGE,   0),
>  /* INTEGER */                   OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  ACPI_BTYPE_INTEGER),
>  /* INTERRUPT */                 OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
> +/* INTLEVEL_ACTIVEBOTH */       OP_TABLE_ENTRY (AML_BYTE_OP,                2,                              0,                  0),
>  /* INTLEVEL_ACTIVEHIGH */       OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
>  /* INTLEVEL_ACTIVELOW */        OP_TABLE_ENTRY (AML_BYTE_OP,                1,                              0,                  0),
>  /* INTTYPE_EDGE */              OP_TABLE_ENTRY (AML_BYTE_OP,                1,                              0,                  0),
> @@ -300,13 +326,16 @@ const ASL_MAPPING_ENTRY     AslKeywordMapping [] =
>  /* IO */                        OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
>  /* IODECODETYPE_10 */           OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
>  /* IODECODETYPE_16 */           OP_TABLE_ENTRY (AML_BYTE_OP,                1,                              0,                  0),
> +/* IORESTRICT_IN */             OP_TABLE_ENTRY (AML_BYTE_OP,                1,                              0,                  0),
> +/* IORESTRICT_NONE */           OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
> +/* IORESTRICT_OUT */            OP_TABLE_ENTRY (AML_BYTE_OP,                2,                              0,                  0),
> +/* IORESTRICT_PRESERVE */       OP_TABLE_ENTRY (AML_BYTE_OP,                3,                              0,                  0),
>  /* IRQ */                       OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
>  /* IRQNOFLAGS */                OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
>  /* LAND */                      OP_TABLE_ENTRY (AML_LAND_OP,                0,                              0,                  ACPI_BTYPE_INTEGER),
>  /* LEQUAL */                    OP_TABLE_ENTRY (AML_LEQUAL_OP,              0,                              0,                  ACPI_BTYPE_INTEGER),
>  /* LGREATER */                  OP_TABLE_ENTRY (AML_LGREATER_OP,            0,                              0,                  ACPI_BTYPE_INTEGER),
>  /* LGREATEREQUAL */             OP_TABLE_ENTRY (AML_LGREATEREQUAL_OP,       0,                              0,                  ACPI_BTYPE_INTEGER),
> -/* LINE */                      OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
>  /* LLESS */                     OP_TABLE_ENTRY (AML_LLESS_OP,               0,                              0,                  ACPI_BTYPE_INTEGER),
>  /* LLESSEQUAL */                OP_TABLE_ENTRY (AML_LLESSEQUAL_OP,          0,                              0,                  ACPI_BTYPE_INTEGER),
>  /* LNOT */                      OP_TABLE_ENTRY (AML_LNOT_OP,                0,                              0,                  ACPI_BTYPE_INTEGER),
> @@ -380,6 +409,15 @@ const ASL_MAPPING_ENTRY     AslKeywordMapping [] =
>  /* OR */                        OP_TABLE_ENTRY (AML_BIT_OR_OP,              0,                              0,                  ACPI_BTYPE_INTEGER),
>  /* PACKAGE */                   OP_TABLE_ENTRY (AML_PACKAGE_OP,             0,                              NODE_AML_PACKAGE,   ACPI_BTYPE_PACKAGE),
>  /* PACKAGEP_LENGTH */           OP_TABLE_ENTRY (AML_PACKAGE_LENGTH,         0,                              NODE_AML_PACKAGE,   0),
> +/* PARITYTYPE_EVEN */           OP_TABLE_ENTRY (AML_BYTE_OP,                1,                              0,                  0),
> +/* PARITYTYPE_MARK */           OP_TABLE_ENTRY (AML_BYTE_OP,                3,                              0,                  0),
> +/* PARITYTYPE_NONE */           OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
> +/* PARITYTYPE_ODD */            OP_TABLE_ENTRY (AML_BYTE_OP,                2,                              0,                  0),
> +/* PARITYTYPE_SPACE */          OP_TABLE_ENTRY (AML_BYTE_OP,                4,                              0,                  0),
> +/* PIN_NOPULL */                OP_TABLE_ENTRY (AML_BYTE_OP,                3,                              0,                  0),
> +/* PIN_PULLDEFAULT */           OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
> +/* PIN_PULLDOWN */              OP_TABLE_ENTRY (AML_BYTE_OP,                2,                              0,                  0),
> +/* PIN_PULLUP */                OP_TABLE_ENTRY (AML_BYTE_OP,                1,                              0,                  0),
>  /* POWERRESOURCE */             OP_TABLE_ENTRY (AML_POWER_RES_OP,           0,                              NODE_AML_PACKAGE,   0),
>  /* PROCESSOR */                 OP_TABLE_ENTRY (AML_PROCESSOR_OP,           0,                              NODE_AML_PACKAGE,   0),
>  /* QWORDCONST */                OP_TABLE_ENTRY (AML_RAW_DATA_QWORD,         0,                              0,                  ACPI_BTYPE_INTEGER),
> @@ -395,6 +433,9 @@ const ASL_MAPPING_ENTRY     AslKeywordMapping [] =
>  /* REFOF */                     OP_TABLE_ENTRY (AML_REF_OF_OP,              0,                              0,                  ACPI_BTYPE_REFERENCE),
>  /* REGIONSPACE_CMOS */          OP_TABLE_ENTRY (AML_RAW_DATA_BYTE,          ACPI_ADR_SPACE_CMOS,            0,                  0),
>  /* REGIONSPACE_EC */            OP_TABLE_ENTRY (AML_RAW_DATA_BYTE,          ACPI_ADR_SPACE_EC,              0,                  0),
> +/* REGIONSPACE_FFIXEDHW */      OP_TABLE_ENTRY (AML_RAW_DATA_BYTE,          ACPI_ADR_SPACE_FIXED_HARDWARE,  0,                  0),
> +/* REGIONSPACE_GPIO */          OP_TABLE_ENTRY (AML_RAW_DATA_BYTE,          ACPI_ADR_SPACE_GPIO,            0,                  0),
> +/* REGIONSPACE_GSBUS */         OP_TABLE_ENTRY (AML_RAW_DATA_BYTE,          ACPI_ADR_SPACE_GSBUS,           0,                  0),
>  /* 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),
> @@ -414,15 +455,24 @@ const ASL_MAPPING_ENTRY     AslKeywordMapping [] =
>  /* SERIALIZERULE_NOTSERIAL */   OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
>  /* SERIALIZERULE_SERIAL */      OP_TABLE_ENTRY (AML_BYTE_OP,                1,                              0,                  0),
>  /* SHARETYPE_EXCLUSIVE */       OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
> +/* SHARETYPE_EXCLUSIVEWAKE */   OP_TABLE_ENTRY (AML_BYTE_OP,                2,                              0,                  0),
>  /* SHARETYPE_SHARED */          OP_TABLE_ENTRY (AML_BYTE_OP,                1,                              0,                  0),
> +/* SHARETYPE_SHAREDWAKE */      OP_TABLE_ENTRY (AML_BYTE_OP,                3,                              0,                  0),
>  /* SHIFTLEFT */                 OP_TABLE_ENTRY (AML_SHIFT_LEFT_OP,          0,                              0,                  ACPI_BTYPE_INTEGER),
>  /* SHIFTRIGHT */                OP_TABLE_ENTRY (AML_SHIFT_RIGHT_OP,         0,                              0,                  ACPI_BTYPE_INTEGER),
>  /* SIGNAL */                    OP_TABLE_ENTRY (AML_SIGNAL_OP,              0,                              0,                  0),
>  /* SIZEOF */                    OP_TABLE_ENTRY (AML_SIZE_OF_OP,             0,                              0,                  ACPI_BTYPE_INTEGER),
> +/* SLAVEMODE_CONTROLLERINIT */  OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
> +/* SLAVEMODE_DEVICEINIT */      OP_TABLE_ENTRY (AML_BYTE_OP,                1,                              0,                  0),
>  /* SLEEP */                     OP_TABLE_ENTRY (AML_SLEEP_OP,               0,                              0,                  0),
> +/* SPISERIALBUS */              OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
>  /* STALL */                     OP_TABLE_ENTRY (AML_STALL_OP,               0,                              0,                  0),
>  /* STARTDEPENDENTFN */          OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
>  /* STARTDEPENDENTFN_NOPRI */    OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
> +/* STOPBITS_ONE */              OP_TABLE_ENTRY (AML_BYTE_OP,                1,                              0,                  0),
> +/* STOPBITS_ONEPLUSHALF */      OP_TABLE_ENTRY (AML_BYTE_OP,                2,                              0,                  0),
> +/* STOPBITS_TWO */              OP_TABLE_ENTRY (AML_BYTE_OP,                3,                              0,                  0),
> +/* STOPBITS_ZERO */             OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
>  /* STORE */                     OP_TABLE_ENTRY (AML_STORE_OP,               0,                              0,                  ACPI_BTYPE_DATA_REFERENCE),
>  /* STRING_LITERAL */            OP_TABLE_ENTRY (AML_STRING_OP,              0,                              0,                  ACPI_BTYPE_STRING),
>  /* SUBTRACT */                  OP_TABLE_ENTRY (AML_SUBTRACT_OP,            0,                              0,                  ACPI_BTYPE_INTEGER),
> @@ -440,6 +490,7 @@ const ASL_MAPPING_ENTRY     AslKeywordMapping [] =
>  /* TRANSLATIONTYPE_SPARSE */    OP_TABLE_ENTRY (AML_BYTE_OP,                1,                              0,                  0),
>  /* TYPE_STATIC */               OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
>  /* TYPE_TRANSLATION */          OP_TABLE_ENTRY (AML_BYTE_OP,                1,                              0,                  0),
> +/* UART_SERIALBUS */            OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
>  /* UNICODE */                   OP_TABLE_ENTRY (AML_BUFFER_OP,              0,                              NODE_AML_PACKAGE,   0),
>  /* UNLOAD */                    OP_TABLE_ENTRY (AML_UNLOAD_OP,              0,                              0,                  0),
>  /* UPDATERULE_ONES */           OP_TABLE_ENTRY (AML_BYTE_OP,                AML_FIELD_UPDATE_WRITE_AS_ONES, 0,                  0),
> @@ -450,10 +501,18 @@ const ASL_MAPPING_ENTRY     AslKeywordMapping [] =
>  /* VENDORSHORT */               OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
>  /* WAIT */                      OP_TABLE_ENTRY (AML_WAIT_OP,                0,                              0,                  ACPI_BTYPE_INTEGER),
>  /* WHILE */                     OP_TABLE_ENTRY (AML_WHILE_OP,               0,                              NODE_AML_PACKAGE,   0),
> +/* WIREMODE_FOUR */             OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
> +/* WIREMODE_THREE */            OP_TABLE_ENTRY (AML_BYTE_OP,                1,                              0,                  0),
>  /* WORDBUSNUMBER */             OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
>  /* WORDCONST */                 OP_TABLE_ENTRY (AML_RAW_DATA_WORD,          0,                              0,                  ACPI_BTYPE_INTEGER),
>  /* WORDIO */                    OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
>  /* WORDSPACE */                 OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
> +/* XFERSIZE_8 */                OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
> +/* XFERSIZE_16 */               OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
> +/* XFERSIZE_32 */               OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
> +/* XFERSIZE_64 */               OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
> +/* XFERSIZE_128 */              OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
> +/* XFERSIZE_256 */              OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
>  /* XFERTYPE_8 */                OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
>  /* XFERTYPE_8_16 */             OP_TABLE_ENTRY (AML_BYTE_OP,                1,                              0,                  0),
>  /* XFERTYPE_16 */               OP_TABLE_ENTRY (AML_BYTE_OP,                2,                              0,                  0),
> diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h
> index 957b413..4e5bb31 100644
> --- a/src/acpica/source/compiler/aslmessages.h
> +++ b/src/acpica/source/compiler/aslmessages.h
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -133,17 +133,20 @@
>  typedef enum
>  {
>     ASL_MSG_RESERVED = 0,
> +
> +    ASL_MSG_ALIGNMENT,
>     ASL_MSG_ALPHANUMERIC_STRING,
>     ASL_MSG_AML_NOT_IMPLEMENTED,
>     ASL_MSG_ARG_COUNT_HI,
>     ASL_MSG_ARG_COUNT_LO,
>     ASL_MSG_ARG_INIT,
>     ASL_MSG_BACKWARDS_OFFSET,
> -    ASL_MSG_BITS_TO_BYTES,
>     ASL_MSG_BUFFER_LENGTH,
> -    ASL_MSG_BYTES_TO_BITS,
>     ASL_MSG_CLOSE,
>     ASL_MSG_COMPILER_INTERNAL,
> +    ASL_MSG_COMPILER_RESERVED,
> +    ASL_MSG_CONNECTION_MISSING,
> +    ASL_MSG_CONNECTION_INVALID,
>     ASL_MSG_CONSTANT_EVALUATION,
>     ASL_MSG_CONSTANT_FOLDED,
>     ASL_MSG_CORE_EXCEPTION,
> @@ -162,15 +165,26 @@ typedef enum
>     ASL_MSG_FIELD_ACCESS_WIDTH,
>     ASL_MSG_FIELD_UNIT_ACCESS_WIDTH,
>     ASL_MSG_FIELD_UNIT_OFFSET,
> +    ASL_MSG_GPE_NAME_CONFLICT,
> +    ASL_MSG_HID_LENGTH,
> +    ASL_MSG_HID_PREFIX,
> +    ASL_MSG_HID_SUFFIX,
>     ASL_MSG_INCLUDE_FILE_OPEN,
>     ASL_MSG_INPUT_FILE_OPEN,
>     ASL_MSG_INTEGER_LENGTH,
>     ASL_MSG_INTEGER_OPTIMIZATION,
>     ASL_MSG_INTERRUPT_LIST,
>     ASL_MSG_INTERRUPT_NUMBER,
> +    ASL_MSG_INVALID_ACCESS_SIZE,
> +    ASL_MSG_INVALID_ADDR_FLAGS,
>     ASL_MSG_INVALID_CONSTANT_OP,
>     ASL_MSG_INVALID_EISAID,
>     ASL_MSG_INVALID_ESCAPE,
> +    ASL_MSG_INVALID_GRAN_FIXED,
> +    ASL_MSG_INVALID_GRANULARITY,
> +    ASL_MSG_INVALID_LENGTH,
> +    ASL_MSG_INVALID_LENGTH_FIXED,
> +    ASL_MSG_INVALID_MIN_MAX,
>     ASL_MSG_INVALID_OPERAND,
>     ASL_MSG_INVALID_PERFORMANCE,
>     ASL_MSG_INVALID_PRIORITY,
> @@ -179,32 +193,43 @@ typedef enum
>     ASL_MSG_INVALID_TIME,
>     ASL_MSG_INVALID_TYPE,
>     ASL_MSG_INVALID_UUID,
> +    ASL_MSG_ISA_ADDRESS,
> +    ASL_MSG_LEADING_ASTERISK,
>     ASL_MSG_LIST_LENGTH_LONG,
>     ASL_MSG_LIST_LENGTH_SHORT,
>     ASL_MSG_LISTING_FILE_OPEN,
>     ASL_MSG_LISTING_FILENAME,
>     ASL_MSG_LOCAL_INIT,
> +    ASL_MSG_LOCAL_OUTSIDE_METHOD,
>     ASL_MSG_LONG_LINE,
>     ASL_MSG_MEMORY_ALLOCATION,
>     ASL_MSG_MISSING_ENDDEPENDENT,
>     ASL_MSG_MISSING_STARTDEPENDENT,
> +    ASL_MSG_MULTIPLE_DEFAULT,
>     ASL_MSG_MULTIPLE_TYPES,
>     ASL_MSG_NAME_EXISTS,
>     ASL_MSG_NAME_OPTIMIZATION,
> +    ASL_MSG_NAMED_OBJECT_IN_WHILE,
>     ASL_MSG_NESTED_COMMENT,
>     ASL_MSG_NO_CASES,
> +    ASL_MSG_NO_REGION,
>     ASL_MSG_NO_RETVAL,
>     ASL_MSG_NO_WHILE,
>     ASL_MSG_NON_ASCII,
> +    ASL_MSG_NON_ZERO,
>     ASL_MSG_NOT_EXIST,
>     ASL_MSG_NOT_FOUND,
>     ASL_MSG_NOT_METHOD,
>     ASL_MSG_NOT_PARAMETER,
>     ASL_MSG_NOT_REACHABLE,
> +    ASL_MSG_NOT_REFERENCED,
> +    ASL_MSG_NULL_DESCRIPTOR,
> +    ASL_MSG_NULL_STRING,
>     ASL_MSG_OPEN,
>     ASL_MSG_OUTPUT_FILE_OPEN,
>     ASL_MSG_OUTPUT_FILENAME,
>     ASL_MSG_PACKAGE_LENGTH,
> +    ASL_MSG_PREPROCESSOR_FILENAME,
>     ASL_MSG_READ,
>     ASL_MSG_RECURSION,
>     ASL_MSG_REGION_BUFFER_ACCESS,
> @@ -212,6 +237,7 @@ typedef enum
>     ASL_MSG_RESERVED_ARG_COUNT_HI,
>     ASL_MSG_RESERVED_ARG_COUNT_LO,
>     ASL_MSG_RESERVED_METHOD,
> +    ASL_MSG_RESERVED_NO_RETURN_VAL,
>     ASL_MSG_RESERVED_OPERAND_TYPE,
>     ASL_MSG_RESERVED_RETURN_VALUE,
>     ASL_MSG_RESERVED_USE,
> @@ -220,63 +246,58 @@ typedef enum
>     ASL_MSG_RESOURCE_INDEX,
>     ASL_MSG_RESOURCE_LIST,
>     ASL_MSG_RESOURCE_SOURCE,
> +    ASL_MSG_RESULT_NOT_USED,
>     ASL_MSG_RETURN_TYPES,
>     ASL_MSG_SCOPE_FWD_REF,
>     ASL_MSG_SCOPE_TYPE,
>     ASL_MSG_SEEK,
> +    ASL_MSG_SERIALIZED,
>     ASL_MSG_SINGLE_NAME_OPTIMIZATION,
>     ASL_MSG_SOME_NO_RETVAL,
> +    ASL_MSG_STRING_LENGTH,
>     ASL_MSG_SWITCH_TYPE,
>     ASL_MSG_SYNC_LEVEL,
>     ASL_MSG_SYNTAX,
>     ASL_MSG_TABLE_SIGNATURE,
> +    ASL_MSG_TAG_LARGER,
> +    ASL_MSG_TAG_SMALLER,
> +    ASL_MSG_TIMEOUT,
>     ASL_MSG_TOO_MANY_TEMPS,
>     ASL_MSG_UNKNOWN_RESERVED_NAME,
>     ASL_MSG_UNREACHABLE_CODE,
>     ASL_MSG_UNSUPPORTED,
> +    ASL_MSG_UPPER_CASE,
>     ASL_MSG_VENDOR_LIST,
>     ASL_MSG_WRITE,
> -    ASL_MSG_MULTIPLE_DEFAULT,
> -    ASL_MSG_TIMEOUT,
> -    ASL_MSG_RESULT_NOT_USED,
> -    ASL_MSG_NOT_REFERENCED,
> -    ASL_MSG_NON_ZERO,
> -    ASL_MSG_STRING_LENGTH,
> -    ASL_MSG_SERIALIZED,
> -    ASL_MSG_COMPILER_RESERVED,
> -    ASL_MSG_NAMED_OBJECT_IN_WHILE,
> -    ASL_MSG_LOCAL_OUTSIDE_METHOD,
> -    ASL_MSG_ALIGNMENT,
> -    ASL_MSG_ISA_ADDRESS,
> -    ASL_MSG_INVALID_MIN_MAX,
> -    ASL_MSG_INVALID_LENGTH,
> -    ASL_MSG_INVALID_LENGTH_FIXED,
> -    ASL_MSG_INVALID_GRANULARITY,
> -    ASL_MSG_INVALID_GRAN_FIXED,
> -    ASL_MSG_INVALID_ACCESS_SIZE,
> -    ASL_MSG_INVALID_ADDR_FLAGS,
> -    ASL_MSG_NULL_DESCRIPTOR,
> -    ASL_MSG_UPPER_CASE,
> -    ASL_MSG_HID_LENGTH,
> -    ASL_MSG_NULL_STRING,
> -    ASL_MSG_LEADING_ASTERISK,
> -    ASL_MSG_RESERVED_NO_RETURN_VAL,
> -    ASL_MSG_GPE_NAME_CONFLICT,
> -    ASL_MSG_NO_REGION,
>
> -    ASL_MSG_INVALID_FIELD_NAME,
> -    ASL_MSG_INTEGER_SIZE,
> -    ASL_MSG_INVALID_HEX_INTEGER,
> +    /* These messages are used by the Preprocessor only */
> +
> +    ASL_MSG_DIRECTIVE_SYNTAX,
> +    ASL_MSG_ENDIF_MISMATCH,
> +    ASL_MSG_ERROR_DIRECTIVE,
> +    ASL_MSG_EXISTING_NAME,
> +    ASL_MSG_INVALID_INVOCATION,
> +    ASL_MSG_MACRO_SYNTAX,
> +    ASL_MSG_TOO_MANY_ARGUMENTS,
> +    ASL_MSG_UNKNOWN_DIRECTIVE,
> +    ASL_MSG_UNKNOWN_PRAGMA,
> +
> +
> +    /* These messages are used by the data table compiler only */
> +
>     ASL_MSG_BUFFER_ELEMENT,
> -    ASL_MSG_RESERVED_VALUE,
> +    ASL_MSG_DIVIDE_BY_ZERO,
>     ASL_MSG_FLAG_VALUE,
> -    ASL_MSG_ZERO_VALUE,
> -    ASL_MSG_UNKNOWN_TABLE,
> -    ASL_MSG_UNKNOWN_SUBTABLE,
> +    ASL_MSG_INTEGER_SIZE,
> +    ASL_MSG_INVALID_EXPRESSION,
> +    ASL_MSG_INVALID_FIELD_NAME,
> +    ASL_MSG_INVALID_HEX_INTEGER,
>     ASL_MSG_OEM_TABLE,
> +    ASL_MSG_RESERVED_VALUE,
>     ASL_MSG_UNKNOWN_LABEL,
> -    ASL_MSG_INVALID_EXPRESSION,
> -    ASL_MSG_DIVIDE_BY_ZERO
> +    ASL_MSG_UNKNOWN_SUBTABLE,
> +    ASL_MSG_UNKNOWN_TABLE,
> +    ASL_MSG_ZERO_VALUE
>
>  } ASL_MESSAGE_IDS;
>
> @@ -287,17 +308,19 @@ typedef enum
>
>  char                        *AslMessages [] = {
>  /*    The zeroth message is reserved */    "",
> +/*    ASL_MSG_ALIGNMENT */                  "Must be a multiple of alignment/granularity value",
>  /*    ASL_MSG_ALPHANUMERIC_STRING */        "String must be entirely alphanumeric",
>  /*    ASL_MSG_AML_NOT_IMPLEMENTED */        "Opcode is not implemented in compiler AML code generator",
>  /*    ASL_MSG_ARG_COUNT_HI */               "Too many arguments",
>  /*    ASL_MSG_ARG_COUNT_LO */               "Too few arguments",
>  /*    ASL_MSG_ARG_INIT */                   "Method argument is not initialized",
>  /*    ASL_MSG_BACKWARDS_OFFSET */           "Invalid backwards offset",
> -/*    ASL_MSG_BITS_TO_BYTES */              "Field offset is in bits, but a byte offset is required",
>  /*    ASL_MSG_BUFFER_LENGTH */              "Effective AML buffer length is zero",
> -/*    ASL_MSG_BYTES_TO_BITS */              "Field offset is in bytes, but a bit offset is required",
>  /*    ASL_MSG_CLOSE */                      "Could not close file",
>  /*    ASL_MSG_COMPILER_INTERNAL */          "Internal compiler error",
> +/*    ASL_MSG_COMPILER_RESERVED */          "Use of compiler reserved name",
> +/*    ASL_MSG_CONNECTION_MISSING */         "A Connection operator is required for this field SpaceId",
> +/*    ASL_MSG_CONNECTION_INVALID */         "Invalid OpRegion SpaceId for use of Connection operator",
>  /*    ASL_MSG_CONSTANT_EVALUATION */        "Could not evaluate constant expression",
>  /*    ASL_MSG_CONSTANT_FOLDED */            "Constant expression evaluated and reduced",
>  /*    ASL_MSG_CORE_EXCEPTION */             "From ACPI CA Subsystem",
> @@ -316,15 +339,26 @@ char                        *AslMessages [] = {
>  /*    ASL_MSG_FIELD_ACCESS_WIDTH */         "Access width is greater than region size",
>  /*    ASL_MSG_FIELD_UNIT_ACCESS_WIDTH */    "Access width of Field Unit extends beyond region limit",
>  /*    ASL_MSG_FIELD_UNIT_OFFSET */          "Field Unit extends beyond region limit",
> +/*    ASL_MSG_GPE_NAME_CONFLICT */          "Name conflicts with a previous GPE method",
> +/*    ASL_MSG_HID_LENGTH */                 "_HID string must be exactly 7 or 8 characters",
> +/*    ASL_MSG_HID_PREFIX */                 "_HID prefix must be all uppercase or decimal digits",
> +/*    ASL_MSG_HID_SUFFIX */                 "_HID suffix must be all hex digits",
>  /*    ASL_MSG_INCLUDE_FILE_OPEN */          "Could not open include file",
>  /*    ASL_MSG_INPUT_FILE_OPEN */            "Could not open input file",
>  /*    ASL_MSG_INTEGER_LENGTH */             "64-bit integer in 32-bit table, truncating",
>  /*    ASL_MSG_INTEGER_OPTIMIZATION */       "Integer optimized to single-byte AML opcode",
>  /*    ASL_MSG_INTERRUPT_LIST */             "Too many interrupts (16 max)",
>  /*    ASL_MSG_INTERRUPT_NUMBER */           "Invalid interrupt number (must be 0-15)",
> +/*    ASL_MSG_INVALID_ACCESS_SIZE */        "Invalid AccessSize (Maximum is 4 - QWord access)",
> +/*    ASL_MSG_INVALID_ADDR_FLAGS */         "Invalid combination of Length and Min/Max fixed flags",
>  /*    ASL_MSG_INVALID_CONSTANT_OP */        "Invalid operator in constant expression (not type 3/4/5)",
>  /*    ASL_MSG_INVALID_EISAID */             "EISAID string must be of the form \"UUUXXXX\" (3 uppercase, 4 hex digits)",
>  /*    ASL_MSG_INVALID_ESCAPE */             "Invalid or unknown escape sequence",
> +/*    ASL_MSG_INVALID_GRAN_FIXED */         "Granularity must be zero for fixed Min/Max",
> +/*    ASL_MSG_INVALID_GRANULARITY */        "Granularity must be zero or a power of two minus one",
> +/*    ASL_MSG_INVALID_LENGTH */             "Length is larger than Min/Max window",
> +/*    ASL_MSG_INVALID_LENGTH_FIXED */       "Length is not equal to fixed Min/Max window",
> +/*    ASL_MSG_INVALID_MIN_MAX */            "Address Min is greater than Address Max",
>  /*    ASL_MSG_INVALID_OPERAND */            "Invalid operand",
>  /*    ASL_MSG_INVALID_PERFORMANCE */        "Invalid performance/robustness value",
>  /*    ASL_MSG_INVALID_PRIORITY */           "Invalid priority value",
> @@ -333,32 +367,43 @@ char                        *AslMessages [] = {
>  /*    ASL_MSG_INVALID_TIME */               "Time parameter too long (255 max)",
>  /*    ASL_MSG_INVALID_TYPE */               "Invalid type",
>  /*    ASL_MSG_INVALID_UUID */               "UUID string must be of the form \"aabbccdd-eeff-gghh-iijj-kkllmmnnoopp\"",
> +/*    ASL_MSG_ISA_ADDRESS */                "Maximum 10-bit ISA address (0x3FF)",
> +/*    ASL_MSG_LEADING_ASTERISK */           "Invalid leading asterisk",
>  /*    ASL_MSG_LIST_LENGTH_LONG */           "Initializer list longer than declared package length",
>  /*    ASL_MSG_LIST_LENGTH_SHORT */          "Initializer list shorter than declared package length",
>  /*    ASL_MSG_LISTING_FILE_OPEN */          "Could not open listing file",
>  /*    ASL_MSG_LISTING_FILENAME */           "Could not create listing filename",
>  /*    ASL_MSG_LOCAL_INIT */                 "Method local variable is not initialized",
> +/*    ASL_MSG_LOCAL_OUTSIDE_METHOD */       "Local or Arg used outside a control method",
>  /*    ASL_MSG_LONG_LINE */                  "Splitting long input line",
>  /*    ASL_MSG_MEMORY_ALLOCATION */          "Memory allocation failure",
>  /*    ASL_MSG_MISSING_ENDDEPENDENT */       "Missing EndDependentFn() macro in dependent resource list",
>  /*    ASL_MSG_MISSING_STARTDEPENDENT */     "Missing StartDependentFn() macro in dependent resource list",
> +/*    ASL_MSG_MULTIPLE_DEFAULT */           "More than one Default statement within Switch construct",
>  /*    ASL_MSG_MULTIPLE_TYPES */             "Multiple types",
>  /*    ASL_MSG_NAME_EXISTS */                "Name already exists in scope",
>  /*    ASL_MSG_NAME_OPTIMIZATION */          "NamePath optimized",
> +/*    ASL_MSG_NAMED_OBJECT_IN_WHILE */      "Creating a named object in a While loop",
>  /*    ASL_MSG_NESTED_COMMENT */             "Nested comment found",
>  /*    ASL_MSG_NO_CASES */                   "No Case statements under Switch",
> +/*    ASL_MSG_NO_REGION */                  "_REG has no corresponding Operation Region",
>  /*    ASL_MSG_NO_RETVAL */                  "Called method returns no value",
>  /*    ASL_MSG_NO_WHILE */                   "No enclosing While statement",
>  /*    ASL_MSG_NON_ASCII */                  "Invalid characters found in file",
> +/*    ASL_MSG_NON_ZERO */                   "Operand evaluates to zero",
>  /*    ASL_MSG_NOT_EXIST */                  "Object does not exist",
>  /*    ASL_MSG_NOT_FOUND */                  "Object not found or not accessible from scope",
>  /*    ASL_MSG_NOT_METHOD */                 "Not a control method, cannot invoke",
>  /*    ASL_MSG_NOT_PARAMETER */              "Not a parameter, used as local only",
>  /*    ASL_MSG_NOT_REACHABLE */              "Object is not accessible from this scope",
> +/*    ASL_MSG_NOT_REFERENCED */             "Namespace object is not referenced",
> +/*    ASL_MSG_NULL_DESCRIPTOR */            "Min/Max/Length/Gran are all zero, but no resource tag",
> +/*    ASL_MSG_NULL_STRING */                "Invalid zero-length (null) string",
>  /*    ASL_MSG_OPEN */                       "Could not open file",
>  /*    ASL_MSG_OUTPUT_FILE_OPEN */           "Could not open output AML file",
>  /*    ASL_MSG_OUTPUT_FILENAME */            "Could not create output filename",
>  /*    ASL_MSG_PACKAGE_LENGTH */             "Effective AML package length is zero",
> +/*    ASL_MSG_PREPROCESSOR_FILENAME */      "Could not create preprocessor filename",
>  /*    ASL_MSG_READ */                       "Could not read file",
>  /*    ASL_MSG_RECURSION */                  "Recursive method call",
>  /*    ASL_MSG_REGION_BUFFER_ACCESS */       "Host Operation Region requires BufferAcc access",
> @@ -366,6 +411,7 @@ char                        *AslMessages [] = {
>  /*    ASL_MSG_RESERVED_ARG_COUNT_HI */      "Reserved method has too many arguments",
>  /*    ASL_MSG_RESERVED_ARG_COUNT_LO */      "Reserved method has too few arguments",
>  /*    ASL_MSG_RESERVED_METHOD */            "Reserved name must be a control method",
> +/*    ASL_MSG_RESERVED_NO_RETURN_VAL */     "Reserved method should not return a value",
>  /*    ASL_MSG_RESERVED_OPERAND_TYPE */      "Invalid object type for reserved name",
>  /*    ASL_MSG_RESERVED_RETURN_VALUE */      "Reserved method must return a value",
>  /*    ASL_MSG_RESERVED_USE */               "Invalid use of reserved name",
> @@ -374,65 +420,57 @@ char                        *AslMessages [] = {
>  /*    ASL_MSG_RESOURCE_INDEX */             "Missing ResourceSourceIndex (required)",
>  /*    ASL_MSG_RESOURCE_LIST */              "Too many resource items (internal error)",
>  /*    ASL_MSG_RESOURCE_SOURCE */            "Missing ResourceSource string (required)",
> +/*    ASL_MSG_RESULT_NOT_USED */            "Result is not used, operator has no effect",
>  /*    ASL_MSG_RETURN_TYPES */               "Not all control paths return a value",
>  /*    ASL_MSG_SCOPE_FWD_REF */              "Forward references from Scope operator not allowed",
>  /*    ASL_MSG_SCOPE_TYPE */                 "Existing object has invalid type for Scope operator",
>  /*    ASL_MSG_SEEK */                       "Could not seek file",
> +/*    ASL_MSG_SERIALIZED */                 "Control Method marked Serialized",
>  /*    ASL_MSG_SINGLE_NAME_OPTIMIZATION */   "NamePath optimized to NameSeg (uses run-time search path)",
>  /*    ASL_MSG_SOME_NO_RETVAL */             "Called method may not always return a value",
> +/*    ASL_MSG_STRING_LENGTH */              "String literal too long",
>  /*    ASL_MSG_SWITCH_TYPE */                "Switch expression is not a static Integer/Buffer/String data type, defaulting to Integer",
>  /*    ASL_MSG_SYNC_LEVEL */                 "SyncLevel must be in the range 0-15",
>  /*    ASL_MSG_SYNTAX */                     "",
>  /*    ASL_MSG_TABLE_SIGNATURE */            "Invalid Table Signature",
> +/*    ASL_MSG_TAG_LARGER */                 "ResourceTag larger than Field",
> +/*    ASL_MSG_TAG_SMALLER */                "ResourceTag smaller than Field",
> +/*    ASL_MSG_TIMEOUT */                    "Result is not used, possible operator timeout will be missed",
>  /*    ASL_MSG_TOO_MANY_TEMPS */             "Method requires too many temporary variables (_T_x)",
>  /*    ASL_MSG_UNKNOWN_RESERVED_NAME */      "Unknown reserved name",
>  /*    ASL_MSG_UNREACHABLE_CODE */           "Statement is unreachable",
>  /*    ASL_MSG_UNSUPPORTED */                "Unsupported feature",
> +/*    ASL_MSG_UPPER_CASE */                 "Non-hex letters must be upper case",
>  /*    ASL_MSG_VENDOR_LIST */                "Too many vendor data bytes (7 max)",
>  /*    ASL_MSG_WRITE */                      "Could not write file",
> -/*    ASL_MSG_MULTIPLE_DEFAULT */           "More than one Default statement within Switch construct",
> -/*    ASL_MSG_TIMEOUT */                    "Result is not used, possible operator timeout will be missed",
> -/*    ASL_MSG_RESULT_NOT_USED */            "Result is not used, operator has no effect",
> -/*    ASL_MSG_NOT_REFERENCED */             "Namespace object is not referenced",
> -/*    ASL_MSG_NON_ZERO */                   "Operand evaluates to zero",
> -/*    ASL_MSG_STRING_LENGTH */              "String literal too long",
> -/*    ASL_MSG_SERIALIZED */                 "Control Method marked Serialized",
> -/*    ASL_MSG_COMPILER_RESERVED */          "Use of compiler reserved name",
> -/*    ASL_MSG_NAMED_OBJECT_IN_WHILE */      "Creating a named object in a While loop",
> -/*    ASL_MSG_LOCAL_OUTSIDE_METHOD */       "Local or Arg used outside a control method",
> -/*    ASL_MSG_ALIGNMENT */                  "Must be a multiple of alignment/granularity value",
> -/*    ASL_MSG_ISA_ADDRESS */                "Maximum 10-bit ISA address (0x3FF)",
> -/*    ASL_MSG_INVALID_MIN_MAX */            "Address Min is greater than Address Max",
> -/*    ASL_MSG_INVALID_LENGTH */             "Length is larger than Min/Max window",
> -/*    ASL_MSG_INVALID_LENGTH_FIXED */       "Length is not equal to fixed Min/Max window",
> -/*    ASL_MSG_INVALID_GRANULARITY */        "Granularity must be zero or a power of two minus one",
> -/*    ASL_MSG_INVALID_GRAN_FIXED */         "Granularity must be zero for fixed Min/Max",
> -/*    ASL_MSG_INVALID_ACCESS_SIZE */        "Invalid AccessSize (Maximum is 4 - QWord access)",
> -/*    ASL_MSG_INVALID_ADDR_FLAGS */         "Invalid combination of Length and Min/Max fixed flags",
> -/*    ASL_MSG_NULL_DESCRIPTOR */            "Min/Max/Length/Gran are all zero, but no resource tag",
> -/*    ASL_MSG_UPPER_CASE */                 "Non-hex letters must be upper case",
> -/*    ASL_MSG_HID_LENGTH */                 "_HID string must be exactly 7 or 8 characters",
> -/*    ASL_MSG_NULL_STRING */                "Invalid zero-length (null) string",
> -/*    ASL_MSG_LEADING_ASTERISK */           "Invalid leading asterisk",
> -/*    ASL_MSG_RESERVED_NO_RETURN_VAL */     "Reserved method should not return a value",
> -/*    ASL_MSG_GPE_NAME_CONFLICT */          "Name conflicts with a previous GPE method",
> -/*    ASL_MSG_NO_REGION */                  "_REG has no corresponding Operation Region",
>
> -/* These messages are used by the data table compiler only */
> +/* Preprocessor */
> +
> +/*    ASL_MSG_DIRECTIVE_SYNTAX */           "Invalid directive syntax",
> +/*    ASL_MSG_ENDIF_MISMATCH */             "Mismatched #endif",
> +/*    ASL_MSG_ERROR_DIRECTIVE */            "#error",
> +/*    ASL_MSG_EXISTING_NAME */              "Name is already defined",
> +/*    ASL_MSG_INVALID_INVOCATION */         "Invalid macro invocation",
> +/*    ASL_MSG_MACRO_SYNTAX */               "Invalid macro syntax",
> +/*    ASL_MSG_TOO_MANY_ARGUMENTS */         "Too many macro arguments",
> +/*    ASL_MSG_UNKNOWN_DIRECTIVE */          "Unknown directive",
> +/*    ASL_MSG_UNKNOWN_PRAGMA */             "Unknown pragma",
> +
> +/* Table compiler */
>
> -/*    ASL_MSG_INVALID_FIELD_NAME */         "Invalid Field Name",
> -/*    ASL_MSG_INTEGER_SIZE */               "Integer too large for target",
> -/*    ASL_MSG_INVALID_HEX_INTEGER */        "Invalid hex integer constant",
>  /*    ASL_MSG_BUFFER_ELEMENT */             "Invalid element in buffer initializer list",
> -/*    ASL_MSG_RESERVED_VALUE */             "Reserved field must be zero",
> +/*    ASL_MSG_DIVIDE_BY_ZERO */             "Expression contains divide-by-zero",
>  /*    ASL_MSG_FLAG_VALUE */                 "Flag value is too large",
> -/*    ASL_MSG_ZERO_VALUE */                 "Value must be non-zero",
> -/*    ASL_MSG_UNKNOWN_TABLE */              "Unknown ACPI table signature",
> -/*    ASL_MSG_UNKNOWN_SUBTABLE */           "Unknown subtable type",
> +/*    ASL_MSG_INTEGER_SIZE */               "Integer too large for target",
> +/*    ASL_MSG_INVALID_EXPRESSION */         "Invalid expression",
> +/*    ASL_MSG_INVALID_FIELD_NAME */         "Invalid Field Name",
> +/*    ASL_MSG_INVALID_HEX_INTEGER */        "Invalid hex integer constant",
>  /*    ASL_MSG_OEM_TABLE */                  "OEM table - unknown contents",
> +/*    ASL_MSG_RESERVED_VALUE */             "Reserved field must be zero",
>  /*    ASL_MSG_UNKNOWN_LABEL */              "Label is undefined",
> -/*    ASL_MSG_INVALID_EXPRESSION */         "Invalid expression",
> -/*    ASL_MSG_DIVIDE_BY_ZERO */             "Expression contains divide-by-zero"
> +/*    ASL_MSG_UNKNOWN_SUBTABLE */           "Unknown subtable type",
> +/*    ASL_MSG_UNKNOWN_TABLE */              "Unknown ACPI table signature",
> +/*    ASL_MSG_ZERO_VALUE */                 "Value must be non-zero"
>  };
>
>
> diff --git a/src/acpica/source/compiler/aslopcodes.c b/src/acpica/source/compiler/aslopcodes.c
> index 9f84953..cddc945 100644
> --- a/src/acpica/source/compiler/aslopcodes.c
> +++ b/src/acpica/source/compiler/aslopcodes.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -130,6 +130,10 @@ OpcDoAccessAs (
>     ACPI_PARSE_OBJECT       *Op);
>
>  static void
> +OpcDoConnection (
> +    ACPI_PARSE_OBJECT       *Op);
> +
> +static void
>  OpcDoUnicode (
>     ACPI_PARSE_OBJECT       *Op);
>
> @@ -393,26 +397,128 @@ static void
>  OpcDoAccessAs (
>     ACPI_PARSE_OBJECT       *Op)
>  {
> -    ACPI_PARSE_OBJECT       *Next;
> +    ACPI_PARSE_OBJECT       *TypeOp;
> +    ACPI_PARSE_OBJECT       *AttribOp;
> +    ACPI_PARSE_OBJECT       *LengthOp;
> +    UINT8                   Attribute;
>
>
>     Op->Asl.AmlOpcodeLength = 1;
> -    Next = Op->Asl.Child;
> +    TypeOp = Op->Asl.Child;
>
>     /* First child is the access type */
>
> -    Next->Asl.AmlOpcode = AML_RAW_DATA_BYTE;
> -    Next->Asl.ParseOpcode = PARSEOP_RAW_DATA;
> +    TypeOp->Asl.AmlOpcode = AML_RAW_DATA_BYTE;
> +    TypeOp->Asl.ParseOpcode = PARSEOP_RAW_DATA;
>
>     /* Second child is the optional access attribute */
>
> -    Next = Next->Asl.Next;
> -    if (Next->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG)
> +    AttribOp = TypeOp->Asl.Next;
> +    if (AttribOp->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG)
> +    {
> +        AttribOp->Asl.Value.Integer = 0;
> +    }
> +    AttribOp->Asl.AmlOpcode = AML_RAW_DATA_BYTE;
> +    AttribOp->Asl.ParseOpcode = PARSEOP_RAW_DATA;
> +
> +    /* Only a few AccessAttributes support AccessLength */
> +
> +    Attribute = (UINT8) AttribOp->Asl.Value.Integer;
> +    if ((Attribute != AML_FIELD_ATTRIB_MULTIBYTE) &&
> +        (Attribute != AML_FIELD_ATTRIB_RAW_BYTES) &&
> +        (Attribute != AML_FIELD_ATTRIB_RAW_PROCESS))
> +    {
> +        return;
> +    }
> +
> +    Op->Asl.AmlOpcode = AML_FIELD_EXT_ACCESS_OP;
> +
> +    /*
> +     * Child of Attributes is the AccessLength (required for Multibyte,
> +     * RawBytes, RawProcess.)
> +     */
> +    LengthOp = AttribOp->Asl.Child;
> +    if (!LengthOp)
> +    {
> +        return;
> +    }
> +
> +    /* TBD: probably can remove */
> +
> +    if (LengthOp->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG)
> +    {
> +        LengthOp->Asl.Value.Integer = 16;
> +    }
> +
> +    LengthOp->Asl.AmlOpcode = AML_RAW_DATA_BYTE;
> +    LengthOp->Asl.ParseOpcode = PARSEOP_RAW_DATA;
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    OpcDoConnection
> + *
> + * PARAMETERS:  Op        - Parse node
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Implement the Connection ASL keyword.
> + *
> + ******************************************************************************/
> +
> +static void
> +OpcDoConnection (
> +    ACPI_PARSE_OBJECT       *Op)
> +{
> +    ASL_RESOURCE_NODE       *Rnode;
> +    ACPI_PARSE_OBJECT       *BufferOp;
> +    ACPI_PARSE_OBJECT       *BufferLengthOp;
> +    ACPI_PARSE_OBJECT       *BufferDataOp;
> +    UINT8                   State;
> +
> +
> +    Op->Asl.AmlOpcodeLength = 1;
> +
> +    if (Op->Asl.Child->Asl.AmlOpcode == AML_INT_NAMEPATH_OP)
> +    {
> +        return;
> +    }
> +
> +    BufferOp = Op->Asl.Child;
> +    BufferLengthOp = BufferOp->Asl.Child;
> +    BufferDataOp = BufferLengthOp->Asl.Next;
> +
> +    State = ACPI_RSTATE_NORMAL;
> +    Rnode = RsDoOneResourceDescriptor (BufferDataOp->Asl.Next, 0, &State);
> +    if (!Rnode)
>     {
> -        Next->Asl.Value.Integer = 0;
> +        return; /* error */
>     }
> -    Next->Asl.AmlOpcode = AML_RAW_DATA_BYTE;
> -    Next->Asl.ParseOpcode = PARSEOP_RAW_DATA;
> +
> +    /*
> +     * Transform the nodes into the following
> +     *
> +     * Op           -> AML_BUFFER_OP
> +     * First Child  -> BufferLength
> +     * Second Child -> Descriptor Buffer (raw byte data)
> +     */
> +    BufferOp->Asl.ParseOpcode         = PARSEOP_BUFFER;
> +    BufferOp->Asl.AmlOpcode           = AML_BUFFER_OP;
> +    BufferOp->Asl.CompileFlags        = NODE_AML_PACKAGE | NODE_IS_RESOURCE_DESC;
> +    UtSetParseOpName (BufferOp);
> +
> +    BufferLengthOp->Asl.ParseOpcode   = PARSEOP_INTEGER;
> +    BufferLengthOp->Asl.Value.Integer = Rnode->BufferLength;
> +    (void) OpcSetOptimalIntegerSize (BufferLengthOp);
> +    UtSetParseOpName (BufferLengthOp);
> +
> +    BufferDataOp->Asl.ParseOpcode         = PARSEOP_RAW_DATA;
> +    BufferDataOp->Asl.AmlOpcode           = AML_RAW_DATA_CHAIN;
> +    BufferDataOp->Asl.AmlOpcodeLength     = 0;
> +    BufferDataOp->Asl.AmlLength           = Rnode->BufferLength;
> +    BufferDataOp->Asl.Value.Buffer        = (UINT8 *) Rnode;
> +    UtSetParseOpName (BufferDataOp);
>  }
>
>
> @@ -617,7 +723,7 @@ OpcDoEisaId (
>
>  /*******************************************************************************
>  *
> - * FUNCTION:    OpcDoUiId
> + * FUNCTION:    OpcDoUuId
>  *
>  * PARAMETERS:  Op        - Parse node
>  *
> @@ -737,6 +843,11 @@ OpcGenerateAmlOpcode (
>         OpcDoAccessAs (Op);
>         break;
>
> +    case PARSEOP_CONNECTION:
> +
> +        OpcDoConnection (Op);
> +        break;
> +
>     case PARSEOP_EISAID:
>
>         OpcDoEisaId (Op);
> diff --git a/src/acpica/source/compiler/asloperands.c b/src/acpica/source/compiler/asloperands.c
> index e0280be..cc65d24 100644
> --- a/src/acpica/source/compiler/asloperands.c
> +++ b/src/acpica/source/compiler/asloperands.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -833,6 +833,7 @@ OpnDoPackage (
>
>     if ((PackageLengthOp->Asl.ParseOpcode == PARSEOP_INTEGER)      ||
>         (PackageLengthOp->Asl.ParseOpcode == PARSEOP_QWORDCONST)   ||
> +        (PackageLengthOp->Asl.ParseOpcode == PARSEOP_ZERO)         ||
>         (PackageLengthOp->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG))
>     {
>         if (!PackageLength)
> @@ -850,8 +851,11 @@ OpnDoPackage (
>      * If the PackageLength is a constant <= 255, we can change the
>      * AML opcode from VarPackage to a simple (ACPI 1.0) Package opcode.
>      */
> -    if ((Op->Asl.Child->Asl.ParseOpcode == PARSEOP_INTEGER) &&
> -        (Op->Asl.Child->Asl.Value.Integer <= 255))
> +    if (((Op->Asl.Child->Asl.ParseOpcode == PARSEOP_INTEGER) &&
> +            (Op->Asl.Child->Asl.Value.Integer <= 255))  ||
> +        (Op->Asl.Child->Asl.ParseOpcode == PARSEOP_ONE) ||
> +        (Op->Asl.Child->Asl.ParseOpcode == PARSEOP_ONES)||
> +        (Op->Asl.Child->Asl.ParseOpcode == PARSEOP_ZERO))
>     {
>         Op->Asl.AmlOpcode = AML_PACKAGE_OP;
>         Op->Asl.ParseOpcode = PARSEOP_PACKAGE;
> diff --git a/src/acpica/source/compiler/aslopt.c b/src/acpica/source/compiler/aslopt.c
> index 6ea357a..8080a70 100644
> --- a/src/acpica/source/compiler/aslopt.c
> +++ b/src/acpica/source/compiler/aslopt.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/compiler/aslpredef.c b/src/acpica/source/compiler/aslpredef.c
> index b72bca8..01c8eac 100644
> --- a/src/acpica/source/compiler/aslpredef.c
> +++ b/src/acpica/source/compiler/aslpredef.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -172,30 +172,49 @@ static const ACPI_PREDEFINED_INFO      ResourceNames[] = {
>     {{"_ATT",     0,      0}},
>     {{"_BAS",     0,      0}},
>     {{"_BM_",     0,      0}},
> +    {{"_DBT",     0,      0}},  /* Acpi 5.0 */
>     {{"_DEC",     0,      0}},
> +    {{"_DPL",     0,      0}},  /* Acpi 5.0 */
> +    {{"_DRS",     0,      0}},  /* Acpi 5.0 */
> +    {{"_END",     0,      0}},  /* Acpi 5.0 */
> +    {{"_FLC",     0,      0}},  /* Acpi 5.0 */
>     {{"_GRA",     0,      0}},
>     {{"_HE_",     0,      0}},
>     {{"_INT",     0,      0}},
> +    {{"_IOR",     0,      0}},  /* Acpi 5.0 */
>     {{"_LEN",     0,      0}},
> +    {{"_LIN",     0,      0}},  /* Acpi 5.0 */
>     {{"_LL_",     0,      0}},
>     {{"_MAF",     0,      0}},
>     {{"_MAX",     0,      0}},
>     {{"_MEM",     0,      0}},
>     {{"_MIF",     0,      0}},
>     {{"_MIN",     0,      0}},
> +    {{"_MOD",     0,      0}},  /* Acpi 5.0 */
>     {{"_MTP",     0,      0}},
> +    {{"_PAR",     0,      0}},  /* Acpi 5.0 */
> +    {{"_PHA",     0,      0}},  /* Acpi 5.0 */
> +    {{"_PIN",     0,      0}},  /* Acpi 5.0 */
> +    {{"_PPI",     0,      0}},  /* Acpi 5.0 */
> +    {{"_POL",     0,      0}},  /* Acpi 5.0 */
>     {{"_RBO",     0,      0}},
>     {{"_RBW",     0,      0}},
>     {{"_RNG",     0,      0}},
>     {{"_RT_",     0,      0}},  /* Acpi 3.0 */
>     {{"_RW_",     0,      0}},
> +    {{"_RXL",     0,      0}},  /* Acpi 5.0 */
>     {{"_SHR",     0,      0}},
>     {{"_SIZ",     0,      0}},
> +    {{"_SLV",     0,      0}},  /* Acpi 5.0 */
> +    {{"_SPE",     0,      0}},  /* Acpi 5.0 */
> +    {{"_STB",     0,      0}},  /* Acpi 5.0 */
>     {{"_TRA",     0,      0}},
>     {{"_TRS",     0,      0}},
>     {{"_TSF",     0,      0}},  /* Acpi 3.0 */
>     {{"_TTP",     0,      0}},
> +    {{"_TXL",     0,      0}},  /* Acpi 5.0 */
>     {{"_TYP",     0,      0}},
> +    {{"_VEN",     0,      0}},  /* Acpi 5.0 */
>     {{{0,0,0,0},  0,      0}}   /* Table terminator */
>  };
>
> @@ -730,6 +749,7 @@ ApCheckObjectType (
>         break;
>
>     case PARSEOP_PACKAGE:
> +    case PARSEOP_VAR_PACKAGE:
>         ReturnBtype = ACPI_RTYPE_PACKAGE;
>         break;
>
> @@ -889,4 +909,3 @@ ApGetExpectedTypes (
>         ThisRtype <<= 1;    /* Next Rtype */
>     }
>  }
> -
> diff --git a/src/acpica/source/compiler/aslresource.c b/src/acpica/source/compiler/aslresource.c
> index 116c083..9eb8baf 100644
> --- a/src/acpica/source/compiler/aslresource.c
> +++ b/src/acpica/source/compiler/aslresource.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -509,13 +509,14 @@ RsAllocateResourceNode (
>
>  /*******************************************************************************
>  *
> - * FUNCTION:    RsCreateBitField
> + * FUNCTION:    RsCreateResourceField
>  *
>  * PARAMETERS:  Op              - Resource field node
>  *              Name            - Name of the field (Used only to reference
>  *                                the field in the ASL, not in the AML)
>  *              ByteOffset      - Offset from the field start
>  *              BitOffset       - Additional bit offset
> + *              BitLength       - Number of bits in the field
>  *
>  * RETURN:      None, sets fields within the input node
>  *
> @@ -526,46 +527,20 @@ RsAllocateResourceNode (
>  ******************************************************************************/
>
>  void
> -RsCreateBitField (
> +RsCreateResourceField (
>     ACPI_PARSE_OBJECT       *Op,
>     char                    *Name,
>     UINT32                  ByteOffset,
> -    UINT32                  BitOffset)
> +    UINT32                  BitOffset,
> +    UINT32                  BitLength)
>  {
>
> -    Op->Asl.ExternalName      = Name;
> -    Op->Asl.Value.Integer     = ((UINT64) ByteOffset * 8) + BitOffset;
> -    Op->Asl.CompileFlags     |= (NODE_IS_RESOURCE_FIELD | NODE_IS_BIT_OFFSET);
> -}
> -
> -
> -/*******************************************************************************
> - *
> - * FUNCTION:    RsCreateByteField
> - *
> - * PARAMETERS:  Op              - Resource field node
> - *              Name            - Name of the field (Used only to reference
> - *                                the field in the ASL, not in the AML)
> - *              ByteOffset      - Offset from the field start
> - *
> - * RETURN:      None, sets fields within the input node
> - *
> - * DESCRIPTION: Utility function to generate a named byte field within a
> - *              resource descriptor.  Mark a node as 1) a field in a resource
> - *              descriptor, and 2) set the value to be a BYTE offset
> - *
> - ******************************************************************************/
> +    Op->Asl.ExternalName = Name;
> +    Op->Asl.CompileFlags |= NODE_IS_RESOURCE_FIELD;
>
> -void
> -RsCreateByteField (
> -    ACPI_PARSE_OBJECT       *Op,
> -    char                    *Name,
> -    UINT32                  ByteOffset)
> -{
>
> -    Op->Asl.ExternalName      = Name;
> -    Op->Asl.Value.Integer     = ByteOffset;
> -    Op->Asl.CompileFlags     |= NODE_IS_RESOURCE_FIELD;
> +    Op->Asl.Value.Tag.BitOffset = (ByteOffset * 8) + BitOffset;
> +    Op->Asl.Value.Tag.BitLength = BitLength;
>  }
>
>
> @@ -610,6 +585,29 @@ RsSetFlagBits (
>  }
>
>
> +void
> +RsSetFlagBits16 (
> +    UINT16                  *Flags,
> +    ACPI_PARSE_OBJECT       *Op,
> +    UINT8                   Position,
> +    UINT8                   DefaultBit)
> +{
> +
> +    if (Op->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG)
> +    {
> +        /* Use the default bit */
> +
> +        *Flags |= (DefaultBit << Position);
> +    }
> +    else
> +    {
> +        /* Use the bit specified in the initialization node */
> +
> +        *Flags |= (((UINT16) Op->Asl.Value.Integer) << Position);
> +    }
> +}
> +
> +
>  /*******************************************************************************
>  *
>  * FUNCTION:    RsCompleteNodeAndGetNext
> @@ -734,6 +732,11 @@ RsDoOneResourceDescriptor (
>                     CurrentByteOffset);
>         break;
>
> +    case PARSEOP_FIXEDDMA:
> +        Rnode = RsDoFixedDmaDescriptor (DescriptorTypeOp,
> +                    CurrentByteOffset);
> +        break;
> +
>     case PARSEOP_DWORDIO:
>         Rnode = RsDoDwordIoDescriptor (DescriptorTypeOp,
>                     CurrentByteOffset);
> @@ -917,6 +920,31 @@ RsDoOneResourceDescriptor (
>                     CurrentByteOffset);
>         break;
>
> +    case PARSEOP_GPIO_INT:
> +        Rnode = RsDoGpioIntDescriptor (DescriptorTypeOp,
> +                    CurrentByteOffset);
> +        break;
> +
> +    case PARSEOP_GPIO_IO:
> +        Rnode = RsDoGpioIoDescriptor (DescriptorTypeOp,
> +                    CurrentByteOffset);
> +        break;
> +
> +    case PARSEOP_I2C_SERIALBUS:
> +        Rnode = RsDoI2cSerialBusDescriptor (DescriptorTypeOp,
> +                    CurrentByteOffset);
> +        break;
> +
> +    case PARSEOP_SPI_SERIALBUS:
> +        Rnode = RsDoSpiSerialBusDescriptor (DescriptorTypeOp,
> +                    CurrentByteOffset);
> +        break;
> +
> +    case PARSEOP_UART_SERIALBUS:
> +        Rnode = RsDoUartSerialBusDescriptor (DescriptorTypeOp,
> +                    CurrentByteOffset);
> +        break;
> +
>     case PARSEOP_DEFAULT_ARG:
>         /* Just ignore any of these, they are used as fillers/placeholders */
>         break;
> @@ -1091,10 +1119,12 @@ RsDoResourceTemplate (
>     Op->Asl.ParseOpcode               = PARSEOP_BUFFER;
>     Op->Asl.AmlOpcode                 = AML_BUFFER_OP;
>     Op->Asl.CompileFlags              = NODE_AML_PACKAGE | NODE_IS_RESOURCE_DESC;
> +    UtSetParseOpName (Op);
>
>     BufferLengthOp->Asl.ParseOpcode   = PARSEOP_INTEGER;
>     BufferLengthOp->Asl.Value.Integer = CurrentByteOffset;
>     (void) OpcSetOptimalIntegerSize (BufferLengthOp);
> +    UtSetParseOpName (BufferLengthOp);
>
>     BufferOp->Asl.ParseOpcode         = PARSEOP_RAW_DATA;
>     BufferOp->Asl.AmlOpcode           = AML_RAW_DATA_CHAIN;
> @@ -1102,8 +1132,7 @@ RsDoResourceTemplate (
>     BufferOp->Asl.AmlLength           = CurrentByteOffset;
>     BufferOp->Asl.Value.Buffer        = (UINT8 *) HeadRnode.Next;
>     BufferOp->Asl.CompileFlags       |= NODE_IS_RESOURCE_DATA;
> +    UtSetParseOpName (BufferOp);
>
>     return;
>  }
> -
> -
> diff --git a/src/acpica/source/compiler/aslrestype1.c b/src/acpica/source/compiler/aslrestype1.c
> index 0d0e6cc..5b92151 100644
> --- a/src/acpica/source/compiler/aslrestype1.c
> +++ b/src/acpica/source/compiler/aslrestype1.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -251,7 +251,7 @@ RsDoMemory24Descriptor (
>         case 1: /* Min Address */
>
>             Descriptor->Memory24.Minimum = (UINT16) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_MINADDR,
> +            RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Minimum));
>             MinOp = InitializerOp;
>             break;
> @@ -259,7 +259,7 @@ RsDoMemory24Descriptor (
>         case 2: /* Max Address */
>
>             Descriptor->Memory24.Maximum = (UINT16) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_MAXADDR,
> +            RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Maximum));
>             MaxOp = InitializerOp;
>             break;
> @@ -267,14 +267,14 @@ RsDoMemory24Descriptor (
>         case 3: /* Alignment */
>
>             Descriptor->Memory24.Alignment = (UINT16) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_ALIGNMENT,
> +            RsCreateWordField (InitializerOp, ACPI_RESTAG_ALIGNMENT,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Alignment));
>             break;
>
>         case 4: /* Length */
>
>             Descriptor->Memory24.AddressLength = (UINT16) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_LENGTH,
> +            RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.AddressLength));
>             LengthOp = InitializerOp;
>             break;
> @@ -358,7 +358,7 @@ RsDoMemory32Descriptor (
>         case 1:  /* Min Address */
>
>             Descriptor->Memory32.Minimum = (UINT32) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_MINADDR,
> +            RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Minimum));
>             MinOp = InitializerOp;
>             break;
> @@ -366,7 +366,7 @@ RsDoMemory32Descriptor (
>         case 2: /* Max Address */
>
>             Descriptor->Memory32.Maximum = (UINT32) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_MAXADDR,
> +            RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Maximum));
>             MaxOp = InitializerOp;
>             break;
> @@ -374,7 +374,7 @@ RsDoMemory32Descriptor (
>         case 3: /* Alignment */
>
>             Descriptor->Memory32.Alignment = (UINT32) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_ALIGNMENT,
> +            RsCreateDwordField (InitializerOp, ACPI_RESTAG_ALIGNMENT,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Alignment));
>             AlignOp = InitializerOp;
>             break;
> @@ -382,7 +382,7 @@ RsDoMemory32Descriptor (
>         case 4: /* Length */
>
>             Descriptor->Memory32.AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_LENGTH,
> +            RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.AddressLength));
>             LengthOp = InitializerOp;
>             break;
> @@ -462,14 +462,14 @@ RsDoMemory32FixedDescriptor (
>         case 1: /* Address */
>
>             Descriptor->FixedMemory32.Address = (UINT32) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_BASEADDRESS,
> +            RsCreateDwordField (InitializerOp, ACPI_RESTAG_BASEADDRESS,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (FixedMemory32.Address));
>             break;
>
>         case 2: /* Length */
>
>             Descriptor->FixedMemory32.AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_LENGTH,
> +            RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (FixedMemory32.AddressLength));
>             break;
>
> @@ -525,6 +525,10 @@ RsDoStartDependentDescriptor (
>     PreviousRnode = Rnode;
>     Descriptor = Rnode->Buffer;
>
> +    /* Increment offset past StartDependent descriptor */
> +
> +    CurrentByteOffset += sizeof (AML_RESOURCE_START_DEPENDENT);
> +
>     /* Descriptor has priority byte */
>
>     Descriptor->StartDpf.DescriptorType  = ACPI_RESOURCE_NAME_START_DEPENDENT |
> @@ -617,6 +621,10 @@ RsDoStartDependentNoPriDescriptor (
>                                       ASL_RDESC_ST_DEPEND_SIZE;
>     PreviousRnode = Rnode;
>
> +    /* Increment offset past StartDependentNoPri descriptor */
> +
> +    CurrentByteOffset += sizeof (AML_RESOURCE_START_DEPENDENT_NOPRIO);
> +
>     /* Process all child initialization nodes */
>
>     State = ACPI_RSTATE_START_DEPENDENT;
> diff --git a/src/acpica/source/compiler/aslrestype1i.c b/src/acpica/source/compiler/aslrestype1i.c
> index 491ae2f..8335e8f 100644
> --- a/src/acpica/source/compiler/aslrestype1i.c
> +++ b/src/acpica/source/compiler/aslrestype1i.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -125,6 +125,7 @@
>  * This module contains the I/O-related small resource descriptors:
>  *
>  * DMA
> + * FixedDMA
>  * FixedIO
>  * IO
>  * IRQ
> @@ -174,8 +175,8 @@ RsDoDmaDescriptor (
>         case 0: /* DMA type */
>
>             RsSetFlagBits (&Descriptor->Dma.Flags, InitializerOp, 5, 0);
> -            RsCreateBitField (InitializerOp, ACPI_RESTAG_DMATYPE,
> -                CurrentByteOffset + ASL_RESDESC_OFFSET (Dma.Flags), 5);
> +            RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_DMATYPE,
> +                CurrentByteOffset + ASL_RESDESC_OFFSET (Dma.Flags), 5, 2);
>             break;
>
>         case 1: /* Bus Master */
> @@ -188,8 +189,8 @@ RsDoDmaDescriptor (
>         case 2: /* Xfer Type (transfer width) */
>
>             RsSetFlagBits (&Descriptor->Dma.Flags, InitializerOp, 0, 0);
> -            RsCreateBitField (InitializerOp, ACPI_RESTAG_XFERTYPE,
> -                CurrentByteOffset + ASL_RESDESC_OFFSET (Dma.Flags), 0);
> +            RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_XFERTYPE,
> +                CurrentByteOffset + ASL_RESDESC_OFFSET (Dma.Flags), 0, 2);
>             break;
>
>         case 3: /* Name */
> @@ -254,6 +255,81 @@ RsDoDmaDescriptor (
>
>  /*******************************************************************************
>  *
> + * FUNCTION:    RsDoFixedDmaDescriptor
> + *
> + * PARAMETERS:  Op                  - Parent resource descriptor parse node
> + *              CurrentByteOffset   - Offset into the resource template AML
> + *                                    buffer (to track references to the desc)
> + *
> + * RETURN:      Completed resource node
> + *
> + * DESCRIPTION: Construct a short "FixedDMA" descriptor
> + *
> + ******************************************************************************/
> +
> +ASL_RESOURCE_NODE *
> +RsDoFixedDmaDescriptor (
> +    ACPI_PARSE_OBJECT       *Op,
> +    UINT32                  CurrentByteOffset)
> +{
> +    AML_RESOURCE            *Descriptor;
> +    ACPI_PARSE_OBJECT       *InitializerOp;
> +    ASL_RESOURCE_NODE       *Rnode;
> +    UINT32                  i;
> +
> +
> +    InitializerOp = Op->Asl.Child;
> +    Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_FIXED_DMA));
> +
> +    Descriptor = Rnode->Buffer;
> +    Descriptor->FixedDma.DescriptorType =
> +        ACPI_RESOURCE_NAME_FIXED_DMA | ASL_RDESC_FIXED_DMA_SIZE;
> +
> +    /* Process all child initialization nodes */
> +
> +    for (i = 0; InitializerOp; i++)
> +    {
> +        switch (i)
> +        {
> +        case 0: /* DMA Request Lines [WORD] (_DMA) */
> +
> +            Descriptor->FixedDma.RequestLines = (UINT16) InitializerOp->Asl.Value.Integer;
> +            RsCreateWordField (InitializerOp, ACPI_RESTAG_DMA,
> +                CurrentByteOffset + ASL_RESDESC_OFFSET (FixedDma.RequestLines));
> +            break;
> +
> +        case 1: /* DMA Channel [WORD] (_TYP) */
> +
> +            Descriptor->FixedDma.Channels = (UINT16) InitializerOp->Asl.Value.Integer;
> +            RsCreateWordField (InitializerOp, ACPI_RESTAG_DMATYPE,
> +                CurrentByteOffset + ASL_RESDESC_OFFSET (FixedDma.Channels));
> +            break;
> +
> +        case 2: /* Transfer Width [BYTE] (_SIZ) */
> +
> +            Descriptor->FixedDma.Width = (UINT8) InitializerOp->Asl.Value.Integer;
> +            RsCreateByteField (InitializerOp, ACPI_RESTAG_XFERTYPE,
> +                CurrentByteOffset + ASL_RESDESC_OFFSET (FixedDma.Width));
> +            break;
> +
> +        case 3: /* Descriptor Name (optional) */
> +
> +            UtAttachNamepathToOwner (Op, InitializerOp);
> +            break;
> +
> +        default:    /* Ignore any extra nodes */
> +            break;
> +        }
> +
> +        InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
> +    }
> +
> +    return (Rnode);
> +}
> +
> +
> +/*******************************************************************************
> + *
>  * FUNCTION:    RsDoFixedIoDescriptor
>  *
>  * PARAMETERS:  Op                  - Parent resource descriptor parse node
> @@ -295,7 +371,7 @@ RsDoFixedIoDescriptor (
>
>             Descriptor->FixedIo.Address =
>                 (UINT16) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_BASEADDRESS,
> +            RsCreateWordField (InitializerOp, ACPI_RESTAG_BASEADDRESS,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (FixedIo.Address));
>             AddressOp = InitializerOp;
>             break;
> @@ -386,7 +462,7 @@ RsDoIoDescriptor (
>
>             Descriptor->Io.Minimum =
>                 (UINT16) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_MINADDR,
> +            RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Io.Minimum));
>             MinOp = InitializerOp;
>             break;
> @@ -395,7 +471,7 @@ RsDoIoDescriptor (
>
>             Descriptor->Io.Maximum =
>                 (UINT16) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_MAXADDR,
> +            RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Io.Maximum));
>             MaxOp = InitializerOp;
>             break;
> @@ -552,7 +628,7 @@ RsDoIrqDescriptor (
>
>                 /* Create a named field at the start of the list */
>
> -                RsCreateByteField (InitializerOp, ACPI_RESTAG_INTERRUPT,
> +                RsCreateWordField (InitializerOp, ACPI_RESTAG_INTERRUPT,
>                     CurrentByteOffset + ASL_RESDESC_OFFSET (Irq.IrqMask));
>             }
>             break;
> @@ -652,7 +728,7 @@ RsDoIrqNoFlagsDescriptor (
>
>                 /* Create a named field at the start of the list */
>
> -                RsCreateByteField (InitializerOp, ACPI_RESTAG_INTERRUPT,
> +                RsCreateWordField (InitializerOp, ACPI_RESTAG_INTERRUPT,
>                     CurrentByteOffset + ASL_RESDESC_OFFSET (Irq.IrqMask));
>             }
>             break;
> diff --git a/src/acpica/source/compiler/aslrestype2.c b/src/acpica/source/compiler/aslrestype2.c
> index 7b3d869..f0de854 100644
> --- a/src/acpica/source/compiler/aslrestype2.c
> +++ b/src/acpica/source/compiler/aslrestype2.c
> @@ -1,4 +1,3 @@
> -
>  /******************************************************************************
>  *
>  * Module Name: aslrestype2 - Miscellaneous Large resource descriptors
> @@ -9,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -192,7 +191,7 @@ RsDoGeneralRegisterDescriptor (
>         case 3: /* Register Address */
>
>             Descriptor->GenericReg.Address = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_ADDRESS,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_ADDRESS,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (GenericReg.Address));
>             break;
>
> @@ -426,7 +425,7 @@ RsDoInterruptDescriptor (
>
>                 /* Create a named field at the start of the list */
>
> -                RsCreateByteField (InitializerOp, ACPI_RESTAG_INTERRUPT,
> +                RsCreateDwordField (InitializerOp, ACPI_RESTAG_INTERRUPT,
>                     CurrentByteOffset +
>                     ASL_RESDESC_OFFSET (ExtendedIrq.Interrupts[0]));
>             }
> diff --git a/src/acpica/source/compiler/aslrestype2d.c b/src/acpica/source/compiler/aslrestype2d.c
> index dc2482d..1ca0f2d 100644
> --- a/src/acpica/source/compiler/aslrestype2d.c
> +++ b/src/acpica/source/compiler/aslrestype2d.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -216,15 +216,15 @@ RsDoDwordIoDescriptor (
>         case 4: /* Range Type */
>
>             RsSetFlagBits (&Descriptor->Address32.SpecificFlags, InitializerOp, 0, 3);
> -            RsCreateBitField (InitializerOp, ACPI_RESTAG_RANGETYPE,
> -                CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 0);
> +            RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_RANGETYPE,
> +                CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 0, 2);
>             break;
>
>         case 5: /* Address Granularity */
>
>             Descriptor->Address32.Granularity =
>                 (UINT32) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_GRANULARITY,
> +            RsCreateDwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity));
>             GranOp = InitializerOp;
>             break;
> @@ -233,7 +233,7 @@ RsDoDwordIoDescriptor (
>
>             Descriptor->Address32.Minimum =
>                 (UINT32) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_MINADDR,
> +            RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum));
>             MinOp = InitializerOp;
>             break;
> @@ -242,7 +242,7 @@ RsDoDwordIoDescriptor (
>
>             Descriptor->Address32.Maximum =
>                 (UINT32) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_MAXADDR,
> +            RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum));
>             MaxOp = InitializerOp;
>             break;
> @@ -251,7 +251,7 @@ RsDoDwordIoDescriptor (
>
>             Descriptor->Address32.TranslationOffset =
>                 (UINT32) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_TRANSLATION,
> +            RsCreateDwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset));
>             break;
>
> @@ -259,7 +259,7 @@ RsDoDwordIoDescriptor (
>
>             Descriptor->Address32.AddressLength =
>                 (UINT32) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_LENGTH,
> +            RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength));
>             LengthOp = InitializerOp;
>             break;
> @@ -448,8 +448,8 @@ RsDoDwordMemoryDescriptor (
>         case 4: /* Memory Type */
>
>             RsSetFlagBits (&Descriptor->Address32.SpecificFlags, InitializerOp, 1, 0);
> -            RsCreateBitField (InitializerOp, ACPI_RESTAG_MEMTYPE,
> -                CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 1);
> +            RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_MEMTYPE,
> +                CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 1, 2);
>             break;
>
>         case 5: /* Read/Write Type */
> @@ -463,7 +463,7 @@ RsDoDwordMemoryDescriptor (
>
>             Descriptor->Address32.Granularity =
>                 (UINT32) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_GRANULARITY,
> +            RsCreateDwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity));
>             GranOp = InitializerOp;
>             break;
> @@ -472,7 +472,7 @@ RsDoDwordMemoryDescriptor (
>
>             Descriptor->Address32.Minimum =
>                 (UINT32) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_MINADDR,
> +            RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum));
>             MinOp = InitializerOp;
>             break;
> @@ -481,7 +481,7 @@ RsDoDwordMemoryDescriptor (
>
>             Descriptor->Address32.Maximum =
>                 (UINT32) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_MAXADDR,
> +            RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum));
>             MaxOp = InitializerOp;
>             break;
> @@ -490,7 +490,7 @@ RsDoDwordMemoryDescriptor (
>
>             Descriptor->Address32.TranslationOffset =
>                 (UINT32) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_TRANSLATION,
> +            RsCreateDwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset));
>             break;
>
> @@ -498,7 +498,7 @@ RsDoDwordMemoryDescriptor (
>
>             Descriptor->Address32.AddressLength =
>                 (UINT32) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_LENGTH,
> +            RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength));
>             LengthOp = InitializerOp;
>             break;
> @@ -560,8 +560,8 @@ RsDoDwordMemoryDescriptor (
>         case 14: /* Address Range */
>
>             RsSetFlagBits (&Descriptor->Address32.SpecificFlags, InitializerOp, 3, 0);
> -            RsCreateBitField (InitializerOp, ACPI_RESTAG_MEMATTRIBUTES,
> -                CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 3);
> +            RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_MEMATTRIBUTES,
> +                CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 3, 2);
>             break;
>
>         case 15: /* Type */
> @@ -695,7 +695,7 @@ RsDoDwordSpaceDescriptor (
>
>             Descriptor->Address32.Granularity =
>                 (UINT32) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_GRANULARITY,
> +            RsCreateDwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity));
>             GranOp = InitializerOp;
>             break;
> @@ -704,7 +704,7 @@ RsDoDwordSpaceDescriptor (
>
>             Descriptor->Address32.Minimum =
>                 (UINT32) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_MINADDR,
> +            RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum));
>             MinOp = InitializerOp;
>             break;
> @@ -713,7 +713,7 @@ RsDoDwordSpaceDescriptor (
>
>             Descriptor->Address32.Maximum =
>                 (UINT32) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_MAXADDR,
> +            RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum));
>             MaxOp = InitializerOp;
>             break;
> @@ -722,7 +722,7 @@ RsDoDwordSpaceDescriptor (
>
>             Descriptor->Address32.TranslationOffset =
>                 (UINT32) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_TRANSLATION,
> +            RsCreateDwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset));
>             break;
>
> @@ -730,7 +730,7 @@ RsDoDwordSpaceDescriptor (
>
>             Descriptor->Address32.AddressLength =
>                 (UINT32) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_LENGTH,
> +            RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength));
>             LengthOp = InitializerOp;
>             break;
> diff --git a/src/acpica/source/compiler/aslrestype2e.c b/src/acpica/source/compiler/aslrestype2e.c
> index 89da933..e5fff47 100644
> --- a/src/acpica/source/compiler/aslrestype2e.c
> +++ b/src/acpica/source/compiler/aslrestype2e.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -208,14 +208,14 @@ RsDoExtendedIoDescriptor (
>         case 4: /* Range Type */
>
>             RsSetFlagBits (&Descriptor->ExtAddress64.SpecificFlags, InitializerOp, 0, 3);
> -            RsCreateBitField (InitializerOp, ACPI_RESTAG_RANGETYPE,
> -                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.SpecificFlags), 0);
> +            RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_RANGETYPE,
> +                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.SpecificFlags), 0, 2);
>             break;
>
>         case 5: /* Address Granularity */
>
>             Descriptor->ExtAddress64.Granularity = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_GRANULARITY,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Granularity));
>             GranOp = InitializerOp;
>            break;
> @@ -223,7 +223,7 @@ RsDoExtendedIoDescriptor (
>         case 6: /* Address Min */
>
>             Descriptor->ExtAddress64.Minimum = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_MINADDR,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Minimum));
>             MinOp = InitializerOp;
>             break;
> @@ -231,7 +231,7 @@ RsDoExtendedIoDescriptor (
>         case 7: /* Address Max */
>
>             Descriptor->ExtAddress64.Maximum = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_MAXADDR,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Maximum));
>             MaxOp = InitializerOp;
>             break;
> @@ -239,14 +239,14 @@ RsDoExtendedIoDescriptor (
>         case 8: /* Translation Offset */
>
>             Descriptor->ExtAddress64.TranslationOffset = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_TRANSLATION,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TranslationOffset));
>             break;
>
>         case 9: /* Address Length */
>
>             Descriptor->ExtAddress64.AddressLength = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_LENGTH,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.AddressLength));
>             LengthOp = InitializerOp;
>             break;
> @@ -254,7 +254,7 @@ RsDoExtendedIoDescriptor (
>         case 10: /* Type-Specific Attributes */
>
>             Descriptor->ExtAddress64.TypeSpecific = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_TYPESPECIFICATTRIBUTES,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_TYPESPECIFICATTRIBUTES,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TypeSpecific));
>             break;
>
> @@ -381,8 +381,8 @@ RsDoExtendedMemoryDescriptor (
>         case 4: /* Memory Type */
>
>             RsSetFlagBits (&Descriptor->ExtAddress64.SpecificFlags, InitializerOp, 1, 0);
> -            RsCreateBitField (InitializerOp, ACPI_RESTAG_MEMTYPE,
> -                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.SpecificFlags), 1);
> +            RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_MEMTYPE,
> +                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.SpecificFlags), 1, 2);
>             break;
>
>         case 5: /* Read/Write Type */
> @@ -395,7 +395,7 @@ RsDoExtendedMemoryDescriptor (
>         case 6: /* Address Granularity */
>
>             Descriptor->ExtAddress64.Granularity = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_GRANULARITY,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Granularity));
>             GranOp = InitializerOp;
>             break;
> @@ -403,7 +403,7 @@ RsDoExtendedMemoryDescriptor (
>         case 7: /* Min Address */
>
>             Descriptor->ExtAddress64.Minimum = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_MINADDR,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Minimum));
>             MinOp = InitializerOp;
>             break;
> @@ -411,7 +411,7 @@ RsDoExtendedMemoryDescriptor (
>         case 8: /* Max Address */
>
>             Descriptor->ExtAddress64.Maximum = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_MAXADDR,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Maximum));
>             MaxOp = InitializerOp;
>             break;
> @@ -419,14 +419,14 @@ RsDoExtendedMemoryDescriptor (
>         case 9: /* Translation Offset */
>
>             Descriptor->ExtAddress64.TranslationOffset = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_TRANSLATION,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TranslationOffset));
>             break;
>
>         case 10: /* Address Length */
>
>             Descriptor->ExtAddress64.AddressLength = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_LENGTH,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.AddressLength));
>             LengthOp = InitializerOp;
>             break;
> @@ -434,7 +434,7 @@ RsDoExtendedMemoryDescriptor (
>         case 11: /* Type-Specific Attributes */
>
>             Descriptor->ExtAddress64.TypeSpecific = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_TYPESPECIFICATTRIBUTES,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_TYPESPECIFICATTRIBUTES,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TypeSpecific));
>             break;
>
> @@ -447,8 +447,8 @@ RsDoExtendedMemoryDescriptor (
>         case 13: /* Address Range */
>
>             RsSetFlagBits (&Descriptor->ExtAddress64.SpecificFlags, InitializerOp, 3, 0);
> -            RsCreateBitField (InitializerOp, ACPI_RESTAG_MEMATTRIBUTES,
> -                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.SpecificFlags), 3);
> +            RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_MEMATTRIBUTES,
> +                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.SpecificFlags), 3, 2);
>             break;
>
>         case 14: /* Type */
> @@ -573,7 +573,7 @@ RsDoExtendedSpaceDescriptor (
>         case 6: /* Address Granularity */
>
>             Descriptor->ExtAddress64.Granularity = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_GRANULARITY,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Granularity));
>             GranOp = InitializerOp;
>             break;
> @@ -581,7 +581,7 @@ RsDoExtendedSpaceDescriptor (
>         case 7: /* Min Address */
>
>             Descriptor->ExtAddress64.Minimum = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_MINADDR,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Minimum));
>             MinOp = InitializerOp;
>             break;
> @@ -589,7 +589,7 @@ RsDoExtendedSpaceDescriptor (
>         case 8: /* Max Address */
>
>             Descriptor->ExtAddress64.Maximum = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_MAXADDR,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Maximum));
>             MaxOp = InitializerOp;
>             break;
> @@ -597,14 +597,14 @@ RsDoExtendedSpaceDescriptor (
>         case 9: /* Translation Offset */
>
>             Descriptor->ExtAddress64.TranslationOffset = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_TRANSLATION,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TranslationOffset));
>             break;
>
>         case 10: /* Address Length */
>
>             Descriptor->ExtAddress64.AddressLength = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_LENGTH,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.AddressLength));
>             LengthOp = InitializerOp;
>             break;
> @@ -612,7 +612,7 @@ RsDoExtendedSpaceDescriptor (
>         case 11: /* Type-Specific Attributes */
>
>             Descriptor->ExtAddress64.TypeSpecific = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_TYPESPECIFICATTRIBUTES,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_TYPESPECIFICATTRIBUTES,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TypeSpecific));
>             break;
>
> diff --git a/src/acpica/source/compiler/aslrestype2q.c b/src/acpica/source/compiler/aslrestype2q.c
> index e652890..65c242a 100644
> --- a/src/acpica/source/compiler/aslrestype2q.c
> +++ b/src/acpica/source/compiler/aslrestype2q.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -216,14 +216,14 @@ RsDoQwordIoDescriptor (
>         case 4: /* Range Type */
>
>             RsSetFlagBits (&Descriptor->Address64.SpecificFlags, InitializerOp, 0, 3);
> -            RsCreateBitField (InitializerOp, ACPI_RESTAG_RANGETYPE,
> -                CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.SpecificFlags), 0);
> +            RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_RANGETYPE,
> +                CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.SpecificFlags), 0, 2);
>             break;
>
>         case 5: /* Address Granularity */
>
>             Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_GRANULARITY,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity));
>             GranOp = InitializerOp;
>             break;
> @@ -231,7 +231,7 @@ RsDoQwordIoDescriptor (
>         case 6: /* Address Min */
>
>             Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_MINADDR,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum));
>             MinOp = InitializerOp;
>             break;
> @@ -239,7 +239,7 @@ RsDoQwordIoDescriptor (
>         case 7: /* Address Max */
>
>             Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_MAXADDR,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum));
>             MaxOp = InitializerOp;
>             break;
> @@ -254,7 +254,7 @@ RsDoQwordIoDescriptor (
>         case 9: /* Address Length */
>
>             Descriptor->Address64.AddressLength = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_LENGTH,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength));
>             LengthOp = InitializerOp;
>             break;
> @@ -438,8 +438,8 @@ RsDoQwordMemoryDescriptor (
>         case 4: /* Memory Type */
>
>             RsSetFlagBits (&Descriptor->Address64.SpecificFlags, InitializerOp, 1, 0);
> -            RsCreateBitField (InitializerOp, ACPI_RESTAG_MEMTYPE,
> -                CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.SpecificFlags), 1);
> +            RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_MEMTYPE,
> +                CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.SpecificFlags), 1, 2);
>             break;
>
>         case 5: /* Read/Write Type */
> @@ -452,7 +452,7 @@ RsDoQwordMemoryDescriptor (
>         case 6: /* Address Granularity */
>
>             Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_GRANULARITY,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity));
>             GranOp = InitializerOp;
>             break;
> @@ -460,7 +460,7 @@ RsDoQwordMemoryDescriptor (
>         case 7: /* Min Address */
>
>             Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_MINADDR,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum));
>             MinOp = InitializerOp;
>             break;
> @@ -468,7 +468,7 @@ RsDoQwordMemoryDescriptor (
>         case 8: /* Max Address */
>
>             Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_MAXADDR,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum));
>             MaxOp = InitializerOp;
>             break;
> @@ -476,14 +476,14 @@ RsDoQwordMemoryDescriptor (
>         case 9: /* Translation Offset */
>
>             Descriptor->Address64.TranslationOffset = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_TRANSLATION,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.TranslationOffset));
>             break;
>
>         case 10: /* Address Length */
>
>             Descriptor->Address64.AddressLength = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_LENGTH,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength));
>             LengthOp = InitializerOp;
>             break;
> @@ -545,8 +545,8 @@ RsDoQwordMemoryDescriptor (
>         case 14: /* Address Range */
>
>             RsSetFlagBits (&Descriptor->Address64.SpecificFlags, InitializerOp, 3, 0);
> -            RsCreateBitField (InitializerOp, ACPI_RESTAG_MEMATTRIBUTES,
> -                CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.SpecificFlags), 3);
> +            RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_MEMATTRIBUTES,
> +                CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.SpecificFlags), 3, 2);
>             break;
>
>         case 15: /* Type */
> @@ -679,7 +679,7 @@ RsDoQwordSpaceDescriptor (
>         case 6: /* Address Granularity */
>
>             Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_GRANULARITY,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity));
>             GranOp = InitializerOp;
>             break;
> @@ -687,7 +687,7 @@ RsDoQwordSpaceDescriptor (
>         case 7: /* Min Address */
>
>             Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_MINADDR,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum));
>             MinOp = InitializerOp;
>             break;
> @@ -695,7 +695,7 @@ RsDoQwordSpaceDescriptor (
>         case 8: /* Max Address */
>
>             Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_MAXADDR,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum));
>             MaxOp = InitializerOp;
>             break;
> @@ -703,14 +703,14 @@ RsDoQwordSpaceDescriptor (
>         case 9: /* Translation Offset */
>
>             Descriptor->Address64.TranslationOffset = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_TRANSLATION,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.TranslationOffset));
>             break;
>
>         case 10: /* Address Length */
>
>             Descriptor->Address64.AddressLength = InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_LENGTH,
> +            RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength));
>             LengthOp = InitializerOp;
>             break;
> diff --git a/src/acpica/source/compiler/aslrestype2w.c b/src/acpica/source/compiler/aslrestype2w.c
> index c9d98fe..79d7bcc 100644
> --- a/src/acpica/source/compiler/aslrestype2w.c
> +++ b/src/acpica/source/compiler/aslrestype2w.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -216,14 +216,14 @@ RsDoWordIoDescriptor (
>         case 4: /* Range Type */
>
>             RsSetFlagBits (&Descriptor->Address16.SpecificFlags, InitializerOp, 0, 3);
> -            RsCreateBitField (InitializerOp, ACPI_RESTAG_RANGETYPE,
> -                CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.SpecificFlags), 0);
> +            RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_RANGETYPE,
> +                CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.SpecificFlags), 0, 2);
>             break;
>
>         case 5: /* Address Granularity */
>
>             Descriptor->Address16.Granularity = (UINT16) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_GRANULARITY,
> +            RsCreateWordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Granularity));
>             GranOp = InitializerOp;
>             break;
> @@ -231,7 +231,7 @@ RsDoWordIoDescriptor (
>         case 6: /* Address Min */
>
>             Descriptor->Address16.Minimum = (UINT16) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_MINADDR,
> +            RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Minimum));
>             MinOp = InitializerOp;
>             break;
> @@ -239,7 +239,7 @@ RsDoWordIoDescriptor (
>         case 7: /* Address Max */
>
>             Descriptor->Address16.Maximum = (UINT16) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_MAXADDR,
> +            RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Maximum));
>             MaxOp = InitializerOp;
>             break;
> @@ -247,14 +247,14 @@ RsDoWordIoDescriptor (
>         case 8: /* Translation Offset */
>
>             Descriptor->Address16.TranslationOffset = (UINT16) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_TRANSLATION,
> +            RsCreateWordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.TranslationOffset));
>             break;
>
>         case 9: /* Address Length */
>
>             Descriptor->Address16.AddressLength = (UINT16) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_LENGTH,
> +            RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH,
>                  CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.AddressLength));
>             LengthOp = InitializerOp;
>             break;
> @@ -439,7 +439,7 @@ RsDoWordBusNumberDescriptor (
>
>             Descriptor->Address16.Granularity =
>                 (UINT16) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_GRANULARITY,
> +            RsCreateWordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Granularity));
>             GranOp = InitializerOp;
>             break;
> @@ -448,7 +448,7 @@ RsDoWordBusNumberDescriptor (
>
>             Descriptor->Address16.Minimum =
>                 (UINT16) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_MINADDR,
> +            RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Minimum));
>             MinOp = InitializerOp;
>             break;
> @@ -457,7 +457,7 @@ RsDoWordBusNumberDescriptor (
>
>             Descriptor->Address16.Maximum =
>                 (UINT16) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_MAXADDR,
> +            RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Maximum));
>             MaxOp = InitializerOp;
>             break;
> @@ -466,7 +466,7 @@ RsDoWordBusNumberDescriptor (
>
>             Descriptor->Address16.TranslationOffset =
>                 (UINT16) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_TRANSLATION,
> +            RsCreateWordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.TranslationOffset));
>             break;
>
> @@ -474,7 +474,7 @@ RsDoWordBusNumberDescriptor (
>
>             Descriptor->Address16.AddressLength =
>                 (UINT16) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_LENGTH,
> +            RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH,
>                  CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.AddressLength));
>             LengthOp = InitializerOp;
>             break;
> @@ -656,7 +656,7 @@ RsDoWordSpaceDescriptor (
>
>             Descriptor->Address16.Granularity =
>                 (UINT16) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_GRANULARITY,
> +            RsCreateWordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Granularity));
>             GranOp = InitializerOp;
>             break;
> @@ -665,7 +665,7 @@ RsDoWordSpaceDescriptor (
>
>             Descriptor->Address16.Minimum =
>                 (UINT16) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_MINADDR,
> +            RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Minimum));
>             MinOp = InitializerOp;
>             break;
> @@ -674,7 +674,7 @@ RsDoWordSpaceDescriptor (
>
>             Descriptor->Address16.Maximum =
>                 (UINT16) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_MAXADDR,
> +            RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Maximum));
>             MaxOp = InitializerOp;
>             break;
> @@ -683,7 +683,7 @@ RsDoWordSpaceDescriptor (
>
>             Descriptor->Address16.TranslationOffset =
>                 (UINT16) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_TRANSLATION,
> +            RsCreateWordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.TranslationOffset));
>             break;
>
> @@ -691,7 +691,7 @@ RsDoWordSpaceDescriptor (
>
>             Descriptor->Address16.AddressLength =
>                 (UINT16) InitializerOp->Asl.Value.Integer;
> -            RsCreateByteField (InitializerOp, ACPI_RESTAG_LENGTH,
> +            RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH,
>                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.AddressLength));
>             LengthOp = InitializerOp;
>             break;
> diff --git a/src/acpica/source/compiler/aslstartup.c b/src/acpica/source/compiler/aslstartup.c
> index 6c3ba54..49b25d9 100644
> --- a/src/acpica/source/compiler/aslstartup.c
> +++ b/src/acpica/source/compiler/aslstartup.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -167,6 +167,8 @@ AslInitializeGlobals (
>     Gbl_LogicalLineNumber = 1;
>     Gbl_CurrentLineOffset = 0;
>     Gbl_InputFieldCount = 0;
> +    Gbl_InputByteCount = 0;
> +    Gbl_NsLookupCount = 0;
>     Gbl_LineBufPtr = Gbl_CurrentLineBuffer;
>
>     Gbl_ErrorLog = NULL;
> @@ -174,17 +176,26 @@ AslInitializeGlobals (
>     Gbl_Signature = NULL;
>     Gbl_FileType = 0;
>
> +    TotalExecutableOpcodes = 0;
> +    TotalNamedObjects = 0;
> +    TotalKeywords = 0;
> +    TotalParseNodes = 0;
> +    TotalMethods = 0;
> +    TotalAllocations = 0;
> +    TotalAllocated = 0;
> +    TotalFolds = 0;
> +
>     AslGbl_NextEvent = 0;
>     for (i = 0; i < ASL_NUM_REPORT_LEVELS; i++)
>     {
>         Gbl_ExceptionCount[i] = 0;
>     }
>
> -    Gbl_Files[ASL_FILE_AML_OUTPUT].Filename = NULL;
> -    Gbl_Files[ASL_FILE_AML_OUTPUT].Handle = NULL;
> -
> -    Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename = NULL;
> -    Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Handle = NULL;
> +    for (i = ASL_FILE_INPUT; i <= ASL_MAX_FILE_TYPE; i++)
> +    {
> +        Gbl_Files[i].Handle = NULL;
> +        Gbl_Files[i].Filename = NULL;
> +    }
>  }
>
>
> @@ -354,11 +365,12 @@ AslDoOneFile (
>     ACPI_STATUS             Status;
>
>
> -    Gbl_Files[ASL_FILE_INPUT].Filename = Filename;
> -
> -    /* Re-initialize "some" compiler globals */
> +    /* Re-initialize "some" compiler/preprocessor globals */
>
>     AslInitializeGlobals ();
> +    PrInitializeGlobals ();
> +
> +    Gbl_Files[ASL_FILE_INPUT].Filename = Filename;
>
>     /*
>      * AML Disassembly (Optional)
> @@ -464,17 +476,33 @@ AslDoOneFile (
>     case ASL_INPUT_TYPE_ASCII_DATA:
>
>         Status = DtDoCompile ();
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
>
>         if (Gbl_Signature)
>         {
>             ACPI_FREE (Gbl_Signature);
>             Gbl_Signature = NULL;
>         }
> +
> +        /* Check if any errors occurred during compile */
> +
> +        Status = AslCheckForErrorExit ();
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +
> +        /* Cleanup (for next source file) and exit */
> +
>         AeClearErrorLog ();
> +        PrTerminatePreprocessor ();
>         return (Status);
>
>     /*
> -     * ASL Compilation (Optional)
> +     * ASL Compilation
>      */
>     case ASL_INPUT_TYPE_ASCII_ASL:
>
> @@ -486,19 +514,21 @@ AslDoOneFile (
>             return (Status);
>         }
>
> -        Status = CmDoCompile ();
> +        (void) CmDoCompile ();
>         (void) AcpiTerminate ();
>
> -        /*
> -         * Return non-zero exit code if there have been errors, unless the
> -         * global ignore error flag has been set
> -         */
> -        if ((Gbl_ExceptionCount[ASL_ERROR] > 0) && (!Gbl_IgnoreErrors))
> +        /* Check if any errors occurred during compile */
> +
> +        Status = AslCheckForErrorExit ();
> +        if (ACPI_FAILURE (Status))
>         {
> -            return (AE_ERROR);
> +            return (Status);
>         }
>
> +        /* Cleanup (for next source file) and exit */
> +
>         AeClearErrorLog ();
> +        PrTerminatePreprocessor ();
>         return (AE_OK);
>
>     case ASL_INPUT_TYPE_BINARY:
> @@ -583,3 +613,47 @@ AslDoOnePathname (
>     return (Status);
>  }
>
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AslCheckForErrorExit
> + *
> + * PARAMETERS:  None. Examines global exception count array
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Determine if compiler should abort with error status
> + *
> + ******************************************************************************/
> +
> +ACPI_STATUS
> +AslCheckForErrorExit (
> +    void)
> +{
> +
> +    /*
> +     * Return non-zero exit code if there have been errors, unless the
> +     * global ignore error flag has been set
> +     */
> +    if (!Gbl_IgnoreErrors)
> +    {
> +        if (Gbl_ExceptionCount[ASL_ERROR] > 0)
> +        {
> +            return (AE_ERROR);
> +        }
> +
> +        /* Optionally treat warnings as errors */
> +
> +        if (Gbl_WarningsAsErrors)
> +        {
> +            if ((Gbl_ExceptionCount[ASL_WARNING] > 0)  ||
> +                (Gbl_ExceptionCount[ASL_WARNING2] > 0) ||
> +                (Gbl_ExceptionCount[ASL_WARNING3] > 0))
> +            {
> +                return (AE_ERROR);
> +            }
> +        }
> +    }
> +
> +    return (AE_OK);
> +}
> diff --git a/src/acpica/source/compiler/aslstubs.c b/src/acpica/source/compiler/aslstubs.c
> index 69d30b0..bc8703c 100644
> --- a/src/acpica/source/compiler/aslstubs.c
> +++ b/src/acpica/source/compiler/aslstubs.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -200,13 +200,6 @@ AcpiDsStoreObjectToLocal (
>  }
>
>  ACPI_STATUS
> -AcpiEvDeleteGpeBlock (
> -    ACPI_GPE_BLOCK_INFO     *GpeBlock)
> -{
> -    return (AE_OK);
> -}
> -
> -ACPI_STATUS
>  AcpiEvQueueNotifyRequest (
>     ACPI_NAMESPACE_NODE     *Node,
>     UINT32                  NotifyValue)
> @@ -221,6 +214,14 @@ AcpiEvIsNotifyObject (
>     return (FALSE);
>  }
>
> +#if (!ACPI_REDUCED_HARDWARE)
> +ACPI_STATUS
> +AcpiEvDeleteGpeBlock (
> +    ACPI_GPE_BLOCK_INFO     *GpeBlock)
> +{
> +    return (AE_OK);
> +}
> +
>  ACPI_STATUS
>  AcpiEvAcquireGlobalLock (
>     UINT16                  Timeout)
> @@ -234,6 +235,7 @@ AcpiEvReleaseGlobalLock (
>  {
>     return (AE_OK);
>  }
> +#endif /* !ACPI_REDUCED_HARDWARE */
>
>  ACPI_STATUS
>  AcpiEvInitializeRegion (
> diff --git a/src/acpica/source/compiler/asltransform.c b/src/acpica/source/compiler/asltransform.c
> index b589040..0710b40 100644
> --- a/src/acpica/source/compiler/asltransform.c
> +++ b/src/acpica/source/compiler/asltransform.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -470,6 +470,7 @@ TrDoSwitch (
>     ACPI_PARSE_OBJECT       *MethodOp;
>     ACPI_PARSE_OBJECT       *StoreOp;
>     ACPI_PARSE_OBJECT       *BreakOp;
> +    ACPI_PARSE_OBJECT       *BufferOp;
>     char                    *PredicateValueName;
>     UINT16                  Index;
>     UINT32                  Btype;
> @@ -719,6 +720,7 @@ TrDoSwitch (
>
>     Predicate = StartNode->Asl.Child;
>     NewOp = TrCreateLeafNode (PARSEOP_NAME);
> +    TrAmlInitLineNumbers (NewOp, StartNode);
>
>     /* Find the parent method */
>
> @@ -762,6 +764,7 @@ TrDoSwitch (
>
>     NewOp2 = TrCreateValuedLeafNode (PARSEOP_NAMESEG,
>                 (UINT64) ACPI_TO_INTEGER (PredicateValueName));
> +    TrAmlInitLineNumbers (NewOp2, NewOp);
>     NewOp2->Asl.CompileFlags |= NODE_IS_NAME_DECLARATION;
>     NewOp->Asl.Child  = NewOp2;
>
> @@ -772,21 +775,27 @@ TrDoSwitch (
>     case ACPI_BTYPE_INTEGER:
>         NewOp2->Asl.Next = TrCreateValuedLeafNode (PARSEOP_ZERO,
>                                 (UINT64) 0);
> +        TrAmlInitLineNumbers (NewOp2->Asl.Next, NewOp);
>         break;
>
>     case ACPI_BTYPE_STRING:
>         NewOp2->Asl.Next = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL,
>                                 (UINT64) ACPI_TO_INTEGER (""));
> +        TrAmlInitLineNumbers (NewOp2->Asl.Next, NewOp);
>         break;
>
>     case ACPI_BTYPE_BUFFER:
>         (void) TrLinkPeerNode (NewOp2, TrCreateValuedLeafNode (PARSEOP_BUFFER,
>                                     (UINT64) 0));
>         Next = NewOp2->Asl.Next;
> +        TrAmlInitLineNumbers (Next, NewOp2);
>         (void) TrLinkChildren (Next, 1, TrCreateValuedLeafNode (PARSEOP_ZERO,
>                                     (UINT64) 1));
> -        (void) TrLinkPeerNode (Next->Asl.Child,
> -            TrCreateValuedLeafNode (PARSEOP_DEFAULT_ARG, (UINT64) 0));
> +        TrAmlInitLineNumbers (Next->Asl.Child, Next);
> +
> +        BufferOp = TrCreateValuedLeafNode (PARSEOP_DEFAULT_ARG, (UINT64) 0);
> +        TrAmlInitLineNumbers (BufferOp, Next->Asl.Child);
> +        (void) TrLinkPeerNode (Next->Asl.Child, BufferOp);
>
>         TrAmlSetSubtreeParent (Next->Asl.Child, Next);
>         break;
> @@ -805,6 +814,7 @@ TrDoSwitch (
>      */
>     TrAmlInitNode (StartNode, PARSEOP_WHILE);
>     NewOp = TrCreateLeafNode (PARSEOP_ONE);
> +    TrAmlInitLineNumbers (NewOp, StartNode);
>     NewOp->Asl.Next = Predicate->Asl.Next;
>     NewOp->Asl.Parent = StartNode;
>     StartNode->Asl.Child = NewOp;
> @@ -812,6 +822,7 @@ TrDoSwitch (
>     /* Create a Store() node */
>
>     StoreOp = TrCreateLeafNode (PARSEOP_STORE);
> +    TrAmlInitLineNumbers (StoreOp, NewOp);
>     StoreOp->Asl.Parent = StartNode;
>     TrAmlInsertPeer (NewOp, StoreOp);
>
> @@ -822,6 +833,7 @@ TrDoSwitch (
>
>     NewOp = TrCreateValuedLeafNode (PARSEOP_NAMESEG,
>                 (UINT64) ACPI_TO_INTEGER (PredicateValueName));
> +    TrAmlInitLineNumbers (NewOp, StoreOp);
>     NewOp->Asl.Parent    = StoreOp;
>     Predicate->Asl.Next  = NewOp;
>
> @@ -834,6 +846,7 @@ TrDoSwitch (
>     }
>
>     BreakOp = TrCreateLeafNode (PARSEOP_BREAK);
> +    TrAmlInitLineNumbers (BreakOp, NewOp);
>     BreakOp->Asl.Parent = StartNode;
>     TrAmlInsertPeer (Conditional, BreakOp);
>  }
> diff --git a/src/acpica/source/compiler/asltree.c b/src/acpica/source/compiler/asltree.c
> index 88b33c3..f7a5fd7 100644
> --- a/src/acpica/source/compiler/asltree.c
> +++ b/src/acpica/source/compiler/asltree.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -117,6 +117,7 @@
>
>  #include "aslcompiler.h"
>  #include "aslcompiler.y.h"
> +#include "acapps.h"
>  #include <time.h>
>
>  #define _COMPONENT          ACPI_COMPILER
> @@ -359,9 +360,6 @@ TrGetNodeFlagName (
>     case NODE_METHOD_TYPED:
>         return ("NODE_METHOD_TYPED");
>
> -    case NODE_IS_BIT_OFFSET:
> -        return ("NODE_IS_BIT_OFFSET");
> -
>     case NODE_COMPILE_TIME_CONST:
>         return ("NODE_COMPILE_TIME_CONST");
>
> @@ -500,6 +498,8 @@ TrCreateConstantLeafNode (
>     time_t                  CurrentTime;
>     char                    *StaticTimeString;
>     char                    *TimeString;
> +    char                    *Path;
> +    char                    *Filename;
>
>
>     switch (ParseOpcode)
> @@ -509,7 +509,7 @@ TrCreateConstantLeafNode (
>         Op->Asl.Value.Integer = Op->Asl.LineNumber;
>         break;
>
> -    case PARSEOP___FILE__:
> +    case PARSEOP___PATH__:
>         Op = TrAllocateNode (PARSEOP_STRING_LITERAL);
>
>         /* Op.Asl.Filename contains the full pathname to the file */
> @@ -517,7 +517,17 @@ TrCreateConstantLeafNode (
>         Op->Asl.Value.String = Op->Asl.Filename;
>         break;
>
> -   case PARSEOP___DATE__:
> +    case PARSEOP___FILE__:
> +        Op = TrAllocateNode (PARSEOP_STRING_LITERAL);
> +
> +        /* Get the simple filename from the full path */
> +
> +        FlSplitInputPathname (Op->Asl.Filename, &Path, &Filename);
> +        ACPI_FREE (Path);
> +        Op->Asl.Value.String = Filename;
> +        break;
> +
> +    case PARSEOP___DATE__:
>         Op = TrAllocateNode (PARSEOP_STRING_LITERAL);
>
>         /* Get a copy of the current time */
> diff --git a/src/acpica/source/compiler/asltypes.h b/src/acpica/source/compiler/asltypes.h
> index 64e0c60..f208202 100644
> --- a/src/acpica/source/compiler/asltypes.h
> +++ b/src/acpica/source/compiler/asltypes.h
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -140,7 +140,7 @@
>  #define NODE_METHOD_SOME_NO_RETVAL  0x00000200
>  #define NODE_RESULT_NOT_USED        0x00000400
>  #define NODE_METHOD_TYPED           0x00000800
> -#define NODE_IS_BIT_OFFSET          0x00001000
> +#define NODE_UNUSED_FLAG            0x00001000
>  #define NODE_COMPILE_TIME_CONST     0x00002000
>  #define NODE_IS_TERM_ARG            0x00004000
>  #define NODE_WAS_ONES_OP            0x00008000
> @@ -216,15 +216,18 @@ typedef struct asl_file_status
>  } ASL_FILE_STATUS;
>
>
> -/* File types */
> -
> +/*
> + * File types. Note: Any changes to this table must also be reflected
> + * in the AslFileTypeNames array.
> + */
>  typedef enum
>  {
>     ASL_FILE_STDOUT             = 0,
>     ASL_FILE_STDERR,
> -    ASL_FILE_INPUT,
> +    ASL_FILE_INPUT,             /* Don't move these first 3 file types */
>     ASL_FILE_AML_OUTPUT,
>     ASL_FILE_SOURCE_OUTPUT,
> +    ASL_FILE_PREPROCESSOR,
>     ASL_FILE_LISTING_OUTPUT,
>     ASL_FILE_HEX_OUTPUT,
>     ASL_FILE_NAMESPACE_OUTPUT,
> @@ -237,7 +240,7 @@ typedef enum
>  } ASL_FILE_TYPES;
>
>
> -#define ASL_MAX_FILE_TYPE       12
> +#define ASL_MAX_FILE_TYPE       13
>  #define ASL_NUM_FILES           (ASL_MAX_FILE_TYPE + 1)
>
>
> @@ -260,6 +263,7 @@ typedef struct asl_error_msg
>     char                        *Message;
>     struct asl_error_msg        *Next;
>     char                        *Filename;
> +    char                        *SourceLine;
>     UINT32                      FilenameLength;
>     UINT8                       MessageId;
>     UINT8                       Level;
> diff --git a/src/acpica/source/compiler/aslutils.c b/src/acpica/source/compiler/aslutils.c
> index c9a7c96..8a7dbba 100644
> --- a/src/acpica/source/compiler/aslutils.c
> +++ b/src/acpica/source/compiler/aslutils.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -125,11 +125,32 @@
>  #define _COMPONENT          ACPI_COMPILER
>         ACPI_MODULE_NAME    ("aslutils")
>
> +
>  char                        AslHexLookup[] =
>  {
>     '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
>  };
>
> +/* Table below must match ASL_FILE_TYPES in asltypes.h */
> +
> +static const char       *AslFileTypeNames [ASL_NUM_FILES] =
> +{
> +    "stdout:       ",
> +    "stderr:       ",
> +    "Table Input:  ",
> +    "Binary Output:",
> +    "Source Output:",
> +    "Preprocessor: ",
> +    "Listing File: ",
> +    "Hex Dump:     ",
> +    "Namespace:    ",
> +    "Debug File:   ",
> +    "ASM Source:   ",
> +    "C Source:     ",
> +    "ASM Include:  ",
> +    "C Include:    "
> +};
> +
>
>  /* Local prototypes */
>
> @@ -523,35 +544,40 @@ void
>  UtDisplaySummary (
>     UINT32                  FileId)
>  {
> +    UINT32                  i;
> +
>
>     if (FileId != ASL_FILE_STDOUT)
>     {
>         /* Compiler name and version number */
>
> -        FlPrintFile (FileId, "%s version %X%s [%s]\n",
> +        FlPrintFile (FileId, "%s version %X%s [%s]\n\n",
>             ASL_COMPILER_NAME, (UINT32) ACPI_CA_VERSION, ACPI_WIDTH, __DATE__);
>     }
>
> +    /* Summary of main input and output files */
> +
>     if (Gbl_FileType == ASL_INPUT_TYPE_ASCII_DATA)
>     {
>         FlPrintFile (FileId,
> -            "Table Input:   %s - %u lines, %u bytes, %u fields\n",
> +            "%-14s %s - %u lines, %u bytes, %u fields\n",
> +            "Table Input:",
>             Gbl_Files[ASL_FILE_INPUT].Filename, Gbl_CurrentLineNumber,
>             Gbl_InputByteCount, Gbl_InputFieldCount);
>
>         if ((Gbl_ExceptionCount[ASL_ERROR] == 0) || (Gbl_IgnoreErrors))
>         {
>             FlPrintFile (FileId,
> -                "Binary Output: %s - %u bytes\n\n",
> +                "%-14s %s - %u bytes\n",
> +                "Binary Output:",
>                 Gbl_Files[ASL_FILE_AML_OUTPUT].Filename, Gbl_TableLength);
>         }
>     }
>     else
>     {
> -        /* Input/Output summary */
> -
>         FlPrintFile (FileId,
> -            "ASL Input:  %s - %u lines, %u bytes, %u keywords\n",
> +            "%-14s %s - %u lines, %u bytes, %u keywords\n",
> +            "ASL Input:",
>             Gbl_Files[ASL_FILE_INPUT].Filename, Gbl_CurrentLineNumber,
>             Gbl_InputByteCount, TotalKeywords);
>
> @@ -560,16 +586,45 @@ UtDisplaySummary (
>         if ((Gbl_ExceptionCount[ASL_ERROR] == 0) || (Gbl_IgnoreErrors))
>         {
>             FlPrintFile (FileId,
> -                "AML Output: %s - %u bytes, %u named objects, %u executable opcodes\n\n",
> +                "%-14s %s - %u bytes, %u named objects, %u executable opcodes\n",
> +                "AML Output:",
>                 Gbl_Files[ASL_FILE_AML_OUTPUT].Filename, Gbl_TableLength,
>                 TotalNamedObjects, TotalExecutableOpcodes);
>         }
>     }
>
> +    /* Display summary of any optional files */
> +
> +    for (i = ASL_FILE_SOURCE_OUTPUT; i <= ASL_MAX_FILE_TYPE; i++)
> +    {
> +        if (!Gbl_Files[i].Filename || !Gbl_Files[i].Handle)
> +        {
> +            continue;
> +        }
> +
> +        /* .SRC is a temp file unless specifically requested */
> +
> +        if ((i == ASL_FILE_SOURCE_OUTPUT) && (!Gbl_SourceOutputFlag))
> +        {
> +            continue;
> +        }
> +
> +        /* .I is a temp file unless specifically requested */
> +
> +        if ((i == ASL_FILE_PREPROCESSOR) && (!Gbl_PreprocessorOutputFlag))
> +        {
> +            continue;
> +        }
> +
> +        FlPrintFile (FileId, "%14s %s - %u bytes\n",
> +            AslFileTypeNames [i],
> +            Gbl_Files[i].Filename, FlGetFileSize (i));
> +    }
> +
>     /* Error summary */
>
>     FlPrintFile (FileId,
> -        "Compilation complete. %u Errors, %u Warnings, %u Remarks",
> +        "\nCompilation complete. %u Errors, %u Warnings, %u Remarks",
>         Gbl_ExceptionCount[ASL_ERROR],
>         Gbl_ExceptionCount[ASL_WARNING] +
>             Gbl_ExceptionCount[ASL_WARNING2] +
> diff --git a/src/acpica/source/compiler/asluuid.c b/src/acpica/source/compiler/asluuid.c
> index ca6f089..93d56a3 100644
> --- a/src/acpica/source/compiler/asluuid.c
> +++ b/src/acpica/source/compiler/asluuid.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/compiler/aslwalks.c b/src/acpica/source/compiler/aslwalks.c
> index ae1716a..ac483b8 100644
> --- a/src/acpica/source/compiler/aslwalks.c
> +++ b/src/acpica/source/compiler/aslwalks.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -1104,6 +1104,7 @@ AnOtherSemanticAnalysisWalkBegin (
>     ACPI_PARSE_OBJECT       *ArgNode;
>     ACPI_PARSE_OBJECT       *PrevArgNode = NULL;
>     const ACPI_OPCODE_INFO  *OpInfo;
> +    ACPI_NAMESPACE_NODE     *Node;
>
>
>     OpInfo = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode);
> @@ -1228,6 +1229,78 @@ AnOtherSemanticAnalysisWalkBegin (
>         }
>         break;
>
> +    case PARSEOP_CONNECTION:
> +        /*
> +         * Ensure that the referenced operation region has the correct SPACE_ID.
> +         * From the grammar/parser, we know the parent is a FIELD definition.
> +         */
> +        ArgNode = Op->Asl.Parent;       /* Field definition */
> +        ArgNode = ArgNode->Asl.Child;   /* First child is the OpRegion Name */
> +        Node = ArgNode->Asl.Node;       /* OpRegion namespace node */
> +
> +        ArgNode = Node->Op;             /* OpRegion definition */
> +        ArgNode = ArgNode->Asl.Child;   /* First child is the OpRegion Name */
> +        ArgNode = ArgNode->Asl.Next;    /* Next peer is the SPACE_ID (what we want) */
> +
> +        /*
> +         * The Connection() operator is only valid for the following operation
> +         * region SpaceIds: GeneralPurposeIo and GenericSerialBus.
> +         */
> +        if ((ArgNode->Asl.Value.Integer != ACPI_ADR_SPACE_GPIO) &&
> +            (ArgNode->Asl.Value.Integer != ACPI_ADR_SPACE_GSBUS))
> +        {
> +            AslError (ASL_ERROR, ASL_MSG_CONNECTION_INVALID, Op, NULL);
> +        }
> +        break;
> +
> +    case PARSEOP_FIELD:
> +        /*
> +         * Ensure that fields for GeneralPurposeIo and GenericSerialBus
> +         * contain at least one Connection() operator
> +         */
> +        ArgNode = Op->Asl.Child;        /* 1st child is the OpRegion Name */
> +        Node = ArgNode->Asl.Node;       /* OpRegion namespace node */
> +        if (!Node)
> +        {
> +            break;
> +        }
> +
> +        ArgNode = Node->Op;             /* OpRegion definition */
> +        ArgNode = ArgNode->Asl.Child;   /* First child is the OpRegion Name */
> +        ArgNode = ArgNode->Asl.Next;    /* Next peer is the SPACE_ID (what we want) */
> +
> +        /* We are only interested in GeneralPurposeIo and GenericSerialBus */
> +
> +        if ((ArgNode->Asl.Value.Integer != ACPI_ADR_SPACE_GPIO) &&
> +            (ArgNode->Asl.Value.Integer != ACPI_ADR_SPACE_GSBUS))
> +        {
> +            break;
> +        }
> +
> +        ArgNode = Op->Asl.Child;        /* 1st child is the OpRegion Name */
> +        ArgNode = ArgNode->Asl.Next;    /* AccessType */
> +        ArgNode = ArgNode->Asl.Next;    /* LockRule */
> +        ArgNode = ArgNode->Asl.Next;    /* UpdateRule */
> +        ArgNode = ArgNode->Asl.Next;    /* Start of FieldUnitList */
> +
> +        /* Walk the FieldUnitList */
> +
> +        while (ArgNode)
> +        {
> +            if (ArgNode->Asl.ParseOpcode == PARSEOP_CONNECTION)
> +            {
> +                break;
> +            }
> +            else if (ArgNode->Asl.ParseOpcode == PARSEOP_NAMESEG)
> +            {
> +                AslError (ASL_ERROR, ASL_MSG_CONNECTION_MISSING, ArgNode, NULL);
> +                break;
> +            }
> +
> +            ArgNode = ArgNode->Asl.Next;
> +        }
> +        break;
> +
>     default:
>         break;
>     }
> diff --git a/src/acpica/source/compiler/dtcompile.c b/src/acpica/source/compiler/dtcompile.c
> index 86264fd..6c937d2 100644
> --- a/src/acpica/source/compiler/dtcompile.c
> +++ b/src/acpica/source/compiler/dtcompile.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -173,6 +173,17 @@ DtDoCompile (
>         return (Status);
>     }
>
> +    /* Preprocessor */
> +
> +    Event = UtBeginEvent ("Preprocess input file");
> +    PrDoPreprocess ();
> +    UtEndEvent (Event);
> +
> +    if (Gbl_PreprocessOnly)
> +    {
> +        return AE_OK;
> +    }
> +
>     /*
>      * Scan the input file (file is already open) and
>      * build the parse tree
> @@ -382,6 +393,17 @@ DtCompileDataTable (
>         Status = DtCompileRsdp (FieldList);
>         return (Status);
>     }
> +    else if (ACPI_COMPARE_NAME (Signature, ACPI_SIG_S3PT))
> +    {
> +        Status = DtCompileS3pt (FieldList);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +
> +        DtSetTableLength ();
> +        return (Status);
> +    }
>
>     /*
>      * All other tables must use the common ACPI table header. Insert the
> @@ -401,7 +423,7 @@ DtCompileDataTable (
>     /* Validate the signature via the ACPI table list */
>
>     TableData = AcpiDmGetTableData (Signature);
> -    if (!TableData)
> +    if (!TableData || Gbl_CompileGeneric)
>     {
>         DtCompileGeneric ((void **) FieldList);
>         goto Out;
> @@ -483,6 +505,7 @@ DtCompileTable (
>     UINT8                   FieldType;
>     UINT8                   *Buffer;
>     UINT8                   *FlagBuffer = NULL;
> +    UINT32                  CurrentFlagByteOffset = 0;
>     ACPI_STATUS             Status;
>
>
> @@ -514,6 +537,11 @@ DtCompileTable (
>      */
>     for (; Info->Name; Info++)
>     {
> +        if (Info->Opcode == ACPI_DMT_EXTRA_TEXT)
> +        {
> +            continue;
> +        }
> +
>         if (!LocalField)
>         {
>             sprintf (MsgBuffer, "Found NULL field - Field name \"%s\" needed",
> @@ -544,6 +572,7 @@ DtCompileTable (
>             *Field = LocalField;
>
>             FlagBuffer = Buffer;
> +            CurrentFlagByteOffset = Info->Offset;
>             break;
>
>         case DT_FIELD_TYPE_FLAG:
> @@ -552,6 +581,14 @@ DtCompileTable (
>
>             if (FlagBuffer)
>             {
> +                /*
> +                 * We must increment the FlagBuffer when we have crossed
> +                 * into the next flags byte within the flags field
> +                 * of type DT_FIELD_TYPE_FLAGS_INTEGER.
> +                 */
> +                FlagBuffer += (Info->Offset - CurrentFlagByteOffset);
> +                CurrentFlagByteOffset = Info->Offset;
> +
>                 DtCompileFlag (FlagBuffer, LocalField, Info);
>             }
>             else
> diff --git a/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h
> index 1521297..42c3116 100644
> --- a/src/acpica/source/compiler/dtcompiler.h
> +++ b/src/acpica/source/compiler/dtcompiler.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -227,6 +227,10 @@ DtCompileTable (
>
>  /* dtio - binary and text input/output */
>
> +UINT32
> +DtGetNextLine (
> +    FILE                    *Handle);
> +
>  DT_FIELD *
>  DtScanFile (
>     FILE                    *Handle);
> @@ -471,6 +475,10 @@ DtCompileFadt (
>     void                    **PFieldList);
>
>  ACPI_STATUS
> +DtCompileFpdt (
> +    void                    **PFieldList);
> +
> +ACPI_STATUS
>  DtCompileHest (
>     void                    **PFieldList);
>
> @@ -487,14 +495,26 @@ DtCompileMcfg (
>     void                    **PFieldList);
>
>  ACPI_STATUS
> +DtCompileMpst (
> +    void                    **PFieldList);
> +
> +ACPI_STATUS
>  DtCompileMsct (
>     void                    **PFieldList);
>
>  ACPI_STATUS
> +DtCompilePmtt (
> +    void                    **PFieldList);
> +
> +ACPI_STATUS
>  DtCompileRsdt (
>     void                    **PFieldList);
>
>  ACPI_STATUS
> +DtCompileS3pt (
> +    DT_FIELD                **PFieldList);
> +
> +ACPI_STATUS
>  DtCompileSlic (
>     void                    **PFieldList);
>
> @@ -531,6 +551,7 @@ DtGetGenericTableInfo (
>  extern const unsigned char  TemplateAsf[];
>  extern const unsigned char  TemplateBoot[];
>  extern const unsigned char  TemplateBert[];
> +extern const unsigned char  TemplateBgrt[];
>  extern const unsigned char  TemplateCpep[];
>  extern const unsigned char  TemplateDbgp[];
>  extern const unsigned char  TemplateDmar[];
> @@ -538,14 +559,19 @@ extern const unsigned char  TemplateEcdt[];
>  extern const unsigned char  TemplateEinj[];
>  extern const unsigned char  TemplateErst[];
>  extern const unsigned char  TemplateFadt[];
> +extern const unsigned char  TemplateFpdt[];
> +extern const unsigned char  TemplateGtdt[];
>  extern const unsigned char  TemplateHest[];
>  extern const unsigned char  TemplateHpet[];
>  extern const unsigned char  TemplateIvrs[];
>  extern const unsigned char  TemplateMadt[];
>  extern const unsigned char  TemplateMcfg[];
>  extern const unsigned char  TemplateMchi[];
> +extern const unsigned char  TemplateMpst[];
>  extern const unsigned char  TemplateMsct[];
> +extern const unsigned char  TemplatePmtt[];
>  extern const unsigned char  TemplateRsdt[];
> +extern const unsigned char  TemplateS3pt[];
>  extern const unsigned char  TemplateSbst[];
>  extern const unsigned char  TemplateSlic[];
>  extern const unsigned char  TemplateSlit[];
> diff --git a/src/acpica/source/compiler/dtexpress.c b/src/acpica/source/compiler/dtexpress.c
> index 99de74f..2964902 100644
> --- a/src/acpica/source/compiler/dtexpress.c
> +++ b/src/acpica/source/compiler/dtexpress.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -214,7 +214,7 @@ DtDoOperator (
>         if (!RightValue)
>         {
>             DtError (ASL_ERROR, ASL_MSG_DIVIDE_BY_ZERO,
> -                Gbl_CurrentField, Gbl_CurrentField->Value);
> +                Gbl_CurrentField, NULL);
>             return (0);
>         }
>         Result = LeftValue / RightValue;
> @@ -224,7 +224,7 @@ DtDoOperator (
>         if (!RightValue)
>         {
>             DtError (ASL_ERROR, ASL_MSG_DIVIDE_BY_ZERO,
> -                Gbl_CurrentField, Gbl_CurrentField->Value);
> +                Gbl_CurrentField, NULL);
>             return (0);
>         }
>         Result = LeftValue % RightValue;
> @@ -263,7 +263,7 @@ DtDoOperator (
>         break;
>
>     case EXPOP_EQUAL:
> -        Result = LeftValue = RightValue;
> +        Result = LeftValue == RightValue;
>         break;
>
>     case EXPOP_NOT_EQUAL:
> @@ -295,13 +295,12 @@ DtDoOperator (
>         /* Unknown operator */
>
>         DtFatal (ASL_MSG_INVALID_EXPRESSION,
> -            Gbl_CurrentField, Gbl_CurrentField->Value);
> +            Gbl_CurrentField, NULL);
>         return (0);
>     }
>
>     DbgPrint (ASL_DEBUG_OUTPUT,
> -        "IntegerEval: %s (%8.8X%8.8X %s %8.8X%8.8X) = %8.8X%8.8X\n",
> -        Gbl_CurrentField->Value,
> +        "IntegerEval: (%8.8X%8.8X %s %8.8X%8.8X) = %8.8X%8.8X\n",
>         ACPI_FORMAT_UINT64 (LeftValue),
>         DtGetOpName (Operator),
>         ACPI_FORMAT_UINT64 (RightValue),
> diff --git a/src/acpica/source/compiler/dtfield.c b/src/acpica/source/compiler/dtfield.c
> index c3e0677..5ac6f6e 100644
> --- a/src/acpica/source/compiler/dtfield.c
> +++ b/src/acpica/source/compiler/dtfield.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -595,12 +595,25 @@ DtCompileFlag (
>         break;
>
>
> +    case ACPI_DMT_FLAGS1:
> +
> +        BitPosition = 1;
> +        BitLength = 2;
> +        break;
> +
> +
>     case ACPI_DMT_FLAGS2:
>
>         BitPosition = 2;
>         BitLength = 2;
>         break;
>
> +    case ACPI_DMT_FLAGS4:
> +
> +        BitPosition = 4;
> +        BitLength = 2;
> +        break;
> +
>     default:
>
>         DtFatal (ASL_MSG_COMPILER_INTERNAL, Field, "Invalid flag opcode");
> diff --git a/src/acpica/source/compiler/dtio.c b/src/acpica/source/compiler/dtio.c
> index 995df93..91d4aba 100644
> --- a/src/acpica/source/compiler/dtio.c
> +++ b/src/acpica/source/compiler/dtio.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -138,10 +138,6 @@ DtParseLine (
>     UINT32                  Line,
>     UINT32                  Offset);
>
> -UINT32
> -DtGetNextLine (
> -    FILE                    *Handle);
> -
>  static void
>  DtWriteBinary (
>     DT_SUBTABLE             *Subtable,
> @@ -488,6 +484,7 @@ DtGetNextLine (
>     BOOLEAN                 LineNotAllBlanks = FALSE;
>     UINT32                  State = DT_NORMAL_TEXT;
>     UINT32                  CurrentLineOffset;
> +    UINT32                  BeyondBufferCount;
>     UINT32                  i;
>     char                    c;
>
> @@ -705,7 +702,19 @@ DtGetNextLine (
>         }
>     }
>
> -    printf ("ERROR - Input line is too long (max %u)\n", ASL_LINE_BUFFER_SIZE);
> +    /* Line is too long for internal buffer. Determine actual length */
> +
> +    BeyondBufferCount = 1;
> +    c = (char) getc (Handle);
> +    while (c != '\n')
> +    {
> +        c = (char) getc (Handle);
> +        BeyondBufferCount++;
> +    }
> +
> +    printf ("ERROR - At %u: Input line (%u bytes) is too long (max %u)\n",
> +        Gbl_CurrentLineNumber++, ASL_LINE_BUFFER_SIZE + BeyondBufferCount,
> +        ASL_LINE_BUFFER_SIZE);
>     return (ASL_EOF);
>  }
>
> diff --git a/src/acpica/source/compiler/dtparser.l b/src/acpica/source/compiler/dtparser.l
> index c753771..0ffe6f4 100644
> --- a/src/acpica/source/compiler/dtparser.l
> +++ b/src/acpica/source/compiler/dtparser.l
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/compiler/dtparser.y b/src/acpica/source/compiler/dtparser.y
> index 5e22337..6377a0d 100644
> --- a/src/acpica/source/compiler/dtparser.y
> +++ b/src/acpica/source/compiler/dtparser.y
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -135,6 +135,10 @@ UINT64                      DtParserResult; /* Expression return value */
>  #define YYERROR_VERBOSE     1               /* Verbose error messages */
>  #define YYFLAG              -32768
>
> +/* Define YYMALLOC/YYFREE to prevent redefinition errors  */
> +
> +#define YYMALLOC            malloc
> +#define YYFREE              free
>  %}
>
>  %union
> diff --git a/src/acpica/source/compiler/dtsubtable.c b/src/acpica/source/compiler/dtsubtable.c
> index dadb7bc..0921841 100644
> --- a/src/acpica/source/compiler/dtsubtable.c
> +++ b/src/acpica/source/compiler/dtsubtable.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -368,6 +368,11 @@ DtGetSubtableLength (
>
>     for (; Info->Name; Info++)
>     {
> +        if (Info->Opcode == ACPI_DMT_EXTRA_TEXT)
> +        {
> +            continue;
> +        }
> +
>         if (!Field)
>         {
>             goto Error;
> diff --git a/src/acpica/source/compiler/dttable.c b/src/acpica/source/compiler/dttable.c
> index 86b994b..e9668a2 100644
> --- a/src/acpica/source/compiler/dttable.c
> +++ b/src/acpica/source/compiler/dttable.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -732,6 +732,90 @@ DtCompileFadt (
>         }
>
>         DtInsertSubtable (ParentTable, Subtable);
> +
> +        if (Revision >= 5)
> +        {
> +            Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt5,
> +                        &Subtable, TRUE);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return (Status);
> +            }
> +
> +            DtInsertSubtable (ParentTable, Subtable);
> +        }
> +    }
> +
> +    return (AE_OK);
> +}
> +
> +
> +/******************************************************************************
> + *
> + * FUNCTION:    DtCompileFpdt
> + *
> + * PARAMETERS:  List                - Current field list pointer
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Compile FPDT.
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +DtCompileFpdt (
> +    void                    **List)
> +{
> +    ACPI_STATUS             Status;
> +    ACPI_FPDT_HEADER        *FpdtHeader;
> +    DT_SUBTABLE             *Subtable;
> +    DT_SUBTABLE             *ParentTable;
> +    ACPI_DMTABLE_INFO       *InfoTable;
> +    DT_FIELD                **PFieldList = (DT_FIELD **) List;
> +    DT_FIELD                *SubtableStart;
> +
> +
> +    while (*PFieldList)
> +    {
> +        SubtableStart = *PFieldList;
> +        Status = DtCompileTable (PFieldList, AcpiDmTableInfoFpdtHdr,
> +                    &Subtable, TRUE);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +
> +        ParentTable = DtPeekSubtable ();
> +        DtInsertSubtable (ParentTable, Subtable);
> +        DtPushSubtable (Subtable);
> +
> +        FpdtHeader = ACPI_CAST_PTR (ACPI_FPDT_HEADER, Subtable->Buffer);
> +
> +        switch (FpdtHeader->Type)
> +        {
> +        case ACPI_FPDT_TYPE_BOOT:
> +            InfoTable = AcpiDmTableInfoFpdt0;
> +            break;
> +
> +        case ACPI_FPDT_TYPE_S3PERF:
> +            InfoTable = AcpiDmTableInfoFpdt1;
> +            break;
> +
> +        default:
> +            DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "FPDT");
> +            return (AE_ERROR);
> +            break;
> +        }
> +
> +        Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +
> +        ParentTable = DtPeekSubtable ();
> +        DtInsertSubtable (ParentTable, Subtable);
> +        DtPopSubtable ();
>     }
>
>     return (AE_OK);
> @@ -1097,6 +1181,12 @@ DtCompileMadt (
>         case ACPI_MADT_TYPE_LOCAL_X2APIC_NMI:
>             InfoTable = AcpiDmTableInfoMadt10;
>             break;
> +        case ACPI_MADT_TYPE_GENERIC_INTERRUPT:
> +            InfoTable = AcpiDmTableInfoMadt11;
> +            break;
> +        case ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR:
> +            InfoTable = AcpiDmTableInfoMadt12;
> +            break;
>         default:
>             DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "MADT");
>             return (AE_ERROR);
> @@ -1144,6 +1234,143 @@ DtCompileMcfg (
>
>  /******************************************************************************
>  *
> + * FUNCTION:    DtCompileMpst
> + *
> + * PARAMETERS:  List                - Current field list pointer
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Compile MPST.
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +DtCompileMpst (
> +    void                    **List)
> +{
> +    ACPI_STATUS             Status;
> +    DT_SUBTABLE             *Subtable;
> +    DT_SUBTABLE             *ParentTable;
> +    DT_FIELD                **PFieldList = (DT_FIELD **) List;
> +    ACPI_MPST_CHANNEL       *MpstChannelInfo;
> +    ACPI_MPST_POWER_NODE    *MpstPowerNode;
> +    ACPI_MPST_DATA_HDR      *MpstDataHeader;
> +    UINT16                  SubtableCount;
> +    UINT8                   PowerStateCount;
> +    UINT8                   ComponentCount;
> +
> +
> +    /* Main table */
> +
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst, &Subtable, TRUE);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return (Status);
> +    }
> +
> +    ParentTable = DtPeekSubtable ();
> +    DtInsertSubtable (ParentTable, Subtable);
> +    DtPushSubtable (Subtable);
> +
> +    MpstChannelInfo = ACPI_CAST_PTR (ACPI_MPST_CHANNEL, Subtable->Buffer);
> +    SubtableCount = MpstChannelInfo->PowerNodeCount;
> +
> +    while (*PFieldList && SubtableCount)
> +    {
> +        /* Subtable: Memory Power Node(s) */
> +
> +        Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst0,
> +                    &Subtable, TRUE);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +
> +        ParentTable = DtPeekSubtable ();
> +        DtInsertSubtable (ParentTable, Subtable);
> +        DtPushSubtable (Subtable);
> +
> +        MpstPowerNode = ACPI_CAST_PTR (ACPI_MPST_POWER_NODE, Subtable->Buffer);
> +        PowerStateCount = MpstPowerNode->NumPowerStates;
> +        ComponentCount = MpstPowerNode->NumPhysicalComponents;
> +
> +        ParentTable = DtPeekSubtable ();
> +
> +        /* Sub-subtables - Memory Power State Structure(s) */
> +
> +        while (*PFieldList && PowerStateCount)
> +        {
> +            Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst0A,
> +                        &Subtable, TRUE);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return (Status);
> +            }
> +
> +            DtInsertSubtable (ParentTable, Subtable);
> +            PowerStateCount--;
> +        }
> +
> +        /* Sub-subtables - Physical Component ID Structure(s) */
> +
> +        while (*PFieldList && ComponentCount)
> +        {
> +            Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst0B,
> +                        &Subtable, TRUE);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return (Status);
> +            }
> +
> +            DtInsertSubtable (ParentTable, Subtable);
> +            ComponentCount--;
> +        }
> +
> +        SubtableCount--;
> +        DtPopSubtable ();
> +    }
> +
> +    /* Subtable: Count of Memory Power State Characteristic structures */
> +
> +    DtPopSubtable ();
> +
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst1, &Subtable, TRUE);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return (Status);
> +    }
> +
> +    ParentTable = DtPeekSubtable ();
> +    DtInsertSubtable (ParentTable, Subtable);
> +    DtPushSubtable (Subtable);
> +
> +    MpstDataHeader = ACPI_CAST_PTR (ACPI_MPST_DATA_HDR, Subtable->Buffer);
> +    SubtableCount = MpstDataHeader->CharacteristicsCount;
> +
> +    ParentTable = DtPeekSubtable ();
> +
> +    /* Subtable: Memory Power State Characteristics structure(s) */
> +
> +    while (*PFieldList && SubtableCount)
> +    {
> +        Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst2,
> +                    &Subtable, TRUE);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +
> +        DtInsertSubtable (ParentTable, Subtable);
> +        SubtableCount--;
> +    }
> +
> +    DtPopSubtable ();
> +    return (AE_OK);
> +}
> +
> +
> +/******************************************************************************
> + *
>  * FUNCTION:    DtCompileMsct
>  *
>  * PARAMETERS:  List                - Current field list pointer
> @@ -1169,6 +1396,147 @@ DtCompileMsct (
>
>  /******************************************************************************
>  *
> + * FUNCTION:    DtCompilePmtt
> + *
> + * PARAMETERS:  List                - Current field list pointer
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Compile PMTT.
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +DtCompilePmtt (
> +    void                    **List)
> +{
> +    ACPI_STATUS             Status;
> +    DT_SUBTABLE             *Subtable;
> +    DT_SUBTABLE             *ParentTable;
> +    DT_FIELD                **PFieldList = (DT_FIELD **) List;
> +    DT_FIELD                *SubtableStart;
> +    ACPI_PMTT_HEADER        *PmttHeader;
> +    ACPI_PMTT_CONTROLLER    *PmttController;
> +    UINT16                  DomainCount;
> +    UINT8                   PrevType = ACPI_PMTT_TYPE_SOCKET;
> +
> +
> +    /* Main table */
> +
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt, &Subtable, TRUE);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return (Status);
> +    }
> +
> +    ParentTable = DtPeekSubtable ();
> +    DtInsertSubtable (ParentTable, Subtable);
> +    DtPushSubtable (Subtable);
> +
> +    while (*PFieldList)
> +    {
> +        SubtableStart = *PFieldList;
> +        Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmttHdr,
> +                    &Subtable, TRUE);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +
> +        PmttHeader = ACPI_CAST_PTR (ACPI_PMTT_HEADER, Subtable->Buffer);
> +        while (PrevType >= PmttHeader->Type)
> +        {
> +            DtPopSubtable ();
> +
> +            if (PrevType == ACPI_PMTT_TYPE_SOCKET)
> +            {
> +                break;
> +            }
> +            PrevType--;
> +        }
> +        PrevType = PmttHeader->Type;
> +
> +        ParentTable = DtPeekSubtable ();
> +        DtInsertSubtable (ParentTable, Subtable);
> +        DtPushSubtable (Subtable);
> +
> +        switch (PmttHeader->Type)
> +        {
> +        case ACPI_PMTT_TYPE_SOCKET:
> +
> +            /* Subtable: Socket Structure */
> +
> +            Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt0,
> +                    &Subtable, TRUE);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return (Status);
> +            }
> +
> +            ParentTable = DtPeekSubtable ();
> +            DtInsertSubtable (ParentTable, Subtable);
> +            break;
> +
> +        case ACPI_PMTT_TYPE_CONTROLLER:
> +
> +            /* Subtable: Memory Controller Structure */
> +
> +            Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt1,
> +                    &Subtable, TRUE);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return (Status);
> +            }
> +
> +            ParentTable = DtPeekSubtable ();
> +            DtInsertSubtable (ParentTable, Subtable);
> +
> +            PmttController = ACPI_CAST_PTR (ACPI_PMTT_CONTROLLER,
> +                (Subtable->Buffer - sizeof (ACPI_PMTT_HEADER)));
> +            DomainCount = PmttController->DomainCount;
> +
> +            while (DomainCount)
> +            {
> +                Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt1a,
> +                    &Subtable, TRUE);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return (Status);
> +                }
> +
> +                DtInsertSubtable (ParentTable, Subtable);
> +                DomainCount--;
> +            }
> +            break;
> +
> +        case ACPI_PMTT_TYPE_DIMM:
> +
> +            /* Subtable: Physical Component Structure */
> +
> +            Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt2,
> +                    &Subtable, TRUE);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return (Status);
> +            }
> +
> +            ParentTable = DtPeekSubtable ();
> +            DtInsertSubtable (ParentTable, Subtable);
> +            break;
> +
> +        default:
> +
> +            DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "PMTT");
> +            return (AE_ERROR);
> +        }
> +    }
> +
> +    return (Status);
> +}
> +
> +
> +/******************************************************************************
> + *
>  * FUNCTION:    DtCompileRsdt
>  *
>  * PARAMETERS:  List                - Current field list pointer
> @@ -1206,6 +1574,85 @@ DtCompileRsdt (
>
>  /******************************************************************************
>  *
> + * FUNCTION:    DtCompileS3pt
> + *
> + * PARAMETERS:  PFieldList          - Current field list pointer
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Compile S3PT (Pointed to by FPDT)
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +DtCompileS3pt (
> +    DT_FIELD                **PFieldList)
> +{
> +    ACPI_STATUS             Status;
> +    ACPI_S3PT_HEADER        *S3ptHeader;
> +    DT_SUBTABLE             *Subtable;
> +    DT_SUBTABLE             *ParentTable;
> +    ACPI_DMTABLE_INFO       *InfoTable;
> +    DT_FIELD                *SubtableStart;
> +
> +
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoS3pt,
> +                &Gbl_RootTable, TRUE);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return (Status);
> +    }
> +
> +    DtPushSubtable (Gbl_RootTable);
> +
> +    while (*PFieldList)
> +    {
> +        SubtableStart = *PFieldList;
> +        Status = DtCompileTable (PFieldList, AcpiDmTableInfoS3ptHdr,
> +                    &Subtable, TRUE);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +
> +        ParentTable = DtPeekSubtable ();
> +        DtInsertSubtable (ParentTable, Subtable);
> +        DtPushSubtable (Subtable);
> +
> +        S3ptHeader = ACPI_CAST_PTR (ACPI_S3PT_HEADER, Subtable->Buffer);
> +
> +        switch (S3ptHeader->Type)
> +        {
> +        case ACPI_S3PT_TYPE_RESUME:
> +            InfoTable = AcpiDmTableInfoS3pt0;
> +            break;
> +
> +        case ACPI_S3PT_TYPE_SUSPEND:
> +            InfoTable = AcpiDmTableInfoS3pt1;
> +            break;
> +
> +        default:
> +            DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "S3PT");
> +            return (AE_ERROR);
> +        }
> +
> +        Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +
> +        ParentTable = DtPeekSubtable ();
> +        DtInsertSubtable (ParentTable, Subtable);
> +        DtPopSubtable ();
> +    }
> +
> +    return (AE_OK);
> +}
> +
> +
> +/******************************************************************************
> + *
>  * FUNCTION:    DtCompileSlic
>  *
>  * PARAMETERS:  List                - Current field list pointer
> @@ -1447,7 +1894,9 @@ DtGetGenericTableInfo (
>             break;
>         }
>
> -        if (!ACPI_STRCMP (Name, Info->Name))
> +        /* Use caseless compare for generic keywords */
> +
> +        if (!AcpiUtStricmp (Name, Info->Name))
>         {
>             break;
>         }
> diff --git a/src/acpica/source/compiler/dttemplate.c b/src/acpica/source/compiler/dttemplate.c
> index 30d6b2d..ed5f79b 100644
> --- a/src/acpica/source/compiler/dttemplate.c
> +++ b/src/acpica/source/compiler/dttemplate.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/compiler/dttemplate.h b/src/acpica/source/compiler/dttemplate.h
> index 7c2658f..8c3f2c1 100644
> --- a/src/acpica/source/compiler/dttemplate.h
> +++ b/src/acpica/source/compiler/dttemplate.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -159,6 +159,17 @@ const unsigned char TemplateAsf[] =
>     0x01,0x00                                 /* 00000070    ".."       */
>  };
>
> +const unsigned char TemplateBgrt[] =
> +{
> +    0x42,0x47,0x52,0x54,0x38,0x00,0x00,0x00,  /* 00000000    "BGRT8..." */
> +    0x01,0x0D,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
> +    0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45,  /* 00000010    "TEMPLATE" */
> +    0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> +    0x23,0x06,0x11,0x20,0x01,0x00,0x00,0x00,  /* 00000020    "#.. ...." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000028    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00   /* 00000030    "........" */
> +};
> +
>  const unsigned char TemplateBert[] =
>  {
>     0x42,0x45,0x52,0x54,0x30,0x00,0x00,0x00,  /* 00000000    "BERT0..." */
> @@ -363,13 +374,15 @@ const unsigned char TemplateFacs[] =
>     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00   /* 00000038    "........" */
>  };
>
> +/* Version 5 FADT */
> +
>  const unsigned char TemplateFadt[] =
>  {
> -    0x46,0x41,0x43,0x50,0xF4,0x00,0x00,0x00,  /* 00000000    "FACP...." */
> -    0x04,0x4E,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    ".NINTEL " */
> +    0x46,0x41,0x43,0x50,0x0C,0x01,0x00,0x00,  /* 00000000    "FACP...." */
> +    0x05,0x18,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
>     0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45,  /* 00000010    "TEMPLATE" */
>     0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> -    0x28,0x05,0x10,0x20,0x01,0x00,0x00,0x00,  /* 00000020    "(.. ...." */
> +    0x23,0x11,0x11,0x20,0x01,0x00,0x00,0x00,  /* 00000020    "#.. ...." */
>     0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000028    "........" */
>     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000030    "........" */
>     0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000038    "........" */
> @@ -395,7 +408,41 @@ const unsigned char TemplateFadt[] =
>     0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x01,  /* 000000D8    "........" */
>     0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000E0    "........" */
>     0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000E8    "........" */
> -    0x00,0x00,0x00,0x00                       /* 000000F0    "...."     */
> +    0x00,0x00,0x00,0x00,0x01,0x08,0x00,0x01,  /* 000000F0    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000F8    "........" */
> +    0x01,0x08,0x00,0x01,0x00,0x00,0x00,0x00,  /* 00000100    "........" */
> +    0x00,0x00,0x00,0x00                       /* 00000108    "...."     */
> +};
> +
> +const unsigned char TemplateFpdt[] =
> +{
> +    0x46,0x50,0x44,0x54,0x64,0x00,0x00,0x00,  /* 00000000    "FPDTd..." */
> +    0x01,0xBD,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
> +    0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45,  /* 00000010    "TEMPLATE" */
> +    0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> +    0x04,0x08,0x11,0x20,0x00,0x00,0x30,0x01,  /* 00000020    "... ..0." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000028    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000030    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000038    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000040    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000048    "........" */
> +    0x00,0x00,0x00,0x00,0x01,0x00,0x10,0x01,  /* 00000050    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000058    "........" */
> +    0x00,0x00,0x00,0x00                       /* 00000060    "...."     */
> +};
> +
> +const unsigned char TemplateGtdt[] =
> +{
> +    0x47,0x54,0x44,0x54,0x50,0x00,0x00,0x00,  /* 00000000    "GTDTP..." */
> +    0x01,0xF1,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
> +    0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45,  /* 00000010    "TEMPLATE" */
> +    0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> +    0x23,0x06,0x11,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "#.. ...." */
> +    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000028    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000030    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000038    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000040    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00   /* 00000048    "........" */
>  };
>
>  const unsigned char TemplateHest[] =
> @@ -500,13 +547,15 @@ const unsigned char TemplateIvrs[] =
>     0x00,0x00,0x00,0x00                       /* 000000B8    "...."     */
>  };
>
> +/* MADT with ACPI 5.0 subtables */
> +
>  const unsigned char TemplateMadt[] =
>  {
> -    0x41,0x50,0x49,0x43,0xB6,0x00,0x00,0x00,  /* 00000000    "APIC...." */
> -    0x01,0x45,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    ".EINTEL " */
> +    0x41,0x50,0x49,0x43,0xF6,0x00,0x00,0x00,  /* 00000000    "APIC...." */
> +    0x01,0xB0,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
>     0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45,  /* 00000010    "TEMPLATE" */
>     0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> -    0x28,0x05,0x10,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "(.. ...." */
> +    0x23,0x06,0x11,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "#.. ...." */
>     0x01,0x00,0x00,0x00,0x00,0x08,0x00,0x00,  /* 00000028    "........" */
>     0x01,0x00,0x00,0x00,0x01,0x0C,0x01,0x00,  /* 00000030    "........" */
>     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000038    "........" */
> @@ -524,7 +573,15 @@ const unsigned char TemplateMadt[] =
>     0x00,0x00,0x09,0x10,0x00,0x00,0x00,0x00,  /* 00000098    "........" */
>     0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,  /* 000000A0    "........" */
>     0x00,0x00,0x0A,0x0C,0x05,0x00,0x00,0x00,  /* 000000A8    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00             /* 000000B0    "......"   */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x0B,0x28,  /* 000000B0    ".......(" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000B8    "........" */
> +    0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,  /* 000000C0    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000C8    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000D0    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x18,  /* 000000D8    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000E0    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000E8    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00             /* 000000F0    "......"   */
>  };
>
>  const unsigned char TemplateMcfg[] =
> @@ -552,6 +609,24 @@ const unsigned char TemplateMchi[] =
>     0x00,0x00,0x00,0x00,0x00                  /* 00000040    "....."    */
>  };
>
> +const unsigned char TemplateMpst[] =
> +{
> +    0x4D,0x50,0x53,0x54,0x6E,0x00,0x00,0x00,  /* 00000000    "MPSTn..." */
> +    0x01,0x98,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
> +    0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45,  /* 00000010    "TEMPLATE" */
> +    0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> +    0x04,0x08,0x11,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "... ...." */
> +    0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000028    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000030    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000038    "........" */
> +    0x00,0x00,0x02,0x03,0x00,0x00,0x00,0x00,  /* 00000040    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000048    "........" */
> +    0x01,0x00,0x41,0x00,0x00,0x00,0x00,0x00,  /* 00000050    "..A....." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000058    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000060    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00             /* 00000068    "......"   */
> +};
> +
>  const unsigned char TemplateMsct[] =
>  {
>     0x4D,0x53,0x43,0x54,0x90,0x00,0x00,0x00,  /* 00000000    "MSCT...." */
> @@ -574,6 +649,33 @@ const unsigned char TemplateMsct[] =
>     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00   /* 00000088    "........" */
>  };
>
> +const unsigned char TemplatePmtt[] =
> +{
> +    0x50,0x4D,0x54,0x54,0xB4,0x00,0x00,0x00,  /* 00000000    "PMTT...." */
> +    0x01,0x3A,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    ".:INTEL " */
> +    0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45,  /* 00000010    "TEMPLATE" */
> +    0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> +    0x26,0x08,0x11,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "&.. ...." */
> +    0x00,0x00,0x80,0x00,0x01,0x00,0x00,0x00,  /* 00000028    "........" */
> +    0x00,0x00,0x00,0x00,0x01,0x00,0x54,0x00,  /* 00000030    "......T." */
> +    0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000038    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000040    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000048    "........" */
> +    0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,  /* 00000050    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000058    "........" */
> +    0x02,0x00,0x14,0x00,0x02,0x00,0x00,0x00,  /* 00000060    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000068    "........" */
> +    0x00,0x00,0x00,0x00,0x02,0x00,0x14,0x00,  /* 00000070    "........" */
> +    0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000078    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000080    "........" */
> +    0x01,0x00,0x20,0x00,0x01,0x00,0x00,0x00,  /* 00000088    ".. ....." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000090    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000098    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000A0    "........" */
> +    0x00,0x00,0x0C,0x00,0x01,0x00,0x00,0x00,  /* 000000A8    "........" */
> +    0x00,0x00,0x00,0x00                       /* 000000B0    "...."     */
> +};
> +
>  const unsigned char TemplateRsdp[] =
>  {
>     0x52,0x53,0x44,0x20,0x50,0x54,0x52,0x20,  /* 00000000    "RSD PTR " */
> @@ -596,6 +698,17 @@ const unsigned char TemplateRsdt[] =
>     0x80,0x00,0x00,0x00                       /* 00000040    "...."     */
>  };
>
> +const unsigned char TemplateS3pt[] =
> +{
> +    0x53,0x33,0x50,0x54,0x34,0x00,0x00,0x00,  /* 00000000    "S3PT4..." */
> +    0x00,0x00,0x18,0x01,0x00,0x00,0x00,0x00,  /* 00000008    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000010    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000018    "........" */
> +    0x01,0x00,0x14,0x01,0x00,0x00,0x00,0x00,  /* 00000020    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000028    "........" */
> +    0x00,0x00,0x00,0x00                       /* 00000030    "...."     */
> +};
> +
>  const unsigned char TemplateSbst[] =
>  {
>     0x53,0x42,0x53,0x54,0x30,0x00,0x00,0x00,  /* 00000000    "SBST0..." */
> diff --git a/src/acpica/source/compiler/dtutils.c b/src/acpica/source/compiler/dtutils.c
> index 65371cd..ece6424 100644
> --- a/src/acpica/source/compiler/dtutils.c
> +++ b/src/acpica/source/compiler/dtutils.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -456,7 +456,9 @@ DtGetFieldType (
>     case ACPI_DMT_FLAG6:
>     case ACPI_DMT_FLAG7:
>     case ACPI_DMT_FLAGS0:
> +    case ACPI_DMT_FLAGS1:
>     case ACPI_DMT_FLAGS2:
> +    case ACPI_DMT_FLAGS4:
>         Type = DT_FIELD_TYPE_FLAG;
>         break;
>
> @@ -582,8 +584,11 @@ DtGetFieldLength (
>     case ACPI_DMT_FLAG6:
>     case ACPI_DMT_FLAG7:
>     case ACPI_DMT_FLAGS0:
> +    case ACPI_DMT_FLAGS1:
>     case ACPI_DMT_FLAGS2:
> +    case ACPI_DMT_FLAGS4:
>     case ACPI_DMT_LABEL:
> +    case ACPI_DMT_EXTRA_TEXT:
>         ByteLength = 0;
>         break;
>
> @@ -593,6 +598,7 @@ DtGetFieldLength (
>     case ACPI_DMT_ACCWIDTH:
>     case ACPI_DMT_IVRS:
>     case ACPI_DMT_MADT:
> +    case ACPI_DMT_PMTT:
>     case ACPI_DMT_SRAT:
>     case ACPI_DMT_ASF:
>     case ACPI_DMT_HESTNTYP:
> @@ -622,6 +628,11 @@ DtGetFieldLength (
>         ByteLength = 4;
>         break;
>
> +    case ACPI_DMT_UINT40:
> +        ByteLength = 5;
> +        break;
> +
> +    case ACPI_DMT_UINT48:
>     case ACPI_DMT_NAME6:
>         ByteLength = 6;
>         break;
> diff --git a/src/acpica/source/components/debugger/dbcmds.c b/src/acpica/source/components/debugger/dbcmds.c
> index 21bccc1..4c34a79 100644
> --- a/src/acpica/source/components/debugger/dbcmds.c
> +++ b/src/acpica/source/components/debugger/dbcmds.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -118,6 +118,7 @@
>  #include "accommon.h"
>  #include "acevents.h"
>  #include "acdebug.h"
> +#include "acnamesp.h"
>  #include "acresrc.h"
>  #include "actables.h"
>
> @@ -141,6 +142,18 @@ AcpiDmTestResourceConversion (
>     ACPI_NAMESPACE_NODE     *Node,
>     char                    *Name);
>
> +static ACPI_STATUS
> +AcpiDbResourceCallback (
> +    ACPI_RESOURCE           *Resource,
> +    void                    *Context);
> +
> +static ACPI_STATUS
> +AcpiDbDeviceResources (
> +    ACPI_HANDLE             ObjHandle,
> +    UINT32                  NestingLevel,
> +    void                    *Context,
> +    void                    **ReturnValue);
> +
>
>  /*******************************************************************************
>  *
> @@ -220,28 +233,49 @@ AcpiDbSleep (
>     UINT8                   SleepState;
>
>
> +    ACPI_FUNCTION_TRACE (AcpiDbSleep);
> +
> +
>     SleepState = (UINT8) ACPI_STRTOUL (ObjectArg, NULL, 0);
>
>     AcpiOsPrintf ("**** Prepare to sleep ****\n");
>     Status = AcpiEnterSleepStatePrep (SleepState);
>     if (ACPI_FAILURE (Status))
>     {
> -        return (Status);
> +        goto ErrorExit;
>     }
>
>     AcpiOsPrintf ("**** Going to sleep ****\n");
> -    Status = AcpiEnterSleepState (SleepState);
> +    Status = AcpiEnterSleepState (SleepState, ACPI_NO_OPTIONAL_METHODS);
>     if (ACPI_FAILURE (Status))
>     {
> -        return (Status);
> +        goto ErrorExit;
>     }
>
> -    AcpiOsPrintf ("**** returning from sleep ****\n");
> +    AcpiOsPrintf ("**** Prepare to return from sleep ****\n");
> +    Status = AcpiLeaveSleepStatePrep (SleepState, ACPI_NO_OPTIONAL_METHODS);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        goto ErrorExit;
> +    }
> +
> +    AcpiOsPrintf ("**** Returning from sleep ****\n");
>     Status = AcpiLeaveSleepState (SleepState);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        goto ErrorExit;
> +    }
>
>     return (Status);
> +
> +
> +ErrorExit:
> +
> +    ACPI_EXCEPTION ((AE_INFO, Status, "During sleep test"));
> +    return (Status);
>  }
>
> +
>  /*******************************************************************************
>  *
>  * FUNCTION:    AcpiDbDisplayLocks
> @@ -528,6 +562,78 @@ AcpiDbDisplayInterfaces (
>
>  /*******************************************************************************
>  *
> + * FUNCTION:    AcpiDbDisplayTemplate
> + *
> + * PARAMETERS:  BufferArg           - Buffer name or addrss
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Dump a buffer that contains a resource template
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDbDisplayTemplate (
> +    char                    *BufferArg)
> +{
> +    ACPI_NAMESPACE_NODE     *Node;
> +    ACPI_STATUS             Status;
> +    ACPI_BUFFER             ReturnObj;
> +
> +
> +    /* Translate BufferArg to an Named object */
> +
> +    Node = AcpiDbConvertToNode (BufferArg);
> +    if (!Node || (Node == AcpiGbl_RootNode))
> +    {
> +        AcpiOsPrintf ("Invalid argument: %s\n", BufferArg);
> +        return;
> +    }
> +
> +    /* We must have a buffer object */
> +
> +    if (Node->Type != ACPI_TYPE_BUFFER)
> +    {
> +        AcpiOsPrintf ("Not a Buffer object, cannot be a template: %s\n",
> +            BufferArg);
> +        return;
> +    }
> +
> +    ReturnObj.Length = ACPI_DEBUG_BUFFER_SIZE;
> +    ReturnObj.Pointer = AcpiGbl_DbBuffer;
> +
> +    /* Attempt to convert the raw buffer to a resource list */
> +
> +    Status = AcpiRsCreateResourceList (Node->Object, &ReturnObj);
> +
> +    AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT);
> +    AcpiDbgLevel |= ACPI_LV_RESOURCES;
> +
> +    if (ACPI_FAILURE (Status))
> +    {
> +        AcpiOsPrintf ("Could not convert Buffer to a resource list: %s, %s\n",
> +            BufferArg, AcpiFormatException (Status));
> +        goto DumpBuffer;
> +    }
> +
> +    /* Now we can dump the resource list */
> +
> +    AcpiRsDumpResourceList (ACPI_CAST_PTR (ACPI_RESOURCE,
> +        ReturnObj.Pointer));
> +
> +DumpBuffer:
> +    AcpiOsPrintf ("\nRaw data buffer:\n");
> +    AcpiUtDumpBuffer ((UINT8 *) Node->Object->Buffer.Pointer,
> +        Node->Object->Buffer.Length,
> +        DB_BYTE_DISPLAY, ACPI_UINT32_MAX);
> +
> +    AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT);
> +    return;
> +}
> +
> +
> +/*******************************************************************************
> + *
>  * FUNCTION:    AcpiDmCompareAmlResources
>  *
>  * PARAMETERS:  Aml1Buffer          - Contains first resource list
> @@ -551,11 +657,14 @@ AcpiDmCompareAmlResources (
>  {
>     UINT8                   *Aml1;
>     UINT8                   *Aml2;
> +    UINT8                   *Aml1End;
> +    UINT8                   *Aml2End;
>     ACPI_RSDESC_SIZE        Aml1Length;
>     ACPI_RSDESC_SIZE        Aml2Length;
>     ACPI_RSDESC_SIZE        Offset = 0;
>     UINT8                   ResourceType;
>     UINT32                  Count = 0;
> +    UINT32                  i;
>
>
>     /* Compare overall buffer sizes (may be different due to size rounding) */
> @@ -563,16 +672,18 @@ AcpiDmCompareAmlResources (
>     if (Aml1BufferLength != Aml2BufferLength)
>     {
>         AcpiOsPrintf (
> -            "**** Buffer length mismatch in converted AML: original %X new %X ****\n",
> +            "**** Buffer length mismatch in converted AML: Original %X, New %X ****\n",
>             Aml1BufferLength, Aml2BufferLength);
>     }
>
>     Aml1 = Aml1Buffer;
>     Aml2 = Aml2Buffer;
> +    Aml1End = Aml1Buffer + Aml1BufferLength;
> +    Aml2End = Aml2Buffer + Aml2BufferLength;
>
>     /* Walk the descriptor lists, comparing each descriptor */
>
> -    while (Aml1 < (Aml1Buffer + Aml1BufferLength))
> +    while ((Aml1 < Aml1End) && (Aml2 < Aml2End))
>     {
>         /* Get the lengths of each descriptor */
>
> @@ -585,7 +696,7 @@ AcpiDmCompareAmlResources (
>         if (Aml1Length != Aml2Length)
>         {
>             AcpiOsPrintf (
> -                "**** Length mismatch in descriptor [%.2X] type %2.2X, Offset %8.8X L1 %X L2 %X ****\n",
> +                "**** Length mismatch in descriptor [%.2X] type %2.2X, Offset %8.8X Len1 %X, Len2 %X ****\n",
>                 Count, ResourceType, Offset, Aml1Length, Aml2Length);
>         }
>
> @@ -596,6 +707,15 @@ AcpiDmCompareAmlResources (
>             AcpiOsPrintf (
>                 "**** Data mismatch in descriptor [%.2X] type %2.2X, Offset %8.8X ****\n",
>                 Count, ResourceType, Offset);
> +
> +            for (i = 0; i < Aml1Length; i++)
> +            {
> +                if (Aml1[i] != Aml2[i])
> +                {
> +                    AcpiOsPrintf ("Mismatch at byte offset %.2X: is %2.2X, should be %2.2X\n",
> +                        i, Aml2[i], Aml1[i]);
> +                }
> +            }
>         }
>
>         /* Exit on EndTag descriptor */
> @@ -698,160 +818,301 @@ Exit1:
>
>  /*******************************************************************************
>  *
> - * FUNCTION:    AcpiDbDisplayResources
> + * FUNCTION:    AcpiDbResourceCallback
>  *
> - * PARAMETERS:  ObjectArg       - String with hex value of the object
> + * PARAMETERS:  ACPI_WALK_RESOURCE_CALLBACK
>  *
> - * RETURN:      None
> + * RETURN:      Status
>  *
> - * DESCRIPTION: Display the resource objects associated with a device.
> + * DESCRIPTION: Simple callback to exercise AcpiWalkResources
>  *
>  ******************************************************************************/
>
> -void
> -AcpiDbDisplayResources (
> -    char                    *ObjectArg)
> +static ACPI_STATUS
> +AcpiDbResourceCallback (
> +    ACPI_RESOURCE           *Resource,
> +    void                    *Context)
> +{
> +
> +    return (AE_OK);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiDbDeviceResources
> + *
> + * PARAMETERS:  ACPI_WALK_CALLBACK
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Display the _PRT/_CRS/_PRS resources for a device object.
> + *
> + ******************************************************************************/
> +
> +static ACPI_STATUS
> +AcpiDbDeviceResources (
> +    ACPI_HANDLE             ObjHandle,
> +    UINT32                  NestingLevel,
> +    void                    *Context,
> +    void                    **ReturnValue)
>  {
>     ACPI_NAMESPACE_NODE     *Node;
> -    ACPI_STATUS             Status;
> +    ACPI_NAMESPACE_NODE     *PrtNode = NULL;
> +    ACPI_NAMESPACE_NODE     *CrsNode = NULL;
> +    ACPI_NAMESPACE_NODE     *PrsNode = NULL;
> +    ACPI_NAMESPACE_NODE     *AeiNode = NULL;
> +    char                    *ParentPath;
>     ACPI_BUFFER             ReturnObj;
> +    ACPI_STATUS             Status;
>
>
> -    AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT);
> -    AcpiDbgLevel |= ACPI_LV_RESOURCES;
> +    Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ObjHandle);
> +    ParentPath = AcpiNsGetExternalPathname (Node);
> +    if (!ParentPath)
> +    {
> +        return (AE_NO_MEMORY);
> +    }
>
> -    /* Convert string to object pointer */
> +    /* Get handles to the resource methods for this device */
>
> -    Node = AcpiDbConvertToNode (ObjectArg);
> -    if (!Node)
> +    (void) AcpiGetHandle (Node, METHOD_NAME__PRT, ACPI_CAST_PTR (ACPI_HANDLE, &PrtNode));
> +    (void) AcpiGetHandle (Node, METHOD_NAME__CRS, ACPI_CAST_PTR (ACPI_HANDLE, &CrsNode));
> +    (void) AcpiGetHandle (Node, METHOD_NAME__PRS, ACPI_CAST_PTR (ACPI_HANDLE, &PrsNode));
> +    (void) AcpiGetHandle (Node, METHOD_NAME__AEI, ACPI_CAST_PTR (ACPI_HANDLE, &AeiNode));
> +    if (!PrtNode && !CrsNode && !PrsNode && !AeiNode)
>     {
> -        return;
> +        goto Cleanup;   /* Nothing to do */
>     }
>
> +    AcpiOsPrintf ("\nDevice: %s\n", ParentPath);
> +
>     /* Prepare for a return object of arbitrary size */
>
>     ReturnObj.Pointer = AcpiGbl_DbBuffer;
>     ReturnObj.Length  = ACPI_DEBUG_BUFFER_SIZE;
>
> +
>     /* _PRT */
>
> -    AcpiOsPrintf ("Evaluating _PRT\n");
> +    if (PrtNode)
> +    {
> +        AcpiOsPrintf ("Evaluating _PRT\n");
>
> -    /* Check if _PRT exists */
> +        Status = AcpiEvaluateObject (PrtNode, NULL, NULL, &ReturnObj);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            AcpiOsPrintf ("Could not evaluate _PRT: %s\n",
> +                AcpiFormatException (Status));
> +            goto GetCrs;
> +        }
>
> -    Status = AcpiEvaluateObject (Node, METHOD_NAME__PRT, NULL, &ReturnObj);
> -    if (ACPI_FAILURE (Status))
> -    {
> -        AcpiOsPrintf ("Could not obtain _PRT: %s\n",
> -            AcpiFormatException (Status));
> -        goto GetCrs;
> -    }
> +        ReturnObj.Pointer = AcpiGbl_DbBuffer;
> +        ReturnObj.Length  = ACPI_DEBUG_BUFFER_SIZE;
>
> -    ReturnObj.Pointer = AcpiGbl_DbBuffer;
> -    ReturnObj.Length  = ACPI_DEBUG_BUFFER_SIZE;
> +        Status = AcpiGetIrqRoutingTable (Node, &ReturnObj);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            AcpiOsPrintf ("GetIrqRoutingTable failed: %s\n",
> +                AcpiFormatException (Status));
> +            goto GetCrs;
> +        }
>
> -    Status = AcpiGetIrqRoutingTable (Node, &ReturnObj);
> -    if (ACPI_FAILURE (Status))
> -    {
> -        AcpiOsPrintf ("GetIrqRoutingTable failed: %s\n",
> -            AcpiFormatException (Status));
> -        goto GetCrs;
> +        AcpiRsDumpIrqList (ACPI_CAST_PTR (UINT8, AcpiGbl_DbBuffer));
>     }
>
> -    AcpiRsDumpIrqList (ACPI_CAST_PTR (UINT8, AcpiGbl_DbBuffer));
> -
>
>     /* _CRS */
>
>  GetCrs:
> -    AcpiOsPrintf ("Evaluating _CRS\n");
> +    if (CrsNode)
> +    {
> +        AcpiOsPrintf ("Evaluating _CRS\n");
>
> -    ReturnObj.Pointer = AcpiGbl_DbBuffer;
> -    ReturnObj.Length  = ACPI_DEBUG_BUFFER_SIZE;
> +        ReturnObj.Pointer = AcpiGbl_DbBuffer;
> +        ReturnObj.Length  = ACPI_DEBUG_BUFFER_SIZE;
>
> -    /* Check if _CRS exists */
> +        Status = AcpiEvaluateObject (CrsNode, NULL, NULL, &ReturnObj);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            AcpiOsPrintf ("Could not evaluate _CRS: %s\n",
> +                AcpiFormatException (Status));
> +            goto GetPrs;
> +        }
>
> -    Status = AcpiEvaluateObject (Node, METHOD_NAME__CRS, NULL, &ReturnObj);
> -    if (ACPI_FAILURE (Status))
> -    {
> -        AcpiOsPrintf ("Could not obtain _CRS: %s\n",
> -            AcpiFormatException (Status));
> -        goto GetPrs;
> -    }
> +        /* This code is here to exercise the AcpiWalkResources interface */
>
> -    /* Get the _CRS resource list */
> +        Status = AcpiWalkResources (Node, METHOD_NAME__CRS,
> +            AcpiDbResourceCallback, NULL);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            AcpiOsPrintf ("AcpiWalkResources failed: %s\n",
> +                AcpiFormatException (Status));
> +            goto GetPrs;
> +        }
>
> -    ReturnObj.Pointer = AcpiGbl_DbBuffer;
> -    ReturnObj.Length  = ACPI_DEBUG_BUFFER_SIZE;
> +        /* Get the _CRS resource list */
>
> -    Status = AcpiGetCurrentResources (Node, &ReturnObj);
> -    if (ACPI_FAILURE (Status))
> -    {
> -        AcpiOsPrintf ("AcpiGetCurrentResources failed: %s\n",
> -            AcpiFormatException (Status));
> -        goto GetPrs;
> -    }
> +        ReturnObj.Pointer = AcpiGbl_DbBuffer;
> +        ReturnObj.Length  = ACPI_DEBUG_BUFFER_SIZE;
>
> -    /* Dump the _CRS resource list */
> +        Status = AcpiGetCurrentResources (Node, &ReturnObj);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            AcpiOsPrintf ("AcpiGetCurrentResources failed: %s\n",
> +                AcpiFormatException (Status));
> +            goto GetPrs;
> +        }
>
> -    AcpiRsDumpResourceList (ACPI_CAST_PTR (ACPI_RESOURCE,
> -        ReturnObj.Pointer));
> +        /* Dump the _CRS resource list */
> +
> +        AcpiRsDumpResourceList (ACPI_CAST_PTR (ACPI_RESOURCE,
> +            ReturnObj.Pointer));
>
> -    /*
> -     * Perform comparison of original AML to newly created AML. This tests both
> -     * the AML->Resource conversion and the Resource->Aml conversion.
> -     */
> -    Status = AcpiDmTestResourceConversion (Node, METHOD_NAME__CRS);
> +        /*
> +         * Perform comparison of original AML to newly created AML. This tests both
> +         * the AML->Resource conversion and the Resource->Aml conversion.
> +         */
> +        Status = AcpiDmTestResourceConversion (Node, METHOD_NAME__CRS);
>
> -    /* Execute _SRS with the resource list */
> +        /* Execute _SRS with the resource list */
>
> -    Status = AcpiSetCurrentResources (Node, &ReturnObj);
> -    if (ACPI_FAILURE (Status))
> -    {
> -        AcpiOsPrintf ("AcpiSetCurrentResources failed: %s\n",
> -            AcpiFormatException (Status));
> -        goto GetPrs;
> +        Status = AcpiSetCurrentResources (Node, &ReturnObj);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            AcpiOsPrintf ("AcpiSetCurrentResources failed: %s\n",
> +                AcpiFormatException (Status));
> +            goto GetPrs;
> +        }
>     }
>
>
>     /* _PRS */
>
>  GetPrs:
> -    AcpiOsPrintf ("Evaluating _PRS\n");
> +    if (PrsNode)
> +    {
> +        AcpiOsPrintf ("Evaluating _PRS\n");
>
> -    ReturnObj.Pointer = AcpiGbl_DbBuffer;
> -    ReturnObj.Length  = ACPI_DEBUG_BUFFER_SIZE;
> +        ReturnObj.Pointer = AcpiGbl_DbBuffer;
> +        ReturnObj.Length  = ACPI_DEBUG_BUFFER_SIZE;
>
> -    /* Check if _PRS exists */
> +        Status = AcpiEvaluateObject (PrsNode, NULL, NULL, &ReturnObj);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            AcpiOsPrintf ("Could not evaluate _PRS: %s\n",
> +                AcpiFormatException (Status));
> +            goto GetAei;
> +        }
>
> -    Status = AcpiEvaluateObject (Node, METHOD_NAME__PRS, NULL, &ReturnObj);
> -    if (ACPI_FAILURE (Status))
> -    {
> -        AcpiOsPrintf ("Could not obtain _PRS: %s\n",
> -            AcpiFormatException (Status));
> -        goto Cleanup;
> +        ReturnObj.Pointer = AcpiGbl_DbBuffer;
> +        ReturnObj.Length  = ACPI_DEBUG_BUFFER_SIZE;
> +
> +        Status = AcpiGetPossibleResources (Node, &ReturnObj);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            AcpiOsPrintf ("AcpiGetPossibleResources failed: %s\n",
> +                AcpiFormatException (Status));
> +            goto GetAei;
> +        }
> +
> +        AcpiRsDumpResourceList (ACPI_CAST_PTR (ACPI_RESOURCE, AcpiGbl_DbBuffer));
>     }
>
> -    ReturnObj.Pointer = AcpiGbl_DbBuffer;
> -    ReturnObj.Length  = ACPI_DEBUG_BUFFER_SIZE;
>
> -    Status = AcpiGetPossibleResources (Node, &ReturnObj);
> -    if (ACPI_FAILURE (Status))
> +    /* _AEI */
> +
> +GetAei:
> +    if (AeiNode)
>     {
> -        AcpiOsPrintf ("AcpiGetPossibleResources failed: %s\n",
> -            AcpiFormatException (Status));
> -        goto Cleanup;
> +        AcpiOsPrintf ("Evaluating _AEI\n");
> +
> +        ReturnObj.Pointer = AcpiGbl_DbBuffer;
> +        ReturnObj.Length  = ACPI_DEBUG_BUFFER_SIZE;
> +
> +        Status = AcpiEvaluateObject (AeiNode, NULL, NULL, &ReturnObj);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            AcpiOsPrintf ("Could not evaluate _AEI: %s\n",
> +                AcpiFormatException (Status));
> +            goto Cleanup;
> +        }
> +
> +        ReturnObj.Pointer = AcpiGbl_DbBuffer;
> +        ReturnObj.Length  = ACPI_DEBUG_BUFFER_SIZE;
> +
> +        Status = AcpiGetEventResources (Node, &ReturnObj);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            AcpiOsPrintf ("AcpiGetEventResources failed: %s\n",
> +                AcpiFormatException (Status));
> +            goto Cleanup;
> +        }
> +
> +        AcpiRsDumpResourceList (ACPI_CAST_PTR (ACPI_RESOURCE, AcpiGbl_DbBuffer));
>     }
>
> -    AcpiRsDumpResourceList (ACPI_CAST_PTR (ACPI_RESOURCE, AcpiGbl_DbBuffer));
>
>  Cleanup:
> +    ACPI_FREE (ParentPath);
> +    return (AE_OK);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiDbDisplayResources
> + *
> + * PARAMETERS:  ObjectArg       - String object name or object pointer.
> + *                                "*" means "display resources for all devices"
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Display the resource objects associated with a device.
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDbDisplayResources (
> +    char                    *ObjectArg)
> +{
> +    ACPI_NAMESPACE_NODE     *Node;
> +
> +
> +    AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT);
> +    AcpiDbgLevel |= ACPI_LV_RESOURCES;
> +
> +    /* Asterisk means "display resources for all devices" */
> +
> +    if (!ACPI_STRCMP (ObjectArg, "*"))
> +    {
> +        (void) AcpiWalkNamespace (ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
> +                    ACPI_UINT32_MAX, AcpiDbDeviceResources, NULL, NULL, NULL);
> +    }
> +    else
> +    {
> +        /* Convert string to object pointer */
> +
> +        Node = AcpiDbConvertToNode (ObjectArg);
> +        if (Node)
> +        {
> +            if (Node->Type != ACPI_TYPE_DEVICE)
> +            {
> +                AcpiOsPrintf ("%4.4s: Name is not a device object (%s)\n",
> +                    Node->Name.Ascii, AcpiUtGetTypeName (Node->Type));
> +            }
> +            else
> +            {
> +                (void) AcpiDbDeviceResources (Node, 0, NULL, NULL);
> +            }
> +        }
> +    }
>
>     AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT);
> -    return;
>  }
>
>
> +#if (!ACPI_REDUCED_HARDWARE)
>  /*******************************************************************************
>  *
>  * FUNCTION:    AcpiDbGenerateGpe
> @@ -890,5 +1151,6 @@ AcpiDbGenerateGpe (
>
>     (void) AcpiEvGpeDispatch (NULL, GpeEventInfo, GpeNumber);
>  }
> +#endif /* !ACPI_REDUCED_HARDWARE */
>
>  #endif /* ACPI_DEBUGGER */
> diff --git a/src/acpica/source/components/debugger/dbdisply.c b/src/acpica/source/components/debugger/dbdisply.c
> index fb5fd19..d8b3aa9 100644
> --- a/src/acpica/source/components/debugger/dbdisply.c
> +++ b/src/acpica/source/components/debugger/dbdisply.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -162,6 +162,8 @@ static ACPI_ADR_SPACE_TYPE  AcpiGbl_SpaceIdList[] =
>     ACPI_ADR_SPACE_CMOS,
>     ACPI_ADR_SPACE_PCI_BAR_TARGET,
>     ACPI_ADR_SPACE_IPMI,
> +    ACPI_ADR_SPACE_GPIO,
> +    ACPI_ADR_SPACE_GSBUS,
>     ACPI_ADR_SPACE_DATA_TABLE,
>     ACPI_ADR_SPACE_FIXED_HARDWARE
>  };
> @@ -840,6 +842,7 @@ AcpiDbDisplayArgumentObject (
>  }
>
>
> +#if (!ACPI_REDUCED_HARDWARE)
>  /*******************************************************************************
>  *
>  * FUNCTION:    AcpiDbDisplayGpes
> @@ -1002,6 +1005,7 @@ AcpiDbDisplayGpes (
>         GpeXruptInfo = GpeXruptInfo->Next;
>     }
>  }
> +#endif /* !ACPI_REDUCED_HARDWARE */
>
>
>  /*******************************************************************************
> @@ -1043,7 +1047,7 @@ AcpiDbDisplayHandlers (
>
>             while (HandlerObj)
>             {
> -                if (i == HandlerObj->AddressSpace.SpaceId)
> +                if (AcpiGbl_SpaceIdList[i] == HandlerObj->AddressSpace.SpaceId)
>                 {
>                     AcpiOsPrintf (ACPI_HANDLER_PRESENT_STRING,
>                         (HandlerObj->AddressSpace.HandlerFlags &
> @@ -1061,8 +1065,28 @@ AcpiDbDisplayHandlers (
>
>         FoundHandler:;
>         }
> +
> +        /* Find all handlers for user-defined SpaceIDs */
> +
> +        HandlerObj = ObjDesc->Device.Handler;
> +        while (HandlerObj)
> +        {
> +            if (HandlerObj->AddressSpace.SpaceId >= ACPI_USER_REGION_BEGIN)
> +            {
> +                AcpiOsPrintf (ACPI_PREDEFINED_PREFIX,
> +                    "User-defined ID", HandlerObj->AddressSpace.SpaceId);
> +                AcpiOsPrintf (ACPI_HANDLER_PRESENT_STRING,
> +                    (HandlerObj->AddressSpace.HandlerFlags &
> +                        ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) ? "Default" : "User",
> +                    HandlerObj->AddressSpace.Handler);
> +            }
> +
> +            HandlerObj = HandlerObj->AddressSpace.Next;
> +        }
>     }
>
> +#if (!ACPI_REDUCED_HARDWARE)
> +
>     /* Fixed event handlers */
>
>     AcpiOsPrintf ("\nFixed Event Handlers:\n");
> @@ -1081,6 +1105,8 @@ AcpiDbDisplayHandlers (
>         }
>     }
>
> +#endif /* !ACPI_REDUCED_HARDWARE */
> +
>     /* Miscellaneous global handlers */
>
>     AcpiOsPrintf ("\nMiscellaneous Global Handlers:\n");
> diff --git a/src/acpica/source/components/debugger/dbexec.c b/src/acpica/source/components/debugger/dbexec.c
> index 53539b9..eb85998 100644
> --- a/src/acpica/source/components/debugger/dbexec.c
> +++ b/src/acpica/source/components/debugger/dbexec.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/debugger/dbfileio.c b/src/acpica/source/components/debugger/dbfileio.c
> index 66ff961..495d609 100644
> --- a/src/acpica/source/components/debugger/dbfileio.c
> +++ b/src/acpica/source/components/debugger/dbfileio.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -343,10 +343,11 @@ AcpiDbReadTable (
>
>     fseek (fp, 0, SEEK_SET);
>
> -    /* The RSDT and FACS tables do not have standard ACPI headers */
> +    /* The RSDT, FACS and S3PT tables do not have standard ACPI headers */
>
>     if (ACPI_COMPARE_NAME (TableHeader.Signature, "RSD ") ||
> -        ACPI_COMPARE_NAME (TableHeader.Signature, "FACS"))
> +        ACPI_COMPARE_NAME (TableHeader.Signature, "FACS") ||
> +        ACPI_COMPARE_NAME (TableHeader.Signature, "S3PT"))
>     {
>         *TableLength = FileSize;
>         StandardHeader = FALSE;
> diff --git a/src/acpica/source/components/debugger/dbhistry.c b/src/acpica/source/components/debugger/dbhistry.c
> index 6b42b7b..a95f53b 100644
> --- a/src/acpica/source/components/debugger/dbhistry.c
> +++ b/src/acpica/source/components/debugger/dbhistry.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/debugger/dbinput.c b/src/acpica/source/components/debugger/dbinput.c
> index 12f883d..3e61bdb 100644
> --- a/src/acpica/source/components/debugger/dbinput.c
> +++ b/src/acpica/source/components/debugger/dbinput.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -203,6 +203,7 @@ enum AcpiExDebuggerCommands
>     CMD_STATS,
>     CMD_STOP,
>     CMD_TABLES,
> +    CMD_TEMPLATE,
>     CMD_TERMINATE,
>     CMD_THREADS,
>     CMD_TRACE,
> @@ -271,6 +272,7 @@ static const COMMAND_INFO       AcpiGbl_DbCommands[] =
>     {"STATS",        0},
>     {"STOP",         0},
>     {"TABLES",       0},
> +    {"TEMPLATE",     1},
>     {"TERMINATE",    0},
>     {"THREADS",      3},
>     {"TRACE",        1},
> @@ -340,9 +342,10 @@ AcpiDbDisplayHelp (
>     AcpiOsPrintf ("  Predefined                          Check all predefined names\n");
>     AcpiOsPrintf ("  Prefix [<NamePath>]                 Set or Get current execution prefix\n");
>     AcpiOsPrintf ("  References <Addr>                   Find all references to object at addr\n");
> -    AcpiOsPrintf ("  Resources <Device>                  Get and display Device resources\n");
> +    AcpiOsPrintf ("  Resources <DeviceName | *>          Display Device resources (* = all devices)\n");
>     AcpiOsPrintf ("  Set N <NamedObject> <Value>         Set value for named integer\n");
>     AcpiOsPrintf ("  Sleep <SleepState>                  Simulate sleep/wake sequence\n");
> +    AcpiOsPrintf ("  Template <Object>                   Format/dump a Buffer/ResourceTemplate\n");
>     AcpiOsPrintf ("  Terminate                           Delete namespace and all internal objects\n");
>     AcpiOsPrintf ("  Type <Object>                       Display object type\n");
>
> @@ -731,12 +734,15 @@ AcpiDbCommandDispatch (
>         break;
>
>     case CMD_ENABLEACPI:
> +#if (!ACPI_REDUCED_HARDWARE)
> +
>         Status = AcpiEnable();
>         if (ACPI_FAILURE(Status))
>         {
>             AcpiOsPrintf("AcpiEnable failed (Status=%X)\n", Status);
>             return (Status);
>         }
> +#endif /* !ACPI_REDUCED_HARDWARE */
>         break;
>
>     case CMD_EVENT:
> @@ -926,6 +932,10 @@ AcpiDbCommandDispatch (
>         AcpiDbDisplayTableInfo (AcpiGbl_DbArgs[1]);
>         break;
>
> +    case CMD_TEMPLATE:
> +        AcpiDbDisplayTemplate (AcpiGbl_DbArgs[1]);
> +        break;
> +
>     case CMD_TERMINATE:
>         AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT);
>         AcpiUtSubsystemShutdown ();
> diff --git a/src/acpica/source/components/debugger/dbmethod.c b/src/acpica/source/components/debugger/dbmethod.c
> index 110a7ba..47778cc 100644
> --- a/src/acpica/source/components/debugger/dbmethod.c
> +++ b/src/acpica/source/components/debugger/dbmethod.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/debugger/dbnames.c b/src/acpica/source/components/debugger/dbnames.c
> index b1d0712..d1faeef 100644
> --- a/src/acpica/source/components/debugger/dbnames.c
> +++ b/src/acpica/source/components/debugger/dbnames.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/debugger/dbstats.c b/src/acpica/source/components/debugger/dbstats.c
> index 5c1ce99..8a6e713 100644
> --- a/src/acpica/source/components/debugger/dbstats.c
> +++ b/src/acpica/source/components/debugger/dbstats.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/debugger/dbutils.c b/src/acpica/source/components/debugger/dbutils.c
> index 5e4f9eb..fd318d9 100644
> --- a/src/acpica/source/components/debugger/dbutils.c
> +++ b/src/acpica/source/components/debugger/dbutils.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -262,10 +262,7 @@ AcpiDbDumpExternalObject (
>     case ACPI_TYPE_STRING:
>
>         AcpiOsPrintf ("[String] Length %.2X = ", ObjDesc->String.Length);
> -        for (i = 0; i < ObjDesc->String.Length; i++)
> -        {
> -            AcpiOsPrintf ("%c", ObjDesc->String.Pointer[i]);
> -        }
> +        AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX);
>         AcpiOsPrintf ("\n");
>         break;
>
> @@ -280,7 +277,7 @@ AcpiDbDumpExternalObject (
>                 AcpiOsPrintf ("\n");
>             }
>             AcpiUtDumpBuffer (ACPI_CAST_PTR (UINT8, ObjDesc->Buffer.Pointer),
> -                    ObjDesc->Buffer.Length, DB_DWORD_DISPLAY, _COMPONENT);
> +                    ObjDesc->Buffer.Length, DB_BYTE_DISPLAY, _COMPONENT);
>         }
>         else
>         {
> diff --git a/src/acpica/source/components/debugger/dbxface.c b/src/acpica/source/components/debugger/dbxface.c
> index 4ab4ac3..a53c26f 100644
> --- a/src/acpica/source/components/debugger/dbxface.c
> +++ b/src/acpica/source/components/debugger/dbxface.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/disassembler/dmbuffer.c b/src/acpica/source/components/disassembler/dmbuffer.c
> index 2399781..4f9dc15 100644
> --- a/src/acpica/source/components/disassembler/dmbuffer.c
> +++ b/src/acpica/source/components/disassembler/dmbuffer.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -180,19 +180,19 @@ AcpiDmDisasmByteList (
>             }
>
>             AcpiDmIndent (Level);
> -            if (ByteCount > 7)
> +            if (ByteCount > 8)
>             {
> -                AcpiOsPrintf ("/* %04X */    ", i);
> +                AcpiOsPrintf ("/* %04X */  ", i);
>             }
>         }
>
> -        AcpiOsPrintf ("0x%2.2X", (UINT32) ByteData[i]);
> +        AcpiOsPrintf (" 0x%2.2X", (UINT32) ByteData[i]);
>
>         /* Add comma if there are more bytes to display */
>
>         if (i < (ByteCount -1))
>         {
> -            AcpiOsPrintf (", ");
> +            AcpiOsPrintf (",");
>         }
>     }
>
> diff --git a/src/acpica/source/components/disassembler/dmnames.c b/src/acpica/source/components/disassembler/dmnames.c
> index a00aff1..02fc4e5 100644
> --- a/src/acpica/source/components/disassembler/dmnames.c
> +++ b/src/acpica/source/components/disassembler/dmnames.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/disassembler/dmobject.c b/src/acpica/source/components/disassembler/dmobject.c
> index 1aa7215..78d28d3 100644
> --- a/src/acpica/source/components/disassembler/dmobject.c
> +++ b/src/acpica/source/components/disassembler/dmobject.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/disassembler/dmopcode.c b/src/acpica/source/components/disassembler/dmopcode.c
> index 652c8a6..ed457ed 100644
> --- a/src/acpica/source/components/disassembler/dmopcode.c
> +++ b/src/acpica/source/components/disassembler/dmopcode.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -375,6 +375,7 @@ AcpiDmDisassembleOneOp (
>     UINT32                  Length;
>     ACPI_PARSE_OBJECT       *Child;
>     ACPI_STATUS             Status;
> +    UINT8                   *Aml;
>
>
>     if (!Op)
> @@ -498,16 +499,19 @@ AcpiDmDisassembleOneOp (
>          * types of buffers, we have to closely look at the data in the
>          * buffer to determine the type.
>          */
> -        Status = AcpiDmIsResourceTemplate (Op);
> -        if (ACPI_SUCCESS (Status))
> +        if (!AcpiGbl_NoResourceDisassembly)
>         {
> -            Op->Common.DisasmOpcode = ACPI_DASM_RESOURCE;
> -            AcpiOsPrintf ("ResourceTemplate");
> -            break;
> -        }
> -        else if (Status == AE_AML_NO_RESOURCE_END_TAG)
> -        {
> -            AcpiOsPrintf ("/**** Is ResourceTemplate, but EndTag not at buffer end ****/ ");
> +            Status = AcpiDmIsResourceTemplate (Op);
> +            if (ACPI_SUCCESS (Status))
> +            {
> +                Op->Common.DisasmOpcode = ACPI_DASM_RESOURCE;
> +                AcpiOsPrintf ("ResourceTemplate");
> +                break;
> +            }
> +            else if (Status == AE_AML_NO_RESOURCE_END_TAG)
> +            {
> +                AcpiOsPrintf ("/**** Is ResourceTemplate, but EndTag not at buffer end ****/ ");
> +            }
>         }
>
>         if (AcpiDmIsUnicodeBuffer (Op))
> @@ -567,7 +571,7 @@ AcpiDmDisassembleOneOp (
>
>         if (Info->BitOffset % 8 == 0)
>         {
> -            AcpiOsPrintf ("        Offset (0x%.2X)", ACPI_DIV_8 (Info->BitOffset));
> +            AcpiOsPrintf ("Offset (0x%.2X)", ACPI_DIV_8 (Info->BitOffset));
>         }
>         else
>         {
> @@ -579,16 +583,59 @@ AcpiDmDisassembleOneOp (
>
>
>     case AML_INT_ACCESSFIELD_OP:
> +    case AML_INT_EXTACCESSFIELD_OP:
>
> -        AcpiOsPrintf ("        AccessAs (%s, ",
> -            AcpiGbl_AccessTypes [(UINT32) (Op->Common.Value.Integer >> 8) & 0x7]);
> +        AcpiOsPrintf ("AccessAs (%s, ",
> +            AcpiGbl_AccessTypes [(UINT32) (Op->Common.Value.Integer & 0x7)]);
> +
> +        AcpiDmDecodeAttribute ((UINT8) (Op->Common.Value.Integer >> 8));
> +
> +        if (Op->Common.AmlOpcode == AML_INT_EXTACCESSFIELD_OP)
> +        {
> +            AcpiOsPrintf (" (0x%2.2X)", (unsigned) ((Op->Common.Value.Integer >> 16) & 0xFF));
> +        }
>
> -        AcpiDmDecodeAttribute ((UINT8) Op->Common.Value.Integer);
>         AcpiOsPrintf (")");
>         AcpiDmCommaIfFieldMember (Op);
>         break;
>
>
> +    case AML_INT_CONNECTION_OP:
> +
> +        /*
> +         * Two types of Connection() - one with a buffer object, the
> +         * other with a namestring that points to a buffer object.
> +         */
> +        AcpiOsPrintf ("Connection (");
> +        Child = Op->Common.Value.Arg;
> +
> +        if (Child->Common.AmlOpcode == AML_INT_BYTELIST_OP)
> +        {
> +            AcpiOsPrintf ("\n");
> +
> +            Aml = Child->Named.Data;
> +            Length = (UINT32) Child->Common.Value.Integer;
> +
> +            Info->Level += 1;
> +            Op->Common.DisasmOpcode = ACPI_DASM_RESOURCE;
> +            AcpiDmResourceTemplate (Info, Op->Common.Parent, Aml, Length);
> +
> +            Info->Level -= 1;
> +            AcpiDmIndent (Info->Level);
> +        }
> +        else
> +        {
> +            AcpiDmNamestring (Child->Common.Value.Name);
> +        }
> +
> +        AcpiOsPrintf (")");
> +        AcpiDmCommaIfFieldMember (Op);
> +        AcpiOsPrintf ("\n");
> +
> +        Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; /* for now, ignore in AcpiDmAscendingOp */
> +        Child->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
> +        break;
> +
>     case AML_INT_BYTELIST_OP:
>
>         AcpiDmByteList (Info, Op);
> diff --git a/src/acpica/source/components/disassembler/dmresrc.c b/src/acpica/source/components/disassembler/dmresrc.c
> index 93a6c05..0bc5067 100644
> --- a/src/acpica/source/components/disassembler/dmresrc.c
> +++ b/src/acpica/source/components/disassembler/dmresrc.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -127,12 +127,6 @@
>
>  /* Dispatch tables for Resource disassembly functions */
>
> -typedef
> -void (*ACPI_RESOURCE_HANDLER) (
> -    AML_RESOURCE            *Resource,
> -    UINT32                  Length,
> -    UINT32                  Level);
> -
>  static ACPI_RESOURCE_HANDLER    AcpiGbl_DmResourceDispatch [] =
>  {
>     /* Small descriptors */
> @@ -147,7 +141,7 @@ static ACPI_RESOURCE_HANDLER    AcpiGbl_DmResourceDispatch [] =
>     AcpiDmEndDependentDescriptor,   /* 0x07, ACPI_RESOURCE_NAME_END_DEPENDENT */
>     AcpiDmIoDescriptor,             /* 0x08, ACPI_RESOURCE_NAME_IO_PORT */
>     AcpiDmFixedIoDescriptor,        /* 0x09, ACPI_RESOURCE_NAME_FIXED_IO_PORT */
> -    NULL,                           /* 0x0A, Reserved */
> +    AcpiDmFixedDmaDescriptor,       /* 0x0A, ACPI_RESOURCE_NAME_FIXED_DMA */
>     NULL,                           /* 0x0B, Reserved */
>     NULL,                           /* 0x0C, Reserved */
>     NULL,                           /* 0x0D, Reserved */
> @@ -167,7 +161,10 @@ static ACPI_RESOURCE_HANDLER    AcpiGbl_DmResourceDispatch [] =
>     AcpiDmWordDescriptor,           /* 0x08, ACPI_RESOURCE_NAME_WORD_ADDRESS_SPACE */
>     AcpiDmInterruptDescriptor,      /* 0x09, ACPI_RESOURCE_NAME_EXTENDED_XRUPT */
>     AcpiDmQwordDescriptor,          /* 0x0A, ACPI_RESOURCE_NAME_QWORD_ADDRESS_SPACE */
> -    AcpiDmExtendedDescriptor        /* 0x0B, ACPI_RESOURCE_NAME_EXTENDED_ADDRESS_SPACE */
> +    AcpiDmExtendedDescriptor,       /* 0x0B, ACPI_RESOURCE_NAME_EXTENDED_ADDRESS_SPACE */
> +    AcpiDmGpioDescriptor,           /* 0x0C, ACPI_RESOURCE_NAME_GPIO */
> +    NULL,                           /* 0x0D, Reserved */
> +    AcpiDmSerialBusDescriptor       /* 0x0E, ACPI_RESOURCE_NAME_SERIAL_BUS */
>  };
>
>
> diff --git a/src/acpica/source/components/disassembler/dmresrcl.c b/src/acpica/source/components/disassembler/dmresrcl.c
> index d266c57..2060048 100644
> --- a/src/acpica/source/components/disassembler/dmresrcl.c
> +++ b/src/acpica/source/components/disassembler/dmresrcl.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -1122,4 +1122,3 @@ AcpiDmVendorLargeDescriptor (
>  }
>
>  #endif
> -
> diff --git a/src/acpica/source/components/disassembler/dmresrcs.c b/src/acpica/source/components/disassembler/dmresrcs.c
> index 2bb1c91..baf7d31 100644
> --- a/src/acpica/source/components/disassembler/dmresrcs.c
> +++ b/src/acpica/source/components/disassembler/dmresrcs.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -193,9 +193,9 @@ AcpiDmDmaDescriptor (
>
>     AcpiDmIndent (Level);
>     AcpiOsPrintf ("DMA (%s, %s, %s, ",
> -            AcpiGbl_TypDecode [(Resource->Dma.Flags >> 5) & 3],
> -            AcpiGbl_BmDecode  [(Resource->Dma.Flags >> 2) & 1],
> -            AcpiGbl_SizDecode [(Resource->Dma.Flags >> 0) & 3]);
> +        AcpiGbl_TypDecode [(Resource->Dma.Flags >> 5) & 3],
> +        AcpiGbl_BmDecode  [(Resource->Dma.Flags >> 2) & 1],
> +        AcpiGbl_SizDecode [(Resource->Dma.Flags >> 0) & 3]);
>
>     /* Insert a descriptor name */
>
> @@ -209,6 +209,49 @@ AcpiDmDmaDescriptor (
>
>  /*******************************************************************************
>  *
> + * FUNCTION:    AcpiDmFixedDmaDescriptor
> + *
> + * PARAMETERS:  Resource            - Pointer to the resource descriptor
> + *              Length              - Length of the descriptor in bytes
> + *              Level               - Current source code indentation level
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Decode a FixedDMA descriptor
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmFixedDmaDescriptor (
> +    AML_RESOURCE            *Resource,
> +    UINT32                  Length,
> +    UINT32                  Level)
> +{
> +
> +    AcpiDmIndent (Level);
> +    AcpiOsPrintf ("FixedDMA (0x%4.4X, 0x%4.4X, ",
> +        Resource->FixedDma.RequestLines,
> +        Resource->FixedDma.Channels);
> +
> +    if (Resource->FixedDma.Width <= 5)
> +    {
> +        AcpiOsPrintf ("%s, ",
> +            AcpiGbl_DtsDecode [Resource->FixedDma.Width]);
> +    }
> +    else
> +    {
> +        AcpiOsPrintf ("%X /* INVALID DMA WIDTH */, ", Resource->FixedDma.Width);
> +    }
> +
> +    /* Insert a descriptor name */
> +
> +    AcpiDmDescriptorName ();
> +    AcpiOsPrintf (")\n");
> +}
> +
> +
> +/*******************************************************************************
> + *
>  * FUNCTION:    AcpiDmIoDescriptor
>  *
>  * PARAMETERS:  Resource            - Pointer to the resource descriptor
> diff --git a/src/acpica/source/components/disassembler/dmutils.c b/src/acpica/source/components/disassembler/dmutils.c
> index b64b8fb..bd40d23 100644
> --- a/src/acpica/source/components/disassembler/dmutils.c
> +++ b/src/acpica/source/components/disassembler/dmutils.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -207,7 +207,8 @@ const char                      *AcpiGbl_IrqDecode[] =
>  *
>  * RETURN:      None
>  *
> - * DESCRIPTION: Decode the AccessAs attribute byte.  (Mostly SMBus stuff)
> + * DESCRIPTION: Decode the AccessAs attribute byte. (Mostly SMBus and
> + *              GenericSerialBus stuff.)
>  *
>  ******************************************************************************/
>
> @@ -218,44 +219,61 @@ AcpiDmDecodeAttribute (
>
>     switch (Attribute)
>     {
> -    case AML_FIELD_ATTRIB_SMB_QUICK:
> +    case AML_FIELD_ATTRIB_QUICK:
>
> -        AcpiOsPrintf ("SMBQuick");
> +        AcpiOsPrintf ("AttribQuick");
>         break;
>
> -    case AML_FIELD_ATTRIB_SMB_SEND_RCV:
> +    case AML_FIELD_ATTRIB_SEND_RCV:
>
> -        AcpiOsPrintf ("SMBSendReceive");
> +        AcpiOsPrintf ("AttribSendReceive");
>         break;
>
> -    case AML_FIELD_ATTRIB_SMB_BYTE:
> +    case AML_FIELD_ATTRIB_BYTE:
>
> -        AcpiOsPrintf ("SMBByte");
> +        AcpiOsPrintf ("AttribByte");
>         break;
>
> -    case AML_FIELD_ATTRIB_SMB_WORD:
> +    case AML_FIELD_ATTRIB_WORD:
>
> -        AcpiOsPrintf ("SMBWord");
> +        AcpiOsPrintf ("AttribWord");
>         break;
>
> -    case AML_FIELD_ATTRIB_SMB_WORD_CALL:
> +    case AML_FIELD_ATTRIB_BLOCK:
>
> -        AcpiOsPrintf ("SMBProcessCall");
> +        AcpiOsPrintf ("AttribBlock");
>         break;
>
> -    case AML_FIELD_ATTRIB_SMB_BLOCK:
> +    case AML_FIELD_ATTRIB_MULTIBYTE:
>
> -        AcpiOsPrintf ("SMBBlock");
> +        AcpiOsPrintf ("AttribBytes");
>         break;
>
> -    case AML_FIELD_ATTRIB_SMB_BLOCK_CALL:
> +    case AML_FIELD_ATTRIB_WORD_CALL:
>
> -        AcpiOsPrintf ("SMBBlockProcessCall");
> +        AcpiOsPrintf ("AttribProcessCall");
> +        break;
> +
> +    case AML_FIELD_ATTRIB_BLOCK_CALL:
> +
> +        AcpiOsPrintf ("AttribBlockProcessCall");
> +        break;
> +
> +    case AML_FIELD_ATTRIB_RAW_BYTES:
> +
> +        AcpiOsPrintf ("AttribRawBytes");
> +        break;
> +
> +    case AML_FIELD_ATTRIB_RAW_PROCESS:
> +
> +        AcpiOsPrintf ("AttribRawProcessBytes");
>         break;
>
>     default:
>
> -        AcpiOsPrintf ("0x%.2X", Attribute);
> +        /* A ByteConst is allowed by the grammar */
> +
> +        AcpiOsPrintf ("0x%2.2X", Attribute);
>         break;
>     }
>  }
> diff --git a/src/acpica/source/components/disassembler/dmwalk.c b/src/acpica/source/components/disassembler/dmwalk.c
> index 86aee3d..2bec308 100644
> --- a/src/acpica/source/components/disassembler/dmwalk.c
> +++ b/src/acpica/source/components/disassembler/dmwalk.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -536,7 +536,8 @@ AcpiDmDescendingOp (
>
>     AcpiDmDisassembleOneOp (NULL, Info, Op);
>
> -    if (Op->Common.DisasmOpcode == ACPI_DASM_LNOT_PREFIX)
> +    if ((Op->Common.DisasmOpcode == ACPI_DASM_LNOT_PREFIX) ||
> +        (Op->Common.AmlOpcode == AML_INT_CONNECTION_OP))
>     {
>         return (AE_OK);
>     }
> diff --git a/src/acpica/source/components/dispatcher/dsargs.c b/src/acpica/source/components/dispatcher/dsargs.c
> index 44cc41b..1e7e167 100644
> --- a/src/acpica/source/components/dispatcher/dsargs.c
> +++ b/src/acpica/source/components/dispatcher/dsargs.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -496,7 +496,15 @@ AcpiDsGetRegionArguments (
>
>     /* Execute the argument AML */
>
> -    Status = AcpiDsExecuteArguments (Node, Node->Parent,
> +    Status = AcpiDsExecuteArguments (Node, ExtraDesc->Extra.ScopeNode,
>                 ExtraDesc->Extra.AmlLength, ExtraDesc->Extra.AmlStart);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return_ACPI_STATUS (Status);
> +    }
> +
> +    Status = AcpiUtAddAddressRange (ObjDesc->Region.SpaceId,
> +                 ObjDesc->Region.Address, ObjDesc->Region.Length,
> +                 Node);
>     return_ACPI_STATUS (Status);
>  }
> diff --git a/src/acpica/source/components/dispatcher/dscontrol.c b/src/acpica/source/components/dispatcher/dscontrol.c
> index 41435e0..0f689b2 100644
> --- a/src/acpica/source/components/dispatcher/dscontrol.c
> +++ b/src/acpica/source/components/dispatcher/dscontrol.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/dispatcher/dsfield.c b/src/acpica/source/components/dispatcher/dsfield.c
> index 39d2e88..526d478 100644
> --- a/src/acpica/source/components/dispatcher/dsfield.c
> +++ b/src/acpica/source/components/dispatcher/dsfield.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -315,6 +315,7 @@ AcpiDsGetFieldNames (
>  {
>     ACPI_STATUS             Status;
>     UINT64                  Position;
> +    ACPI_PARSE_OBJECT       *Child;
>
>
>     ACPI_FUNCTION_TRACE_PTR (DsGetFieldNames, Info);
> @@ -329,10 +330,11 @@ AcpiDsGetFieldNames (
>     while (Arg)
>     {
>         /*
> -         * Three types of field elements are handled:
> -         * 1) Offset - specifies a bit offset
> -         * 2) AccessAs - changes the access mode
> -         * 3) Name - Enters a new named field into the namespace
> +         * Four types of field elements are handled:
> +         * 1) Name - Enters a new named field into the namespace
> +         * 2) Offset - specifies a bit offset
> +         * 3) AccessAs - changes the access mode/attributes
> +         * 4) Connection - Associate a resource template with the field
>          */
>         switch (Arg->Common.AmlOpcode)
>         {
> @@ -351,24 +353,67 @@ AcpiDsGetFieldNames (
>             Info->FieldBitPosition = (UINT32) Position;
>             break;
>
> -
>         case AML_INT_ACCESSFIELD_OP:
> -
> +        case AML_INT_EXTACCESSFIELD_OP:
>             /*
> -             * Get a new AccessType and AccessAttribute -- to be used for all
> -             * field units that follow, until field end or another AccessAs
> -             * keyword.
> +             * Get new AccessType, AccessAttribute, and AccessLength fields
> +             * -- to be used for all field units that follow, until the
> +             * end-of-field or another AccessAs keyword is encountered.
> +             * NOTE. These three bytes are encoded in the integer value
> +             * of the parseop for convenience.
>              *
>              * In FieldFlags, preserve the flag bits other than the
> -             * ACCESS_TYPE bits
> +             * ACCESS_TYPE bits.
>              */
> +
> +            /* AccessType (ByteAcc, WordAcc, etc.) */
> +
>             Info->FieldFlags = (UINT8)
>                 ((Info->FieldFlags & ~(AML_FIELD_ACCESS_TYPE_MASK)) |
> -                ((UINT8) ((UINT32) Arg->Common.Value.Integer >> 8)));
> +                ((UINT8) ((UINT32) (Arg->Common.Value.Integer & 0x07))));
> +
> +            /* AccessAttribute (AttribQuick, AttribByte, etc.) */
> +
> +            Info->Attribute = (UINT8) ((Arg->Common.Value.Integer >> 8) & 0xFF);
> +
> +            /* AccessLength (for serial/buffer protocols) */
>
> -            Info->Attribute = (UINT8) (Arg->Common.Value.Integer);
> +            Info->AccessLength = (UINT8) ((Arg->Common.Value.Integer >> 16) & 0xFF);
>             break;
>
> +        case AML_INT_CONNECTION_OP:
> +            /*
> +             * Clear any previous connection. New connection is used for all
> +             * fields that follow, similar to AccessAs
> +             */
> +            Info->ResourceBuffer = NULL;
> +            Info->ConnectionNode = NULL;
> +
> +            /*
> +             * A Connection() is either an actual resource descriptor (buffer)
> +             * or a named reference to a resource template
> +             */
> +            Child = Arg->Common.Value.Arg;
> +            if (Child->Common.AmlOpcode == AML_INT_BYTELIST_OP)
> +            {
> +                Info->ResourceBuffer = Child->Named.Data;
> +                Info->ResourceLength = (UINT16) Child->Named.Value.Integer;
> +            }
> +            else
> +            {
> +                /* Lookup the Connection() namepath, it should already exist */
> +
> +                Status = AcpiNsLookup (WalkState->ScopeInfo,
> +                            Child->Common.Value.Name, ACPI_TYPE_ANY,
> +                            ACPI_IMODE_EXECUTE, ACPI_NS_DONT_OPEN_SCOPE,
> +                            WalkState, &Info->ConnectionNode);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    ACPI_ERROR_NAMESPACE (Child->Common.Value.Name, Status);
> +                    return_ACPI_STATUS (Status);
> +                }
> +            }
> +            break;
>
>         case AML_INT_NAMEDFIELD_OP:
>
> @@ -420,7 +465,6 @@ AcpiDsGetFieldNames (
>             Info->FieldBitPosition += Info->FieldBitLength;
>             break;
>
> -
>         default:
>
>             ACPI_ERROR ((AE_INFO,
> @@ -478,6 +522,8 @@ AcpiDsCreateField (
>         }
>     }
>
> +    ACPI_MEMSET (&Info, 0, sizeof (ACPI_CREATE_FIELD_INFO));
> +
>     /* Second arg is the field flags */
>
>     Arg = Arg->Common.Next;
> @@ -490,7 +536,6 @@ AcpiDsCreateField (
>     Info.RegionNode = RegionNode;
>
>     Status = AcpiDsGetFieldNames (&Info, WalkState, Arg->Common.Next);
> -
>     return_ACPI_STATUS (Status);
>  }
>
> @@ -586,8 +631,8 @@ AcpiDsInitFieldObjects (
>     while (Arg)
>     {
>         /*
> -         * Ignore OFFSET and ACCESSAS terms here; we are only interested in the
> -         * field names in order to enter them into the namespace.
> +         * Ignore OFFSET/ACCESSAS/CONNECTION terms here; we are only interested
> +         * in the field names in order to enter them into the namespace.
>          */
>         if (Arg->Common.AmlOpcode == AML_INT_NAMEDFIELD_OP)
>         {
> @@ -769,7 +814,6 @@ AcpiDsCreateIndexField (
>     Info.RegionNode = RegionNode;
>
>     Status = AcpiDsGetFieldNames (&Info, WalkState, Arg->Common.Next);
> -
>     return_ACPI_STATUS (Status);
>  }
>
> diff --git a/src/acpica/source/components/dispatcher/dsinit.c b/src/acpica/source/components/dispatcher/dsinit.c
> index f9d1e24..51b19ee 100644
> --- a/src/acpica/source/components/dispatcher/dsinit.c
> +++ b/src/acpica/source/components/dispatcher/dsinit.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/dispatcher/dsmethod.c b/src/acpica/source/components/dispatcher/dsmethod.c
> index 8f7d6bd..4b80b4f 100644
> --- a/src/acpica/source/components/dispatcher/dsmethod.c
> +++ b/src/acpica/source/components/dispatcher/dsmethod.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/dispatcher/dsmthdat.c b/src/acpica/source/components/dispatcher/dsmthdat.c
> index a264b3a..2305d1f 100644
> --- a/src/acpica/source/components/dispatcher/dsmthdat.c
> +++ b/src/acpica/source/components/dispatcher/dsmthdat.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/dispatcher/dsobject.c b/src/acpica/source/components/dispatcher/dsobject.c
> index abf8672..1ff2265 100644
> --- a/src/acpica/source/components/dispatcher/dsobject.c
> +++ b/src/acpica/source/components/dispatcher/dsobject.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/dispatcher/dsopcode.c b/src/acpica/source/components/dispatcher/dsopcode.c
> index 0f5164e..5da09bd 100644
> --- a/src/acpica/source/components/dispatcher/dsopcode.c
> +++ b/src/acpica/source/components/dispatcher/dsopcode.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/dispatcher/dsutils.c b/src/acpica/source/components/dispatcher/dsutils.c
> index 22bd0bf..199cd90 100644
> --- a/src/acpica/source/components/dispatcher/dsutils.c
> +++ b/src/acpica/source/components/dispatcher/dsutils.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/dispatcher/dswexec.c b/src/acpica/source/components/dispatcher/dswexec.c
> index e243c7f..cd86061 100644
> --- a/src/acpica/source/components/dispatcher/dswexec.c
> +++ b/src/acpica/source/components/dispatcher/dswexec.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/dispatcher/dswload.c b/src/acpica/source/components/dispatcher/dswload.c
> index f30bbfc..1f689d6 100644
> --- a/src/acpica/source/components/dispatcher/dswload.c
> +++ b/src/acpica/source/components/dispatcher/dswload.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/dispatcher/dswload2.c b/src/acpica/source/components/dispatcher/dswload2.c
> index 8eba533..85a86ec 100644
> --- a/src/acpica/source/components/dispatcher/dswload2.c
> +++ b/src/acpica/source/components/dispatcher/dswload2.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/dispatcher/dswscope.c b/src/acpica/source/components/dispatcher/dswscope.c
> index b95c427..b8b5c6c 100644
> --- a/src/acpica/source/components/dispatcher/dswscope.c
> +++ b/src/acpica/source/components/dispatcher/dswscope.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/dispatcher/dswstate.c b/src/acpica/source/components/dispatcher/dswstate.c
> index 07ed6d4..d1b2ca8 100644
> --- a/src/acpica/source/components/dispatcher/dswstate.c
> +++ b/src/acpica/source/components/dispatcher/dswstate.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/events/evevent.c b/src/acpica/source/components/events/evevent.c
> index a85588f..1cdf7df 100644
> --- a/src/acpica/source/components/events/evevent.c
> +++ b/src/acpica/source/components/events/evevent.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -120,6 +120,8 @@
>  #define _COMPONENT          ACPI_EVENTS
>         ACPI_MODULE_NAME    ("evevent")
>
> +#if (!ACPI_REDUCED_HARDWARE) /* Entire module */
> +
>  /* Local prototypes */
>
>  static ACPI_STATUS
> @@ -153,6 +155,13 @@ AcpiEvInitializeEvents (
>     ACPI_FUNCTION_TRACE (EvInitializeEvents);
>
>
> +    /* If Hardware Reduced flag is set, there are no fixed events */
> +
> +    if (AcpiGbl_ReducedHardware)
> +    {
> +        return_ACPI_STATUS (AE_OK);
> +    }
> +
>     /*
>      * Initialize the Fixed and General Purpose Events. This is done prior to
>      * enabling SCIs to prevent interrupts from occurring before the handlers
> @@ -200,6 +209,13 @@ AcpiEvInstallXruptHandlers (
>     ACPI_FUNCTION_TRACE (EvInstallXruptHandlers);
>
>
> +    /* If Hardware Reduced flag is set, there is no ACPI h/w */
> +
> +    if (AcpiGbl_ReducedHardware)
> +    {
> +        return_ACPI_STATUS (AE_OK);
> +    }
> +
>     /* Install the SCI handler */
>
>     Status = AcpiEvInstallSciHandler ();
> @@ -387,4 +403,6 @@ AcpiEvFixedEventDispatch (
>                 AcpiGbl_FixedEventHandlers[Event].Context));
>  }
>
> +#endif /* !ACPI_REDUCED_HARDWARE */
> +
>
> diff --git a/src/acpica/source/components/events/evglock.c b/src/acpica/source/components/events/evglock.c
> index a7a585a..031233a 100644
> --- a/src/acpica/source/components/events/evglock.c
> +++ b/src/acpica/source/components/events/evglock.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -121,6 +121,7 @@
>  #define _COMPONENT          ACPI_EVENTS
>         ACPI_MODULE_NAME    ("evglock")
>
> +#if (!ACPI_REDUCED_HARDWARE) /* Entire module */
>
>  /* Local prototypes */
>
> @@ -151,6 +152,13 @@ AcpiEvInitGlobalLockHandler (
>     ACPI_FUNCTION_TRACE (EvInitGlobalLockHandler);
>
>
> +    /* If Hardware Reduced flag is set, there is no global lock */
> +
> +    if (AcpiGbl_ReducedHardware)
> +    {
> +        return_ACPI_STATUS (AE_OK);
> +    }
> +
>     /* Attempt installation of the global lock handler */
>
>     Status = AcpiInstallFixedEventHandler (ACPI_EVENT_GLOBAL,
> @@ -437,3 +445,5 @@ AcpiEvReleaseGlobalLock (
>     AcpiOsReleaseMutex (AcpiGbl_GlobalLockMutex->Mutex.OsMutex);
>     return_ACPI_STATUS (Status);
>  }
> +
> +#endif /* !ACPI_REDUCED_HARDWARE */
> diff --git a/src/acpica/source/components/events/evgpe.c b/src/acpica/source/components/events/evgpe.c
> index 59e5d55..de32275 100644
> --- a/src/acpica/source/components/events/evgpe.c
> +++ b/src/acpica/source/components/events/evgpe.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -121,6 +121,8 @@
>  #define _COMPONENT          ACPI_EVENTS
>         ACPI_MODULE_NAME    ("evgpe")
>
> +#if (!ACPI_REDUCED_HARDWARE) /* Entire module */
> +
>  /* Local prototypes */
>
>  static void ACPI_SYSTEM_XFACE
> @@ -898,3 +900,4 @@ AcpiEvGpeDispatch (
>     return_UINT32 (ACPI_INTERRUPT_HANDLED);
>  }
>
> +#endif /* !ACPI_REDUCED_HARDWARE */
> diff --git a/src/acpica/source/components/events/evgpeblk.c b/src/acpica/source/components/events/evgpeblk.c
> index c3ea571..622b772 100644
> --- a/src/acpica/source/components/events/evgpeblk.c
> +++ b/src/acpica/source/components/events/evgpeblk.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -121,6 +121,8 @@
>  #define _COMPONENT          ACPI_EVENTS
>         ACPI_MODULE_NAME    ("evgpeblk")
>
> +#if (!ACPI_REDUCED_HARDWARE) /* Entire module */
> +
>  /* Local prototypes */
>
>  static ACPI_STATUS
> @@ -617,3 +619,4 @@ AcpiEvInitializeGpeBlock (
>     return_ACPI_STATUS (AE_OK);
>  }
>
> +#endif /* !ACPI_REDUCED_HARDWARE */
> diff --git a/src/acpica/source/components/events/evgpeinit.c b/src/acpica/source/components/events/evgpeinit.c
> index 8bba111..4a85449 100644
> --- a/src/acpica/source/components/events/evgpeinit.c
> +++ b/src/acpica/source/components/events/evgpeinit.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -122,6 +122,7 @@
>  #define _COMPONENT          ACPI_EVENTS
>         ACPI_MODULE_NAME    ("evgpeinit")
>
> +#if (!ACPI_REDUCED_HARDWARE) /* Entire module */
>
>  /*
>  * Note: History of _PRW support in ACPICA
> @@ -529,3 +530,5 @@ AcpiEvMatchGpeMethod (
>         Name, GpeNumber));
>     return_ACPI_STATUS (AE_OK);
>  }
> +
> +#endif /* !ACPI_REDUCED_HARDWARE */
> diff --git a/src/acpica/source/components/events/evgpeutil.c b/src/acpica/source/components/events/evgpeutil.c
> index eb422a1..a5ad320 100644
> --- a/src/acpica/source/components/events/evgpeutil.c
> +++ b/src/acpica/source/components/events/evgpeutil.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -113,7 +113,6 @@
>  *
>  *****************************************************************************/
>
> -
>  #include "acpi.h"
>  #include "accommon.h"
>  #include "acevents.h"
> @@ -122,6 +121,7 @@
>         ACPI_MODULE_NAME    ("evgpeutil")
>
>
> +#if (!ACPI_REDUCED_HARDWARE) /* Entire module */
>  /*******************************************************************************
>  *
>  * FUNCTION:    AcpiEvWalkGpeList
> @@ -494,3 +494,4 @@ AcpiEvDeleteGpeHandlers (
>     return_ACPI_STATUS (AE_OK);
>  }
>
> +#endif /* !ACPI_REDUCED_HARDWARE */
> diff --git a/src/acpica/source/components/events/evmisc.c b/src/acpica/source/components/events/evmisc.c
> index 69d6c79..7369daa 100644
> --- a/src/acpica/source/components/events/evmisc.c
> +++ b/src/acpica/source/components/events/evmisc.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -192,27 +192,29 @@ AcpiEvQueueNotifyRequest (
>
>
>     /*
> -     * For value 3 (Ejection Request), some device method may need to be run.
> -     * For value 2 (Device Wake) if _PRW exists, the _PS0 method may need
> -     *   to be run.
> +     * 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?
> +     *   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] Node %p Value 0x%2.2X (%s)\n",
> -        AcpiUtGetNodeName (Node), Node, NotifyValue,
> -        AcpiUtGetNotifyName (NotifyValue)));
> +        "Dispatching Notify on [%4.4s] (%s) Value 0x%2.2X (%s) Node %p\n",
> +        AcpiUtGetNodeName (Node), AcpiUtGetTypeName (Node->Type),
> +        NotifyValue, AcpiUtGetNotifyName (NotifyValue), Node));
>
>     /* Get the notify object attached to the NS Node */
>
>     ObjDesc = AcpiNsGetAttachedObject (Node);
>     if (ObjDesc)
>     {
> -        /* We have the notify object, Get the right handler */
> +        /* We have the notify object, Get the correct handler */
>
>         switch (Node->Type)
>         {
> -        /* Notify allowed only on these types */
> +        /* Notify is allowed only on these types */
>
>         case ACPI_TYPE_DEVICE:
>         case ACPI_TYPE_THERMAL:
> @@ -237,7 +239,7 @@ AcpiEvQueueNotifyRequest (
>     }
>
>     /*
> -     * If there is any handler to run, schedule the dispatcher.
> +     * If there is a handler to run, schedule the dispatcher.
>      * Check for:
>      * 1) Global system notify handler
>      * 2) Global device notify handler
> @@ -363,6 +365,7 @@ AcpiEvNotifyDispatch (
>  }
>
>
> +#if (!ACPI_REDUCED_HARDWARE)
>  /******************************************************************************
>  *
>  * FUNCTION:    AcpiEvTerminate
> @@ -442,3 +445,5 @@ AcpiEvTerminate (
>     }
>     return_VOID;
>  }
> +
> +#endif /* !ACPI_REDUCED_HARDWARE */
> diff --git a/src/acpica/source/components/events/evregion.c b/src/acpica/source/components/events/evregion.c
> index bd50228..9ba3db5 100644
> --- a/src/acpica/source/components/events/evregion.c
> +++ b/src/acpica/source/components/events/evregion.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -444,6 +444,7 @@ Cleanup1:
>  * FUNCTION:    AcpiEvAddressSpaceDispatch
>  *
>  * PARAMETERS:  RegionObj           - Internal region object
> + *              FieldObj            - Corresponding field. Can be NULL.
>  *              Function            - Read or Write operation
>  *              RegionOffset        - Where in the region to read or write
>  *              BitWidth            - Field width in bits (8, 16, 32, or 64)
> @@ -460,6 +461,7 @@ Cleanup1:
>  ACPI_STATUS
>  AcpiEvAddressSpaceDispatch (
>     ACPI_OPERAND_OBJECT     *RegionObj,
> +    ACPI_OPERAND_OBJECT     *FieldObj,
>     UINT32                  Function,
>     UINT32                  RegionOffset,
>     UINT32                  BitWidth,
> @@ -471,6 +473,7 @@ AcpiEvAddressSpaceDispatch (
>     ACPI_OPERAND_OBJECT     *HandlerDesc;
>     ACPI_OPERAND_OBJECT     *RegionObj2;
>     void                    *RegionContext = NULL;
> +    ACPI_CONNECTION_INFO    *Context;
>
>
>     ACPI_FUNCTION_TRACE (EvAddressSpaceDispatch);
> @@ -495,6 +498,8 @@ AcpiEvAddressSpaceDispatch (
>         return_ACPI_STATUS (AE_NOT_EXIST);
>     }
>
> +    Context = HandlerDesc->AddressSpace.Context;
> +
>     /*
>      * It may be the case that the region has never been initialized.
>      * Some types of regions require special init code
> @@ -522,7 +527,7 @@ AcpiEvAddressSpaceDispatch (
>         AcpiExExitInterpreter ();
>
>         Status = RegionSetup (RegionObj, ACPI_REGION_ACTIVATE,
> -                    HandlerDesc->AddressSpace.Context, &RegionContext);
> +                    Context, &RegionContext);
>
>         /* Re-enter the interpreter */
>
> @@ -571,6 +576,27 @@ AcpiEvAddressSpaceDispatch (
>         ACPI_FORMAT_NATIVE_UINT (RegionObj->Region.Address + RegionOffset),
>         AcpiUtGetRegionName (RegionObj->Region.SpaceId)));
>
> +
> +    /*
> +     * Special handling for GenericSerialBus and GeneralPurposeIo:
> +     * There are three extra parameters that must be passed to the
> +     * handler via the context:
> +     *   1) Connection buffer, a resource template from Connection() op.
> +     *   2) Length of the above buffer.
> +     *   3) Actual access length from the AccessAs() op.
> +     */
> +    if (((RegionObj->Region.SpaceId == ACPI_ADR_SPACE_GSBUS) ||
> +            (RegionObj->Region.SpaceId == ACPI_ADR_SPACE_GPIO)) &&
> +        Context &&
> +        FieldObj)
> +    {
> +        /* Get the Connection (ResourceTemplate) buffer */
> +
> +        Context->Connection = FieldObj->Field.ResourceBuffer;
> +        Context->Length = FieldObj->Field.ResourceLength;
> +        Context->AccessLength = FieldObj->Field.AccessLength;
> +    }
> +
>     if (!(HandlerDesc->AddressSpace.HandlerFlags &
>             ACPI_ADDR_HANDLER_DEFAULT_INSTALLED))
>     {
> @@ -586,7 +612,7 @@ AcpiEvAddressSpaceDispatch (
>
>     Status = Handler (Function,
>         (RegionObj->Region.Address + RegionOffset), BitWidth, Value,
> -        HandlerDesc->AddressSpace.Context, RegionObj2->Extra.RegionContext);
> +        Context, RegionObj2->Extra.RegionContext);
>
>     if (ACPI_FAILURE (Status))
>     {
> diff --git a/src/acpica/source/components/events/evrgnini.c b/src/acpica/source/components/events/evrgnini.c
> index cb9a2fd..121d2de 100644
> --- a/src/acpica/source/components/events/evrgnini.c
> +++ b/src/acpica/source/components/events/evrgnini.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/events/evsci.c b/src/acpica/source/components/events/evsci.c
> index e0d9261..6966067 100644
> --- a/src/acpica/source/components/events/evsci.c
> +++ b/src/acpica/source/components/events/evsci.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -123,6 +123,8 @@
>  #define _COMPONENT          ACPI_EVENTS
>         ACPI_MODULE_NAME    ("evsci")
>
> +#if (!ACPI_REDUCED_HARDWARE) /* Entire module */
> +
>  /* Local prototypes */
>
>  static UINT32 ACPI_SYSTEM_XFACE
> @@ -277,4 +279,4 @@ AcpiEvRemoveSciHandler (
>     return_ACPI_STATUS (Status);
>  }
>
> -
> +#endif /* !ACPI_REDUCED_HARDWARE */
> diff --git a/src/acpica/source/components/events/evxface.c b/src/acpica/source/components/events/evxface.c
> index 990ddfb..a6aea09 100644
> --- a/src/acpica/source/components/events/evxface.c
> +++ b/src/acpica/source/components/events/evxface.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -128,257 +128,6 @@
>
>  /*******************************************************************************
>  *
> - * FUNCTION:    AcpiInstallExceptionHandler
> - *
> - * PARAMETERS:  Handler         - Pointer to the handler function for the
> - *                                event
> - *
> - * RETURN:      Status
> - *
> - * DESCRIPTION: Saves the pointer to the handler function
> - *
> - ******************************************************************************/
> -
> -ACPI_STATUS
> -AcpiInstallExceptionHandler (
> -    ACPI_EXCEPTION_HANDLER  Handler)
> -{
> -    ACPI_STATUS             Status;
> -
> -
> -    ACPI_FUNCTION_TRACE (AcpiInstallExceptionHandler);
> -
> -
> -    Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS);
> -    if (ACPI_FAILURE (Status))
> -    {
> -        return_ACPI_STATUS (Status);
> -    }
> -
> -    /* Don't allow two handlers. */
> -
> -    if (AcpiGbl_ExceptionHandler)
> -    {
> -        Status = AE_ALREADY_EXISTS;
> -        goto Cleanup;
> -    }
> -
> -    /* Install the handler */
> -
> -    AcpiGbl_ExceptionHandler = Handler;
> -
> -Cleanup:
> -    (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS);
> -    return_ACPI_STATUS (Status);
> -}
> -
> -ACPI_EXPORT_SYMBOL (AcpiInstallExceptionHandler)
> -
> -
> -/*******************************************************************************
> - *
> - * FUNCTION:    AcpiInstallGlobalEventHandler
> - *
> - * PARAMETERS:  Handler         - Pointer to the global event handler function
> - *              Context         - Value passed to the handler on each event
> - *
> - * RETURN:      Status
> - *
> - * DESCRIPTION: Saves the pointer to the handler function. The global handler
> - *              is invoked upon each incoming GPE and Fixed Event. It is
> - *              invoked at interrupt level at the time of the event dispatch.
> - *              Can be used to update event counters, etc.
> - *
> - ******************************************************************************/
> -
> -ACPI_STATUS
> -AcpiInstallGlobalEventHandler (
> -    ACPI_GBL_EVENT_HANDLER  Handler,
> -    void                    *Context)
> -{
> -    ACPI_STATUS             Status;
> -
> -
> -    ACPI_FUNCTION_TRACE (AcpiInstallGlobalEventHandler);
> -
> -
> -    /* Parameter validation */
> -
> -    if (!Handler)
> -    {
> -        return_ACPI_STATUS (AE_BAD_PARAMETER);
> -    }
> -
> -    Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS);
> -    if (ACPI_FAILURE (Status))
> -    {
> -        return_ACPI_STATUS (Status);
> -    }
> -
> -    /* Don't allow two handlers. */
> -
> -    if (AcpiGbl_GlobalEventHandler)
> -    {
> -        Status = AE_ALREADY_EXISTS;
> -        goto Cleanup;
> -    }
> -
> -    AcpiGbl_GlobalEventHandler = Handler;
> -    AcpiGbl_GlobalEventHandlerContext = Context;
> -
> -
> -Cleanup:
> -    (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS);
> -    return_ACPI_STATUS (Status);
> -}
> -
> -ACPI_EXPORT_SYMBOL (AcpiInstallGlobalEventHandler)
> -
> -
> -/*******************************************************************************
> - *
> - * FUNCTION:    AcpiInstallFixedEventHandler
> - *
> - * PARAMETERS:  Event           - Event type to enable.
> - *              Handler         - Pointer to the handler function for the
> - *                                event
> - *              Context         - Value passed to the handler on each GPE
> - *
> - * RETURN:      Status
> - *
> - * DESCRIPTION: Saves the pointer to the handler function and then enables the
> - *              event.
> - *
> - ******************************************************************************/
> -
> -ACPI_STATUS
> -AcpiInstallFixedEventHandler (
> -    UINT32                  Event,
> -    ACPI_EVENT_HANDLER      Handler,
> -    void                    *Context)
> -{
> -    ACPI_STATUS             Status;
> -
> -
> -    ACPI_FUNCTION_TRACE (AcpiInstallFixedEventHandler);
> -
> -
> -    /* Parameter validation */
> -
> -    if (Event > ACPI_EVENT_MAX)
> -    {
> -        return_ACPI_STATUS (AE_BAD_PARAMETER);
> -    }
> -
> -    Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS);
> -    if (ACPI_FAILURE (Status))
> -    {
> -        return_ACPI_STATUS (Status);
> -    }
> -
> -    /* Don't allow two handlers. */
> -
> -    if (NULL != AcpiGbl_FixedEventHandlers[Event].Handler)
> -    {
> -        Status = AE_ALREADY_EXISTS;
> -        goto Cleanup;
> -    }
> -
> -    /* Install the handler before enabling the event */
> -
> -    AcpiGbl_FixedEventHandlers[Event].Handler = Handler;
> -    AcpiGbl_FixedEventHandlers[Event].Context = Context;
> -
> -    Status = AcpiEnableEvent (Event, 0);
> -    if (ACPI_FAILURE (Status))
> -    {
> -        ACPI_WARNING ((AE_INFO, "Could not enable fixed event 0x%X", Event));
> -
> -        /* Remove the handler */
> -
> -        AcpiGbl_FixedEventHandlers[Event].Handler = NULL;
> -        AcpiGbl_FixedEventHandlers[Event].Context = NULL;
> -    }
> -    else
> -    {
> -        ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
> -            "Enabled fixed event %X, Handler=%p\n", Event, Handler));
> -    }
> -
> -
> -Cleanup:
> -    (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS);
> -    return_ACPI_STATUS (Status);
> -}
> -
> -ACPI_EXPORT_SYMBOL (AcpiInstallFixedEventHandler)
> -
> -
> -/*******************************************************************************
> - *
> - * FUNCTION:    AcpiRemoveFixedEventHandler
> - *
> - * PARAMETERS:  Event           - Event type to disable.
> - *              Handler         - Address of the handler
> - *
> - * RETURN:      Status
> - *
> - * DESCRIPTION: Disables the event and unregisters the event handler.
> - *
> - ******************************************************************************/
> -
> -ACPI_STATUS
> -AcpiRemoveFixedEventHandler (
> -    UINT32                  Event,
> -    ACPI_EVENT_HANDLER      Handler)
> -{
> -    ACPI_STATUS             Status = AE_OK;
> -
> -
> -    ACPI_FUNCTION_TRACE (AcpiRemoveFixedEventHandler);
> -
> -
> -    /* Parameter validation */
> -
> -    if (Event > ACPI_EVENT_MAX)
> -    {
> -        return_ACPI_STATUS (AE_BAD_PARAMETER);
> -    }
> -
> -    Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS);
> -    if (ACPI_FAILURE (Status))
> -    {
> -        return_ACPI_STATUS (Status);
> -    }
> -
> -    /* Disable the event before removing the handler */
> -
> -    Status = AcpiDisableEvent (Event, 0);
> -
> -    /* Always Remove the handler */
> -
> -    AcpiGbl_FixedEventHandlers[Event].Handler = NULL;
> -    AcpiGbl_FixedEventHandlers[Event].Context = NULL;
> -
> -    if (ACPI_FAILURE (Status))
> -    {
> -        ACPI_WARNING ((AE_INFO,
> -            "Could not write to fixed event enable register 0x%X", Event));
> -    }
> -    else
> -    {
> -        ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Disabled fixed event %X\n", Event));
> -    }
> -
> -    (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS);
> -    return_ACPI_STATUS (Status);
> -}
> -
> -ACPI_EXPORT_SYMBOL (AcpiRemoveFixedEventHandler)
> -
> -
> -/*******************************************************************************
> - *
>  * FUNCTION:    AcpiInstallNotifyHandler
>  *
>  * PARAMETERS:  Device          - The device for which notifies will be handled
> @@ -730,6 +479,258 @@ ACPI_EXPORT_SYMBOL (AcpiRemoveNotifyHandler)
>
>  /*******************************************************************************
>  *
> + * FUNCTION:    AcpiInstallExceptionHandler
> + *
> + * PARAMETERS:  Handler         - Pointer to the handler function for the
> + *                                event
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Saves the pointer to the handler function
> + *
> + ******************************************************************************/
> +
> +ACPI_STATUS
> +AcpiInstallExceptionHandler (
> +    ACPI_EXCEPTION_HANDLER  Handler)
> +{
> +    ACPI_STATUS             Status;
> +
> +
> +    ACPI_FUNCTION_TRACE (AcpiInstallExceptionHandler);
> +
> +
> +    Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return_ACPI_STATUS (Status);
> +    }
> +
> +    /* Don't allow two handlers. */
> +
> +    if (AcpiGbl_ExceptionHandler)
> +    {
> +        Status = AE_ALREADY_EXISTS;
> +        goto Cleanup;
> +    }
> +
> +    /* Install the handler */
> +
> +    AcpiGbl_ExceptionHandler = Handler;
> +
> +Cleanup:
> +    (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS);
> +    return_ACPI_STATUS (Status);
> +}
> +
> +ACPI_EXPORT_SYMBOL (AcpiInstallExceptionHandler)
> +
> +
> +#if (!ACPI_REDUCED_HARDWARE)
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiInstallGlobalEventHandler
> + *
> + * PARAMETERS:  Handler         - Pointer to the global event handler function
> + *              Context         - Value passed to the handler on each event
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Saves the pointer to the handler function. The global handler
> + *              is invoked upon each incoming GPE and Fixed Event. It is
> + *              invoked at interrupt level at the time of the event dispatch.
> + *              Can be used to update event counters, etc.
> + *
> + ******************************************************************************/
> +
> +ACPI_STATUS
> +AcpiInstallGlobalEventHandler (
> +    ACPI_GBL_EVENT_HANDLER  Handler,
> +    void                    *Context)
> +{
> +    ACPI_STATUS             Status;
> +
> +
> +    ACPI_FUNCTION_TRACE (AcpiInstallGlobalEventHandler);
> +
> +
> +    /* Parameter validation */
> +
> +    if (!Handler)
> +    {
> +        return_ACPI_STATUS (AE_BAD_PARAMETER);
> +    }
> +
> +    Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return_ACPI_STATUS (Status);
> +    }
> +
> +    /* Don't allow two handlers. */
> +
> +    if (AcpiGbl_GlobalEventHandler)
> +    {
> +        Status = AE_ALREADY_EXISTS;
> +        goto Cleanup;
> +    }
> +
> +    AcpiGbl_GlobalEventHandler = Handler;
> +    AcpiGbl_GlobalEventHandlerContext = Context;
> +
> +
> +Cleanup:
> +    (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS);
> +    return_ACPI_STATUS (Status);
> +}
> +
> +ACPI_EXPORT_SYMBOL (AcpiInstallGlobalEventHandler)
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiInstallFixedEventHandler
> + *
> + * PARAMETERS:  Event           - Event type to enable.
> + *              Handler         - Pointer to the handler function for the
> + *                                event
> + *              Context         - Value passed to the handler on each GPE
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Saves the pointer to the handler function and then enables the
> + *              event.
> + *
> + ******************************************************************************/
> +
> +ACPI_STATUS
> +AcpiInstallFixedEventHandler (
> +    UINT32                  Event,
> +    ACPI_EVENT_HANDLER      Handler,
> +    void                    *Context)
> +{
> +    ACPI_STATUS             Status;
> +
> +
> +    ACPI_FUNCTION_TRACE (AcpiInstallFixedEventHandler);
> +
> +
> +    /* Parameter validation */
> +
> +    if (Event > ACPI_EVENT_MAX)
> +    {
> +        return_ACPI_STATUS (AE_BAD_PARAMETER);
> +    }
> +
> +    Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return_ACPI_STATUS (Status);
> +    }
> +
> +    /* Don't allow two handlers. */
> +
> +    if (NULL != AcpiGbl_FixedEventHandlers[Event].Handler)
> +    {
> +        Status = AE_ALREADY_EXISTS;
> +        goto Cleanup;
> +    }
> +
> +    /* Install the handler before enabling the event */
> +
> +    AcpiGbl_FixedEventHandlers[Event].Handler = Handler;
> +    AcpiGbl_FixedEventHandlers[Event].Context = Context;
> +
> +    Status = AcpiEnableEvent (Event, 0);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        ACPI_WARNING ((AE_INFO, "Could not enable fixed event 0x%X", Event));
> +
> +        /* Remove the handler */
> +
> +        AcpiGbl_FixedEventHandlers[Event].Handler = NULL;
> +        AcpiGbl_FixedEventHandlers[Event].Context = NULL;
> +    }
> +    else
> +    {
> +        ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
> +            "Enabled fixed event %X, Handler=%p\n", Event, Handler));
> +    }
> +
> +
> +Cleanup:
> +    (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS);
> +    return_ACPI_STATUS (Status);
> +}
> +
> +ACPI_EXPORT_SYMBOL (AcpiInstallFixedEventHandler)
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiRemoveFixedEventHandler
> + *
> + * PARAMETERS:  Event           - Event type to disable.
> + *              Handler         - Address of the handler
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Disables the event and unregisters the event handler.
> + *
> + ******************************************************************************/
> +
> +ACPI_STATUS
> +AcpiRemoveFixedEventHandler (
> +    UINT32                  Event,
> +    ACPI_EVENT_HANDLER      Handler)
> +{
> +    ACPI_STATUS             Status = AE_OK;
> +
> +
> +    ACPI_FUNCTION_TRACE (AcpiRemoveFixedEventHandler);
> +
> +
> +    /* Parameter validation */
> +
> +    if (Event > ACPI_EVENT_MAX)
> +    {
> +        return_ACPI_STATUS (AE_BAD_PARAMETER);
> +    }
> +
> +    Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return_ACPI_STATUS (Status);
> +    }
> +
> +    /* Disable the event before removing the handler */
> +
> +    Status = AcpiDisableEvent (Event, 0);
> +
> +    /* Always Remove the handler */
> +
> +    AcpiGbl_FixedEventHandlers[Event].Handler = NULL;
> +    AcpiGbl_FixedEventHandlers[Event].Context = NULL;
> +
> +    if (ACPI_FAILURE (Status))
> +    {
> +        ACPI_WARNING ((AE_INFO,
> +            "Could not write to fixed event enable register 0x%X", Event));
> +    }
> +    else
> +    {
> +        ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Disabled fixed event %X\n", Event));
> +    }
> +
> +    (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS);
> +    return_ACPI_STATUS (Status);
> +}
> +
> +ACPI_EXPORT_SYMBOL (AcpiRemoveFixedEventHandler)
> +
> +
> +/*******************************************************************************
> + *
>  * FUNCTION:    AcpiInstallGpeHandler
>  *
>  * PARAMETERS:  GpeDevice       - Namespace node for the GPE (NULL for FADT
> @@ -1047,3 +1048,4 @@ AcpiReleaseGlobalLock (
>
>  ACPI_EXPORT_SYMBOL (AcpiReleaseGlobalLock)
>
> +#endif /* !ACPI_REDUCED_HARDWARE */
> diff --git a/src/acpica/source/components/events/evxfevnt.c b/src/acpica/source/components/events/evxfevnt.c
> index 437f6e3..9e5bf62 100644
> --- a/src/acpica/source/components/events/evxfevnt.c
> +++ b/src/acpica/source/components/events/evxfevnt.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -124,6 +124,7 @@
>         ACPI_MODULE_NAME    ("evxfevnt")
>
>
> +#if (!ACPI_REDUCED_HARDWARE) /* Entire module */
>  /*******************************************************************************
>  *
>  * FUNCTION:    AcpiEnable
> @@ -449,4 +450,4 @@ AcpiGetEventStatus (
>
>  ACPI_EXPORT_SYMBOL (AcpiGetEventStatus)
>
> -
> +#endif /* !ACPI_REDUCED_HARDWARE */
> diff --git a/src/acpica/source/components/events/evxfgpe.c b/src/acpica/source/components/events/evxfgpe.c
> index 8cd73b3..7018513 100644
> --- a/src/acpica/source/components/events/evxfgpe.c
> +++ b/src/acpica/source/components/events/evxfgpe.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -125,6 +125,7 @@
>         ACPI_MODULE_NAME    ("evxfgpe")
>
>
> +#if (!ACPI_REDUCED_HARDWARE) /* Entire module */
>  /*******************************************************************************
>  *
>  * FUNCTION:    AcpiUpdateAllGpes
> @@ -970,3 +971,5 @@ AcpiGetGpeDevice (
>  }
>
>  ACPI_EXPORT_SYMBOL (AcpiGetGpeDevice)
> +
> +#endif /* !ACPI_REDUCED_HARDWARE */
> diff --git a/src/acpica/source/components/events/evxfregn.c b/src/acpica/source/components/events/evxfregn.c
> index 552b0e0..7edb8b4 100644
> --- a/src/acpica/source/components/events/evxfregn.c
> +++ b/src/acpica/source/components/events/evxfregn.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/executer/exconfig.c b/src/acpica/source/components/executer/exconfig.c
> index 341a05b..69361d5 100644
> --- a/src/acpica/source/components/executer/exconfig.c
> +++ b/src/acpica/source/components/executer/exconfig.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -407,7 +407,7 @@ AcpiExRegionRead (
>
>     for (i = 0; i < Length; i++)
>     {
> -        Status = AcpiEvAddressSpaceDispatch (ObjDesc, ACPI_READ,
> +        Status = AcpiEvAddressSpaceDispatch (ObjDesc, NULL, ACPI_READ,
>                     RegionOffset, 8, &Value);
>         if (ACPI_FAILURE (Status))
>         {
> diff --git a/src/acpica/source/components/executer/exconvrt.c b/src/acpica/source/components/executer/exconvrt.c
> index 67a0a26..8036441 100644
> --- a/src/acpica/source/components/executer/exconvrt.c
> +++ b/src/acpica/source/components/executer/exconvrt.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/executer/excreate.c b/src/acpica/source/components/executer/excreate.c
> index a9b92c1..4138fcf 100644
> --- a/src/acpica/source/components/executer/excreate.c
> +++ b/src/acpica/source/components/executer/excreate.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -357,7 +357,7 @@ Cleanup:
>  *
>  * PARAMETERS:  AmlStart            - Pointer to the region declaration AML
>  *              AmlLength           - Max length of the declaration AML
> - *              RegionSpace         - SpaceID for the region
> + *              SpaceId             - Address space ID for the region
>  *              WalkState           - Current state
>  *
>  * RETURN:      Status
> @@ -370,7 +370,7 @@ ACPI_STATUS
>  AcpiExCreateRegion (
>     UINT8                   *AmlStart,
>     UINT32                  AmlLength,
> -    UINT8                   RegionSpace,
> +    UINT8                   SpaceId,
>     ACPI_WALK_STATE         *WalkState)
>  {
>     ACPI_STATUS             Status;
> @@ -399,16 +399,18 @@ AcpiExCreateRegion (
>      * Space ID must be one of the predefined IDs, or in the user-defined
>      * range
>      */
> -    if ((RegionSpace >= ACPI_NUM_PREDEFINED_REGIONS) &&
> -        (RegionSpace < ACPI_USER_REGION_BEGIN) &&
> -        (RegionSpace != ACPI_ADR_SPACE_DATA_TABLE))
> +    if (!AcpiIsValidSpaceId (SpaceId))
>     {
> -        ACPI_ERROR ((AE_INFO, "Invalid AddressSpace type 0x%X", RegionSpace));
> -        return_ACPI_STATUS (AE_AML_INVALID_SPACE_ID);
> +        /*
> +         * Print an error message, but continue. We don't want to abort
> +         * a table load for this exception. Instead, if the region is
> +         * actually used at runtime, abort the executing method.
> +         */
> +        ACPI_ERROR ((AE_INFO, "Invalid/unknown Address Space ID: 0x%2.2X", SpaceId));
>     }
>
>     ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "Region Type - %s (0x%X)\n",
> -        AcpiUtGetRegionName (RegionSpace), RegionSpace));
> +        AcpiUtGetRegionName (SpaceId), SpaceId));
>
>     /* Create the region descriptor */
>
> @@ -426,10 +428,18 @@ AcpiExCreateRegion (
>     RegionObj2 = ObjDesc->Common.NextObject;
>     RegionObj2->Extra.AmlStart = AmlStart;
>     RegionObj2->Extra.AmlLength = AmlLength;
> +    if (WalkState->ScopeInfo)
> +    {
> +        RegionObj2->Extra.ScopeNode = WalkState->ScopeInfo->Scope.Node;
> +    }
> +    else
> +    {
> +        RegionObj2->Extra.ScopeNode = Node;
> +    }
>
>     /* Init the region from the operands */
>
> -    ObjDesc->Region.SpaceId = RegionSpace;
> +    ObjDesc->Region.SpaceId = SpaceId;
>     ObjDesc->Region.Address = 0;
>     ObjDesc->Region.Length = 0;
>     ObjDesc->Region.Node = Node;
> diff --git a/src/acpica/source/components/executer/exdebug.c b/src/acpica/source/components/executer/exdebug.c
> index b1d7e07..8098e19 100644
> --- a/src/acpica/source/components/executer/exdebug.c
> +++ b/src/acpica/source/components/executer/exdebug.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/executer/exdump.c b/src/acpica/source/components/executer/exdump.c
> index 44f7d3b..5aab606 100644
> --- a/src/acpica/source/components/executer/exdump.c
> +++ b/src/acpica/source/components/executer/exdump.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -281,11 +281,13 @@ static ACPI_EXDUMP_INFO     AcpiExDumpBufferField[3] =
>     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (BufferField.BufferObj),        "Buffer Object"}
>  };
>
> -static ACPI_EXDUMP_INFO     AcpiExDumpRegionField[3] =
> +static ACPI_EXDUMP_INFO     AcpiExDumpRegionField[5] =
>  {
>     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpRegionField),    NULL},
>     {ACPI_EXD_FIELD,    0,                                              NULL},
> -    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Field.RegionObj),              "Region Object"}
> +    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Field.AccessLength),           "AccessLength"},
> +    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Field.RegionObj),              "Region Object"},
> +    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Field.ResourceBuffer),         "ResourceBuffer"}
>  };
>
>  static ACPI_EXDUMP_INFO     AcpiExDumpBankField[5] =
> @@ -1071,10 +1073,7 @@ AcpiExDumpPackageObj (
>     case ACPI_TYPE_STRING:
>
>         AcpiOsPrintf ("[String]  Value: ");
> -        for (i = 0; i < ObjDesc->String.Length; i++)
> -        {
> -            AcpiOsPrintf ("%c", ObjDesc->String.Pointer[i]);
> -        }
> +        AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX);
>         AcpiOsPrintf ("\n");
>         break;
>
> diff --git a/src/acpica/source/components/executer/exfield.c b/src/acpica/source/components/executer/exfield.c
> index 3cec69a..1f500ea 100644
> --- a/src/acpica/source/components/executer/exfield.c
> +++ b/src/acpica/source/components/executer/exfield.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -185,19 +185,25 @@ AcpiExReadDataFromField (
>     }
>     else if ((ObjDesc->Common.Type == ACPI_TYPE_LOCAL_REGION_FIELD) &&
>              (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_SMBUS ||
> +              ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_GSBUS ||
>               ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_IPMI))
>     {
>         /*
> -         * This is an SMBus or IPMI read. We must create a buffer to hold
> +         * This is an SMBus, GSBus or IPMI read. We must create a buffer to hold
>          * the data and then directly access the region handler.
>          *
> -         * Note: Smbus protocol value is passed in upper 16-bits of Function
> +         * Note: SMBus and GSBus protocol value is passed in upper 16-bits of Function
>          */
>         if (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_SMBUS)
>         {
>             Length = ACPI_SMBUS_BUFFER_SIZE;
>             Function = ACPI_READ | (ObjDesc->Field.Attribute << 16);
>         }
> +        else if (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_GSBUS)
> +        {
> +            Length = ACPI_GSBUS_BUFFER_SIZE;
> +            Function = ACPI_READ | (ObjDesc->Field.Attribute << 16);
> +        }
>         else /* IPMI */
>         {
>             Length = ACPI_IPMI_BUFFER_SIZE;
> @@ -346,23 +352,24 @@ AcpiExWriteDataToField (
>     }
>     else if ((ObjDesc->Common.Type == ACPI_TYPE_LOCAL_REGION_FIELD) &&
>              (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_SMBUS ||
> +              ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_GSBUS ||
>               ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_IPMI))
>     {
>         /*
> -         * This is an SMBus or IPMI write. We will bypass the entire field
> +         * This is an SMBus, GSBus or IPMI write. We will bypass the entire field
>          * mechanism and handoff the buffer directly to the handler. For
>          * these address spaces, the buffer is bi-directional; on a write,
>          * return data is returned in the same buffer.
>          *
>          * Source must be a buffer of sufficient size:
> -         * ACPI_SMBUS_BUFFER_SIZE or ACPI_IPMI_BUFFER_SIZE.
> +         * ACPI_SMBUS_BUFFER_SIZE, ACPI_GSBUS_BUFFER_SIZE, or ACPI_IPMI_BUFFER_SIZE.
>          *
> -         * Note: SMBus protocol type is passed in upper 16-bits of Function
> +         * Note: SMBus and GSBus protocol type is passed in upper 16-bits of Function
>          */
>         if (SourceDesc->Common.Type != ACPI_TYPE_BUFFER)
>         {
>             ACPI_ERROR ((AE_INFO,
> -                "SMBus or IPMI write requires Buffer, found type %s",
> +                "SMBus/IPMI/GenericSerialBus write requires Buffer, found type %s",
>                 AcpiUtGetObjectTypeName (SourceDesc)));
>
>             return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
> @@ -373,6 +380,11 @@ AcpiExWriteDataToField (
>             Length = ACPI_SMBUS_BUFFER_SIZE;
>             Function = ACPI_WRITE | (ObjDesc->Field.Attribute << 16);
>         }
> +        else if (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_GSBUS)
> +        {
> +            Length = ACPI_GSBUS_BUFFER_SIZE;
> +            Function = ACPI_WRITE | (ObjDesc->Field.Attribute << 16);
> +        }
>         else /* IPMI */
>         {
>             Length = ACPI_IPMI_BUFFER_SIZE;
> @@ -382,7 +394,7 @@ AcpiExWriteDataToField (
>         if (SourceDesc->Buffer.Length < Length)
>         {
>             ACPI_ERROR ((AE_INFO,
> -                "SMBus or IPMI write requires Buffer of length %u, found length %u",
> +                "SMBus/IPMI/GenericSerialBus write requires Buffer of length %u, found length %u",
>                 Length, SourceDesc->Buffer.Length));
>
>             return_ACPI_STATUS (AE_AML_BUFFER_LIMIT);
> diff --git a/src/acpica/source/components/executer/exfldio.c b/src/acpica/source/components/executer/exfldio.c
> index 55aacef..0aa7605 100644
> --- a/src/acpica/source/components/executer/exfldio.c
> +++ b/src/acpica/source/components/executer/exfldio.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -170,6 +170,7 @@ AcpiExSetupRegion (
>  {
>     ACPI_STATUS             Status = AE_OK;
>     ACPI_OPERAND_OBJECT     *RgnDesc;
> +    UINT8                   SpaceId;
>
>
>     ACPI_FUNCTION_TRACE_U32 (ExSetupRegion, FieldDatumByteOffset);
> @@ -188,6 +189,16 @@ AcpiExSetupRegion (
>         return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
>     }
>
> +    SpaceId = RgnDesc->Region.SpaceId;
> +
> +    /* Validate the Space ID */
> +
> +    if (!AcpiIsValidSpaceId (SpaceId))
> +    {
> +        ACPI_ERROR ((AE_INFO, "Invalid/unknown Address Space ID: 0x%2.2X", SpaceId));
> +        return_ACPI_STATUS (AE_AML_INVALID_SPACE_ID);
> +    }
> +
>     /*
>      * If the Region Address and Length have not been previously evaluated,
>      * evaluate them now and save the results.
> @@ -202,11 +213,12 @@ AcpiExSetupRegion (
>     }
>
>     /*
> -     * Exit now for SMBus or IPMI address space, it has a non-linear
> +     * Exit now for SMBus, GSBus or IPMI address space, it has a non-linear
>      * address space and the request cannot be directly validated
>      */
> -    if (RgnDesc->Region.SpaceId == ACPI_ADR_SPACE_SMBUS ||
> -        RgnDesc->Region.SpaceId == ACPI_ADR_SPACE_IPMI)
> +    if (SpaceId == ACPI_ADR_SPACE_SMBUS ||
> +        SpaceId == ACPI_ADR_SPACE_GSBUS ||
> +        SpaceId == ACPI_ADR_SPACE_IPMI)
>     {
>         /* SMBus or IPMI has a non-linear address space */
>
> @@ -362,7 +374,8 @@ AcpiExAccessRegion (
>
>     /* Invoke the appropriate AddressSpace/OpRegion handler */
>
> -    Status = AcpiEvAddressSpaceDispatch (RgnDesc, Function, RegionOffset,
> +    Status = AcpiEvAddressSpaceDispatch (RgnDesc, ObjDesc,
> +                Function, RegionOffset,
>                 ACPI_MUL_8 (ObjDesc->CommonField.AccessByteWidth), Value);
>
>     if (ACPI_FAILURE (Status))
> @@ -425,6 +438,11 @@ AcpiExRegisterOverflow (
>          * The Value is larger than the maximum value that can fit into
>          * the register.
>          */
> +        ACPI_ERROR ((AE_INFO,
> +            "Index value 0x%8.8X%8.8X overflows field width 0x%X",
> +            ACPI_FORMAT_UINT64 (Value),
> +            ObjDesc->CommonField.BitLength));
> +
>         return (TRUE);
>     }
>
> diff --git a/src/acpica/source/components/executer/exmisc.c b/src/acpica/source/components/executer/exmisc.c
> index 41a6d3a..27e04d0 100644
> --- a/src/acpica/source/components/executer/exmisc.c
> +++ b/src/acpica/source/components/executer/exmisc.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/executer/exmutex.c b/src/acpica/source/components/executer/exmutex.c
> index 1ce8992..eb1f4de 100644
> --- a/src/acpica/source/components/executer/exmutex.c
> +++ b/src/acpica/source/components/executer/exmutex.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/executer/exnames.c b/src/acpica/source/components/executer/exnames.c
> index 8fd6098..f56bebc 100644
> --- a/src/acpica/source/components/executer/exnames.c
> +++ b/src/acpica/source/components/executer/exnames.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/executer/exoparg1.c b/src/acpica/source/components/executer/exoparg1.c
> index 5b37a5e..e2a3378 100644
> --- a/src/acpica/source/components/executer/exoparg1.c
> +++ b/src/acpica/source/components/executer/exoparg1.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/executer/exoparg2.c b/src/acpica/source/components/executer/exoparg2.c
> index b7c19ec..e55f40c 100644
> --- a/src/acpica/source/components/executer/exoparg2.c
> +++ b/src/acpica/source/components/executer/exoparg2.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/executer/exoparg3.c b/src/acpica/source/components/executer/exoparg3.c
> index e583c53..0ff732e 100644
> --- a/src/acpica/source/components/executer/exoparg3.c
> +++ b/src/acpica/source/components/executer/exoparg3.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/executer/exoparg6.c b/src/acpica/source/components/executer/exoparg6.c
> index 92afffc..215e4f6 100644
> --- a/src/acpica/source/components/executer/exoparg6.c
> +++ b/src/acpica/source/components/executer/exoparg6.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/executer/exprep.c b/src/acpica/source/components/executer/exprep.c
> index 3355eac..0b65ab9 100644
> --- a/src/acpica/source/components/executer/exprep.c
> +++ b/src/acpica/source/components/executer/exprep.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -121,6 +121,7 @@
>  #include "acinterp.h"
>  #include "amlcode.h"
>  #include "acnamesp.h"
> +#include "acdispat.h"
>
>
>  #define _COMPONENT          ACPI_EXECUTER
> @@ -556,6 +557,32 @@ AcpiExPrepFieldValue (
>
>         ObjDesc->Field.RegionObj = AcpiNsGetAttachedObject (Info->RegionNode);
>
> +        /* Fields specific to GenericSerialBus fields */
> +
> +        ObjDesc->Field.AccessLength = Info->AccessLength;
> +
> +        if (Info->ConnectionNode)
> +        {
> +            SecondDesc = Info->ConnectionNode->Object;
> +            if (!(SecondDesc->Common.Flags & AOPOBJ_DATA_VALID))
> +            {
> +                Status = AcpiDsGetBufferArguments (SecondDesc);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    AcpiUtDeleteObjectDesc (ObjDesc);
> +                    return_ACPI_STATUS (Status);
> +                }
> +            }
> +
> +            ObjDesc->Field.ResourceBuffer = SecondDesc->Buffer.Pointer;
> +            ObjDesc->Field.ResourceLength = (UINT16) SecondDesc->Buffer.Length;
> +        }
> +        else if (Info->ResourceBuffer)
> +        {
> +            ObjDesc->Field.ResourceBuffer = Info->ResourceBuffer;
> +            ObjDesc->Field.ResourceLength = Info->ResourceLength;
> +        }
> +
>         /* Allow full data read from EC address space */
>
>         if ((ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_EC) &&
> diff --git a/src/acpica/source/components/executer/exregion.c b/src/acpica/source/components/executer/exregion.c
> index 2a308db..8f31593 100644
> --- a/src/acpica/source/components/executer/exregion.c
> +++ b/src/acpica/source/components/executer/exregion.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/executer/exresnte.c b/src/acpica/source/components/executer/exresnte.c
> index 494d154..4f6d279 100644
> --- a/src/acpica/source/components/executer/exresnte.c
> +++ b/src/acpica/source/components/executer/exresnte.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/executer/exresolv.c b/src/acpica/source/components/executer/exresolv.c
> index 27a6c52..8d3893b 100644
> --- a/src/acpica/source/components/executer/exresolv.c
> +++ b/src/acpica/source/components/executer/exresolv.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/executer/exresop.c b/src/acpica/source/components/executer/exresop.c
> index 3a6be3b..4d4879e 100644
> --- a/src/acpica/source/components/executer/exresop.c
> +++ b/src/acpica/source/components/executer/exresop.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/executer/exstore.c b/src/acpica/source/components/executer/exstore.c
> index 30414f0..8bea79b 100644
> --- a/src/acpica/source/components/executer/exstore.c
> +++ b/src/acpica/source/components/executer/exstore.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/executer/exstoren.c b/src/acpica/source/components/executer/exstoren.c
> index cee5bc6..6d2291f 100644
> --- a/src/acpica/source/components/executer/exstoren.c
> +++ b/src/acpica/source/components/executer/exstoren.c
> @@ -10,7 +10,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/executer/exstorob.c b/src/acpica/source/components/executer/exstorob.c
> index e9adf5f..8e110fe 100644
> --- a/src/acpica/source/components/executer/exstorob.c
> +++ b/src/acpica/source/components/executer/exstorob.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/executer/exsystem.c b/src/acpica/source/components/executer/exsystem.c
> index ab36f75..3282b5d 100644
> --- a/src/acpica/source/components/executer/exsystem.c
> +++ b/src/acpica/source/components/executer/exsystem.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/executer/exutils.c b/src/acpica/source/components/executer/exutils.c
> index 5a0a9a5..3ebcbe5 100644
> --- a/src/acpica/source/components/executer/exutils.c
> +++ b/src/acpica/source/components/executer/exutils.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -571,4 +571,34 @@ AcpiExIntegerToString (
>     }
>  }
>
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiIsValidSpaceId
> + *
> + * PARAMETERS:  SpaceId             - ID to be validated
> + *
> + * RETURN:      TRUE if valid/supported ID.
> + *
> + * DESCRIPTION: Validate an operation region SpaceID.
> + *
> + ******************************************************************************/
> +
> +BOOLEAN
> +AcpiIsValidSpaceId (
> +    UINT8                   SpaceId)
> +{
> +
> +    if ((SpaceId >= ACPI_NUM_PREDEFINED_REGIONS) &&
> +        (SpaceId < ACPI_USER_REGION_BEGIN) &&
> +        (SpaceId != ACPI_ADR_SPACE_DATA_TABLE) &&
> +        (SpaceId != ACPI_ADR_SPACE_FIXED_HARDWARE))
> +    {
> +        return (FALSE);
> +    }
> +
> +    return (TRUE);
> +}
> +
> +
>  #endif
> diff --git a/src/acpica/source/components/hardware/hwacpi.c b/src/acpica/source/components/hardware/hwacpi.c
> index b4ceb39..b95385a 100644
> --- a/src/acpica/source/components/hardware/hwacpi.c
> +++ b/src/acpica/source/components/hardware/hwacpi.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -124,6 +124,7 @@
>         ACPI_MODULE_NAME    ("hwacpi")
>
>
> +#if (!ACPI_REDUCED_HARDWARE) /* Entire module */
>  /******************************************************************************
>  *
>  * FUNCTION:    AcpiHwSetMode
> @@ -276,3 +277,5 @@ AcpiHwGetMode (
>         return_UINT32 (ACPI_SYS_MODE_LEGACY);
>     }
>  }
> +
> +#endif /* !ACPI_REDUCED_HARDWARE */
> diff --git a/src/acpica/source/components/hardware/hwgpe.c b/src/acpica/source/components/hardware/hwgpe.c
> index b12bab6..0483f62 100644
> --- a/src/acpica/source/components/hardware/hwgpe.c
> +++ b/src/acpica/source/components/hardware/hwgpe.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -121,6 +121,8 @@
>  #define _COMPONENT          ACPI_HARDWARE
>         ACPI_MODULE_NAME    ("hwgpe")
>
> +#if (!ACPI_REDUCED_HARDWARE) /* Entire module */
> +
>  /* Local prototypes */
>
>  static ACPI_STATUS
> @@ -610,3 +612,4 @@ AcpiHwEnableAllWakeupGpes (
>     return_ACPI_STATUS (Status);
>  }
>
> +#endif /* !ACPI_REDUCED_HARDWARE */
> diff --git a/src/acpica/source/components/hardware/hwpci.c b/src/acpica/source/components/hardware/hwpci.c
> index d733b11..902e80d 100644
> --- a/src/acpica/source/components/hardware/hwpci.c
> +++ b/src/acpica/source/components/hardware/hwpci.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/hardware/hwregs.c b/src/acpica/source/components/hardware/hwregs.c
> index 2e43a4a..5a9a776 100644
> --- a/src/acpica/source/components/hardware/hwregs.c
> +++ b/src/acpica/source/components/hardware/hwregs.c
> @@ -10,7 +10,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -125,6 +125,8 @@
>         ACPI_MODULE_NAME    ("hwregs")
>
>
> +#if (!ACPI_REDUCED_HARDWARE)
> +
>  /* Local Prototypes */
>
>  static ACPI_STATUS
> @@ -139,6 +141,7 @@ AcpiHwWriteMultiple (
>     ACPI_GENERIC_ADDRESS    *RegisterA,
>     ACPI_GENERIC_ADDRESS    *RegisterB);
>
> +#endif /* !ACPI_REDUCED_HARDWARE */
>
>  /******************************************************************************
>  *
> @@ -242,6 +245,7 @@ AcpiHwRead (
>     ACPI_GENERIC_ADDRESS    *Reg)
>  {
>     UINT64                  Address;
> +    UINT64                  Value64;
>     ACPI_STATUS             Status;
>
>
> @@ -267,7 +271,9 @@ AcpiHwRead (
>     if (Reg->SpaceId == ACPI_ADR_SPACE_SYSTEM_MEMORY)
>     {
>         Status = AcpiOsReadMemory ((ACPI_PHYSICAL_ADDRESS)
> -                    Address, Value, Reg->BitWidth);
> +                    Address, &Value64, Reg->BitWidth);
> +
> +        *Value = (UINT32) Value64;
>     }
>     else /* ACPI_ADR_SPACE_SYSTEM_IO, validated earlier */
>     {
> @@ -326,7 +332,7 @@ AcpiHwWrite (
>     if (Reg->SpaceId == ACPI_ADR_SPACE_SYSTEM_MEMORY)
>     {
>         Status = AcpiOsWriteMemory ((ACPI_PHYSICAL_ADDRESS)
> -                    Address, Value, Reg->BitWidth);
> +                    Address, (UINT64) Value, Reg->BitWidth);
>     }
>     else /* ACPI_ADR_SPACE_SYSTEM_IO, validated earlier */
>     {
> @@ -343,6 +349,7 @@ AcpiHwWrite (
>  }
>
>
> +#if (!ACPI_REDUCED_HARDWARE)
>  /*******************************************************************************
>  *
>  * FUNCTION:    AcpiHwClearAcpiStatus
> @@ -393,7 +400,7 @@ UnlockAndExit:
>
>  /*******************************************************************************
>  *
> - * FUNCTION:    AcpiHwGetRegisterBitMask
> + * FUNCTION:    AcpiHwGetBitRegisterInfo
>  *
>  * PARAMETERS:  RegisterId          - Index of ACPI Register to access
>  *
> @@ -803,3 +810,4 @@ AcpiHwWriteMultiple (
>     return (Status);
>  }
>
> +#endif /* !ACPI_REDUCED_HARDWARE */
> diff --git a/src/acpica/source/components/hardware/hwsleep.c b/src/acpica/source/components/hardware/hwsleep.c
> index fe796ec..6fd9d66 100644
> --- a/src/acpica/source/components/hardware/hwsleep.c
> +++ b/src/acpica/source/components/hardware/hwsleep.c
> @@ -1,7 +1,7 @@
> -
>  /******************************************************************************
>  *
> - * Name: hwsleep.c - ACPI Hardware Sleep/Wake Interface
> + * Name: hwsleep.c - ACPI Hardware Sleep/Wake Support functions for the
> + *                   original/legacy sleep/PM registers.
>  *
>  *****************************************************************************/
>
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -121,210 +121,38 @@
>         ACPI_MODULE_NAME    ("hwsleep")
>
>
> +#if (!ACPI_REDUCED_HARDWARE) /* Entire module */
>  /*******************************************************************************
>  *
> - * FUNCTION:    AcpiSetFirmwareWakingVector
> - *
> - * PARAMETERS:  PhysicalAddress     - 32-bit physical address of ACPI real mode
> - *                                    entry point.
> - *
> - * RETURN:      Status
> - *
> - * DESCRIPTION: Sets the 32-bit FirmwareWakingVector field of the FACS
> - *
> - ******************************************************************************/
> -
> -ACPI_STATUS
> -AcpiSetFirmwareWakingVector (
> -    UINT32                  PhysicalAddress)
> -{
> -    ACPI_FUNCTION_TRACE (AcpiSetFirmwareWakingVector);
> -
> -
> -    /* Set the 32-bit vector */
> -
> -    AcpiGbl_FACS->FirmwareWakingVector = PhysicalAddress;
> -
> -    /* Clear the 64-bit vector if it exists */
> -
> -    if ((AcpiGbl_FACS->Length > 32) && (AcpiGbl_FACS->Version >= 1))
> -    {
> -        AcpiGbl_FACS->XFirmwareWakingVector = 0;
> -    }
> -
> -    return_ACPI_STATUS (AE_OK);
> -}
> -
> -ACPI_EXPORT_SYMBOL (AcpiSetFirmwareWakingVector)
> -
> -
> -#if ACPI_MACHINE_WIDTH == 64
> -/*******************************************************************************
> - *
> - * FUNCTION:    AcpiSetFirmwareWakingVector64
> - *
> - * PARAMETERS:  PhysicalAddress     - 64-bit physical address of ACPI protected
> - *                                    mode entry point.
> - *
> - * RETURN:      Status
> - *
> - * DESCRIPTION: Sets the 64-bit X_FirmwareWakingVector field of the FACS, if
> - *              it exists in the table. This function is intended for use with
> - *              64-bit host operating systems.
> - *
> - ******************************************************************************/
> -
> -ACPI_STATUS
> -AcpiSetFirmwareWakingVector64 (
> -    UINT64                  PhysicalAddress)
> -{
> -    ACPI_FUNCTION_TRACE (AcpiSetFirmwareWakingVector64);
> -
> -
> -    /* Determine if the 64-bit vector actually exists */
> -
> -    if ((AcpiGbl_FACS->Length <= 32) || (AcpiGbl_FACS->Version < 1))
> -    {
> -        return_ACPI_STATUS (AE_NOT_EXIST);
> -    }
> -
> -    /* Clear 32-bit vector, set the 64-bit X_ vector */
> -
> -    AcpiGbl_FACS->FirmwareWakingVector = 0;
> -    AcpiGbl_FACS->XFirmwareWakingVector = PhysicalAddress;
> -    return_ACPI_STATUS (AE_OK);
> -}
> -
> -ACPI_EXPORT_SYMBOL (AcpiSetFirmwareWakingVector64)
> -#endif
> -
> -/*******************************************************************************
> - *
> - * FUNCTION:    AcpiEnterSleepStatePrep
> + * FUNCTION:    AcpiHwLegacySleep
>  *
>  * PARAMETERS:  SleepState          - Which sleep state to enter
> + *              Flags               - ACPI_EXECUTE_GTS to run optional method
>  *
>  * RETURN:      Status
>  *
> - * DESCRIPTION: Prepare to enter a system sleep state (see ACPI 2.0 spec p 231)
> - *              This function must execute with interrupts enabled.
> - *              We break sleeping into 2 stages so that OSPM can handle
> - *              various OS-specific tasks between the two steps.
> - *
> - ******************************************************************************/
> -
> -ACPI_STATUS
> -AcpiEnterSleepStatePrep (
> -    UINT8                   SleepState)
> -{
> -    ACPI_STATUS             Status;
> -    ACPI_OBJECT_LIST        ArgList;
> -    ACPI_OBJECT             Arg;
> -
> -
> -    ACPI_FUNCTION_TRACE (AcpiEnterSleepStatePrep);
> -
> -
> -    /* _PSW methods could be run here to enable wake-on keyboard, LAN, etc. */
> -
> -    Status = AcpiGetSleepTypeData (SleepState,
> -                    &AcpiGbl_SleepTypeA, &AcpiGbl_SleepTypeB);
> -    if (ACPI_FAILURE (Status))
> -    {
> -        return_ACPI_STATUS (Status);
> -    }
> -
> -    /* Execute the _PTS method (Prepare To Sleep) */
> -
> -    ArgList.Count = 1;
> -    ArgList.Pointer = &Arg;
> -    Arg.Type = ACPI_TYPE_INTEGER;
> -    Arg.Integer.Value = SleepState;
> -
> -    Status = AcpiEvaluateObject (NULL, METHOD_NAME__PTS, &ArgList, NULL);
> -    if (ACPI_FAILURE (Status) && Status != AE_NOT_FOUND)
> -    {
> -        return_ACPI_STATUS (Status);
> -    }
> -
> -    /* Setup the argument to the _SST method (System STatus) */
> -
> -    switch (SleepState)
> -    {
> -    case ACPI_STATE_S0:
> -        Arg.Integer.Value = ACPI_SST_WORKING;
> -        break;
> -
> -    case ACPI_STATE_S1:
> -    case ACPI_STATE_S2:
> -    case ACPI_STATE_S3:
> -        Arg.Integer.Value = ACPI_SST_SLEEPING;
> -        break;
> -
> -    case ACPI_STATE_S4:
> -        Arg.Integer.Value = ACPI_SST_SLEEP_CONTEXT;
> -        break;
> -
> -    default:
> -        Arg.Integer.Value = ACPI_SST_INDICATOR_OFF; /* Default is off */
> -        break;
> -    }
> -
> -    /*
> -     * Set the system indicators to show the desired sleep state.
> -     * _SST is an optional method (return no error if not found)
> -     */
> -    Status = AcpiEvaluateObject (NULL, METHOD_NAME__SST, &ArgList, NULL);
> -    if (ACPI_FAILURE (Status) && Status != AE_NOT_FOUND)
> -    {
> -        ACPI_EXCEPTION ((AE_INFO, Status, "While executing method _SST"));
> -    }
> -
> -    return_ACPI_STATUS (AE_OK);
> -}
> -
> -ACPI_EXPORT_SYMBOL (AcpiEnterSleepStatePrep)
> -
> -
> -/*******************************************************************************
> - *
> - * FUNCTION:    AcpiEnterSleepState
> - *
> - * PARAMETERS:  SleepState          - Which sleep state to enter
> - *
> - * RETURN:      Status
> - *
> - * DESCRIPTION: Enter a system sleep state
> + * DESCRIPTION: Enter a system sleep state via the legacy FADT PM registers
>  *              THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED
>  *
>  ******************************************************************************/
>
>  ACPI_STATUS
> -AcpiEnterSleepState (
> -    UINT8                   SleepState)
> +AcpiHwLegacySleep (
> +    UINT8                   SleepState,
> +    UINT8                   Flags)
>  {
> -    UINT32                  Pm1aControl;
> -    UINT32                  Pm1bControl;
>     ACPI_BIT_REGISTER_INFO  *SleepTypeRegInfo;
>     ACPI_BIT_REGISTER_INFO  *SleepEnableRegInfo;
> +    UINT32                  Pm1aControl;
> +    UINT32                  Pm1bControl;
>     UINT32                  InValue;
> -    ACPI_OBJECT_LIST        ArgList;
> -    ACPI_OBJECT             Arg;
>     ACPI_STATUS             Status;
>
>
> -    ACPI_FUNCTION_TRACE (AcpiEnterSleepState);
> +    ACPI_FUNCTION_TRACE (HwLegacySleep);
>
>
> -    if ((AcpiGbl_SleepTypeA > ACPI_SLEEP_TYPE_MAX) ||
> -        (AcpiGbl_SleepTypeB > ACPI_SLEEP_TYPE_MAX))
> -    {
> -        ACPI_ERROR ((AE_INFO, "Sleep values out of range: A=0x%X B=0x%X",
> -            AcpiGbl_SleepTypeA, AcpiGbl_SleepTypeB));
> -        return_ACPI_STATUS (AE_AML_OPERAND_VALUE);
> -    }
> -
> -    SleepTypeRegInfo   = AcpiHwGetBitRegisterInfo (ACPI_BITREG_SLEEP_TYPE);
> +    SleepTypeRegInfo = AcpiHwGetBitRegisterInfo (ACPI_BITREG_SLEEP_TYPE);
>     SleepEnableRegInfo = AcpiHwGetBitRegisterInfo (ACPI_BITREG_SLEEP_ENABLE);
>
>     /* Clear wake status */
> @@ -374,17 +202,11 @@ AcpiEnterSleepState (
>         return_ACPI_STATUS (Status);
>     }
>
> -    /* Execute the _GTS method (Going To Sleep) */
> -
> -    ArgList.Count = 1;
> -    ArgList.Pointer = &Arg;
> -    Arg.Type = ACPI_TYPE_INTEGER;
> -    Arg.Integer.Value = SleepState;
> +    /* Optionally execute _GTS (Going To Sleep) */
>
> -    Status = AcpiEvaluateObject (NULL, METHOD_NAME__GTS, &ArgList, NULL);
> -    if (ACPI_FAILURE (Status) && Status != AE_NOT_FOUND)
> +    if (Flags & ACPI_EXECUTE_GTS)
>     {
> -        return_ACPI_STATUS (Status);
> +        AcpiHwExecuteSleepMethod (METHOD_PATHNAME__GTS, SleepState);
>     }
>
>     /* Get current value of PM1A control */
> @@ -462,7 +284,7 @@ AcpiEnterSleepState (
>         }
>     }
>
> -    /* Wait until we enter sleep state */
> +    /* Wait for transition back to Working State */
>
>     do
>     {
> @@ -472,110 +294,32 @@ AcpiEnterSleepState (
>             return_ACPI_STATUS (Status);
>         }
>
> -        /* Spin until we wake */
> -
>     } while (!InValue);
>
>     return_ACPI_STATUS (AE_OK);
>  }
>
> -ACPI_EXPORT_SYMBOL (AcpiEnterSleepState)
> -
>
>  /*******************************************************************************
>  *
> - * FUNCTION:    AcpiEnterSleepStateS4bios
> - *
> - * PARAMETERS:  None
> - *
> - * RETURN:      Status
> - *
> - * DESCRIPTION: Perform a S4 bios request.
> - *              THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED
> - *
> - ******************************************************************************/
> -
> -ACPI_STATUS
> -AcpiEnterSleepStateS4bios (
> -    void)
> -{
> -    UINT32                  InValue;
> -    ACPI_STATUS             Status;
> -
> -
> -    ACPI_FUNCTION_TRACE (AcpiEnterSleepStateS4bios);
> -
> -
> -    /* Clear the wake status bit (PM1) */
> -
> -    Status = AcpiWriteBitRegister (ACPI_BITREG_WAKE_STATUS, ACPI_CLEAR_STATUS);
> -    if (ACPI_FAILURE (Status))
> -    {
> -        return_ACPI_STATUS (Status);
> -    }
> -
> -    Status = AcpiHwClearAcpiStatus ();
> -    if (ACPI_FAILURE (Status))
> -    {
> -        return_ACPI_STATUS (Status);
> -    }
> -
> -    /*
> -     * 1) Disable/Clear all GPEs
> -     * 2) Enable all wakeup GPEs
> -     */
> -    Status = AcpiHwDisableAllGpes ();
> -    if (ACPI_FAILURE (Status))
> -    {
> -        return_ACPI_STATUS (Status);
> -    }
> -    AcpiGbl_SystemAwakeAndRunning = FALSE;
> -
> -    Status = AcpiHwEnableAllWakeupGpes ();
> -    if (ACPI_FAILURE (Status))
> -    {
> -        return_ACPI_STATUS (Status);
> -    }
> -
> -    ACPI_FLUSH_CPU_CACHE ();
> -
> -    Status = AcpiHwWritePort (AcpiGbl_FADT.SmiCommand,
> -                (UINT32) AcpiGbl_FADT.S4BiosRequest, 8);
> -
> -    do {
> -        AcpiOsStall(1000);
> -        Status = AcpiReadBitRegister (ACPI_BITREG_WAKE_STATUS, &InValue);
> -        if (ACPI_FAILURE (Status))
> -        {
> -            return_ACPI_STATUS (Status);
> -        }
> -    } while (!InValue);
> -
> -    return_ACPI_STATUS (AE_OK);
> -}
> -
> -ACPI_EXPORT_SYMBOL (AcpiEnterSleepStateS4bios)
> -
> -
> -/*******************************************************************************
> - *
> - * FUNCTION:    AcpiLeaveSleepState
> + * FUNCTION:    AcpiHwLegacyWakePrep
>  *
>  * PARAMETERS:  SleepState          - Which sleep state we just exited
> + *              Flags               - ACPI_EXECUTE_BFS to run optional method
>  *
>  * RETURN:      Status
>  *
> - * DESCRIPTION: Perform OS-independent ACPI cleanup after a sleep
> + * DESCRIPTION: Perform the first state of OS-independent ACPI cleanup after a
> + *              sleep.
>  *              Called with interrupts ENABLED.
>  *
>  ******************************************************************************/
>
>  ACPI_STATUS
> -AcpiLeaveSleepState (
> -    UINT8                   SleepState)
> +AcpiHwLegacyWakePrep (
> +    UINT8                   SleepState,
> +    UINT8                   Flags)
>  {
> -    ACPI_OBJECT_LIST        ArgList;
> -    ACPI_OBJECT             Arg;
>     ACPI_STATUS             Status;
>     ACPI_BIT_REGISTER_INFO  *SleepTypeRegInfo;
>     ACPI_BIT_REGISTER_INFO  *SleepEnableRegInfo;
> @@ -583,8 +327,7 @@ AcpiLeaveSleepState (
>     UINT32                  Pm1bControl;
>
>
> -    ACPI_FUNCTION_TRACE (AcpiLeaveSleepState);
> -
> +    ACPI_FUNCTION_TRACE (HwLegacyWakePrep);
>
>     /*
>      * Set SLP_TYPE and SLP_EN to state S0.
> @@ -625,40 +368,50 @@ AcpiLeaveSleepState (
>         }
>     }
>
> -    /* Ensure EnterSleepStatePrep -> EnterSleepState ordering */
> +    /* Optionally execute _BFS (Back From Sleep) */
>
> -    AcpiGbl_SleepTypeA = ACPI_SLEEP_TYPE_INVALID;
> +    if (Flags & ACPI_EXECUTE_BFS)
> +    {
> +        AcpiHwExecuteSleepMethod (METHOD_PATHNAME__BFS, SleepState);
> +    }
> +    return_ACPI_STATUS (Status);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiHwLegacyWake
> + *
> + * PARAMETERS:  SleepState          - Which sleep state we just exited
> + *              Flags               - Reserved, set to zero
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Perform OS-independent ACPI cleanup after a sleep
> + *              Called with interrupts ENABLED.
> + *
> + ******************************************************************************/
>
> -    /* Setup parameter object */
> +ACPI_STATUS
> +AcpiHwLegacyWake (
> +    UINT8                   SleepState,
> +    UINT8                   Flags)
> +{
> +    ACPI_STATUS             Status;
>
> -    ArgList.Count = 1;
> -    ArgList.Pointer = &Arg;
> -    Arg.Type = ACPI_TYPE_INTEGER;
>
> -    /* Ignore any errors from these methods */
> +    ACPI_FUNCTION_TRACE (HwLegacyWake);
>
> -    Arg.Integer.Value = ACPI_SST_WAKING;
> -    Status = AcpiEvaluateObject (NULL, METHOD_NAME__SST, &ArgList, NULL);
> -    if (ACPI_FAILURE (Status) && Status != AE_NOT_FOUND)
> -    {
> -        ACPI_EXCEPTION ((AE_INFO, Status, "During Method _SST"));
> -    }
>
> -    Arg.Integer.Value = SleepState;
> -    Status = AcpiEvaluateObject (NULL, METHOD_NAME__BFS, &ArgList, NULL);
> -    if (ACPI_FAILURE (Status) && Status != AE_NOT_FOUND)
> -    {
> -        ACPI_EXCEPTION ((AE_INFO, Status, "During Method _BFS"));
> -    }
> +    /* Ensure EnterSleepStatePrep -> EnterSleepState ordering */
>
> -    Status = AcpiEvaluateObject (NULL, METHOD_NAME__WAK, &ArgList, NULL);
> -    if (ACPI_FAILURE (Status) && Status != AE_NOT_FOUND)
> -    {
> -        ACPI_EXCEPTION ((AE_INFO, Status, "During Method _WAK"));
> -    }
> -    /* TBD: _WAK "sometimes" returns stuff - do we want to look at it? */
> +    AcpiGbl_SleepTypeA = ACPI_SLEEP_TYPE_INVALID;
> +    AcpiHwExecuteSleepMethod (METHOD_PATHNAME__SST, ACPI_SST_WAKING);
>
>     /*
> +     * GPEs must be enabled before _WAK is called as GPEs
> +     * might get fired there
> +     *
>      * Restore the GPEs:
>      * 1) Disable/Clear all GPEs
>      * 2) Enable all runtime GPEs
> @@ -668,7 +421,6 @@ AcpiLeaveSleepState (
>     {
>         return_ACPI_STATUS (Status);
>     }
> -    AcpiGbl_SystemAwakeAndRunning = TRUE;
>
>     Status = AcpiHwEnableAllRuntimeGpes ();
>     if (ACPI_FAILURE (Status))
> @@ -676,6 +428,20 @@ AcpiLeaveSleepState (
>         return_ACPI_STATUS (Status);
>     }
>
> +    /*
> +     * Now we can execute _WAK, etc. Some machines require that the GPEs
> +     * are enabled before the wake methods are executed.
> +     */
> +    AcpiHwExecuteSleepMethod (METHOD_PATHNAME__WAK, SleepState);
> +
> +    /*
> +     * Some BIOS code assumes that WAK_STS will be cleared on resume
> +     * and use it to determine whether the system is rebooting or
> +     * resuming. Clear WAK_STS for compatibility.
> +     */
> +    (void) AcpiWriteBitRegister (ACPI_BITREG_WAKE_STATUS, ACPI_CLEAR_STATUS);
> +    AcpiGbl_SystemAwakeAndRunning = TRUE;
> +
>     /* Enable power button */
>
>     (void) AcpiWriteBitRegister(
> @@ -697,15 +463,8 @@ AcpiLeaveSleepState (
>         return_ACPI_STATUS (Status);
>     }
>
> -    Arg.Integer.Value = ACPI_SST_WORKING;
> -    Status = AcpiEvaluateObject (NULL, METHOD_NAME__SST, &ArgList, NULL);
> -    if (ACPI_FAILURE (Status) && Status != AE_NOT_FOUND)
> -    {
> -        ACPI_EXCEPTION ((AE_INFO, Status, "During Method _SST"));
> -    }
> -
> +    AcpiHwExecuteSleepMethod (METHOD_PATHNAME__SST, ACPI_SST_WORKING);
>     return_ACPI_STATUS (Status);
>  }
>
> -ACPI_EXPORT_SYMBOL (AcpiLeaveSleepState)
> -
> +#endif /* !ACPI_REDUCED_HARDWARE */
> diff --git a/src/acpica/source/components/hardware/hwvalid.c b/src/acpica/source/components/hardware/hwvalid.c
> index 92b9a4e..a5e8ba5 100644
> --- a/src/acpica/source/components/hardware/hwvalid.c
> +++ b/src/acpica/source/components/hardware/hwvalid.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -221,6 +221,8 @@ AcpiHwValidateIoRequest (
>         (BitWidth != 16) &&
>         (BitWidth != 32))
>     {
> +        ACPI_ERROR ((AE_INFO,
> +            "Bad BitWidth parameter: %8.8X", BitWidth));
>         return (AE_BAD_PARAMETER);
>     }
>
> diff --git a/src/acpica/source/components/hardware/hwxface.c b/src/acpica/source/components/hardware/hwxface.c
> index e7bcbe0..de4daae 100644
> --- a/src/acpica/source/components/hardware/hwxface.c
> +++ b/src/acpica/source/components/hardware/hwxface.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -226,12 +226,6 @@ AcpiRead (
>         return (Status);
>     }
>
> -    Width = Reg->BitWidth;
> -    if (Width == 64)
> -    {
> -        Width = 32; /* Break into two 32-bit transfers */
> -    }
> -
>     /* Initialize entire 64-bit return value to zero */
>
>     *ReturnValue = 0;
> @@ -244,28 +238,20 @@ AcpiRead (
>     if (Reg->SpaceId == ACPI_ADR_SPACE_SYSTEM_MEMORY)
>     {
>         Status = AcpiOsReadMemory ((ACPI_PHYSICAL_ADDRESS)
> -                    Address, &Value, Width);
> +                    Address, ReturnValue, Reg->BitWidth);
>         if (ACPI_FAILURE (Status))
>         {
>             return (Status);
>         }
> -        *ReturnValue = Value;
> -
> -        if (Reg->BitWidth == 64)
> -        {
> -            /* Read the top 32 bits */
> -
> -            Status = AcpiOsReadMemory ((ACPI_PHYSICAL_ADDRESS)
> -                        (Address + 4), &Value, 32);
> -            if (ACPI_FAILURE (Status))
> -            {
> -                return (Status);
> -            }
> -            *ReturnValue |= ((UINT64) Value << 32);
> -        }
>     }
>     else /* ACPI_ADR_SPACE_SYSTEM_IO, validated earlier */
>     {
> +        Width = Reg->BitWidth;
> +        if (Width == 64)
> +        {
> +            Width = 32; /* Break into two 32-bit transfers */
> +        }
> +
>         Status = AcpiHwReadPort ((ACPI_IO_ADDRESS)
>                     Address, &Value, Width);
>         if (ACPI_FAILURE (Status))
> @@ -334,12 +320,6 @@ AcpiWrite (
>         return (Status);
>     }
>
> -    Width = Reg->BitWidth;
> -    if (Width == 64)
> -    {
> -        Width = 32; /* Break into two 32-bit transfers */
> -    }
> -
>     /*
>      * Two address spaces supported: Memory or IO. PCI_Config is
>      * not supported here because the GAS structure is insufficient
> @@ -347,24 +327,20 @@ AcpiWrite (
>     if (Reg->SpaceId == ACPI_ADR_SPACE_SYSTEM_MEMORY)
>     {
>         Status = AcpiOsWriteMemory ((ACPI_PHYSICAL_ADDRESS)
> -                    Address, ACPI_LODWORD (Value), Width);
> +                    Address, Value, Reg->BitWidth);
>         if (ACPI_FAILURE (Status))
>         {
>             return (Status);
>         }
> -
> -        if (Reg->BitWidth == 64)
> -        {
> -            Status = AcpiOsWriteMemory ((ACPI_PHYSICAL_ADDRESS)
> -                        (Address + 4), ACPI_HIDWORD (Value), 32);
> -            if (ACPI_FAILURE (Status))
> -            {
> -                return (Status);
> -            }
> -        }
>     }
>     else /* ACPI_ADR_SPACE_SYSTEM_IO, validated earlier */
>     {
> +        Width = Reg->BitWidth;
> +        if (Width == 64)
> +        {
> +            Width = 32; /* Break into two 32-bit transfers */
> +        }
> +
>         Status = AcpiHwWritePort ((ACPI_IO_ADDRESS)
>                     Address, ACPI_LODWORD (Value), Width);
>         if (ACPI_FAILURE (Status))
> @@ -395,6 +371,7 @@ AcpiWrite (
>  ACPI_EXPORT_SYMBOL (AcpiWrite)
>
>
> +#if (!ACPI_REDUCED_HARDWARE)
>  /*******************************************************************************
>  *
>  * FUNCTION:    AcpiReadBitRegister
> @@ -577,6 +554,8 @@ UnlockAndExit:
>
>  ACPI_EXPORT_SYMBOL (AcpiWriteBitRegister)
>
> +#endif /* !ACPI_REDUCED_HARDWARE */
> +
>
>  /*******************************************************************************
>  *
> diff --git a/src/acpica/source/components/namespace/nsaccess.c b/src/acpica/source/components/namespace/nsaccess.c
> index e098e52..4751fdc 100644
> --- a/src/acpica/source/components/namespace/nsaccess.c
> +++ b/src/acpica/source/components/namespace/nsaccess.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/namespace/nsalloc.c b/src/acpica/source/components/namespace/nsalloc.c
> index de9f229..4bc619b 100644
> --- a/src/acpica/source/components/namespace/nsalloc.c
> +++ b/src/acpica/source/components/namespace/nsalloc.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/namespace/nsdump.c b/src/acpica/source/components/namespace/nsdump.c
> index 2bc0eba..f07694f 100644
> --- a/src/acpica/source/components/namespace/nsdump.c
> +++ b/src/acpica/source/components/namespace/nsdump.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -343,7 +343,21 @@ AcpiNsDumpOneObject (
>
>         if (!ObjDesc)
>         {
> -            /* No attached object, we are done */
> +            /* No attached object. Some types should always have an object */
> +
> +            switch (Type)
> +            {
> +            case ACPI_TYPE_INTEGER:
> +            case ACPI_TYPE_PACKAGE:
> +            case ACPI_TYPE_BUFFER:
> +            case ACPI_TYPE_STRING:
> +            case ACPI_TYPE_METHOD:
> +                AcpiOsPrintf ("<No attached object>");
> +                break;
> +
> +            default:
> +                break;
> +            }
>
>             AcpiOsPrintf ("\n");
>             return (AE_OK);
> diff --git a/src/acpica/source/components/namespace/nsdumpdv.c b/src/acpica/source/components/namespace/nsdumpdv.c
> index 98fb8bd..8dce21c 100644
> --- a/src/acpica/source/components/namespace/nsdumpdv.c
> +++ b/src/acpica/source/components/namespace/nsdumpdv.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -214,7 +214,7 @@ AcpiNsDumpRootDevices (
>         return;
>     }
>
> -    Status = AcpiGetHandle (NULL, ACPI_NS_SYSTEM_BUS, &SysBusHandle);
> +    Status = AcpiGetHandle (NULL, METHOD_NAME__SB_, &SysBusHandle);
>     if (ACPI_FAILURE (Status))
>     {
>         return;
> diff --git a/src/acpica/source/components/namespace/nseval.c b/src/acpica/source/components/namespace/nseval.c
> index c200e92..eb7b206 100644
> --- a/src/acpica/source/components/namespace/nseval.c
> +++ b/src/acpica/source/components/namespace/nseval.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/namespace/nsinit.c b/src/acpica/source/components/namespace/nsinit.c
> index d5f9daa..06e1462 100644
> --- a/src/acpica/source/components/namespace/nsinit.c
> +++ b/src/acpica/source/components/namespace/nsinit.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/namespace/nsload.c b/src/acpica/source/components/namespace/nsload.c
> index 45ab0df..e59096c 100644
> --- a/src/acpica/source/components/namespace/nsload.c
> +++ b/src/acpica/source/components/namespace/nsload.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/namespace/nsnames.c b/src/acpica/source/components/namespace/nsnames.c
> index 59ecfd6..f72482f 100644
> --- a/src/acpica/source/components/namespace/nsnames.c
> +++ b/src/acpica/source/components/namespace/nsnames.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/namespace/nsobject.c b/src/acpica/source/components/namespace/nsobject.c
> index d2747f3..d1ca214 100644
> --- a/src/acpica/source/components/namespace/nsobject.c
> +++ b/src/acpica/source/components/namespace/nsobject.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/namespace/nsparse.c b/src/acpica/source/components/namespace/nsparse.c
> index cd47940..234aa2c 100644
> --- a/src/acpica/source/components/namespace/nsparse.c
> +++ b/src/acpica/source/components/namespace/nsparse.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/namespace/nspredef.c b/src/acpica/source/components/namespace/nspredef.c
> index 4c0cc82..e6c7cf6 100644
> --- a/src/acpica/source/components/namespace/nspredef.c
> +++ b/src/acpica/source/components/namespace/nspredef.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -737,6 +737,7 @@ AcpiNsCheckPackage (
>     case ACPI_PTYPE2_FIXED:
>     case ACPI_PTYPE2_MIN:
>     case ACPI_PTYPE2_COUNT:
> +    case ACPI_PTYPE2_FIX_VAR:
>
>         /*
>          * These types all return a single Package that consists of a
> @@ -752,7 +753,7 @@ AcpiNsCheckPackage (
>         {
>             /* Create the new outer package and populate it */
>
> -            Status = AcpiNsRepairPackageList (Data, ReturnObjectPtr);
> +            Status = AcpiNsWrapWithPackage (Data, *Elements, ReturnObjectPtr);
>             if (ACPI_FAILURE (Status))
>             {
>                 return (Status);
> @@ -879,6 +880,29 @@ AcpiNsCheckPackageList (
>             break;
>
>
> +        case ACPI_PTYPE2_FIX_VAR:
> +            /*
> +             * Each subpackage has a fixed number of elements and an
> +             * optional element
> +             */
> +            ExpectedCount = Package->RetInfo.Count1 + Package->RetInfo.Count2;
> +            if (SubPackage->Package.Count < ExpectedCount)
> +            {
> +                goto PackageTooSmall;
> +            }
> +
> +            Status = AcpiNsCheckPackageElements (Data, SubElements,
> +                        Package->RetInfo.ObjectType1,
> +                        Package->RetInfo.Count1,
> +                        Package->RetInfo.ObjectType2,
> +                        SubPackage->Package.Count - Package->RetInfo.Count1, 0);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return (Status);
> +            }
> +            break;
> +
> +
>         case ACPI_PTYPE2_FIXED:
>
>             /* Each sub-package has a fixed length */
> diff --git a/src/acpica/source/components/namespace/nsrepair.c b/src/acpica/source/components/namespace/nsrepair.c
> index 702e53e..94c3ba1 100644
> --- a/src/acpica/source/components/namespace/nsrepair.c
> +++ b/src/acpica/source/components/namespace/nsrepair.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -146,11 +146,10 @@
>  * Buffer  -> String
>  * Buffer  -> Package of Integers
>  * Package -> Package of one Package
> + * An incorrect standalone object is wrapped with required outer package
>  *
>  * Additional possible repairs:
> - *
>  * Required package elements that are NULL replaced by Integer/String/Buffer
> - * Incorrect standalone package wrapped with required outer package
>  *
>  ******************************************************************************/
>
> @@ -172,11 +171,6 @@ AcpiNsConvertToBuffer (
>     ACPI_OPERAND_OBJECT     *OriginalObject,
>     ACPI_OPERAND_OBJECT     **ReturnObject);
>
> -static ACPI_STATUS
> -AcpiNsConvertToPackage (
> -    ACPI_OPERAND_OBJECT     *OriginalObject,
> -    ACPI_OPERAND_OBJECT     **ReturnObject);
> -
>
>  /*******************************************************************************
>  *
> @@ -244,10 +238,24 @@ AcpiNsRepairObject (
>     }
>     if (ExpectedBtypes & ACPI_RTYPE_PACKAGE)
>     {
> -        Status = AcpiNsConvertToPackage (ReturnObject, &NewObject);
> +        /*
> +         * A package is expected. We will wrap the existing object with a
> +         * new package object. It is often the case that if a variable-length
> +         * package is required, but there is only a single object needed, the
> +         * BIOS will return that object instead of wrapping it with a Package
> +         * object. Note: after the wrapping, the package will be validated
> +         * for correct contents (expected object type or types).
> +         */
> +        Status = AcpiNsWrapWithPackage (Data, ReturnObject, &NewObject);
>         if (ACPI_SUCCESS (Status))
>         {
> -            goto ObjectRepaired;
> +            /*
> +             * The original object just had its reference count
> +             * incremented for being inserted into the new package.
> +             */
> +            *ReturnObjectPtr = NewObject;       /* New Package object */
> +            Data->Flags |= ACPI_OBJECT_REPAIRED;
> +            return (AE_OK);
>         }
>     }
>
> @@ -260,24 +268,30 @@ ObjectRepaired:
>
>     /* Object was successfully repaired */
>
> -    /*
> -     * If the original object is a package element, we need to:
> -     * 1. Set the reference count of the new object to match the
> -     *    reference count of the old object.
> -     * 2. Decrement the reference count of the original object.
> -     */
>     if (PackageIndex != ACPI_NOT_PACKAGE_ELEMENT)
>     {
> -        NewObject->Common.ReferenceCount =
> -            ReturnObject->Common.ReferenceCount;
> -
> -        if (ReturnObject->Common.ReferenceCount > 1)
> +        /*
> +         * The original object is a package element. We need to
> +         * decrement the reference count of the original object,
> +         * for removing it from the package.
> +         *
> +         * However, if the original object was just wrapped with a
> +         * package object as part of the repair, we don't need to
> +         * change the reference count.
> +         */
> +        if (!(Data->Flags & ACPI_OBJECT_WRAPPED))
>         {
> -            ReturnObject->Common.ReferenceCount--;
> +            NewObject->Common.ReferenceCount =
> +                ReturnObject->Common.ReferenceCount;
> +
> +            if (ReturnObject->Common.ReferenceCount > 1)
> +            {
> +                ReturnObject->Common.ReferenceCount--;
> +            }
>         }
>
>         ACPI_DEBUG_PRINT ((ACPI_DB_REPAIR,
> -            "%s: Converted %s to expected %s at index %u\n",
> +            "%s: Converted %s to expected %s at Package index %u\n",
>             Data->Pathname, AcpiUtGetObjectTypeName (ReturnObject),
>             AcpiUtGetObjectTypeName (NewObject), PackageIndex));
>     }
> @@ -570,71 +584,6 @@ AcpiNsConvertToBuffer (
>
>  /*******************************************************************************
>  *
> - * FUNCTION:    AcpiNsConvertToPackage
> - *
> - * PARAMETERS:  OriginalObject      - Object to be converted
> - *              ReturnObject        - Where the new converted object is returned
> - *
> - * RETURN:      Status. AE_OK if conversion was successful.
> - *
> - * DESCRIPTION: Attempt to convert a Buffer object to a Package. Each byte of
> - *              the buffer is converted to a single integer package element.
> - *
> - ******************************************************************************/
> -
> -static ACPI_STATUS
> -AcpiNsConvertToPackage (
> -    ACPI_OPERAND_OBJECT     *OriginalObject,
> -    ACPI_OPERAND_OBJECT     **ReturnObject)
> -{
> -    ACPI_OPERAND_OBJECT     *NewObject;
> -    ACPI_OPERAND_OBJECT     **Elements;
> -    UINT32                  Length;
> -    UINT8                   *Buffer;
> -
> -
> -    switch (OriginalObject->Common.Type)
> -    {
> -    case ACPI_TYPE_BUFFER:
> -
> -        /* Buffer-to-Package conversion */
> -
> -        Length = OriginalObject->Buffer.Length;
> -        NewObject = AcpiUtCreatePackageObject (Length);
> -        if (!NewObject)
> -        {
> -            return (AE_NO_MEMORY);
> -        }
> -
> -        /* Convert each buffer byte to an integer package element */
> -
> -        Elements = NewObject->Package.Elements;
> -        Buffer = OriginalObject->Buffer.Pointer;
> -
> -        while (Length--)
> -        {
> -            *Elements = AcpiUtCreateIntegerObject ((UINT64) *Buffer);
> -            if (!*Elements)
> -            {
> -                AcpiUtRemoveReference (NewObject);
> -                return (AE_NO_MEMORY);
> -            }
> -            Elements++;
> -            Buffer++;
> -        }
> -        break;
> -
> -    default:
> -        return (AE_AML_OPERAND_TYPE);
> -    }
> -
> -    *ReturnObject = NewObject;
> -    return (AE_OK);
> -}
> -
> -
> -/*******************************************************************************
> - *
>  * FUNCTION:    AcpiNsRepairNullElement
>  *
>  * PARAMETERS:  Data                - Pointer to validation data structure
> @@ -768,6 +717,7 @@ AcpiNsRemoveNullElements (
>     case ACPI_PTYPE2_FIXED:
>     case ACPI_PTYPE2_MIN:
>     case ACPI_PTYPE2_REV_FIXED:
> +    case ACPI_PTYPE2_FIX_VAR:
>         break;
>
>     default:
> @@ -816,42 +766,43 @@ AcpiNsRemoveNullElements (
>
>  /*******************************************************************************
>  *
> - * FUNCTION:    AcpiNsRepairPackageList
> + * FUNCTION:    AcpiNsWrapWithPackage
>  *
>  * PARAMETERS:  Data                - Pointer to validation data structure
> - *              ObjDescPtr          - Pointer to the object to repair. The new
> - *                                    package object is returned here,
> - *                                    overwriting the old object.
> + *              OriginalObject      - Pointer to the object to repair.
> + *              ObjDescPtr          - The new package object is returned here
>  *
>  * RETURN:      Status, new object in *ObjDescPtr
>  *
> - * DESCRIPTION: Repair a common problem with objects that are defined to return
> - *              a variable-length Package of Packages. If the variable-length
> - *              is one, some BIOS code mistakenly simply declares a single
> - *              Package instead of a Package with one sub-Package. This
> - *              function attempts to repair this error by wrapping a Package
> - *              object around the original Package, creating the correct
> - *              Package with one sub-Package.
> + * DESCRIPTION: Repair a common problem with objects that are defined to
> + *              return a variable-length Package of sub-objects. If there is
> + *              only one sub-object, some BIOS code mistakenly simply declares
> + *              the single object instead of a Package with one sub-object.
> + *              This function attempts to repair this error by wrapping a
> + *              Package object around the original object, creating the
> + *              correct and expected Package with one sub-object.
>  *
>  *              Names that can be repaired in this manner include:
> - *              _ALR, _CSD, _HPX, _MLS, _PRT, _PSS, _TRT, TSS
> + *              _ALR, _CSD, _HPX, _MLS, _PLD, _PRT, _PSS, _TRT, _TSS,
> + *              _BCL, _DOD, _FIX, _Sx
>  *
>  ******************************************************************************/
>
>  ACPI_STATUS
> -AcpiNsRepairPackageList (
> +AcpiNsWrapWithPackage (
>     ACPI_PREDEFINED_DATA    *Data,
> +    ACPI_OPERAND_OBJECT     *OriginalObject,
>     ACPI_OPERAND_OBJECT     **ObjDescPtr)
>  {
>     ACPI_OPERAND_OBJECT     *PkgObjDesc;
>
>
> -    ACPI_FUNCTION_NAME (NsRepairPackageList);
> +    ACPI_FUNCTION_NAME (NsWrapWithPackage);
>
>
>     /*
>      * Create the new outer package and populate it. The new package will
> -     * have a single element, the lone subpackage.
> +     * have a single element, the lone sub-object.
>      */
>     PkgObjDesc = AcpiUtCreatePackageObject (1);
>     if (!PkgObjDesc)
> @@ -859,15 +810,15 @@ AcpiNsRepairPackageList (
>         return (AE_NO_MEMORY);
>     }
>
> -    PkgObjDesc->Package.Elements[0] = *ObjDescPtr;
> +    PkgObjDesc->Package.Elements[0] = OriginalObject;
> +
> +    ACPI_DEBUG_PRINT ((ACPI_DB_REPAIR,
> +        "%s: Wrapped %s with expected Package object\n",
> +        Data->Pathname, AcpiUtGetObjectTypeName (OriginalObject)));
>
>     /* Return the new object in the object pointer */
>
>     *ObjDescPtr = PkgObjDesc;
> -    Data->Flags |= ACPI_OBJECT_REPAIRED;
> -
> -    ACPI_DEBUG_PRINT ((ACPI_DB_REPAIR,
> -        "%s: Repaired incorrectly formed Package\n", Data->Pathname));
> -
> +    Data->Flags |= ACPI_OBJECT_REPAIRED | ACPI_OBJECT_WRAPPED;
>     return (AE_OK);
>  }
> diff --git a/src/acpica/source/components/namespace/nsrepair2.c b/src/acpica/source/components/namespace/nsrepair2.c
> index 7f8862d..3ab9146 100644
> --- a/src/acpica/source/components/namespace/nsrepair2.c
> +++ b/src/acpica/source/components/namespace/nsrepair2.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -588,11 +588,12 @@ AcpiNsRepair_HID (
>     }
>
>     /*
> -     * Copy and uppercase the string. From the ACPI specification:
> +     * Copy and uppercase the string. From the ACPI 5.0 specification:
>      *
>      * A valid PNP ID must be of the form "AAA####" where A is an uppercase
>      * letter and # is a hex digit. A valid ACPI ID must be of the form
> -     * "ACPI####" where # is a hex digit.
> +     * "NNNN####" where N is an uppercase letter or decimal digit, and
> +     * # is a hex digit.
>      */
>     for (Dest = NewString->String.Pointer; *Source; Dest++, Source++)
>     {
> diff --git a/src/acpica/source/components/namespace/nssearch.c b/src/acpica/source/components/namespace/nssearch.c
> index c1ba96e..c741287 100644
> --- a/src/acpica/source/components/namespace/nssearch.c
> +++ b/src/acpica/source/components/namespace/nssearch.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/namespace/nsutils.c b/src/acpica/source/components/namespace/nsutils.c
> index 603a00f..7200882 100644
> --- a/src/acpica/source/components/namespace/nsutils.c
> +++ b/src/acpica/source/components/namespace/nsutils.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -477,7 +477,7 @@ AcpiNsBuildInternalName (
>         if (!AcpiNsValidPathSeparator (*ExternalName) &&
>             (*ExternalName != 0))
>         {
> -            return_ACPI_STATUS (AE_BAD_PARAMETER);
> +            return_ACPI_STATUS (AE_BAD_PATHNAME);
>         }
>
>         /* Move on the next segment */
> diff --git a/src/acpica/source/components/namespace/nswalk.c b/src/acpica/source/components/namespace/nswalk.c
> index c7d95e8..bd0b01b 100644
> --- a/src/acpica/source/components/namespace/nswalk.c
> +++ b/src/acpica/source/components/namespace/nswalk.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/namespace/nsxfeval.c b/src/acpica/source/components/namespace/nsxfeval.c
> index c3b96e3..1e84d0b 100644
> --- a/src/acpica/source/components/namespace/nsxfeval.c
> +++ b/src/acpica/source/components/namespace/nsxfeval.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/namespace/nsxfname.c b/src/acpica/source/components/namespace/nsxfname.c
> index 911fad4..406836c 100644
> --- a/src/acpica/source/components/namespace/nsxfname.c
> +++ b/src/acpica/source/components/namespace/nsxfname.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/namespace/nsxfobj.c b/src/acpica/source/components/namespace/nsxfobj.c
> index 5dca29c..dede01c 100644
> --- a/src/acpica/source/components/namespace/nsxfobj.c
> +++ b/src/acpica/source/components/namespace/nsxfobj.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/parser/psargs.c b/src/acpica/source/components/parser/psargs.c
> index 1dcb1b7..1e6972c 100644
> --- a/src/acpica/source/components/parser/psargs.c
> +++ b/src/acpica/source/components/parser/psargs.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -603,37 +603,57 @@ static ACPI_PARSE_OBJECT *
>  AcpiPsGetNextField (
>     ACPI_PARSE_STATE        *ParserState)
>  {
> -    UINT32                  AmlOffset = (UINT32)
> -                                ACPI_PTR_DIFF (ParserState->Aml,
> -                                               ParserState->AmlStart);
> +    UINT32                  AmlOffset;
>     ACPI_PARSE_OBJECT       *Field;
> +    ACPI_PARSE_OBJECT       *Arg = NULL;
>     UINT16                  Opcode;
>     UINT32                  Name;
> +    UINT8                   AccessType;
> +    UINT8                   AccessAttribute;
> +    UINT8                   AccessLength;
> +    UINT32                  PkgLength;
> +    UINT8                   *PkgEnd;
> +    UINT32                  BufferLength;
>
>
>     ACPI_FUNCTION_TRACE (PsGetNextField);
>
>
> +    AmlOffset = (UINT32) ACPI_PTR_DIFF (
> +        ParserState->Aml, ParserState->AmlStart);
> +
>     /* Determine field type */
>
>     switch (ACPI_GET8 (ParserState->Aml))
>     {
> -    default:
> +    case AML_FIELD_OFFSET_OP:
>
> -        Opcode = AML_INT_NAMEDFIELD_OP;
> +        Opcode = AML_INT_RESERVEDFIELD_OP;
> +        ParserState->Aml++;
>         break;
>
> -    case 0x00:
> +    case AML_FIELD_ACCESS_OP:
>
> -        Opcode = AML_INT_RESERVEDFIELD_OP;
> +        Opcode = AML_INT_ACCESSFIELD_OP;
>         ParserState->Aml++;
>         break;
>
> -    case 0x01:
> +    case AML_FIELD_CONNECTION_OP:
>
> -        Opcode = AML_INT_ACCESSFIELD_OP;
> +        Opcode = AML_INT_CONNECTION_OP;
> +        ParserState->Aml++;
> +        break;
> +
> +    case AML_FIELD_EXT_ACCESS_OP:
> +
> +        Opcode = AML_INT_EXTACCESSFIELD_OP;
>         ParserState->Aml++;
>         break;
> +
> +    default:
> +
> +        Opcode = AML_INT_NAMEDFIELD_OP;
> +        break;
>     }
>
>     /* Allocate a new field op */
> @@ -673,17 +693,118 @@ AcpiPsGetNextField (
>
>
>     case AML_INT_ACCESSFIELD_OP:
> +    case AML_INT_EXTACCESSFIELD_OP:
>
>         /*
>          * Get AccessType and AccessAttrib and merge into the field Op
> -         * AccessType is first operand, AccessAttribute is second
> +         * AccessType is first operand, AccessAttribute is second. stuff
> +         * these bytes into the node integer value for convenience.
>          */
> -        Field->Common.Value.Integer = (((UINT32) ACPI_GET8 (ParserState->Aml) << 8));
> +
> +        /* Get the two bytes (Type/Attribute) */
> +
> +        AccessType = ACPI_GET8 (ParserState->Aml);
>         ParserState->Aml++;
> -        Field->Common.Value.Integer |= ACPI_GET8 (ParserState->Aml);
> +        AccessAttribute = ACPI_GET8 (ParserState->Aml);
>         ParserState->Aml++;
> +
> +        Field->Common.Value.Integer = (UINT8) AccessType;
> +        Field->Common.Value.Integer |= (UINT16) (AccessAttribute << 8);
> +
> +        /* This opcode has a third byte, AccessLength */
> +
> +        if (Opcode == AML_INT_EXTACCESSFIELD_OP)
> +        {
> +            AccessLength = ACPI_GET8 (ParserState->Aml);
> +            ParserState->Aml++;
> +
> +            Field->Common.Value.Integer |= (UINT32) (AccessLength << 16);
> +        }
>         break;
>
> +
> +    case AML_INT_CONNECTION_OP:
> +
> +        /*
> +         * Argument for Connection operator can be either a Buffer
> +         * (resource descriptor), or a NameString.
> +         */
> +        if (ACPI_GET8 (ParserState->Aml) == AML_BUFFER_OP)
> +        {
> +            ParserState->Aml++;
> +
> +            PkgEnd = ParserState->Aml;
> +            PkgLength = AcpiPsGetNextPackageLength (ParserState);
> +            PkgEnd += PkgLength;
> +
> +            if (ParserState->Aml < PkgEnd)
> +            {
> +                /* Non-empty list */
> +
> +                Arg = AcpiPsAllocOp (AML_INT_BYTELIST_OP);
> +                if (!Arg)
> +                {
> +                    AcpiPsFreeOp (Field);
> +                    return_PTR (NULL);
> +                }
> +
> +                /* Get the actual buffer length argument */
> +
> +                Opcode = ACPI_GET8 (ParserState->Aml);
> +                ParserState->Aml++;
> +
> +                switch (Opcode)
> +                {
> +                case AML_BYTE_OP:       /* AML_BYTEDATA_ARG */
> +                    BufferLength = ACPI_GET8 (ParserState->Aml);
> +                    ParserState->Aml += 1;
> +                    break;
> +
> +                case AML_WORD_OP:       /* AML_WORDDATA_ARG */
> +                    BufferLength = ACPI_GET16 (ParserState->Aml);
> +                    ParserState->Aml += 2;
> +                    break;
> +
> +                case AML_DWORD_OP:      /* AML_DWORDATA_ARG */
> +                    BufferLength = ACPI_GET32 (ParserState->Aml);
> +                    ParserState->Aml += 4;
> +                    break;
> +
> +                default:
> +                    BufferLength = 0;
> +                    break;
> +                }
> +
> +                /* Fill in bytelist data */
> +
> +                Arg->Named.Value.Size = BufferLength;
> +                Arg->Named.Data = ParserState->Aml;
> +            }
> +
> +            /* Skip to End of byte data */
> +
> +            ParserState->Aml = PkgEnd;
> +        }
> +        else
> +        {
> +            Arg = AcpiPsAllocOp (AML_INT_NAMEPATH_OP);
> +            if (!Arg)
> +            {
> +                AcpiPsFreeOp (Field);
> +                return_PTR (NULL);
> +            }
> +
> +            /* Get the Namestring argument */
> +
> +            Arg->Common.Value.Name = AcpiPsGetNextNamestring (ParserState);
> +        }
> +
> +        /* Link the buffer/namestring to parent (CONNECTION_OP) */
> +
> +        AcpiPsAppendArg (Field, Arg);
> +        break;
> +
> +
>     default:
>
>         /* Opcode was set in previous switch */
> diff --git a/src/acpica/source/components/parser/psloop.c b/src/acpica/source/components/parser/psloop.c
> index 9791efc..20b3abf 100644
> --- a/src/acpica/source/components/parser/psloop.c
> +++ b/src/acpica/source/components/parser/psloop.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/parser/psopcode.c b/src/acpica/source/components/parser/psopcode.c
> index 30a393f..0cd777b 100644
> --- a/src/acpica/source/components/parser/psopcode.c
> +++ b/src/acpica/source/components/parser/psopcode.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -400,12 +400,17 @@ const ACPI_OPCODE_INFO    AcpiGbl_AmlOpInfo[AML_NUM_OPCODES] =
>  /* 79 */ ACPI_OP ("Mid",                ARGP_MID_OP,               ARGI_MID_OP,                ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_3A_1T_1R,   AML_FLAGS_EXEC_3A_1T_1R | AML_CONSTANT),
>  /* 7A */ ACPI_OP ("Continue",           ARGP_CONTINUE_OP,          ARGI_CONTINUE_OP,           ACPI_TYPE_ANY,               AML_CLASS_CONTROL,         AML_TYPE_CONTROL,         0),
>  /* 7B */ ACPI_OP ("LoadTable",          ARGP_LOAD_TABLE_OP,        ARGI_LOAD_TABLE_OP,         ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_6A_0T_1R,   AML_FLAGS_EXEC_6A_0T_1R),
> -/* 7C */ ACPI_OP ("DataTableRegion",    ARGP_DATA_REGION_OP,       ARGI_DATA_REGION_OP,        ACPI_TYPE_REGION,            AML_CLASS_NAMED_OBJECT,    AML_TYPE_NAMED_COMPLEX,    AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED | AML_DEFER),
> +/* 7C */ ACPI_OP ("DataTableRegion",    ARGP_DATA_REGION_OP,       ARGI_DATA_REGION_OP,        ACPI_TYPE_REGION,            AML_CLASS_NAMED_OBJECT,    AML_TYPE_NAMED_COMPLEX,   AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED | AML_DEFER),
>  /* 7D */ ACPI_OP ("[EvalSubTree]",      ARGP_SCOPE_OP,             ARGI_SCOPE_OP,              ACPI_TYPE_ANY,               AML_CLASS_NAMED_OBJECT,    AML_TYPE_NAMED_NO_OBJ,    AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE),
>
>  /* ACPI 3.0 opcodes */
>
> -/* 7E */ ACPI_OP ("Timer",              ARGP_TIMER_OP,             ARGI_TIMER_OP,              ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_0A_0T_1R,   AML_FLAGS_EXEC_0A_0T_1R)
> +/* 7E */ ACPI_OP ("Timer",              ARGP_TIMER_OP,             ARGI_TIMER_OP,              ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_0A_0T_1R,   AML_FLAGS_EXEC_0A_0T_1R),
> +
> +/* ACPI 5.0 opcodes */
> +
> +/* 7F */ ACPI_OP ("-ConnectField-",     ARGP_CONNECTFIELD_OP,      ARGI_CONNECTFIELD_OP,       ACPI_TYPE_ANY,               AML_CLASS_INTERNAL,        AML_TYPE_BOGUS,           AML_HAS_ARGS),
> +/* 80 */ ACPI_OP ("-ExtAccessField-",   ARGP_CONNECTFIELD_OP,      ARGI_CONNECTFIELD_OP,       ACPI_TYPE_ANY,               AML_CLASS_INTERNAL,        AML_TYPE_BOGUS,           0)
>
>  /*! [End] no source code translation !*/
>  };
> @@ -425,7 +430,7 @@ static const UINT8 AcpiGbl_ShortOpIndex[256] =
>  /* 0x20 */    _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
>  /* 0x28 */    _UNK, _UNK, _UNK, _UNK, _UNK, 0x63, _PFX, _PFX,
>  /* 0x30 */    0x67, 0x66, 0x68, 0x65, 0x69, 0x64, 0x6A, 0x7D,
> -/* 0x38 */    _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
> +/* 0x38 */    0x7F, 0x80, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
>  /* 0x40 */    _UNK, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC,
>  /* 0x48 */    _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC,
>  /* 0x50 */    _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC,
> diff --git a/src/acpica/source/components/parser/psparse.c b/src/acpica/source/components/parser/psparse.c
> index 59af839..18e2e21 100644
> --- a/src/acpica/source/components/parser/psparse.c
> +++ b/src/acpica/source/components/parser/psparse.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/parser/psscope.c b/src/acpica/source/components/parser/psscope.c
> index 10fe186..ce2d243 100644
> --- a/src/acpica/source/components/parser/psscope.c
> +++ b/src/acpica/source/components/parser/psscope.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/parser/pstree.c b/src/acpica/source/components/parser/pstree.c
> index 950dedf..f682885 100644
> --- a/src/acpica/source/components/parser/pstree.c
> +++ b/src/acpica/source/components/parser/pstree.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -157,7 +157,12 @@ AcpiPsGetArg (
>
>     ACPI_FUNCTION_ENTRY ();
>
> -
> +/*
> +    if (Op->Common.AmlOpcode == AML_INT_CONNECTION_OP)
> +    {
> +        return (Op->Common.Value.Arg);
> +    }
> +*/
>     /* Get the info structure for this opcode */
>
>     OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
> diff --git a/src/acpica/source/components/parser/psutils.c b/src/acpica/source/components/parser/psutils.c
> index e676a40..f69f20b 100644
> --- a/src/acpica/source/components/parser/psutils.c
> +++ b/src/acpica/source/components/parser/psutils.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/parser/pswalk.c b/src/acpica/source/components/parser/pswalk.c
> index 0de366c..4e710d6 100644
> --- a/src/acpica/source/components/parser/pswalk.c
> +++ b/src/acpica/source/components/parser/pswalk.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/parser/psxface.c b/src/acpica/source/components/parser/psxface.c
> index 54af318..11c5fc2 100644
> --- a/src/acpica/source/components/parser/psxface.c
> +++ b/src/acpica/source/components/parser/psxface.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/resources/rsaddr.c b/src/acpica/source/components/resources/rsaddr.c
> index 0ee032c..d233e82 100644
> --- a/src/acpica/source/components/resources/rsaddr.c
> +++ b/src/acpica/source/components/resources/rsaddr.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/resources/rscalc.c b/src/acpica/source/components/resources/rscalc.c
> index ceb8cd9..7e23c6e 100644
> --- a/src/acpica/source/components/resources/rscalc.c
> +++ b/src/acpica/source/components/resources/rscalc.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -417,6 +417,26 @@ AcpiRsGetAmlLength (
>             break;
>
>
> +        case ACPI_RESOURCE_TYPE_GPIO:
> +
> +            TotalSize = (ACPI_RS_LENGTH) (TotalSize + (Resource->Data.Gpio.PinTableLength * 2) +
> +                Resource->Data.Gpio.ResourceSource.StringLength +
> +                Resource->Data.Gpio.VendorLength);
> +
> +            break;
> +
> +
> +        case ACPI_RESOURCE_TYPE_SERIAL_BUS:
> +
> +            TotalSize = AcpiGbl_AmlResourceSerialBusSizes [Resource->Data.CommonSerialBus.Type];
> +
> +            TotalSize = (ACPI_RS_LENGTH) (TotalSize +
> +                Resource->Data.I2cSerialBus.ResourceSource.StringLength +
> +                Resource->Data.I2cSerialBus.VendorLength);
> +
> +            break;
> +
> +
>         default:
>             break;
>         }
> @@ -467,12 +487,13 @@ AcpiRsGetListLength (
>     UINT32                  ExtraStructBytes;
>     UINT8                   ResourceIndex;
>     UINT8                   MinimumAmlResourceLength;
> +    AML_RESOURCE            *AmlResource;
>
>
>     ACPI_FUNCTION_TRACE (RsGetListLength);
>
>
> -    *SizeNeeded = 0;
> +    *SizeNeeded = ACPI_RS_SIZE_MIN;         /* Minimum size is one EndTag */
>     EndAml = AmlBuffer + AmlBufferLength;
>
>     /* Walk the list of AML resource descriptors */
> @@ -484,9 +505,15 @@ AcpiRsGetListLength (
>         Status = AcpiUtValidateResource (AmlBuffer, &ResourceIndex);
>         if (ACPI_FAILURE (Status))
>         {
> +            /*
> +             * Exit on failure. Cannot continue because the descriptor length
> +             * may be bogus also.
> +             */
>             return_ACPI_STATUS (Status);
>         }
>
> +        AmlResource = (void *) AmlBuffer;
> +
>         /* Get the resource length and base (minimum) AML size */
>
>         ResourceLength = AcpiUtGetResourceLength (AmlBuffer);
> @@ -532,10 +559,8 @@ AcpiRsGetListLength (
>
>         case ACPI_RESOURCE_NAME_END_TAG:
>             /*
> -             * End Tag:
> -             * This is the normal exit, add size of EndTag
> +             * End Tag: This is the normal exit
>              */
> -            *SizeNeeded += ACPI_RS_SIZE_MIN;
>             return_ACPI_STATUS (AE_OK);
>
>
> @@ -566,6 +591,30 @@ AcpiRsGetListLength (
>                 ResourceLength - ExtraStructBytes, MinimumAmlResourceLength);
>             break;
>
> +        case ACPI_RESOURCE_NAME_GPIO:
> +
> +            /* Vendor data is optional */
> +
> +            if (AmlResource->Gpio.VendorLength)
> +            {
> +                ExtraStructBytes += AmlResource->Gpio.VendorOffset -
> +                    AmlResource->Gpio.PinTableOffset + AmlResource->Gpio.VendorLength;
> +            }
> +            else
> +            {
> +                ExtraStructBytes += AmlResource->LargeHeader.ResourceLength +
> +                    sizeof (AML_RESOURCE_LARGE_HEADER) -
> +                    AmlResource->Gpio.PinTableOffset;
> +            }
> +            break;
> +
> +        case ACPI_RESOURCE_NAME_SERIAL_BUS:
> +
> +            MinimumAmlResourceLength = AcpiGbl_ResourceAmlSerialBusSizes[
> +                AmlResource->CommonSerialBus.Type];
> +            ExtraStructBytes += AmlResource->CommonSerialBus.ResourceLength -
> +                MinimumAmlResourceLength;
> +            break;
>
>         default:
>             break;
> @@ -577,8 +626,16 @@ AcpiRsGetListLength (
>          * Important: Round the size up for the appropriate alignment. This
>          * is a requirement on IA64.
>          */
> -        BufferSize = AcpiGbl_ResourceStructSizes[ResourceIndex] +
> +        if (AcpiUtGetResourceType (AmlBuffer) == ACPI_RESOURCE_NAME_SERIAL_BUS)
> +        {
> +            BufferSize = AcpiGbl_ResourceStructSerialBusSizes[
> +                AmlResource->CommonSerialBus.Type] + ExtraStructBytes;
> +        }
> +        else
> +        {
> +            BufferSize = AcpiGbl_ResourceStructSizes[ResourceIndex] +
>                         ExtraStructBytes;
> +        }
>         BufferSize = (UINT32) ACPI_ROUND_UP_TO_NATIVE_WORD (BufferSize);
>
>         *SizeNeeded += BufferSize;
> diff --git a/src/acpica/source/components/resources/rscreate.c b/src/acpica/source/components/resources/rscreate.c
> index 11db3a4..d75ceb6 100644
> --- a/src/acpica/source/components/resources/rscreate.c
> +++ b/src/acpica/source/components/resources/rscreate.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -126,6 +126,79 @@
>
>  /*******************************************************************************
>  *
> + * FUNCTION:    AcpiBufferToResource
> + *
> + * PARAMETERS:  AmlBuffer           - Pointer to the resource byte stream
> + *              AmlBufferLength     - Length of the AmlBuffer
> + *              ResourcePtr         - Where the converted resource is returned
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Convert a raw AML buffer to a resource list
> + *
> + ******************************************************************************/
> +
> +ACPI_STATUS
> +AcpiBufferToResource (
> +    UINT8                   *AmlBuffer,
> +    UINT16                  AmlBufferLength,
> +    ACPI_RESOURCE           **ResourcePtr)
> +{
> +    ACPI_STATUS             Status;
> +    ACPI_SIZE               ListSizeNeeded;
> +    void                    *Resource;
> +    void                    *CurrentResourcePtr;
> +
> +    /*
> +     * Note: we allow AE_AML_NO_RESOURCE_END_TAG, since an end tag
> +     * is not required here.
> +     */
> +
> +    /* Get the required length for the converted resource */
> +
> +    Status = AcpiRsGetListLength (AmlBuffer, AmlBufferLength,
> +                &ListSizeNeeded);
> +    if (Status == AE_AML_NO_RESOURCE_END_TAG)
> +    {
> +        Status = AE_OK;
> +    }
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return (Status);
> +    }
> +
> +    /* Allocate a buffer for the converted resource */
> +
> +    Resource = ACPI_ALLOCATE_ZEROED (ListSizeNeeded);
> +    CurrentResourcePtr = Resource;
> +    if (!Resource)
> +    {
> +        return (AE_NO_MEMORY);
> +    }
> +
> +    /* Perform the AML-to-Resource conversion */
> +
> +    Status = AcpiUtWalkAmlResources (AmlBuffer, AmlBufferLength,
> +                AcpiRsConvertAmlToResources, &CurrentResourcePtr);
> +    if (Status == AE_AML_NO_RESOURCE_END_TAG)
> +    {
> +        Status = AE_OK;
> +    }
> +    if (ACPI_FAILURE (Status))
> +    {
> +        ACPI_FREE (Resource);
> +    }
> +    else
> +    {
> +        *ResourcePtr = Resource;
> +    }
> +
> +    return (Status);
> +}
> +
> +
> +/*******************************************************************************
> + *
>  * FUNCTION:    AcpiRsCreateResourceList
>  *
>  * PARAMETERS:  AmlBuffer           - Pointer to the resource byte stream
> diff --git a/src/acpica/source/components/resources/rsdump.c b/src/acpica/source/components/resources/rsdump.c
> index d2db725..29682d6 100644
> --- a/src/acpica/source/components/resources/rsdump.c
> +++ b/src/acpica/source/components/resources/rsdump.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -163,6 +163,11 @@ AcpiRsDumpByteList (
>     UINT8                   *Data);
>
>  static void
> +AcpiRsDumpWordList (
> +    UINT16                   Length,
> +    UINT16                   *Data);
> +
> +static void
>  AcpiRsDumpDwordList (
>     UINT8                   Length,
>     UINT32                  *Data);
> @@ -361,6 +366,87 @@ ACPI_RSDUMP_INFO        AcpiRsDumpGenericReg[6] =
>     {ACPI_RSD_UINT64,   ACPI_RSD_OFFSET (GenericReg.Address),               "Address",                  NULL}
>  };
>
> +ACPI_RSDUMP_INFO        AcpiRsDumpGpio[16] =
> +{
> +    {ACPI_RSD_TITLE,    ACPI_RSD_TABLE_SIZE (AcpiRsDumpGpio),               "GPIO",                     NULL},
> +    {ACPI_RSD_UINT8,    ACPI_RSD_OFFSET (Gpio.RevisionId),                  "RevisionId",               NULL},
> +    {ACPI_RSD_UINT8,    ACPI_RSD_OFFSET (Gpio.ConnectionType),              "ConnectionType",           AcpiGbl_CtDecode},
> +    {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Gpio.ProducerConsumer),            "ProducerConsumer",         AcpiGbl_ConsumeDecode},
> +    {ACPI_RSD_UINT8,    ACPI_RSD_OFFSET (Gpio.PinConfig),                   "PinConfig",                AcpiGbl_PpcDecode},
> +    {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Gpio.Sharable),                    "Sharable",                 AcpiGbl_ShrDecode},
> +    {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Gpio.IoRestriction),               "IoRestriction",            AcpiGbl_IorDecode},
> +    {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Gpio.Triggering),                  "Triggering",               AcpiGbl_HeDecode},
> +    {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Gpio.Polarity),                    "Polarity",                 AcpiGbl_LlDecode},
> +    {ACPI_RSD_UINT16,   ACPI_RSD_OFFSET (Gpio.DriveStrength),               "DriveStrength",            NULL},
> +    {ACPI_RSD_UINT16,   ACPI_RSD_OFFSET (Gpio.DebounceTimeout),             "DebounceTimeout",          NULL},
> +    {ACPI_RSD_SOURCE,   ACPI_RSD_OFFSET (Gpio.ResourceSource),              "ResourceSource",           NULL},
> +    {ACPI_RSD_UINT16,   ACPI_RSD_OFFSET (Gpio.PinTableLength),              "PinTableLength",           NULL},
> +    {ACPI_RSD_WORDLIST, ACPI_RSD_OFFSET (Gpio.PinTable),                    "PinTable",                 NULL},
> +    {ACPI_RSD_UINT16,   ACPI_RSD_OFFSET (Gpio.VendorLength),                "VendorLength",             NULL},
> +    {ACPI_RSD_SHORTLISTX,ACPI_RSD_OFFSET (Gpio.VendorData),                 "VendorData",               NULL},
> +};
> +
> +ACPI_RSDUMP_INFO        AcpiRsDumpFixedDma[4] =
> +{
> +    {ACPI_RSD_TITLE,    ACPI_RSD_TABLE_SIZE (AcpiRsDumpFixedDma),           "FixedDma",                 NULL},
> +    {ACPI_RSD_UINT16,   ACPI_RSD_OFFSET (FixedDma.RequestLines),            "RequestLines",             NULL},
> +    {ACPI_RSD_UINT16,   ACPI_RSD_OFFSET (FixedDma.Channels),                "Channels",                 NULL},
> +    {ACPI_RSD_UINT8,    ACPI_RSD_OFFSET (FixedDma.Width),                   "TransferWidth",            AcpiGbl_DtsDecode},
> +};
> +
> +#define ACPI_RS_DUMP_COMMON_SERIAL_BUS \
> +    {ACPI_RSD_UINT8,    ACPI_RSD_OFFSET (CommonSerialBus.RevisionId),       "RevisionId",               NULL}, \
> +    {ACPI_RSD_UINT8,    ACPI_RSD_OFFSET (CommonSerialBus.Type),             "Type",                     AcpiGbl_SbtDecode}, \
> +    {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (CommonSerialBus.ProducerConsumer), "ProducerConsumer",         AcpiGbl_ConsumeDecode}, \
> +    {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (CommonSerialBus.SlaveMode),        "SlaveMode",                AcpiGbl_SmDecode}, \
> +    {ACPI_RSD_UINT8,    ACPI_RSD_OFFSET (CommonSerialBus.TypeRevisionId),   "TypeRevisionId",           NULL}, \
> +    {ACPI_RSD_UINT16,   ACPI_RSD_OFFSET (CommonSerialBus.TypeDataLength),   "TypeDataLength",           NULL}, \
> +    {ACPI_RSD_SOURCE,   ACPI_RSD_OFFSET (CommonSerialBus.ResourceSource),   "ResourceSource",           NULL}, \
> +    {ACPI_RSD_UINT16,   ACPI_RSD_OFFSET (CommonSerialBus.VendorLength),     "VendorLength",             NULL}, \
> +    {ACPI_RSD_SHORTLISTX,ACPI_RSD_OFFSET (CommonSerialBus.VendorData),      "VendorData",               NULL},
> +
> +ACPI_RSDUMP_INFO        AcpiRsDumpCommonSerialBus[10] =
> +{
> +    {ACPI_RSD_TITLE,    ACPI_RSD_TABLE_SIZE (AcpiRsDumpCommonSerialBus),    "Common Serial Bus",        NULL},
> +    ACPI_RS_DUMP_COMMON_SERIAL_BUS
> +};
> +
> +ACPI_RSDUMP_INFO        AcpiRsDumpI2cSerialBus[13] =
> +{
> +    {ACPI_RSD_TITLE,    ACPI_RSD_TABLE_SIZE (AcpiRsDumpI2cSerialBus),       "I2C Serial Bus",           NULL},
> +    ACPI_RS_DUMP_COMMON_SERIAL_BUS
> +    {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (I2cSerialBus.AccessMode),          "AccessMode",               AcpiGbl_AmDecode},
> +    {ACPI_RSD_UINT32,   ACPI_RSD_OFFSET (I2cSerialBus.ConnectionSpeed),     "ConnectionSpeed",          NULL},
> +    {ACPI_RSD_UINT16,   ACPI_RSD_OFFSET (I2cSerialBus.SlaveAddress),        "SlaveAddress",             NULL},
> +};
> +
> +ACPI_RSDUMP_INFO        AcpiRsDumpSpiSerialBus[17] =
> +{
> +    {ACPI_RSD_TITLE,    ACPI_RSD_TABLE_SIZE (AcpiRsDumpSpiSerialBus),       "Spi Serial Bus",           NULL},
> +    ACPI_RS_DUMP_COMMON_SERIAL_BUS
> +    {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (SpiSerialBus.WireMode),            "WireMode",                 AcpiGbl_WmDecode},
> +    {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (SpiSerialBus.DevicePolarity),      "DevicePolarity",           AcpiGbl_DpDecode},
> +    {ACPI_RSD_UINT8,    ACPI_RSD_OFFSET (SpiSerialBus.DataBitLength),       "DataBitLength",            NULL},
> +    {ACPI_RSD_UINT8,    ACPI_RSD_OFFSET (SpiSerialBus.ClockPhase),          "ClockPhase",               AcpiGbl_CphDecode},
> +    {ACPI_RSD_UINT8,    ACPI_RSD_OFFSET (SpiSerialBus.ClockPolarity),       "ClockPolarity",            AcpiGbl_CpoDecode},
> +    {ACPI_RSD_UINT16,   ACPI_RSD_OFFSET (SpiSerialBus.DeviceSelection),     "DeviceSelection",          NULL},
> +    {ACPI_RSD_UINT32,   ACPI_RSD_OFFSET (SpiSerialBus.ConnectionSpeed),     "ConnectionSpeed",          NULL},
> +};
> +
> +ACPI_RSDUMP_INFO        AcpiRsDumpUartSerialBus[19] =
> +{
> +    {ACPI_RSD_TITLE,    ACPI_RSD_TABLE_SIZE (AcpiRsDumpUartSerialBus),       "Uart Serial Bus",         NULL},
> +    ACPI_RS_DUMP_COMMON_SERIAL_BUS
> +    {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (UartSerialBus.FlowControl),         "FlowControl",             AcpiGbl_FcDecode},
> +    {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (UartSerialBus.StopBits),            "StopBits",                AcpiGbl_SbDecode},
> +    {ACPI_RSD_3BITFLAG, ACPI_RSD_OFFSET (UartSerialBus.DataBits),            "DataBits",                AcpiGbl_BpbDecode},
> +    {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (UartSerialBus.Endian),              "Endian",                  AcpiGbl_EdDecode},
> +    {ACPI_RSD_UINT8,    ACPI_RSD_OFFSET (UartSerialBus.Parity),              "Parity",                  AcpiGbl_PtDecode},
> +    {ACPI_RSD_UINT8,    ACPI_RSD_OFFSET (UartSerialBus.LinesEnabled),        "LinesEnabled",            NULL},
> +    {ACPI_RSD_UINT16,   ACPI_RSD_OFFSET (UartSerialBus.RxFifoSize),          "RxFifoSize",              NULL},
> +    {ACPI_RSD_UINT16,   ACPI_RSD_OFFSET (UartSerialBus.TxFifoSize),          "TxFifoSize",              NULL},
> +    {ACPI_RSD_UINT32,   ACPI_RSD_OFFSET (UartSerialBus.DefaultBaudRate),     "ConnectionSpeed",         NULL},
> +};
>
>  /*
>  * Tables used for common address descriptor flag fields
> @@ -463,7 +549,15 @@ AcpiRsDumpDescriptor (
>         /* Data items, 8/16/32/64 bit */
>
>         case ACPI_RSD_UINT8:
> -            AcpiRsOutInteger8 (Name, ACPI_GET8 (Target));
> +            if (Table->Pointer)
> +            {
> +                AcpiRsOutString (Name, ACPI_CAST_PTR (char,
> +                    Table->Pointer [*Target]));
> +            }
> +            else
> +            {
> +                AcpiRsOutInteger8 (Name, ACPI_GET8 (Target));
> +            }
>             break;
>
>         case ACPI_RSD_UINT16:
> @@ -490,6 +584,11 @@ AcpiRsDumpDescriptor (
>                 Table->Pointer [*Target & 0x03]));
>             break;
>
> +        case ACPI_RSD_3BITFLAG:
> +            AcpiRsOutString (Name, ACPI_CAST_PTR (char,
> +                Table->Pointer [*Target & 0x07]));
> +            break;
> +
>         case ACPI_RSD_SHORTLIST:
>             /*
>              * Short byte list (single line output) for DMA and IRQ resources
> @@ -502,6 +601,19 @@ AcpiRsDumpDescriptor (
>             }
>             break;
>
> +        case ACPI_RSD_SHORTLISTX:
> +            /*
> +             * Short byte list (single line output) for GPIO vendor data
> +             * Note: The list length is obtained from the previous table entry
> +             */
> +            if (PreviousTarget)
> +            {
> +                AcpiRsOutTitle (Name);
> +                AcpiRsDumpShortByteList (*PreviousTarget,
> +                    *(ACPI_CAST_INDIRECT_PTR (UINT8, Target)));
> +            }
> +            break;
> +
>         case ACPI_RSD_LONGLIST:
>             /*
>              * Long byte list for Vendor resource data
> @@ -525,6 +637,18 @@ AcpiRsDumpDescriptor (
>             }
>             break;
>
> +        case ACPI_RSD_WORDLIST:
> +            /*
> +             * Word list for GPIO Pin Table
> +             * Note: The list length is obtained from the previous table entry
> +             */
> +            if (PreviousTarget)
> +            {
> +                AcpiRsDumpWordList (*PreviousTarget,
> +                    *(ACPI_CAST_INDIRECT_PTR (UINT16, Target)));
> +            }
> +            break;
> +
>         case ACPI_RSD_ADDRESS:
>             /*
>              * Common flags for all Address resources
> @@ -685,13 +809,20 @@ AcpiRsDumpResourceList (
>
>         /* Dump the resource descriptor */
>
> -        AcpiRsDumpDescriptor (&ResourceList->Data,
> -            AcpiGbl_DumpResourceDispatch[Type]);
> +        if (Type == ACPI_RESOURCE_TYPE_SERIAL_BUS)
> +        {
> +            AcpiRsDumpDescriptor (&ResourceList->Data,
> +                AcpiGbl_DumpSerialBusDispatch[ResourceList->Data.CommonSerialBus.Type]);
> +        }
> +        else
> +        {
> +            AcpiRsDumpDescriptor (&ResourceList->Data,
> +                AcpiGbl_DumpResourceDispatch[Type]);
> +        }
>
>         /* Point to the next resource structure */
>
> -        ResourceList = ACPI_ADD_PTR (ACPI_RESOURCE, ResourceList,
> -                            ResourceList->Length);
> +        ResourceList = ACPI_NEXT_RESOURCE (ResourceList);
>
>         /* Exit when END_TAG descriptor is reached */
>
> @@ -868,5 +999,20 @@ AcpiRsDumpDwordList (
>     }
>  }
>
> +static void
> +AcpiRsDumpWordList (
> +    UINT16                  Length,
> +    UINT16                  *Data)
> +{
> +    UINT16                  i;
> +
> +
> +    for (i = 0; i < Length; i++)
> +    {
> +        AcpiOsPrintf ("%25s%2.2X : %4.4X\n",
> +            "Word", i, Data[i]);
> +    }
> +}
> +
>  #endif
>
> diff --git a/src/acpica/source/components/resources/rsinfo.c b/src/acpica/source/components/resources/rsinfo.c
> index 5fca428..e997eec 100644
> --- a/src/acpica/source/components/resources/rsinfo.c
> +++ b/src/acpica/source/components/resources/rsinfo.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -154,7 +154,10 @@ ACPI_RSCONVERT_INFO         *AcpiGbl_SetResourceDispatch[] =
>     AcpiRsConvertAddress64,         /* 0x0D, ACPI_RESOURCE_TYPE_ADDRESS64 */
>     AcpiRsConvertExtAddress64,      /* 0x0E, ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64 */
>     AcpiRsConvertExtIrq,            /* 0x0F, ACPI_RESOURCE_TYPE_EXTENDED_IRQ */
> -    AcpiRsConvertGenericReg         /* 0x10, ACPI_RESOURCE_TYPE_GENERIC_REGISTER */
> +    AcpiRsConvertGenericReg,        /* 0x10, ACPI_RESOURCE_TYPE_GENERIC_REGISTER */
> +    AcpiRsConvertGpio,              /* 0x11, ACPI_RESOURCE_TYPE_GPIO */
> +    AcpiRsConvertFixedDma,          /* 0x12, ACPI_RESOURCE_TYPE_FIXED_DMA */
> +    NULL,                           /* 0x13, ACPI_RESOURCE_TYPE_SERIAL_BUS - Use subtype table below */
>  };
>
>  /* Dispatch tables for AML-to-resource (Get Resource) conversion functions */
> @@ -173,7 +176,7 @@ ACPI_RSCONVERT_INFO         *AcpiGbl_GetResourceDispatch[] =
>     AcpiRsConvertEndDpf,            /* 0x07, ACPI_RESOURCE_NAME_END_DEPENDENT */
>     AcpiRsConvertIo,                /* 0x08, ACPI_RESOURCE_NAME_IO */
>     AcpiRsConvertFixedIo,           /* 0x09, ACPI_RESOURCE_NAME_FIXED_IO */
> -    NULL,                           /* 0x0A, Reserved */
> +    AcpiRsConvertFixedDma,          /* 0x0A, ACPI_RESOURCE_NAME_FIXED_DMA */
>     NULL,                           /* 0x0B, Reserved */
>     NULL,                           /* 0x0C, Reserved */
>     NULL,                           /* 0x0D, Reserved */
> @@ -193,7 +196,20 @@ ACPI_RSCONVERT_INFO         *AcpiGbl_GetResourceDispatch[] =
>     AcpiRsConvertAddress16,         /* 0x08, ACPI_RESOURCE_NAME_ADDRESS16 */
>     AcpiRsConvertExtIrq,            /* 0x09, ACPI_RESOURCE_NAME_EXTENDED_IRQ */
>     AcpiRsConvertAddress64,         /* 0x0A, ACPI_RESOURCE_NAME_ADDRESS64 */
> -    AcpiRsConvertExtAddress64       /* 0x0B, ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64 */
> +    AcpiRsConvertExtAddress64,      /* 0x0B, ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64 */
> +    AcpiRsConvertGpio,              /* 0x0C, ACPI_RESOURCE_NAME_GPIO */
> +    NULL,                           /* 0x0D, Reserved */
> +    NULL,                           /* 0x0E, ACPI_RESOURCE_NAME_SERIAL_BUS - Use subtype table below */
> +};
> +
> +/* Subtype table for SerialBus -- I2C, SPI, and UART */
> +
> +ACPI_RSCONVERT_INFO         *AcpiGbl_ConvertResourceSerialBusDispatch[] =
> +{
> +    NULL,
> +    AcpiRsConvertI2cSerialBus,
> +    AcpiRsConvertSpiSerialBus,
> +    AcpiRsConvertUartSerialBus,
>  };
>
>
> @@ -220,6 +236,17 @@ ACPI_RSDUMP_INFO            *AcpiGbl_DumpResourceDispatch[] =
>     AcpiRsDumpExtAddress64,         /* ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64 */
>     AcpiRsDumpExtIrq,               /* ACPI_RESOURCE_TYPE_EXTENDED_IRQ */
>     AcpiRsDumpGenericReg,           /* ACPI_RESOURCE_TYPE_GENERIC_REGISTER */
> +    AcpiRsDumpGpio,                 /* ACPI_RESOURCE_TYPE_GPIO */
> +    AcpiRsDumpFixedDma,             /* ACPI_RESOURCE_TYPE_FIXED_DMA */
> +    NULL,                           /* ACPI_RESOURCE_TYPE_SERIAL_BUS */
> +};
> +
> +ACPI_RSDUMP_INFO            *AcpiGbl_DumpSerialBusDispatch[] =
> +{
> +    NULL,
> +    AcpiRsDumpI2cSerialBus,         /* AML_RESOURCE_I2C_BUS_TYPE */
> +    AcpiRsDumpSpiSerialBus,         /* AML_RESOURCE_SPI_BUS_TYPE */
> +    AcpiRsDumpUartSerialBus,        /* AML_RESOURCE_UART_BUS_TYPE */
>  };
>  #endif
>
> @@ -247,7 +274,10 @@ const UINT8                 AcpiGbl_AmlResourceSizes[] =
>     sizeof (AML_RESOURCE_ADDRESS64),        /* ACPI_RESOURCE_TYPE_ADDRESS64 */
>     sizeof (AML_RESOURCE_EXTENDED_ADDRESS64),/*ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64 */
>     sizeof (AML_RESOURCE_EXTENDED_IRQ),     /* ACPI_RESOURCE_TYPE_EXTENDED_IRQ */
> -    sizeof (AML_RESOURCE_GENERIC_REGISTER)  /* ACPI_RESOURCE_TYPE_GENERIC_REGISTER */
> +    sizeof (AML_RESOURCE_GENERIC_REGISTER), /* ACPI_RESOURCE_TYPE_GENERIC_REGISTER */
> +    sizeof (AML_RESOURCE_GPIO),             /* ACPI_RESOURCE_TYPE_GPIO */
> +    sizeof (AML_RESOURCE_FIXED_DMA),        /* ACPI_RESOURCE_TYPE_FIXED_DMA */
> +    sizeof (AML_RESOURCE_COMMON_SERIALBUS), /* ACPI_RESOURCE_TYPE_SERIAL_BUS */
>  };
>
>
> @@ -265,7 +295,7 @@ const UINT8                 AcpiGbl_ResourceStructSizes[] =
>     ACPI_RS_SIZE_MIN,
>     ACPI_RS_SIZE (ACPI_RESOURCE_IO),
>     ACPI_RS_SIZE (ACPI_RESOURCE_FIXED_IO),
> -    0,
> +    ACPI_RS_SIZE (ACPI_RESOURCE_FIXED_DMA),
>     0,
>     0,
>     0,
> @@ -285,6 +315,23 @@ const UINT8                 AcpiGbl_ResourceStructSizes[] =
>     ACPI_RS_SIZE (ACPI_RESOURCE_ADDRESS16),
>     ACPI_RS_SIZE (ACPI_RESOURCE_EXTENDED_IRQ),
>     ACPI_RS_SIZE (ACPI_RESOURCE_ADDRESS64),
> -    ACPI_RS_SIZE (ACPI_RESOURCE_EXTENDED_ADDRESS64)
> +    ACPI_RS_SIZE (ACPI_RESOURCE_EXTENDED_ADDRESS64),
> +    ACPI_RS_SIZE (ACPI_RESOURCE_GPIO),
> +    ACPI_RS_SIZE (ACPI_RESOURCE_COMMON_SERIALBUS)
> +};
> +
> +const UINT8                 AcpiGbl_AmlResourceSerialBusSizes[] =
> +{
> +    0,
> +    sizeof (AML_RESOURCE_I2C_SERIALBUS),
> +    sizeof (AML_RESOURCE_SPI_SERIALBUS),
> +    sizeof (AML_RESOURCE_UART_SERIALBUS),
>  };
>
> +const UINT8                 AcpiGbl_ResourceStructSerialBusSizes[] =
> +{
> +    0,
> +    ACPI_RS_SIZE (ACPI_RESOURCE_I2C_SERIALBUS),
> +    ACPI_RS_SIZE (ACPI_RESOURCE_SPI_SERIALBUS),
> +    ACPI_RS_SIZE (ACPI_RESOURCE_UART_SERIALBUS),
> +};
> diff --git a/src/acpica/source/components/resources/rsio.c b/src/acpica/source/components/resources/rsio.c
> index 26e7988..f83d91e 100644
> --- a/src/acpica/source/components/resources/rsio.c
> +++ b/src/acpica/source/components/resources/rsio.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/resources/rsirq.c b/src/acpica/source/components/resources/rsirq.c
> index d424d12..c06197b 100644
> --- a/src/acpica/source/components/resources/rsirq.c
> +++ b/src/acpica/source/components/resources/rsirq.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -346,3 +346,35 @@ ACPI_RSCONVERT_INFO     AcpiRsConvertDma[6] =
>                         ACPI_RS_OFFSET (Data.Dma.ChannelCount)}
>  };
>
> +
> +/*******************************************************************************
> + *
> + * AcpiRsConvertFixedDma
> + *
> + ******************************************************************************/
> +
> +ACPI_RSCONVERT_INFO     AcpiRsConvertFixedDma[4] =
> +{
> +    {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_FIXED_DMA,
> +                        ACPI_RS_SIZE (ACPI_RESOURCE_FIXED_DMA),
> +                        ACPI_RSC_TABLE_SIZE (AcpiRsConvertFixedDma)},
> +
> +    {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_FIXED_DMA,
> +                        sizeof (AML_RESOURCE_FIXED_DMA),
> +                        0},
> +
> +    /*
> +     * These fields are contiguous in both the source and destination:
> +     * RequestLines
> +     * Channels
> +     */
> +
> +    {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.FixedDma.RequestLines),
> +                        AML_OFFSET (FixedDma.RequestLines),
> +                        2},
> +
> +    {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.FixedDma.Width),
> +                        AML_OFFSET (FixedDma.Width),
> +                        1},
> +
> +};
> diff --git a/src/acpica/source/components/resources/rslist.c b/src/acpica/source/components/resources/rslist.c
> index 58bd395..fa22932 100644
> --- a/src/acpica/source/components/resources/rslist.c
> +++ b/src/acpica/source/components/resources/rslist.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -149,6 +149,8 @@ AcpiRsConvertAmlToResources (
>     ACPI_RESOURCE           **ResourcePtr = ACPI_CAST_INDIRECT_PTR (
>                                 ACPI_RESOURCE, Context);
>     ACPI_RESOURCE           *Resource;
> +    AML_RESOURCE            *AmlResource;
> +    ACPI_RSCONVERT_INFO     *ConversionTable;
>     ACPI_STATUS             Status;
>
>
> @@ -166,11 +168,42 @@ AcpiRsConvertAmlToResources (
>             "Misaligned resource pointer %p", Resource));
>     }
>
> -    /* Convert the AML byte stream resource to a local resource struct */
> +    /* Get the appropriate conversion info table */
> +
> +    AmlResource = ACPI_CAST_PTR (AML_RESOURCE, Aml);
> +    if (AcpiUtGetResourceType (Aml) == ACPI_RESOURCE_NAME_SERIAL_BUS)
> +    {
> +        if (AmlResource->CommonSerialBus.Type > AML_RESOURCE_MAX_SERIALBUSTYPE)
> +        {
> +            ConversionTable = NULL;
> +        }
> +        else
> +        {
> +            /* This is an I2C, SPI, or UART SerialBus descriptor */
> +
> +            ConversionTable =
> +                AcpiGbl_ConvertResourceSerialBusDispatch[
> +                    AmlResource->CommonSerialBus.Type];
> +        }
> +    }
> +    else
> +    {
> +        ConversionTable =
> +            AcpiGbl_GetResourceDispatch[ResourceIndex];
> +    }
> +
> +    if (!ConversionTable)
> +    {
> +        ACPI_ERROR ((AE_INFO,
> +            "Invalid/unsupported resource descriptor: Type 0x%2.2X",
> +            ResourceIndex));
> +        return (AE_AML_INVALID_RESOURCE_TYPE);
> +    }
> +
> +     /* Convert the AML byte stream resource to a local resource struct */
>
>     Status = AcpiRsConvertAmlToResource (
> -                Resource, ACPI_CAST_PTR (AML_RESOURCE, Aml),
> -                AcpiGbl_GetResourceDispatch[ResourceIndex]);
> +        Resource, AmlResource, ConversionTable);
>     if (ACPI_FAILURE (Status))
>     {
>         ACPI_EXCEPTION ((AE_INFO, Status,
> @@ -185,7 +218,7 @@ AcpiRsConvertAmlToResources (
>
>     /* Point to the next structure in the output buffer */
>
> -    *ResourcePtr = ACPI_ADD_PTR (void, Resource, Resource->Length);
> +    *ResourcePtr = ACPI_NEXT_RESOURCE (Resource);
>     return_ACPI_STATUS (AE_OK);
>  }
>
> @@ -217,6 +250,7 @@ AcpiRsConvertResourcesToAml (
>  {
>     UINT8                   *Aml = OutputBuffer;
>     UINT8                   *EndAml = OutputBuffer + AmlSizeNeeded;
> +    ACPI_RSCONVERT_INFO     *ConversionTable;
>     ACPI_STATUS             Status;
>
>
> @@ -239,9 +273,36 @@ AcpiRsConvertResourcesToAml (
>
>         /* Perform the conversion */
>
> +        if (Resource->Type == ACPI_RESOURCE_TYPE_SERIAL_BUS)
> +        {
> +            if (Resource->Data.CommonSerialBus.Type > AML_RESOURCE_MAX_SERIALBUSTYPE)
> +            {
> +                ConversionTable = NULL;
> +            }
> +            else
> +            {
> +                /* This is an I2C, SPI, or UART SerialBus descriptor */
> +
> +                ConversionTable = AcpiGbl_ConvertResourceSerialBusDispatch[
> +                    Resource->Data.CommonSerialBus.Type];
> +            }
> +        }
> +        else
> +        {
> +            ConversionTable = AcpiGbl_SetResourceDispatch[Resource->Type];
> +        }
> +
> +        if (!ConversionTable)
> +        {
> +            ACPI_ERROR ((AE_INFO,
> +                "Invalid/unsupported resource descriptor: Type 0x%2.2X",
> +                Resource->Type));
> +            return (AE_AML_INVALID_RESOURCE_TYPE);
> +        }
> +
>         Status = AcpiRsConvertResourceToAml (Resource,
> -                    ACPI_CAST_PTR (AML_RESOURCE, Aml),
> -                    AcpiGbl_SetResourceDispatch[Resource->Type]);
> +                ACPI_CAST_PTR (AML_RESOURCE, Aml),
> +                ConversionTable);
>         if (ACPI_FAILURE (Status))
>         {
>             ACPI_EXCEPTION ((AE_INFO, Status,
> @@ -276,7 +337,7 @@ AcpiRsConvertResourcesToAml (
>
>         /* Point to the next input resource descriptor */
>
> -        Resource = ACPI_ADD_PTR (ACPI_RESOURCE, Resource, Resource->Length);
> +        Resource = ACPI_NEXT_RESOURCE (Resource);
>     }
>
>     /* Completed buffer, but did not find an EndTag resource descriptor */
> diff --git a/src/acpica/source/components/resources/rsmemory.c b/src/acpica/source/components/resources/rsmemory.c
> index 708e604..d95503c 100644
> --- a/src/acpica/source/components/resources/rsmemory.c
> +++ b/src/acpica/source/components/resources/rsmemory.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/resources/rsmisc.c b/src/acpica/source/components/resources/rsmisc.c
> index 89c59a5..87702cb 100644
> --- a/src/acpica/source/components/resources/rsmisc.c
> +++ b/src/acpica/source/components/resources/rsmisc.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -166,6 +166,11 @@ AcpiRsConvertAmlToResource (
>     ACPI_FUNCTION_TRACE (RsConvertAmlToResource);
>
>
> +    if (!Info)
> +    {
> +        return_ACPI_STATUS (AE_BAD_PARAMETER);
> +    }
> +
>     if (((ACPI_SIZE) Resource) & 0x3)
>     {
>         /* Each internal resource struct is expected to be 32-bit aligned */
> @@ -184,7 +189,6 @@ AcpiRsConvertAmlToResource (
>      * table length (# of table entries)
>      */
>     Count = INIT_TABLE_LENGTH (Info);
> -
>     while (Count)
>     {
>         /*
> @@ -234,6 +238,15 @@ AcpiRsConvertAmlToResource (
>             break;
>
>
> +        case ACPI_RSC_3BITFLAG:
> +            /*
> +             * Mask and shift the flag bits
> +             */
> +            ACPI_SET8 (Destination) = (UINT8)
> +                ((ACPI_GET8 (Source) >> Info->Value) & 0x07);
> +            break;
> +
> +
>         case ACPI_RSC_COUNT:
>
>             ItemCount = ACPI_GET8 (Source);
> @@ -254,6 +267,75 @@ AcpiRsConvertAmlToResource (
>             break;
>
>
> +        case ACPI_RSC_COUNT_GPIO_PIN:
> +
> +            Target = ACPI_ADD_PTR (void, Aml, Info->Value);
> +            ItemCount = ACPI_GET16 (Target) - ACPI_GET16 (Source);
> +
> +            Resource->Length = Resource->Length + ItemCount;
> +            ItemCount = ItemCount / 2;
> +            ACPI_SET16 (Destination) = ItemCount;
> +            break;
> +
> +
> +        case ACPI_RSC_COUNT_GPIO_VEN:
> +
> +            ItemCount = ACPI_GET8 (Source);
> +            ACPI_SET8 (Destination) = (UINT8) ItemCount;
> +
> +            Resource->Length = Resource->Length +
> +                (Info->Value * ItemCount);
> +            break;
> +
> +
> +        case ACPI_RSC_COUNT_GPIO_RES:
> +
> +            /*
> +             * Vendor data is optional (length/offset may both be zero)
> +             * Examine vendor data length field first
> +             */
> +            Target = ACPI_ADD_PTR (void, Aml, (Info->Value + 2));
> +            if (ACPI_GET16 (Target))
> +            {
> +                /* Use vendor offset to get resource source length */
> +
> +                Target = ACPI_ADD_PTR (void, Aml, Info->Value);
> +                ItemCount = ACPI_GET16 (Target) - ACPI_GET16 (Source);
> +            }
> +            else
> +            {
> +                /* No vendor data to worry about */
> +
> +                ItemCount = Aml->LargeHeader.ResourceLength +
> +                    sizeof (AML_RESOURCE_LARGE_HEADER) -
> +                    ACPI_GET16 (Source);
> +            }
> +
> +            Resource->Length = Resource->Length + ItemCount;
> +            ACPI_SET16 (Destination) = ItemCount;
> +            break;
> +
> +
> +        case ACPI_RSC_COUNT_SERIAL_VEN:
> +
> +            ItemCount = ACPI_GET16 (Source) - Info->Value;
> +
> +            Resource->Length = Resource->Length + ItemCount;
> +            ACPI_SET16 (Destination) = ItemCount;
> +            break;
> +
> +
> +        case ACPI_RSC_COUNT_SERIAL_RES:
> +
> +            ItemCount = (AmlResourceLength +
> +                sizeof (AML_RESOURCE_LARGE_HEADER)) -
> +                ACPI_GET16 (Source) - Info->Value;
> +
> +            Resource->Length = Resource->Length + ItemCount;
> +            ACPI_SET16 (Destination) = ItemCount;
> +            break;
> +
> +
>         case ACPI_RSC_LENGTH:
>
>             Resource->Length = Resource->Length + Info->Value;
> @@ -276,6 +358,66 @@ AcpiRsConvertAmlToResource (
>             break;
>
>
> +        case ACPI_RSC_MOVE_GPIO_PIN:
> +
> +            /* Generate and set the PIN data pointer */
> +
> +            Target = (char *) ACPI_ADD_PTR (void, Resource,
> +                  (Resource->Length - ItemCount * 2));
> +            *(UINT16 **) Destination = ACPI_CAST_PTR (UINT16, Target);
> +
> +            /* Copy the PIN data */
> +
> +            Source = ACPI_ADD_PTR (void, Aml, ACPI_GET16 (Source));
> +            AcpiRsMoveData (Target, Source, ItemCount, Info->Opcode);
> +            break;
> +
> +
> +        case ACPI_RSC_MOVE_GPIO_RES:
> +
> +            /* Generate and set the ResourceSource string pointer */
> +
> +            Target = (char *) ACPI_ADD_PTR (void, Resource,
> +                  (Resource->Length - ItemCount));
> +            *(UINT8 **) Destination = ACPI_CAST_PTR (UINT8, Target);
> +
> +            /* Copy the ResourceSource string */
> +
> +            Source = ACPI_ADD_PTR (void, Aml, ACPI_GET16 (Source));
> +            AcpiRsMoveData (Target, Source, ItemCount, Info->Opcode);
> +            break;
> +
> +
> +        case ACPI_RSC_MOVE_SERIAL_VEN:
> +
> +            /* Generate and set the Vendor Data pointer */
> +
> +            Target = (char *) ACPI_ADD_PTR (void, Resource,
> +                  (Resource->Length - ItemCount));
> +            *(UINT8 **) Destination = ACPI_CAST_PTR (UINT8, Target);
> +
> +            /* Copy the Vendor Data */
> +
> +            Source = ACPI_ADD_PTR (void, Aml, Info->Value);
> +            AcpiRsMoveData (Target, Source, ItemCount, Info->Opcode);
> +            break;
> +
> +
> +        case ACPI_RSC_MOVE_SERIAL_RES:
> +
> +            /* Generate and set the ResourceSource string pointer */
> +
> +            Target = (char *) ACPI_ADD_PTR (void, Resource,
> +                  (Resource->Length - ItemCount));
> +            *(UINT8 **) Destination = ACPI_CAST_PTR (UINT8, Target);
> +
> +            /* Copy the ResourceSource string */
> +
> +            Source = ACPI_ADD_PTR (void, Aml, (ACPI_GET16 (Source) + Info->Value));
> +            AcpiRsMoveData (Target, Source, ItemCount, Info->Opcode);
> +            break;
> +
> +
>         case ACPI_RSC_SET8:
>
>             ACPI_MEMSET (Destination, Info->AmlOffset, Info->Value);
> @@ -315,11 +457,12 @@ AcpiRsConvertAmlToResource (
>              * Optional ResourceSource (Index and String). This is the more
>              * complicated case used by the Interrupt() macro
>              */
> -            Target = ACPI_ADD_PTR (char, Resource, Info->AmlOffset + (ItemCount * 4));
> +            Target = ACPI_ADD_PTR (char, Resource,
> +                Info->AmlOffset + (ItemCount * 4));
>
>             Resource->Length +=
> -                AcpiRsGetResourceSource (AmlResourceLength,
> -                    (ACPI_RS_LENGTH) (((ItemCount - 1) * sizeof (UINT32)) + Info->Value),
> +                AcpiRsGetResourceSource (AmlResourceLength, (ACPI_RS_LENGTH)
> +                    (((ItemCount - 1) * sizeof (UINT32)) + Info->Value),
>                     Destination, Aml, Target);
>             break;
>
> @@ -428,6 +571,7 @@ AcpiRsConvertResourceToAml (
>  {
>     void                    *Source = NULL;
>     void                    *Destination;
> +    char                    *Target;
>     ACPI_RSDESC_SIZE        AmlLength = 0;
>     UINT8                   Count;
>     UINT16                  Temp16 = 0;
> @@ -437,6 +581,11 @@ AcpiRsConvertResourceToAml (
>     ACPI_FUNCTION_TRACE (RsConvertResourceToAml);
>
>
> +    if (!Info)
> +    {
> +        return_ACPI_STATUS (AE_BAD_PARAMETER);
> +    }
> +
>     /*
>      * First table entry must be ACPI_RSC_INITxxx and must contain the
>      * table length (# of table entries)
> @@ -492,6 +641,15 @@ AcpiRsConvertResourceToAml (
>             break;
>
>
> +        case ACPI_RSC_3BITFLAG:
> +            /*
> +             * Mask and shift the flag bits
> +             */
> +            ACPI_SET8 (Destination) |= (UINT8)
> +                ((ACPI_GET8 (Source) & 0x07) << Info->Value);
> +            break;
> +
> +
>         case ACPI_RSC_COUNT:
>
>             ItemCount = ACPI_GET8 (Source);
> @@ -509,6 +667,68 @@ AcpiRsConvertResourceToAml (
>             break;
>
>
> +        case ACPI_RSC_COUNT_GPIO_PIN:
> +
> +            ItemCount = ACPI_GET16 (Source);
> +            ACPI_SET16 (Destination) = (UINT16) AmlLength;
> +
> +            AmlLength = (UINT16) (AmlLength + ItemCount * 2);
> +            Target = ACPI_ADD_PTR (void, Aml, Info->Value);
> +            ACPI_SET16 (Target) = (UINT16) AmlLength;
> +            AcpiRsSetResourceLength (AmlLength, Aml);
> +            break;
> +
> +
> +        case ACPI_RSC_COUNT_GPIO_VEN:
> +
> +            ItemCount = ACPI_GET16 (Source);
> +            ACPI_SET16 (Destination) = (UINT16) ItemCount;
> +
> +            AmlLength = (UINT16) (AmlLength + (Info->Value * ItemCount));
> +            AcpiRsSetResourceLength (AmlLength, Aml);
> +            break;
> +
> +
> +        case ACPI_RSC_COUNT_GPIO_RES:
> +
> +            /* Set resource source string length */
> +
> +            ItemCount = ACPI_GET16 (Source);
> +            ACPI_SET16 (Destination) = (UINT16) AmlLength;
> +
> +            /* Compute offset for the Vendor Data */
> +
> +            AmlLength = (UINT16) (AmlLength + ItemCount);
> +            Target = ACPI_ADD_PTR (void, Aml, Info->Value);
> +
> +            /* Set vendor offset only if there is vendor data */
> +
> +            if (Resource->Data.Gpio.VendorLength)
> +            {
> +                ACPI_SET16 (Target) = (UINT16) AmlLength;
> +            }
> +
> +            AcpiRsSetResourceLength (AmlLength, Aml);
> +            break;
> +
> +
> +        case ACPI_RSC_COUNT_SERIAL_VEN:
> +
> +            ItemCount = ACPI_GET16 (Source);
> +            ACPI_SET16 (Destination) = ItemCount + Info->Value;
> +            AmlLength = (UINT16) (AmlLength + ItemCount);
> +            AcpiRsSetResourceLength (AmlLength, Aml);
> +            break;
> +
> +
> +        case ACPI_RSC_COUNT_SERIAL_RES:
> +
> +            ItemCount = ACPI_GET16 (Source);
> +            AmlLength = (UINT16) (AmlLength + ItemCount);
> +            AcpiRsSetResourceLength (AmlLength, Aml);
> +            break;
> +
> +
>         case ACPI_RSC_LENGTH:
>
>             AcpiRsSetResourceLength (Info->Value, Aml);
> @@ -528,6 +748,44 @@ AcpiRsConvertResourceToAml (
>             break;
>
>
> +        case ACPI_RSC_MOVE_GPIO_PIN:
> +
> +            Destination = (char *) ACPI_ADD_PTR (void, Aml,
> +                  ACPI_GET16 (Destination));
> +            Source = * (UINT16 **) Source;
> +            AcpiRsMoveData (Destination, Source, ItemCount, Info->Opcode);
> +            break;
> +
> +
> +        case ACPI_RSC_MOVE_GPIO_RES:
> +
> +            /* Used for both ResourceSource string and VendorData */
> +
> +            Destination = (char *) ACPI_ADD_PTR (void, Aml,
> +                  ACPI_GET16 (Destination));
> +            Source = * (UINT8 **) Source;
> +            AcpiRsMoveData (Destination, Source, ItemCount, Info->Opcode);
> +            break;
> +
> +
> +        case ACPI_RSC_MOVE_SERIAL_VEN:
> +
> +            Destination = (char *) ACPI_ADD_PTR (void, Aml,
> +                  (AmlLength - ItemCount));
> +            Source = * (UINT8 **) Source;
> +            AcpiRsMoveData (Destination, Source, ItemCount, Info->Opcode);
> +            break;
> +
> +
> +        case ACPI_RSC_MOVE_SERIAL_RES:
> +
> +            Destination = (char *) ACPI_ADD_PTR (void, Aml,
> +                  (AmlLength - ItemCount));
> +            Source = * (UINT8 **) Source;
> +            AcpiRsMoveData (Destination, Source, ItemCount, Info->Opcode);
> +            break;
> +
> +
>         case ACPI_RSC_ADDRESS:
>
>             /* Set the Resource Type, General Flags, and Type-Specific Flags */
> diff --git a/src/acpica/source/components/resources/rsutils.c b/src/acpica/source/components/resources/rsutils.c
> index f3c73f8..ce3143c 100644
> --- a/src/acpica/source/components/resources/rsutils.c
> +++ b/src/acpica/source/components/resources/rsutils.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -245,6 +245,9 @@ AcpiRsMoveData (
>          * since there are no alignment or endian issues
>          */
>         case ACPI_RSC_MOVE8:
> +        case ACPI_RSC_MOVE_GPIO_RES:
> +        case ACPI_RSC_MOVE_SERIAL_VEN:
> +        case ACPI_RSC_MOVE_SERIAL_RES:
>             ACPI_MEMCPY (Destination, Source, ItemCount);
>             return;
>
> @@ -254,6 +257,7 @@ AcpiRsMoveData (
>          * misaligned memory transfers
>          */
>         case ACPI_RSC_MOVE16:
> +        case ACPI_RSC_MOVE_GPIO_PIN:
>             ACPI_MOVE_16_TO_16 (&ACPI_CAST_PTR (UINT16, Destination)[i],
>                                 &ACPI_CAST_PTR (UINT16, Source)[i]);
>             break;
> @@ -725,6 +729,61 @@ AcpiRsGetPrsMethodData (
>
>  /*******************************************************************************
>  *
> + * FUNCTION:    AcpiRsGetAeiMethodData
> + *
> + * PARAMETERS:  Node            - Device node
> + *              RetBuffer       - Pointer to a buffer structure for the
> + *                                results
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: This function is called to get the _AEI value of an object
> + *              contained in an object specified by the handle passed in
> + *
> + *              If the function fails an appropriate status will be returned
> + *              and the contents of the callers buffer is undefined.
> + *
> + ******************************************************************************/
> +
> +ACPI_STATUS
> +AcpiRsGetAeiMethodData (
> +    ACPI_NAMESPACE_NODE     *Node,
> +    ACPI_BUFFER             *RetBuffer)
> +{
> +    ACPI_OPERAND_OBJECT     *ObjDesc;
> +    ACPI_STATUS             Status;
> +
> +
> +    ACPI_FUNCTION_TRACE (RsGetAeiMethodData);
> +
> +
> +    /* Parameters guaranteed valid by caller */
> +
> +    /* Execute the method, no parameters */
> +
> +    Status = AcpiUtEvaluateObject (Node, METHOD_NAME__AEI,
> +                ACPI_BTYPE_BUFFER, &ObjDesc);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return_ACPI_STATUS (Status);
> +    }
> +
> +    /*
> +     * Make the call to create a resource linked list from the
> +     * byte stream buffer that comes back from the _CRS method
> +     * execution.
> +     */
> +    Status = AcpiRsCreateResourceList (ObjDesc, RetBuffer);
> +
> +    /* On exit, we must delete the object returned by evaluateObject */
> +
> +    AcpiUtRemoveReference (ObjDesc);
> +    return_ACPI_STATUS (Status);
> +}
> +
> +
> +/*******************************************************************************
> + *
>  * FUNCTION:    AcpiRsGetMethodData
>  *
>  * PARAMETERS:  Handle          - Handle to the containing object
> diff --git a/src/acpica/source/components/resources/rsxface.c b/src/acpica/source/components/resources/rsxface.c
> index 6646ef1..db3b5a9 100644
> --- a/src/acpica/source/components/resources/rsxface.c
> +++ b/src/acpica/source/components/resources/rsxface.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -423,6 +423,52 @@ AcpiSetCurrentResources (
>  ACPI_EXPORT_SYMBOL (AcpiSetCurrentResources)
>
>
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiGetEventResources
> + *
> + * PARAMETERS:  DeviceHandle    - Handle to the device object for the
> + *                                device we are getting resources
> + *              InBuffer        - Pointer to a buffer containing the
> + *                                resources to be set for the device
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: This function is called to get the event resources for a
> + *              specific device. The caller must first acquire a handle for
> + *              the desired device. The resource data is passed to the routine
> + *              the buffer pointed to by the InBuffer variable. Uses the
> + *              _AEI method.
> + *
> + ******************************************************************************/
> +
> +ACPI_STATUS
> +AcpiGetEventResources (
> +    ACPI_HANDLE             DeviceHandle,
> +    ACPI_BUFFER             *RetBuffer)
> +{
> +    ACPI_STATUS             Status;
> +    ACPI_NAMESPACE_NODE     *Node;
> +
> +
> +    ACPI_FUNCTION_TRACE (AcpiGetEventResources);
> +
> +
> +    /* Validate parameters then dispatch to internal routine */
> +
> +    Status = AcpiRsValidateParameters (DeviceHandle, RetBuffer, &Node);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return_ACPI_STATUS (Status);
> +    }
> +
> +    Status = AcpiRsGetAeiMethodData (Node, RetBuffer);
> +    return_ACPI_STATUS (Status);
> +}
> +
> +ACPI_EXPORT_SYMBOL (AcpiGetEventResources)
> +
> +
>  /******************************************************************************
>  *
>  * FUNCTION:    AcpiResourceToAddress64
> @@ -616,8 +662,9 @@ AcpiRsMatchVendorResource (
>  *
>  * PARAMETERS:  DeviceHandle    - Handle to the device object for the
>  *                                device we are querying
> - *              Name            - Method name of the resources we want
> - *                                (METHOD_NAME__CRS or METHOD_NAME__PRS)
> + *              Name            - Method name of the resources we want.
> + *                                (METHOD_NAME__CRS, METHOD_NAME__PRS, or
> + *                                METHOD_NAME__AEI)
>  *              UserFunction    - Called for each resource
>  *              Context         - Passed to UserFunction
>  *
> @@ -649,12 +696,13 @@ AcpiWalkResources (
>
>     if (!DeviceHandle || !UserFunction || !Name ||
>         (!ACPI_COMPARE_NAME (Name, METHOD_NAME__CRS) &&
> -         !ACPI_COMPARE_NAME (Name, METHOD_NAME__PRS)))
> +         !ACPI_COMPARE_NAME (Name, METHOD_NAME__PRS) &&
> +         !ACPI_COMPARE_NAME (Name, METHOD_NAME__AEI)))
>     {
>         return_ACPI_STATUS (AE_BAD_PARAMETER);
>     }
>
> -    /* Get the _CRS or _PRS resource list */
> +    /* Get the _CRS/_PRS/_AEI resource list */
>
>     Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
>     Status = AcpiRsGetMethodData (DeviceHandle, Name, &Buffer);
> diff --git a/src/acpica/source/components/tables/tbfadt.c b/src/acpica/source/components/tables/tbfadt.c
> index fae6428..fa43dbb 100644
> --- a/src/acpica/source/components/tables/tbfadt.c
> +++ b/src/acpica/source/components/tables/tbfadt.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -149,14 +149,15 @@ AcpiTbSetupFadtRegisters (
>  typedef struct acpi_fadt_info
>  {
>     char                    *Name;
> -    UINT8                   Address64;
> -    UINT8                   Address32;
> -    UINT8                   Length;
> +    UINT16                  Address64;
> +    UINT16                  Address32;
> +    UINT16                  Length;
>     UINT8                   DefaultLength;
>     UINT8                   Type;
>
>  } ACPI_FADT_INFO;
>
> +#define ACPI_FADT_OPTIONAL          0
>  #define ACPI_FADT_REQUIRED          1
>  #define ACPI_FADT_SEPARATE_LENGTH   2
>
> @@ -174,7 +175,7 @@ static ACPI_FADT_INFO     FadtInfoTable[] =
>         ACPI_FADT_OFFSET (Pm1bEventBlock),
>         ACPI_FADT_OFFSET (Pm1EventLength),
>         ACPI_PM1_REGISTER_WIDTH * 2,        /* Enable + Status register */
> -        0},
> +        ACPI_FADT_OPTIONAL},
>
>     {"Pm1aControlBlock",
>         ACPI_FADT_OFFSET (XPm1aControlBlock),
> @@ -188,7 +189,7 @@ static ACPI_FADT_INFO     FadtInfoTable[] =
>         ACPI_FADT_OFFSET (Pm1bControlBlock),
>         ACPI_FADT_OFFSET (Pm1ControlLength),
>         ACPI_PM1_REGISTER_WIDTH,
> -        0},
> +        ACPI_FADT_OPTIONAL},
>
>     {"Pm2ControlBlock",
>         ACPI_FADT_OFFSET (XPm2ControlBlock),
> @@ -228,7 +229,7 @@ static ACPI_FADT_INFO     FadtInfoTable[] =
>  typedef struct acpi_fadt_pm_info
>  {
>     ACPI_GENERIC_ADDRESS    *Target;
> -    UINT8                   Source;
> +    UINT16                  Source;
>     UINT8                   RegisterNum;
>
>  } ACPI_FADT_PM_INFO;
> @@ -352,8 +353,13 @@ AcpiTbParseFadt (
>     AcpiTbInstallTable ((ACPI_PHYSICAL_ADDRESS) AcpiGbl_FADT.XDsdt,
>         ACPI_SIG_DSDT, ACPI_TABLE_INDEX_DSDT);
>
> -    AcpiTbInstallTable ((ACPI_PHYSICAL_ADDRESS) AcpiGbl_FADT.XFacs,
> -        ACPI_SIG_FACS, ACPI_TABLE_INDEX_FACS);
> +    /* If Hardware Reduced flag is set, there is no FACS */
> +
> +    if (!AcpiGbl_ReducedHardware)
> +    {
> +        AcpiTbInstallTable ((ACPI_PHYSICAL_ADDRESS) AcpiGbl_FADT.XFacs,
> +            ACPI_SIG_FACS, ACPI_TABLE_INDEX_FACS);
> +    }
>  }
>
>
> @@ -381,13 +387,13 @@ AcpiTbCreateLocalFadt (
>
>     /*
>      * Check if the FADT is larger than the largest table that we expect
> -     * (the ACPI 2.0/3.0 version). If so, truncate the table, and issue
> +     * (the ACPI 5.0 version). If so, truncate the table, and issue
>      * a warning.
>      */
>     if (Length > sizeof (ACPI_TABLE_FADT))
>     {
>         ACPI_WARNING ((AE_INFO,
> -            "FADT (revision %u) is longer than ACPI 2.0 version, "
> +            "FADT (revision %u) is longer than ACPI 5.0 version, "
>             "truncating length %u to %u",
>             Table->Revision, Length, (UINT32) sizeof (ACPI_TABLE_FADT)));
>     }
> @@ -401,6 +407,14 @@ AcpiTbCreateLocalFadt (
>     ACPI_MEMCPY (&AcpiGbl_FADT, Table,
>         ACPI_MIN (Length, sizeof (ACPI_TABLE_FADT)));
>
> +    /* Take a copy of the Hardware Reduced flag */
> +
> +    AcpiGbl_ReducedHardware = FALSE;
> +    if (AcpiGbl_FADT.Flags & ACPI_FADT_HW_REDUCED)
> +    {
> +        AcpiGbl_ReducedHardware = TRUE;
> +    }
> +
>     /* Convert the local copy of the FADT to the common internal format */
>
>     AcpiTbConvertFadt ();
> @@ -458,10 +472,6 @@ AcpiTbConvertFadt (
>     UINT32                  i;
>
>
> -    /* Update the local FADT table header length */
> -
> -    AcpiGbl_FADT.Header.Length = sizeof (ACPI_TABLE_FADT);
> -
>     /*
>      * Expand the 32-bit FACS and DSDT addresses to 64-bit as necessary.
>      * Later code will always use the X 64-bit field.
> @@ -495,6 +505,13 @@ AcpiTbConvertFadt (
>     }
>
>     /*
> +     * Now we can update the local FADT length to the length of the
> +     * current FADT version as defined by the ACPI specification.
> +     * Thus, we will have a common FADT internally.
> +     */
> +    AcpiGbl_FADT.Header.Length = sizeof (ACPI_TABLE_FADT);
> +
> +    /*
>      * Expand the ACPI 1.0 32-bit addresses to the ACPI 2.0 64-bit "X"
>      * generic address structures as necessary. Later code will always use
>      * the 64-bit address structures.
> @@ -602,6 +619,13 @@ AcpiTbValidateFadt (
>         AcpiGbl_FADT.XDsdt = (UINT64) AcpiGbl_FADT.Dsdt;
>     }
>
> +    /* If Hardware Reduced flag is set, we are all done */
> +
> +    if (AcpiGbl_ReducedHardware)
> +    {
> +        return;
> +    }
> +
>     /* Examine all of the 64-bit extended address fields (X fields) */
>
>     for (i = 0; i < ACPI_FADT_INFO_ENTRIES; i++)
> diff --git a/src/acpica/source/components/tables/tbfind.c b/src/acpica/source/components/tables/tbfind.c
> index 48ef817..65c52b7 100644
> --- a/src/acpica/source/components/tables/tbfind.c
> +++ b/src/acpica/source/components/tables/tbfind.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/tables/tbinstal.c b/src/acpica/source/components/tables/tbinstal.c
> index da3ccf4..00fd2a2 100644
> --- a/src/acpica/source/components/tables/tbinstal.c
> +++ b/src/acpica/source/components/tables/tbinstal.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -200,7 +200,6 @@ AcpiTbAddTable (
>  {
>     UINT32                  i;
>     ACPI_STATUS             Status = AE_OK;
> -    ACPI_TABLE_HEADER       *OverrideTable = NULL;
>
>
>     ACPI_FUNCTION_TRACE (TbAddTable);
> @@ -314,26 +313,10 @@ AcpiTbAddTable (
>     /*
>      * ACPI Table Override:
>      * Allow the host to override dynamically loaded tables.
> +     * NOTE: the table is fully mapped at this point, and the mapping will
> +     * be deleted by TbTableOverride if the table is actually overridden.
>      */
> -    Status = AcpiOsTableOverride (TableDesc->Pointer, &OverrideTable);
> -    if (ACPI_SUCCESS (Status) && OverrideTable)
> -    {
> -        ACPI_INFO ((AE_INFO,
> -            "%4.4s @ 0x%p Table override, replaced with:",
> -            TableDesc->Pointer->Signature,
> -            ACPI_CAST_PTR (void, TableDesc->Address)));
> -
> -        /* We can delete the table that was passed as a parameter */
> -
> -        AcpiTbDeleteTable (TableDesc);
> -
> -        /* Setup descriptor for the new table */
> -
> -        TableDesc->Address = ACPI_PTR_TO_PHYSADDR (OverrideTable);
> -        TableDesc->Pointer = OverrideTable;
> -        TableDesc->Length = OverrideTable->Length;
> -        TableDesc->Flags = ACPI_TABLE_ORIGIN_OVERRIDE;
> -    }
> +    (void) AcpiTbTableOverride (TableDesc->Pointer, TableDesc);
>
>     /* Add the table to the global root table list */
>
> @@ -355,6 +338,98 @@ Release:
>
>  /*******************************************************************************
>  *
> + * FUNCTION:    AcpiTbTableOverride
> + *
> + * PARAMETERS:  TableHeader         - Header for the original table
> + *              TableDesc           - Table descriptor initialized for the
> + *                                    original table. May or may not be mapped.
> + *
> + * RETURN:      Pointer to the entire new table. NULL if table not overridden.
> + *              If overridden, installs the new table within the input table
> + *              descriptor.
> + *
> + * DESCRIPTION: Attempt table override by calling the OSL override functions.
> + *              Note: If the table is overridden, then the entire new table
> + *              is mapped and returned by this function.
> + *
> + ******************************************************************************/
> +
> +ACPI_TABLE_HEADER *
> +AcpiTbTableOverride (
> +    ACPI_TABLE_HEADER       *TableHeader,
> +    ACPI_TABLE_DESC         *TableDesc)
> +{
> +    ACPI_STATUS             Status;
> +    ACPI_TABLE_HEADER       *NewTable = NULL;
> +    ACPI_PHYSICAL_ADDRESS   NewAddress = 0;
> +    UINT32                  NewTableLength = 0;
> +    UINT8                   NewFlags;
> +    char                    *OverrideType;
> +
> +
> +    /* (1) Attempt logical override (returns a logical address) */
> +
> +    Status = AcpiOsTableOverride (TableHeader, &NewTable);
> +    if (ACPI_SUCCESS (Status) && NewTable)
> +    {
> +        NewAddress = ACPI_PTR_TO_PHYSADDR (NewTable);
> +        NewTableLength = NewTable->Length;
> +        NewFlags = ACPI_TABLE_ORIGIN_OVERRIDE;
> +        OverrideType = "Logical";
> +        goto FinishOverride;
> +    }
> +
> +    /* (2) Attempt physical override (returns a physical address) */
> +
> +    Status = AcpiOsPhysicalTableOverride (TableHeader,
> +        &NewAddress, &NewTableLength);
> +    if (ACPI_SUCCESS (Status) && NewAddress && NewTableLength)
> +    {
> +        /* Map the entire new table */
> +
> +        NewTable = AcpiOsMapMemory (NewAddress, NewTableLength);
> +        if (!NewTable)
> +        {
> +            ACPI_EXCEPTION ((AE_INFO, AE_NO_MEMORY,
> +                "%4.4s %p Attempted physical table override failed",
> +                TableHeader->Signature,
> +                ACPI_CAST_PTR (void, TableDesc->Address)));
> +            return (NULL);
> +        }
> +
> +        OverrideType = "Physical";
> +        NewFlags = ACPI_TABLE_ORIGIN_MAPPED;
> +        goto FinishOverride;
> +    }
> +
> +    return (NULL); /* There was no override */
> +
> +
> +FinishOverride:
> +
> +    ACPI_INFO ((AE_INFO,
> +        "%4.4s %p %s table override, new table: %p",
> +        TableHeader->Signature,
> +        ACPI_CAST_PTR (void, TableDesc->Address),
> +        OverrideType, NewTable));
> +
> +    /* We can now unmap/delete the original table (if fully mapped) */
> +
> +    AcpiTbDeleteTable (TableDesc);
> +
> +    /* Setup descriptor for the new table */
> +
> +    TableDesc->Address = NewAddress;
> +    TableDesc->Pointer = NewTable;
> +    TableDesc->Length = NewTableLength;
> +    TableDesc->Flags = NewFlags;
> +
> +    return (NewTable);
> +}
> +
> +
> +/*******************************************************************************
> + *
>  * FUNCTION:    AcpiTbResizeRootTableList
>  *
>  * PARAMETERS:  None
> @@ -507,8 +582,10 @@ AcpiTbDeleteTable (
>         ACPI_FREE (TableDesc->Pointer);
>         break;
>
> +    /* Not mapped or allocated, there is nothing we can do */
> +
>     default:
> -        break;
> +        return;
>     }
>
>     TableDesc->Pointer = NULL;
> diff --git a/src/acpica/source/components/tables/tbutils.c b/src/acpica/source/components/tables/tbutils.c
> index 3cb3cc2..4ad777c 100644
> --- a/src/acpica/source/components/tables/tbutils.c
> +++ b/src/acpica/source/components/tables/tbutils.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -122,6 +122,7 @@
>  #define _COMPONENT          ACPI_TABLES
>         ACPI_MODULE_NAME    ("tbutils")
>
> +
>  /* Local prototypes */
>
>  static void
> @@ -140,6 +141,7 @@ AcpiTbGetRootTableEntry (
>     UINT32                  TableEntrySize);
>
>
> +#if (!ACPI_REDUCED_HARDWARE)
>  /*******************************************************************************
>  *
>  * FUNCTION:    AcpiTbInitializeFacs
> @@ -160,10 +162,19 @@ AcpiTbInitializeFacs (
>     ACPI_STATUS             Status;
>
>
> +    /* If Hardware Reduced flag is set, there is no FACS */
> +
> +    if (AcpiGbl_ReducedHardware)
> +    {
> +        AcpiGbl_FACS = NULL;
> +        return (AE_OK);
> +    }
> +
>     Status = AcpiGetTableByIndex (ACPI_TABLE_INDEX_FACS,
>                 ACPI_CAST_INDIRECT_PTR (ACPI_TABLE_HEADER, &AcpiGbl_FACS));
>     return (Status);
>  }
> +#endif /* !ACPI_REDUCED_HARDWARE */
>
>
>  /*******************************************************************************
> @@ -487,7 +498,7 @@ AcpiTbCopyDsdt (
>  * RETURN:      None
>  *
>  * DESCRIPTION: Install an ACPI table into the global data structure. The
> - *              table override mechanism is implemented here to allow the host
> + *              table override mechanism is called to allow the host
>  *              OS to replace any table before it is installed in the root
>  *              table array.
>  *
> @@ -499,11 +510,9 @@ AcpiTbInstallTable (
>     char                    *Signature,
>     UINT32                  TableIndex)
>  {
> -    UINT8                   Flags;
> -    ACPI_STATUS             Status;
> -    ACPI_TABLE_HEADER       *TableToInstall;
> -    ACPI_TABLE_HEADER       *MappedTable;
> -    ACPI_TABLE_HEADER       *OverrideTable = NULL;
> +    ACPI_TABLE_HEADER       *Table;
> +    ACPI_TABLE_HEADER       *FinalTable;
> +    ACPI_TABLE_DESC         *TableDesc;
>
>
>     if (!Address)
> @@ -515,70 +524,84 @@ AcpiTbInstallTable (
>
>     /* Map just the table header */
>
> -    MappedTable = AcpiOsMapMemory (Address, sizeof (ACPI_TABLE_HEADER));
> -    if (!MappedTable)
> +    Table = AcpiOsMapMemory (Address, sizeof (ACPI_TABLE_HEADER));
> +    if (!Table)
>     {
> +        ACPI_ERROR ((AE_INFO, "Could not map memory for table [%s] at %p",
> +            Signature, ACPI_CAST_PTR (void, Address)));
>         return;
>     }
>
>     /* If a particular signature is expected (DSDT/FACS), it must match */
>
>     if (Signature &&
> -        !ACPI_COMPARE_NAME (MappedTable->Signature, Signature))
> +        !ACPI_COMPARE_NAME (Table->Signature, Signature))
>     {
>         ACPI_ERROR ((AE_INFO,
>             "Invalid signature 0x%X for ACPI table, expected [%s]",
> -            *ACPI_CAST_PTR (UINT32, MappedTable->Signature), Signature));
> +            *ACPI_CAST_PTR (UINT32, Table->Signature), Signature));
>         goto UnmapAndExit;
>     }
>
>     /*
> +     * Initialize the table entry. Set the pointer to NULL, since the
> +     * table is not fully mapped at this time.
> +     */
> +    TableDesc = &AcpiGbl_RootTableList.Tables[TableIndex];
> +
> +    TableDesc->Address = Address;
> +    TableDesc->Pointer = NULL;
> +    TableDesc->Length = Table->Length;
> +    TableDesc->Flags = ACPI_TABLE_ORIGIN_MAPPED;
> +    ACPI_MOVE_32_TO_32 (TableDesc->Signature.Ascii, Table->Signature);
> +
> +    /*
>      * ACPI Table Override:
>      *
>      * Before we install the table, let the host OS override it with a new
>      * one if desired. Any table within the RSDT/XSDT can be replaced,
>      * including the DSDT which is pointed to by the FADT.
> +     *
> +     * NOTE: If the table is overridden, then FinalTable will contain a
> +     * mapped pointer to the full new table. If the table is not overridden,
> +     * or if there has been a physical override, then the table will be
> +     * fully mapped later (in verify table). In any case, we must
> +     * unmap the header that was mapped above.
>      */
> -    Status = AcpiOsTableOverride (MappedTable, &OverrideTable);
> -    if (ACPI_SUCCESS (Status) && OverrideTable)
> +    FinalTable = AcpiTbTableOverride (Table, TableDesc);
> +    if (!FinalTable)
>     {
> -        ACPI_INFO ((AE_INFO,
> -            "%4.4s @ 0x%p Table override, replaced with:",
> -            MappedTable->Signature, ACPI_CAST_PTR (void, Address)));
> -
> -        AcpiGbl_RootTableList.Tables[TableIndex].Pointer = OverrideTable;
> -        Address = ACPI_PTR_TO_PHYSADDR (OverrideTable);
> -
> -        TableToInstall = OverrideTable;
> -        Flags = ACPI_TABLE_ORIGIN_OVERRIDE;
> -    }
> -    else
> -    {
> -        TableToInstall = MappedTable;
> -        Flags = ACPI_TABLE_ORIGIN_MAPPED;
> +        FinalTable = Table; /* There was no override */
>     }
>
> -    /* Initialize the table entry */
> -
> -    AcpiGbl_RootTableList.Tables[TableIndex].Address = Address;
> -    AcpiGbl_RootTableList.Tables[TableIndex].Length = TableToInstall->Length;
> -    AcpiGbl_RootTableList.Tables[TableIndex].Flags = Flags;
> -
> -    ACPI_MOVE_32_TO_32 (
> -        &(AcpiGbl_RootTableList.Tables[TableIndex].Signature),
> -        TableToInstall->Signature);
> +    AcpiTbPrintTableHeader (TableDesc->Address, FinalTable);
>
> -    AcpiTbPrintTableHeader (Address, TableToInstall);
> +    /* Set the global integer width (based upon revision of the DSDT) */
>
>     if (TableIndex == ACPI_TABLE_INDEX_DSDT)
>     {
> -        /* Global integer width is based upon revision of the DSDT */
> +        AcpiUtSetIntegerWidth (FinalTable->Revision);
> +    }
>
> -        AcpiUtSetIntegerWidth (TableToInstall->Revision);
> +    /*
> +     * If we have a physical override during this early loading of the ACPI
> +     * tables, unmap the table for now. It will be mapped again later when
> +     * it is actually used. This supports very early loading of ACPI tables,
> +     * before virtual memory is fully initialized and running within the
> +     * host OS. Note: A logical override has the ACPI_TABLE_ORIGIN_OVERRIDE
> +     * flag set and will not be deleted below.
> +     */
> +    if (FinalTable != Table)
> +    {
> +        AcpiTbDeleteTable (TableDesc);
>     }
>
> +
>  UnmapAndExit:
> -    AcpiOsUnmapMemory (MappedTable, sizeof (ACPI_TABLE_HEADER));
> +
> +    /* Always unmap the table header that we mapped above */
> +
> +    AcpiOsUnmapMemory (Table, sizeof (ACPI_TABLE_HEADER));
>  }
>
>
> diff --git a/src/acpica/source/components/tables/tbxface.c b/src/acpica/source/components/tables/tbxface.c
> index 507ea0b..860dc2e 100644
> --- a/src/acpica/source/components/tables/tbxface.c
> +++ b/src/acpica/source/components/tables/tbxface.c
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/tables/tbxfroot.c b/src/acpica/source/components/tables/tbxfroot.c
> index 7319a18..e85c1fd 100644
> --- a/src/acpica/source/components/tables/tbxfroot.c
> +++ b/src/acpica/source/components/tables/tbxfroot.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/utilities/utalloc.c b/src/acpica/source/components/utilities/utalloc.c
> index 7a276f8..6633d87 100644
> --- a/src/acpica/source/components/utilities/utalloc.c
> +++ b/src/acpica/source/components/utilities/utalloc.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/utilities/utcache.c b/src/acpica/source/components/utilities/utcache.c
> index ba13101..fa1168d 100644
> --- a/src/acpica/source/components/utilities/utcache.c
> +++ b/src/acpica/source/components/utilities/utcache.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/utilities/utcopy.c b/src/acpica/source/components/utilities/utcopy.c
> index 64484ad..0265a0b 100644
> --- a/src/acpica/source/components/utilities/utcopy.c
> +++ b/src/acpica/source/components/utilities/utcopy.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/utilities/utdebug.c b/src/acpica/source/components/utilities/utdebug.c
> index b21f07f..03e331b 100644
> --- a/src/acpica/source/components/utilities/utdebug.c
> +++ b/src/acpica/source/components/utilities/utdebug.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/utilities/utdecode.c b/src/acpica/source/components/utilities/utdecode.c
> index 94b53d8..b36aa45 100644
> --- a/src/acpica/source/components/utilities/utdecode.c
> +++ b/src/acpica/source/components/utilities/utdecode.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -259,7 +259,9 @@ const char        *AcpiGbl_RegionTypes[ACPI_NUM_PREDEFINED_REGIONS] =
>     "SMBus",
>     "SystemCMOS",
>     "PCIBARTarget",
> -    "IPMI"
> +    "IPMI",
> +    "GeneralPurposeIo",
> +    "GenericSerialBus"
>  };
>
>
> @@ -637,20 +639,21 @@ AcpiUtGetMutexName (
>
>  /* Names for Notify() values, used for debug output */
>
> -static const char           *AcpiGbl_NotifyValueNames[] =
> +static const char           *AcpiGbl_NotifyValueNames[ACPI_NOTIFY_MAX + 1] =
>  {
> -    "Bus Check",
> -    "Device Check",
> -    "Device Wake",
> -    "Eject Request",
> -    "Device Check Light",
> -    "Frequency Mismatch",
> -    "Bus Mode Mismatch",
> -    "Power Fault",
> -    "Capabilities Check",
> -    "Device PLD Check",
> -    "Reserved",
> -    "System Locality Update"
> +    /* 00 */ "Bus Check",
> +    /* 01 */ "Device Check",
> +    /* 02 */ "Device Wake",
> +    /* 03 */ "Eject Request",
> +    /* 04 */ "Device Check Light",
> +    /* 05 */ "Frequency Mismatch",
> +    /* 06 */ "Bus Mode Mismatch",
> +    /* 07 */ "Power Fault",
> +    /* 08 */ "Capabilities Check",
> +    /* 09 */ "Device PLD Check",
> +    /* 10 */ "Reserved",
> +    /* 11 */ "System Locality Update",
> +    /* 12 */ "Shutdown Request"
>  };
>
>  const char *
> @@ -666,9 +669,13 @@ AcpiUtGetNotifyName (
>     {
>         return ("Reserved");
>     }
> -    else /* Greater or equal to 0x80 */
> +    else if (NotifyValue <= ACPI_MAX_DEVICE_SPECIFIC_NOTIFY)
>     {
> -        return ("**Device Specific**");
> +        return ("Device Specific");
> +    }
> +    else
> +    {
> +        return ("Hardware Specific");
>     }
>  }
>  #endif
> diff --git a/src/acpica/source/components/utilities/utdelete.c b/src/acpica/source/components/utilities/utdelete.c
> index 801f957..3130e6d 100644
> --- a/src/acpica/source/components/utilities/utdelete.c
> +++ b/src/acpica/source/components/utilities/utdelete.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -307,6 +307,16 @@ AcpiUtDeleteInternalObj (
>         ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS,
>             "***** Region %p\n", Object));
>
> +        /*
> +         * Update AddressRange list. However, only permanent regions
> +         * are installed in this list. (Not created within a method)
> +         */
> +        if (!(Object->Region.Node->Flags & ANOBJ_TEMPORARY))
> +        {
> +            AcpiUtRemoveAddressRange (Object->Region.SpaceId,
> +                Object->Region.Node);
> +        }
> +
>         SecondDesc = AcpiNsGetSecondaryObject (Object);
>         if (SecondDesc)
>         {
> diff --git a/src/acpica/source/components/utilities/uteval.c b/src/acpica/source/components/utilities/uteval.c
> index eeaaebb..0292c05 100644
> --- a/src/acpica/source/components/utilities/uteval.c
> +++ b/src/acpica/source/components/utilities/uteval.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/utilities/utglobal.c b/src/acpica/source/components/utilities/utglobal.c
> index 30da582..8ebbaec 100644
> --- a/src/acpica/source/components/utilities/utglobal.c
> +++ b/src/acpica/source/components/utilities/utglobal.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -227,6 +227,7 @@ const ACPI_PREDEFINED_NAMES     AcpiGbl_PreDefinedNames[] =
>  };
>
>
> +#if (!ACPI_REDUCED_HARDWARE)
>  /******************************************************************************
>  *
>  * Event and Hardware globals
> @@ -271,6 +272,7 @@ ACPI_FIXED_EVENT_INFO       AcpiGbl_FixedEventInfo[ACPI_NUM_FIXED_EVENTS] =
>     /* ACPI_EVENT_SLEEP_BUTTON  */  {ACPI_BITREG_SLEEP_BUTTON_STATUS,   ACPI_BITREG_SLEEP_BUTTON_ENABLE, ACPI_BITMASK_SLEEP_BUTTON_STATUS,   ACPI_BITMASK_SLEEP_BUTTON_ENABLE},
>     /* ACPI_EVENT_RTC           */  {ACPI_BITREG_RT_CLOCK_STATUS,       ACPI_BITREG_RT_CLOCK_ENABLE,     ACPI_BITMASK_RT_CLOCK_STATUS,       ACPI_BITMASK_RT_CLOCK_ENABLE},
>  };
> +#endif /* !ACPI_REDUCED_HARDWARE */
>
>
>  /*******************************************************************************
> @@ -305,6 +307,13 @@ AcpiUtInitGlobals (
>         return_ACPI_STATUS (Status);
>     }
>
> +    /* Address Range lists */
> +
> +    for (i = 0; i < ACPI_ADDRESS_RANGE_MAX; i++)
> +    {
> +        AcpiGbl_AddressRangeList[i] = NULL;
> +    }
> +
>     /* Mutex locked flags */
>
>     for (i = 0; i < ACPI_NUM_MUTEX; i++)
> @@ -334,6 +343,8 @@ AcpiUtInitGlobals (
>         AcpiFixedEventCount[i]              = 0;
>     }
>
> +#if (!ACPI_REDUCED_HARDWARE)
> +
>     /* GPE support */
>
>     AcpiGbl_AllGpesInitialized          = FALSE;
> @@ -342,6 +353,10 @@ AcpiUtInitGlobals (
>     AcpiGbl_GpeFadtBlocks[1]            = NULL;
>     AcpiCurrentGpeCount                 = 0;
>
> +    AcpiGbl_GlobalEventHandler          = NULL;
> +
> +#endif /* !ACPI_REDUCED_HARDWARE */
> +
>     /* Global handlers */
>
>     AcpiGbl_SystemNotify.Handler        = NULL;
> @@ -350,7 +365,6 @@ AcpiUtInitGlobals (
>     AcpiGbl_InitHandler                 = NULL;
>     AcpiGbl_TableHandler                = NULL;
>     AcpiGbl_InterfaceHandler            = NULL;
> -    AcpiGbl_GlobalEventHandler          = NULL;
>
>     /* Global Lock support */
>
> diff --git a/src/acpica/source/components/utilities/utids.c b/src/acpica/source/components/utilities/utids.c
> index c24541d..6ef73c9 100644
> --- a/src/acpica/source/components/utilities/utids.c
> +++ b/src/acpica/source/components/utilities/utids.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/utilities/utinit.c b/src/acpica/source/components/utilities/utinit.c
> index 9e06711..9b52755 100644
> --- a/src/acpica/source/components/utilities/utinit.c
> +++ b/src/acpica/source/components/utilities/utinit.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -130,21 +130,33 @@
>  static void AcpiUtTerminate (
>     void);
>
> +#if (!ACPI_REDUCED_HARDWARE)
>
> +static void
> +AcpiUtFreeGpeLists (
> +    void);
> +
> +#else
> +
> +#define AcpiUtFreeGpeLists()
> +#endif /* !ACPI_REDUCED_HARDWARE */
> +
> +
> +#if (!ACPI_REDUCED_HARDWARE)
>  /******************************************************************************
>  *
> - * FUNCTION:    AcpiUtTerminate
> + * FUNCTION:    AcpiUtFreeGpeLists
>  *
>  * PARAMETERS:  none
>  *
>  * RETURN:      none
>  *
> - * DESCRIPTION: Free global memory
> + * DESCRIPTION: Free global GPE lists
>  *
>  ******************************************************************************/
>
>  static void
> -AcpiUtTerminate (
> +AcpiUtFreeGpeLists (
>     void)
>  {
>     ACPI_GPE_BLOCK_INFO     *GpeBlock;
> @@ -153,9 +165,6 @@ AcpiUtTerminate (
>     ACPI_GPE_XRUPT_INFO     *NextGpeXruptInfo;
>
>
> -    ACPI_FUNCTION_TRACE (UtTerminate);
> -
> -
>     /* Free global GPE blocks and related info structures */
>
>     GpeXruptInfo = AcpiGbl_GpeXruptListHead;
> @@ -175,7 +184,30 @@ AcpiUtTerminate (
>         ACPI_FREE (GpeXruptInfo);
>         GpeXruptInfo = NextGpeXruptInfo;
>     }
> +}
> +#endif /* !ACPI_REDUCED_HARDWARE */
> +
> +
> +/******************************************************************************
> + *
> + * FUNCTION:    AcpiUtTerminate
> + *
> + * PARAMETERS:  none
> + *
> + * RETURN:      none
> + *
> + * DESCRIPTION: Free global memory
> + *
> + ******************************************************************************/
> +
> +static void
> +AcpiUtTerminate (
> +    void)
> +{
> +    ACPI_FUNCTION_TRACE (UtTerminate);
>
> +    AcpiUtFreeGpeLists ();
> +    AcpiUtDeleteAddressLists ();
>     return_VOID;
>  }
>
> diff --git a/src/acpica/source/components/utilities/utlock.c b/src/acpica/source/components/utilities/utlock.c
> index 6e68ec0..a09857f 100644
> --- a/src/acpica/source/components/utilities/utlock.c
> +++ b/src/acpica/source/components/utilities/utlock.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/utilities/utmath.c b/src/acpica/source/components/utilities/utmath.c
> index 5c6d20e..06665e0 100644
> --- a/src/acpica/source/components/utilities/utmath.c
> +++ b/src/acpica/source/components/utilities/utmath.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/utilities/utmisc.c b/src/acpica/source/components/utilities/utmisc.c
> index d379a22..44dd533 100644
> --- a/src/acpica/source/components/utilities/utmisc.c
> +++ b/src/acpica/source/components/utilities/utmisc.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -538,6 +538,44 @@ AcpiUtStrlwr (
>
>     return;
>  }
> +
> +
> +/******************************************************************************
> + *
> + * FUNCTION:    AcpiUtStricmp
> + *
> + * PARAMETERS:  String1             - first string to compare
> + *              String2             - second string to compare
> + *
> + * RETURN:      int that signifies string relationship. Zero means strings
> + *              are equal.
> + *
> + * DESCRIPTION: Implementation of the non-ANSI stricmp function (compare
> + *              strings with no case sensitivity)
> + *
> + ******************************************************************************/
> +
> +int
> +AcpiUtStricmp (
> +    char                    *String1,
> +    char                    *String2)
> +{
> +    int                     c1;
> +    int                     c2;
> +
> +
> +    do
> +    {
> +        c1 = tolower ((int) *String1);
> +        c2 = tolower ((int) *String2);
> +
> +        String1++;
> +        String2++;
> +    }
> +    while ((c1 == c2) && (c1));
> +
> +    return (c1 - c2);
> +}
>  #endif
>
>
> diff --git a/src/acpica/source/components/utilities/utmutex.c b/src/acpica/source/components/utilities/utmutex.c
> index 01a2422..0ddfb36 100644
> --- a/src/acpica/source/components/utilities/utmutex.c
> +++ b/src/acpica/source/components/utilities/utmutex.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -407,15 +407,10 @@ ACPI_STATUS
>  AcpiUtReleaseMutex (
>     ACPI_MUTEX_HANDLE       MutexId)
>  {
> -    ACPI_THREAD_ID          ThisThreadId;
> -
> -
>     ACPI_FUNCTION_NAME (UtReleaseMutex);
>
> -
> -    ThisThreadId = AcpiOsGetThreadId ();
>     ACPI_DEBUG_PRINT ((ACPI_DB_MUTEX, "Thread %u releasing Mutex [%s]\n",
> -        (UINT32) ThisThreadId, AcpiUtGetMutexName (MutexId)));
> +        (UINT32) AcpiOsGetThreadId (), AcpiUtGetMutexName (MutexId)));
>
>     if (MutexId > ACPI_MAX_MUTEX)
>     {
> @@ -446,7 +441,7 @@ AcpiUtReleaseMutex (
>          */
>         for (i = MutexId; i < ACPI_NUM_MUTEX; i++)
>         {
> -            if (AcpiGbl_MutexInfo[i].ThreadId == ThisThreadId)
> +            if (AcpiGbl_MutexInfo[i].ThreadId == AcpiOsGetThreadId ())
>             {
>                 if (i == MutexId)
>                 {
> diff --git a/src/acpica/source/components/utilities/utobject.c b/src/acpica/source/components/utilities/utobject.c
> index f62ebe0..ade2980 100644
> --- a/src/acpica/source/components/utilities/utobject.c
> +++ b/src/acpica/source/components/utilities/utobject.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/utilities/utosi.c b/src/acpica/source/components/utilities/utosi.c
> index 2b64d67..9604bd0 100644
> --- a/src/acpica/source/components/utilities/utosi.c
> +++ b/src/acpica/source/components/utilities/utosi.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/utilities/utresrc.c b/src/acpica/source/components/utilities/utresrc.c
> index a6b6d9c..69df740 100644
> --- a/src/acpica/source/components/utilities/utresrc.c
> +++ b/src/acpica/source/components/utilities/utresrc.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -118,7 +118,7 @@
>
>  #include "acpi.h"
>  #include "accommon.h"
> -#include "amlresrc.h"
> +#include "acresrc.h"
>
>
>  #define _COMPONENT          ACPI_UTILITIES
> @@ -251,6 +251,154 @@ const char                      *AcpiGbl_TypDecode[] =
>     "TypeF"
>  };
>
> +const char                      *AcpiGbl_PpcDecode[] =
> +{
> +    "PullDefault",
> +    "PullUp",
> +    "PullDown",
> +    "PullNone"
> +};
> +
> +const char                      *AcpiGbl_IorDecode[] =
> +{
> +    "IoRestrictionNone",
> +    "IoRestrictionInputOnly",
> +    "IoRestrictionOutputOnly",
> +    "IoRestrictionNoneAndPreserve"
> +};
> +
> +const char                      *AcpiGbl_DtsDecode[] =
> +{
> +    "Width8bit",
> +    "Width16bit",
> +    "Width32bit",
> +    "Width64bit",
> +    "Width128bit",
> +    "Width256bit",
> +};
> +
> +/* GPIO connection type */
> +
> +const char                      *AcpiGbl_CtDecode[] =
> +{
> +    "Interrupt",
> +    "I/O"
> +};
> +
> +/* Serial bus type */
> +
> +const char                      *AcpiGbl_SbtDecode[] =
> +{
> +    "/* UNKNOWN serial bus type */",
> +    "I2C",
> +    "SPI",
> +    "UART"
> +};
> +
> +/* I2C serial bus access mode */
> +
> +const char                      *AcpiGbl_AmDecode[] =
> +{
> +    "AddressingMode7Bit",
> +    "AddressingMode10Bit"
> +};
> +
> +/* I2C serial bus slave mode */
> +
> +const char                      *AcpiGbl_SmDecode[] =
> +{
> +    "ControllerInitiated",
> +    "DeviceInitiated"
> +};
> +
> +/* SPI serial bus wire mode */
> +
> +const char                      *AcpiGbl_WmDecode[] =
> +{
> +    "FourWireMode",
> +    "ThreeWireMode"
> +};
> +
> +/* SPI serial clock phase */
> +
> +const char                      *AcpiGbl_CphDecode[] =
> +{
> +    "ClockPhaseFirst",
> +    "ClockPhaseSecond"
> +};
> +
> +/* SPI serial bus clock polarity */
> +
> +const char                      *AcpiGbl_CpoDecode[] =
> +{
> +    "ClockPolarityLow",
> +    "ClockPolarityHigh"
> +};
> +
> +/* SPI serial bus device polarity */
> +
> +const char                      *AcpiGbl_DpDecode[] =
> +{
> +    "PolarityLow",
> +    "PolarityHigh"
> +};
> +
> +/* UART serial bus endian */
> +
> +const char                      *AcpiGbl_EdDecode[] =
> +{
> +    "LittleEndian",
> +    "BigEndian"
> +};
> +
> +/* UART serial bus bits per byte */
> +
> +const char                      *AcpiGbl_BpbDecode[] =
> +{
> +    "DataBitsFive",
> +    "DataBitsSix",
> +    "DataBitsSeven",
> +    "DataBitsEight",
> +    "DataBitsNine",
> +    "/* UNKNOWN Bits per byte */",
> +    "/* UNKNOWN Bits per byte */",
> +    "/* UNKNOWN Bits per byte */"
> +};
> +
> +/* UART serial bus stop bits */
> +
> +const char                      *AcpiGbl_SbDecode[] =
> +{
> +    "StopBitsNone",
> +    "StopBitsOne",
> +    "StopBitsOnePlusHalf",
> +    "StopBitsTwo"
> +};
> +
> +/* UART serial bus flow control */
> +
> +const char                      *AcpiGbl_FcDecode[] =
> +{
> +    "FlowControlNone",
> +    "FlowControlHardware",
> +    "FlowControlXON",
> +    "/* UNKNOWN flow control keyword */"
> +};
> +
> +/* UART serial bus parity type */
> +
> +const char                      *AcpiGbl_PtDecode[] =
> +{
> +    "ParityTypeNone",
> +    "ParityTypeEven",
> +    "ParityTypeOdd",
> +    "ParityTypeMark",
> +    "ParityTypeSpace",
> +    "/* UNKNOWN parity keyword */",
> +    "/* UNKNOWN parity keyword */",
> +    "/* UNKNOWN parity keyword */"
> +};
> +
>  #endif
>
>
> @@ -272,7 +420,7 @@ const UINT8                 AcpiGbl_ResourceAmlSizes[] =
>     ACPI_AML_SIZE_SMALL (AML_RESOURCE_END_DEPENDENT),
>     ACPI_AML_SIZE_SMALL (AML_RESOURCE_IO),
>     ACPI_AML_SIZE_SMALL (AML_RESOURCE_FIXED_IO),
> -    0,
> +    ACPI_AML_SIZE_SMALL (AML_RESOURCE_FIXED_DMA),
>     0,
>     0,
>     0,
> @@ -292,7 +440,18 @@ const UINT8                 AcpiGbl_ResourceAmlSizes[] =
>     ACPI_AML_SIZE_LARGE (AML_RESOURCE_ADDRESS16),
>     ACPI_AML_SIZE_LARGE (AML_RESOURCE_EXTENDED_IRQ),
>     ACPI_AML_SIZE_LARGE (AML_RESOURCE_ADDRESS64),
> -    ACPI_AML_SIZE_LARGE (AML_RESOURCE_EXTENDED_ADDRESS64)
> +    ACPI_AML_SIZE_LARGE (AML_RESOURCE_EXTENDED_ADDRESS64),
> +    ACPI_AML_SIZE_LARGE (AML_RESOURCE_GPIO),
> +    0,
> +    ACPI_AML_SIZE_LARGE (AML_RESOURCE_COMMON_SERIALBUS),
> +};
> +
> +const UINT8                 AcpiGbl_ResourceAmlSerialBusSizes[] =
> +{
> +    0,
> +    ACPI_AML_SIZE_LARGE (AML_RESOURCE_I2C_SERIALBUS),
> +    ACPI_AML_SIZE_LARGE (AML_RESOURCE_SPI_SERIALBUS),
> +    ACPI_AML_SIZE_LARGE (AML_RESOURCE_UART_SERIALBUS),
>  };
>
>
> @@ -310,35 +469,49 @@ static const UINT8          AcpiGbl_ResourceTypes[] =
>     0,
>     0,
>     0,
> -    ACPI_SMALL_VARIABLE_LENGTH,
> -    ACPI_FIXED_LENGTH,
> -    ACPI_SMALL_VARIABLE_LENGTH,
> -    ACPI_FIXED_LENGTH,
> -    ACPI_FIXED_LENGTH,
> -    ACPI_FIXED_LENGTH,
> -    0,
> +    ACPI_SMALL_VARIABLE_LENGTH,     /* 04 IRQ */
> +    ACPI_FIXED_LENGTH,              /* 05 DMA */
> +    ACPI_SMALL_VARIABLE_LENGTH,     /* 06 StartDependentFunctions */
> +    ACPI_FIXED_LENGTH,              /* 07 EndDependentFunctions */
> +    ACPI_FIXED_LENGTH,              /* 08 IO */
> +    ACPI_FIXED_LENGTH,              /* 09 FixedIO */
> +    ACPI_FIXED_LENGTH,              /* 0A FixedDMA */
>     0,
>     0,
>     0,
> -    ACPI_VARIABLE_LENGTH,
> -    ACPI_FIXED_LENGTH,
> +    ACPI_VARIABLE_LENGTH,           /* 0E VendorShort */
> +    ACPI_FIXED_LENGTH,              /* 0F EndTag */
>
>     /* Large descriptors */
>
>     0,
> -    ACPI_FIXED_LENGTH,
> -    ACPI_FIXED_LENGTH,
> +    ACPI_FIXED_LENGTH,              /* 01 Memory24 */
> +    ACPI_FIXED_LENGTH,              /* 02 GenericRegister */
> +    0,
> +    ACPI_VARIABLE_LENGTH,           /* 04 VendorLong */
> +    ACPI_FIXED_LENGTH,              /* 05 Memory32 */
> +    ACPI_FIXED_LENGTH,              /* 06 Memory32Fixed */
> +    ACPI_VARIABLE_LENGTH,           /* 07 Dword* address */
> +    ACPI_VARIABLE_LENGTH,           /* 08 Word* address */
> +    ACPI_VARIABLE_LENGTH,           /* 09 ExtendedIRQ */
> +    ACPI_VARIABLE_LENGTH,           /* 0A Qword* address */
> +    ACPI_FIXED_LENGTH,              /* 0B Extended* address */
> +    ACPI_VARIABLE_LENGTH,           /* 0C Gpio* */
>     0,
> -    ACPI_VARIABLE_LENGTH,
> -    ACPI_FIXED_LENGTH,
> -    ACPI_FIXED_LENGTH,
> -    ACPI_VARIABLE_LENGTH,
> -    ACPI_VARIABLE_LENGTH,
> -    ACPI_VARIABLE_LENGTH,
> -    ACPI_VARIABLE_LENGTH,
> -    ACPI_FIXED_LENGTH
> +    ACPI_VARIABLE_LENGTH            /* 0E *SerialBus */
>  };
>
> +/*
> + * For the iASL compiler/disassembler, we don't want any error messages
> + * because the disassembler uses the resource validation code to determine
> + * if Buffer objects are actually Resource Templates.
> + */
> +#ifdef ACPI_ASL_COMPILER
> +#define ACPI_RESOURCE_ERROR(plist)
> +#else
> +#define ACPI_RESOURCE_ERROR(plist)  ACPI_ERROR(plist)
> +#endif
> +
>
>  /*******************************************************************************
>  *
> @@ -369,6 +542,7 @@ AcpiUtWalkAmlResources (
>     UINT8                   ResourceIndex;
>     UINT32                  Length;
>     UINT32                  Offset = 0;
> +    UINT8                   EndTag[2] = {0x79, 0x00};
>
>
>     ACPI_FUNCTION_TRACE (UtWalkAmlResources);
> @@ -394,6 +568,10 @@ AcpiUtWalkAmlResources (
>         Status = AcpiUtValidateResource (Aml, &ResourceIndex);
>         if (ACPI_FAILURE (Status))
>         {
> +            /*
> +             * Exit on failure. Cannot continue because the descriptor length
> +             * may be bogus also.
> +             */
>             return_ACPI_STATUS (Status);
>         }
>
> @@ -408,7 +586,7 @@ AcpiUtWalkAmlResources (
>             Status = UserFunction (Aml, Length, Offset, ResourceIndex, Context);
>             if (ACPI_FAILURE (Status))
>             {
> -                return (Status);
> +                return_ACPI_STATUS (Status);
>             }
>         }
>
> @@ -443,7 +621,19 @@ AcpiUtWalkAmlResources (
>
>     /* Did not find an EndTag descriptor */
>
> -    return (AE_AML_NO_RESOURCE_END_TAG);
> +    if (UserFunction)
> +    {
> +        /* Insert an EndTag anyway. AcpiRsGetListLength always leaves room */
> +
> +        (void) AcpiUtValidateResource (EndTag, &ResourceIndex);
> +        Status = UserFunction (EndTag, 2, Offset, ResourceIndex, Context);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return_ACPI_STATUS (Status);
> +        }
> +    }
> +
> +    return_ACPI_STATUS (AE_AML_NO_RESOURCE_END_TAG);
>  }
>
>
> @@ -468,6 +658,7 @@ AcpiUtValidateResource (
>     void                    *Aml,
>     UINT8                   *ReturnIndex)
>  {
> +    AML_RESOURCE            *AmlResource;
>     UINT8                   ResourceType;
>     UINT8                   ResourceIndex;
>     ACPI_RS_LENGTH          ResourceLength;
> @@ -492,7 +683,7 @@ AcpiUtValidateResource (
>
>         if (ResourceType > ACPI_RESOURCE_NAME_LARGE_MAX)
>         {
> -            return (AE_AML_INVALID_RESOURCE_TYPE);
> +            goto InvalidResource;
>         }
>
>         /*
> @@ -511,17 +702,18 @@ AcpiUtValidateResource (
>             ((ResourceType & ACPI_RESOURCE_NAME_SMALL_MASK) >> 3);
>     }
>
> -    /* Check validity of the resource type, zero indicates name is invalid */
> -
> +    /*
> +     * Check validity of the resource type, via AcpiGbl_ResourceTypes. Zero
> +     * indicates an invalid resource.
> +     */
>     if (!AcpiGbl_ResourceTypes[ResourceIndex])
>     {
> -        return (AE_AML_INVALID_RESOURCE_TYPE);
> +        goto InvalidResource;
>     }
>
> -
>     /*
> -     * 2) Validate the ResourceLength field. This ensures that the length
> -     *    is at least reasonable, and guarantees that it is non-zero.
> +     * Validate the ResourceLength field. This ensures that the length
> +     * is at least reasonable, and guarantees that it is non-zero.
>      */
>     ResourceLength = AcpiUtGetResourceLength (Aml);
>     MinimumResourceLength = AcpiGbl_ResourceAmlSizes[ResourceIndex];
> @@ -536,7 +728,7 @@ AcpiUtValidateResource (
>
>         if (ResourceLength != MinimumResourceLength)
>         {
> -            return (AE_AML_BAD_RESOURCE_LENGTH);
> +            goto BadResourceLength;
>         }
>         break;
>
> @@ -546,7 +738,7 @@ AcpiUtValidateResource (
>
>         if (ResourceLength < MinimumResourceLength)
>         {
> -            return (AE_AML_BAD_RESOURCE_LENGTH);
> +            goto BadResourceLength;
>         }
>         break;
>
> @@ -557,7 +749,7 @@ AcpiUtValidateResource (
>         if ((ResourceLength > MinimumResourceLength) ||
>             (ResourceLength < (MinimumResourceLength - 1)))
>         {
> -            return (AE_AML_BAD_RESOURCE_LENGTH);
> +            goto BadResourceLength;
>         }
>         break;
>
> @@ -565,7 +757,22 @@ AcpiUtValidateResource (
>
>         /* Shouldn't happen (because of validation earlier), but be sure */
>
> -        return (AE_AML_INVALID_RESOURCE_TYPE);
> +        goto InvalidResource;
> +    }
> +
> +    AmlResource = ACPI_CAST_PTR (AML_RESOURCE, Aml);
> +    if (ResourceType == ACPI_RESOURCE_NAME_SERIAL_BUS)
> +    {
> +        /* Validate the BusType field */
> +
> +        if ((AmlResource->CommonSerialBus.Type == 0) ||
> +            (AmlResource->CommonSerialBus.Type > AML_RESOURCE_MAX_SERIALBUSTYPE))
> +        {
> +            ACPI_RESOURCE_ERROR ((AE_INFO,
> +                "Invalid/unsupported SerialBus resource descriptor: BusType 0x%2.2X",
> +                AmlResource->CommonSerialBus.Type));
> +            return (AE_AML_INVALID_RESOURCE_TYPE);
> +        }
>     }
>
>     /* Optionally return the resource table index */
> @@ -576,6 +783,22 @@ AcpiUtValidateResource (
>     }
>
>     return (AE_OK);
> +
> +
> +InvalidResource:
> +
> +    ACPI_RESOURCE_ERROR ((AE_INFO,
> +        "Invalid/unsupported resource descriptor: Type 0x%2.2X",
> +        ResourceType));
> +    return (AE_AML_INVALID_RESOURCE_TYPE);
> +
> +BadResourceLength:
> +
> +    ACPI_RESOURCE_ERROR ((AE_INFO,
> +        "Invalid resource descriptor length: Type "
> +        "0x%2.2X, Length 0x%4.4X, MinLength 0x%4.4X",
> +        ResourceType, ResourceLength, MinimumResourceLength));
> +    return (AE_AML_BAD_RESOURCE_LENGTH);
>  }
>
>
> diff --git a/src/acpica/source/components/utilities/utstate.c b/src/acpica/source/components/utilities/utstate.c
> index c23c701..689458e 100644
> --- a/src/acpica/source/components/utilities/utstate.c
> +++ b/src/acpica/source/components/utilities/utstate.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/utilities/uttrack.c b/src/acpica/source/components/utilities/uttrack.c
> index f5599b7..7f2311a 100644
> --- a/src/acpica/source/components/utilities/uttrack.c
> +++ b/src/acpica/source/components/utilities/uttrack.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/components/utilities/utxface.c b/src/acpica/source/components/utilities/utxface.c
> index d65c821..900bb19 100644
> --- a/src/acpica/source/components/utilities/utxface.c
> +++ b/src/acpica/source/components/utilities/utxface.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -128,7 +128,6 @@
>
>
>  #ifndef ACPI_ASL_COMPILER
> -
>  /*******************************************************************************
>  *
>  * FUNCTION:    AcpiInitializeSubsystem
> @@ -234,6 +233,8 @@ AcpiEnableSubsystem (
>     ACPI_FUNCTION_TRACE (AcpiEnableSubsystem);
>
>
> +#if (!ACPI_REDUCED_HARDWARE)
> +
>     /* Enable ACPI mode */
>
>     if (!(Flags & ACPI_NO_ACPI_ENABLE))
> @@ -261,6 +262,8 @@ AcpiEnableSubsystem (
>         return_ACPI_STATUS (Status);
>     }
>
> +#endif /* !ACPI_REDUCED_HARDWARE */
> +
>     /*
>      * Install the default OpRegion handlers.  These are installed unless
>      * other handlers have already been installed via the
> @@ -278,6 +281,7 @@ AcpiEnableSubsystem (
>         }
>     }
>
> +#if (!ACPI_REDUCED_HARDWARE)
>     /*
>      * Initialize ACPI Event handling (Fixed and General Purpose)
>      *
> @@ -320,6 +324,8 @@ AcpiEnableSubsystem (
>         }
>     }
>
> +#endif /* !ACPI_REDUCED_HARDWARE */
> +
>     return_ACPI_STATUS (Status);
>  }
>
> @@ -857,5 +863,47 @@ AcpiInstallInterfaceHandler (
>
>  ACPI_EXPORT_SYMBOL (AcpiInstallInterfaceHandler)
>
> -#endif /* !ACPI_ASL_COMPILER */
>
> +/*****************************************************************************
> + *
> + * FUNCTION:    AcpiCheckAddressRange
> + *
> + * PARAMETERS:  SpaceId             - Address space ID
> + *              Address             - Start address
> + *              Length              - Length
> + *              Warn                - TRUE if warning on overlap desired
> + *
> + * RETURN:      Count of the number of conflicts detected.
> + *
> + * DESCRIPTION: Check if the input address range overlaps any of the
> + *              ASL operation region address ranges.
> + *
> + ****************************************************************************/
> +
> +UINT32
> +AcpiCheckAddressRange (
> +    ACPI_ADR_SPACE_TYPE     SpaceId,
> +    ACPI_PHYSICAL_ADDRESS   Address,
> +    ACPI_SIZE               Length,
> +    BOOLEAN                 Warn)
> +{
> +    UINT32                  Overlaps;
> +    ACPI_STATUS             Status;
> +
> +
> +    Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return (0);
> +    }
> +
> +    Overlaps = AcpiUtCheckAddressRange (SpaceId, Address,
> +        (UINT32) Length, Warn);
> +
> +    (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
> +    return (Overlaps);
> +}
> +
> +ACPI_EXPORT_SYMBOL (AcpiCheckAddressRange)
> +
> +#endif /* !ACPI_ASL_COMPILER */
> diff --git a/src/acpica/source/components/utilities/utxferror.c b/src/acpica/source/components/utilities/utxferror.c
> index 60e6217..8a98a89 100644
> --- a/src/acpica/source/components/utilities/utxferror.c
> +++ b/src/acpica/source/components/utilities/utxferror.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/include/acapps.h b/src/acpica/source/include/acapps.h
> index d6a19f5..c87ab01 100644
> --- a/src/acpica/source/include/acapps.h
> +++ b/src/acpica/source/include/acapps.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -124,7 +124,7 @@
>  /* Common info for tool signons */
>
>  #define ACPICA_NAME                 "Intel ACPI Component Architecture"
> -#define ACPICA_COPYRIGHT            "Copyright (c) 2000 - 2011 Intel Corporation"
> +#define ACPICA_COPYRIGHT            "Copyright (c) 2000 - 2012 Intel Corporation"
>
>  #if ACPI_MACHINE_WIDTH == 64
>  #define ACPI_WIDTH          "-64"
> diff --git a/src/acpica/source/include/accommon.h b/src/acpica/source/include/accommon.h
> index 7a5739e..a24bad7 100644
> --- a/src/acpica/source/include/accommon.h
> +++ b/src/acpica/source/include/accommon.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/include/acconfig.h b/src/acpica/source/include/acconfig.h
> index df826fa..8949ec5 100644
> --- a/src/acpica/source/include/acconfig.h
> +++ b/src/acpica/source/include/acconfig.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -158,6 +158,23 @@
>  */
>  #define ACPI_CHECKSUM_ABORT             FALSE
>
> +/*
> + * Generate a version of ACPICA that only supports "reduced hardware"
> + * platforms (as defined in ACPI 5.0). Set to TRUE to generate a specialized
> + * version of ACPICA that ONLY supports the ACPI 5.0 "reduced hardware"
> + * model. In other words, no ACPI hardware is supported.
> + *
> + * If TRUE, this means no support for the following:
> + *      PM Event and Control registers
> + *      SCI interrupt (and handler)
> + *      Fixed Events
> + *      General Purpose Events (GPEs)
> + *      Global Lock
> + *      ACPI PM timer
> + *      FACS table (Waking vectors and Global Lock)
> + */
> +#define ACPI_REDUCED_HARDWARE           FALSE
> +
>
>  /******************************************************************************
>  *
> @@ -167,7 +184,7 @@
>
>  /* Version of ACPI supported */
>
> -#define ACPI_CA_SUPPORT_LEVEL           3
> +#define ACPI_CA_SUPPORT_LEVEL           5
>
>  /* Maximum count for a semaphore object */
>
> @@ -195,7 +212,11 @@
>
>  /* Maximum sleep allowed via Sleep() operator */
>
> -#define ACPI_MAX_SLEEP                  20000   /* Two seconds */
> +#define ACPI_MAX_SLEEP                  2000    /* 2000 millisec == two seconds */
> +
> +/* Address Range lists are per-SpaceId (Memory and I/O only) */
> +
> +#define ACPI_ADDRESS_RANGE_MAX          2
>
>
>  /******************************************************************************
> @@ -255,9 +276,10 @@
>  #define ACPI_RSDP_CHECKSUM_LENGTH       20
>  #define ACPI_RSDP_XCHECKSUM_LENGTH      36
>
> -/* SMBus and IPMI bidirectional buffer size */
> +/* SMBus, GSBus and IPMI bidirectional buffer size */
>
>  #define ACPI_SMBUS_BUFFER_SIZE          34
> +#define ACPI_GSBUS_BUFFER_SIZE          34
>  #define ACPI_IPMI_BUFFER_SIZE           66
>
>  /* _SxD and _SxW control methods */
> diff --git a/src/acpica/source/include/acdebug.h b/src/acpica/source/include/acdebug.h
> index 05f9aa3..4a9ecf0 100644
> --- a/src/acpica/source/include/acdebug.h
> +++ b/src/acpica/source/include/acdebug.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -179,6 +179,10 @@ AcpiDbDisplayTableInfo (
>     char                    *TableArg);
>
>  void
> +AcpiDbDisplayTemplate (
> +    char                    *BufferArg);
> +
> +void
>  AcpiDbUnloadAcpiTable (
>     char                    *TableArg,
>     char                    *InstanceArg);
> @@ -205,18 +209,20 @@ void
>  AcpiDbDisplayResources (
>     char                    *ObjectArg);
>
> +ACPI_HW_DEPENDENT_RETURN_VOID (
>  void
>  AcpiDbDisplayGpes (
> -    void);
> +    void))
>
>  void
>  AcpiDbDisplayHandlers (
>     void);
>
> +ACPI_HW_DEPENDENT_RETURN_VOID (
>  void
>  AcpiDbGenerateGpe (
>     char                    *GpeArg,
> -    char                    *BlockArg);
> +    char                    *BlockArg))
>
>
>  /*
> diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h
> index b151ecd..9e8f2e3 100644
> --- a/src/acpica/source/include/acdisasm.h
> +++ b/src/acpica/source/include/acdisasm.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -135,7 +135,7 @@
>  typedef const struct acpi_dmtable_info
>  {
>     UINT8                       Opcode;
> -    UINT8                       Offset;
> +    UINT16                      Offset;
>     char                        *Name;
>     UINT8                       Flags;
>
> @@ -152,57 +152,82 @@ typedef const struct acpi_dmtable_info
>
>  /*
>  * Values for Opcode above.
> - * Note: 0-7 must not change, used as a flag shift value
> + * Note: 0-7 must not change, they are used as a flag shift value. Other
> + * than those, new values can be added wherever appropriate.
>  */
> -#define ACPI_DMT_FLAG0                  0
> -#define ACPI_DMT_FLAG1                  1
> -#define ACPI_DMT_FLAG2                  2
> -#define ACPI_DMT_FLAG3                  3
> -#define ACPI_DMT_FLAG4                  4
> -#define ACPI_DMT_FLAG5                  5
> -#define ACPI_DMT_FLAG6                  6
> -#define ACPI_DMT_FLAG7                  7
> -#define ACPI_DMT_FLAGS0                 8
> -#define ACPI_DMT_FLAGS2                 9
> -#define ACPI_DMT_UINT8                  10
> -#define ACPI_DMT_UINT16                 11
> -#define ACPI_DMT_UINT24                 12
> -#define ACPI_DMT_UINT32                 13
> -#define ACPI_DMT_UINT56                 14
> -#define ACPI_DMT_UINT64                 15
> -#define ACPI_DMT_STRING                 16
> -#define ACPI_DMT_NAME4                  17
> -#define ACPI_DMT_NAME6                  18
> -#define ACPI_DMT_NAME8                  19
> -#define ACPI_DMT_CHKSUM                 20
> -#define ACPI_DMT_SPACEID                21
> -#define ACPI_DMT_GAS                    22
> -#define ACPI_DMT_ASF                    23
> -#define ACPI_DMT_DMAR                   24
> -#define ACPI_DMT_HEST                   25
> -#define ACPI_DMT_HESTNTFY               26
> -#define ACPI_DMT_HESTNTYP               27
> -#define ACPI_DMT_MADT                   28
> -#define ACPI_DMT_SRAT                   29
> -#define ACPI_DMT_EXIT                   30
> -#define ACPI_DMT_SIG                    31
> -#define ACPI_DMT_FADTPM                 32
> -#define ACPI_DMT_BUF16                  33
> -#define ACPI_DMT_IVRS                   34
> -#define ACPI_DMT_BUFFER                 35
> -#define ACPI_DMT_PCI_PATH               36
> -#define ACPI_DMT_EINJACT                37
> -#define ACPI_DMT_EINJINST               38
> -#define ACPI_DMT_ERSTACT                39
> -#define ACPI_DMT_ERSTINST               40
> -#define ACPI_DMT_ACCWIDTH               41
> -#define ACPI_DMT_UNICODE                42
> -#define ACPI_DMT_UUID                   43
> -#define ACPI_DMT_DEVICE_PATH            44
> -#define ACPI_DMT_LABEL                  45
> -#define ACPI_DMT_BUF7                   46
> -#define ACPI_DMT_BUF128                 47
> -#define ACPI_DMT_SLIC                   48
> +typedef enum
> +{
> +    /* Simple Data Types */
> +
> +    ACPI_DMT_FLAG0          = 0,
> +    ACPI_DMT_FLAG1          = 1,
> +    ACPI_DMT_FLAG2          = 2,
> +    ACPI_DMT_FLAG3          = 3,
> +    ACPI_DMT_FLAG4          = 4,
> +    ACPI_DMT_FLAG5          = 5,
> +    ACPI_DMT_FLAG6          = 6,
> +    ACPI_DMT_FLAG7          = 7,
> +    ACPI_DMT_FLAGS0,
> +    ACPI_DMT_FLAGS1,
> +    ACPI_DMT_FLAGS2,
> +    ACPI_DMT_FLAGS4,
> +    ACPI_DMT_UINT8,
> +    ACPI_DMT_UINT16,
> +    ACPI_DMT_UINT24,
> +    ACPI_DMT_UINT32,
> +    ACPI_DMT_UINT40,
> +    ACPI_DMT_UINT48,
> +    ACPI_DMT_UINT56,
> +    ACPI_DMT_UINT64,
> +    ACPI_DMT_BUF7,
> +    ACPI_DMT_BUF16,
> +    ACPI_DMT_BUF128,
> +    ACPI_DMT_SIG,
> +    ACPI_DMT_STRING,
> +    ACPI_DMT_NAME4,
> +    ACPI_DMT_NAME6,
> +    ACPI_DMT_NAME8,
> +
> +    /* Types that are decoded to strings and miscellaneous */
> +
> +    ACPI_DMT_ACCWIDTH,
> +    ACPI_DMT_CHKSUM,
> +    ACPI_DMT_GAS,
> +    ACPI_DMT_SPACEID,
> +    ACPI_DMT_UNICODE,
> +    ACPI_DMT_UUID,
> +
> +    /* Types used only for the Data Table Compiler */
> +
> +    ACPI_DMT_BUFFER,
> +    ACPI_DMT_DEVICE_PATH,
> +    ACPI_DMT_LABEL,
> +    ACPI_DMT_PCI_PATH,
> +
> +    /* Types that are specific to particular ACPI tables */
> +
> +    ACPI_DMT_ASF,
> +    ACPI_DMT_DMAR,
> +    ACPI_DMT_EINJACT,
> +    ACPI_DMT_EINJINST,
> +    ACPI_DMT_ERSTACT,
> +    ACPI_DMT_ERSTINST,
> +    ACPI_DMT_FADTPM,
> +    ACPI_DMT_HEST,
> +    ACPI_DMT_HESTNTFY,
> +    ACPI_DMT_HESTNTYP,
> +    ACPI_DMT_IVRS,
> +    ACPI_DMT_MADT,
> +    ACPI_DMT_PMTT,
> +    ACPI_DMT_SLIC,
> +    ACPI_DMT_SRAT,
> +
> +    /* Special opcodes */
> +
> +    ACPI_DMT_EXTRA_TEXT,
> +    ACPI_DMT_EXIT
> +
> +} ACPI_ENTRY_TYPES;
>
>  typedef
>  void (*ACPI_DMTABLE_HANDLER) (
> @@ -247,6 +272,11 @@ ACPI_STATUS (*ASL_WALK_CALLBACK) (
>  #define ASL_WALK_CALLBACK_DEFINED
>  #endif
>
> +typedef
> +void (*ACPI_RESOURCE_HANDLER) (
> +    AML_RESOURCE            *Resource,
> +    UINT32                  Length,
> +    UINT32                  Level);
>
>  typedef struct acpi_resource_tag
>  {
> @@ -274,6 +304,7 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAsf4[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAsfHdr[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoBoot[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoBert[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoBgrt[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoCpep[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoCpep0[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDbgp[];
> @@ -284,6 +315,7 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDmar0[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDmar1[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDmar2[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDmar3[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDrtm[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoEcdt[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoEinj[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoEinj0[];
> @@ -293,7 +325,13 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoFacs[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoFadt1[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoFadt2[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoFadt3[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoFadt5[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoFpdt[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoFpdtHdr[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoFpdt0[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoFpdt1[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoGas[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoGtdt[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoHeader[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoHest[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoHest0[];
> @@ -326,14 +364,34 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt7[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt8[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt9[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt10[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt11[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt12[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadtHdr[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMcfg[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMcfg0[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMchi[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMpst[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMpst0[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMpst0A[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMpst0B[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMpst1[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMpst2[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMsct[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMsct0[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPmtt[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPmtt0[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPmtt1[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPmtt1a[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPmtt2[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPmttHdr[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPcct[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPcct0[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoRsdp1[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoRsdp2[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoS3pt[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoS3ptHdr[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoS3pt0[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoS3pt1[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSbst[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSlicHdr[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSlic0[];
> @@ -426,6 +484,10 @@ AcpiDmDumpFadt (
>     ACPI_TABLE_HEADER       *Table);
>
>  void
> +AcpiDmDumpFpdt (
> +    ACPI_TABLE_HEADER       *Table);
> +
> +void
>  AcpiDmDumpHest (
>     ACPI_TABLE_HEADER       *Table);
>
> @@ -434,17 +496,29 @@ AcpiDmDumpIvrs (
>     ACPI_TABLE_HEADER       *Table);
>
>  void
> +AcpiDmDumpMadt (
> +    ACPI_TABLE_HEADER       *Table);
> +
> +void
>  AcpiDmDumpMcfg (
>     ACPI_TABLE_HEADER       *Table);
>
>  void
> -AcpiDmDumpMadt (
> +AcpiDmDumpMpst (
>     ACPI_TABLE_HEADER       *Table);
>
>  void
>  AcpiDmDumpMsct (
>     ACPI_TABLE_HEADER       *Table);
>
> +void
> +AcpiDmDumpPcct (
> +    ACPI_TABLE_HEADER       *Table);
> +
> +void
> +AcpiDmDumpPmtt (
> +    ACPI_TABLE_HEADER       *Table);
> +
>  UINT32
>  AcpiDmDumpRsdp (
>     ACPI_TABLE_HEADER       *Table);
> @@ -453,6 +527,10 @@ void
>  AcpiDmDumpRsdt (
>     ACPI_TABLE_HEADER       *Table);
>
> +UINT32
> +AcpiDmDumpS3pt (
> +    ACPI_TABLE_HEADER       *Table);
> +
>  void
>  AcpiDmDumpSlic (
>     ACPI_TABLE_HEADER       *Table);
> @@ -743,6 +821,18 @@ AcpiDmVendorLargeDescriptor (
>     UINT32                  Level);
>
>  void
> +AcpiDmGpioDescriptor (
> +    AML_RESOURCE            *Resource,
> +    UINT32                  Length,
> +    UINT32                  Level);
> +
> +void
> +AcpiDmSerialBusDescriptor (
> +    AML_RESOURCE            *Resource,
> +    UINT32                  Length,
> +    UINT32                  Level);
> +
> +void
>  AcpiDmVendorCommon (
>     char                    *Name,
>     UINT8                   *ByteData,
> @@ -766,6 +856,12 @@ AcpiDmDmaDescriptor (
>     UINT32                  Level);
>
>  void
> +AcpiDmFixedDmaDescriptor (
> +    AML_RESOURCE            *Resource,
> +    UINT32                  Length,
> +    UINT32                  Level);
> +
> +void
>  AcpiDmIoDescriptor (
>     AML_RESOURCE            *Resource,
>     UINT32                  Length,
> diff --git a/src/acpica/source/include/acdispat.h b/src/acpica/source/include/acdispat.h
> index 9a47d1d..4b1cc3a 100644
> --- a/src/acpica/source/include/acdispat.h
> +++ b/src/acpica/source/include/acdispat.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/include/acevents.h b/src/acpica/source/include/acevents.h
> index 9944e32..3d95110 100644
> --- a/src/acpica/source/include/acevents.h
> +++ b/src/acpica/source/include/acevents.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -157,13 +157,15 @@ ACPI_STATUS
>  AcpiEvInitGlobalLockHandler (
>     void);
>
> +ACPI_HW_DEPENDENT_RETURN_OK (
>  ACPI_STATUS
>  AcpiEvAcquireGlobalLock(
> -    UINT16                  Timeout);
> +    UINT16                  Timeout))
>
> +ACPI_HW_DEPENDENT_RETURN_OK (
>  ACPI_STATUS
>  AcpiEvReleaseGlobalLock(
> -    void);
> +    void))
>
>  ACPI_STATUS
>  AcpiEvRemoveGlobalLockHandler (
> @@ -226,9 +228,10 @@ AcpiEvInitializeGpeBlock (
>     ACPI_GPE_BLOCK_INFO     *GpeBlock,
>     void                    *Context);
>
> +ACPI_HW_DEPENDENT_RETURN_OK (
>  ACPI_STATUS
>  AcpiEvDeleteGpeBlock (
> -    ACPI_GPE_BLOCK_INFO     *GpeBlock);
> +    ACPI_GPE_BLOCK_INFO     *GpeBlock))
>
>  UINT32
>  AcpiEvGpeDispatch (
> @@ -243,9 +246,10 @@ ACPI_STATUS
>  AcpiEvGpeInitialize (
>     void);
>
> +ACPI_HW_DEPENDENT_RETURN_VOID (
>  void
>  AcpiEvUpdateGpes (
> -    ACPI_OWNER_ID           TableOwnerId);
> +    ACPI_OWNER_ID           TableOwnerId))
>
>  ACPI_STATUS
>  AcpiEvMatchGpeMethod (
> @@ -300,7 +304,8 @@ AcpiEvInitializeOpRegions (
>
>  ACPI_STATUS
>  AcpiEvAddressSpaceDispatch (
> -    ACPI_OPERAND_OBJECT    *RegionObj,
> +    ACPI_OPERAND_OBJECT     *RegionObj,
> +    ACPI_OPERAND_OBJECT     *FieldObj,
>     UINT32                  Function,
>     UINT32                  RegionOffset,
>     UINT32                  BitWidth,
> @@ -406,9 +411,9 @@ UINT32
>  AcpiEvInitializeSCI (
>     UINT32                  ProgramSCI);
>
> +ACPI_HW_DEPENDENT_RETURN_VOID (
>  void
>  AcpiEvTerminate (
> -    void);
> -
> +    void))
>
>  #endif  /* __ACEVENTS_H__  */
> diff --git a/src/acpica/source/include/acexcep.h b/src/acpica/source/include/acexcep.h
> index 0985258..7129954 100644
> --- a/src/acpica/source/include/acexcep.h
> +++ b/src/acpica/source/include/acexcep.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -164,8 +164,9 @@
>  #define AE_SAME_HANDLER                 (ACPI_STATUS) (0x0019 | AE_CODE_ENVIRONMENTAL)
>  #define AE_NO_HANDLER                   (ACPI_STATUS) (0x001A | AE_CODE_ENVIRONMENTAL)
>  #define AE_OWNER_ID_LIMIT               (ACPI_STATUS) (0x001B | AE_CODE_ENVIRONMENTAL)
> +#define AE_NOT_CONFIGURED               (ACPI_STATUS) (0x001C | AE_CODE_ENVIRONMENTAL)
>
> -#define AE_CODE_ENV_MAX                 0x001B
> +#define AE_CODE_ENV_MAX                 0x001C
>
>
>  /*
> @@ -294,7 +295,8 @@ char const   *AcpiGbl_ExceptionNames_Env[] =
>     "AE_ABORT_METHOD",
>     "AE_SAME_HANDLER",
>     "AE_NO_HANDLER",
> -    "AE_OWNER_ID_LIMIT"
> +    "AE_OWNER_ID_LIMIT",
> +    "AE_NOT_CONFIGURED"
>  };
>
>  char const   *AcpiGbl_ExceptionNames_Pgm[] =
> diff --git a/src/acpica/source/include/acglobal.h b/src/acpica/source/include/acglobal.h
> index 1d55d7e..b27ee3a 100644
> --- a/src/acpica/source/include/acglobal.h
> +++ b/src/acpica/source/include/acglobal.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -215,7 +215,18 @@ UINT32                      AcpiGbl_TraceFlags;
>  ACPI_NAME                   AcpiGbl_TraceMethodName;
>  BOOLEAN                     AcpiGbl_SystemAwakeAndRunning;
>
> -#endif
> +/*
> + * ACPI 5.0 introduces the concept of a "reduced hardware platform", meaning
> + * that the ACPI hardware is no longer required. A flag in the FADT indicates
> + * a reduced HW machine, and that flag is duplicated here for convenience.
> + */
> +BOOLEAN                     AcpiGbl_ReducedHardware;
> +
> +#endif /* DEFINE_ACPI_GLOBALS */
> +
> +/* Do not disassemble buffers to resource descriptors */
> +
> +ACPI_EXTERN UINT8       ACPI_INIT_GLOBAL (AcpiGbl_NoResourceDisassembly, FALSE);
>
>  /*****************************************************************************
>  *
> @@ -228,8 +239,12 @@ BOOLEAN                     AcpiGbl_SystemAwakeAndRunning;
>  * found in the RSDT/XSDT.
>  */
>  ACPI_EXTERN ACPI_TABLE_LIST             AcpiGbl_RootTableList;
> +
> +#if (!ACPI_REDUCED_HARDWARE)
>  ACPI_EXTERN ACPI_TABLE_FACS            *AcpiGbl_FACS;
>
> +#endif /* !ACPI_REDUCED_HARDWARE */
> +
>  /* These addresses are calculated from the FADT Event Block addresses */
>
>  ACPI_EXTERN ACPI_GENERIC_ADDRESS        AcpiGbl_XPm1aStatus;
> @@ -255,7 +270,7 @@ ACPI_EXTERN UINT8                       AcpiGbl_IntegerNybbleWidth;
>
>  /*****************************************************************************
>  *
> - * Mutual exlusion within ACPICA subsystem
> + * Mutual exclusion within ACPICA subsystem
>  *
>  ****************************************************************************/
>
> @@ -343,6 +358,7 @@ ACPI_EXTERN BOOLEAN                     AcpiGbl_AcpiHardwarePresent;
>  ACPI_EXTERN BOOLEAN                     AcpiGbl_EventsInitialized;
>  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
> @@ -440,6 +456,8 @@ ACPI_EXTERN UINT8                       AcpiGbl_SleepTypeB;
>  *
>  ****************************************************************************/
>
> +#if (!ACPI_REDUCED_HARDWARE)
> +
>  ACPI_EXTERN UINT8                       AcpiGbl_AllGpesInitialized;
>  ACPI_EXTERN ACPI_GPE_XRUPT_INFO        *AcpiGbl_GpeXruptListHead;
>  ACPI_EXTERN ACPI_GPE_BLOCK_INFO        *AcpiGbl_GpeFadtBlocks[ACPI_MAX_GPE_BLOCKS];
> @@ -448,6 +466,7 @@ ACPI_EXTERN void                       *AcpiGbl_GlobalEventHandlerContext;
>  ACPI_EXTERN ACPI_FIXED_EVENT_HANDLER    AcpiGbl_FixedEventHandlers[ACPI_NUM_FIXED_EVENTS];
>  extern      ACPI_FIXED_EVENT_INFO       AcpiGbl_FixedEventInfo[ACPI_NUM_FIXED_EVENTS];
>
> +#endif /* !ACPI_REDUCED_HARDWARE */
>
>  /*****************************************************************************
>  *
> diff --git a/src/acpica/source/include/achware.h b/src/acpica/source/include/achware.h
> index 32b9a01..5259cff 100644
> --- a/src/acpica/source/include/achware.h
> +++ b/src/acpica/source/include/achware.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -182,6 +182,49 @@ AcpiHwClearAcpiStatus (
>
>
>  /*
> + * hwsleep - sleep/wake support (Legacy sleep registers)
> + */
> +ACPI_STATUS
> +AcpiHwLegacySleep (
> +    UINT8                   SleepState,
> +    UINT8                   Flags);
> +
> +ACPI_STATUS
> +AcpiHwLegacyWakePrep (
> +    UINT8                   SleepState,
> +    UINT8                   Flags);
> +
> +ACPI_STATUS
> +AcpiHwLegacyWake (
> +    UINT8                   SleepState,
> +    UINT8                   Flags);
> +
> +
> +/*
> + * hwesleep - sleep/wake support (Extended FADT-V5 sleep registers)
> + */
> +void
> +AcpiHwExecuteSleepMethod (
> +    char                    *MethodName,
> +    UINT32                  IntegerArgument);
> +
> +ACPI_STATUS
> +AcpiHwExtendedSleep (
> +    UINT8                   SleepState,
> +    UINT8                   Flags);
> +
> +ACPI_STATUS
> +AcpiHwExtendedWakePrep (
> +    UINT8                   SleepState,
> +    UINT8                   Flags);
> +
> +ACPI_STATUS
> +AcpiHwExtendedWake (
> +    UINT8                   SleepState,
> +    UINT8                   Flags);
> +
> +
> +/*
>  * hwvalid - Port I/O with validation
>  */
>  ACPI_STATUS
> @@ -260,22 +303,4 @@ AcpiHwDerivePciId (
>     ACPI_HANDLE             PciRegion);
>
>
> -/*
> - * hwtimer - ACPI Timer prototypes
> - */
> -ACPI_STATUS
> -AcpiGetTimerResolution (
> -    UINT32                  *Resolution);
> -
> -ACPI_STATUS
> -AcpiGetTimer (
> -    UINT32                  *Ticks);
> -
> -ACPI_STATUS
> -AcpiGetTimerDuration (
> -    UINT32                  StartTicks,
> -    UINT32                  EndTicks,
> -    UINT32                  *TimeElapsed);
> -
> -
>  #endif /* __ACHWARE_H__ */
> diff --git a/src/acpica/source/include/acinterp.h b/src/acpica/source/include/acinterp.h
> index 8cb1e3b..3f98a8f 100644
> --- a/src/acpica/source/include/acinterp.h
> +++ b/src/acpica/source/include/acinterp.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -714,6 +714,10 @@ AcpiExIntegerToString (
>     char                    *Dest,
>     UINT64                  Value);
>
> +BOOLEAN
> +AcpiIsValidSpaceId (
> +    UINT8                   SpaceId);
> +
>
>  /*
>  * exregion - default OpRegion handlers
> diff --git a/src/acpica/source/include/aclocal.h b/src/acpica/source/include/aclocal.h
> index 22b5dd3..f9065af 100644
> --- a/src/acpica/source/include/aclocal.h
> +++ b/src/acpica/source/include/aclocal.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -126,7 +126,7 @@ typedef UINT32                          ACPI_MUTEX_HANDLE;
>
>  /* Total number of aml opcodes defined */
>
> -#define AML_NUM_OPCODES                 0x7F
> +#define AML_NUM_OPCODES                 0x81
>
>
>  /* Forward declarations */
> @@ -285,7 +285,6 @@ typedef struct acpi_namespace_node
>  #define ANOBJ_IS_EXTERNAL               0x08    /* iASL only: This object created via External() */
>  #define ANOBJ_METHOD_NO_RETVAL          0x10    /* iASL only: Method has no return value */
>  #define ANOBJ_METHOD_SOME_NO_RETVAL     0x20    /* iASL only: Method has at least one return value */
> -#define ANOBJ_IS_BIT_OFFSET             0x40    /* iASL only: Reference is a bit offset */
>  #define ANOBJ_IS_REFERENCED             0x80    /* iASL only: Object was referenced */
>
>
> @@ -358,12 +357,16 @@ typedef struct acpi_create_field_info
>     ACPI_NAMESPACE_NODE             *FieldNode;
>     ACPI_NAMESPACE_NODE             *RegisterNode;
>     ACPI_NAMESPACE_NODE             *DataRegisterNode;
> +    ACPI_NAMESPACE_NODE             *ConnectionNode;
> +    UINT8                           *ResourceBuffer;
>     UINT32                          BankValue;
>     UINT32                          FieldBitPosition;
>     UINT32                          FieldBitLength;
> +    UINT16                          ResourceLength;
>     UINT8                           FieldFlags;
>     UINT8                           Attribute;
>     UINT8                           FieldType;
> +    UINT8                           AccessLength;
>
>  } ACPI_CREATE_FIELD_INFO;
>
> @@ -431,7 +434,8 @@ typedef struct acpi_name_info
>
>  /*
>  * Used for ACPI_PTYPE1_FIXED, ACPI_PTYPE1_VAR, ACPI_PTYPE2,
> - * ACPI_PTYPE2_MIN, ACPI_PTYPE2_PKG_COUNT, ACPI_PTYPE2_COUNT
> + * ACPI_PTYPE2_MIN, ACPI_PTYPE2_PKG_COUNT, ACPI_PTYPE2_COUNT,
> + * ACPI_PTYPE2_FIX_VAR
>  */
>  typedef struct acpi_package_info
>  {
> @@ -492,6 +496,7 @@ typedef struct acpi_predefined_data
>  /* Defines for Flags field above */
>
>  #define ACPI_OBJECT_REPAIRED    1
> +#define ACPI_OBJECT_WRAPPED     2
>
>
>  /*
> @@ -823,6 +828,17 @@ typedef
>  ACPI_STATUS (*ACPI_EXECUTE_OP) (
>     struct acpi_walk_state          *WalkState);
>
> +/* Address Range info block */
> +
> +typedef struct acpi_address_range
> +{
> +    struct acpi_address_range   *Next;
> +    ACPI_NAMESPACE_NODE         *RegionNode;
> +    ACPI_PHYSICAL_ADDRESS       StartAddress;
> +    ACPI_PHYSICAL_ADDRESS       EndAddress;
> +
> +} ACPI_ADDRESS_RANGE;
> +
>
>  /*****************************************************************************
>  *
> @@ -847,6 +863,17 @@ typedef struct acpi_opcode_info
>
>  } ACPI_OPCODE_INFO;
>
> +/* Structure for Resource Tag information */
> +
> +typedef struct acpi_tag_info
> +{
> +    UINT32                          BitOffset;
> +    UINT32                          BitLength;
> +
> +} ACPI_TAG_INFO;
> +
> +/* Value associated with the parse object */
> +
>  typedef union acpi_parse_value
>  {
>     UINT64                          Integer;        /* Integer constant (Up to 64 bits) */
> @@ -855,6 +882,7 @@ typedef union acpi_parse_value
>     UINT8                           *Buffer;        /* buffer or string */
>     char                            *Name;          /* NULL terminated string */
>     union acpi_parse_object         *Arg;           /* arguments and contained ops */
> +    ACPI_TAG_INFO                   Tag;            /* Resource descriptor tag info  */
>
>  } ACPI_PARSE_VALUE;
>
> @@ -1185,7 +1213,7 @@ typedef struct acpi_port_info
>  #define ACPI_RESOURCE_NAME_END_DEPENDENT        0x38
>  #define ACPI_RESOURCE_NAME_IO                   0x40
>  #define ACPI_RESOURCE_NAME_FIXED_IO             0x48
> -#define ACPI_RESOURCE_NAME_RESERVED_S1          0x50
> +#define ACPI_RESOURCE_NAME_FIXED_DMA            0x50
>  #define ACPI_RESOURCE_NAME_RESERVED_S2          0x58
>  #define ACPI_RESOURCE_NAME_RESERVED_S3          0x60
>  #define ACPI_RESOURCE_NAME_RESERVED_S4          0x68
> @@ -1207,7 +1235,9 @@ typedef struct acpi_port_info
>  #define ACPI_RESOURCE_NAME_EXTENDED_IRQ         0x89
>  #define ACPI_RESOURCE_NAME_ADDRESS64            0x8A
>  #define ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64   0x8B
> -#define ACPI_RESOURCE_NAME_LARGE_MAX            0x8B
> +#define ACPI_RESOURCE_NAME_GPIO                 0x8C
> +#define ACPI_RESOURCE_NAME_SERIAL_BUS           0x8E
> +#define ACPI_RESOURCE_NAME_LARGE_MAX            0x8E
>
>
>  /*****************************************************************************
> diff --git a/src/acpica/source/include/acmacros.h b/src/acpica/source/include/acmacros.h
> index 5cc284e..5451d84 100644
> --- a/src/acpica/source/include/acmacros.h
> +++ b/src/acpica/source/include/acmacros.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -500,7 +500,6 @@
>
>  #endif /* ACPI_SIMPLE_RETURN_MACROS */
>
> -
>  /* Conditional execution */
>
>  #define ACPI_DEBUG_EXEC(a)              a
> @@ -549,6 +548,14 @@
>
>  #endif /* ACPI_DEBUG_OUTPUT */
>
> +
> +#if (!ACPI_REDUCED_HARDWARE)
> +#define ACPI_HW_OPTIONAL_FUNCTION(addr)     addr
> +#else
> +#define ACPI_HW_OPTIONAL_FUNCTION(addr)     NULL
> +#endif
> +
> +
>  /*
>  * Some code only gets executed when the debugger is built in.
>  * Note that this is entirely independent of whether the
> diff --git a/src/acpica/source/include/acnames.h b/src/acpica/source/include/acnames.h
> index 3fbc61c..bb9e2d3 100644
> --- a/src/acpica/source/include/acnames.h
> +++ b/src/acpica/source/include/acnames.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -118,6 +118,7 @@
>
>  /* Method names - these methods can appear anywhere in the namespace */
>
> +#define METHOD_NAME__SB_        "_SB_"
>  #define METHOD_NAME__HID        "_HID"
>  #define METHOD_NAME__CID        "_CID"
>  #define METHOD_NAME__UID        "_UID"
> @@ -130,16 +131,17 @@
>  #define METHOD_NAME__PRT        "_PRT"
>  #define METHOD_NAME__CRS        "_CRS"
>  #define METHOD_NAME__PRS        "_PRS"
> +#define METHOD_NAME__AEI        "_AEI"
>  #define METHOD_NAME__PRW        "_PRW"
>  #define METHOD_NAME__SRS        "_SRS"
>
>  /* Method names - these methods must appear at the namespace root */
>
> -#define METHOD_NAME__BFS        "\\_BFS"
> -#define METHOD_NAME__GTS        "\\_GTS"
> -#define METHOD_NAME__PTS        "\\_PTS"
> -#define METHOD_NAME__SST        "\\_SI._SST"
> -#define METHOD_NAME__WAK        "\\_WAK"
> +#define METHOD_PATHNAME__BFS    "\\_BFS"
> +#define METHOD_PATHNAME__GTS    "\\_GTS"
> +#define METHOD_PATHNAME__PTS    "\\_PTS"
> +#define METHOD_PATHNAME__SST    "\\_SI._SST"
> +#define METHOD_PATHNAME__WAK    "\\_WAK"
>
>  /* Definitions of the predefined namespace names  */
>
> @@ -150,7 +152,6 @@
>  #define ACPI_PREFIX_LOWER       (UINT32) 0x69706361     /* "acpi" */
>
>  #define ACPI_NS_ROOT_PATH       "\\"
> -#define ACPI_NS_SYSTEM_BUS      "_SB_"
>
>  #endif  /* __ACNAMES_H__  */
>
> diff --git a/src/acpica/source/include/acnamesp.h b/src/acpica/source/include/acnamesp.h
> index 0437a27..988631e 100644
> --- a/src/acpica/source/include/acnamesp.h
> +++ b/src/acpica/source/include/acnamesp.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -440,8 +440,9 @@ AcpiNsRepairObject (
>     ACPI_OPERAND_OBJECT     **ReturnObjectPtr);
>
>  ACPI_STATUS
> -AcpiNsRepairPackageList (
> +AcpiNsWrapWithPackage (
>     ACPI_PREDEFINED_DATA    *Data,
> +    ACPI_OPERAND_OBJECT     *OriginalObject,
>     ACPI_OPERAND_OBJECT     **ObjDescPtr);
>
>  ACPI_STATUS
> diff --git a/src/acpica/source/include/acobject.h b/src/acpica/source/include/acobject.h
> index 6a6ad33..009232a 100644
> --- a/src/acpica/source/include/acobject.h
> +++ b/src/acpica/source/include/acobject.h
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -392,6 +392,7 @@ typedef struct acpi_object_thermal_zone
>     UINT32                          BaseByteOffset;     /* Byte offset within containing object */\
>     UINT32                          Value;              /* Value to store into the Bank or Index register */\
>     UINT8                           StartFieldBitOffset;/* Bit offset within first field datum (0-63) */\
> +    UINT8                           AccessLength;       /* For serial regions/fields */
>
>
>  typedef struct acpi_object_field_common                 /* COMMON FIELD (for BUFFER, REGION, BANK, and INDEX fields) */
> @@ -407,7 +408,9 @@ typedef struct acpi_object_region_field
>  {
>     ACPI_OBJECT_COMMON_HEADER
>     ACPI_COMMON_FIELD_INFO
> +    UINT16                          ResourceLength;
>     union acpi_operand_object       *RegionObj;         /* Containing OpRegion object */
> +    UINT8                           *ResourceBuffer;    /* ResourceTemplate for serial regions/fields */
>
>  } ACPI_OBJECT_REGION_FIELD;
>
> @@ -535,6 +538,7 @@ typedef struct acpi_object_extra
>  {
>     ACPI_OBJECT_COMMON_HEADER
>     ACPI_NAMESPACE_NODE             *Method_REG;        /* _REG method for this region (if any) */
> +    ACPI_NAMESPACE_NODE             *ScopeNode;
>     void                            *RegionContext;     /* Region-specific data */
>     UINT8                           *AmlStart;
>     UINT32                          AmlLength;
> diff --git a/src/acpica/source/include/acopcode.h b/src/acpica/source/include/acopcode.h
> index 5e42cc5..a19feee 100644
> --- a/src/acpica/source/include/acopcode.h
> +++ b/src/acpica/source/include/acopcode.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -166,6 +166,7 @@
>  #define ARGP_CONCAT_OP                  ARGP_LIST3 (ARGP_TERMARG,    ARGP_TERMARG,       ARGP_TARGET)
>  #define ARGP_CONCAT_RES_OP              ARGP_LIST3 (ARGP_TERMARG,    ARGP_TERMARG,       ARGP_TARGET)
>  #define ARGP_COND_REF_OF_OP             ARGP_LIST2 (ARGP_SUPERNAME,  ARGP_SUPERNAME)
> +#define ARGP_CONNECTFIELD_OP            ARGP_LIST1 (ARGP_NAMESTRING)
>  #define ARGP_CONTINUE_OP                ARG_NONE
>  #define ARGP_COPY_OP                    ARGP_LIST2 (ARGP_TERMARG,    ARGP_SIMPLENAME)
>  #define ARGP_CREATE_BIT_FIELD_OP        ARGP_LIST3 (ARGP_TERMARG,    ARGP_TERMARG,       ARGP_NAME)
> @@ -237,6 +238,7 @@
>  #define ARGP_RETURN_OP                  ARGP_LIST1 (ARGP_TERMARG)
>  #define ARGP_REVISION_OP                ARG_NONE
>  #define ARGP_SCOPE_OP                   ARGP_LIST3 (ARGP_PKGLENGTH,  ARGP_NAME,          ARGP_TERMLIST)
> +#define ARGP_SERIALFIELD_OP             ARGP_LIST1 (ARGP_NAMESTRING)
>  #define ARGP_SHIFT_LEFT_OP              ARGP_LIST3 (ARGP_TERMARG,    ARGP_TERMARG,       ARGP_TARGET)
>  #define ARGP_SHIFT_RIGHT_OP             ARGP_LIST3 (ARGP_TERMARG,    ARGP_TERMARG,       ARGP_TARGET)
>  #define ARGP_SIGNAL_OP                  ARGP_LIST1 (ARGP_SUPERNAME)
> @@ -297,6 +299,7 @@
>  #define ARGI_CONCAT_OP                  ARGI_LIST3 (ARGI_COMPUTEDATA,ARGI_COMPUTEDATA,   ARGI_TARGETREF)
>  #define ARGI_CONCAT_RES_OP              ARGI_LIST3 (ARGI_BUFFER,     ARGI_BUFFER,        ARGI_TARGETREF)
>  #define ARGI_COND_REF_OF_OP             ARGI_LIST2 (ARGI_OBJECT_REF, ARGI_TARGETREF)
> +#define ARGI_CONNECTFIELD_OP            ARGI_INVALID_OPCODE
>  #define ARGI_CONTINUE_OP                ARGI_INVALID_OPCODE
>  #define ARGI_COPY_OP                    ARGI_LIST2 (ARGI_ANYTYPE,    ARGI_SIMPLE_TARGET)
>  #define ARGI_CREATE_BIT_FIELD_OP        ARGI_LIST3 (ARGI_BUFFER,     ARGI_INTEGER,       ARGI_REFERENCE)
> @@ -368,6 +371,7 @@
>  #define ARGI_RETURN_OP                  ARGI_INVALID_OPCODE
>  #define ARGI_REVISION_OP                ARG_NONE
>  #define ARGI_SCOPE_OP                   ARGI_INVALID_OPCODE
> +#define ARGI_SERIALFIELD_OP             ARGI_INVALID_OPCODE
>  #define ARGI_SHIFT_LEFT_OP              ARGI_LIST3 (ARGI_INTEGER,    ARGI_INTEGER,       ARGI_TARGETREF)
>  #define ARGI_SHIFT_RIGHT_OP             ARGI_LIST3 (ARGI_INTEGER,    ARGI_INTEGER,       ARGI_TARGETREF)
>  #define ARGI_SIGNAL_OP                  ARGI_LIST1 (ARGI_EVENT)
> diff --git a/src/acpica/source/include/acoutput.h b/src/acpica/source/include/acoutput.h
> index 0b319c8..12f7851 100644
> --- a/src/acpica/source/include/acoutput.h
> +++ b/src/acpica/source/include/acoutput.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -144,6 +144,7 @@
>  #define ACPI_EXAMPLE                0x00004000
>  #define ACPI_DRIVER                 0x00008000
>  #define DT_COMPILER                 0x00010000
> +#define ASL_PREPROCESSOR            0x00020000
>
>  #define ACPI_ALL_COMPONENTS         0x0001FFFF
>  #define ACPI_COMPONENT_DEFAULT      (ACPI_ALL_COMPONENTS)
> diff --git a/src/acpica/source/include/acparser.h b/src/acpica/source/include/acparser.h
> index 3ea2096..d40714e 100644
> --- a/src/acpica/source/include/acparser.h
> +++ b/src/acpica/source/include/acparser.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/include/acpi.h b/src/acpica/source/include/acpi.h
> index fcc027d..252c712 100644
> --- a/src/acpica/source/include/acpi.h
> +++ b/src/acpica/source/include/acpi.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/include/acpiosxf.h b/src/acpica/source/include/acpiosxf.h
> index 9f7fc42..d6d205f 100644
> --- a/src/acpica/source/include/acpiosxf.h
> +++ b/src/acpica/source/include/acpiosxf.h
> @@ -12,7 +12,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -185,6 +185,12 @@ AcpiOsTableOverride (
>     ACPI_TABLE_HEADER       *ExistingTable,
>     ACPI_TABLE_HEADER       **NewTable);
>
> +ACPI_STATUS
> +AcpiOsPhysicalTableOverride (
> +    ACPI_TABLE_HEADER       *ExistingTable,
> +    ACPI_PHYSICAL_ADDRESS   *NewAddress,
> +    UINT32                  *NewTableLength);
> +
>
>  /*
>  * Spinlock primitives
> @@ -375,13 +381,13 @@ AcpiOsWritePort (
>  ACPI_STATUS
>  AcpiOsReadMemory (
>     ACPI_PHYSICAL_ADDRESS   Address,
> -    UINT32                  *Value,
> +    UINT64                  *Value,
>     UINT32                  Width);
>
>  ACPI_STATUS
>  AcpiOsWriteMemory (
>     ACPI_PHYSICAL_ADDRESS   Address,
> -    UINT32                  Value,
> +    UINT64                  Value,
>     UINT32                  Width);
>
>
> diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
> index ca90112..2d4a5f8 100644
> --- a/src/acpica/source/include/acpixf.h
> +++ b/src/acpica/source/include/acpixf.h
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -120,8 +120,9 @@
>
>  /* Current ACPICA subsystem version in YYYYMMDD format */
>
> -#define ACPI_CA_VERSION                 0x20110623
> +#define ACPI_CA_VERSION                 0x20120320
>
> +#include "acconfig.h"
>  #include "actypes.h"
>  #include "actbl.h"
>
> @@ -131,6 +132,7 @@
>  extern UINT32               AcpiCurrentGpeCount;
>  extern ACPI_TABLE_FADT      AcpiGbl_FADT;
>  extern BOOLEAN              AcpiGbl_SystemAwakeAndRunning;
> +extern BOOLEAN              AcpiGbl_ReducedHardware;        /* ACPI 5.0 */
>
>  /* Runtime configuration of debug print levels */
>
> @@ -152,6 +154,34 @@ extern UINT8                AcpiGbl_DisableAutoRepair;
>
>
>  /*
> + * Hardware-reduced prototypes. All interfaces that use these macros will
> + * be configured out of the ACPICA build if the ACPI_REDUCED_HARDWARE flag
> + * is set to TRUE.
> + */
> +#if (!ACPI_REDUCED_HARDWARE)
> +#define ACPI_HW_DEPENDENT_RETURN_STATUS(Prototype) \
> +    Prototype;
> +
> +#define ACPI_HW_DEPENDENT_RETURN_OK(Prototype) \
> +    Prototype;
> +
> +#define ACPI_HW_DEPENDENT_RETURN_VOID(Prototype) \
> +    Prototype;
> +
> +#else
> +#define ACPI_HW_DEPENDENT_RETURN_STATUS(Prototype) \
> +    static ACPI_INLINE Prototype {return(AE_NOT_CONFIGURED);}
> +
> +#define ACPI_HW_DEPENDENT_RETURN_OK(Prototype) \
> +    static ACPI_INLINE Prototype {return(AE_OK);}
> +
> +#define ACPI_HW_DEPENDENT_RETURN_VOID(Prototype) \
> +    static ACPI_INLINE Prototype {}
> +
> +#endif /* !ACPI_REDUCED_HARDWARE */
> +
> +
> +/*
>  * Initialization
>  */
>  ACPI_STATUS
> @@ -180,13 +210,15 @@ AcpiTerminate (
>  /*
>  * Miscellaneous global interfaces
>  */
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiEnable (
> -    void);
> +    void))
>
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiDisable (
> -    void);
> +    void))
>
>  ACPI_STATUS
>  AcpiSubsystemStatus (
> @@ -216,6 +248,13 @@ ACPI_STATUS
>  AcpiRemoveInterface (
>     ACPI_STRING             InterfaceName);
>
> +UINT32
> +AcpiCheckAddressRange (
> +    ACPI_ADR_SPACE_TYPE     SpaceId,
> +    ACPI_PHYSICAL_ADDRESS   Address,
> +    ACPI_SIZE               Length,
> +    BOOLEAN                 Warn);
> +
>
>  /*
>  * ACPI Memory management
> @@ -385,35 +424,40 @@ AcpiInstallInitializationHandler (
>     ACPI_INIT_HANDLER       Handler,
>     UINT32                  Function);
>
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiInstallGlobalEventHandler (
>     ACPI_GBL_EVENT_HANDLER  Handler,
> -    void                    *Context);
> +    void                    *Context))
>
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiInstallFixedEventHandler (
>     UINT32                  AcpiEvent,
>     ACPI_EVENT_HANDLER      Handler,
> -    void                    *Context);
> +    void                    *Context))
>
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiRemoveFixedEventHandler (
>     UINT32                  AcpiEvent,
> -    ACPI_EVENT_HANDLER      Handler);
> +    ACPI_EVENT_HANDLER      Handler))
>
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiInstallGpeHandler (
>     ACPI_HANDLE             GpeDevice,
>     UINT32                  GpeNumber,
>     UINT32                  Type,
>     ACPI_GPE_HANDLER        Address,
> -    void                    *Context);
> +    void                    *Context))
>
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiRemoveGpeHandler (
>     ACPI_HANDLE             GpeDevice,
>     UINT32                  GpeNumber,
> -    ACPI_GPE_HANDLER        Address);
> +    ACPI_GPE_HANDLER        Address))
>
>  ACPI_STATUS
>  AcpiInstallNotifyHandler (
> @@ -454,113 +498,148 @@ AcpiInstallInterfaceHandler (
>  /*
>  * Global Lock interfaces
>  */
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiAcquireGlobalLock (
>     UINT16                  Timeout,
> -    UINT32                  *Handle);
> +    UINT32                  *Handle))
>
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiReleaseGlobalLock (
> -    UINT32                  Handle);
> +    UINT32                  Handle))
> +
> +
> +/*
> + * Interfaces to AML mutex objects
> + */
> +ACPI_STATUS
> +AcpiAcquireMutex (
> +    ACPI_HANDLE             Handle,
> +    ACPI_STRING             Pathname,
> +    UINT16                  Timeout);
> +
> +ACPI_STATUS
> +AcpiReleaseMutex (
> +    ACPI_HANDLE             Handle,
> +    ACPI_STRING             Pathname);
>
>
>  /*
>  * Fixed Event interfaces
>  */
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiEnableEvent (
>     UINT32                  Event,
> -    UINT32                  Flags);
> +    UINT32                  Flags))
>
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiDisableEvent (
>     UINT32                  Event,
> -    UINT32                  Flags);
> +    UINT32                  Flags))
>
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiClearEvent (
> -    UINT32                  Event);
> +    UINT32                  Event))
>
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiGetEventStatus (
>     UINT32                  Event,
> -    ACPI_EVENT_STATUS       *EventStatus);
> +    ACPI_EVENT_STATUS       *EventStatus))
>
>
>  /*
>  * General Purpose Event (GPE) Interfaces
>  */
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiUpdateAllGpes (
> -    void);
> +    void))
>
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiEnableGpe (
>     ACPI_HANDLE             GpeDevice,
> -    UINT32                  GpeNumber);
> +    UINT32                  GpeNumber))
>
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiDisableGpe (
>     ACPI_HANDLE             GpeDevice,
> -    UINT32                  GpeNumber);
> +    UINT32                  GpeNumber))
>
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiClearGpe (
>     ACPI_HANDLE             GpeDevice,
> -    UINT32                  GpeNumber);
> +    UINT32                  GpeNumber))
>
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiSetGpe (
>     ACPI_HANDLE             GpeDevice,
>     UINT32                  GpeNumber,
> -    UINT8                   Action);
> +    UINT8                   Action))
>
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiFinishGpe (
>     ACPI_HANDLE             GpeDevice,
> -    UINT32                  GpeNumber);
> +    UINT32                  GpeNumber))
>
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiSetupGpeForWake (
>     ACPI_HANDLE             ParentDevice,
>     ACPI_HANDLE             GpeDevice,
> -    UINT32                  GpeNumber);
> +    UINT32                  GpeNumber))
>
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiSetGpeWakeMask (
>     ACPI_HANDLE             GpeDevice,
>     UINT32                  GpeNumber,
> -    UINT8                   Action);
> +    UINT8                   Action))
>
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiGetGpeStatus (
>     ACPI_HANDLE             GpeDevice,
>     UINT32                  GpeNumber,
> -    ACPI_EVENT_STATUS       *EventStatus);
> +    ACPI_EVENT_STATUS       *EventStatus))
>
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiDisableAllGpes (
> -    void);
> +    void))
>
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiEnableAllRuntimeGpes (
> -    void);
> +    void))
>
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiGetGpeDevice (
>     UINT32                  GpeIndex,
> -    ACPI_HANDLE             *GpeDevice);
> +    ACPI_HANDLE             *GpeDevice))
>
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiInstallGpeBlock (
>     ACPI_HANDLE             GpeDevice,
>     ACPI_GENERIC_ADDRESS    *GpeBlockAddress,
>     UINT32                  RegisterCount,
> -    UINT32                  InterruptNumber);
> +    UINT32                  InterruptNumber))
>
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiRemoveGpeBlock (
> -    ACPI_HANDLE             GpeDevice);
> +    ACPI_HANDLE             GpeDevice))
>
>
>  /*
> @@ -589,6 +668,11 @@ AcpiGetPossibleResources (
>     ACPI_BUFFER             *RetBuffer);
>
>  ACPI_STATUS
> +AcpiGetEventResources (
> +    ACPI_HANDLE             DeviceHandle,
> +    ACPI_BUFFER             *RetBuffer);
> +
> +ACPI_STATUS
>  AcpiWalkResources (
>     ACPI_HANDLE                 Device,
>     char                        *Name,
> @@ -610,6 +694,12 @@ AcpiResourceToAddress64 (
>     ACPI_RESOURCE           *Resource,
>     ACPI_RESOURCE_ADDRESS64 *Out);
>
> +ACPI_STATUS
> +AcpiBufferToResource (
> +    UINT8                   *AmlBuffer,
> +    UINT16                  AmlBufferLength,
> +    ACPI_RESOURCE           **ResourcePtr);
> +
>
>  /*
>  * Hardware (ACPI device) interfaces
> @@ -628,16 +718,22 @@ AcpiWrite (
>     UINT64                  Value,
>     ACPI_GENERIC_ADDRESS    *Reg);
>
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiReadBitRegister (
>     UINT32                  RegisterId,
> -    UINT32                  *ReturnValue);
> +    UINT32                  *ReturnValue))
>
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiWriteBitRegister (
>     UINT32                  RegisterId,
> -    UINT32                  Value);
> +    UINT32                  Value))
>
> +
> +/*
> + * Sleep/Wake interfaces
> + */
>  ACPI_STATUS
>  AcpiGetSleepTypeData (
>     UINT8                   SleepState,
> @@ -650,28 +746,58 @@ AcpiEnterSleepStatePrep (
>
>  ACPI_STATUS
>  AcpiEnterSleepState (
> -    UINT8                   SleepState);
> +    UINT8                   SleepState,
> +    UINT8                   Flags);
>
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiEnterSleepStateS4bios (
> -    void);
> +    void))
> +
> +ACPI_STATUS
> +AcpiLeaveSleepStatePrep (
> +    UINT8                   SleepState,
> +    UINT8                   Flags);
>
>  ACPI_STATUS
>  AcpiLeaveSleepState (
> -    UINT8                   SleepState)
> -    ;
> +    UINT8                   SleepState);
> +
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiSetFirmwareWakingVector (
> -    UINT32                  PhysicalAddress);
> +    UINT32                  PhysicalAddress))
>
>  #if ACPI_MACHINE_WIDTH == 64
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
>  AcpiSetFirmwareWakingVector64 (
> -    UINT64                  PhysicalAddress);
> +    UINT64                  PhysicalAddress))
>  #endif
>
>
>  /*
> + * ACPI Timer interfaces
> + */
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
> +ACPI_STATUS
> +AcpiGetTimerResolution (
> +    UINT32                  *Resolution))
> +
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
> +ACPI_STATUS
> +AcpiGetTimer (
> +    UINT32                  *Ticks))
> +
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
> +ACPI_STATUS
> +AcpiGetTimerDuration (
> +    UINT32                  StartTicks,
> +    UINT32                  EndTicks,
> +    UINT32                  *TimeElapsed))
> +
> +
> +/*
>  * Error/Warning output
>  */
>  void ACPI_INTERNAL_VAR_XFACE
> diff --git a/src/acpica/source/include/acpredef.h b/src/acpica/source/include/acpredef.h
> index 5b32270..82a1cb3 100644
> --- a/src/acpica/source/include/acpredef.h
> +++ b/src/acpica/source/include/acpredef.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -166,6 +166,14 @@
>  * ACPI_PTYPE2_REV_FIXED: Revision at start, each subpackage is Fixed-length
>  *      (Used for _ART, _FPS)
>  *
> + * ACPI_PTYPE2_FIX_VAR: Each subpackage consists of some fixed-length elements
> + *      followed by an optional element
> + *      object type
> + *      count
> + *      object type
> + *      count = 0 (optional)
> + *      (Used for _DLM)
> + *
>  *****************************************************************************/
>
>  enum AcpiReturnPackageTypes
> @@ -178,7 +186,8 @@ enum AcpiReturnPackageTypes
>     ACPI_PTYPE2_PKG_COUNT   = 6,
>     ACPI_PTYPE2_FIXED       = 7,
>     ACPI_PTYPE2_MIN         = 8,
> -    ACPI_PTYPE2_REV_FIXED   = 9
> +    ACPI_PTYPE2_REV_FIXED   = 9,
> +    ACPI_PTYPE2_FIX_VAR     = 10
>  };
>
>
> @@ -231,6 +240,7 @@ static const ACPI_PREDEFINED_INFO     PredefinedNames[] =
>     {{"_AC8", 0, ACPI_RTYPE_INTEGER}},
>     {{"_AC9", 0, ACPI_RTYPE_INTEGER}},
>     {{"_ADR", 0, ACPI_RTYPE_INTEGER}},
> +    {{"_AEI", 0, ACPI_RTYPE_BUFFER}},
>     {{"_AL0", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */
>                     {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0}, 0,0}},
>
> @@ -303,6 +313,12 @@ static const ACPI_PREDEFINED_INFO     PredefinedNames[] =
>     {{"_CID", 0, ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING | ACPI_RTYPE_PACKAGE}}, /* Variable-length (Ints/Strs) */
>                     {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING, 0,0}, 0,0}},
>
> +    {{"_CLS", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (3 Int) */
> +                    {{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 3,0}, 0,0}},
> +
> +    {{"_CPC", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Ints/Bufs) */
> +                    {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER | ACPI_RTYPE_BUFFER, 0,0}, 0,0}},
> +
>     {{"_CRS", 0, ACPI_RTYPE_BUFFER}},
>     {{"_CRT", 0, ACPI_RTYPE_INTEGER}},
>     {{"_CSD", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (1 Int(n), n-1 Int) */
> @@ -311,12 +327,20 @@ static const ACPI_PREDEFINED_INFO     PredefinedNames[] =
>     {{"_CST", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (1 Int(n), n Pkg (1 Buf/3 Int) */
>                     {{{ACPI_PTYPE2_PKG_COUNT,ACPI_RTYPE_BUFFER, 1, ACPI_RTYPE_INTEGER}, 3,0}},
>
> +    {{"_CWS", 1, ACPI_RTYPE_INTEGER}},
>     {{"_DCK", 1, ACPI_RTYPE_INTEGER}},
>     {{"_DCS", 0, ACPI_RTYPE_INTEGER}},
>     {{"_DDC", 1, ACPI_RTYPE_INTEGER | ACPI_RTYPE_BUFFER}},
>     {{"_DDN", 0, ACPI_RTYPE_STRING}},
> +    {{"_DEP", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */
> +                    {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0}, 0,0}},
> +
>     {{"_DGS", 0, ACPI_RTYPE_INTEGER}},
>     {{"_DIS", 0, 0}},
> +
> +    {{"_DLM", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Pkgs) each (1 Ref, 0/1 Optional Buf/Ref) */
> +                    {{{ACPI_PTYPE2_FIX_VAR, ACPI_RTYPE_REFERENCE, 1, ACPI_RTYPE_REFERENCE | ACPI_RTYPE_BUFFER}, 0,0}},
> +
>     {{"_DMA", 0, ACPI_RTYPE_BUFFER}},
>     {{"_DOD", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Ints) */
>                     {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 0,0}, 0,0}},
> @@ -336,6 +360,8 @@ static const ACPI_PREDEFINED_INFO     PredefinedNames[] =
>     {{"_EJ3", 1, 0}},
>     {{"_EJ4", 1, 0}},
>     {{"_EJD", 0, ACPI_RTYPE_STRING}},
> +    {{"_ERR", 3, ACPI_RTYPE_INTEGER}}, /* Internal use only, used by ACPICA test suites */
> +    {{"_EVT", 1, 0}},
>     {{"_FDE", 0, ACPI_RTYPE_BUFFER}},
>     {{"_FDI", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (16 Int) */
>                     {{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 16,0}, 0,0}},
> @@ -356,14 +382,17 @@ static const ACPI_PREDEFINED_INFO     PredefinedNames[] =
>
>
>     {{"_GAI", 0, ACPI_RTYPE_INTEGER}},
> +    {{"_GCP", 0, ACPI_RTYPE_INTEGER}},
>     {{"_GHL", 0, ACPI_RTYPE_INTEGER}},
>     {{"_GLK", 0, ACPI_RTYPE_INTEGER}},
>     {{"_GPD", 0, ACPI_RTYPE_INTEGER}},
>     {{"_GPE", 0, ACPI_RTYPE_INTEGER}}, /* _GPE method, not _GPE scope */
> +    {{"_GRT", 0, ACPI_RTYPE_BUFFER}},
>     {{"_GSB", 0, ACPI_RTYPE_INTEGER}},
>     {{"_GTF", 0, ACPI_RTYPE_BUFFER}},
>     {{"_GTM", 0, ACPI_RTYPE_BUFFER}},
>     {{"_GTS", 1, 0}},
> +    {{"_GWS", 1, ACPI_RTYPE_INTEGER}},
>     {{"_HID", 0, ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING}},
>     {{"_HOT", 0, ACPI_RTYPE_INTEGER}},
>     {{"_HPP", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (4 Int) */
> @@ -378,6 +407,7 @@ static const ACPI_PREDEFINED_INFO     PredefinedNames[] =
>     {{"_HPX", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Pkgs) each (var Ints) */
>                     {{{ACPI_PTYPE2_MIN, ACPI_RTYPE_INTEGER, 5,0}, 0,0}},
>
> +    {{"_HRV", 0, ACPI_RTYPE_INTEGER}},
>     {{"_IFT", 0, ACPI_RTYPE_INTEGER}}, /* See IPMI spec */
>     {{"_INI", 0, 0}},
>     {{"_IRC", 0, 0}},
> @@ -435,6 +465,9 @@ static const ACPI_PREDEFINED_INFO     PredefinedNames[] =
>     {{"_PR3", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */
>                     {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0}, 0,0}},
>
> +    {{"_PRE", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */
> +                    {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0}, 0,0}},
> +
>     {{"_PRL", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */
>                     {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0}, 0,0}},
>
> @@ -465,6 +498,7 @@ static const ACPI_PREDEFINED_INFO     PredefinedNames[] =
>     {{"_PSD", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Pkgs) each (5 Int) with count */
>                     {{{ACPI_PTYPE2_COUNT, ACPI_RTYPE_INTEGER,0,0}, 0,0}},
>
> +    {{"_PSE", 1, 0}},
>     {{"_PSL", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */
>                     {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0}, 0,0}},
>
> @@ -531,6 +565,7 @@ static const ACPI_PREDEFINED_INFO     PredefinedNames[] =
>     {{"_SLI", 0, ACPI_RTYPE_BUFFER}},
>     {{"_SPD", 1, ACPI_RTYPE_INTEGER}},
>     {{"_SRS", 1, 0}},
> +    {{"_SRT", 1, ACPI_RTYPE_INTEGER}},
>     {{"_SRV", 0, ACPI_RTYPE_INTEGER}}, /* See IPMI spec */
>     {{"_SST", 1, 0}},
>     {{"_STA", 0, ACPI_RTYPE_INTEGER}},
> @@ -538,6 +573,7 @@ static const ACPI_PREDEFINED_INFO     PredefinedNames[] =
>     {{"_STP", 2, ACPI_RTYPE_INTEGER}},
>     {{"_STR", 0, ACPI_RTYPE_BUFFER}},
>     {{"_STV", 2, ACPI_RTYPE_INTEGER}},
> +    {{"_SUB", 0, ACPI_RTYPE_STRING}},
>     {{"_SUN", 0, ACPI_RTYPE_INTEGER}},
>     {{"_SWS", 0, ACPI_RTYPE_INTEGER}},
>     {{"_TC1", 0, ACPI_RTYPE_INTEGER}},
> diff --git a/src/acpica/source/include/acresrc.h b/src/acpica/source/include/acresrc.h
> index 05ff90c..ea14289 100644
> --- a/src/acpica/source/include/acresrc.h
> +++ b/src/acpica/source/include/acresrc.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -148,28 +148,42 @@ typedef const struct acpi_rsconvert_info
>
>  /* Resource conversion opcodes */
>
> -#define ACPI_RSC_INITGET                0
> -#define ACPI_RSC_INITSET                1
> -#define ACPI_RSC_FLAGINIT               2
> -#define ACPI_RSC_1BITFLAG               3
> -#define ACPI_RSC_2BITFLAG               4
> -#define ACPI_RSC_COUNT                  5
> -#define ACPI_RSC_COUNT16                6
> -#define ACPI_RSC_LENGTH                 7
> -#define ACPI_RSC_MOVE8                  8
> -#define ACPI_RSC_MOVE16                 9
> -#define ACPI_RSC_MOVE32                 10
> -#define ACPI_RSC_MOVE64                 11
> -#define ACPI_RSC_SET8                   12
> -#define ACPI_RSC_DATA8                  13
> -#define ACPI_RSC_ADDRESS                14
> -#define ACPI_RSC_SOURCE                 15
> -#define ACPI_RSC_SOURCEX                16
> -#define ACPI_RSC_BITMASK                17
> -#define ACPI_RSC_BITMASK16              18
> -#define ACPI_RSC_EXIT_NE                19
> -#define ACPI_RSC_EXIT_LE                20
> -#define ACPI_RSC_EXIT_EQ                21
> +typedef enum
> +{
> +    ACPI_RSC_INITGET        = 0,
> +    ACPI_RSC_INITSET,
> +    ACPI_RSC_FLAGINIT,
> +    ACPI_RSC_1BITFLAG,
> +    ACPI_RSC_2BITFLAG,
> +    ACPI_RSC_3BITFLAG,
> +    ACPI_RSC_ADDRESS,
> +    ACPI_RSC_BITMASK,
> +    ACPI_RSC_BITMASK16,
> +    ACPI_RSC_COUNT,
> +    ACPI_RSC_COUNT16,
> +    ACPI_RSC_COUNT_GPIO_PIN,
> +    ACPI_RSC_COUNT_GPIO_RES,
> +    ACPI_RSC_COUNT_GPIO_VEN,
> +    ACPI_RSC_COUNT_SERIAL_RES,
> +    ACPI_RSC_COUNT_SERIAL_VEN,
> +    ACPI_RSC_DATA8,
> +    ACPI_RSC_EXIT_EQ,
> +    ACPI_RSC_EXIT_LE,
> +    ACPI_RSC_EXIT_NE,
> +    ACPI_RSC_LENGTH,
> +    ACPI_RSC_MOVE_GPIO_PIN,
> +    ACPI_RSC_MOVE_GPIO_RES,
> +    ACPI_RSC_MOVE_SERIAL_RES,
> +    ACPI_RSC_MOVE_SERIAL_VEN,
> +    ACPI_RSC_MOVE8,
> +    ACPI_RSC_MOVE16,
> +    ACPI_RSC_MOVE32,
> +    ACPI_RSC_MOVE64,
> +    ACPI_RSC_SET8,
> +    ACPI_RSC_SOURCE,
> +    ACPI_RSC_SOURCEX
> +
> +} ACPI_RSCONVERT_OPCODES;
>
>  /* Resource Conversion sub-opcodes */
>
> @@ -182,6 +196,9 @@ typedef const struct acpi_rsconvert_info
>  #define AML_OFFSET(f)                   (UINT8) ACPI_OFFSET (AML_RESOURCE,f)
>
>
> +/*
> + * Individual entry for the resource dump tables
> + */
>  typedef const struct acpi_rsdump_info
>  {
>     UINT8                   Opcode;
> @@ -193,20 +210,27 @@ typedef const struct acpi_rsdump_info
>
>  /* Values for the Opcode field above */
>
> -#define ACPI_RSD_TITLE                  0
> -#define ACPI_RSD_LITERAL                1
> -#define ACPI_RSD_STRING                 2
> -#define ACPI_RSD_UINT8                  3
> -#define ACPI_RSD_UINT16                 4
> -#define ACPI_RSD_UINT32                 5
> -#define ACPI_RSD_UINT64                 6
> -#define ACPI_RSD_1BITFLAG               7
> -#define ACPI_RSD_2BITFLAG               8
> -#define ACPI_RSD_SHORTLIST              9
> -#define ACPI_RSD_LONGLIST               10
> -#define ACPI_RSD_DWORDLIST              11
> -#define ACPI_RSD_ADDRESS                12
> -#define ACPI_RSD_SOURCE                 13
> +typedef enum
> +{
> +    ACPI_RSD_TITLE          = 0,
> +    ACPI_RSD_1BITFLAG,
> +    ACPI_RSD_2BITFLAG,
> +    ACPI_RSD_3BITFLAG,
> +    ACPI_RSD_ADDRESS,
> +    ACPI_RSD_DWORDLIST,
> +    ACPI_RSD_LITERAL,
> +    ACPI_RSD_LONGLIST,
> +    ACPI_RSD_SHORTLIST,
> +    ACPI_RSD_SHORTLISTX,
> +    ACPI_RSD_SOURCE,
> +    ACPI_RSD_STRING,
> +    ACPI_RSD_UINT8,
> +    ACPI_RSD_UINT16,
> +    ACPI_RSD_UINT32,
> +    ACPI_RSD_UINT64,
> +    ACPI_RSD_WORDLIST
> +
> +} ACPI_RSDUMP_OPCODES;
>
>  /* restore default alignment */
>
> @@ -216,13 +240,16 @@ typedef const struct acpi_rsdump_info
>  /* Resource tables indexed by internal resource type */
>
>  extern const UINT8              AcpiGbl_AmlResourceSizes[];
> +extern const UINT8              AcpiGbl_AmlResourceSerialBusSizes[];
>  extern ACPI_RSCONVERT_INFO      *AcpiGbl_SetResourceDispatch[];
>
>  /* Resource tables indexed by raw AML resource descriptor type */
>
>  extern const UINT8              AcpiGbl_ResourceStructSizes[];
> +extern const UINT8              AcpiGbl_ResourceStructSerialBusSizes[];
>  extern ACPI_RSCONVERT_INFO      *AcpiGbl_GetResourceDispatch[];
>
> +extern ACPI_RSCONVERT_INFO      *AcpiGbl_ConvertResourceSerialBusDispatch[];
>
>  typedef struct acpi_vendor_walk_info
>  {
> @@ -281,6 +308,10 @@ AcpiRsSetSrsMethodData (
>     ACPI_NAMESPACE_NODE     *Node,
>     ACPI_BUFFER             *RetBuffer);
>
> +ACPI_STATUS
> +AcpiRsGetAeiMethodData (
> +    ACPI_NAMESPACE_NODE     *Node,
> +    ACPI_BUFFER             *RetBuffer);
>
>  /*
>  * rscalc
> @@ -421,6 +452,11 @@ extern ACPI_RSCONVERT_INFO      AcpiRsConvertAddress16[];
>  extern ACPI_RSCONVERT_INFO      AcpiRsConvertExtIrq[];
>  extern ACPI_RSCONVERT_INFO      AcpiRsConvertAddress64[];
>  extern ACPI_RSCONVERT_INFO      AcpiRsConvertExtAddress64[];
> +extern ACPI_RSCONVERT_INFO      AcpiRsConvertGpio[];
> +extern ACPI_RSCONVERT_INFO      AcpiRsConvertFixedDma[];
> +extern ACPI_RSCONVERT_INFO      AcpiRsConvertI2cSerialBus[];
> +extern ACPI_RSCONVERT_INFO      AcpiRsConvertSpiSerialBus[];
> +extern ACPI_RSCONVERT_INFO      AcpiRsConvertUartSerialBus[];
>
>  /* These resources require separate get/set tables */
>
> @@ -439,6 +475,7 @@ extern ACPI_RSCONVERT_INFO      AcpiRsSetVendor[];
>  * rsinfo
>  */
>  extern ACPI_RSDUMP_INFO         *AcpiGbl_DumpResourceDispatch[];
> +extern ACPI_RSDUMP_INFO         *AcpiGbl_DumpSerialBusDispatch[];
>
>  /*
>  * rsdump
> @@ -460,6 +497,12 @@ extern ACPI_RSDUMP_INFO         AcpiRsDumpAddress64[];
>  extern ACPI_RSDUMP_INFO         AcpiRsDumpExtAddress64[];
>  extern ACPI_RSDUMP_INFO         AcpiRsDumpExtIrq[];
>  extern ACPI_RSDUMP_INFO         AcpiRsDumpGenericReg[];
> +extern ACPI_RSDUMP_INFO         AcpiRsDumpGpio[];
> +extern ACPI_RSDUMP_INFO         AcpiRsDumpFixedDma[];
> +extern ACPI_RSDUMP_INFO         AcpiRsDumpCommonSerialBus[];
> +extern ACPI_RSDUMP_INFO         AcpiRsDumpI2cSerialBus[];
> +extern ACPI_RSDUMP_INFO         AcpiRsDumpSpiSerialBus[];
> +extern ACPI_RSDUMP_INFO         AcpiRsDumpUartSerialBus[];
>  #endif
>
>  #endif  /* __ACRESRC_H__ */
> diff --git a/src/acpica/source/include/acrestyp.h b/src/acpica/source/include/acrestyp.h
> index d85e4a9..797c1d1 100644
> --- a/src/acpica/source/include/acrestyp.h
> +++ b/src/acpica/source/include/acrestyp.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -134,11 +134,14 @@ typedef UINT32                          ACPI_RSDESC_SIZE;  /* Max Resource Descr
>  #define ACPI_WRITE_COMBINING_MEMORY     (UINT8) 0x02
>  #define ACPI_PREFETCHABLE_MEMORY        (UINT8) 0x03
>
> +/*! [Begin] no source code translation */
>  /*
>  * IO Attributes
>  * The ISA IO ranges are:     n000-n0FFh,  n400-n4FFh, n800-n8FFh, nC00-nCFFh.
>  * The non-ISA IO ranges are: n100-n3FFh,  n500-n7FFh, n900-nBFFh, nCD0-nFFFh.
>  */
> +/*! [End] no source code translation !*/
> +
>  #define ACPI_NON_ISA_ONLY_RANGES        (UINT8) 0x01
>  #define ACPI_ISA_ONLY_RANGES            (UINT8) 0x02
>  #define ACPI_ENTIRE_RANGE               (ACPI_NON_ISA_ONLY_RANGES | ACPI_ISA_ONLY_RANGES)
> @@ -154,16 +157,26 @@ typedef UINT32                          ACPI_RSDESC_SIZE;  /* Max Resource Descr
>  #define ACPI_DECODE_16                  (UINT8) 0x01    /* 16-bit IO address decode */
>
>  /*
> - * IRQ Attributes
> + * Interrupt attributes - used in multiple descriptors
>  */
> +
> +/* Triggering */
> +
>  #define ACPI_LEVEL_SENSITIVE            (UINT8) 0x00
>  #define ACPI_EDGE_SENSITIVE             (UINT8) 0x01
>
> +/* Polarity */
> +
>  #define ACPI_ACTIVE_HIGH                (UINT8) 0x00
>  #define ACPI_ACTIVE_LOW                 (UINT8) 0x01
> +#define ACPI_ACTIVE_BOTH                (UINT8) 0x02
> +
> +/* Sharing */
>
>  #define ACPI_EXCLUSIVE                  (UINT8) 0x00
>  #define ACPI_SHARED                     (UINT8) 0x01
> +#define ACPI_EXCLUSIVE_AND_WAKE         (UINT8) 0x02
> +#define ACPI_SHARED_AND_WAKE            (UINT8) 0x03
>
>  /*
>  * DMA Attributes
> @@ -200,6 +213,8 @@ typedef UINT32                          ACPI_RSDESC_SIZE;  /* Max Resource Descr
>  #define ACPI_POS_DECODE                 (UINT8) 0x00
>  #define ACPI_SUB_DECODE                 (UINT8) 0x01
>
> +/* Producer/Consumer */
> +
>  #define ACPI_PRODUCER                   (UINT8) 0x00
>  #define ACPI_CONSUMER                   (UINT8) 0x01
>
> @@ -239,7 +254,7 @@ typedef struct acpi_resource_irq
>
>  } ACPI_RESOURCE_IRQ;
>
> -typedef struct ACPI_RESOURCE_DMA
> +typedef struct acpi_resource_dma
>  {
>     UINT8                           Type;
>     UINT8                           BusMaster;
> @@ -281,6 +296,24 @@ typedef struct acpi_resource_fixed_io
>
>  } ACPI_RESOURCE_FIXED_IO;
>
> +typedef struct acpi_resource_fixed_dma
> +{
> +    UINT16                          RequestLines;
> +    UINT16                          Channels;
> +    UINT8                           Width;
> +
> +} ACPI_RESOURCE_FIXED_DMA;
> +
> +/* Values for Width field above */
> +
> +#define ACPI_DMA_WIDTH8                         0
> +#define ACPI_DMA_WIDTH16                        1
> +#define ACPI_DMA_WIDTH32                        2
> +#define ACPI_DMA_WIDTH64                        3
> +#define ACPI_DMA_WIDTH128                       4
> +#define ACPI_DMA_WIDTH256                       5
> +
> +
>  typedef struct acpi_resource_vendor
>  {
>     UINT16                          ByteLength;
> @@ -457,6 +490,184 @@ typedef struct acpi_resource_generic_register
>
>  } ACPI_RESOURCE_GENERIC_REGISTER;
>
> +typedef struct acpi_resource_gpio
> +{
> +    UINT8                           RevisionId;
> +    UINT8                           ConnectionType;
> +    UINT8                           ProducerConsumer;   /* For values, see Producer/Consumer above */
> +    UINT8                           PinConfig;
> +    UINT8                           Sharable;           /* For values, see Interrupt Attributes above */
> +    UINT8                           IoRestriction;
> +    UINT8                           Triggering;         /* For values, see Interrupt Attributes above */
> +    UINT8                           Polarity;           /* For values, see Interrupt Attributes above */
> +    UINT16                          DriveStrength;
> +    UINT16                          DebounceTimeout;
> +    UINT16                          PinTableLength;
> +    UINT16                          VendorLength;
> +    ACPI_RESOURCE_SOURCE            ResourceSource;
> +    UINT16                          *PinTable;
> +    UINT8                           *VendorData;
> +
> +} ACPI_RESOURCE_GPIO;
> +
> +/* Values for GPIO ConnectionType field above */
> +
> +#define ACPI_RESOURCE_GPIO_TYPE_INT             0
> +#define ACPI_RESOURCE_GPIO_TYPE_IO              1
> +
> +/* Values for PinConfig field above */
> +
> +#define ACPI_PIN_CONFIG_DEFAULT                 0
> +#define ACPI_PIN_CONFIG_PULLUP                  1
> +#define ACPI_PIN_CONFIG_PULLDOWN                2
> +#define ACPI_PIN_CONFIG_NOPULL                  3
> +
> +/* Values for IoRestriction field above */
> +
> +#define ACPI_IO_RESTRICT_NONE                   0
> +#define ACPI_IO_RESTRICT_INPUT                  1
> +#define ACPI_IO_RESTRICT_OUTPUT                 2
> +#define ACPI_IO_RESTRICT_NONE_PRESERVE          3
> +
> +
> +/* Common structure for I2C, SPI, and UART serial descriptors */
> +
> +#define ACPI_RESOURCE_SERIAL_COMMON \
> +    UINT8                           RevisionId; \
> +    UINT8                           Type; \
> +    UINT8                           ProducerConsumer;    /* For values, see Producer/Consumer above */\
> +    UINT8                           SlaveMode; \
> +    UINT8                           TypeRevisionId; \
> +    UINT16                          TypeDataLength; \
> +    UINT16                          VendorLength; \
> +    ACPI_RESOURCE_SOURCE            ResourceSource; \
> +    UINT8                           *VendorData;
> +
> +typedef struct acpi_resource_common_serialbus
> +{
> +    ACPI_RESOURCE_SERIAL_COMMON
> +
> +} ACPI_RESOURCE_COMMON_SERIALBUS;
> +
> +/* Values for the Type field above */
> +
> +#define ACPI_RESOURCE_SERIAL_TYPE_I2C           1
> +#define ACPI_RESOURCE_SERIAL_TYPE_SPI           2
> +#define ACPI_RESOURCE_SERIAL_TYPE_UART          3
> +
> +/* Values for SlaveMode field above */
> +
> +#define ACPI_CONTROLLER_INITIATED               0
> +#define ACPI_DEVICE_INITIATED                   1
> +
> +
> +typedef struct acpi_resource_i2c_serialbus
> +{
> +    ACPI_RESOURCE_SERIAL_COMMON
> +    UINT8                           AccessMode;
> +    UINT16                          SlaveAddress;
> +    UINT32                          ConnectionSpeed;
> +
> +} ACPI_RESOURCE_I2C_SERIALBUS;
> +
> +/* Values for AccessMode field above */
> +
> +#define ACPI_I2C_7BIT_MODE                      0
> +#define ACPI_I2C_10BIT_MODE                     1
> +
> +
> +typedef struct acpi_resource_spi_serialbus
> +{
> +    ACPI_RESOURCE_SERIAL_COMMON
> +    UINT8                           WireMode;
> +    UINT8                           DevicePolarity;
> +    UINT8                           DataBitLength;
> +    UINT8                           ClockPhase;
> +    UINT8                           ClockPolarity;
> +    UINT16                          DeviceSelection;
> +    UINT32                          ConnectionSpeed;
> +
> +} ACPI_RESOURCE_SPI_SERIALBUS;
> +
> +/* Values for WireMode field above */
> +
> +#define ACPI_SPI_4WIRE_MODE                     0
> +#define ACPI_SPI_3WIRE_MODE                     1
> +
> +/* Values for DevicePolarity field above */
> +
> +#define ACPI_SPI_ACTIVE_LOW                     0
> +#define ACPI_SPI_ACTIVE_HIGH                    1
> +
> +/* Values for ClockPhase field above */
> +
> +#define ACPI_SPI_FIRST_PHASE                    0
> +#define ACPI_SPI_SECOND_PHASE                   1
> +
> +/* Values for ClockPolarity field above */
> +
> +#define ACPI_SPI_START_LOW                      0
> +#define ACPI_SPI_START_HIGH                     1
> +
> +
> +typedef struct acpi_resource_uart_serialbus
> +{
> +    ACPI_RESOURCE_SERIAL_COMMON
> +    UINT8                           Endian;
> +    UINT8                           DataBits;
> +    UINT8                           StopBits;
> +    UINT8                           FlowControl;
> +    UINT8                           Parity;
> +    UINT8                           LinesEnabled;
> +    UINT16                          RxFifoSize;
> +    UINT16                          TxFifoSize;
> +    UINT32                          DefaultBaudRate;
> +
> +} ACPI_RESOURCE_UART_SERIALBUS;
> +
> +/* Values for Endian field above */
> +
> +#define ACPI_UART_LITTLE_ENDIAN                 0
> +#define ACPI_UART_BIG_ENDIAN                    1
> +
> +/* Values for DataBits field above */
> +
> +#define ACPI_UART_5_DATA_BITS                   0
> +#define ACPI_UART_6_DATA_BITS                   1
> +#define ACPI_UART_7_DATA_BITS                   2
> +#define ACPI_UART_8_DATA_BITS                   3
> +#define ACPI_UART_9_DATA_BITS                   4
> +
> +/* Values for StopBits field above */
> +
> +#define ACPI_UART_NO_STOP_BITS                  0
> +#define ACPI_UART_1_STOP_BIT                    1
> +#define ACPI_UART_1P5_STOP_BITS                 2
> +#define ACPI_UART_2_STOP_BITS                   3
> +
> +/* Values for FlowControl field above */
> +
> +#define ACPI_UART_FLOW_CONTROL_NONE             0
> +#define ACPI_UART_FLOW_CONTROL_HW               1
> +#define ACPI_UART_FLOW_CONTROL_XON_XOFF         2
> +
> +/* Values for Parity field above */
> +
> +#define ACPI_UART_PARITY_NONE                   0
> +#define ACPI_UART_PARITY_EVEN                   1
> +#define ACPI_UART_PARITY_ODD                    2
> +#define ACPI_UART_PARITY_MARK                   3
> +#define ACPI_UART_PARITY_SPACE                  4
> +
> +/* Values for LinesEnabled bitfield above */
> +
> +#define ACPI_UART_CARRIER_DETECT                (1<<2)
> +#define ACPI_UART_RING_INDICATOR                (1<<3)
> +#define ACPI_UART_DATA_SET_READY                (1<<4)
> +#define ACPI_UART_DATA_TERMINAL_READY           (1<<5)
> +#define ACPI_UART_CLEAR_TO_SEND                 (1<<6)
> +#define ACPI_UART_REQUEST_TO_SEND               (1<<7)
> +
>
>  /* ACPI_RESOURCE_TYPEs */
>
> @@ -477,7 +688,10 @@ typedef struct acpi_resource_generic_register
>  #define ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64   14  /* ACPI 3.0 */
>  #define ACPI_RESOURCE_TYPE_EXTENDED_IRQ         15
>  #define ACPI_RESOURCE_TYPE_GENERIC_REGISTER     16
> -#define ACPI_RESOURCE_TYPE_MAX                  16
> +#define ACPI_RESOURCE_TYPE_GPIO                 17  /* ACPI 5.0 */
> +#define ACPI_RESOURCE_TYPE_FIXED_DMA            18  /* ACPI 5.0 */
> +#define ACPI_RESOURCE_TYPE_SERIAL_BUS           19  /* ACPI 5.0 */
> +#define ACPI_RESOURCE_TYPE_MAX                  19
>
>  /* Master union for resource descriptors */
>
> @@ -488,6 +702,7 @@ typedef union acpi_resource_data
>     ACPI_RESOURCE_START_DEPENDENT           StartDpf;
>     ACPI_RESOURCE_IO                        Io;
>     ACPI_RESOURCE_FIXED_IO                  FixedIo;
> +    ACPI_RESOURCE_FIXED_DMA                 FixedDma;
>     ACPI_RESOURCE_VENDOR                    Vendor;
>     ACPI_RESOURCE_VENDOR_TYPED              VendorTyped;
>     ACPI_RESOURCE_END_TAG                   EndTag;
> @@ -500,6 +715,11 @@ typedef union acpi_resource_data
>     ACPI_RESOURCE_EXTENDED_ADDRESS64        ExtAddress64;
>     ACPI_RESOURCE_EXTENDED_IRQ              ExtendedIrq;
>     ACPI_RESOURCE_GENERIC_REGISTER          GenericReg;
> +    ACPI_RESOURCE_GPIO                      Gpio;
> +    ACPI_RESOURCE_I2C_SERIALBUS             I2cSerialBus;
> +    ACPI_RESOURCE_SPI_SERIALBUS             SpiSerialBus;
> +    ACPI_RESOURCE_UART_SERIALBUS            UartSerialBus;
> +    ACPI_RESOURCE_COMMON_SERIALBUS          CommonSerialBus;
>
>     /* Common fields */
>
> diff --git a/src/acpica/source/include/acstruct.h b/src/acpica/source/include/acstruct.h
> index e90d8ec..411b195 100644
> --- a/src/acpica/source/include/acstruct.h
> +++ b/src/acpica/source/include/acstruct.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/include/actables.h b/src/acpica/source/include/actables.h
> index d19e684..7cde562 100644
> --- a/src/acpica/source/include/actables.h
> +++ b/src/acpica/source/include/actables.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -156,6 +156,11 @@ ACPI_STATUS
>  AcpiTbVerifyTable (
>     ACPI_TABLE_DESC         *TableDesc);
>
> +ACPI_TABLE_HEADER *
> +AcpiTbTableOverride (
> +    ACPI_TABLE_HEADER       *TableHeader,
> +    ACPI_TABLE_DESC         *TableDesc);
> +
>  ACPI_STATUS
>  AcpiTbAddTable (
>     ACPI_TABLE_DESC         *TableDesc,
> diff --git a/src/acpica/source/include/actbl.h b/src/acpica/source/include/actbl.h
> index 3cec930..733715f 100644
> --- a/src/acpica/source/include/actbl.h
> +++ b/src/acpica/source/include/actbl.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -370,6 +370,8 @@ typedef struct acpi_table_fadt
>     ACPI_GENERIC_ADDRESS    XPmTimerBlock;      /* 64-bit Extended Power Mgt Timer Ctrl Reg Blk address */
>     ACPI_GENERIC_ADDRESS    XGpe0Block;         /* 64-bit Extended General Purpose Event 0 Reg Blk address */
>     ACPI_GENERIC_ADDRESS    XGpe1Block;         /* 64-bit Extended General Purpose Event 1 Reg Blk address */
> +    ACPI_GENERIC_ADDRESS    SleepControl;       /* 64-bit Sleep Control register */
> +    ACPI_GENERIC_ADDRESS    SleepStatus;        /* 64-bit Sleep Status register */
>
>  } ACPI_TABLE_FADT;
>
> @@ -381,6 +383,7 @@ typedef struct acpi_table_fadt
>  #define ACPI_FADT_NO_VGA            (1<<2)      /* 02: [V4] It is not safe to probe for VGA hardware */
>  #define ACPI_FADT_NO_MSI            (1<<3)      /* 03: [V4] Message Signaled Interrupts (MSI) must not be enabled */
>  #define ACPI_FADT_NO_ASPM           (1<<4)      /* 04: [V4] PCIe ASPM control must not be enabled */
> +#define ACPI_FADT_NO_CMOS_RTC       (1<<5)      /* 05: [V5] No CMOS real-time clock present */
>
>  /* Masks for FADT flags */
>
> @@ -404,6 +407,8 @@ typedef struct acpi_table_fadt
>  #define ACPI_FADT_REMOTE_POWER_ON   (1<<17)     /* 17: [V4] System is compatible with remote power on (ACPI 3.0) */
>  #define ACPI_FADT_APIC_CLUSTER      (1<<18)     /* 18: [V4] All local APICs must use cluster model (ACPI 3.0) */
>  #define ACPI_FADT_APIC_PHYSICAL     (1<<19)     /* 19: [V4] All local xAPICs must use physical dest mode (ACPI 3.0) */
> +#define ACPI_FADT_HW_REDUCED        (1<<20)     /* 20: [V5] ACPI hardware is not implemented (ACPI 5.0) */
> +#define ACPI_FADT_LOW_POWER_S0      (1<<21)     /* 21: [V5] S0 power savings are equal or better than S3 (ACPI 5.0) */
>
>
>  /* Values for PreferredProfile (Prefered Power Management Profiles) */
> @@ -416,9 +421,18 @@ enum AcpiPreferedPmProfiles
>     PM_WORKSTATION          = 3,
>     PM_ENTERPRISE_SERVER    = 4,
>     PM_SOHO_SERVER          = 5,
> -    PM_APPLIANCE_PC         = 6
> +    PM_APPLIANCE_PC         = 6,
> +    PM_PERFORMANCE_SERVER   = 7,
> +    PM_TABLET               = 8
>  };
>
> +/* Values for SleepStatus and SleepControl registers (V5 FADT) */
> +
> +#define ACPI_X_WAKE_STATUS          0x80
> +#define ACPI_X_SLEEP_TYPE_MASK      0x1C
> +#define ACPI_X_SLEEP_TYPE_POSITION  0x02
> +#define ACPI_X_SLEEP_ENABLE         0x20
> +
>
>  /* Reset to default packing */
>
> @@ -464,10 +478,11 @@ typedef struct acpi_table_desc
>  */
>  #include "actbl1.h"
>  #include "actbl2.h"
> +#include "actbl3.h"
>
>  /* Macros used to generate offsets to specific table fields */
>
> -#define ACPI_FADT_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_FADT, f)
> +#define ACPI_FADT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_FADT, f)
>
>  /*
>  * Sizes of the various flavors of FADT. We need to look closely
> @@ -477,12 +492,15 @@ typedef struct acpi_table_desc
>  * FADT is the bottom line as to what the version really is.
>  *
>  * For reference, the values below are as follows:
> - *     FADT V1  size: 0x74
> - *     FADT V2  size: 0x84
> - *     FADT V3+ size: 0xF4
> + *     FADT V1  size: 0x074
> + *     FADT V2  size: 0x084
> + *     FADT V3  size: 0x0F4
> + *     FADT V4  size: 0x0F4
> + *     FADT V5  size: 0x10C
>  */
>  #define ACPI_FADT_V1_SIZE       (UINT32) (ACPI_FADT_OFFSET (Flags) + 4)
>  #define ACPI_FADT_V2_SIZE       (UINT32) (ACPI_FADT_OFFSET (Reserved4[0]) + 3)
> -#define ACPI_FADT_V3_SIZE       (UINT32) (sizeof (ACPI_TABLE_FADT))
> +#define ACPI_FADT_V3_SIZE       (UINT32) (ACPI_FADT_OFFSET (SleepControl))
> +#define ACPI_FADT_V5_SIZE       (UINT32) (sizeof (ACPI_TABLE_FADT))
>
>  #endif /* __ACTBL_H__ */
> diff --git a/src/acpica/source/include/actbl1.h b/src/acpica/source/include/actbl1.h
> index a593f44..6e6edcc 100644
> --- a/src/acpica/source/include/actbl1.h
> +++ b/src/acpica/source/include/actbl1.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -324,16 +324,17 @@ typedef struct acpi_einj_entry
>
>  enum AcpiEinjActions
>  {
> -    ACPI_EINJ_BEGIN_OPERATION       = 0,
> -    ACPI_EINJ_GET_TRIGGER_TABLE     = 1,
> -    ACPI_EINJ_SET_ERROR_TYPE        = 2,
> -    ACPI_EINJ_GET_ERROR_TYPE        = 3,
> -    ACPI_EINJ_END_OPERATION         = 4,
> -    ACPI_EINJ_EXECUTE_OPERATION     = 5,
> -    ACPI_EINJ_CHECK_BUSY_STATUS     = 6,
> -    ACPI_EINJ_GET_COMMAND_STATUS    = 7,
> -    ACPI_EINJ_ACTION_RESERVED       = 8,     /* 8 and greater are reserved */
> -    ACPI_EINJ_TRIGGER_ERROR         = 0xFF   /* Except for this value */
> +    ACPI_EINJ_BEGIN_OPERATION               = 0,
> +    ACPI_EINJ_GET_TRIGGER_TABLE             = 1,
> +    ACPI_EINJ_SET_ERROR_TYPE                = 2,
> +    ACPI_EINJ_GET_ERROR_TYPE                = 3,
> +    ACPI_EINJ_END_OPERATION                 = 4,
> +    ACPI_EINJ_EXECUTE_OPERATION             = 5,
> +    ACPI_EINJ_CHECK_BUSY_STATUS             = 6,
> +    ACPI_EINJ_GET_COMMAND_STATUS            = 7,
> +    ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS   = 8,
> +    ACPI_EINJ_ACTION_RESERVED               = 9,     /* 9 and greater are reserved */
> +    ACPI_EINJ_TRIGGER_ERROR                 = 0xFF   /* Except for this value */
>  };
>
>  /* Values for Instruction field above */
> @@ -345,9 +346,33 @@ enum AcpiEinjInstructions
>     ACPI_EINJ_WRITE_REGISTER        = 2,
>     ACPI_EINJ_WRITE_REGISTER_VALUE  = 3,
>     ACPI_EINJ_NOOP                  = 4,
> -    ACPI_EINJ_INSTRUCTION_RESERVED  = 5     /* 5 and greater are reserved */
> +    ACPI_EINJ_FLUSH_CACHELINE       = 5,
> +    ACPI_EINJ_INSTRUCTION_RESERVED  = 6     /* 6 and greater are reserved */
>  };
>
> +typedef struct acpi_einj_error_type_with_addr
> +{
> +    UINT32                  ErrorType;
> +    UINT32                  VendorStructOffset;
> +    UINT32                  Flags;
> +    UINT32                  ApicId;
> +    UINT64                  Address;
> +    UINT64                  Range;
> +    UINT32                  PcieId;
> +
> +} ACPI_EINJ_ERROR_TYPE_WITH_ADDR;
> +
> +typedef struct acpi_einj_vendor
> +{
> +    UINT32                  Length;
> +    UINT32                  PcieId;
> +    UINT16                  VendorId;
> +    UINT16                  DeviceId;
> +    UINT8                   RevisionId;
> +    UINT8                   Reserved[3];
> +
> +} ACPI_EINJ_VENDOR;
> +
>
>  /* EINJ Trigger Error Action Table */
>
> @@ -385,6 +410,7 @@ enum AcpiEinjCommandStatus
>  #define ACPI_EINJ_PLATFORM_CORRECTABLE      (1<<9)
>  #define ACPI_EINJ_PLATFORM_UNCORRECTABLE    (1<<10)
>  #define ACPI_EINJ_PLATFORM_FATAL            (1<<11)
> +#define ACPI_EINJ_VENDOR_DEFINED            (1<<31)
>
>
>  /*******************************************************************************
> @@ -803,7 +829,9 @@ enum AcpiMadtType
>     ACPI_MADT_TYPE_INTERRUPT_SOURCE     = 8,
>     ACPI_MADT_TYPE_LOCAL_X2APIC         = 9,
>     ACPI_MADT_TYPE_LOCAL_X2APIC_NMI     = 10,
> -    ACPI_MADT_TYPE_RESERVED             = 11    /* 11 and greater are reserved */
> +    ACPI_MADT_TYPE_GENERIC_INTERRUPT    = 11,
> +    ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR  = 12,
> +    ACPI_MADT_TYPE_RESERVED             = 13    /* 13 and greater are reserved */
>  };
>
>
> @@ -958,11 +986,42 @@ typedef struct acpi_madt_local_x2apic_nmi
>  } ACPI_MADT_LOCAL_X2APIC_NMI;
>
>
> +/* 11: Generic Interrupt (ACPI 5.0) */
> +
> +typedef struct acpi_madt_generic_interrupt
> +{
> +    ACPI_SUBTABLE_HEADER    Header;
> +    UINT16                  Reserved;           /* Reserved - must be zero */
> +    UINT32                  GicId;
> +    UINT32                  Uid;
> +    UINT32                  Flags;
> +    UINT32                  ParkingVersion;
> +    UINT32                  PerformanceInterrupt;
> +    UINT64                  ParkedAddress;
> +    UINT64                  BaseAddress;
> +
> +} ACPI_MADT_GENERIC_INTERRUPT;
> +
> +
> +/* 12: Generic Distributor (ACPI 5.0) */
> +
> +typedef struct acpi_madt_generic_distributor
> +{
> +    ACPI_SUBTABLE_HEADER    Header;
> +    UINT16                  Reserved;           /* Reserved - must be zero */
> +    UINT32                  GicId;
> +    UINT64                  BaseAddress;
> +    UINT32                  GlobalIrqBase;
> +    UINT32                  Reserved2;          /* Reserved - must be zero */
> +
> +} ACPI_MADT_GENERIC_DISTRIBUTOR;
> +
> +
>  /*
>  * Common flags fields for MADT subtables
>  */
>
> -/* MADT Local APIC flags (LapicFlags) */
> +/* MADT Local APIC flags (LapicFlags) and GIC flags */
>
>  #define ACPI_MADT_ENABLED           (1)         /* 00: Processor is usable if set */
>
> diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h
> index a093e85..9e0c5a6 100644
> --- a/src/acpica/source/include/actbl2.h
> +++ b/src/acpica/source/include/actbl2.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/include/actypes.h b/src/acpica/source/include/actypes.h
> index 10b1e67..ff90c38 100644
> --- a/src/acpica/source/include/actypes.h
> +++ b/src/acpica/source/include/actypes.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -592,6 +592,13 @@ typedef UINT64                          ACPI_INTEGER;
>  #define ACPI_SLEEP_TYPE_INVALID         0xFF
>
>  /*
> + * Sleep/Wake flags
> + */
> +#define ACPI_NO_OPTIONAL_METHODS        0x00 /* Do not execute any optional methods */
> +#define ACPI_EXECUTE_GTS                0x01 /* For enter sleep interface */
> +#define ACPI_EXECUTE_BFS                0x02 /* For leave sleep prep interface */
> +
> +/*
>  * Standard notify values
>  */
>  #define ACPI_NOTIFY_BUS_CHECK           (UINT8) 0x00
> @@ -606,8 +613,9 @@ typedef UINT64                          ACPI_INTEGER;
>  #define ACPI_NOTIFY_DEVICE_PLD_CHECK    (UINT8) 0x09
>  #define ACPI_NOTIFY_RESERVED            (UINT8) 0x0A
>  #define ACPI_NOTIFY_LOCALITY_UPDATE     (UINT8) 0x0B
> +#define ACPI_NOTIFY_SHUTDOWN_REQUEST    (UINT8) 0x0C
>
> -#define ACPI_NOTIFY_MAX                 0x0B
> +#define ACPI_NOTIFY_MAX                 0x0C
>
>  /*
>  * Types associated with ACPI names and objects. The first group of
> @@ -773,7 +781,8 @@ typedef UINT32                          ACPI_EVENT_STATUS;
>  #define ACPI_ALL_NOTIFY                 (ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY)
>  #define ACPI_MAX_NOTIFY_HANDLER_TYPE    0x3
>
> -#define ACPI_MAX_SYS_NOTIFY             0x7f
> +#define ACPI_MAX_SYS_NOTIFY             0x7F
> +#define ACPI_MAX_DEVICE_SPECIFIC_NOTIFY 0xBF
>
>
>  /* Address Space (Operation Region) Types */
> @@ -788,8 +797,10 @@ typedef UINT8                           ACPI_ADR_SPACE_TYPE;
>  #define ACPI_ADR_SPACE_CMOS             (ACPI_ADR_SPACE_TYPE) 5
>  #define ACPI_ADR_SPACE_PCI_BAR_TARGET   (ACPI_ADR_SPACE_TYPE) 6
>  #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_NUM_PREDEFINED_REGIONS     8
> +#define ACPI_NUM_PREDEFINED_REGIONS     10
>
>  /*
>  * Special Address Spaces
> @@ -862,6 +873,20 @@ typedef UINT8                           ACPI_ADR_SPACE_TYPE;
>  #define ACPI_DISABLE_EVENT                      0
>
>
> +/* Sleep function dispatch */
> +
> +typedef ACPI_STATUS (*ACPI_SLEEP_FUNCTION) (
> +    UINT8                   SleepState,
> +    UINT8                   Flags);
> +
> +typedef struct acpi_sleep_functions
> +{
> +    ACPI_SLEEP_FUNCTION     LegacyFunction;
> +    ACPI_SLEEP_FUNCTION     ExtendedFunction;
> +
> +} ACPI_SLEEP_FUNCTIONS;
> +
> +
>  /*
>  * External ACPI object definition
>  */
> @@ -1102,6 +1127,17 @@ ACPI_STATUS (*ACPI_ADR_SPACE_HANDLER) (
>
>  #define ACPI_DEFAULT_HANDLER            NULL
>
> +/* Special Context data for GenericSerialBus/GeneralPurposeIo (ACPI 5.0) */
> +
> +typedef struct acpi_connection_info
> +{
> +    UINT8                           *Connection;
> +    UINT16                          Length;
> +    UINT8                           AccessLength;
> +
> +} ACPI_CONNECTION_INFO;
> +
> +
>  typedef
>  ACPI_STATUS (*ACPI_ADR_SPACE_SETUP) (
>     ACPI_HANDLE                     RegionHandle,
> diff --git a/src/acpica/source/include/acutils.h b/src/acpica/source/include/acutils.h
> index cef6ab3..5c21320 100644
> --- a/src/acpica/source/include/acutils.h
> +++ b/src/acpica/source/include/acutils.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -118,6 +118,7 @@
>
>
>  extern const UINT8                      AcpiGbl_ResourceAmlSizes[];
> +extern const UINT8                      AcpiGbl_ResourceAmlSerialBusSizes[];
>
>  /* Strings used by the disassembler and debugger resource dump routines */
>
> @@ -141,6 +142,22 @@ extern const char                       *AcpiGbl_SizDecode[];
>  extern const char                       *AcpiGbl_TrsDecode[];
>  extern const char                       *AcpiGbl_TtpDecode[];
>  extern const char                       *AcpiGbl_TypDecode[];
> +extern const char                       *AcpiGbl_PpcDecode[];
> +extern const char                       *AcpiGbl_IorDecode[];
> +extern const char                       *AcpiGbl_DtsDecode[];
> +extern const char                       *AcpiGbl_CtDecode[];
> +extern const char                       *AcpiGbl_SbtDecode[];
> +extern const char                       *AcpiGbl_AmDecode[];
> +extern const char                       *AcpiGbl_SmDecode[];
> +extern const char                       *AcpiGbl_WmDecode[];
> +extern const char                       *AcpiGbl_CphDecode[];
> +extern const char                       *AcpiGbl_CpoDecode[];
> +extern const char                       *AcpiGbl_DpDecode[];
> +extern const char                       *AcpiGbl_EdDecode[];
> +extern const char                       *AcpiGbl_BpbDecode[];
> +extern const char                       *AcpiGbl_SbDecode[];
> +extern const char                       *AcpiGbl_FcDecode[];
> +extern const char                       *AcpiGbl_PtDecode[];
>  #endif
>
>  /* Types for Resource descriptor entries */
> @@ -185,7 +202,6 @@ typedef struct acpi_pkg_info
>  #define DB_DWORD_DISPLAY    4
>  #define DB_QWORD_DISPLAY    8
>
> -
>  /*
>  * utglobal - Global data structures and procedures
>  */
> @@ -794,6 +810,11 @@ void
>  AcpiUtStrlwr (
>     char                    *SrcString);
>
> +int
> +AcpiUtStricmp (
> +    char                    *String1,
> +    char                    *String2);
> +
>  void
>  AcpiUtPrintString (
>     char                    *String,
> @@ -969,6 +990,31 @@ AcpiUtCreateList (
>
>  #endif /* ACPI_DBG_TRACK_ALLOCATIONS */
>
> +/*
> + * utaddress - address range check
> + */
> +ACPI_STATUS
> +AcpiUtAddAddressRange (
> +    ACPI_ADR_SPACE_TYPE     SpaceId,
> +    ACPI_PHYSICAL_ADDRESS   Address,
> +    UINT32                  Length,
> +    ACPI_NAMESPACE_NODE     *RegionNode);
> +
> +void
> +AcpiUtRemoveAddressRange (
> +    ACPI_ADR_SPACE_TYPE     SpaceId,
> +    ACPI_NAMESPACE_NODE     *RegionNode);
> +
> +UINT32
> +AcpiUtCheckAddressRange (
> +    ACPI_ADR_SPACE_TYPE     SpaceId,
> +    ACPI_PHYSICAL_ADDRESS   Address,
> +    UINT32                  Length,
> +    BOOLEAN                 Warn);
> +
> +void
> +AcpiUtDeleteAddressLists (
> +    void);
>
>  /*
>  * utxferror - various error/warning output functions
> diff --git a/src/acpica/source/include/amlcode.h b/src/acpica/source/include/amlcode.h
> index c6c62ea..2199a10 100644
> --- a/src/acpica/source/include/amlcode.h
> +++ b/src/acpica/source/include/amlcode.h
> @@ -10,7 +10,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -263,6 +263,15 @@
>
>
>  /*
> + * Opcodes for "Field" operators
> + */
> +#define AML_FIELD_OFFSET_OP         (UINT8) 0x00
> +#define AML_FIELD_ACCESS_OP         (UINT8) 0x01
> +#define AML_FIELD_CONNECTION_OP     (UINT8) 0x02        /* ACPI 5.0 */
> +#define AML_FIELD_EXT_ACCESS_OP     (UINT8) 0x03        /* ACPI 5.0 */
> +
> +
> +/*
>  * Internal opcodes
>  * Use only "Unknown" AML opcodes, don't attempt to use
>  * any valid ACPI ASCII values (A-Z, 0-9, '-')
> @@ -276,7 +285,8 @@
>  #define AML_INT_METHODCALL_OP       (UINT16) 0x0035
>  #define AML_INT_RETURN_VALUE_OP     (UINT16) 0x0036
>  #define AML_INT_EVAL_SUBTREE_OP     (UINT16) 0x0037
> -
> +#define AML_INT_CONNECTION_OP       (UINT16) 0x0038
> +#define AML_INT_EXTACCESSFIELD_OP   (UINT16) 0x0039
>
>  #define ARG_NONE                    0x0
>
> @@ -550,13 +560,16 @@ typedef enum
>  */
>  typedef enum
>  {
> -    AML_FIELD_ATTRIB_SMB_QUICK      = 0x02,
> -    AML_FIELD_ATTRIB_SMB_SEND_RCV   = 0x04,
> -    AML_FIELD_ATTRIB_SMB_BYTE       = 0x06,
> -    AML_FIELD_ATTRIB_SMB_WORD       = 0x08,
> -    AML_FIELD_ATTRIB_SMB_BLOCK      = 0x0A,
> -    AML_FIELD_ATTRIB_SMB_WORD_CALL  = 0x0C,
> -    AML_FIELD_ATTRIB_SMB_BLOCK_CALL = 0x0D
> +    AML_FIELD_ATTRIB_QUICK          = 0x02,
> +    AML_FIELD_ATTRIB_SEND_RCV       = 0x04,
> +    AML_FIELD_ATTRIB_BYTE           = 0x06,
> +    AML_FIELD_ATTRIB_WORD           = 0x08,
> +    AML_FIELD_ATTRIB_BLOCK          = 0x0A,
> +    AML_FIELD_ATTRIB_MULTIBYTE      = 0x0B,
> +    AML_FIELD_ATTRIB_WORD_CALL      = 0x0C,
> +    AML_FIELD_ATTRIB_BLOCK_CALL     = 0x0D,
> +    AML_FIELD_ATTRIB_RAW_BYTES      = 0x0E,
> +    AML_FIELD_ATTRIB_RAW_PROCESS    = 0x0F
>
>  } AML_ACCESS_ATTRIBUTE;
>
> diff --git a/src/acpica/source/include/amlresrc.h b/src/acpica/source/include/amlresrc.h
> index ba0e324..9917ba9 100644
> --- a/src/acpica/source/include/amlresrc.h
> +++ b/src/acpica/source/include/amlresrc.h
> @@ -9,7 +9,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -131,29 +131,48 @@
>  #define ACPI_RESTAG_TYPESPECIFICATTRIBUTES      "_ATT"
>  #define ACPI_RESTAG_BASEADDRESS                 "_BAS"
>  #define ACPI_RESTAG_BUSMASTER                   "_BM_"  /* Master(1), Slave(0) */
> +#define ACPI_RESTAG_DEBOUNCETIME                "_DBT"
>  #define ACPI_RESTAG_DECODE                      "_DEC"
> +#define ACPI_RESTAG_DEVICEPOLARITY              "_DPL"
>  #define ACPI_RESTAG_DMA                         "_DMA"
>  #define ACPI_RESTAG_DMATYPE                     "_TYP"  /* Compatible(0), A(1), B(2), F(3) */
> +#define ACPI_RESTAG_DRIVESTRENGTH               "_DRS"
> +#define ACPI_RESTAG_ENDIANNESS                  "_END"
> +#define ACPI_RESTAG_FLOWCONTROL                 "_FLC"
>  #define ACPI_RESTAG_GRANULARITY                 "_GRA"
>  #define ACPI_RESTAG_INTERRUPT                   "_INT"
>  #define ACPI_RESTAG_INTERRUPTLEVEL              "_LL_"  /* ActiveLo(1), ActiveHi(0) */
>  #define ACPI_RESTAG_INTERRUPTSHARE              "_SHR"  /* Shareable(1), NoShare(0) */
>  #define ACPI_RESTAG_INTERRUPTTYPE               "_HE_"  /* Edge(1), Level(0) */
> +#define ACPI_RESTAG_IORESTRICTION               "_IOR"
>  #define ACPI_RESTAG_LENGTH                      "_LEN"
> +#define ACPI_RESTAG_LINE                        "_LIN"
>  #define ACPI_RESTAG_MEMATTRIBUTES               "_MTP"  /* Memory(0), Reserved(1), ACPI(2), NVS(3) */
>  #define ACPI_RESTAG_MEMTYPE                     "_MEM"  /* NonCache(0), Cacheable(1) Cache+combine(2), Cache+prefetch(3) */
>  #define ACPI_RESTAG_MAXADDR                     "_MAX"
>  #define ACPI_RESTAG_MINADDR                     "_MIN"
>  #define ACPI_RESTAG_MAXTYPE                     "_MAF"
>  #define ACPI_RESTAG_MINTYPE                     "_MIF"
> +#define ACPI_RESTAG_MODE                        "_MOD"
> +#define ACPI_RESTAG_PARITY                      "_PAR"
> +#define ACPI_RESTAG_PHASE                       "_PHA"
> +#define ACPI_RESTAG_PIN                         "_PIN"
> +#define ACPI_RESTAG_PINCONFIG                   "_PPI"
> +#define ACPI_RESTAG_POLARITY                    "_POL"
>  #define ACPI_RESTAG_REGISTERBITOFFSET           "_RBO"
>  #define ACPI_RESTAG_REGISTERBITWIDTH            "_RBW"
>  #define ACPI_RESTAG_RANGETYPE                   "_RNG"
>  #define ACPI_RESTAG_READWRITETYPE               "_RW_"  /* ReadOnly(0), Writeable (1) */
> +#define ACPI_RESTAG_LENGTH_RX                   "_RXL"
> +#define ACPI_RESTAG_LENGTH_TX                   "_TXL"
> +#define ACPI_RESTAG_SLAVEMODE                   "_SLV"
> +#define ACPI_RESTAG_SPEED                       "_SPE"
> +#define ACPI_RESTAG_STOPBITS                    "_STB"
>  #define ACPI_RESTAG_TRANSLATION                 "_TRA"
>  #define ACPI_RESTAG_TRANSTYPE                   "_TRS"  /* Sparse(1), Dense(0) */
>  #define ACPI_RESTAG_TYPE                        "_TTP"  /* Translation(1), Static (0) */
>  #define ACPI_RESTAG_XFERTYPE                    "_SIZ"  /* 8(0), 8And16(1), 16(2) */
> +#define ACPI_RESTAG_VENDORDATA                  "_VEN"
>
>
>  /* Default sizes for "small" resource descriptors */
> @@ -164,6 +183,7 @@
>  #define ASL_RDESC_END_DEPEND_SIZE               0x00
>  #define ASL_RDESC_IO_SIZE                       0x07
>  #define ASL_RDESC_FIXED_IO_SIZE                 0x03
> +#define ASL_RDESC_FIXED_DMA_SIZE                0x05
>  #define ASL_RDESC_END_TAG_SIZE                  0x01
>
>
> @@ -286,6 +306,16 @@ typedef struct aml_resource_end_tag
>  } AML_RESOURCE_END_TAG;
>
>
> +typedef struct aml_resource_fixed_dma
> +{
> +    AML_RESOURCE_SMALL_HEADER_COMMON
> +    UINT16                          RequestLines;
> +    UINT16                          Channels;
> +    UINT8                           Width;
> +
> +} AML_RESOURCE_FIXED_DMA;
> +
> +
>  /*
>  * LARGE descriptors
>  */
> @@ -440,6 +470,130 @@ typedef struct aml_resource_generic_register
>
>  } AML_RESOURCE_GENERIC_REGISTER;
>
> +
> +/* Common descriptor for GpioInt and GpioIo (ACPI 5.0) */
> +
> +typedef struct aml_resource_gpio
> +{
> +    AML_RESOURCE_LARGE_HEADER_COMMON
> +    UINT8                           RevisionId;
> +    UINT8                           ConnectionType;
> +    UINT16                          Flags;
> +    UINT16                          IntFlags;
> +    UINT8                           PinConfig;
> +    UINT16                          DriveStrength;
> +    UINT16                          DebounceTimeout;
> +    UINT16                          PinTableOffset;
> +    UINT8                           ResSourceIndex;
> +    UINT16                          ResSourceOffset;
> +    UINT16                          VendorOffset;
> +    UINT16                          VendorLength;
> +    /*
> +     * Optional fields follow immediately:
> +     * 1) PIN list (Words)
> +     * 2) Resource Source String
> +     * 3) Vendor Data bytes
> +     */
> +
> +} AML_RESOURCE_GPIO;
> +
> +#define AML_RESOURCE_GPIO_REVISION              1       /* ACPI 5.0 */
> +
> +/* Values for ConnectionType above */
> +
> +#define AML_RESOURCE_GPIO_TYPE_INT              0
> +#define AML_RESOURCE_GPIO_TYPE_IO               1
> +#define AML_RESOURCE_MAX_GPIOTYPE               1
> +
> +
> +/* Common preamble for all serial descriptors (ACPI 5.0) */
> +
> +#define AML_RESOURCE_SERIAL_COMMON \
> +    UINT8                           RevisionId; \
> +    UINT8                           ResSourceIndex; \
> +    UINT8                           Type; \
> +    UINT8                           Flags; \
> +    UINT16                          TypeSpecificFlags; \
> +    UINT8                           TypeRevisionId; \
> +    UINT16                          TypeDataLength; \
> +
> +/* Values for the type field above */
> +
> +#define AML_RESOURCE_I2C_SERIALBUSTYPE          1
> +#define AML_RESOURCE_SPI_SERIALBUSTYPE          2
> +#define AML_RESOURCE_UART_SERIALBUSTYPE         3
> +#define AML_RESOURCE_MAX_SERIALBUSTYPE          3
> +#define AML_RESOURCE_VENDOR_SERIALBUSTYPE       192 /* Vendor defined is 0xC0-0xFF (NOT SUPPORTED) */
> +
> +typedef struct aml_resource_common_serialbus
> +{
> +    AML_RESOURCE_LARGE_HEADER_COMMON
> +    AML_RESOURCE_SERIAL_COMMON
> +
> +} AML_RESOURCE_COMMON_SERIALBUS;
> +
> +typedef struct aml_resource_i2c_serialbus
> +{
> +    AML_RESOURCE_LARGE_HEADER_COMMON
> +    AML_RESOURCE_SERIAL_COMMON
> +    UINT32                          ConnectionSpeed;
> +    UINT16                          SlaveAddress;
> +    /*
> +     * Optional fields follow immediately:
> +     * 1) Vendor Data bytes
> +     * 2) Resource Source String
> +     */
> +
> +} AML_RESOURCE_I2C_SERIALBUS;
> +
> +#define AML_RESOURCE_I2C_REVISION               1       /* ACPI 5.0 */
> +#define AML_RESOURCE_I2C_TYPE_REVISION          1       /* ACPI 5.0 */
> +#define AML_RESOURCE_I2C_MIN_DATA_LEN           6
> +
> +typedef struct aml_resource_spi_serialbus
> +{
> +    AML_RESOURCE_LARGE_HEADER_COMMON
> +    AML_RESOURCE_SERIAL_COMMON
> +    UINT32                          ConnectionSpeed;
> +    UINT8                           DataBitLength;
> +    UINT8                           ClockPhase;
> +    UINT8                           ClockPolarity;
> +    UINT16                          DeviceSelection;
> +    /*
> +     * Optional fields follow immediately:
> +     * 1) Vendor Data bytes
> +     * 2) Resource Source String
> +     */
> +
> +} AML_RESOURCE_SPI_SERIALBUS;
> +
> +#define AML_RESOURCE_SPI_REVISION               1       /* ACPI 5.0 */
> +#define AML_RESOURCE_SPI_TYPE_REVISION          1       /* ACPI 5.0 */
> +#define AML_RESOURCE_SPI_MIN_DATA_LEN           9
> +
> +
> +typedef struct aml_resource_uart_serialbus
> +{
> +    AML_RESOURCE_LARGE_HEADER_COMMON
> +    AML_RESOURCE_SERIAL_COMMON
> +    UINT32                          DefaultBaudRate;
> +    UINT16                          RxFifoSize;
> +    UINT16                          TxFifoSize;
> +    UINT8                           Parity;
> +    UINT8                           LinesEnabled;
> +    /*
> +     * Optional fields follow immediately:
> +     * 1) Vendor Data bytes
> +     * 2) Resource Source String
> +     */
> +
> +} AML_RESOURCE_UART_SERIALBUS;
> +
> +#define AML_RESOURCE_UART_REVISION              1       /* ACPI 5.0 */
> +#define AML_RESOURCE_UART_TYPE_REVISION         1       /* ACPI 5.0 */
> +#define AML_RESOURCE_UART_MIN_DATA_LEN          10
> +
> +
>  /* restore default alignment */
>
>  #pragma pack()
> @@ -462,6 +616,7 @@ typedef union aml_resource
>     AML_RESOURCE_END_DEPENDENT              EndDpf;
>     AML_RESOURCE_IO                         Io;
>     AML_RESOURCE_FIXED_IO                   FixedIo;
> +    AML_RESOURCE_FIXED_DMA                  FixedDma;
>     AML_RESOURCE_VENDOR_SMALL               VendorSmall;
>     AML_RESOURCE_END_TAG                    EndTag;
>
> @@ -477,6 +632,11 @@ typedef union aml_resource
>     AML_RESOURCE_ADDRESS64                  Address64;
>     AML_RESOURCE_EXTENDED_ADDRESS64         ExtAddress64;
>     AML_RESOURCE_EXTENDED_IRQ               ExtendedIrq;
> +    AML_RESOURCE_GPIO                       Gpio;
> +    AML_RESOURCE_I2C_SERIALBUS              I2cSerialBus;
> +    AML_RESOURCE_SPI_SERIALBUS              SpiSerialBus;
> +    AML_RESOURCE_UART_SERIALBUS             UartSerialBus;
> +    AML_RESOURCE_COMMON_SERIALBUS           CommonSerialBus;
>
>     /* Utility overlays */
>
> diff --git a/src/acpica/source/include/platform/acenv.h b/src/acpica/source/include/platform/acenv.h
> index a0bf065..342615f 100644
> --- a/src/acpica/source/include/platform/acenv.h
> +++ b/src/acpica/source/include/platform/acenv.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/include/platform/acgcc.h b/src/acpica/source/include/platform/acgcc.h
> index 8743a8f..c046f91 100644
> --- a/src/acpica/source/include/platform/acgcc.h
> +++ b/src/acpica/source/include/platform/acgcc.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/include/platform/aclinux.h b/src/acpica/source/include/platform/aclinux.h
> index f1e3008..3bc85bc 100644
> --- a/src/acpica/source/include/platform/aclinux.h
> +++ b/src/acpica/source/include/platform/aclinux.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> diff --git a/src/acpica/source/os_specific/service_layers/osunixxf.c b/src/acpica/source/os_specific/service_layers/osunixxf.c
> index 7132bdd..d5e3af9 100644
> --- a/src/acpica/source/os_specific/service_layers/osunixxf.c
> +++ b/src/acpica/source/os_specific/service_layers/osunixxf.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -286,6 +286,33 @@ AcpiOsTableOverride (
>
>  /******************************************************************************
>  *
> + * FUNCTION:    AcpiOsPhysicalTableOverride
> + *
> + * PARAMETERS:  ExistingTable       - Header of current table (probably firmware)
> + *              NewAddress          - Where new table address is returned
> + *                                    (Physical address)
> + *              NewTableLength      - Where new table length is returned
> + *
> + * RETURN:      Status, address/length of new table. Null pointer returned
> + *              if no table is available to override.
> + *
> + * DESCRIPTION: Returns AE_SUPPORT, function not used in user space.
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +AcpiOsPhysicalTableOverride (
> +    ACPI_TABLE_HEADER       *ExistingTable,
> +    ACPI_PHYSICAL_ADDRESS   *NewAddress,
> +    UINT32                  *NewTableLength)
> +{
> +
> +    return (AE_SUPPORT);
> +}
> +
> +
> +/******************************************************************************
> + *
>  * FUNCTION:    AcpiOsRedirectOutput
>  *
>  * PARAMETERS:  Destination         - An open file handle/pointer
> @@ -349,7 +376,6 @@ AcpiOsVprintf (
>     const char              *Fmt,
>     va_list                 Args)
>  {
> -    INT32                   Count = 0;
>     UINT8                   Flags;
>
>
> @@ -362,7 +388,7 @@ AcpiOsVprintf (
>         {
>             /* Output file is open, send the output there */
>
> -            Count = vfprintf (AcpiGbl_DebugFile, Fmt, Args);
> +            vfprintf (AcpiGbl_DebugFile, Fmt, Args);
>         }
>         else
>         {
> @@ -374,7 +400,7 @@ AcpiOsVprintf (
>
>     if (Flags & ACPI_DB_CONSOLE_OUTPUT)
>     {
> -        Count = vfprintf (AcpiGbl_OutputFile, Fmt, Args);
> +        vfprintf (AcpiGbl_OutputFile, Fmt, Args);
>     }
>  }
>
> @@ -1090,9 +1116,10 @@ AcpiOsWritePort (
>  *
>  * PARAMETERS:  Address             - Physical Memory Address to read
>  *              Value               - Where value is placed
> - *              Width               - Number of bits
> + *              Width               - Number of bits (8,16,32, or 64)
>  *
> - * RETURN:      Value read from physical memory address
> + * RETURN:      Value read from physical memory address. Always returned
> + *              as a 64-bit integer, regardless of the read width.
>  *
>  * DESCRIPTION: Read data from a physical memory address
>  *
> @@ -1101,7 +1128,7 @@ AcpiOsWritePort (
>  ACPI_STATUS
>  AcpiOsReadMemory (
>     ACPI_PHYSICAL_ADDRESS   Address,
> -    UINT32                  *Value,
> +    UINT64                  *Value,
>     UINT32                  Width)
>  {
>
> @@ -1110,6 +1137,7 @@ AcpiOsReadMemory (
>     case 8:
>     case 16:
>     case 32:
> +    case 64:
>         *Value = 0;
>         break;
>
> @@ -1126,7 +1154,7 @@ AcpiOsReadMemory (
>  *
>  * PARAMETERS:  Address             - Physical Memory Address to write
>  *              Value               - Value to write
> - *              Width               - Number of bits
> + *              Width               - Number of bits (8,16,32, or 64)
>  *
>  * RETURN:      None
>  *
> @@ -1137,7 +1165,7 @@ AcpiOsReadMemory (
>  ACPI_STATUS
>  AcpiOsWriteMemory (
>     ACPI_PHYSICAL_ADDRESS   Address,
> -    UINT32                  Value,
> +    UINT64                  Value,
>     UINT32                  Width)
>  {
>
> @@ -1244,8 +1272,11 @@ ACPI_THREAD_ID
>  AcpiOsGetThreadId (
>     void)
>  {
> +    pthread_t               thread;
> +
>
> -    return (ACPI_CAST_PTHREAD_T (pthread_self()));
> +    thread = pthread_self();
> +    return (ACPI_CAST_PTHREAD_T (thread));
>  }
>
>
> diff --git a/src/acpica/source/tools/acpiexec/aecommon.h b/src/acpica/source/tools/acpiexec/aecommon.h
> index 1352c6b..01615b1 100644
> --- a/src/acpica/source/tools/acpiexec/aecommon.h
> +++ b/src/acpica/source/tools/acpiexec/aecommon.h
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -138,6 +138,8 @@
>  extern FILE                 *AcpiGbl_DebugFile;
>  extern BOOLEAN              AcpiGbl_IgnoreErrors;
>  extern UINT8                AcpiGbl_RegionFillValue;
> +extern UINT8                AcpiGbl_UseHwReducedFadt;
> +extern BOOLEAN              AcpiGbl_DisplayRegionAccess;
>
>  /* Check for unexpected exceptions */
>
> diff --git a/src/acpica/source/tools/acpiexec/aehandlers.c b/src/acpica/source/tools/acpiexec/aehandlers.c
> index 6c0d245..ccf6966 100644
> --- a/src/acpica/source/tools/acpiexec/aehandlers.c
> +++ b/src/acpica/source/tools/acpiexec/aehandlers.c
> @@ -8,7 +8,7 @@
>  *
>  * 1. Copyright Notice
>  *
> - * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
> + * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
>  * All rights reserved.
>  *
>  * 2. License
> @@ -163,12 +163,22 @@ AeInterfaceHandler (
>     ACPI_STRING             InterfaceName,
>     UINT32                  Supported);
>
> +#if (!ACPI_REDUCED_HARDWARE)
>  static UINT32
>  AeEventHandler (
>     void                    *Context);
>
> +static char                *TableEvents[] =
> +{
> +    "LOAD",
> +    "UNLOAD",
> +    "UNKNOWN"
> +};
> +#endif /* !ACPI_REDUCED_HARDWARE */
> +
>  static UINT32               SigintCount = 0;
>  static AE_DEBUG_REGIONS     AeRegions;
> +BOOLEAN                     AcpiGbl_DisplayRegionAccess = FALSE;
>
>
>  /*
> @@ -180,27 +190,35 @@ static AE_DEBUG_REGIONS     AeRegions;
>  * declares that they must "always be available". Cannot override the
>  * DataTable region handler either -- needed for test execution.
>  */
> -static ACPI_ADR_SPACE_TYPE  DefaultSpaceIdList[] = {
> +static ACPI_ADR_SPACE_TYPE  DefaultSpaceIdList[] =
> +{
>     ACPI_ADR_SPACE_SYSTEM_MEMORY,
>     ACPI_ADR_SPACE_SYSTEM_IO
>  };
>
>  /*
> - * We will install handlers for some of the various address space IDs
> + * We will install handlers for some of the various address space IDs.
>  * Test one user-defined address space (used by aslts.)
>  */
> -#define ACPI_ADR_SPACE_USER_DEFINED     0x80
> +#define ACPI_ADR_SPACE_USER_DEFINED1        0x80
> +#define ACPI_ADR_SPACE_USER_DEFINED2        0xE4
>
> -static ACPI_ADR_SPACE_TYPE  SpaceIdList[] = {
> +static ACPI_ADR_SPACE_TYPE  SpaceIdList[] =
> +{
>     ACPI_ADR_SPACE_EC,
>     ACPI_ADR_SPACE_SMBUS,
> +    ACPI_ADR_SPACE_GSBUS,
> +    ACPI_ADR_SPACE_GPIO,
>     ACPI_ADR_SPACE_PCI_BAR_TARGET,
>     ACPI_ADR_SPACE_IPMI,
>     ACPI_ADR_SPACE_FIXED_HARDWARE,
> -    ACPI_ADR_SPACE_USER_DEFINED
> +    ACPI_ADR_SPACE_USER_DEFINED1,
> +    ACPI_ADR_SPACE_USER_DEFINED2
>  };
>
>
> +static ACPI_CONNECTION_INFO   AeMyContext;
> +
>  /******************************************************************************
>  *
>  * FUNCTION:    AeCtrlCHandler
> @@ -449,20 +467,15 @@ AeExceptionHandler (
>  *
>  *****************************************************************************/
>
> -static char                *TableEvents[] =
> -{
> -    "LOAD",
> -    "UNLOAD",
> -    "UNKNOWN"
> -};
> -
>  static ACPI_STATUS
>  AeTableHandler (
>     UINT32                  Event,
>     void                    *Table,
>     void                    *Context)
>  {
> +#if (!ACPI_REDUCED_HARDWARE)
>     ACPI_STATUS             Status;
> +#endif /* !ACPI_REDUCED_HARDWARE */
>
>
>     if (Event > ACPI_NUM_TABLE_EVENTS)
> @@ -470,6 +483,7 @@ AeTableHandler (
>         Event = ACPI_NUM_TABLE_EVENTS;
>     }
>
> +#if (!ACPI_REDUCED_HARDWARE)
>     /* Enable any GPEs associated with newly-loaded GPE methods */
>
>     Status = AcpiUpdateAllGpes ();
> @@ -477,6 +491,8 @@ AeTableHandler (
>
>     printf ("[AcpiExec] Table Event %s, [%4.4s] %p\n",
>         TableEvents[Event], ((ACPI_TABLE_HEADER *) Table)->Signature, Table);
> +#endif /* !ACPI_REDUCED_HARDWARE */
> +
>     return (AE_OK);
>  }
>
> @@ -589,6 +605,7 @@ AeInterfaceHandler (
>  }
>
>
> +#if (!ACPI_REDUCED_HARDWARE)
>  /******************************************************************************
>  *
>  * FUNCTION:    AeEventHandler
> @@ -603,6 +620,7 @@ AeEventHandler (
>  {
>     return (0);
>  }
> +#endif /* !ACPI_REDUCED_HARDWARE */
>
>
>  /******************************************************************************
> @@ -653,13 +671,21 @@ AeInstallLateHandlers (
>     UINT32                  i;
>
>
> -    /* Install some fixed event handlers */
> +#if (!ACPI_REDUCED_HARDWARE)
> +    if (!AcpiGbl_ReducedHardware)
> +    {
> +        /* Install some fixed event handlers */
> +
> +        Status = AcpiInstallFixedEventHandler (ACPI_EVENT_GLOBAL, AeEventHandler, NULL);
> +        AE_CHECK_OK (AcpiInstallFixedEventHandler, Status);
>
> -    Status = AcpiInstallFixedEventHandler (ACPI_EVENT_GLOBAL, AeEventHandler, NULL);
> -    AE_CHECK_OK (AcpiInstallFixedEventHandler, Status);
> +        Status = AcpiInstallFixedEventHandler (ACPI_EVENT_RTC, AeEventHandler, NULL);
> +        AE_CHECK_OK (AcpiInstallFixedEventHandler, Status);
> +    }
> +#endif /* !ACPI_REDUCED_HARDWARE */
>
> -    Status = AcpiInstallFixedEventHandler (ACPI_EVENT_RTC, AeEventHandler, NULL);
> -    AE_CHECK_OK (AcpiInstallFixedEventHandler, Status);
> +    AeMyContext.Connection = NULL;
> +    AeMyContext.AccessLength = 0xA5;
>
>     /*
>      * Install handlers for some of the "device driver" address spaces
> @@ -670,7 +696,8 @@ AeInstallLateHandlers (
>         /* Install handler at the root object */
>
>         Status = AcpiInstallAddressSpaceHandler (AcpiGbl_RootNode,
> -                        SpaceIdList[i], AeRegionHandler, AeRegionInit, NULL);
> +                    SpaceIdList[i], AeRegionHandler,
> +                    AeRegionInit, &AeMyContext);
>         if (ACPI_FAILURE (Status))
>         {
>             ACPI_EXCEPTION ((AE_INFO, Status,
> @@ -810,7 +837,7 @@ AeInstallEarlyHandlers (
>
>         Status = AcpiInstallAddressSpaceHandler (AcpiGbl_RootNode,
>                     DefaultSpaceIdList[i], AeRegionHandler,
> -                    AeRegionInit, NULL);
> +                    AeRegionInit, &AeMyContext);
>         if (ACPI_FAILURE (Status))
>         {
>             ACPI_EXCEPTION ((AE_INFO, Status,
> @@ -865,6 +892,10 @@ AeRegionHandler (
>     UINT32                  ByteWidth;
>     UINT32                  i;
>     UINT8                   SpaceId;
> +    ACPI_CONNECTION_INFO    *MyContext;
> +    UINT32                  Value1;
> +    UINT32                  Value2;
> +    ACPI_RESOURCE           *Resource;
>
>
>     ACPI_FUNCTION_NAME (AeRegionHandler);
> @@ -877,8 +908,30 @@ AeRegionHandler (
>         return (AE_OK);
>     }
>
> +    /* Check that we actually got back our context parameter */
> +
> +    if (HandlerContext != &AeMyContext)
> +    {
> +        printf ("Region handler received incorrect context %p, should be %p\n",
> +            HandlerContext, &AeMyContext);
> +    }
> +
> +    MyContext = ACPI_CAST_PTR (ACPI_CONNECTION_INFO, HandlerContext);
> +
> +    /*
> +     * Find the region's address space and length before searching
> +     * the linked list.
> +     */
> +    BaseAddress = RegionObject->Region.Address;
> +    Length = (ACPI_SIZE) RegionObject->Region.Length;
> +    SpaceId = RegionObject->Region.SpaceId;
> +
> +    ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, "Operation Region request on %s at 0x%X\n",
> +            AcpiUtGetRegionName (RegionObject->Region.SpaceId),
> +            (UINT32) Address));
> +
>     /*
> -     * Region support can be disabled with the -r option.
> +     * Region support can be disabled with the -do option.
>      * We use this to support dynamically loaded tables where we pass a valid
>      * address to the AML.
>      */
> @@ -894,34 +947,52 @@ AeRegionHandler (
>         goto DoFunction;
>     }
>
> -    /*
> -     * Find the region's address space and length before searching
> -     * the linked list.
> -     */
> -    BaseAddress = RegionObject->Region.Address;
> -    Length = (ACPI_SIZE) RegionObject->Region.Length;
> -    SpaceId = RegionObject->Region.SpaceId;
> -
> -    ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, "Operation Region request on %s at 0x%X\n",
> -            AcpiUtGetRegionName (RegionObject->Region.SpaceId),
> -            (UINT32) Address));
> -
>     switch (SpaceId)
>     {
>     case ACPI_ADR_SPACE_SYSTEM_IO:
>         /*
>          * For I/O space, exercise the port validation
> +         * Note: ReadPort currently always returns all ones, length=BitLength
>          */
>         switch (Function & ACPI_IO_MASK)
>         {
>         case ACPI_READ:
> -            Status = AcpiHwReadPort (Address, (UINT32 *) Value, BitWidth);
> -            AE_CHECK_OK (AcpiHwReadPort, Status);
> +
> +            if (BitWidth == 64)
> +            {
> +                /* Split the 64-bit request into two 32-bit requests */
> +
> +                Status = AcpiHwReadPort (Address, &Value1, 32);
> +                AE_CHECK_OK (AcpiHwReadPort, Status);
> +                Status = AcpiHwReadPort (Address+4, &Value2, 32);
> +                AE_CHECK_OK (AcpiHwReadPort, Status);
> +
> +                *Value = Value1 | ((UINT64) Value2 << 32);
> +            }
> +            else
> +            {
> +                Status = AcpiHwReadPort (Address, &Value1, BitWidth);
> +                AE_CHECK_OK (AcpiHwReadPort, Status);
> +                *Value = (UINT64) Value1;
> +            }
>             break;
>
>         case ACPI_WRITE:
> -            Status = AcpiHwWritePort (Address, (UINT32) *Value, BitWidth);
> -            AE_CHECK_OK (AcpiHwWritePort, Status);
> +
> +            if (BitWidth == 64)
> +            {
> +                /* Split the 64-bit request into two 32-bit requests */
> +
> +                Status = AcpiHwWritePort (Address, ACPI_LODWORD (*Value), 32);
> +                AE_CHECK_OK (AcpiHwWritePort, Status);
> +                Status = AcpiHwWritePort (Address+4, ACPI_HIDWORD (*Value), 32);
> +                AE_CHECK_OK (AcpiHwWritePort, Status);
> +            }
> +            else
> +            {
> +                Status = AcpiHwWritePort (Address, (UINT32) *Value, BitWidth);
> +                AE_CHECK_OK (AcpiHwWritePort, Status);
> +            }
>             break;
>
>         default:
> @@ -937,8 +1008,12 @@ AeRegionHandler (
>         /* Now go ahead and simulate the hardware */
>         break;
>
> -
> +    /*
> +     * SMBus and GenericSerialBus support the various bidirectional
> +     * protocols.
> +     */
>     case ACPI_ADR_SPACE_SMBUS:
> +    case ACPI_ADR_SPACE_GSBUS:  /* ACPI 5.0 */
>
>         Length = 0;
>
> @@ -947,22 +1022,31 @@ AeRegionHandler (
>         case ACPI_READ:
>             switch (Function >> 16)
>             {
> -            case AML_FIELD_ATTRIB_SMB_QUICK:
> -            case AML_FIELD_ATTRIB_SMB_SEND_RCV:
> -            case AML_FIELD_ATTRIB_SMB_BYTE:
> +            case AML_FIELD_ATTRIB_QUICK:
> +            case AML_FIELD_ATTRIB_SEND_RCV:
> +            case AML_FIELD_ATTRIB_BYTE:
>                 Length = 1;
>                 break;
>
> -            case AML_FIELD_ATTRIB_SMB_WORD:
> -            case AML_FIELD_ATTRIB_SMB_WORD_CALL:
> +            case AML_FIELD_ATTRIB_WORD:
> +            case AML_FIELD_ATTRIB_WORD_CALL:
>                 Length = 2;
>                 break;
>
> -            case AML_FIELD_ATTRIB_SMB_BLOCK:
> -            case AML_FIELD_ATTRIB_SMB_BLOCK_CALL:
> +            case AML_FIELD_ATTRIB_BLOCK:
> +            case AML_FIELD_ATTRIB_BLOCK_CALL:
>                 Length = 32;
>                 break;
>
> +
> +            case AML_FIELD_ATTRIB_MULTIBYTE:
> +            case AML_FIELD_ATTRIB_RAW_BYTES:
> +            case AML_FIELD_ATTRIB_RAW_PROCESS:
> +
> +                /* (-2) for status/length */
> +                Length = MyContext->AccessLength - 2;
> +                break;
> +
>             default:
>                 break;
>             }
> @@ -971,22 +1055,30 @@ AeRegionHandler (
>         case ACPI_WRITE:
>             switch (Function >> 16)
>             {
> -            case AML_FIELD_ATTRIB_SMB_QUICK:
> -            case AML_FIELD_ATTRIB_SMB_SEND_RCV:
> -            case AML_FIELD_ATTRIB_SMB_BYTE:
> -            case AML_FIELD_ATTRIB_SMB_WORD:
> -            case AML_FIELD_ATTRIB_SMB_BLOCK:
> +            case AML_FIELD_ATTRIB_QUICK:
> +            case AML_FIELD_ATTRIB_SEND_RCV:
> +            case AML_FIELD_ATTRIB_BYTE:
> +            case AML_FIELD_ATTRIB_WORD:
> +            case AML_FIELD_ATTRIB_BLOCK:
>                 Length = 0;
>                 break;
>
> -            case AML_FIELD_ATTRIB_SMB_WORD_CALL:
> +            case AML_FIELD_ATTRIB_WORD_CALL:
>                 Length = 2;
>                 break;
>
> -            case AML_FIELD_ATTRIB_SMB_BLOCK_CALL:
> +            case AML_FIELD_ATTRIB_BLOCK_CALL:
>                 Length = 32;
>                 break;
>
> +            case AML_FIELD_ATTRIB_MULTIBYTE:
> +            case AML_FIELD_ATTRIB_RAW_BYTES:
> +            case AML_FIELD_ATTRIB_RAW_PROCESS:
> +
> +                /* (-2) for status/length */
> +                Length = MyContext->AccessLength - 2;
> +                break;
> +
>             default:
>                 break;
>             }
> @@ -996,6 +1088,31 @@ AeRegionHandler (
>             break;
>         }
>
> +        if (AcpiGbl_DisplayRegionAccess)
> +        {
> +            AcpiOsPrintf ("AcpiExec: %s "
> +                "%s: Attr %X Addr %.4X BaseAddr %.4X Len %.2X Width %X BufLen %X",
> +                AcpiUtGetRegionName (SpaceId),
> +                (Function & ACPI_IO_MASK) ? "Write" : "Read ",
> +                (UINT32) (Function >> 16),
> +                (UINT32) Address, (UINT32) BaseAddress,
> +                Length, BitWidth, Buffer[1]);
> +
> +            /* GenericSerialBus has a Connection() parameter */
> +
> +            if (SpaceId == ACPI_ADR_SPACE_GSBUS)
> +            {
> +                Status = AcpiBufferToResource (MyContext->Connection,
> +                    MyContext->Length, &Resource);
> +
> +                AcpiOsPrintf (" [AccLen %.2X Conn %p]",
> +                    MyContext->AccessLength, MyContext->Connection);
> +            }
> +            AcpiOsPrintf ("\n");
> +        }
> +
> +        /* Setup the return buffer. Note: ASLTS depends on these fill values */
> +
>         for (i = 0; i < Length; i++)
>         {
>             Buffer[i+2] = (UINT8) (0xA0 + i);
> @@ -1008,10 +1125,14 @@ AeRegionHandler (
>
>     case ACPI_ADR_SPACE_IPMI: /* ACPI 4.0 */
>
> -        AcpiOsPrintf ("AcpiExec: Received IPMI request: "
> -            "Address %X BaseAddress %X Length %X Width %X BufferLength %u\n",
> -            (UINT32) Address, (UINT32) BaseAddress,
> -            Length, BitWidth, Buffer[1]);
> +        if (AcpiGbl_DisplayRegionAccess)
> +        {
> +            AcpiOsPrintf ("AcpiExec: IPMI "
> +                "%s: Attr %X Addr %.4X BaseAddr %.4X Len %.2X Width %X BufLen %X\n",
> +                (Function & ACPI_IO_MASK) ? "Write" : "Read ",
> +                (UINT32) (Function >> 16), (UINT32) Address, (UINT32) BaseAddress,
> +                Length, BitWidth, Buffer[1]);
> +        }
>
>         /*
>          * Regardless of a READ or WRITE, this handler is passed a 66-byte
> @@ -1022,9 +1143,16 @@ AeRegionHandler (
>         Buffer[0] = 0;       /* Status byte */
>         Buffer[1] = 64;      /* Return buffer data length */
>         Buffer[2] = 0;       /* Completion code */
> -        Buffer[3] = 0x34;    /* Power measurement */
> -        Buffer[4] = 0x12;    /* Power measurement */
> -        Buffer[65] = 0xEE;   /* last buffer byte */
> +        Buffer[3] = 0;       /* Reserved */
> +
> +        /*
> +         * Fill the 66-byte buffer with the return data.
> +         * Note: ASLTS depends on these fill values.
> +         */
> +        for (i = 4; i < 66; i++)
> +        {
> +            Buffer[i] = (UINT8) (i);
> +        }
>         return (AE_OK);
>
>     default:
> @@ -1135,7 +1263,6 @@ AeRegionHandler (
>                     ((UINT64) Address - (UINT64) RegionElement->Address));
>
>  DoFunction:
> -
>     /*
>      * Perform a read or write to the buffer space
>      */
> @@ -1159,6 +1286,37 @@ DoFunction:
>         return (AE_BAD_PARAMETER);
>     }
>
> +    if (AcpiGbl_DisplayRegionAccess)
> +    {
> +        switch (SpaceId)
> +        {
> +        case ACPI_ADR_SPACE_SYSTEM_MEMORY:
> +
> +            AcpiOsPrintf ("AcpiExec: SystemMemory "
> +                "%s: Val %.8X Addr %.4X Width %X [REGION: BaseAddr %.4X Len %.2X]\n",
> +                (Function & ACPI_IO_MASK) ? "Write" : "Read ",
> +                (UINT32) *Value, (UINT32) Address, BitWidth, (UINT32) BaseAddress, Length);
> +            break;
> +
> +        case ACPI_ADR_SPACE_GPIO:   /* ACPI 5.0 */
> +
> +            /* This space is required to always be ByteAcc */
> +
> +            Status = AcpiBufferToResource (MyContext->Connection,
> +                MyContext->Length, &Resource);
> +
> +            AcpiOsPrintf ("AcpiExec: GeneralPurposeIo "
> +                "%s: Val %.8X Addr %.4X BaseAddr %.4X Len %.2X Width %X AccLen %.2X Conn %p\n",
> +                (Function & ACPI_IO_MASK) ? "Write" : "Read ", (UINT32) *Value,
> +                (UINT32) Address, (UINT32) BaseAddress, Length, BitWidth,
> +                MyContext->AccessLength, MyContext->Connection);
> +            break;
> +
> +        default:
> +            break;
> +        }
> +    }
> +
>     return (AE_OK);
>  }
>
> --
> 1.7.9.5
>
Acked-by: Keng-Yu Lin <kengyu at canonical.com>




More information about the fwts-devel mailing list