diff options
Diffstat (limited to 'sys/contrib/dev/acpica/compiler')
44 files changed, 1890 insertions, 892 deletions
diff --git a/sys/contrib/dev/acpica/compiler/aslallocate.c b/sys/contrib/dev/acpica/compiler/aslallocate.c new file mode 100644 index 000000000000..e83a01f422ab --- /dev/null +++ b/sys/contrib/dev/acpica/compiler/aslallocate.c @@ -0,0 +1,303 @@ +/****************************************************************************** + * + * Module Name: aslallocate -- Local memory allocation + * + *****************************************************************************/ + +/****************************************************************************** + * + * 1. Copyright Notice + * + * Some or all of this work - Copyright (c) 1999 - 2017, 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> + +/* + * Local heap allocation wrappers. See aslcache.c for allocation from local + * cache alloctions + */ + + +/******************************************************************************* + * + * FUNCTION: UtLocalCalloc + * + * PARAMETERS: Size - Bytes to be allocated + * + * RETURN: Pointer to the allocated memory. If this function returns + * (the compiler is not aborted), the pointer is guaranteed to + * be valid. + * + * DESCRIPTION: Allocate zero-initialized memory. The point of this function + * is to abort the compile on an allocation failure, on the + * assumption that nothing more can be accomplished. + * + * NOTE: For allocation from the local caches, see aslcache.c + * + ******************************************************************************/ + +void * +UtLocalCalloc ( + UINT32 Size) +{ + void *Allocated; + + + Allocated = ACPI_ALLOCATE_ZEROED (Size); + if (!Allocated) + { + AslCommonError (ASL_ERROR, ASL_MSG_MEMORY_ALLOCATION, + Gbl_CurrentLineNumber, Gbl_LogicalLineNumber, + Gbl_InputByteCount, Gbl_CurrentColumn, + Gbl_Files[ASL_FILE_INPUT].Filename, NULL); + + CmCleanupAndExit (); + exit (1); + } + + TotalAllocations++; + TotalAllocated += Size; + return (Allocated); +} + + +/****************************************************************************** + * + * FUNCTION: UtExpandLineBuffers + * + * PARAMETERS: None. Updates global line buffer pointers. + * + * RETURN: None. Reallocates the global line buffers + * + * DESCRIPTION: Called if the current line buffer becomes filled. Reallocates + * all global line buffers and updates Gbl_LineBufferSize. NOTE: + * Also used for the initial allocation of the buffers, when + * all of the buffer pointers are NULL. Initial allocations are + * of size ASL_DEFAULT_LINE_BUFFER_SIZE + * + *****************************************************************************/ + +void +UtExpandLineBuffers ( + void) +{ + UINT32 NewSize; + + + /* Attempt to double the size of all line buffers */ + + NewSize = Gbl_LineBufferSize * 2; + if (Gbl_CurrentLineBuffer) + { + DbgPrint (ASL_DEBUG_OUTPUT, + "Increasing line buffer size from %u to %u\n", + Gbl_LineBufferSize, NewSize); + } + + UtReallocLineBuffers (&Gbl_CurrentLineBuffer, Gbl_LineBufferSize, NewSize); + UtReallocLineBuffers (&Gbl_MainTokenBuffer, Gbl_LineBufferSize, NewSize); + UtReallocLineBuffers (&Gbl_MacroTokenBuffer, Gbl_LineBufferSize, NewSize); + UtReallocLineBuffers (&Gbl_ExpressionTokenBuffer, Gbl_LineBufferSize, NewSize); + + Gbl_LineBufPtr = Gbl_CurrentLineBuffer; + Gbl_LineBufferSize = NewSize; +} + + +/****************************************************************************** + * + * FUNCTION: UtReallocLineBuffers + * + * PARAMETERS: Buffer - Buffer to realloc + * OldSize - Old size of Buffer + * NewSize - New size of Buffer + * + * RETURN: none + * + * DESCRIPTION: Reallocate and initialize Buffer + * + *****************************************************************************/ + +void +UtReallocLineBuffers ( + char **Buffer, + UINT32 OldSize, + UINT32 NewSize) +{ + + *Buffer = realloc (*Buffer, NewSize); + if (*Buffer) + { + memset (*Buffer + OldSize, 0, NewSize - OldSize); + return; + } + + printf ("Could not increase line buffer size from %u to %u\n", + OldSize, NewSize); + + AslError (ASL_ERROR, ASL_MSG_BUFFER_ALLOCATION, NULL, NULL); + AslAbort (); +} + + +/****************************************************************************** + * + * FUNCTION: UtFreeLineBuffers + * + * PARAMETERS: None + * + * RETURN: None + * + * DESCRIPTION: Free all line buffers + * + *****************************************************************************/ + +void +UtFreeLineBuffers ( + void) +{ + + free (Gbl_CurrentLineBuffer); + free (Gbl_MainTokenBuffer); + free (Gbl_MacroTokenBuffer); + free (Gbl_ExpressionTokenBuffer); +} diff --git a/sys/contrib/dev/acpica/compiler/aslcache.c b/sys/contrib/dev/acpica/compiler/aslcache.c new file mode 100644 index 000000000000..1e54a2fa8d7c --- /dev/null +++ b/sys/contrib/dev/acpica/compiler/aslcache.c @@ -0,0 +1,481 @@ +/****************************************************************************** + * + * Module Name: aslcache -- Local cache support for iASL + * + *****************************************************************************/ + +/****************************************************************************** + * + * 1. Copyright Notice + * + * Some or all of this work - Copyright (c) 1999 - 2017, 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> + +/* + * Local caches. The caches are fully deleted after the compilation/disassembly + * of each individual input file. Thus, individual allocations from the cache + * memory do not need to be freed or even released back into the cache. + * + * See aslallocate.c for standard heap allocations. + */ + + +/******************************************************************************* + * + * FUNCTION: UtLocalCacheCalloc + * + * PARAMETERS: Length - Size of buffer requested + * + * RETURN: Pointer to the buffer. Aborts compiler on allocation failure + * + * DESCRIPTION: Allocate a string buffer. Bypass the local + * dynamic memory manager for performance reasons (This has a + * major impact on the speed of the compiler.) + * + ******************************************************************************/ + +char * +UtLocalCacheCalloc ( + UINT32 Length) +{ + char *Buffer; + ASL_CACHE_INFO *Cache; + UINT32 CacheSize = ASL_STRING_CACHE_SIZE; + + + if (Length > CacheSize) + { + CacheSize = Length; + + if (Gbl_StringCacheList) + { + Cache = UtLocalCalloc (sizeof (Cache->Next) + CacheSize); + + /* Link new cache buffer just following head of list */ + + Cache->Next = Gbl_StringCacheList->Next; + Gbl_StringCacheList->Next = Cache; + + /* Leave cache management pointers alone as they pertain to head */ + + Gbl_StringCount++; + Gbl_StringSize += Length; + + return (Cache->Buffer); + } + } + + if ((Gbl_StringCacheNext + Length) >= Gbl_StringCacheLast) + { + /* Allocate a new buffer */ + + Cache = UtLocalCalloc (sizeof (Cache->Next) + CacheSize); + + /* Link new cache buffer to head of list */ + + Cache->Next = Gbl_StringCacheList; + Gbl_StringCacheList = Cache; + + /* Setup cache management pointers */ + + Gbl_StringCacheNext = Cache->Buffer; + Gbl_StringCacheLast = Gbl_StringCacheNext + CacheSize; + } + + Gbl_StringCount++; + Gbl_StringSize += Length; + + Buffer = Gbl_StringCacheNext; + Gbl_StringCacheNext += Length; + return (Buffer); +} + + +/******************************************************************************* + * + * FUNCTION: UtParseOpCacheCalloc + * + * PARAMETERS: None + * + * RETURN: New parse op. Aborts on allocation failure + * + * DESCRIPTION: Allocate a new parse op for the parse tree. Bypass the local + * dynamic memory manager for performance reasons (This has a + * major impact on the speed of the compiler.) + * + ******************************************************************************/ + +ACPI_PARSE_OBJECT * +UtParseOpCacheCalloc ( + void) +{ + ASL_CACHE_INFO *Cache; + + + if (Gbl_ParseOpCacheNext >= Gbl_ParseOpCacheLast) + { + /* Allocate a new buffer */ + + Cache = UtLocalCalloc (sizeof (Cache->Next) + + (sizeof (ACPI_PARSE_OBJECT) * ASL_PARSEOP_CACHE_SIZE)); + + /* Link new cache buffer to head of list */ + + Cache->Next = Gbl_ParseOpCacheList; + Gbl_ParseOpCacheList = Cache; + + /* Setup cache management pointers */ + + Gbl_ParseOpCacheNext = ACPI_CAST_PTR (ACPI_PARSE_OBJECT, Cache->Buffer); + Gbl_ParseOpCacheLast = Gbl_ParseOpCacheNext + ASL_PARSEOP_CACHE_SIZE; + } + + Gbl_ParseOpCount++; + return (Gbl_ParseOpCacheNext++); +} + + +/******************************************************************************* + * + * FUNCTION: UtSubtableCacheCalloc - Data Table compiler + * + * PARAMETERS: None + * + * RETURN: Pointer to the buffer. Aborts on allocation failure + * + * DESCRIPTION: Allocate a subtable object buffer. Bypass the local + * dynamic memory manager for performance reasons (This has a + * major impact on the speed of the compiler.) + * + ******************************************************************************/ + +DT_SUBTABLE * +UtSubtableCacheCalloc ( + void) +{ + ASL_CACHE_INFO *Cache; + + + if (Gbl_SubtableCacheNext >= Gbl_SubtableCacheLast) + { + /* Allocate a new buffer */ + + Cache = UtLocalCalloc (sizeof (Cache->Next) + + (sizeof (DT_SUBTABLE) * ASL_SUBTABLE_CACHE_SIZE)); + + /* Link new cache buffer to head of list */ + + Cache->Next = Gbl_SubtableCacheList; + Gbl_SubtableCacheList = Cache; + + /* Setup cache management pointers */ + + Gbl_SubtableCacheNext = ACPI_CAST_PTR (DT_SUBTABLE, Cache->Buffer); + Gbl_SubtableCacheLast = Gbl_SubtableCacheNext + ASL_SUBTABLE_CACHE_SIZE; + } + + Gbl_SubtableCount++; + return (Gbl_SubtableCacheNext++); +} + + +/******************************************************************************* + * + * FUNCTION: UtFieldCacheCalloc - Data Table compiler + * + * PARAMETERS: None + * + * RETURN: Pointer to the buffer. Aborts on allocation failure + * + * DESCRIPTION: Allocate a field object buffer. Bypass the local + * dynamic memory manager for performance reasons (This has a + * major impact on the speed of the compiler.) + * + ******************************************************************************/ + +DT_FIELD * +UtFieldCacheCalloc ( + void) +{ + ASL_CACHE_INFO *Cache; + + + if (Gbl_FieldCacheNext >= Gbl_FieldCacheLast) + { + /* Allocate a new buffer */ + + Cache = UtLocalCalloc (sizeof (Cache->Next) + + (sizeof (DT_FIELD) * ASL_FIELD_CACHE_SIZE)); + + /* Link new cache buffer to head of list */ + + Cache->Next = Gbl_FieldCacheList; + Gbl_FieldCacheList = Cache; + + /* Setup cache management pointers */ + + Gbl_FieldCacheNext = ACPI_CAST_PTR (DT_FIELD, Cache->Buffer); + Gbl_FieldCacheLast = Gbl_FieldCacheNext + ASL_FIELD_CACHE_SIZE; + } + + Gbl_FieldCount++; + return (Gbl_FieldCacheNext++); +} + + +/******************************************************************************* + * + * FUNCTION: UtDeleteLocalCaches + * + * PARAMETERS: None + * + * RETURN: None + * + * DESCRIPTION: Delete all local cache buffer blocks + * + ******************************************************************************/ + +void +UtDeleteLocalCaches ( + void) +{ + UINT32 BufferCount; + ASL_CACHE_INFO *Next; + + + /* + * Generic cache, arbitrary size allocations + */ + BufferCount = 0; + while (Gbl_StringCacheList) + { + Next = Gbl_StringCacheList->Next; + ACPI_FREE (Gbl_StringCacheList); + Gbl_StringCacheList = Next; + BufferCount++; + } + + DbgPrint (ASL_DEBUG_OUTPUT, + "%u Strings (%u bytes), Buffer size: %u bytes, %u Buffers\n", + Gbl_StringCount, Gbl_StringSize, ASL_STRING_CACHE_SIZE, BufferCount); + + /* Reset cache globals */ + + Gbl_StringSize = 0; + Gbl_StringCount = 0; + Gbl_StringCacheNext = NULL; + Gbl_StringCacheLast = NULL; + + + /* + * Parse Op cache + */ + BufferCount = 0; + while (Gbl_ParseOpCacheList) + { + Next = Gbl_ParseOpCacheList->Next; + ACPI_FREE (Gbl_ParseOpCacheList); + Gbl_ParseOpCacheList = Next; + BufferCount++; + } + + DbgPrint (ASL_DEBUG_OUTPUT, + "%u ParseOps, Buffer size: %u ops (%u bytes), %u Buffers\n", + Gbl_ParseOpCount, ASL_PARSEOP_CACHE_SIZE, + (sizeof (ACPI_PARSE_OBJECT) * ASL_PARSEOP_CACHE_SIZE), BufferCount); + + /* Reset cache globals */ + + Gbl_ParseOpCount = 0; + Gbl_ParseOpCacheNext = NULL; + Gbl_ParseOpCacheLast = NULL; + Gbl_ParseTreeRoot = NULL; + + + /* + * Table Compiler - Field cache + */ + BufferCount = 0; + while (Gbl_FieldCacheList) + { + Next = Gbl_FieldCacheList->Next; + ACPI_FREE (Gbl_FieldCacheList); + Gbl_FieldCacheList = Next; + BufferCount++; + } + + DbgPrint (ASL_DEBUG_OUTPUT, + "%u Fields, Buffer size: %u fields (%u bytes), %u Buffers\n", + Gbl_FieldCount, ASL_FIELD_CACHE_SIZE, + (sizeof (DT_FIELD) * ASL_FIELD_CACHE_SIZE), BufferCount); + + /* Reset cache globals */ + + Gbl_FieldCount = 0; + Gbl_FieldCacheNext = NULL; + Gbl_FieldCacheLast = NULL; + + + /* + * Table Compiler - Subtable cache + */ + BufferCount = 0; + while (Gbl_SubtableCacheList) + { + Next = Gbl_SubtableCacheList->Next; + ACPI_FREE (Gbl_SubtableCacheList); + Gbl_SubtableCacheList = Next; + BufferCount++; + } + + DbgPrint (ASL_DEBUG_OUTPUT, + "%u Subtables, Buffer size: %u subtables (%u bytes), %u Buffers\n", + Gbl_SubtableCount, ASL_SUBTABLE_CACHE_SIZE, + (sizeof (DT_SUBTABLE) * ASL_SUBTABLE_CACHE_SIZE), BufferCount); + + /* Reset cache globals */ + + Gbl_SubtableCount = 0; + Gbl_SubtableCacheNext = NULL; + Gbl_SubtableCacheLast = NULL; +} diff --git a/sys/contrib/dev/acpica/compiler/aslcompile.c b/sys/contrib/dev/acpica/compiler/aslcompile.c index 5bd460def46b..826ae12f189b 100644 --- a/sys/contrib/dev/acpica/compiler/aslcompile.c +++ b/sys/contrib/dev/acpica/compiler/aslcompile.c @@ -150,7 +150,6 @@ *****************************************************************************/ #include <contrib/dev/acpica/compiler/aslcompiler.h> -#include <contrib/dev/acpica/compiler/dtcompiler.h> #include <contrib/dev/acpica/include/acnamesp.h> #include <stdio.h> @@ -932,70 +931,7 @@ CmCleanupAndExit ( if (!Gbl_DoAslConversion) { - CmDeleteCaches (); + UtDeleteLocalCaches (); } } - - -/******************************************************************************* - * - * FUNCTION: CmDeleteCaches - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Delete all local cache buffer blocks - * - ******************************************************************************/ - -void -CmDeleteCaches ( - void) -{ - UINT32 BufferCount; - ASL_CACHE_INFO *Next; - - - /* Parse Op cache */ - - BufferCount = 0; - while (Gbl_ParseOpCacheList) - { - Next = Gbl_ParseOpCacheList->Next; - ACPI_FREE (Gbl_ParseOpCacheList); - Gbl_ParseOpCacheList = Next; - BufferCount++; - } - - DbgPrint (ASL_DEBUG_OUTPUT, - "%u ParseOps, Buffer size: %u ops (%u bytes), %u Buffers\n", - Gbl_ParseOpCount, ASL_PARSEOP_CACHE_SIZE, - (sizeof (ACPI_PARSE_OBJECT) * ASL_PARSEOP_CACHE_SIZE), BufferCount); - - Gbl_ParseOpCount = 0; - Gbl_ParseOpCacheNext = NULL; - Gbl_ParseOpCacheLast = NULL; - Gbl_ParseTreeRoot = NULL; - - /* Generic string cache */ - - BufferCount = 0; - while (Gbl_StringCacheList) - { - Next = Gbl_StringCacheList->Next; - ACPI_FREE (Gbl_StringCacheList); - Gbl_StringCacheList = Next; - BufferCount++; - } - - DbgPrint (ASL_DEBUG_OUTPUT, - "%u Strings (%u bytes), Buffer size: %u bytes, %u Buffers\n", - Gbl_StringCount, Gbl_StringSize, ASL_STRING_CACHE_SIZE, BufferCount); - - Gbl_StringSize = 0; - Gbl_StringCount = 0; - Gbl_StringCacheNext = NULL; - Gbl_StringCacheLast = NULL; -} diff --git a/sys/contrib/dev/acpica/compiler/aslcompiler.h b/sys/contrib/dev/acpica/compiler/aslcompiler.h index fd7e7dbfee95..96bfc979c9f3 100644 --- a/sys/contrib/dev/acpica/compiler/aslcompiler.h +++ b/sys/contrib/dev/acpica/compiler/aslcompiler.h @@ -181,6 +181,7 @@ #include <contrib/dev/acpica/compiler/aslmessages.h> #include <contrib/dev/acpica/compiler/aslglobal.h> #include <contrib/dev/acpica/compiler/preprocess.h> +#include <contrib/dev/acpica/compiler/dtcompiler.h> /******************************************************************************* @@ -265,8 +266,50 @@ void CmCleanupAndExit ( void); + +/* + * aslallocate - memory allocation + */ +void * +UtLocalCalloc ( + UINT32 Size); + +void +UtExpandLineBuffers ( + void); + +void +UtReallocLineBuffers ( + char **Buffer, + UINT32 OldSize, + UINT32 NewSize); + +void +UtFreeLineBuffers ( + void); + + +/* + * aslcache - local cache support + */ +char * +UtLocalCacheCalloc ( + UINT32 Length); + +ACPI_PARSE_OBJECT * +UtParseOpCacheCalloc ( + void); + +DT_SUBTABLE * +UtSubtableCacheCalloc ( + void); + +DT_FIELD * +UtFieldCacheCalloc ( + void); + void -CmDeleteCaches ( +UtDeleteLocalCaches ( void); @@ -407,6 +450,16 @@ AslAbort ( void); void +AslDualParseOpError ( + UINT8 Level, + UINT16 MainMessageId, + ACPI_PARSE_OBJECT *MainOp, + char *MainMessage, + UINT16 SecondMessageId, + ACPI_PARSE_OBJECT *SecondOp, + char *SecondaryMessage); + +void AslError ( UINT8 Level, UINT16 MessageId, @@ -1150,10 +1203,6 @@ void UtEndEvent ( UINT8 Event); -void * -UtLocalCalloc ( - UINT32 Size); - void UtDisplaySummary ( UINT32 FileId); @@ -1176,18 +1225,6 @@ void UtSetParseOpName ( ACPI_PARSE_OBJECT *Op); -char * -UtStringCacheCalloc ( - UINT32 Length); - -void -UtExpandLineBuffers ( - void); - -void -UtFreeLineBuffers ( - void); - ACPI_STATUS UtInternalizeName ( char *ExternalName, diff --git a/sys/contrib/dev/acpica/compiler/aslcompiler.l b/sys/contrib/dev/acpica/compiler/aslcompiler.l index 9a1a8d1e99e7..38fe15a2c922 100644 --- a/sys/contrib/dev/acpica/compiler/aslcompiler.l +++ b/sys/contrib/dev/acpica/compiler/aslcompiler.l @@ -813,7 +813,7 @@ NamePathTail [.]{NameSeg} {NameSeg} { char *s; count (0); - s=UtStringCacheCalloc (ACPI_NAME_SIZE + 1); + s=UtLocalCacheCalloc (ACPI_NAME_SIZE + 1); if (strcmp (AslCompilertext, "\\")) { strcpy (s, "____"); @@ -826,7 +826,7 @@ NamePathTail [.]{NameSeg} {NameString} { char *s; count (0); - s=UtStringCacheCalloc (strlen (AslCompilertext)+1); + s=UtLocalCacheCalloc (strlen (AslCompilertext)+1); AcpiUtStrupr (AslCompilertext); strcpy (s, AslCompilertext); AslCompilerlval.s = s; diff --git a/sys/contrib/dev/acpica/compiler/asldebug.c b/sys/contrib/dev/acpica/compiler/asldebug.c index 780d584fca2b..2129fc977f7c 100644 --- a/sys/contrib/dev/acpica/compiler/asldebug.c +++ b/sys/contrib/dev/acpica/compiler/asldebug.c @@ -356,7 +356,7 @@ UtCreateEscapeSequences ( /* New string buffer, 3 extra chars per escape (4 total) */ - OutString = UtLocalCalloc (InStringLength + (EscapeCount * 3)); + OutString = UtLocalCacheCalloc (InStringLength + (EscapeCount * 3)); OutStringPtr = OutString; /* Convert non-ascii or non-printable chars to escape sequences */ diff --git a/sys/contrib/dev/acpica/compiler/aslerror.c b/sys/contrib/dev/acpica/compiler/aslerror.c index 013826e79bc7..f8c6c98d860b 100644 --- a/sys/contrib/dev/acpica/compiler/aslerror.c +++ b/sys/contrib/dev/acpica/compiler/aslerror.c @@ -170,6 +170,37 @@ AslIsExceptionDisabled ( UINT8 Level, UINT16 MessageId); +static void AslInitEnode ( + ASL_ERROR_MSG **Enode, + UINT8 Level, + UINT16 MessageId, + UINT32 LineNumber, + UINT32 LogicalLineNumber, + UINT32 LogicalByteOffset, + UINT32 Column, + char *Filename, + char *Message, + char *SourceLine, + ASL_ERROR_MSG *SubError); + +static void +AslLogNewError ( + UINT8 Level, + UINT16 MessageId, + UINT32 LineNumber, + UINT32 LogicalLineNumber, + UINT32 LogicalByteOffset, + UINT32 Column, + char *Filename, + char *Message, + char *SourceLine, + ASL_ERROR_MSG *SubError); + +static void +AePrintSubError ( + FILE *OutputFile, + ASL_ERROR_MSG *Enode); + /******************************************************************************* * @@ -220,6 +251,7 @@ AeClearErrorLog ( ASL_ERROR_MSG *Enode = Gbl_ErrorLog; ASL_ERROR_MSG *Next; + /* Walk the error node list */ while (Enode) @@ -270,8 +302,7 @@ AeAddToErrorLog ( Prev = NULL; Next = Gbl_ErrorLog; - while ((Next) && - (Next->LogicalLineNumber <= Enode->LogicalLineNumber)) + while ((Next) && (Next->LogicalLineNumber <= Enode->LogicalLineNumber)) { Prev = Next; Next = Next->Next; @@ -294,94 +325,143 @@ AeAddToErrorLog ( /******************************************************************************* * - * FUNCTION: AePrintException + * FUNCTION: AeDecodeErrorMessageId * - * PARAMETERS: FileId - ID of output file + * PARAMETERS: OutputFile - Output file * Enode - Error node to print - * Header - Additional text before each message + * PrematureEOF - True = PrematureEOF has been reached + * Total - Total legth of line * * RETURN: None * - * DESCRIPTION: Print the contents of an error node. - * - * NOTE: We don't use the FlxxxFile I/O functions here because on error - * they abort the compiler and call this function! Since we - * are reporting errors here, we ignore most output errors and - * just try to get out as much as we can. + * DESCRIPTION: Print the source line of an error. * ******************************************************************************/ -void -AePrintException ( - UINT32 FileId, +static void +AeDecodeErrorMessageId ( + FILE *OutputFile, ASL_ERROR_MSG *Enode, - char *Header) + BOOLEAN PrematureEOF, + UINT32 Total) { - UINT8 SourceByte; - int Actual; - size_t RActual; UINT32 MsgLength; const char *MainMessage; char *ExtraMessage; UINT32 SourceColumn; UINT32 ErrorColumn; - FILE *OutputFile; - FILE *SourceFile = NULL; - long FileSize; - BOOLEAN PrematureEOF = FALSE; - UINT32 Total = 0; - if (Gbl_NoErrors) + fprintf (OutputFile, "%s %4.4d -", + AeDecodeExceptionLevel (Enode->Level), + AeBuildFullExceptionCode (Enode->Level, Enode->MessageId)); + + MainMessage = AeDecodeMessageId (Enode->MessageId); + ExtraMessage = Enode->Message; + + /* If a NULL line number, just print the decoded message */ + + if (!Enode->LineNumber) { + fprintf (OutputFile, " %s %s\n\n", MainMessage, ExtraMessage); return; } - /* - * Only listing files have a header, and remarks/optimizations - * are always output - */ - if (!Header) + MsgLength = strlen (MainMessage); + if (MsgLength == 0) { - /* Ignore remarks if requested */ + /* Use the secondary/extra message as main message */ - switch (Enode->Level) + MainMessage = Enode->Message; + if (!MainMessage) { - case ASL_WARNING: - case ASL_WARNING2: - case ASL_WARNING3: + MainMessage = ""; + } - if (!Gbl_DisplayWarnings) - { - return; - } - break; + MsgLength = strlen (MainMessage); + ExtraMessage = NULL; + } - case ASL_REMARK: + if (Gbl_VerboseErrors && !PrematureEOF) + { + if (Total >= 256) + { + fprintf (OutputFile, " %s", + MainMessage); + } + else + { + SourceColumn = Enode->Column + Enode->FilenameLength + 6 + 2; + ErrorColumn = ASL_ERROR_LEVEL_LENGTH + 5 + 2 + 1; - if (!Gbl_DisplayRemarks) + if ((MsgLength + ErrorColumn) < (SourceColumn - 1)) { - return; + fprintf (OutputFile, "%*s%s", + (int) ((SourceColumn - 1) - ErrorColumn), + MainMessage, " ^ "); } - break; - - case ASL_OPTIMIZATION: - - if (!Gbl_DisplayOptimizations) + else { - return; + fprintf (OutputFile, "%*s %s", + (int) ((SourceColumn - ErrorColumn) + 1), "^", + MainMessage); } - break; + } + } + else + { + fprintf (OutputFile, " %s", MainMessage); + } - default: + /* Print the extra info message if present */ - break; - } + if (ExtraMessage) + { + fprintf (OutputFile, " (%s)", ExtraMessage); } - /* Get the various required file handles */ + if (PrematureEOF) + { + fprintf (OutputFile, " and premature End-Of-File"); + } + + fprintf (OutputFile, "\n"); + if (Gbl_VerboseErrors && !Enode->SubError) + { + fprintf (OutputFile, "\n"); + } +} + + +/******************************************************************************* + * + * FUNCTION: AePrintErrorSourceLine + * + * PARAMETERS: OutputFile - Output file + * Enode - Error node to print + * PrematureEOF - True = PrematureEOF has been reached + * Total - amount of characters printed so far + * + * + * RETURN: Status + * + * DESCRIPTION: Print the source line of an error. + * + ******************************************************************************/ + +static ACPI_STATUS +AePrintErrorSourceLine ( + FILE *OutputFile, + ASL_ERROR_MSG *Enode, + BOOLEAN *PrematureEOF, + UINT32 *Total) +{ + UINT8 SourceByte; + int Actual; + size_t RActual; + FILE *SourceFile = NULL; + long FileSize; - OutputFile = Gbl_Files[FileId].Handle; if (!Enode->SourceLine) { @@ -404,213 +484,272 @@ AePrintException ( if ((long) Enode->LogicalByteOffset >= FileSize) { - PrematureEOF = TRUE; + *PrematureEOF = TRUE; } } - } - - if (Header) - { - fprintf (OutputFile, "%s", Header); + else + { + fprintf (OutputFile, + "[*** iASL: Source File Does not exist ***]\n"); + return AE_IO_ERROR; + } } /* Print filename and line number if present and valid */ - if (Enode->Filename) + if (Gbl_VerboseErrors) { - if (Gbl_VerboseErrors) + fprintf (OutputFile, "%-8s", Enode->Filename); + + if (Enode->SourceLine && Enode->LineNumber) + { + fprintf (OutputFile, " %6u: %s", + Enode->LineNumber, Enode->SourceLine); + } + else if (Enode->LineNumber) { - fprintf (OutputFile, "%-8s", Enode->Filename); + fprintf (OutputFile, " %6u: ", Enode->LineNumber); - if (Enode->LineNumber) + /* + * If not at EOF, get the corresponding source code line + * and display it. Don't attempt this if we have a + * premature EOF condition. + */ + if (*PrematureEOF) { - if (Enode->SourceLine) - { - fprintf (OutputFile, " %6u: %s", - Enode->LineNumber, Enode->SourceLine); - } - else + fprintf (OutputFile, "\n"); + return AE_OK; + } + /* + * Seek to the offset in the combined source file, + * read the source line, and write it to the output. + */ + Actual = fseek (SourceFile, + (long) Enode->LogicalByteOffset, (int) SEEK_SET); + if (Actual) + { + fprintf (OutputFile, + "[*** iASL: Seek error on source code temp file %s ***]", + Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename); + + fprintf (OutputFile, "\n"); + return AE_OK; + } + RActual = fread (&SourceByte, 1, 1, SourceFile); + if (RActual != 1) + { + fprintf (OutputFile, + "[*** iASL: Read error on source code temp file %s ***]", + Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename); + return AE_IO_ERROR; + } + /* Read/write the source line, up to the maximum line length */ + + while (RActual && SourceByte && (SourceByte != '\n')) + { + if (*Total < 256) { - fprintf (OutputFile, " %6u: ", Enode->LineNumber); - - /* - * If not at EOF, get the corresponding source code line - * and display it. Don't attempt this if we have a - * premature EOF condition. - */ - if (!PrematureEOF) + /* After the max line length, we will just read the line, no write */ + + if (fwrite (&SourceByte, 1, 1, OutputFile) != 1) { - /* - * Seek to the offset in the combined source file, - * read the source line, and write it to the output. - */ - Actual = fseek (SourceFile, - (long) Enode->LogicalByteOffset, (int) SEEK_SET); - if (Actual) - { - fprintf (OutputFile, - "[*** iASL: Seek error on source code temp file %s ***]", - Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename); - } - else - { - RActual = fread (&SourceByte, 1, 1, SourceFile); - if (RActual != 1) - { - fprintf (OutputFile, - "[*** iASL: Read error on source code temp file %s ***]", - Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename); - } - else - { - /* Read/write the source line, up to the maximum line length */ - - while (RActual && SourceByte && (SourceByte != '\n')) - { - if (Total < 256) - { - /* After the max line length, we will just read the line, no write */ - - if (fwrite (&SourceByte, 1, 1, OutputFile) != 1) - { - printf ("[*** iASL: Write error on output file ***]\n"); - return; - } - } - else if (Total == 256) - { - fprintf (OutputFile, - "\n[*** iASL: Very long input line, message below refers to column %u ***]", - Enode->Column); - } - - RActual = fread (&SourceByte, 1, 1, SourceFile); - if (RActual != 1) - { - fprintf (OutputFile, - "[*** iASL: Read error on source code temp file %s ***]", - Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename); - return; - } - Total++; - } - } - } + printf ("[*** iASL: Write error on output file ***]\n"); + return AE_IO_ERROR; } + } + else if (*Total == 256) + { + fprintf (OutputFile, + "\n[*** iASL: Very long input line, message below refers to column %u ***]", + Enode->Column); + } + + RActual = fread (&SourceByte, 1, 1, SourceFile); + if (RActual != 1) + { + fprintf (OutputFile, + "[*** iASL: Read error on source code temp file %s ***]", + Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename); - fprintf (OutputFile, "\n"); + return AE_IO_ERROR; } + *Total += 1; } - } - else - { - /* - * Less verbose version of the error message, enabled via the - * -vi switch. The format is compatible with MS Visual Studio. - */ - fprintf (OutputFile, "%s", Enode->Filename); - if (Enode->LineNumber) - { - fprintf (OutputFile, "(%u) : ", - Enode->LineNumber); - } + fprintf (OutputFile, "\n"); } } - - /* If a NULL message ID, just print the raw message */ - - if (Enode->MessageId == 0) + else { - fprintf (OutputFile, "%s\n", Enode->Message); - return; + /* + * Less verbose version of the error message, enabled via the + * -vi switch. The format is compatible with MS Visual Studio. + */ + fprintf (OutputFile, "%s", Enode->Filename); + + if (Enode->LineNumber) + { + fprintf (OutputFile, "(%u) : ", + Enode->LineNumber); + } } - /* Decode the message ID */ + return AE_OK; +} - fprintf (OutputFile, "%s %4.4d -", - AeDecodeExceptionLevel (Enode->Level), - AeBuildFullExceptionCode (Enode->Level, Enode->MessageId)); +/******************************************************************************* + * + * FUNCTION: AePrintException + * + * PARAMETERS: FileId - ID of output file + * Enode - Error node to print + * Header - Additional text before each message + * + * RETURN: None + * + * DESCRIPTION: Print the contents of an error node. + * + * NOTE: We don't use the FlxxxFile I/O functions here because on error + * they abort the compiler and call this function! Since we + * are reporting errors here, we ignore most output errors and + * just try to get out as much as we can. + * + ******************************************************************************/ - MainMessage = AeDecodeMessageId (Enode->MessageId); - ExtraMessage = Enode->Message; +void +AePrintException ( + UINT32 FileId, + ASL_ERROR_MSG *Enode, + char *Header) +{ + FILE *OutputFile; + BOOLEAN PrematureEOF = FALSE; + UINT32 Total = 0; + ACPI_STATUS Status; + ASL_ERROR_MSG *Child = Enode->SubError; - /* If a NULL line number, just print the decoded message */ - if (!Enode->LineNumber) + if (Gbl_NoErrors) { - fprintf (OutputFile, " %s %s\n\n", MainMessage, ExtraMessage); return; } - MsgLength = strlen (MainMessage); - if (MsgLength == 0) + /* + * Only listing files have a header, and remarks/optimizations + * are always output + */ + if (!Header) { - /* Use the secondary/extra message as main message */ + /* Ignore remarks if requested */ - MainMessage = Enode->Message; - if (!MainMessage) + switch (Enode->Level) { - MainMessage = ""; - } + case ASL_WARNING: + case ASL_WARNING2: + case ASL_WARNING3: - MsgLength = strlen (MainMessage); - ExtraMessage = NULL; - } + if (!Gbl_DisplayWarnings) + { + return; + } + break; - if (Gbl_VerboseErrors && !PrematureEOF) - { - if (Total >= 256) - { - fprintf (OutputFile, " %s", - MainMessage); - } - else - { - SourceColumn = Enode->Column + Enode->FilenameLength + 6 + 2; - ErrorColumn = ASL_ERROR_LEVEL_LENGTH + 5 + 2 + 1; + case ASL_REMARK: - if ((MsgLength + ErrorColumn) < (SourceColumn - 1)) + if (!Gbl_DisplayRemarks) { - fprintf (OutputFile, "%*s%s", - (int) ((SourceColumn - 1) - ErrorColumn), - MainMessage, " ^ "); + return; } - else + break; + + case ASL_OPTIMIZATION: + + if (!Gbl_DisplayOptimizations) { - fprintf (OutputFile, "%*s %s", - (int) ((SourceColumn - ErrorColumn) + 1), "^", - MainMessage); + return; } + break; + + default: + + break; } } - else + + /* Get the various required file handles */ + + OutputFile = Gbl_Files[FileId].Handle; + + if (Header) { - fprintf (OutputFile, " %s", MainMessage); + fprintf (OutputFile, "%s", Header); } - /* Print the extra info message if present */ + if (!Enode->Filename) + { + AeDecodeErrorMessageId (OutputFile, Enode, PrematureEOF, Total); + return; + } - if (ExtraMessage) + Status = AePrintErrorSourceLine (OutputFile, Enode, &PrematureEOF, &Total); + if (ACPI_FAILURE (Status)) { - fprintf (OutputFile, " (%s)", ExtraMessage); + return; } - if (PrematureEOF) + /* If a NULL message ID, just print the raw message */ + + if (Enode->MessageId == 0) { - fprintf (OutputFile, " and premature End-Of-File"); + fprintf (OutputFile, "%s\n", Enode->Message); + return; } - fprintf (OutputFile, "\n"); - if (Gbl_VerboseErrors) + AeDecodeErrorMessageId (OutputFile, Enode, PrematureEOF, Total); + + while (Child) { fprintf (OutputFile, "\n"); + AePrintSubError (OutputFile, Child); + Child = Child->SubError; } } /******************************************************************************* * + * FUNCTION: AePrintSubError + * + * PARAMETERS: OutputFile - Output file + * Enode - Error node to print + * + * RETURN: None + * + * DESCRIPTION: Print the contents of an error nodes. This function is tailored + * to print error nodes that are SubErrors within ASL_ERROR_MSG + * + ******************************************************************************/ + +static void +AePrintSubError ( + FILE *OutputFile, + ASL_ERROR_MSG *Enode) +{ + UINT32 Total = 0; + BOOLEAN PrematureEOF = FALSE; + const char *MainMessage; + + + MainMessage = AeDecodeMessageId (Enode->MessageId); + + fprintf (OutputFile, " %s%s", MainMessage, "\n "); + (void) AePrintErrorSourceLine (OutputFile, Enode, &PrematureEOF, &Total); + fprintf (OutputFile, "\n"); +} + + +/******************************************************************************* + * * FUNCTION: AePrintErrorLog * * PARAMETERS: FileId - Where to output the error log @@ -640,54 +779,72 @@ AePrintErrorLog ( /******************************************************************************* * - * FUNCTION: AslCommonError2 + * FUNCTION: AslInitEnode * - * PARAMETERS: Level - Seriousness (Warning/error, etc.) + * PARAMETERS: InputEnode - Input Error node to initialize + * Level - Seriousness (Warning/error, etc.) * MessageId - Index into global message buffer - * LineNumber - Actual file line number + * CurrentLineNumber - Actual file line number + * LogicalLineNumber - Cumulative line number + * LogicalByteOffset - Byte offset in source file * Column - Column in current line - * SourceLine - Actual source code line * Filename - source filename * ExtraMessage - additional error message + * SourceLine - Line of error source code + * SubError - SubError of this InputEnode * * RETURN: None * - * DESCRIPTION: Create a new error node and add it to the error log + * DESCRIPTION: Initialize an Error node * ******************************************************************************/ -void -AslCommonError2 ( +static void AslInitEnode ( + ASL_ERROR_MSG **InputEnode, UINT8 Level, UINT16 MessageId, UINT32 LineNumber, + UINT32 LogicalLineNumber, + UINT32 LogicalByteOffset, UINT32 Column, - char *SourceLine, char *Filename, - char *ExtraMessage) + char *ExtraMessage, + char *SourceLine, + ASL_ERROR_MSG *SubError) { - char *MessageBuffer = NULL; - char *LineBuffer; ASL_ERROR_MSG *Enode; - Enode = UtLocalCalloc (sizeof (ASL_ERROR_MSG)); + *InputEnode = UtLocalCalloc (sizeof (ASL_ERROR_MSG)); + Enode = *InputEnode; + Enode->Level = Level; + Enode->MessageId = MessageId; + Enode->LineNumber = LineNumber; + Enode->LogicalLineNumber = LogicalLineNumber; + Enode->LogicalByteOffset = LogicalByteOffset; + Enode->Column = Column; + Enode->SubError = SubError; + Enode->Message = NULL; + Enode->SourceLine = NULL; + Enode->Filename = NULL; if (ExtraMessage) { /* Allocate a buffer for the message and a new error node */ - MessageBuffer = UtStringCacheCalloc (strlen (ExtraMessage) + 1); + Enode->Message = UtLocalCacheCalloc (strlen (ExtraMessage) + 1); /* Keep a copy of the extra message */ - strcpy (MessageBuffer, ExtraMessage); + strcpy (Enode->Message, ExtraMessage); } - LineBuffer = UtLocalCalloc (strlen (SourceLine) + 1); - strcpy (LineBuffer, SourceLine); + if (SourceLine) + { + Enode->SourceLine = UtLocalCalloc (strlen (SourceLine) + 1); + strcpy (Enode->SourceLine, SourceLine); + } - /* Initialize the error node */ if (Filename) { @@ -698,28 +855,39 @@ AslCommonError2 ( Enode->FilenameLength = 6; } } +} - Enode->MessageId = MessageId; - Enode->Level = Level; - Enode->LineNumber = LineNumber; - Enode->LogicalLineNumber = LineNumber; - Enode->LogicalByteOffset = 0; - Enode->Column = Column; - Enode->Message = MessageBuffer; - Enode->SourceLine = LineBuffer; - - /* Add the new node to the error node list */ - - AeAddToErrorLog (Enode); - - if (Gbl_DebugFlag) - { - /* stderr is a file, send error to it immediately */ - AePrintException (ASL_FILE_STDERR, Enode, NULL); - } +/******************************************************************************* + * + * FUNCTION: AslCommonError2 + * + * PARAMETERS: Level - Seriousness (Warning/error, etc.) + * MessageId - Index into global message buffer + * LineNumber - Actual file line number + * Column - Column in current line + * SourceLine - Actual source code line + * Filename - source filename + * ExtraMessage - additional error message + * + * RETURN: None + * + * DESCRIPTION: Create a new error node and add it to the error log + * + ******************************************************************************/ - Gbl_ExceptionCount[Level]++; +void +AslCommonError2 ( + UINT8 Level, + UINT16 MessageId, + UINT32 LineNumber, + UINT32 Column, + char *SourceLine, + char *Filename, + char *ExtraMessage) +{ + AslLogNewError (Level, MessageId, LineNumber, LineNumber, 0, Column, + Filename, ExtraMessage, SourceLine, NULL); } @@ -753,48 +921,51 @@ AslCommonError ( char *Filename, char *ExtraMessage) { - char *MessageBuffer = NULL; - ASL_ERROR_MSG *Enode; - - - if (AslIsExceptionIgnored (Level, MessageId)) - { - return; - } - - Enode = UtLocalCalloc (sizeof (ASL_ERROR_MSG)); - - if (ExtraMessage) - { - /* Allocate a buffer for the message and a new error node */ - - MessageBuffer = UtStringCacheCalloc (strlen (ExtraMessage) + 1); - - /* Keep a copy of the extra message */ + AslLogNewError (Level, MessageId, CurrentLineNumber, LogicalLineNumber, + LogicalByteOffset, Column, Filename, ExtraMessage, + NULL, NULL); +} - strcpy (MessageBuffer, ExtraMessage); - } - /* Initialize the error node */ +/******************************************************************************* + * + * FUNCTION: AslLogNewError + * + * PARAMETERS: Level - Seriousness (Warning/error, etc.) + * MessageId - Index into global message buffer + * CurrentLineNumber - Actual file line number + * LogicalLineNumber - Cumulative line number + * LogicalByteOffset - Byte offset in source file + * Column - Column in current line + * Filename - source filename + * Message - additional error message + * SourceLine - Actual line of source code + * SubError - Sub-error associated with this error + * + * RETURN: None + * + * DESCRIPTION: Create a new error node and add it to the error log + * + ******************************************************************************/ +static void +AslLogNewError ( + UINT8 Level, + UINT16 MessageId, + UINT32 LineNumber, + UINT32 LogicalLineNumber, + UINT32 LogicalByteOffset, + UINT32 Column, + char *Filename, + char *Message, + char *SourceLine, + ASL_ERROR_MSG *SubError) +{ + ASL_ERROR_MSG *Enode = NULL; - if (Filename) - { - Enode->Filename = Filename; - Enode->FilenameLength = strlen (Filename); - if (Enode->FilenameLength < 6) - { - Enode->FilenameLength = 6; - } - } - Enode->MessageId = MessageId; - Enode->Level = Level; - Enode->LineNumber = CurrentLineNumber; - Enode->LogicalLineNumber = LogicalLineNumber; - Enode->LogicalByteOffset = LogicalByteOffset; - Enode->Column = Column; - Enode->Message = MessageBuffer; - Enode->SourceLine = NULL; + AslInitEnode (&Enode, Level, MessageId, LineNumber, LogicalLineNumber, + LogicalByteOffset, Column, Filename, Message, SourceLine, + SubError); /* Add the new node to the error node list */ @@ -825,8 +996,8 @@ AslCommonError ( * * FUNCTION: AslIsExceptionIgnored * - * PARAMETERS: Level - Seriousness (Warning/error, etc.) - * MessageId - Index into global message buffer + * PARAMETERS: Level - Seriousness (Warning/error, etc.) + * MessageId - Index into global message buffer * * RETURN: BOOLEAN * @@ -840,7 +1011,7 @@ AslIsExceptionIgnored ( UINT8 Level, UINT16 MessageId) { - BOOLEAN ExceptionIgnored; + BOOLEAN ExceptionIgnored; /* Note: this allows exception to be disabled and expected */ @@ -869,7 +1040,8 @@ void AslCheckExpectedExceptions ( void) { - UINT8 i; + UINT8 i; + for (i = 0; i < Gbl_ExpectedMessagesIndex; ++i) { @@ -980,8 +1152,8 @@ AslDisableException ( * * FUNCTION: AslIsExceptionDisabled * - * PARAMETERS: Level - Seriousness (Warning/error, etc.) - * MessageId - Index into global message buffer + * PARAMETERS: Level - Seriousness (Warning/error, etc.) + * MessageId - Index into global message buffer * * RETURN: TRUE if exception/message should be ignored * @@ -999,9 +1171,8 @@ AslIsExceptionExpected ( UINT32 i; - /* - * Mark this exception as received - */ + /* Mark this exception as received */ + EncodedMessageId = AeBuildFullExceptionCode (Level, MessageId); for (i = 0; i < Gbl_ExpectedMessagesIndex; i++) { @@ -1082,6 +1253,61 @@ AslIsExceptionDisabled ( /******************************************************************************* * + * FUNCTION: AslDualParseOpError + * + * PARAMETERS: Level - Seriousness (Warning/error, etc.) + * MainMsgId - Index into global message buffer + * MainOp - Parse node where error happened + * MainMsg - Message pertaining to the MainOp + * SubMsgId - Index into global message buffer + * SubOp - Additional parse node for better message + * SubMsg - Message pertainint to SubOp + * + * + * RETURN: None + * + * DESCRIPTION: Main error reporting routine for the ASL compiler for error + * messages that point to multiple parse objects. + * + ******************************************************************************/ + +void +AslDualParseOpError ( + UINT8 Level, + UINT16 MainMsgId, + ACPI_PARSE_OBJECT *MainOp, + char *MainMsg, + UINT16 SubMsgId, + ACPI_PARSE_OBJECT *SubOp, + char *SubMsg) +{ + ASL_ERROR_MSG *SubEnode = NULL; + + + /* Check if user wants to ignore this exception */ + + if (AslIsExceptionIgnored (Level, MainMsgId) || !MainOp) + { + return; + } + + if (SubOp) + { + AslInitEnode (&SubEnode, Level, SubMsgId, SubOp->Asl.LineNumber, + SubOp->Asl.LogicalLineNumber, SubOp->Asl.LogicalByteOffset, + SubOp->Asl.Column, SubOp->Asl.Filename, SubMsg, + NULL, NULL); + } + + AslLogNewError (Level, MainMsgId, MainOp->Asl.LineNumber, + MainOp->Asl.LogicalLineNumber, MainOp->Asl.LogicalByteOffset, + MainOp->Asl.Column, MainOp->Asl.Filename, MainMsg, + NULL, SubEnode); +} + + +/******************************************************************************* + * * FUNCTION: AslError * * PARAMETERS: Level - Seriousness (Warning/error, etc.) diff --git a/sys/contrib/dev/acpica/compiler/aslfiles.c b/sys/contrib/dev/acpica/compiler/aslfiles.c index 1ebfb9f48ff4..e5d6f85a0be3 100644 --- a/sys/contrib/dev/acpica/compiler/aslfiles.c +++ b/sys/contrib/dev/acpica/compiler/aslfiles.c @@ -151,7 +151,6 @@ #include <contrib/dev/acpica/compiler/aslcompiler.h> #include <contrib/dev/acpica/include/acapps.h> -#include <contrib/dev/acpica/compiler/dtcompiler.h> #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslfiles") @@ -326,14 +325,14 @@ FlMergePathnames ( (*FilePathname == '/') || (FilePathname[1] == ':')) { - Pathname = UtStringCacheCalloc (strlen (FilePathname) + 1); + Pathname = UtLocalCacheCalloc (strlen (FilePathname) + 1); strcpy (Pathname, FilePathname); goto ConvertBackslashes; } /* Need a local copy of the prefix directory path */ - CommonPath = UtStringCacheCalloc (strlen (PrefixDir) + 1); + CommonPath = UtLocalCacheCalloc (strlen (PrefixDir) + 1); strcpy (CommonPath, PrefixDir); /* @@ -369,7 +368,7 @@ FlMergePathnames ( /* Build the final merged pathname */ ConcatenatePaths: - Pathname = UtStringCacheCalloc ( + Pathname = UtLocalCacheCalloc ( strlen (CommonPath) + strlen (FilePathname) + 2); if (LastElement && *CommonPath) { diff --git a/sys/contrib/dev/acpica/compiler/aslhelp.c b/sys/contrib/dev/acpica/compiler/aslhelp.c index 1c0278c9833f..ed3a33298fa9 100644 --- a/sys/contrib/dev/acpica/compiler/aslhelp.c +++ b/sys/contrib/dev/acpica/compiler/aslhelp.c @@ -173,6 +173,7 @@ void Usage ( void) { + printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); printf ("%s\n\n", ASL_COMPLIANCE); ACPI_USAGE_HEADER ("iasl [Options] [Files]"); diff --git a/sys/contrib/dev/acpica/compiler/aslload.c b/sys/contrib/dev/acpica/compiler/aslload.c index 7480f232afb1..19864533267a 100644 --- a/sys/contrib/dev/acpica/compiler/aslload.c +++ b/sys/contrib/dev/acpica/compiler/aslload.c @@ -327,8 +327,9 @@ LdLoadFieldElements ( * The name already exists in this scope * But continue processing the elements */ - AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Child, - Child->Asl.Value.String); + AslDualParseOpError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Child, + Child->Asl.Value.String, ASL_MSG_FOUND_HERE, Node->Op, + Node->Op->Asl.ExternalName); } } else @@ -388,8 +389,10 @@ LdLoadResourceElements ( { /* Actual node causing the error was saved in ParentMethod */ - AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS, - (ACPI_PARSE_OBJECT *) Op->Asl.ParentMethod, Op->Asl.Namepath); + AslDualParseOpError (ASL_ERROR, ASL_MSG_NAME_EXISTS, + (ACPI_PARSE_OBJECT *) Op->Asl.ParentMethod, + Op->Asl.Namepath, ASL_MSG_FOUND_HERE, Node->Op, + Node->Op->Asl.ExternalName); return (AE_OK); } return (Status); @@ -805,8 +808,8 @@ LdNamespace1Begin ( /* * Allow one create on an object or segment that was * previously declared External only if WalkState->OwnerId and - * Node->OwnerId are found in different tables (meaning that - * they have differnt OwnerIds). + * Node->OwnerId are different (meaning that the current WalkState + * and the Node are in different tables). */ Node->Flags &= ~ANOBJ_IS_EXTERNAL; Node->Type = (UINT8) ObjectType; @@ -827,8 +830,9 @@ LdNamespace1Begin ( if (Node->OwnerId == WalkState->OwnerId && !(Node->Flags & IMPLICIT_EXTERNAL)) { - AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op, - Op->Asl.ExternalName); + AslDualParseOpError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op, + Op->Asl.ExternalName, ASL_MSG_FOUND_HERE, Node->Op, + Node->Op->Asl.ExternalName); } if (Node->Flags & IMPLICIT_EXTERNAL) { @@ -849,8 +853,9 @@ LdNamespace1Begin ( if (Node->OwnerId == WalkState->OwnerId) { - AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op, - Op->Asl.ExternalName); + AslDualParseOpError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op, + Op->Asl.ExternalName, ASL_MSG_FOUND_HERE, Node->Op, + Node->Op->Asl.ExternalName); } } else if ((Node->Flags & ANOBJ_IS_EXTERNAL) && @@ -905,8 +910,9 @@ LdNamespace1Begin ( { /* Valid error, object already exists */ - AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op, - Op->Asl.ExternalName); + AslDualParseOpError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op, + Op->Asl.ExternalName, ASL_MSG_FOUND_HERE, Node->Op, + Node->Op->Asl.ExternalName); return_ACPI_STATUS (AE_OK); } } diff --git a/sys/contrib/dev/acpica/compiler/aslmapenter.c b/sys/contrib/dev/acpica/compiler/aslmapenter.c index 6e391097eabb..8476654e40a0 100644 --- a/sys/contrib/dev/acpica/compiler/aslmapenter.c +++ b/sys/contrib/dev/acpica/compiler/aslmapenter.c @@ -332,7 +332,7 @@ MpCreateGpioInfo ( * sorted by both source device name and then the pin number. There is * one block per pin. */ - Buffer = UtStringCacheCalloc (sizeof (ACPI_GPIO_INFO)); + Buffer = UtLocalCacheCalloc (sizeof (ACPI_GPIO_INFO)); Info = ACPI_CAST_PTR (ACPI_GPIO_INFO, Buffer); NextGpio = Gbl_GpioList; @@ -409,7 +409,7 @@ MpCreateSerialInfo ( * Allocate a new info block and insert it into the global Serial list * sorted by both source device name and then the address. */ - Buffer = UtStringCacheCalloc (sizeof (ACPI_SERIAL_INFO)); + Buffer = UtLocalCacheCalloc (sizeof (ACPI_SERIAL_INFO)); Info = ACPI_CAST_PTR (ACPI_SERIAL_INFO, Buffer); NextSerial = Gbl_SerialList; diff --git a/sys/contrib/dev/acpica/compiler/aslmaputils.c b/sys/contrib/dev/acpica/compiler/aslmaputils.c index c17f090cea6b..37333041203e 100644 --- a/sys/contrib/dev/acpica/compiler/aslmaputils.c +++ b/sys/contrib/dev/acpica/compiler/aslmaputils.c @@ -212,7 +212,7 @@ MpGetHidFromParseTree ( /* Convert EISAID to a string */ - HidString = UtStringCacheCalloc (ACPI_EISAID_STRING_SIZE); + HidString = UtLocalCacheCalloc (ACPI_EISAID_STRING_SIZE); AcpiExEisaIdToString (HidString, Arg->Asl.Value.Integer); return (HidString); @@ -277,7 +277,7 @@ MpGetHidValue ( /* Convert EISAID to a string */ - HidString = UtStringCacheCalloc (ACPI_EISAID_STRING_SIZE); + HidString = UtLocalCacheCalloc (ACPI_EISAID_STRING_SIZE); AcpiExEisaIdToString (HidString, HidNode->Object->Integer.Value); return (HidString); diff --git a/sys/contrib/dev/acpica/compiler/aslmessages.c b/sys/contrib/dev/acpica/compiler/aslmessages.c index efe7e9945c91..1ced65479513 100644 --- a/sys/contrib/dev/acpica/compiler/aslmessages.c +++ b/sys/contrib/dev/acpica/compiler/aslmessages.c @@ -350,7 +350,9 @@ const char *AslCompilerMsgs [] = /* ASL_MSG_CONSTANT_REQUIRED */ "Non-reducible expression", /* ASL_MSG_CROSS_TABLE_SCOPE */ "Illegal open scope on external object from within DSDT", /* ASL_MSG_EXCEPTION_NOT_RECEIVED */ "Expected remark, warning, or error did not occur. Message ID:", -/* ASL_MSG_NULL_RESOURCE_TEMPLATE */ "Empty Resource Template (END_TAG only)" +/* ASL_MSG_NULL_RESOURCE_TEMPLATE */ "Empty Resource Template (END_TAG only)", +/* ASL_MSG_FOUND_HERE */ "Original name creation/declaration below: ", +/* ASL_MSG_ILLEGAL_RECURSION */ "Illegal recursive call to method that creates named objects" }; /* Table compiler */ diff --git a/sys/contrib/dev/acpica/compiler/aslmessages.h b/sys/contrib/dev/acpica/compiler/aslmessages.h index d69c05a176c6..a80184016ce1 100644 --- a/sys/contrib/dev/acpica/compiler/aslmessages.h +++ b/sys/contrib/dev/acpica/compiler/aslmessages.h @@ -353,6 +353,8 @@ typedef enum ASL_MSG_CROSS_TABLE_SCOPE, ASL_MSG_EXCEPTION_NOT_RECEIVED, ASL_MSG_NULL_RESOURCE_TEMPLATE, + ASL_MSG_FOUND_HERE, + ASL_MSG_ILLEGAL_RECURSION, /* These messages are used by the Data Table compiler only */ diff --git a/sys/contrib/dev/acpica/compiler/aslmethod.c b/sys/contrib/dev/acpica/compiler/aslmethod.c index a4b1c6f97f78..ca48bc82133f 100644 --- a/sys/contrib/dev/acpica/compiler/aslmethod.c +++ b/sys/contrib/dev/acpica/compiler/aslmethod.c @@ -347,10 +347,31 @@ MtMethodAnalysisWalkBegin ( case PARSEOP_METHODCALL: + /* Check for a recursive method call */ + if (MethodInfo && (Op->Asl.Node == MethodInfo->Op->Asl.Node)) { - AslError (ASL_REMARK, ASL_MSG_RECURSION, Op, Op->Asl.ExternalName); + if (MethodInfo->CreatesNamedObjects) + { + /* + * This is an error, as it will fail at runtime on all ACPI + * implementations. Any named object declarations will be + * executed twice, causing failure the second time. Note, + * this is independent of whether the method is declared + * Serialized, because the same thread is attempting to + * reenter the method, and this will always succeed. + */ + AslDualParseOpError (ASL_ERROR, ASL_MSG_ILLEGAL_RECURSION, Op, + Op->Asl.Value.String, ASL_MSG_FOUND_HERE, MethodInfo->Op, + MethodInfo->Op->Asl.ExternalName); + } + else + { + /* Method does not create objects, issue a remark */ + + AslError (ASL_REMARK, ASL_MSG_RECURSION, Op, Op->Asl.ExternalName); + } } break; @@ -622,20 +643,28 @@ MtCheckNamedObjectInMethod ( return; } - /* Determine if we are creating a named object */ + /* Determine if we are creating a named object within a method */ + + if (!MethodInfo) + { + return; + } OpInfo = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode); if (OpInfo->Class == AML_CLASS_NAMED_OBJECT) { /* - * If we have a named object created within a non-serialized method, - * emit a remark that the method should be serialized. + * 1) Mark the method as a method that creates named objects. + * + * 2) If the method is non-serialized, emit a remark that the method + * should be serialized. * * Reason: If a thread blocks within the method for any reason, and - * another thread enters the method, the method will fail because an - * attempt will be made to create the same object twice. + * another thread enters the method, the method will fail because + * an attempt will be made to create the same object twice. */ - if (MethodInfo && !MethodInfo->ShouldBeSerialized) + MethodInfo->CreatesNamedObjects = TRUE; + if (!MethodInfo->ShouldBeSerialized) { AslError (ASL_REMARK, ASL_MSG_SERIALIZED_REQUIRED, MethodInfo->Op, "due to creation of named objects within"); diff --git a/sys/contrib/dev/acpica/compiler/asloperands.c b/sys/contrib/dev/acpica/compiler/asloperands.c index 0a5f1443911e..c6e001fe49bf 100644 --- a/sys/contrib/dev/acpica/compiler/asloperands.c +++ b/sys/contrib/dev/acpica/compiler/asloperands.c @@ -1037,7 +1037,7 @@ OpnDoDefinitionBlock ( * We will use the AML filename that is embedded in the source file * for the output filename. */ - Filename = UtStringCacheCalloc (strlen (Gbl_DirectoryPath) + + Filename = UtLocalCacheCalloc (strlen (Gbl_DirectoryPath) + strlen ((char *) Child->Asl.Value.Buffer) + 1); /* Prepend the current directory path */ @@ -1094,7 +1094,7 @@ OpnDoDefinitionBlock ( if (Child->Asl.Value.String) { Length = strlen (Child->Asl.Value.String); - Gbl_TableId = UtStringCacheCalloc (Length + 1); + Gbl_TableId = UtLocalCacheCalloc (Length + 1); strcpy (Gbl_TableId, Child->Asl.Value.String); /* diff --git a/sys/contrib/dev/acpica/compiler/aslopt.c b/sys/contrib/dev/acpica/compiler/aslopt.c index 0019a07cbf42..6aaa386a59d8 100644 --- a/sys/contrib/dev/acpica/compiler/aslopt.c +++ b/sys/contrib/dev/acpica/compiler/aslopt.c @@ -275,7 +275,7 @@ OptSearchToRoot ( /* We must allocate a new string for the name (TargetPath gets deleted) */ - *NewPath = UtStringCacheCalloc (ACPI_NAME_SIZE + 1); + *NewPath = UtLocalCacheCalloc (ACPI_NAME_SIZE + 1); strcpy (*NewPath, Path); if (strncmp (*NewPath, "_T_", 3)) diff --git a/sys/contrib/dev/acpica/compiler/asloptions.c b/sys/contrib/dev/acpica/compiler/asloptions.c index a22949bb6317..45fe735e86d2 100644 --- a/sys/contrib/dev/acpica/compiler/asloptions.c +++ b/sys/contrib/dev/acpica/compiler/asloptions.c @@ -204,7 +204,6 @@ AslCommandLine ( if (argc < 2) { - printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); Usage (); exit (1); } @@ -538,7 +537,6 @@ AslDoOptions ( { case '^': - printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); Usage (); exit (0); diff --git a/sys/contrib/dev/acpica/compiler/aslparseop.c b/sys/contrib/dev/acpica/compiler/aslparseop.c index f23091bb62f0..7a8db74c72fc 100644 --- a/sys/contrib/dev/acpica/compiler/aslparseop.c +++ b/sys/contrib/dev/acpica/compiler/aslparseop.c @@ -158,13 +158,6 @@ ACPI_MODULE_NAME ("aslparseop") -/* Local prototypes */ - -static ACPI_PARSE_OBJECT * -TrGetOpFromCache ( - void); - - /******************************************************************************* * * FUNCTION: TrCreateOp @@ -490,7 +483,7 @@ TrCreateTargetOp ( return (NULL); } - Op = TrGetOpFromCache (); + Op = UtParseOpCacheCalloc (); /* Copy the pertinent values (omit link pointer fields) */ @@ -788,7 +781,7 @@ TrAllocateOp ( ACPI_PARSE_OBJECT *LatestOp; - Op = TrGetOpFromCache (); + Op = UtParseOpCacheCalloc (); Op->Asl.ParseOpcode = (UINT16) ParseOpcode; Op->Asl.Filename = Gbl_Files[ASL_FILE_INPUT].Filename; @@ -877,50 +870,6 @@ TrAllocateOp ( /******************************************************************************* * - * FUNCTION: TrGetOpFromCache - * - * PARAMETERS: None - * - * RETURN: New parse op. Aborts on allocation failure - * - * DESCRIPTION: Allocate a new parse op for the parse tree. Bypass the local - * dynamic memory manager for performance reasons (This has a - * major impact on the speed of the compiler.) - * - ******************************************************************************/ - -static ACPI_PARSE_OBJECT * -TrGetOpFromCache ( - void) -{ - ASL_CACHE_INFO *Cache; - - - if (Gbl_ParseOpCacheNext >= Gbl_ParseOpCacheLast) - { - /* Allocate a new buffer */ - - Cache = UtLocalCalloc (sizeof (Cache->Next) + - (sizeof (ACPI_PARSE_OBJECT) * ASL_PARSEOP_CACHE_SIZE)); - - /* Link new cache buffer to head of list */ - - Cache->Next = Gbl_ParseOpCacheList; - Gbl_ParseOpCacheList = Cache; - - /* Setup cache management pointers */ - - Gbl_ParseOpCacheNext = ACPI_CAST_PTR (ACPI_PARSE_OBJECT, Cache->Buffer); - Gbl_ParseOpCacheLast = Gbl_ParseOpCacheNext + ASL_PARSEOP_CACHE_SIZE; - } - - Gbl_ParseOpCount++; - return (Gbl_ParseOpCacheNext++); -} - - -/******************************************************************************* - * * FUNCTION: TrPrintOpFlags * * PARAMETERS: Flags - Flags word to be decoded diff --git a/sys/contrib/dev/acpica/compiler/aslprintf.c b/sys/contrib/dev/acpica/compiler/aslprintf.c index a626f24a232f..00e218d05df7 100644 --- a/sys/contrib/dev/acpica/compiler/aslprintf.c +++ b/sys/contrib/dev/acpica/compiler/aslprintf.c @@ -293,7 +293,7 @@ OpcParsePrintf ( if (StringToProcess) { - NewString = UtStringCacheCalloc (StringLength + 1); + NewString = UtLocalCacheCalloc (StringLength + 1); strncpy (NewString, StartPosition, StringLength); NewOp = TrAllocateOp (PARSEOP_STRING_LITERAL); @@ -382,7 +382,7 @@ OpcParsePrintf ( if (StringToProcess) { - NewString = UtStringCacheCalloc (StringLength + 1); + NewString = UtLocalCacheCalloc (StringLength + 1); strncpy (NewString, StartPosition, StringLength); NewOp = TrAllocateOp (PARSEOP_STRING_LITERAL); diff --git a/sys/contrib/dev/acpica/compiler/aslstartup.c b/sys/contrib/dev/acpica/compiler/aslstartup.c index 8ce0375d296c..df75e1b72701 100644 --- a/sys/contrib/dev/acpica/compiler/aslstartup.c +++ b/sys/contrib/dev/acpica/compiler/aslstartup.c @@ -410,7 +410,7 @@ AslDoDisassembly ( Gbl_Files[ASL_FILE_INPUT].Filename = NULL; - CmDeleteCaches (); + UtDeleteLocalCaches (); return (AE_OK); } @@ -453,7 +453,7 @@ AslDoOneFile ( /* Take a copy of the input filename, convert any backslashes */ Gbl_Files[ASL_FILE_INPUT].Filename = - UtStringCacheCalloc (strlen (Filename) + 1); + UtLocalCacheCalloc (strlen (Filename) + 1); strcpy (Gbl_Files[ASL_FILE_INPUT].Filename, Filename); UtConvertBackslashes (Gbl_Files[ASL_FILE_INPUT].Filename); diff --git a/sys/contrib/dev/acpica/compiler/aslsupport.l b/sys/contrib/dev/acpica/compiler/aslsupport.l index 42cee752a952..40cead33c3c5 100644 --- a/sys/contrib/dev/acpica/compiler/aslsupport.l +++ b/sys/contrib/dev/acpica/compiler/aslsupport.l @@ -382,7 +382,7 @@ AslPushInputFileStack ( /* Reset the global line count and filename */ Gbl_Files[ASL_FILE_INPUT].Filename = - UtStringCacheCalloc (strlen (Filename) + 1); + UtLocalCacheCalloc (strlen (Filename) + 1); strcpy (Gbl_Files[ASL_FILE_INPUT].Filename, Filename); @@ -1009,7 +1009,7 @@ CompletedString: */ *StringBuffer = 0; - CleanString = UtStringCacheCalloc (strlen (MsgBuffer) + 1); + CleanString = UtLocalCacheCalloc (strlen (MsgBuffer) + 1); strcpy (CleanString, MsgBuffer); AslCompilerlval.s = CleanString; return (TRUE); diff --git a/sys/contrib/dev/acpica/compiler/asltypes.h b/sys/contrib/dev/acpica/compiler/asltypes.h index e4250871fd12..f72226d5e0c9 100644 --- a/sys/contrib/dev/acpica/compiler/asltypes.h +++ b/sys/contrib/dev/acpica/compiler/asltypes.h @@ -202,6 +202,7 @@ typedef struct asl_method_info UINT8 ArgInitialized[ACPI_METHOD_NUM_ARGS]; UINT8 HasBeenTyped; UINT8 ShouldBeSerialized; + UINT8 CreatesNamedObjects; } ASL_METHOD_INFO; @@ -337,8 +338,11 @@ typedef struct asl_include_dir } ASL_INCLUDE_DIR; -/* An entry in the exception list, one for each error/warning */ - +/* + * An entry in the exception list, one for each error/warning + * Note: SubError nodes would be treated with the same messageId and Level + * as the parent error node. + */ typedef struct asl_error_msg { UINT32 LineNumber; @@ -347,6 +351,7 @@ typedef struct asl_error_msg UINT32 Column; char *Message; struct asl_error_msg *Next; + struct asl_error_msg *SubError; char *Filename; char *SourceLine; UINT32 FilenameLength; diff --git a/sys/contrib/dev/acpica/compiler/aslutils.c b/sys/contrib/dev/acpica/compiler/aslutils.c index e800970f8ef1..e34f21ee2c15 100644 --- a/sys/contrib/dev/acpica/compiler/aslutils.c +++ b/sys/contrib/dev/acpica/compiler/aslutils.c @@ -174,12 +174,6 @@ UtAttachNameseg ( ACPI_PARSE_OBJECT *Op, char *Name); -static void -UtReallocLineBuffers ( - char **Buffer, - UINT32 OldSize, - UINT32 NewSize); - /******************************************************************************* * @@ -311,45 +305,6 @@ UtDisplayConstantOpcodes ( /******************************************************************************* * - * FUNCTION: UtLocalCalloc - * - * PARAMETERS: Size - Bytes to be allocated - * - * RETURN: Pointer to the allocated memory. Guaranteed to be valid. - * - * DESCRIPTION: Allocate zero-initialized memory. Aborts the compile on an - * allocation failure, on the assumption that nothing more can be - * accomplished. - * - ******************************************************************************/ - -void * -UtLocalCalloc ( - UINT32 Size) -{ - void *Allocated; - - - Allocated = ACPI_ALLOCATE_ZEROED (Size); - if (!Allocated) - { - AslCommonError (ASL_ERROR, ASL_MSG_MEMORY_ALLOCATION, - Gbl_CurrentLineNumber, Gbl_LogicalLineNumber, - Gbl_InputByteCount, Gbl_CurrentColumn, - Gbl_Files[ASL_FILE_INPUT].Filename, NULL); - - CmCleanupAndExit (); - exit (1); - } - - TotalAllocations++; - TotalAllocated += Size; - return (Allocated); -} - - -/******************************************************************************* - * * FUNCTION: UtBeginEvent * * PARAMETERS: Name - Ascii name of this event @@ -637,180 +592,6 @@ UtCheckIntegerRange ( /******************************************************************************* * - * FUNCTION: UtStringCacheCalloc - * - * PARAMETERS: Length - Size of buffer requested - * - * RETURN: Pointer to the buffer. Aborts compiler on allocation failure - * - * DESCRIPTION: Allocate a string buffer. Bypass the local - * dynamic memory manager for performance reasons (This has a - * major impact on the speed of the compiler.) - * - ******************************************************************************/ - -char * -UtStringCacheCalloc ( - UINT32 Length) -{ - char *Buffer; - ASL_CACHE_INFO *Cache; - UINT32 CacheSize = ASL_STRING_CACHE_SIZE; - - - if (Length > CacheSize) - { - CacheSize = Length; - - if (Gbl_StringCacheList) - { - Cache = UtLocalCalloc (sizeof (Cache->Next) + CacheSize); - - /* Link new cache buffer just following head of list */ - - Cache->Next = Gbl_StringCacheList->Next; - Gbl_StringCacheList->Next = Cache; - - /* Leave cache management pointers alone as they pertain to head */ - - Gbl_StringCount++; - Gbl_StringSize += Length; - - return (Cache->Buffer); - } - } - - if ((Gbl_StringCacheNext + Length) >= Gbl_StringCacheLast) - { - /* Allocate a new buffer */ - - Cache = UtLocalCalloc (sizeof (Cache->Next) + CacheSize); - - /* Link new cache buffer to head of list */ - - Cache->Next = Gbl_StringCacheList; - Gbl_StringCacheList = Cache; - - /* Setup cache management pointers */ - - Gbl_StringCacheNext = Cache->Buffer; - Gbl_StringCacheLast = Gbl_StringCacheNext + CacheSize; - } - - Gbl_StringCount++; - Gbl_StringSize += Length; - - Buffer = Gbl_StringCacheNext; - Gbl_StringCacheNext += Length; - return (Buffer); -} - - -/****************************************************************************** - * - * FUNCTION: UtExpandLineBuffers - * - * PARAMETERS: None. Updates global line buffer pointers. - * - * RETURN: None. Reallocates the global line buffers - * - * DESCRIPTION: Called if the current line buffer becomes filled. Reallocates - * all global line buffers and updates Gbl_LineBufferSize. NOTE: - * Also used for the initial allocation of the buffers, when - * all of the buffer pointers are NULL. Initial allocations are - * of size ASL_DEFAULT_LINE_BUFFER_SIZE - * - *****************************************************************************/ - -void -UtExpandLineBuffers ( - void) -{ - UINT32 NewSize; - - - /* Attempt to double the size of all line buffers */ - - NewSize = Gbl_LineBufferSize * 2; - if (Gbl_CurrentLineBuffer) - { - DbgPrint (ASL_DEBUG_OUTPUT, - "Increasing line buffer size from %u to %u\n", - Gbl_LineBufferSize, NewSize); - } - - UtReallocLineBuffers (&Gbl_CurrentLineBuffer, Gbl_LineBufferSize, NewSize); - UtReallocLineBuffers (&Gbl_MainTokenBuffer, Gbl_LineBufferSize, NewSize); - UtReallocLineBuffers (&Gbl_MacroTokenBuffer, Gbl_LineBufferSize, NewSize); - UtReallocLineBuffers (&Gbl_ExpressionTokenBuffer, Gbl_LineBufferSize, NewSize); - - Gbl_LineBufPtr = Gbl_CurrentLineBuffer; - Gbl_LineBufferSize = NewSize; -} - - -/****************************************************************************** - * - * FUNCTION: UtReallocLineBuffers - * - * PARAMETERS: Buffer - Buffer to realloc - * OldSize - Old size of Buffer - * NewSize - New size of Buffer - * - * RETURN: none - * - * DESCRIPTION: Reallocate and initialize Buffer - * - *****************************************************************************/ - -static void -UtReallocLineBuffers ( - char **Buffer, - UINT32 OldSize, - UINT32 NewSize) -{ - - *Buffer = realloc (*Buffer, NewSize); - if (*Buffer) - { - memset (*Buffer + OldSize, 0, NewSize - OldSize); - return; - } - - printf ("Could not increase line buffer size from %u to %u\n", - OldSize, NewSize); - - AslError (ASL_ERROR, ASL_MSG_BUFFER_ALLOCATION, NULL, NULL); - AslAbort (); -} - - -/****************************************************************************** - * - * FUNCTION: UtFreeLineBuffers - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Free all line buffers - * - *****************************************************************************/ - -void -UtFreeLineBuffers ( - void) -{ - - free (Gbl_CurrentLineBuffer); - free (Gbl_MainTokenBuffer); - free (Gbl_MacroTokenBuffer); - free (Gbl_ExpressionTokenBuffer); -} - - -/******************************************************************************* - * * FUNCTION: UtInternalizeName * * PARAMETERS: ExternalName - Name to convert @@ -843,7 +624,7 @@ UtInternalizeName ( /* We need a segment to store the internal name */ - Info.InternalName = UtStringCacheCalloc (Info.Length); + Info.InternalName = UtLocalCacheCalloc (Info.Length); /* Build the name */ diff --git a/sys/contrib/dev/acpica/compiler/cvcompiler.c b/sys/contrib/dev/acpica/compiler/cvcompiler.c index 57eef4b682bb..0e9746a4d2cf 100644 --- a/sys/contrib/dev/acpica/compiler/cvcompiler.c +++ b/sys/contrib/dev/acpica/compiler/cvcompiler.c @@ -193,7 +193,7 @@ CvProcessComment ( *StringBuffer = 0; CvDbgPrint ("Multi-line comment\n"); - CommentString = UtStringCacheCalloc (strlen (MsgBuffer) + 1); + CommentString = UtLocalCacheCalloc (strlen (MsgBuffer) + 1); strcpy (CommentString, MsgBuffer); CvDbgPrint ("CommentString: %s\n", CommentString); @@ -208,7 +208,7 @@ CvProcessComment ( if (LineToken) { - FinalLineToken = UtStringCacheCalloc (strlen (LineToken) + 1); + FinalLineToken = UtLocalCacheCalloc (strlen (LineToken) + 1); strcpy (FinalLineToken, LineToken); /* Get rid of any carriage returns */ @@ -238,7 +238,7 @@ CvProcessComment ( } } - FinalLineToken = UtStringCacheCalloc (strlen (LineToken) + 1); + FinalLineToken = UtLocalCacheCalloc (strlen (LineToken) + 1); strcat (FinalLineToken, LineToken); /* Get rid of any carriage returns */ @@ -268,7 +268,7 @@ CvProcessComment ( * spacing. */ FinalCommentString = - UtStringCacheCalloc (strlen (CommentString) + + UtLocalCacheCalloc (strlen (CommentString) + CurrentState.SpacesBefore + 1); for (i = 0; (CurrentState.CommentType != ASL_COMMENT_STANDARD) && @@ -313,7 +313,7 @@ CvProcessCommentType2 ( { *StringBuffer = 0; /* null terminate */ CvDbgPrint ("Single-line comment\n"); - CommentString = UtStringCacheCalloc (strlen (MsgBuffer) + 1); + CommentString = UtLocalCacheCalloc (strlen (MsgBuffer) + 1); strcpy (CommentString, MsgBuffer); /* If this comment lies on the same line as the latest parse op, @@ -342,7 +342,7 @@ CvProcessCommentType2 ( * [ (spaces) (comment) ( * /) ('\0') ] * */ - FinalCommentString = UtStringCacheCalloc (CurrentState.SpacesBefore + + FinalCommentString = UtLocalCacheCalloc (CurrentState.SpacesBefore + strlen (CommentString) + 3 + 1); for (i = 0; (CurrentState.CommentType != 1) && @@ -507,7 +507,7 @@ CgWriteAmlDefBlockComment( /* First, print the file name comment after changing .asl to .dsl */ - NewFilename = UtStringCacheCalloc (strlen (Op->Asl.Filename)); + NewFilename = UtLocalCacheCalloc (strlen (Op->Asl.Filename)); strcpy (NewFilename, Op->Asl.Filename); DirectoryPosition = strrchr (NewFilename, '/'); Position = strrchr (NewFilename, '.'); @@ -944,7 +944,7 @@ CvAppendInlineComment ( Size = strlen (ToAdd); Size += strlen (InlineComment); - Str = UtStringCacheCalloc (Size + 1); + Str = UtLocalCacheCalloc (Size + 1); strcpy (Str, InlineComment); strcat (Str, ToAdd); diff --git a/sys/contrib/dev/acpica/compiler/cvparser.c b/sys/contrib/dev/acpica/compiler/cvparser.c index eb89c4638958..77cffd027bae 100644 --- a/sys/contrib/dev/acpica/compiler/cvparser.c +++ b/sys/contrib/dev/acpica/compiler/cvparser.c @@ -714,7 +714,7 @@ CvCaptureCommentsOnly ( UINT8 *Aml = ParserState->Aml; UINT16 Opcode = (UINT16) ACPI_GET8 (Aml); UINT32 Length = 0; - UINT8 CommentOption = (UINT16) ACPI_GET8 (Aml+1); + UINT8 CommentOption; BOOLEAN StdDefBlockFlag = FALSE; ACPI_COMMENT_NODE *CommentNode; ACPI_FILE_NODE *FileNode; diff --git a/sys/contrib/dev/acpica/compiler/dtcompile.c b/sys/contrib/dev/acpica/compiler/dtcompile.c index b3d4fe27a5ec..67607a5f08e7 100644 --- a/sys/contrib/dev/acpica/compiler/dtcompile.c +++ b/sys/contrib/dev/acpica/compiler/dtcompile.c @@ -152,7 +152,6 @@ #define _DECLARE_DT_GLOBALS #include <contrib/dev/acpica/compiler/aslcompiler.h> -#include <contrib/dev/acpica/compiler/dtcompiler.h> #define _COMPONENT DT_COMPILER ACPI_MODULE_NAME ("dtcompile") @@ -281,7 +280,6 @@ DtDoCompile ( CleanupAndExit: AcpiUtDeleteCaches (); - DtDeleteCaches (); CmCleanupAndExit (); return (Status); } @@ -412,7 +410,7 @@ DtCompileDataTable ( return (AE_ERROR); } - Gbl_Signature = UtStringCacheCalloc (strlen (Signature) + 1); + Gbl_Signature = UtLocalCacheCalloc (strlen (Signature) + 1); strcpy (Gbl_Signature, Signature); /* @@ -585,7 +583,7 @@ DtCompileTable ( if (Length > 0) { - String = UtStringCacheCalloc (Length); + String = UtLocalCacheCalloc (Length); Subtable->Buffer = ACPI_CAST_PTR (UINT8, String); } @@ -828,7 +826,7 @@ DtCompilePadding ( if (Length > 0) { - String = UtStringCacheCalloc (Length); + String = UtLocalCacheCalloc (Length); Subtable->Buffer = ACPI_CAST_PTR (UINT8, String); } diff --git a/sys/contrib/dev/acpica/compiler/dtcompiler.h b/sys/contrib/dev/acpica/compiler/dtcompiler.h index bf4a9a84b5ce..244784da83a9 100644 --- a/sys/contrib/dev/acpica/compiler/dtcompiler.h +++ b/sys/contrib/dev/acpica/compiler/dtcompiler.h @@ -154,7 +154,6 @@ #ifndef _DTCOMPILER #define _DTCOMPILER -#include <stdio.h> #include <contrib/dev/acpica/include/acdisasm.h> @@ -510,18 +509,6 @@ void DtSetTableLength( void); -DT_SUBTABLE * -UtSubtableCacheCalloc ( - void); - -DT_FIELD * -UtFieldCacheCalloc ( - void); - -void -DtDeleteCaches ( - void); - /* dttable - individual table compilation */ @@ -622,15 +609,19 @@ DtCompileNfit ( void **PFieldList); ACPI_STATUS -DtCompilePmtt ( +DtCompilePcct ( void **PFieldList); ACPI_STATUS -DtCompilePptt ( +DtCompilePdtt ( void **PFieldList); ACPI_STATUS -DtCompilePcct ( +DtCompilePmtt ( + void **PFieldList); + +ACPI_STATUS +DtCompilePptt ( void **PFieldList); ACPI_STATUS @@ -642,6 +633,10 @@ DtCompileS3pt ( DT_FIELD **PFieldList); ACPI_STATUS +DtCompileSdev ( + void **PFieldList); + +ACPI_STATUS DtCompileSlic ( void **PFieldList); @@ -662,6 +657,10 @@ DtCompileTcpa ( void **PFieldList); ACPI_STATUS +DtCompileTpm2 ( + void **PFieldList); + +ACPI_STATUS DtCompileUefi ( void **PFieldList); @@ -724,6 +723,7 @@ extern const unsigned char TemplateMsdm[]; extern const unsigned char TemplateMtmr[]; extern const unsigned char TemplateNfit[]; extern const unsigned char TemplatePcct[]; +extern const unsigned char TemplatePdtt[]; extern const unsigned char TemplatePmtt[]; extern const unsigned char TemplatePptt[]; extern const unsigned char TemplateRasf[]; @@ -731,6 +731,7 @@ extern const unsigned char TemplateRsdt[]; extern const unsigned char TemplateS3pt[]; extern const unsigned char TemplateSbst[]; extern const unsigned char TemplateSdei[]; +extern const unsigned char TemplateSdev[]; extern const unsigned char TemplateSlic[]; extern const unsigned char TemplateSlit[]; extern const unsigned char TemplateSpcr[]; diff --git a/sys/contrib/dev/acpica/compiler/dtexpress.c b/sys/contrib/dev/acpica/compiler/dtexpress.c index b5ba58b85b6e..68211c03def2 100644 --- a/sys/contrib/dev/acpica/compiler/dtexpress.c +++ b/sys/contrib/dev/acpica/compiler/dtexpress.c @@ -150,7 +150,6 @@ *****************************************************************************/ #include <contrib/dev/acpica/compiler/aslcompiler.h> -#include <contrib/dev/acpica/compiler/dtcompiler.h> #include "dtparser.y.h" #define _COMPONENT DT_COMPILER diff --git a/sys/contrib/dev/acpica/compiler/dtfield.c b/sys/contrib/dev/acpica/compiler/dtfield.c index b22a1ae7946b..96c3ea9b5bff 100644 --- a/sys/contrib/dev/acpica/compiler/dtfield.c +++ b/sys/contrib/dev/acpica/compiler/dtfield.c @@ -150,7 +150,6 @@ *****************************************************************************/ #include <contrib/dev/acpica/compiler/aslcompiler.h> -#include <contrib/dev/acpica/compiler/dtcompiler.h> #define _COMPONENT DT_COMPILER ACPI_MODULE_NAME ("dtfield") diff --git a/sys/contrib/dev/acpica/compiler/dtio.c b/sys/contrib/dev/acpica/compiler/dtio.c index 90015acc70bf..3b081a02dd12 100644 --- a/sys/contrib/dev/acpica/compiler/dtio.c +++ b/sys/contrib/dev/acpica/compiler/dtio.c @@ -150,7 +150,6 @@ *****************************************************************************/ #include <contrib/dev/acpica/compiler/aslcompiler.h> -#include <contrib/dev/acpica/compiler/dtcompiler.h> #include <contrib/dev/acpica/include/acapps.h> #define _COMPONENT DT_COMPILER @@ -239,7 +238,7 @@ DtTrim ( if (!strcmp (String, " ")) { - ReturnString = UtStringCacheCalloc (1); + ReturnString = UtLocalCacheCalloc (1); return (ReturnString); } @@ -287,7 +286,7 @@ DtTrim ( /* Create the trimmed return string */ Length = ACPI_PTR_DIFF (End, Start) + 1; - ReturnString = UtStringCacheCalloc (Length + 1); + ReturnString = UtLocalCacheCalloc (Length + 1); if (strlen (Start)) { strncpy (ReturnString, Start, Length); diff --git a/sys/contrib/dev/acpica/compiler/dtparser.y b/sys/contrib/dev/acpica/compiler/dtparser.y index 1d6cb8e8b806..38bc96922526 100644 --- a/sys/contrib/dev/acpica/compiler/dtparser.y +++ b/sys/contrib/dev/acpica/compiler/dtparser.y @@ -151,7 +151,6 @@ *****************************************************************************/ #include <contrib/dev/acpica/compiler/aslcompiler.h> -#include <contrib/dev/acpica/compiler/dtcompiler.h> #define _COMPONENT DT_COMPILER ACPI_MODULE_NAME ("dtparser") diff --git a/sys/contrib/dev/acpica/compiler/dtsubtable.c b/sys/contrib/dev/acpica/compiler/dtsubtable.c index d75fa927a072..a258a61eb5ca 100644 --- a/sys/contrib/dev/acpica/compiler/dtsubtable.c +++ b/sys/contrib/dev/acpica/compiler/dtsubtable.c @@ -150,7 +150,6 @@ *****************************************************************************/ #include <contrib/dev/acpica/compiler/aslcompiler.h> -#include <contrib/dev/acpica/compiler/dtcompiler.h> #define _COMPONENT DT_COMPILER ACPI_MODULE_NAME ("dtsubtable") @@ -186,7 +185,7 @@ DtCreateSubtable ( /* Create a new buffer for the subtable data */ - String = UtStringCacheCalloc (Length); + String = UtLocalCacheCalloc (Length); Subtable->Buffer = ACPI_CAST_PTR (UINT8, String); memcpy (Subtable->Buffer, Buffer, Length); diff --git a/sys/contrib/dev/acpica/compiler/dttable.c b/sys/contrib/dev/acpica/compiler/dttable.c index 0d1df7fe612b..7c3e9db9e06d 100644 --- a/sys/contrib/dev/acpica/compiler/dttable.c +++ b/sys/contrib/dev/acpica/compiler/dttable.c @@ -152,7 +152,6 @@ /* Compile routines for the basic ACPI tables */ #include <contrib/dev/acpica/compiler/aslcompiler.h> -#include <contrib/dev/acpica/compiler/dtcompiler.h> #define _COMPONENT DT_COMPILER ACPI_MODULE_NAME ("dttable") diff --git a/sys/contrib/dev/acpica/compiler/dttable1.c b/sys/contrib/dev/acpica/compiler/dttable1.c index 81a61b3accf2..5d4aca11a21c 100644 --- a/sys/contrib/dev/acpica/compiler/dttable1.c +++ b/sys/contrib/dev/acpica/compiler/dttable1.c @@ -152,7 +152,6 @@ /* Compile all complex data tables, signatures starting with A-I */ #include <contrib/dev/acpica/compiler/aslcompiler.h> -#include <contrib/dev/acpica/compiler/dtcompiler.h> #define _COMPONENT DT_COMPILER ACPI_MODULE_NAME ("dttable1") diff --git a/sys/contrib/dev/acpica/compiler/dttable2.c b/sys/contrib/dev/acpica/compiler/dttable2.c index 4460394de9bb..51f5b2c488ff 100644 --- a/sys/contrib/dev/acpica/compiler/dttable2.c +++ b/sys/contrib/dev/acpica/compiler/dttable2.c @@ -152,7 +152,6 @@ /* Compile all complex data tables, signatures starting with L-Z */ #include <contrib/dev/acpica/compiler/aslcompiler.h> -#include <contrib/dev/acpica/compiler/dtcompiler.h> #define _COMPONENT DT_COMPILER ACPI_MODULE_NAME ("dttable2") @@ -904,6 +903,66 @@ DtCompilePcct ( /****************************************************************************** * + * FUNCTION: DtCompilePdtt + * + * PARAMETERS: List - Current field list pointer + * + * RETURN: Status + * + * DESCRIPTION: Compile PDTT. + * + *****************************************************************************/ + +ACPI_STATUS +DtCompilePdtt ( + void **List) +{ + ACPI_STATUS Status; + DT_SUBTABLE *Subtable; + DT_SUBTABLE *ParentTable; + DT_FIELD **PFieldList = (DT_FIELD **) List; + ACPI_TABLE_PDTT *PdttHeader; + UINT32 Count = 0; + + + /* Main table */ + + Status = DtCompileTable (PFieldList, AcpiDmTableInfoPdtt, &Subtable, TRUE); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + + PdttHeader = ACPI_CAST_PTR (ACPI_TABLE_PDTT, ParentTable->Buffer); + PdttHeader->ArrayOffset = sizeof (ACPI_TABLE_PDTT); + + /* There is only one type of subtable at this time, no need to decode */ + + while (*PFieldList) + { + /* List of subchannel IDs, each 2 bytes */ + + Status = DtCompileTable (PFieldList, AcpiDmTableInfoPdtt0, + &Subtable, TRUE); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + DtInsertSubtable (ParentTable, Subtable); + Count++; + } + + PdttHeader->TriggerCount = (UINT8) Count; + return (AE_OK); +} + + +/****************************************************************************** + * * FUNCTION: DtCompilePmtt * * PARAMETERS: List - Current field list pointer @@ -1285,6 +1344,219 @@ DtCompileS3pt ( /****************************************************************************** * + * FUNCTION: DtCompileSdev + * + * PARAMETERS: List - Current field list pointer + * + * RETURN: Status + * + * DESCRIPTION: Compile SDEV. + * + *****************************************************************************/ + +ACPI_STATUS +DtCompileSdev ( + void **List) +{ + ACPI_STATUS Status; + ACPI_SDEV_HEADER *SdevHeader; + DT_SUBTABLE *Subtable; + DT_SUBTABLE *ParentTable; + ACPI_DMTABLE_INFO *InfoTable; + DT_FIELD **PFieldList = (DT_FIELD **) List; + DT_FIELD *SubtableStart; + ACPI_SDEV_PCIE *Pcie = NULL; + ACPI_SDEV_NAMESPACE *Namesp = NULL; + UINT32 EntryCount; + + + /* Subtables */ + + while (*PFieldList) + { + /* Compile common SDEV subtable header */ + + SubtableStart = *PFieldList; + Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdevHdr, + &Subtable, TRUE); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + DtPushSubtable (Subtable); + + SdevHeader = ACPI_CAST_PTR (ACPI_SDEV_HEADER, Subtable->Buffer); + SdevHeader->Length = (UINT8)(sizeof (ACPI_SDEV_HEADER)); + + switch (SdevHeader->Type) + { + case ACPI_SDEV_TYPE_NAMESPACE_DEVICE: + + InfoTable = AcpiDmTableInfoSdev0; + Namesp = ACPI_CAST_PTR (ACPI_SDEV_NAMESPACE, Subtable->Buffer); + break; + + case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE: + + InfoTable = AcpiDmTableInfoSdev1; + Pcie = ACPI_CAST_PTR (ACPI_SDEV_PCIE, Subtable->Buffer); + break; + + default: + + DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "SDEV"); + return (AE_ERROR); + } + + /* Compile SDEV subtable body */ + + Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + + /* Optional data fields are appended to the main subtable body */ + + switch (SdevHeader->Type) + { + case ACPI_SDEV_TYPE_NAMESPACE_DEVICE: + + /* Append DeviceId namespace string */ + + Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev0a, + &Subtable, TRUE); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + if (!Subtable) + { + break; + } + + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + + Namesp->DeviceIdOffset = sizeof (ACPI_SDEV_NAMESPACE); + Namesp->DeviceIdLength = (UINT16) Subtable->Length; + + /* Append Vendor data */ + + Namesp->VendorDataLength = 0; + Namesp->VendorDataOffset = 0; + + if (*PFieldList) + { + Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev1b, + &Subtable, TRUE); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + if (Subtable) + { + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + + Namesp->VendorDataOffset = + 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); + break; + + case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE: + + /* Append the PCIe path info first */ + + EntryCount = 0; + while (*PFieldList && !strcmp ((*PFieldList)->Name, "Device")) + { + Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev1a, + &Subtable, FALSE); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + if (!Subtable) + { + DtPopSubtable (); + break; + } + + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + EntryCount++; + } + + /* Path offset will point immediately after the main subtable */ + + Pcie->PathOffset = sizeof (ACPI_SDEV_PCIE); + Pcie->PathLength = (UINT16) + (EntryCount * sizeof (ACPI_SDEV_PCIE_PATH)); + + /* Append the Vendor Data last */ + + Pcie->VendorDataLength = 0; + Pcie->VendorDataOffset = 0; + + if (*PFieldList) + { + Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev1b, + &Subtable, TRUE); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + if (Subtable) + { + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + + Pcie->VendorDataOffset = + Pcie->PathOffset + Pcie->PathLength; + Pcie->VendorDataLength = (UINT16) + Subtable->Length; + } + } + + SdevHeader->Length = + sizeof (ACPI_SDEV_PCIE) + + Pcie->PathLength + Pcie->VendorDataLength; + break; + + default: + + DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "SDEV"); + return (AE_ERROR); + } + + DtPopSubtable (); + } + + return (AE_OK); +} + + +/****************************************************************************** + * * FUNCTION: DtCompileSlic * * PARAMETERS: List - Current field list pointer @@ -1603,6 +1875,109 @@ DtCompileTcpa ( /****************************************************************************** * + * FUNCTION: DtCompileTpm2 + * + * PARAMETERS: PFieldList - Current field list pointer + * + * RETURN: Status + * + * DESCRIPTION: Compile TPM2. + * + *****************************************************************************/ + +ACPI_STATUS +DtCompileTpm2 ( + void **List) +{ + DT_FIELD **PFieldList = (DT_FIELD **) List; + DT_SUBTABLE *Subtable; + ACPI_TABLE_TPM2 *Tpm2Header; + DT_SUBTABLE *ParentTable; + ACPI_STATUS Status = AE_OK; + + + /* Compile the main table */ + + Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm2, + &Subtable, TRUE); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + + Tpm2Header = ACPI_CAST_PTR (ACPI_TABLE_TPM2, ParentTable->Buffer); + + /* Method parameters */ + /* Optional: Log area minimum length */ + /* Optional: Log area start address */ + /* TBD: Optional fields above not fully implemented (not optional at this time) */ + + Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm2a, + &Subtable, TRUE); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + + + /* Subtable type depends on the StartMethod */ + + switch (Tpm2Header->StartMethod) + { + case ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC: + + /* Subtable specific to to ARM_SMC */ + + Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm211, + &Subtable, TRUE); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + break; + + case ACPI_TPM2_START_METHOD: + case ACPI_TPM2_MEMORY_MAPPED: + case ACPI_TPM2_COMMAND_BUFFER: + case ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD: + break; + + case ACPI_TPM2_RESERVED1: + case ACPI_TPM2_RESERVED3: + case ACPI_TPM2_RESERVED4: + case ACPI_TPM2_RESERVED5: + case ACPI_TPM2_RESERVED9: + case ACPI_TPM2_RESERVED10: + + AcpiOsPrintf ("\n**** Reserved TPM2 Start Method type 0x%X\n", + Tpm2Header->StartMethod); + Status = AE_ERROR; + break; + + case ACPI_TPM2_NOT_ALLOWED: + default: + + AcpiOsPrintf ("\n**** Unknown TPM2 Start Method type 0x%X\n", + Tpm2Header->StartMethod); + Status = AE_ERROR; + break; + } + + return (Status); +} + + +/****************************************************************************** + * * FUNCTION: DtGetGenericTableInfo * * PARAMETERS: Name - Generic type name diff --git a/sys/contrib/dev/acpica/compiler/dttemplate.c b/sys/contrib/dev/acpica/compiler/dttemplate.c index 7ece577c2082..309386c54939 100644 --- a/sys/contrib/dev/acpica/compiler/dttemplate.c +++ b/sys/contrib/dev/acpica/compiler/dttemplate.c @@ -151,7 +151,6 @@ #include <contrib/dev/acpica/compiler/aslcompiler.h> #include <contrib/dev/acpica/include/acapps.h> -#include <contrib/dev/acpica/compiler/dtcompiler.h> #include <contrib/dev/acpica/compiler/dttemplate.h> /* Contains the hex ACPI table templates */ #define _COMPONENT DT_COMPILER @@ -315,7 +314,7 @@ Exit: /* Shutdown ACPICA subsystem */ (void) AcpiTerminate (); - CmDeleteCaches (); + UtDeleteLocalCaches (); return (Status); } diff --git a/sys/contrib/dev/acpica/compiler/dttemplate.h b/sys/contrib/dev/acpica/compiler/dttemplate.h index 8d27359d9ad0..38750f79d979 100644 --- a/sys/contrib/dev/acpica/compiler/dttemplate.h +++ b/sys/contrib/dev/acpica/compiler/dttemplate.h @@ -1079,6 +1079,17 @@ const unsigned char TemplatePcct[] = 0x55,0x55,0x55,0x55,0x55,0x55 /* 00000248 "UUUUUU| */ }; +const unsigned char TemplatePdtt[] = +{ + 0x50,0x44,0x54,0x54,0x34,0x00,0x00,0x00, /* 00000000 "PDTT4..." */ + 0x01,0xCB,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ + 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ + 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ + 0x31,0x08,0x17,0x20,0x04,0x00,0x00,0x00, /* 00000020 "1.. ...." */ + 0x2C,0x00,0x00,0x00,0xAA,0x03,0xBB,0x02, /* 00000028 ",......." */ + 0xCC,0x01,0xDD,0x00 /* 00000030 "...." */ +}; + const unsigned char TemplatePmtt[] = { 0x50,0x4D,0x54,0x54,0xB4,0x00,0x00,0x00, /* 00000000 "PMTT...." */ @@ -1187,6 +1198,25 @@ const unsigned char TemplateSdei[] = 0x30,0x09,0x16,0x20 /* 00000028 "0.. " */ }; +const unsigned char TemplateSdev[] = +{ + 0x53,0x44,0x45,0x56,0x72,0x00,0x00,0x00, /* 00000000 "SDEVr..." */ + 0x01,0x2F,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "./INTEL " */ + 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ + 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ + 0x31,0x08,0x17,0x20,0x00,0x01,0x2A,0x00, /* 00000020 "1.. ..*." */ + 0x0C,0x00,0x16,0x00,0x22,0x00,0x08,0x00, /* 00000028 "...."..." */ + 0x5C,0x5C,0x5F,0x53,0x42,0x5F,0x2E,0x50, /* 00000030 "\\_SB_.P" */ + 0x43,0x49,0x30,0x2E,0x55,0x53,0x42,0x31, /* 00000038 "CI0.USB1" */ + 0x2E,0x53,0x55,0x42,0x31,0x00,0x00,0x11, /* 00000040 ".SUB1..." */ + 0x22,0x33,0x44,0x55,0x66,0x77,0x01,0x01, /* 00000048 ""3DUfw.." */ + 0x24,0x00,0x10,0x00,0x20,0x00,0x10,0x00, /* 00000050 "$... ..." */ + 0x04,0x00,0x14,0x00,0x10,0x00,0x11,0x22, /* 00000058 "......."" */ + 0x33,0x44,0xEE,0xDD,0xCC,0xBB,0xAA,0x55, /* 00000060 "3D.....U" */ + 0x66,0x77,0x88,0x99,0xAA,0xBB,0xCC,0xDD, /* 00000068 "fw......" */ + 0xEE,0xFF /* 00000070 ".." */ +}; + const unsigned char TemplateSlic[] = { 0x53,0x4C,0x49,0x43,0x76,0x01,0x00,0x00, /* 00000000 "SLICv..." */ @@ -1388,13 +1418,17 @@ const unsigned char TemplateTcpa[] = const unsigned char TemplateTpm2[] = { - 0x54,0x50,0x4D,0x32,0x34,0x00,0x00,0x00, /* 00000000 "TPM24..." */ - 0x03,0x42,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 ".BINTEL " */ - 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ + 0x54,0x50,0x4D,0x32,0x58,0x00,0x00,0x00, /* 00000000 "TPM2X..." */ + 0x03,0xAB,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ + 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ - 0x14,0x11,0x12,0x20,0x00,0x00,0x00,0x00, /* 00000020 "... ...." */ - 0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00, /* 00000028 "wfUD3".." */ - 0x01,0x00,0x00,0x00 /* 00000030 "...." */ + 0x31,0x08,0x17,0x20,0x01,0x00,0x00,0x00, /* 00000020 "1.. ...." */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ + 0x0B,0x00,0x00,0x00,0x01,0x02,0x03,0x04, /* 00000030 "........" */ + 0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C, /* 00000038 "........" */ + 0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ + 0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00, /* 00000048 "........" */ + 0x01,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF /* 00000050 "........" */ }; const unsigned char TemplateUefi[] = diff --git a/sys/contrib/dev/acpica/compiler/dtutils.c b/sys/contrib/dev/acpica/compiler/dtutils.c index 1d4e23396967..54832f7b24bf 100644 --- a/sys/contrib/dev/acpica/compiler/dtutils.c +++ b/sys/contrib/dev/acpica/compiler/dtutils.c @@ -150,7 +150,6 @@ *****************************************************************************/ #include <contrib/dev/acpica/compiler/aslcompiler.h> -#include <contrib/dev/acpica/compiler/dtcompiler.h> #include <contrib/dev/acpica/include/actables.h> #define _COMPONENT DT_COMPILER @@ -570,6 +569,7 @@ DtGetFieldLength ( case ACPI_DMT_PCCT: case ACPI_DMT_PMTT: case ACPI_DMT_PPTT: + case ACPI_DMT_SDEV: case ACPI_DMT_SRAT: case ACPI_DMT_ASF: case ACPI_DMT_HESTNTYP: @@ -602,6 +602,7 @@ DtGetFieldLength ( case ACPI_DMT_NAME4: case ACPI_DMT_SIG: case ACPI_DMT_LPIT: + case ACPI_DMT_TPM2: ByteLength = 4; break; @@ -920,153 +921,3 @@ DtWalkTableTree ( } } } - - -/******************************************************************************* - * - * FUNCTION: UtSubtableCacheCalloc - * - * PARAMETERS: None - * - * RETURN: Pointer to the buffer. Aborts on allocation failure - * - * DESCRIPTION: Allocate a subtable object buffer. Bypass the local - * dynamic memory manager for performance reasons (This has a - * major impact on the speed of the compiler.) - * - ******************************************************************************/ - -DT_SUBTABLE * -UtSubtableCacheCalloc ( - void) -{ - ASL_CACHE_INFO *Cache; - - - if (Gbl_SubtableCacheNext >= Gbl_SubtableCacheLast) - { - /* Allocate a new buffer */ - - Cache = UtLocalCalloc (sizeof (Cache->Next) + - (sizeof (DT_SUBTABLE) * ASL_SUBTABLE_CACHE_SIZE)); - - /* Link new cache buffer to head of list */ - - Cache->Next = Gbl_SubtableCacheList; - Gbl_SubtableCacheList = Cache; - - /* Setup cache management pointers */ - - Gbl_SubtableCacheNext = ACPI_CAST_PTR (DT_SUBTABLE, Cache->Buffer); - Gbl_SubtableCacheLast = Gbl_SubtableCacheNext + ASL_SUBTABLE_CACHE_SIZE; - } - - Gbl_SubtableCount++; - return (Gbl_SubtableCacheNext++); -} - - -/******************************************************************************* - * - * FUNCTION: UtFieldCacheCalloc - * - * PARAMETERS: None - * - * RETURN: Pointer to the buffer. Aborts on allocation failure - * - * DESCRIPTION: Allocate a field object buffer. Bypass the local - * dynamic memory manager for performance reasons (This has a - * major impact on the speed of the compiler.) - * - ******************************************************************************/ - -DT_FIELD * -UtFieldCacheCalloc ( - void) -{ - ASL_CACHE_INFO *Cache; - - - if (Gbl_FieldCacheNext >= Gbl_FieldCacheLast) - { - /* Allocate a new buffer */ - - Cache = UtLocalCalloc (sizeof (Cache->Next) + - (sizeof (DT_FIELD) * ASL_FIELD_CACHE_SIZE)); - - /* Link new cache buffer to head of list */ - - Cache->Next = Gbl_FieldCacheList; - Gbl_FieldCacheList = Cache; - - /* Setup cache management pointers */ - - Gbl_FieldCacheNext = ACPI_CAST_PTR (DT_FIELD, Cache->Buffer); - Gbl_FieldCacheLast = Gbl_FieldCacheNext + ASL_FIELD_CACHE_SIZE; - } - - Gbl_FieldCount++; - return (Gbl_FieldCacheNext++); -} - - -/******************************************************************************* - * - * FUNCTION: DtDeleteCaches - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Delete all local cache buffer blocks - * - ******************************************************************************/ - -void -DtDeleteCaches ( - void) -{ - UINT32 BufferCount; - ASL_CACHE_INFO *Next; - - - /* Field cache */ - - BufferCount = 0; - while (Gbl_FieldCacheList) - { - Next = Gbl_FieldCacheList->Next; - ACPI_FREE (Gbl_FieldCacheList); - Gbl_FieldCacheList = Next; - BufferCount++; - } - - DbgPrint (ASL_DEBUG_OUTPUT, - "%u Fields, Buffer size: %u fields (%u bytes), %u Buffers\n", - Gbl_FieldCount, ASL_FIELD_CACHE_SIZE, - (sizeof (DT_FIELD) * ASL_FIELD_CACHE_SIZE), BufferCount); - - Gbl_FieldCount = 0; - Gbl_FieldCacheNext = NULL; - Gbl_FieldCacheLast = NULL; - - /* Subtable cache */ - - BufferCount = 0; - while (Gbl_SubtableCacheList) - { - Next = Gbl_SubtableCacheList->Next; - ACPI_FREE (Gbl_SubtableCacheList); - Gbl_SubtableCacheList = Next; - BufferCount++; - } - - DbgPrint (ASL_DEBUG_OUTPUT, - "%u Subtables, Buffer size: %u subtables (%u bytes), %u Buffers\n", - Gbl_SubtableCount, ASL_SUBTABLE_CACHE_SIZE, - (sizeof (DT_SUBTABLE) * ASL_SUBTABLE_CACHE_SIZE), BufferCount); - - Gbl_SubtableCount = 0; - Gbl_SubtableCacheNext = NULL; - Gbl_SubtableCacheLast = NULL; -} diff --git a/sys/contrib/dev/acpica/compiler/prexpress.c b/sys/contrib/dev/acpica/compiler/prexpress.c index 892e73dcfc90..df2fc46cdea6 100644 --- a/sys/contrib/dev/acpica/compiler/prexpress.c +++ b/sys/contrib/dev/acpica/compiler/prexpress.c @@ -150,8 +150,6 @@ *****************************************************************************/ #include <contrib/dev/acpica/compiler/aslcompiler.h> -#include <contrib/dev/acpica/compiler/dtcompiler.h> - #define _COMPONENT ASL_PREPROCESSOR ACPI_MODULE_NAME ("prexpress") diff --git a/sys/contrib/dev/acpica/compiler/prmacros.c b/sys/contrib/dev/acpica/compiler/prmacros.c index 82b221a7e37f..e1aaa3bcecab 100644 --- a/sys/contrib/dev/acpica/compiler/prmacros.c +++ b/sys/contrib/dev/acpica/compiler/prmacros.c @@ -150,8 +150,6 @@ *****************************************************************************/ #include <contrib/dev/acpica/compiler/aslcompiler.h> -#include <contrib/dev/acpica/compiler/dtcompiler.h> - #define _COMPONENT ASL_PREPROCESSOR ACPI_MODULE_NAME ("prmacros") diff --git a/sys/contrib/dev/acpica/compiler/prparser.y b/sys/contrib/dev/acpica/compiler/prparser.y index 22655076c550..ec9c0c58d807 100644 --- a/sys/contrib/dev/acpica/compiler/prparser.y +++ b/sys/contrib/dev/acpica/compiler/prparser.y @@ -151,7 +151,6 @@ *****************************************************************************/ #include <contrib/dev/acpica/compiler/aslcompiler.h> -#include <contrib/dev/acpica/compiler/dtcompiler.h> #define _COMPONENT ASL_PREPROCESSOR ACPI_MODULE_NAME ("prparser") diff --git a/sys/contrib/dev/acpica/compiler/prscan.c b/sys/contrib/dev/acpica/compiler/prscan.c index 02df42770571..23391d2c7f20 100644 --- a/sys/contrib/dev/acpica/compiler/prscan.c +++ b/sys/contrib/dev/acpica/compiler/prscan.c @@ -152,7 +152,6 @@ #define _DECLARE_PR_GLOBALS #include <contrib/dev/acpica/compiler/aslcompiler.h> -#include <contrib/dev/acpica/compiler/dtcompiler.h> /* * TBDs: diff --git a/sys/contrib/dev/acpica/compiler/prutils.c b/sys/contrib/dev/acpica/compiler/prutils.c index 45da8146222b..3d7e5fe7fc8f 100644 --- a/sys/contrib/dev/acpica/compiler/prutils.c +++ b/sys/contrib/dev/acpica/compiler/prutils.c @@ -150,8 +150,6 @@ *****************************************************************************/ #include <contrib/dev/acpica/compiler/aslcompiler.h> -#include <contrib/dev/acpica/compiler/dtcompiler.h> - #define _COMPONENT ASL_PREPROCESSOR ACPI_MODULE_NAME ("prutils") @@ -514,7 +512,7 @@ PrPushInputFileStack ( /* Reset the global line count and filename */ Gbl_Files[ASL_FILE_INPUT].Filename = - UtStringCacheCalloc (strlen (Filename) + 1); + UtLocalCacheCalloc (strlen (Filename) + 1); strcpy (Gbl_Files[ASL_FILE_INPUT].Filename, Filename); Gbl_Files[ASL_FILE_INPUT].Handle = InputFile; |