xref: /freebsd/sys/contrib/dev/acpica/components/utilities/utpredef.c (revision 895f26a936215c6187ee6f713ce504921b6010e1)
19c7c683cSJung-uk Kim /******************************************************************************
29c7c683cSJung-uk Kim  *
39c7c683cSJung-uk Kim  * Module Name: utpredef - support functions for predefined names
49c7c683cSJung-uk Kim  *
59c7c683cSJung-uk Kim  *****************************************************************************/
69c7c683cSJung-uk Kim 
79c7c683cSJung-uk Kim /*
89c7c683cSJung-uk Kim  * Copyright (C) 2000 - 2013, Intel Corp.
99c7c683cSJung-uk Kim  * All rights reserved.
109c7c683cSJung-uk Kim  *
119c7c683cSJung-uk Kim  * Redistribution and use in source and binary forms, with or without
129c7c683cSJung-uk Kim  * modification, are permitted provided that the following conditions
139c7c683cSJung-uk Kim  * are met:
149c7c683cSJung-uk Kim  * 1. Redistributions of source code must retain the above copyright
159c7c683cSJung-uk Kim  *    notice, this list of conditions, and the following disclaimer,
169c7c683cSJung-uk Kim  *    without modification.
179c7c683cSJung-uk Kim  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
189c7c683cSJung-uk Kim  *    substantially similar to the "NO WARRANTY" disclaimer below
199c7c683cSJung-uk Kim  *    ("Disclaimer") and any redistribution must be conditioned upon
209c7c683cSJung-uk Kim  *    including a substantially similar Disclaimer requirement for further
219c7c683cSJung-uk Kim  *    binary redistribution.
229c7c683cSJung-uk Kim  * 3. Neither the names of the above-listed copyright holders nor the names
239c7c683cSJung-uk Kim  *    of any contributors may be used to endorse or promote products derived
249c7c683cSJung-uk Kim  *    from this software without specific prior written permission.
259c7c683cSJung-uk Kim  *
269c7c683cSJung-uk Kim  * Alternatively, this software may be distributed under the terms of the
279c7c683cSJung-uk Kim  * GNU General Public License ("GPL") version 2 as published by the Free
289c7c683cSJung-uk Kim  * Software Foundation.
299c7c683cSJung-uk Kim  *
309c7c683cSJung-uk Kim  * NO WARRANTY
319c7c683cSJung-uk Kim  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
329c7c683cSJung-uk Kim  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
339c7c683cSJung-uk Kim  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
349c7c683cSJung-uk Kim  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
359c7c683cSJung-uk Kim  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
369c7c683cSJung-uk Kim  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
379c7c683cSJung-uk Kim  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
389c7c683cSJung-uk Kim  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
399c7c683cSJung-uk Kim  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
409c7c683cSJung-uk Kim  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
419c7c683cSJung-uk Kim  * POSSIBILITY OF SUCH DAMAGES.
429c7c683cSJung-uk Kim  */
439c7c683cSJung-uk Kim 
449c7c683cSJung-uk Kim #define __UTPREDEF_C__
459c7c683cSJung-uk Kim 
469c7c683cSJung-uk Kim #include <contrib/dev/acpica/include/acpi.h>
479c7c683cSJung-uk Kim #include <contrib/dev/acpica/include/accommon.h>
489c7c683cSJung-uk Kim #include <contrib/dev/acpica/include/acpredef.h>
499c7c683cSJung-uk Kim 
509c7c683cSJung-uk Kim 
519c7c683cSJung-uk Kim #define _COMPONENT          ACPI_UTILITIES
529c7c683cSJung-uk Kim         ACPI_MODULE_NAME    ("utpredef")
539c7c683cSJung-uk Kim 
549c7c683cSJung-uk Kim 
559c7c683cSJung-uk Kim /*
569c7c683cSJung-uk Kim  * Names for the types that can be returned by the predefined objects.
579c7c683cSJung-uk Kim  * Used for warning messages. Must be in the same order as the ACPI_RTYPEs
589c7c683cSJung-uk Kim  */
599c7c683cSJung-uk Kim static const char   *UtRtypeNames[] =
609c7c683cSJung-uk Kim {
619c7c683cSJung-uk Kim     "/Integer",
629c7c683cSJung-uk Kim     "/String",
639c7c683cSJung-uk Kim     "/Buffer",
649c7c683cSJung-uk Kim     "/Package",
659c7c683cSJung-uk Kim     "/Reference",
669c7c683cSJung-uk Kim };
679c7c683cSJung-uk Kim 
689c7c683cSJung-uk Kim 
699c7c683cSJung-uk Kim /*******************************************************************************
709c7c683cSJung-uk Kim  *
719c7c683cSJung-uk Kim  * FUNCTION:    AcpiUtGetNextPredefinedMethod
729c7c683cSJung-uk Kim  *
739c7c683cSJung-uk Kim  * PARAMETERS:  ThisName            - Entry in the predefined method/name table
749c7c683cSJung-uk Kim  *
759c7c683cSJung-uk Kim  * RETURN:      Pointer to next entry in predefined table.
769c7c683cSJung-uk Kim  *
779c7c683cSJung-uk Kim  * DESCRIPTION: Get the next entry in the predefine method table. Handles the
789c7c683cSJung-uk Kim  *              cases where a package info entry follows a method name that
799c7c683cSJung-uk Kim  *              returns a package.
809c7c683cSJung-uk Kim  *
819c7c683cSJung-uk Kim  ******************************************************************************/
829c7c683cSJung-uk Kim 
839c7c683cSJung-uk Kim const ACPI_PREDEFINED_INFO *
849c7c683cSJung-uk Kim AcpiUtGetNextPredefinedMethod (
859c7c683cSJung-uk Kim     const ACPI_PREDEFINED_INFO  *ThisName)
869c7c683cSJung-uk Kim {
879c7c683cSJung-uk Kim 
889c7c683cSJung-uk Kim     /*
899c7c683cSJung-uk Kim      * Skip next entry in the table if this name returns a Package
909c7c683cSJung-uk Kim      * (next entry contains the package info)
919c7c683cSJung-uk Kim      */
929c7c683cSJung-uk Kim     if ((ThisName->Info.ExpectedBtypes & ACPI_RTYPE_PACKAGE) &&
939c7c683cSJung-uk Kim         (ThisName->Info.ExpectedBtypes != ACPI_RTYPE_ALL))
949c7c683cSJung-uk Kim     {
959c7c683cSJung-uk Kim         ThisName++;
969c7c683cSJung-uk Kim     }
979c7c683cSJung-uk Kim 
989c7c683cSJung-uk Kim     ThisName++;
999c7c683cSJung-uk Kim     return (ThisName);
1009c7c683cSJung-uk Kim }
1019c7c683cSJung-uk Kim 
1029c7c683cSJung-uk Kim 
1039c7c683cSJung-uk Kim /*******************************************************************************
1049c7c683cSJung-uk Kim  *
1059c7c683cSJung-uk Kim  * FUNCTION:    AcpiUtMatchPredefinedMethod
1069c7c683cSJung-uk Kim  *
1079c7c683cSJung-uk Kim  * PARAMETERS:  Name                - Name to find
1089c7c683cSJung-uk Kim  *
1099c7c683cSJung-uk Kim  * RETURN:      Pointer to entry in predefined table. NULL indicates not found.
1109c7c683cSJung-uk Kim  *
1119c7c683cSJung-uk Kim  * DESCRIPTION: Check an object name against the predefined object list.
1129c7c683cSJung-uk Kim  *
1139c7c683cSJung-uk Kim  ******************************************************************************/
1149c7c683cSJung-uk Kim 
1159c7c683cSJung-uk Kim const ACPI_PREDEFINED_INFO *
1169c7c683cSJung-uk Kim AcpiUtMatchPredefinedMethod (
1179c7c683cSJung-uk Kim     char                        *Name)
1189c7c683cSJung-uk Kim {
1199c7c683cSJung-uk Kim     const ACPI_PREDEFINED_INFO  *ThisName;
1209c7c683cSJung-uk Kim 
1219c7c683cSJung-uk Kim 
1229c7c683cSJung-uk Kim     /* Quick check for a predefined name, first character must be underscore */
1239c7c683cSJung-uk Kim 
1249c7c683cSJung-uk Kim     if (Name[0] != '_')
1259c7c683cSJung-uk Kim     {
1269c7c683cSJung-uk Kim         return (NULL);
1279c7c683cSJung-uk Kim     }
1289c7c683cSJung-uk Kim 
1299c7c683cSJung-uk Kim     /* Search info table for a predefined method/object name */
1309c7c683cSJung-uk Kim 
1319c7c683cSJung-uk Kim     ThisName = AcpiGbl_PredefinedMethods;
1329c7c683cSJung-uk Kim     while (ThisName->Info.Name[0])
1339c7c683cSJung-uk Kim     {
1349c7c683cSJung-uk Kim         if (ACPI_COMPARE_NAME (Name, ThisName->Info.Name))
1359c7c683cSJung-uk Kim         {
1369c7c683cSJung-uk Kim             return (ThisName);
1379c7c683cSJung-uk Kim         }
1389c7c683cSJung-uk Kim 
1399c7c683cSJung-uk Kim         ThisName = AcpiUtGetNextPredefinedMethod (ThisName);
1409c7c683cSJung-uk Kim     }
1419c7c683cSJung-uk Kim 
1429c7c683cSJung-uk Kim     return (NULL); /* Not found */
1439c7c683cSJung-uk Kim }
1449c7c683cSJung-uk Kim 
1459c7c683cSJung-uk Kim 
1469c7c683cSJung-uk Kim /*******************************************************************************
1479c7c683cSJung-uk Kim  *
1489c7c683cSJung-uk Kim  * FUNCTION:    AcpiUtGetExpectedReturnTypes
1499c7c683cSJung-uk Kim  *
1509c7c683cSJung-uk Kim  * PARAMETERS:  Buffer              - Where the formatted string is returned
1519c7c683cSJung-uk Kim  *              ExpectedBTypes      - Bitfield of expected data types
1529c7c683cSJung-uk Kim  *
1539c7c683cSJung-uk Kim  * RETURN:      Formatted string in Buffer.
1549c7c683cSJung-uk Kim  *
1559c7c683cSJung-uk Kim  * DESCRIPTION: Format the expected object types into a printable string.
1569c7c683cSJung-uk Kim  *
1579c7c683cSJung-uk Kim  ******************************************************************************/
1589c7c683cSJung-uk Kim 
1599c7c683cSJung-uk Kim void
1609c7c683cSJung-uk Kim AcpiUtGetExpectedReturnTypes (
1619c7c683cSJung-uk Kim     char                    *Buffer,
1629c7c683cSJung-uk Kim     UINT32                  ExpectedBtypes)
1639c7c683cSJung-uk Kim {
1649c7c683cSJung-uk Kim     UINT32                  ThisRtype;
1659c7c683cSJung-uk Kim     UINT32                  i;
1669c7c683cSJung-uk Kim     UINT32                  j;
1679c7c683cSJung-uk Kim 
1689c7c683cSJung-uk Kim 
169*895f26a9SJung-uk Kim     if (!ExpectedBtypes)
170*895f26a9SJung-uk Kim     {
171*895f26a9SJung-uk Kim         ACPI_STRCPY (Buffer, "NONE");
172*895f26a9SJung-uk Kim         return;
173*895f26a9SJung-uk Kim     }
174*895f26a9SJung-uk Kim 
1759c7c683cSJung-uk Kim     j = 1;
1769c7c683cSJung-uk Kim     Buffer[0] = 0;
1779c7c683cSJung-uk Kim     ThisRtype = ACPI_RTYPE_INTEGER;
1789c7c683cSJung-uk Kim 
1799c7c683cSJung-uk Kim     for (i = 0; i < ACPI_NUM_RTYPES; i++)
1809c7c683cSJung-uk Kim     {
1819c7c683cSJung-uk Kim         /* If one of the expected types, concatenate the name of this type */
1829c7c683cSJung-uk Kim 
1839c7c683cSJung-uk Kim         if (ExpectedBtypes & ThisRtype)
1849c7c683cSJung-uk Kim         {
1859c7c683cSJung-uk Kim             ACPI_STRCAT (Buffer, &UtRtypeNames[i][j]);
1869c7c683cSJung-uk Kim             j = 0;              /* Use name separator from now on */
1879c7c683cSJung-uk Kim         }
1889c7c683cSJung-uk Kim 
1899c7c683cSJung-uk Kim         ThisRtype <<= 1;    /* Next Rtype */
1909c7c683cSJung-uk Kim     }
1919c7c683cSJung-uk Kim }
1929c7c683cSJung-uk Kim 
1939c7c683cSJung-uk Kim 
1949c7c683cSJung-uk Kim /*******************************************************************************
1959c7c683cSJung-uk Kim  *
1969c7c683cSJung-uk Kim  * The remaining functions are used by iASL and AcpiHelp only
1979c7c683cSJung-uk Kim  *
1989c7c683cSJung-uk Kim  ******************************************************************************/
1999c7c683cSJung-uk Kim 
2009c7c683cSJung-uk Kim #if (defined ACPI_ASL_COMPILER || defined ACPI_HELP_APP)
2019c7c683cSJung-uk Kim #include <stdio.h>
2029c7c683cSJung-uk Kim #include <string.h>
2039c7c683cSJung-uk Kim 
2049c7c683cSJung-uk Kim /* Local prototypes */
2059c7c683cSJung-uk Kim 
2069c7c683cSJung-uk Kim static UINT32
2079c7c683cSJung-uk Kim AcpiUtGetArgumentTypes (
2089c7c683cSJung-uk Kim     char                    *Buffer,
2099c7c683cSJung-uk Kim     UINT16                  ArgumentTypes);
2109c7c683cSJung-uk Kim 
2119c7c683cSJung-uk Kim 
2129c7c683cSJung-uk Kim /* Types that can be returned externally by a predefined name */
2139c7c683cSJung-uk Kim 
2149c7c683cSJung-uk Kim static const char   *UtExternalTypeNames[] = /* Indexed by ACPI_TYPE_* */
2159c7c683cSJung-uk Kim {
2169c7c683cSJung-uk Kim     ", UNSUPPORTED-TYPE",
2179c7c683cSJung-uk Kim     ", Integer",
2189c7c683cSJung-uk Kim     ", String",
2199c7c683cSJung-uk Kim     ", Buffer",
2209c7c683cSJung-uk Kim     ", Package"
2219c7c683cSJung-uk Kim };
2229c7c683cSJung-uk Kim 
2239c7c683cSJung-uk Kim /* Bit widths for resource descriptor predefined names */
2249c7c683cSJung-uk Kim 
2259c7c683cSJung-uk Kim static const char   *UtResourceTypeNames[] =
2269c7c683cSJung-uk Kim {
2279c7c683cSJung-uk Kim     "/1",
2289c7c683cSJung-uk Kim     "/2",
2299c7c683cSJung-uk Kim     "/3",
2309c7c683cSJung-uk Kim     "/8",
2319c7c683cSJung-uk Kim     "/16",
2329c7c683cSJung-uk Kim     "/32",
2339c7c683cSJung-uk Kim     "/64",
2349c7c683cSJung-uk Kim     "/variable",
2359c7c683cSJung-uk Kim };
2369c7c683cSJung-uk Kim 
2379c7c683cSJung-uk Kim 
2389c7c683cSJung-uk Kim /*******************************************************************************
2399c7c683cSJung-uk Kim  *
2409c7c683cSJung-uk Kim  * FUNCTION:    AcpiUtMatchResourceName
2419c7c683cSJung-uk Kim  *
2429c7c683cSJung-uk Kim  * PARAMETERS:  Name                - Name to find
2439c7c683cSJung-uk Kim  *
2449c7c683cSJung-uk Kim  * RETURN:      Pointer to entry in the resource table. NULL indicates not
2459c7c683cSJung-uk Kim  *              found.
2469c7c683cSJung-uk Kim  *
2479c7c683cSJung-uk Kim  * DESCRIPTION: Check an object name against the predefined resource
2489c7c683cSJung-uk Kim  *              descriptor object list.
2499c7c683cSJung-uk Kim  *
2509c7c683cSJung-uk Kim  ******************************************************************************/
2519c7c683cSJung-uk Kim 
2529c7c683cSJung-uk Kim const ACPI_PREDEFINED_INFO *
2539c7c683cSJung-uk Kim AcpiUtMatchResourceName (
2549c7c683cSJung-uk Kim     char                        *Name)
2559c7c683cSJung-uk Kim {
2569c7c683cSJung-uk Kim     const ACPI_PREDEFINED_INFO  *ThisName;
2579c7c683cSJung-uk Kim 
2589c7c683cSJung-uk Kim 
2599c7c683cSJung-uk Kim     /* Quick check for a predefined name, first character must be underscore */
2609c7c683cSJung-uk Kim 
2619c7c683cSJung-uk Kim     if (Name[0] != '_')
2629c7c683cSJung-uk Kim     {
2639c7c683cSJung-uk Kim         return (NULL);
2649c7c683cSJung-uk Kim     }
2659c7c683cSJung-uk Kim 
2669c7c683cSJung-uk Kim     /* Search info table for a predefined method/object name */
2679c7c683cSJung-uk Kim 
2689c7c683cSJung-uk Kim     ThisName = AcpiGbl_ResourceNames;
2699c7c683cSJung-uk Kim     while (ThisName->Info.Name[0])
2709c7c683cSJung-uk Kim     {
2719c7c683cSJung-uk Kim         if (ACPI_COMPARE_NAME (Name, ThisName->Info.Name))
2729c7c683cSJung-uk Kim         {
2739c7c683cSJung-uk Kim             return (ThisName);
2749c7c683cSJung-uk Kim         }
2759c7c683cSJung-uk Kim 
2769c7c683cSJung-uk Kim         ThisName++;
2779c7c683cSJung-uk Kim     }
2789c7c683cSJung-uk Kim 
2799c7c683cSJung-uk Kim     return (NULL); /* Not found */
2809c7c683cSJung-uk Kim }
2819c7c683cSJung-uk Kim 
2829c7c683cSJung-uk Kim 
2839c7c683cSJung-uk Kim /*******************************************************************************
2849c7c683cSJung-uk Kim  *
2859c7c683cSJung-uk Kim  * FUNCTION:    AcpiUtDisplayPredefinedMethod
2869c7c683cSJung-uk Kim  *
2879c7c683cSJung-uk Kim  * PARAMETERS:  Buffer              - Scratch buffer for this function
2889c7c683cSJung-uk Kim  *              ThisName            - Entry in the predefined method/name table
2899c7c683cSJung-uk Kim  *              MultiLine           - TRUE if output should be on >1 line
2909c7c683cSJung-uk Kim  *
2919c7c683cSJung-uk Kim  * RETURN:      None
2929c7c683cSJung-uk Kim  *
2939c7c683cSJung-uk Kim  * DESCRIPTION: Display information about a predefined method. Number and
2949c7c683cSJung-uk Kim  *              type of the input arguments, and expected type(s) for the
2959c7c683cSJung-uk Kim  *              return value, if any.
2969c7c683cSJung-uk Kim  *
2979c7c683cSJung-uk Kim  ******************************************************************************/
2989c7c683cSJung-uk Kim 
2999c7c683cSJung-uk Kim void
3009c7c683cSJung-uk Kim AcpiUtDisplayPredefinedMethod (
3019c7c683cSJung-uk Kim     char                        *Buffer,
3029c7c683cSJung-uk Kim     const ACPI_PREDEFINED_INFO  *ThisName,
3039c7c683cSJung-uk Kim     BOOLEAN                     MultiLine)
3049c7c683cSJung-uk Kim {
3059c7c683cSJung-uk Kim     UINT32                      ArgCount;
3069c7c683cSJung-uk Kim 
3079c7c683cSJung-uk Kim     /*
3089c7c683cSJung-uk Kim      * Get the argument count and the string buffer
3099c7c683cSJung-uk Kim      * containing all argument types
3109c7c683cSJung-uk Kim      */
3119c7c683cSJung-uk Kim     ArgCount = AcpiUtGetArgumentTypes (Buffer,
3129c7c683cSJung-uk Kim         ThisName->Info.ArgumentList);
3139c7c683cSJung-uk Kim 
3149c7c683cSJung-uk Kim     if (MultiLine)
3159c7c683cSJung-uk Kim     {
3169c7c683cSJung-uk Kim         printf ("      ");
3179c7c683cSJung-uk Kim     }
3189c7c683cSJung-uk Kim 
3199c7c683cSJung-uk Kim     printf ("%4.4s    Requires %s%u argument%s",
3209c7c683cSJung-uk Kim         ThisName->Info.Name,
3219c7c683cSJung-uk Kim         (ThisName->Info.ArgumentList & ARG_COUNT_IS_MINIMUM) ?
3229c7c683cSJung-uk Kim             "(at least) " : "",
3239c7c683cSJung-uk Kim         ArgCount, ArgCount != 1 ? "s" : "");
3249c7c683cSJung-uk Kim 
3259c7c683cSJung-uk Kim     /* Display the types for any arguments */
3269c7c683cSJung-uk Kim 
3279c7c683cSJung-uk Kim     if (ArgCount > 0)
3289c7c683cSJung-uk Kim     {
3299c7c683cSJung-uk Kim         printf (" (%s)", Buffer);
3309c7c683cSJung-uk Kim     }
3319c7c683cSJung-uk Kim 
3329c7c683cSJung-uk Kim     if (MultiLine)
3339c7c683cSJung-uk Kim     {
3349c7c683cSJung-uk Kim         printf ("\n    ");
3359c7c683cSJung-uk Kim     }
3369c7c683cSJung-uk Kim 
3379c7c683cSJung-uk Kim     /* Get the return value type(s) allowed */
3389c7c683cSJung-uk Kim 
3399c7c683cSJung-uk Kim     if (ThisName->Info.ExpectedBtypes)
3409c7c683cSJung-uk Kim     {
3419c7c683cSJung-uk Kim         AcpiUtGetExpectedReturnTypes (Buffer, ThisName->Info.ExpectedBtypes);
3429c7c683cSJung-uk Kim         printf ("  Return value types: %s\n", Buffer);
3439c7c683cSJung-uk Kim     }
3449c7c683cSJung-uk Kim     else
3459c7c683cSJung-uk Kim     {
3469c7c683cSJung-uk Kim         printf ("  No return value\n");
3479c7c683cSJung-uk Kim     }
3489c7c683cSJung-uk Kim }
3499c7c683cSJung-uk Kim 
3509c7c683cSJung-uk Kim 
3519c7c683cSJung-uk Kim /*******************************************************************************
3529c7c683cSJung-uk Kim  *
3539c7c683cSJung-uk Kim  * FUNCTION:    AcpiUtGetArgumentTypes
3549c7c683cSJung-uk Kim  *
3559c7c683cSJung-uk Kim  * PARAMETERS:  Buffer              - Where to return the formatted types
3569c7c683cSJung-uk Kim  *              ArgumentTypes       - Types field for this method
3579c7c683cSJung-uk Kim  *
3589c7c683cSJung-uk Kim  * RETURN:      Count - the number of arguments required for this method
3599c7c683cSJung-uk Kim  *
3609c7c683cSJung-uk Kim  * DESCRIPTION: Format the required data types for this method (Integer,
3619c7c683cSJung-uk Kim  *              String, Buffer, or Package) and return the required argument
3629c7c683cSJung-uk Kim  *              count.
3639c7c683cSJung-uk Kim  *
3649c7c683cSJung-uk Kim  ******************************************************************************/
3659c7c683cSJung-uk Kim 
3669c7c683cSJung-uk Kim static UINT32
3679c7c683cSJung-uk Kim AcpiUtGetArgumentTypes (
3689c7c683cSJung-uk Kim     char                    *Buffer,
3699c7c683cSJung-uk Kim     UINT16                  ArgumentTypes)
3709c7c683cSJung-uk Kim {
3719c7c683cSJung-uk Kim     UINT16                  ThisArgumentType;
3729c7c683cSJung-uk Kim     UINT16                  SubIndex;
3739c7c683cSJung-uk Kim     UINT16                  ArgCount;
3749c7c683cSJung-uk Kim     UINT32                  i;
3759c7c683cSJung-uk Kim 
3769c7c683cSJung-uk Kim 
3779c7c683cSJung-uk Kim     *Buffer = 0;
3789c7c683cSJung-uk Kim     SubIndex = 2;
3799c7c683cSJung-uk Kim 
3809c7c683cSJung-uk Kim     /* First field in the types list is the count of args to follow */
3819c7c683cSJung-uk Kim 
382*895f26a9SJung-uk Kim     ArgCount = METHOD_GET_ARG_COUNT (ArgumentTypes);
3839c7c683cSJung-uk Kim     if (ArgCount > METHOD_PREDEF_ARGS_MAX)
3849c7c683cSJung-uk Kim     {
3859c7c683cSJung-uk Kim         printf ("**** Invalid argument count (%u) "
3869c7c683cSJung-uk Kim             "in predefined info structure\n", ArgCount);
3879c7c683cSJung-uk Kim         return (ArgCount);
3889c7c683cSJung-uk Kim     }
3899c7c683cSJung-uk Kim 
3909c7c683cSJung-uk Kim     /* Get each argument from the list, convert to ascii, store to buffer */
3919c7c683cSJung-uk Kim 
3929c7c683cSJung-uk Kim     for (i = 0; i < ArgCount; i++)
3939c7c683cSJung-uk Kim     {
394*895f26a9SJung-uk Kim         ThisArgumentType = METHOD_GET_NEXT_TYPE (ArgumentTypes);
395*895f26a9SJung-uk Kim 
3969c7c683cSJung-uk Kim         if (!ThisArgumentType || (ThisArgumentType > METHOD_MAX_ARG_TYPE))
3979c7c683cSJung-uk Kim         {
3989c7c683cSJung-uk Kim             printf ("**** Invalid argument type (%u) "
3999c7c683cSJung-uk Kim                 "in predefined info structure\n", ThisArgumentType);
4009c7c683cSJung-uk Kim             return (ArgCount);
4019c7c683cSJung-uk Kim         }
4029c7c683cSJung-uk Kim 
4039c7c683cSJung-uk Kim         strcat (Buffer, UtExternalTypeNames[ThisArgumentType] + SubIndex);
4049c7c683cSJung-uk Kim         SubIndex = 0;
4059c7c683cSJung-uk Kim     }
4069c7c683cSJung-uk Kim 
4079c7c683cSJung-uk Kim     return (ArgCount);
4089c7c683cSJung-uk Kim }
4099c7c683cSJung-uk Kim 
4109c7c683cSJung-uk Kim 
4119c7c683cSJung-uk Kim /*******************************************************************************
4129c7c683cSJung-uk Kim  *
4139c7c683cSJung-uk Kim  * FUNCTION:    AcpiUtGetResourceBitWidth
4149c7c683cSJung-uk Kim  *
4159c7c683cSJung-uk Kim  * PARAMETERS:  Buffer              - Where the formatted string is returned
4169c7c683cSJung-uk Kim  *              Types               - Bitfield of expected data types
4179c7c683cSJung-uk Kim  *
4189c7c683cSJung-uk Kim  * RETURN:      Count of return types. Formatted string in Buffer.
4199c7c683cSJung-uk Kim  *
4209c7c683cSJung-uk Kim  * DESCRIPTION: Format the resource bit widths into a printable string.
4219c7c683cSJung-uk Kim  *
4229c7c683cSJung-uk Kim  ******************************************************************************/
4239c7c683cSJung-uk Kim 
4249c7c683cSJung-uk Kim UINT32
4259c7c683cSJung-uk Kim AcpiUtGetResourceBitWidth (
4269c7c683cSJung-uk Kim     char                    *Buffer,
4279c7c683cSJung-uk Kim     UINT16                  Types)
4289c7c683cSJung-uk Kim {
4299c7c683cSJung-uk Kim     UINT32                  i;
4309c7c683cSJung-uk Kim     UINT16                  SubIndex;
4319c7c683cSJung-uk Kim     UINT32                  Found;
4329c7c683cSJung-uk Kim 
4339c7c683cSJung-uk Kim 
4349c7c683cSJung-uk Kim     *Buffer = 0;
4359c7c683cSJung-uk Kim     SubIndex = 1;
4369c7c683cSJung-uk Kim     Found = 0;
4379c7c683cSJung-uk Kim 
4389c7c683cSJung-uk Kim     for (i = 0; i < NUM_RESOURCE_WIDTHS; i++)
4399c7c683cSJung-uk Kim     {
4409c7c683cSJung-uk Kim         if (Types & 1)
4419c7c683cSJung-uk Kim         {
4429c7c683cSJung-uk Kim             strcat (Buffer, &(UtResourceTypeNames[i][SubIndex]));
4439c7c683cSJung-uk Kim             SubIndex = 0;
4449c7c683cSJung-uk Kim             Found++;
4459c7c683cSJung-uk Kim         }
4469c7c683cSJung-uk Kim 
4479c7c683cSJung-uk Kim         Types >>= 1;
4489c7c683cSJung-uk Kim     }
4499c7c683cSJung-uk Kim 
4509c7c683cSJung-uk Kim     return (Found);
4519c7c683cSJung-uk Kim }
4529c7c683cSJung-uk Kim #endif
453