Message ID | 20191019143101.27675-1-colin.king@canonical.com |
---|---|
State | Accepted |
Headers | show |
Series | ACPICA: Update to version 20191018 | expand |
On 2019-10-19 8:31 a.m., Colin King wrote: > From: Colin Ian King <colin.king@canonical.com> > > Changes in this release of ACPICA are detailed at the following > link on the ACPICA developer mailing list: > > https://lists.acpica.org/hyperkitty/list/devel@acpica.org/thread/2ZK7W5OOHYHRJGKDURZ7YHXKDQL7WTLO/ > > Signed-off-by: Colin Ian King <colin.king@canonical.com> > --- > src/acpica/source/common/acgetline.c | 2 +- > src/acpica/source/common/adisasm.c | 1 - > src/acpica/source/common/adwalk.c | 4 +- > src/acpica/source/common/dmtables.c | 4 +- > src/acpica/source/common/dmtbdump1.c | 22 ++- > src/acpica/source/common/dmtbdump2.c | 24 +++- > src/acpica/source/common/dmtbdump3.c | 6 +- > src/acpica/source/compiler/aslanalyze.c | 2 +- > src/acpica/source/compiler/aslbtypes.c | 1 - > src/acpica/source/compiler/aslkeywords.y | 2 +- > src/acpica/source/compiler/aslload.c | 13 +- > src/acpica/source/compiler/aslmessages.c | 5 +- > src/acpica/source/compiler/aslmessages.h | 3 + > src/acpica/source/compiler/aslmethod.c | 20 ++- > src/acpica/source/compiler/aslnamesp.c | 4 + > src/acpica/source/compiler/aslprepkg.c | 2 +- > src/acpica/source/compiler/aslresource.c | 2 +- > src/acpica/source/compiler/aslrestype2.c | 3 - > src/acpica/source/compiler/aslrestype2s.c | 1 - > src/acpica/source/compiler/aslutils.c | 2 +- > src/acpica/source/compiler/cvdisasm.c | 9 +- > src/acpica/source/compiler/cvparser.c | 1 - > src/acpica/source/compiler/dtcompile.c | 15 ++- > src/acpica/source/compiler/dtcompiler.h | 39 ++++-- > src/acpica/source/compiler/dtcompilerparser.l | 20 ++- > src/acpica/source/compiler/dtcompilerparser.y | 50 ++++--- > src/acpica/source/compiler/dtfield.c | 127 ++++++++++++++++++ > src/acpica/source/compiler/dtio.c | 98 -------------- > src/acpica/source/compiler/dttable2.c | 23 +++- > .../source/components/debugger/dbconvert.c | 4 + > .../source/components/debugger/dbdisply.c | 2 - > .../source/components/debugger/dbfileio.c | 2 +- > .../source/components/debugger/dbinput.c | 36 ++++- > .../source/components/debugger/dbmethod.c | 5 + > .../source/components/debugger/dbnames.c | 122 +++++++++++++++++ > .../source/components/debugger/dbobject.c | 1 - > .../components/disassembler/dmdeferred.c | 4 + > .../source/components/disassembler/dmresrc.c | 1 - > .../source/components/disassembler/dmwalk.c | 1 - > .../source/components/dispatcher/dscontrol.c | 2 +- > .../source/components/dispatcher/dsfield.c | 9 +- > .../source/components/events/evgpeblk.c | 6 +- > .../source/components/events/evgpeinit.c | 3 - > src/acpica/source/components/events/evmisc.c | 17 ++- > .../source/components/events/evregion.c | 4 +- > .../source/components/events/evrgnini.c | 1 - > .../source/components/hardware/hwxfsleep.c | 4 + > .../source/components/namespace/nsconvert.c | 2 +- > .../source/components/namespace/nsdump.c | 6 +- > .../source/components/namespace/nsxfname.c | 2 +- > .../source/components/parser/psobject.c | 6 +- > .../source/components/resources/rscreate.c | 4 + > src/acpica/source/components/tables/tbdata.c | 4 + > .../source/components/tables/tbxfload.c | 49 ++++++- > .../source/components/utilities/utbuffer.c | 62 +++++---- > .../source/components/utilities/utids.c | 3 +- > .../source/components/utilities/uttrack.c | 2 +- > src/acpica/source/include/acdebug.h | 4 + > src/acpica/source/include/acpixf.h | 10 +- > src/acpica/source/include/acstruct.h | 13 ++ > src/acpica/source/include/acutils.h | 9 +- > src/acpica/source/tools/acpiexec/aecommon.h | 5 +- > src/acpica/source/tools/acpiexec/aehandlers.c | 13 +- > src/acpica/source/tools/acpiexec/aeinitfile.c | 81 +++++++---- > 64 files changed, 717 insertions(+), 287 deletions(-) > > diff --git a/src/acpica/source/common/acgetline.c b/src/acpica/source/common/acgetline.c > index 702d046b..3865914b 100644 > --- a/src/acpica/source/common/acgetline.c > +++ b/src/acpica/source/common/acgetline.c > @@ -532,7 +532,7 @@ AcpiOsGetLine ( > * Ignore the various keys like insert/delete/home/end, etc. > * But we must eat the final character of the ESC sequence. > */ > - InputChar = getchar (); > + (void) getchar (); > continue; > > default: > diff --git a/src/acpica/source/common/adisasm.c b/src/acpica/source/common/adisasm.c > index c73208f6..22a85009 100644 > --- a/src/acpica/source/common/adisasm.c > +++ b/src/acpica/source/common/adisasm.c > @@ -746,7 +746,6 @@ AdDoExternalFileList ( > { > ExternalFileList = ExternalFileList->Next; > GlobalStatus = AE_TYPE; > - Status = AE_OK; > continue; > } > > diff --git a/src/acpica/source/common/adwalk.c b/src/acpica/source/common/adwalk.c > index 6da2e8ec..1996c965 100644 > --- a/src/acpica/source/common/adwalk.c > +++ b/src/acpica/source/common/adwalk.c > @@ -601,7 +601,9 @@ AcpiDmFindOrphanDescending ( > return (AE_OK); > } > > +#ifdef ACPI_UNDER_DEVELOPMENT > OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); > +#endif > > switch (Op->Common.AmlOpcode) > { > @@ -1100,7 +1102,7 @@ AcpiDmCommonDescendingOp ( > /* Switch/Case conversion */ > > Status = AcpiDmProcessSwitch (Op); > - return (AE_OK); > + return (Status); > } > > > diff --git a/src/acpica/source/common/dmtables.c b/src/acpica/source/common/dmtables.c > index a2dbea62..e5536ecf 100644 > --- a/src/acpica/source/common/dmtables.c > +++ b/src/acpica/source/common/dmtables.c > @@ -327,7 +327,7 @@ AdCreateTableHeader ( > * makes it easier to rename the disassembled ASL file if needed. > */ > AcpiOsPrintf ( > - "DefinitionBlock (\"\", \"%4.4s\", %hu, \"%.6s\", \"%.8s\", 0x%8.8X)\n", > + "DefinitionBlock (\"\", \"%4.4s\", %u, \"%.6s\", \"%.8s\", 0x%8.8X)\n", > Table->Signature, Table->Revision, > Table->OemId, Table->OemTableId, Table->OemRevision); > } > @@ -601,7 +601,7 @@ AdParseTable ( > fprintf (stderr, > "Parsing Deferred Opcodes (Methods/Buffers/Packages/Regions)\n"); > > - Status = AcpiDmParseDeferredOps (AcpiGbl_ParseOpRoot); > + (void) AcpiDmParseDeferredOps (AcpiGbl_ParseOpRoot); > fprintf (stderr, "\n"); > > /* Process Resource Templates */ > diff --git a/src/acpica/source/common/dmtbdump1.c b/src/acpica/source/common/dmtbdump1.c > index c363ac8d..9061ea11 100644 > --- a/src/acpica/source/common/dmtbdump1.c > +++ b/src/acpica/source/common/dmtbdump1.c > @@ -474,7 +474,6 @@ AcpiDmDumpCsrt ( > { > return; > } > - SubSubOffset += InfoLength; > } > > /* Point to next sub-subtable */ > @@ -1401,7 +1400,6 @@ AcpiDmDumpHmat ( > while (Offset < Table->Length) > { > AcpiOsPrintf ("\n"); > - SubtableOffset = 0; > > /* Dump HMAT structure header */ > > @@ -1484,6 +1482,11 @@ AcpiDmDumpHmat ( > Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, > ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), > 4, AcpiDmTableInfoHmat1a); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > SubtableOffset += 4; > } > > @@ -1500,6 +1503,11 @@ AcpiDmDumpHmat ( > Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, > ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), > 4, AcpiDmTableInfoHmat1b); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > SubtableOffset += 4; > } > > @@ -1519,6 +1527,11 @@ AcpiDmDumpHmat ( > Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, > ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), > 2, AcpiDmTableInfoHmat1c); > + if (ACPI_FAILURE(Status)) > + { > + return; > + } > + > SubtableOffset += 2; > } > } > @@ -1542,6 +1555,11 @@ AcpiDmDumpHmat ( > Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, > ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), > 2, AcpiDmTableInfoHmat2a); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > SubtableOffset += 2; > } > break; > diff --git a/src/acpica/source/common/dmtbdump2.c b/src/acpica/source/common/dmtbdump2.c > index 418b6ec0..e350d23c 100644 > --- a/src/acpica/source/common/dmtbdump2.c > +++ b/src/acpica/source/common/dmtbdump2.c > @@ -187,6 +187,7 @@ AcpiDmDumpIort ( > ACPI_DMTABLE_INFO *InfoTable; > char *String; > UINT32 i; > + UINT32 MappingByteLength; > > > /* Main table */ > @@ -314,6 +315,11 @@ AcpiDmDumpIort ( > Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, > ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), > 4, AcpiDmTableInfoIort0a); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > NodeOffset += 4; > } > } > @@ -325,8 +331,10 @@ AcpiDmDumpIort ( > > if (IortNode->Length > NodeOffset) > { > + MappingByteLength = > + IortNode->MappingCount * sizeof (ACPI_IORT_ID_MAPPING); > Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, > - Table, IortNode->Length - NodeOffset, > + Table, IortNode->Length - NodeOffset - MappingByteLength, > AcpiDmTableInfoIort1a); > if (ACPI_FAILURE (Status)) > { > @@ -410,7 +418,6 @@ NextSubtable: > /* Point to next node subtable */ > > Offset += IortNode->Length; > - IortNode = ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, IortNode->Length); > } > } > > @@ -1211,7 +1218,6 @@ AcpiDmDumpNfit ( > /* Has a variable number of 32-bit values at the end */ > > InfoTable = AcpiDmTableInfoNfit2; > - Interleave = ACPI_CAST_PTR (ACPI_NFIT_INTERLEAVE, Subtable); > FieldOffset = sizeof (ACPI_NFIT_INTERLEAVE); > break; > > @@ -1236,7 +1242,6 @@ AcpiDmDumpNfit ( > /* Has a variable number of 64-bit addresses at the end */ > > InfoTable = AcpiDmTableInfoNfit6; > - Hint = ACPI_CAST_PTR (ACPI_NFIT_FLUSH_ADDRESS, Subtable); > FieldOffset = sizeof (ACPI_NFIT_FLUSH_ADDRESS) - sizeof (UINT64); > break; > > @@ -1273,6 +1278,7 @@ AcpiDmDumpNfit ( > { > case ACPI_NFIT_TYPE_INTERLEAVE: > > + Interleave = ACPI_CAST_PTR (ACPI_NFIT_INTERLEAVE, Subtable); > for (i = 0; i < Interleave->LineCount; i++) > { > Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset, > @@ -1308,6 +1314,7 @@ AcpiDmDumpNfit ( > > case ACPI_NFIT_TYPE_FLUSH_ADDRESS: > > + Hint = ACPI_CAST_PTR (ACPI_NFIT_FLUSH_ADDRESS, Subtable); > for (i = 0; i < Hint->HintCount; i++) > { > Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset, > @@ -1806,6 +1813,11 @@ AcpiDmDumpPptt ( > Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, > ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, SubtableOffset), > 4, AcpiDmTableInfoPptt0a); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > SubtableOffset += 4; > } > break; > @@ -2063,6 +2075,10 @@ AcpiDmDumpSdev ( > Status = AcpiDmDumpTable (Table->Length, 0, > ACPI_ADD_PTR (UINT8, Pcie, VendorDataOffset), > VendorDataLength, AcpiDmTableInfoSdev1b); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > } > break; > > diff --git a/src/acpica/source/common/dmtbdump3.c b/src/acpica/source/common/dmtbdump3.c > index 0b9863cc..561a0032 100644 > --- a/src/acpica/source/common/dmtbdump3.c > +++ b/src/acpica/source/common/dmtbdump3.c > @@ -410,7 +410,7 @@ AcpiDmDumpStao ( > Namepath = ACPI_ADD_PTR (char, Table, Offset); > StringLength = strlen (Namepath) + 1; > > - AcpiDmLineHeader (Offset, StringLength, "Namestring"); > + AcpiDmLineHeader (Offset, StringLength, "Namepath"); > AcpiOsPrintf ("\"%s\"\n", Namepath); > > /* Point to next namepath */ > @@ -526,7 +526,7 @@ AcpiDmDumpTpm2Rev3 ( > { > case ACPI_TPM23_ACPI_START_METHOD: > > - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > + (void) AcpiDmDumpTable (Table->Length, Offset, Subtable, > Table->Length - Offset, AcpiDmTableInfoTpm23a); > break; > > @@ -591,7 +591,7 @@ AcpiDmDumpTpm2 ( > Offset += sizeof (ACPI_TPM2_TRAILER); > > AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Table->Length, Offset, ArmSubtable, > + (void) AcpiDmDumpTable (Table->Length, Offset, ArmSubtable, > Table->Length - Offset, AcpiDmTableInfoTpm211); > break; > > diff --git a/src/acpica/source/compiler/aslanalyze.c b/src/acpica/source/compiler/aslanalyze.c > index 58da5e2e..0482775f 100644 > --- a/src/acpica/source/compiler/aslanalyze.c > +++ b/src/acpica/source/compiler/aslanalyze.c > @@ -569,7 +569,7 @@ ApCheckForGpeNameConflict ( > > /* Need a null-terminated string version of NameSeg */ > > - ACPI_MOVE_32_TO_32 (Name, &Op->Asl.NameSeg); > + ACPI_MOVE_32_TO_32 (Name, Op->Asl.NameSeg); > Name[ACPI_NAMESEG_SIZE] = 0; > > /* > diff --git a/src/acpica/source/compiler/aslbtypes.c b/src/acpica/source/compiler/aslbtypes.c > index ed607f3b..d7caea53 100644 > --- a/src/acpica/source/compiler/aslbtypes.c > +++ b/src/acpica/source/compiler/aslbtypes.c > @@ -474,7 +474,6 @@ AnFormatBtype ( > strcat (Buffer, "|"); > } > > - First = FALSE; > strcat (Buffer, "Resource"); > } > } > diff --git a/src/acpica/source/compiler/aslkeywords.y b/src/acpica/source/compiler/aslkeywords.y > index a19b6425..a505dc02 100644 > --- a/src/acpica/source/compiler/aslkeywords.y > +++ b/src/acpica/source/compiler/aslkeywords.y > @@ -202,7 +202,7 @@ AddressKeyword > ; > > AddressSpaceKeyword > - : ByteConst {$$ = UtCheckIntegerRange ($1, 0x0A, 0xFF);} > + : ByteConst {$$ = UtCheckIntegerRange ($1, ACPI_NUM_PREDEFINED_REGIONS, 0xFF);} > | RegionSpaceKeyword {} > ; > > diff --git a/src/acpica/source/compiler/aslload.c b/src/acpica/source/compiler/aslload.c > index d918c0cc..db6c2d41 100644 > --- a/src/acpica/source/compiler/aslload.c > +++ b/src/acpica/source/compiler/aslload.c > @@ -526,13 +526,12 @@ LdNamespace1Begin ( > > case AML_INT_CONNECTION_OP: > > - > if (Op->Asl.Child->Asl.AmlOpcode != AML_INT_NAMEPATH_OP) > { > break; > } > - Arg = Op->Asl.Child; > > + Arg = Op->Asl.Child; > Status = AcpiNsLookup (WalkState->ScopeInfo, Arg->Asl.ExternalName, > ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, > WalkState, &Node); > @@ -541,15 +540,6 @@ LdNamespace1Begin ( > break; > } > > - if (Node->Type == ACPI_TYPE_BUFFER) > - { > - Arg->Asl.Node = Node; > - > - Arg = Node->Op->Asl.Child; /* Get namepath */ > - Arg = Arg->Asl.Next; /* Get actual buffer */ > - Arg = Arg->Asl.Child; /* Buffer length */ > - Arg = Arg->Asl.Next; /* RAW_DATA buffer */ > - } > break; > > default: > @@ -576,7 +566,6 @@ LdNamespace1Begin ( > * These opcodes are guaranteed to have a parent. > * Examine the parent opcode. > */ > - Status = AE_OK; > ParentOp = Op->Asl.Parent; > OpInfo = AcpiPsGetOpcodeInfo (ParentOp->Asl.AmlOpcode); > > diff --git a/src/acpica/source/compiler/aslmessages.c b/src/acpica/source/compiler/aslmessages.c > index 8dd989ca..d1329352 100644 > --- a/src/acpica/source/compiler/aslmessages.c > +++ b/src/acpica/source/compiler/aslmessages.c > @@ -387,7 +387,10 @@ const char *AslTableCompilerMsgs [] = > /* ASL_MSG_UNKNOWN_LABEL */ "Label is undefined", > /* ASL_MSG_UNKNOWN_SUBTABLE */ "Unknown subtable type", > /* ASL_MSG_UNKNOWN_TABLE */ "Unknown ACPI table signature", > -/* ASL_MSG_ZERO_VALUE */ "Value must be non-zero" > +/* ASL_MSG_ZERO_VALUE */ "Value must be non-zero", > +/* ASL_MSG_INVALID_LABEL */ "Invalid field label detected", > +/* ASL_MSG_BUFFER_LIST */ "Invalid buffer initializer list", > +/* ASL_MSG_ENTRY_LIST */ "Invalid entry initializer list" > }; > > /* Preprocessor */ > diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h > index 55473fb5..47e5bf43 100644 > --- a/src/acpica/source/compiler/aslmessages.h > +++ b/src/acpica/source/compiler/aslmessages.h > @@ -387,6 +387,9 @@ typedef enum > ASL_MSG_UNKNOWN_SUBTABLE, > ASL_MSG_UNKNOWN_TABLE, > ASL_MSG_ZERO_VALUE, > + ASL_MSG_INVALID_LABEL, > + ASL_MSG_BUFFER_LIST, > + ASL_MSG_ENTRY_LIST, > > /* These messages are used by the Preprocessor only */ > > diff --git a/src/acpica/source/compiler/aslmethod.c b/src/acpica/source/compiler/aslmethod.c > index 98884bc3..667eaaaf 100644 > --- a/src/acpica/source/compiler/aslmethod.c > +++ b/src/acpica/source/compiler/aslmethod.c > @@ -199,6 +199,8 @@ MtMethodAnalysisWalkBegin ( > ACPI_PARSE_OBJECT *NextType; > ACPI_PARSE_OBJECT *NextParamType; > UINT8 ActualArgs = 0; > + BOOLEAN HidExists; > + BOOLEAN AdrExists; > > > /* Build cross-reference output file if requested */ > @@ -535,12 +537,26 @@ MtMethodAnalysisWalkBegin ( > > case PARSEOP_DEVICE: > > - if (!ApFindNameInDeviceTree (METHOD_NAME__HID, Op) && > - !ApFindNameInDeviceTree (METHOD_NAME__ADR, Op)) > + /* Check usage of _HID and _ADR objects */ > + > + HidExists = ApFindNameInDeviceTree (METHOD_NAME__HID, Op); > + AdrExists = ApFindNameInDeviceTree (METHOD_NAME__ADR, Op); > + > + if (!HidExists && !AdrExists) > { > AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > "Device object requires a _HID or _ADR in same scope"); > } > + else if (HidExists && AdrExists) > + { > + /* > + * According to the ACPI spec, "A device object must contain > + * either an _HID object or an _ADR object, but should not contain > + * both". > + */ > + AslError (ASL_WARNING, ASL_MSG_MULTIPLE_TYPES, Op, > + "Device object requires either a _HID or _ADR, but not both"); > + } > break; > > case PARSEOP_EVENT: > diff --git a/src/acpica/source/compiler/aslnamesp.c b/src/acpica/source/compiler/aslnamesp.c > index b5af0cb3..e38e397f 100644 > --- a/src/acpica/source/compiler/aslnamesp.c > +++ b/src/acpica/source/compiler/aslnamesp.c > @@ -234,6 +234,10 @@ NsDisplayNamespace ( > Status = AcpiNsWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, > ACPI_UINT32_MAX, FALSE, NsDoOneNamespaceObject, NULL, > NULL, NULL); > + if (ACPI_FAILURE (Status)) > + { > + return (Status); > + } > > /* Print the full pathname for each namespace node */ > > diff --git a/src/acpica/source/compiler/aslprepkg.c b/src/acpica/source/compiler/aslprepkg.c > index f55bb5e8..77969430 100644 > --- a/src/acpica/source/compiler/aslprepkg.c > +++ b/src/acpica/source/compiler/aslprepkg.c > @@ -458,7 +458,7 @@ ApCheckPackage ( > > for (i = 0; i < Package->RetInfo4.Count1; ++i) > { > - Status = ApCheckObjectType (Predefined->Info.Name, Op, > + ApCheckObjectType (Predefined->Info.Name, Op, > Package->RetInfo4.ObjectType1, i); > Op = Op->Asl.Next; > } > diff --git a/src/acpica/source/compiler/aslresource.c b/src/acpica/source/compiler/aslresource.c > index 82de5109..57b6440f 100644 > --- a/src/acpica/source/compiler/aslresource.c > +++ b/src/acpica/source/compiler/aslresource.c > @@ -1226,7 +1226,7 @@ RsDoResourceTemplate ( > BufferOp->Asl.AmlOpcode = AML_RAW_DATA_CHAIN; > BufferOp->Asl.AmlOpcodeLength = 0; > BufferOp->Asl.AmlLength = CurrentByteOffset; > - BufferOp->Asl.Value.Buffer = (UINT8 *) HeadRnode.Next; > + BufferOp->Asl.Value.Buffer = ACPI_CAST_PTR (UINT8, HeadRnode.Next); > BufferOp->Asl.CompileFlags |= OP_IS_RESOURCE_DATA; > UtSetParseOpName (BufferOp); > > diff --git a/src/acpica/source/compiler/aslrestype2.c b/src/acpica/source/compiler/aslrestype2.c > index 5b8f026e..0652272f 100644 > --- a/src/acpica/source/compiler/aslrestype2.c > +++ b/src/acpica/source/compiler/aslrestype2.c > @@ -487,10 +487,7 @@ RsDoInterruptDescriptor ( > > if (StringLength && ResSourceString) > { > - > strcpy ((char *) Rover, (char *) ResSourceString); > - Rover = ACPI_ADD_PTR ( > - AML_RESOURCE, &(Rover->ByteItem), StringLength); > > Descriptor->ExtendedIrq.ResourceLength = (UINT16) > (Descriptor->ExtendedIrq.ResourceLength + StringLength); > diff --git a/src/acpica/source/compiler/aslrestype2s.c b/src/acpica/source/compiler/aslrestype2s.c > index 23085054..410ff2b2 100644 > --- a/src/acpica/source/compiler/aslrestype2s.c > +++ b/src/acpica/source/compiler/aslrestype2s.c > @@ -674,7 +674,6 @@ RsDoGpioIoDescriptor ( > ResSourceLength = RsGetStringDataLength (InitializerOp); > VendorLength = RsGetBufferDataLength (InitializerOp); > InterruptLength = RsGetInterruptDataLength (InitializerOp, 10); > - PinList = InterruptList; > > DescriptorSize = ACPI_AML_SIZE_LARGE (AML_RESOURCE_GPIO) + > ResSourceLength + VendorLength + InterruptLength; > diff --git a/src/acpica/source/compiler/aslutils.c b/src/acpica/source/compiler/aslutils.c > index ed2948d0..0faaec03 100644 > --- a/src/acpica/source/compiler/aslutils.c > +++ b/src/acpica/source/compiler/aslutils.c > @@ -223,7 +223,7 @@ UtQueryForOverwrite ( > char *Pathname) > { > struct stat StatInfo; > - int InChar = 0x34; > + int InChar; > > > if (!stat (Pathname, &StatInfo)) > diff --git a/src/acpica/source/compiler/cvdisasm.c b/src/acpica/source/compiler/cvdisasm.c > index 3ff636f8..5396b3c3 100644 > --- a/src/acpica/source/compiler/cvdisasm.c > +++ b/src/acpica/source/compiler/cvdisasm.c > @@ -544,8 +544,11 @@ CvSwitchFiles( > Current = Current->Parent; > } > > - /* Redirect output to Op->Common.CvFilename */ > + if (FNode) > + { > + /* Redirect output to Op->Common.CvFilename */ > > - AcpiOsRedirectOutput (FNode->File); > - AcpiGbl_CurrentFilename = FNode->Filename; > + AcpiOsRedirectOutput (FNode->File); > + AcpiGbl_CurrentFilename = FNode->Filename; > + } > } > diff --git a/src/acpica/source/compiler/cvparser.c b/src/acpica/source/compiler/cvparser.c > index ca970b50..9a2f0f9c 100644 > --- a/src/acpica/source/compiler/cvparser.c > +++ b/src/acpica/source/compiler/cvparser.c > @@ -912,7 +912,6 @@ CvCaptureCommentsOnly ( > > /* Not a valid comment option. Revert the AML */ > > - Aml -= 2; > goto DefBlock; > > } /* End switch statement */ > diff --git a/src/acpica/source/compiler/dtcompile.c b/src/acpica/source/compiler/dtcompile.c > index b6a144fe..bdd8c1b7 100644 > --- a/src/acpica/source/compiler/dtcompile.c > +++ b/src/acpica/source/compiler/dtcompile.c > @@ -276,7 +276,10 @@ DtDoCompile ( > > if (ACPI_FAILURE (Status)) > { > - FileNode->ParserErrorDetected = TRUE; > + if (FileNode) > + { > + FileNode->ParserErrorDetected = TRUE; > + } > > /* TBD: temporary error message. Msgs should come from function above */ > > @@ -572,7 +575,7 @@ DtCompileTable ( > ACPI_STATUS Status = AE_OK; > > > - if (!Field) > + if (!Field || !Info) > { > return (AE_BAD_PARAMETER); > } > @@ -643,6 +646,14 @@ DtCompileTable ( > FieldType = DtGetFieldType (Info); > AslGbl_InputFieldCount++; > > + if (FieldType != DT_FIELD_TYPE_INLINE_SUBTABLE && > + strcmp (Info->Name, LocalField->Name)) > + { > + sprintf (AslGbl_MsgBuffer, "found \"%s\" expected \"%s\"", > + LocalField->Name, Info->Name); > + DtError (ASL_ERROR, ASL_MSG_INVALID_LABEL, LocalField, AslGbl_MsgBuffer); > + } > + > switch (FieldType) > { > case DT_FIELD_TYPE_FLAGS_INTEGER: > diff --git a/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h > index 639c22cb..7c78b55b 100644 > --- a/src/acpica/source/compiler/dtcompiler.h > +++ b/src/acpica/source/compiler/dtcompiler.h > @@ -210,6 +210,17 @@ typedef struct dt_field > > #define DT_FIELD_NOT_ALLOCATED 1 > > +/* > + * Structure used for each individual key or value > + */ > +typedef struct dt_table_unit > +{ > + char *Value; /* Field value (from name : value) */ > + UINT32 Line; /* Line number for this field */ > + UINT32 Column; /* Start column for field value */ > + > +} DT_TABLE_UNIT; > + > > /* > * Structure used for individual subtables within an ACPI table > @@ -292,14 +303,6 @@ DtCompilePadding ( > UINT32 Length, > DT_SUBTABLE **RetSubtable); > > -void > -DtCreateField ( > - char *Name, > - char *Value, > - UINT32 Line, > - UINT32 Offset, > - UINT32 Column, > - UINT32 NameColumn); > > /* dtio - binary and text input/output */ > > @@ -437,6 +440,26 @@ DtCompileFlag ( > ACPI_DMTABLE_INFO *Info); > > > +/* dtfield - DT_FIELD operations */ > + > +void > +DtLinkField ( > + DT_FIELD *Field); > + > +void > +DtCreateField ( > + DT_TABLE_UNIT *FieldKey, > + DT_TABLE_UNIT *FieldValue, > + UINT32 Offset); > + > +DT_TABLE_UNIT * > +DtCreateTableUnit ( > + char *Data, > + UINT32 Line, > + UINT32 Column); > + > + > + > /* dtparser - lex/yacc files */ > > UINT64 DtCompilerParserResult; /* Expression return value */ > diff --git a/src/acpica/source/compiler/dtcompilerparser.l b/src/acpica/source/compiler/dtcompilerparser.l > index 0d68f41e..28dcf6af 100644 > --- a/src/acpica/source/compiler/dtcompilerparser.l > +++ b/src/acpica/source/compiler/dtcompilerparser.l > @@ -161,18 +161,20 @@ YYSTYPE DtCompilerlval; > /* handle locations */ > > int DtCompilerParsercolumn = 1; > +int DtLabelByteOffset = 0; > int DtCompilerParserByteOffset = 0; > > +UINT32 DtTokenFirstLine = 0; > +UINT32 DtTokenFirstColumn = 0; > + > #define YY_USER_ACTION \ > - DtCompilerParserlloc.first_line = DtCompilerParserlloc.last_line = DtCompilerParserlineno; \ > - DtCompilerParserlloc.first_column = DtCompilerParsercolumn; \ > - DtCompilerParserlloc.first_byte_offset = DtCompilerParserByteOffset; \ > - DtCompilerParserlloc.last_column = DtCompilerParsercolumn + DtCompilerParserleng-1; \ > + DtTokenFirstLine = DtCompilerParserlineno; \ > + DtTokenFirstColumn = DtCompilerParsercolumn; \ > DtCompilerParsercolumn += DtCompilerParserleng; \ > DtCompilerParserByteOffset += DtCompilerParserleng; \ > DbgPrint (ASL_PARSE_OUTPUT,\ > - "user action occurred. DtCompilerParserlloc.first_line: %u offset: %u\n",\ > - DtCompilerParserlloc.first_line, DtCompilerParserlloc.first_byte_offset); > + "user action occurred. DtCompilerParserlloc.first_line: %u\n",\ > + DtTokenFirstLine); > %} > > %option nounput noinput yylineno > @@ -236,7 +238,11 @@ CommentField {LabelName}{WhiteSpace}*:{WhiteSpace}{Comment}?$ > int size = strlen (DtCompilerParsertext); > s=UtLocalCacheCalloc (size + 1); > AcpiUtSafeStrncpy (s, DtCompilerParsertext, size + 1); > - DtCompilerParserlval.s = s; > + DtCompilerParserlval.u = (DT_TABLE_UNIT *) UtLocalCacheCalloc (sizeof (DT_TABLE_UNIT)); > + DtCompilerParserlval.u->Value = s; > + DtCompilerParserlval.u->Line = DtCompilerParserlineno; > + DtCompilerParserlval.u->Column = DtCompilerParsercolumn; > + DtLabelByteOffset = DtCompilerParserByteOffset; > DbgPrint (ASL_PARSE_OUTPUT, "Label: %s\n", s); > return (DT_PARSEOP_LABEL); > } > diff --git a/src/acpica/source/compiler/dtcompilerparser.y b/src/acpica/source/compiler/dtcompilerparser.y > index ba9d2827..43eba4e9 100644 > --- a/src/acpica/source/compiler/dtcompilerparser.y > +++ b/src/acpica/source/compiler/dtcompilerparser.y > @@ -169,9 +169,13 @@ void DtCompilerParsererror (char const *msg); > extern char *DtCompilerParsertext; > extern DT_FIELD *AslGbl_CurrentField; > > +extern int DtLabelByteOffset; > extern UINT64 DtCompilerParserResult; /* Expression return value */ > extern UINT64 DtCompilerParserlineno; /* Current line number */ > > +extern UINT32 DtTokenFirstLine; > +extern UINT32 DtTokenFirstColumn; > + > /* Bison/yacc configuration */ > > #define yytname DtCompilerParsername > @@ -186,42 +190,30 @@ extern UINT64 DtCompilerParserlineno; /* Current line number */ > > %} > > -%code requires { > - > - typedef struct YYLTYPE { > - int first_line; > - int last_line; > - int first_column; > - int last_column; > - int first_byte_offset; > - } YYLTYPE; > - > - #define YYLTYPE_IS_DECLARED 1 > -} > - > > %union { > char *s; > DT_FIELD *f; > + DT_TABLE_UNIT *u; > } > > > %type <f> Table > -%token <s> DT_PARSEOP_DATA > -%token <s> DT_PARSEOP_LABEL > -%token <s> DT_PARSEOP_STRING_DATA > -%token <s> DT_PARSEOP_LINE_CONTINUATION > -%type <s> Data > -%type <s> Datum > -%type <s> MultiLineData > -%type <s> MultiLineDataList > +%token <u> DT_PARSEOP_DATA > +%token <u> DT_PARSEOP_LABEL > +%token <u> DT_PARSEOP_STRING_DATA > +%token <u> DT_PARSEOP_LINE_CONTINUATION > +%type <u> Data > +%type <u> Datum > +%type <u> MultiLineData > +%type <u> MultiLineDataList > > > %% > > Table > : > - FieldList { DtCompilerParserResult = 5;} > + FieldList { } > ; > > FieldList > @@ -230,7 +222,7 @@ FieldList > ; > > Field > - : DT_PARSEOP_LABEL ':' Data { DtCreateField ($1, $3, (@3).first_line, (@1).first_byte_offset, (@1).first_column, (@3).first_column); } > + : DT_PARSEOP_LABEL ':' Data { DtCreateField ($1, $3, DtLabelByteOffset); } > ; > > Data > @@ -240,7 +232,7 @@ Data > ; > > MultiLineDataList > - : MultiLineDataList MultiLineData { $$ = AcpiUtStrcat(AcpiUtStrcat($1, " "), $2); } /* combine the strings with strcat */ > + : MultiLineDataList MultiLineData { $$ = DtCreateTableUnit (AcpiUtStrcat(AcpiUtStrcat($1->Value, " "), $2->Value), $1->Line, $1->Column); } /* combine the strings with strcat */ > | MultiLineData { $$ = $1; } > ; > > @@ -249,8 +241,14 @@ MultiLineData > ; > > Datum > - : DT_PARSEOP_DATA { DbgPrint (ASL_PARSE_OUTPUT, "parser data: [%s]\n", DtCompilerParserlval.s); $$ = AcpiUtStrdup(DtCompilerParserlval.s); } > - | DT_PARSEOP_STRING_DATA { DbgPrint (ASL_PARSE_OUTPUT, "parser string data: [%s]\n", DtCompilerParserlval.s); $$ = AcpiUtStrdup(DtCompilerParserlval.s); } > + : DT_PARSEOP_DATA { > + DbgPrint (ASL_PARSE_OUTPUT, "parser data: [%s]\n", DtCompilerParserlval.s); > + $$ = DtCreateTableUnit (AcpiUtStrdup(DtCompilerParserlval.s), DtTokenFirstLine, DtTokenFirstColumn); > + } > + | DT_PARSEOP_STRING_DATA { > + DbgPrint (ASL_PARSE_OUTPUT, "parser string data: [%s]\n", DtCompilerParserlval.s); > + $$ = DtCreateTableUnit (AcpiUtStrdup(DtCompilerParserlval.s), DtTokenFirstLine, DtTokenFirstColumn); > + } > ; > > > diff --git a/src/acpica/source/compiler/dtfield.c b/src/acpica/source/compiler/dtfield.c > index 1f716761..18d44110 100644 > --- a/src/acpica/source/compiler/dtfield.c > +++ b/src/acpica/source/compiler/dtfield.c > @@ -576,6 +576,14 @@ DtCompileBuffer ( > > StringValue = DtNormalizeBuffer (StringValue, &Count); > Substring = StringValue; > + if (Count != ByteLength) > + { > + sprintf(AslGbl_MsgBuffer, > + "Found %u values, must match expected count: %u", > + Count, ByteLength); > + DtError (ASL_ERROR, ASL_MSG_BUFFER_LIST, Field, AslGbl_MsgBuffer); > + goto Exit; > + } > > /* Each element of StringValue is now three chars (2 hex + 1 space) */ > > @@ -721,3 +729,122 @@ DtCompileFlag ( > > *Buffer |= (UINT8) (Value << BitPosition); > } > + > + > +/****************************************************************************** > + * > + * FUNCTION: DtCreateField > + * > + * PARAMETERS: Name > + * Value > + * Line > + * Offset > + * Column > + * NameColumn > + * > + * RETURN: None > + * > + * DESCRIPTION: Create a field > + * > + *****************************************************************************/ > + > +void > +DtCreateField ( > + DT_TABLE_UNIT *FieldKey, > + DT_TABLE_UNIT *FieldValue, > + UINT32 Offset) > +{ > + DT_FIELD *Field = UtFieldCacheCalloc (); > + > + > + Field->StringLength = 0; > + if (FieldKey->Value) > + { > + Field->Name = > + strcpy (UtLocalCacheCalloc (strlen (FieldKey->Value) + 1), FieldKey->Value); > + } > + > + if (FieldValue->Value) > + { > + Field->StringLength = strlen (FieldValue->Value); > + Field->Value = > + strcpy (UtLocalCacheCalloc (Field->StringLength + 1), FieldValue->Value); > + } > + > + Field->Line = FieldValue->Line; > + Field->ByteOffset = Offset; > + Field->NameColumn = FieldKey->Column; > + Field->Column = FieldValue->Column; > + DtLinkField (Field); > + > + DtDumpFieldList (AslGbl_FieldList); > +} > + > + > +/****************************************************************************** > + * > + * FUNCTION: DtCreateTableUnit > + * > + * PARAMETERS: Data > + * Line > + * Column > + * > + * RETURN: a table unit > + * > + * DESCRIPTION: Create a table unit > + * > + *****************************************************************************/ > + > +DT_TABLE_UNIT * > +DtCreateTableUnit ( > + char *Data, > + UINT32 Line, > + UINT32 Column) > +{ > + DT_TABLE_UNIT *Unit = (DT_TABLE_UNIT *) UtFieldCacheCalloc (); > + > + > + Unit->Value = Data; > + Unit->Line = Line; > + Unit->Column = Column; > + return (Unit); > +} > + > + > +/****************************************************************************** > + * > + * FUNCTION: DtLinkField > + * > + * PARAMETERS: Field - New field object to link > + * > + * RETURN: None > + * > + * DESCRIPTION: Link one field name and value to the list > + * > + *****************************************************************************/ > + > +void > +DtLinkField ( > + DT_FIELD *Field) > +{ > + DT_FIELD *Prev; > + DT_FIELD *Next; > + > + > + Prev = Next = AslGbl_FieldList; > + > + while (Next) > + { > + Prev = Next; > + Next = Next->Next; > + } > + > + if (Prev) > + { > + Prev->Next = Field; > + } > + else > + { > + AslGbl_FieldList = Field; > + } > +} > diff --git a/src/acpica/source/compiler/dtio.c b/src/acpica/source/compiler/dtio.c > index d027353c..b596fda8 100644 > --- a/src/acpica/source/compiler/dtio.c > +++ b/src/acpica/source/compiler/dtio.c > @@ -162,10 +162,6 @@ static char * > DtTrim ( > char *String); > > -static void > -DtLinkField ( > - DT_FIELD *Field); > - > static ACPI_STATUS > DtParseLine ( > char *LineBuffer, > @@ -297,45 +293,6 @@ DtTrim ( > } > > > -/****************************************************************************** > - * > - * FUNCTION: DtLinkField > - * > - * PARAMETERS: Field - New field object to link > - * > - * RETURN: None > - * > - * DESCRIPTION: Link one field name and value to the list > - * > - *****************************************************************************/ > - > -static void > -DtLinkField ( > - DT_FIELD *Field) > -{ > - DT_FIELD *Prev; > - DT_FIELD *Next; > - > - > - Prev = Next = AslGbl_FieldList; > - > - while (Next) > - { > - Prev = Next; > - Next = Next->Next; > - } > - > - if (Prev) > - { > - Prev->Next = Field; > - } > - else > - { > - AslGbl_FieldList = Field; > - } > -} > - > - > /****************************************************************************** > * > * FUNCTION: DtParseLine > @@ -493,59 +450,6 @@ DtParseLine ( > } > > > -/****************************************************************************** > - * > - * FUNCTION: DtCreateField > - * > - * PARAMETERS: Name > - * Value > - * Line > - * Offset > - * Column > - * NameColumn > - * > - * RETURN: None > - * > - * DESCRIPTION: Create a field > - * > - *****************************************************************************/ > - > -void > -DtCreateField ( > - char *Name, > - char *Value, > - UINT32 Line, > - UINT32 Offset, > - UINT32 Column, > - UINT32 NameColumn) > -{ > - DT_FIELD *Field = UtFieldCacheCalloc (); > - > - > - Field->StringLength = 0; > - if (Name) > - { > - Field->Name = > - strcpy (UtLocalCacheCalloc (strlen (Name) + 1), Name); > - } > - > - if (Value) > - { > - Field->StringLength = strlen (Value); > - Field->Value = > - strcpy (UtLocalCacheCalloc (Field->StringLength + 1), Value); > - } > - > - Field->Line = Line; > - Field->ByteOffset = Offset; > - Field->NameColumn = NameColumn; > - Field->Column = Column; > - DtLinkField (Field); > - > - DtDumpFieldList (AslGbl_FieldList); > -} > - > - > /****************************************************************************** > * > * FUNCTION: DtGetNextLine > @@ -840,7 +744,6 @@ DtGetNextLine ( > > case '\n': > > - CurrentLineOffset = AslGbl_NextLineOffset; > AslGbl_NextLineOffset = (UINT32) ftell (Handle); > AslGbl_CurrentLineNumber++; > break; > @@ -882,7 +785,6 @@ DtGetNextLine ( > > /* Ignore newline, this will merge the lines */ > > - CurrentLineOffset = AslGbl_NextLineOffset; > AslGbl_NextLineOffset = (UINT32) ftell (Handle); > AslGbl_CurrentLineNumber++; > State = DT_NORMAL_TEXT; > diff --git a/src/acpica/source/compiler/dttable2.c b/src/acpica/source/compiler/dttable2.c > index 04f48cc0..bbaaafaa 100644 > --- a/src/acpica/source/compiler/dttable2.c > +++ b/src/acpica/source/compiler/dttable2.c > @@ -1474,13 +1474,14 @@ DtCompileSdev ( > Namesp->DeviceIdOffset + Namesp->DeviceIdLength; > Namesp->VendorDataLength = > (UINT16) Subtable->Length; > + > + /* Final size of entire namespace structure */ > + > + SdevHeader->Length = (UINT16)(sizeof(ACPI_SDEV_NAMESPACE) + > + Subtable->Length + Namesp->DeviceIdLength); > } > } > > - /* Final size of entire namespace structure */ > - > - SdevHeader->Length = (UINT16) (sizeof (ACPI_SDEV_NAMESPACE) + > - Subtable->Length + Namesp->DeviceIdLength); > break; > > case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE: > @@ -1620,7 +1621,9 @@ DtCompileSlit ( > DT_SUBTABLE *ParentTable; > DT_FIELD **PFieldList = (DT_FIELD **) List; > DT_FIELD *FieldList; > + DT_FIELD *EndOfFieldList = NULL; > UINT32 Localities; > + UINT32 LocalityListLength; > UINT8 *LocalityBuffer; > > > @@ -1636,6 +1639,7 @@ DtCompileSlit ( > > Localities = *ACPI_CAST_PTR (UINT32, Subtable->Buffer); > LocalityBuffer = UtLocalCalloc (Localities); > + LocalityListLength = 0; > > /* Compile each locality buffer */ > > @@ -1645,11 +1649,22 @@ DtCompileSlit ( > DtCompileBuffer (LocalityBuffer, > FieldList->Value, FieldList, Localities); > > + LocalityListLength++; > DtCreateSubtable (LocalityBuffer, Localities, &Subtable); > DtInsertSubtable (ParentTable, Subtable); > + EndOfFieldList = FieldList; > FieldList = FieldList->Next; > } > > + if (LocalityListLength != Localities) > + { > + sprintf(AslGbl_MsgBuffer, > + "Found %u entries, must match LocalityCount: %u", > + LocalityListLength, Localities); > + DtError (ASL_ERROR, ASL_MSG_ENTRY_LIST, EndOfFieldList, AslGbl_MsgBuffer); > + return (AE_LIMIT); > + } > + > ACPI_FREE (LocalityBuffer); > return (AE_OK); > } > diff --git a/src/acpica/source/components/debugger/dbconvert.c b/src/acpica/source/components/debugger/dbconvert.c > index 631e7e8f..6b58bf5f 100644 > --- a/src/acpica/source/components/debugger/dbconvert.c > +++ b/src/acpica/source/components/debugger/dbconvert.c > @@ -274,6 +274,10 @@ AcpiDbConvertToBuffer ( > ACPI_STATUS Status; > > > + /* Skip all preceding white space*/ > + > + AcpiUtRemoveWhitespace (&String); > + > /* Generate the final buffer length */ > > for (i = 0, Length = 0; String[i];) > diff --git a/src/acpica/source/components/debugger/dbdisply.c b/src/acpica/source/components/debugger/dbdisply.c > index 539ff5af..72bf1c6b 100644 > --- a/src/acpica/source/components/debugger/dbdisply.c > +++ b/src/acpica/source/components/debugger/dbdisply.c > @@ -713,7 +713,6 @@ AcpiDbDisplayResults ( > return; > } > > - ObjDesc = WalkState->MethodDesc; > Node = WalkState->MethodNode; > > if (WalkState->Results) > @@ -773,7 +772,6 @@ AcpiDbDisplayCallingTree ( > return; > } > > - Node = WalkState->MethodNode; > AcpiOsPrintf ("Current Control Method Call Tree\n"); > > while (WalkState) > diff --git a/src/acpica/source/components/debugger/dbfileio.c b/src/acpica/source/components/debugger/dbfileio.c > index e937c3e4..7567fa75 100644 > --- a/src/acpica/source/components/debugger/dbfileio.c > +++ b/src/acpica/source/components/debugger/dbfileio.c > @@ -253,7 +253,7 @@ AcpiDbLoadTables ( > { > Table = TableListHead->Table; > > - Status = AcpiLoadTable (Table); > + Status = AcpiLoadTable (Table, NULL); > if (ACPI_FAILURE (Status)) > { > if (Status == AE_ALREADY_EXISTS) > diff --git a/src/acpica/source/components/debugger/dbinput.c b/src/acpica/source/components/debugger/dbinput.c > index d091d351..c854cb37 100644 > --- a/src/acpica/source/components/debugger/dbinput.c > +++ b/src/acpica/source/components/debugger/dbinput.c > @@ -208,6 +208,7 @@ enum AcpiExDebuggerCommands > CMD_EVALUATE, > CMD_EXECUTE, > CMD_EXIT, > + CMD_FIELDS, > CMD_FIND, > CMD_GO, > CMD_HANDLERS, > @@ -287,6 +288,7 @@ static const ACPI_DB_COMMAND_INFO AcpiGbl_DbCommands[] = > {"EVALUATE", 1}, > {"EXECUTE", 1}, > {"EXIT", 0}, > + {"FIELDS", 1}, > {"FIND", 1}, > {"GO", 0}, > {"HANDLERS", 0}, > @@ -360,6 +362,7 @@ static const ACPI_DB_COMMAND_HELP AcpiGbl_DbCommandHelp[] = > {1, " Find <AcpiName> (? is wildcard)", "Find ACPI name(s) with wildcards\n"}, > {1, " Integrity", "Validate namespace integrity\n"}, > {1, " Methods", "Display list of loaded control methods\n"}, > + {1, " Fields <AddressSpaceId>", "Display list of loaded field units by space ID\n"}, > {1, " Namespace [Object] [Depth]", "Display loaded namespace tree/subtree\n"}, > {1, " Notify <Object> <Value>", "Send a notification on Object\n"}, > {1, " Objects [ObjectType]", "Display summary of all objects or just given type\n"}, > @@ -683,6 +686,22 @@ AcpiDbGetNextToken ( > } > break; > > + case '{': > + > + /* This is the start of a field unit, scan until closing brace */ > + > + String++; > + Start = String; > + Type = ACPI_TYPE_FIELD_UNIT; > + > + /* Find end of buffer */ > + > + while (*String && (*String != '}')) > + { > + String++; > + } > + break; > + > case '[': > > /* This is the start of a package, scan until closing bracket */ > @@ -877,6 +896,7 @@ AcpiDbCommandDispatch ( > ACPI_PARSE_OBJECT *Op) > { > UINT32 Temp; > + UINT64 Temp64; > UINT32 CommandIndex; > UINT32 ParamCount; > char *CommandLine; > @@ -894,7 +914,6 @@ AcpiDbCommandDispatch ( > > ParamCount = AcpiDbGetLine (InputBuffer); > CommandIndex = AcpiDbMatchCommand (AcpiGbl_DbArgs[0]); > - Temp = 0; > > /* > * We don't want to add the !! command to the history buffer. It > @@ -993,6 +1012,21 @@ AcpiDbCommandDispatch ( > Status = AcpiDbFindNameInNamespace (AcpiGbl_DbArgs[1]); > break; > > + case CMD_FIELDS: > + > + Status = AcpiUtStrtoul64 (AcpiGbl_DbArgs[1], &Temp64); > + > + if (ACPI_FAILURE (Status) || Temp64 >= ACPI_NUM_PREDEFINED_REGIONS) > + { > + AcpiOsPrintf ( > + "Invalid adress space ID: must be between 0 and %u inclusive\n", > + ACPI_NUM_PREDEFINED_REGIONS - 1); > + return (AE_OK); > + } > + > + Status = AcpiDbDisplayFields ((UINT32) Temp64); > + break; > + > case CMD_GO: > > AcpiGbl_CmSingleStep = FALSE; > diff --git a/src/acpica/source/components/debugger/dbmethod.c b/src/acpica/source/components/debugger/dbmethod.c > index 6893c550..24c014f9 100644 > --- a/src/acpica/source/components/debugger/dbmethod.c > +++ b/src/acpica/source/components/debugger/dbmethod.c > @@ -515,6 +515,11 @@ AcpiDbDisassembleMethod ( > WalkState->ParseFlags |= ACPI_PARSE_DISASSEMBLE; > > Status = AcpiPsParseAml (WalkState); > + if (ACPI_FAILURE(Status)) > + { > + return (Status); > + } > + > (void) AcpiDmParseDeferredOps (Op); > > /* Now we can disassemble the method */ > diff --git a/src/acpica/source/components/debugger/dbnames.c b/src/acpica/source/components/debugger/dbnames.c > index 2c9af4be..ac366ab0 100644 > --- a/src/acpica/source/components/debugger/dbnames.c > +++ b/src/acpica/source/components/debugger/dbnames.c > @@ -154,6 +154,7 @@ > #include "acnamesp.h" > #include "acdebug.h" > #include "acpredef.h" > +#include "acinterp.h" > > > #define _COMPONENT ACPI_CA_DEBUGGER > @@ -722,6 +723,91 @@ AcpiDbWalkForObjectCounts ( > } > > > +/******************************************************************************* > + * > + * FUNCTION: AcpiDbWalkForFields > + * > + * PARAMETERS: Callback from WalkNamespace > + * > + * RETURN: Status > + * > + * DESCRIPTION: Display short info about objects in the namespace > + * > + ******************************************************************************/ > + > +static ACPI_STATUS > +AcpiDbWalkForFields ( > + ACPI_HANDLE ObjHandle, > + UINT32 NestingLevel, > + void *Context, > + void **ReturnValue) > +{ > + ACPI_OBJECT *RetValue; > + ACPI_REGION_WALK_INFO *Info = (ACPI_REGION_WALK_INFO *) Context; > + ACPI_BUFFER Buffer; > + ACPI_STATUS Status; > + ACPI_NAMESPACE_NODE *Node = AcpiNsValidateHandle (ObjHandle); > + > + > + if (!Node) > + { > + return (AE_OK); > + } > + if (Node->Object->Field.RegionObj->Region.SpaceId != Info->AddressSpaceId) > + { > + return (AE_OK); > + } > + > + Info->Count++; > + > + /* Get and display the full pathname to this object */ > + > + Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; > + Status = AcpiNsHandleToPathname (ObjHandle, &Buffer, TRUE); > + if (ACPI_FAILURE (Status)) > + { > + AcpiOsPrintf ("Could Not get pathname for object %p\n", ObjHandle); > + return (AE_OK); > + } > + > + AcpiOsPrintf ("%s ", (char *) Buffer.Pointer); > + ACPI_FREE (Buffer.Pointer); > + > + Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; > + AcpiEvaluateObject (ObjHandle, NULL, NULL, &Buffer); > + > + /* > + * Since this is a field unit, surround the output in braces > + */ > + AcpiOsPrintf ("{"); > + > + RetValue = (ACPI_OBJECT *) Buffer.Pointer; > + switch (RetValue->Type) > + { > + case ACPI_TYPE_INTEGER: > + > + AcpiOsPrintf ("%8.8X%8.8X", ACPI_FORMAT_UINT64 (RetValue->Integer.Value)); > + break; > + > + case ACPI_TYPE_BUFFER: > + > + AcpiUtDumpBuffer (RetValue->Buffer.Pointer, > + RetValue->Buffer.Length, DB_DISPLAY_DATA_ONLY | DB_BYTE_DISPLAY, 0); > + break; > + > + default: > + > + break; > + } > + > + AcpiOsPrintf ("}\n"); > + > + ACPI_FREE (Buffer.Pointer); > + return (AE_OK); > +} > + > + > + > /******************************************************************************* > * > * FUNCTION: AcpiDbWalkForSpecificObjects > @@ -857,6 +943,42 @@ AcpiDbDisplayObjects ( > } > > > +/******************************************************************************* > + * > + * FUNCTION: AcpiDbDisplayFields > + * > + * PARAMETERS: ObjTypeArg - Type of object to display > + * DisplayCountArg - Max depth to display > + * > + * RETURN: None > + * > + * DESCRIPTION: Display objects in the namespace of the requested type > + * > + ******************************************************************************/ > + > +ACPI_STATUS > +AcpiDbDisplayFields ( > + UINT32 AddressSpaceId) > +{ > + ACPI_REGION_WALK_INFO Info; > + > + > + Info.Count = 0; > + Info.OwnerId = ACPI_OWNER_ID_MAX; > + Info.DebugLevel = ACPI_UINT32_MAX; > + Info.DisplayType = ACPI_DISPLAY_SUMMARY | ACPI_DISPLAY_SHORT; > + Info.AddressSpaceId = AddressSpaceId; > + > + /* Walk the namespace from the root */ > + > + (void) AcpiWalkNamespace (ACPI_TYPE_LOCAL_REGION_FIELD, ACPI_ROOT_OBJECT, > + ACPI_UINT32_MAX, AcpiDbWalkForFields, NULL, > + (void *) &Info, NULL); > + > + return (AE_OK); > +} > + > + > /******************************************************************************* > * > * FUNCTION: AcpiDbIntegrityWalk > diff --git a/src/acpica/source/components/debugger/dbobject.c b/src/acpica/source/components/debugger/dbobject.c > index cebf4420..cffa0a53 100644 > --- a/src/acpica/source/components/debugger/dbobject.c > +++ b/src/acpica/source/components/debugger/dbobject.c > @@ -649,7 +649,6 @@ AcpiDbDecodeArguments ( > > > Node = WalkState->MethodNode; > - ObjDesc = WalkState->MethodDesc; > > /* There are no arguments for the module-level code case */ > > diff --git a/src/acpica/source/components/disassembler/dmdeferred.c b/src/acpica/source/components/disassembler/dmdeferred.c > index d0753bb0..d0a589c9 100644 > --- a/src/acpica/source/components/disassembler/dmdeferred.c > +++ b/src/acpica/source/components/disassembler/dmdeferred.c > @@ -309,6 +309,10 @@ AcpiDmDeferredParse ( > WalkState->ParseFlags &= ~ACPI_PARSE_DELETE_TREE; > WalkState->ParseFlags |= ACPI_PARSE_DISASSEMBLE; > Status = AcpiPsParseAml (WalkState); > + if (ACPI_FAILURE (Status)) > + { > + return_ACPI_STATUS(Status); > + } > > StartOp = (Op->Common.Value.Arg)->Common.Next; > SearchOp = StartOp; > diff --git a/src/acpica/source/components/disassembler/dmresrc.c b/src/acpica/source/components/disassembler/dmresrc.c > index bb36b734..c2e85b8a 100644 > --- a/src/acpica/source/components/disassembler/dmresrc.c > +++ b/src/acpica/source/components/disassembler/dmresrc.c > @@ -441,7 +441,6 @@ AcpiDmResourceTemplate ( > * missing EndDependentDescriptor. > */ > Level--; > - DependentFns = FALSE; > > /* Go ahead and insert EndDependentFn() */ > > diff --git a/src/acpica/source/components/disassembler/dmwalk.c b/src/acpica/source/components/disassembler/dmwalk.c > index 8ec8728e..97b33039 100644 > --- a/src/acpica/source/components/disassembler/dmwalk.c > +++ b/src/acpica/source/components/disassembler/dmwalk.c > @@ -957,7 +957,6 @@ AcpiDmDescendingOp ( > * the buffer size Op. Open up a new block > */ > NextOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; > - NextOp = NextOp->Common.Next; > ASL_CV_CLOSE_PAREN (Op, Level); > > /* Emit description comment for Name() with a predefined ACPI name */ > diff --git a/src/acpica/source/components/dispatcher/dscontrol.c b/src/acpica/source/components/dispatcher/dscontrol.c > index 238c77bb..85b4679e 100644 > --- a/src/acpica/source/components/dispatcher/dscontrol.c > +++ b/src/acpica/source/components/dispatcher/dscontrol.c > @@ -235,7 +235,7 @@ AcpiDsExecBeginControlOp ( > ControlState->Control.Opcode = > Op->Common.AmlOpcode; > ControlState->Control.LoopTimeout = AcpiOsGetTimer () + > - (UINT64) (AcpiGbl_MaxLoopIterations * ACPI_100NSEC_PER_SEC); > + ((UINT64) AcpiGbl_MaxLoopIterations * ACPI_100NSEC_PER_SEC); > > /* Push the control state on this walk's control stack */ > > diff --git a/src/acpica/source/components/dispatcher/dsfield.c b/src/acpica/source/components/dispatcher/dsfield.c > index 3aff4db1..5477686f 100644 > --- a/src/acpica/source/components/dispatcher/dsfield.c > +++ b/src/acpica/source/components/dispatcher/dsfield.c > @@ -309,7 +309,6 @@ AcpiDsCreateBufferField ( > if (WalkState->DeferredNode) > { > Node = WalkState->DeferredNode; > - Status = AE_OK; > } > else > { > @@ -435,7 +434,6 @@ AcpiDsGetFieldNames ( > ACPI_PARSE_OBJECT *Child; > > #ifdef ACPI_EXEC_APP > - UINT64 Value = 0; > ACPI_OPERAND_OBJECT *ResultDesc; > ACPI_OPERAND_OBJECT *ObjDesc; > char *NamePath; > @@ -577,14 +575,13 @@ AcpiDsGetFieldNames ( > } > #ifdef ACPI_EXEC_APP > NamePath = AcpiNsGetExternalPathname (Info->FieldNode); > - ObjDesc = AcpiUtCreateIntegerObject (Value); > - if (ACPI_SUCCESS (AeLookupInitFileEntry (NamePath, &Value))) > + if (ACPI_SUCCESS (AeLookupInitFileEntry (NamePath, &ObjDesc))) > { > AcpiExWriteDataToField (ObjDesc, > AcpiNsGetAttachedObject (Info->FieldNode), > &ResultDesc); > + AcpiUtRemoveReference (ObjDesc); > } > - AcpiUtRemoveReference (ObjDesc); > ACPI_FREE (NamePath); > #endif > } > @@ -813,8 +810,6 @@ AcpiDsInitFieldObjects ( > } > > /* Name already exists, just ignore this error */ > - > - Status = AE_OK; > } > > Arg->Common.Node = Node; > diff --git a/src/acpica/source/components/events/evgpeblk.c b/src/acpica/source/components/events/evgpeblk.c > index 80157dcd..e0e2780f 100644 > --- a/src/acpica/source/components/events/evgpeblk.c > +++ b/src/acpica/source/components/events/evgpeblk.c > @@ -272,6 +272,10 @@ AcpiEvDeleteGpeBlock ( > /* Disable all GPEs in this block */ > > Status = AcpiHwDisableGpeBlock (GpeBlock->XruptBlock, GpeBlock, NULL); > + if (ACPI_FAILURE (Status)) > + { > + return_ACPI_STATUS (Status); > + } > > if (!GpeBlock->Previous && !GpeBlock->Next) > { > @@ -542,7 +546,7 @@ AcpiEvCreateGpeBlock ( > WalkInfo.GpeDevice = GpeDevice; > WalkInfo.ExecuteByOwnerId = FALSE; > > - Status = AcpiNsWalkNamespace (ACPI_TYPE_METHOD, GpeDevice, > + (void) AcpiNsWalkNamespace (ACPI_TYPE_METHOD, GpeDevice, > ACPI_UINT32_MAX, ACPI_NS_WALK_NO_UNLOCK, > AcpiEvMatchGpeMethod, NULL, &WalkInfo, NULL); > > diff --git a/src/acpica/source/components/events/evgpeinit.c b/src/acpica/source/components/events/evgpeinit.c > index b7e02a06..7e3c766c 100644 > --- a/src/acpica/source/components/events/evgpeinit.c > +++ b/src/acpica/source/components/events/evgpeinit.c > @@ -302,8 +302,6 @@ AcpiEvGpeInitialize ( > * GPE0 and GPE1 do not have to be contiguous in the GPE number > * space. However, GPE0 always starts at GPE number zero. > */ > - GpeNumberMax = AcpiGbl_FADT.Gpe1Base + > - ((RegisterCount1 * ACPI_GPE_REGISTER_WIDTH) - 1); > } > } > > @@ -315,7 +313,6 @@ AcpiEvGpeInitialize ( > > ACPI_DEBUG_PRINT ((ACPI_DB_INIT, > "There are no GPE blocks defined in the FADT\n")); > - Status = AE_OK; > goto Cleanup; > } > > diff --git a/src/acpica/source/components/events/evmisc.c b/src/acpica/source/components/events/evmisc.c > index f73cc2f3..68f1dc8a 100644 > --- a/src/acpica/source/components/events/evmisc.c > +++ b/src/acpica/source/components/events/evmisc.c > @@ -400,11 +400,16 @@ AcpiEvTerminate ( > /* Disable all GPEs in all GPE blocks */ > > Status = AcpiEvWalkGpeList (AcpiHwDisableGpeBlock, NULL); > + if (ACPI_FAILURE (Status)) > + { > + ACPI_EXCEPTION ((AE_INFO, Status, > + "Could not disable GPEs in GPE block")); > + } > > Status = AcpiEvRemoveGlobalLockHandler (); > - if (ACPI_FAILURE(Status)) > + if (ACPI_FAILURE (Status)) > { > - ACPI_ERROR ((AE_INFO, > + ACPI_EXCEPTION ((AE_INFO, Status, > "Could not remove Global Lock handler")); > } > > @@ -414,7 +419,7 @@ AcpiEvTerminate ( > /* Remove SCI handlers */ > > Status = AcpiEvRemoveAllSciHandlers (); > - if (ACPI_FAILURE(Status)) > + if (ACPI_FAILURE (Status)) > { > ACPI_ERROR ((AE_INFO, > "Could not remove SCI handler")); > @@ -423,6 +428,12 @@ AcpiEvTerminate ( > /* Deallocate all handler objects installed within GPE info structs */ > > Status = AcpiEvWalkGpeList (AcpiEvDeleteGpeHandlers, NULL); > + if (ACPI_FAILURE (Status)) > + { > + ACPI_EXCEPTION ((AE_INFO, Status, > + "Could not delete GPE handlers")); > + } > + > > /* Return to original mode if necessary */ > > diff --git a/src/acpica/source/components/events/evregion.c b/src/acpica/source/components/events/evregion.c > index 6f6d7ccc..13a20918 100644 > --- a/src/acpica/source/components/events/evregion.c > +++ b/src/acpica/source/components/events/evregion.c > @@ -1037,11 +1037,11 @@ AcpiEvOrphanEcRegMethod ( > Objects[1].Type = ACPI_TYPE_INTEGER; > Objects[1].Integer.Value = ACPI_REG_CONNECT; > > - Status = AcpiEvaluateObject (RegMethod, NULL, &Args, NULL); > + (void) AcpiEvaluateObject (RegMethod, NULL, &Args, NULL); > > Exit: > /* We ignore all errors from above, don't care */ > > - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); > + (void) AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); > return_VOID; > } > diff --git a/src/acpica/source/components/events/evrgnini.c b/src/acpica/source/components/events/evrgnini.c > index 718e2e87..3c865c59 100644 > --- a/src/acpica/source/components/events/evrgnini.c > +++ b/src/acpica/source/components/events/evrgnini.c > @@ -363,7 +363,6 @@ AcpiEvPciConfigRegionSetup ( > * root bridge. Still need to return a context object > * for the new PCI_Config operation region, however. > */ > - Status = AE_OK; > } > else > { > diff --git a/src/acpica/source/components/hardware/hwxfsleep.c b/src/acpica/source/components/hardware/hwxfsleep.c > index 3df8f5a5..78dc1902 100644 > --- a/src/acpica/source/components/hardware/hwxfsleep.c > +++ b/src/acpica/source/components/hardware/hwxfsleep.c > @@ -357,6 +357,10 @@ AcpiEnterSleepStateS4bios ( > > Status = AcpiHwWritePort (AcpiGbl_FADT.SmiCommand, > (UINT32) AcpiGbl_FADT.S4BiosRequest, 8); > + if (ACPI_FAILURE (Status)) > + { > + return_ACPI_STATUS (Status); > + } > > do { > AcpiOsStall (ACPI_USEC_PER_MSEC); > diff --git a/src/acpica/source/components/namespace/nsconvert.c b/src/acpica/source/components/namespace/nsconvert.c > index d2b32d25..ae590490 100644 > --- a/src/acpica/source/components/namespace/nsconvert.c > +++ b/src/acpica/source/components/namespace/nsconvert.c > @@ -670,5 +670,5 @@ AcpiNsConvertToReference ( > ErrorExit: > ACPI_FREE (Name); > *ReturnObject = NewObject; > - return (AE_OK); > + return (Status); > } > diff --git a/src/acpica/source/components/namespace/nsdump.c b/src/acpica/source/components/namespace/nsdump.c > index 8a2a7e92..0ed4d72c 100644 > --- a/src/acpica/source/components/namespace/nsdump.c > +++ b/src/acpica/source/components/namespace/nsdump.c > @@ -478,7 +478,7 @@ AcpiNsDumpOneObject ( > AcpiOsPrintf (" ="); > for (i = 0; (i < ObjDesc->Buffer.Length && i < 12); i++) > { > - AcpiOsPrintf (" %.2hX", ObjDesc->Buffer.Pointer[i]); > + AcpiOsPrintf (" %2.2X", ObjDesc->Buffer.Pointer[i]); > } > } > AcpiOsPrintf ("\n"); > @@ -575,7 +575,7 @@ AcpiNsDumpOneObject ( > case ACPI_TYPE_LOCAL_BANK_FIELD: > case ACPI_TYPE_LOCAL_INDEX_FIELD: > > - AcpiOsPrintf (" Off %.3X Len %.2X Acc %.2hd\n", > + AcpiOsPrintf (" Off %.3X Len %.2X Acc %.2X\n", > (ObjDesc->CommonField.BaseByteOffset * 8) > + ObjDesc->CommonField.StartFieldBitOffset, > ObjDesc->CommonField.BitLength, > @@ -760,8 +760,6 @@ AcpiNsDumpOneObject ( > > goto Cleanup; > } > - > - ObjType = ACPI_TYPE_INVALID; /* Terminate loop after next pass */ > } > > Cleanup: > diff --git a/src/acpica/source/components/namespace/nsxfname.c b/src/acpica/source/components/namespace/nsxfname.c > index 7332a92f..85be591f 100644 > --- a/src/acpica/source/components/namespace/nsxfname.c > +++ b/src/acpica/source/components/namespace/nsxfname.c > @@ -611,7 +611,7 @@ AcpiGetObjectInfo ( > > if (Cls) > { > - NextIdString = AcpiNsCopyDeviceId (&Info->ClassCode, > + (void) AcpiNsCopyDeviceId (&Info->ClassCode, > Cls, NextIdString); > } > > diff --git a/src/acpica/source/components/parser/psobject.c b/src/acpica/source/components/parser/psobject.c > index 61c3a868..6ceb7d91 100644 > --- a/src/acpica/source/components/parser/psobject.c > +++ b/src/acpica/source/components/parser/psobject.c > @@ -652,7 +652,7 @@ AcpiPsCompleteOp ( > WalkState->Opcode = (*Op)->Common.AmlOpcode; > > Status = WalkState->AscendingCallback (WalkState); > - Status = AcpiPsNextParseState (WalkState, *Op, Status); > + (void) AcpiPsNextParseState (WalkState, *Op, Status); > > Status2 = AcpiPsCompleteThisOp (WalkState, *Op); > if (ACPI_FAILURE (Status2)) > @@ -661,7 +661,6 @@ AcpiPsCompleteOp ( > } > } > > - Status = AE_OK; > break; > > case AE_CTRL_BREAK: > @@ -682,7 +681,7 @@ AcpiPsCompleteOp ( > WalkState->Opcode = (*Op)->Common.AmlOpcode; > > Status = WalkState->AscendingCallback (WalkState); > - Status = AcpiPsNextParseState (WalkState, *Op, Status); > + (void) AcpiPsNextParseState (WalkState, *Op, Status); > > Status2 = AcpiPsCompleteThisOp (WalkState, *Op); > if (ACPI_FAILURE (Status2)) > @@ -690,7 +689,6 @@ AcpiPsCompleteOp ( > return_ACPI_STATUS (Status2); > } > > - Status = AE_OK; > break; > > case AE_CTRL_TERMINATE: > diff --git a/src/acpica/source/components/resources/rscreate.c b/src/acpica/source/components/resources/rscreate.c > index 26640c20..172bc55f 100644 > --- a/src/acpica/source/components/resources/rscreate.c > +++ b/src/acpica/source/components/resources/rscreate.c > @@ -481,6 +481,10 @@ AcpiRsCreatePciRoutingTable ( > > Status = AcpiNsHandleToPathname ( > (ACPI_HANDLE) Node, &PathBuffer, FALSE); > + if (ACPI_FAILURE (Status)) > + { > + return_ACPI_STATUS (Status); > + } > > /* +1 to include null terminator */ > > diff --git a/src/acpica/source/components/tables/tbdata.c b/src/acpica/source/components/tables/tbdata.c > index 84dd25bd..6eb1f24a 100644 > --- a/src/acpica/source/components/tables/tbdata.c > +++ b/src/acpica/source/components/tables/tbdata.c > @@ -1190,6 +1190,10 @@ AcpiTbLoadTable ( > } > > Status = AcpiNsLoadTable (TableIndex, ParentNode); > + if (ACPI_FAILURE (Status)) > + { > + return_ACPI_STATUS (Status); > + } > > /* > * Update GPEs for any new _Lxx/_Exx methods. Ignore errors. The host is > diff --git a/src/acpica/source/components/tables/tbxfload.c b/src/acpica/source/components/tables/tbxfload.c > index 1e17db6c..24daafcf 100644 > --- a/src/acpica/source/components/tables/tbxfload.c > +++ b/src/acpica/source/components/tables/tbxfload.c > @@ -445,6 +445,8 @@ ACPI_EXPORT_SYMBOL_INIT (AcpiInstallTable) > * > * PARAMETERS: Table - Pointer to a buffer containing the ACPI > * table to be loaded. > + * TableIdx - Pointer to a UINT32 for storing the table > + * index, might be NULL > * > * RETURN: Status > * > @@ -458,7 +460,8 @@ ACPI_EXPORT_SYMBOL_INIT (AcpiInstallTable) > > ACPI_STATUS > AcpiLoadTable ( > - ACPI_TABLE_HEADER *Table) > + ACPI_TABLE_HEADER *Table, > + UINT32 *TableIdx) > { > ACPI_STATUS Status; > UINT32 TableIndex; > @@ -479,6 +482,11 @@ AcpiLoadTable ( > ACPI_INFO (("Host-directed Dynamic ACPI Table Load:")); > Status = AcpiTbInstallAndLoadTable (ACPI_PTR_TO_PHYSADDR (Table), > ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL, FALSE, &TableIndex); > + if (TableIdx) > + { > + *TableIdx = TableIndex; > + } > + > if (ACPI_SUCCESS (Status)) > { > /* Complete the initialization/resolution of new objects */ > @@ -582,3 +590,42 @@ AcpiUnloadParentTable ( > } > > ACPI_EXPORT_SYMBOL (AcpiUnloadParentTable) > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiUnloadTable > + * > + * PARAMETERS: TableIndex - Index as returned by AcpiLoadTable > + * > + * RETURN: Status > + * > + * DESCRIPTION: Via the TableIndex representing an SSDT or OEMx table, unloads > + * the table and deletes all namespace objects associated with > + * that table. Unloading of the DSDT is not allowed. > + * Note: Mainly intended to support hotplug removal of SSDTs. > + * > + ******************************************************************************/ > + > +ACPI_STATUS > +AcpiUnloadTable ( > + UINT32 TableIndex) > +{ > + ACPI_STATUS Status; > + > + > + ACPI_FUNCTION_TRACE (AcpiUnloadTable); > + > + > + if (TableIndex == 1) > + { > + /* TableIndex==1 means DSDT is the owner. DSDT cannot be unloaded */ > + > + return_ACPI_STATUS (AE_TYPE); > + } > + > + Status = AcpiTbUnloadTable (TableIndex); > + return_ACPI_STATUS (Status); > +} > + > +ACPI_EXPORT_SYMBOL (AcpiUnloadTable) > diff --git a/src/acpica/source/components/utilities/utbuffer.c b/src/acpica/source/components/utilities/utbuffer.c > index 44fd30a6..015c16f9 100644 > --- a/src/acpica/source/components/utilities/utbuffer.c > +++ b/src/acpica/source/components/utilities/utbuffer.c > @@ -186,8 +186,10 @@ AcpiUtDumpBuffer ( > UINT32 j; > UINT32 Temp32; > UINT8 BufChar; > + UINT32 DisplayDataOnly = Display & DB_DISPLAY_DATA_ONLY; > > > + Display &= ~DB_DISPLAY_DATA_ONLY; > if (!Buffer) > { > AcpiOsPrintf ("Null Buffer Pointer in DumpBuffer!\n"); > @@ -205,7 +207,10 @@ AcpiUtDumpBuffer ( > { > /* Print current offset */ > > - AcpiOsPrintf ("%8.4X: ", (BaseOffset + i)); > + if (!DisplayDataOnly) > + { > + AcpiOsPrintf ("%8.4X: ", (BaseOffset + i)); > + } > > /* Print 16 hex chars */ > > @@ -257,38 +262,41 @@ AcpiUtDumpBuffer ( > * Print the ASCII equivalent characters but watch out for the bad > * unprintable ones (printable chars are 0x20 through 0x7E) > */ > - AcpiOsPrintf (" "); > - for (j = 0; j < 16; j++) > + if (!DisplayDataOnly) > { > - if (i + j >= Count) > + AcpiOsPrintf (" "); > + for (j = 0; j < 16; j++) > { > - AcpiOsPrintf ("\n"); > - return; > + if (i + j >= Count) > + { > + AcpiOsPrintf ("\n"); > + return; > + } > + > + /* > + * Add comment characters so rest of line is ignored when > + * compiled > + */ > + if (j == 0) > + { > + AcpiOsPrintf ("// "); > + } > + > + BufChar = Buffer[(ACPI_SIZE) i + j]; > + if (isprint (BufChar)) > + { > + AcpiOsPrintf ("%c", BufChar); > + } > + else > + { > + AcpiOsPrintf ("."); > + } > } > > - /* > - * Add comment characters so rest of line is ignored when > - * compiled > - */ > - if (j == 0) > - { > - AcpiOsPrintf ("// "); > - } > + /* Done with that line. */ > > - BufChar = Buffer[(ACPI_SIZE) i + j]; > - if (isprint (BufChar)) > - { > - AcpiOsPrintf ("%c", BufChar); > - } > - else > - { > - AcpiOsPrintf ("."); > - } > + AcpiOsPrintf ("\n"); > } > - > - /* Done with that line. */ > - > - AcpiOsPrintf ("\n"); > i += 16; > } > > diff --git a/src/acpica/source/components/utilities/utids.c b/src/acpica/source/components/utilities/utids.c > index 5fcfbf66..513548c2 100644 > --- a/src/acpica/source/components/utilities/utids.c > +++ b/src/acpica/source/components/utilities/utids.c > @@ -466,7 +466,8 @@ AcpiUtExecute_CID ( > { > /* Copy the String CID from the returned object */ > > - strcpy (NextIdString, CidObjects[i]->String.Pointer); > + AcpiUtSafeStrcpy (NextIdString, CidObjects[i]->String.Length + 1, > + CidObjects[i]->String.Pointer); > Length = CidObjects[i]->String.Length + 1; > } > > diff --git a/src/acpica/source/components/utilities/uttrack.c b/src/acpica/source/components/utilities/uttrack.c > index c6e6b45b..76e439fe 100644 > --- a/src/acpica/source/components/utilities/uttrack.c > +++ b/src/acpica/source/components/utilities/uttrack.c > @@ -864,7 +864,7 @@ AcpiUtDumpAllocations ( > > case ACPI_DESC_TYPE_PARSER: > > - AcpiOsPrintf ("AmlOpcode 0x%04hX\n", > + AcpiOsPrintf ("AmlOpcode 0x%04X\n", > Descriptor->Op.Asl.AmlOpcode); > break; > > diff --git a/src/acpica/source/include/acdebug.h b/src/acpica/source/include/acdebug.h > index 4e43bbee..f296cb94 100644 > --- a/src/acpica/source/include/acdebug.h > +++ b/src/acpica/source/include/acdebug.h > @@ -392,6 +392,10 @@ void > AcpiDbGetBusInfo ( > void); > > +ACPI_STATUS > +AcpiDbDisplayFields ( > + UINT32 AddressSpaceId); > + > > /* > * dbdisply - debug display commands > diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h > index a123eed7..62e37909 100644 > --- a/src/acpica/source/include/acpixf.h > +++ b/src/acpica/source/include/acpixf.h > @@ -154,7 +154,7 @@ > > /* Current ACPICA subsystem version in YYYYMMDD format */ > > -#define ACPI_CA_VERSION 0x20190816 > +#define ACPI_CA_VERSION 0x20191018 > > #include "acconfig.h" > #include "actypes.h" > @@ -664,7 +664,13 @@ AcpiInstallTable ( > ACPI_EXTERNAL_RETURN_STATUS ( > ACPI_STATUS > AcpiLoadTable ( > - ACPI_TABLE_HEADER *Table)) > + ACPI_TABLE_HEADER *Table, > + UINT32 *TableIdx)) > + > +ACPI_EXTERNAL_RETURN_STATUS ( > +ACPI_STATUS > +AcpiUnloadTable ( > + UINT32 TableIndex)) > > ACPI_EXTERNAL_RETURN_STATUS ( > ACPI_STATUS > diff --git a/src/acpica/source/include/acstruct.h b/src/acpica/source/include/acstruct.h > index f81c8a7d..e6ab1d90 100644 > --- a/src/acpica/source/include/acstruct.h > +++ b/src/acpica/source/include/acstruct.h > @@ -357,6 +357,19 @@ typedef struct acpi_device_walk_info > } ACPI_DEVICE_WALK_INFO; > > > +/* Info used by Acpi AcpiDbDisplayFields */ > + > +typedef struct acpi_region_walk_info > +{ > + UINT32 DebugLevel; > + UINT32 Count; > + ACPI_OWNER_ID OwnerId; > + UINT8 DisplayType; > + UINT32 AddressSpaceId; > + > +} ACPI_REGION_WALK_INFO; > + > + > /* TBD: [Restructure] Merge with struct above */ > > typedef struct acpi_walk_info > diff --git a/src/acpica/source/include/acutils.h b/src/acpica/source/include/acutils.h > index 0c2327d2..6352b5ff 100644 > --- a/src/acpica/source/include/acutils.h > +++ b/src/acpica/source/include/acutils.h > @@ -290,10 +290,11 @@ typedef struct acpi_pkg_info > > /* AcpiUtDumpBuffer */ > > -#define DB_BYTE_DISPLAY 1 > -#define DB_WORD_DISPLAY 2 > -#define DB_DWORD_DISPLAY 4 > -#define DB_QWORD_DISPLAY 8 > +#define DB_BYTE_DISPLAY 0x01 > +#define DB_WORD_DISPLAY 0x02 > +#define DB_DWORD_DISPLAY 0x04 > +#define DB_QWORD_DISPLAY 0x08 > +#define DB_DISPLAY_DATA_ONLY 0x10 > > > /* > diff --git a/src/acpica/source/tools/acpiexec/aecommon.h b/src/acpica/source/tools/acpiexec/aecommon.h > index 602356de..257632f7 100644 > --- a/src/acpica/source/tools/acpiexec/aecommon.h > +++ b/src/acpica/source/tools/acpiexec/aecommon.h > @@ -195,7 +195,8 @@ typedef struct ae_debug_regions > typedef struct init_file_entry > { > char *Name; > - UINT64 Value; > + ACPI_OPERAND_OBJECT *ObjDesc; > + > } INIT_FILE_ENTRY; > > extern BOOLEAN AcpiGbl_UseLocalFaultHandler; > @@ -356,7 +357,7 @@ AeSetupConfiguration ( > ACPI_STATUS > AeLookupInitFileEntry ( > char *Pathname, > - UINT64 *Value); > + ACPI_OPERAND_OBJECT **ObjDesc); > > /* aeexec */ > > diff --git a/src/acpica/source/tools/acpiexec/aehandlers.c b/src/acpica/source/tools/acpiexec/aehandlers.c > index 75e8eb0a..f7dd012e 100644 > --- a/src/acpica/source/tools/acpiexec/aehandlers.c > +++ b/src/acpica/source/tools/acpiexec/aehandlers.c > @@ -683,20 +683,27 @@ AeInstallLateHandlers ( > { > Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY, > AeNotifyHandler1, ACPI_CAST_PTR (void, 0x01234567)); > + ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); > > Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY, > AeNotifyHandler2, ACPI_CAST_PTR (void, 0x89ABCDEF)); > + ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); > > Status = AcpiRemoveNotifyHandler (Handle, ACPI_ALL_NOTIFY, > AeNotifyHandler1); > + ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); > + > Status = AcpiRemoveNotifyHandler (Handle, ACPI_ALL_NOTIFY, > AeNotifyHandler2); > + ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); > > Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY, > AeNotifyHandler2, ACPI_CAST_PTR (void, 0x89ABCDEF)); > + ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); > > Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY, > AeNotifyHandler1, ACPI_CAST_PTR (void, 0x01234567)); > + ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); > } > > Status = AcpiGetHandle (NULL, "\\_PR.CPU0", &Handle); > @@ -704,9 +711,11 @@ AeInstallLateHandlers ( > { > Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY, > AeNotifyHandler1, ACPI_CAST_PTR (void, 0x01234567)); > + ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); > > Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY, > AeNotifyHandler2, ACPI_CAST_PTR (void, 0x89ABCDEF)); > + ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); > } > > #if (!ACPI_REDUCED_HARDWARE) > @@ -855,13 +864,15 @@ AeInstallEarlyHandlers ( > > Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY, > AeNotifyHandler1, ACPI_CAST_PTR (void, 0x01234567)); > + ACPI_CHECK_OK(AcpiInstallNotifyHandler, Status); > > Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY, > AeNotifyHandler2, ACPI_CAST_PTR (void, 0x89ABCDEF)); > + ACPI_CHECK_OK(AcpiInstallNotifyHandler, Status); > > /* Attempt duplicate handler installation, should fail */ > > - Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY, > + (void) AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY, > AeNotifyHandler1, ACPI_CAST_PTR (void, 0x77777777)); > > Status = AcpiAttachData (Handle, AeAttachedDataHandler, Handle); > diff --git a/src/acpica/source/tools/acpiexec/aeinitfile.c b/src/acpica/source/tools/acpiexec/aeinitfile.c > index f895e2cc..35e2b8b8 100644 > --- a/src/acpica/source/tools/acpiexec/aeinitfile.c > +++ b/src/acpica/source/tools/acpiexec/aeinitfile.c > @@ -224,9 +224,13 @@ AeProcessInitFile( > void) > { > ACPI_WALK_STATE *WalkState; > - int i; > UINT64 idx; > ACPI_STATUS Status; > + char *Token; > + char *ObjectBuffer; > + char *TempNameBuffer; > + ACPI_OBJECT_TYPE Type; > + ACPI_OBJECT TempObject; > > > if (!InitFile) > @@ -249,26 +253,44 @@ AeProcessInitFile( > AcpiOsAllocate (sizeof (INIT_FILE_ENTRY) * AcpiGbl_InitFileLineCount); > for (idx = 0; fgets (LineBuffer, AE_FILE_BUFFER_SIZE, InitFile); ++idx) > { > - if (sscanf (LineBuffer, "%s %s\n", > - &NameBuffer[1], ValueBuffer) != 2) > + > + TempNameBuffer = AcpiDbGetNextToken (LineBuffer, &Token, &Type); > + if (LineBuffer[0] == '\\') > { > - goto CleanupAndExit; > + strcpy (NameBuffer, TempNameBuffer); > + } > + else > + { > + /* Add a root prefix if not present in the string */ > + > + strcpy (NameBuffer + 1, TempNameBuffer); > } > > - /* Add a root prefix if not present in the string */ > + AcpiGbl_InitEntries[idx].Name = > + AcpiOsAllocateZeroed (strnlen (NameBuffer, AE_FILE_BUFFER_SIZE) + 1); > + > + strcpy (AcpiGbl_InitEntries[idx].Name, NameBuffer); > + > + ObjectBuffer = AcpiDbGetNextToken (Token, &Token, &Type); > > - i = 0; > - if (NameBuffer[1] == '\\') > + if (Type == ACPI_TYPE_FIELD_UNIT) > + { > + Status = AcpiDbConvertToObject (ACPI_TYPE_BUFFER, ObjectBuffer, > + &TempObject); > + } > + else > { > - i = 1; > + Status = AcpiDbConvertToObject (Type, ObjectBuffer, &TempObject); > } > > - AcpiGbl_InitEntries[idx].Name = > - AcpiOsAllocateZeroed (strnlen (NameBuffer + i, AE_FILE_BUFFER_SIZE) + 1); > + Status = AcpiUtCopyEobjectToIobject (&TempObject, > + &AcpiGbl_InitEntries[idx].ObjDesc); > > - strcpy (AcpiGbl_InitEntries[idx].Name, NameBuffer + i); > + if (Type == ACPI_TYPE_BUFFER || Type == ACPI_TYPE_FIELD_UNIT) > + { > + ACPI_FREE (TempObject.Buffer.Pointer); > + } > > - Status = AcpiUtStrtoul64 (ValueBuffer, &AcpiGbl_InitEntries[idx].Value); > if (ACPI_FAILURE (Status)) > { > AcpiOsPrintf ("%s %s\n", ValueBuffer, > @@ -276,7 +298,16 @@ AeProcessInitFile( > goto CleanupAndExit; > } > > - AeEnterInitFileEntry (AcpiGbl_InitEntries[idx], WalkState); > + /* > + * Special case for field units. Field units are dependent on the > + * parent region. This parent region has yet to be created so defer the > + * initialization until the dispatcher. For all other types, initialize > + * the namespace node with the value found in the init file. > + */ > + if (Type != ACPI_TYPE_FIELD_UNIT) > + { > + AeEnterInitFileEntry (AcpiGbl_InitEntries[idx], WalkState); > + } > } > > /* Cleanup */ > @@ -309,14 +340,12 @@ AeEnterInitFileEntry ( > ACPI_WALK_STATE *WalkState) > { > char *Pathname = InitEntry.Name; > - UINT64 Value = InitEntry.Value; > - ACPI_OPERAND_OBJECT *ObjDesc; > + ACPI_OPERAND_OBJECT *ObjDesc = InitEntry.ObjDesc; > ACPI_NAMESPACE_NODE *NewNode; > ACPI_STATUS Status; > > > - AcpiOsPrintf ("Initializing namespace element: %s\n", Pathname); > - Status = AcpiNsLookup (NULL, Pathname, ACPI_TYPE_INTEGER, > + Status = AcpiNsLookup (NULL, Pathname, ObjDesc->Common.Type, > ACPI_IMODE_LOAD_PASS2, ACPI_NS_ERROR_IF_FOUND | ACPI_NS_NO_UPSEARCH | > ACPI_NS_EARLY_INIT, NULL, &NewNode); > if (ACPI_FAILURE (Status)) > @@ -327,15 +356,17 @@ AeEnterInitFileEntry ( > return; > } > > - ObjDesc = AcpiUtCreateIntegerObject (Value); > - > - AcpiOsPrintf ("New value: 0x%8.8X%8.8X\n", > - ACPI_FORMAT_UINT64 (Value)); > - > /* Store pointer to value descriptor in the Node */ > > Status = AcpiNsAttachObject (NewNode, ObjDesc, > - ACPI_TYPE_INTEGER); > + ObjDesc->Common.Type); > + if (ACPI_FAILURE (Status)) > + { > + ACPI_EXCEPTION ((AE_INFO, Status, > + "While attaching object to node from namespace initialization file: %s", > + Pathname)); > + return; > + } > > /* Remove local reference to the object */ > > @@ -359,7 +390,7 @@ AeEnterInitFileEntry ( > ACPI_STATUS > AeLookupInitFileEntry ( > char *Pathname, > - UINT64 *Value) > + ACPI_OPERAND_OBJECT **ObjDesc) > { > UINT32 i; > > @@ -372,7 +403,7 @@ AeLookupInitFileEntry ( > { > if (!strcmp(AcpiGbl_InitEntries[i].Name, Pathname)) > { > - *Value = AcpiGbl_InitEntries[i].Value; > + *ObjDesc = AcpiGbl_InitEntries[i].ObjDesc; > return AE_OK; > } > } > Acked-by: Alex Hung <alex.hung@canonical.com>
On 10/19/19 10:31 PM, Colin King wrote: > From: Colin Ian King <colin.king@canonical.com> > > Changes in this release of ACPICA are detailed at the following > link on the ACPICA developer mailing list: > > https://lists.acpica.org/hyperkitty/list/devel@acpica.org/thread/2ZK7W5OOHYHRJGKDURZ7YHXKDQL7WTLO/ > > Signed-off-by: Colin Ian King <colin.king@canonical.com> > --- > src/acpica/source/common/acgetline.c | 2 +- > src/acpica/source/common/adisasm.c | 1 - > src/acpica/source/common/adwalk.c | 4 +- > src/acpica/source/common/dmtables.c | 4 +- > src/acpica/source/common/dmtbdump1.c | 22 ++- > src/acpica/source/common/dmtbdump2.c | 24 +++- > src/acpica/source/common/dmtbdump3.c | 6 +- > src/acpica/source/compiler/aslanalyze.c | 2 +- > src/acpica/source/compiler/aslbtypes.c | 1 - > src/acpica/source/compiler/aslkeywords.y | 2 +- > src/acpica/source/compiler/aslload.c | 13 +- > src/acpica/source/compiler/aslmessages.c | 5 +- > src/acpica/source/compiler/aslmessages.h | 3 + > src/acpica/source/compiler/aslmethod.c | 20 ++- > src/acpica/source/compiler/aslnamesp.c | 4 + > src/acpica/source/compiler/aslprepkg.c | 2 +- > src/acpica/source/compiler/aslresource.c | 2 +- > src/acpica/source/compiler/aslrestype2.c | 3 - > src/acpica/source/compiler/aslrestype2s.c | 1 - > src/acpica/source/compiler/aslutils.c | 2 +- > src/acpica/source/compiler/cvdisasm.c | 9 +- > src/acpica/source/compiler/cvparser.c | 1 - > src/acpica/source/compiler/dtcompile.c | 15 ++- > src/acpica/source/compiler/dtcompiler.h | 39 ++++-- > src/acpica/source/compiler/dtcompilerparser.l | 20 ++- > src/acpica/source/compiler/dtcompilerparser.y | 50 ++++--- > src/acpica/source/compiler/dtfield.c | 127 ++++++++++++++++++ > src/acpica/source/compiler/dtio.c | 98 -------------- > src/acpica/source/compiler/dttable2.c | 23 +++- > .../source/components/debugger/dbconvert.c | 4 + > .../source/components/debugger/dbdisply.c | 2 - > .../source/components/debugger/dbfileio.c | 2 +- > .../source/components/debugger/dbinput.c | 36 ++++- > .../source/components/debugger/dbmethod.c | 5 + > .../source/components/debugger/dbnames.c | 122 +++++++++++++++++ > .../source/components/debugger/dbobject.c | 1 - > .../components/disassembler/dmdeferred.c | 4 + > .../source/components/disassembler/dmresrc.c | 1 - > .../source/components/disassembler/dmwalk.c | 1 - > .../source/components/dispatcher/dscontrol.c | 2 +- > .../source/components/dispatcher/dsfield.c | 9 +- > .../source/components/events/evgpeblk.c | 6 +- > .../source/components/events/evgpeinit.c | 3 - > src/acpica/source/components/events/evmisc.c | 17 ++- > .../source/components/events/evregion.c | 4 +- > .../source/components/events/evrgnini.c | 1 - > .../source/components/hardware/hwxfsleep.c | 4 + > .../source/components/namespace/nsconvert.c | 2 +- > .../source/components/namespace/nsdump.c | 6 +- > .../source/components/namespace/nsxfname.c | 2 +- > .../source/components/parser/psobject.c | 6 +- > .../source/components/resources/rscreate.c | 4 + > src/acpica/source/components/tables/tbdata.c | 4 + > .../source/components/tables/tbxfload.c | 49 ++++++- > .../source/components/utilities/utbuffer.c | 62 +++++---- > .../source/components/utilities/utids.c | 3 +- > .../source/components/utilities/uttrack.c | 2 +- > src/acpica/source/include/acdebug.h | 4 + > src/acpica/source/include/acpixf.h | 10 +- > src/acpica/source/include/acstruct.h | 13 ++ > src/acpica/source/include/acutils.h | 9 +- > src/acpica/source/tools/acpiexec/aecommon.h | 5 +- > src/acpica/source/tools/acpiexec/aehandlers.c | 13 +- > src/acpica/source/tools/acpiexec/aeinitfile.c | 81 +++++++---- > 64 files changed, 717 insertions(+), 287 deletions(-) > > diff --git a/src/acpica/source/common/acgetline.c b/src/acpica/source/common/acgetline.c > index 702d046b..3865914b 100644 > --- a/src/acpica/source/common/acgetline.c > +++ b/src/acpica/source/common/acgetline.c > @@ -532,7 +532,7 @@ AcpiOsGetLine ( > * Ignore the various keys like insert/delete/home/end, etc. > * But we must eat the final character of the ESC sequence. > */ > - InputChar = getchar (); > + (void) getchar (); > continue; > > default: > diff --git a/src/acpica/source/common/adisasm.c b/src/acpica/source/common/adisasm.c > index c73208f6..22a85009 100644 > --- a/src/acpica/source/common/adisasm.c > +++ b/src/acpica/source/common/adisasm.c > @@ -746,7 +746,6 @@ AdDoExternalFileList ( > { > ExternalFileList = ExternalFileList->Next; > GlobalStatus = AE_TYPE; > - Status = AE_OK; > continue; > } > > diff --git a/src/acpica/source/common/adwalk.c b/src/acpica/source/common/adwalk.c > index 6da2e8ec..1996c965 100644 > --- a/src/acpica/source/common/adwalk.c > +++ b/src/acpica/source/common/adwalk.c > @@ -601,7 +601,9 @@ AcpiDmFindOrphanDescending ( > return (AE_OK); > } > > +#ifdef ACPI_UNDER_DEVELOPMENT > OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); > +#endif > > switch (Op->Common.AmlOpcode) > { > @@ -1100,7 +1102,7 @@ AcpiDmCommonDescendingOp ( > /* Switch/Case conversion */ > > Status = AcpiDmProcessSwitch (Op); > - return (AE_OK); > + return (Status); > } > > > diff --git a/src/acpica/source/common/dmtables.c b/src/acpica/source/common/dmtables.c > index a2dbea62..e5536ecf 100644 > --- a/src/acpica/source/common/dmtables.c > +++ b/src/acpica/source/common/dmtables.c > @@ -327,7 +327,7 @@ AdCreateTableHeader ( > * makes it easier to rename the disassembled ASL file if needed. > */ > AcpiOsPrintf ( > - "DefinitionBlock (\"\", \"%4.4s\", %hu, \"%.6s\", \"%.8s\", 0x%8.8X)\n", > + "DefinitionBlock (\"\", \"%4.4s\", %u, \"%.6s\", \"%.8s\", 0x%8.8X)\n", > Table->Signature, Table->Revision, > Table->OemId, Table->OemTableId, Table->OemRevision); > } > @@ -601,7 +601,7 @@ AdParseTable ( > fprintf (stderr, > "Parsing Deferred Opcodes (Methods/Buffers/Packages/Regions)\n"); > > - Status = AcpiDmParseDeferredOps (AcpiGbl_ParseOpRoot); > + (void) AcpiDmParseDeferredOps (AcpiGbl_ParseOpRoot); > fprintf (stderr, "\n"); > > /* Process Resource Templates */ > diff --git a/src/acpica/source/common/dmtbdump1.c b/src/acpica/source/common/dmtbdump1.c > index c363ac8d..9061ea11 100644 > --- a/src/acpica/source/common/dmtbdump1.c > +++ b/src/acpica/source/common/dmtbdump1.c > @@ -474,7 +474,6 @@ AcpiDmDumpCsrt ( > { > return; > } > - SubSubOffset += InfoLength; > } > > /* Point to next sub-subtable */ > @@ -1401,7 +1400,6 @@ AcpiDmDumpHmat ( > while (Offset < Table->Length) > { > AcpiOsPrintf ("\n"); > - SubtableOffset = 0; > > /* Dump HMAT structure header */ > > @@ -1484,6 +1482,11 @@ AcpiDmDumpHmat ( > Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, > ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), > 4, AcpiDmTableInfoHmat1a); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > SubtableOffset += 4; > } > > @@ -1500,6 +1503,11 @@ AcpiDmDumpHmat ( > Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, > ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), > 4, AcpiDmTableInfoHmat1b); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > SubtableOffset += 4; > } > > @@ -1519,6 +1527,11 @@ AcpiDmDumpHmat ( > Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, > ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), > 2, AcpiDmTableInfoHmat1c); > + if (ACPI_FAILURE(Status)) > + { > + return; > + } > + > SubtableOffset += 2; > } > } > @@ -1542,6 +1555,11 @@ AcpiDmDumpHmat ( > Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, > ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), > 2, AcpiDmTableInfoHmat2a); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > SubtableOffset += 2; > } > break; > diff --git a/src/acpica/source/common/dmtbdump2.c b/src/acpica/source/common/dmtbdump2.c > index 418b6ec0..e350d23c 100644 > --- a/src/acpica/source/common/dmtbdump2.c > +++ b/src/acpica/source/common/dmtbdump2.c > @@ -187,6 +187,7 @@ AcpiDmDumpIort ( > ACPI_DMTABLE_INFO *InfoTable; > char *String; > UINT32 i; > + UINT32 MappingByteLength; > > > /* Main table */ > @@ -314,6 +315,11 @@ AcpiDmDumpIort ( > Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, > ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), > 4, AcpiDmTableInfoIort0a); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > NodeOffset += 4; > } > } > @@ -325,8 +331,10 @@ AcpiDmDumpIort ( > > if (IortNode->Length > NodeOffset) > { > + MappingByteLength = > + IortNode->MappingCount * sizeof (ACPI_IORT_ID_MAPPING); > Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, > - Table, IortNode->Length - NodeOffset, > + Table, IortNode->Length - NodeOffset - MappingByteLength, > AcpiDmTableInfoIort1a); > if (ACPI_FAILURE (Status)) > { > @@ -410,7 +418,6 @@ NextSubtable: > /* Point to next node subtable */ > > Offset += IortNode->Length; > - IortNode = ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, IortNode->Length); > } > } > > @@ -1211,7 +1218,6 @@ AcpiDmDumpNfit ( > /* Has a variable number of 32-bit values at the end */ > > InfoTable = AcpiDmTableInfoNfit2; > - Interleave = ACPI_CAST_PTR (ACPI_NFIT_INTERLEAVE, Subtable); > FieldOffset = sizeof (ACPI_NFIT_INTERLEAVE); > break; > > @@ -1236,7 +1242,6 @@ AcpiDmDumpNfit ( > /* Has a variable number of 64-bit addresses at the end */ > > InfoTable = AcpiDmTableInfoNfit6; > - Hint = ACPI_CAST_PTR (ACPI_NFIT_FLUSH_ADDRESS, Subtable); > FieldOffset = sizeof (ACPI_NFIT_FLUSH_ADDRESS) - sizeof (UINT64); > break; > > @@ -1273,6 +1278,7 @@ AcpiDmDumpNfit ( > { > case ACPI_NFIT_TYPE_INTERLEAVE: > > + Interleave = ACPI_CAST_PTR (ACPI_NFIT_INTERLEAVE, Subtable); > for (i = 0; i < Interleave->LineCount; i++) > { > Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset, > @@ -1308,6 +1314,7 @@ AcpiDmDumpNfit ( > > case ACPI_NFIT_TYPE_FLUSH_ADDRESS: > > + Hint = ACPI_CAST_PTR (ACPI_NFIT_FLUSH_ADDRESS, Subtable); > for (i = 0; i < Hint->HintCount; i++) > { > Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset, > @@ -1806,6 +1813,11 @@ AcpiDmDumpPptt ( > Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, > ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, SubtableOffset), > 4, AcpiDmTableInfoPptt0a); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > SubtableOffset += 4; > } > break; > @@ -2063,6 +2075,10 @@ AcpiDmDumpSdev ( > Status = AcpiDmDumpTable (Table->Length, 0, > ACPI_ADD_PTR (UINT8, Pcie, VendorDataOffset), > VendorDataLength, AcpiDmTableInfoSdev1b); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > } > break; > > diff --git a/src/acpica/source/common/dmtbdump3.c b/src/acpica/source/common/dmtbdump3.c > index 0b9863cc..561a0032 100644 > --- a/src/acpica/source/common/dmtbdump3.c > +++ b/src/acpica/source/common/dmtbdump3.c > @@ -410,7 +410,7 @@ AcpiDmDumpStao ( > Namepath = ACPI_ADD_PTR (char, Table, Offset); > StringLength = strlen (Namepath) + 1; > > - AcpiDmLineHeader (Offset, StringLength, "Namestring"); > + AcpiDmLineHeader (Offset, StringLength, "Namepath"); > AcpiOsPrintf ("\"%s\"\n", Namepath); > > /* Point to next namepath */ > @@ -526,7 +526,7 @@ AcpiDmDumpTpm2Rev3 ( > { > case ACPI_TPM23_ACPI_START_METHOD: > > - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > + (void) AcpiDmDumpTable (Table->Length, Offset, Subtable, > Table->Length - Offset, AcpiDmTableInfoTpm23a); > break; > > @@ -591,7 +591,7 @@ AcpiDmDumpTpm2 ( > Offset += sizeof (ACPI_TPM2_TRAILER); > > AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Table->Length, Offset, ArmSubtable, > + (void) AcpiDmDumpTable (Table->Length, Offset, ArmSubtable, > Table->Length - Offset, AcpiDmTableInfoTpm211); > break; > > diff --git a/src/acpica/source/compiler/aslanalyze.c b/src/acpica/source/compiler/aslanalyze.c > index 58da5e2e..0482775f 100644 > --- a/src/acpica/source/compiler/aslanalyze.c > +++ b/src/acpica/source/compiler/aslanalyze.c > @@ -569,7 +569,7 @@ ApCheckForGpeNameConflict ( > > /* Need a null-terminated string version of NameSeg */ > > - ACPI_MOVE_32_TO_32 (Name, &Op->Asl.NameSeg); > + ACPI_MOVE_32_TO_32 (Name, Op->Asl.NameSeg); > Name[ACPI_NAMESEG_SIZE] = 0; > > /* > diff --git a/src/acpica/source/compiler/aslbtypes.c b/src/acpica/source/compiler/aslbtypes.c > index ed607f3b..d7caea53 100644 > --- a/src/acpica/source/compiler/aslbtypes.c > +++ b/src/acpica/source/compiler/aslbtypes.c > @@ -474,7 +474,6 @@ AnFormatBtype ( > strcat (Buffer, "|"); > } > > - First = FALSE; > strcat (Buffer, "Resource"); > } > } > diff --git a/src/acpica/source/compiler/aslkeywords.y b/src/acpica/source/compiler/aslkeywords.y > index a19b6425..a505dc02 100644 > --- a/src/acpica/source/compiler/aslkeywords.y > +++ b/src/acpica/source/compiler/aslkeywords.y > @@ -202,7 +202,7 @@ AddressKeyword > ; > > AddressSpaceKeyword > - : ByteConst {$$ = UtCheckIntegerRange ($1, 0x0A, 0xFF);} > + : ByteConst {$$ = UtCheckIntegerRange ($1, ACPI_NUM_PREDEFINED_REGIONS, 0xFF);} > | RegionSpaceKeyword {} > ; > > diff --git a/src/acpica/source/compiler/aslload.c b/src/acpica/source/compiler/aslload.c > index d918c0cc..db6c2d41 100644 > --- a/src/acpica/source/compiler/aslload.c > +++ b/src/acpica/source/compiler/aslload.c > @@ -526,13 +526,12 @@ LdNamespace1Begin ( > > case AML_INT_CONNECTION_OP: > > - > if (Op->Asl.Child->Asl.AmlOpcode != AML_INT_NAMEPATH_OP) > { > break; > } > - Arg = Op->Asl.Child; > > + Arg = Op->Asl.Child; > Status = AcpiNsLookup (WalkState->ScopeInfo, Arg->Asl.ExternalName, > ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, > WalkState, &Node); > @@ -541,15 +540,6 @@ LdNamespace1Begin ( > break; > } > > - if (Node->Type == ACPI_TYPE_BUFFER) > - { > - Arg->Asl.Node = Node; > - > - Arg = Node->Op->Asl.Child; /* Get namepath */ > - Arg = Arg->Asl.Next; /* Get actual buffer */ > - Arg = Arg->Asl.Child; /* Buffer length */ > - Arg = Arg->Asl.Next; /* RAW_DATA buffer */ > - } > break; > > default: > @@ -576,7 +566,6 @@ LdNamespace1Begin ( > * These opcodes are guaranteed to have a parent. > * Examine the parent opcode. > */ > - Status = AE_OK; > ParentOp = Op->Asl.Parent; > OpInfo = AcpiPsGetOpcodeInfo (ParentOp->Asl.AmlOpcode); > > diff --git a/src/acpica/source/compiler/aslmessages.c b/src/acpica/source/compiler/aslmessages.c > index 8dd989ca..d1329352 100644 > --- a/src/acpica/source/compiler/aslmessages.c > +++ b/src/acpica/source/compiler/aslmessages.c > @@ -387,7 +387,10 @@ const char *AslTableCompilerMsgs [] = > /* ASL_MSG_UNKNOWN_LABEL */ "Label is undefined", > /* ASL_MSG_UNKNOWN_SUBTABLE */ "Unknown subtable type", > /* ASL_MSG_UNKNOWN_TABLE */ "Unknown ACPI table signature", > -/* ASL_MSG_ZERO_VALUE */ "Value must be non-zero" > +/* ASL_MSG_ZERO_VALUE */ "Value must be non-zero", > +/* ASL_MSG_INVALID_LABEL */ "Invalid field label detected", > +/* ASL_MSG_BUFFER_LIST */ "Invalid buffer initializer list", > +/* ASL_MSG_ENTRY_LIST */ "Invalid entry initializer list" > }; > > /* Preprocessor */ > diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h > index 55473fb5..47e5bf43 100644 > --- a/src/acpica/source/compiler/aslmessages.h > +++ b/src/acpica/source/compiler/aslmessages.h > @@ -387,6 +387,9 @@ typedef enum > ASL_MSG_UNKNOWN_SUBTABLE, > ASL_MSG_UNKNOWN_TABLE, > ASL_MSG_ZERO_VALUE, > + ASL_MSG_INVALID_LABEL, > + ASL_MSG_BUFFER_LIST, > + ASL_MSG_ENTRY_LIST, > > /* These messages are used by the Preprocessor only */ > > diff --git a/src/acpica/source/compiler/aslmethod.c b/src/acpica/source/compiler/aslmethod.c > index 98884bc3..667eaaaf 100644 > --- a/src/acpica/source/compiler/aslmethod.c > +++ b/src/acpica/source/compiler/aslmethod.c > @@ -199,6 +199,8 @@ MtMethodAnalysisWalkBegin ( > ACPI_PARSE_OBJECT *NextType; > ACPI_PARSE_OBJECT *NextParamType; > UINT8 ActualArgs = 0; > + BOOLEAN HidExists; > + BOOLEAN AdrExists; > > > /* Build cross-reference output file if requested */ > @@ -535,12 +537,26 @@ MtMethodAnalysisWalkBegin ( > > case PARSEOP_DEVICE: > > - if (!ApFindNameInDeviceTree (METHOD_NAME__HID, Op) && > - !ApFindNameInDeviceTree (METHOD_NAME__ADR, Op)) > + /* Check usage of _HID and _ADR objects */ > + > + HidExists = ApFindNameInDeviceTree (METHOD_NAME__HID, Op); > + AdrExists = ApFindNameInDeviceTree (METHOD_NAME__ADR, Op); > + > + if (!HidExists && !AdrExists) > { > AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > "Device object requires a _HID or _ADR in same scope"); > } > + else if (HidExists && AdrExists) > + { > + /* > + * According to the ACPI spec, "A device object must contain > + * either an _HID object or an _ADR object, but should not contain > + * both". > + */ > + AslError (ASL_WARNING, ASL_MSG_MULTIPLE_TYPES, Op, > + "Device object requires either a _HID or _ADR, but not both"); > + } > break; > > case PARSEOP_EVENT: > diff --git a/src/acpica/source/compiler/aslnamesp.c b/src/acpica/source/compiler/aslnamesp.c > index b5af0cb3..e38e397f 100644 > --- a/src/acpica/source/compiler/aslnamesp.c > +++ b/src/acpica/source/compiler/aslnamesp.c > @@ -234,6 +234,10 @@ NsDisplayNamespace ( > Status = AcpiNsWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, > ACPI_UINT32_MAX, FALSE, NsDoOneNamespaceObject, NULL, > NULL, NULL); > + if (ACPI_FAILURE (Status)) > + { > + return (Status); > + } > > /* Print the full pathname for each namespace node */ > > diff --git a/src/acpica/source/compiler/aslprepkg.c b/src/acpica/source/compiler/aslprepkg.c > index f55bb5e8..77969430 100644 > --- a/src/acpica/source/compiler/aslprepkg.c > +++ b/src/acpica/source/compiler/aslprepkg.c > @@ -458,7 +458,7 @@ ApCheckPackage ( > > for (i = 0; i < Package->RetInfo4.Count1; ++i) > { > - Status = ApCheckObjectType (Predefined->Info.Name, Op, > + ApCheckObjectType (Predefined->Info.Name, Op, > Package->RetInfo4.ObjectType1, i); > Op = Op->Asl.Next; > } > diff --git a/src/acpica/source/compiler/aslresource.c b/src/acpica/source/compiler/aslresource.c > index 82de5109..57b6440f 100644 > --- a/src/acpica/source/compiler/aslresource.c > +++ b/src/acpica/source/compiler/aslresource.c > @@ -1226,7 +1226,7 @@ RsDoResourceTemplate ( > BufferOp->Asl.AmlOpcode = AML_RAW_DATA_CHAIN; > BufferOp->Asl.AmlOpcodeLength = 0; > BufferOp->Asl.AmlLength = CurrentByteOffset; > - BufferOp->Asl.Value.Buffer = (UINT8 *) HeadRnode.Next; > + BufferOp->Asl.Value.Buffer = ACPI_CAST_PTR (UINT8, HeadRnode.Next); > BufferOp->Asl.CompileFlags |= OP_IS_RESOURCE_DATA; > UtSetParseOpName (BufferOp); > > diff --git a/src/acpica/source/compiler/aslrestype2.c b/src/acpica/source/compiler/aslrestype2.c > index 5b8f026e..0652272f 100644 > --- a/src/acpica/source/compiler/aslrestype2.c > +++ b/src/acpica/source/compiler/aslrestype2.c > @@ -487,10 +487,7 @@ RsDoInterruptDescriptor ( > > if (StringLength && ResSourceString) > { > - > strcpy ((char *) Rover, (char *) ResSourceString); > - Rover = ACPI_ADD_PTR ( > - AML_RESOURCE, &(Rover->ByteItem), StringLength); > > Descriptor->ExtendedIrq.ResourceLength = (UINT16) > (Descriptor->ExtendedIrq.ResourceLength + StringLength); > diff --git a/src/acpica/source/compiler/aslrestype2s.c b/src/acpica/source/compiler/aslrestype2s.c > index 23085054..410ff2b2 100644 > --- a/src/acpica/source/compiler/aslrestype2s.c > +++ b/src/acpica/source/compiler/aslrestype2s.c > @@ -674,7 +674,6 @@ RsDoGpioIoDescriptor ( > ResSourceLength = RsGetStringDataLength (InitializerOp); > VendorLength = RsGetBufferDataLength (InitializerOp); > InterruptLength = RsGetInterruptDataLength (InitializerOp, 10); > - PinList = InterruptList; > > DescriptorSize = ACPI_AML_SIZE_LARGE (AML_RESOURCE_GPIO) + > ResSourceLength + VendorLength + InterruptLength; > diff --git a/src/acpica/source/compiler/aslutils.c b/src/acpica/source/compiler/aslutils.c > index ed2948d0..0faaec03 100644 > --- a/src/acpica/source/compiler/aslutils.c > +++ b/src/acpica/source/compiler/aslutils.c > @@ -223,7 +223,7 @@ UtQueryForOverwrite ( > char *Pathname) > { > struct stat StatInfo; > - int InChar = 0x34; > + int InChar; > > > if (!stat (Pathname, &StatInfo)) > diff --git a/src/acpica/source/compiler/cvdisasm.c b/src/acpica/source/compiler/cvdisasm.c > index 3ff636f8..5396b3c3 100644 > --- a/src/acpica/source/compiler/cvdisasm.c > +++ b/src/acpica/source/compiler/cvdisasm.c > @@ -544,8 +544,11 @@ CvSwitchFiles( > Current = Current->Parent; > } > > - /* Redirect output to Op->Common.CvFilename */ > + if (FNode) > + { > + /* Redirect output to Op->Common.CvFilename */ > > - AcpiOsRedirectOutput (FNode->File); > - AcpiGbl_CurrentFilename = FNode->Filename; > + AcpiOsRedirectOutput (FNode->File); > + AcpiGbl_CurrentFilename = FNode->Filename; > + } > } > diff --git a/src/acpica/source/compiler/cvparser.c b/src/acpica/source/compiler/cvparser.c > index ca970b50..9a2f0f9c 100644 > --- a/src/acpica/source/compiler/cvparser.c > +++ b/src/acpica/source/compiler/cvparser.c > @@ -912,7 +912,6 @@ CvCaptureCommentsOnly ( > > /* Not a valid comment option. Revert the AML */ > > - Aml -= 2; > goto DefBlock; > > } /* End switch statement */ > diff --git a/src/acpica/source/compiler/dtcompile.c b/src/acpica/source/compiler/dtcompile.c > index b6a144fe..bdd8c1b7 100644 > --- a/src/acpica/source/compiler/dtcompile.c > +++ b/src/acpica/source/compiler/dtcompile.c > @@ -276,7 +276,10 @@ DtDoCompile ( > > if (ACPI_FAILURE (Status)) > { > - FileNode->ParserErrorDetected = TRUE; > + if (FileNode) > + { > + FileNode->ParserErrorDetected = TRUE; > + } > > /* TBD: temporary error message. Msgs should come from function above */ > > @@ -572,7 +575,7 @@ DtCompileTable ( > ACPI_STATUS Status = AE_OK; > > > - if (!Field) > + if (!Field || !Info) > { > return (AE_BAD_PARAMETER); > } > @@ -643,6 +646,14 @@ DtCompileTable ( > FieldType = DtGetFieldType (Info); > AslGbl_InputFieldCount++; > > + if (FieldType != DT_FIELD_TYPE_INLINE_SUBTABLE && > + strcmp (Info->Name, LocalField->Name)) > + { > + sprintf (AslGbl_MsgBuffer, "found \"%s\" expected \"%s\"", > + LocalField->Name, Info->Name); > + DtError (ASL_ERROR, ASL_MSG_INVALID_LABEL, LocalField, AslGbl_MsgBuffer); > + } > + > switch (FieldType) > { > case DT_FIELD_TYPE_FLAGS_INTEGER: > diff --git a/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h > index 639c22cb..7c78b55b 100644 > --- a/src/acpica/source/compiler/dtcompiler.h > +++ b/src/acpica/source/compiler/dtcompiler.h > @@ -210,6 +210,17 @@ typedef struct dt_field > > #define DT_FIELD_NOT_ALLOCATED 1 > > +/* > + * Structure used for each individual key or value > + */ > +typedef struct dt_table_unit > +{ > + char *Value; /* Field value (from name : value) */ > + UINT32 Line; /* Line number for this field */ > + UINT32 Column; /* Start column for field value */ > + > +} DT_TABLE_UNIT; > + > > /* > * Structure used for individual subtables within an ACPI table > @@ -292,14 +303,6 @@ DtCompilePadding ( > UINT32 Length, > DT_SUBTABLE **RetSubtable); > > -void > -DtCreateField ( > - char *Name, > - char *Value, > - UINT32 Line, > - UINT32 Offset, > - UINT32 Column, > - UINT32 NameColumn); > > /* dtio - binary and text input/output */ > > @@ -437,6 +440,26 @@ DtCompileFlag ( > ACPI_DMTABLE_INFO *Info); > > > +/* dtfield - DT_FIELD operations */ > + > +void > +DtLinkField ( > + DT_FIELD *Field); > + > +void > +DtCreateField ( > + DT_TABLE_UNIT *FieldKey, > + DT_TABLE_UNIT *FieldValue, > + UINT32 Offset); > + > +DT_TABLE_UNIT * > +DtCreateTableUnit ( > + char *Data, > + UINT32 Line, > + UINT32 Column); > + > + > + > /* dtparser - lex/yacc files */ > > UINT64 DtCompilerParserResult; /* Expression return value */ > diff --git a/src/acpica/source/compiler/dtcompilerparser.l b/src/acpica/source/compiler/dtcompilerparser.l > index 0d68f41e..28dcf6af 100644 > --- a/src/acpica/source/compiler/dtcompilerparser.l > +++ b/src/acpica/source/compiler/dtcompilerparser.l > @@ -161,18 +161,20 @@ YYSTYPE DtCompilerlval; > /* handle locations */ > > int DtCompilerParsercolumn = 1; > +int DtLabelByteOffset = 0; > int DtCompilerParserByteOffset = 0; > > +UINT32 DtTokenFirstLine = 0; > +UINT32 DtTokenFirstColumn = 0; > + > #define YY_USER_ACTION \ > - DtCompilerParserlloc.first_line = DtCompilerParserlloc.last_line = DtCompilerParserlineno; \ > - DtCompilerParserlloc.first_column = DtCompilerParsercolumn; \ > - DtCompilerParserlloc.first_byte_offset = DtCompilerParserByteOffset; \ > - DtCompilerParserlloc.last_column = DtCompilerParsercolumn + DtCompilerParserleng-1; \ > + DtTokenFirstLine = DtCompilerParserlineno; \ > + DtTokenFirstColumn = DtCompilerParsercolumn; \ > DtCompilerParsercolumn += DtCompilerParserleng; \ > DtCompilerParserByteOffset += DtCompilerParserleng; \ > DbgPrint (ASL_PARSE_OUTPUT,\ > - "user action occurred. DtCompilerParserlloc.first_line: %u offset: %u\n",\ > - DtCompilerParserlloc.first_line, DtCompilerParserlloc.first_byte_offset); > + "user action occurred. DtCompilerParserlloc.first_line: %u\n",\ > + DtTokenFirstLine); > %} > > %option nounput noinput yylineno > @@ -236,7 +238,11 @@ CommentField {LabelName}{WhiteSpace}*:{WhiteSpace}{Comment}?$ > int size = strlen (DtCompilerParsertext); > s=UtLocalCacheCalloc (size + 1); > AcpiUtSafeStrncpy (s, DtCompilerParsertext, size + 1); > - DtCompilerParserlval.s = s; > + DtCompilerParserlval.u = (DT_TABLE_UNIT *) UtLocalCacheCalloc (sizeof (DT_TABLE_UNIT)); > + DtCompilerParserlval.u->Value = s; > + DtCompilerParserlval.u->Line = DtCompilerParserlineno; > + DtCompilerParserlval.u->Column = DtCompilerParsercolumn; > + DtLabelByteOffset = DtCompilerParserByteOffset; > DbgPrint (ASL_PARSE_OUTPUT, "Label: %s\n", s); > return (DT_PARSEOP_LABEL); > } > diff --git a/src/acpica/source/compiler/dtcompilerparser.y b/src/acpica/source/compiler/dtcompilerparser.y > index ba9d2827..43eba4e9 100644 > --- a/src/acpica/source/compiler/dtcompilerparser.y > +++ b/src/acpica/source/compiler/dtcompilerparser.y > @@ -169,9 +169,13 @@ void DtCompilerParsererror (char const *msg); > extern char *DtCompilerParsertext; > extern DT_FIELD *AslGbl_CurrentField; > > +extern int DtLabelByteOffset; > extern UINT64 DtCompilerParserResult; /* Expression return value */ > extern UINT64 DtCompilerParserlineno; /* Current line number */ > > +extern UINT32 DtTokenFirstLine; > +extern UINT32 DtTokenFirstColumn; > + > /* Bison/yacc configuration */ > > #define yytname DtCompilerParsername > @@ -186,42 +190,30 @@ extern UINT64 DtCompilerParserlineno; /* Current line number */ > > %} > > -%code requires { > - > - typedef struct YYLTYPE { > - int first_line; > - int last_line; > - int first_column; > - int last_column; > - int first_byte_offset; > - } YYLTYPE; > - > - #define YYLTYPE_IS_DECLARED 1 > -} > - > > %union { > char *s; > DT_FIELD *f; > + DT_TABLE_UNIT *u; > } > > > %type <f> Table > -%token <s> DT_PARSEOP_DATA > -%token <s> DT_PARSEOP_LABEL > -%token <s> DT_PARSEOP_STRING_DATA > -%token <s> DT_PARSEOP_LINE_CONTINUATION > -%type <s> Data > -%type <s> Datum > -%type <s> MultiLineData > -%type <s> MultiLineDataList > +%token <u> DT_PARSEOP_DATA > +%token <u> DT_PARSEOP_LABEL > +%token <u> DT_PARSEOP_STRING_DATA > +%token <u> DT_PARSEOP_LINE_CONTINUATION > +%type <u> Data > +%type <u> Datum > +%type <u> MultiLineData > +%type <u> MultiLineDataList > > > %% > > Table > : > - FieldList { DtCompilerParserResult = 5;} > + FieldList { } > ; > > FieldList > @@ -230,7 +222,7 @@ FieldList > ; > > Field > - : DT_PARSEOP_LABEL ':' Data { DtCreateField ($1, $3, (@3).first_line, (@1).first_byte_offset, (@1).first_column, (@3).first_column); } > + : DT_PARSEOP_LABEL ':' Data { DtCreateField ($1, $3, DtLabelByteOffset); } > ; > > Data > @@ -240,7 +232,7 @@ Data > ; > > MultiLineDataList > - : MultiLineDataList MultiLineData { $$ = AcpiUtStrcat(AcpiUtStrcat($1, " "), $2); } /* combine the strings with strcat */ > + : MultiLineDataList MultiLineData { $$ = DtCreateTableUnit (AcpiUtStrcat(AcpiUtStrcat($1->Value, " "), $2->Value), $1->Line, $1->Column); } /* combine the strings with strcat */ > | MultiLineData { $$ = $1; } > ; > > @@ -249,8 +241,14 @@ MultiLineData > ; > > Datum > - : DT_PARSEOP_DATA { DbgPrint (ASL_PARSE_OUTPUT, "parser data: [%s]\n", DtCompilerParserlval.s); $$ = AcpiUtStrdup(DtCompilerParserlval.s); } > - | DT_PARSEOP_STRING_DATA { DbgPrint (ASL_PARSE_OUTPUT, "parser string data: [%s]\n", DtCompilerParserlval.s); $$ = AcpiUtStrdup(DtCompilerParserlval.s); } > + : DT_PARSEOP_DATA { > + DbgPrint (ASL_PARSE_OUTPUT, "parser data: [%s]\n", DtCompilerParserlval.s); > + $$ = DtCreateTableUnit (AcpiUtStrdup(DtCompilerParserlval.s), DtTokenFirstLine, DtTokenFirstColumn); > + } > + | DT_PARSEOP_STRING_DATA { > + DbgPrint (ASL_PARSE_OUTPUT, "parser string data: [%s]\n", DtCompilerParserlval.s); > + $$ = DtCreateTableUnit (AcpiUtStrdup(DtCompilerParserlval.s), DtTokenFirstLine, DtTokenFirstColumn); > + } > ; > > > diff --git a/src/acpica/source/compiler/dtfield.c b/src/acpica/source/compiler/dtfield.c > index 1f716761..18d44110 100644 > --- a/src/acpica/source/compiler/dtfield.c > +++ b/src/acpica/source/compiler/dtfield.c > @@ -576,6 +576,14 @@ DtCompileBuffer ( > > StringValue = DtNormalizeBuffer (StringValue, &Count); > Substring = StringValue; > + if (Count != ByteLength) > + { > + sprintf(AslGbl_MsgBuffer, > + "Found %u values, must match expected count: %u", > + Count, ByteLength); > + DtError (ASL_ERROR, ASL_MSG_BUFFER_LIST, Field, AslGbl_MsgBuffer); > + goto Exit; > + } > > /* Each element of StringValue is now three chars (2 hex + 1 space) */ > > @@ -721,3 +729,122 @@ DtCompileFlag ( > > *Buffer |= (UINT8) (Value << BitPosition); > } > + > + > +/****************************************************************************** > + * > + * FUNCTION: DtCreateField > + * > + * PARAMETERS: Name > + * Value > + * Line > + * Offset > + * Column > + * NameColumn > + * > + * RETURN: None > + * > + * DESCRIPTION: Create a field > + * > + *****************************************************************************/ > + > +void > +DtCreateField ( > + DT_TABLE_UNIT *FieldKey, > + DT_TABLE_UNIT *FieldValue, > + UINT32 Offset) > +{ > + DT_FIELD *Field = UtFieldCacheCalloc (); > + > + > + Field->StringLength = 0; > + if (FieldKey->Value) > + { > + Field->Name = > + strcpy (UtLocalCacheCalloc (strlen (FieldKey->Value) + 1), FieldKey->Value); > + } > + > + if (FieldValue->Value) > + { > + Field->StringLength = strlen (FieldValue->Value); > + Field->Value = > + strcpy (UtLocalCacheCalloc (Field->StringLength + 1), FieldValue->Value); > + } > + > + Field->Line = FieldValue->Line; > + Field->ByteOffset = Offset; > + Field->NameColumn = FieldKey->Column; > + Field->Column = FieldValue->Column; > + DtLinkField (Field); > + > + DtDumpFieldList (AslGbl_FieldList); > +} > + > + > +/****************************************************************************** > + * > + * FUNCTION: DtCreateTableUnit > + * > + * PARAMETERS: Data > + * Line > + * Column > + * > + * RETURN: a table unit > + * > + * DESCRIPTION: Create a table unit > + * > + *****************************************************************************/ > + > +DT_TABLE_UNIT * > +DtCreateTableUnit ( > + char *Data, > + UINT32 Line, > + UINT32 Column) > +{ > + DT_TABLE_UNIT *Unit = (DT_TABLE_UNIT *) UtFieldCacheCalloc (); > + > + > + Unit->Value = Data; > + Unit->Line = Line; > + Unit->Column = Column; > + return (Unit); > +} > + > + > +/****************************************************************************** > + * > + * FUNCTION: DtLinkField > + * > + * PARAMETERS: Field - New field object to link > + * > + * RETURN: None > + * > + * DESCRIPTION: Link one field name and value to the list > + * > + *****************************************************************************/ > + > +void > +DtLinkField ( > + DT_FIELD *Field) > +{ > + DT_FIELD *Prev; > + DT_FIELD *Next; > + > + > + Prev = Next = AslGbl_FieldList; > + > + while (Next) > + { > + Prev = Next; > + Next = Next->Next; > + } > + > + if (Prev) > + { > + Prev->Next = Field; > + } > + else > + { > + AslGbl_FieldList = Field; > + } > +} > diff --git a/src/acpica/source/compiler/dtio.c b/src/acpica/source/compiler/dtio.c > index d027353c..b596fda8 100644 > --- a/src/acpica/source/compiler/dtio.c > +++ b/src/acpica/source/compiler/dtio.c > @@ -162,10 +162,6 @@ static char * > DtTrim ( > char *String); > > -static void > -DtLinkField ( > - DT_FIELD *Field); > - > static ACPI_STATUS > DtParseLine ( > char *LineBuffer, > @@ -297,45 +293,6 @@ DtTrim ( > } > > > -/****************************************************************************** > - * > - * FUNCTION: DtLinkField > - * > - * PARAMETERS: Field - New field object to link > - * > - * RETURN: None > - * > - * DESCRIPTION: Link one field name and value to the list > - * > - *****************************************************************************/ > - > -static void > -DtLinkField ( > - DT_FIELD *Field) > -{ > - DT_FIELD *Prev; > - DT_FIELD *Next; > - > - > - Prev = Next = AslGbl_FieldList; > - > - while (Next) > - { > - Prev = Next; > - Next = Next->Next; > - } > - > - if (Prev) > - { > - Prev->Next = Field; > - } > - else > - { > - AslGbl_FieldList = Field; > - } > -} > - > - > /****************************************************************************** > * > * FUNCTION: DtParseLine > @@ -493,59 +450,6 @@ DtParseLine ( > } > > > -/****************************************************************************** > - * > - * FUNCTION: DtCreateField > - * > - * PARAMETERS: Name > - * Value > - * Line > - * Offset > - * Column > - * NameColumn > - * > - * RETURN: None > - * > - * DESCRIPTION: Create a field > - * > - *****************************************************************************/ > - > -void > -DtCreateField ( > - char *Name, > - char *Value, > - UINT32 Line, > - UINT32 Offset, > - UINT32 Column, > - UINT32 NameColumn) > -{ > - DT_FIELD *Field = UtFieldCacheCalloc (); > - > - > - Field->StringLength = 0; > - if (Name) > - { > - Field->Name = > - strcpy (UtLocalCacheCalloc (strlen (Name) + 1), Name); > - } > - > - if (Value) > - { > - Field->StringLength = strlen (Value); > - Field->Value = > - strcpy (UtLocalCacheCalloc (Field->StringLength + 1), Value); > - } > - > - Field->Line = Line; > - Field->ByteOffset = Offset; > - Field->NameColumn = NameColumn; > - Field->Column = Column; > - DtLinkField (Field); > - > - DtDumpFieldList (AslGbl_FieldList); > -} > - > - > /****************************************************************************** > * > * FUNCTION: DtGetNextLine > @@ -840,7 +744,6 @@ DtGetNextLine ( > > case '\n': > > - CurrentLineOffset = AslGbl_NextLineOffset; > AslGbl_NextLineOffset = (UINT32) ftell (Handle); > AslGbl_CurrentLineNumber++; > break; > @@ -882,7 +785,6 @@ DtGetNextLine ( > > /* Ignore newline, this will merge the lines */ > > - CurrentLineOffset = AslGbl_NextLineOffset; > AslGbl_NextLineOffset = (UINT32) ftell (Handle); > AslGbl_CurrentLineNumber++; > State = DT_NORMAL_TEXT; > diff --git a/src/acpica/source/compiler/dttable2.c b/src/acpica/source/compiler/dttable2.c > index 04f48cc0..bbaaafaa 100644 > --- a/src/acpica/source/compiler/dttable2.c > +++ b/src/acpica/source/compiler/dttable2.c > @@ -1474,13 +1474,14 @@ DtCompileSdev ( > Namesp->DeviceIdOffset + Namesp->DeviceIdLength; > Namesp->VendorDataLength = > (UINT16) Subtable->Length; > + > + /* Final size of entire namespace structure */ > + > + SdevHeader->Length = (UINT16)(sizeof(ACPI_SDEV_NAMESPACE) + > + Subtable->Length + Namesp->DeviceIdLength); > } > } > > - /* Final size of entire namespace structure */ > - > - SdevHeader->Length = (UINT16) (sizeof (ACPI_SDEV_NAMESPACE) + > - Subtable->Length + Namesp->DeviceIdLength); > break; > > case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE: > @@ -1620,7 +1621,9 @@ DtCompileSlit ( > DT_SUBTABLE *ParentTable; > DT_FIELD **PFieldList = (DT_FIELD **) List; > DT_FIELD *FieldList; > + DT_FIELD *EndOfFieldList = NULL; > UINT32 Localities; > + UINT32 LocalityListLength; > UINT8 *LocalityBuffer; > > > @@ -1636,6 +1639,7 @@ DtCompileSlit ( > > Localities = *ACPI_CAST_PTR (UINT32, Subtable->Buffer); > LocalityBuffer = UtLocalCalloc (Localities); > + LocalityListLength = 0; > > /* Compile each locality buffer */ > > @@ -1645,11 +1649,22 @@ DtCompileSlit ( > DtCompileBuffer (LocalityBuffer, > FieldList->Value, FieldList, Localities); > > + LocalityListLength++; > DtCreateSubtable (LocalityBuffer, Localities, &Subtable); > DtInsertSubtable (ParentTable, Subtable); > + EndOfFieldList = FieldList; > FieldList = FieldList->Next; > } > > + if (LocalityListLength != Localities) > + { > + sprintf(AslGbl_MsgBuffer, > + "Found %u entries, must match LocalityCount: %u", > + LocalityListLength, Localities); > + DtError (ASL_ERROR, ASL_MSG_ENTRY_LIST, EndOfFieldList, AslGbl_MsgBuffer); > + return (AE_LIMIT); > + } > + > ACPI_FREE (LocalityBuffer); > return (AE_OK); > } > diff --git a/src/acpica/source/components/debugger/dbconvert.c b/src/acpica/source/components/debugger/dbconvert.c > index 631e7e8f..6b58bf5f 100644 > --- a/src/acpica/source/components/debugger/dbconvert.c > +++ b/src/acpica/source/components/debugger/dbconvert.c > @@ -274,6 +274,10 @@ AcpiDbConvertToBuffer ( > ACPI_STATUS Status; > > > + /* Skip all preceding white space*/ > + > + AcpiUtRemoveWhitespace (&String); > + > /* Generate the final buffer length */ > > for (i = 0, Length = 0; String[i];) > diff --git a/src/acpica/source/components/debugger/dbdisply.c b/src/acpica/source/components/debugger/dbdisply.c > index 539ff5af..72bf1c6b 100644 > --- a/src/acpica/source/components/debugger/dbdisply.c > +++ b/src/acpica/source/components/debugger/dbdisply.c > @@ -713,7 +713,6 @@ AcpiDbDisplayResults ( > return; > } > > - ObjDesc = WalkState->MethodDesc; > Node = WalkState->MethodNode; > > if (WalkState->Results) > @@ -773,7 +772,6 @@ AcpiDbDisplayCallingTree ( > return; > } > > - Node = WalkState->MethodNode; > AcpiOsPrintf ("Current Control Method Call Tree\n"); > > while (WalkState) > diff --git a/src/acpica/source/components/debugger/dbfileio.c b/src/acpica/source/components/debugger/dbfileio.c > index e937c3e4..7567fa75 100644 > --- a/src/acpica/source/components/debugger/dbfileio.c > +++ b/src/acpica/source/components/debugger/dbfileio.c > @@ -253,7 +253,7 @@ AcpiDbLoadTables ( > { > Table = TableListHead->Table; > > - Status = AcpiLoadTable (Table); > + Status = AcpiLoadTable (Table, NULL); > if (ACPI_FAILURE (Status)) > { > if (Status == AE_ALREADY_EXISTS) > diff --git a/src/acpica/source/components/debugger/dbinput.c b/src/acpica/source/components/debugger/dbinput.c > index d091d351..c854cb37 100644 > --- a/src/acpica/source/components/debugger/dbinput.c > +++ b/src/acpica/source/components/debugger/dbinput.c > @@ -208,6 +208,7 @@ enum AcpiExDebuggerCommands > CMD_EVALUATE, > CMD_EXECUTE, > CMD_EXIT, > + CMD_FIELDS, > CMD_FIND, > CMD_GO, > CMD_HANDLERS, > @@ -287,6 +288,7 @@ static const ACPI_DB_COMMAND_INFO AcpiGbl_DbCommands[] = > {"EVALUATE", 1}, > {"EXECUTE", 1}, > {"EXIT", 0}, > + {"FIELDS", 1}, > {"FIND", 1}, > {"GO", 0}, > {"HANDLERS", 0}, > @@ -360,6 +362,7 @@ static const ACPI_DB_COMMAND_HELP AcpiGbl_DbCommandHelp[] = > {1, " Find <AcpiName> (? is wildcard)", "Find ACPI name(s) with wildcards\n"}, > {1, " Integrity", "Validate namespace integrity\n"}, > {1, " Methods", "Display list of loaded control methods\n"}, > + {1, " Fields <AddressSpaceId>", "Display list of loaded field units by space ID\n"}, > {1, " Namespace [Object] [Depth]", "Display loaded namespace tree/subtree\n"}, > {1, " Notify <Object> <Value>", "Send a notification on Object\n"}, > {1, " Objects [ObjectType]", "Display summary of all objects or just given type\n"}, > @@ -683,6 +686,22 @@ AcpiDbGetNextToken ( > } > break; > > + case '{': > + > + /* This is the start of a field unit, scan until closing brace */ > + > + String++; > + Start = String; > + Type = ACPI_TYPE_FIELD_UNIT; > + > + /* Find end of buffer */ > + > + while (*String && (*String != '}')) > + { > + String++; > + } > + break; > + > case '[': > > /* This is the start of a package, scan until closing bracket */ > @@ -877,6 +896,7 @@ AcpiDbCommandDispatch ( > ACPI_PARSE_OBJECT *Op) > { > UINT32 Temp; > + UINT64 Temp64; > UINT32 CommandIndex; > UINT32 ParamCount; > char *CommandLine; > @@ -894,7 +914,6 @@ AcpiDbCommandDispatch ( > > ParamCount = AcpiDbGetLine (InputBuffer); > CommandIndex = AcpiDbMatchCommand (AcpiGbl_DbArgs[0]); > - Temp = 0; > > /* > * We don't want to add the !! command to the history buffer. It > @@ -993,6 +1012,21 @@ AcpiDbCommandDispatch ( > Status = AcpiDbFindNameInNamespace (AcpiGbl_DbArgs[1]); > break; > > + case CMD_FIELDS: > + > + Status = AcpiUtStrtoul64 (AcpiGbl_DbArgs[1], &Temp64); > + > + if (ACPI_FAILURE (Status) || Temp64 >= ACPI_NUM_PREDEFINED_REGIONS) > + { > + AcpiOsPrintf ( > + "Invalid adress space ID: must be between 0 and %u inclusive\n", > + ACPI_NUM_PREDEFINED_REGIONS - 1); > + return (AE_OK); > + } > + > + Status = AcpiDbDisplayFields ((UINT32) Temp64); > + break; > + > case CMD_GO: > > AcpiGbl_CmSingleStep = FALSE; > diff --git a/src/acpica/source/components/debugger/dbmethod.c b/src/acpica/source/components/debugger/dbmethod.c > index 6893c550..24c014f9 100644 > --- a/src/acpica/source/components/debugger/dbmethod.c > +++ b/src/acpica/source/components/debugger/dbmethod.c > @@ -515,6 +515,11 @@ AcpiDbDisassembleMethod ( > WalkState->ParseFlags |= ACPI_PARSE_DISASSEMBLE; > > Status = AcpiPsParseAml (WalkState); > + if (ACPI_FAILURE(Status)) > + { > + return (Status); > + } > + > (void) AcpiDmParseDeferredOps (Op); > > /* Now we can disassemble the method */ > diff --git a/src/acpica/source/components/debugger/dbnames.c b/src/acpica/source/components/debugger/dbnames.c > index 2c9af4be..ac366ab0 100644 > --- a/src/acpica/source/components/debugger/dbnames.c > +++ b/src/acpica/source/components/debugger/dbnames.c > @@ -154,6 +154,7 @@ > #include "acnamesp.h" > #include "acdebug.h" > #include "acpredef.h" > +#include "acinterp.h" > > > #define _COMPONENT ACPI_CA_DEBUGGER > @@ -722,6 +723,91 @@ AcpiDbWalkForObjectCounts ( > } > > > +/******************************************************************************* > + * > + * FUNCTION: AcpiDbWalkForFields > + * > + * PARAMETERS: Callback from WalkNamespace > + * > + * RETURN: Status > + * > + * DESCRIPTION: Display short info about objects in the namespace > + * > + ******************************************************************************/ > + > +static ACPI_STATUS > +AcpiDbWalkForFields ( > + ACPI_HANDLE ObjHandle, > + UINT32 NestingLevel, > + void *Context, > + void **ReturnValue) > +{ > + ACPI_OBJECT *RetValue; > + ACPI_REGION_WALK_INFO *Info = (ACPI_REGION_WALK_INFO *) Context; > + ACPI_BUFFER Buffer; > + ACPI_STATUS Status; > + ACPI_NAMESPACE_NODE *Node = AcpiNsValidateHandle (ObjHandle); > + > + > + if (!Node) > + { > + return (AE_OK); > + } > + if (Node->Object->Field.RegionObj->Region.SpaceId != Info->AddressSpaceId) > + { > + return (AE_OK); > + } > + > + Info->Count++; > + > + /* Get and display the full pathname to this object */ > + > + Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; > + Status = AcpiNsHandleToPathname (ObjHandle, &Buffer, TRUE); > + if (ACPI_FAILURE (Status)) > + { > + AcpiOsPrintf ("Could Not get pathname for object %p\n", ObjHandle); > + return (AE_OK); > + } > + > + AcpiOsPrintf ("%s ", (char *) Buffer.Pointer); > + ACPI_FREE (Buffer.Pointer); > + > + Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; > + AcpiEvaluateObject (ObjHandle, NULL, NULL, &Buffer); > + > + /* > + * Since this is a field unit, surround the output in braces > + */ > + AcpiOsPrintf ("{"); > + > + RetValue = (ACPI_OBJECT *) Buffer.Pointer; > + switch (RetValue->Type) > + { > + case ACPI_TYPE_INTEGER: > + > + AcpiOsPrintf ("%8.8X%8.8X", ACPI_FORMAT_UINT64 (RetValue->Integer.Value)); > + break; > + > + case ACPI_TYPE_BUFFER: > + > + AcpiUtDumpBuffer (RetValue->Buffer.Pointer, > + RetValue->Buffer.Length, DB_DISPLAY_DATA_ONLY | DB_BYTE_DISPLAY, 0); > + break; > + > + default: > + > + break; > + } > + > + AcpiOsPrintf ("}\n"); > + > + ACPI_FREE (Buffer.Pointer); > + return (AE_OK); > +} > + > + > + > /******************************************************************************* > * > * FUNCTION: AcpiDbWalkForSpecificObjects > @@ -857,6 +943,42 @@ AcpiDbDisplayObjects ( > } > > > +/******************************************************************************* > + * > + * FUNCTION: AcpiDbDisplayFields > + * > + * PARAMETERS: ObjTypeArg - Type of object to display > + * DisplayCountArg - Max depth to display > + * > + * RETURN: None > + * > + * DESCRIPTION: Display objects in the namespace of the requested type > + * > + ******************************************************************************/ > + > +ACPI_STATUS > +AcpiDbDisplayFields ( > + UINT32 AddressSpaceId) > +{ > + ACPI_REGION_WALK_INFO Info; > + > + > + Info.Count = 0; > + Info.OwnerId = ACPI_OWNER_ID_MAX; > + Info.DebugLevel = ACPI_UINT32_MAX; > + Info.DisplayType = ACPI_DISPLAY_SUMMARY | ACPI_DISPLAY_SHORT; > + Info.AddressSpaceId = AddressSpaceId; > + > + /* Walk the namespace from the root */ > + > + (void) AcpiWalkNamespace (ACPI_TYPE_LOCAL_REGION_FIELD, ACPI_ROOT_OBJECT, > + ACPI_UINT32_MAX, AcpiDbWalkForFields, NULL, > + (void *) &Info, NULL); > + > + return (AE_OK); > +} > + > + > /******************************************************************************* > * > * FUNCTION: AcpiDbIntegrityWalk > diff --git a/src/acpica/source/components/debugger/dbobject.c b/src/acpica/source/components/debugger/dbobject.c > index cebf4420..cffa0a53 100644 > --- a/src/acpica/source/components/debugger/dbobject.c > +++ b/src/acpica/source/components/debugger/dbobject.c > @@ -649,7 +649,6 @@ AcpiDbDecodeArguments ( > > > Node = WalkState->MethodNode; > - ObjDesc = WalkState->MethodDesc; > > /* There are no arguments for the module-level code case */ > > diff --git a/src/acpica/source/components/disassembler/dmdeferred.c b/src/acpica/source/components/disassembler/dmdeferred.c > index d0753bb0..d0a589c9 100644 > --- a/src/acpica/source/components/disassembler/dmdeferred.c > +++ b/src/acpica/source/components/disassembler/dmdeferred.c > @@ -309,6 +309,10 @@ AcpiDmDeferredParse ( > WalkState->ParseFlags &= ~ACPI_PARSE_DELETE_TREE; > WalkState->ParseFlags |= ACPI_PARSE_DISASSEMBLE; > Status = AcpiPsParseAml (WalkState); > + if (ACPI_FAILURE (Status)) > + { > + return_ACPI_STATUS(Status); > + } > > StartOp = (Op->Common.Value.Arg)->Common.Next; > SearchOp = StartOp; > diff --git a/src/acpica/source/components/disassembler/dmresrc.c b/src/acpica/source/components/disassembler/dmresrc.c > index bb36b734..c2e85b8a 100644 > --- a/src/acpica/source/components/disassembler/dmresrc.c > +++ b/src/acpica/source/components/disassembler/dmresrc.c > @@ -441,7 +441,6 @@ AcpiDmResourceTemplate ( > * missing EndDependentDescriptor. > */ > Level--; > - DependentFns = FALSE; > > /* Go ahead and insert EndDependentFn() */ > > diff --git a/src/acpica/source/components/disassembler/dmwalk.c b/src/acpica/source/components/disassembler/dmwalk.c > index 8ec8728e..97b33039 100644 > --- a/src/acpica/source/components/disassembler/dmwalk.c > +++ b/src/acpica/source/components/disassembler/dmwalk.c > @@ -957,7 +957,6 @@ AcpiDmDescendingOp ( > * the buffer size Op. Open up a new block > */ > NextOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; > - NextOp = NextOp->Common.Next; > ASL_CV_CLOSE_PAREN (Op, Level); > > /* Emit description comment for Name() with a predefined ACPI name */ > diff --git a/src/acpica/source/components/dispatcher/dscontrol.c b/src/acpica/source/components/dispatcher/dscontrol.c > index 238c77bb..85b4679e 100644 > --- a/src/acpica/source/components/dispatcher/dscontrol.c > +++ b/src/acpica/source/components/dispatcher/dscontrol.c > @@ -235,7 +235,7 @@ AcpiDsExecBeginControlOp ( > ControlState->Control.Opcode = > Op->Common.AmlOpcode; > ControlState->Control.LoopTimeout = AcpiOsGetTimer () + > - (UINT64) (AcpiGbl_MaxLoopIterations * ACPI_100NSEC_PER_SEC); > + ((UINT64) AcpiGbl_MaxLoopIterations * ACPI_100NSEC_PER_SEC); > > /* Push the control state on this walk's control stack */ > > diff --git a/src/acpica/source/components/dispatcher/dsfield.c b/src/acpica/source/components/dispatcher/dsfield.c > index 3aff4db1..5477686f 100644 > --- a/src/acpica/source/components/dispatcher/dsfield.c > +++ b/src/acpica/source/components/dispatcher/dsfield.c > @@ -309,7 +309,6 @@ AcpiDsCreateBufferField ( > if (WalkState->DeferredNode) > { > Node = WalkState->DeferredNode; > - Status = AE_OK; > } > else > { > @@ -435,7 +434,6 @@ AcpiDsGetFieldNames ( > ACPI_PARSE_OBJECT *Child; > > #ifdef ACPI_EXEC_APP > - UINT64 Value = 0; > ACPI_OPERAND_OBJECT *ResultDesc; > ACPI_OPERAND_OBJECT *ObjDesc; > char *NamePath; > @@ -577,14 +575,13 @@ AcpiDsGetFieldNames ( > } > #ifdef ACPI_EXEC_APP > NamePath = AcpiNsGetExternalPathname (Info->FieldNode); > - ObjDesc = AcpiUtCreateIntegerObject (Value); > - if (ACPI_SUCCESS (AeLookupInitFileEntry (NamePath, &Value))) > + if (ACPI_SUCCESS (AeLookupInitFileEntry (NamePath, &ObjDesc))) > { > AcpiExWriteDataToField (ObjDesc, > AcpiNsGetAttachedObject (Info->FieldNode), > &ResultDesc); > + AcpiUtRemoveReference (ObjDesc); > } > - AcpiUtRemoveReference (ObjDesc); > ACPI_FREE (NamePath); > #endif > } > @@ -813,8 +810,6 @@ AcpiDsInitFieldObjects ( > } > > /* Name already exists, just ignore this error */ > - > - Status = AE_OK; > } > > Arg->Common.Node = Node; > diff --git a/src/acpica/source/components/events/evgpeblk.c b/src/acpica/source/components/events/evgpeblk.c > index 80157dcd..e0e2780f 100644 > --- a/src/acpica/source/components/events/evgpeblk.c > +++ b/src/acpica/source/components/events/evgpeblk.c > @@ -272,6 +272,10 @@ AcpiEvDeleteGpeBlock ( > /* Disable all GPEs in this block */ > > Status = AcpiHwDisableGpeBlock (GpeBlock->XruptBlock, GpeBlock, NULL); > + if (ACPI_FAILURE (Status)) > + { > + return_ACPI_STATUS (Status); > + } > > if (!GpeBlock->Previous && !GpeBlock->Next) > { > @@ -542,7 +546,7 @@ AcpiEvCreateGpeBlock ( > WalkInfo.GpeDevice = GpeDevice; > WalkInfo.ExecuteByOwnerId = FALSE; > > - Status = AcpiNsWalkNamespace (ACPI_TYPE_METHOD, GpeDevice, > + (void) AcpiNsWalkNamespace (ACPI_TYPE_METHOD, GpeDevice, > ACPI_UINT32_MAX, ACPI_NS_WALK_NO_UNLOCK, > AcpiEvMatchGpeMethod, NULL, &WalkInfo, NULL); > > diff --git a/src/acpica/source/components/events/evgpeinit.c b/src/acpica/source/components/events/evgpeinit.c > index b7e02a06..7e3c766c 100644 > --- a/src/acpica/source/components/events/evgpeinit.c > +++ b/src/acpica/source/components/events/evgpeinit.c > @@ -302,8 +302,6 @@ AcpiEvGpeInitialize ( > * GPE0 and GPE1 do not have to be contiguous in the GPE number > * space. However, GPE0 always starts at GPE number zero. > */ > - GpeNumberMax = AcpiGbl_FADT.Gpe1Base + > - ((RegisterCount1 * ACPI_GPE_REGISTER_WIDTH) - 1); > } > } > > @@ -315,7 +313,6 @@ AcpiEvGpeInitialize ( > > ACPI_DEBUG_PRINT ((ACPI_DB_INIT, > "There are no GPE blocks defined in the FADT\n")); > - Status = AE_OK; > goto Cleanup; > } > > diff --git a/src/acpica/source/components/events/evmisc.c b/src/acpica/source/components/events/evmisc.c > index f73cc2f3..68f1dc8a 100644 > --- a/src/acpica/source/components/events/evmisc.c > +++ b/src/acpica/source/components/events/evmisc.c > @@ -400,11 +400,16 @@ AcpiEvTerminate ( > /* Disable all GPEs in all GPE blocks */ > > Status = AcpiEvWalkGpeList (AcpiHwDisableGpeBlock, NULL); > + if (ACPI_FAILURE (Status)) > + { > + ACPI_EXCEPTION ((AE_INFO, Status, > + "Could not disable GPEs in GPE block")); > + } > > Status = AcpiEvRemoveGlobalLockHandler (); > - if (ACPI_FAILURE(Status)) > + if (ACPI_FAILURE (Status)) > { > - ACPI_ERROR ((AE_INFO, > + ACPI_EXCEPTION ((AE_INFO, Status, > "Could not remove Global Lock handler")); > } > > @@ -414,7 +419,7 @@ AcpiEvTerminate ( > /* Remove SCI handlers */ > > Status = AcpiEvRemoveAllSciHandlers (); > - if (ACPI_FAILURE(Status)) > + if (ACPI_FAILURE (Status)) > { > ACPI_ERROR ((AE_INFO, > "Could not remove SCI handler")); > @@ -423,6 +428,12 @@ AcpiEvTerminate ( > /* Deallocate all handler objects installed within GPE info structs */ > > Status = AcpiEvWalkGpeList (AcpiEvDeleteGpeHandlers, NULL); > + if (ACPI_FAILURE (Status)) > + { > + ACPI_EXCEPTION ((AE_INFO, Status, > + "Could not delete GPE handlers")); > + } > + > > /* Return to original mode if necessary */ > > diff --git a/src/acpica/source/components/events/evregion.c b/src/acpica/source/components/events/evregion.c > index 6f6d7ccc..13a20918 100644 > --- a/src/acpica/source/components/events/evregion.c > +++ b/src/acpica/source/components/events/evregion.c > @@ -1037,11 +1037,11 @@ AcpiEvOrphanEcRegMethod ( > Objects[1].Type = ACPI_TYPE_INTEGER; > Objects[1].Integer.Value = ACPI_REG_CONNECT; > > - Status = AcpiEvaluateObject (RegMethod, NULL, &Args, NULL); > + (void) AcpiEvaluateObject (RegMethod, NULL, &Args, NULL); > > Exit: > /* We ignore all errors from above, don't care */ > > - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); > + (void) AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); > return_VOID; > } > diff --git a/src/acpica/source/components/events/evrgnini.c b/src/acpica/source/components/events/evrgnini.c > index 718e2e87..3c865c59 100644 > --- a/src/acpica/source/components/events/evrgnini.c > +++ b/src/acpica/source/components/events/evrgnini.c > @@ -363,7 +363,6 @@ AcpiEvPciConfigRegionSetup ( > * root bridge. Still need to return a context object > * for the new PCI_Config operation region, however. > */ > - Status = AE_OK; > } > else > { > diff --git a/src/acpica/source/components/hardware/hwxfsleep.c b/src/acpica/source/components/hardware/hwxfsleep.c > index 3df8f5a5..78dc1902 100644 > --- a/src/acpica/source/components/hardware/hwxfsleep.c > +++ b/src/acpica/source/components/hardware/hwxfsleep.c > @@ -357,6 +357,10 @@ AcpiEnterSleepStateS4bios ( > > Status = AcpiHwWritePort (AcpiGbl_FADT.SmiCommand, > (UINT32) AcpiGbl_FADT.S4BiosRequest, 8); > + if (ACPI_FAILURE (Status)) > + { > + return_ACPI_STATUS (Status); > + } > > do { > AcpiOsStall (ACPI_USEC_PER_MSEC); > diff --git a/src/acpica/source/components/namespace/nsconvert.c b/src/acpica/source/components/namespace/nsconvert.c > index d2b32d25..ae590490 100644 > --- a/src/acpica/source/components/namespace/nsconvert.c > +++ b/src/acpica/source/components/namespace/nsconvert.c > @@ -670,5 +670,5 @@ AcpiNsConvertToReference ( > ErrorExit: > ACPI_FREE (Name); > *ReturnObject = NewObject; > - return (AE_OK); > + return (Status); > } > diff --git a/src/acpica/source/components/namespace/nsdump.c b/src/acpica/source/components/namespace/nsdump.c > index 8a2a7e92..0ed4d72c 100644 > --- a/src/acpica/source/components/namespace/nsdump.c > +++ b/src/acpica/source/components/namespace/nsdump.c > @@ -478,7 +478,7 @@ AcpiNsDumpOneObject ( > AcpiOsPrintf (" ="); > for (i = 0; (i < ObjDesc->Buffer.Length && i < 12); i++) > { > - AcpiOsPrintf (" %.2hX", ObjDesc->Buffer.Pointer[i]); > + AcpiOsPrintf (" %2.2X", ObjDesc->Buffer.Pointer[i]); > } > } > AcpiOsPrintf ("\n"); > @@ -575,7 +575,7 @@ AcpiNsDumpOneObject ( > case ACPI_TYPE_LOCAL_BANK_FIELD: > case ACPI_TYPE_LOCAL_INDEX_FIELD: > > - AcpiOsPrintf (" Off %.3X Len %.2X Acc %.2hd\n", > + AcpiOsPrintf (" Off %.3X Len %.2X Acc %.2X\n", > (ObjDesc->CommonField.BaseByteOffset * 8) > + ObjDesc->CommonField.StartFieldBitOffset, > ObjDesc->CommonField.BitLength, > @@ -760,8 +760,6 @@ AcpiNsDumpOneObject ( > > goto Cleanup; > } > - > - ObjType = ACPI_TYPE_INVALID; /* Terminate loop after next pass */ > } > > Cleanup: > diff --git a/src/acpica/source/components/namespace/nsxfname.c b/src/acpica/source/components/namespace/nsxfname.c > index 7332a92f..85be591f 100644 > --- a/src/acpica/source/components/namespace/nsxfname.c > +++ b/src/acpica/source/components/namespace/nsxfname.c > @@ -611,7 +611,7 @@ AcpiGetObjectInfo ( > > if (Cls) > { > - NextIdString = AcpiNsCopyDeviceId (&Info->ClassCode, > + (void) AcpiNsCopyDeviceId (&Info->ClassCode, > Cls, NextIdString); > } > > diff --git a/src/acpica/source/components/parser/psobject.c b/src/acpica/source/components/parser/psobject.c > index 61c3a868..6ceb7d91 100644 > --- a/src/acpica/source/components/parser/psobject.c > +++ b/src/acpica/source/components/parser/psobject.c > @@ -652,7 +652,7 @@ AcpiPsCompleteOp ( > WalkState->Opcode = (*Op)->Common.AmlOpcode; > > Status = WalkState->AscendingCallback (WalkState); > - Status = AcpiPsNextParseState (WalkState, *Op, Status); > + (void) AcpiPsNextParseState (WalkState, *Op, Status); > > Status2 = AcpiPsCompleteThisOp (WalkState, *Op); > if (ACPI_FAILURE (Status2)) > @@ -661,7 +661,6 @@ AcpiPsCompleteOp ( > } > } > > - Status = AE_OK; > break; > > case AE_CTRL_BREAK: > @@ -682,7 +681,7 @@ AcpiPsCompleteOp ( > WalkState->Opcode = (*Op)->Common.AmlOpcode; > > Status = WalkState->AscendingCallback (WalkState); > - Status = AcpiPsNextParseState (WalkState, *Op, Status); > + (void) AcpiPsNextParseState (WalkState, *Op, Status); > > Status2 = AcpiPsCompleteThisOp (WalkState, *Op); > if (ACPI_FAILURE (Status2)) > @@ -690,7 +689,6 @@ AcpiPsCompleteOp ( > return_ACPI_STATUS (Status2); > } > > - Status = AE_OK; > break; > > case AE_CTRL_TERMINATE: > diff --git a/src/acpica/source/components/resources/rscreate.c b/src/acpica/source/components/resources/rscreate.c > index 26640c20..172bc55f 100644 > --- a/src/acpica/source/components/resources/rscreate.c > +++ b/src/acpica/source/components/resources/rscreate.c > @@ -481,6 +481,10 @@ AcpiRsCreatePciRoutingTable ( > > Status = AcpiNsHandleToPathname ( > (ACPI_HANDLE) Node, &PathBuffer, FALSE); > + if (ACPI_FAILURE (Status)) > + { > + return_ACPI_STATUS (Status); > + } > > /* +1 to include null terminator */ > > diff --git a/src/acpica/source/components/tables/tbdata.c b/src/acpica/source/components/tables/tbdata.c > index 84dd25bd..6eb1f24a 100644 > --- a/src/acpica/source/components/tables/tbdata.c > +++ b/src/acpica/source/components/tables/tbdata.c > @@ -1190,6 +1190,10 @@ AcpiTbLoadTable ( > } > > Status = AcpiNsLoadTable (TableIndex, ParentNode); > + if (ACPI_FAILURE (Status)) > + { > + return_ACPI_STATUS (Status); > + } > > /* > * Update GPEs for any new _Lxx/_Exx methods. Ignore errors. The host is > diff --git a/src/acpica/source/components/tables/tbxfload.c b/src/acpica/source/components/tables/tbxfload.c > index 1e17db6c..24daafcf 100644 > --- a/src/acpica/source/components/tables/tbxfload.c > +++ b/src/acpica/source/components/tables/tbxfload.c > @@ -445,6 +445,8 @@ ACPI_EXPORT_SYMBOL_INIT (AcpiInstallTable) > * > * PARAMETERS: Table - Pointer to a buffer containing the ACPI > * table to be loaded. > + * TableIdx - Pointer to a UINT32 for storing the table > + * index, might be NULL > * > * RETURN: Status > * > @@ -458,7 +460,8 @@ ACPI_EXPORT_SYMBOL_INIT (AcpiInstallTable) > > ACPI_STATUS > AcpiLoadTable ( > - ACPI_TABLE_HEADER *Table) > + ACPI_TABLE_HEADER *Table, > + UINT32 *TableIdx) > { > ACPI_STATUS Status; > UINT32 TableIndex; > @@ -479,6 +482,11 @@ AcpiLoadTable ( > ACPI_INFO (("Host-directed Dynamic ACPI Table Load:")); > Status = AcpiTbInstallAndLoadTable (ACPI_PTR_TO_PHYSADDR (Table), > ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL, FALSE, &TableIndex); > + if (TableIdx) > + { > + *TableIdx = TableIndex; > + } > + > if (ACPI_SUCCESS (Status)) > { > /* Complete the initialization/resolution of new objects */ > @@ -582,3 +590,42 @@ AcpiUnloadParentTable ( > } > > ACPI_EXPORT_SYMBOL (AcpiUnloadParentTable) > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiUnloadTable > + * > + * PARAMETERS: TableIndex - Index as returned by AcpiLoadTable > + * > + * RETURN: Status > + * > + * DESCRIPTION: Via the TableIndex representing an SSDT or OEMx table, unloads > + * the table and deletes all namespace objects associated with > + * that table. Unloading of the DSDT is not allowed. > + * Note: Mainly intended to support hotplug removal of SSDTs. > + * > + ******************************************************************************/ > + > +ACPI_STATUS > +AcpiUnloadTable ( > + UINT32 TableIndex) > +{ > + ACPI_STATUS Status; > + > + > + ACPI_FUNCTION_TRACE (AcpiUnloadTable); > + > + > + if (TableIndex == 1) > + { > + /* TableIndex==1 means DSDT is the owner. DSDT cannot be unloaded */ > + > + return_ACPI_STATUS (AE_TYPE); > + } > + > + Status = AcpiTbUnloadTable (TableIndex); > + return_ACPI_STATUS (Status); > +} > + > +ACPI_EXPORT_SYMBOL (AcpiUnloadTable) > diff --git a/src/acpica/source/components/utilities/utbuffer.c b/src/acpica/source/components/utilities/utbuffer.c > index 44fd30a6..015c16f9 100644 > --- a/src/acpica/source/components/utilities/utbuffer.c > +++ b/src/acpica/source/components/utilities/utbuffer.c > @@ -186,8 +186,10 @@ AcpiUtDumpBuffer ( > UINT32 j; > UINT32 Temp32; > UINT8 BufChar; > + UINT32 DisplayDataOnly = Display & DB_DISPLAY_DATA_ONLY; > > > + Display &= ~DB_DISPLAY_DATA_ONLY; > if (!Buffer) > { > AcpiOsPrintf ("Null Buffer Pointer in DumpBuffer!\n"); > @@ -205,7 +207,10 @@ AcpiUtDumpBuffer ( > { > /* Print current offset */ > > - AcpiOsPrintf ("%8.4X: ", (BaseOffset + i)); > + if (!DisplayDataOnly) > + { > + AcpiOsPrintf ("%8.4X: ", (BaseOffset + i)); > + } > > /* Print 16 hex chars */ > > @@ -257,38 +262,41 @@ AcpiUtDumpBuffer ( > * Print the ASCII equivalent characters but watch out for the bad > * unprintable ones (printable chars are 0x20 through 0x7E) > */ > - AcpiOsPrintf (" "); > - for (j = 0; j < 16; j++) > + if (!DisplayDataOnly) > { > - if (i + j >= Count) > + AcpiOsPrintf (" "); > + for (j = 0; j < 16; j++) > { > - AcpiOsPrintf ("\n"); > - return; > + if (i + j >= Count) > + { > + AcpiOsPrintf ("\n"); > + return; > + } > + > + /* > + * Add comment characters so rest of line is ignored when > + * compiled > + */ > + if (j == 0) > + { > + AcpiOsPrintf ("// "); > + } > + > + BufChar = Buffer[(ACPI_SIZE) i + j]; > + if (isprint (BufChar)) > + { > + AcpiOsPrintf ("%c", BufChar); > + } > + else > + { > + AcpiOsPrintf ("."); > + } > } > > - /* > - * Add comment characters so rest of line is ignored when > - * compiled > - */ > - if (j == 0) > - { > - AcpiOsPrintf ("// "); > - } > + /* Done with that line. */ > > - BufChar = Buffer[(ACPI_SIZE) i + j]; > - if (isprint (BufChar)) > - { > - AcpiOsPrintf ("%c", BufChar); > - } > - else > - { > - AcpiOsPrintf ("."); > - } > + AcpiOsPrintf ("\n"); > } > - > - /* Done with that line. */ > - > - AcpiOsPrintf ("\n"); > i += 16; > } > > diff --git a/src/acpica/source/components/utilities/utids.c b/src/acpica/source/components/utilities/utids.c > index 5fcfbf66..513548c2 100644 > --- a/src/acpica/source/components/utilities/utids.c > +++ b/src/acpica/source/components/utilities/utids.c > @@ -466,7 +466,8 @@ AcpiUtExecute_CID ( > { > /* Copy the String CID from the returned object */ > > - strcpy (NextIdString, CidObjects[i]->String.Pointer); > + AcpiUtSafeStrcpy (NextIdString, CidObjects[i]->String.Length + 1, > + CidObjects[i]->String.Pointer); > Length = CidObjects[i]->String.Length + 1; > } > > diff --git a/src/acpica/source/components/utilities/uttrack.c b/src/acpica/source/components/utilities/uttrack.c > index c6e6b45b..76e439fe 100644 > --- a/src/acpica/source/components/utilities/uttrack.c > +++ b/src/acpica/source/components/utilities/uttrack.c > @@ -864,7 +864,7 @@ AcpiUtDumpAllocations ( > > case ACPI_DESC_TYPE_PARSER: > > - AcpiOsPrintf ("AmlOpcode 0x%04hX\n", > + AcpiOsPrintf ("AmlOpcode 0x%04X\n", > Descriptor->Op.Asl.AmlOpcode); > break; > > diff --git a/src/acpica/source/include/acdebug.h b/src/acpica/source/include/acdebug.h > index 4e43bbee..f296cb94 100644 > --- a/src/acpica/source/include/acdebug.h > +++ b/src/acpica/source/include/acdebug.h > @@ -392,6 +392,10 @@ void > AcpiDbGetBusInfo ( > void); > > +ACPI_STATUS > +AcpiDbDisplayFields ( > + UINT32 AddressSpaceId); > + > > /* > * dbdisply - debug display commands > diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h > index a123eed7..62e37909 100644 > --- a/src/acpica/source/include/acpixf.h > +++ b/src/acpica/source/include/acpixf.h > @@ -154,7 +154,7 @@ > > /* Current ACPICA subsystem version in YYYYMMDD format */ > > -#define ACPI_CA_VERSION 0x20190816 > +#define ACPI_CA_VERSION 0x20191018 > > #include "acconfig.h" > #include "actypes.h" > @@ -664,7 +664,13 @@ AcpiInstallTable ( > ACPI_EXTERNAL_RETURN_STATUS ( > ACPI_STATUS > AcpiLoadTable ( > - ACPI_TABLE_HEADER *Table)) > + ACPI_TABLE_HEADER *Table, > + UINT32 *TableIdx)) > + > +ACPI_EXTERNAL_RETURN_STATUS ( > +ACPI_STATUS > +AcpiUnloadTable ( > + UINT32 TableIndex)) > > ACPI_EXTERNAL_RETURN_STATUS ( > ACPI_STATUS > diff --git a/src/acpica/source/include/acstruct.h b/src/acpica/source/include/acstruct.h > index f81c8a7d..e6ab1d90 100644 > --- a/src/acpica/source/include/acstruct.h > +++ b/src/acpica/source/include/acstruct.h > @@ -357,6 +357,19 @@ typedef struct acpi_device_walk_info > } ACPI_DEVICE_WALK_INFO; > > > +/* Info used by Acpi AcpiDbDisplayFields */ > + > +typedef struct acpi_region_walk_info > +{ > + UINT32 DebugLevel; > + UINT32 Count; > + ACPI_OWNER_ID OwnerId; > + UINT8 DisplayType; > + UINT32 AddressSpaceId; > + > +} ACPI_REGION_WALK_INFO; > + > + > /* TBD: [Restructure] Merge with struct above */ > > typedef struct acpi_walk_info > diff --git a/src/acpica/source/include/acutils.h b/src/acpica/source/include/acutils.h > index 0c2327d2..6352b5ff 100644 > --- a/src/acpica/source/include/acutils.h > +++ b/src/acpica/source/include/acutils.h > @@ -290,10 +290,11 @@ typedef struct acpi_pkg_info > > /* AcpiUtDumpBuffer */ > > -#define DB_BYTE_DISPLAY 1 > -#define DB_WORD_DISPLAY 2 > -#define DB_DWORD_DISPLAY 4 > -#define DB_QWORD_DISPLAY 8 > +#define DB_BYTE_DISPLAY 0x01 > +#define DB_WORD_DISPLAY 0x02 > +#define DB_DWORD_DISPLAY 0x04 > +#define DB_QWORD_DISPLAY 0x08 > +#define DB_DISPLAY_DATA_ONLY 0x10 > > > /* > diff --git a/src/acpica/source/tools/acpiexec/aecommon.h b/src/acpica/source/tools/acpiexec/aecommon.h > index 602356de..257632f7 100644 > --- a/src/acpica/source/tools/acpiexec/aecommon.h > +++ b/src/acpica/source/tools/acpiexec/aecommon.h > @@ -195,7 +195,8 @@ typedef struct ae_debug_regions > typedef struct init_file_entry > { > char *Name; > - UINT64 Value; > + ACPI_OPERAND_OBJECT *ObjDesc; > + > } INIT_FILE_ENTRY; > > extern BOOLEAN AcpiGbl_UseLocalFaultHandler; > @@ -356,7 +357,7 @@ AeSetupConfiguration ( > ACPI_STATUS > AeLookupInitFileEntry ( > char *Pathname, > - UINT64 *Value); > + ACPI_OPERAND_OBJECT **ObjDesc); > > /* aeexec */ > > diff --git a/src/acpica/source/tools/acpiexec/aehandlers.c b/src/acpica/source/tools/acpiexec/aehandlers.c > index 75e8eb0a..f7dd012e 100644 > --- a/src/acpica/source/tools/acpiexec/aehandlers.c > +++ b/src/acpica/source/tools/acpiexec/aehandlers.c > @@ -683,20 +683,27 @@ AeInstallLateHandlers ( > { > Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY, > AeNotifyHandler1, ACPI_CAST_PTR (void, 0x01234567)); > + ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); > > Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY, > AeNotifyHandler2, ACPI_CAST_PTR (void, 0x89ABCDEF)); > + ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); > > Status = AcpiRemoveNotifyHandler (Handle, ACPI_ALL_NOTIFY, > AeNotifyHandler1); > + ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); > + > Status = AcpiRemoveNotifyHandler (Handle, ACPI_ALL_NOTIFY, > AeNotifyHandler2); > + ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); > > Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY, > AeNotifyHandler2, ACPI_CAST_PTR (void, 0x89ABCDEF)); > + ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); > > Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY, > AeNotifyHandler1, ACPI_CAST_PTR (void, 0x01234567)); > + ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); > } > > Status = AcpiGetHandle (NULL, "\\_PR.CPU0", &Handle); > @@ -704,9 +711,11 @@ AeInstallLateHandlers ( > { > Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY, > AeNotifyHandler1, ACPI_CAST_PTR (void, 0x01234567)); > + ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); > > Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY, > AeNotifyHandler2, ACPI_CAST_PTR (void, 0x89ABCDEF)); > + ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); > } > > #if (!ACPI_REDUCED_HARDWARE) > @@ -855,13 +864,15 @@ AeInstallEarlyHandlers ( > > Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY, > AeNotifyHandler1, ACPI_CAST_PTR (void, 0x01234567)); > + ACPI_CHECK_OK(AcpiInstallNotifyHandler, Status); > > Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY, > AeNotifyHandler2, ACPI_CAST_PTR (void, 0x89ABCDEF)); > + ACPI_CHECK_OK(AcpiInstallNotifyHandler, Status); > > /* Attempt duplicate handler installation, should fail */ > > - Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY, > + (void) AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY, > AeNotifyHandler1, ACPI_CAST_PTR (void, 0x77777777)); > > Status = AcpiAttachData (Handle, AeAttachedDataHandler, Handle); > diff --git a/src/acpica/source/tools/acpiexec/aeinitfile.c b/src/acpica/source/tools/acpiexec/aeinitfile.c > index f895e2cc..35e2b8b8 100644 > --- a/src/acpica/source/tools/acpiexec/aeinitfile.c > +++ b/src/acpica/source/tools/acpiexec/aeinitfile.c > @@ -224,9 +224,13 @@ AeProcessInitFile( > void) > { > ACPI_WALK_STATE *WalkState; > - int i; > UINT64 idx; > ACPI_STATUS Status; > + char *Token; > + char *ObjectBuffer; > + char *TempNameBuffer; > + ACPI_OBJECT_TYPE Type; > + ACPI_OBJECT TempObject; > > > if (!InitFile) > @@ -249,26 +253,44 @@ AeProcessInitFile( > AcpiOsAllocate (sizeof (INIT_FILE_ENTRY) * AcpiGbl_InitFileLineCount); > for (idx = 0; fgets (LineBuffer, AE_FILE_BUFFER_SIZE, InitFile); ++idx) > { > - if (sscanf (LineBuffer, "%s %s\n", > - &NameBuffer[1], ValueBuffer) != 2) > + > + TempNameBuffer = AcpiDbGetNextToken (LineBuffer, &Token, &Type); > + if (LineBuffer[0] == '\\') > { > - goto CleanupAndExit; > + strcpy (NameBuffer, TempNameBuffer); > + } > + else > + { > + /* Add a root prefix if not present in the string */ > + > + strcpy (NameBuffer + 1, TempNameBuffer); > } > > - /* Add a root prefix if not present in the string */ > + AcpiGbl_InitEntries[idx].Name = > + AcpiOsAllocateZeroed (strnlen (NameBuffer, AE_FILE_BUFFER_SIZE) + 1); > + > + strcpy (AcpiGbl_InitEntries[idx].Name, NameBuffer); > + > + ObjectBuffer = AcpiDbGetNextToken (Token, &Token, &Type); > > - i = 0; > - if (NameBuffer[1] == '\\') > + if (Type == ACPI_TYPE_FIELD_UNIT) > + { > + Status = AcpiDbConvertToObject (ACPI_TYPE_BUFFER, ObjectBuffer, > + &TempObject); > + } > + else > { > - i = 1; > + Status = AcpiDbConvertToObject (Type, ObjectBuffer, &TempObject); > } > > - AcpiGbl_InitEntries[idx].Name = > - AcpiOsAllocateZeroed (strnlen (NameBuffer + i, AE_FILE_BUFFER_SIZE) + 1); > + Status = AcpiUtCopyEobjectToIobject (&TempObject, > + &AcpiGbl_InitEntries[idx].ObjDesc); > > - strcpy (AcpiGbl_InitEntries[idx].Name, NameBuffer + i); > + if (Type == ACPI_TYPE_BUFFER || Type == ACPI_TYPE_FIELD_UNIT) > + { > + ACPI_FREE (TempObject.Buffer.Pointer); > + } > > - Status = AcpiUtStrtoul64 (ValueBuffer, &AcpiGbl_InitEntries[idx].Value); > if (ACPI_FAILURE (Status)) > { > AcpiOsPrintf ("%s %s\n", ValueBuffer, > @@ -276,7 +298,16 @@ AeProcessInitFile( > goto CleanupAndExit; > } > > - AeEnterInitFileEntry (AcpiGbl_InitEntries[idx], WalkState); > + /* > + * Special case for field units. Field units are dependent on the > + * parent region. This parent region has yet to be created so defer the > + * initialization until the dispatcher. For all other types, initialize > + * the namespace node with the value found in the init file. > + */ > + if (Type != ACPI_TYPE_FIELD_UNIT) > + { > + AeEnterInitFileEntry (AcpiGbl_InitEntries[idx], WalkState); > + } > } > > /* Cleanup */ > @@ -309,14 +340,12 @@ AeEnterInitFileEntry ( > ACPI_WALK_STATE *WalkState) > { > char *Pathname = InitEntry.Name; > - UINT64 Value = InitEntry.Value; > - ACPI_OPERAND_OBJECT *ObjDesc; > + ACPI_OPERAND_OBJECT *ObjDesc = InitEntry.ObjDesc; > ACPI_NAMESPACE_NODE *NewNode; > ACPI_STATUS Status; > > > - AcpiOsPrintf ("Initializing namespace element: %s\n", Pathname); > - Status = AcpiNsLookup (NULL, Pathname, ACPI_TYPE_INTEGER, > + Status = AcpiNsLookup (NULL, Pathname, ObjDesc->Common.Type, > ACPI_IMODE_LOAD_PASS2, ACPI_NS_ERROR_IF_FOUND | ACPI_NS_NO_UPSEARCH | > ACPI_NS_EARLY_INIT, NULL, &NewNode); > if (ACPI_FAILURE (Status)) > @@ -327,15 +356,17 @@ AeEnterInitFileEntry ( > return; > } > > - ObjDesc = AcpiUtCreateIntegerObject (Value); > - > - AcpiOsPrintf ("New value: 0x%8.8X%8.8X\n", > - ACPI_FORMAT_UINT64 (Value)); > - > /* Store pointer to value descriptor in the Node */ > > Status = AcpiNsAttachObject (NewNode, ObjDesc, > - ACPI_TYPE_INTEGER); > + ObjDesc->Common.Type); > + if (ACPI_FAILURE (Status)) > + { > + ACPI_EXCEPTION ((AE_INFO, Status, > + "While attaching object to node from namespace initialization file: %s", > + Pathname)); > + return; > + } > > /* Remove local reference to the object */ > > @@ -359,7 +390,7 @@ AeEnterInitFileEntry ( > ACPI_STATUS > AeLookupInitFileEntry ( > char *Pathname, > - UINT64 *Value) > + ACPI_OPERAND_OBJECT **ObjDesc) > { > UINT32 i; > > @@ -372,7 +403,7 @@ AeLookupInitFileEntry ( > { > if (!strcmp(AcpiGbl_InitEntries[i].Name, Pathname)) > { > - *Value = AcpiGbl_InitEntries[i].Value; > + *ObjDesc = AcpiGbl_InitEntries[i].ObjDesc; > return AE_OK; > } > } Acked-by: Ivan Hu <ivan.hu@canonical.com>
diff --git a/src/acpica/source/common/acgetline.c b/src/acpica/source/common/acgetline.c index 702d046b..3865914b 100644 --- a/src/acpica/source/common/acgetline.c +++ b/src/acpica/source/common/acgetline.c @@ -532,7 +532,7 @@ AcpiOsGetLine ( * Ignore the various keys like insert/delete/home/end, etc. * But we must eat the final character of the ESC sequence. */ - InputChar = getchar (); + (void) getchar (); continue; default: diff --git a/src/acpica/source/common/adisasm.c b/src/acpica/source/common/adisasm.c index c73208f6..22a85009 100644 --- a/src/acpica/source/common/adisasm.c +++ b/src/acpica/source/common/adisasm.c @@ -746,7 +746,6 @@ AdDoExternalFileList ( { ExternalFileList = ExternalFileList->Next; GlobalStatus = AE_TYPE; - Status = AE_OK; continue; } diff --git a/src/acpica/source/common/adwalk.c b/src/acpica/source/common/adwalk.c index 6da2e8ec..1996c965 100644 --- a/src/acpica/source/common/adwalk.c +++ b/src/acpica/source/common/adwalk.c @@ -601,7 +601,9 @@ AcpiDmFindOrphanDescending ( return (AE_OK); } +#ifdef ACPI_UNDER_DEVELOPMENT OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); +#endif switch (Op->Common.AmlOpcode) { @@ -1100,7 +1102,7 @@ AcpiDmCommonDescendingOp ( /* Switch/Case conversion */ Status = AcpiDmProcessSwitch (Op); - return (AE_OK); + return (Status); } diff --git a/src/acpica/source/common/dmtables.c b/src/acpica/source/common/dmtables.c index a2dbea62..e5536ecf 100644 --- a/src/acpica/source/common/dmtables.c +++ b/src/acpica/source/common/dmtables.c @@ -327,7 +327,7 @@ AdCreateTableHeader ( * makes it easier to rename the disassembled ASL file if needed. */ AcpiOsPrintf ( - "DefinitionBlock (\"\", \"%4.4s\", %hu, \"%.6s\", \"%.8s\", 0x%8.8X)\n", + "DefinitionBlock (\"\", \"%4.4s\", %u, \"%.6s\", \"%.8s\", 0x%8.8X)\n", Table->Signature, Table->Revision, Table->OemId, Table->OemTableId, Table->OemRevision); } @@ -601,7 +601,7 @@ AdParseTable ( fprintf (stderr, "Parsing Deferred Opcodes (Methods/Buffers/Packages/Regions)\n"); - Status = AcpiDmParseDeferredOps (AcpiGbl_ParseOpRoot); + (void) AcpiDmParseDeferredOps (AcpiGbl_ParseOpRoot); fprintf (stderr, "\n"); /* Process Resource Templates */ diff --git a/src/acpica/source/common/dmtbdump1.c b/src/acpica/source/common/dmtbdump1.c index c363ac8d..9061ea11 100644 --- a/src/acpica/source/common/dmtbdump1.c +++ b/src/acpica/source/common/dmtbdump1.c @@ -474,7 +474,6 @@ AcpiDmDumpCsrt ( { return; } - SubSubOffset += InfoLength; } /* Point to next sub-subtable */ @@ -1401,7 +1400,6 @@ AcpiDmDumpHmat ( while (Offset < Table->Length) { AcpiOsPrintf ("\n"); - SubtableOffset = 0; /* Dump HMAT structure header */ @@ -1484,6 +1482,11 @@ AcpiDmDumpHmat ( Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), 4, AcpiDmTableInfoHmat1a); + if (ACPI_FAILURE (Status)) + { + return; + } + SubtableOffset += 4; } @@ -1500,6 +1503,11 @@ AcpiDmDumpHmat ( Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), 4, AcpiDmTableInfoHmat1b); + if (ACPI_FAILURE (Status)) + { + return; + } + SubtableOffset += 4; } @@ -1519,6 +1527,11 @@ AcpiDmDumpHmat ( Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), 2, AcpiDmTableInfoHmat1c); + if (ACPI_FAILURE(Status)) + { + return; + } + SubtableOffset += 2; } } @@ -1542,6 +1555,11 @@ AcpiDmDumpHmat ( Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), 2, AcpiDmTableInfoHmat2a); + if (ACPI_FAILURE (Status)) + { + return; + } + SubtableOffset += 2; } break; diff --git a/src/acpica/source/common/dmtbdump2.c b/src/acpica/source/common/dmtbdump2.c index 418b6ec0..e350d23c 100644 --- a/src/acpica/source/common/dmtbdump2.c +++ b/src/acpica/source/common/dmtbdump2.c @@ -187,6 +187,7 @@ AcpiDmDumpIort ( ACPI_DMTABLE_INFO *InfoTable; char *String; UINT32 i; + UINT32 MappingByteLength; /* Main table */ @@ -314,6 +315,11 @@ AcpiDmDumpIort ( Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), 4, AcpiDmTableInfoIort0a); + if (ACPI_FAILURE (Status)) + { + return; + } + NodeOffset += 4; } } @@ -325,8 +331,10 @@ AcpiDmDumpIort ( if (IortNode->Length > NodeOffset) { + MappingByteLength = + IortNode->MappingCount * sizeof (ACPI_IORT_ID_MAPPING); Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, - Table, IortNode->Length - NodeOffset, + Table, IortNode->Length - NodeOffset - MappingByteLength, AcpiDmTableInfoIort1a); if (ACPI_FAILURE (Status)) { @@ -410,7 +418,6 @@ NextSubtable: /* Point to next node subtable */ Offset += IortNode->Length; - IortNode = ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, IortNode->Length); } } @@ -1211,7 +1218,6 @@ AcpiDmDumpNfit ( /* Has a variable number of 32-bit values at the end */ InfoTable = AcpiDmTableInfoNfit2; - Interleave = ACPI_CAST_PTR (ACPI_NFIT_INTERLEAVE, Subtable); FieldOffset = sizeof (ACPI_NFIT_INTERLEAVE); break; @@ -1236,7 +1242,6 @@ AcpiDmDumpNfit ( /* Has a variable number of 64-bit addresses at the end */ InfoTable = AcpiDmTableInfoNfit6; - Hint = ACPI_CAST_PTR (ACPI_NFIT_FLUSH_ADDRESS, Subtable); FieldOffset = sizeof (ACPI_NFIT_FLUSH_ADDRESS) - sizeof (UINT64); break; @@ -1273,6 +1278,7 @@ AcpiDmDumpNfit ( { case ACPI_NFIT_TYPE_INTERLEAVE: + Interleave = ACPI_CAST_PTR (ACPI_NFIT_INTERLEAVE, Subtable); for (i = 0; i < Interleave->LineCount; i++) { Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset, @@ -1308,6 +1314,7 @@ AcpiDmDumpNfit ( case ACPI_NFIT_TYPE_FLUSH_ADDRESS: + Hint = ACPI_CAST_PTR (ACPI_NFIT_FLUSH_ADDRESS, Subtable); for (i = 0; i < Hint->HintCount; i++) { Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset, @@ -1806,6 +1813,11 @@ AcpiDmDumpPptt ( Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, SubtableOffset), 4, AcpiDmTableInfoPptt0a); + if (ACPI_FAILURE (Status)) + { + return; + } + SubtableOffset += 4; } break; @@ -2063,6 +2075,10 @@ AcpiDmDumpSdev ( Status = AcpiDmDumpTable (Table->Length, 0, ACPI_ADD_PTR (UINT8, Pcie, VendorDataOffset), VendorDataLength, AcpiDmTableInfoSdev1b); + if (ACPI_FAILURE (Status)) + { + return; + } } break; diff --git a/src/acpica/source/common/dmtbdump3.c b/src/acpica/source/common/dmtbdump3.c index 0b9863cc..561a0032 100644 --- a/src/acpica/source/common/dmtbdump3.c +++ b/src/acpica/source/common/dmtbdump3.c @@ -410,7 +410,7 @@ AcpiDmDumpStao ( Namepath = ACPI_ADD_PTR (char, Table, Offset); StringLength = strlen (Namepath) + 1; - AcpiDmLineHeader (Offset, StringLength, "Namestring"); + AcpiDmLineHeader (Offset, StringLength, "Namepath"); AcpiOsPrintf ("\"%s\"\n", Namepath); /* Point to next namepath */ @@ -526,7 +526,7 @@ AcpiDmDumpTpm2Rev3 ( { case ACPI_TPM23_ACPI_START_METHOD: - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + (void) AcpiDmDumpTable (Table->Length, Offset, Subtable, Table->Length - Offset, AcpiDmTableInfoTpm23a); break; @@ -591,7 +591,7 @@ AcpiDmDumpTpm2 ( Offset += sizeof (ACPI_TPM2_TRAILER); AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Table->Length, Offset, ArmSubtable, + (void) AcpiDmDumpTable (Table->Length, Offset, ArmSubtable, Table->Length - Offset, AcpiDmTableInfoTpm211); break; diff --git a/src/acpica/source/compiler/aslanalyze.c b/src/acpica/source/compiler/aslanalyze.c index 58da5e2e..0482775f 100644 --- a/src/acpica/source/compiler/aslanalyze.c +++ b/src/acpica/source/compiler/aslanalyze.c @@ -569,7 +569,7 @@ ApCheckForGpeNameConflict ( /* Need a null-terminated string version of NameSeg */ - ACPI_MOVE_32_TO_32 (Name, &Op->Asl.NameSeg); + ACPI_MOVE_32_TO_32 (Name, Op->Asl.NameSeg); Name[ACPI_NAMESEG_SIZE] = 0; /* diff --git a/src/acpica/source/compiler/aslbtypes.c b/src/acpica/source/compiler/aslbtypes.c index ed607f3b..d7caea53 100644 --- a/src/acpica/source/compiler/aslbtypes.c +++ b/src/acpica/source/compiler/aslbtypes.c @@ -474,7 +474,6 @@ AnFormatBtype ( strcat (Buffer, "|"); } - First = FALSE; strcat (Buffer, "Resource"); } } diff --git a/src/acpica/source/compiler/aslkeywords.y b/src/acpica/source/compiler/aslkeywords.y index a19b6425..a505dc02 100644 --- a/src/acpica/source/compiler/aslkeywords.y +++ b/src/acpica/source/compiler/aslkeywords.y @@ -202,7 +202,7 @@ AddressKeyword ; AddressSpaceKeyword - : ByteConst {$$ = UtCheckIntegerRange ($1, 0x0A, 0xFF);} + : ByteConst {$$ = UtCheckIntegerRange ($1, ACPI_NUM_PREDEFINED_REGIONS, 0xFF);} | RegionSpaceKeyword {} ; diff --git a/src/acpica/source/compiler/aslload.c b/src/acpica/source/compiler/aslload.c index d918c0cc..db6c2d41 100644 --- a/src/acpica/source/compiler/aslload.c +++ b/src/acpica/source/compiler/aslload.c @@ -526,13 +526,12 @@ LdNamespace1Begin ( case AML_INT_CONNECTION_OP: - if (Op->Asl.Child->Asl.AmlOpcode != AML_INT_NAMEPATH_OP) { break; } - Arg = Op->Asl.Child; + Arg = Op->Asl.Child; Status = AcpiNsLookup (WalkState->ScopeInfo, Arg->Asl.ExternalName, ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, WalkState, &Node); @@ -541,15 +540,6 @@ LdNamespace1Begin ( break; } - if (Node->Type == ACPI_TYPE_BUFFER) - { - Arg->Asl.Node = Node; - - Arg = Node->Op->Asl.Child; /* Get namepath */ - Arg = Arg->Asl.Next; /* Get actual buffer */ - Arg = Arg->Asl.Child; /* Buffer length */ - Arg = Arg->Asl.Next; /* RAW_DATA buffer */ - } break; default: @@ -576,7 +566,6 @@ LdNamespace1Begin ( * These opcodes are guaranteed to have a parent. * Examine the parent opcode. */ - Status = AE_OK; ParentOp = Op->Asl.Parent; OpInfo = AcpiPsGetOpcodeInfo (ParentOp->Asl.AmlOpcode); diff --git a/src/acpica/source/compiler/aslmessages.c b/src/acpica/source/compiler/aslmessages.c index 8dd989ca..d1329352 100644 --- a/src/acpica/source/compiler/aslmessages.c +++ b/src/acpica/source/compiler/aslmessages.c @@ -387,7 +387,10 @@ const char *AslTableCompilerMsgs [] = /* ASL_MSG_UNKNOWN_LABEL */ "Label is undefined", /* ASL_MSG_UNKNOWN_SUBTABLE */ "Unknown subtable type", /* ASL_MSG_UNKNOWN_TABLE */ "Unknown ACPI table signature", -/* ASL_MSG_ZERO_VALUE */ "Value must be non-zero" +/* ASL_MSG_ZERO_VALUE */ "Value must be non-zero", +/* ASL_MSG_INVALID_LABEL */ "Invalid field label detected", +/* ASL_MSG_BUFFER_LIST */ "Invalid buffer initializer list", +/* ASL_MSG_ENTRY_LIST */ "Invalid entry initializer list" }; /* Preprocessor */ diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h index 55473fb5..47e5bf43 100644 --- a/src/acpica/source/compiler/aslmessages.h +++ b/src/acpica/source/compiler/aslmessages.h @@ -387,6 +387,9 @@ typedef enum ASL_MSG_UNKNOWN_SUBTABLE, ASL_MSG_UNKNOWN_TABLE, ASL_MSG_ZERO_VALUE, + ASL_MSG_INVALID_LABEL, + ASL_MSG_BUFFER_LIST, + ASL_MSG_ENTRY_LIST, /* These messages are used by the Preprocessor only */ diff --git a/src/acpica/source/compiler/aslmethod.c b/src/acpica/source/compiler/aslmethod.c index 98884bc3..667eaaaf 100644 --- a/src/acpica/source/compiler/aslmethod.c +++ b/src/acpica/source/compiler/aslmethod.c @@ -199,6 +199,8 @@ MtMethodAnalysisWalkBegin ( ACPI_PARSE_OBJECT *NextType; ACPI_PARSE_OBJECT *NextParamType; UINT8 ActualArgs = 0; + BOOLEAN HidExists; + BOOLEAN AdrExists; /* Build cross-reference output file if requested */ @@ -535,12 +537,26 @@ MtMethodAnalysisWalkBegin ( case PARSEOP_DEVICE: - if (!ApFindNameInDeviceTree (METHOD_NAME__HID, Op) && - !ApFindNameInDeviceTree (METHOD_NAME__ADR, Op)) + /* Check usage of _HID and _ADR objects */ + + HidExists = ApFindNameInDeviceTree (METHOD_NAME__HID, Op); + AdrExists = ApFindNameInDeviceTree (METHOD_NAME__ADR, Op); + + if (!HidExists && !AdrExists) { AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, "Device object requires a _HID or _ADR in same scope"); } + else if (HidExists && AdrExists) + { + /* + * According to the ACPI spec, "A device object must contain + * either an _HID object or an _ADR object, but should not contain + * both". + */ + AslError (ASL_WARNING, ASL_MSG_MULTIPLE_TYPES, Op, + "Device object requires either a _HID or _ADR, but not both"); + } break; case PARSEOP_EVENT: diff --git a/src/acpica/source/compiler/aslnamesp.c b/src/acpica/source/compiler/aslnamesp.c index b5af0cb3..e38e397f 100644 --- a/src/acpica/source/compiler/aslnamesp.c +++ b/src/acpica/source/compiler/aslnamesp.c @@ -234,6 +234,10 @@ NsDisplayNamespace ( Status = AcpiNsWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, FALSE, NsDoOneNamespaceObject, NULL, NULL, NULL); + if (ACPI_FAILURE (Status)) + { + return (Status); + } /* Print the full pathname for each namespace node */ diff --git a/src/acpica/source/compiler/aslprepkg.c b/src/acpica/source/compiler/aslprepkg.c index f55bb5e8..77969430 100644 --- a/src/acpica/source/compiler/aslprepkg.c +++ b/src/acpica/source/compiler/aslprepkg.c @@ -458,7 +458,7 @@ ApCheckPackage ( for (i = 0; i < Package->RetInfo4.Count1; ++i) { - Status = ApCheckObjectType (Predefined->Info.Name, Op, + ApCheckObjectType (Predefined->Info.Name, Op, Package->RetInfo4.ObjectType1, i); Op = Op->Asl.Next; } diff --git a/src/acpica/source/compiler/aslresource.c b/src/acpica/source/compiler/aslresource.c index 82de5109..57b6440f 100644 --- a/src/acpica/source/compiler/aslresource.c +++ b/src/acpica/source/compiler/aslresource.c @@ -1226,7 +1226,7 @@ RsDoResourceTemplate ( BufferOp->Asl.AmlOpcode = AML_RAW_DATA_CHAIN; BufferOp->Asl.AmlOpcodeLength = 0; BufferOp->Asl.AmlLength = CurrentByteOffset; - BufferOp->Asl.Value.Buffer = (UINT8 *) HeadRnode.Next; + BufferOp->Asl.Value.Buffer = ACPI_CAST_PTR (UINT8, HeadRnode.Next); BufferOp->Asl.CompileFlags |= OP_IS_RESOURCE_DATA; UtSetParseOpName (BufferOp); diff --git a/src/acpica/source/compiler/aslrestype2.c b/src/acpica/source/compiler/aslrestype2.c index 5b8f026e..0652272f 100644 --- a/src/acpica/source/compiler/aslrestype2.c +++ b/src/acpica/source/compiler/aslrestype2.c @@ -487,10 +487,7 @@ RsDoInterruptDescriptor ( if (StringLength && ResSourceString) { - strcpy ((char *) Rover, (char *) ResSourceString); - Rover = ACPI_ADD_PTR ( - AML_RESOURCE, &(Rover->ByteItem), StringLength); Descriptor->ExtendedIrq.ResourceLength = (UINT16) (Descriptor->ExtendedIrq.ResourceLength + StringLength); diff --git a/src/acpica/source/compiler/aslrestype2s.c b/src/acpica/source/compiler/aslrestype2s.c index 23085054..410ff2b2 100644 --- a/src/acpica/source/compiler/aslrestype2s.c +++ b/src/acpica/source/compiler/aslrestype2s.c @@ -674,7 +674,6 @@ RsDoGpioIoDescriptor ( ResSourceLength = RsGetStringDataLength (InitializerOp); VendorLength = RsGetBufferDataLength (InitializerOp); InterruptLength = RsGetInterruptDataLength (InitializerOp, 10); - PinList = InterruptList; DescriptorSize = ACPI_AML_SIZE_LARGE (AML_RESOURCE_GPIO) + ResSourceLength + VendorLength + InterruptLength; diff --git a/src/acpica/source/compiler/aslutils.c b/src/acpica/source/compiler/aslutils.c index ed2948d0..0faaec03 100644 --- a/src/acpica/source/compiler/aslutils.c +++ b/src/acpica/source/compiler/aslutils.c @@ -223,7 +223,7 @@ UtQueryForOverwrite ( char *Pathname) { struct stat StatInfo; - int InChar = 0x34; + int InChar; if (!stat (Pathname, &StatInfo)) diff --git a/src/acpica/source/compiler/cvdisasm.c b/src/acpica/source/compiler/cvdisasm.c index 3ff636f8..5396b3c3 100644 --- a/src/acpica/source/compiler/cvdisasm.c +++ b/src/acpica/source/compiler/cvdisasm.c @@ -544,8 +544,11 @@ CvSwitchFiles( Current = Current->Parent; } - /* Redirect output to Op->Common.CvFilename */ + if (FNode) + { + /* Redirect output to Op->Common.CvFilename */ - AcpiOsRedirectOutput (FNode->File); - AcpiGbl_CurrentFilename = FNode->Filename; + AcpiOsRedirectOutput (FNode->File); + AcpiGbl_CurrentFilename = FNode->Filename; + } } diff --git a/src/acpica/source/compiler/cvparser.c b/src/acpica/source/compiler/cvparser.c index ca970b50..9a2f0f9c 100644 --- a/src/acpica/source/compiler/cvparser.c +++ b/src/acpica/source/compiler/cvparser.c @@ -912,7 +912,6 @@ CvCaptureCommentsOnly ( /* Not a valid comment option. Revert the AML */ - Aml -= 2; goto DefBlock; } /* End switch statement */ diff --git a/src/acpica/source/compiler/dtcompile.c b/src/acpica/source/compiler/dtcompile.c index b6a144fe..bdd8c1b7 100644 --- a/src/acpica/source/compiler/dtcompile.c +++ b/src/acpica/source/compiler/dtcompile.c @@ -276,7 +276,10 @@ DtDoCompile ( if (ACPI_FAILURE (Status)) { - FileNode->ParserErrorDetected = TRUE; + if (FileNode) + { + FileNode->ParserErrorDetected = TRUE; + } /* TBD: temporary error message. Msgs should come from function above */ @@ -572,7 +575,7 @@ DtCompileTable ( ACPI_STATUS Status = AE_OK; - if (!Field) + if (!Field || !Info) { return (AE_BAD_PARAMETER); } @@ -643,6 +646,14 @@ DtCompileTable ( FieldType = DtGetFieldType (Info); AslGbl_InputFieldCount++; + if (FieldType != DT_FIELD_TYPE_INLINE_SUBTABLE && + strcmp (Info->Name, LocalField->Name)) + { + sprintf (AslGbl_MsgBuffer, "found \"%s\" expected \"%s\"", + LocalField->Name, Info->Name); + DtError (ASL_ERROR, ASL_MSG_INVALID_LABEL, LocalField, AslGbl_MsgBuffer); + } + switch (FieldType) { case DT_FIELD_TYPE_FLAGS_INTEGER: diff --git a/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h index 639c22cb..7c78b55b 100644 --- a/src/acpica/source/compiler/dtcompiler.h +++ b/src/acpica/source/compiler/dtcompiler.h @@ -210,6 +210,17 @@ typedef struct dt_field #define DT_FIELD_NOT_ALLOCATED 1 +/* + * Structure used for each individual key or value + */ +typedef struct dt_table_unit +{ + char *Value; /* Field value (from name : value) */ + UINT32 Line; /* Line number for this field */ + UINT32 Column; /* Start column for field value */ + +} DT_TABLE_UNIT; + /* * Structure used for individual subtables within an ACPI table @@ -292,14 +303,6 @@ DtCompilePadding ( UINT32 Length, DT_SUBTABLE **RetSubtable); -void -DtCreateField ( - char *Name, - char *Value, - UINT32 Line, - UINT32 Offset, - UINT32 Column, - UINT32 NameColumn); /* dtio - binary and text input/output */ @@ -437,6 +440,26 @@ DtCompileFlag ( ACPI_DMTABLE_INFO *Info); +/* dtfield - DT_FIELD operations */ + +void +DtLinkField ( + DT_FIELD *Field); + +void +DtCreateField ( + DT_TABLE_UNIT *FieldKey, + DT_TABLE_UNIT *FieldValue, + UINT32 Offset); + +DT_TABLE_UNIT * +DtCreateTableUnit ( + char *Data, + UINT32 Line, + UINT32 Column); + + + /* dtparser - lex/yacc files */ UINT64 DtCompilerParserResult; /* Expression return value */ diff --git a/src/acpica/source/compiler/dtcompilerparser.l b/src/acpica/source/compiler/dtcompilerparser.l index 0d68f41e..28dcf6af 100644 --- a/src/acpica/source/compiler/dtcompilerparser.l +++ b/src/acpica/source/compiler/dtcompilerparser.l @@ -161,18 +161,20 @@ YYSTYPE DtCompilerlval; /* handle locations */ int DtCompilerParsercolumn = 1; +int DtLabelByteOffset = 0; int DtCompilerParserByteOffset = 0; +UINT32 DtTokenFirstLine = 0; +UINT32 DtTokenFirstColumn = 0; + #define YY_USER_ACTION \ - DtCompilerParserlloc.first_line = DtCompilerParserlloc.last_line = DtCompilerParserlineno; \ - DtCompilerParserlloc.first_column = DtCompilerParsercolumn; \ - DtCompilerParserlloc.first_byte_offset = DtCompilerParserByteOffset; \ - DtCompilerParserlloc.last_column = DtCompilerParsercolumn + DtCompilerParserleng-1; \ + DtTokenFirstLine = DtCompilerParserlineno; \ + DtTokenFirstColumn = DtCompilerParsercolumn; \ DtCompilerParsercolumn += DtCompilerParserleng; \ DtCompilerParserByteOffset += DtCompilerParserleng; \ DbgPrint (ASL_PARSE_OUTPUT,\ - "user action occurred. DtCompilerParserlloc.first_line: %u offset: %u\n",\ - DtCompilerParserlloc.first_line, DtCompilerParserlloc.first_byte_offset); + "user action occurred. DtCompilerParserlloc.first_line: %u\n",\ + DtTokenFirstLine); %} %option nounput noinput yylineno @@ -236,7 +238,11 @@ CommentField {LabelName}{WhiteSpace}*:{WhiteSpace}{Comment}?$ int size = strlen (DtCompilerParsertext); s=UtLocalCacheCalloc (size + 1); AcpiUtSafeStrncpy (s, DtCompilerParsertext, size + 1); - DtCompilerParserlval.s = s; + DtCompilerParserlval.u = (DT_TABLE_UNIT *) UtLocalCacheCalloc (sizeof (DT_TABLE_UNIT)); + DtCompilerParserlval.u->Value = s; + DtCompilerParserlval.u->Line = DtCompilerParserlineno; + DtCompilerParserlval.u->Column = DtCompilerParsercolumn; + DtLabelByteOffset = DtCompilerParserByteOffset; DbgPrint (ASL_PARSE_OUTPUT, "Label: %s\n", s); return (DT_PARSEOP_LABEL); } diff --git a/src/acpica/source/compiler/dtcompilerparser.y b/src/acpica/source/compiler/dtcompilerparser.y index ba9d2827..43eba4e9 100644 --- a/src/acpica/source/compiler/dtcompilerparser.y +++ b/src/acpica/source/compiler/dtcompilerparser.y @@ -169,9 +169,13 @@ void DtCompilerParsererror (char const *msg); extern char *DtCompilerParsertext; extern DT_FIELD *AslGbl_CurrentField; +extern int DtLabelByteOffset; extern UINT64 DtCompilerParserResult; /* Expression return value */ extern UINT64 DtCompilerParserlineno; /* Current line number */ +extern UINT32 DtTokenFirstLine; +extern UINT32 DtTokenFirstColumn; + /* Bison/yacc configuration */ #define yytname DtCompilerParsername @@ -186,42 +190,30 @@ extern UINT64 DtCompilerParserlineno; /* Current line number */ %} -%code requires { - - typedef struct YYLTYPE { - int first_line; - int last_line; - int first_column; - int last_column; - int first_byte_offset; - } YYLTYPE; - - #define YYLTYPE_IS_DECLARED 1 -} - %union { char *s; DT_FIELD *f; + DT_TABLE_UNIT *u; } %type <f> Table -%token <s> DT_PARSEOP_DATA -%token <s> DT_PARSEOP_LABEL -%token <s> DT_PARSEOP_STRING_DATA -%token <s> DT_PARSEOP_LINE_CONTINUATION -%type <s> Data -%type <s> Datum -%type <s> MultiLineData -%type <s> MultiLineDataList +%token <u> DT_PARSEOP_DATA +%token <u> DT_PARSEOP_LABEL +%token <u> DT_PARSEOP_STRING_DATA +%token <u> DT_PARSEOP_LINE_CONTINUATION +%type <u> Data +%type <u> Datum +%type <u> MultiLineData +%type <u> MultiLineDataList %% Table : - FieldList { DtCompilerParserResult = 5;} + FieldList { } ; FieldList @@ -230,7 +222,7 @@ FieldList ; Field - : DT_PARSEOP_LABEL ':' Data { DtCreateField ($1, $3, (@3).first_line, (@1).first_byte_offset, (@1).first_column, (@3).first_column); } + : DT_PARSEOP_LABEL ':' Data { DtCreateField ($1, $3, DtLabelByteOffset); } ; Data @@ -240,7 +232,7 @@ Data ; MultiLineDataList - : MultiLineDataList MultiLineData { $$ = AcpiUtStrcat(AcpiUtStrcat($1, " "), $2); } /* combine the strings with strcat */ + : MultiLineDataList MultiLineData { $$ = DtCreateTableUnit (AcpiUtStrcat(AcpiUtStrcat($1->Value, " "), $2->Value), $1->Line, $1->Column); } /* combine the strings with strcat */ | MultiLineData { $$ = $1; } ; @@ -249,8 +241,14 @@ MultiLineData ; Datum - : DT_PARSEOP_DATA { DbgPrint (ASL_PARSE_OUTPUT, "parser data: [%s]\n", DtCompilerParserlval.s); $$ = AcpiUtStrdup(DtCompilerParserlval.s); } - | DT_PARSEOP_STRING_DATA { DbgPrint (ASL_PARSE_OUTPUT, "parser string data: [%s]\n", DtCompilerParserlval.s); $$ = AcpiUtStrdup(DtCompilerParserlval.s); } + : DT_PARSEOP_DATA { + DbgPrint (ASL_PARSE_OUTPUT, "parser data: [%s]\n", DtCompilerParserlval.s); + $$ = DtCreateTableUnit (AcpiUtStrdup(DtCompilerParserlval.s), DtTokenFirstLine, DtTokenFirstColumn); + } + | DT_PARSEOP_STRING_DATA { + DbgPrint (ASL_PARSE_OUTPUT, "parser string data: [%s]\n", DtCompilerParserlval.s); + $$ = DtCreateTableUnit (AcpiUtStrdup(DtCompilerParserlval.s), DtTokenFirstLine, DtTokenFirstColumn); + } ; diff --git a/src/acpica/source/compiler/dtfield.c b/src/acpica/source/compiler/dtfield.c index 1f716761..18d44110 100644 --- a/src/acpica/source/compiler/dtfield.c +++ b/src/acpica/source/compiler/dtfield.c @@ -576,6 +576,14 @@ DtCompileBuffer ( StringValue = DtNormalizeBuffer (StringValue, &Count); Substring = StringValue; + if (Count != ByteLength) + { + sprintf(AslGbl_MsgBuffer, + "Found %u values, must match expected count: %u", + Count, ByteLength); + DtError (ASL_ERROR, ASL_MSG_BUFFER_LIST, Field, AslGbl_MsgBuffer); + goto Exit; + } /* Each element of StringValue is now three chars (2 hex + 1 space) */ @@ -721,3 +729,122 @@ DtCompileFlag ( *Buffer |= (UINT8) (Value << BitPosition); } + + +/****************************************************************************** + * + * FUNCTION: DtCreateField + * + * PARAMETERS: Name + * Value + * Line + * Offset + * Column + * NameColumn + * + * RETURN: None + * + * DESCRIPTION: Create a field + * + *****************************************************************************/ + +void +DtCreateField ( + DT_TABLE_UNIT *FieldKey, + DT_TABLE_UNIT *FieldValue, + UINT32 Offset) +{ + DT_FIELD *Field = UtFieldCacheCalloc (); + + + Field->StringLength = 0; + if (FieldKey->Value) + { + Field->Name = + strcpy (UtLocalCacheCalloc (strlen (FieldKey->Value) + 1), FieldKey->Value); + } + + if (FieldValue->Value) + { + Field->StringLength = strlen (FieldValue->Value); + Field->Value = + strcpy (UtLocalCacheCalloc (Field->StringLength + 1), FieldValue->Value); + } + + Field->Line = FieldValue->Line; + Field->ByteOffset = Offset; + Field->NameColumn = FieldKey->Column; + Field->Column = FieldValue->Column; + DtLinkField (Field); + + DtDumpFieldList (AslGbl_FieldList); +} + + +/****************************************************************************** + * + * FUNCTION: DtCreateTableUnit + * + * PARAMETERS: Data + * Line + * Column + * + * RETURN: a table unit + * + * DESCRIPTION: Create a table unit + * + *****************************************************************************/ + +DT_TABLE_UNIT * +DtCreateTableUnit ( + char *Data, + UINT32 Line, + UINT32 Column) +{ + DT_TABLE_UNIT *Unit = (DT_TABLE_UNIT *) UtFieldCacheCalloc (); + + + Unit->Value = Data; + Unit->Line = Line; + Unit->Column = Column; + return (Unit); +} + + +/****************************************************************************** + * + * FUNCTION: DtLinkField + * + * PARAMETERS: Field - New field object to link + * + * RETURN: None + * + * DESCRIPTION: Link one field name and value to the list + * + *****************************************************************************/ + +void +DtLinkField ( + DT_FIELD *Field) +{ + DT_FIELD *Prev; + DT_FIELD *Next; + + + Prev = Next = AslGbl_FieldList; + + while (Next) + { + Prev = Next; + Next = Next->Next; + } + + if (Prev) + { + Prev->Next = Field; + } + else + { + AslGbl_FieldList = Field; + } +} diff --git a/src/acpica/source/compiler/dtio.c b/src/acpica/source/compiler/dtio.c index d027353c..b596fda8 100644 --- a/src/acpica/source/compiler/dtio.c +++ b/src/acpica/source/compiler/dtio.c @@ -162,10 +162,6 @@ static char * DtTrim ( char *String); -static void -DtLinkField ( - DT_FIELD *Field); - static ACPI_STATUS DtParseLine ( char *LineBuffer, @@ -297,45 +293,6 @@ DtTrim ( } -/****************************************************************************** - * - * FUNCTION: DtLinkField - * - * PARAMETERS: Field - New field object to link - * - * RETURN: None - * - * DESCRIPTION: Link one field name and value to the list - * - *****************************************************************************/ - -static void -DtLinkField ( - DT_FIELD *Field) -{ - DT_FIELD *Prev; - DT_FIELD *Next; - - - Prev = Next = AslGbl_FieldList; - - while (Next) - { - Prev = Next; - Next = Next->Next; - } - - if (Prev) - { - Prev->Next = Field; - } - else - { - AslGbl_FieldList = Field; - } -} - - /****************************************************************************** * * FUNCTION: DtParseLine @@ -493,59 +450,6 @@ DtParseLine ( } -/****************************************************************************** - * - * FUNCTION: DtCreateField - * - * PARAMETERS: Name - * Value - * Line - * Offset - * Column - * NameColumn - * - * RETURN: None - * - * DESCRIPTION: Create a field - * - *****************************************************************************/ - -void -DtCreateField ( - char *Name, - char *Value, - UINT32 Line, - UINT32 Offset, - UINT32 Column, - UINT32 NameColumn) -{ - DT_FIELD *Field = UtFieldCacheCalloc (); - - - Field->StringLength = 0; - if (Name) - { - Field->Name = - strcpy (UtLocalCacheCalloc (strlen (Name) + 1), Name); - } - - if (Value) - { - Field->StringLength = strlen (Value); - Field->Value = - strcpy (UtLocalCacheCalloc (Field->StringLength + 1), Value); - } - - Field->Line = Line; - Field->ByteOffset = Offset; - Field->NameColumn = NameColumn; - Field->Column = Column; - DtLinkField (Field); - - DtDumpFieldList (AslGbl_FieldList); -} - - /****************************************************************************** * * FUNCTION: DtGetNextLine @@ -840,7 +744,6 @@ DtGetNextLine ( case '\n': - CurrentLineOffset = AslGbl_NextLineOffset; AslGbl_NextLineOffset = (UINT32) ftell (Handle); AslGbl_CurrentLineNumber++; break; @@ -882,7 +785,6 @@ DtGetNextLine ( /* Ignore newline, this will merge the lines */ - CurrentLineOffset = AslGbl_NextLineOffset; AslGbl_NextLineOffset = (UINT32) ftell (Handle); AslGbl_CurrentLineNumber++; State = DT_NORMAL_TEXT; diff --git a/src/acpica/source/compiler/dttable2.c b/src/acpica/source/compiler/dttable2.c index 04f48cc0..bbaaafaa 100644 --- a/src/acpica/source/compiler/dttable2.c +++ b/src/acpica/source/compiler/dttable2.c @@ -1474,13 +1474,14 @@ DtCompileSdev ( Namesp->DeviceIdOffset + Namesp->DeviceIdLength; Namesp->VendorDataLength = (UINT16) Subtable->Length; + + /* Final size of entire namespace structure */ + + SdevHeader->Length = (UINT16)(sizeof(ACPI_SDEV_NAMESPACE) + + Subtable->Length + Namesp->DeviceIdLength); } } - /* Final size of entire namespace structure */ - - SdevHeader->Length = (UINT16) (sizeof (ACPI_SDEV_NAMESPACE) + - Subtable->Length + Namesp->DeviceIdLength); break; case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE: @@ -1620,7 +1621,9 @@ DtCompileSlit ( DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD **) List; DT_FIELD *FieldList; + DT_FIELD *EndOfFieldList = NULL; UINT32 Localities; + UINT32 LocalityListLength; UINT8 *LocalityBuffer; @@ -1636,6 +1639,7 @@ DtCompileSlit ( Localities = *ACPI_CAST_PTR (UINT32, Subtable->Buffer); LocalityBuffer = UtLocalCalloc (Localities); + LocalityListLength = 0; /* Compile each locality buffer */ @@ -1645,11 +1649,22 @@ DtCompileSlit ( DtCompileBuffer (LocalityBuffer, FieldList->Value, FieldList, Localities); + LocalityListLength++; DtCreateSubtable (LocalityBuffer, Localities, &Subtable); DtInsertSubtable (ParentTable, Subtable); + EndOfFieldList = FieldList; FieldList = FieldList->Next; } + if (LocalityListLength != Localities) + { + sprintf(AslGbl_MsgBuffer, + "Found %u entries, must match LocalityCount: %u", + LocalityListLength, Localities); + DtError (ASL_ERROR, ASL_MSG_ENTRY_LIST, EndOfFieldList, AslGbl_MsgBuffer); + return (AE_LIMIT); + } + ACPI_FREE (LocalityBuffer); return (AE_OK); } diff --git a/src/acpica/source/components/debugger/dbconvert.c b/src/acpica/source/components/debugger/dbconvert.c index 631e7e8f..6b58bf5f 100644 --- a/src/acpica/source/components/debugger/dbconvert.c +++ b/src/acpica/source/components/debugger/dbconvert.c @@ -274,6 +274,10 @@ AcpiDbConvertToBuffer ( ACPI_STATUS Status; + /* Skip all preceding white space*/ + + AcpiUtRemoveWhitespace (&String); + /* Generate the final buffer length */ for (i = 0, Length = 0; String[i];) diff --git a/src/acpica/source/components/debugger/dbdisply.c b/src/acpica/source/components/debugger/dbdisply.c index 539ff5af..72bf1c6b 100644 --- a/src/acpica/source/components/debugger/dbdisply.c +++ b/src/acpica/source/components/debugger/dbdisply.c @@ -713,7 +713,6 @@ AcpiDbDisplayResults ( return; } - ObjDesc = WalkState->MethodDesc; Node = WalkState->MethodNode; if (WalkState->Results) @@ -773,7 +772,6 @@ AcpiDbDisplayCallingTree ( return; } - Node = WalkState->MethodNode; AcpiOsPrintf ("Current Control Method Call Tree\n"); while (WalkState) diff --git a/src/acpica/source/components/debugger/dbfileio.c b/src/acpica/source/components/debugger/dbfileio.c index e937c3e4..7567fa75 100644 --- a/src/acpica/source/components/debugger/dbfileio.c +++ b/src/acpica/source/components/debugger/dbfileio.c @@ -253,7 +253,7 @@ AcpiDbLoadTables ( { Table = TableListHead->Table; - Status = AcpiLoadTable (Table); + Status = AcpiLoadTable (Table, NULL); if (ACPI_FAILURE (Status)) { if (Status == AE_ALREADY_EXISTS) diff --git a/src/acpica/source/components/debugger/dbinput.c b/src/acpica/source/components/debugger/dbinput.c index d091d351..c854cb37 100644 --- a/src/acpica/source/components/debugger/dbinput.c +++ b/src/acpica/source/components/debugger/dbinput.c @@ -208,6 +208,7 @@ enum AcpiExDebuggerCommands CMD_EVALUATE, CMD_EXECUTE, CMD_EXIT, + CMD_FIELDS, CMD_FIND, CMD_GO, CMD_HANDLERS, @@ -287,6 +288,7 @@ static const ACPI_DB_COMMAND_INFO AcpiGbl_DbCommands[] = {"EVALUATE", 1}, {"EXECUTE", 1}, {"EXIT", 0}, + {"FIELDS", 1}, {"FIND", 1}, {"GO", 0}, {"HANDLERS", 0}, @@ -360,6 +362,7 @@ static const ACPI_DB_COMMAND_HELP AcpiGbl_DbCommandHelp[] = {1, " Find <AcpiName> (? is wildcard)", "Find ACPI name(s) with wildcards\n"}, {1, " Integrity", "Validate namespace integrity\n"}, {1, " Methods", "Display list of loaded control methods\n"}, + {1, " Fields <AddressSpaceId>", "Display list of loaded field units by space ID\n"}, {1, " Namespace [Object] [Depth]", "Display loaded namespace tree/subtree\n"}, {1, " Notify <Object> <Value>", "Send a notification on Object\n"}, {1, " Objects [ObjectType]", "Display summary of all objects or just given type\n"}, @@ -683,6 +686,22 @@ AcpiDbGetNextToken ( } break; + case '{': + + /* This is the start of a field unit, scan until closing brace */ + + String++; + Start = String; + Type = ACPI_TYPE_FIELD_UNIT; + + /* Find end of buffer */ + + while (*String && (*String != '}')) + { + String++; + } + break; + case '[': /* This is the start of a package, scan until closing bracket */ @@ -877,6 +896,7 @@ AcpiDbCommandDispatch ( ACPI_PARSE_OBJECT *Op) { UINT32 Temp; + UINT64 Temp64; UINT32 CommandIndex; UINT32 ParamCount; char *CommandLine; @@ -894,7 +914,6 @@ AcpiDbCommandDispatch ( ParamCount = AcpiDbGetLine (InputBuffer); CommandIndex = AcpiDbMatchCommand (AcpiGbl_DbArgs[0]); - Temp = 0; /* * We don't want to add the !! command to the history buffer. It @@ -993,6 +1012,21 @@ AcpiDbCommandDispatch ( Status = AcpiDbFindNameInNamespace (AcpiGbl_DbArgs[1]); break; + case CMD_FIELDS: + + Status = AcpiUtStrtoul64 (AcpiGbl_DbArgs[1], &Temp64); + + if (ACPI_FAILURE (Status) || Temp64 >= ACPI_NUM_PREDEFINED_REGIONS) + { + AcpiOsPrintf ( + "Invalid adress space ID: must be between 0 and %u inclusive\n", + ACPI_NUM_PREDEFINED_REGIONS - 1); + return (AE_OK); + } + + Status = AcpiDbDisplayFields ((UINT32) Temp64); + break; + case CMD_GO: AcpiGbl_CmSingleStep = FALSE; diff --git a/src/acpica/source/components/debugger/dbmethod.c b/src/acpica/source/components/debugger/dbmethod.c index 6893c550..24c014f9 100644 --- a/src/acpica/source/components/debugger/dbmethod.c +++ b/src/acpica/source/components/debugger/dbmethod.c @@ -515,6 +515,11 @@ AcpiDbDisassembleMethod ( WalkState->ParseFlags |= ACPI_PARSE_DISASSEMBLE; Status = AcpiPsParseAml (WalkState); + if (ACPI_FAILURE(Status)) + { + return (Status); + } + (void) AcpiDmParseDeferredOps (Op); /* Now we can disassemble the method */ diff --git a/src/acpica/source/components/debugger/dbnames.c b/src/acpica/source/components/debugger/dbnames.c index 2c9af4be..ac366ab0 100644 --- a/src/acpica/source/components/debugger/dbnames.c +++ b/src/acpica/source/components/debugger/dbnames.c @@ -154,6 +154,7 @@ #include "acnamesp.h" #include "acdebug.h" #include "acpredef.h" +#include "acinterp.h" #define _COMPONENT ACPI_CA_DEBUGGER @@ -722,6 +723,91 @@ AcpiDbWalkForObjectCounts ( } +/******************************************************************************* + * + * FUNCTION: AcpiDbWalkForFields + * + * PARAMETERS: Callback from WalkNamespace + * + * RETURN: Status + * + * DESCRIPTION: Display short info about objects in the namespace + * + ******************************************************************************/ + +static ACPI_STATUS +AcpiDbWalkForFields ( + ACPI_HANDLE ObjHandle, + UINT32 NestingLevel, + void *Context, + void **ReturnValue) +{ + ACPI_OBJECT *RetValue; + ACPI_REGION_WALK_INFO *Info = (ACPI_REGION_WALK_INFO *) Context; + ACPI_BUFFER Buffer; + ACPI_STATUS Status; + ACPI_NAMESPACE_NODE *Node = AcpiNsValidateHandle (ObjHandle); + + + if (!Node) + { + return (AE_OK); + } + if (Node->Object->Field.RegionObj->Region.SpaceId != Info->AddressSpaceId) + { + return (AE_OK); + } + + Info->Count++; + + /* Get and display the full pathname to this object */ + + Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; + Status = AcpiNsHandleToPathname (ObjHandle, &Buffer, TRUE); + if (ACPI_FAILURE (Status)) + { + AcpiOsPrintf ("Could Not get pathname for object %p\n", ObjHandle); + return (AE_OK); + } + + AcpiOsPrintf ("%s ", (char *) Buffer.Pointer); + ACPI_FREE (Buffer.Pointer); + + Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; + AcpiEvaluateObject (ObjHandle, NULL, NULL, &Buffer); + + /* + * Since this is a field unit, surround the output in braces + */ + AcpiOsPrintf ("{"); + + RetValue = (ACPI_OBJECT *) Buffer.Pointer; + switch (RetValue->Type) + { + case ACPI_TYPE_INTEGER: + + AcpiOsPrintf ("%8.8X%8.8X", ACPI_FORMAT_UINT64 (RetValue->Integer.Value)); + break; + + case ACPI_TYPE_BUFFER: + + AcpiUtDumpBuffer (RetValue->Buffer.Pointer, + RetValue->Buffer.Length, DB_DISPLAY_DATA_ONLY | DB_BYTE_DISPLAY, 0); + break; + + default: + + break; + } + + AcpiOsPrintf ("}\n"); + + ACPI_FREE (Buffer.Pointer); + return (AE_OK); +} + + + /******************************************************************************* * * FUNCTION: AcpiDbWalkForSpecificObjects @@ -857,6 +943,42 @@ AcpiDbDisplayObjects ( } +/******************************************************************************* + * + * FUNCTION: AcpiDbDisplayFields + * + * PARAMETERS: ObjTypeArg - Type of object to display + * DisplayCountArg - Max depth to display + * + * RETURN: None + * + * DESCRIPTION: Display objects in the namespace of the requested type + * + ******************************************************************************/ + +ACPI_STATUS +AcpiDbDisplayFields ( + UINT32 AddressSpaceId) +{ + ACPI_REGION_WALK_INFO Info; + + + Info.Count = 0; + Info.OwnerId = ACPI_OWNER_ID_MAX; + Info.DebugLevel = ACPI_UINT32_MAX; + Info.DisplayType = ACPI_DISPLAY_SUMMARY | ACPI_DISPLAY_SHORT; + Info.AddressSpaceId = AddressSpaceId; + + /* Walk the namespace from the root */ + + (void) AcpiWalkNamespace (ACPI_TYPE_LOCAL_REGION_FIELD, ACPI_ROOT_OBJECT, + ACPI_UINT32_MAX, AcpiDbWalkForFields, NULL, + (void *) &Info, NULL); + + return (AE_OK); +} + + /******************************************************************************* * * FUNCTION: AcpiDbIntegrityWalk diff --git a/src/acpica/source/components/debugger/dbobject.c b/src/acpica/source/components/debugger/dbobject.c index cebf4420..cffa0a53 100644 --- a/src/acpica/source/components/debugger/dbobject.c +++ b/src/acpica/source/components/debugger/dbobject.c @@ -649,7 +649,6 @@ AcpiDbDecodeArguments ( Node = WalkState->MethodNode; - ObjDesc = WalkState->MethodDesc; /* There are no arguments for the module-level code case */ diff --git a/src/acpica/source/components/disassembler/dmdeferred.c b/src/acpica/source/components/disassembler/dmdeferred.c index d0753bb0..d0a589c9 100644 --- a/src/acpica/source/components/disassembler/dmdeferred.c +++ b/src/acpica/source/components/disassembler/dmdeferred.c @@ -309,6 +309,10 @@ AcpiDmDeferredParse ( WalkState->ParseFlags &= ~ACPI_PARSE_DELETE_TREE; WalkState->ParseFlags |= ACPI_PARSE_DISASSEMBLE; Status = AcpiPsParseAml (WalkState); + if (ACPI_FAILURE (Status)) + { + return_ACPI_STATUS(Status); + } StartOp = (Op->Common.Value.Arg)->Common.Next; SearchOp = StartOp; diff --git a/src/acpica/source/components/disassembler/dmresrc.c b/src/acpica/source/components/disassembler/dmresrc.c index bb36b734..c2e85b8a 100644 --- a/src/acpica/source/components/disassembler/dmresrc.c +++ b/src/acpica/source/components/disassembler/dmresrc.c @@ -441,7 +441,6 @@ AcpiDmResourceTemplate ( * missing EndDependentDescriptor. */ Level--; - DependentFns = FALSE; /* Go ahead and insert EndDependentFn() */ diff --git a/src/acpica/source/components/disassembler/dmwalk.c b/src/acpica/source/components/disassembler/dmwalk.c index 8ec8728e..97b33039 100644 --- a/src/acpica/source/components/disassembler/dmwalk.c +++ b/src/acpica/source/components/disassembler/dmwalk.c @@ -957,7 +957,6 @@ AcpiDmDescendingOp ( * the buffer size Op. Open up a new block */ NextOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; - NextOp = NextOp->Common.Next; ASL_CV_CLOSE_PAREN (Op, Level); /* Emit description comment for Name() with a predefined ACPI name */ diff --git a/src/acpica/source/components/dispatcher/dscontrol.c b/src/acpica/source/components/dispatcher/dscontrol.c index 238c77bb..85b4679e 100644 --- a/src/acpica/source/components/dispatcher/dscontrol.c +++ b/src/acpica/source/components/dispatcher/dscontrol.c @@ -235,7 +235,7 @@ AcpiDsExecBeginControlOp ( ControlState->Control.Opcode = Op->Common.AmlOpcode; ControlState->Control.LoopTimeout = AcpiOsGetTimer () + - (UINT64) (AcpiGbl_MaxLoopIterations * ACPI_100NSEC_PER_SEC); + ((UINT64) AcpiGbl_MaxLoopIterations * ACPI_100NSEC_PER_SEC); /* Push the control state on this walk's control stack */ diff --git a/src/acpica/source/components/dispatcher/dsfield.c b/src/acpica/source/components/dispatcher/dsfield.c index 3aff4db1..5477686f 100644 --- a/src/acpica/source/components/dispatcher/dsfield.c +++ b/src/acpica/source/components/dispatcher/dsfield.c @@ -309,7 +309,6 @@ AcpiDsCreateBufferField ( if (WalkState->DeferredNode) { Node = WalkState->DeferredNode; - Status = AE_OK; } else { @@ -435,7 +434,6 @@ AcpiDsGetFieldNames ( ACPI_PARSE_OBJECT *Child; #ifdef ACPI_EXEC_APP - UINT64 Value = 0; ACPI_OPERAND_OBJECT *ResultDesc; ACPI_OPERAND_OBJECT *ObjDesc; char *NamePath; @@ -577,14 +575,13 @@ AcpiDsGetFieldNames ( } #ifdef ACPI_EXEC_APP NamePath = AcpiNsGetExternalPathname (Info->FieldNode); - ObjDesc = AcpiUtCreateIntegerObject (Value); - if (ACPI_SUCCESS (AeLookupInitFileEntry (NamePath, &Value))) + if (ACPI_SUCCESS (AeLookupInitFileEntry (NamePath, &ObjDesc))) { AcpiExWriteDataToField (ObjDesc, AcpiNsGetAttachedObject (Info->FieldNode), &ResultDesc); + AcpiUtRemoveReference (ObjDesc); } - AcpiUtRemoveReference (ObjDesc); ACPI_FREE (NamePath); #endif } @@ -813,8 +810,6 @@ AcpiDsInitFieldObjects ( } /* Name already exists, just ignore this error */ - - Status = AE_OK; } Arg->Common.Node = Node; diff --git a/src/acpica/source/components/events/evgpeblk.c b/src/acpica/source/components/events/evgpeblk.c index 80157dcd..e0e2780f 100644 --- a/src/acpica/source/components/events/evgpeblk.c +++ b/src/acpica/source/components/events/evgpeblk.c @@ -272,6 +272,10 @@ AcpiEvDeleteGpeBlock ( /* Disable all GPEs in this block */ Status = AcpiHwDisableGpeBlock (GpeBlock->XruptBlock, GpeBlock, NULL); + if (ACPI_FAILURE (Status)) + { + return_ACPI_STATUS (Status); + } if (!GpeBlock->Previous && !GpeBlock->Next) { @@ -542,7 +546,7 @@ AcpiEvCreateGpeBlock ( WalkInfo.GpeDevice = GpeDevice; WalkInfo.ExecuteByOwnerId = FALSE; - Status = AcpiNsWalkNamespace (ACPI_TYPE_METHOD, GpeDevice, + (void) AcpiNsWalkNamespace (ACPI_TYPE_METHOD, GpeDevice, ACPI_UINT32_MAX, ACPI_NS_WALK_NO_UNLOCK, AcpiEvMatchGpeMethod, NULL, &WalkInfo, NULL); diff --git a/src/acpica/source/components/events/evgpeinit.c b/src/acpica/source/components/events/evgpeinit.c index b7e02a06..7e3c766c 100644 --- a/src/acpica/source/components/events/evgpeinit.c +++ b/src/acpica/source/components/events/evgpeinit.c @@ -302,8 +302,6 @@ AcpiEvGpeInitialize ( * GPE0 and GPE1 do not have to be contiguous in the GPE number * space. However, GPE0 always starts at GPE number zero. */ - GpeNumberMax = AcpiGbl_FADT.Gpe1Base + - ((RegisterCount1 * ACPI_GPE_REGISTER_WIDTH) - 1); } } @@ -315,7 +313,6 @@ AcpiEvGpeInitialize ( ACPI_DEBUG_PRINT ((ACPI_DB_INIT, "There are no GPE blocks defined in the FADT\n")); - Status = AE_OK; goto Cleanup; } diff --git a/src/acpica/source/components/events/evmisc.c b/src/acpica/source/components/events/evmisc.c index f73cc2f3..68f1dc8a 100644 --- a/src/acpica/source/components/events/evmisc.c +++ b/src/acpica/source/components/events/evmisc.c @@ -400,11 +400,16 @@ AcpiEvTerminate ( /* Disable all GPEs in all GPE blocks */ Status = AcpiEvWalkGpeList (AcpiHwDisableGpeBlock, NULL); + if (ACPI_FAILURE (Status)) + { + ACPI_EXCEPTION ((AE_INFO, Status, + "Could not disable GPEs in GPE block")); + } Status = AcpiEvRemoveGlobalLockHandler (); - if (ACPI_FAILURE(Status)) + if (ACPI_FAILURE (Status)) { - ACPI_ERROR ((AE_INFO, + ACPI_EXCEPTION ((AE_INFO, Status, "Could not remove Global Lock handler")); } @@ -414,7 +419,7 @@ AcpiEvTerminate ( /* Remove SCI handlers */ Status = AcpiEvRemoveAllSciHandlers (); - if (ACPI_FAILURE(Status)) + if (ACPI_FAILURE (Status)) { ACPI_ERROR ((AE_INFO, "Could not remove SCI handler")); @@ -423,6 +428,12 @@ AcpiEvTerminate ( /* Deallocate all handler objects installed within GPE info structs */ Status = AcpiEvWalkGpeList (AcpiEvDeleteGpeHandlers, NULL); + if (ACPI_FAILURE (Status)) + { + ACPI_EXCEPTION ((AE_INFO, Status, + "Could not delete GPE handlers")); + } + /* Return to original mode if necessary */ diff --git a/src/acpica/source/components/events/evregion.c b/src/acpica/source/components/events/evregion.c index 6f6d7ccc..13a20918 100644 --- a/src/acpica/source/components/events/evregion.c +++ b/src/acpica/source/components/events/evregion.c @@ -1037,11 +1037,11 @@ AcpiEvOrphanEcRegMethod ( Objects[1].Type = ACPI_TYPE_INTEGER; Objects[1].Integer.Value = ACPI_REG_CONNECT; - Status = AcpiEvaluateObject (RegMethod, NULL, &Args, NULL); + (void) AcpiEvaluateObject (RegMethod, NULL, &Args, NULL); Exit: /* We ignore all errors from above, don't care */ - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); + (void) AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); return_VOID; } diff --git a/src/acpica/source/components/events/evrgnini.c b/src/acpica/source/components/events/evrgnini.c index 718e2e87..3c865c59 100644 --- a/src/acpica/source/components/events/evrgnini.c +++ b/src/acpica/source/components/events/evrgnini.c @@ -363,7 +363,6 @@ AcpiEvPciConfigRegionSetup ( * root bridge. Still need to return a context object * for the new PCI_Config operation region, however. */ - Status = AE_OK; } else { diff --git a/src/acpica/source/components/hardware/hwxfsleep.c b/src/acpica/source/components/hardware/hwxfsleep.c index 3df8f5a5..78dc1902 100644 --- a/src/acpica/source/components/hardware/hwxfsleep.c +++ b/src/acpica/source/components/hardware/hwxfsleep.c @@ -357,6 +357,10 @@ AcpiEnterSleepStateS4bios ( Status = AcpiHwWritePort (AcpiGbl_FADT.SmiCommand, (UINT32) AcpiGbl_FADT.S4BiosRequest, 8); + if (ACPI_FAILURE (Status)) + { + return_ACPI_STATUS (Status); + } do { AcpiOsStall (ACPI_USEC_PER_MSEC); diff --git a/src/acpica/source/components/namespace/nsconvert.c b/src/acpica/source/components/namespace/nsconvert.c index d2b32d25..ae590490 100644 --- a/src/acpica/source/components/namespace/nsconvert.c +++ b/src/acpica/source/components/namespace/nsconvert.c @@ -670,5 +670,5 @@ AcpiNsConvertToReference ( ErrorExit: ACPI_FREE (Name); *ReturnObject = NewObject; - return (AE_OK); + return (Status); } diff --git a/src/acpica/source/components/namespace/nsdump.c b/src/acpica/source/components/namespace/nsdump.c index 8a2a7e92..0ed4d72c 100644 --- a/src/acpica/source/components/namespace/nsdump.c +++ b/src/acpica/source/components/namespace/nsdump.c @@ -478,7 +478,7 @@ AcpiNsDumpOneObject ( AcpiOsPrintf (" ="); for (i = 0; (i < ObjDesc->Buffer.Length && i < 12); i++) { - AcpiOsPrintf (" %.2hX", ObjDesc->Buffer.Pointer[i]); + AcpiOsPrintf (" %2.2X", ObjDesc->Buffer.Pointer[i]); } } AcpiOsPrintf ("\n"); @@ -575,7 +575,7 @@ AcpiNsDumpOneObject ( case ACPI_TYPE_LOCAL_BANK_FIELD: case ACPI_TYPE_LOCAL_INDEX_FIELD: - AcpiOsPrintf (" Off %.3X Len %.2X Acc %.2hd\n", + AcpiOsPrintf (" Off %.3X Len %.2X Acc %.2X\n", (ObjDesc->CommonField.BaseByteOffset * 8) + ObjDesc->CommonField.StartFieldBitOffset, ObjDesc->CommonField.BitLength, @@ -760,8 +760,6 @@ AcpiNsDumpOneObject ( goto Cleanup; } - - ObjType = ACPI_TYPE_INVALID; /* Terminate loop after next pass */ } Cleanup: diff --git a/src/acpica/source/components/namespace/nsxfname.c b/src/acpica/source/components/namespace/nsxfname.c index 7332a92f..85be591f 100644 --- a/src/acpica/source/components/namespace/nsxfname.c +++ b/src/acpica/source/components/namespace/nsxfname.c @@ -611,7 +611,7 @@ AcpiGetObjectInfo ( if (Cls) { - NextIdString = AcpiNsCopyDeviceId (&Info->ClassCode, + (void) AcpiNsCopyDeviceId (&Info->ClassCode, Cls, NextIdString); } diff --git a/src/acpica/source/components/parser/psobject.c b/src/acpica/source/components/parser/psobject.c index 61c3a868..6ceb7d91 100644 --- a/src/acpica/source/components/parser/psobject.c +++ b/src/acpica/source/components/parser/psobject.c @@ -652,7 +652,7 @@ AcpiPsCompleteOp ( WalkState->Opcode = (*Op)->Common.AmlOpcode; Status = WalkState->AscendingCallback (WalkState); - Status = AcpiPsNextParseState (WalkState, *Op, Status); + (void) AcpiPsNextParseState (WalkState, *Op, Status); Status2 = AcpiPsCompleteThisOp (WalkState, *Op); if (ACPI_FAILURE (Status2)) @@ -661,7 +661,6 @@ AcpiPsCompleteOp ( } } - Status = AE_OK; break; case AE_CTRL_BREAK: @@ -682,7 +681,7 @@ AcpiPsCompleteOp ( WalkState->Opcode = (*Op)->Common.AmlOpcode; Status = WalkState->AscendingCallback (WalkState); - Status = AcpiPsNextParseState (WalkState, *Op, Status); + (void) AcpiPsNextParseState (WalkState, *Op, Status); Status2 = AcpiPsCompleteThisOp (WalkState, *Op); if (ACPI_FAILURE (Status2)) @@ -690,7 +689,6 @@ AcpiPsCompleteOp ( return_ACPI_STATUS (Status2); } - Status = AE_OK; break; case AE_CTRL_TERMINATE: diff --git a/src/acpica/source/components/resources/rscreate.c b/src/acpica/source/components/resources/rscreate.c index 26640c20..172bc55f 100644 --- a/src/acpica/source/components/resources/rscreate.c +++ b/src/acpica/source/components/resources/rscreate.c @@ -481,6 +481,10 @@ AcpiRsCreatePciRoutingTable ( Status = AcpiNsHandleToPathname ( (ACPI_HANDLE) Node, &PathBuffer, FALSE); + if (ACPI_FAILURE (Status)) + { + return_ACPI_STATUS (Status); + } /* +1 to include null terminator */ diff --git a/src/acpica/source/components/tables/tbdata.c b/src/acpica/source/components/tables/tbdata.c index 84dd25bd..6eb1f24a 100644 --- a/src/acpica/source/components/tables/tbdata.c +++ b/src/acpica/source/components/tables/tbdata.c @@ -1190,6 +1190,10 @@ AcpiTbLoadTable ( } Status = AcpiNsLoadTable (TableIndex, ParentNode); + if (ACPI_FAILURE (Status)) + { + return_ACPI_STATUS (Status); + } /* * Update GPEs for any new _Lxx/_Exx methods. Ignore errors. The host is diff --git a/src/acpica/source/components/tables/tbxfload.c b/src/acpica/source/components/tables/tbxfload.c index 1e17db6c..24daafcf 100644 --- a/src/acpica/source/components/tables/tbxfload.c +++ b/src/acpica/source/components/tables/tbxfload.c @@ -445,6 +445,8 @@ ACPI_EXPORT_SYMBOL_INIT (AcpiInstallTable) * * PARAMETERS: Table - Pointer to a buffer containing the ACPI * table to be loaded. + * TableIdx - Pointer to a UINT32 for storing the table + * index, might be NULL * * RETURN: Status * @@ -458,7 +460,8 @@ ACPI_EXPORT_SYMBOL_INIT (AcpiInstallTable) ACPI_STATUS AcpiLoadTable ( - ACPI_TABLE_HEADER *Table) + ACPI_TABLE_HEADER *Table, + UINT32 *TableIdx) { ACPI_STATUS Status; UINT32 TableIndex; @@ -479,6 +482,11 @@ AcpiLoadTable ( ACPI_INFO (("Host-directed Dynamic ACPI Table Load:")); Status = AcpiTbInstallAndLoadTable (ACPI_PTR_TO_PHYSADDR (Table), ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL, FALSE, &TableIndex); + if (TableIdx) + { + *TableIdx = TableIndex; + } + if (ACPI_SUCCESS (Status)) { /* Complete the initialization/resolution of new objects */ @@ -582,3 +590,42 @@ AcpiUnloadParentTable ( } ACPI_EXPORT_SYMBOL (AcpiUnloadParentTable) + + +/******************************************************************************* + * + * FUNCTION: AcpiUnloadTable + * + * PARAMETERS: TableIndex - Index as returned by AcpiLoadTable + * + * RETURN: Status + * + * DESCRIPTION: Via the TableIndex representing an SSDT or OEMx table, unloads + * the table and deletes all namespace objects associated with + * that table. Unloading of the DSDT is not allowed. + * Note: Mainly intended to support hotplug removal of SSDTs. + * + ******************************************************************************/ + +ACPI_STATUS +AcpiUnloadTable ( + UINT32 TableIndex) +{ + ACPI_STATUS Status; + + + ACPI_FUNCTION_TRACE (AcpiUnloadTable); + + + if (TableIndex == 1) + { + /* TableIndex==1 means DSDT is the owner. DSDT cannot be unloaded */ + + return_ACPI_STATUS (AE_TYPE); + } + + Status = AcpiTbUnloadTable (TableIndex); + return_ACPI_STATUS (Status); +} + +ACPI_EXPORT_SYMBOL (AcpiUnloadTable) diff --git a/src/acpica/source/components/utilities/utbuffer.c b/src/acpica/source/components/utilities/utbuffer.c index 44fd30a6..015c16f9 100644 --- a/src/acpica/source/components/utilities/utbuffer.c +++ b/src/acpica/source/components/utilities/utbuffer.c @@ -186,8 +186,10 @@ AcpiUtDumpBuffer ( UINT32 j; UINT32 Temp32; UINT8 BufChar; + UINT32 DisplayDataOnly = Display & DB_DISPLAY_DATA_ONLY; + Display &= ~DB_DISPLAY_DATA_ONLY; if (!Buffer) { AcpiOsPrintf ("Null Buffer Pointer in DumpBuffer!\n"); @@ -205,7 +207,10 @@ AcpiUtDumpBuffer ( { /* Print current offset */ - AcpiOsPrintf ("%8.4X: ", (BaseOffset + i)); + if (!DisplayDataOnly) + { + AcpiOsPrintf ("%8.4X: ", (BaseOffset + i)); + } /* Print 16 hex chars */ @@ -257,38 +262,41 @@ AcpiUtDumpBuffer ( * Print the ASCII equivalent characters but watch out for the bad * unprintable ones (printable chars are 0x20 through 0x7E) */ - AcpiOsPrintf (" "); - for (j = 0; j < 16; j++) + if (!DisplayDataOnly) { - if (i + j >= Count) + AcpiOsPrintf (" "); + for (j = 0; j < 16; j++) { - AcpiOsPrintf ("\n"); - return; + if (i + j >= Count) + { + AcpiOsPrintf ("\n"); + return; + } + + /* + * Add comment characters so rest of line is ignored when + * compiled + */ + if (j == 0) + { + AcpiOsPrintf ("// "); + } + + BufChar = Buffer[(ACPI_SIZE) i + j]; + if (isprint (BufChar)) + { + AcpiOsPrintf ("%c", BufChar); + } + else + { + AcpiOsPrintf ("."); + } } - /* - * Add comment characters so rest of line is ignored when - * compiled - */ - if (j == 0) - { - AcpiOsPrintf ("// "); - } + /* Done with that line. */ - BufChar = Buffer[(ACPI_SIZE) i + j]; - if (isprint (BufChar)) - { - AcpiOsPrintf ("%c", BufChar); - } - else - { - AcpiOsPrintf ("."); - } + AcpiOsPrintf ("\n"); } - - /* Done with that line. */ - - AcpiOsPrintf ("\n"); i += 16; } diff --git a/src/acpica/source/components/utilities/utids.c b/src/acpica/source/components/utilities/utids.c index 5fcfbf66..513548c2 100644 --- a/src/acpica/source/components/utilities/utids.c +++ b/src/acpica/source/components/utilities/utids.c @@ -466,7 +466,8 @@ AcpiUtExecute_CID ( { /* Copy the String CID from the returned object */ - strcpy (NextIdString, CidObjects[i]->String.Pointer); + AcpiUtSafeStrcpy (NextIdString, CidObjects[i]->String.Length + 1, + CidObjects[i]->String.Pointer); Length = CidObjects[i]->String.Length + 1; } diff --git a/src/acpica/source/components/utilities/uttrack.c b/src/acpica/source/components/utilities/uttrack.c index c6e6b45b..76e439fe 100644 --- a/src/acpica/source/components/utilities/uttrack.c +++ b/src/acpica/source/components/utilities/uttrack.c @@ -864,7 +864,7 @@ AcpiUtDumpAllocations ( case ACPI_DESC_TYPE_PARSER: - AcpiOsPrintf ("AmlOpcode 0x%04hX\n", + AcpiOsPrintf ("AmlOpcode 0x%04X\n", Descriptor->Op.Asl.AmlOpcode); break; diff --git a/src/acpica/source/include/acdebug.h b/src/acpica/source/include/acdebug.h index 4e43bbee..f296cb94 100644 --- a/src/acpica/source/include/acdebug.h +++ b/src/acpica/source/include/acdebug.h @@ -392,6 +392,10 @@ void AcpiDbGetBusInfo ( void); +ACPI_STATUS +AcpiDbDisplayFields ( + UINT32 AddressSpaceId); + /* * dbdisply - debug display commands diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h index a123eed7..62e37909 100644 --- a/src/acpica/source/include/acpixf.h +++ b/src/acpica/source/include/acpixf.h @@ -154,7 +154,7 @@ /* Current ACPICA subsystem version in YYYYMMDD format */ -#define ACPI_CA_VERSION 0x20190816 +#define ACPI_CA_VERSION 0x20191018 #include "acconfig.h" #include "actypes.h" @@ -664,7 +664,13 @@ AcpiInstallTable ( ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiLoadTable ( - ACPI_TABLE_HEADER *Table)) + ACPI_TABLE_HEADER *Table, + UINT32 *TableIdx)) + +ACPI_EXTERNAL_RETURN_STATUS ( +ACPI_STATUS +AcpiUnloadTable ( + UINT32 TableIndex)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS diff --git a/src/acpica/source/include/acstruct.h b/src/acpica/source/include/acstruct.h index f81c8a7d..e6ab1d90 100644 --- a/src/acpica/source/include/acstruct.h +++ b/src/acpica/source/include/acstruct.h @@ -357,6 +357,19 @@ typedef struct acpi_device_walk_info } ACPI_DEVICE_WALK_INFO; +/* Info used by Acpi AcpiDbDisplayFields */ + +typedef struct acpi_region_walk_info +{ + UINT32 DebugLevel; + UINT32 Count; + ACPI_OWNER_ID OwnerId; + UINT8 DisplayType; + UINT32 AddressSpaceId; + +} ACPI_REGION_WALK_INFO; + + /* TBD: [Restructure] Merge with struct above */ typedef struct acpi_walk_info diff --git a/src/acpica/source/include/acutils.h b/src/acpica/source/include/acutils.h index 0c2327d2..6352b5ff 100644 --- a/src/acpica/source/include/acutils.h +++ b/src/acpica/source/include/acutils.h @@ -290,10 +290,11 @@ typedef struct acpi_pkg_info /* AcpiUtDumpBuffer */ -#define DB_BYTE_DISPLAY 1 -#define DB_WORD_DISPLAY 2 -#define DB_DWORD_DISPLAY 4 -#define DB_QWORD_DISPLAY 8 +#define DB_BYTE_DISPLAY 0x01 +#define DB_WORD_DISPLAY 0x02 +#define DB_DWORD_DISPLAY 0x04 +#define DB_QWORD_DISPLAY 0x08 +#define DB_DISPLAY_DATA_ONLY 0x10 /* diff --git a/src/acpica/source/tools/acpiexec/aecommon.h b/src/acpica/source/tools/acpiexec/aecommon.h index 602356de..257632f7 100644 --- a/src/acpica/source/tools/acpiexec/aecommon.h +++ b/src/acpica/source/tools/acpiexec/aecommon.h @@ -195,7 +195,8 @@ typedef struct ae_debug_regions typedef struct init_file_entry { char *Name; - UINT64 Value; + ACPI_OPERAND_OBJECT *ObjDesc; + } INIT_FILE_ENTRY; extern BOOLEAN AcpiGbl_UseLocalFaultHandler; @@ -356,7 +357,7 @@ AeSetupConfiguration ( ACPI_STATUS AeLookupInitFileEntry ( char *Pathname, - UINT64 *Value); + ACPI_OPERAND_OBJECT **ObjDesc); /* aeexec */ diff --git a/src/acpica/source/tools/acpiexec/aehandlers.c b/src/acpica/source/tools/acpiexec/aehandlers.c index 75e8eb0a..f7dd012e 100644 --- a/src/acpica/source/tools/acpiexec/aehandlers.c +++ b/src/acpica/source/tools/acpiexec/aehandlers.c @@ -683,20 +683,27 @@ AeInstallLateHandlers ( { Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY, AeNotifyHandler1, ACPI_CAST_PTR (void, 0x01234567)); + ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY, AeNotifyHandler2, ACPI_CAST_PTR (void, 0x89ABCDEF)); + ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); Status = AcpiRemoveNotifyHandler (Handle, ACPI_ALL_NOTIFY, AeNotifyHandler1); + ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); + Status = AcpiRemoveNotifyHandler (Handle, ACPI_ALL_NOTIFY, AeNotifyHandler2); + ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY, AeNotifyHandler2, ACPI_CAST_PTR (void, 0x89ABCDEF)); + ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY, AeNotifyHandler1, ACPI_CAST_PTR (void, 0x01234567)); + ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); } Status = AcpiGetHandle (NULL, "\\_PR.CPU0", &Handle); @@ -704,9 +711,11 @@ AeInstallLateHandlers ( { Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY, AeNotifyHandler1, ACPI_CAST_PTR (void, 0x01234567)); + ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY, AeNotifyHandler2, ACPI_CAST_PTR (void, 0x89ABCDEF)); + ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); } #if (!ACPI_REDUCED_HARDWARE) @@ -855,13 +864,15 @@ AeInstallEarlyHandlers ( Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY, AeNotifyHandler1, ACPI_CAST_PTR (void, 0x01234567)); + ACPI_CHECK_OK(AcpiInstallNotifyHandler, Status); Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY, AeNotifyHandler2, ACPI_CAST_PTR (void, 0x89ABCDEF)); + ACPI_CHECK_OK(AcpiInstallNotifyHandler, Status); /* Attempt duplicate handler installation, should fail */ - Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY, + (void) AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY, AeNotifyHandler1, ACPI_CAST_PTR (void, 0x77777777)); Status = AcpiAttachData (Handle, AeAttachedDataHandler, Handle); diff --git a/src/acpica/source/tools/acpiexec/aeinitfile.c b/src/acpica/source/tools/acpiexec/aeinitfile.c index f895e2cc..35e2b8b8 100644 --- a/src/acpica/source/tools/acpiexec/aeinitfile.c +++ b/src/acpica/source/tools/acpiexec/aeinitfile.c @@ -224,9 +224,13 @@ AeProcessInitFile( void) { ACPI_WALK_STATE *WalkState; - int i; UINT64 idx; ACPI_STATUS Status; + char *Token; + char *ObjectBuffer; + char *TempNameBuffer; + ACPI_OBJECT_TYPE Type; + ACPI_OBJECT TempObject; if (!InitFile) @@ -249,26 +253,44 @@ AeProcessInitFile( AcpiOsAllocate (sizeof (INIT_FILE_ENTRY) * AcpiGbl_InitFileLineCount); for (idx = 0; fgets (LineBuffer, AE_FILE_BUFFER_SIZE, InitFile); ++idx) { - if (sscanf (LineBuffer, "%s %s\n", - &NameBuffer[1], ValueBuffer) != 2) + + TempNameBuffer = AcpiDbGetNextToken (LineBuffer, &Token, &Type); + if (LineBuffer[0] == '\\') { - goto CleanupAndExit; + strcpy (NameBuffer, TempNameBuffer); + } + else + { + /* Add a root prefix if not present in the string */ + + strcpy (NameBuffer + 1, TempNameBuffer); } - /* Add a root prefix if not present in the string */ + AcpiGbl_InitEntries[idx].Name = + AcpiOsAllocateZeroed (strnlen (NameBuffer, AE_FILE_BUFFER_SIZE) + 1); + + strcpy (AcpiGbl_InitEntries[idx].Name, NameBuffer); + + ObjectBuffer = AcpiDbGetNextToken (Token, &Token, &Type); - i = 0; - if (NameBuffer[1] == '\\') + if (Type == ACPI_TYPE_FIELD_UNIT) + { + Status = AcpiDbConvertToObject (ACPI_TYPE_BUFFER, ObjectBuffer, + &TempObject); + } + else { - i = 1; + Status = AcpiDbConvertToObject (Type, ObjectBuffer, &TempObject); } - AcpiGbl_InitEntries[idx].Name = - AcpiOsAllocateZeroed (strnlen (NameBuffer + i, AE_FILE_BUFFER_SIZE) + 1); + Status = AcpiUtCopyEobjectToIobject (&TempObject, + &AcpiGbl_InitEntries[idx].ObjDesc); - strcpy (AcpiGbl_InitEntries[idx].Name, NameBuffer + i); + if (Type == ACPI_TYPE_BUFFER || Type == ACPI_TYPE_FIELD_UNIT) + { + ACPI_FREE (TempObject.Buffer.Pointer); + } - Status = AcpiUtStrtoul64 (ValueBuffer, &AcpiGbl_InitEntries[idx].Value); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("%s %s\n", ValueBuffer, @@ -276,7 +298,16 @@ AeProcessInitFile( goto CleanupAndExit; } - AeEnterInitFileEntry (AcpiGbl_InitEntries[idx], WalkState); + /* + * Special case for field units. Field units are dependent on the + * parent region. This parent region has yet to be created so defer the + * initialization until the dispatcher. For all other types, initialize + * the namespace node with the value found in the init file. + */ + if (Type != ACPI_TYPE_FIELD_UNIT) + { + AeEnterInitFileEntry (AcpiGbl_InitEntries[idx], WalkState); + } } /* Cleanup */ @@ -309,14 +340,12 @@ AeEnterInitFileEntry ( ACPI_WALK_STATE *WalkState) { char *Pathname = InitEntry.Name; - UINT64 Value = InitEntry.Value; - ACPI_OPERAND_OBJECT *ObjDesc; + ACPI_OPERAND_OBJECT *ObjDesc = InitEntry.ObjDesc; ACPI_NAMESPACE_NODE *NewNode; ACPI_STATUS Status; - AcpiOsPrintf ("Initializing namespace element: %s\n", Pathname); - Status = AcpiNsLookup (NULL, Pathname, ACPI_TYPE_INTEGER, + Status = AcpiNsLookup (NULL, Pathname, ObjDesc->Common.Type, ACPI_IMODE_LOAD_PASS2, ACPI_NS_ERROR_IF_FOUND | ACPI_NS_NO_UPSEARCH | ACPI_NS_EARLY_INIT, NULL, &NewNode); if (ACPI_FAILURE (Status)) @@ -327,15 +356,17 @@ AeEnterInitFileEntry ( return; } - ObjDesc = AcpiUtCreateIntegerObject (Value); - - AcpiOsPrintf ("New value: 0x%8.8X%8.8X\n", - ACPI_FORMAT_UINT64 (Value)); - /* Store pointer to value descriptor in the Node */ Status = AcpiNsAttachObject (NewNode, ObjDesc, - ACPI_TYPE_INTEGER); + ObjDesc->Common.Type); + if (ACPI_FAILURE (Status)) + { + ACPI_EXCEPTION ((AE_INFO, Status, + "While attaching object to node from namespace initialization file: %s", + Pathname)); + return; + } /* Remove local reference to the object */ @@ -359,7 +390,7 @@ AeEnterInitFileEntry ( ACPI_STATUS AeLookupInitFileEntry ( char *Pathname, - UINT64 *Value) + ACPI_OPERAND_OBJECT **ObjDesc) { UINT32 i; @@ -372,7 +403,7 @@ AeLookupInitFileEntry ( { if (!strcmp(AcpiGbl_InitEntries[i].Name, Pathname)) { - *Value = AcpiGbl_InitEntries[i].Value; + *ObjDesc = AcpiGbl_InitEntries[i].ObjDesc; return AE_OK; } }