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