xref: /freebsd/sys/contrib/dev/acpica/components/utilities/utpredef.c (revision 5ef5072350492e3ee9aff4303789fc75972b5afe)
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 /*
81c0e1b6dSJung-uk Kim  * Copyright (C) 2000 - 2015, 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 #include <contrib/dev/acpica/include/acpi.h>
459c7c683cSJung-uk Kim #include <contrib/dev/acpica/include/accommon.h>
469c7c683cSJung-uk Kim #include <contrib/dev/acpica/include/acpredef.h>
479c7c683cSJung-uk Kim 
489c7c683cSJung-uk Kim 
499c7c683cSJung-uk Kim #define _COMPONENT          ACPI_UTILITIES
509c7c683cSJung-uk Kim         ACPI_MODULE_NAME    ("utpredef")
519c7c683cSJung-uk Kim 
529c7c683cSJung-uk Kim 
539c7c683cSJung-uk Kim /*
549c7c683cSJung-uk Kim  * Names for the types that can be returned by the predefined objects.
559c7c683cSJung-uk Kim  * Used for warning messages. Must be in the same order as the ACPI_RTYPEs
569c7c683cSJung-uk Kim  */
579c7c683cSJung-uk Kim static const char   *UtRtypeNames[] =
589c7c683cSJung-uk Kim {
599c7c683cSJung-uk Kim     "/Integer",
609c7c683cSJung-uk Kim     "/String",
619c7c683cSJung-uk Kim     "/Buffer",
629c7c683cSJung-uk Kim     "/Package",
639c7c683cSJung-uk Kim     "/Reference",
649c7c683cSJung-uk Kim };
659c7c683cSJung-uk Kim 
669c7c683cSJung-uk Kim 
679c7c683cSJung-uk Kim /*******************************************************************************
689c7c683cSJung-uk Kim  *
699c7c683cSJung-uk Kim  * FUNCTION:    AcpiUtGetNextPredefinedMethod
709c7c683cSJung-uk Kim  *
719c7c683cSJung-uk Kim  * PARAMETERS:  ThisName            - Entry in the predefined method/name table
729c7c683cSJung-uk Kim  *
739c7c683cSJung-uk Kim  * RETURN:      Pointer to next entry in predefined table.
749c7c683cSJung-uk Kim  *
759c7c683cSJung-uk Kim  * DESCRIPTION: Get the next entry in the predefine method table. Handles the
769c7c683cSJung-uk Kim  *              cases where a package info entry follows a method name that
779c7c683cSJung-uk Kim  *              returns a package.
789c7c683cSJung-uk Kim  *
799c7c683cSJung-uk Kim  ******************************************************************************/
809c7c683cSJung-uk Kim 
819c7c683cSJung-uk Kim const ACPI_PREDEFINED_INFO *
829c7c683cSJung-uk Kim AcpiUtGetNextPredefinedMethod (
839c7c683cSJung-uk Kim     const ACPI_PREDEFINED_INFO  *ThisName)
849c7c683cSJung-uk Kim {
859c7c683cSJung-uk Kim 
869c7c683cSJung-uk Kim     /*
879c7c683cSJung-uk Kim      * Skip next entry in the table if this name returns a Package
889c7c683cSJung-uk Kim      * (next entry contains the package info)
899c7c683cSJung-uk Kim      */
909c7c683cSJung-uk Kim     if ((ThisName->Info.ExpectedBtypes & ACPI_RTYPE_PACKAGE) &&
919c7c683cSJung-uk Kim         (ThisName->Info.ExpectedBtypes != ACPI_RTYPE_ALL))
929c7c683cSJung-uk Kim     {
939c7c683cSJung-uk Kim         ThisName++;
949c7c683cSJung-uk Kim     }
959c7c683cSJung-uk Kim 
969c7c683cSJung-uk Kim     ThisName++;
979c7c683cSJung-uk Kim     return (ThisName);
989c7c683cSJung-uk Kim }
999c7c683cSJung-uk Kim 
1009c7c683cSJung-uk Kim 
1019c7c683cSJung-uk Kim /*******************************************************************************
1029c7c683cSJung-uk Kim  *
1039c7c683cSJung-uk Kim  * FUNCTION:    AcpiUtMatchPredefinedMethod
1049c7c683cSJung-uk Kim  *
1059c7c683cSJung-uk Kim  * PARAMETERS:  Name                - Name to find
1069c7c683cSJung-uk Kim  *
1079c7c683cSJung-uk Kim  * RETURN:      Pointer to entry in predefined table. NULL indicates not found.
1089c7c683cSJung-uk Kim  *
1099c7c683cSJung-uk Kim  * DESCRIPTION: Check an object name against the predefined object list.
1109c7c683cSJung-uk Kim  *
1119c7c683cSJung-uk Kim  ******************************************************************************/
1129c7c683cSJung-uk Kim 
1139c7c683cSJung-uk Kim const ACPI_PREDEFINED_INFO *
1149c7c683cSJung-uk Kim AcpiUtMatchPredefinedMethod (
1159c7c683cSJung-uk Kim     char                        *Name)
1169c7c683cSJung-uk Kim {
1179c7c683cSJung-uk Kim     const ACPI_PREDEFINED_INFO  *ThisName;
1189c7c683cSJung-uk Kim 
1199c7c683cSJung-uk Kim 
1209c7c683cSJung-uk Kim     /* Quick check for a predefined name, first character must be underscore */
1219c7c683cSJung-uk Kim 
1229c7c683cSJung-uk Kim     if (Name[0] != '_')
1239c7c683cSJung-uk Kim     {
1249c7c683cSJung-uk Kim         return (NULL);
1259c7c683cSJung-uk Kim     }
1269c7c683cSJung-uk Kim 
1279c7c683cSJung-uk Kim     /* Search info table for a predefined method/object name */
1289c7c683cSJung-uk Kim 
1299c7c683cSJung-uk Kim     ThisName = AcpiGbl_PredefinedMethods;
1309c7c683cSJung-uk Kim     while (ThisName->Info.Name[0])
1319c7c683cSJung-uk Kim     {
1329c7c683cSJung-uk Kim         if (ACPI_COMPARE_NAME (Name, ThisName->Info.Name))
1339c7c683cSJung-uk Kim         {
1349c7c683cSJung-uk Kim             return (ThisName);
1359c7c683cSJung-uk Kim         }
1369c7c683cSJung-uk Kim 
1379c7c683cSJung-uk Kim         ThisName = AcpiUtGetNextPredefinedMethod (ThisName);
1389c7c683cSJung-uk Kim     }
1399c7c683cSJung-uk Kim 
1409c7c683cSJung-uk Kim     return (NULL); /* Not found */
1419c7c683cSJung-uk Kim }
1429c7c683cSJung-uk Kim 
1439c7c683cSJung-uk Kim 
1449c7c683cSJung-uk Kim /*******************************************************************************
1459c7c683cSJung-uk Kim  *
1469c7c683cSJung-uk Kim  * FUNCTION:    AcpiUtGetExpectedReturnTypes
1479c7c683cSJung-uk Kim  *
1489c7c683cSJung-uk Kim  * PARAMETERS:  Buffer              - Where the formatted string is returned
1499c7c683cSJung-uk Kim  *              ExpectedBTypes      - Bitfield of expected data types
1509c7c683cSJung-uk Kim  *
1519c7c683cSJung-uk Kim  * RETURN:      Formatted string in Buffer.
1529c7c683cSJung-uk Kim  *
1539c7c683cSJung-uk Kim  * DESCRIPTION: Format the expected object types into a printable string.
1549c7c683cSJung-uk Kim  *
1559c7c683cSJung-uk Kim  ******************************************************************************/
1569c7c683cSJung-uk Kim 
1579c7c683cSJung-uk Kim void
1589c7c683cSJung-uk Kim AcpiUtGetExpectedReturnTypes (
1599c7c683cSJung-uk Kim     char                    *Buffer,
1609c7c683cSJung-uk Kim     UINT32                  ExpectedBtypes)
1619c7c683cSJung-uk Kim {
1629c7c683cSJung-uk Kim     UINT32                  ThisRtype;
1639c7c683cSJung-uk Kim     UINT32                  i;
1649c7c683cSJung-uk Kim     UINT32                  j;
1659c7c683cSJung-uk Kim 
1669c7c683cSJung-uk Kim 
167895f26a9SJung-uk Kim     if (!ExpectedBtypes)
168895f26a9SJung-uk Kim     {
169*5ef50723SJung-uk Kim         strcpy (Buffer, "NONE");
170895f26a9SJung-uk Kim         return;
171895f26a9SJung-uk Kim     }
172895f26a9SJung-uk Kim 
1739c7c683cSJung-uk Kim     j = 1;
1749c7c683cSJung-uk Kim     Buffer[0] = 0;
1759c7c683cSJung-uk Kim     ThisRtype = ACPI_RTYPE_INTEGER;
1769c7c683cSJung-uk Kim 
1779c7c683cSJung-uk Kim     for (i = 0; i < ACPI_NUM_RTYPES; i++)
1789c7c683cSJung-uk Kim     {
1799c7c683cSJung-uk Kim         /* If one of the expected types, concatenate the name of this type */
1809c7c683cSJung-uk Kim 
1819c7c683cSJung-uk Kim         if (ExpectedBtypes & ThisRtype)
1829c7c683cSJung-uk Kim         {
183*5ef50723SJung-uk Kim             strcat (Buffer, &UtRtypeNames[i][j]);
1849c7c683cSJung-uk Kim             j = 0;              /* Use name separator from now on */
1859c7c683cSJung-uk Kim         }
1869c7c683cSJung-uk Kim 
1879c7c683cSJung-uk Kim         ThisRtype <<= 1;    /* Next Rtype */
1889c7c683cSJung-uk Kim     }
1899c7c683cSJung-uk Kim }
1909c7c683cSJung-uk Kim 
1919c7c683cSJung-uk Kim 
1929c7c683cSJung-uk Kim /*******************************************************************************
1939c7c683cSJung-uk Kim  *
1949c7c683cSJung-uk Kim  * The remaining functions are used by iASL and AcpiHelp only
1959c7c683cSJung-uk Kim  *
1969c7c683cSJung-uk Kim  ******************************************************************************/
1979c7c683cSJung-uk Kim 
1989c7c683cSJung-uk Kim #if (defined ACPI_ASL_COMPILER || defined ACPI_HELP_APP)
1999c7c683cSJung-uk Kim #include <stdio.h>
2009c7c683cSJung-uk Kim #include <string.h>
2019c7c683cSJung-uk Kim 
2029c7c683cSJung-uk Kim /* Local prototypes */
2039c7c683cSJung-uk Kim 
2049c7c683cSJung-uk Kim static UINT32
2059c7c683cSJung-uk Kim AcpiUtGetArgumentTypes (
2069c7c683cSJung-uk Kim     char                    *Buffer,
2079c7c683cSJung-uk Kim     UINT16                  ArgumentTypes);
2089c7c683cSJung-uk Kim 
2099c7c683cSJung-uk Kim 
2109c7c683cSJung-uk Kim /* Types that can be returned externally by a predefined name */
2119c7c683cSJung-uk Kim 
2129c7c683cSJung-uk Kim static const char   *UtExternalTypeNames[] = /* Indexed by ACPI_TYPE_* */
2139c7c683cSJung-uk Kim {
2149c7c683cSJung-uk Kim     ", UNSUPPORTED-TYPE",
2159c7c683cSJung-uk Kim     ", Integer",
2169c7c683cSJung-uk Kim     ", String",
2179c7c683cSJung-uk Kim     ", Buffer",
2189c7c683cSJung-uk Kim     ", Package"
2199c7c683cSJung-uk Kim };
2209c7c683cSJung-uk Kim 
2219c7c683cSJung-uk Kim /* Bit widths for resource descriptor predefined names */
2229c7c683cSJung-uk Kim 
2239c7c683cSJung-uk Kim static const char   *UtResourceTypeNames[] =
2249c7c683cSJung-uk Kim {
2259c7c683cSJung-uk Kim     "/1",
2269c7c683cSJung-uk Kim     "/2",
2279c7c683cSJung-uk Kim     "/3",
2289c7c683cSJung-uk Kim     "/8",
2299c7c683cSJung-uk Kim     "/16",
2309c7c683cSJung-uk Kim     "/32",
2319c7c683cSJung-uk Kim     "/64",
2329c7c683cSJung-uk Kim     "/variable",
2339c7c683cSJung-uk Kim };
2349c7c683cSJung-uk Kim 
2359c7c683cSJung-uk Kim 
2369c7c683cSJung-uk Kim /*******************************************************************************
2379c7c683cSJung-uk Kim  *
2389c7c683cSJung-uk Kim  * FUNCTION:    AcpiUtMatchResourceName
2399c7c683cSJung-uk Kim  *
2409c7c683cSJung-uk Kim  * PARAMETERS:  Name                - Name to find
2419c7c683cSJung-uk Kim  *
2429c7c683cSJung-uk Kim  * RETURN:      Pointer to entry in the resource table. NULL indicates not
2439c7c683cSJung-uk Kim  *              found.
2449c7c683cSJung-uk Kim  *
2459c7c683cSJung-uk Kim  * DESCRIPTION: Check an object name against the predefined resource
2469c7c683cSJung-uk Kim  *              descriptor object list.
2479c7c683cSJung-uk Kim  *
2489c7c683cSJung-uk Kim  ******************************************************************************/
2499c7c683cSJung-uk Kim 
2509c7c683cSJung-uk Kim const ACPI_PREDEFINED_INFO *
2519c7c683cSJung-uk Kim AcpiUtMatchResourceName (
2529c7c683cSJung-uk Kim     char                        *Name)
2539c7c683cSJung-uk Kim {
2549c7c683cSJung-uk Kim     const ACPI_PREDEFINED_INFO  *ThisName;
2559c7c683cSJung-uk Kim 
2569c7c683cSJung-uk Kim 
2579c7c683cSJung-uk Kim     /* Quick check for a predefined name, first character must be underscore */
2589c7c683cSJung-uk Kim 
2599c7c683cSJung-uk Kim     if (Name[0] != '_')
2609c7c683cSJung-uk Kim     {
2619c7c683cSJung-uk Kim         return (NULL);
2629c7c683cSJung-uk Kim     }
2639c7c683cSJung-uk Kim 
2649c7c683cSJung-uk Kim     /* Search info table for a predefined method/object name */
2659c7c683cSJung-uk Kim 
2669c7c683cSJung-uk Kim     ThisName = AcpiGbl_ResourceNames;
2679c7c683cSJung-uk Kim     while (ThisName->Info.Name[0])
2689c7c683cSJung-uk Kim     {
2699c7c683cSJung-uk Kim         if (ACPI_COMPARE_NAME (Name, ThisName->Info.Name))
2709c7c683cSJung-uk Kim         {
2719c7c683cSJung-uk Kim             return (ThisName);
2729c7c683cSJung-uk Kim         }
2739c7c683cSJung-uk Kim 
2749c7c683cSJung-uk Kim         ThisName++;
2759c7c683cSJung-uk Kim     }
2769c7c683cSJung-uk Kim 
2779c7c683cSJung-uk Kim     return (NULL); /* Not found */
2789c7c683cSJung-uk Kim }
2799c7c683cSJung-uk Kim 
2809c7c683cSJung-uk Kim 
2819c7c683cSJung-uk Kim /*******************************************************************************
2829c7c683cSJung-uk Kim  *
2839c7c683cSJung-uk Kim  * FUNCTION:    AcpiUtDisplayPredefinedMethod
2849c7c683cSJung-uk Kim  *
2859c7c683cSJung-uk Kim  * PARAMETERS:  Buffer              - Scratch buffer for this function
2869c7c683cSJung-uk Kim  *              ThisName            - Entry in the predefined method/name table
2879c7c683cSJung-uk Kim  *              MultiLine           - TRUE if output should be on >1 line
2889c7c683cSJung-uk Kim  *
2899c7c683cSJung-uk Kim  * RETURN:      None
2909c7c683cSJung-uk Kim  *
2919c7c683cSJung-uk Kim  * DESCRIPTION: Display information about a predefined method. Number and
2929c7c683cSJung-uk Kim  *              type of the input arguments, and expected type(s) for the
2939c7c683cSJung-uk Kim  *              return value, if any.
2949c7c683cSJung-uk Kim  *
2959c7c683cSJung-uk Kim  ******************************************************************************/
2969c7c683cSJung-uk Kim 
2979c7c683cSJung-uk Kim void
2989c7c683cSJung-uk Kim AcpiUtDisplayPredefinedMethod (
2999c7c683cSJung-uk Kim     char                        *Buffer,
3009c7c683cSJung-uk Kim     const ACPI_PREDEFINED_INFO  *ThisName,
3019c7c683cSJung-uk Kim     BOOLEAN                     MultiLine)
3029c7c683cSJung-uk Kim {
3039c7c683cSJung-uk Kim     UINT32                      ArgCount;
3049c7c683cSJung-uk Kim 
3059c7c683cSJung-uk Kim     /*
3069c7c683cSJung-uk Kim      * Get the argument count and the string buffer
3079c7c683cSJung-uk Kim      * containing all argument types
3089c7c683cSJung-uk Kim      */
3099c7c683cSJung-uk Kim     ArgCount = AcpiUtGetArgumentTypes (Buffer,
3109c7c683cSJung-uk Kim         ThisName->Info.ArgumentList);
3119c7c683cSJung-uk Kim 
3129c7c683cSJung-uk Kim     if (MultiLine)
3139c7c683cSJung-uk Kim     {
3149c7c683cSJung-uk Kim         printf ("      ");
3159c7c683cSJung-uk Kim     }
3169c7c683cSJung-uk Kim 
3179c7c683cSJung-uk Kim     printf ("%4.4s    Requires %s%u argument%s",
3189c7c683cSJung-uk Kim         ThisName->Info.Name,
3199c7c683cSJung-uk Kim         (ThisName->Info.ArgumentList & ARG_COUNT_IS_MINIMUM) ?
3209c7c683cSJung-uk Kim             "(at least) " : "",
3219c7c683cSJung-uk Kim         ArgCount, ArgCount != 1 ? "s" : "");
3229c7c683cSJung-uk Kim 
3239c7c683cSJung-uk Kim     /* Display the types for any arguments */
3249c7c683cSJung-uk Kim 
3259c7c683cSJung-uk Kim     if (ArgCount > 0)
3269c7c683cSJung-uk Kim     {
3279c7c683cSJung-uk Kim         printf (" (%s)", Buffer);
3289c7c683cSJung-uk Kim     }
3299c7c683cSJung-uk Kim 
3309c7c683cSJung-uk Kim     if (MultiLine)
3319c7c683cSJung-uk Kim     {
3329c7c683cSJung-uk Kim         printf ("\n    ");
3339c7c683cSJung-uk Kim     }
3349c7c683cSJung-uk Kim 
3359c7c683cSJung-uk Kim     /* Get the return value type(s) allowed */
3369c7c683cSJung-uk Kim 
3379c7c683cSJung-uk Kim     if (ThisName->Info.ExpectedBtypes)
3389c7c683cSJung-uk Kim     {
3399c7c683cSJung-uk Kim         AcpiUtGetExpectedReturnTypes (Buffer, ThisName->Info.ExpectedBtypes);
3409c7c683cSJung-uk Kim         printf ("  Return value types: %s\n", Buffer);
3419c7c683cSJung-uk Kim     }
3429c7c683cSJung-uk Kim     else
3439c7c683cSJung-uk Kim     {
3449c7c683cSJung-uk Kim         printf ("  No return value\n");
3459c7c683cSJung-uk Kim     }
3469c7c683cSJung-uk Kim }
3479c7c683cSJung-uk Kim 
3489c7c683cSJung-uk Kim 
3499c7c683cSJung-uk Kim /*******************************************************************************
3509c7c683cSJung-uk Kim  *
3519c7c683cSJung-uk Kim  * FUNCTION:    AcpiUtGetArgumentTypes
3529c7c683cSJung-uk Kim  *
3539c7c683cSJung-uk Kim  * PARAMETERS:  Buffer              - Where to return the formatted types
3549c7c683cSJung-uk Kim  *              ArgumentTypes       - Types field for this method
3559c7c683cSJung-uk Kim  *
3569c7c683cSJung-uk Kim  * RETURN:      Count - the number of arguments required for this method
3579c7c683cSJung-uk Kim  *
3589c7c683cSJung-uk Kim  * DESCRIPTION: Format the required data types for this method (Integer,
3599c7c683cSJung-uk Kim  *              String, Buffer, or Package) and return the required argument
3609c7c683cSJung-uk Kim  *              count.
3619c7c683cSJung-uk Kim  *
3629c7c683cSJung-uk Kim  ******************************************************************************/
3639c7c683cSJung-uk Kim 
3649c7c683cSJung-uk Kim static UINT32
3659c7c683cSJung-uk Kim AcpiUtGetArgumentTypes (
3669c7c683cSJung-uk Kim     char                    *Buffer,
3679c7c683cSJung-uk Kim     UINT16                  ArgumentTypes)
3689c7c683cSJung-uk Kim {
3699c7c683cSJung-uk Kim     UINT16                  ThisArgumentType;
3709c7c683cSJung-uk Kim     UINT16                  SubIndex;
3719c7c683cSJung-uk Kim     UINT16                  ArgCount;
3729c7c683cSJung-uk Kim     UINT32                  i;
3739c7c683cSJung-uk Kim 
3749c7c683cSJung-uk Kim 
3759c7c683cSJung-uk Kim     *Buffer = 0;
3769c7c683cSJung-uk Kim     SubIndex = 2;
3779c7c683cSJung-uk Kim 
3789c7c683cSJung-uk Kim     /* First field in the types list is the count of args to follow */
3799c7c683cSJung-uk Kim 
380895f26a9SJung-uk Kim     ArgCount = METHOD_GET_ARG_COUNT (ArgumentTypes);
3819c7c683cSJung-uk Kim     if (ArgCount > METHOD_PREDEF_ARGS_MAX)
3829c7c683cSJung-uk Kim     {
3839c7c683cSJung-uk Kim         printf ("**** Invalid argument count (%u) "
3849c7c683cSJung-uk Kim             "in predefined info structure\n", ArgCount);
3859c7c683cSJung-uk Kim         return (ArgCount);
3869c7c683cSJung-uk Kim     }
3879c7c683cSJung-uk Kim 
3889c7c683cSJung-uk Kim     /* Get each argument from the list, convert to ascii, store to buffer */
3899c7c683cSJung-uk Kim 
3909c7c683cSJung-uk Kim     for (i = 0; i < ArgCount; i++)
3919c7c683cSJung-uk Kim     {
392895f26a9SJung-uk Kim         ThisArgumentType = METHOD_GET_NEXT_TYPE (ArgumentTypes);
393895f26a9SJung-uk Kim 
3949c7c683cSJung-uk Kim         if (!ThisArgumentType || (ThisArgumentType > METHOD_MAX_ARG_TYPE))
3959c7c683cSJung-uk Kim         {
3969c7c683cSJung-uk Kim             printf ("**** Invalid argument type (%u) "
3979c7c683cSJung-uk Kim                 "in predefined info structure\n", ThisArgumentType);
3989c7c683cSJung-uk Kim             return (ArgCount);
3999c7c683cSJung-uk Kim         }
4009c7c683cSJung-uk Kim 
4019c7c683cSJung-uk Kim         strcat (Buffer, UtExternalTypeNames[ThisArgumentType] + SubIndex);
4029c7c683cSJung-uk Kim         SubIndex = 0;
4039c7c683cSJung-uk Kim     }
4049c7c683cSJung-uk Kim 
4059c7c683cSJung-uk Kim     return (ArgCount);
4069c7c683cSJung-uk Kim }
4079c7c683cSJung-uk Kim 
4089c7c683cSJung-uk Kim 
4099c7c683cSJung-uk Kim /*******************************************************************************
4109c7c683cSJung-uk Kim  *
4119c7c683cSJung-uk Kim  * FUNCTION:    AcpiUtGetResourceBitWidth
4129c7c683cSJung-uk Kim  *
4139c7c683cSJung-uk Kim  * PARAMETERS:  Buffer              - Where the formatted string is returned
4149c7c683cSJung-uk Kim  *              Types               - Bitfield of expected data types
4159c7c683cSJung-uk Kim  *
4169c7c683cSJung-uk Kim  * RETURN:      Count of return types. Formatted string in Buffer.
4179c7c683cSJung-uk Kim  *
4189c7c683cSJung-uk Kim  * DESCRIPTION: Format the resource bit widths into a printable string.
4199c7c683cSJung-uk Kim  *
4209c7c683cSJung-uk Kim  ******************************************************************************/
4219c7c683cSJung-uk Kim 
4229c7c683cSJung-uk Kim UINT32
4239c7c683cSJung-uk Kim AcpiUtGetResourceBitWidth (
4249c7c683cSJung-uk Kim     char                    *Buffer,
4259c7c683cSJung-uk Kim     UINT16                  Types)
4269c7c683cSJung-uk Kim {
4279c7c683cSJung-uk Kim     UINT32                  i;
4289c7c683cSJung-uk Kim     UINT16                  SubIndex;
4299c7c683cSJung-uk Kim     UINT32                  Found;
4309c7c683cSJung-uk Kim 
4319c7c683cSJung-uk Kim 
4329c7c683cSJung-uk Kim     *Buffer = 0;
4339c7c683cSJung-uk Kim     SubIndex = 1;
4349c7c683cSJung-uk Kim     Found = 0;
4359c7c683cSJung-uk Kim 
4369c7c683cSJung-uk Kim     for (i = 0; i < NUM_RESOURCE_WIDTHS; i++)
4379c7c683cSJung-uk Kim     {
4389c7c683cSJung-uk Kim         if (Types & 1)
4399c7c683cSJung-uk Kim         {
4409c7c683cSJung-uk Kim             strcat (Buffer, &(UtResourceTypeNames[i][SubIndex]));
4419c7c683cSJung-uk Kim             SubIndex = 0;
4429c7c683cSJung-uk Kim             Found++;
4439c7c683cSJung-uk Kim         }
4449c7c683cSJung-uk Kim 
4459c7c683cSJung-uk Kim         Types >>= 1;
4469c7c683cSJung-uk Kim     }
4479c7c683cSJung-uk Kim 
4489c7c683cSJung-uk Kim     return (Found);
4499c7c683cSJung-uk Kim }
4509c7c683cSJung-uk Kim #endif
451