Message ID | 1334188256-26566-3-git-send-email-colin.king@canonical.com |
---|---|
State | Accepted |
Headers | show |
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>
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 --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); }