1ca3cf4faSJung-uk Kim /****************************************************************************** 2ca3cf4faSJung-uk Kim * 3ca3cf4faSJung-uk Kim * Module Name: aslpredef - support for ACPI predefined names 4ca3cf4faSJung-uk Kim * 5ca3cf4faSJung-uk Kim *****************************************************************************/ 6ca3cf4faSJung-uk Kim 7d244b227SJung-uk Kim /* 8313a0c13SJung-uk Kim * Copyright (C) 2000 - 2014, Intel Corp. 9ca3cf4faSJung-uk Kim * All rights reserved. 10ca3cf4faSJung-uk Kim * 11d244b227SJung-uk Kim * Redistribution and use in source and binary forms, with or without 12d244b227SJung-uk Kim * modification, are permitted provided that the following conditions 13d244b227SJung-uk Kim * are met: 14d244b227SJung-uk Kim * 1. Redistributions of source code must retain the above copyright 15d244b227SJung-uk Kim * notice, this list of conditions, and the following disclaimer, 16d244b227SJung-uk Kim * without modification. 17d244b227SJung-uk Kim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18d244b227SJung-uk Kim * substantially similar to the "NO WARRANTY" disclaimer below 19d244b227SJung-uk Kim * ("Disclaimer") and any redistribution must be conditioned upon 20d244b227SJung-uk Kim * including a substantially similar Disclaimer requirement for further 21d244b227SJung-uk Kim * binary redistribution. 22d244b227SJung-uk Kim * 3. Neither the names of the above-listed copyright holders nor the names 23d244b227SJung-uk Kim * of any contributors may be used to endorse or promote products derived 24d244b227SJung-uk Kim * from this software without specific prior written permission. 25ca3cf4faSJung-uk Kim * 26d244b227SJung-uk Kim * Alternatively, this software may be distributed under the terms of the 27d244b227SJung-uk Kim * GNU General Public License ("GPL") version 2 as published by the Free 28d244b227SJung-uk Kim * Software Foundation. 29ca3cf4faSJung-uk Kim * 30d244b227SJung-uk Kim * NO WARRANTY 31d244b227SJung-uk Kim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32d244b227SJung-uk Kim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33d244b227SJung-uk Kim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34d244b227SJung-uk Kim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35d244b227SJung-uk Kim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36d244b227SJung-uk Kim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37d244b227SJung-uk Kim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38d244b227SJung-uk Kim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39d244b227SJung-uk Kim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40d244b227SJung-uk Kim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41d244b227SJung-uk Kim * POSSIBILITY OF SUCH DAMAGES. 42d244b227SJung-uk Kim */ 43ca3cf4faSJung-uk Kim 44ca3cf4faSJung-uk Kim #define ACPI_CREATE_PREDEFINED_TABLE 459c7c683cSJung-uk Kim #define ACPI_CREATE_RESOURCE_TABLE 46ca3cf4faSJung-uk Kim 47ca3cf4faSJung-uk Kim #include <contrib/dev/acpica/compiler/aslcompiler.h> 48ca3cf4faSJung-uk Kim #include "aslcompiler.y.h" 49ca3cf4faSJung-uk Kim #include <contrib/dev/acpica/include/acpredef.h> 509c48c75eSJung-uk Kim #include <contrib/dev/acpica/include/acnamesp.h> 51ca3cf4faSJung-uk Kim 52ca3cf4faSJung-uk Kim 53ca3cf4faSJung-uk Kim #define _COMPONENT ACPI_COMPILER 54ca3cf4faSJung-uk Kim ACPI_MODULE_NAME ("aslpredef") 55ca3cf4faSJung-uk Kim 56ca3cf4faSJung-uk Kim 57ca3cf4faSJung-uk Kim /* Local prototypes */ 58ca3cf4faSJung-uk Kim 590b94ba42SJung-uk Kim static void 600b94ba42SJung-uk Kim ApCheckForUnexpectedReturnValue ( 610b94ba42SJung-uk Kim ACPI_PARSE_OBJECT *Op, 620b94ba42SJung-uk Kim ASL_METHOD_INFO *MethodInfo); 630b94ba42SJung-uk Kim 64ca3cf4faSJung-uk Kim static UINT32 65ca3cf4faSJung-uk Kim ApCheckForSpecialName ( 66ca3cf4faSJung-uk Kim ACPI_PARSE_OBJECT *Op, 67ca3cf4faSJung-uk Kim char *Name); 68ca3cf4faSJung-uk Kim 69ca3cf4faSJung-uk Kim 70ca3cf4faSJung-uk Kim /******************************************************************************* 71ca3cf4faSJung-uk Kim * 72ca3cf4faSJung-uk Kim * FUNCTION: ApCheckForPredefinedMethod 73ca3cf4faSJung-uk Kim * 74ca3cf4faSJung-uk Kim * PARAMETERS: Op - A parse node of type "METHOD". 75ca3cf4faSJung-uk Kim * MethodInfo - Saved info about this method 76ca3cf4faSJung-uk Kim * 77ca3cf4faSJung-uk Kim * RETURN: None 78ca3cf4faSJung-uk Kim * 79ca3cf4faSJung-uk Kim * DESCRIPTION: If method is a predefined name, check that the number of 80ca3cf4faSJung-uk Kim * arguments and the return type (returns a value or not) 81ca3cf4faSJung-uk Kim * is correct. 82ca3cf4faSJung-uk Kim * 83ca3cf4faSJung-uk Kim ******************************************************************************/ 84ca3cf4faSJung-uk Kim 85d052a1ccSJung-uk Kim BOOLEAN 86ca3cf4faSJung-uk Kim ApCheckForPredefinedMethod ( 87ca3cf4faSJung-uk Kim ACPI_PARSE_OBJECT *Op, 88ca3cf4faSJung-uk Kim ASL_METHOD_INFO *MethodInfo) 89ca3cf4faSJung-uk Kim { 90ca3cf4faSJung-uk Kim UINT32 Index; 919c7c683cSJung-uk Kim UINT32 RequiredArgCount; 929c7c683cSJung-uk Kim const ACPI_PREDEFINED_INFO *ThisName; 93ca3cf4faSJung-uk Kim 94ca3cf4faSJung-uk Kim 95ca3cf4faSJung-uk Kim /* Check for a match against the predefined name list */ 96ca3cf4faSJung-uk Kim 97ca3cf4faSJung-uk Kim Index = ApCheckForPredefinedName (Op, Op->Asl.NameSeg); 98ca3cf4faSJung-uk Kim 99ca3cf4faSJung-uk Kim switch (Index) 100ca3cf4faSJung-uk Kim { 101ca3cf4faSJung-uk Kim case ACPI_NOT_RESERVED_NAME: /* No underscore or _Txx or _xxx name not matched */ 102ca3cf4faSJung-uk Kim case ACPI_PREDEFINED_NAME: /* Resource Name or reserved scope name */ 103ca3cf4faSJung-uk Kim case ACPI_COMPILER_RESERVED_NAME: /* A _Txx that was not emitted by compiler */ 104ca3cf4faSJung-uk Kim 105ca3cf4faSJung-uk Kim /* Just return, nothing to do */ 106d052a1ccSJung-uk Kim return (FALSE); 107ca3cf4faSJung-uk Kim 108ca3cf4faSJung-uk Kim 1093f5e024cSJung-uk Kim case ACPI_EVENT_RESERVED_NAME: /* _Lxx/_Exx/_Wxx/_Qxx methods */ 110ca3cf4faSJung-uk Kim 111ca3cf4faSJung-uk Kim Gbl_ReservedMethods++; 112ca3cf4faSJung-uk Kim 1133f5e024cSJung-uk Kim /* NumArguments must be zero for all _Lxx/_Exx/_Wxx/_Qxx methods */ 114ca3cf4faSJung-uk Kim 115ca3cf4faSJung-uk Kim if (MethodInfo->NumArguments != 0) 116ca3cf4faSJung-uk Kim { 117a88e22b7SJung-uk Kim sprintf (MsgBuffer, "%s requires %u", Op->Asl.ExternalName, 0); 118ca3cf4faSJung-uk Kim 119ca3cf4faSJung-uk Kim AslError (ASL_WARNING, ASL_MSG_RESERVED_ARG_COUNT_HI, Op, 120ca3cf4faSJung-uk Kim MsgBuffer); 121ca3cf4faSJung-uk Kim } 122ca3cf4faSJung-uk Kim break; 123ca3cf4faSJung-uk Kim 124ca3cf4faSJung-uk Kim 125ca3cf4faSJung-uk Kim default: 126ca3cf4faSJung-uk Kim /* 127895f26a9SJung-uk Kim * Matched a predefined method name - validate the ASL-defined 128895f26a9SJung-uk Kim * argument count against the ACPI specification. 129ca3cf4faSJung-uk Kim * 130895f26a9SJung-uk Kim * Some methods are allowed to have a "minimum" number of args 131895f26a9SJung-uk Kim * (_SCP) because their definition in ACPI has changed over time. 132ca3cf4faSJung-uk Kim */ 133ca3cf4faSJung-uk Kim Gbl_ReservedMethods++; 1349c7c683cSJung-uk Kim ThisName = &AcpiGbl_PredefinedMethods[Index]; 135895f26a9SJung-uk Kim RequiredArgCount = METHOD_GET_ARG_COUNT (ThisName->Info.ArgumentList); 136ca3cf4faSJung-uk Kim 1379c7c683cSJung-uk Kim if (MethodInfo->NumArguments != RequiredArgCount) 138ca3cf4faSJung-uk Kim { 139a88e22b7SJung-uk Kim sprintf (MsgBuffer, "%4.4s requires %u", 1409c7c683cSJung-uk Kim ThisName->Info.Name, RequiredArgCount); 141ca3cf4faSJung-uk Kim 142895f26a9SJung-uk Kim if (MethodInfo->NumArguments < RequiredArgCount) 143895f26a9SJung-uk Kim { 144895f26a9SJung-uk Kim AslError (ASL_WARNING, ASL_MSG_RESERVED_ARG_COUNT_LO, Op, 145895f26a9SJung-uk Kim MsgBuffer); 146895f26a9SJung-uk Kim } 147895f26a9SJung-uk Kim else if ((MethodInfo->NumArguments > RequiredArgCount) && 1489c7c683cSJung-uk Kim !(ThisName->Info.ArgumentList & ARG_COUNT_IS_MINIMUM)) 149ca3cf4faSJung-uk Kim { 150ca3cf4faSJung-uk Kim AslError (ASL_WARNING, ASL_MSG_RESERVED_ARG_COUNT_HI, Op, 151ca3cf4faSJung-uk Kim MsgBuffer); 152ca3cf4faSJung-uk Kim } 153ca3cf4faSJung-uk Kim } 154ca3cf4faSJung-uk Kim 155ca3cf4faSJung-uk Kim /* 156ca3cf4faSJung-uk Kim * Check if method returns no value, but the predefined name is 157ca3cf4faSJung-uk Kim * required to return a value 158ca3cf4faSJung-uk Kim */ 159ca3cf4faSJung-uk Kim if (MethodInfo->NumReturnNoValue && 1609c7c683cSJung-uk Kim ThisName->Info.ExpectedBtypes) 161ca3cf4faSJung-uk Kim { 1629c7c683cSJung-uk Kim AcpiUtGetExpectedReturnTypes (StringBuffer, 1639c7c683cSJung-uk Kim ThisName->Info.ExpectedBtypes); 1648c8be05fSJung-uk Kim 1658c8be05fSJung-uk Kim sprintf (MsgBuffer, "%s required for %4.4s", 1669c7c683cSJung-uk Kim StringBuffer, ThisName->Info.Name); 167ca3cf4faSJung-uk Kim 168ca3cf4faSJung-uk Kim AslError (ASL_WARNING, ASL_MSG_RESERVED_RETURN_VALUE, Op, 169ca3cf4faSJung-uk Kim MsgBuffer); 170ca3cf4faSJung-uk Kim } 171ca3cf4faSJung-uk Kim break; 172ca3cf4faSJung-uk Kim } 173d052a1ccSJung-uk Kim 174d052a1ccSJung-uk Kim return (TRUE); 175ca3cf4faSJung-uk Kim } 176ca3cf4faSJung-uk Kim 177ca3cf4faSJung-uk Kim 178ca3cf4faSJung-uk Kim /******************************************************************************* 179ca3cf4faSJung-uk Kim * 1800b94ba42SJung-uk Kim * FUNCTION: ApCheckForUnexpectedReturnValue 1810b94ba42SJung-uk Kim * 1820b94ba42SJung-uk Kim * PARAMETERS: Op - A parse node of type "RETURN". 1830b94ba42SJung-uk Kim * MethodInfo - Saved info about this method 1840b94ba42SJung-uk Kim * 1850b94ba42SJung-uk Kim * RETURN: None 1860b94ba42SJung-uk Kim * 1870b94ba42SJung-uk Kim * DESCRIPTION: Check for an unexpected return value from a predefined method. 1880b94ba42SJung-uk Kim * Invoked for predefined methods that are defined to not return 1890b94ba42SJung-uk Kim * any value. If there is a return value, issue a remark, since 1900b94ba42SJung-uk Kim * the ASL writer may be confused as to the method definition 1910b94ba42SJung-uk Kim * and/or functionality. 1920b94ba42SJung-uk Kim * 1930b94ba42SJung-uk Kim * Note: We ignore all return values of "Zero", since this is what a standalone 1940b94ba42SJung-uk Kim * Return() statement will always generate -- so we ignore it here -- 1950b94ba42SJung-uk Kim * i.e., there is no difference between Return() and Return(Zero). 1960b94ba42SJung-uk Kim * Also, a null Return() will be disassembled to return(Zero) -- so, we 1970b94ba42SJung-uk Kim * don't want to generate extraneous remarks/warnings for a disassembled 1980b94ba42SJung-uk Kim * ASL file. 1990b94ba42SJung-uk Kim * 2000b94ba42SJung-uk Kim ******************************************************************************/ 2010b94ba42SJung-uk Kim 2020b94ba42SJung-uk Kim static void 2030b94ba42SJung-uk Kim ApCheckForUnexpectedReturnValue ( 2040b94ba42SJung-uk Kim ACPI_PARSE_OBJECT *Op, 2050b94ba42SJung-uk Kim ASL_METHOD_INFO *MethodInfo) 2060b94ba42SJung-uk Kim { 2070b94ba42SJung-uk Kim ACPI_PARSE_OBJECT *ReturnValueOp; 2080b94ba42SJung-uk Kim 2090b94ba42SJung-uk Kim 2100b94ba42SJung-uk Kim /* Ignore Return() and Return(Zero) (they are the same) */ 2110b94ba42SJung-uk Kim 2120b94ba42SJung-uk Kim ReturnValueOp = Op->Asl.Child; 2130b94ba42SJung-uk Kim if (ReturnValueOp->Asl.ParseOpcode == PARSEOP_ZERO) 2140b94ba42SJung-uk Kim { 2150b94ba42SJung-uk Kim return; 2160b94ba42SJung-uk Kim } 2170b94ba42SJung-uk Kim 2180b94ba42SJung-uk Kim /* We have a valid return value, but the reserved name did not expect it */ 2190b94ba42SJung-uk Kim 2200b94ba42SJung-uk Kim AslError (ASL_WARNING, ASL_MSG_RESERVED_NO_RETURN_VAL, 2210b94ba42SJung-uk Kim Op, MethodInfo->Op->Asl.ExternalName); 2220b94ba42SJung-uk Kim } 2230b94ba42SJung-uk Kim 2240b94ba42SJung-uk Kim 2250b94ba42SJung-uk Kim /******************************************************************************* 2260b94ba42SJung-uk Kim * 2278c8be05fSJung-uk Kim * FUNCTION: ApCheckPredefinedReturnValue 2288c8be05fSJung-uk Kim * 2298c8be05fSJung-uk Kim * PARAMETERS: Op - A parse node of type "RETURN". 2308c8be05fSJung-uk Kim * MethodInfo - Saved info about this method 2318c8be05fSJung-uk Kim * 2328c8be05fSJung-uk Kim * RETURN: None 2338c8be05fSJung-uk Kim * 2348c8be05fSJung-uk Kim * DESCRIPTION: If method is a predefined name, attempt to validate the return 2358c8be05fSJung-uk Kim * value. Only "static" types can be validated - a simple return 2368c8be05fSJung-uk Kim * of an integer/string/buffer/package or a named reference to 2378c8be05fSJung-uk Kim * a static object. Values such as a Localx or Argx or a control 2380b94ba42SJung-uk Kim * method invocation are not checked. Issue a warning if there is 2390b94ba42SJung-uk Kim * a valid return value, but the reserved method defines no 2400b94ba42SJung-uk Kim * return value. 2418c8be05fSJung-uk Kim * 2428c8be05fSJung-uk Kim ******************************************************************************/ 2438c8be05fSJung-uk Kim 2448c8be05fSJung-uk Kim void 2458c8be05fSJung-uk Kim ApCheckPredefinedReturnValue ( 2468c8be05fSJung-uk Kim ACPI_PARSE_OBJECT *Op, 2478c8be05fSJung-uk Kim ASL_METHOD_INFO *MethodInfo) 2488c8be05fSJung-uk Kim { 2498c8be05fSJung-uk Kim UINT32 Index; 2508c8be05fSJung-uk Kim ACPI_PARSE_OBJECT *ReturnValueOp; 2519c7c683cSJung-uk Kim const ACPI_PREDEFINED_INFO *ThisName; 2528c8be05fSJung-uk Kim 2538c8be05fSJung-uk Kim 254313a0c13SJung-uk Kim /* 255313a0c13SJung-uk Kim * Check parent method for a match against the predefined name list. 256313a0c13SJung-uk Kim * 257313a0c13SJung-uk Kim * Note: Disable compiler errors/warnings because any errors will be 258313a0c13SJung-uk Kim * caught when analyzing the parent method. Eliminates duplicate errors. 259313a0c13SJung-uk Kim */ 260313a0c13SJung-uk Kim Gbl_AllExceptionsDisabled = TRUE; 2618c8be05fSJung-uk Kim Index = ApCheckForPredefinedName (MethodInfo->Op, 2628c8be05fSJung-uk Kim MethodInfo->Op->Asl.NameSeg); 263313a0c13SJung-uk Kim Gbl_AllExceptionsDisabled = FALSE; 2648c8be05fSJung-uk Kim 2658c8be05fSJung-uk Kim switch (Index) 2668c8be05fSJung-uk Kim { 2670b94ba42SJung-uk Kim case ACPI_EVENT_RESERVED_NAME: /* _Lxx/_Exx/_Wxx/_Qxx methods */ 2680b94ba42SJung-uk Kim 2690b94ba42SJung-uk Kim /* No return value expected, warn if there is one */ 2700b94ba42SJung-uk Kim 2710b94ba42SJung-uk Kim ApCheckForUnexpectedReturnValue (Op, MethodInfo); 2720b94ba42SJung-uk Kim return; 2730b94ba42SJung-uk Kim 2748c8be05fSJung-uk Kim case ACPI_NOT_RESERVED_NAME: /* No underscore or _Txx or _xxx name not matched */ 2758c8be05fSJung-uk Kim case ACPI_PREDEFINED_NAME: /* Resource Name or reserved scope name */ 2768c8be05fSJung-uk Kim case ACPI_COMPILER_RESERVED_NAME: /* A _Txx that was not emitted by compiler */ 2778c8be05fSJung-uk Kim 2788c8be05fSJung-uk Kim /* Just return, nothing to do */ 2798c8be05fSJung-uk Kim return; 2808c8be05fSJung-uk Kim 2813f5e024cSJung-uk Kim default: /* A standard predefined ACPI name */ 2828c8be05fSJung-uk Kim 2839c7c683cSJung-uk Kim ThisName = &AcpiGbl_PredefinedMethods[Index]; 2849c7c683cSJung-uk Kim if (!ThisName->Info.ExpectedBtypes) 2858c8be05fSJung-uk Kim { 2860b94ba42SJung-uk Kim /* No return value expected, warn if there is one */ 2870b94ba42SJung-uk Kim 2880b94ba42SJung-uk Kim ApCheckForUnexpectedReturnValue (Op, MethodInfo); 2898c8be05fSJung-uk Kim return; 2908c8be05fSJung-uk Kim } 2918c8be05fSJung-uk Kim 2928c8be05fSJung-uk Kim /* Get the object returned, it is the next argument */ 2938c8be05fSJung-uk Kim 2948c8be05fSJung-uk Kim ReturnValueOp = Op->Asl.Child; 2958c8be05fSJung-uk Kim switch (ReturnValueOp->Asl.ParseOpcode) 2968c8be05fSJung-uk Kim { 2978c8be05fSJung-uk Kim case PARSEOP_ZERO: 2988c8be05fSJung-uk Kim case PARSEOP_ONE: 2998c8be05fSJung-uk Kim case PARSEOP_ONES: 3008c8be05fSJung-uk Kim case PARSEOP_INTEGER: 3018c8be05fSJung-uk Kim case PARSEOP_STRING_LITERAL: 3028c8be05fSJung-uk Kim case PARSEOP_BUFFER: 3038c8be05fSJung-uk Kim case PARSEOP_PACKAGE: 3048c8be05fSJung-uk Kim 3058c8be05fSJung-uk Kim /* Static data return object - check against expected type */ 3068c8be05fSJung-uk Kim 3079c7c683cSJung-uk Kim ApCheckObjectType (ThisName->Info.Name, ReturnValueOp, 3089c7c683cSJung-uk Kim ThisName->Info.ExpectedBtypes, ACPI_NOT_PACKAGE_ELEMENT); 3099c48c75eSJung-uk Kim 3109c48c75eSJung-uk Kim /* For packages, check the individual package elements */ 3119c48c75eSJung-uk Kim 3129c48c75eSJung-uk Kim if (ReturnValueOp->Asl.ParseOpcode == PARSEOP_PACKAGE) 3139c48c75eSJung-uk Kim { 3149c7c683cSJung-uk Kim ApCheckPackage (ReturnValueOp, ThisName); 3159c48c75eSJung-uk Kim } 3168c8be05fSJung-uk Kim break; 3178c8be05fSJung-uk Kim 3188c8be05fSJung-uk Kim default: 3198c8be05fSJung-uk Kim /* 3208c8be05fSJung-uk Kim * All other ops are very difficult or impossible to typecheck at 3218c8be05fSJung-uk Kim * compile time. These include all Localx, Argx, and method 3228c8be05fSJung-uk Kim * invocations. Also, NAMESEG and NAMESTRING because the type of 3238c8be05fSJung-uk Kim * any named object can be changed at runtime (for example, 3248c8be05fSJung-uk Kim * CopyObject will change the type of the target object.) 3258c8be05fSJung-uk Kim */ 3268c8be05fSJung-uk Kim break; 3278c8be05fSJung-uk Kim } 3288c8be05fSJung-uk Kim } 3298c8be05fSJung-uk Kim } 3308c8be05fSJung-uk Kim 3318c8be05fSJung-uk Kim 3328c8be05fSJung-uk Kim /******************************************************************************* 3338c8be05fSJung-uk Kim * 334ca3cf4faSJung-uk Kim * FUNCTION: ApCheckForPredefinedObject 335ca3cf4faSJung-uk Kim * 336ca3cf4faSJung-uk Kim * PARAMETERS: Op - A parse node 337ca3cf4faSJung-uk Kim * Name - The ACPI name to be checked 338ca3cf4faSJung-uk Kim * 339ca3cf4faSJung-uk Kim * RETURN: None 340ca3cf4faSJung-uk Kim * 341ca3cf4faSJung-uk Kim * DESCRIPTION: Check for a predefined name for a static object (created via 342ca3cf4faSJung-uk Kim * the ASL Name operator). If it is a predefined ACPI name, ensure 343ca3cf4faSJung-uk Kim * that the name does not require any arguments (which would 344ca3cf4faSJung-uk Kim * require a control method implemenation of the name), and that 345ca3cf4faSJung-uk Kim * the type of the object is one of the expected types for the 346ca3cf4faSJung-uk Kim * predefined name. 347ca3cf4faSJung-uk Kim * 348ca3cf4faSJung-uk Kim ******************************************************************************/ 349ca3cf4faSJung-uk Kim 350ca3cf4faSJung-uk Kim void 351ca3cf4faSJung-uk Kim ApCheckForPredefinedObject ( 352ca3cf4faSJung-uk Kim ACPI_PARSE_OBJECT *Op, 353ca3cf4faSJung-uk Kim char *Name) 354ca3cf4faSJung-uk Kim { 355ca3cf4faSJung-uk Kim UINT32 Index; 3569c48c75eSJung-uk Kim ACPI_PARSE_OBJECT *ObjectOp; 3579c7c683cSJung-uk Kim const ACPI_PREDEFINED_INFO *ThisName; 358ca3cf4faSJung-uk Kim 359ca3cf4faSJung-uk Kim 360ca3cf4faSJung-uk Kim /* 361ca3cf4faSJung-uk Kim * Check for a real predefined name -- not a resource descriptor name 362ca3cf4faSJung-uk Kim * or a predefined scope name 363ca3cf4faSJung-uk Kim */ 364ca3cf4faSJung-uk Kim Index = ApCheckForPredefinedName (Op, Name); 3653f5e024cSJung-uk Kim 3663f5e024cSJung-uk Kim switch (Index) 367ca3cf4faSJung-uk Kim { 3683f5e024cSJung-uk Kim case ACPI_NOT_RESERVED_NAME: /* No underscore or _Txx or _xxx name not matched */ 3693f5e024cSJung-uk Kim case ACPI_PREDEFINED_NAME: /* Resource Name or reserved scope name */ 3703f5e024cSJung-uk Kim case ACPI_COMPILER_RESERVED_NAME: /* A _Txx that was not emitted by compiler */ 3713f5e024cSJung-uk Kim 3723f5e024cSJung-uk Kim /* Nothing to do */ 3733f5e024cSJung-uk Kim return; 3743f5e024cSJung-uk Kim 3753f5e024cSJung-uk Kim case ACPI_EVENT_RESERVED_NAME: /* _Lxx/_Exx/_Wxx/_Qxx methods */ 3763f5e024cSJung-uk Kim 3773f5e024cSJung-uk Kim /* 3783f5e024cSJung-uk Kim * These names must be control methods, by definition in ACPI spec. 3793f5e024cSJung-uk Kim * Also because they are defined to return no value. None of them 3803f5e024cSJung-uk Kim * require any arguments. 3813f5e024cSJung-uk Kim */ 3823f5e024cSJung-uk Kim AslError (ASL_ERROR, ASL_MSG_RESERVED_METHOD, Op, 3833f5e024cSJung-uk Kim "with zero arguments"); 3843f5e024cSJung-uk Kim return; 3853f5e024cSJung-uk Kim 3869c48c75eSJung-uk Kim default: 387a9d8d09cSJung-uk Kim 3889c48c75eSJung-uk Kim break; 3899c48c75eSJung-uk Kim } 3909c48c75eSJung-uk Kim 3919c48c75eSJung-uk Kim /* A standard predefined ACPI name */ 3923f5e024cSJung-uk Kim 3933f5e024cSJung-uk Kim /* 3943f5e024cSJung-uk Kim * If this predefined name requires input arguments, then 3953f5e024cSJung-uk Kim * it must be implemented as a control method 3963f5e024cSJung-uk Kim */ 3979c7c683cSJung-uk Kim ThisName = &AcpiGbl_PredefinedMethods[Index]; 398895f26a9SJung-uk Kim if (METHOD_GET_ARG_COUNT (ThisName->Info.ArgumentList) > 0) 3993f5e024cSJung-uk Kim { 4003f5e024cSJung-uk Kim AslError (ASL_ERROR, ASL_MSG_RESERVED_METHOD, Op, 4013f5e024cSJung-uk Kim "with arguments"); 402ca3cf4faSJung-uk Kim return; 403ca3cf4faSJung-uk Kim } 404ca3cf4faSJung-uk Kim 405ca3cf4faSJung-uk Kim /* 4063f5e024cSJung-uk Kim * If no return value is expected from this predefined name, then 4073f5e024cSJung-uk Kim * it follows that it must be implemented as a control method 4083f5e024cSJung-uk Kim * (with zero args, because the args > 0 case was handled above) 4093f5e024cSJung-uk Kim * Examples are: _DIS, _INI, _IRC, _OFF, _ON, _PSx 410ca3cf4faSJung-uk Kim */ 4119c7c683cSJung-uk Kim if (!ThisName->Info.ExpectedBtypes) 412ca3cf4faSJung-uk Kim { 413ca3cf4faSJung-uk Kim AslError (ASL_ERROR, ASL_MSG_RESERVED_METHOD, Op, 4143f5e024cSJung-uk Kim "with zero arguments"); 4153f5e024cSJung-uk Kim return; 416ca3cf4faSJung-uk Kim } 417ca3cf4faSJung-uk Kim 418ca3cf4faSJung-uk Kim /* Typecheck the actual object, it is the next argument */ 419ca3cf4faSJung-uk Kim 4209c48c75eSJung-uk Kim ObjectOp = Op->Asl.Child->Asl.Next; 4219c7c683cSJung-uk Kim ApCheckObjectType (ThisName->Info.Name, Op->Asl.Child->Asl.Next, 4229c7c683cSJung-uk Kim ThisName->Info.ExpectedBtypes, ACPI_NOT_PACKAGE_ELEMENT); 4239c48c75eSJung-uk Kim 4249c48c75eSJung-uk Kim /* For packages, check the individual package elements */ 4259c48c75eSJung-uk Kim 4269c48c75eSJung-uk Kim if (ObjectOp->Asl.ParseOpcode == PARSEOP_PACKAGE) 4279c48c75eSJung-uk Kim { 4289c7c683cSJung-uk Kim ApCheckPackage (ObjectOp, ThisName); 4293f5e024cSJung-uk Kim } 430ca3cf4faSJung-uk Kim } 431ca3cf4faSJung-uk Kim 432ca3cf4faSJung-uk Kim 433ca3cf4faSJung-uk Kim /******************************************************************************* 434ca3cf4faSJung-uk Kim * 435ca3cf4faSJung-uk Kim * FUNCTION: ApCheckForPredefinedName 436ca3cf4faSJung-uk Kim * 437ca3cf4faSJung-uk Kim * PARAMETERS: Op - A parse node 438ca3cf4faSJung-uk Kim * Name - NameSeg to check 439ca3cf4faSJung-uk Kim * 440ca3cf4faSJung-uk Kim * RETURN: None 441ca3cf4faSJung-uk Kim * 442ca3cf4faSJung-uk Kim * DESCRIPTION: Check a NameSeg against the reserved list. 443ca3cf4faSJung-uk Kim * 444ca3cf4faSJung-uk Kim ******************************************************************************/ 445ca3cf4faSJung-uk Kim 446ca3cf4faSJung-uk Kim UINT32 447ca3cf4faSJung-uk Kim ApCheckForPredefinedName ( 448ca3cf4faSJung-uk Kim ACPI_PARSE_OBJECT *Op, 449ca3cf4faSJung-uk Kim char *Name) 450ca3cf4faSJung-uk Kim { 451ca3cf4faSJung-uk Kim UINT32 i; 4529c7c683cSJung-uk Kim const ACPI_PREDEFINED_INFO *ThisName; 453ca3cf4faSJung-uk Kim 454ca3cf4faSJung-uk Kim 455ca3cf4faSJung-uk Kim if (Name[0] == 0) 456ca3cf4faSJung-uk Kim { 457ca3cf4faSJung-uk Kim AcpiOsPrintf ("Found a null name, external = %s\n", 458ca3cf4faSJung-uk Kim Op->Asl.ExternalName); 459ca3cf4faSJung-uk Kim } 460ca3cf4faSJung-uk Kim 461ca3cf4faSJung-uk Kim /* All reserved names are prefixed with a single underscore */ 462ca3cf4faSJung-uk Kim 463ca3cf4faSJung-uk Kim if (Name[0] != '_') 464ca3cf4faSJung-uk Kim { 465ca3cf4faSJung-uk Kim return (ACPI_NOT_RESERVED_NAME); 466ca3cf4faSJung-uk Kim } 467ca3cf4faSJung-uk Kim 468ca3cf4faSJung-uk Kim /* Check for a standard predefined method name */ 469ca3cf4faSJung-uk Kim 4709c7c683cSJung-uk Kim ThisName = AcpiGbl_PredefinedMethods; 4719c7c683cSJung-uk Kim for (i = 0; ThisName->Info.Name[0]; i++) 472ca3cf4faSJung-uk Kim { 4739c7c683cSJung-uk Kim if (ACPI_COMPARE_NAME (Name, ThisName->Info.Name)) 474ca3cf4faSJung-uk Kim { 475ca3cf4faSJung-uk Kim /* Return index into predefined array */ 476ca3cf4faSJung-uk Kim return (i); 477ca3cf4faSJung-uk Kim } 4789c7c683cSJung-uk Kim 4799c7c683cSJung-uk Kim ThisName++; /* Does not account for extra package data, but is OK */ 480ca3cf4faSJung-uk Kim } 481ca3cf4faSJung-uk Kim 482ca3cf4faSJung-uk Kim /* Check for resource names and predefined scope names */ 483ca3cf4faSJung-uk Kim 4849c7c683cSJung-uk Kim ThisName = AcpiGbl_ResourceNames; 4859c7c683cSJung-uk Kim while (ThisName->Info.Name[0]) 486ca3cf4faSJung-uk Kim { 4879c7c683cSJung-uk Kim if (ACPI_COMPARE_NAME (Name, ThisName->Info.Name)) 488ca3cf4faSJung-uk Kim { 489ca3cf4faSJung-uk Kim return (ACPI_PREDEFINED_NAME); 490ca3cf4faSJung-uk Kim } 491ca3cf4faSJung-uk Kim 4929c7c683cSJung-uk Kim ThisName++; 4939c7c683cSJung-uk Kim } 4949c7c683cSJung-uk Kim 4959c7c683cSJung-uk Kim ThisName = AcpiGbl_ScopeNames; 4969c7c683cSJung-uk Kim while (ThisName->Info.Name[0]) 497ca3cf4faSJung-uk Kim { 4989c7c683cSJung-uk Kim if (ACPI_COMPARE_NAME (Name, ThisName->Info.Name)) 499ca3cf4faSJung-uk Kim { 500ca3cf4faSJung-uk Kim return (ACPI_PREDEFINED_NAME); 501ca3cf4faSJung-uk Kim } 5029c7c683cSJung-uk Kim 5039c7c683cSJung-uk Kim ThisName++; 504ca3cf4faSJung-uk Kim } 505ca3cf4faSJung-uk Kim 5063f5e024cSJung-uk Kim /* Check for _Lxx/_Exx/_Wxx/_Qxx/_T_x. Warning if unknown predefined name */ 507ca3cf4faSJung-uk Kim 508ca3cf4faSJung-uk Kim return (ApCheckForSpecialName (Op, Name)); 509ca3cf4faSJung-uk Kim } 510ca3cf4faSJung-uk Kim 511ca3cf4faSJung-uk Kim 512ca3cf4faSJung-uk Kim /******************************************************************************* 513ca3cf4faSJung-uk Kim * 514ca3cf4faSJung-uk Kim * FUNCTION: ApCheckForSpecialName 515ca3cf4faSJung-uk Kim * 516ca3cf4faSJung-uk Kim * PARAMETERS: Op - A parse node 517ca3cf4faSJung-uk Kim * Name - NameSeg to check 518ca3cf4faSJung-uk Kim * 519ca3cf4faSJung-uk Kim * RETURN: None 520ca3cf4faSJung-uk Kim * 521ca3cf4faSJung-uk Kim * DESCRIPTION: Check for the "special" predefined names - 5223f5e024cSJung-uk Kim * _Lxx, _Exx, _Qxx, _Wxx, and _T_x 523ca3cf4faSJung-uk Kim * 524ca3cf4faSJung-uk Kim ******************************************************************************/ 525ca3cf4faSJung-uk Kim 526ca3cf4faSJung-uk Kim static UINT32 527ca3cf4faSJung-uk Kim ApCheckForSpecialName ( 528ca3cf4faSJung-uk Kim ACPI_PARSE_OBJECT *Op, 529ca3cf4faSJung-uk Kim char *Name) 530ca3cf4faSJung-uk Kim { 531ca3cf4faSJung-uk Kim 532ca3cf4faSJung-uk Kim /* 5333f5e024cSJung-uk Kim * Check for the "special" predefined names. We already know that the 5343f5e024cSJung-uk Kim * first character is an underscore. 535ca3cf4faSJung-uk Kim * GPE: _Lxx 536ca3cf4faSJung-uk Kim * GPE: _Exx 5373f5e024cSJung-uk Kim * GPE: _Wxx 538ca3cf4faSJung-uk Kim * EC: _Qxx 539ca3cf4faSJung-uk Kim */ 540ca3cf4faSJung-uk Kim if ((Name[1] == 'L') || 541ca3cf4faSJung-uk Kim (Name[1] == 'E') || 5423f5e024cSJung-uk Kim (Name[1] == 'W') || 543ca3cf4faSJung-uk Kim (Name[1] == 'Q')) 544ca3cf4faSJung-uk Kim { 545ca3cf4faSJung-uk Kim /* The next two characters must be hex digits */ 546ca3cf4faSJung-uk Kim 547ca3cf4faSJung-uk Kim if ((isxdigit ((int) Name[2])) && 548ca3cf4faSJung-uk Kim (isxdigit ((int) Name[3]))) 549ca3cf4faSJung-uk Kim { 550ca3cf4faSJung-uk Kim return (ACPI_EVENT_RESERVED_NAME); 551ca3cf4faSJung-uk Kim } 552ca3cf4faSJung-uk Kim } 553ca3cf4faSJung-uk Kim 554ca3cf4faSJung-uk Kim /* Check for the names reserved for the compiler itself: _T_x */ 555ca3cf4faSJung-uk Kim 556ca3cf4faSJung-uk Kim else if ((Op->Asl.ExternalName[1] == 'T') && 557ca3cf4faSJung-uk Kim (Op->Asl.ExternalName[2] == '_')) 558ca3cf4faSJung-uk Kim { 559ca3cf4faSJung-uk Kim /* Ignore if actually emitted by the compiler */ 560ca3cf4faSJung-uk Kim 561ca3cf4faSJung-uk Kim if (Op->Asl.CompileFlags & NODE_COMPILER_EMITTED) 562ca3cf4faSJung-uk Kim { 563ca3cf4faSJung-uk Kim return (ACPI_NOT_RESERVED_NAME); 564ca3cf4faSJung-uk Kim } 565ca3cf4faSJung-uk Kim 566ca3cf4faSJung-uk Kim /* 567ca3cf4faSJung-uk Kim * Was not actually emitted by the compiler. This is a special case, 568ca3cf4faSJung-uk Kim * however. If the ASL code being compiled was the result of a 569ca3cf4faSJung-uk Kim * dissasembly, it may possibly contain valid compiler-emitted names 570ca3cf4faSJung-uk Kim * of the form "_T_x". We don't want to issue an error or even a 571ca3cf4faSJung-uk Kim * warning and force the user to manually change the names. So, we 572ca3cf4faSJung-uk Kim * will issue a remark instead. 573ca3cf4faSJung-uk Kim */ 574ca3cf4faSJung-uk Kim AslError (ASL_REMARK, ASL_MSG_COMPILER_RESERVED, Op, Op->Asl.ExternalName); 575ca3cf4faSJung-uk Kim return (ACPI_COMPILER_RESERVED_NAME); 576ca3cf4faSJung-uk Kim } 577ca3cf4faSJung-uk Kim 578ca3cf4faSJung-uk Kim /* 579ca3cf4faSJung-uk Kim * The name didn't match any of the known predefined names. Flag it as a 580ca3cf4faSJung-uk Kim * warning, since the entire namespace starting with an underscore is 581ca3cf4faSJung-uk Kim * reserved by the ACPI spec. 582ca3cf4faSJung-uk Kim */ 583ca3cf4faSJung-uk Kim AslError (ASL_WARNING, ASL_MSG_UNKNOWN_RESERVED_NAME, Op, 584ca3cf4faSJung-uk Kim Op->Asl.ExternalName); 585ca3cf4faSJung-uk Kim 586ca3cf4faSJung-uk Kim return (ACPI_NOT_RESERVED_NAME); 587ca3cf4faSJung-uk Kim } 588ca3cf4faSJung-uk Kim 589ca3cf4faSJung-uk Kim 590ca3cf4faSJung-uk Kim /******************************************************************************* 591ca3cf4faSJung-uk Kim * 592ca3cf4faSJung-uk Kim * FUNCTION: ApCheckObjectType 593ca3cf4faSJung-uk Kim * 594efcc2a30SJung-uk Kim * PARAMETERS: PredefinedName - Name of the predefined object we are checking 595efcc2a30SJung-uk Kim * Op - Current parse node 596ca3cf4faSJung-uk Kim * ExpectedBtypes - Bitmap of expected return type(s) 5979c48c75eSJung-uk Kim * PackageIndex - Index of object within parent package (if 5989c48c75eSJung-uk Kim * applicable - ACPI_NOT_PACKAGE_ELEMENT 5999c48c75eSJung-uk Kim * otherwise) 600ca3cf4faSJung-uk Kim * 601ca3cf4faSJung-uk Kim * RETURN: None 602ca3cf4faSJung-uk Kim * 603ca3cf4faSJung-uk Kim * DESCRIPTION: Check if the object type is one of the types that is expected 604ca3cf4faSJung-uk Kim * by the predefined name. Only a limited number of object types 605ca3cf4faSJung-uk Kim * can be returned by the predefined names. 606ca3cf4faSJung-uk Kim * 607ca3cf4faSJung-uk Kim ******************************************************************************/ 608ca3cf4faSJung-uk Kim 6099c48c75eSJung-uk Kim ACPI_STATUS 610ca3cf4faSJung-uk Kim ApCheckObjectType ( 611efcc2a30SJung-uk Kim const char *PredefinedName, 612ca3cf4faSJung-uk Kim ACPI_PARSE_OBJECT *Op, 6139c48c75eSJung-uk Kim UINT32 ExpectedBtypes, 6149c48c75eSJung-uk Kim UINT32 PackageIndex) 615ca3cf4faSJung-uk Kim { 616ca3cf4faSJung-uk Kim UINT32 ReturnBtype; 6179c48c75eSJung-uk Kim char *TypeName; 618ca3cf4faSJung-uk Kim 619ca3cf4faSJung-uk Kim 6209c48c75eSJung-uk Kim if (!Op) 6219c48c75eSJung-uk Kim { 6229c48c75eSJung-uk Kim return (AE_TYPE); 6239c48c75eSJung-uk Kim } 6249c48c75eSJung-uk Kim 6259c48c75eSJung-uk Kim /* Map the parse opcode to a bitmapped return type (RTYPE) */ 6269c48c75eSJung-uk Kim 627ca3cf4faSJung-uk Kim switch (Op->Asl.ParseOpcode) 628ca3cf4faSJung-uk Kim { 6298c8be05fSJung-uk Kim case PARSEOP_ZERO: 6308c8be05fSJung-uk Kim case PARSEOP_ONE: 6318c8be05fSJung-uk Kim case PARSEOP_ONES: 632ca3cf4faSJung-uk Kim case PARSEOP_INTEGER: 633a9d8d09cSJung-uk Kim 634ca3cf4faSJung-uk Kim ReturnBtype = ACPI_RTYPE_INTEGER; 6359c48c75eSJung-uk Kim TypeName = "Integer"; 636ca3cf4faSJung-uk Kim break; 637ca3cf4faSJung-uk Kim 638ca3cf4faSJung-uk Kim case PARSEOP_STRING_LITERAL: 639a9d8d09cSJung-uk Kim 640ca3cf4faSJung-uk Kim ReturnBtype = ACPI_RTYPE_STRING; 6419c48c75eSJung-uk Kim TypeName = "String"; 6429c48c75eSJung-uk Kim break; 6439c48c75eSJung-uk Kim 6449c48c75eSJung-uk Kim case PARSEOP_BUFFER: 645a9d8d09cSJung-uk Kim 6469c48c75eSJung-uk Kim ReturnBtype = ACPI_RTYPE_BUFFER; 6479c48c75eSJung-uk Kim TypeName = "Buffer"; 648ca3cf4faSJung-uk Kim break; 649ca3cf4faSJung-uk Kim 650ca3cf4faSJung-uk Kim case PARSEOP_PACKAGE: 6513f0275a0SJung-uk Kim case PARSEOP_VAR_PACKAGE: 652a9d8d09cSJung-uk Kim 653ca3cf4faSJung-uk Kim ReturnBtype = ACPI_RTYPE_PACKAGE; 6549c48c75eSJung-uk Kim TypeName = "Package"; 6559c48c75eSJung-uk Kim break; 6569c48c75eSJung-uk Kim 6579c48c75eSJung-uk Kim case PARSEOP_NAMESEG: 6589c48c75eSJung-uk Kim case PARSEOP_NAMESTRING: 659a9d8d09cSJung-uk Kim /* 660a9d8d09cSJung-uk Kim * Ignore any named references within a package object. 661a9d8d09cSJung-uk Kim * 662a9d8d09cSJung-uk Kim * For Package objects, references are allowed instead of any of the 663a9d8d09cSJung-uk Kim * standard data types (Integer/String/Buffer/Package). These 664a9d8d09cSJung-uk Kim * references are resolved at runtime. NAMESEG and NAMESTRING are 665a9d8d09cSJung-uk Kim * impossible to typecheck at compile time because the type of 666a9d8d09cSJung-uk Kim * any named object can be changed at runtime (for example, 667a9d8d09cSJung-uk Kim * CopyObject will change the type of the target object). 668a9d8d09cSJung-uk Kim */ 669a9d8d09cSJung-uk Kim if (PackageIndex != ACPI_NOT_PACKAGE_ELEMENT) 670a9d8d09cSJung-uk Kim { 671a9d8d09cSJung-uk Kim return (AE_OK); 672a9d8d09cSJung-uk Kim } 673a9d8d09cSJung-uk Kim 6749c48c75eSJung-uk Kim ReturnBtype = ACPI_RTYPE_REFERENCE; 6759c48c75eSJung-uk Kim TypeName = "Reference"; 676ca3cf4faSJung-uk Kim break; 677ca3cf4faSJung-uk Kim 678ca3cf4faSJung-uk Kim default: 679a9d8d09cSJung-uk Kim 680ca3cf4faSJung-uk Kim /* Not one of the supported object types */ 681ca3cf4faSJung-uk Kim 6829c48c75eSJung-uk Kim TypeName = UtGetOpName (Op->Asl.ParseOpcode); 683ca3cf4faSJung-uk Kim goto TypeErrorExit; 684ca3cf4faSJung-uk Kim } 685ca3cf4faSJung-uk Kim 6868c8be05fSJung-uk Kim /* Exit if the object is one of the expected types */ 687ca3cf4faSJung-uk Kim 688ca3cf4faSJung-uk Kim if (ReturnBtype & ExpectedBtypes) 689ca3cf4faSJung-uk Kim { 6909c48c75eSJung-uk Kim return (AE_OK); 691ca3cf4faSJung-uk Kim } 692ca3cf4faSJung-uk Kim 693ca3cf4faSJung-uk Kim 694ca3cf4faSJung-uk Kim TypeErrorExit: 695ca3cf4faSJung-uk Kim 696ca3cf4faSJung-uk Kim /* Format the expected types and emit an error message */ 697ca3cf4faSJung-uk Kim 6989c7c683cSJung-uk Kim AcpiUtGetExpectedReturnTypes (StringBuffer, ExpectedBtypes); 6998c8be05fSJung-uk Kim 7009c48c75eSJung-uk Kim if (PackageIndex == ACPI_NOT_PACKAGE_ELEMENT) 7019c48c75eSJung-uk Kim { 7029c7c683cSJung-uk Kim sprintf (MsgBuffer, "%4.4s: found %s, %s required", 7039c48c75eSJung-uk Kim PredefinedName, TypeName, StringBuffer); 7049c48c75eSJung-uk Kim } 7059c48c75eSJung-uk Kim else 7069c48c75eSJung-uk Kim { 7079c7c683cSJung-uk Kim sprintf (MsgBuffer, "%4.4s: found %s at index %u, %s required", 7089c48c75eSJung-uk Kim PredefinedName, TypeName, PackageIndex, StringBuffer); 7099c48c75eSJung-uk Kim } 710ca3cf4faSJung-uk Kim 7119c48c75eSJung-uk Kim AslError (ASL_ERROR, ASL_MSG_RESERVED_OPERAND_TYPE, Op, MsgBuffer); 7129c48c75eSJung-uk Kim return (AE_TYPE); 713ca3cf4faSJung-uk Kim } 714ca3cf4faSJung-uk Kim 715ca3cf4faSJung-uk Kim 716ca3cf4faSJung-uk Kim /******************************************************************************* 717ca3cf4faSJung-uk Kim * 718ca3cf4faSJung-uk Kim * FUNCTION: ApDisplayReservedNames 719ca3cf4faSJung-uk Kim * 720ca3cf4faSJung-uk Kim * PARAMETERS: None 721ca3cf4faSJung-uk Kim * 722ca3cf4faSJung-uk Kim * RETURN: None 723ca3cf4faSJung-uk Kim * 724ca3cf4faSJung-uk Kim * DESCRIPTION: Dump information about the ACPI predefined names and predefined 725ca3cf4faSJung-uk Kim * resource descriptor names. 726ca3cf4faSJung-uk Kim * 727ca3cf4faSJung-uk Kim ******************************************************************************/ 728ca3cf4faSJung-uk Kim 729ca3cf4faSJung-uk Kim void 730ca3cf4faSJung-uk Kim ApDisplayReservedNames ( 731ca3cf4faSJung-uk Kim void) 732ca3cf4faSJung-uk Kim { 733ca3cf4faSJung-uk Kim const ACPI_PREDEFINED_INFO *ThisName; 734ca3cf4faSJung-uk Kim UINT32 Count; 7359c7c683cSJung-uk Kim UINT32 NumTypes; 736ca3cf4faSJung-uk Kim 737ca3cf4faSJung-uk Kim 738ca3cf4faSJung-uk Kim /* 739ca3cf4faSJung-uk Kim * Predefined names/methods 740ca3cf4faSJung-uk Kim */ 741ca3cf4faSJung-uk Kim printf ("\nPredefined Name Information\n\n"); 742ca3cf4faSJung-uk Kim 743ca3cf4faSJung-uk Kim Count = 0; 7449c7c683cSJung-uk Kim ThisName = AcpiGbl_PredefinedMethods; 745ca3cf4faSJung-uk Kim while (ThisName->Info.Name[0]) 746ca3cf4faSJung-uk Kim { 7479c7c683cSJung-uk Kim AcpiUtDisplayPredefinedMethod (MsgBuffer, ThisName, FALSE); 748ca3cf4faSJung-uk Kim Count++; 7499c7c683cSJung-uk Kim ThisName = AcpiUtGetNextPredefinedMethod (ThisName); 750ca3cf4faSJung-uk Kim } 751ca3cf4faSJung-uk Kim 752ca3cf4faSJung-uk Kim printf ("%u Predefined Names are recognized\n", Count); 753ca3cf4faSJung-uk Kim 754ca3cf4faSJung-uk Kim /* 755ca3cf4faSJung-uk Kim * Resource Descriptor names 756ca3cf4faSJung-uk Kim */ 7579c7c683cSJung-uk Kim printf ("\nPredefined Names for Resource Descriptor Fields\n\n"); 758ca3cf4faSJung-uk Kim 759ca3cf4faSJung-uk Kim Count = 0; 7609c7c683cSJung-uk Kim ThisName = AcpiGbl_ResourceNames; 761ca3cf4faSJung-uk Kim while (ThisName->Info.Name[0]) 762ca3cf4faSJung-uk Kim { 7639c7c683cSJung-uk Kim NumTypes = AcpiUtGetResourceBitWidth (MsgBuffer, 7649c7c683cSJung-uk Kim ThisName->Info.ArgumentList); 7659c7c683cSJung-uk Kim 7669c7c683cSJung-uk Kim printf ("%4.4s Field is %s bits wide%s\n", 7679c7c683cSJung-uk Kim ThisName->Info.Name, MsgBuffer, 7689c7c683cSJung-uk Kim (NumTypes > 1) ? " (depending on descriptor type)" : ""); 7699c7c683cSJung-uk Kim 770ca3cf4faSJung-uk Kim Count++; 771ca3cf4faSJung-uk Kim ThisName++; 772ca3cf4faSJung-uk Kim } 773ca3cf4faSJung-uk Kim 7749c7c683cSJung-uk Kim printf ("%u Resource Descriptor Field Names are recognized\n", Count); 775ca3cf4faSJung-uk Kim 776ca3cf4faSJung-uk Kim /* 777ca3cf4faSJung-uk Kim * Predefined scope names 778ca3cf4faSJung-uk Kim */ 7799c7c683cSJung-uk Kim printf ("\nPredefined Scope/Device Names (automatically created at root)\n\n"); 780ca3cf4faSJung-uk Kim 7819c7c683cSJung-uk Kim ThisName = AcpiGbl_ScopeNames; 782ca3cf4faSJung-uk Kim while (ThisName->Info.Name[0]) 783ca3cf4faSJung-uk Kim { 7849c7c683cSJung-uk Kim printf ("%4.4s Scope/Device\n", ThisName->Info.Name); 785ca3cf4faSJung-uk Kim ThisName++; 786ca3cf4faSJung-uk Kim } 787ca3cf4faSJung-uk Kim } 788