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 * 1132ac4016SJung-uk Kim * Some or all of this work - Copyright (c) 1999 - 2018, 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 18667d9aa44SJung-uk Kim if (Length > CacheSize) 18767d9aa44SJung-uk Kim { 18867d9aa44SJung-uk Kim CacheSize = Length; 18967d9aa44SJung-uk Kim 1906f1f1a63SJung-uk Kim if (AslGbl_StringCacheList) 19167d9aa44SJung-uk Kim { 19267d9aa44SJung-uk Kim Cache = UtLocalCalloc (sizeof (Cache->Next) + CacheSize); 19367d9aa44SJung-uk Kim 19467d9aa44SJung-uk Kim /* Link new cache buffer just following head of list */ 19567d9aa44SJung-uk Kim 1966f1f1a63SJung-uk Kim Cache->Next = AslGbl_StringCacheList->Next; 1976f1f1a63SJung-uk Kim AslGbl_StringCacheList->Next = Cache; 19867d9aa44SJung-uk Kim 19967d9aa44SJung-uk Kim /* Leave cache management pointers alone as they pertain to head */ 20067d9aa44SJung-uk Kim 2016f1f1a63SJung-uk Kim AslGbl_StringCount++; 2026f1f1a63SJung-uk Kim AslGbl_StringSize += Length; 20367d9aa44SJung-uk Kim 20467d9aa44SJung-uk Kim return (Cache->Buffer); 20567d9aa44SJung-uk Kim } 20667d9aa44SJung-uk Kim } 20767d9aa44SJung-uk Kim 2086f1f1a63SJung-uk Kim if ((AslGbl_StringCacheNext + Length) >= AslGbl_StringCacheLast) 20967d9aa44SJung-uk Kim { 21067d9aa44SJung-uk Kim /* Allocate a new buffer */ 21167d9aa44SJung-uk Kim 21267d9aa44SJung-uk Kim Cache = UtLocalCalloc (sizeof (Cache->Next) + CacheSize); 21367d9aa44SJung-uk Kim 21467d9aa44SJung-uk Kim /* Link new cache buffer to head of list */ 21567d9aa44SJung-uk Kim 2166f1f1a63SJung-uk Kim Cache->Next = AslGbl_StringCacheList; 2176f1f1a63SJung-uk Kim AslGbl_StringCacheList = Cache; 21867d9aa44SJung-uk Kim 21967d9aa44SJung-uk Kim /* Setup cache management pointers */ 22067d9aa44SJung-uk Kim 2216f1f1a63SJung-uk Kim AslGbl_StringCacheNext = Cache->Buffer; 2226f1f1a63SJung-uk Kim AslGbl_StringCacheLast = AslGbl_StringCacheNext + CacheSize; 22367d9aa44SJung-uk Kim } 22467d9aa44SJung-uk Kim 2256f1f1a63SJung-uk Kim AslGbl_StringCount++; 2266f1f1a63SJung-uk Kim AslGbl_StringSize += Length; 22767d9aa44SJung-uk Kim 2286f1f1a63SJung-uk Kim Buffer = AslGbl_StringCacheNext; 2296f1f1a63SJung-uk Kim AslGbl_StringCacheNext += Length; 23067d9aa44SJung-uk Kim return (Buffer); 23167d9aa44SJung-uk Kim } 23267d9aa44SJung-uk Kim 23367d9aa44SJung-uk Kim 23467d9aa44SJung-uk Kim /******************************************************************************* 23567d9aa44SJung-uk Kim * 23667d9aa44SJung-uk Kim * FUNCTION: UtParseOpCacheCalloc 23767d9aa44SJung-uk Kim * 23867d9aa44SJung-uk Kim * PARAMETERS: None 23967d9aa44SJung-uk Kim * 24067d9aa44SJung-uk Kim * RETURN: New parse op. Aborts on allocation failure 24167d9aa44SJung-uk Kim * 24267d9aa44SJung-uk Kim * DESCRIPTION: Allocate a new parse op for the parse tree. Bypass the local 24367d9aa44SJung-uk Kim * dynamic memory manager for performance reasons (This has a 24467d9aa44SJung-uk Kim * major impact on the speed of the compiler.) 24567d9aa44SJung-uk Kim * 24667d9aa44SJung-uk Kim ******************************************************************************/ 24767d9aa44SJung-uk Kim 24867d9aa44SJung-uk Kim ACPI_PARSE_OBJECT * 24967d9aa44SJung-uk Kim UtParseOpCacheCalloc ( 25067d9aa44SJung-uk Kim void) 25167d9aa44SJung-uk Kim { 25267d9aa44SJung-uk Kim ASL_CACHE_INFO *Cache; 25367d9aa44SJung-uk Kim 25467d9aa44SJung-uk Kim 2556f1f1a63SJung-uk Kim if (AslGbl_ParseOpCacheNext >= AslGbl_ParseOpCacheLast) 25667d9aa44SJung-uk Kim { 25767d9aa44SJung-uk Kim /* Allocate a new buffer */ 25867d9aa44SJung-uk Kim 25967d9aa44SJung-uk Kim Cache = UtLocalCalloc (sizeof (Cache->Next) + 26067d9aa44SJung-uk Kim (sizeof (ACPI_PARSE_OBJECT) * ASL_PARSEOP_CACHE_SIZE)); 26167d9aa44SJung-uk Kim 26267d9aa44SJung-uk Kim /* Link new cache buffer to head of list */ 26367d9aa44SJung-uk Kim 2646f1f1a63SJung-uk Kim Cache->Next = AslGbl_ParseOpCacheList; 2656f1f1a63SJung-uk Kim AslGbl_ParseOpCacheList = Cache; 26667d9aa44SJung-uk Kim 26767d9aa44SJung-uk Kim /* Setup cache management pointers */ 26867d9aa44SJung-uk Kim 2696f1f1a63SJung-uk Kim AslGbl_ParseOpCacheNext = ACPI_CAST_PTR (ACPI_PARSE_OBJECT, Cache->Buffer); 2706f1f1a63SJung-uk Kim AslGbl_ParseOpCacheLast = AslGbl_ParseOpCacheNext + ASL_PARSEOP_CACHE_SIZE; 27167d9aa44SJung-uk Kim } 27267d9aa44SJung-uk Kim 2736f1f1a63SJung-uk Kim AslGbl_ParseOpCount++; 2746f1f1a63SJung-uk Kim return (AslGbl_ParseOpCacheNext++); 27567d9aa44SJung-uk Kim } 27667d9aa44SJung-uk Kim 27767d9aa44SJung-uk Kim 27867d9aa44SJung-uk Kim /******************************************************************************* 27967d9aa44SJung-uk Kim * 28067d9aa44SJung-uk Kim * FUNCTION: UtSubtableCacheCalloc - Data Table compiler 28167d9aa44SJung-uk Kim * 28267d9aa44SJung-uk Kim * PARAMETERS: None 28367d9aa44SJung-uk Kim * 28467d9aa44SJung-uk Kim * RETURN: Pointer to the buffer. Aborts on allocation failure 28567d9aa44SJung-uk Kim * 28667d9aa44SJung-uk Kim * DESCRIPTION: Allocate a subtable object buffer. Bypass the local 28767d9aa44SJung-uk Kim * dynamic memory manager for performance reasons (This has a 28867d9aa44SJung-uk Kim * major impact on the speed of the compiler.) 28967d9aa44SJung-uk Kim * 29067d9aa44SJung-uk Kim ******************************************************************************/ 29167d9aa44SJung-uk Kim 29267d9aa44SJung-uk Kim DT_SUBTABLE * 29367d9aa44SJung-uk Kim UtSubtableCacheCalloc ( 29467d9aa44SJung-uk Kim void) 29567d9aa44SJung-uk Kim { 29667d9aa44SJung-uk Kim ASL_CACHE_INFO *Cache; 29767d9aa44SJung-uk Kim 29867d9aa44SJung-uk Kim 2996f1f1a63SJung-uk Kim if (AslGbl_SubtableCacheNext >= AslGbl_SubtableCacheLast) 30067d9aa44SJung-uk Kim { 30167d9aa44SJung-uk Kim /* Allocate a new buffer */ 30267d9aa44SJung-uk Kim 30367d9aa44SJung-uk Kim Cache = UtLocalCalloc (sizeof (Cache->Next) + 30467d9aa44SJung-uk Kim (sizeof (DT_SUBTABLE) * ASL_SUBTABLE_CACHE_SIZE)); 30567d9aa44SJung-uk Kim 30667d9aa44SJung-uk Kim /* Link new cache buffer to head of list */ 30767d9aa44SJung-uk Kim 3086f1f1a63SJung-uk Kim Cache->Next = AslGbl_SubtableCacheList; 3096f1f1a63SJung-uk Kim AslGbl_SubtableCacheList = Cache; 31067d9aa44SJung-uk Kim 31167d9aa44SJung-uk Kim /* Setup cache management pointers */ 31267d9aa44SJung-uk Kim 3136f1f1a63SJung-uk Kim AslGbl_SubtableCacheNext = ACPI_CAST_PTR (DT_SUBTABLE, Cache->Buffer); 3146f1f1a63SJung-uk Kim AslGbl_SubtableCacheLast = AslGbl_SubtableCacheNext + ASL_SUBTABLE_CACHE_SIZE; 31567d9aa44SJung-uk Kim } 31667d9aa44SJung-uk Kim 3176f1f1a63SJung-uk Kim AslGbl_SubtableCount++; 3186f1f1a63SJung-uk Kim return (AslGbl_SubtableCacheNext++); 31967d9aa44SJung-uk Kim } 32067d9aa44SJung-uk Kim 32167d9aa44SJung-uk Kim 32267d9aa44SJung-uk Kim /******************************************************************************* 32367d9aa44SJung-uk Kim * 32467d9aa44SJung-uk Kim * FUNCTION: UtFieldCacheCalloc - Data Table compiler 32567d9aa44SJung-uk Kim * 32667d9aa44SJung-uk Kim * PARAMETERS: None 32767d9aa44SJung-uk Kim * 32867d9aa44SJung-uk Kim * RETURN: Pointer to the buffer. Aborts on allocation failure 32967d9aa44SJung-uk Kim * 33067d9aa44SJung-uk Kim * DESCRIPTION: Allocate a field object buffer. Bypass the local 33167d9aa44SJung-uk Kim * dynamic memory manager for performance reasons (This has a 33267d9aa44SJung-uk Kim * major impact on the speed of the compiler.) 33367d9aa44SJung-uk Kim * 33467d9aa44SJung-uk Kim ******************************************************************************/ 33567d9aa44SJung-uk Kim 33667d9aa44SJung-uk Kim DT_FIELD * 33767d9aa44SJung-uk Kim UtFieldCacheCalloc ( 33867d9aa44SJung-uk Kim void) 33967d9aa44SJung-uk Kim { 34067d9aa44SJung-uk Kim ASL_CACHE_INFO *Cache; 34167d9aa44SJung-uk Kim 34267d9aa44SJung-uk Kim 3436f1f1a63SJung-uk Kim if (AslGbl_FieldCacheNext >= AslGbl_FieldCacheLast) 34467d9aa44SJung-uk Kim { 34567d9aa44SJung-uk Kim /* Allocate a new buffer */ 34667d9aa44SJung-uk Kim 34767d9aa44SJung-uk Kim Cache = UtLocalCalloc (sizeof (Cache->Next) + 34867d9aa44SJung-uk Kim (sizeof (DT_FIELD) * ASL_FIELD_CACHE_SIZE)); 34967d9aa44SJung-uk Kim 35067d9aa44SJung-uk Kim /* Link new cache buffer to head of list */ 35167d9aa44SJung-uk Kim 3526f1f1a63SJung-uk Kim Cache->Next = AslGbl_FieldCacheList; 3536f1f1a63SJung-uk Kim AslGbl_FieldCacheList = Cache; 35467d9aa44SJung-uk Kim 35567d9aa44SJung-uk Kim /* Setup cache management pointers */ 35667d9aa44SJung-uk Kim 3576f1f1a63SJung-uk Kim AslGbl_FieldCacheNext = ACPI_CAST_PTR (DT_FIELD, Cache->Buffer); 3586f1f1a63SJung-uk Kim AslGbl_FieldCacheLast =AslGbl_FieldCacheNext + ASL_FIELD_CACHE_SIZE; 35967d9aa44SJung-uk Kim } 36067d9aa44SJung-uk Kim 3616f1f1a63SJung-uk Kim AslGbl_FieldCount++; 3626f1f1a63SJung-uk Kim return (AslGbl_FieldCacheNext++); 36367d9aa44SJung-uk Kim } 36467d9aa44SJung-uk Kim 36567d9aa44SJung-uk Kim 36667d9aa44SJung-uk Kim /******************************************************************************* 36767d9aa44SJung-uk Kim * 36867d9aa44SJung-uk Kim * FUNCTION: UtDeleteLocalCaches 36967d9aa44SJung-uk Kim * 37067d9aa44SJung-uk Kim * PARAMETERS: None 37167d9aa44SJung-uk Kim * 37267d9aa44SJung-uk Kim * RETURN: None 37367d9aa44SJung-uk Kim * 37467d9aa44SJung-uk Kim * DESCRIPTION: Delete all local cache buffer blocks 37567d9aa44SJung-uk Kim * 37667d9aa44SJung-uk Kim ******************************************************************************/ 37767d9aa44SJung-uk Kim 37867d9aa44SJung-uk Kim void 37967d9aa44SJung-uk Kim UtDeleteLocalCaches ( 38067d9aa44SJung-uk Kim void) 38167d9aa44SJung-uk Kim { 38267d9aa44SJung-uk Kim UINT32 BufferCount; 38367d9aa44SJung-uk Kim ASL_CACHE_INFO *Next; 38467d9aa44SJung-uk Kim 38567d9aa44SJung-uk Kim 38667d9aa44SJung-uk Kim /* 38767d9aa44SJung-uk Kim * Generic cache, arbitrary size allocations 38867d9aa44SJung-uk Kim */ 38967d9aa44SJung-uk Kim BufferCount = 0; 3906f1f1a63SJung-uk Kim while (AslGbl_StringCacheList) 39167d9aa44SJung-uk Kim { 3926f1f1a63SJung-uk Kim Next = AslGbl_StringCacheList->Next; 3936f1f1a63SJung-uk Kim ACPI_FREE (AslGbl_StringCacheList); 3946f1f1a63SJung-uk Kim AslGbl_StringCacheList = Next; 39567d9aa44SJung-uk Kim BufferCount++; 39667d9aa44SJung-uk Kim } 39767d9aa44SJung-uk Kim 39867d9aa44SJung-uk Kim DbgPrint (ASL_DEBUG_OUTPUT, 39967d9aa44SJung-uk Kim "%u Strings (%u bytes), Buffer size: %u bytes, %u Buffers\n", 4006f1f1a63SJung-uk Kim AslGbl_StringCount, AslGbl_StringSize, ASL_STRING_CACHE_SIZE, BufferCount); 40167d9aa44SJung-uk Kim 40267d9aa44SJung-uk Kim /* Reset cache globals */ 40367d9aa44SJung-uk Kim 4046f1f1a63SJung-uk Kim AslGbl_StringSize = 0; 4056f1f1a63SJung-uk Kim AslGbl_StringCount = 0; 4066f1f1a63SJung-uk Kim AslGbl_StringCacheNext = NULL; 4076f1f1a63SJung-uk Kim AslGbl_StringCacheLast = NULL; 40867d9aa44SJung-uk Kim 40967d9aa44SJung-uk Kim /* 41067d9aa44SJung-uk Kim * Parse Op cache 41167d9aa44SJung-uk Kim */ 41267d9aa44SJung-uk Kim BufferCount = 0; 4136f1f1a63SJung-uk Kim while (AslGbl_ParseOpCacheList) 41467d9aa44SJung-uk Kim { 4156f1f1a63SJung-uk Kim Next = AslGbl_ParseOpCacheList->Next; 4166f1f1a63SJung-uk Kim ACPI_FREE (AslGbl_ParseOpCacheList); 4176f1f1a63SJung-uk Kim AslGbl_ParseOpCacheList = Next; 41867d9aa44SJung-uk Kim BufferCount++; 41967d9aa44SJung-uk Kim } 42067d9aa44SJung-uk Kim 42167d9aa44SJung-uk Kim DbgPrint (ASL_DEBUG_OUTPUT, 42267d9aa44SJung-uk Kim "%u ParseOps, Buffer size: %u ops (%u bytes), %u Buffers\n", 4236f1f1a63SJung-uk Kim AslGbl_ParseOpCount, ASL_PARSEOP_CACHE_SIZE, 42467d9aa44SJung-uk Kim (sizeof (ACPI_PARSE_OBJECT) * ASL_PARSEOP_CACHE_SIZE), BufferCount); 42567d9aa44SJung-uk Kim 42667d9aa44SJung-uk Kim /* Reset cache globals */ 42767d9aa44SJung-uk Kim 4286f1f1a63SJung-uk Kim AslGbl_ParseOpCount = 0; 4296f1f1a63SJung-uk Kim AslGbl_ParseOpCacheNext = NULL; 4306f1f1a63SJung-uk Kim AslGbl_ParseOpCacheLast = NULL; 4316f1f1a63SJung-uk Kim AslGbl_ParseTreeRoot = NULL; 43267d9aa44SJung-uk Kim 43367d9aa44SJung-uk Kim /* 43467d9aa44SJung-uk Kim * Table Compiler - Field cache 43567d9aa44SJung-uk Kim */ 43667d9aa44SJung-uk Kim BufferCount = 0; 4376f1f1a63SJung-uk Kim while (AslGbl_FieldCacheList) 43867d9aa44SJung-uk Kim { 4396f1f1a63SJung-uk Kim Next = AslGbl_FieldCacheList->Next; 4406f1f1a63SJung-uk Kim ACPI_FREE (AslGbl_FieldCacheList); 4416f1f1a63SJung-uk Kim AslGbl_FieldCacheList = Next; 44267d9aa44SJung-uk Kim BufferCount++; 44367d9aa44SJung-uk Kim } 44467d9aa44SJung-uk Kim 44567d9aa44SJung-uk Kim DbgPrint (ASL_DEBUG_OUTPUT, 44667d9aa44SJung-uk Kim "%u Fields, Buffer size: %u fields (%u bytes), %u Buffers\n", 4476f1f1a63SJung-uk Kim AslGbl_FieldCount, ASL_FIELD_CACHE_SIZE, 44867d9aa44SJung-uk Kim (sizeof (DT_FIELD) * ASL_FIELD_CACHE_SIZE), BufferCount); 44967d9aa44SJung-uk Kim 45067d9aa44SJung-uk Kim /* Reset cache globals */ 45167d9aa44SJung-uk Kim 4526f1f1a63SJung-uk Kim AslGbl_FieldCount = 0; 4536f1f1a63SJung-uk Kim AslGbl_FieldCacheNext = NULL; 4546f1f1a63SJung-uk Kim AslGbl_FieldCacheLast = NULL; 45567d9aa44SJung-uk Kim 45667d9aa44SJung-uk Kim /* 45767d9aa44SJung-uk Kim * Table Compiler - Subtable cache 45867d9aa44SJung-uk Kim */ 45967d9aa44SJung-uk Kim BufferCount = 0; 4606f1f1a63SJung-uk Kim while (AslGbl_SubtableCacheList) 46167d9aa44SJung-uk Kim { 4626f1f1a63SJung-uk Kim Next = AslGbl_SubtableCacheList->Next; 4636f1f1a63SJung-uk Kim ACPI_FREE (AslGbl_SubtableCacheList); 4646f1f1a63SJung-uk Kim AslGbl_SubtableCacheList = Next; 46567d9aa44SJung-uk Kim BufferCount++; 46667d9aa44SJung-uk Kim } 46767d9aa44SJung-uk Kim 46867d9aa44SJung-uk Kim DbgPrint (ASL_DEBUG_OUTPUT, 46967d9aa44SJung-uk Kim "%u Subtables, Buffer size: %u subtables (%u bytes), %u Buffers\n", 4706f1f1a63SJung-uk Kim AslGbl_SubtableCount, ASL_SUBTABLE_CACHE_SIZE, 47167d9aa44SJung-uk Kim (sizeof (DT_SUBTABLE) * ASL_SUBTABLE_CACHE_SIZE), BufferCount); 47267d9aa44SJung-uk Kim 47367d9aa44SJung-uk Kim /* Reset cache globals */ 47467d9aa44SJung-uk Kim 4756f1f1a63SJung-uk Kim AslGbl_SubtableCount = 0; 4766f1f1a63SJung-uk Kim AslGbl_SubtableCacheNext = NULL; 4776f1f1a63SJung-uk Kim AslGbl_SubtableCacheLast = NULL; 47867d9aa44SJung-uk Kim } 479