167d9aa44SJung-uk Kim /****************************************************************************** 267d9aa44SJung-uk Kim * 367d9aa44SJung-uk Kim * Module Name: aslcache -- Local cache support for iASL 467d9aa44SJung-uk Kim * 567d9aa44SJung-uk Kim *****************************************************************************/ 667d9aa44SJung-uk Kim 767d9aa44SJung-uk Kim /****************************************************************************** 867d9aa44SJung-uk Kim * 967d9aa44SJung-uk Kim * 1. Copyright Notice 1067d9aa44SJung-uk Kim * 11ab71bbb7SJung-uk Kim * Some or all of this work - Copyright (c) 1999 - 2022, Intel Corp. 1267d9aa44SJung-uk Kim * All rights reserved. 1367d9aa44SJung-uk Kim * 1467d9aa44SJung-uk Kim * 2. License 1567d9aa44SJung-uk Kim * 1667d9aa44SJung-uk Kim * 2.1. This is your license from Intel Corp. under its intellectual property 1767d9aa44SJung-uk Kim * rights. You may have additional license terms from the party that provided 1867d9aa44SJung-uk Kim * you this software, covering your right to use that party's intellectual 1967d9aa44SJung-uk Kim * property rights. 2067d9aa44SJung-uk Kim * 2167d9aa44SJung-uk Kim * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a 2267d9aa44SJung-uk Kim * copy of the source code appearing in this file ("Covered Code") an 2367d9aa44SJung-uk Kim * irrevocable, perpetual, worldwide license under Intel's copyrights in the 2467d9aa44SJung-uk Kim * base code distributed originally by Intel ("Original Intel Code") to copy, 2567d9aa44SJung-uk Kim * make derivatives, distribute, use and display any portion of the Covered 2667d9aa44SJung-uk Kim * Code in any form, with the right to sublicense such rights; and 2767d9aa44SJung-uk Kim * 2867d9aa44SJung-uk Kim * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent 2967d9aa44SJung-uk Kim * license (with the right to sublicense), under only those claims of Intel 3067d9aa44SJung-uk Kim * patents that are infringed by the Original Intel Code, to make, use, sell, 3167d9aa44SJung-uk Kim * offer to sell, and import the Covered Code and derivative works thereof 3267d9aa44SJung-uk Kim * solely to the minimum extent necessary to exercise the above copyright 3367d9aa44SJung-uk Kim * license, and in no event shall the patent license extend to any additions 3467d9aa44SJung-uk Kim * to or modifications of the Original Intel Code. No other license or right 3567d9aa44SJung-uk Kim * is granted directly or by implication, estoppel or otherwise; 3667d9aa44SJung-uk Kim * 3767d9aa44SJung-uk Kim * The above copyright and patent license is granted only if the following 3867d9aa44SJung-uk Kim * conditions are met: 3967d9aa44SJung-uk Kim * 4067d9aa44SJung-uk Kim * 3. Conditions 4167d9aa44SJung-uk Kim * 4267d9aa44SJung-uk Kim * 3.1. Redistribution of Source with Rights to Further Distribute Source. 4367d9aa44SJung-uk Kim * Redistribution of source code of any substantial portion of the Covered 4467d9aa44SJung-uk Kim * Code or modification with rights to further distribute source must include 4567d9aa44SJung-uk Kim * the above Copyright Notice, the above License, this list of Conditions, 4667d9aa44SJung-uk Kim * and the following Disclaimer and Export Compliance provision. In addition, 4767d9aa44SJung-uk Kim * Licensee must cause all Covered Code to which Licensee contributes to 4867d9aa44SJung-uk Kim * contain a file documenting the changes Licensee made to create that Covered 4967d9aa44SJung-uk Kim * Code and the date of any change. Licensee must include in that file the 5067d9aa44SJung-uk Kim * documentation of any changes made by any predecessor Licensee. Licensee 5167d9aa44SJung-uk Kim * must include a prominent statement that the modification is derived, 5267d9aa44SJung-uk Kim * directly or indirectly, from Original Intel Code. 5367d9aa44SJung-uk Kim * 5467d9aa44SJung-uk Kim * 3.2. Redistribution of Source with no Rights to Further Distribute Source. 5567d9aa44SJung-uk Kim * Redistribution of source code of any substantial portion of the Covered 5667d9aa44SJung-uk Kim * Code or modification without rights to further distribute source must 5767d9aa44SJung-uk Kim * include the following Disclaimer and Export Compliance provision in the 5867d9aa44SJung-uk Kim * documentation and/or other materials provided with distribution. In 5967d9aa44SJung-uk Kim * addition, Licensee may not authorize further sublicense of source of any 6067d9aa44SJung-uk Kim * portion of the Covered Code, and must include terms to the effect that the 6167d9aa44SJung-uk Kim * license from Licensee to its licensee is limited to the intellectual 6267d9aa44SJung-uk Kim * property embodied in the software Licensee provides to its licensee, and 6367d9aa44SJung-uk Kim * not to intellectual property embodied in modifications its licensee may 6467d9aa44SJung-uk Kim * make. 6567d9aa44SJung-uk Kim * 6667d9aa44SJung-uk Kim * 3.3. Redistribution of Executable. Redistribution in executable form of any 6767d9aa44SJung-uk Kim * substantial portion of the Covered Code or modification must reproduce the 6867d9aa44SJung-uk Kim * above Copyright Notice, and the following Disclaimer and Export Compliance 6967d9aa44SJung-uk Kim * provision in the documentation and/or other materials provided with the 7067d9aa44SJung-uk Kim * distribution. 7167d9aa44SJung-uk Kim * 7267d9aa44SJung-uk Kim * 3.4. Intel retains all right, title, and interest in and to the Original 7367d9aa44SJung-uk Kim * Intel Code. 7467d9aa44SJung-uk Kim * 7567d9aa44SJung-uk Kim * 3.5. Neither the name Intel nor any other trademark owned or controlled by 7667d9aa44SJung-uk Kim * Intel shall be used in advertising or otherwise to promote the sale, use or 7767d9aa44SJung-uk Kim * other dealings in products derived from or relating to the Covered Code 7867d9aa44SJung-uk Kim * without prior written authorization from Intel. 7967d9aa44SJung-uk Kim * 8067d9aa44SJung-uk Kim * 4. Disclaimer and Export Compliance 8167d9aa44SJung-uk Kim * 8267d9aa44SJung-uk Kim * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED 8367d9aa44SJung-uk Kim * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE 8467d9aa44SJung-uk Kim * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, 8567d9aa44SJung-uk Kim * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY 8667d9aa44SJung-uk Kim * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY 8767d9aa44SJung-uk Kim * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A 8867d9aa44SJung-uk Kim * PARTICULAR PURPOSE. 8967d9aa44SJung-uk Kim * 9067d9aa44SJung-uk Kim * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES 9167d9aa44SJung-uk Kim * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR 9267d9aa44SJung-uk Kim * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, 9367d9aa44SJung-uk Kim * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY 9467d9aa44SJung-uk Kim * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL 9567d9aa44SJung-uk Kim * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS 9667d9aa44SJung-uk Kim * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY 9767d9aa44SJung-uk Kim * LIMITED REMEDY. 9867d9aa44SJung-uk Kim * 9967d9aa44SJung-uk Kim * 4.3. Licensee shall not export, either directly or indirectly, any of this 10067d9aa44SJung-uk Kim * software or system incorporating such software without first obtaining any 10167d9aa44SJung-uk Kim * required license or other approval from the U. S. Department of Commerce or 10267d9aa44SJung-uk Kim * any other agency or department of the United States Government. In the 10367d9aa44SJung-uk Kim * event Licensee exports any such software from the United States or 10467d9aa44SJung-uk Kim * re-exports any such software from a foreign destination, Licensee shall 10567d9aa44SJung-uk Kim * ensure that the distribution and export/re-export of the software is in 10667d9aa44SJung-uk Kim * compliance with all laws, regulations, orders, or other restrictions of the 10767d9aa44SJung-uk Kim * U.S. Export Administration Regulations. Licensee agrees that neither it nor 10867d9aa44SJung-uk Kim * any of its subsidiaries will export/re-export any technical data, process, 10967d9aa44SJung-uk Kim * software, or service, directly or indirectly, to any country for which the 11067d9aa44SJung-uk Kim * United States government or any agency thereof requires an export license, 11167d9aa44SJung-uk Kim * other governmental approval, or letter of assurance, without first obtaining 11267d9aa44SJung-uk Kim * such license, approval or letter. 11367d9aa44SJung-uk Kim * 11467d9aa44SJung-uk Kim ***************************************************************************** 11567d9aa44SJung-uk Kim * 11667d9aa44SJung-uk Kim * Alternatively, you may choose to be licensed under the terms of the 11767d9aa44SJung-uk Kim * following license: 11867d9aa44SJung-uk Kim * 11967d9aa44SJung-uk Kim * Redistribution and use in source and binary forms, with or without 12067d9aa44SJung-uk Kim * modification, are permitted provided that the following conditions 12167d9aa44SJung-uk Kim * are met: 12267d9aa44SJung-uk Kim * 1. Redistributions of source code must retain the above copyright 12367d9aa44SJung-uk Kim * notice, this list of conditions, and the following disclaimer, 12467d9aa44SJung-uk Kim * without modification. 12567d9aa44SJung-uk Kim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 12667d9aa44SJung-uk Kim * substantially similar to the "NO WARRANTY" disclaimer below 12767d9aa44SJung-uk Kim * ("Disclaimer") and any redistribution must be conditioned upon 12867d9aa44SJung-uk Kim * including a substantially similar Disclaimer requirement for further 12967d9aa44SJung-uk Kim * binary redistribution. 13067d9aa44SJung-uk Kim * 3. Neither the names of the above-listed copyright holders nor the names 13167d9aa44SJung-uk Kim * of any contributors may be used to endorse or promote products derived 13267d9aa44SJung-uk Kim * from this software without specific prior written permission. 13367d9aa44SJung-uk Kim * 13467d9aa44SJung-uk Kim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 13567d9aa44SJung-uk Kim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 13667d9aa44SJung-uk Kim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 13767d9aa44SJung-uk Kim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 13867d9aa44SJung-uk Kim * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 13967d9aa44SJung-uk Kim * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 14067d9aa44SJung-uk Kim * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 14167d9aa44SJung-uk Kim * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 14267d9aa44SJung-uk Kim * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 14367d9aa44SJung-uk Kim * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 14467d9aa44SJung-uk Kim * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 14567d9aa44SJung-uk Kim * 14667d9aa44SJung-uk Kim * Alternatively, you may choose to be licensed under the terms of the 14767d9aa44SJung-uk Kim * GNU General Public License ("GPL") version 2 as published by the Free 14867d9aa44SJung-uk Kim * Software Foundation. 14967d9aa44SJung-uk Kim * 15067d9aa44SJung-uk Kim *****************************************************************************/ 15167d9aa44SJung-uk Kim 15267d9aa44SJung-uk Kim #include <contrib/dev/acpica/compiler/aslcompiler.h> 15367d9aa44SJung-uk Kim 15467d9aa44SJung-uk Kim /* 15567d9aa44SJung-uk Kim * Local caches. The caches are fully deleted after the compilation/disassembly 15667d9aa44SJung-uk Kim * of each individual input file. Thus, individual allocations from the cache 15767d9aa44SJung-uk Kim * memory do not need to be freed or even released back into the cache. 15867d9aa44SJung-uk Kim * 15967d9aa44SJung-uk Kim * See aslallocate.c for standard heap allocations. 16067d9aa44SJung-uk Kim */ 16167d9aa44SJung-uk Kim 16267d9aa44SJung-uk Kim 16367d9aa44SJung-uk Kim /******************************************************************************* 16467d9aa44SJung-uk Kim * 16567d9aa44SJung-uk Kim * FUNCTION: UtLocalCacheCalloc 16667d9aa44SJung-uk Kim * 16767d9aa44SJung-uk Kim * PARAMETERS: Length - Size of buffer requested 16867d9aa44SJung-uk Kim * 16967d9aa44SJung-uk Kim * RETURN: Pointer to the buffer. Aborts compiler on allocation failure 17067d9aa44SJung-uk Kim * 17167d9aa44SJung-uk Kim * DESCRIPTION: Allocate a string buffer. Bypass the local 17267d9aa44SJung-uk Kim * dynamic memory manager for performance reasons (This has a 17367d9aa44SJung-uk Kim * major impact on the speed of the compiler.) 17467d9aa44SJung-uk Kim * 17567d9aa44SJung-uk Kim ******************************************************************************/ 17667d9aa44SJung-uk Kim 17767d9aa44SJung-uk Kim char * 17867d9aa44SJung-uk Kim UtLocalCacheCalloc ( 17967d9aa44SJung-uk Kim UINT32 Length) 18067d9aa44SJung-uk Kim { 18167d9aa44SJung-uk Kim char *Buffer; 18267d9aa44SJung-uk Kim ASL_CACHE_INFO *Cache; 18367d9aa44SJung-uk Kim UINT32 CacheSize = ASL_STRING_CACHE_SIZE; 18467d9aa44SJung-uk Kim 18567d9aa44SJung-uk Kim 186ab71bbb7SJung-uk Kim #ifdef ACPI_MISALIGNMENT_NOT_SUPPORTED 187ab71bbb7SJung-uk Kim /* Used for objects other than strings, so keep allocations aligned */ 188ab71bbb7SJung-uk Kim Length = ACPI_ROUND_UP_TO_NATIVE_WORD (Length); 189ab71bbb7SJung-uk Kim #endif 190ab71bbb7SJung-uk Kim 19167d9aa44SJung-uk Kim if (Length > CacheSize) 19267d9aa44SJung-uk Kim { 19367d9aa44SJung-uk Kim CacheSize = Length; 19467d9aa44SJung-uk Kim 1956f1f1a63SJung-uk Kim if (AslGbl_StringCacheList) 19667d9aa44SJung-uk Kim { 19767d9aa44SJung-uk Kim Cache = UtLocalCalloc (sizeof (Cache->Next) + CacheSize); 19867d9aa44SJung-uk Kim 19967d9aa44SJung-uk Kim /* Link new cache buffer just following head of list */ 20067d9aa44SJung-uk Kim 2016f1f1a63SJung-uk Kim Cache->Next = AslGbl_StringCacheList->Next; 2026f1f1a63SJung-uk Kim AslGbl_StringCacheList->Next = Cache; 20367d9aa44SJung-uk Kim 20467d9aa44SJung-uk Kim /* Leave cache management pointers alone as they pertain to head */ 20567d9aa44SJung-uk Kim 2066f1f1a63SJung-uk Kim AslGbl_StringCount++; 2076f1f1a63SJung-uk Kim AslGbl_StringSize += Length; 20867d9aa44SJung-uk Kim 20967d9aa44SJung-uk Kim return (Cache->Buffer); 21067d9aa44SJung-uk Kim } 21167d9aa44SJung-uk Kim } 21267d9aa44SJung-uk Kim 2136f1f1a63SJung-uk Kim if ((AslGbl_StringCacheNext + Length) >= AslGbl_StringCacheLast) 21467d9aa44SJung-uk Kim { 21567d9aa44SJung-uk Kim /* Allocate a new buffer */ 21667d9aa44SJung-uk Kim 21767d9aa44SJung-uk Kim Cache = UtLocalCalloc (sizeof (Cache->Next) + CacheSize); 21867d9aa44SJung-uk Kim 21967d9aa44SJung-uk Kim /* Link new cache buffer to head of list */ 22067d9aa44SJung-uk Kim 2216f1f1a63SJung-uk Kim Cache->Next = AslGbl_StringCacheList; 2226f1f1a63SJung-uk Kim AslGbl_StringCacheList = Cache; 22367d9aa44SJung-uk Kim 22467d9aa44SJung-uk Kim /* Setup cache management pointers */ 22567d9aa44SJung-uk Kim 2266f1f1a63SJung-uk Kim AslGbl_StringCacheNext = Cache->Buffer; 2276f1f1a63SJung-uk Kim AslGbl_StringCacheLast = AslGbl_StringCacheNext + CacheSize; 22867d9aa44SJung-uk Kim } 22967d9aa44SJung-uk Kim 2306f1f1a63SJung-uk Kim AslGbl_StringCount++; 2316f1f1a63SJung-uk Kim AslGbl_StringSize += Length; 23267d9aa44SJung-uk Kim 2336f1f1a63SJung-uk Kim Buffer = AslGbl_StringCacheNext; 2346f1f1a63SJung-uk Kim AslGbl_StringCacheNext += Length; 23567d9aa44SJung-uk Kim return (Buffer); 23667d9aa44SJung-uk Kim } 23767d9aa44SJung-uk Kim 23867d9aa44SJung-uk Kim 23967d9aa44SJung-uk Kim /******************************************************************************* 24067d9aa44SJung-uk Kim * 24167d9aa44SJung-uk Kim * FUNCTION: UtParseOpCacheCalloc 24267d9aa44SJung-uk Kim * 24367d9aa44SJung-uk Kim * PARAMETERS: None 24467d9aa44SJung-uk Kim * 24567d9aa44SJung-uk Kim * RETURN: New parse op. Aborts on allocation failure 24667d9aa44SJung-uk Kim * 24767d9aa44SJung-uk Kim * DESCRIPTION: Allocate a new parse op for the parse tree. Bypass the local 24867d9aa44SJung-uk Kim * dynamic memory manager for performance reasons (This has a 24967d9aa44SJung-uk Kim * major impact on the speed of the compiler.) 25067d9aa44SJung-uk Kim * 25167d9aa44SJung-uk Kim ******************************************************************************/ 25267d9aa44SJung-uk Kim 25367d9aa44SJung-uk Kim ACPI_PARSE_OBJECT * 25467d9aa44SJung-uk Kim UtParseOpCacheCalloc ( 25567d9aa44SJung-uk Kim void) 25667d9aa44SJung-uk Kim { 25767d9aa44SJung-uk Kim ASL_CACHE_INFO *Cache; 25867d9aa44SJung-uk Kim 25967d9aa44SJung-uk Kim 2606f1f1a63SJung-uk Kim if (AslGbl_ParseOpCacheNext >= AslGbl_ParseOpCacheLast) 26167d9aa44SJung-uk Kim { 26267d9aa44SJung-uk Kim /* Allocate a new buffer */ 26367d9aa44SJung-uk Kim 26467d9aa44SJung-uk Kim Cache = UtLocalCalloc (sizeof (Cache->Next) + 26567d9aa44SJung-uk Kim (sizeof (ACPI_PARSE_OBJECT) * ASL_PARSEOP_CACHE_SIZE)); 26667d9aa44SJung-uk Kim 26767d9aa44SJung-uk Kim /* Link new cache buffer to head of list */ 26867d9aa44SJung-uk Kim 2696f1f1a63SJung-uk Kim Cache->Next = AslGbl_ParseOpCacheList; 2706f1f1a63SJung-uk Kim AslGbl_ParseOpCacheList = Cache; 27167d9aa44SJung-uk Kim 27267d9aa44SJung-uk Kim /* Setup cache management pointers */ 27367d9aa44SJung-uk Kim 2746f1f1a63SJung-uk Kim AslGbl_ParseOpCacheNext = ACPI_CAST_PTR (ACPI_PARSE_OBJECT, Cache->Buffer); 2756f1f1a63SJung-uk Kim AslGbl_ParseOpCacheLast = AslGbl_ParseOpCacheNext + ASL_PARSEOP_CACHE_SIZE; 27667d9aa44SJung-uk Kim } 27767d9aa44SJung-uk Kim 2786f1f1a63SJung-uk Kim AslGbl_ParseOpCount++; 2796f1f1a63SJung-uk Kim return (AslGbl_ParseOpCacheNext++); 28067d9aa44SJung-uk Kim } 28167d9aa44SJung-uk Kim 28267d9aa44SJung-uk Kim 28367d9aa44SJung-uk Kim /******************************************************************************* 28467d9aa44SJung-uk Kim * 28567d9aa44SJung-uk Kim * FUNCTION: UtSubtableCacheCalloc - Data Table compiler 28667d9aa44SJung-uk Kim * 28767d9aa44SJung-uk Kim * PARAMETERS: None 28867d9aa44SJung-uk Kim * 28967d9aa44SJung-uk Kim * RETURN: Pointer to the buffer. Aborts on allocation failure 29067d9aa44SJung-uk Kim * 29167d9aa44SJung-uk Kim * DESCRIPTION: Allocate a subtable object buffer. Bypass the local 29267d9aa44SJung-uk Kim * dynamic memory manager for performance reasons (This has a 29367d9aa44SJung-uk Kim * major impact on the speed of the compiler.) 29467d9aa44SJung-uk Kim * 29567d9aa44SJung-uk Kim ******************************************************************************/ 29667d9aa44SJung-uk Kim 29767d9aa44SJung-uk Kim DT_SUBTABLE * 29867d9aa44SJung-uk Kim UtSubtableCacheCalloc ( 29967d9aa44SJung-uk Kim void) 30067d9aa44SJung-uk Kim { 30167d9aa44SJung-uk Kim ASL_CACHE_INFO *Cache; 30267d9aa44SJung-uk Kim 30367d9aa44SJung-uk Kim 3046f1f1a63SJung-uk Kim if (AslGbl_SubtableCacheNext >= AslGbl_SubtableCacheLast) 30567d9aa44SJung-uk Kim { 30667d9aa44SJung-uk Kim /* Allocate a new buffer */ 30767d9aa44SJung-uk Kim 30867d9aa44SJung-uk Kim Cache = UtLocalCalloc (sizeof (Cache->Next) + 30967d9aa44SJung-uk Kim (sizeof (DT_SUBTABLE) * ASL_SUBTABLE_CACHE_SIZE)); 31067d9aa44SJung-uk Kim 31167d9aa44SJung-uk Kim /* Link new cache buffer to head of list */ 31267d9aa44SJung-uk Kim 3136f1f1a63SJung-uk Kim Cache->Next = AslGbl_SubtableCacheList; 3146f1f1a63SJung-uk Kim AslGbl_SubtableCacheList = Cache; 31567d9aa44SJung-uk Kim 31667d9aa44SJung-uk Kim /* Setup cache management pointers */ 31767d9aa44SJung-uk Kim 3186f1f1a63SJung-uk Kim AslGbl_SubtableCacheNext = ACPI_CAST_PTR (DT_SUBTABLE, Cache->Buffer); 3196f1f1a63SJung-uk Kim AslGbl_SubtableCacheLast = AslGbl_SubtableCacheNext + ASL_SUBTABLE_CACHE_SIZE; 32067d9aa44SJung-uk Kim } 32167d9aa44SJung-uk Kim 3226f1f1a63SJung-uk Kim AslGbl_SubtableCount++; 3236f1f1a63SJung-uk Kim return (AslGbl_SubtableCacheNext++); 32467d9aa44SJung-uk Kim } 32567d9aa44SJung-uk Kim 32667d9aa44SJung-uk Kim 32767d9aa44SJung-uk Kim /******************************************************************************* 32867d9aa44SJung-uk Kim * 32967d9aa44SJung-uk Kim * FUNCTION: UtFieldCacheCalloc - Data Table compiler 33067d9aa44SJung-uk Kim * 33167d9aa44SJung-uk Kim * PARAMETERS: None 33267d9aa44SJung-uk Kim * 33367d9aa44SJung-uk Kim * RETURN: Pointer to the buffer. Aborts on allocation failure 33467d9aa44SJung-uk Kim * 33567d9aa44SJung-uk Kim * DESCRIPTION: Allocate a field object buffer. Bypass the local 33667d9aa44SJung-uk Kim * dynamic memory manager for performance reasons (This has a 33767d9aa44SJung-uk Kim * major impact on the speed of the compiler.) 33867d9aa44SJung-uk Kim * 33967d9aa44SJung-uk Kim ******************************************************************************/ 34067d9aa44SJung-uk Kim 34167d9aa44SJung-uk Kim DT_FIELD * 34267d9aa44SJung-uk Kim UtFieldCacheCalloc ( 34367d9aa44SJung-uk Kim void) 34467d9aa44SJung-uk Kim { 34567d9aa44SJung-uk Kim ASL_CACHE_INFO *Cache; 34667d9aa44SJung-uk Kim 34767d9aa44SJung-uk Kim 3486f1f1a63SJung-uk Kim if (AslGbl_FieldCacheNext >= AslGbl_FieldCacheLast) 34967d9aa44SJung-uk Kim { 35067d9aa44SJung-uk Kim /* Allocate a new buffer */ 35167d9aa44SJung-uk Kim 35267d9aa44SJung-uk Kim Cache = UtLocalCalloc (sizeof (Cache->Next) + 35367d9aa44SJung-uk Kim (sizeof (DT_FIELD) * ASL_FIELD_CACHE_SIZE)); 35467d9aa44SJung-uk Kim 35567d9aa44SJung-uk Kim /* Link new cache buffer to head of list */ 35667d9aa44SJung-uk Kim 3576f1f1a63SJung-uk Kim Cache->Next = AslGbl_FieldCacheList; 3586f1f1a63SJung-uk Kim AslGbl_FieldCacheList = Cache; 35967d9aa44SJung-uk Kim 36067d9aa44SJung-uk Kim /* Setup cache management pointers */ 36167d9aa44SJung-uk Kim 3626f1f1a63SJung-uk Kim AslGbl_FieldCacheNext = ACPI_CAST_PTR (DT_FIELD, Cache->Buffer); 3636f1f1a63SJung-uk Kim AslGbl_FieldCacheLast =AslGbl_FieldCacheNext + ASL_FIELD_CACHE_SIZE; 36467d9aa44SJung-uk Kim } 36567d9aa44SJung-uk Kim 3666f1f1a63SJung-uk Kim AslGbl_FieldCount++; 3676f1f1a63SJung-uk Kim return (AslGbl_FieldCacheNext++); 36867d9aa44SJung-uk Kim } 36967d9aa44SJung-uk Kim 37067d9aa44SJung-uk Kim 37167d9aa44SJung-uk Kim /******************************************************************************* 37267d9aa44SJung-uk Kim * 37367d9aa44SJung-uk Kim * FUNCTION: UtDeleteLocalCaches 37467d9aa44SJung-uk Kim * 37567d9aa44SJung-uk Kim * PARAMETERS: None 37667d9aa44SJung-uk Kim * 37767d9aa44SJung-uk Kim * RETURN: None 37867d9aa44SJung-uk Kim * 37967d9aa44SJung-uk Kim * DESCRIPTION: Delete all local cache buffer blocks 38067d9aa44SJung-uk Kim * 38167d9aa44SJung-uk Kim ******************************************************************************/ 38267d9aa44SJung-uk Kim 38367d9aa44SJung-uk Kim void 38467d9aa44SJung-uk Kim UtDeleteLocalCaches ( 38567d9aa44SJung-uk Kim void) 38667d9aa44SJung-uk Kim { 38767d9aa44SJung-uk Kim UINT32 BufferCount; 38867d9aa44SJung-uk Kim ASL_CACHE_INFO *Next; 38967d9aa44SJung-uk Kim 39067d9aa44SJung-uk Kim 39167d9aa44SJung-uk Kim /* 39267d9aa44SJung-uk Kim * Generic cache, arbitrary size allocations 39367d9aa44SJung-uk Kim */ 39467d9aa44SJung-uk Kim BufferCount = 0; 3956f1f1a63SJung-uk Kim while (AslGbl_StringCacheList) 39667d9aa44SJung-uk Kim { 3976f1f1a63SJung-uk Kim Next = AslGbl_StringCacheList->Next; 3986f1f1a63SJung-uk Kim ACPI_FREE (AslGbl_StringCacheList); 3996f1f1a63SJung-uk Kim AslGbl_StringCacheList = Next; 40067d9aa44SJung-uk Kim BufferCount++; 40167d9aa44SJung-uk Kim } 40267d9aa44SJung-uk Kim 40367d9aa44SJung-uk Kim DbgPrint (ASL_DEBUG_OUTPUT, 40467d9aa44SJung-uk Kim "%u Strings (%u bytes), Buffer size: %u bytes, %u Buffers\n", 4056f1f1a63SJung-uk Kim AslGbl_StringCount, AslGbl_StringSize, ASL_STRING_CACHE_SIZE, BufferCount); 40667d9aa44SJung-uk Kim 40767d9aa44SJung-uk Kim /* Reset cache globals */ 40867d9aa44SJung-uk Kim 4096f1f1a63SJung-uk Kim AslGbl_StringSize = 0; 4106f1f1a63SJung-uk Kim AslGbl_StringCount = 0; 4116f1f1a63SJung-uk Kim AslGbl_StringCacheNext = NULL; 4126f1f1a63SJung-uk Kim AslGbl_StringCacheLast = NULL; 41367d9aa44SJung-uk Kim 41467d9aa44SJung-uk Kim /* 41567d9aa44SJung-uk Kim * Parse Op cache 41667d9aa44SJung-uk Kim */ 41767d9aa44SJung-uk Kim BufferCount = 0; 4186f1f1a63SJung-uk Kim while (AslGbl_ParseOpCacheList) 41967d9aa44SJung-uk Kim { 4206f1f1a63SJung-uk Kim Next = AslGbl_ParseOpCacheList->Next; 4216f1f1a63SJung-uk Kim ACPI_FREE (AslGbl_ParseOpCacheList); 4226f1f1a63SJung-uk Kim AslGbl_ParseOpCacheList = Next; 42367d9aa44SJung-uk Kim BufferCount++; 42467d9aa44SJung-uk Kim } 42567d9aa44SJung-uk Kim 42667d9aa44SJung-uk Kim DbgPrint (ASL_DEBUG_OUTPUT, 42767d9aa44SJung-uk Kim "%u ParseOps, Buffer size: %u ops (%u bytes), %u Buffers\n", 4286f1f1a63SJung-uk Kim AslGbl_ParseOpCount, ASL_PARSEOP_CACHE_SIZE, 429a009b7dcSJung-uk Kim ((UINT32) sizeof (ACPI_PARSE_OBJECT) * ASL_PARSEOP_CACHE_SIZE), BufferCount); 43067d9aa44SJung-uk Kim 43167d9aa44SJung-uk Kim /* Reset cache globals */ 43267d9aa44SJung-uk Kim 4336f1f1a63SJung-uk Kim AslGbl_ParseOpCount = 0; 4346f1f1a63SJung-uk Kim AslGbl_ParseOpCacheNext = NULL; 4356f1f1a63SJung-uk Kim AslGbl_ParseOpCacheLast = NULL; 4366f1f1a63SJung-uk Kim AslGbl_ParseTreeRoot = NULL; 43767d9aa44SJung-uk Kim 43867d9aa44SJung-uk Kim /* 43967d9aa44SJung-uk Kim * Table Compiler - Field cache 44067d9aa44SJung-uk Kim */ 44167d9aa44SJung-uk Kim BufferCount = 0; 4426f1f1a63SJung-uk Kim while (AslGbl_FieldCacheList) 44367d9aa44SJung-uk Kim { 4446f1f1a63SJung-uk Kim Next = AslGbl_FieldCacheList->Next; 4456f1f1a63SJung-uk Kim ACPI_FREE (AslGbl_FieldCacheList); 4466f1f1a63SJung-uk Kim AslGbl_FieldCacheList = Next; 44767d9aa44SJung-uk Kim BufferCount++; 44867d9aa44SJung-uk Kim } 44967d9aa44SJung-uk Kim 45067d9aa44SJung-uk Kim DbgPrint (ASL_DEBUG_OUTPUT, 45167d9aa44SJung-uk Kim "%u Fields, Buffer size: %u fields (%u bytes), %u Buffers\n", 4526f1f1a63SJung-uk Kim AslGbl_FieldCount, ASL_FIELD_CACHE_SIZE, 453a009b7dcSJung-uk Kim ((UINT32) sizeof (DT_FIELD) * ASL_FIELD_CACHE_SIZE), BufferCount); 45467d9aa44SJung-uk Kim 45567d9aa44SJung-uk Kim /* Reset cache globals */ 45667d9aa44SJung-uk Kim 4576f1f1a63SJung-uk Kim AslGbl_FieldCount = 0; 4586f1f1a63SJung-uk Kim AslGbl_FieldCacheNext = NULL; 4596f1f1a63SJung-uk Kim AslGbl_FieldCacheLast = NULL; 46067d9aa44SJung-uk Kim 46167d9aa44SJung-uk Kim /* 46267d9aa44SJung-uk Kim * Table Compiler - Subtable cache 46367d9aa44SJung-uk Kim */ 46467d9aa44SJung-uk Kim BufferCount = 0; 4656f1f1a63SJung-uk Kim while (AslGbl_SubtableCacheList) 46667d9aa44SJung-uk Kim { 4676f1f1a63SJung-uk Kim Next = AslGbl_SubtableCacheList->Next; 4686f1f1a63SJung-uk Kim ACPI_FREE (AslGbl_SubtableCacheList); 4696f1f1a63SJung-uk Kim AslGbl_SubtableCacheList = Next; 47067d9aa44SJung-uk Kim BufferCount++; 47167d9aa44SJung-uk Kim } 47267d9aa44SJung-uk Kim 47367d9aa44SJung-uk Kim DbgPrint (ASL_DEBUG_OUTPUT, 47467d9aa44SJung-uk Kim "%u Subtables, Buffer size: %u subtables (%u bytes), %u Buffers\n", 4756f1f1a63SJung-uk Kim AslGbl_SubtableCount, ASL_SUBTABLE_CACHE_SIZE, 476a009b7dcSJung-uk Kim ((UINT32) sizeof (DT_SUBTABLE) * ASL_SUBTABLE_CACHE_SIZE), BufferCount); 47767d9aa44SJung-uk Kim 47867d9aa44SJung-uk Kim /* Reset cache globals */ 47967d9aa44SJung-uk Kim 4806f1f1a63SJung-uk Kim AslGbl_SubtableCount = 0; 4816f1f1a63SJung-uk Kim AslGbl_SubtableCacheNext = NULL; 4826f1f1a63SJung-uk Kim AslGbl_SubtableCacheLast = NULL; 48367d9aa44SJung-uk Kim } 484