1*9c7c683cSJung-uk Kim /****************************************************************************** 2*9c7c683cSJung-uk Kim * 3*9c7c683cSJung-uk Kim * Module Name: utpredef - support functions for predefined names 4*9c7c683cSJung-uk Kim * 5*9c7c683cSJung-uk Kim *****************************************************************************/ 6*9c7c683cSJung-uk Kim 7*9c7c683cSJung-uk Kim /* 8*9c7c683cSJung-uk Kim * Copyright (C) 2000 - 2013, Intel Corp. 9*9c7c683cSJung-uk Kim * All rights reserved. 10*9c7c683cSJung-uk Kim * 11*9c7c683cSJung-uk Kim * Redistribution and use in source and binary forms, with or without 12*9c7c683cSJung-uk Kim * modification, are permitted provided that the following conditions 13*9c7c683cSJung-uk Kim * are met: 14*9c7c683cSJung-uk Kim * 1. Redistributions of source code must retain the above copyright 15*9c7c683cSJung-uk Kim * notice, this list of conditions, and the following disclaimer, 16*9c7c683cSJung-uk Kim * without modification. 17*9c7c683cSJung-uk Kim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18*9c7c683cSJung-uk Kim * substantially similar to the "NO WARRANTY" disclaimer below 19*9c7c683cSJung-uk Kim * ("Disclaimer") and any redistribution must be conditioned upon 20*9c7c683cSJung-uk Kim * including a substantially similar Disclaimer requirement for further 21*9c7c683cSJung-uk Kim * binary redistribution. 22*9c7c683cSJung-uk Kim * 3. Neither the names of the above-listed copyright holders nor the names 23*9c7c683cSJung-uk Kim * of any contributors may be used to endorse or promote products derived 24*9c7c683cSJung-uk Kim * from this software without specific prior written permission. 25*9c7c683cSJung-uk Kim * 26*9c7c683cSJung-uk Kim * Alternatively, this software may be distributed under the terms of the 27*9c7c683cSJung-uk Kim * GNU General Public License ("GPL") version 2 as published by the Free 28*9c7c683cSJung-uk Kim * Software Foundation. 29*9c7c683cSJung-uk Kim * 30*9c7c683cSJung-uk Kim * NO WARRANTY 31*9c7c683cSJung-uk Kim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32*9c7c683cSJung-uk Kim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33*9c7c683cSJung-uk Kim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34*9c7c683cSJung-uk Kim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35*9c7c683cSJung-uk Kim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36*9c7c683cSJung-uk Kim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37*9c7c683cSJung-uk Kim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38*9c7c683cSJung-uk Kim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39*9c7c683cSJung-uk Kim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40*9c7c683cSJung-uk Kim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41*9c7c683cSJung-uk Kim * POSSIBILITY OF SUCH DAMAGES. 42*9c7c683cSJung-uk Kim */ 43*9c7c683cSJung-uk Kim 44*9c7c683cSJung-uk Kim #define __UTPREDEF_C__ 45*9c7c683cSJung-uk Kim 46*9c7c683cSJung-uk Kim #include <contrib/dev/acpica/include/acpi.h> 47*9c7c683cSJung-uk Kim #include <contrib/dev/acpica/include/accommon.h> 48*9c7c683cSJung-uk Kim #include <contrib/dev/acpica/include/acpredef.h> 49*9c7c683cSJung-uk Kim 50*9c7c683cSJung-uk Kim 51*9c7c683cSJung-uk Kim #define _COMPONENT ACPI_UTILITIES 52*9c7c683cSJung-uk Kim ACPI_MODULE_NAME ("utpredef") 53*9c7c683cSJung-uk Kim 54*9c7c683cSJung-uk Kim 55*9c7c683cSJung-uk Kim /* 56*9c7c683cSJung-uk Kim * Names for the types that can be returned by the predefined objects. 57*9c7c683cSJung-uk Kim * Used for warning messages. Must be in the same order as the ACPI_RTYPEs 58*9c7c683cSJung-uk Kim */ 59*9c7c683cSJung-uk Kim static const char *UtRtypeNames[] = 60*9c7c683cSJung-uk Kim { 61*9c7c683cSJung-uk Kim "/Integer", 62*9c7c683cSJung-uk Kim "/String", 63*9c7c683cSJung-uk Kim "/Buffer", 64*9c7c683cSJung-uk Kim "/Package", 65*9c7c683cSJung-uk Kim "/Reference", 66*9c7c683cSJung-uk Kim }; 67*9c7c683cSJung-uk Kim 68*9c7c683cSJung-uk Kim 69*9c7c683cSJung-uk Kim /******************************************************************************* 70*9c7c683cSJung-uk Kim * 71*9c7c683cSJung-uk Kim * FUNCTION: AcpiUtGetNextPredefinedMethod 72*9c7c683cSJung-uk Kim * 73*9c7c683cSJung-uk Kim * PARAMETERS: ThisName - Entry in the predefined method/name table 74*9c7c683cSJung-uk Kim * 75*9c7c683cSJung-uk Kim * RETURN: Pointer to next entry in predefined table. 76*9c7c683cSJung-uk Kim * 77*9c7c683cSJung-uk Kim * DESCRIPTION: Get the next entry in the predefine method table. Handles the 78*9c7c683cSJung-uk Kim * cases where a package info entry follows a method name that 79*9c7c683cSJung-uk Kim * returns a package. 80*9c7c683cSJung-uk Kim * 81*9c7c683cSJung-uk Kim ******************************************************************************/ 82*9c7c683cSJung-uk Kim 83*9c7c683cSJung-uk Kim const ACPI_PREDEFINED_INFO * 84*9c7c683cSJung-uk Kim AcpiUtGetNextPredefinedMethod ( 85*9c7c683cSJung-uk Kim const ACPI_PREDEFINED_INFO *ThisName) 86*9c7c683cSJung-uk Kim { 87*9c7c683cSJung-uk Kim 88*9c7c683cSJung-uk Kim /* 89*9c7c683cSJung-uk Kim * Skip next entry in the table if this name returns a Package 90*9c7c683cSJung-uk Kim * (next entry contains the package info) 91*9c7c683cSJung-uk Kim */ 92*9c7c683cSJung-uk Kim if ((ThisName->Info.ExpectedBtypes & ACPI_RTYPE_PACKAGE) && 93*9c7c683cSJung-uk Kim (ThisName->Info.ExpectedBtypes != ACPI_RTYPE_ALL)) 94*9c7c683cSJung-uk Kim { 95*9c7c683cSJung-uk Kim ThisName++; 96*9c7c683cSJung-uk Kim } 97*9c7c683cSJung-uk Kim 98*9c7c683cSJung-uk Kim ThisName++; 99*9c7c683cSJung-uk Kim return (ThisName); 100*9c7c683cSJung-uk Kim } 101*9c7c683cSJung-uk Kim 102*9c7c683cSJung-uk Kim 103*9c7c683cSJung-uk Kim /******************************************************************************* 104*9c7c683cSJung-uk Kim * 105*9c7c683cSJung-uk Kim * FUNCTION: AcpiUtMatchPredefinedMethod 106*9c7c683cSJung-uk Kim * 107*9c7c683cSJung-uk Kim * PARAMETERS: Name - Name to find 108*9c7c683cSJung-uk Kim * 109*9c7c683cSJung-uk Kim * RETURN: Pointer to entry in predefined table. NULL indicates not found. 110*9c7c683cSJung-uk Kim * 111*9c7c683cSJung-uk Kim * DESCRIPTION: Check an object name against the predefined object list. 112*9c7c683cSJung-uk Kim * 113*9c7c683cSJung-uk Kim ******************************************************************************/ 114*9c7c683cSJung-uk Kim 115*9c7c683cSJung-uk Kim const ACPI_PREDEFINED_INFO * 116*9c7c683cSJung-uk Kim AcpiUtMatchPredefinedMethod ( 117*9c7c683cSJung-uk Kim char *Name) 118*9c7c683cSJung-uk Kim { 119*9c7c683cSJung-uk Kim const ACPI_PREDEFINED_INFO *ThisName; 120*9c7c683cSJung-uk Kim 121*9c7c683cSJung-uk Kim 122*9c7c683cSJung-uk Kim /* Quick check for a predefined name, first character must be underscore */ 123*9c7c683cSJung-uk Kim 124*9c7c683cSJung-uk Kim if (Name[0] != '_') 125*9c7c683cSJung-uk Kim { 126*9c7c683cSJung-uk Kim return (NULL); 127*9c7c683cSJung-uk Kim } 128*9c7c683cSJung-uk Kim 129*9c7c683cSJung-uk Kim /* Search info table for a predefined method/object name */ 130*9c7c683cSJung-uk Kim 131*9c7c683cSJung-uk Kim ThisName = AcpiGbl_PredefinedMethods; 132*9c7c683cSJung-uk Kim while (ThisName->Info.Name[0]) 133*9c7c683cSJung-uk Kim { 134*9c7c683cSJung-uk Kim if (ACPI_COMPARE_NAME (Name, ThisName->Info.Name)) 135*9c7c683cSJung-uk Kim { 136*9c7c683cSJung-uk Kim return (ThisName); 137*9c7c683cSJung-uk Kim } 138*9c7c683cSJung-uk Kim 139*9c7c683cSJung-uk Kim ThisName = AcpiUtGetNextPredefinedMethod (ThisName); 140*9c7c683cSJung-uk Kim } 141*9c7c683cSJung-uk Kim 142*9c7c683cSJung-uk Kim return (NULL); /* Not found */ 143*9c7c683cSJung-uk Kim } 144*9c7c683cSJung-uk Kim 145*9c7c683cSJung-uk Kim 146*9c7c683cSJung-uk Kim /******************************************************************************* 147*9c7c683cSJung-uk Kim * 148*9c7c683cSJung-uk Kim * FUNCTION: AcpiUtGetExpectedReturnTypes 149*9c7c683cSJung-uk Kim * 150*9c7c683cSJung-uk Kim * PARAMETERS: Buffer - Where the formatted string is returned 151*9c7c683cSJung-uk Kim * ExpectedBTypes - Bitfield of expected data types 152*9c7c683cSJung-uk Kim * 153*9c7c683cSJung-uk Kim * RETURN: Formatted string in Buffer. 154*9c7c683cSJung-uk Kim * 155*9c7c683cSJung-uk Kim * DESCRIPTION: Format the expected object types into a printable string. 156*9c7c683cSJung-uk Kim * 157*9c7c683cSJung-uk Kim ******************************************************************************/ 158*9c7c683cSJung-uk Kim 159*9c7c683cSJung-uk Kim void 160*9c7c683cSJung-uk Kim AcpiUtGetExpectedReturnTypes ( 161*9c7c683cSJung-uk Kim char *Buffer, 162*9c7c683cSJung-uk Kim UINT32 ExpectedBtypes) 163*9c7c683cSJung-uk Kim { 164*9c7c683cSJung-uk Kim UINT32 ThisRtype; 165*9c7c683cSJung-uk Kim UINT32 i; 166*9c7c683cSJung-uk Kim UINT32 j; 167*9c7c683cSJung-uk Kim 168*9c7c683cSJung-uk Kim 169*9c7c683cSJung-uk Kim j = 1; 170*9c7c683cSJung-uk Kim Buffer[0] = 0; 171*9c7c683cSJung-uk Kim ThisRtype = ACPI_RTYPE_INTEGER; 172*9c7c683cSJung-uk Kim 173*9c7c683cSJung-uk Kim for (i = 0; i < ACPI_NUM_RTYPES; i++) 174*9c7c683cSJung-uk Kim { 175*9c7c683cSJung-uk Kim /* If one of the expected types, concatenate the name of this type */ 176*9c7c683cSJung-uk Kim 177*9c7c683cSJung-uk Kim if (ExpectedBtypes & ThisRtype) 178*9c7c683cSJung-uk Kim { 179*9c7c683cSJung-uk Kim ACPI_STRCAT (Buffer, &UtRtypeNames[i][j]); 180*9c7c683cSJung-uk Kim j = 0; /* Use name separator from now on */ 181*9c7c683cSJung-uk Kim } 182*9c7c683cSJung-uk Kim 183*9c7c683cSJung-uk Kim ThisRtype <<= 1; /* Next Rtype */ 184*9c7c683cSJung-uk Kim } 185*9c7c683cSJung-uk Kim } 186*9c7c683cSJung-uk Kim 187*9c7c683cSJung-uk Kim 188*9c7c683cSJung-uk Kim /******************************************************************************* 189*9c7c683cSJung-uk Kim * 190*9c7c683cSJung-uk Kim * The remaining functions are used by iASL and AcpiHelp only 191*9c7c683cSJung-uk Kim * 192*9c7c683cSJung-uk Kim ******************************************************************************/ 193*9c7c683cSJung-uk Kim 194*9c7c683cSJung-uk Kim #if (defined ACPI_ASL_COMPILER || defined ACPI_HELP_APP) 195*9c7c683cSJung-uk Kim #include <stdio.h> 196*9c7c683cSJung-uk Kim #include <string.h> 197*9c7c683cSJung-uk Kim 198*9c7c683cSJung-uk Kim /* Local prototypes */ 199*9c7c683cSJung-uk Kim 200*9c7c683cSJung-uk Kim static UINT32 201*9c7c683cSJung-uk Kim AcpiUtGetArgumentTypes ( 202*9c7c683cSJung-uk Kim char *Buffer, 203*9c7c683cSJung-uk Kim UINT16 ArgumentTypes); 204*9c7c683cSJung-uk Kim 205*9c7c683cSJung-uk Kim 206*9c7c683cSJung-uk Kim /* Types that can be returned externally by a predefined name */ 207*9c7c683cSJung-uk Kim 208*9c7c683cSJung-uk Kim static const char *UtExternalTypeNames[] = /* Indexed by ACPI_TYPE_* */ 209*9c7c683cSJung-uk Kim { 210*9c7c683cSJung-uk Kim ", UNSUPPORTED-TYPE", 211*9c7c683cSJung-uk Kim ", Integer", 212*9c7c683cSJung-uk Kim ", String", 213*9c7c683cSJung-uk Kim ", Buffer", 214*9c7c683cSJung-uk Kim ", Package" 215*9c7c683cSJung-uk Kim }; 216*9c7c683cSJung-uk Kim 217*9c7c683cSJung-uk Kim /* Bit widths for resource descriptor predefined names */ 218*9c7c683cSJung-uk Kim 219*9c7c683cSJung-uk Kim static const char *UtResourceTypeNames[] = 220*9c7c683cSJung-uk Kim { 221*9c7c683cSJung-uk Kim "/1", 222*9c7c683cSJung-uk Kim "/2", 223*9c7c683cSJung-uk Kim "/3", 224*9c7c683cSJung-uk Kim "/8", 225*9c7c683cSJung-uk Kim "/16", 226*9c7c683cSJung-uk Kim "/32", 227*9c7c683cSJung-uk Kim "/64", 228*9c7c683cSJung-uk Kim "/variable", 229*9c7c683cSJung-uk Kim }; 230*9c7c683cSJung-uk Kim 231*9c7c683cSJung-uk Kim 232*9c7c683cSJung-uk Kim /******************************************************************************* 233*9c7c683cSJung-uk Kim * 234*9c7c683cSJung-uk Kim * FUNCTION: AcpiUtMatchResourceName 235*9c7c683cSJung-uk Kim * 236*9c7c683cSJung-uk Kim * PARAMETERS: Name - Name to find 237*9c7c683cSJung-uk Kim * 238*9c7c683cSJung-uk Kim * RETURN: Pointer to entry in the resource table. NULL indicates not 239*9c7c683cSJung-uk Kim * found. 240*9c7c683cSJung-uk Kim * 241*9c7c683cSJung-uk Kim * DESCRIPTION: Check an object name against the predefined resource 242*9c7c683cSJung-uk Kim * descriptor object list. 243*9c7c683cSJung-uk Kim * 244*9c7c683cSJung-uk Kim ******************************************************************************/ 245*9c7c683cSJung-uk Kim 246*9c7c683cSJung-uk Kim const ACPI_PREDEFINED_INFO * 247*9c7c683cSJung-uk Kim AcpiUtMatchResourceName ( 248*9c7c683cSJung-uk Kim char *Name) 249*9c7c683cSJung-uk Kim { 250*9c7c683cSJung-uk Kim const ACPI_PREDEFINED_INFO *ThisName; 251*9c7c683cSJung-uk Kim 252*9c7c683cSJung-uk Kim 253*9c7c683cSJung-uk Kim /* Quick check for a predefined name, first character must be underscore */ 254*9c7c683cSJung-uk Kim 255*9c7c683cSJung-uk Kim if (Name[0] != '_') 256*9c7c683cSJung-uk Kim { 257*9c7c683cSJung-uk Kim return (NULL); 258*9c7c683cSJung-uk Kim } 259*9c7c683cSJung-uk Kim 260*9c7c683cSJung-uk Kim /* Search info table for a predefined method/object name */ 261*9c7c683cSJung-uk Kim 262*9c7c683cSJung-uk Kim ThisName = AcpiGbl_ResourceNames; 263*9c7c683cSJung-uk Kim while (ThisName->Info.Name[0]) 264*9c7c683cSJung-uk Kim { 265*9c7c683cSJung-uk Kim if (ACPI_COMPARE_NAME (Name, ThisName->Info.Name)) 266*9c7c683cSJung-uk Kim { 267*9c7c683cSJung-uk Kim return (ThisName); 268*9c7c683cSJung-uk Kim } 269*9c7c683cSJung-uk Kim 270*9c7c683cSJung-uk Kim ThisName++; 271*9c7c683cSJung-uk Kim } 272*9c7c683cSJung-uk Kim 273*9c7c683cSJung-uk Kim return (NULL); /* Not found */ 274*9c7c683cSJung-uk Kim } 275*9c7c683cSJung-uk Kim 276*9c7c683cSJung-uk Kim 277*9c7c683cSJung-uk Kim /******************************************************************************* 278*9c7c683cSJung-uk Kim * 279*9c7c683cSJung-uk Kim * FUNCTION: AcpiUtDisplayPredefinedMethod 280*9c7c683cSJung-uk Kim * 281*9c7c683cSJung-uk Kim * PARAMETERS: Buffer - Scratch buffer for this function 282*9c7c683cSJung-uk Kim * ThisName - Entry in the predefined method/name table 283*9c7c683cSJung-uk Kim * MultiLine - TRUE if output should be on >1 line 284*9c7c683cSJung-uk Kim * 285*9c7c683cSJung-uk Kim * RETURN: None 286*9c7c683cSJung-uk Kim * 287*9c7c683cSJung-uk Kim * DESCRIPTION: Display information about a predefined method. Number and 288*9c7c683cSJung-uk Kim * type of the input arguments, and expected type(s) for the 289*9c7c683cSJung-uk Kim * return value, if any. 290*9c7c683cSJung-uk Kim * 291*9c7c683cSJung-uk Kim ******************************************************************************/ 292*9c7c683cSJung-uk Kim 293*9c7c683cSJung-uk Kim void 294*9c7c683cSJung-uk Kim AcpiUtDisplayPredefinedMethod ( 295*9c7c683cSJung-uk Kim char *Buffer, 296*9c7c683cSJung-uk Kim const ACPI_PREDEFINED_INFO *ThisName, 297*9c7c683cSJung-uk Kim BOOLEAN MultiLine) 298*9c7c683cSJung-uk Kim { 299*9c7c683cSJung-uk Kim UINT32 ArgCount; 300*9c7c683cSJung-uk Kim 301*9c7c683cSJung-uk Kim /* 302*9c7c683cSJung-uk Kim * Get the argument count and the string buffer 303*9c7c683cSJung-uk Kim * containing all argument types 304*9c7c683cSJung-uk Kim */ 305*9c7c683cSJung-uk Kim ArgCount = AcpiUtGetArgumentTypes (Buffer, 306*9c7c683cSJung-uk Kim ThisName->Info.ArgumentList); 307*9c7c683cSJung-uk Kim 308*9c7c683cSJung-uk Kim if (MultiLine) 309*9c7c683cSJung-uk Kim { 310*9c7c683cSJung-uk Kim printf (" "); 311*9c7c683cSJung-uk Kim } 312*9c7c683cSJung-uk Kim 313*9c7c683cSJung-uk Kim printf ("%4.4s Requires %s%u argument%s", 314*9c7c683cSJung-uk Kim ThisName->Info.Name, 315*9c7c683cSJung-uk Kim (ThisName->Info.ArgumentList & ARG_COUNT_IS_MINIMUM) ? 316*9c7c683cSJung-uk Kim "(at least) " : "", 317*9c7c683cSJung-uk Kim ArgCount, ArgCount != 1 ? "s" : ""); 318*9c7c683cSJung-uk Kim 319*9c7c683cSJung-uk Kim /* Display the types for any arguments */ 320*9c7c683cSJung-uk Kim 321*9c7c683cSJung-uk Kim if (ArgCount > 0) 322*9c7c683cSJung-uk Kim { 323*9c7c683cSJung-uk Kim printf (" (%s)", Buffer); 324*9c7c683cSJung-uk Kim } 325*9c7c683cSJung-uk Kim 326*9c7c683cSJung-uk Kim if (MultiLine) 327*9c7c683cSJung-uk Kim { 328*9c7c683cSJung-uk Kim printf ("\n "); 329*9c7c683cSJung-uk Kim } 330*9c7c683cSJung-uk Kim 331*9c7c683cSJung-uk Kim /* Get the return value type(s) allowed */ 332*9c7c683cSJung-uk Kim 333*9c7c683cSJung-uk Kim if (ThisName->Info.ExpectedBtypes) 334*9c7c683cSJung-uk Kim { 335*9c7c683cSJung-uk Kim AcpiUtGetExpectedReturnTypes (Buffer, ThisName->Info.ExpectedBtypes); 336*9c7c683cSJung-uk Kim printf (" Return value types: %s\n", Buffer); 337*9c7c683cSJung-uk Kim } 338*9c7c683cSJung-uk Kim else 339*9c7c683cSJung-uk Kim { 340*9c7c683cSJung-uk Kim printf (" No return value\n"); 341*9c7c683cSJung-uk Kim } 342*9c7c683cSJung-uk Kim } 343*9c7c683cSJung-uk Kim 344*9c7c683cSJung-uk Kim 345*9c7c683cSJung-uk Kim /******************************************************************************* 346*9c7c683cSJung-uk Kim * 347*9c7c683cSJung-uk Kim * FUNCTION: AcpiUtGetArgumentTypes 348*9c7c683cSJung-uk Kim * 349*9c7c683cSJung-uk Kim * PARAMETERS: Buffer - Where to return the formatted types 350*9c7c683cSJung-uk Kim * ArgumentTypes - Types field for this method 351*9c7c683cSJung-uk Kim * 352*9c7c683cSJung-uk Kim * RETURN: Count - the number of arguments required for this method 353*9c7c683cSJung-uk Kim * 354*9c7c683cSJung-uk Kim * DESCRIPTION: Format the required data types for this method (Integer, 355*9c7c683cSJung-uk Kim * String, Buffer, or Package) and return the required argument 356*9c7c683cSJung-uk Kim * count. 357*9c7c683cSJung-uk Kim * 358*9c7c683cSJung-uk Kim ******************************************************************************/ 359*9c7c683cSJung-uk Kim 360*9c7c683cSJung-uk Kim static UINT32 361*9c7c683cSJung-uk Kim AcpiUtGetArgumentTypes ( 362*9c7c683cSJung-uk Kim char *Buffer, 363*9c7c683cSJung-uk Kim UINT16 ArgumentTypes) 364*9c7c683cSJung-uk Kim { 365*9c7c683cSJung-uk Kim UINT16 ThisArgumentType; 366*9c7c683cSJung-uk Kim UINT16 SubIndex; 367*9c7c683cSJung-uk Kim UINT16 ArgCount; 368*9c7c683cSJung-uk Kim UINT32 i; 369*9c7c683cSJung-uk Kim 370*9c7c683cSJung-uk Kim 371*9c7c683cSJung-uk Kim *Buffer = 0; 372*9c7c683cSJung-uk Kim SubIndex = 2; 373*9c7c683cSJung-uk Kim 374*9c7c683cSJung-uk Kim /* First field in the types list is the count of args to follow */ 375*9c7c683cSJung-uk Kim 376*9c7c683cSJung-uk Kim ArgCount = (ArgumentTypes & METHOD_ARG_MASK); 377*9c7c683cSJung-uk Kim ArgumentTypes >>= METHOD_ARG_BIT_WIDTH; 378*9c7c683cSJung-uk Kim 379*9c7c683cSJung-uk Kim if (ArgCount > METHOD_PREDEF_ARGS_MAX) 380*9c7c683cSJung-uk Kim { 381*9c7c683cSJung-uk Kim printf ("**** Invalid argument count (%u) " 382*9c7c683cSJung-uk Kim "in predefined info structure\n", ArgCount); 383*9c7c683cSJung-uk Kim return (ArgCount); 384*9c7c683cSJung-uk Kim } 385*9c7c683cSJung-uk Kim 386*9c7c683cSJung-uk Kim /* Get each argument from the list, convert to ascii, store to buffer */ 387*9c7c683cSJung-uk Kim 388*9c7c683cSJung-uk Kim for (i = 0; i < ArgCount; i++) 389*9c7c683cSJung-uk Kim { 390*9c7c683cSJung-uk Kim ThisArgumentType = (ArgumentTypes & METHOD_ARG_MASK); 391*9c7c683cSJung-uk Kim if (!ThisArgumentType || (ThisArgumentType > METHOD_MAX_ARG_TYPE)) 392*9c7c683cSJung-uk Kim { 393*9c7c683cSJung-uk Kim printf ("**** Invalid argument type (%u) " 394*9c7c683cSJung-uk Kim "in predefined info structure\n", ThisArgumentType); 395*9c7c683cSJung-uk Kim return (ArgCount); 396*9c7c683cSJung-uk Kim } 397*9c7c683cSJung-uk Kim 398*9c7c683cSJung-uk Kim strcat (Buffer, UtExternalTypeNames[ThisArgumentType] + SubIndex); 399*9c7c683cSJung-uk Kim 400*9c7c683cSJung-uk Kim /* Shift to next argument type field */ 401*9c7c683cSJung-uk Kim 402*9c7c683cSJung-uk Kim ArgumentTypes >>= METHOD_ARG_BIT_WIDTH; 403*9c7c683cSJung-uk Kim SubIndex = 0; 404*9c7c683cSJung-uk Kim } 405*9c7c683cSJung-uk Kim 406*9c7c683cSJung-uk Kim return (ArgCount); 407*9c7c683cSJung-uk Kim } 408*9c7c683cSJung-uk Kim 409*9c7c683cSJung-uk Kim 410*9c7c683cSJung-uk Kim /******************************************************************************* 411*9c7c683cSJung-uk Kim * 412*9c7c683cSJung-uk Kim * FUNCTION: AcpiUtGetResourceBitWidth 413*9c7c683cSJung-uk Kim * 414*9c7c683cSJung-uk Kim * PARAMETERS: Buffer - Where the formatted string is returned 415*9c7c683cSJung-uk Kim * Types - Bitfield of expected data types 416*9c7c683cSJung-uk Kim * 417*9c7c683cSJung-uk Kim * RETURN: Count of return types. Formatted string in Buffer. 418*9c7c683cSJung-uk Kim * 419*9c7c683cSJung-uk Kim * DESCRIPTION: Format the resource bit widths into a printable string. 420*9c7c683cSJung-uk Kim * 421*9c7c683cSJung-uk Kim ******************************************************************************/ 422*9c7c683cSJung-uk Kim 423*9c7c683cSJung-uk Kim UINT32 424*9c7c683cSJung-uk Kim AcpiUtGetResourceBitWidth ( 425*9c7c683cSJung-uk Kim char *Buffer, 426*9c7c683cSJung-uk Kim UINT16 Types) 427*9c7c683cSJung-uk Kim { 428*9c7c683cSJung-uk Kim UINT32 i; 429*9c7c683cSJung-uk Kim UINT16 SubIndex; 430*9c7c683cSJung-uk Kim UINT32 Found; 431*9c7c683cSJung-uk Kim 432*9c7c683cSJung-uk Kim 433*9c7c683cSJung-uk Kim *Buffer = 0; 434*9c7c683cSJung-uk Kim SubIndex = 1; 435*9c7c683cSJung-uk Kim Found = 0; 436*9c7c683cSJung-uk Kim 437*9c7c683cSJung-uk Kim for (i = 0; i < NUM_RESOURCE_WIDTHS; i++) 438*9c7c683cSJung-uk Kim { 439*9c7c683cSJung-uk Kim if (Types & 1) 440*9c7c683cSJung-uk Kim { 441*9c7c683cSJung-uk Kim strcat (Buffer, &(UtResourceTypeNames[i][SubIndex])); 442*9c7c683cSJung-uk Kim SubIndex = 0; 443*9c7c683cSJung-uk Kim Found++; 444*9c7c683cSJung-uk Kim } 445*9c7c683cSJung-uk Kim 446*9c7c683cSJung-uk Kim Types >>= 1; 447*9c7c683cSJung-uk Kim } 448*9c7c683cSJung-uk Kim 449*9c7c683cSJung-uk Kim return (Found); 450*9c7c683cSJung-uk Kim } 451*9c7c683cSJung-uk Kim #endif 452