aslbtypes.c revision 218585
1218585Sjkim/****************************************************************************** 2218585Sjkim * 3218585Sjkim * Module Name: aslbtypes - Support for bitfield types 4218585Sjkim * 5218585Sjkim *****************************************************************************/ 6218585Sjkim 7218585Sjkim/* 8218585Sjkim * Copyright (C) 2000 - 2011, Intel Corp. 9218585Sjkim * All rights reserved. 10218585Sjkim * 11218585Sjkim * Redistribution and use in source and binary forms, with or without 12218585Sjkim * modification, are permitted provided that the following conditions 13218585Sjkim * are met: 14218585Sjkim * 1. Redistributions of source code must retain the above copyright 15218585Sjkim * notice, this list of conditions, and the following disclaimer, 16218585Sjkim * without modification. 17218585Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18218585Sjkim * substantially similar to the "NO WARRANTY" disclaimer below 19218585Sjkim * ("Disclaimer") and any redistribution must be conditioned upon 20218585Sjkim * including a substantially similar Disclaimer requirement for further 21218585Sjkim * binary redistribution. 22218585Sjkim * 3. Neither the names of the above-listed copyright holders nor the names 23218585Sjkim * of any contributors may be used to endorse or promote products derived 24218585Sjkim * from this software without specific prior written permission. 25218585Sjkim * 26218585Sjkim * Alternatively, this software may be distributed under the terms of the 27218585Sjkim * GNU General Public License ("GPL") version 2 as published by the Free 28218585Sjkim * Software Foundation. 29218585Sjkim * 30218585Sjkim * NO WARRANTY 31218585Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32218585Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33218585Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34218585Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35218585Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36218585Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37218585Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38218585Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39218585Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40218585Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41218585Sjkim * POSSIBILITY OF SUCH DAMAGES. 42218585Sjkim */ 43218585Sjkim 44218585Sjkim 45218585Sjkim#include "aslcompiler.h" 46218585Sjkim#include "aslcompiler.y.h" 47218585Sjkim#include "amlcode.h" 48218585Sjkim 49218585Sjkim 50218585Sjkim#define _COMPONENT ACPI_COMPILER 51218585Sjkim ACPI_MODULE_NAME ("aslbtypes") 52218585Sjkim 53218585Sjkim/* Local prototypes */ 54218585Sjkim 55218585Sjkimstatic UINT32 56218585SjkimAnMapEtypeToBtype ( 57218585Sjkim UINT32 Etype); 58218585Sjkim 59218585Sjkim 60218585Sjkim/******************************************************************************* 61218585Sjkim * 62218585Sjkim * FUNCTION: AnMapArgTypeToBtype 63218585Sjkim * 64218585Sjkim * PARAMETERS: ArgType - The ARGI required type(s) for this 65218585Sjkim * argument, from the opcode info table 66218585Sjkim * 67218585Sjkim * RETURN: The corresponding Bit-encoded types 68218585Sjkim * 69218585Sjkim * DESCRIPTION: Convert an encoded ARGI required argument type code into a 70218585Sjkim * bitfield type code. Implements the implicit source conversion 71218585Sjkim * rules. 72218585Sjkim * 73218585Sjkim ******************************************************************************/ 74218585Sjkim 75218585SjkimUINT32 76218585SjkimAnMapArgTypeToBtype ( 77218585Sjkim UINT32 ArgType) 78218585Sjkim{ 79218585Sjkim 80218585Sjkim switch (ArgType) 81218585Sjkim { 82218585Sjkim 83218585Sjkim /* Simple types */ 84218585Sjkim 85218585Sjkim case ARGI_ANYTYPE: 86218585Sjkim return (ACPI_BTYPE_OBJECTS_AND_REFS); 87218585Sjkim 88218585Sjkim case ARGI_PACKAGE: 89218585Sjkim return (ACPI_BTYPE_PACKAGE); 90218585Sjkim 91218585Sjkim case ARGI_EVENT: 92218585Sjkim return (ACPI_BTYPE_EVENT); 93218585Sjkim 94218585Sjkim case ARGI_MUTEX: 95218585Sjkim return (ACPI_BTYPE_MUTEX); 96218585Sjkim 97218585Sjkim case ARGI_DDBHANDLE: 98218585Sjkim /* 99218585Sjkim * DDBHandleObject := SuperName 100218585Sjkim * ACPI_BTYPE_REFERENCE: Index reference as parameter of Load/Unload 101218585Sjkim */ 102218585Sjkim return (ACPI_BTYPE_DDB_HANDLE | ACPI_BTYPE_REFERENCE); 103218585Sjkim 104218585Sjkim /* Interchangeable types */ 105218585Sjkim /* 106218585Sjkim * Source conversion rules: 107218585Sjkim * Integer, String, and Buffer are all interchangeable 108218585Sjkim */ 109218585Sjkim case ARGI_INTEGER: 110218585Sjkim case ARGI_STRING: 111218585Sjkim case ARGI_BUFFER: 112218585Sjkim case ARGI_BUFFER_OR_STRING: 113218585Sjkim case ARGI_COMPUTEDATA: 114218585Sjkim return (ACPI_BTYPE_COMPUTE_DATA); 115218585Sjkim 116218585Sjkim /* References */ 117218585Sjkim 118218585Sjkim case ARGI_INTEGER_REF: 119218585Sjkim return (ACPI_BTYPE_INTEGER); 120218585Sjkim 121218585Sjkim case ARGI_OBJECT_REF: 122218585Sjkim return (ACPI_BTYPE_ALL_OBJECTS); 123218585Sjkim 124218585Sjkim case ARGI_DEVICE_REF: 125218585Sjkim return (ACPI_BTYPE_DEVICE_OBJECTS); 126218585Sjkim 127218585Sjkim case ARGI_REFERENCE: 128218585Sjkim return (ACPI_BTYPE_REFERENCE); 129218585Sjkim 130218585Sjkim case ARGI_TARGETREF: 131218585Sjkim case ARGI_FIXED_TARGET: 132218585Sjkim case ARGI_SIMPLE_TARGET: 133218585Sjkim return (ACPI_BTYPE_OBJECTS_AND_REFS); 134218585Sjkim 135218585Sjkim /* Complex types */ 136218585Sjkim 137218585Sjkim case ARGI_DATAOBJECT: 138218585Sjkim 139218585Sjkim /* 140218585Sjkim * Buffer, string, package or reference to a Op - 141218585Sjkim * Used only by SizeOf operator 142218585Sjkim */ 143218585Sjkim return (ACPI_BTYPE_STRING | ACPI_BTYPE_BUFFER | 144218585Sjkim ACPI_BTYPE_PACKAGE | ACPI_BTYPE_REFERENCE); 145218585Sjkim 146218585Sjkim case ARGI_COMPLEXOBJ: 147218585Sjkim 148218585Sjkim /* Buffer, String, or package */ 149218585Sjkim 150218585Sjkim return (ACPI_BTYPE_STRING | ACPI_BTYPE_BUFFER | ACPI_BTYPE_PACKAGE); 151218585Sjkim 152218585Sjkim case ARGI_REF_OR_STRING: 153218585Sjkim return (ACPI_BTYPE_STRING | ACPI_BTYPE_REFERENCE); 154218585Sjkim 155218585Sjkim case ARGI_REGION_OR_BUFFER: 156218585Sjkim 157218585Sjkim /* Used by Load() only. Allow buffers in addition to regions/fields */ 158218585Sjkim 159218585Sjkim return (ACPI_BTYPE_REGION | ACPI_BTYPE_BUFFER | ACPI_BTYPE_FIELD_UNIT); 160218585Sjkim 161218585Sjkim case ARGI_DATAREFOBJ: 162218585Sjkim return (ACPI_BTYPE_INTEGER |ACPI_BTYPE_STRING | ACPI_BTYPE_BUFFER | 163218585Sjkim ACPI_BTYPE_PACKAGE | ACPI_BTYPE_REFERENCE | ACPI_BTYPE_DDB_HANDLE); 164218585Sjkim 165218585Sjkim default: 166218585Sjkim break; 167218585Sjkim } 168218585Sjkim 169218585Sjkim return (ACPI_BTYPE_OBJECTS_AND_REFS); 170218585Sjkim} 171218585Sjkim 172218585Sjkim 173218585Sjkim/******************************************************************************* 174218585Sjkim * 175218585Sjkim * FUNCTION: AnMapEtypeToBtype 176218585Sjkim * 177218585Sjkim * PARAMETERS: Etype - Encoded ACPI Type 178218585Sjkim * 179218585Sjkim * RETURN: Btype corresponding to the Etype 180218585Sjkim * 181218585Sjkim * DESCRIPTION: Convert an encoded ACPI type to a bitfield type applying the 182218585Sjkim * operand conversion rules. In other words, returns the type(s) 183218585Sjkim * this Etype is implicitly converted to during interpretation. 184218585Sjkim * 185218585Sjkim ******************************************************************************/ 186218585Sjkim 187218585Sjkimstatic UINT32 188218585SjkimAnMapEtypeToBtype ( 189218585Sjkim UINT32 Etype) 190218585Sjkim{ 191218585Sjkim 192218585Sjkim 193218585Sjkim if (Etype == ACPI_TYPE_ANY) 194218585Sjkim { 195218585Sjkim return (ACPI_BTYPE_OBJECTS_AND_REFS); 196218585Sjkim } 197218585Sjkim 198218585Sjkim /* Try the standard ACPI data types */ 199218585Sjkim 200218585Sjkim if (Etype <= ACPI_TYPE_EXTERNAL_MAX) 201218585Sjkim { 202218585Sjkim /* 203218585Sjkim * This switch statement implements the allowed operand conversion 204218585Sjkim * rules as per the "ASL Data Types" section of the ACPI 205218585Sjkim * specification. 206218585Sjkim */ 207218585Sjkim switch (Etype) 208218585Sjkim { 209218585Sjkim case ACPI_TYPE_INTEGER: 210218585Sjkim return (ACPI_BTYPE_COMPUTE_DATA | ACPI_BTYPE_DDB_HANDLE); 211218585Sjkim 212218585Sjkim case ACPI_TYPE_STRING: 213218585Sjkim case ACPI_TYPE_BUFFER: 214218585Sjkim return (ACPI_BTYPE_COMPUTE_DATA); 215218585Sjkim 216218585Sjkim case ACPI_TYPE_PACKAGE: 217218585Sjkim return (ACPI_BTYPE_PACKAGE); 218218585Sjkim 219218585Sjkim case ACPI_TYPE_FIELD_UNIT: 220218585Sjkim return (ACPI_BTYPE_COMPUTE_DATA | ACPI_BTYPE_FIELD_UNIT); 221218585Sjkim 222218585Sjkim case ACPI_TYPE_BUFFER_FIELD: 223218585Sjkim return (ACPI_BTYPE_COMPUTE_DATA | ACPI_BTYPE_BUFFER_FIELD); 224218585Sjkim 225218585Sjkim case ACPI_TYPE_DDB_HANDLE: 226218585Sjkim return (ACPI_BTYPE_INTEGER | ACPI_BTYPE_DDB_HANDLE); 227218585Sjkim 228218585Sjkim case ACPI_BTYPE_DEBUG_OBJECT: 229218585Sjkim 230218585Sjkim /* Cannot be used as a source operand */ 231218585Sjkim 232218585Sjkim return (0); 233218585Sjkim 234218585Sjkim default: 235218585Sjkim return (1 << (Etype - 1)); 236218585Sjkim } 237218585Sjkim } 238218585Sjkim 239218585Sjkim /* Try the internal data types */ 240218585Sjkim 241218585Sjkim switch (Etype) 242218585Sjkim { 243218585Sjkim case ACPI_TYPE_LOCAL_REGION_FIELD: 244218585Sjkim case ACPI_TYPE_LOCAL_BANK_FIELD: 245218585Sjkim case ACPI_TYPE_LOCAL_INDEX_FIELD: 246218585Sjkim 247218585Sjkim /* Named fields can be either Integer/Buffer/String */ 248218585Sjkim 249218585Sjkim return (ACPI_BTYPE_COMPUTE_DATA | ACPI_BTYPE_FIELD_UNIT); 250218585Sjkim 251218585Sjkim case ACPI_TYPE_LOCAL_ALIAS: 252218585Sjkim 253218585Sjkim return (ACPI_BTYPE_INTEGER); 254218585Sjkim 255218585Sjkim 256218585Sjkim case ACPI_TYPE_LOCAL_RESOURCE: 257218585Sjkim case ACPI_TYPE_LOCAL_RESOURCE_FIELD: 258218585Sjkim 259218585Sjkim return (ACPI_BTYPE_REFERENCE); 260218585Sjkim 261218585Sjkim default: 262218585Sjkim printf ("Unhandled encoded type: %X\n", Etype); 263218585Sjkim return (0); 264218585Sjkim } 265218585Sjkim} 266218585Sjkim 267218585Sjkim 268218585Sjkim/******************************************************************************* 269218585Sjkim * 270218585Sjkim * FUNCTION: AnFormatBtype 271218585Sjkim * 272218585Sjkim * PARAMETERS: Btype - Bitfield of ACPI types 273218585Sjkim * Buffer - Where to put the ascii string 274218585Sjkim * 275218585Sjkim * RETURN: None. 276218585Sjkim * 277218585Sjkim * DESCRIPTION: Convert a Btype to a string of ACPI types 278218585Sjkim * 279218585Sjkim ******************************************************************************/ 280218585Sjkim 281218585Sjkimvoid 282218585SjkimAnFormatBtype ( 283218585Sjkim char *Buffer, 284218585Sjkim UINT32 Btype) 285218585Sjkim{ 286218585Sjkim UINT32 Type; 287218585Sjkim BOOLEAN First = TRUE; 288218585Sjkim 289218585Sjkim 290218585Sjkim *Buffer = 0; 291218585Sjkim 292218585Sjkim if (Btype == 0) 293218585Sjkim { 294218585Sjkim strcat (Buffer, "NoReturnValue"); 295218585Sjkim return; 296218585Sjkim } 297218585Sjkim 298218585Sjkim for (Type = 1; Type <= ACPI_TYPE_EXTERNAL_MAX; Type++) 299218585Sjkim { 300218585Sjkim if (Btype & 0x00000001) 301218585Sjkim { 302218585Sjkim if (!First) 303218585Sjkim { 304218585Sjkim strcat (Buffer, "|"); 305218585Sjkim } 306218585Sjkim First = FALSE; 307218585Sjkim strcat (Buffer, AcpiUtGetTypeName (Type)); 308218585Sjkim } 309218585Sjkim Btype >>= 1; 310218585Sjkim } 311218585Sjkim 312218585Sjkim if (Btype & 0x00000001) 313218585Sjkim { 314218585Sjkim if (!First) 315218585Sjkim { 316218585Sjkim strcat (Buffer, "|"); 317218585Sjkim } 318218585Sjkim First = FALSE; 319218585Sjkim strcat (Buffer, "Reference"); 320218585Sjkim } 321218585Sjkim 322218585Sjkim Btype >>= 1; 323218585Sjkim if (Btype & 0x00000001) 324218585Sjkim { 325218585Sjkim if (!First) 326218585Sjkim { 327218585Sjkim strcat (Buffer, "|"); 328218585Sjkim } 329218585Sjkim First = FALSE; 330218585Sjkim strcat (Buffer, "Resource"); 331218585Sjkim } 332218585Sjkim} 333218585Sjkim 334218585Sjkim 335218585Sjkim/******************************************************************************* 336218585Sjkim * 337218585Sjkim * FUNCTION: AnGetBtype 338218585Sjkim * 339218585Sjkim * PARAMETERS: Op - Parse node whose type will be returned. 340218585Sjkim * 341218585Sjkim * RETURN: The Btype associated with the Op. 342218585Sjkim * 343218585Sjkim * DESCRIPTION: Get the (bitfield) ACPI type associated with the parse node. 344218585Sjkim * Handles the case where the node is a name or method call and 345218585Sjkim * the actual type must be obtained from the namespace node. 346218585Sjkim * 347218585Sjkim ******************************************************************************/ 348218585Sjkim 349218585SjkimUINT32 350218585SjkimAnGetBtype ( 351218585Sjkim ACPI_PARSE_OBJECT *Op) 352218585Sjkim{ 353218585Sjkim ACPI_NAMESPACE_NODE *Node; 354218585Sjkim ACPI_PARSE_OBJECT *ReferencedNode; 355218585Sjkim UINT32 ThisNodeBtype = 0; 356218585Sjkim 357218585Sjkim 358218585Sjkim if ((Op->Asl.ParseOpcode == PARSEOP_NAMESEG) || 359218585Sjkim (Op->Asl.ParseOpcode == PARSEOP_NAMESTRING) || 360218585Sjkim (Op->Asl.ParseOpcode == PARSEOP_METHODCALL)) 361218585Sjkim { 362218585Sjkim Node = Op->Asl.Node; 363218585Sjkim if (!Node) 364218585Sjkim { 365218585Sjkim DbgPrint (ASL_DEBUG_OUTPUT, 366218585Sjkim "No attached Nsnode: [%s] at line %u name [%s], ignoring typecheck\n", 367218585Sjkim Op->Asl.ParseOpName, Op->Asl.LineNumber, 368218585Sjkim Op->Asl.ExternalName); 369218585Sjkim return (ACPI_UINT32_MAX); 370218585Sjkim } 371218585Sjkim 372218585Sjkim ThisNodeBtype = AnMapEtypeToBtype (Node->Type); 373218585Sjkim if (!ThisNodeBtype) 374218585Sjkim { 375218585Sjkim AslError (ASL_ERROR, ASL_MSG_COMPILER_INTERNAL, Op, 376218585Sjkim "could not map type"); 377218585Sjkim } 378218585Sjkim 379218585Sjkim /* 380218585Sjkim * Since it was a named reference, enable the 381218585Sjkim * reference bit also 382218585Sjkim */ 383218585Sjkim ThisNodeBtype |= ACPI_BTYPE_REFERENCE; 384218585Sjkim 385218585Sjkim if (Op->Asl.ParseOpcode == PARSEOP_METHODCALL) 386218585Sjkim { 387218585Sjkim ReferencedNode = Node->Op; 388218585Sjkim if (!ReferencedNode) 389218585Sjkim { 390218585Sjkim /* Check for an internal method */ 391218585Sjkim 392218585Sjkim if (AnIsInternalMethod (Op)) 393218585Sjkim { 394218585Sjkim return (AnGetInternalMethodReturnType (Op)); 395218585Sjkim } 396218585Sjkim 397218585Sjkim AslError (ASL_ERROR, ASL_MSG_COMPILER_INTERNAL, Op, 398218585Sjkim "null Op pointer"); 399218585Sjkim return (ACPI_UINT32_MAX); 400218585Sjkim } 401218585Sjkim 402218585Sjkim if (ReferencedNode->Asl.CompileFlags & NODE_METHOD_TYPED) 403218585Sjkim { 404218585Sjkim ThisNodeBtype = ReferencedNode->Asl.AcpiBtype; 405218585Sjkim } 406218585Sjkim else 407218585Sjkim { 408218585Sjkim return (ACPI_UINT32_MAX -1); 409218585Sjkim } 410218585Sjkim } 411218585Sjkim } 412218585Sjkim else 413218585Sjkim { 414218585Sjkim ThisNodeBtype = Op->Asl.AcpiBtype; 415218585Sjkim } 416218585Sjkim 417218585Sjkim return (ThisNodeBtype); 418218585Sjkim} 419218585Sjkim 420218585Sjkim 421218585Sjkim/******************************************************************************* 422218585Sjkim * 423218585Sjkim * FUNCTION: AnMapObjTypeToBtype 424218585Sjkim * 425218585Sjkim * PARAMETERS: Op - A parse node 426218585Sjkim * 427218585Sjkim * RETURN: A Btype 428218585Sjkim * 429218585Sjkim * DESCRIPTION: Map object to the associated "Btype" 430218585Sjkim * 431218585Sjkim ******************************************************************************/ 432218585Sjkim 433218585SjkimUINT32 434218585SjkimAnMapObjTypeToBtype ( 435218585Sjkim ACPI_PARSE_OBJECT *Op) 436218585Sjkim{ 437218585Sjkim 438218585Sjkim switch (Op->Asl.ParseOpcode) 439218585Sjkim { 440218585Sjkim case PARSEOP_OBJECTTYPE_BFF: /* "BuffFieldObj" */ 441218585Sjkim return (ACPI_BTYPE_BUFFER_FIELD); 442218585Sjkim 443218585Sjkim case PARSEOP_OBJECTTYPE_BUF: /* "BuffObj" */ 444218585Sjkim return (ACPI_BTYPE_BUFFER); 445218585Sjkim 446218585Sjkim case PARSEOP_OBJECTTYPE_DDB: /* "DDBHandleObj" */ 447218585Sjkim return (ACPI_BTYPE_DDB_HANDLE); 448218585Sjkim 449218585Sjkim case PARSEOP_OBJECTTYPE_DEV: /* "DeviceObj" */ 450218585Sjkim return (ACPI_BTYPE_DEVICE); 451218585Sjkim 452218585Sjkim case PARSEOP_OBJECTTYPE_EVT: /* "EventObj" */ 453218585Sjkim return (ACPI_BTYPE_EVENT); 454218585Sjkim 455218585Sjkim case PARSEOP_OBJECTTYPE_FLD: /* "FieldUnitObj" */ 456218585Sjkim return (ACPI_BTYPE_FIELD_UNIT); 457218585Sjkim 458218585Sjkim case PARSEOP_OBJECTTYPE_INT: /* "IntObj" */ 459218585Sjkim return (ACPI_BTYPE_INTEGER); 460218585Sjkim 461218585Sjkim case PARSEOP_OBJECTTYPE_MTH: /* "MethodObj" */ 462218585Sjkim return (ACPI_BTYPE_METHOD); 463218585Sjkim 464218585Sjkim case PARSEOP_OBJECTTYPE_MTX: /* "MutexObj" */ 465218585Sjkim return (ACPI_BTYPE_MUTEX); 466218585Sjkim 467218585Sjkim case PARSEOP_OBJECTTYPE_OPR: /* "OpRegionObj" */ 468218585Sjkim return (ACPI_BTYPE_REGION); 469218585Sjkim 470218585Sjkim case PARSEOP_OBJECTTYPE_PKG: /* "PkgObj" */ 471218585Sjkim return (ACPI_BTYPE_PACKAGE); 472218585Sjkim 473218585Sjkim case PARSEOP_OBJECTTYPE_POW: /* "PowerResObj" */ 474218585Sjkim return (ACPI_BTYPE_POWER); 475218585Sjkim 476218585Sjkim case PARSEOP_OBJECTTYPE_STR: /* "StrObj" */ 477218585Sjkim return (ACPI_BTYPE_STRING); 478218585Sjkim 479218585Sjkim case PARSEOP_OBJECTTYPE_THZ: /* "ThermalZoneObj" */ 480218585Sjkim return (ACPI_BTYPE_THERMAL); 481218585Sjkim 482218585Sjkim case PARSEOP_OBJECTTYPE_UNK: /* "UnknownObj" */ 483218585Sjkim return (ACPI_BTYPE_OBJECTS_AND_REFS); 484218585Sjkim 485218585Sjkim default: 486218585Sjkim return (0); 487218585Sjkim } 488218585Sjkim} 489218585Sjkim 490218585Sjkim 491218585Sjkim#ifdef ACPI_OBSOLETE_FUNCTIONS 492218585Sjkim/******************************************************************************* 493218585Sjkim * 494218585Sjkim * FUNCTION: AnMapBtypeToEtype 495218585Sjkim * 496218585Sjkim * PARAMETERS: Btype - Bitfield of ACPI types 497218585Sjkim * 498218585Sjkim * RETURN: The Etype corresponding the the Btype 499218585Sjkim * 500218585Sjkim * DESCRIPTION: Convert a bitfield type to an encoded type 501218585Sjkim * 502218585Sjkim ******************************************************************************/ 503218585Sjkim 504218585SjkimUINT32 505218585SjkimAnMapBtypeToEtype ( 506218585Sjkim UINT32 Btype) 507218585Sjkim{ 508218585Sjkim UINT32 i; 509218585Sjkim UINT32 Etype; 510218585Sjkim 511218585Sjkim 512218585Sjkim if (Btype == 0) 513218585Sjkim { 514218585Sjkim return (0); 515218585Sjkim } 516218585Sjkim 517218585Sjkim Etype = 1; 518218585Sjkim for (i = 1; i < Btype; i *= 2) 519218585Sjkim { 520218585Sjkim Etype++; 521218585Sjkim } 522218585Sjkim 523218585Sjkim return (Etype); 524218585Sjkim} 525218585Sjkim#endif 526