Home | History | Annotate | Line # | Download | only in utilities
utclib.c revision 1.1.1.2.4.2
      1  1.1.1.2.4.2  rmind /******************************************************************************
      2  1.1.1.2.4.2  rmind  *
      3  1.1.1.2.4.2  rmind  * Module Name: cmclib - Local implementation of C library functions
      4  1.1.1.2.4.2  rmind  *
      5  1.1.1.2.4.2  rmind  *****************************************************************************/
      6  1.1.1.2.4.2  rmind 
      7  1.1.1.2.4.2  rmind /*
      8  1.1.1.2.4.2  rmind  * Copyright (C) 2000 - 2011, Intel Corp.
      9  1.1.1.2.4.2  rmind  * All rights reserved.
     10  1.1.1.2.4.2  rmind  *
     11  1.1.1.2.4.2  rmind  * Redistribution and use in source and binary forms, with or without
     12  1.1.1.2.4.2  rmind  * modification, are permitted provided that the following conditions
     13  1.1.1.2.4.2  rmind  * are met:
     14  1.1.1.2.4.2  rmind  * 1. Redistributions of source code must retain the above copyright
     15  1.1.1.2.4.2  rmind  *    notice, this list of conditions, and the following disclaimer,
     16  1.1.1.2.4.2  rmind  *    without modification.
     17  1.1.1.2.4.2  rmind  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
     18  1.1.1.2.4.2  rmind  *    substantially similar to the "NO WARRANTY" disclaimer below
     19  1.1.1.2.4.2  rmind  *    ("Disclaimer") and any redistribution must be conditioned upon
     20  1.1.1.2.4.2  rmind  *    including a substantially similar Disclaimer requirement for further
     21  1.1.1.2.4.2  rmind  *    binary redistribution.
     22  1.1.1.2.4.2  rmind  * 3. Neither the names of the above-listed copyright holders nor the names
     23  1.1.1.2.4.2  rmind  *    of any contributors may be used to endorse or promote products derived
     24  1.1.1.2.4.2  rmind  *    from this software without specific prior written permission.
     25  1.1.1.2.4.2  rmind  *
     26  1.1.1.2.4.2  rmind  * Alternatively, this software may be distributed under the terms of the
     27  1.1.1.2.4.2  rmind  * GNU General Public License ("GPL") version 2 as published by the Free
     28  1.1.1.2.4.2  rmind  * Software Foundation.
     29  1.1.1.2.4.2  rmind  *
     30  1.1.1.2.4.2  rmind  * NO WARRANTY
     31  1.1.1.2.4.2  rmind  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     32  1.1.1.2.4.2  rmind  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     33  1.1.1.2.4.2  rmind  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
     34  1.1.1.2.4.2  rmind  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     35  1.1.1.2.4.2  rmind  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     36  1.1.1.2.4.2  rmind  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     37  1.1.1.2.4.2  rmind  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     38  1.1.1.2.4.2  rmind  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     39  1.1.1.2.4.2  rmind  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
     40  1.1.1.2.4.2  rmind  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     41  1.1.1.2.4.2  rmind  * POSSIBILITY OF SUCH DAMAGES.
     42  1.1.1.2.4.2  rmind  */
     43  1.1.1.2.4.2  rmind 
     44  1.1.1.2.4.2  rmind 
     45  1.1.1.2.4.2  rmind #define __CMCLIB_C__
     46  1.1.1.2.4.2  rmind 
     47  1.1.1.2.4.2  rmind #include "acpi.h"
     48  1.1.1.2.4.2  rmind #include "accommon.h"
     49  1.1.1.2.4.2  rmind 
     50  1.1.1.2.4.2  rmind /*
     51  1.1.1.2.4.2  rmind  * These implementations of standard C Library routines can optionally be
     52  1.1.1.2.4.2  rmind  * used if a C library is not available.  In general, they are less efficient
     53  1.1.1.2.4.2  rmind  * than an inline or assembly implementation
     54  1.1.1.2.4.2  rmind  */
     55  1.1.1.2.4.2  rmind 
     56  1.1.1.2.4.2  rmind #define _COMPONENT          ACPI_UTILITIES
     57  1.1.1.2.4.2  rmind         ACPI_MODULE_NAME    ("cmclib")
     58  1.1.1.2.4.2  rmind 
     59  1.1.1.2.4.2  rmind 
     60  1.1.1.2.4.2  rmind #ifndef ACPI_USE_SYSTEM_CLIBRARY
     61  1.1.1.2.4.2  rmind 
     62  1.1.1.2.4.2  rmind #define NEGATIVE    1
     63  1.1.1.2.4.2  rmind #define POSITIVE    0
     64  1.1.1.2.4.2  rmind 
     65  1.1.1.2.4.2  rmind 
     66  1.1.1.2.4.2  rmind /*******************************************************************************
     67  1.1.1.2.4.2  rmind  *
     68  1.1.1.2.4.2  rmind  * FUNCTION:    AcpiUtMemcmp (memcmp)
     69  1.1.1.2.4.2  rmind  *
     70  1.1.1.2.4.2  rmind  * PARAMETERS:  Buffer1         - First Buffer
     71  1.1.1.2.4.2  rmind  *              Buffer2         - Second Buffer
     72  1.1.1.2.4.2  rmind  *              Count           - Maximum # of bytes to compare
     73  1.1.1.2.4.2  rmind  *
     74  1.1.1.2.4.2  rmind  * RETURN:      Index where Buffers mismatched, or 0 if Buffers matched
     75  1.1.1.2.4.2  rmind  *
     76  1.1.1.2.4.2  rmind  * DESCRIPTION: Compare two Buffers, with a maximum length
     77  1.1.1.2.4.2  rmind  *
     78  1.1.1.2.4.2  rmind  ******************************************************************************/
     79  1.1.1.2.4.2  rmind 
     80  1.1.1.2.4.2  rmind int
     81  1.1.1.2.4.2  rmind AcpiUtMemcmp (
     82  1.1.1.2.4.2  rmind     const char              *Buffer1,
     83  1.1.1.2.4.2  rmind     const char              *Buffer2,
     84  1.1.1.2.4.2  rmind     ACPI_SIZE               Count)
     85  1.1.1.2.4.2  rmind {
     86  1.1.1.2.4.2  rmind 
     87  1.1.1.2.4.2  rmind     for ( ; Count-- && (*Buffer1 == *Buffer2); Buffer1++, Buffer2++)
     88  1.1.1.2.4.2  rmind     {
     89  1.1.1.2.4.2  rmind     }
     90  1.1.1.2.4.2  rmind 
     91  1.1.1.2.4.2  rmind     return ((Count == ACPI_SIZE_MAX) ? 0 : ((unsigned char) *Buffer1 -
     92  1.1.1.2.4.2  rmind         (unsigned char) *Buffer2));
     93  1.1.1.2.4.2  rmind }
     94  1.1.1.2.4.2  rmind 
     95  1.1.1.2.4.2  rmind 
     96  1.1.1.2.4.2  rmind /*******************************************************************************
     97  1.1.1.2.4.2  rmind  *
     98  1.1.1.2.4.2  rmind  * FUNCTION:    AcpiUtMemcpy (memcpy)
     99  1.1.1.2.4.2  rmind  *
    100  1.1.1.2.4.2  rmind  * PARAMETERS:  Dest        - Target of the copy
    101  1.1.1.2.4.2  rmind  *              Src         - Source buffer to copy
    102  1.1.1.2.4.2  rmind  *              Count       - Number of bytes to copy
    103  1.1.1.2.4.2  rmind  *
    104  1.1.1.2.4.2  rmind  * RETURN:      Dest
    105  1.1.1.2.4.2  rmind  *
    106  1.1.1.2.4.2  rmind  * DESCRIPTION: Copy arbitrary bytes of memory
    107  1.1.1.2.4.2  rmind  *
    108  1.1.1.2.4.2  rmind  ******************************************************************************/
    109  1.1.1.2.4.2  rmind 
    110  1.1.1.2.4.2  rmind void *
    111  1.1.1.2.4.2  rmind AcpiUtMemcpy (
    112  1.1.1.2.4.2  rmind     void                    *Dest,
    113  1.1.1.2.4.2  rmind     const void              *Src,
    114  1.1.1.2.4.2  rmind     ACPI_SIZE               Count)
    115  1.1.1.2.4.2  rmind {
    116  1.1.1.2.4.2  rmind     char                    *New = (char *) Dest;
    117  1.1.1.2.4.2  rmind     char                    *Old = (char *) Src;
    118  1.1.1.2.4.2  rmind 
    119  1.1.1.2.4.2  rmind 
    120  1.1.1.2.4.2  rmind     while (Count)
    121  1.1.1.2.4.2  rmind     {
    122  1.1.1.2.4.2  rmind         *New = *Old;
    123  1.1.1.2.4.2  rmind         New++;
    124  1.1.1.2.4.2  rmind         Old++;
    125  1.1.1.2.4.2  rmind         Count--;
    126  1.1.1.2.4.2  rmind     }
    127  1.1.1.2.4.2  rmind 
    128  1.1.1.2.4.2  rmind     return (Dest);
    129  1.1.1.2.4.2  rmind }
    130  1.1.1.2.4.2  rmind 
    131  1.1.1.2.4.2  rmind 
    132  1.1.1.2.4.2  rmind /*******************************************************************************
    133  1.1.1.2.4.2  rmind  *
    134  1.1.1.2.4.2  rmind  * FUNCTION:    AcpiUtMemset (memset)
    135  1.1.1.2.4.2  rmind  *
    136  1.1.1.2.4.2  rmind  * PARAMETERS:  Dest        - Buffer to set
    137  1.1.1.2.4.2  rmind  *              Value       - Value to set each byte of memory
    138  1.1.1.2.4.2  rmind  *              Count       - Number of bytes to set
    139  1.1.1.2.4.2  rmind  *
    140  1.1.1.2.4.2  rmind  * RETURN:      Dest
    141  1.1.1.2.4.2  rmind  *
    142  1.1.1.2.4.2  rmind  * DESCRIPTION: Initialize a buffer to a known value.
    143  1.1.1.2.4.2  rmind  *
    144  1.1.1.2.4.2  rmind  ******************************************************************************/
    145  1.1.1.2.4.2  rmind 
    146  1.1.1.2.4.2  rmind void *
    147  1.1.1.2.4.2  rmind AcpiUtMemset (
    148  1.1.1.2.4.2  rmind     void                    *Dest,
    149  1.1.1.2.4.2  rmind     UINT8                   Value,
    150  1.1.1.2.4.2  rmind     ACPI_SIZE               Count)
    151  1.1.1.2.4.2  rmind {
    152  1.1.1.2.4.2  rmind     char                    *New = (char *) Dest;
    153  1.1.1.2.4.2  rmind 
    154  1.1.1.2.4.2  rmind 
    155  1.1.1.2.4.2  rmind     while (Count)
    156  1.1.1.2.4.2  rmind     {
    157  1.1.1.2.4.2  rmind         *New = (char) Value;
    158  1.1.1.2.4.2  rmind         New++;
    159  1.1.1.2.4.2  rmind         Count--;
    160  1.1.1.2.4.2  rmind     }
    161  1.1.1.2.4.2  rmind 
    162  1.1.1.2.4.2  rmind     return (Dest);
    163  1.1.1.2.4.2  rmind }
    164  1.1.1.2.4.2  rmind 
    165  1.1.1.2.4.2  rmind 
    166  1.1.1.2.4.2  rmind /*******************************************************************************
    167  1.1.1.2.4.2  rmind  *
    168  1.1.1.2.4.2  rmind  * FUNCTION:    AcpiUtStrlen (strlen)
    169  1.1.1.2.4.2  rmind  *
    170  1.1.1.2.4.2  rmind  * PARAMETERS:  String              - Null terminated string
    171  1.1.1.2.4.2  rmind  *
    172  1.1.1.2.4.2  rmind  * RETURN:      Length
    173  1.1.1.2.4.2  rmind  *
    174  1.1.1.2.4.2  rmind  * DESCRIPTION: Returns the length of the input string
    175  1.1.1.2.4.2  rmind  *
    176  1.1.1.2.4.2  rmind  ******************************************************************************/
    177  1.1.1.2.4.2  rmind 
    178  1.1.1.2.4.2  rmind 
    179  1.1.1.2.4.2  rmind ACPI_SIZE
    180  1.1.1.2.4.2  rmind AcpiUtStrlen (
    181  1.1.1.2.4.2  rmind     const char              *String)
    182  1.1.1.2.4.2  rmind {
    183  1.1.1.2.4.2  rmind     UINT32                  Length = 0;
    184  1.1.1.2.4.2  rmind 
    185  1.1.1.2.4.2  rmind 
    186  1.1.1.2.4.2  rmind     /* Count the string until a null is encountered */
    187  1.1.1.2.4.2  rmind 
    188  1.1.1.2.4.2  rmind     while (*String)
    189  1.1.1.2.4.2  rmind     {
    190  1.1.1.2.4.2  rmind         Length++;
    191  1.1.1.2.4.2  rmind         String++;
    192  1.1.1.2.4.2  rmind     }
    193  1.1.1.2.4.2  rmind 
    194  1.1.1.2.4.2  rmind     return (Length);
    195  1.1.1.2.4.2  rmind }
    196  1.1.1.2.4.2  rmind 
    197  1.1.1.2.4.2  rmind 
    198  1.1.1.2.4.2  rmind /*******************************************************************************
    199  1.1.1.2.4.2  rmind  *
    200  1.1.1.2.4.2  rmind  * FUNCTION:    AcpiUtStrcpy (strcpy)
    201  1.1.1.2.4.2  rmind  *
    202  1.1.1.2.4.2  rmind  * PARAMETERS:  DstString       - Target of the copy
    203  1.1.1.2.4.2  rmind  *              SrcString       - The source string to copy
    204  1.1.1.2.4.2  rmind  *
    205  1.1.1.2.4.2  rmind  * RETURN:      DstString
    206  1.1.1.2.4.2  rmind  *
    207  1.1.1.2.4.2  rmind  * DESCRIPTION: Copy a null terminated string
    208  1.1.1.2.4.2  rmind  *
    209  1.1.1.2.4.2  rmind  ******************************************************************************/
    210  1.1.1.2.4.2  rmind 
    211  1.1.1.2.4.2  rmind char *
    212  1.1.1.2.4.2  rmind AcpiUtStrcpy (
    213  1.1.1.2.4.2  rmind     char                    *DstString,
    214  1.1.1.2.4.2  rmind     const char              *SrcString)
    215  1.1.1.2.4.2  rmind {
    216  1.1.1.2.4.2  rmind     char                    *String = DstString;
    217  1.1.1.2.4.2  rmind 
    218  1.1.1.2.4.2  rmind 
    219  1.1.1.2.4.2  rmind     /* Move bytes brute force */
    220  1.1.1.2.4.2  rmind 
    221  1.1.1.2.4.2  rmind     while (*SrcString)
    222  1.1.1.2.4.2  rmind     {
    223  1.1.1.2.4.2  rmind         *String = *SrcString;
    224  1.1.1.2.4.2  rmind 
    225  1.1.1.2.4.2  rmind         String++;
    226  1.1.1.2.4.2  rmind         SrcString++;
    227  1.1.1.2.4.2  rmind     }
    228  1.1.1.2.4.2  rmind 
    229  1.1.1.2.4.2  rmind     /* Null terminate */
    230  1.1.1.2.4.2  rmind 
    231  1.1.1.2.4.2  rmind     *String = 0;
    232  1.1.1.2.4.2  rmind     return (DstString);
    233  1.1.1.2.4.2  rmind }
    234  1.1.1.2.4.2  rmind 
    235  1.1.1.2.4.2  rmind 
    236  1.1.1.2.4.2  rmind /*******************************************************************************
    237  1.1.1.2.4.2  rmind  *
    238  1.1.1.2.4.2  rmind  * FUNCTION:    AcpiUtStrncpy (strncpy)
    239  1.1.1.2.4.2  rmind  *
    240  1.1.1.2.4.2  rmind  * PARAMETERS:  DstString       - Target of the copy
    241  1.1.1.2.4.2  rmind  *              SrcString       - The source string to copy
    242  1.1.1.2.4.2  rmind  *              Count           - Maximum # of bytes to copy
    243  1.1.1.2.4.2  rmind  *
    244  1.1.1.2.4.2  rmind  * RETURN:      DstString
    245  1.1.1.2.4.2  rmind  *
    246  1.1.1.2.4.2  rmind  * DESCRIPTION: Copy a null terminated string, with a maximum length
    247  1.1.1.2.4.2  rmind  *
    248  1.1.1.2.4.2  rmind  ******************************************************************************/
    249  1.1.1.2.4.2  rmind 
    250  1.1.1.2.4.2  rmind char *
    251  1.1.1.2.4.2  rmind AcpiUtStrncpy (
    252  1.1.1.2.4.2  rmind     char                    *DstString,
    253  1.1.1.2.4.2  rmind     const char              *SrcString,
    254  1.1.1.2.4.2  rmind     ACPI_SIZE               Count)
    255  1.1.1.2.4.2  rmind {
    256  1.1.1.2.4.2  rmind     char                    *String = DstString;
    257  1.1.1.2.4.2  rmind 
    258  1.1.1.2.4.2  rmind 
    259  1.1.1.2.4.2  rmind     /* Copy the string */
    260  1.1.1.2.4.2  rmind 
    261  1.1.1.2.4.2  rmind     for (String = DstString;
    262  1.1.1.2.4.2  rmind         Count && (Count--, (*String++ = *SrcString++)); )
    263  1.1.1.2.4.2  rmind     {;}
    264  1.1.1.2.4.2  rmind 
    265  1.1.1.2.4.2  rmind     /* Pad with nulls if necessary */
    266  1.1.1.2.4.2  rmind 
    267  1.1.1.2.4.2  rmind     while (Count--)
    268  1.1.1.2.4.2  rmind     {
    269  1.1.1.2.4.2  rmind         *String = 0;
    270  1.1.1.2.4.2  rmind         String++;
    271  1.1.1.2.4.2  rmind     }
    272  1.1.1.2.4.2  rmind 
    273  1.1.1.2.4.2  rmind     /* Return original pointer */
    274  1.1.1.2.4.2  rmind 
    275  1.1.1.2.4.2  rmind     return (DstString);
    276  1.1.1.2.4.2  rmind }
    277  1.1.1.2.4.2  rmind 
    278  1.1.1.2.4.2  rmind 
    279  1.1.1.2.4.2  rmind /*******************************************************************************
    280  1.1.1.2.4.2  rmind  *
    281  1.1.1.2.4.2  rmind  * FUNCTION:    AcpiUtStrcmp (strcmp)
    282  1.1.1.2.4.2  rmind  *
    283  1.1.1.2.4.2  rmind  * PARAMETERS:  String1         - First string
    284  1.1.1.2.4.2  rmind  *              String2         - Second string
    285  1.1.1.2.4.2  rmind  *
    286  1.1.1.2.4.2  rmind  * RETURN:      Index where strings mismatched, or 0 if strings matched
    287  1.1.1.2.4.2  rmind  *
    288  1.1.1.2.4.2  rmind  * DESCRIPTION: Compare two null terminated strings
    289  1.1.1.2.4.2  rmind  *
    290  1.1.1.2.4.2  rmind  ******************************************************************************/
    291  1.1.1.2.4.2  rmind 
    292  1.1.1.2.4.2  rmind int
    293  1.1.1.2.4.2  rmind AcpiUtStrcmp (
    294  1.1.1.2.4.2  rmind     const char              *String1,
    295  1.1.1.2.4.2  rmind     const char              *String2)
    296  1.1.1.2.4.2  rmind {
    297  1.1.1.2.4.2  rmind 
    298  1.1.1.2.4.2  rmind 
    299  1.1.1.2.4.2  rmind     for ( ; (*String1 == *String2); String2++)
    300  1.1.1.2.4.2  rmind     {
    301  1.1.1.2.4.2  rmind         if (!*String1++)
    302  1.1.1.2.4.2  rmind         {
    303  1.1.1.2.4.2  rmind             return (0);
    304  1.1.1.2.4.2  rmind         }
    305  1.1.1.2.4.2  rmind     }
    306  1.1.1.2.4.2  rmind 
    307  1.1.1.2.4.2  rmind     return ((unsigned char) *String1 - (unsigned char) *String2);
    308  1.1.1.2.4.2  rmind }
    309  1.1.1.2.4.2  rmind 
    310  1.1.1.2.4.2  rmind 
    311  1.1.1.2.4.2  rmind #ifdef ACPI_FUTURE_IMPLEMENTATION
    312  1.1.1.2.4.2  rmind /* Not used at this time */
    313  1.1.1.2.4.2  rmind /*******************************************************************************
    314  1.1.1.2.4.2  rmind  *
    315  1.1.1.2.4.2  rmind  * FUNCTION:    AcpiUtStrchr (strchr)
    316  1.1.1.2.4.2  rmind  *
    317  1.1.1.2.4.2  rmind  * PARAMETERS:  String          - Search string
    318  1.1.1.2.4.2  rmind  *              ch              - character to search for
    319  1.1.1.2.4.2  rmind  *
    320  1.1.1.2.4.2  rmind  * RETURN:      Ptr to char or NULL if not found
    321  1.1.1.2.4.2  rmind  *
    322  1.1.1.2.4.2  rmind  * DESCRIPTION: Search a string for a character
    323  1.1.1.2.4.2  rmind  *
    324  1.1.1.2.4.2  rmind  ******************************************************************************/
    325  1.1.1.2.4.2  rmind 
    326  1.1.1.2.4.2  rmind char *
    327  1.1.1.2.4.2  rmind AcpiUtStrchr (
    328  1.1.1.2.4.2  rmind     const char              *String,
    329  1.1.1.2.4.2  rmind     int                     ch)
    330  1.1.1.2.4.2  rmind {
    331  1.1.1.2.4.2  rmind 
    332  1.1.1.2.4.2  rmind 
    333  1.1.1.2.4.2  rmind     for ( ; (*String); String++)
    334  1.1.1.2.4.2  rmind     {
    335  1.1.1.2.4.2  rmind         if ((*String) == (char) ch)
    336  1.1.1.2.4.2  rmind         {
    337  1.1.1.2.4.2  rmind             return ((char *) String);
    338  1.1.1.2.4.2  rmind         }
    339  1.1.1.2.4.2  rmind     }
    340  1.1.1.2.4.2  rmind 
    341  1.1.1.2.4.2  rmind     return (NULL);
    342  1.1.1.2.4.2  rmind }
    343  1.1.1.2.4.2  rmind #endif
    344  1.1.1.2.4.2  rmind 
    345  1.1.1.2.4.2  rmind /*******************************************************************************
    346  1.1.1.2.4.2  rmind  *
    347  1.1.1.2.4.2  rmind  * FUNCTION:    AcpiUtStrncmp (strncmp)
    348  1.1.1.2.4.2  rmind  *
    349  1.1.1.2.4.2  rmind  * PARAMETERS:  String1         - First string
    350  1.1.1.2.4.2  rmind  *              String2         - Second string
    351  1.1.1.2.4.2  rmind  *              Count           - Maximum # of bytes to compare
    352  1.1.1.2.4.2  rmind  *
    353  1.1.1.2.4.2  rmind  * RETURN:      Index where strings mismatched, or 0 if strings matched
    354  1.1.1.2.4.2  rmind  *
    355  1.1.1.2.4.2  rmind  * DESCRIPTION: Compare two null terminated strings, with a maximum length
    356  1.1.1.2.4.2  rmind  *
    357  1.1.1.2.4.2  rmind  ******************************************************************************/
    358  1.1.1.2.4.2  rmind 
    359  1.1.1.2.4.2  rmind int
    360  1.1.1.2.4.2  rmind AcpiUtStrncmp (
    361  1.1.1.2.4.2  rmind     const char              *String1,
    362  1.1.1.2.4.2  rmind     const char              *String2,
    363  1.1.1.2.4.2  rmind     ACPI_SIZE               Count)
    364  1.1.1.2.4.2  rmind {
    365  1.1.1.2.4.2  rmind 
    366  1.1.1.2.4.2  rmind 
    367  1.1.1.2.4.2  rmind     for ( ; Count-- && (*String1 == *String2); String2++)
    368  1.1.1.2.4.2  rmind     {
    369  1.1.1.2.4.2  rmind         if (!*String1++)
    370  1.1.1.2.4.2  rmind         {
    371  1.1.1.2.4.2  rmind             return (0);
    372  1.1.1.2.4.2  rmind         }
    373  1.1.1.2.4.2  rmind     }
    374  1.1.1.2.4.2  rmind 
    375  1.1.1.2.4.2  rmind     return ((Count == ACPI_SIZE_MAX) ? 0 : ((unsigned char) *String1 -
    376  1.1.1.2.4.2  rmind         (unsigned char) *String2));
    377  1.1.1.2.4.2  rmind }
    378  1.1.1.2.4.2  rmind 
    379  1.1.1.2.4.2  rmind 
    380  1.1.1.2.4.2  rmind /*******************************************************************************
    381  1.1.1.2.4.2  rmind  *
    382  1.1.1.2.4.2  rmind  * FUNCTION:    AcpiUtStrcat (Strcat)
    383  1.1.1.2.4.2  rmind  *
    384  1.1.1.2.4.2  rmind  * PARAMETERS:  DstString       - Target of the copy
    385  1.1.1.2.4.2  rmind  *              SrcString       - The source string to copy
    386  1.1.1.2.4.2  rmind  *
    387  1.1.1.2.4.2  rmind  * RETURN:      DstString
    388  1.1.1.2.4.2  rmind  *
    389  1.1.1.2.4.2  rmind  * DESCRIPTION: Append a null terminated string to a null terminated string
    390  1.1.1.2.4.2  rmind  *
    391  1.1.1.2.4.2  rmind  ******************************************************************************/
    392  1.1.1.2.4.2  rmind 
    393  1.1.1.2.4.2  rmind char *
    394  1.1.1.2.4.2  rmind AcpiUtStrcat (
    395  1.1.1.2.4.2  rmind     char                    *DstString,
    396  1.1.1.2.4.2  rmind     const char              *SrcString)
    397  1.1.1.2.4.2  rmind {
    398  1.1.1.2.4.2  rmind     char                    *String;
    399  1.1.1.2.4.2  rmind 
    400  1.1.1.2.4.2  rmind 
    401  1.1.1.2.4.2  rmind     /* Find end of the destination string */
    402  1.1.1.2.4.2  rmind 
    403  1.1.1.2.4.2  rmind     for (String = DstString; *String++; )
    404  1.1.1.2.4.2  rmind     { ; }
    405  1.1.1.2.4.2  rmind 
    406  1.1.1.2.4.2  rmind     /* Concatenate the string */
    407  1.1.1.2.4.2  rmind 
    408  1.1.1.2.4.2  rmind     for (--String; (*String++ = *SrcString++); )
    409  1.1.1.2.4.2  rmind     { ; }
    410  1.1.1.2.4.2  rmind 
    411  1.1.1.2.4.2  rmind     return (DstString);
    412  1.1.1.2.4.2  rmind }
    413  1.1.1.2.4.2  rmind 
    414  1.1.1.2.4.2  rmind 
    415  1.1.1.2.4.2  rmind /*******************************************************************************
    416  1.1.1.2.4.2  rmind  *
    417  1.1.1.2.4.2  rmind  * FUNCTION:    AcpiUtStrncat (strncat)
    418  1.1.1.2.4.2  rmind  *
    419  1.1.1.2.4.2  rmind  * PARAMETERS:  DstString       - Target of the copy
    420  1.1.1.2.4.2  rmind  *              SrcString       - The source string to copy
    421  1.1.1.2.4.2  rmind  *              Count           - Maximum # of bytes to copy
    422  1.1.1.2.4.2  rmind  *
    423  1.1.1.2.4.2  rmind  * RETURN:      DstString
    424  1.1.1.2.4.2  rmind  *
    425  1.1.1.2.4.2  rmind  * DESCRIPTION: Append a null terminated string to a null terminated string,
    426  1.1.1.2.4.2  rmind  *              with a maximum count.
    427  1.1.1.2.4.2  rmind  *
    428  1.1.1.2.4.2  rmind  ******************************************************************************/
    429  1.1.1.2.4.2  rmind 
    430  1.1.1.2.4.2  rmind char *
    431  1.1.1.2.4.2  rmind AcpiUtStrncat (
    432  1.1.1.2.4.2  rmind     char                    *DstString,
    433  1.1.1.2.4.2  rmind     const char              *SrcString,
    434  1.1.1.2.4.2  rmind     ACPI_SIZE               Count)
    435  1.1.1.2.4.2  rmind {
    436  1.1.1.2.4.2  rmind     char                    *String;
    437  1.1.1.2.4.2  rmind 
    438  1.1.1.2.4.2  rmind 
    439  1.1.1.2.4.2  rmind     if (Count)
    440  1.1.1.2.4.2  rmind     {
    441  1.1.1.2.4.2  rmind         /* Find end of the destination string */
    442  1.1.1.2.4.2  rmind 
    443  1.1.1.2.4.2  rmind         for (String = DstString; *String++; )
    444  1.1.1.2.4.2  rmind         { ; }
    445  1.1.1.2.4.2  rmind 
    446  1.1.1.2.4.2  rmind         /* Concatenate the string */
    447  1.1.1.2.4.2  rmind 
    448  1.1.1.2.4.2  rmind         for (--String; (*String++ = *SrcString++) && --Count; )
    449  1.1.1.2.4.2  rmind         { ; }
    450  1.1.1.2.4.2  rmind 
    451  1.1.1.2.4.2  rmind         /* Null terminate if necessary */
    452  1.1.1.2.4.2  rmind 
    453  1.1.1.2.4.2  rmind         if (!Count)
    454  1.1.1.2.4.2  rmind         {
    455  1.1.1.2.4.2  rmind             *String = 0;
    456  1.1.1.2.4.2  rmind         }
    457  1.1.1.2.4.2  rmind     }
    458  1.1.1.2.4.2  rmind 
    459  1.1.1.2.4.2  rmind     return (DstString);
    460  1.1.1.2.4.2  rmind }
    461  1.1.1.2.4.2  rmind 
    462  1.1.1.2.4.2  rmind 
    463  1.1.1.2.4.2  rmind /*******************************************************************************
    464  1.1.1.2.4.2  rmind  *
    465  1.1.1.2.4.2  rmind  * FUNCTION:    AcpiUtStrstr (strstr)
    466  1.1.1.2.4.2  rmind  *
    467  1.1.1.2.4.2  rmind  * PARAMETERS:  String1         - Target string
    468  1.1.1.2.4.2  rmind  *              String2         - Substring to search for
    469  1.1.1.2.4.2  rmind  *
    470  1.1.1.2.4.2  rmind  * RETURN:      Where substring match starts, Null if no match found
    471  1.1.1.2.4.2  rmind  *
    472  1.1.1.2.4.2  rmind  * DESCRIPTION: Checks if String2 occurs in String1. This is not really a
    473  1.1.1.2.4.2  rmind  *              full implementation of strstr, only sufficient for command
    474  1.1.1.2.4.2  rmind  *              matching
    475  1.1.1.2.4.2  rmind  *
    476  1.1.1.2.4.2  rmind  ******************************************************************************/
    477  1.1.1.2.4.2  rmind 
    478  1.1.1.2.4.2  rmind char *
    479  1.1.1.2.4.2  rmind AcpiUtStrstr (
    480  1.1.1.2.4.2  rmind     char                    *String1,
    481  1.1.1.2.4.2  rmind     char                    *String2)
    482  1.1.1.2.4.2  rmind {
    483  1.1.1.2.4.2  rmind     char                    *String;
    484  1.1.1.2.4.2  rmind 
    485  1.1.1.2.4.2  rmind 
    486  1.1.1.2.4.2  rmind     if (AcpiUtStrlen (String2) > AcpiUtStrlen (String1))
    487  1.1.1.2.4.2  rmind     {
    488  1.1.1.2.4.2  rmind         return (NULL);
    489  1.1.1.2.4.2  rmind     }
    490  1.1.1.2.4.2  rmind 
    491  1.1.1.2.4.2  rmind     /* Walk entire string, comparing the letters */
    492  1.1.1.2.4.2  rmind 
    493  1.1.1.2.4.2  rmind     for (String = String1; *String2; )
    494  1.1.1.2.4.2  rmind     {
    495  1.1.1.2.4.2  rmind         if (*String2 != *String)
    496  1.1.1.2.4.2  rmind         {
    497  1.1.1.2.4.2  rmind             return (NULL);
    498  1.1.1.2.4.2  rmind         }
    499  1.1.1.2.4.2  rmind 
    500  1.1.1.2.4.2  rmind         String2++;
    501  1.1.1.2.4.2  rmind         String++;
    502  1.1.1.2.4.2  rmind     }
    503  1.1.1.2.4.2  rmind 
    504  1.1.1.2.4.2  rmind     return (String1);
    505  1.1.1.2.4.2  rmind }
    506  1.1.1.2.4.2  rmind 
    507  1.1.1.2.4.2  rmind 
    508  1.1.1.2.4.2  rmind /*******************************************************************************
    509  1.1.1.2.4.2  rmind  *
    510  1.1.1.2.4.2  rmind  * FUNCTION:    AcpiUtStrtoul (strtoul)
    511  1.1.1.2.4.2  rmind  *
    512  1.1.1.2.4.2  rmind  * PARAMETERS:  String          - Null terminated string
    513  1.1.1.2.4.2  rmind  *              Terminater      - Where a pointer to the terminating byte is
    514  1.1.1.2.4.2  rmind  *                                returned
    515  1.1.1.2.4.2  rmind  *              Base            - Radix of the string
    516  1.1.1.2.4.2  rmind  *
    517  1.1.1.2.4.2  rmind  * RETURN:      Converted value
    518  1.1.1.2.4.2  rmind  *
    519  1.1.1.2.4.2  rmind  * DESCRIPTION: Convert a string into a 32-bit unsigned value.
    520  1.1.1.2.4.2  rmind  *              Note: use AcpiUtStrtoul64 for 64-bit integers.
    521  1.1.1.2.4.2  rmind  *
    522  1.1.1.2.4.2  rmind  ******************************************************************************/
    523  1.1.1.2.4.2  rmind 
    524  1.1.1.2.4.2  rmind UINT32
    525  1.1.1.2.4.2  rmind AcpiUtStrtoul (
    526  1.1.1.2.4.2  rmind     const char              *String,
    527  1.1.1.2.4.2  rmind     char                    **Terminator,
    528  1.1.1.2.4.2  rmind     UINT32                  Base)
    529  1.1.1.2.4.2  rmind {
    530  1.1.1.2.4.2  rmind     UINT32                  converted = 0;
    531  1.1.1.2.4.2  rmind     UINT32                  index;
    532  1.1.1.2.4.2  rmind     UINT32                  sign;
    533  1.1.1.2.4.2  rmind     const char              *StringStart;
    534  1.1.1.2.4.2  rmind     UINT32                  ReturnValue = 0;
    535  1.1.1.2.4.2  rmind     ACPI_STATUS             Status = AE_OK;
    536  1.1.1.2.4.2  rmind 
    537  1.1.1.2.4.2  rmind 
    538  1.1.1.2.4.2  rmind     /*
    539  1.1.1.2.4.2  rmind      * Save the value of the pointer to the buffer's first
    540  1.1.1.2.4.2  rmind      * character, save the current errno value, and then
    541  1.1.1.2.4.2  rmind      * skip over any white space in the buffer:
    542  1.1.1.2.4.2  rmind      */
    543  1.1.1.2.4.2  rmind     StringStart = String;
    544  1.1.1.2.4.2  rmind     while (ACPI_IS_SPACE (*String) || *String == '\t')
    545  1.1.1.2.4.2  rmind     {
    546  1.1.1.2.4.2  rmind         ++String;
    547  1.1.1.2.4.2  rmind     }
    548  1.1.1.2.4.2  rmind 
    549  1.1.1.2.4.2  rmind     /*
    550  1.1.1.2.4.2  rmind      * The buffer may contain an optional plus or minus sign.
    551  1.1.1.2.4.2  rmind      * If it does, then skip over it but remember what is was:
    552  1.1.1.2.4.2  rmind      */
    553  1.1.1.2.4.2  rmind     if (*String == '-')
    554  1.1.1.2.4.2  rmind     {
    555  1.1.1.2.4.2  rmind         sign = NEGATIVE;
    556  1.1.1.2.4.2  rmind         ++String;
    557  1.1.1.2.4.2  rmind     }
    558  1.1.1.2.4.2  rmind     else if (*String == '+')
    559  1.1.1.2.4.2  rmind     {
    560  1.1.1.2.4.2  rmind         ++String;
    561  1.1.1.2.4.2  rmind         sign = POSITIVE;
    562  1.1.1.2.4.2  rmind     }
    563  1.1.1.2.4.2  rmind     else
    564  1.1.1.2.4.2  rmind     {
    565  1.1.1.2.4.2  rmind         sign = POSITIVE;
    566  1.1.1.2.4.2  rmind     }
    567  1.1.1.2.4.2  rmind 
    568  1.1.1.2.4.2  rmind     /*
    569  1.1.1.2.4.2  rmind      * If the input parameter Base is zero, then we need to
    570  1.1.1.2.4.2  rmind      * determine if it is octal, decimal, or hexadecimal:
    571  1.1.1.2.4.2  rmind      */
    572  1.1.1.2.4.2  rmind     if (Base == 0)
    573  1.1.1.2.4.2  rmind     {
    574  1.1.1.2.4.2  rmind         if (*String == '0')
    575  1.1.1.2.4.2  rmind         {
    576  1.1.1.2.4.2  rmind             if (AcpiUtToLower (*(++String)) == 'x')
    577  1.1.1.2.4.2  rmind             {
    578  1.1.1.2.4.2  rmind                 Base = 16;
    579  1.1.1.2.4.2  rmind                 ++String;
    580  1.1.1.2.4.2  rmind             }
    581  1.1.1.2.4.2  rmind             else
    582  1.1.1.2.4.2  rmind             {
    583  1.1.1.2.4.2  rmind                 Base = 8;
    584  1.1.1.2.4.2  rmind             }
    585  1.1.1.2.4.2  rmind         }
    586  1.1.1.2.4.2  rmind         else
    587  1.1.1.2.4.2  rmind         {
    588  1.1.1.2.4.2  rmind             Base = 10;
    589  1.1.1.2.4.2  rmind         }
    590  1.1.1.2.4.2  rmind     }
    591  1.1.1.2.4.2  rmind     else if (Base < 2 || Base > 36)
    592  1.1.1.2.4.2  rmind     {
    593  1.1.1.2.4.2  rmind         /*
    594  1.1.1.2.4.2  rmind          * The specified Base parameter is not in the domain of
    595  1.1.1.2.4.2  rmind          * this function:
    596  1.1.1.2.4.2  rmind          */
    597  1.1.1.2.4.2  rmind         goto done;
    598  1.1.1.2.4.2  rmind     }
    599  1.1.1.2.4.2  rmind 
    600  1.1.1.2.4.2  rmind     /*
    601  1.1.1.2.4.2  rmind      * For octal and hexadecimal bases, skip over the leading
    602  1.1.1.2.4.2  rmind      * 0 or 0x, if they are present.
    603  1.1.1.2.4.2  rmind      */
    604  1.1.1.2.4.2  rmind     if (Base == 8 && *String == '0')
    605  1.1.1.2.4.2  rmind     {
    606  1.1.1.2.4.2  rmind         String++;
    607  1.1.1.2.4.2  rmind     }
    608  1.1.1.2.4.2  rmind 
    609  1.1.1.2.4.2  rmind     if (Base == 16 &&
    610  1.1.1.2.4.2  rmind         *String == '0' &&
    611  1.1.1.2.4.2  rmind         AcpiUtToLower (*(++String)) == 'x')
    612  1.1.1.2.4.2  rmind     {
    613  1.1.1.2.4.2  rmind         String++;
    614  1.1.1.2.4.2  rmind     }
    615  1.1.1.2.4.2  rmind 
    616  1.1.1.2.4.2  rmind     /*
    617  1.1.1.2.4.2  rmind      * Main loop: convert the string to an unsigned long:
    618  1.1.1.2.4.2  rmind      */
    619  1.1.1.2.4.2  rmind     while (*String)
    620  1.1.1.2.4.2  rmind     {
    621  1.1.1.2.4.2  rmind         if (ACPI_IS_DIGIT (*String))
    622  1.1.1.2.4.2  rmind         {
    623  1.1.1.2.4.2  rmind             index = (UINT32) ((UINT8) *String - '0');
    624  1.1.1.2.4.2  rmind         }
    625  1.1.1.2.4.2  rmind         else
    626  1.1.1.2.4.2  rmind         {
    627  1.1.1.2.4.2  rmind             index = (UINT32) AcpiUtToUpper (*String);
    628  1.1.1.2.4.2  rmind             if (ACPI_IS_UPPER (index))
    629  1.1.1.2.4.2  rmind             {
    630  1.1.1.2.4.2  rmind                 index = index - 'A' + 10;
    631  1.1.1.2.4.2  rmind             }
    632  1.1.1.2.4.2  rmind             else
    633  1.1.1.2.4.2  rmind             {
    634  1.1.1.2.4.2  rmind                 goto done;
    635  1.1.1.2.4.2  rmind             }
    636  1.1.1.2.4.2  rmind         }
    637  1.1.1.2.4.2  rmind 
    638  1.1.1.2.4.2  rmind         if (index >= Base)
    639  1.1.1.2.4.2  rmind         {
    640  1.1.1.2.4.2  rmind             goto done;
    641  1.1.1.2.4.2  rmind         }
    642  1.1.1.2.4.2  rmind 
    643  1.1.1.2.4.2  rmind         /*
    644  1.1.1.2.4.2  rmind          * Check to see if value is out of range:
    645  1.1.1.2.4.2  rmind          */
    646  1.1.1.2.4.2  rmind 
    647  1.1.1.2.4.2  rmind         if (ReturnValue > ((ACPI_UINT32_MAX - (UINT32) index) /
    648  1.1.1.2.4.2  rmind                             (UINT32) Base))
    649  1.1.1.2.4.2  rmind         {
    650  1.1.1.2.4.2  rmind             Status = AE_ERROR;
    651  1.1.1.2.4.2  rmind             ReturnValue = 0;           /* reset */
    652  1.1.1.2.4.2  rmind         }
    653  1.1.1.2.4.2  rmind         else
    654  1.1.1.2.4.2  rmind         {
    655  1.1.1.2.4.2  rmind             ReturnValue *= Base;
    656  1.1.1.2.4.2  rmind             ReturnValue += index;
    657  1.1.1.2.4.2  rmind             converted = 1;
    658  1.1.1.2.4.2  rmind         }
    659  1.1.1.2.4.2  rmind 
    660  1.1.1.2.4.2  rmind         ++String;
    661  1.1.1.2.4.2  rmind     }
    662  1.1.1.2.4.2  rmind 
    663  1.1.1.2.4.2  rmind done:
    664  1.1.1.2.4.2  rmind     /*
    665  1.1.1.2.4.2  rmind      * If appropriate, update the caller's pointer to the next
    666  1.1.1.2.4.2  rmind      * unconverted character in the buffer.
    667  1.1.1.2.4.2  rmind      */
    668  1.1.1.2.4.2  rmind     if (Terminator)
    669  1.1.1.2.4.2  rmind     {
    670  1.1.1.2.4.2  rmind         if (converted == 0 && ReturnValue == 0 && String != NULL)
    671  1.1.1.2.4.2  rmind         {
    672  1.1.1.2.4.2  rmind             *Terminator = (char *) StringStart;
    673  1.1.1.2.4.2  rmind         }
    674  1.1.1.2.4.2  rmind         else
    675  1.1.1.2.4.2  rmind         {
    676  1.1.1.2.4.2  rmind             *Terminator = (char *) String;
    677  1.1.1.2.4.2  rmind         }
    678  1.1.1.2.4.2  rmind     }
    679  1.1.1.2.4.2  rmind 
    680  1.1.1.2.4.2  rmind     if (Status == AE_ERROR)
    681  1.1.1.2.4.2  rmind     {
    682  1.1.1.2.4.2  rmind         ReturnValue = ACPI_UINT32_MAX;
    683  1.1.1.2.4.2  rmind     }
    684  1.1.1.2.4.2  rmind 
    685  1.1.1.2.4.2  rmind     /*
    686  1.1.1.2.4.2  rmind      * If a minus sign was present, then "the conversion is negated":
    687  1.1.1.2.4.2  rmind      */
    688  1.1.1.2.4.2  rmind     if (sign == NEGATIVE)
    689  1.1.1.2.4.2  rmind     {
    690  1.1.1.2.4.2  rmind         ReturnValue = (ACPI_UINT32_MAX - ReturnValue) + 1;
    691  1.1.1.2.4.2  rmind     }
    692  1.1.1.2.4.2  rmind 
    693  1.1.1.2.4.2  rmind     return (ReturnValue);
    694  1.1.1.2.4.2  rmind }
    695  1.1.1.2.4.2  rmind 
    696  1.1.1.2.4.2  rmind 
    697  1.1.1.2.4.2  rmind /*******************************************************************************
    698  1.1.1.2.4.2  rmind  *
    699  1.1.1.2.4.2  rmind  * FUNCTION:    AcpiUtToUpper (TOUPPER)
    700  1.1.1.2.4.2  rmind  *
    701  1.1.1.2.4.2  rmind  * PARAMETERS:  c           - Character to convert
    702  1.1.1.2.4.2  rmind  *
    703  1.1.1.2.4.2  rmind  * RETURN:      Converted character as an int
    704  1.1.1.2.4.2  rmind  *
    705  1.1.1.2.4.2  rmind  * DESCRIPTION: Convert character to uppercase
    706  1.1.1.2.4.2  rmind  *
    707  1.1.1.2.4.2  rmind  ******************************************************************************/
    708  1.1.1.2.4.2  rmind 
    709  1.1.1.2.4.2  rmind int
    710  1.1.1.2.4.2  rmind AcpiUtToUpper (
    711  1.1.1.2.4.2  rmind     int                     c)
    712  1.1.1.2.4.2  rmind {
    713  1.1.1.2.4.2  rmind 
    714  1.1.1.2.4.2  rmind     return (ACPI_IS_LOWER(c) ? ((c)-0x20) : (c));
    715  1.1.1.2.4.2  rmind }
    716  1.1.1.2.4.2  rmind 
    717  1.1.1.2.4.2  rmind 
    718  1.1.1.2.4.2  rmind /*******************************************************************************
    719  1.1.1.2.4.2  rmind  *
    720  1.1.1.2.4.2  rmind  * FUNCTION:    AcpiUtToLower (TOLOWER)
    721  1.1.1.2.4.2  rmind  *
    722  1.1.1.2.4.2  rmind  * PARAMETERS:  c           - Character to convert
    723  1.1.1.2.4.2  rmind  *
    724  1.1.1.2.4.2  rmind  * RETURN:      Converted character as an int
    725  1.1.1.2.4.2  rmind  *
    726  1.1.1.2.4.2  rmind  * DESCRIPTION: Convert character to lowercase
    727  1.1.1.2.4.2  rmind  *
    728  1.1.1.2.4.2  rmind  ******************************************************************************/
    729  1.1.1.2.4.2  rmind 
    730  1.1.1.2.4.2  rmind int
    731  1.1.1.2.4.2  rmind AcpiUtToLower (
    732  1.1.1.2.4.2  rmind     int                     c)
    733  1.1.1.2.4.2  rmind {
    734  1.1.1.2.4.2  rmind 
    735  1.1.1.2.4.2  rmind     return (ACPI_IS_UPPER(c) ? ((c)+0x20) : (c));
    736  1.1.1.2.4.2  rmind }
    737  1.1.1.2.4.2  rmind 
    738  1.1.1.2.4.2  rmind 
    739  1.1.1.2.4.2  rmind /*******************************************************************************
    740  1.1.1.2.4.2  rmind  *
    741  1.1.1.2.4.2  rmind  * FUNCTION:    is* functions
    742  1.1.1.2.4.2  rmind  *
    743  1.1.1.2.4.2  rmind  * DESCRIPTION: is* functions use the ctype table below
    744  1.1.1.2.4.2  rmind  *
    745  1.1.1.2.4.2  rmind  ******************************************************************************/
    746  1.1.1.2.4.2  rmind 
    747  1.1.1.2.4.2  rmind const UINT8 _acpi_ctype[257] = {
    748  1.1.1.2.4.2  rmind     _ACPI_CN,            /* 0x0      0.     */
    749  1.1.1.2.4.2  rmind     _ACPI_CN,            /* 0x1      1.     */
    750  1.1.1.2.4.2  rmind     _ACPI_CN,            /* 0x2      2.     */
    751  1.1.1.2.4.2  rmind     _ACPI_CN,            /* 0x3      3.     */
    752  1.1.1.2.4.2  rmind     _ACPI_CN,            /* 0x4      4.     */
    753  1.1.1.2.4.2  rmind     _ACPI_CN,            /* 0x5      5.     */
    754  1.1.1.2.4.2  rmind     _ACPI_CN,            /* 0x6      6.     */
    755  1.1.1.2.4.2  rmind     _ACPI_CN,            /* 0x7      7.     */
    756  1.1.1.2.4.2  rmind     _ACPI_CN,            /* 0x8      8.     */
    757  1.1.1.2.4.2  rmind     _ACPI_CN|_ACPI_SP,   /* 0x9      9.     */
    758  1.1.1.2.4.2  rmind     _ACPI_CN|_ACPI_SP,   /* 0xA     10.     */
    759  1.1.1.2.4.2  rmind     _ACPI_CN|_ACPI_SP,   /* 0xB     11.     */
    760  1.1.1.2.4.2  rmind     _ACPI_CN|_ACPI_SP,   /* 0xC     12.     */
    761  1.1.1.2.4.2  rmind     _ACPI_CN|_ACPI_SP,   /* 0xD     13.     */
    762  1.1.1.2.4.2  rmind     _ACPI_CN,            /* 0xE     14.     */
    763  1.1.1.2.4.2  rmind     _ACPI_CN,            /* 0xF     15.     */
    764  1.1.1.2.4.2  rmind     _ACPI_CN,            /* 0x10    16.     */
    765  1.1.1.2.4.2  rmind     _ACPI_CN,            /* 0x11    17.     */
    766  1.1.1.2.4.2  rmind     _ACPI_CN,            /* 0x12    18.     */
    767  1.1.1.2.4.2  rmind     _ACPI_CN,            /* 0x13    19.     */
    768  1.1.1.2.4.2  rmind     _ACPI_CN,            /* 0x14    20.     */
    769  1.1.1.2.4.2  rmind     _ACPI_CN,            /* 0x15    21.     */
    770  1.1.1.2.4.2  rmind     _ACPI_CN,            /* 0x16    22.     */
    771  1.1.1.2.4.2  rmind     _ACPI_CN,            /* 0x17    23.     */
    772  1.1.1.2.4.2  rmind     _ACPI_CN,            /* 0x18    24.     */
    773  1.1.1.2.4.2  rmind     _ACPI_CN,            /* 0x19    25.     */
    774  1.1.1.2.4.2  rmind     _ACPI_CN,            /* 0x1A    26.     */
    775  1.1.1.2.4.2  rmind     _ACPI_CN,            /* 0x1B    27.     */
    776  1.1.1.2.4.2  rmind     _ACPI_CN,            /* 0x1C    28.     */
    777  1.1.1.2.4.2  rmind     _ACPI_CN,            /* 0x1D    29.     */
    778  1.1.1.2.4.2  rmind     _ACPI_CN,            /* 0x1E    30.     */
    779  1.1.1.2.4.2  rmind     _ACPI_CN,            /* 0x1F    31.     */
    780  1.1.1.2.4.2  rmind     _ACPI_XS|_ACPI_SP,   /* 0x20    32. ' ' */
    781  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x21    33. '!' */
    782  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x22    34. '"' */
    783  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x23    35. '#' */
    784  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x24    36. '$' */
    785  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x25    37. '%' */
    786  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x26    38. '&' */
    787  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x27    39. ''' */
    788  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x28    40. '(' */
    789  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x29    41. ')' */
    790  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x2A    42. '*' */
    791  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x2B    43. '+' */
    792  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x2C    44. ',' */
    793  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x2D    45. '-' */
    794  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x2E    46. '.' */
    795  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x2F    47. '/' */
    796  1.1.1.2.4.2  rmind     _ACPI_XD|_ACPI_DI,   /* 0x30    48. '0' */
    797  1.1.1.2.4.2  rmind     _ACPI_XD|_ACPI_DI,   /* 0x31    49. '1' */
    798  1.1.1.2.4.2  rmind     _ACPI_XD|_ACPI_DI,   /* 0x32    50. '2' */
    799  1.1.1.2.4.2  rmind     _ACPI_XD|_ACPI_DI,   /* 0x33    51. '3' */
    800  1.1.1.2.4.2  rmind     _ACPI_XD|_ACPI_DI,   /* 0x34    52. '4' */
    801  1.1.1.2.4.2  rmind     _ACPI_XD|_ACPI_DI,   /* 0x35    53. '5' */
    802  1.1.1.2.4.2  rmind     _ACPI_XD|_ACPI_DI,   /* 0x36    54. '6' */
    803  1.1.1.2.4.2  rmind     _ACPI_XD|_ACPI_DI,   /* 0x37    55. '7' */
    804  1.1.1.2.4.2  rmind     _ACPI_XD|_ACPI_DI,   /* 0x38    56. '8' */
    805  1.1.1.2.4.2  rmind     _ACPI_XD|_ACPI_DI,   /* 0x39    57. '9' */
    806  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x3A    58. ':' */
    807  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x3B    59. ';' */
    808  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x3C    60. '<' */
    809  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x3D    61. '=' */
    810  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x3E    62. '>' */
    811  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x3F    63. '?' */
    812  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x40    64. '@' */
    813  1.1.1.2.4.2  rmind     _ACPI_XD|_ACPI_UP,   /* 0x41    65. 'A' */
    814  1.1.1.2.4.2  rmind     _ACPI_XD|_ACPI_UP,   /* 0x42    66. 'B' */
    815  1.1.1.2.4.2  rmind     _ACPI_XD|_ACPI_UP,   /* 0x43    67. 'C' */
    816  1.1.1.2.4.2  rmind     _ACPI_XD|_ACPI_UP,   /* 0x44    68. 'D' */
    817  1.1.1.2.4.2  rmind     _ACPI_XD|_ACPI_UP,   /* 0x45    69. 'E' */
    818  1.1.1.2.4.2  rmind     _ACPI_XD|_ACPI_UP,   /* 0x46    70. 'F' */
    819  1.1.1.2.4.2  rmind     _ACPI_UP,            /* 0x47    71. 'G' */
    820  1.1.1.2.4.2  rmind     _ACPI_UP,            /* 0x48    72. 'H' */
    821  1.1.1.2.4.2  rmind     _ACPI_UP,            /* 0x49    73. 'I' */
    822  1.1.1.2.4.2  rmind     _ACPI_UP,            /* 0x4A    74. 'J' */
    823  1.1.1.2.4.2  rmind     _ACPI_UP,            /* 0x4B    75. 'K' */
    824  1.1.1.2.4.2  rmind     _ACPI_UP,            /* 0x4C    76. 'L' */
    825  1.1.1.2.4.2  rmind     _ACPI_UP,            /* 0x4D    77. 'M' */
    826  1.1.1.2.4.2  rmind     _ACPI_UP,            /* 0x4E    78. 'N' */
    827  1.1.1.2.4.2  rmind     _ACPI_UP,            /* 0x4F    79. 'O' */
    828  1.1.1.2.4.2  rmind     _ACPI_UP,            /* 0x50    80. 'P' */
    829  1.1.1.2.4.2  rmind     _ACPI_UP,            /* 0x51    81. 'Q' */
    830  1.1.1.2.4.2  rmind     _ACPI_UP,            /* 0x52    82. 'R' */
    831  1.1.1.2.4.2  rmind     _ACPI_UP,            /* 0x53    83. 'S' */
    832  1.1.1.2.4.2  rmind     _ACPI_UP,            /* 0x54    84. 'T' */
    833  1.1.1.2.4.2  rmind     _ACPI_UP,            /* 0x55    85. 'U' */
    834  1.1.1.2.4.2  rmind     _ACPI_UP,            /* 0x56    86. 'V' */
    835  1.1.1.2.4.2  rmind     _ACPI_UP,            /* 0x57    87. 'W' */
    836  1.1.1.2.4.2  rmind     _ACPI_UP,            /* 0x58    88. 'X' */
    837  1.1.1.2.4.2  rmind     _ACPI_UP,            /* 0x59    89. 'Y' */
    838  1.1.1.2.4.2  rmind     _ACPI_UP,            /* 0x5A    90. 'Z' */
    839  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x5B    91. '[' */
    840  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x5C    92. '\' */
    841  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x5D    93. ']' */
    842  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x5E    94. '^' */
    843  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x5F    95. '_' */
    844  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x60    96. '`' */
    845  1.1.1.2.4.2  rmind     _ACPI_XD|_ACPI_LO,   /* 0x61    97. 'a' */
    846  1.1.1.2.4.2  rmind     _ACPI_XD|_ACPI_LO,   /* 0x62    98. 'b' */
    847  1.1.1.2.4.2  rmind     _ACPI_XD|_ACPI_LO,   /* 0x63    99. 'c' */
    848  1.1.1.2.4.2  rmind     _ACPI_XD|_ACPI_LO,   /* 0x64   100. 'd' */
    849  1.1.1.2.4.2  rmind     _ACPI_XD|_ACPI_LO,   /* 0x65   101. 'e' */
    850  1.1.1.2.4.2  rmind     _ACPI_XD|_ACPI_LO,   /* 0x66   102. 'f' */
    851  1.1.1.2.4.2  rmind     _ACPI_LO,            /* 0x67   103. 'g' */
    852  1.1.1.2.4.2  rmind     _ACPI_LO,            /* 0x68   104. 'h' */
    853  1.1.1.2.4.2  rmind     _ACPI_LO,            /* 0x69   105. 'i' */
    854  1.1.1.2.4.2  rmind     _ACPI_LO,            /* 0x6A   106. 'j' */
    855  1.1.1.2.4.2  rmind     _ACPI_LO,            /* 0x6B   107. 'k' */
    856  1.1.1.2.4.2  rmind     _ACPI_LO,            /* 0x6C   108. 'l' */
    857  1.1.1.2.4.2  rmind     _ACPI_LO,            /* 0x6D   109. 'm' */
    858  1.1.1.2.4.2  rmind     _ACPI_LO,            /* 0x6E   110. 'n' */
    859  1.1.1.2.4.2  rmind     _ACPI_LO,            /* 0x6F   111. 'o' */
    860  1.1.1.2.4.2  rmind     _ACPI_LO,            /* 0x70   112. 'p' */
    861  1.1.1.2.4.2  rmind     _ACPI_LO,            /* 0x71   113. 'q' */
    862  1.1.1.2.4.2  rmind     _ACPI_LO,            /* 0x72   114. 'r' */
    863  1.1.1.2.4.2  rmind     _ACPI_LO,            /* 0x73   115. 's' */
    864  1.1.1.2.4.2  rmind     _ACPI_LO,            /* 0x74   116. 't' */
    865  1.1.1.2.4.2  rmind     _ACPI_LO,            /* 0x75   117. 'u' */
    866  1.1.1.2.4.2  rmind     _ACPI_LO,            /* 0x76   118. 'v' */
    867  1.1.1.2.4.2  rmind     _ACPI_LO,            /* 0x77   119. 'w' */
    868  1.1.1.2.4.2  rmind     _ACPI_LO,            /* 0x78   120. 'x' */
    869  1.1.1.2.4.2  rmind     _ACPI_LO,            /* 0x79   121. 'y' */
    870  1.1.1.2.4.2  rmind     _ACPI_LO,            /* 0x7A   122. 'z' */
    871  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x7B   123. '{' */
    872  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x7C   124. '|' */
    873  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x7D   125. '}' */
    874  1.1.1.2.4.2  rmind     _ACPI_PU,            /* 0x7E   126. '~' */
    875  1.1.1.2.4.2  rmind     _ACPI_CN,            /* 0x7F   127.     */
    876  1.1.1.2.4.2  rmind 
    877  1.1.1.2.4.2  rmind     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,  /* 0x80 to 0x8F    */
    878  1.1.1.2.4.2  rmind     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,  /* 0x90 to 0x9F    */
    879  1.1.1.2.4.2  rmind     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,  /* 0xA0 to 0xAF    */
    880  1.1.1.2.4.2  rmind     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,  /* 0xB0 to 0xBF    */
    881  1.1.1.2.4.2  rmind     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,  /* 0xC0 to 0xCF    */
    882  1.1.1.2.4.2  rmind     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,  /* 0xD0 to 0xDF    */
    883  1.1.1.2.4.2  rmind     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,  /* 0xE0 to 0xEF    */
    884  1.1.1.2.4.2  rmind     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* 0xF0 to 0x100   */
    885  1.1.1.2.4.2  rmind };
    886  1.1.1.2.4.2  rmind 
    887  1.1.1.2.4.2  rmind 
    888  1.1.1.2.4.2  rmind #endif /* ACPI_USE_SYSTEM_CLIBRARY */
    889  1.1.1.2.4.2  rmind 
    890