diff mbox

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

Message ID 1334188256-26566-3-git-send-email-colin.king@canonical.com
State Accepted
Headers show

Commit Message

Colin Ian King April 11, 2012, 11:50 p.m. UTC
From: Colin Ian King <colin.king@canonical.com>

Signed-off-by: Colin Ian King <colin.king@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(-)

Comments

Keng-Yu Lin April 12, 2012, 2:25 a.m. UTC | #1
On Thu, Apr 12, 2012 at 7:50 AM, Colin King <colin.king@canonical.com> wrote:
> From: Colin Ian King <colin.king@canonical.com>
>
> Signed-off-by: Colin Ian King <colin.king@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@canonical.com>
Alex Hung April 12, 2012, 7:31 a.m. UTC | #2
On 04/12/2012 07:50 AM, Colin King wrote:
> From: Colin Ian King<colin.king@canonical.com>
>
> Signed-off-by: Colin Ian King<colin.king@canonical.com>
> ---

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

Patch

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);
 }