diff options
author | Jung-uk Kim <jkim@FreeBSD.org> | 2019-10-19 14:56:44 +0000 |
---|---|---|
committer | Jung-uk Kim <jkim@FreeBSD.org> | 2019-10-19 14:56:44 +0000 |
commit | a009b7dcabdc27aa3fdde1f2c6dd08d4fe5a3170 (patch) | |
tree | 9e879858b8edf10dec3afabe746f951e18910443 /sys/contrib/dev/acpica | |
parent | 6b74887f0306adaba6eac4e30d8bcbc817fce9f4 (diff) | |
parent | e63852a7532181a14cec2928b31af2209e98414a (diff) | |
download | src-a009b7dcabdc27aa3fdde1f2c6dd08d4fe5a3170.tar.gz src-a009b7dcabdc27aa3fdde1f2c6dd08d4fe5a3170.zip |
Merge ACPICA 20191018.
Notes
Notes:
svn path=/head/; revision=353764
Diffstat (limited to 'sys/contrib/dev/acpica')
101 files changed, 1809 insertions, 404 deletions
diff --git a/sys/contrib/dev/acpica/acpica_prep.sh b/sys/contrib/dev/acpica/acpica_prep.sh index e3f6f30aea91..1a53d8c44ae1 100755 --- a/sys/contrib/dev/acpica/acpica_prep.sh +++ b/sys/contrib/dev/acpica/acpica_prep.sh @@ -18,12 +18,13 @@ fulldirs="common compiler components include os_specific" # files to remove stripdirs="generate libraries parsers preprocessor tests tools" -stripfiles="Makefile README accygwin.h acdragonfly.h acdragonflyex.h \ - acefi.h acefiex.h achaiku.h acintel.h aclinux.h aclinuxex.h \ - acmacosx.h acmsvc.h acmsvcex.h acnetbsd.h acos2.h acqnx.h \ - acwin.h acwin64.h acwinex.h new_table.txt osbsdtbl.c osefitbl.c \ - osefixf.c osfreebsdtbl.c oslinuxtbl.c osunixdir.c osunixmap.c \ - oswindir.c oswintbl.c oswinxf.c readme.txt utclib.c utprint.c" +stripfiles="Makefile README aslcompiler.y accygwin.h acdragonfly.h \ + acdragonflyex.h acefi.h acefiex.h achaiku.h acintel.h aclinux.h \ + aclinuxex.h acmacosx.h acmsvc.h acmsvcex.h acnetbsd.h acos2.h \ + acqnx.h acwin.h acwin64.h acwinex.h new_table.txt osbsdtbl.c \ + osefitbl.c osefixf.c osfreebsdtbl.c oslinuxtbl.c osunixdir.c \ + osunixmap.c oswindir.c oswintbl.c oswinxf.c readme.txt utclib.c \ + utprint.c" # include files to canonify src_headers="acapps.h acbuffer.h acclib.h accommon.h acconfig.h \ diff --git a/sys/contrib/dev/acpica/changes.txt b/sys/contrib/dev/acpica/changes.txt index 0020457b5d2a..d7f84e92f670 100644 --- a/sys/contrib/dev/acpica/changes.txt +++ b/sys/contrib/dev/acpica/changes.txt @@ -1,4 +1,117 @@ ---------------------------------------- +18 October 2019. Summary of changes for version 20191018: + + +1) ACPICA kernel-resident subsystem: + +Debugger: added a new command: ?Fields [address space ID]?. This command +dumps the contents of all field units that are defined within the +namespace with a particular address space ID. + +Modified the external interface AcpiLoadTable() to return a table index. +This table index can be used for unloading a table for debugging. + ACPI_STATUS + AcpiLoadTable ( + ACPI_TABLE_HEADER *Table, + UINT32 *TableIndex)) + +Implemented a new external interface: AcpiUnloadTable() This new function +takes a table index as an argument and unloads the table. Useful for +debugging only. + ACPI_STATUS + AcpiUnloadTable ( + UINT32 TableIndex)) + +Ported the AcpiNames utility to use the new table initialization +sequence. The utility was broken before this change. Also, it was +required to include most of the AML interpreter into the utility in order +to process table initialization (module-level code execution.) + +Update for results from running Clang V8.0.1. This fixes all "dead +assignment" warnings. There are still several "Dereference of NULL +pointer" warnings, but these have been found to be false positive +warnings. + + +2) iASL Compiler/Disassembler and ACPICA tools: + +iASL: numerous table compiler changes to ensure that the usage of +yacc/bison syntax is POSIX-compliant. + +iASL/disassembler: several simple bug fixes in the data table +disassembler. + +Acpiexec: expanded the initialization file (the -fi option) to initialize +strings, buffers, packages, and field units. + + +---------------------------------------- +16 August 2019. Summary of changes for version 20190816: + +This release is available at https://acpica.org/downloads + + +1) ACPICA kernel-resident subsystem: + +Modified the OwnerId mechanism to allow for more Owner Ids. The previous +limit was 256 Ids, now it is 4096 Ids. This prevents OWNER_ID_LIMIT +exceptions on machines with a large number of initialization threads, +many CPU cores and nested initialization control methods. + +Introduced acpi_dispatch_gpe() as a wrapper around AcpiEvDetectGpe() for +checking if the given GPE (as represented by a GPE device handle and a +GPE number) is currently active and dispatching it (if that's the case) +outside of interrupt context. + +Table load: exit the interpreter before initializing objects within the +new table This prevents re-acquiring the interpreter lock when loading +tables + +Added the "Windows 2019" string to the _OSI support (version 1903). Jung- +uk Kim + +Macros: removed pointer math on a null pointer. Causes warnings on some +compilers and/or tools. Changed ACPI_TO_POINTER to use ACPI_CAST_PTR +instead of using arithmetic. + +Fully deployed the ACPI_PRINTF_LIKE macro. This macro was not being used +across all "printf-like" internal functions. Also, cleanup all calls to +such functions (both in 32-bit mode and 64-bit mode) now that they are +analyzed by the gcc compiler via ACPI_PRINTF_LIKE. + + +2) iASL Compiler/Disassembler and ACPICA tools: + +iASL: implemented a new data table compiler flex/bison front-end. This +change is internal and is not intended to result in changes to the +compiled code. This new compiler front-end can be invoked using the -tp +option for now, until the old mechanism is removed. + +ASLTS: Implemented a new data table compiler test suite. This test suite +generates all table templates and compile/disassemble/re-compile/binary- +compare each file. + +iASL: return -1 if AML files were not generated due to compiler errors + +iASL: added a warning on use of the now-legacy ASL Processor () keyword. + +iASL: added an error on _UID object declaration that returns a String +within a Processor () declaration. A _UID for a processor must be an +Integer. + +iASL: added a null terminator to name strings that consist only of +multiple parent prefixes (^) + +iASL: added support to compile both ASL and data table files in a single +command. + +Updated the tool generation project files that were recently migrated to +MSVC 2017 to eliminate all new warnings. The new project files appear in +the directory \acpica\generate\msvc2017. This change effectively +deprecates the older project files in \acpica\generate\msvc9. + + +---------------------------------------- 03 July 2019. Summary of changes for version 20190703: diff --git a/sys/contrib/dev/acpica/common/acgetline.c b/sys/contrib/dev/acpica/common/acgetline.c index 5d78e0bb02a3..7313169df2c3 100644 --- a/sys/contrib/dev/acpica/common/acgetline.c +++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/common/adisasm.c b/sys/contrib/dev/acpica/common/adisasm.c index 68712f42ebaf..bb13a9603b50 100644 --- a/sys/contrib/dev/acpica/common/adisasm.c +++ b/sys/contrib/dev/acpica/common/adisasm.c @@ -746,7 +746,6 @@ AdDoExternalFileList ( { ExternalFileList = ExternalFileList->Next; GlobalStatus = AE_TYPE; - Status = AE_OK; continue; } diff --git a/sys/contrib/dev/acpica/common/adwalk.c b/sys/contrib/dev/acpica/common/adwalk.c index b2bce566c9cb..fe3b05b37659 100644 --- a/sys/contrib/dev/acpica/common/adwalk.c +++ b/sys/contrib/dev/acpica/common/adwalk.c @@ -480,6 +480,7 @@ AcpiDmDumpDescending ( { ACPI_OP_WALK_INFO *Info = Context; char *Path; + ACPI_STATUS Status; if (!Op) @@ -522,10 +523,18 @@ AcpiDmDumpDescending ( if (Op->Common.Value.String) { - AcpiNsExternalizeName (ACPI_UINT32_MAX, Op->Common.Value.String, + Status = AcpiNsExternalizeName (ACPI_UINT32_MAX, Op->Common.Value.String, NULL, &Path); - AcpiOsPrintf ("%s %p", Path, Op->Common.Node); - ACPI_FREE (Path); + if (ACPI_SUCCESS (Status)) + { + AcpiOsPrintf ("%s %p", Path, Op->Common.Node); + ACPI_FREE (Path); + } + else + { + AcpiOsPrintf ("Could not externalize pathname for node [%4.4s]", + Op->Common.Node->Name.Ascii); + } } else { @@ -592,7 +601,9 @@ AcpiDmFindOrphanDescending ( return (AE_OK); } +#ifdef ACPI_UNDER_DEVELOPMENT OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); +#endif switch (Op->Common.AmlOpcode) { @@ -830,9 +841,9 @@ AcpiDmLoadDescendingOp ( * 2) Not the root node * 3) Not a node created by Scope */ - - if (!PreDefined && Node != AcpiGbl_RootNode && - Op->Common.AmlOpcode != AML_SCOPE_OP) + if (!PreDefined && + (Node != AcpiGbl_RootNode) && + (Op->Common.AmlOpcode != AML_SCOPE_OP)) { Node->OwnerId = WalkState->OwnerId; } @@ -1091,7 +1102,7 @@ AcpiDmCommonDescendingOp ( /* Switch/Case conversion */ Status = AcpiDmProcessSwitch (Op); - return (AE_OK); + return (Status); } diff --git a/sys/contrib/dev/acpica/common/dmrestag.c b/sys/contrib/dev/acpica/common/dmrestag.c index efdab2e03ace..82e4656200ac 100644 --- a/sys/contrib/dev/acpica/common/dmrestag.c +++ b/sys/contrib/dev/acpica/common/dmrestag.c @@ -833,8 +833,12 @@ AcpiGetTagPathname ( /* Internalize the namepath to AML format */ - AcpiNsInternalizeName (Pathname, &InternalPath); + Status = AcpiNsInternalizeName (Pathname, &InternalPath); ACPI_FREE (Pathname); + if (ACPI_FAILURE (Status)) + { + return (NULL); + } /* Update the Op with the symbol */ diff --git a/sys/contrib/dev/acpica/common/dmtables.c b/sys/contrib/dev/acpica/common/dmtables.c index cdf3a02ab663..69a35d33f68a 100644 --- a/sys/contrib/dev/acpica/common/dmtables.c +++ b/sys/contrib/dev/acpica/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); } @@ -443,8 +443,8 @@ AdGetLocalTables ( /* Get the DSDT via table override */ ACPI_MOVE_32_TO_32 (TableHeader.Signature, ACPI_SIG_DSDT); - AcpiOsTableOverride (&TableHeader, &NewTable); - if (!NewTable) + Status = AcpiOsTableOverride (&TableHeader, &NewTable); + if (ACPI_FAILURE (Status) || !NewTable) { fprintf (stderr, "Could not obtain DSDT\n"); return (AE_NO_ACPI_TABLES); @@ -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/sys/contrib/dev/acpica/common/dmtbdump1.c b/sys/contrib/dev/acpica/common/dmtbdump1.c index fdcd43b0888e..baf68ce8bdd1 100644 --- a/sys/contrib/dev/acpica/common/dmtbdump1.c +++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/common/dmtbdump2.c b/sys/contrib/dev/acpica/common/dmtbdump2.c index 2fed7c2edffc..40d535ecef33 100644 --- a/sys/contrib/dev/acpica/common/dmtbdump2.c +++ b/sys/contrib/dev/acpica/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); } } @@ -871,7 +878,7 @@ AcpiDmDumpMcfg ( if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > Table->Length) { AcpiOsPrintf ("Warning: there are %u invalid trailing bytes\n", - sizeof (ACPI_MCFG_ALLOCATION) - (Offset - Table->Length)); + (UINT32) sizeof (ACPI_MCFG_ALLOCATION) - (Offset - Table->Length)); return; } @@ -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/sys/contrib/dev/acpica/common/dmtbdump3.c b/sys/contrib/dev/acpica/common/dmtbdump3.c index ac59021ad20a..10f7252de67b 100644 --- a/sys/contrib/dev/acpica/common/dmtbdump3.c +++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/compiler/aslanalyze.c b/sys/contrib/dev/acpica/compiler/aslanalyze.c index 16d5284ea5c8..a3e3c5380292 100644 --- a/sys/contrib/dev/acpica/compiler/aslanalyze.c +++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/compiler/aslbtypes.c b/sys/contrib/dev/acpica/compiler/aslbtypes.c index cd6e0d98ab09..0369b66560cc 100644 --- a/sys/contrib/dev/acpica/compiler/aslbtypes.c +++ b/sys/contrib/dev/acpica/compiler/aslbtypes.c @@ -474,7 +474,6 @@ AnFormatBtype ( strcat (Buffer, "|"); } - First = FALSE; strcat (Buffer, "Resource"); } } diff --git a/sys/contrib/dev/acpica/compiler/aslcache.c b/sys/contrib/dev/acpica/compiler/aslcache.c index 5b04301775bc..fdc6846236e6 100644 --- a/sys/contrib/dev/acpica/compiler/aslcache.c +++ b/sys/contrib/dev/acpica/compiler/aslcache.c @@ -421,7 +421,7 @@ UtDeleteLocalCaches ( DbgPrint (ASL_DEBUG_OUTPUT, "%u ParseOps, Buffer size: %u ops (%u bytes), %u Buffers\n", AslGbl_ParseOpCount, ASL_PARSEOP_CACHE_SIZE, - (sizeof (ACPI_PARSE_OBJECT) * ASL_PARSEOP_CACHE_SIZE), BufferCount); + ((UINT32) sizeof (ACPI_PARSE_OBJECT) * ASL_PARSEOP_CACHE_SIZE), BufferCount); /* Reset cache globals */ @@ -445,7 +445,7 @@ UtDeleteLocalCaches ( DbgPrint (ASL_DEBUG_OUTPUT, "%u Fields, Buffer size: %u fields (%u bytes), %u Buffers\n", AslGbl_FieldCount, ASL_FIELD_CACHE_SIZE, - (sizeof (DT_FIELD) * ASL_FIELD_CACHE_SIZE), BufferCount); + ((UINT32) sizeof (DT_FIELD) * ASL_FIELD_CACHE_SIZE), BufferCount); /* Reset cache globals */ @@ -468,7 +468,7 @@ UtDeleteLocalCaches ( DbgPrint (ASL_DEBUG_OUTPUT, "%u Subtables, Buffer size: %u subtables (%u bytes), %u Buffers\n", AslGbl_SubtableCount, ASL_SUBTABLE_CACHE_SIZE, - (sizeof (DT_SUBTABLE) * ASL_SUBTABLE_CACHE_SIZE), BufferCount); + ((UINT32) sizeof (DT_SUBTABLE) * ASL_SUBTABLE_CACHE_SIZE), BufferCount); /* Reset cache globals */ diff --git a/sys/contrib/dev/acpica/compiler/aslcodegen.c b/sys/contrib/dev/acpica/compiler/aslcodegen.c index 04a1f76b3852..afd9542082ea 100644 --- a/sys/contrib/dev/acpica/compiler/aslcodegen.c +++ b/sys/contrib/dev/acpica/compiler/aslcodegen.c @@ -618,8 +618,8 @@ CgWriteTableHeader ( Op->Asl.AmlSubtreeLength += strlen (AslGbl_ParseTreeRoot->Asl.Filename) + 3; - CvDbgPrint (" Length: %lu\n", - strlen (AslGbl_ParseTreeRoot->Asl.Filename) + 3); + CvDbgPrint (" Length: %u\n", + (UINT32) strlen (AslGbl_ParseTreeRoot->Asl.Filename) + 3); if (Op->Asl.CommentList) { diff --git a/sys/contrib/dev/acpica/compiler/aslcompile.c b/sys/contrib/dev/acpica/compiler/aslcompile.c index 54d4687f8028..67d94f30df74 100644 --- a/sys/contrib/dev/acpica/compiler/aslcompile.c +++ b/sys/contrib/dev/acpica/compiler/aslcompile.c @@ -853,10 +853,11 @@ CmDumpAllEvents ( * ******************************************************************************/ -void +int CmCleanupAndExit ( void) { + int Status = 0; BOOLEAN DeleteAmlFile = FALSE; ASL_GLOBAL_FILE_NODE *CurrentFileNode = AslGbl_FilesList; @@ -915,20 +916,38 @@ CmCleanupAndExit ( UtDisplaySummary (ASL_FILE_STDOUT); /* - * We will delete the AML file if there are errors and the - * force AML output option has not been used. + * Delete the AML file if there are errors and the force AML output option + * (-f) has not been used. + * + * Return -1 as a status of the compiler if no AML files are generated. If + * the AML file is generated in the presence of errors, return 0. In the + * latter case, the errors were ignored by the user so the compilation is + * considered successful. */ - if (AslGbl_ParserErrorDetected || AslGbl_PreprocessOnly || ((AslGbl_ExceptionCount[ASL_ERROR] > 0) && + if (AslGbl_ParserErrorDetected || AslGbl_PreprocessOnly || + ((AslGbl_ExceptionCount[ASL_ERROR] > 0) && (!AslGbl_IgnoreErrors) && AslGbl_Files[ASL_FILE_AML_OUTPUT].Handle)) { DeleteAmlFile = TRUE; + Status = -1; } /* Close all open files */ while (CurrentFileNode) { + /* + * Set the program return status based on file errors. If there are any + * errors and during compilation, the command is not considered + * successful. + */ + if (Status != -1 && !AslGbl_IgnoreErrors && + CurrentFileNode->ParserErrorDetected) + { + Status = -1; + } + switch (FlSwitchFileSet (CurrentFileNode->Files[ASL_FILE_INPUT].Filename)) { case SWITCH_TO_SAME_FILE: @@ -952,6 +971,8 @@ CmCleanupAndExit ( { UtDeleteLocalCaches (); } + + return (Status); } diff --git a/sys/contrib/dev/acpica/compiler/aslcompiler.h b/sys/contrib/dev/acpica/compiler/aslcompiler.h index 818b1cb2245d..c36103bd85b5 100644 --- a/sys/contrib/dev/acpica/compiler/aslcompiler.h +++ b/sys/contrib/dev/acpica/compiler/aslcompiler.h @@ -266,7 +266,7 @@ void CmDoOutputFiles ( void); -void +int CmCleanupAndExit ( void); @@ -1052,6 +1052,7 @@ void FlCloseFile ( UINT32 FileId); +ACPI_PRINTF_LIKE (2) void FlPrintFile ( UINT32 FileId, @@ -1195,6 +1196,7 @@ OtXrefWalkPart1 ( /* * aslutils - common compiler utilities */ +ACPI_PRINTF_LIKE(2) void DbgPrint ( UINT32 Type, @@ -1288,6 +1290,10 @@ UtInternalizeName ( char *ExternalName, char **ConvertedName); +BOOLEAN +UtNameContainsAllPrefix ( + ACPI_PARSE_OBJECT *Op); + void UtAttachNamepathToOwner ( ACPI_PARSE_OBJECT *Op, @@ -1303,6 +1309,15 @@ UINT64 UtDoConstant ( char *String); +char * +AcpiUtStrdup ( + char *String); + +char * +AcpiUtStrcat ( + char *String1, + char *String2); + /* * asluuid - UUID support @@ -1604,6 +1619,7 @@ DtCreateTemplates ( /* * ASL/ASL+ converter debug */ +ACPI_PRINTF_LIKE (1) void CvDbgPrint ( char *Fmt, diff --git a/sys/contrib/dev/acpica/compiler/asldebug.c b/sys/contrib/dev/acpica/compiler/asldebug.c index 2010396971e6..8fb291886e10 100644 --- a/sys/contrib/dev/acpica/compiler/asldebug.c +++ b/sys/contrib/dev/acpica/compiler/asldebug.c @@ -239,7 +239,7 @@ UtDumpIntegerOp ( case 8: /* Dword */ DbgPrint (ASL_TREE_OUTPUT, - "%*.*X", IntegerLength, IntegerLength, Op->Asl.Value.Integer); + "%*.*X", IntegerLength, IntegerLength, (UINT32) Op->Asl.Value.Integer); break; case 16: /* Qword and Integer */ diff --git a/sys/contrib/dev/acpica/compiler/asldefine.h b/sys/contrib/dev/acpica/compiler/asldefine.h index c511187529ed..0ba08962047a 100644 --- a/sys/contrib/dev/acpica/compiler/asldefine.h +++ b/sys/contrib/dev/acpica/compiler/asldefine.h @@ -290,7 +290,7 @@ #define ASL_PARSE_TREE_DEBUG2 \ " %08X %04X %04X %01X %04X %04X %05X %05X "\ - "%08X %08X %08X %08X %08X %08X %04X %02d %5d %5d %5d %5d" + "%8p %8p %8p %8p %08X %08X %04X %02d %5d %5d %5d %5d" /* * Macros for ASL/ASL+ converter diff --git a/sys/contrib/dev/acpica/compiler/aslglobal.h b/sys/contrib/dev/acpica/compiler/aslglobal.h index 740f7f34ae51..9020c14d5d54 100644 --- a/sys/contrib/dev/acpica/compiler/aslglobal.h +++ b/sys/contrib/dev/acpica/compiler/aslglobal.h @@ -244,7 +244,6 @@ extern const char *AslGbl_SpecialNamedObjects[MAX_SPECIAL_NAME #endif - /* * Parser and other externals */ @@ -254,6 +253,7 @@ extern int DtParserdebug; extern int PrParserdebug; extern const ASL_MAPPING_ENTRY AslKeywordMapping[]; extern char *AslCompilertext; +extern char *DtCompilerParsertext; /* * Older versions of Bison won't emit this external in the generated header. diff --git a/sys/contrib/dev/acpica/compiler/aslhelp.c b/sys/contrib/dev/acpica/compiler/aslhelp.c index 88eecbb0a36c..93fef64c2021 100644 --- a/sys/contrib/dev/acpica/compiler/aslhelp.c +++ b/sys/contrib/dev/acpica/compiler/aslhelp.c @@ -246,6 +246,7 @@ Usage ( ACPI_OPTION ("", " (Original comments are passed through to ASL+ file)"); printf ("\nData Table Compiler:\n"); + ACPI_OPTION ("-tp", "Compile tables with flex/bison prototype"); ACPI_OPTION ("-G", "Compile custom table that contains generic operators"); ACPI_OPTION ("-T <sig list>|ALL", "Create ACPI table template/example files"); ACPI_OPTION ("-T <count>", "Emit DSDT and <count> SSDTs to same file"); diff --git a/sys/contrib/dev/acpica/compiler/aslkeywords.y b/sys/contrib/dev/acpica/compiler/aslkeywords.y index a19b6425be0b..a505dc029468 100644 --- a/sys/contrib/dev/acpica/compiler/aslkeywords.y +++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/compiler/asllength.c b/sys/contrib/dev/acpica/compiler/asllength.c index 29e9e1af9130..0abbd16ff976 100644 --- a/sys/contrib/dev/acpica/compiler/asllength.c +++ b/sys/contrib/dev/acpica/compiler/asllength.c @@ -479,12 +479,13 @@ CgGenerateAmlLengths ( Op->Asl.AmlLength = strlen (Buffer); /* - * Check for single backslash reference to root, - * make it a null terminated string in the AML + * Check for single backslash reference to root or reference to a name + * consisting of only prefix (^) characters. Make it a null terminated + * string in the AML. */ - if (Op->Asl.AmlLength == 1) + if (Op->Asl.AmlLength == 1 || UtNameContainsAllPrefix(Op)) { - Op->Asl.AmlLength = 2; + Op->Asl.AmlLength++; } break; diff --git a/sys/contrib/dev/acpica/compiler/asllistsup.c b/sys/contrib/dev/acpica/compiler/asllistsup.c index 00265602028e..e510d1defabb 100644 --- a/sys/contrib/dev/acpica/compiler/asllistsup.c +++ b/sys/contrib/dev/acpica/compiler/asllistsup.c @@ -241,7 +241,7 @@ LsDumpAsciiInComment ( { /* Insert a space to break the sequence */ - FlPrintFile (FileId, ".", BufChar); + FlPrintFile (FileId, " "); } FlPrintFile (FileId, "%c", BufChar); diff --git a/sys/contrib/dev/acpica/compiler/aslload.c b/sys/contrib/dev/acpica/compiler/aslload.c index 19a4ce1edb7c..de78434aeaca 100644 --- a/sys/contrib/dev/acpica/compiler/aslload.c +++ b/sys/contrib/dev/acpica/compiler/aslload.c @@ -275,7 +275,6 @@ LdLoadFieldElements ( ACPI_STATUS Status; - SourceRegion = UtGetArg (Op, 0); if (SourceRegion) { @@ -527,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); @@ -542,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: @@ -577,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); @@ -1031,7 +1019,8 @@ FinishNode: * DESCRIPTION: Check if certain named objects are declared in the incorrect * scope. Special named objects are listed in * AslGbl_SpecialNamedObjects and can only be declared at the root - * scope. + * scope. _UID inside of a processor declaration must not be a + * string. * ******************************************************************************/ @@ -1052,6 +1041,13 @@ LdCheckSpecialNames ( return; } } + + if (ACPI_COMPARE_NAMESEG (Node->Name.Ascii, "_UID") && + Node->Parent->Type == ACPI_TYPE_PROCESSOR && + Node->Type == ACPI_TYPE_STRING) + { + AslError (ASL_ERROR, ASL_MSG_INVALID_PROCESSOR_UID , Op, "found a string"); + } } diff --git a/sys/contrib/dev/acpica/compiler/aslmain.c b/sys/contrib/dev/acpica/compiler/aslmain.c index e42453673657..fc911a1764af 100644 --- a/sys/contrib/dev/acpica/compiler/aslmain.c +++ b/sys/contrib/dev/acpica/compiler/aslmain.c @@ -282,7 +282,6 @@ main ( if (ACPI_FAILURE (Status)) { ReturnStatus = -1; - goto CleanupAndExit; } Index2++; @@ -290,9 +289,10 @@ main ( /* * At this point, compilation of a data table or disassembly is complete. + * However, if there is a parse tree, perform compiler analysis and + * generate AML. */ - if (AslGbl_PreprocessOnly || AcpiGbl_DisasmFlag || - AslGbl_FileType == ASL_INPUT_TYPE_ASCII_DATA) + if (AslGbl_PreprocessOnly || AcpiGbl_DisasmFlag || !AslGbl_ParseTreeRoot) { goto CleanupAndExit; } @@ -338,7 +338,6 @@ main ( } - CleanupAndExit: UtFreeLineBuffers (); @@ -350,7 +349,7 @@ CleanupAndExit: if (!AcpiGbl_DisasmFlag) { - CmCleanupAndExit (); + ReturnStatus = CmCleanupAndExit (); } @@ -400,18 +399,21 @@ AslSignalHandler ( * Close all open files * Note: the .pre file is the same as the input source file */ - AslGbl_Files[ASL_FILE_PREPROCESSOR].Handle = NULL; - - for (i = ASL_FILE_INPUT; i < ASL_MAX_FILE_TYPE; i++) + if (AslGbl_Files) { - FlCloseFile (i); - } + AslGbl_Files[ASL_FILE_PREPROCESSOR].Handle = NULL; - /* Delete any output files */ + for (i = ASL_FILE_INPUT; i < ASL_MAX_FILE_TYPE; i++) + { + FlCloseFile (i); + } - for (i = ASL_FILE_AML_OUTPUT; i < ASL_MAX_FILE_TYPE; i++) - { - FlDeleteFile (i); + /* Delete any output files */ + + for (i = ASL_FILE_AML_OUTPUT; i < ASL_MAX_FILE_TYPE; i++) + { + FlDeleteFile (i); + } } printf (ASL_PREFIX "Terminating\n"); diff --git a/sys/contrib/dev/acpica/compiler/aslmessages.c b/sys/contrib/dev/acpica/compiler/aslmessages.c index 4a7e3449dffa..049c2dbdb747 100644 --- a/sys/contrib/dev/acpica/compiler/aslmessages.c +++ b/sys/contrib/dev/acpica/compiler/aslmessages.c @@ -366,7 +366,9 @@ const char *AslCompilerMsgs [] = /* ASL_MSG_TEMPORARY_OBJECT */ "Object is created temporarily in another method and cannot be accessed", /* ASL_MSG_UNDEFINED_EXTERNAL */ "Named object was declared external but the actual definition does not exist", /* ASL_MSG_BUFFER_FIELD_OVERFLOW */ "Buffer field extends beyond end of target buffer", -/* ASL_MSG_INVALID_SPECIAL_NAME */ "declaration of this named object outside root scope is illegal" +/* ASL_MSG_INVALID_SPECIAL_NAME */ "declaration of this named object outside root scope is illegal", +/* ASL_MSG_INVALID_PROCESSOR_UID */ "_UID inside processor declaration must be an integer", +/* ASL_MSG_LEGACY_PROCESSOR_OP */ "Legacy Processor() keyword detected. Use Device() keyword instead." }; /* Table compiler */ @@ -385,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/sys/contrib/dev/acpica/compiler/aslmessages.h b/sys/contrib/dev/acpica/compiler/aslmessages.h index d998f0fe8eda..47e5bf4314d8 100644 --- a/sys/contrib/dev/acpica/compiler/aslmessages.h +++ b/sys/contrib/dev/acpica/compiler/aslmessages.h @@ -369,6 +369,8 @@ typedef enum ASL_MSG_UNDEFINED_EXTERNAL, ASL_MSG_BUFFER_FIELD_OVERFLOW, ASL_MSG_INVALID_SPECIAL_NAME, + ASL_MSG_INVALID_PROCESSOR_UID, + ASL_MSG_LEGACY_PROCESSOR_OP, /* These messages are used by the Data Table compiler only */ @@ -385,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/sys/contrib/dev/acpica/compiler/aslmethod.c b/sys/contrib/dev/acpica/compiler/aslmethod.c index 8af10d148814..f00dae7f8490 100644 --- a/sys/contrib/dev/acpica/compiler/aslmethod.c +++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/compiler/aslnamesp.c b/sys/contrib/dev/acpica/compiler/aslnamesp.c index 11f4654a26b1..3ffac5d28ee7 100644 --- a/sys/contrib/dev/acpica/compiler/aslnamesp.c +++ b/sys/contrib/dev/acpica/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 */ @@ -276,7 +280,7 @@ NsDoOneNamespaceObject ( FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, "%5u [%u] %*s %4.4s - %s", AslGbl_NumNamespaceObjects, Level, (Level * 3), " ", - &Node->Name, AcpiUtGetTypeName (Node->Type)); + &Node->Name.Ascii[0], AcpiUtGetTypeName (Node->Type)); Op = Node->Op; ObjDesc = ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Node->Object); @@ -429,7 +433,7 @@ NsDoOneNamespaceObject ( { FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [Initial Length 0x%.2X elements]", - Op->Asl.Value.Integer); + (UINT32) Op->Asl.Value.Integer); } break; @@ -452,7 +456,7 @@ NsDoOneNamespaceObject ( { FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [Initial Length 0x%.2X bytes]", - Op->Asl.Value.Integer); + (UINT32) Op->Asl.Value.Integer); } break; @@ -531,7 +535,8 @@ NsDoOnePathname ( return (Status); } - FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, "%s\n", TargetPath.Pointer); + FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, "%s\n", + ACPI_CAST_PTR (char, TargetPath.Pointer)); ACPI_FREE (TargetPath.Pointer); return (AE_OK); } diff --git a/sys/contrib/dev/acpica/compiler/asloptions.c b/sys/contrib/dev/acpica/compiler/asloptions.c index f69b02d501d6..276b96e17075 100644 --- a/sys/contrib/dev/acpica/compiler/asloptions.c +++ b/sys/contrib/dev/acpica/compiler/asloptions.c @@ -837,6 +837,11 @@ AslDoOptions ( AslGbl_HexOutputFlag = HEX_OUTPUT_C; break; + case 'p': /* data table flex/bison prototype */ + + AslGbl_DtLexBisonPrototype = TRUE; + break; + case 's': AslGbl_HexOutputFlag = HEX_OUTPUT_ASL; diff --git a/sys/contrib/dev/acpica/compiler/aslparseop.c b/sys/contrib/dev/acpica/compiler/aslparseop.c index d8be74fe0f1f..825112a6189f 100644 --- a/sys/contrib/dev/acpica/compiler/aslparseop.c +++ b/sys/contrib/dev/acpica/compiler/aslparseop.c @@ -403,22 +403,22 @@ TrCreateValuedLeafOp ( { case PARSEOP_STRING_LITERAL: - DbgPrint (ASL_PARSE_OUTPUT, "STRING->%s", Value); + DbgPrint (ASL_PARSE_OUTPUT, "STRING->%s", Op->Asl.Value.String); break; case PARSEOP_NAMESEG: - DbgPrint (ASL_PARSE_OUTPUT, "NAMESEG->%s", Value); + DbgPrint (ASL_PARSE_OUTPUT, "NAMESEG->%s", Op->Asl.Value.String); break; case PARSEOP_NAMESTRING: - DbgPrint (ASL_PARSE_OUTPUT, "NAMESTRING->%s", Value); + DbgPrint (ASL_PARSE_OUTPUT, "NAMESTRING->%s", Op->Asl.Value.String); break; case PARSEOP_EISAID: - DbgPrint (ASL_PARSE_OUTPUT, "EISAID->%s", Value); + DbgPrint (ASL_PARSE_OUTPUT, "EISAID->%s", Op->Asl.Value.String); break; case PARSEOP_METHOD: @@ -693,7 +693,8 @@ TrCreateConstantLeafOp ( time_t CurrentTime; char *StaticTimeString; char *TimeString; - char *Filename; + char *Filename = NULL; + ACPI_STATUS Status; switch (ParseOpcode) @@ -727,7 +728,12 @@ TrCreateConstantLeafOp ( /* Get the simple filename from the full path */ - FlSplitInputPathname (Op->Asl.Filename, NULL, &Filename); + Status = FlSplitInputPathname (Op->Asl.Filename, NULL, &Filename); + if (ACPI_FAILURE (Status)) + { + return (NULL); + } + Op->Asl.Value.String = Filename; break; diff --git a/sys/contrib/dev/acpica/compiler/aslprepkg.c b/sys/contrib/dev/acpica/compiler/aslprepkg.c index d552d7f32192..a0bd5dc62421 100644 --- a/sys/contrib/dev/acpica/compiler/aslprepkg.c +++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/compiler/aslresource.c b/sys/contrib/dev/acpica/compiler/aslresource.c index f130cf524c7b..57accd89b423 100644 --- a/sys/contrib/dev/acpica/compiler/aslresource.c +++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/compiler/aslrestype2.c b/sys/contrib/dev/acpica/compiler/aslrestype2.c index dd69c8d05728..b96e6fbfb42e 100644 --- a/sys/contrib/dev/acpica/compiler/aslrestype2.c +++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/compiler/aslrestype2s.c b/sys/contrib/dev/acpica/compiler/aslrestype2s.c index 1fec4049656c..88b92e8d3676 100644 --- a/sys/contrib/dev/acpica/compiler/aslrestype2s.c +++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/compiler/aslstartup.c b/sys/contrib/dev/acpica/compiler/aslstartup.c index 7b3cb9dccfe2..9f11e0828690 100644 --- a/sys/contrib/dev/acpica/compiler/aslstartup.c +++ b/sys/contrib/dev/acpica/compiler/aslstartup.c @@ -467,6 +467,7 @@ AslDoOneFile ( /* Determine input file type */ AslGbl_FileType = AslDetectSourceFileType (&AslGbl_Files[ASL_FILE_INPUT]); + FileNode->FileType = AslGbl_FileType; if (AslGbl_FileType == ASL_INPUT_TYPE_BINARY) { return (AE_ERROR); diff --git a/sys/contrib/dev/acpica/compiler/asltransform.c b/sys/contrib/dev/acpica/compiler/asltransform.c index 5401fc3dcd93..5619d32ec093 100644 --- a/sys/contrib/dev/acpica/compiler/asltransform.c +++ b/sys/contrib/dev/acpica/compiler/asltransform.c @@ -507,6 +507,12 @@ TrTransformSubtree ( } break; + case PARSEOP_PROCESSOR: + + AslError (ASL_WARNING, ASL_MSG_LEGACY_PROCESSOR_OP, Op, Op->Asl.ExternalName); + + break; + default: /* Nothing to do here for other opcodes */ diff --git a/sys/contrib/dev/acpica/compiler/asltypes.h b/sys/contrib/dev/acpica/compiler/asltypes.h index 8a6a07505181..2df31eab5583 100644 --- a/sys/contrib/dev/acpica/compiler/asltypes.h +++ b/sys/contrib/dev/acpica/compiler/asltypes.h @@ -505,9 +505,12 @@ typedef struct asl_files_node UINT32 TotalLineCount; UINT32 OriginalInputFileSize; UINT32 TotalKeywords; + UINT32 TotalFields; + UINT32 OutputByteLength; UINT32 TotalNamedObjects; UINT32 TotalExecutableOpcodes; BOOLEAN ParserErrorDetected; + UINT8 FileType; } ASL_GLOBAL_FILE_NODE; diff --git a/sys/contrib/dev/acpica/compiler/aslutils.c b/sys/contrib/dev/acpica/compiler/aslutils.c index fb1b6f637c71..063d96e50824 100644 --- a/sys/contrib/dev/acpica/compiler/aslutils.c +++ b/sys/contrib/dev/acpica/compiler/aslutils.c @@ -223,6 +223,7 @@ UtQueryForOverwrite ( char *Pathname) { struct stat StatInfo; + int InChar; if (!stat (Pathname, &StatInfo)) @@ -230,7 +231,13 @@ UtQueryForOverwrite ( fprintf (stderr, "Target file \"%s\" already exists, overwrite? [y|n] ", Pathname); - if (getchar () != 'y') + InChar = fgetc (stdin); + if (InChar == '\n') + { + InChar = fgetc (stdin); + } + + if ((InChar != 'y') && (InChar != 'Y')) { return (FALSE); } @@ -559,58 +566,54 @@ UtDisplayOneSummary ( /* Summary of main input and output files */ - if (AslGbl_FileType == ASL_INPUT_TYPE_ASCII_DATA) + FileNode = FlGetCurrentFileNode (); + if (!FileNode) + { + fprintf (stderr, "Summary could not be generated"); + return; + } + + if (FileNode->ParserErrorDetected) + { + FlPrintFile (FileId, + "%-14s %s - Compilation aborted due to parser-detected syntax error(s)\n", + "Input file:", AslGbl_Files[ASL_FILE_INPUT].Filename); + } + else if (FileNode->FileType == ASL_INPUT_TYPE_ASCII_DATA) { FlPrintFile (FileId, - "%-14s %s - %u lines, %u bytes, %u fields\n", + "%-14s %s - %7u bytes %6u fields %8u source lines\n", "Table Input:", - AslGbl_Files[ASL_FILE_INPUT].Filename, AslGbl_CurrentLineNumber, - AslGbl_InputByteCount, AslGbl_InputFieldCount); + AslGbl_Files[ASL_FILE_INPUT].Filename, + FileNode->OriginalInputFileSize, FileNode->TotalFields, + FileNode->TotalLineCount); - if ((AslGbl_ExceptionCount[ASL_ERROR] == 0) || (AslGbl_IgnoreErrors)) - { - FlPrintFile (FileId, - "%-14s %s - %u bytes\n", - "Binary Output:", - AslGbl_Files[ASL_FILE_AML_OUTPUT].Filename, AslGbl_TableLength); - } + FlPrintFile (FileId, + "%-14s %s - %7u bytes\n", + "Binary Output:", + AslGbl_Files[ASL_FILE_AML_OUTPUT].Filename, FileNode->OutputByteLength); } - else + else if (FileNode->FileType == ASL_INPUT_TYPE_ASCII_ASL) { - FileNode = FlGetCurrentFileNode (); - if (!FileNode) - { - fprintf (stderr, "Summary could not be generated"); - return; - } - if (FileNode->ParserErrorDetected) - { - FlPrintFile (FileId, - "%-14s %s - Compilation aborted due to parser-detected syntax error(s)\n", - "ASL Input:", AslGbl_Files[ASL_FILE_INPUT].Filename); - } - else + FlPrintFile (FileId, + "%-14s %s - %7u bytes %6u keywords %6u source lines\n", + "ASL Input:", + AslGbl_Files[ASL_FILE_INPUT].Filename, + FileNode->OriginalInputFileSize, + FileNode->TotalKeywords, + FileNode->TotalLineCount); + + /* AML summary */ + + if (DisplayAMLSummary) { FlPrintFile (FileId, - "%-14s %s - %7u bytes %6u keywords %6u source lines\n", - "ASL Input:", - AslGbl_Files[ASL_FILE_INPUT].Filename, - FileNode->OriginalInputFileSize, - FileNode->TotalKeywords, - FileNode->TotalLineCount); - - /* AML summary */ - - if (DisplayAMLSummary) - { - FlPrintFile (FileId, - "%-14s %s - %7u bytes %6u opcodes %6u named objects\n", - "AML Output:", - AslGbl_Files[ASL_FILE_AML_OUTPUT].Filename, - FlGetFileSize (ASL_FILE_AML_OUTPUT), - FileNode->TotalExecutableOpcodes, - FileNode->TotalNamedObjects); - } + "%-14s %s - %7u bytes %6u opcodes %6u named objects\n", + "AML Output:", + AslGbl_Files[ASL_FILE_AML_OUTPUT].Filename, + FlGetFileSize (ASL_FILE_AML_OUTPUT), + FileNode->TotalExecutableOpcodes, + FileNode->TotalNamedObjects); } } @@ -994,6 +997,37 @@ UtAttachNamepathToOwner ( /******************************************************************************* * + * FUNCTION: UtNameContainsAllPrefix + * + * PARAMETERS: Op - Op containing NameString + * + * RETURN: NameString consists of all ^ characters + * + * DESCRIPTION: Determine if this Op contains a name segment that consists of + * all '^' characters. + * + ******************************************************************************/ + +BOOLEAN +UtNameContainsAllPrefix ( + ACPI_PARSE_OBJECT *Op) +{ + UINT32 Length = Op->Asl.AmlLength; + UINT32 i; + + for (i = 0; i < Length; i++) + { + if (Op->Asl.Value.String[i] != '^') + { + return (FALSE); + } + } + + return (TRUE); +} + +/******************************************************************************* + * * FUNCTION: UtDoConstant * * PARAMETERS: String - Hex/Decimal/Octal @@ -1026,3 +1060,56 @@ UtDoConstant ( return (ConvertedInteger); } + + +/****************************************************************************** + * + * FUNCTION: AcpiUtStrdup + * + * PARAMETERS: String1 - string to duplicate + * + * RETURN: int that signifies string relationship. Zero means strings + * are equal. + * + * DESCRIPTION: Duplicate the string using UtCacheAlloc to avoid manual memory + * reclamation. + * + ******************************************************************************/ + +char * +AcpiUtStrdup ( + char *String) +{ + char *NewString = (char *) UtLocalCalloc (strlen (String) + 1); + + + strcpy (NewString, String); + return (NewString); +} + + +/****************************************************************************** + * + * FUNCTION: AcpiUtStrcat + * + * PARAMETERS: String1 + * String2 + * + * RETURN: New string with String1 concatenated with String2 + * + * DESCRIPTION: Concatenate string1 and string2 + * + ******************************************************************************/ + +char * +AcpiUtStrcat ( + char *String1, + char *String2) +{ + UINT32 String1Length = strlen (String1); + char *NewString = (char *) UtLocalCalloc (strlen (String1) + strlen (String2) + 1); + + strcpy (NewString, String1); + strcpy (NewString + String1Length, String2); + return (NewString); +} diff --git a/sys/contrib/dev/acpica/compiler/aslxrefout.c b/sys/contrib/dev/acpica/compiler/aslxrefout.c index 453812c13080..1b2d570dba1c 100644 --- a/sys/contrib/dev/acpica/compiler/aslxrefout.c +++ b/sys/contrib/dev/acpica/compiler/aslxrefout.c @@ -799,7 +799,7 @@ OtXrefWalkPart3 ( else { FlPrintFile (ASL_FILE_XREF_OUTPUT, - " %u references to this object in this module\n", + " %u references to this object in this module [%s]\n", XrefInfo->ThisObjectReferences, ParentPath); } diff --git a/sys/contrib/dev/acpica/compiler/cvdisasm.c b/sys/contrib/dev/acpica/compiler/cvdisasm.c index 9be880c73400..1b4a02a433f6 100644 --- a/sys/contrib/dev/acpica/compiler/cvdisasm.c +++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/compiler/cvparser.c b/sys/contrib/dev/acpica/compiler/cvparser.c index f62caaa0fb72..b44fb9ff4ad0 100644 --- a/sys/contrib/dev/acpica/compiler/cvparser.c +++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/compiler/dtcompile.c b/sys/contrib/dev/acpica/compiler/dtcompile.c index be03f45d90cc..ba2740349628 100644 --- a/sys/contrib/dev/acpica/compiler/dtcompile.c +++ b/sys/contrib/dev/acpica/compiler/dtcompile.c @@ -161,7 +161,7 @@ static char VersionString[9]; /* Local prototypes */ -static ACPI_STATUS +void DtInitialize ( void); @@ -196,16 +196,12 @@ DtDoCompile ( ACPI_STATUS Status; UINT8 Event; DT_FIELD *FieldList; + ASL_GLOBAL_FILE_NODE *FileNode; /* Initialize globals */ - Status = DtInitialize (); - if (ACPI_FAILURE (Status)) - { - printf ("Error during compiler initialization, 0x%X\n", Status); - return (Status); - } + DtInitialize (); /* Preprocessor */ @@ -223,13 +219,29 @@ DtDoCompile ( } } - /* - * Scan the input file (file is already open) and - * build the parse tree - */ - Event = UtBeginEvent ("Scan and parse input file"); - FieldList = DtScanFile (AslGbl_Files[ASL_FILE_INPUT].Handle); - UtEndEvent (Event); + /* Compile the parse tree */ + + if (AslGbl_DtLexBisonPrototype) + { + Event = UtBeginEvent ("Parse data table in prototype mode"); + + DtCompilerInitLexer (AslGbl_Files[ASL_FILE_INPUT].Handle); + DtCompilerParserparse (); + FieldList = AslGbl_FieldList; + DtCompilerTerminateLexer (); + + UtEndEvent (Event); + } + else + { + /* + * Scan the input file (file is already open) and + * build the parse tree + */ + Event = UtBeginEvent ("Scan and parse input file"); + FieldList = DtScanFile (AslGbl_Files[ASL_FILE_INPUT].Handle); + UtEndEvent (Event); + } /* Did the parse tree get successfully constructed? */ @@ -245,14 +257,30 @@ DtDoCompile ( Event = UtBeginEvent ("Compile parse tree"); - /* - * Compile the parse tree - */ Status = DtCompileDataTable (&FieldList); UtEndEvent (Event); + FileNode = FlGetCurrentFileNode (); + if (!FileNode) + { + fprintf (stderr, "Summary for %s could not be generated", + AslGbl_Files[ASL_FILE_INPUT].Filename); + } + else + { + FileNode->TotalLineCount = AslGbl_CurrentLineNumber; + FileNode->OriginalInputFileSize = AslGbl_InputByteCount; + DbgPrint (ASL_PARSE_OUTPUT, "Line count: %u input file size: %u\n", + FileNode->TotalLineCount, FileNode->OriginalInputFileSize); + } + if (ACPI_FAILURE (Status)) { + if (FileNode) + { + FileNode->ParserErrorDetected = TRUE; + } + /* TBD: temporary error message. Msgs should come from function above */ DtError (ASL_ERROR, ASL_MSG_SYNTAX, NULL, @@ -276,6 +304,14 @@ DtDoCompile ( HxDoHexOutput (); DtWriteTableToListing (); + /* Save the compile time statistics to the current file node */ + + if (FileNode) + { + FileNode->TotalFields = AslGbl_InputFieldCount; + FileNode->OutputByteLength = AslGbl_TableLength; + } + return (Status); } @@ -293,25 +329,12 @@ DtDoCompile ( * *****************************************************************************/ -static ACPI_STATUS +void DtInitialize ( void) { - ACPI_STATUS Status; - Status = AcpiOsInitialize (); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - Status = AcpiUtInitGlobals (); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - AcpiUtSetIntegerWidth (2); /* Set width to 64 bits */ AslGbl_FieldList = NULL; @@ -319,7 +342,7 @@ DtInitialize ( AslGbl_SubtableStack = NULL; sprintf (VersionString, "%X", (UINT32) ACPI_CA_VERSION); - return (AE_OK); + return; } @@ -552,7 +575,7 @@ DtCompileTable ( ACPI_STATUS Status = AE_OK; - if (!Field) + if (!Field || !Info) { return (AE_BAD_PARAMETER); } @@ -623,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/sys/contrib/dev/acpica/compiler/dtcompiler.h b/sys/contrib/dev/acpica/compiler/dtcompiler.h index e19cca800773..0dd86f939d0b 100644 --- a/sys/contrib/dev/acpica/compiler/dtcompiler.h +++ b/sys/contrib/dev/acpica/compiler/dtcompiler.h @@ -194,7 +194,7 @@ typedef struct dt_field { char *Name; /* Field name (from name : value) */ char *Value; /* Field value (from name : value) */ - UINT32 StringLength;/* Length of Value */ + UINT32 StringLength; /* Length of Value */ struct dt_field *Next; /* Next field */ struct dt_field *NextLabel; /* If field is a label, next label */ UINT32 Line; /* Line number for this field */ @@ -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 @@ -256,6 +267,10 @@ DT_EXTERN DT_FIELD DT_INIT_GLOBAL (*AslGbl_LabelList, NULL); DT_EXTERN UINT32 DT_INIT_GLOBAL (AslGbl_CurrentTableOffset, 0); +/* Data table compiler Flex/Bison prototype */ + +DT_EXTERN BOOLEAN DT_INIT_GLOBAL (AslGbl_DtLexBisonPrototype, FALSE); + /* Local caches */ DT_EXTERN UINT32 DT_INIT_GLOBAL (AslGbl_SubtableCount, 0); @@ -425,12 +440,45 @@ 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 */ +int +DtCompilerParserparse ( + void); + UINT64 DtEvaluateExpression ( char *ExprString); +void +DtCompilerInitLexer ( + FILE *inFile); + +void +DtCompilerTerminateLexer ( + void); + int DtInitLexer ( char *String); diff --git a/sys/contrib/dev/acpica/compiler/dtcompilerparser.l b/sys/contrib/dev/acpica/compiler/dtcompilerparser.l new file mode 100644 index 000000000000..ea1ee24ec7a4 --- /dev/null +++ b/sys/contrib/dev/acpica/compiler/dtcompilerparser.l @@ -0,0 +1,294 @@ +%{ +/****************************************************************************** + * + * Module Name: dtcompilerparser.l - Flex input file for table compiler lexer + * + *****************************************************************************/ + +/****************************************************************************** + * + * 1. Copyright Notice + * + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. + * All rights reserved. + * + * 2. License + * + * 2.1. This is your license from Intel Corp. under its intellectual property + * rights. You may have additional license terms from the party that provided + * you this software, covering your right to use that party's intellectual + * property rights. + * + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a + * copy of the source code appearing in this file ("Covered Code") an + * irrevocable, perpetual, worldwide license under Intel's copyrights in the + * base code distributed originally by Intel ("Original Intel Code") to copy, + * make derivatives, distribute, use and display any portion of the Covered + * Code in any form, with the right to sublicense such rights; and + * + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent + * license (with the right to sublicense), under only those claims of Intel + * patents that are infringed by the Original Intel Code, to make, use, sell, + * offer to sell, and import the Covered Code and derivative works thereof + * solely to the minimum extent necessary to exercise the above copyright + * license, and in no event shall the patent license extend to any additions + * to or modifications of the Original Intel Code. No other license or right + * is granted directly or by implication, estoppel or otherwise; + * + * The above copyright and patent license is granted only if the following + * conditions are met: + * + * 3. Conditions + * + * 3.1. Redistribution of Source with Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification with rights to further distribute source must include + * the above Copyright Notice, the above License, this list of Conditions, + * and the following Disclaimer and Export Compliance provision. In addition, + * Licensee must cause all Covered Code to which Licensee contributes to + * contain a file documenting the changes Licensee made to create that Covered + * Code and the date of any change. Licensee must include in that file the + * documentation of any changes made by any predecessor Licensee. Licensee + * must include a prominent statement that the modification is derived, + * directly or indirectly, from Original Intel Code. + * + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification without rights to further distribute source must + * include the following Disclaimer and Export Compliance provision in the + * documentation and/or other materials provided with distribution. In + * addition, Licensee may not authorize further sublicense of source of any + * portion of the Covered Code, and must include terms to the effect that the + * license from Licensee to its licensee is limited to the intellectual + * property embodied in the software Licensee provides to its licensee, and + * not to intellectual property embodied in modifications its licensee may + * make. + * + * 3.3. Redistribution of Executable. Redistribution in executable form of any + * substantial portion of the Covered Code or modification must reproduce the + * above Copyright Notice, and the following Disclaimer and Export Compliance + * provision in the documentation and/or other materials provided with the + * distribution. + * + * 3.4. Intel retains all right, title, and interest in and to the Original + * Intel Code. + * + * 3.5. Neither the name Intel nor any other trademark owned or controlled by + * Intel shall be used in advertising or otherwise to promote the sale, use or + * other dealings in products derived from or relating to the Covered Code + * without prior written authorization from Intel. + * + * 4. Disclaimer and Export Compliance + * + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A + * PARTICULAR PURPOSE. + * + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY + * LIMITED REMEDY. + * + * 4.3. Licensee shall not export, either directly or indirectly, any of this + * software or system incorporating such software without first obtaining any + * required license or other approval from the U. S. Department of Commerce or + * any other agency or department of the United States Government. In the + * event Licensee exports any such software from the United States or + * re-exports any such software from a foreign destination, Licensee shall + * ensure that the distribution and export/re-export of the software is in + * compliance with all laws, regulations, orders, or other restrictions of the + * U.S. Export Administration Regulations. Licensee agrees that neither it nor + * any of its subsidiaries will export/re-export any technical data, process, + * software, or service, directly or indirectly, to any country for which the + * United States government or any agency thereof requires an export license, + * other governmental approval, or letter of assurance, without first obtaining + * such license, approval or letter. + * + ***************************************************************************** + * + * Alternatively, you may choose to be licensed under the terms of the + * following license: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Alternatively, you may choose to be licensed under the terms of the + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. + * + *****************************************************************************/ + +#include <contrib/dev/acpica/compiler/aslcompiler.h> +#include "dtcompilerparser.y.h" + +YYSTYPE DtCompilerlval; + +#define _COMPONENT ACPI_COMPILER + ACPI_MODULE_NAME ("dtcompilerscanner") + +/* handle locations */ + +int DtCompilerParsercolumn = 1; +int DtLabelByteOffset = 0; +int DtCompilerParserByteOffset = 0; + +UINT32 DtTokenFirstLine = 0; +UINT32 DtTokenFirstColumn = 0; + +#define YY_USER_ACTION \ + DtTokenFirstLine = DtCompilerParserlineno; \ + DtTokenFirstColumn = DtCompilerParsercolumn; \ + DtCompilerParsercolumn += DtCompilerParserleng; \ + DtCompilerParserByteOffset += DtCompilerParserleng; \ + DbgPrint (ASL_PARSE_OUTPUT,\ + "user action occurred. DtCompilerParserlloc.first_line: %u\n",\ + DtTokenFirstLine); +%} + +%option nounput noinput yylineno + + /* Indicates a state used for parsing multiline C comments */ +%x ML_COMMENT +%x DATA_STATE + +WhiteSpace [ \t\v\r]+ +NewLines [\n]+ + + /* Avoid ", \n, and [] as a part of label name. These are not valid characters of a label name */ +LabelName [^ ":\n\[\]]([^":\n\[\]]*[^" :\n\[\]])? + + /* Avoid ", \n, \\, and [] as a part of data. These are not valid characters of data */ +Data [^ \\":\n\[\]]([^":\n\[\]\\]*[^" :\n\[\]\\])? + +Text [^ ":\n][^":\n]* +Comment \[[^\n\[\]]*\] +CommentField {LabelName}{WhiteSpace}*:{WhiteSpace}{Comment}?$ + + +%% + +<DATA_STATE>{WhiteSpace}"\\\n" { + DbgPrint(ASL_PARSE_OUTPUT,"Continuation matched\n"); + return (DT_PARSEOP_LINE_CONTINUATION); + } + +":" { + DbgPrint(ASL_PARSE_OUTPUT, ": Matched\n"); + BEGIN (DATA_STATE); + return (':'); + } + +<INITIAL,DATA_STATE>{WhiteSpace} { DbgPrint(ASL_PARSE_OUTPUT,"Whitespace matched\n"); } + +<INITIAL,DATA_STATE>{Comment} { DbgPrint(ASL_PARSE_OUTPUT,"Comment matched\n"); } + +"/*" { BEGIN (ML_COMMENT); } +<ML_COMMENT>"*/" { BEGIN (INITIAL); } +<ML_COMMENT>"*/\n" { BEGIN (INITIAL); } +<ML_COMMENT>([^*]|\n)+|. /* Ignore */ +"//".* /* Ignore */ + + +<DATA_STATE>{Data} { + char *s; + int size = strlen (DtCompilerParsertext); + s=UtLocalCacheCalloc (size + 1); + AcpiUtSafeStrncpy (s, DtCompilerParsertext, size + 1); + DtCompilerParserlval.s = s; + DbgPrint (ASL_PARSE_OUTPUT, "Data: %s\n", s); + return (DT_PARSEOP_DATA); +} + +{CommentField} /* ignore */ + +{LabelName} { + char *s; + int size = strlen (DtCompilerParsertext); + s=UtLocalCacheCalloc (size + 1); + AcpiUtSafeStrncpy (s, DtCompilerParsertext, size + 1); + 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); +} + + +<DATA_STATE>\"{Text}?\" { // remove outer quotes from the string, they are unnecessary + char *s; + int size = strlen (DtCompilerParsertext); + s=UtLocalCacheCalloc (size - 1); + AcpiUtSafeStrncpy (s, DtCompilerParsertext + 1, size - 1); + DtCompilerParserlval.s = s; + DbgPrint (ASL_PARSE_OUTPUT, "String Data: %s\n", s); + BEGIN (INITIAL); + return (DT_PARSEOP_STRING_DATA); +} + + +<INITIAL,DATA_STATE>{NewLines} { + DbgPrint(ASL_PARSE_OUTPUT, + "Newline matched (data state). Current line number: %u\n",DtCompilerParserlineno); + BEGIN (INITIAL); DtCompilerParsercolumn = 1; +} + + +%% + + +/* + * Local support functions + */ + +void +DtCompilerInitLexer ( + FILE *inFile) +{ + yyin = inFile; +} + +void +DtCompilerTerminateLexer ( + void) +{ + /* + * Flex/Bison increments the lineno for the EOF so decrement by 1 to get + * the correct number of lines. + */ + AslGbl_CurrentLineNumber = DtCompilerParserlineno - 1; + AslGbl_InputByteCount = DtCompilerParserByteOffset; +} diff --git a/sys/contrib/dev/acpica/compiler/dtcompilerparser.y b/sys/contrib/dev/acpica/compiler/dtcompilerparser.y new file mode 100644 index 000000000000..d0e0e3c64eee --- /dev/null +++ b/sys/contrib/dev/acpica/compiler/dtcompilerparser.y @@ -0,0 +1,285 @@ +%{ +/****************************************************************************** + * + * Module Name: dtcompilerparser.y - Bison input file for table compiler parser + * + *****************************************************************************/ + +/****************************************************************************** + * + * 1. Copyright Notice + * + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. + * All rights reserved. + * + * 2. License + * + * 2.1. This is your license from Intel Corp. under its intellectual property + * rights. You may have additional license terms from the party that provided + * you this software, covering your right to use that party's intellectual + * property rights. + * + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a + * copy of the source code appearing in this file ("Covered Code") an + * irrevocable, perpetual, worldwide license under Intel's copyrights in the + * base code distributed originally by Intel ("Original Intel Code") to copy, + * make derivatives, distribute, use and display any portion of the Covered + * Code in any form, with the right to sublicense such rights; and + * + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent + * license (with the right to sublicense), under only those claims of Intel + * patents that are infringed by the Original Intel Code, to make, use, sell, + * offer to sell, and import the Covered Code and derivative works thereof + * solely to the minimum extent necessary to exercise the above copyright + * license, and in no event shall the patent license extend to any additions + * to or modifications of the Original Intel Code. No other license or right + * is granted directly or by implication, estoppel or otherwise; + * + * The above copyright and patent license is granted only if the following + * conditions are met: + * + * 3. Conditions + * + * 3.1. Redistribution of Source with Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification with rights to further distribute source must include + * the above Copyright Notice, the above License, this list of Conditions, + * and the following Disclaimer and Export Compliance provision. In addition, + * Licensee must cause all Covered Code to which Licensee contributes to + * contain a file documenting the changes Licensee made to create that Covered + * Code and the date of any change. Licensee must include in that file the + * documentation of any changes made by any predecessor Licensee. Licensee + * must include a prominent statement that the modification is derived, + * directly or indirectly, from Original Intel Code. + * + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification without rights to further distribute source must + * include the following Disclaimer and Export Compliance provision in the + * documentation and/or other materials provided with distribution. In + * addition, Licensee may not authorize further sublicense of source of any + * portion of the Covered Code, and must include terms to the effect that the + * license from Licensee to its licensee is limited to the intellectual + * property embodied in the software Licensee provides to its licensee, and + * not to intellectual property embodied in modifications its licensee may + * make. + * + * 3.3. Redistribution of Executable. Redistribution in executable form of any + * substantial portion of the Covered Code or modification must reproduce the + * above Copyright Notice, and the following Disclaimer and Export Compliance + * provision in the documentation and/or other materials provided with the + * distribution. + * + * 3.4. Intel retains all right, title, and interest in and to the Original + * Intel Code. + * + * 3.5. Neither the name Intel nor any other trademark owned or controlled by + * Intel shall be used in advertising or otherwise to promote the sale, use or + * other dealings in products derived from or relating to the Covered Code + * without prior written authorization from Intel. + * + * 4. Disclaimer and Export Compliance + * + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A + * PARTICULAR PURPOSE. + * + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY + * LIMITED REMEDY. + * + * 4.3. Licensee shall not export, either directly or indirectly, any of this + * software or system incorporating such software without first obtaining any + * required license or other approval from the U. S. Department of Commerce or + * any other agency or department of the United States Government. In the + * event Licensee exports any such software from the United States or + * re-exports any such software from a foreign destination, Licensee shall + * ensure that the distribution and export/re-export of the software is in + * compliance with all laws, regulations, orders, or other restrictions of the + * U.S. Export Administration Regulations. Licensee agrees that neither it nor + * any of its subsidiaries will export/re-export any technical data, process, + * software, or service, directly or indirectly, to any country for which the + * United States government or any agency thereof requires an export license, + * other governmental approval, or letter of assurance, without first obtaining + * such license, approval or letter. + * + ***************************************************************************** + * + * Alternatively, you may choose to be licensed under the terms of the + * following license: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Alternatively, you may choose to be licensed under the terms of the + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. + * + *****************************************************************************/ + +#include <contrib/dev/acpica/compiler/aslcompiler.h> + + +#define _COMPONENT DT_COMPILER + ACPI_MODULE_NAME ("dtcompilerparser") + +void * AslLocalAllocate (unsigned int Size); + +/* Bison/yacc configuration */ + +#undef alloca +#define alloca AslLocalAllocate + +int DtCompilerParserlex (void); +int DtCompilerParserparse (void); +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 +#define YYDEBUG 1 /* Enable debug output */ +#define YYERROR_VERBOSE 1 /* Verbose error messages */ +#define YYFLAG -32768 + +/* Define YYMALLOC/YYFREE to prevent redefinition errors */ + +#define YYMALLOC malloc +#define YYFREE free + +%} + + +%union { + char *s; + DT_FIELD *f; + DT_TABLE_UNIT *u; +} + + +%type <f> Table +%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 { } + ; + +FieldList + : Field FieldList + | Field + ; + +Field + : DT_PARSEOP_LABEL ':' Data { DtCreateField ($1, $3, DtLabelByteOffset); } + ; + +Data + : MultiLineDataList { $$ = $1; } + | Datum { $$ = $1; } + | Datum MultiLineDataList { $$ = $1; } /* combine the string with strcat */ + ; + +MultiLineDataList + : MultiLineDataList MultiLineData { $$ = DtCreateTableUnit (AcpiUtStrcat(AcpiUtStrcat($1->Value, " "), $2->Value), $1->Line, $1->Column); } /* combine the strings with strcat */ + | MultiLineData { $$ = $1; } + ; + +MultiLineData + : DT_PARSEOP_LINE_CONTINUATION Datum { DbgPrint (ASL_PARSE_OUTPUT, "line continuation detected\n"); $$ = $2; } + ; + +Datum + : 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); + } + ; + + +%% + + +/* + * Local support functions, including parser entry point + */ +/****************************************************************************** + * + * FUNCTION: DtCompilerParsererror + * + * PARAMETERS: Message - Parser-generated error message + * + * RETURN: None + * + * DESCRIPTION: Handler for parser errors + * + *****************************************************************************/ + +void +DtCompilerParsererror ( + char const *Message) +{ + DtError (ASL_ERROR, ASL_MSG_SYNTAX, + AslGbl_CurrentField, (char *) Message); +} + +int +DtCompilerParserwrap(void) +{ + return (1); +} diff --git a/sys/contrib/dev/acpica/compiler/dtfield.c b/sys/contrib/dev/acpica/compiler/dtfield.c index 7d4547ad9f57..23f3bea2aff5 100644 --- a/sys/contrib/dev/acpica/compiler/dtfield.c +++ b/sys/contrib/dev/acpica/compiler/dtfield.c @@ -280,7 +280,9 @@ DtCompileString ( if (Length > ByteLength) { - sprintf (AslGbl_MsgBuffer, "Maximum %u characters", ByteLength); + sprintf (AslGbl_MsgBuffer, + "Maximum %u characters, found %u characters [%s]", + ByteLength, Length, Field->Value); DtError (ASL_ERROR, ASL_MSG_STRING_LENGTH, Field, AslGbl_MsgBuffer); Length = ByteLength; } @@ -574,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) */ @@ -719,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/sys/contrib/dev/acpica/compiler/dtio.c b/sys/contrib/dev/acpica/compiler/dtio.c index 9d6d21523fe9..680609aaa8ee 100644 --- a/sys/contrib/dev/acpica/compiler/dtio.c +++ b/sys/contrib/dev/acpica/compiler/dtio.c @@ -162,10 +162,6 @@ static char * DtTrim ( char *String); -static void -DtLinkField ( - DT_FIELD *Field); - static ACPI_STATUS DtParseLine ( char *LineBuffer, @@ -299,45 +295,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 * * PARAMETERS: LineBuffer - Current source code line @@ -787,7 +744,6 @@ DtGetNextLine ( case '\n': - CurrentLineOffset = AslGbl_NextLineOffset; AslGbl_NextLineOffset = (UINT32) ftell (Handle); AslGbl_CurrentLineNumber++; break; @@ -829,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; @@ -1117,7 +1072,7 @@ DtDumpSubtableInfo ( { DbgPrint (ASL_DEBUG_OUTPUT, - "[%.04X] %24s %.08X %.08X %.08X %.08X %.08X %p %p %p\n", + "[%.04X] %24s %.08X %.08X %.08X %.08X %p %p %p %p\n", Subtable->Depth, Subtable->Name, Subtable->Length, Subtable->TotalLength, Subtable->SizeOfLengthField, Subtable->Flags, Subtable, Subtable->Parent, Subtable->Child, Subtable->Peer); @@ -1131,7 +1086,7 @@ DtDumpSubtableTree ( { DbgPrint (ASL_DEBUG_OUTPUT, - "[%.04X] %24s %*s%08X (%.02X) - (%.02X)\n", + "[%.04X] %24s %*s%p (%.02X) - (%.02X)\n", Subtable->Depth, Subtable->Name, (4 * Subtable->Depth), " ", Subtable, Subtable->Length, Subtable->TotalLength); } @@ -1225,7 +1180,7 @@ DtWriteFieldToListing ( if (strlen (Field->Value) > 64) { FlPrintFile (ASL_FILE_LISTING_OUTPUT, "...Additional data, length 0x%X\n", - strlen (Field->Value)); + (UINT32) strlen (Field->Value)); } FlPrintFile (ASL_FILE_LISTING_OUTPUT, "\n"); diff --git a/sys/contrib/dev/acpica/compiler/dtparser.l b/sys/contrib/dev/acpica/compiler/dtparser.l index d935b9e3da4a..32f821a5ca07 100644 --- a/sys/contrib/dev/acpica/compiler/dtparser.l +++ b/sys/contrib/dev/acpica/compiler/dtparser.l @@ -227,7 +227,6 @@ int DtInitLexer ( char *String) { - LexBuffer = yy_scan_string (String); return (LexBuffer == NULL); } @@ -236,6 +235,5 @@ void DtTerminateLexer ( void) { - yy_delete_buffer (LexBuffer); } diff --git a/sys/contrib/dev/acpica/compiler/dttable2.c b/sys/contrib/dev/acpica/compiler/dttable2.c index 29b845a5a1ba..6f1c82de7c37 100644 --- a/sys/contrib/dev/acpica/compiler/dttable2.c +++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/compiler/dttemplate.c b/sys/contrib/dev/acpica/compiler/dttemplate.c index 9af71d5d031c..7ccfb8aaeabc 100644 --- a/sys/contrib/dev/acpica/compiler/dttemplate.c +++ b/sys/contrib/dev/acpica/compiler/dttemplate.c @@ -509,7 +509,7 @@ DtCreateOneTemplate ( AcpiUtStrlwr (DisasmFilename); if (!UtQueryForOverwrite (DisasmFilename)) { - return (AE_ERROR); + return (AE_OK); } File = fopen (DisasmFilename, "w+"); diff --git a/sys/contrib/dev/acpica/compiler/prmacros.c b/sys/contrib/dev/acpica/compiler/prmacros.c index 59db77debee5..52aa822f48e7 100644 --- a/sys/contrib/dev/acpica/compiler/prmacros.c +++ b/sys/contrib/dev/acpica/compiler/prmacros.c @@ -223,7 +223,7 @@ PrAddDefine ( DefineInfo = PrMatchDefine (Identifier); if (DefineInfo) { - DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID, + DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID "#define: name already exists: %s\n", AslGbl_CurrentLineNumber, Identifier); diff --git a/sys/contrib/dev/acpica/compiler/prscan.c b/sys/contrib/dev/acpica/compiler/prscan.c index ed7423657302..5d4065a16b43 100644 --- a/sys/contrib/dev/acpica/compiler/prscan.c +++ b/sys/contrib/dev/acpica/compiler/prscan.c @@ -850,7 +850,7 @@ PrDoDirective ( DbgPrint (ASL_PARSE_OUTPUT, PR_PREFIX_ID "Start #include file \"%s\"\n", AslGbl_CurrentLineNumber, - Token, AslGbl_CurrentLineNumber); + Token); PrDoIncludeFile (Token); break; @@ -1356,7 +1356,7 @@ PrDoIncludeBuffer ( { if (!(i % 8)) { - FlPrintFile (ASL_FILE_PREPROCESSOR, "\n ", c); + FlPrintFile (ASL_FILE_PREPROCESSOR, "\n "); } FlPrintFile (ASL_FILE_PREPROCESSOR, " 0x%2.2X,", c); @@ -1369,6 +1369,6 @@ PrDoIncludeBuffer ( /* Close the Name() operator */ - FlPrintFile (ASL_FILE_PREPROCESSOR, "\n})\n", BufferName); + FlPrintFile (ASL_FILE_PREPROCESSOR, "\n})\n"); fclose (BinaryBufferFile); } diff --git a/sys/contrib/dev/acpica/components/debugger/dbconvert.c b/sys/contrib/dev/acpica/components/debugger/dbconvert.c index a4fd597863c7..b2b64741286c 100644 --- a/sys/contrib/dev/acpica/components/debugger/dbconvert.c +++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/components/debugger/dbdisply.c b/sys/contrib/dev/acpica/components/debugger/dbdisply.c index 13df4994c043..9521c0fcbf59 100644 --- a/sys/contrib/dev/acpica/components/debugger/dbdisply.c +++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/components/debugger/dbfileio.c b/sys/contrib/dev/acpica/components/debugger/dbfileio.c index 67d3efe33e47..fe3b50563947 100644 --- a/sys/contrib/dev/acpica/components/debugger/dbfileio.c +++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/components/debugger/dbhistry.c b/sys/contrib/dev/acpica/components/debugger/dbhistry.c index 956641a2e88c..ea1274c5f2e5 100644 --- a/sys/contrib/dev/acpica/components/debugger/dbhistry.c +++ b/sys/contrib/dev/acpica/components/debugger/dbhistry.c @@ -284,7 +284,7 @@ AcpiDbDisplayHistory ( { if (AcpiGbl_HistoryBuffer[HistoryIndex].Command) { - AcpiOsPrintf ("%3ld %s\n", + AcpiOsPrintf ("%3u %s\n", AcpiGbl_HistoryBuffer[HistoryIndex].CmdNum, AcpiGbl_HistoryBuffer[HistoryIndex].Command); } diff --git a/sys/contrib/dev/acpica/components/debugger/dbinput.c b/sys/contrib/dev/acpica/components/debugger/dbinput.c index 756c08b757fc..1a6c4d13258c 100644 --- a/sys/contrib/dev/acpica/components/debugger/dbinput.c +++ b/sys/contrib/dev/acpica/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 */ @@ -785,7 +804,7 @@ AcpiDbGetLine ( { AcpiOsPrintf ( "Buffer overflow while parsing input line (max %u characters)\n", - sizeof (AcpiGbl_DbParsedBuf)); + (UINT32) sizeof (AcpiGbl_DbParsedBuf)); return (0); } @@ -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; @@ -1060,10 +1094,10 @@ AcpiDbCommandDispatch ( if (ParamCount == 0) { AcpiOsPrintf ( - "Current debug level for file output is: %8.8lX\n", + "Current debug level for file output is: %8.8X\n", AcpiGbl_DbDebugLevel); AcpiOsPrintf ( - "Current debug level for console output is: %8.8lX\n", + "Current debug level for console output is: %8.8X\n", AcpiGbl_DbConsoleDebugLevel); } else if (ParamCount == 2) @@ -1072,7 +1106,7 @@ AcpiDbCommandDispatch ( AcpiGbl_DbConsoleDebugLevel = strtoul (AcpiGbl_DbArgs[1], NULL, 16); AcpiOsPrintf ( - "Debug Level for console output was %8.8lX, now %8.8lX\n", + "Debug Level for console output was %8.8X, now %8.8X\n", Temp, AcpiGbl_DbConsoleDebugLevel); } else @@ -1080,7 +1114,7 @@ AcpiDbCommandDispatch ( Temp = AcpiGbl_DbDebugLevel; AcpiGbl_DbDebugLevel = strtoul (AcpiGbl_DbArgs[1], NULL, 16); AcpiOsPrintf ( - "Debug Level for file output was %8.8lX, now %8.8lX\n", + "Debug Level for file output was %8.8X, now %8.8X\n", Temp, AcpiGbl_DbDebugLevel); } break; diff --git a/sys/contrib/dev/acpica/components/debugger/dbmethod.c b/sys/contrib/dev/acpica/components/debugger/dbmethod.c index 35dde07407ef..be9bd472a7e9 100644 --- a/sys/contrib/dev/acpica/components/debugger/dbmethod.c +++ b/sys/contrib/dev/acpica/components/debugger/dbmethod.c @@ -493,6 +493,11 @@ AcpiDbDisassembleMethod ( } Status = AcpiUtAllocateOwnerId (&ObjDesc->Method.OwnerId); + if (ACPI_FAILURE(Status)) + { + return (Status); + } + WalkState->OwnerId = ObjDesc->Method.OwnerId; /* Push start scope on scope stack and make it current */ @@ -510,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/sys/contrib/dev/acpica/components/debugger/dbnames.c b/sys/contrib/dev/acpica/components/debugger/dbnames.c index be09156514b7..f44cb3e0b4bd 100644 --- a/sys/contrib/dev/acpica/components/debugger/dbnames.c +++ b/sys/contrib/dev/acpica/components/debugger/dbnames.c @@ -154,6 +154,7 @@ #include <contrib/dev/acpica/include/acnamesp.h> #include <contrib/dev/acpica/include/acdebug.h> #include <contrib/dev/acpica/include/acpredef.h> +#include <contrib/dev/acpica/include/acinterp.h> #define _COMPONENT ACPI_CA_DEBUGGER @@ -724,6 +725,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 * * PARAMETERS: Callback from WalkNamespace @@ -859,6 +945,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 * * PARAMETERS: Callback from WalkNamespace diff --git a/sys/contrib/dev/acpica/components/debugger/dbobject.c b/sys/contrib/dev/acpica/components/debugger/dbobject.c index 841dde197120..d1e34f98cd6b 100644 --- a/sys/contrib/dev/acpica/components/debugger/dbobject.c +++ b/sys/contrib/dev/acpica/components/debugger/dbobject.c @@ -567,7 +567,6 @@ AcpiDbDecodeLocals ( Node = WalkState->MethodNode; - ObjDesc = WalkState->MethodDesc; /* There are no locals for the module-level code case */ @@ -650,7 +649,6 @@ AcpiDbDecodeArguments ( Node = WalkState->MethodNode; - ObjDesc = WalkState->MethodDesc; /* There are no arguments for the module-level code case */ diff --git a/sys/contrib/dev/acpica/components/debugger/dbstats.c b/sys/contrib/dev/acpica/components/debugger/dbstats.c index 469d85991ce0..a3ceb86c5c84 100644 --- a/sys/contrib/dev/acpica/components/debugger/dbstats.c +++ b/sys/contrib/dev/acpica/components/debugger/dbstats.c @@ -544,14 +544,14 @@ AcpiDbDisplayStatistics ( for (i = 0; i < ACPI_TYPE_NS_NODE_MAX; i++) { - AcpiOsPrintf ("%16.16s % 10ld% 10ld\n", AcpiUtGetTypeName (i), + AcpiOsPrintf ("%16.16s %10u %10u\n", AcpiUtGetTypeName (i), AcpiGbl_NodeTypeCount [i], AcpiGbl_ObjTypeCount [i]); } - AcpiOsPrintf ("%16.16s % 10ld% 10ld\n", "Misc/Unknown", + AcpiOsPrintf ("%16.16s %10u %10u\n", "Misc/Unknown", AcpiGbl_NodeTypeCountMisc, AcpiGbl_ObjTypeCountMisc); - AcpiOsPrintf ("%16.16s % 10ld% 10ld\n", "TOTALS:", + AcpiOsPrintf ("%16.16s %10u %10u\n", "TOTALS:", AcpiGbl_NumNodes, AcpiGbl_NumObjects); break; @@ -577,17 +577,15 @@ AcpiDbDisplayStatistics ( case CMD_STAT_MISC: AcpiOsPrintf ("\nMiscellaneous Statistics:\n\n"); - AcpiOsPrintf ("Calls to AcpiPsFind:.. ........% 7ld\n", + AcpiOsPrintf ("%-28s: %7u\n", "Calls to AcpiPsFind", AcpiGbl_PsFindCount); - AcpiOsPrintf ("Calls to AcpiNsLookup:..........% 7ld\n", + AcpiOsPrintf ("%-28s: %7u\n", "Calls to AcpiNsLookup", AcpiGbl_NsLookupCount); - AcpiOsPrintf ("\n"); - - AcpiOsPrintf ("Mutex usage:\n\n"); + AcpiOsPrintf ("\nMutex usage:\n\n"); for (i = 0; i < ACPI_NUM_MUTEX; i++) { - AcpiOsPrintf ("%-28s: % 7ld\n", + AcpiOsPrintf ("%-28s: %7u\n", AcpiUtGetMutexName (i), AcpiGbl_MutexInfo[i].UseCount); } break; @@ -596,50 +594,50 @@ AcpiDbDisplayStatistics ( AcpiOsPrintf ("\nInternal object sizes:\n\n"); - AcpiOsPrintf ("Common %3d\n", sizeof (ACPI_OBJECT_COMMON)); - AcpiOsPrintf ("Number %3d\n", sizeof (ACPI_OBJECT_INTEGER)); - AcpiOsPrintf ("String %3d\n", sizeof (ACPI_OBJECT_STRING)); - AcpiOsPrintf ("Buffer %3d\n", sizeof (ACPI_OBJECT_BUFFER)); - AcpiOsPrintf ("Package %3d\n", sizeof (ACPI_OBJECT_PACKAGE)); - AcpiOsPrintf ("BufferField %3d\n", sizeof (ACPI_OBJECT_BUFFER_FIELD)); - AcpiOsPrintf ("Device %3d\n", sizeof (ACPI_OBJECT_DEVICE)); - AcpiOsPrintf ("Event %3d\n", sizeof (ACPI_OBJECT_EVENT)); - AcpiOsPrintf ("Method %3d\n", sizeof (ACPI_OBJECT_METHOD)); - AcpiOsPrintf ("Mutex %3d\n", sizeof (ACPI_OBJECT_MUTEX)); - AcpiOsPrintf ("Region %3d\n", sizeof (ACPI_OBJECT_REGION)); - AcpiOsPrintf ("PowerResource %3d\n", sizeof (ACPI_OBJECT_POWER_RESOURCE)); - AcpiOsPrintf ("Processor %3d\n", sizeof (ACPI_OBJECT_PROCESSOR)); - AcpiOsPrintf ("ThermalZone %3d\n", sizeof (ACPI_OBJECT_THERMAL_ZONE)); - AcpiOsPrintf ("RegionField %3d\n", sizeof (ACPI_OBJECT_REGION_FIELD)); - AcpiOsPrintf ("BankField %3d\n", sizeof (ACPI_OBJECT_BANK_FIELD)); - AcpiOsPrintf ("IndexField %3d\n", sizeof (ACPI_OBJECT_INDEX_FIELD)); - AcpiOsPrintf ("Reference %3d\n", sizeof (ACPI_OBJECT_REFERENCE)); - AcpiOsPrintf ("Notify %3d\n", sizeof (ACPI_OBJECT_NOTIFY_HANDLER)); - AcpiOsPrintf ("AddressSpace %3d\n", sizeof (ACPI_OBJECT_ADDR_HANDLER)); - AcpiOsPrintf ("Extra %3d\n", sizeof (ACPI_OBJECT_EXTRA)); - AcpiOsPrintf ("Data %3d\n", sizeof (ACPI_OBJECT_DATA)); + AcpiOsPrintf ("Common %3d\n", (UINT32) sizeof (ACPI_OBJECT_COMMON)); + AcpiOsPrintf ("Number %3d\n", (UINT32) sizeof (ACPI_OBJECT_INTEGER)); + AcpiOsPrintf ("String %3d\n", (UINT32) sizeof (ACPI_OBJECT_STRING)); + AcpiOsPrintf ("Buffer %3d\n", (UINT32) sizeof (ACPI_OBJECT_BUFFER)); + AcpiOsPrintf ("Package %3d\n", (UINT32) sizeof (ACPI_OBJECT_PACKAGE)); + AcpiOsPrintf ("BufferField %3d\n", (UINT32) sizeof (ACPI_OBJECT_BUFFER_FIELD)); + AcpiOsPrintf ("Device %3d\n", (UINT32) sizeof (ACPI_OBJECT_DEVICE)); + AcpiOsPrintf ("Event %3d\n", (UINT32) sizeof (ACPI_OBJECT_EVENT)); + AcpiOsPrintf ("Method %3d\n", (UINT32) sizeof (ACPI_OBJECT_METHOD)); + AcpiOsPrintf ("Mutex %3d\n", (UINT32) sizeof (ACPI_OBJECT_MUTEX)); + AcpiOsPrintf ("Region %3d\n", (UINT32) sizeof (ACPI_OBJECT_REGION)); + AcpiOsPrintf ("PowerResource %3d\n", (UINT32) sizeof (ACPI_OBJECT_POWER_RESOURCE)); + AcpiOsPrintf ("Processor %3d\n", (UINT32) sizeof (ACPI_OBJECT_PROCESSOR)); + AcpiOsPrintf ("ThermalZone %3d\n", (UINT32) sizeof (ACPI_OBJECT_THERMAL_ZONE)); + AcpiOsPrintf ("RegionField %3d\n", (UINT32) sizeof (ACPI_OBJECT_REGION_FIELD)); + AcpiOsPrintf ("BankField %3d\n", (UINT32) sizeof (ACPI_OBJECT_BANK_FIELD)); + AcpiOsPrintf ("IndexField %3d\n", (UINT32) sizeof (ACPI_OBJECT_INDEX_FIELD)); + AcpiOsPrintf ("Reference %3d\n", (UINT32) sizeof (ACPI_OBJECT_REFERENCE)); + AcpiOsPrintf ("Notify %3d\n", (UINT32) sizeof (ACPI_OBJECT_NOTIFY_HANDLER)); + AcpiOsPrintf ("AddressSpace %3d\n", (UINT32) sizeof (ACPI_OBJECT_ADDR_HANDLER)); + AcpiOsPrintf ("Extra %3d\n", (UINT32) sizeof (ACPI_OBJECT_EXTRA)); + AcpiOsPrintf ("Data %3d\n", (UINT32) sizeof (ACPI_OBJECT_DATA)); AcpiOsPrintf ("\n"); - AcpiOsPrintf ("ParseObject %3d\n", sizeof (ACPI_PARSE_OBJ_COMMON)); - AcpiOsPrintf ("ParseObjectNamed %3d\n", sizeof (ACPI_PARSE_OBJ_NAMED)); - AcpiOsPrintf ("ParseObjectAsl %3d\n", sizeof (ACPI_PARSE_OBJ_ASL)); - AcpiOsPrintf ("OperandObject %3d\n", sizeof (ACPI_OPERAND_OBJECT)); - AcpiOsPrintf ("NamespaceNode %3d\n", sizeof (ACPI_NAMESPACE_NODE)); - AcpiOsPrintf ("AcpiObject %3d\n", sizeof (ACPI_OBJECT)); + AcpiOsPrintf ("ParseObject %3d\n", (UINT32) sizeof (ACPI_PARSE_OBJ_COMMON)); + AcpiOsPrintf ("ParseObjectNamed %3d\n", (UINT32) sizeof (ACPI_PARSE_OBJ_NAMED)); + AcpiOsPrintf ("ParseObjectAsl %3d\n", (UINT32) sizeof (ACPI_PARSE_OBJ_ASL)); + AcpiOsPrintf ("OperandObject %3d\n", (UINT32) sizeof (ACPI_OPERAND_OBJECT)); + AcpiOsPrintf ("NamespaceNode %3d\n", (UINT32) sizeof (ACPI_NAMESPACE_NODE)); + AcpiOsPrintf ("AcpiObject %3d\n", (UINT32) sizeof (ACPI_OBJECT)); AcpiOsPrintf ("\n"); - AcpiOsPrintf ("Generic State %3d\n", sizeof (ACPI_GENERIC_STATE)); - AcpiOsPrintf ("Common State %3d\n", sizeof (ACPI_COMMON_STATE)); - AcpiOsPrintf ("Control State %3d\n", sizeof (ACPI_CONTROL_STATE)); - AcpiOsPrintf ("Update State %3d\n", sizeof (ACPI_UPDATE_STATE)); - AcpiOsPrintf ("Scope State %3d\n", sizeof (ACPI_SCOPE_STATE)); - AcpiOsPrintf ("Parse Scope %3d\n", sizeof (ACPI_PSCOPE_STATE)); - AcpiOsPrintf ("Package State %3d\n", sizeof (ACPI_PKG_STATE)); - AcpiOsPrintf ("Thread State %3d\n", sizeof (ACPI_THREAD_STATE)); - AcpiOsPrintf ("Result Values %3d\n", sizeof (ACPI_RESULT_VALUES)); - AcpiOsPrintf ("Notify Info %3d\n", sizeof (ACPI_NOTIFY_INFO)); + AcpiOsPrintf ("Generic State %3d\n", (UINT32) sizeof (ACPI_GENERIC_STATE)); + AcpiOsPrintf ("Common State %3d\n", (UINT32) sizeof (ACPI_COMMON_STATE)); + AcpiOsPrintf ("Control State %3d\n", (UINT32) sizeof (ACPI_CONTROL_STATE)); + AcpiOsPrintf ("Update State %3d\n", (UINT32) sizeof (ACPI_UPDATE_STATE)); + AcpiOsPrintf ("Scope State %3d\n", (UINT32) sizeof (ACPI_SCOPE_STATE)); + AcpiOsPrintf ("Parse Scope %3d\n", (UINT32) sizeof (ACPI_PSCOPE_STATE)); + AcpiOsPrintf ("Package State %3d\n", (UINT32) sizeof (ACPI_PKG_STATE)); + AcpiOsPrintf ("Thread State %3d\n", (UINT32) sizeof (ACPI_THREAD_STATE)); + AcpiOsPrintf ("Result Values %3d\n", (UINT32) sizeof (ACPI_RESULT_VALUES)); + AcpiOsPrintf ("Notify Info %3d\n", (UINT32) sizeof (ACPI_NOTIFY_INFO)); break; case CMD_STAT_STACK: diff --git a/sys/contrib/dev/acpica/components/disassembler/dmdeferred.c b/sys/contrib/dev/acpica/components/disassembler/dmdeferred.c index f5ec6b2d9a13..f59c6b913bee 100644 --- a/sys/contrib/dev/acpica/components/disassembler/dmdeferred.c +++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/components/disassembler/dmresrc.c b/sys/contrib/dev/acpica/components/disassembler/dmresrc.c index 93e6d292e8ab..05d5f9eb5e51 100644 --- a/sys/contrib/dev/acpica/components/disassembler/dmresrc.c +++ b/sys/contrib/dev/acpica/components/disassembler/dmresrc.c @@ -441,7 +441,6 @@ AcpiDmResourceTemplate ( * missing EndDependentDescriptor. */ Level--; - DependentFns = FALSE; /* Go ahead and insert EndDependentFn() */ diff --git a/sys/contrib/dev/acpica/components/disassembler/dmwalk.c b/sys/contrib/dev/acpica/components/disassembler/dmwalk.c index 5f01f2ae3c9a..f6b0c0871ad4 100644 --- a/sys/contrib/dev/acpica/components/disassembler/dmwalk.c +++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/components/dispatcher/dscontrol.c b/sys/contrib/dev/acpica/components/dispatcher/dscontrol.c index ede9427f0a19..b37eaf7a239d 100644 --- a/sys/contrib/dev/acpica/components/dispatcher/dscontrol.c +++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/components/dispatcher/dsfield.c b/sys/contrib/dev/acpica/components/dispatcher/dsfield.c index d3b5c8597f38..7df13832e268 100644 --- a/sys/contrib/dev/acpica/components/dispatcher/dsfield.c +++ b/sys/contrib/dev/acpica/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; #if !defined(ACPI_DB_APP) && defined(ACPI_EXEC_APP) - UINT64 Value = 0; ACPI_OPERAND_OBJECT *ResultDesc; ACPI_OPERAND_OBJECT *ObjDesc; char *NamePath; @@ -577,14 +575,13 @@ AcpiDsGetFieldNames ( } #if !defined(ACPI_DB_APP) && defined(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/sys/contrib/dev/acpica/components/events/evgpe.c b/sys/contrib/dev/acpica/components/events/evgpe.c index 6b0791987468..b9e79a769f7e 100644 --- a/sys/contrib/dev/acpica/components/events/evgpe.c +++ b/sys/contrib/dev/acpica/components/events/evgpe.c @@ -848,6 +848,15 @@ AcpiEvDetectGpe ( Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); + if (!GpeEventInfo) + { + GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber); + if (!GpeEventInfo) + { + goto ErrorExit; + } + } + /* Get the info block for the entire GPE register */ GpeRegisterInfo = GpeEventInfo->RegisterInfo; diff --git a/sys/contrib/dev/acpica/components/events/evgpeblk.c b/sys/contrib/dev/acpica/components/events/evgpeblk.c index d7f1e860ed66..b0417bf5a437 100644 --- a/sys/contrib/dev/acpica/components/events/evgpeblk.c +++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/components/events/evgpeinit.c b/sys/contrib/dev/acpica/components/events/evgpeinit.c index c8102b97edd4..098ce43f91b8 100644 --- a/sys/contrib/dev/acpica/components/events/evgpeinit.c +++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/components/events/evmisc.c b/sys/contrib/dev/acpica/components/events/evmisc.c index a72b3b532777..c23eaccc5007 100644 --- a/sys/contrib/dev/acpica/components/events/evmisc.c +++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/components/events/evregion.c b/sys/contrib/dev/acpica/components/events/evregion.c index 2ada439b0ff0..91d92f9f2e82 100644 --- a/sys/contrib/dev/acpica/components/events/evregion.c +++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/components/events/evrgnini.c b/sys/contrib/dev/acpica/components/events/evrgnini.c index 5f28efaabdb3..c9d8f71bdf29 100644 --- a/sys/contrib/dev/acpica/components/events/evrgnini.c +++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/components/events/evxfgpe.c b/sys/contrib/dev/acpica/components/events/evxfgpe.c index 7519c8bbfe86..284a191a97c1 100644 --- a/sys/contrib/dev/acpica/components/events/evxfgpe.c +++ b/sys/contrib/dev/acpica/components/events/evxfgpe.c @@ -877,6 +877,33 @@ ACPI_EXPORT_SYMBOL (AcpiGetGpeStatus) /******************************************************************************* * + * FUNCTION: AcpiDispatchGpe + * + * PARAMETERS: GpeDevice - Parent GPE Device. NULL for GPE0/GPE1 + * GpeNumber - GPE level within the GPE block + * + * RETURN: INTERRUPT_HANDLED or INTERRUPT_NOT_HANDLED + * + * DESCRIPTION: Detect and dispatch a General Purpose Event to either a function + * (e.g. EC) or method (e.g. _Lxx/_Exx) handler. + * + ******************************************************************************/ + +UINT32 +AcpiDispatchGpe( + ACPI_HANDLE GpeDevice, + UINT32 GpeNumber) +{ + ACPI_FUNCTION_TRACE(acpi_dispatch_gpe); + + return (AcpiEvDetectGpe (GpeDevice, NULL, GpeNumber)); +} + +ACPI_EXPORT_SYMBOL (AcpiDispatchGpe) + + +/******************************************************************************* + * * FUNCTION: AcpiFinishGpe * * PARAMETERS: GpeDevice - Namespace node for the GPE Block diff --git a/sys/contrib/dev/acpica/components/executer/exdump.c b/sys/contrib/dev/acpica/components/executer/exdump.c index 5a423228d374..c0aa6303ba93 100644 --- a/sys/contrib/dev/acpica/components/executer/exdump.c +++ b/sys/contrib/dev/acpica/components/executer/exdump.c @@ -255,7 +255,7 @@ static ACPI_EXDUMP_INFO AcpiExDumpMethod[9] = {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.ParamCount), "Parameter Count"}, {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.SyncLevel), "Sync Level"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Method.Mutex), "Mutex"}, - {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.OwnerId), "Owner Id"}, + {ACPI_EXD_UINT16, ACPI_EXD_OFFSET (Method.OwnerId), "Owner Id"}, {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.ThreadCount), "Thread Count"}, {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Method.AmlLength), "Aml Length"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Method.AmlStart), "Aml Start"} @@ -422,8 +422,8 @@ static ACPI_EXDUMP_INFO AcpiExDumpFieldCommon[7] = static ACPI_EXDUMP_INFO AcpiExDumpNode[7] = { {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpNode), NULL}, - {ACPI_EXD_UINT8, ACPI_EXD_NSOFFSET (Flags), "Flags"}, - {ACPI_EXD_UINT8, ACPI_EXD_NSOFFSET (OwnerId), "Owner Id"}, + {ACPI_EXD_UINT16, ACPI_EXD_NSOFFSET (Flags), "Flags"}, + {ACPI_EXD_UINT16, ACPI_EXD_NSOFFSET (OwnerId), "Owner Id"}, {ACPI_EXD_LIST, ACPI_EXD_NSOFFSET (Object), "Object List"}, {ACPI_EXD_NODE, ACPI_EXD_NSOFFSET (Parent), "Parent"}, {ACPI_EXD_NODE, ACPI_EXD_NSOFFSET (Child), "Child"}, diff --git a/sys/contrib/dev/acpica/components/hardware/hwxfsleep.c b/sys/contrib/dev/acpica/components/hardware/hwxfsleep.c index 06be83daf39a..6a67c5ff0f3a 100644 --- a/sys/contrib/dev/acpica/components/hardware/hwxfsleep.c +++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/components/namespace/nsaccess.c b/sys/contrib/dev/acpica/components/namespace/nsaccess.c index 843705a5f23f..62e4dfaeeebf 100644 --- a/sys/contrib/dev/acpica/components/namespace/nsaccess.c +++ b/sys/contrib/dev/acpica/components/namespace/nsaccess.c @@ -767,7 +767,7 @@ AcpiNsLookup ( if (Flags & ACPI_NS_PREFIX_MUST_EXIST) { AcpiOsPrintf (ACPI_MSG_BIOS_ERROR - "Object does not exist: %4.4s\n", &SimpleName); + "Object does not exist: %4.4s\n", (char *) &SimpleName); } #endif /* Name not found in ACPI namespace */ diff --git a/sys/contrib/dev/acpica/components/namespace/nsalloc.c b/sys/contrib/dev/acpica/components/namespace/nsalloc.c index 2fa9e1304bc4..4ea35cdd21ec 100644 --- a/sys/contrib/dev/acpica/components/namespace/nsalloc.c +++ b/sys/contrib/dev/acpica/components/namespace/nsalloc.c @@ -423,7 +423,7 @@ AcpiNsInstallNode ( Node->Type = (UINT8) Type; ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, - "%4.4s (%s) [Node %p Owner %X] added to %4.4s (%s) [Node %p]\n", + "%4.4s (%s) [Node %p Owner %3.3X] added to %4.4s (%s) [Node %p]\n", AcpiUtGetNodeName (Node), AcpiUtGetTypeName (Node->Type), Node, OwnerId, AcpiUtGetNodeName (ParentNode), AcpiUtGetTypeName (ParentNode->Type), ParentNode)); diff --git a/sys/contrib/dev/acpica/components/namespace/nsconvert.c b/sys/contrib/dev/acpica/components/namespace/nsconvert.c index 2ee85074c7fe..6a223f58ec02 100644 --- a/sys/contrib/dev/acpica/components/namespace/nsconvert.c +++ b/sys/contrib/dev/acpica/components/namespace/nsconvert.c @@ -670,5 +670,5 @@ AcpiNsConvertToReference ( ErrorExit: ACPI_FREE (Name); *ReturnObject = NewObject; - return (AE_OK); + return (Status); } diff --git a/sys/contrib/dev/acpica/components/namespace/nsdump.c b/sys/contrib/dev/acpica/components/namespace/nsdump.c index 19524c4c21a6..5eda2df9fa7b 100644 --- a/sys/contrib/dev/acpica/components/namespace/nsdump.c +++ b/sys/contrib/dev/acpica/components/namespace/nsdump.c @@ -381,7 +381,7 @@ AcpiNsDumpOneObject ( /* Now we can print out the pertinent information */ - AcpiOsPrintf (" %-12s %p %2.2X ", + AcpiOsPrintf (" %-12s %p %3.3X ", AcpiUtGetTypeName (Type), ThisNode, ThisNode->OwnerId); DbgLevel = AcpiDbgLevel; @@ -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/sys/contrib/dev/acpica/components/namespace/nsrepair2.c b/sys/contrib/dev/acpica/components/namespace/nsrepair2.c index 1e65f100eeb3..84801ec377d7 100644 --- a/sys/contrib/dev/acpica/components/namespace/nsrepair2.c +++ b/sys/contrib/dev/acpica/components/namespace/nsrepair2.c @@ -289,7 +289,7 @@ static const ACPI_REPAIR_INFO AcpiNsRepairableNames[] = #define ACPI_FDE_FIELD_COUNT 5 #define ACPI_FDE_BYTE_BUFFER_SIZE 5 -#define ACPI_FDE_DWORD_BUFFER_SIZE (ACPI_FDE_FIELD_COUNT * sizeof (UINT32)) +#define ACPI_FDE_DWORD_BUFFER_SIZE (ACPI_FDE_FIELD_COUNT * (UINT32) sizeof (UINT32)) /****************************************************************************** diff --git a/sys/contrib/dev/acpica/components/namespace/nsxfname.c b/sys/contrib/dev/acpica/components/namespace/nsxfname.c index 62eb0afd46c4..229d91d29e54 100644 --- a/sys/contrib/dev/acpica/components/namespace/nsxfname.c +++ b/sys/contrib/dev/acpica/components/namespace/nsxfname.c @@ -611,7 +611,7 @@ AcpiGetObjectInfo ( if (Cls) { - NextIdString = AcpiNsCopyDeviceId (&Info->ClassCode, + (void) AcpiNsCopyDeviceId (&Info->ClassCode, Cls, NextIdString); } diff --git a/sys/contrib/dev/acpica/components/parser/psobject.c b/sys/contrib/dev/acpica/components/parser/psobject.c index 2a100d639bfe..7a4eca14dadf 100644 --- a/sys/contrib/dev/acpica/components/parser/psobject.c +++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/components/resources/rscreate.c b/sys/contrib/dev/acpica/components/resources/rscreate.c index ae388e593bef..ea1b5639c379 100644 --- a/sys/contrib/dev/acpica/components/resources/rscreate.c +++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/components/tables/tbdata.c b/sys/contrib/dev/acpica/components/tables/tbdata.c index 8e8e2a808ac2..adb92bf586e4 100644 --- a/sys/contrib/dev/acpica/components/tables/tbdata.c +++ b/sys/contrib/dev/acpica/components/tables/tbdata.c @@ -973,6 +973,7 @@ AcpiTbDeleteNamespaceByOwner ( { return_ACPI_STATUS (Status); } + AcpiNsDeleteNamespaceByOwner (OwnerId); AcpiUtReleaseWriteLock (&AcpiGbl_NamespaceRwLock); return_ACPI_STATUS (Status); @@ -1189,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/sys/contrib/dev/acpica/components/tables/tbxfload.c b/sys/contrib/dev/acpica/components/tables/tbxfload.c index 1fb867565664..1f2a1bf5ba98 100644 --- a/sys/contrib/dev/acpica/components/tables/tbxfload.c +++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/components/utilities/utbuffer.c b/sys/contrib/dev/acpica/components/utilities/utbuffer.c index 5382ee98167f..b1e2af966ef3 100644 --- a/sys/contrib/dev/acpica/components/utilities/utbuffer.c +++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/components/utilities/utdebug.c b/sys/contrib/dev/acpica/components/utilities/utdebug.c index 26f631a91627..b56fbe1f6bcb 100644 --- a/sys/contrib/dev/acpica/components/utilities/utdebug.c +++ b/sys/contrib/dev/acpica/components/utilities/utdebug.c @@ -322,7 +322,7 @@ AcpiDebugPrint ( * Display the module name, current line number, thread ID (if requested), * current procedure nesting level, and the current procedure name */ - AcpiOsPrintf ("%9s-%04ld ", ModuleName, LineNumber); + AcpiOsPrintf ("%9s-%04d ", ModuleName, LineNumber); #ifdef ACPI_APPLICATION /* @@ -343,7 +343,7 @@ AcpiDebugPrint ( FillCount = 0; } - AcpiOsPrintf ("[%02ld] %*s", + AcpiOsPrintf ("[%02d] %*s", AcpiGbl_NestingLevel, AcpiGbl_NestingLevel + 1, " "); AcpiOsPrintf ("%s%*s: ", AcpiUtTrimFunctionName (FunctionName), FillCount, " "); diff --git a/sys/contrib/dev/acpica/components/utilities/uterror.c b/sys/contrib/dev/acpica/components/utilities/uterror.c index 28b210347862..1e64aa46804c 100644 --- a/sys/contrib/dev/acpica/components/utilities/uterror.c +++ b/sys/contrib/dev/acpica/components/utilities/uterror.c @@ -188,7 +188,7 @@ AcpiUtPredefinedWarning ( const char *ModuleName, UINT32 LineNumber, char *Pathname, - UINT8 NodeFlags, + UINT16 NodeFlags, const char *Format, ...) { @@ -237,7 +237,7 @@ AcpiUtPredefinedInfo ( const char *ModuleName, UINT32 LineNumber, char *Pathname, - UINT8 NodeFlags, + UINT16 NodeFlags, const char *Format, ...) { @@ -286,7 +286,7 @@ AcpiUtPredefinedBiosError ( const char *ModuleName, UINT32 LineNumber, char *Pathname, - UINT8 NodeFlags, + UINT16 NodeFlags, const char *Format, ...) { diff --git a/sys/contrib/dev/acpica/components/utilities/utosi.c b/sys/contrib/dev/acpica/components/utilities/utosi.c index 006a6d6129c3..f0d3c94856f3 100644 --- a/sys/contrib/dev/acpica/components/utilities/utosi.c +++ b/sys/contrib/dev/acpica/components/utilities/utosi.c @@ -212,13 +212,14 @@ static ACPI_INTERFACE_INFO AcpiDefaultSupportedInterfaces[] = {"Windows 2006 SP2", NULL, 0, ACPI_OSI_WIN_VISTA_SP2}, /* Windows Vista SP2 - Added 09/2010 */ {"Windows 2009", NULL, 0, ACPI_OSI_WIN_7}, /* Windows 7 and Server 2008 R2 - Added 09/2009 */ {"Windows 2012", NULL, 0, ACPI_OSI_WIN_8}, /* Windows 8 and Server 2012 - Added 08/2012 */ - {"Windows 2013", NULL, 0, ACPI_OSI_WIN_8}, /* Windows 8.1 and Server 2012 R2 - Added 01/2014 */ + {"Windows 2013", NULL, 0, ACPI_OSI_WIN_8_1}, /* Windows 8.1 and Server 2012 R2 - Added 01/2014 */ {"Windows 2015", NULL, 0, ACPI_OSI_WIN_10}, /* Windows 10 - Added 03/2015 */ {"Windows 2016", NULL, 0, ACPI_OSI_WIN_10_RS1}, /* Windows 10 version 1607 - Added 12/2017 */ {"Windows 2017", NULL, 0, ACPI_OSI_WIN_10_RS2}, /* Windows 10 version 1703 - Added 12/2017 */ {"Windows 2017.2", NULL, 0, ACPI_OSI_WIN_10_RS3}, /* Windows 10 version 1709 - Added 02/2018 */ {"Windows 2018", NULL, 0, ACPI_OSI_WIN_10_RS4}, /* Windows 10 version 1803 - Added 11/2018 */ {"Windows 2018.2", NULL, 0, ACPI_OSI_WIN_10_RS5}, /* Windows 10 version 1809 - Added 11/2018 */ + {"Windows 2019", NULL, 0, ACPI_OSI_WIN_10_19H1}, /* Windows 10 version 1903 - Added 08/2019 */ /* Feature Group Strings */ diff --git a/sys/contrib/dev/acpica/components/utilities/utownerid.c b/sys/contrib/dev/acpica/components/utilities/utownerid.c index 57efce4b73d0..c740961fc747 100644 --- a/sys/contrib/dev/acpica/components/utilities/utownerid.c +++ b/sys/contrib/dev/acpica/components/utilities/utownerid.c @@ -190,7 +190,7 @@ AcpiUtAllocateOwnerId ( if (*OwnerId) { ACPI_ERROR ((AE_INFO, - "Owner ID [0x%2.2X] already exists", *OwnerId)); + "Owner ID [0x%3.3X] already exists", *OwnerId)); return_ACPI_STATUS (AE_ALREADY_EXISTS); } @@ -246,13 +246,13 @@ AcpiUtAllocateOwnerId ( /* * Construct encoded ID from the index and bit position * - * Note: Last [j].k (bit 255) is never used and is marked + * Note: Last [j].k (bit 4095) is never used and is marked * permanently allocated (prevents +1 overflow) */ *OwnerId = (ACPI_OWNER_ID) ((k + 1) + ACPI_MUL_32 (j)); ACPI_DEBUG_PRINT ((ACPI_DB_VALUES, - "Allocated OwnerId: %2.2X\n", (unsigned int) *OwnerId)); + "Allocated OwnerId: 0x%3.3X\n", (unsigned int) *OwnerId)); goto Exit; } } @@ -272,7 +272,7 @@ AcpiUtAllocateOwnerId ( */ Status = AE_OWNER_ID_LIMIT; ACPI_ERROR ((AE_INFO, - "Could not allocate new OwnerId (255 max), AE_OWNER_ID_LIMIT")); + "Could not allocate new OwnerId (4095 max), AE_OWNER_ID_LIMIT")); Exit: (void) AcpiUtReleaseMutex (ACPI_MTX_CACHES); @@ -315,7 +315,7 @@ AcpiUtReleaseOwnerId ( if (OwnerId == 0) { - ACPI_ERROR ((AE_INFO, "Invalid OwnerId: 0x%2.2X", OwnerId)); + ACPI_ERROR ((AE_INFO, "Invalid OwnerId: 0x%3.3X", OwnerId)); return_VOID; } @@ -345,7 +345,7 @@ AcpiUtReleaseOwnerId ( else { ACPI_ERROR ((AE_INFO, - "Release of non-allocated OwnerId: 0x%2.2X", OwnerId + 1)); + "Attempted release of non-allocated OwnerId: 0x%3.3X", OwnerId + 1)); } (void) AcpiUtReleaseMutex (ACPI_MTX_CACHES); diff --git a/sys/contrib/dev/acpica/components/utilities/uttrack.c b/sys/contrib/dev/acpica/components/utilities/uttrack.c index 2d81fc144a2e..25d1306574ee 100644 --- a/sys/contrib/dev/acpica/components/utilities/uttrack.c +++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/include/acconfig.h b/sys/contrib/dev/acpica/include/acconfig.h index e93cfe1eafae..50bfe0b9a771 100644 --- a/sys/contrib/dev/acpica/include/acconfig.h +++ b/sys/contrib/dev/acpica/include/acconfig.h @@ -239,9 +239,9 @@ #define ACPI_DEFAULT_PAGE_SIZE 4096 /* Must be power of 2 */ -/* OwnerId tracking. 8 entries allows for 255 OwnerIds */ +/* OwnerId tracking. 128 entries allows for 4095 OwnerIds */ -#define ACPI_NUM_OWNERID_MASKS 8 +#define ACPI_NUM_OWNERID_MASKS 128 /* Size of the root table array is increased by this increment */ diff --git a/sys/contrib/dev/acpica/include/acdebug.h b/sys/contrib/dev/acpica/include/acdebug.h index ec9d485f02de..131b31460467 100644 --- a/sys/contrib/dev/acpica/include/acdebug.h +++ b/sys/contrib/dev/acpica/include/acdebug.h @@ -392,6 +392,10 @@ void AcpiDbGetBusInfo ( void); +ACPI_STATUS +AcpiDbDisplayFields ( + UINT32 AddressSpaceId); + /* * dbdisply - debug display commands diff --git a/sys/contrib/dev/acpica/include/aclocal.h b/sys/contrib/dev/acpica/include/aclocal.h index e1ed00531356..c3703c152a44 100644 --- a/sys/contrib/dev/acpica/include/aclocal.h +++ b/sys/contrib/dev/acpica/include/aclocal.h @@ -295,12 +295,12 @@ typedef struct acpi_namespace_node union acpi_operand_object *Object; /* Interpreter object */ UINT8 DescriptorType; /* Differentiate object descriptor types */ UINT8 Type; /* ACPI Type associated with this name */ - UINT8 Flags; /* Miscellaneous flags */ - ACPI_OWNER_ID OwnerId; /* Node creator */ + UINT16 Flags; /* Miscellaneous flags */ ACPI_NAME_UNION Name; /* ACPI Name, always 4 chars per ACPI spec */ struct acpi_namespace_node *Parent; /* Parent node */ struct acpi_namespace_node *Child; /* First child */ struct acpi_namespace_node *Peer; /* First peer */ + ACPI_OWNER_ID OwnerId; /* Node creator */ /* * The following fields are used by the ASL compiler and disassembler only diff --git a/sys/contrib/dev/acpica/include/acobject.h b/sys/contrib/dev/acpica/include/acobject.h index b9b30200e9ec..74feb8d93da9 100644 --- a/sys/contrib/dev/acpica/include/acobject.h +++ b/sys/contrib/dev/acpica/include/acobject.h @@ -333,8 +333,8 @@ typedef struct acpi_object_method } Dispatch; UINT32 AmlLength; - UINT8 ThreadCount; ACPI_OWNER_ID OwnerId; + UINT8 ThreadCount; } ACPI_OBJECT_METHOD; diff --git a/sys/contrib/dev/acpica/include/acpiosxf.h b/sys/contrib/dev/acpica/include/acpiosxf.h index 0299d66ac357..795ca6bd306e 100644 --- a/sys/contrib/dev/acpica/include/acpiosxf.h +++ b/sys/contrib/dev/acpica/include/acpiosxf.h @@ -577,6 +577,7 @@ AcpiOsEnterSleep ( * Debug print routines */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPrintf +ACPI_PRINTF_LIKE (1) void ACPI_INTERNAL_VAR_XFACE AcpiOsPrintf ( const char *Format, diff --git a/sys/contrib/dev/acpica/include/acpixf.h b/sys/contrib/dev/acpica/include/acpixf.h index 3e6682766ef7..e87e3c737795 100644 --- a/sys/contrib/dev/acpica/include/acpixf.h +++ b/sys/contrib/dev/acpica/include/acpixf.h @@ -154,7 +154,7 @@ /* Current ACPICA subsystem version in YYYYMMDD format */ -#define ACPI_CA_VERSION 0x20190703 +#define ACPI_CA_VERSION 0x20191018 #include <contrib/dev/acpica/include/acconfig.h> #include <contrib/dev/acpica/include/actypes.h> @@ -446,6 +446,9 @@ ACPI_GLOBAL (BOOLEAN, AcpiGbl_SystemAwakeAndRunning); #define ACPI_HW_DEPENDENT_RETURN_OK(Prototype) \ ACPI_EXTERNAL_RETURN_OK(Prototype) +#define ACPI_HW_DEPENDENT_RETURN_UINT32(prototype) \ + ACPI_EXTERNAL_RETURN_UINT32(prototype) + #define ACPI_HW_DEPENDENT_RETURN_VOID(Prototype) \ ACPI_EXTERNAL_RETURN_VOID(Prototype) @@ -456,6 +459,9 @@ ACPI_GLOBAL (BOOLEAN, AcpiGbl_SystemAwakeAndRunning); #define ACPI_HW_DEPENDENT_RETURN_OK(Prototype) \ static ACPI_INLINE Prototype {return(AE_OK);} +#define ACPI_HW_DEPENDENT_RETURN_UINT32(prototype) \ + static ACPI_INLINE prototype {return(0);} + #define ACPI_HW_DEPENDENT_RETURN_VOID(Prototype) \ static ACPI_INLINE Prototype {return;} @@ -658,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 @@ -1076,6 +1088,12 @@ AcpiGetGpeStatus ( UINT32 GpeNumber, ACPI_EVENT_STATUS *EventStatus)) +ACPI_HW_DEPENDENT_RETURN_UINT32 ( +UINT32 +AcpiDispatchGpe ( + ACPI_HANDLE GpeDevice, + UINT32 GpeNumber)) + ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiDisableAllGpes ( diff --git a/sys/contrib/dev/acpica/include/acstruct.h b/sys/contrib/dev/acpica/include/acstruct.h index a0b63ec40937..e6ab1d907412 100644 --- a/sys/contrib/dev/acpica/include/acstruct.h +++ b/sys/contrib/dev/acpica/include/acstruct.h @@ -327,9 +327,9 @@ typedef struct acpi_evaluate_info UINT32 ReturnFlags; /* Used for return value analysis */ UINT32 ReturnBtype; /* Bitmapped type of the returned object */ UINT16 ParamCount; /* Count of the input argument list */ + UINT16 NodeFlags; /* Same as Node->Flags */ UINT8 PassNumber; /* Parser pass number */ UINT8 ReturnObjectType; /* Object type of the returned object */ - UINT8 NodeFlags; /* Same as Node->Flags */ UINT8 Flags; /* General flags */ } ACPI_EVALUATE_INFO; @@ -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/sys/contrib/dev/acpica/include/actypes.h b/sys/contrib/dev/acpica/include/actypes.h index e7a2d57804e2..0521f3353e67 100644 --- a/sys/contrib/dev/acpica/include/actypes.h +++ b/sys/contrib/dev/acpica/include/actypes.h @@ -591,8 +591,8 @@ typedef void * ACPI_HANDLE; /* Actually a ptr to a N /* Owner IDs are used to track namespace nodes for selective deletion */ -typedef UINT8 ACPI_OWNER_ID; -#define ACPI_OWNER_ID_MAX 0xFF +typedef UINT16 ACPI_OWNER_ID; +#define ACPI_OWNER_ID_MAX 0xFFF /* 4095 possible owner IDs */ #define ACPI_INTEGER_BIT_SIZE 64 @@ -657,7 +657,7 @@ typedef UINT64 ACPI_INTEGER; /* Pointer/Integer type conversions */ -#define ACPI_TO_POINTER(i) ACPI_ADD_PTR (void, (void *) 0, (ACPI_SIZE) (i)) +#define ACPI_TO_POINTER(i) ACPI_CAST_PTR (void, (ACPI_SIZE) (i)) #define ACPI_TO_INTEGER(p) ACPI_PTR_DIFF (p, (void *) 0) #define ACPI_OFFSET(d, f) ACPI_PTR_DIFF (&(((d *) 0)->f), (void *) 0) #define ACPI_PHYSADDR_TO_PTR(i) ACPI_TO_POINTER(i) @@ -1513,12 +1513,14 @@ typedef enum #define ACPI_OSI_WIN_VISTA_SP2 0x0A #define ACPI_OSI_WIN_7 0x0B #define ACPI_OSI_WIN_8 0x0C -#define ACPI_OSI_WIN_10 0x0D -#define ACPI_OSI_WIN_10_RS1 0x0E -#define ACPI_OSI_WIN_10_RS2 0x0F -#define ACPI_OSI_WIN_10_RS3 0x10 -#define ACPI_OSI_WIN_10_RS4 0x11 -#define ACPI_OSI_WIN_10_RS5 0x12 +#define ACPI_OSI_WIN_8_1 0x0D +#define ACPI_OSI_WIN_10 0x0E +#define ACPI_OSI_WIN_10_RS1 0x0F +#define ACPI_OSI_WIN_10_RS2 0x10 +#define ACPI_OSI_WIN_10_RS3 0x11 +#define ACPI_OSI_WIN_10_RS4 0x12 +#define ACPI_OSI_WIN_10_RS5 0x13 +#define ACPI_OSI_WIN_10_19H1 0x14 /* Definitions of getopt */ diff --git a/sys/contrib/dev/acpica/include/acutils.h b/sys/contrib/dev/acpica/include/acutils.h index e5673e1067c2..9a23cd28851d 100644 --- a/sys/contrib/dev/acpica/include/acutils.h +++ b/sys/contrib/dev/acpica/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 /* @@ -1194,30 +1195,33 @@ AcpiUtDeleteAddressLists ( /* * utxferror - various error/warning output functions */ +ACPI_PRINTF_LIKE(5) void ACPI_INTERNAL_VAR_XFACE AcpiUtPredefinedWarning ( const char *ModuleName, UINT32 LineNumber, char *Pathname, - UINT8 NodeFlags, + UINT16 NodeFlags, const char *Format, ...); +ACPI_PRINTF_LIKE(5) void ACPI_INTERNAL_VAR_XFACE AcpiUtPredefinedInfo ( const char *ModuleName, UINT32 LineNumber, char *Pathname, - UINT8 NodeFlags, + UINT16 NodeFlags, const char *Format, ...); +ACPI_PRINTF_LIKE(5) void ACPI_INTERNAL_VAR_XFACE AcpiUtPredefinedBiosError ( const char *ModuleName, UINT32 LineNumber, char *Pathname, - UINT8 NodeFlags, + UINT16 NodeFlags, const char *Format, ...); |