1aa2aa9a6SDana Myers /****************************************************************************** 2aa2aa9a6SDana Myers * 3aa2aa9a6SDana Myers * Module Name: nspredef - Validation of ACPI predefined methods and objects 4aa2aa9a6SDana Myers * 5aa2aa9a6SDana Myers *****************************************************************************/ 6aa2aa9a6SDana Myers 726f3cdf0SGordon Ross /* 8*385cc6b4SJerry Jelinek * Copyright (C) 2000 - 2016, Intel Corp. 9aa2aa9a6SDana Myers * All rights reserved. 10aa2aa9a6SDana Myers * 1126f3cdf0SGordon Ross * Redistribution and use in source and binary forms, with or without 1226f3cdf0SGordon Ross * modification, are permitted provided that the following conditions 1326f3cdf0SGordon Ross * are met: 1426f3cdf0SGordon Ross * 1. Redistributions of source code must retain the above copyright 1526f3cdf0SGordon Ross * notice, this list of conditions, and the following disclaimer, 1626f3cdf0SGordon Ross * without modification. 1726f3cdf0SGordon Ross * 2. Redistributions in binary form must reproduce at minimum a disclaimer 1826f3cdf0SGordon Ross * substantially similar to the "NO WARRANTY" disclaimer below 1926f3cdf0SGordon Ross * ("Disclaimer") and any redistribution must be conditioned upon 2026f3cdf0SGordon Ross * including a substantially similar Disclaimer requirement for further 2126f3cdf0SGordon Ross * binary redistribution. 2226f3cdf0SGordon Ross * 3. Neither the names of the above-listed copyright holders nor the names 2326f3cdf0SGordon Ross * of any contributors may be used to endorse or promote products derived 2426f3cdf0SGordon Ross * from this software without specific prior written permission. 25aa2aa9a6SDana Myers * 2626f3cdf0SGordon Ross * Alternatively, this software may be distributed under the terms of the 2726f3cdf0SGordon Ross * GNU General Public License ("GPL") version 2 as published by the Free 2826f3cdf0SGordon Ross * Software Foundation. 29aa2aa9a6SDana Myers * 3026f3cdf0SGordon Ross * NO WARRANTY 3126f3cdf0SGordon Ross * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 3226f3cdf0SGordon Ross * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 3326f3cdf0SGordon Ross * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 3426f3cdf0SGordon Ross * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 3526f3cdf0SGordon Ross * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 3626f3cdf0SGordon Ross * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 3726f3cdf0SGordon Ross * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 3826f3cdf0SGordon Ross * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 3926f3cdf0SGordon Ross * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 4026f3cdf0SGordon Ross * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 4126f3cdf0SGordon Ross * POSSIBILITY OF SUCH DAMAGES. 4226f3cdf0SGordon Ross */ 43aa2aa9a6SDana Myers 4457190917SDana Myers #define ACPI_CREATE_PREDEFINED_TABLE 45aa2aa9a6SDana Myers 46aa2aa9a6SDana Myers #include "acpi.h" 47aa2aa9a6SDana Myers #include "accommon.h" 48aa2aa9a6SDana Myers #include "acnamesp.h" 49aa2aa9a6SDana Myers #include "acpredef.h" 50aa2aa9a6SDana Myers 51aa2aa9a6SDana Myers 52aa2aa9a6SDana Myers #define _COMPONENT ACPI_NAMESPACE 53aa2aa9a6SDana Myers ACPI_MODULE_NAME ("nspredef") 54aa2aa9a6SDana Myers 55aa2aa9a6SDana Myers 56aa2aa9a6SDana Myers /******************************************************************************* 57aa2aa9a6SDana Myers * 58aa2aa9a6SDana Myers * This module validates predefined ACPI objects that appear in the namespace, 59aa2aa9a6SDana Myers * at the time they are evaluated (via AcpiEvaluateObject). The purpose of this 60aa2aa9a6SDana Myers * validation is to detect problems with BIOS-exposed predefined ACPI objects 61aa2aa9a6SDana Myers * before the results are returned to the ACPI-related drivers. 62aa2aa9a6SDana Myers * 63aa2aa9a6SDana Myers * There are several areas that are validated: 64aa2aa9a6SDana Myers * 65aa2aa9a6SDana Myers * 1) The number of input arguments as defined by the method/object in the 66aa2aa9a6SDana Myers * ASL is validated against the ACPI specification. 67aa2aa9a6SDana Myers * 2) The type of the return object (if any) is validated against the ACPI 68aa2aa9a6SDana Myers * specification. 69aa2aa9a6SDana Myers * 3) For returned package objects, the count of package elements is 70aa2aa9a6SDana Myers * validated, as well as the type of each package element. Nested 71aa2aa9a6SDana Myers * packages are supported. 72aa2aa9a6SDana Myers * 73aa2aa9a6SDana Myers * For any problems found, a warning message is issued. 74aa2aa9a6SDana Myers * 75aa2aa9a6SDana Myers ******************************************************************************/ 76aa2aa9a6SDana Myers 7757190917SDana Myers 78aa2aa9a6SDana Myers /* Local prototypes */ 79aa2aa9a6SDana Myers 80aa2aa9a6SDana Myers static ACPI_STATUS 81aa2aa9a6SDana Myers AcpiNsCheckReference ( 82*385cc6b4SJerry Jelinek ACPI_EVALUATE_INFO *Info, 83aa2aa9a6SDana Myers ACPI_OPERAND_OBJECT *ReturnObject); 84aa2aa9a6SDana Myers 85*385cc6b4SJerry Jelinek static UINT32 86*385cc6b4SJerry Jelinek AcpiNsGetBitmappedType ( 87*385cc6b4SJerry Jelinek ACPI_OPERAND_OBJECT *ReturnObject); 88aa2aa9a6SDana Myers 89aa2aa9a6SDana Myers 90aa2aa9a6SDana Myers /******************************************************************************* 91aa2aa9a6SDana Myers * 92*385cc6b4SJerry Jelinek * FUNCTION: AcpiNsCheckReturnValue 93aa2aa9a6SDana Myers * 94aa2aa9a6SDana Myers * PARAMETERS: Node - Namespace node for the method/object 95*385cc6b4SJerry Jelinek * Info - Method execution information block 9657190917SDana Myers * UserParamCount - Number of parameters actually passed 9757190917SDana Myers * ReturnStatus - Status from the object evaluation 98aa2aa9a6SDana Myers * ReturnObjectPtr - Pointer to the object returned from the 99aa2aa9a6SDana Myers * evaluation of a method or object 100aa2aa9a6SDana Myers * 101aa2aa9a6SDana Myers * RETURN: Status 102aa2aa9a6SDana Myers * 103*385cc6b4SJerry Jelinek * DESCRIPTION: Check the value returned from a predefined name. 104aa2aa9a6SDana Myers * 105aa2aa9a6SDana Myers ******************************************************************************/ 106aa2aa9a6SDana Myers 107aa2aa9a6SDana Myers ACPI_STATUS 108*385cc6b4SJerry Jelinek AcpiNsCheckReturnValue ( 109aa2aa9a6SDana Myers ACPI_NAMESPACE_NODE *Node, 110*385cc6b4SJerry Jelinek ACPI_EVALUATE_INFO *Info, 111aa2aa9a6SDana Myers UINT32 UserParamCount, 112aa2aa9a6SDana Myers ACPI_STATUS ReturnStatus, 113aa2aa9a6SDana Myers ACPI_OPERAND_OBJECT **ReturnObjectPtr) 114aa2aa9a6SDana Myers { 115*385cc6b4SJerry Jelinek ACPI_STATUS Status; 116aa2aa9a6SDana Myers const ACPI_PREDEFINED_INFO *Predefined; 117aa2aa9a6SDana Myers 118aa2aa9a6SDana Myers 119aa2aa9a6SDana Myers /* If not a predefined name, we cannot validate the return object */ 120aa2aa9a6SDana Myers 121*385cc6b4SJerry Jelinek Predefined = Info->Predefined; 122aa2aa9a6SDana Myers if (!Predefined) 123aa2aa9a6SDana Myers { 124*385cc6b4SJerry Jelinek return (AE_OK); 125aa2aa9a6SDana Myers } 126aa2aa9a6SDana Myers 127aa2aa9a6SDana Myers /* 12857190917SDana Myers * If the method failed or did not actually return an object, we cannot 12957190917SDana Myers * validate the return object 130aa2aa9a6SDana Myers */ 131*385cc6b4SJerry Jelinek if ((ReturnStatus != AE_OK) && 132*385cc6b4SJerry Jelinek (ReturnStatus != AE_CTRL_RETURN_VALUE)) 133aa2aa9a6SDana Myers { 134*385cc6b4SJerry Jelinek return (AE_OK); 135aa2aa9a6SDana Myers } 136aa2aa9a6SDana Myers 137aa2aa9a6SDana Myers /* 138*385cc6b4SJerry Jelinek * Return value validation and possible repair. 139aa2aa9a6SDana Myers * 140*385cc6b4SJerry Jelinek * 1) Don't perform return value validation/repair if this feature 141*385cc6b4SJerry Jelinek * has been disabled via a global option. 142aa2aa9a6SDana Myers * 143*385cc6b4SJerry Jelinek * 2) We have a return value, but if one wasn't expected, just exit, 144*385cc6b4SJerry Jelinek * this is not a problem. For example, if the "Implicit Return" 145*385cc6b4SJerry Jelinek * feature is enabled, methods will always return a value. 146*385cc6b4SJerry Jelinek * 147*385cc6b4SJerry Jelinek * 3) If the return value can be of any type, then we cannot perform 148*385cc6b4SJerry Jelinek * any validation, just exit. 149aa2aa9a6SDana Myers */ 150*385cc6b4SJerry Jelinek if (AcpiGbl_DisableAutoRepair || 151*385cc6b4SJerry Jelinek (!Predefined->Info.ExpectedBtypes) || 15257190917SDana Myers (Predefined->Info.ExpectedBtypes == ACPI_RTYPE_ALL)) 153aa2aa9a6SDana Myers { 154*385cc6b4SJerry Jelinek return (AE_OK); 155aa2aa9a6SDana Myers } 156aa2aa9a6SDana Myers 157aa2aa9a6SDana Myers /* 15826f3cdf0SGordon Ross * Check that the type of the main return object is what is expected 15926f3cdf0SGordon Ross * for this predefined name 160aa2aa9a6SDana Myers */ 161*385cc6b4SJerry Jelinek Status = AcpiNsCheckObjectType (Info, ReturnObjectPtr, 16257190917SDana Myers Predefined->Info.ExpectedBtypes, ACPI_NOT_PACKAGE_ELEMENT); 163aa2aa9a6SDana Myers if (ACPI_FAILURE (Status)) 164aa2aa9a6SDana Myers { 16526f3cdf0SGordon Ross goto Exit; 166aa2aa9a6SDana Myers } 167aa2aa9a6SDana Myers 16857190917SDana Myers /* 169*385cc6b4SJerry Jelinek * 170*385cc6b4SJerry Jelinek * 4) If there is no return value and it is optional, just return 171*385cc6b4SJerry Jelinek * AE_OK (_WAK). 172*385cc6b4SJerry Jelinek */ 173*385cc6b4SJerry Jelinek if (!(*ReturnObjectPtr)) 174*385cc6b4SJerry Jelinek { 175*385cc6b4SJerry Jelinek goto Exit; 176*385cc6b4SJerry Jelinek } 177*385cc6b4SJerry Jelinek 178*385cc6b4SJerry Jelinek /* 17926f3cdf0SGordon Ross * For returned Package objects, check the type of all sub-objects. 18026f3cdf0SGordon Ross * Note: Package may have been newly created by call above. 18126f3cdf0SGordon Ross */ 18226f3cdf0SGordon Ross if ((*ReturnObjectPtr)->Common.Type == ACPI_TYPE_PACKAGE) 18326f3cdf0SGordon Ross { 184*385cc6b4SJerry Jelinek Info->ParentPackage = *ReturnObjectPtr; 185*385cc6b4SJerry Jelinek Status = AcpiNsCheckPackage (Info, ReturnObjectPtr); 18626f3cdf0SGordon Ross if (ACPI_FAILURE (Status)) 18726f3cdf0SGordon Ross { 188*385cc6b4SJerry Jelinek /* We might be able to fix some errors */ 189*385cc6b4SJerry Jelinek 190*385cc6b4SJerry Jelinek if ((Status != AE_AML_OPERAND_TYPE) && 191*385cc6b4SJerry Jelinek (Status != AE_AML_OPERAND_VALUE)) 192*385cc6b4SJerry Jelinek { 19326f3cdf0SGordon Ross goto Exit; 19426f3cdf0SGordon Ross } 19526f3cdf0SGordon Ross } 196*385cc6b4SJerry Jelinek } 19726f3cdf0SGordon Ross 19826f3cdf0SGordon Ross /* 19926f3cdf0SGordon Ross * The return object was OK, or it was successfully repaired above. 20026f3cdf0SGordon Ross * Now make some additional checks such as verifying that package 20126f3cdf0SGordon Ross * objects are sorted correctly (if required) or buffer objects have 20226f3cdf0SGordon Ross * the correct data width (bytes vs. dwords). These repairs are 20326f3cdf0SGordon Ross * performed on a per-name basis, i.e., the code is specific to 20426f3cdf0SGordon Ross * particular predefined names. 20557190917SDana Myers */ 206*385cc6b4SJerry Jelinek Status = AcpiNsComplexRepairs (Info, Node, Status, ReturnObjectPtr); 20757190917SDana Myers 20826f3cdf0SGordon Ross Exit: 20957190917SDana Myers /* 21057190917SDana Myers * If the object validation failed or if we successfully repaired one 21157190917SDana Myers * or more objects, mark the parent node to suppress further warning 21257190917SDana Myers * messages during the next evaluation of the same method/object. 21357190917SDana Myers */ 214*385cc6b4SJerry Jelinek if (ACPI_FAILURE (Status) || 215*385cc6b4SJerry Jelinek (Info->ReturnFlags & ACPI_OBJECT_REPAIRED)) 21657190917SDana Myers { 21757190917SDana Myers Node->Flags |= ANOBJ_EVALUATED; 21857190917SDana Myers } 21957190917SDana Myers 22057190917SDana Myers return (Status); 221aa2aa9a6SDana Myers } 222aa2aa9a6SDana Myers 223aa2aa9a6SDana Myers 224aa2aa9a6SDana Myers /******************************************************************************* 225aa2aa9a6SDana Myers * 226aa2aa9a6SDana Myers * FUNCTION: AcpiNsCheckObjectType 227aa2aa9a6SDana Myers * 228*385cc6b4SJerry Jelinek * PARAMETERS: Info - Method execution information block 229aa2aa9a6SDana Myers * ReturnObjectPtr - Pointer to the object returned from the 230aa2aa9a6SDana Myers * evaluation of a method or object 231aa2aa9a6SDana Myers * ExpectedBtypes - Bitmap of expected return type(s) 232aa2aa9a6SDana Myers * PackageIndex - Index of object within parent package (if 23357190917SDana Myers * applicable - ACPI_NOT_PACKAGE_ELEMENT 23457190917SDana Myers * otherwise) 235aa2aa9a6SDana Myers * 236aa2aa9a6SDana Myers * RETURN: Status 237aa2aa9a6SDana Myers * 238aa2aa9a6SDana Myers * DESCRIPTION: Check the type of the return object against the expected object 239aa2aa9a6SDana Myers * type(s). Use of Btype allows multiple expected object types. 240aa2aa9a6SDana Myers * 241aa2aa9a6SDana Myers ******************************************************************************/ 242aa2aa9a6SDana Myers 243*385cc6b4SJerry Jelinek ACPI_STATUS 244aa2aa9a6SDana Myers AcpiNsCheckObjectType ( 245*385cc6b4SJerry Jelinek ACPI_EVALUATE_INFO *Info, 246aa2aa9a6SDana Myers ACPI_OPERAND_OBJECT **ReturnObjectPtr, 247aa2aa9a6SDana Myers UINT32 ExpectedBtypes, 248aa2aa9a6SDana Myers UINT32 PackageIndex) 249aa2aa9a6SDana Myers { 250aa2aa9a6SDana Myers ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr; 251aa2aa9a6SDana Myers ACPI_STATUS Status = AE_OK; 252*385cc6b4SJerry Jelinek char TypeBuffer[96]; /* Room for 10 types */ 253aa2aa9a6SDana Myers 254aa2aa9a6SDana Myers 255aa2aa9a6SDana Myers /* A Namespace node should not get here, but make sure */ 256aa2aa9a6SDana Myers 257*385cc6b4SJerry Jelinek if (ReturnObject && 258*385cc6b4SJerry Jelinek ACPI_GET_DESCRIPTOR_TYPE (ReturnObject) == ACPI_DESC_TYPE_NAMED) 259aa2aa9a6SDana Myers { 260*385cc6b4SJerry Jelinek ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags, 26157190917SDana Myers "Invalid return type - Found a Namespace node [%4.4s] type %s", 26257190917SDana Myers ReturnObject->Node.Name.Ascii, 263aa2aa9a6SDana Myers AcpiUtGetTypeName (ReturnObject->Node.Type))); 264aa2aa9a6SDana Myers return (AE_AML_OPERAND_TYPE); 265aa2aa9a6SDana Myers } 266aa2aa9a6SDana Myers 267aa2aa9a6SDana Myers /* 268aa2aa9a6SDana Myers * Convert the object type (ACPI_TYPE_xxx) to a bitmapped object type. 269aa2aa9a6SDana Myers * The bitmapped type allows multiple possible return types. 270aa2aa9a6SDana Myers * 271aa2aa9a6SDana Myers * Note, the cases below must handle all of the possible types returned 272aa2aa9a6SDana Myers * from all of the predefined names (including elements of returned 273aa2aa9a6SDana Myers * packages) 274aa2aa9a6SDana Myers */ 275*385cc6b4SJerry Jelinek Info->ReturnBtype = AcpiNsGetBitmappedType (ReturnObject); 276*385cc6b4SJerry Jelinek if (Info->ReturnBtype == ACPI_RTYPE_ANY) 277aa2aa9a6SDana Myers { 278aa2aa9a6SDana Myers /* Not one of the supported objects, must be incorrect */ 279aa2aa9a6SDana Myers goto TypeErrorExit; 280aa2aa9a6SDana Myers } 281aa2aa9a6SDana Myers 282aa2aa9a6SDana Myers /* For reference objects, check that the reference type is correct */ 283aa2aa9a6SDana Myers 284*385cc6b4SJerry Jelinek if ((Info->ReturnBtype & ExpectedBtypes) == ACPI_RTYPE_REFERENCE) 285aa2aa9a6SDana Myers { 286*385cc6b4SJerry Jelinek Status = AcpiNsCheckReference (Info, ReturnObject); 287aa2aa9a6SDana Myers return (Status); 28826f3cdf0SGordon Ross } 28926f3cdf0SGordon Ross 290*385cc6b4SJerry Jelinek /* Attempt simple repair of the returned object if necessary */ 29126f3cdf0SGordon Ross 292*385cc6b4SJerry Jelinek Status = AcpiNsSimpleRepair (Info, ExpectedBtypes, 29326f3cdf0SGordon Ross PackageIndex, ReturnObjectPtr); 29426f3cdf0SGordon Ross if (ACPI_SUCCESS (Status)) 29526f3cdf0SGordon Ross { 296*385cc6b4SJerry Jelinek return (AE_OK); /* Successful repair */ 29726f3cdf0SGordon Ross } 298aa2aa9a6SDana Myers 299aa2aa9a6SDana Myers 300aa2aa9a6SDana Myers TypeErrorExit: 301aa2aa9a6SDana Myers 302aa2aa9a6SDana Myers /* Create a string with all expected types for this predefined object */ 303aa2aa9a6SDana Myers 304*385cc6b4SJerry Jelinek AcpiUtGetExpectedReturnTypes (TypeBuffer, ExpectedBtypes); 305aa2aa9a6SDana Myers 306*385cc6b4SJerry Jelinek if (!ReturnObject) 307aa2aa9a6SDana Myers { 308*385cc6b4SJerry Jelinek ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags, 309*385cc6b4SJerry Jelinek "Expected return object of type %s", 310*385cc6b4SJerry Jelinek TypeBuffer)); 311*385cc6b4SJerry Jelinek } 312*385cc6b4SJerry Jelinek else if (PackageIndex == ACPI_NOT_PACKAGE_ELEMENT) 313*385cc6b4SJerry Jelinek { 314*385cc6b4SJerry Jelinek ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags, 31557190917SDana Myers "Return type mismatch - found %s, expected %s", 31657190917SDana Myers AcpiUtGetObjectTypeName (ReturnObject), TypeBuffer)); 317aa2aa9a6SDana Myers } 318aa2aa9a6SDana Myers else 319aa2aa9a6SDana Myers { 320*385cc6b4SJerry Jelinek ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags, 32157190917SDana Myers "Return Package type mismatch at index %u - " 32257190917SDana Myers "found %s, expected %s", PackageIndex, 323aa2aa9a6SDana Myers AcpiUtGetObjectTypeName (ReturnObject), TypeBuffer)); 324aa2aa9a6SDana Myers } 325aa2aa9a6SDana Myers 326aa2aa9a6SDana Myers return (AE_AML_OPERAND_TYPE); 327aa2aa9a6SDana Myers } 328aa2aa9a6SDana Myers 329aa2aa9a6SDana Myers 330aa2aa9a6SDana Myers /******************************************************************************* 331aa2aa9a6SDana Myers * 332aa2aa9a6SDana Myers * FUNCTION: AcpiNsCheckReference 333aa2aa9a6SDana Myers * 334*385cc6b4SJerry Jelinek * PARAMETERS: Info - Method execution information block 335aa2aa9a6SDana Myers * ReturnObject - Object returned from the evaluation of a 336aa2aa9a6SDana Myers * method or object 337aa2aa9a6SDana Myers * 338aa2aa9a6SDana Myers * RETURN: Status 339aa2aa9a6SDana Myers * 340aa2aa9a6SDana Myers * DESCRIPTION: Check a returned reference object for the correct reference 341aa2aa9a6SDana Myers * type. The only reference type that can be returned from a 342aa2aa9a6SDana Myers * predefined method is a named reference. All others are invalid. 343aa2aa9a6SDana Myers * 344aa2aa9a6SDana Myers ******************************************************************************/ 345aa2aa9a6SDana Myers 346aa2aa9a6SDana Myers static ACPI_STATUS 347aa2aa9a6SDana Myers AcpiNsCheckReference ( 348*385cc6b4SJerry Jelinek ACPI_EVALUATE_INFO *Info, 349aa2aa9a6SDana Myers ACPI_OPERAND_OBJECT *ReturnObject) 350aa2aa9a6SDana Myers { 351aa2aa9a6SDana Myers 352aa2aa9a6SDana Myers /* 353aa2aa9a6SDana Myers * Check the reference object for the correct reference type (opcode). 354aa2aa9a6SDana Myers * The only type of reference that can be converted to an ACPI_OBJECT is 355aa2aa9a6SDana Myers * a reference to a named object (reference class: NAME) 356aa2aa9a6SDana Myers */ 357aa2aa9a6SDana Myers if (ReturnObject->Reference.Class == ACPI_REFCLASS_NAME) 358aa2aa9a6SDana Myers { 359aa2aa9a6SDana Myers return (AE_OK); 360aa2aa9a6SDana Myers } 361aa2aa9a6SDana Myers 362*385cc6b4SJerry Jelinek ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags, 36357190917SDana Myers "Return type mismatch - unexpected reference object type [%s] %2.2X", 36457190917SDana Myers AcpiUtGetReferenceName (ReturnObject), 365aa2aa9a6SDana Myers ReturnObject->Reference.Class)); 366aa2aa9a6SDana Myers 367aa2aa9a6SDana Myers return (AE_AML_OPERAND_TYPE); 368aa2aa9a6SDana Myers } 369aa2aa9a6SDana Myers 370aa2aa9a6SDana Myers 371aa2aa9a6SDana Myers /******************************************************************************* 372aa2aa9a6SDana Myers * 373*385cc6b4SJerry Jelinek * FUNCTION: AcpiNsGetBitmappedType 374aa2aa9a6SDana Myers * 375*385cc6b4SJerry Jelinek * PARAMETERS: ReturnObject - Object returned from method/obj evaluation 376aa2aa9a6SDana Myers * 377*385cc6b4SJerry Jelinek * RETURN: Object return type. ACPI_RTYPE_ANY indicates that the object 378*385cc6b4SJerry Jelinek * type is not supported. ACPI_RTYPE_NONE indicates that no 379*385cc6b4SJerry Jelinek * object was returned (ReturnObject is NULL). 380aa2aa9a6SDana Myers * 381*385cc6b4SJerry Jelinek * DESCRIPTION: Convert object type into a bitmapped object return type. 382aa2aa9a6SDana Myers * 383aa2aa9a6SDana Myers ******************************************************************************/ 384aa2aa9a6SDana Myers 385*385cc6b4SJerry Jelinek static UINT32 386*385cc6b4SJerry Jelinek AcpiNsGetBitmappedType ( 387*385cc6b4SJerry Jelinek ACPI_OPERAND_OBJECT *ReturnObject) 388aa2aa9a6SDana Myers { 389*385cc6b4SJerry Jelinek UINT32 ReturnBtype; 390aa2aa9a6SDana Myers 391aa2aa9a6SDana Myers 392*385cc6b4SJerry Jelinek if (!ReturnObject) 393aa2aa9a6SDana Myers { 394*385cc6b4SJerry Jelinek return (ACPI_RTYPE_NONE); 395aa2aa9a6SDana Myers } 396*385cc6b4SJerry Jelinek 397*385cc6b4SJerry Jelinek /* Map ACPI_OBJECT_TYPE to internal bitmapped type */ 398*385cc6b4SJerry Jelinek 399*385cc6b4SJerry Jelinek switch (ReturnObject->Common.Type) 400*385cc6b4SJerry Jelinek { 401*385cc6b4SJerry Jelinek case ACPI_TYPE_INTEGER: 402*385cc6b4SJerry Jelinek 403*385cc6b4SJerry Jelinek ReturnBtype = ACPI_RTYPE_INTEGER; 404*385cc6b4SJerry Jelinek break; 405*385cc6b4SJerry Jelinek 406*385cc6b4SJerry Jelinek case ACPI_TYPE_BUFFER: 407*385cc6b4SJerry Jelinek 408*385cc6b4SJerry Jelinek ReturnBtype = ACPI_RTYPE_BUFFER; 409*385cc6b4SJerry Jelinek break; 410*385cc6b4SJerry Jelinek 411*385cc6b4SJerry Jelinek case ACPI_TYPE_STRING: 412*385cc6b4SJerry Jelinek 413*385cc6b4SJerry Jelinek ReturnBtype = ACPI_RTYPE_STRING; 414*385cc6b4SJerry Jelinek break; 415*385cc6b4SJerry Jelinek 416*385cc6b4SJerry Jelinek case ACPI_TYPE_PACKAGE: 417*385cc6b4SJerry Jelinek 418*385cc6b4SJerry Jelinek ReturnBtype = ACPI_RTYPE_PACKAGE; 419*385cc6b4SJerry Jelinek break; 420*385cc6b4SJerry Jelinek 421*385cc6b4SJerry Jelinek case ACPI_TYPE_LOCAL_REFERENCE: 422*385cc6b4SJerry Jelinek 423*385cc6b4SJerry Jelinek ReturnBtype = ACPI_RTYPE_REFERENCE; 424*385cc6b4SJerry Jelinek break; 425*385cc6b4SJerry Jelinek 426*385cc6b4SJerry Jelinek default: 427*385cc6b4SJerry Jelinek 428*385cc6b4SJerry Jelinek /* Not one of the supported objects, must be incorrect */ 429*385cc6b4SJerry Jelinek 430*385cc6b4SJerry Jelinek ReturnBtype = ACPI_RTYPE_ANY; 431*385cc6b4SJerry Jelinek break; 432aa2aa9a6SDana Myers } 433*385cc6b4SJerry Jelinek 434*385cc6b4SJerry Jelinek return (ReturnBtype); 435aa2aa9a6SDana Myers } 436