17c478bd9Sstevel@tonic-gate /****************************************************************************** 27c478bd9Sstevel@tonic-gate * 37b1019a6SJerry Jelinek * Module Name: utclib - ACPICA implementations of C library functions 47c478bd9Sstevel@tonic-gate * 57c478bd9Sstevel@tonic-gate *****************************************************************************/ 67c478bd9Sstevel@tonic-gate 7*35786f68SRobert Mustacchi /****************************************************************************** 8*35786f68SRobert Mustacchi * 9*35786f68SRobert Mustacchi * 1. Copyright Notice 10*35786f68SRobert Mustacchi * 11*35786f68SRobert Mustacchi * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. 127c478bd9Sstevel@tonic-gate * All rights reserved. 137c478bd9Sstevel@tonic-gate * 14*35786f68SRobert Mustacchi * 2. License 15*35786f68SRobert Mustacchi * 16*35786f68SRobert Mustacchi * 2.1. This is your license from Intel Corp. under its intellectual property 17*35786f68SRobert Mustacchi * rights. You may have additional license terms from the party that provided 18*35786f68SRobert Mustacchi * you this software, covering your right to use that party's intellectual 19*35786f68SRobert Mustacchi * property rights. 20*35786f68SRobert Mustacchi * 21*35786f68SRobert Mustacchi * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a 22*35786f68SRobert Mustacchi * copy of the source code appearing in this file ("Covered Code") an 23*35786f68SRobert Mustacchi * irrevocable, perpetual, worldwide license under Intel's copyrights in the 24*35786f68SRobert Mustacchi * base code distributed originally by Intel ("Original Intel Code") to copy, 25*35786f68SRobert Mustacchi * make derivatives, distribute, use and display any portion of the Covered 26*35786f68SRobert Mustacchi * Code in any form, with the right to sublicense such rights; and 27*35786f68SRobert Mustacchi * 28*35786f68SRobert Mustacchi * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent 29*35786f68SRobert Mustacchi * license (with the right to sublicense), under only those claims of Intel 30*35786f68SRobert Mustacchi * patents that are infringed by the Original Intel Code, to make, use, sell, 31*35786f68SRobert Mustacchi * offer to sell, and import the Covered Code and derivative works thereof 32*35786f68SRobert Mustacchi * solely to the minimum extent necessary to exercise the above copyright 33*35786f68SRobert Mustacchi * license, and in no event shall the patent license extend to any additions 34*35786f68SRobert Mustacchi * to or modifications of the Original Intel Code. No other license or right 35*35786f68SRobert Mustacchi * is granted directly or by implication, estoppel or otherwise; 36*35786f68SRobert Mustacchi * 37*35786f68SRobert Mustacchi * The above copyright and patent license is granted only if the following 38*35786f68SRobert Mustacchi * conditions are met: 39*35786f68SRobert Mustacchi * 40*35786f68SRobert Mustacchi * 3. Conditions 41*35786f68SRobert Mustacchi * 42*35786f68SRobert Mustacchi * 3.1. Redistribution of Source with Rights to Further Distribute Source. 43*35786f68SRobert Mustacchi * Redistribution of source code of any substantial portion of the Covered 44*35786f68SRobert Mustacchi * Code or modification with rights to further distribute source must include 45*35786f68SRobert Mustacchi * the above Copyright Notice, the above License, this list of Conditions, 46*35786f68SRobert Mustacchi * and the following Disclaimer and Export Compliance provision. In addition, 47*35786f68SRobert Mustacchi * Licensee must cause all Covered Code to which Licensee contributes to 48*35786f68SRobert Mustacchi * contain a file documenting the changes Licensee made to create that Covered 49*35786f68SRobert Mustacchi * Code and the date of any change. Licensee must include in that file the 50*35786f68SRobert Mustacchi * documentation of any changes made by any predecessor Licensee. Licensee 51*35786f68SRobert Mustacchi * must include a prominent statement that the modification is derived, 52*35786f68SRobert Mustacchi * directly or indirectly, from Original Intel Code. 53*35786f68SRobert Mustacchi * 54*35786f68SRobert Mustacchi * 3.2. Redistribution of Source with no Rights to Further Distribute Source. 55*35786f68SRobert Mustacchi * Redistribution of source code of any substantial portion of the Covered 56*35786f68SRobert Mustacchi * Code or modification without rights to further distribute source must 57*35786f68SRobert Mustacchi * include the following Disclaimer and Export Compliance provision in the 58*35786f68SRobert Mustacchi * documentation and/or other materials provided with distribution. In 59*35786f68SRobert Mustacchi * addition, Licensee may not authorize further sublicense of source of any 60*35786f68SRobert Mustacchi * portion of the Covered Code, and must include terms to the effect that the 61*35786f68SRobert Mustacchi * license from Licensee to its licensee is limited to the intellectual 62*35786f68SRobert Mustacchi * property embodied in the software Licensee provides to its licensee, and 63*35786f68SRobert Mustacchi * not to intellectual property embodied in modifications its licensee may 64*35786f68SRobert Mustacchi * make. 65*35786f68SRobert Mustacchi * 66*35786f68SRobert Mustacchi * 3.3. Redistribution of Executable. Redistribution in executable form of any 67*35786f68SRobert Mustacchi * substantial portion of the Covered Code or modification must reproduce the 68*35786f68SRobert Mustacchi * above Copyright Notice, and the following Disclaimer and Export Compliance 69*35786f68SRobert Mustacchi * provision in the documentation and/or other materials provided with the 70*35786f68SRobert Mustacchi * distribution. 71*35786f68SRobert Mustacchi * 72*35786f68SRobert Mustacchi * 3.4. Intel retains all right, title, and interest in and to the Original 73*35786f68SRobert Mustacchi * Intel Code. 74*35786f68SRobert Mustacchi * 75*35786f68SRobert Mustacchi * 3.5. Neither the name Intel nor any other trademark owned or controlled by 76*35786f68SRobert Mustacchi * Intel shall be used in advertising or otherwise to promote the sale, use or 77*35786f68SRobert Mustacchi * other dealings in products derived from or relating to the Covered Code 78*35786f68SRobert Mustacchi * without prior written authorization from Intel. 79*35786f68SRobert Mustacchi * 80*35786f68SRobert Mustacchi * 4. Disclaimer and Export Compliance 81*35786f68SRobert Mustacchi * 82*35786f68SRobert Mustacchi * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED 83*35786f68SRobert Mustacchi * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE 84*35786f68SRobert Mustacchi * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, 85*35786f68SRobert Mustacchi * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY 86*35786f68SRobert Mustacchi * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY 87*35786f68SRobert Mustacchi * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A 88*35786f68SRobert Mustacchi * PARTICULAR PURPOSE. 89*35786f68SRobert Mustacchi * 90*35786f68SRobert Mustacchi * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES 91*35786f68SRobert Mustacchi * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR 92*35786f68SRobert Mustacchi * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, 93*35786f68SRobert Mustacchi * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY 94*35786f68SRobert Mustacchi * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL 95*35786f68SRobert Mustacchi * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS 96*35786f68SRobert Mustacchi * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY 97*35786f68SRobert Mustacchi * LIMITED REMEDY. 98*35786f68SRobert Mustacchi * 99*35786f68SRobert Mustacchi * 4.3. Licensee shall not export, either directly or indirectly, any of this 100*35786f68SRobert Mustacchi * software or system incorporating such software without first obtaining any 101*35786f68SRobert Mustacchi * required license or other approval from the U. S. Department of Commerce or 102*35786f68SRobert Mustacchi * any other agency or department of the United States Government. In the 103*35786f68SRobert Mustacchi * event Licensee exports any such software from the United States or 104*35786f68SRobert Mustacchi * re-exports any such software from a foreign destination, Licensee shall 105*35786f68SRobert Mustacchi * ensure that the distribution and export/re-export of the software is in 106*35786f68SRobert Mustacchi * compliance with all laws, regulations, orders, or other restrictions of the 107*35786f68SRobert Mustacchi * U.S. Export Administration Regulations. Licensee agrees that neither it nor 108*35786f68SRobert Mustacchi * any of its subsidiaries will export/re-export any technical data, process, 109*35786f68SRobert Mustacchi * software, or service, directly or indirectly, to any country for which the 110*35786f68SRobert Mustacchi * United States government or any agency thereof requires an export license, 111*35786f68SRobert Mustacchi * other governmental approval, or letter of assurance, without first obtaining 112*35786f68SRobert Mustacchi * such license, approval or letter. 113*35786f68SRobert Mustacchi * 114*35786f68SRobert Mustacchi ***************************************************************************** 115*35786f68SRobert Mustacchi * 116*35786f68SRobert Mustacchi * Alternatively, you may choose to be licensed under the terms of the 117*35786f68SRobert Mustacchi * following license: 118*35786f68SRobert Mustacchi * 11926f3cdf0SGordon Ross * Redistribution and use in source and binary forms, with or without 12026f3cdf0SGordon Ross * modification, are permitted provided that the following conditions 12126f3cdf0SGordon Ross * are met: 12226f3cdf0SGordon Ross * 1. Redistributions of source code must retain the above copyright 12326f3cdf0SGordon Ross * notice, this list of conditions, and the following disclaimer, 12426f3cdf0SGordon Ross * without modification. 12526f3cdf0SGordon Ross * 2. Redistributions in binary form must reproduce at minimum a disclaimer 12626f3cdf0SGordon Ross * substantially similar to the "NO WARRANTY" disclaimer below 12726f3cdf0SGordon Ross * ("Disclaimer") and any redistribution must be conditioned upon 12826f3cdf0SGordon Ross * including a substantially similar Disclaimer requirement for further 12926f3cdf0SGordon Ross * binary redistribution. 13026f3cdf0SGordon Ross * 3. Neither the names of the above-listed copyright holders nor the names 13126f3cdf0SGordon Ross * of any contributors may be used to endorse or promote products derived 13226f3cdf0SGordon Ross * from this software without specific prior written permission. 13326f3cdf0SGordon Ross * 13426f3cdf0SGordon Ross * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 13526f3cdf0SGordon Ross * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 136*35786f68SRobert Mustacchi * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 13726f3cdf0SGordon Ross * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 138*35786f68SRobert Mustacchi * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 139*35786f68SRobert Mustacchi * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 140*35786f68SRobert Mustacchi * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 141*35786f68SRobert Mustacchi * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 142*35786f68SRobert Mustacchi * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 143*35786f68SRobert Mustacchi * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 144*35786f68SRobert Mustacchi * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 145*35786f68SRobert Mustacchi * 146*35786f68SRobert Mustacchi * Alternatively, you may choose to be licensed under the terms of the 147*35786f68SRobert Mustacchi * GNU General Public License ("GPL") version 2 as published by the Free 148*35786f68SRobert Mustacchi * Software Foundation. 149*35786f68SRobert Mustacchi * 150*35786f68SRobert Mustacchi *****************************************************************************/ 1517c478bd9Sstevel@tonic-gate 1527b1019a6SJerry Jelinek #define ACPI_CLIBRARY 1537c478bd9Sstevel@tonic-gate #include "acpi.h" 154aa2aa9a6SDana Myers #include "accommon.h" 1557c478bd9Sstevel@tonic-gate 1567c478bd9Sstevel@tonic-gate /* 1577b1019a6SJerry Jelinek * This module contains implementations of the standard C library functions 1587b1019a6SJerry Jelinek * that are required by the ACPICA code at both application level and kernel 1597b1019a6SJerry Jelinek * level. 1607b1019a6SJerry Jelinek * 1617b1019a6SJerry Jelinek * The module is an optional feature that can be used if a local/system 1627b1019a6SJerry Jelinek * C library is not available. Some operating system kernels may not have 1637b1019a6SJerry Jelinek * an internal C library. 1647b1019a6SJerry Jelinek * 1657b1019a6SJerry Jelinek * In general, these functions are less efficient than an inline or assembly 1667b1019a6SJerry Jelinek * code implementation. 1677b1019a6SJerry Jelinek * 1687b1019a6SJerry Jelinek * These C functions and the associated prototypes are enabled by default 1697b1019a6SJerry Jelinek * unless the ACPI_USE_SYSTEM_CLIBRARY symbol is defined. This is usually 1707b1019a6SJerry Jelinek * automatically defined for the ACPICA applications such as iASL and 1717b1019a6SJerry Jelinek * AcpiExec, so that these user-level applications use the local C library 1727b1019a6SJerry Jelinek * instead of the functions in this module. 1737c478bd9Sstevel@tonic-gate */ 1747c478bd9Sstevel@tonic-gate 1757b1019a6SJerry Jelinek /******************************************************************************* 1767b1019a6SJerry Jelinek * 1777b1019a6SJerry Jelinek * Functions implemented in this module: 1787b1019a6SJerry Jelinek * 1797b1019a6SJerry Jelinek * FUNCTION: memcmp 1807b1019a6SJerry Jelinek * FUNCTION: memcpy 1817b1019a6SJerry Jelinek * FUNCTION: memset 1827b1019a6SJerry Jelinek * FUNCTION: strlen 1837b1019a6SJerry Jelinek * FUNCTION: strcpy 1847b1019a6SJerry Jelinek * FUNCTION: strncpy 1857b1019a6SJerry Jelinek * FUNCTION: strcmp 1867b1019a6SJerry Jelinek * FUNCTION: strchr 1877b1019a6SJerry Jelinek * FUNCTION: strncmp 1887b1019a6SJerry Jelinek * FUNCTION: strcat 1897b1019a6SJerry Jelinek * FUNCTION: strncat 1907b1019a6SJerry Jelinek * FUNCTION: strstr 1917b1019a6SJerry Jelinek * FUNCTION: strtoul 1927b1019a6SJerry Jelinek * FUNCTION: toupper 1937b1019a6SJerry Jelinek * FUNCTION: tolower 1947b1019a6SJerry Jelinek * FUNCTION: is* functions 1957b1019a6SJerry Jelinek * 1967b1019a6SJerry Jelinek ******************************************************************************/ 1977c478bd9Sstevel@tonic-gate 1987b1019a6SJerry Jelinek #define _COMPONENT ACPI_UTILITIES 1997b1019a6SJerry Jelinek ACPI_MODULE_NAME ("utclib") 2007c478bd9Sstevel@tonic-gate 2017c478bd9Sstevel@tonic-gate 2027b1019a6SJerry Jelinek #ifndef ACPI_USE_SYSTEM_CLIBRARY /* Entire module */ 2037c478bd9Sstevel@tonic-gate 2047c478bd9Sstevel@tonic-gate 2057c478bd9Sstevel@tonic-gate /******************************************************************************* 2067c478bd9Sstevel@tonic-gate * 2077b1019a6SJerry Jelinek * FUNCTION: memcmp 2087c478bd9Sstevel@tonic-gate * 2097c478bd9Sstevel@tonic-gate * PARAMETERS: Buffer1 - First Buffer 2107c478bd9Sstevel@tonic-gate * Buffer2 - Second Buffer 2117c478bd9Sstevel@tonic-gate * Count - Maximum # of bytes to compare 2127c478bd9Sstevel@tonic-gate * 2137c478bd9Sstevel@tonic-gate * RETURN: Index where Buffers mismatched, or 0 if Buffers matched 2147c478bd9Sstevel@tonic-gate * 2157c478bd9Sstevel@tonic-gate * DESCRIPTION: Compare two Buffers, with a maximum length 2167c478bd9Sstevel@tonic-gate * 2177c478bd9Sstevel@tonic-gate ******************************************************************************/ 2187c478bd9Sstevel@tonic-gate 2197c478bd9Sstevel@tonic-gate int 2207b1019a6SJerry Jelinek memcmp ( 2217b1019a6SJerry Jelinek void *VBuffer1, 2227b1019a6SJerry Jelinek void *VBuffer2, 2237c478bd9Sstevel@tonic-gate ACPI_SIZE Count) 2247c478bd9Sstevel@tonic-gate { 2257b1019a6SJerry Jelinek char *Buffer1 = (char *) VBuffer1; 2267b1019a6SJerry Jelinek char *Buffer2 = (char *) VBuffer2; 2277b1019a6SJerry Jelinek 2287c478bd9Sstevel@tonic-gate 2297c478bd9Sstevel@tonic-gate for ( ; Count-- && (*Buffer1 == *Buffer2); Buffer1++, Buffer2++) 2307c478bd9Sstevel@tonic-gate { 2317c478bd9Sstevel@tonic-gate } 2327c478bd9Sstevel@tonic-gate 2337c478bd9Sstevel@tonic-gate return ((Count == ACPI_SIZE_MAX) ? 0 : ((unsigned char) *Buffer1 - 2347c478bd9Sstevel@tonic-gate (unsigned char) *Buffer2)); 2357c478bd9Sstevel@tonic-gate } 2367c478bd9Sstevel@tonic-gate 2377c478bd9Sstevel@tonic-gate 238*35786f68SRobert Mustacchi /******************************************************************************* 239*35786f68SRobert Mustacchi * 240*35786f68SRobert Mustacchi * FUNCTION: memmove 241*35786f68SRobert Mustacchi * 242*35786f68SRobert Mustacchi * PARAMETERS: Dest - Target of the copy 243*35786f68SRobert Mustacchi * Src - Source buffer to copy 244*35786f68SRobert Mustacchi * Count - Number of bytes to copy 245*35786f68SRobert Mustacchi * 246*35786f68SRobert Mustacchi * RETURN: Dest 247*35786f68SRobert Mustacchi * 248*35786f68SRobert Mustacchi * DESCRIPTION: Copy arbitrary bytes of memory with respect to the overlapping 249*35786f68SRobert Mustacchi * 250*35786f68SRobert Mustacchi ******************************************************************************/ 251*35786f68SRobert Mustacchi 252*35786f68SRobert Mustacchi void * 253*35786f68SRobert Mustacchi memmove ( 254*35786f68SRobert Mustacchi void *Dest, 255*35786f68SRobert Mustacchi const void *Src, 256*35786f68SRobert Mustacchi ACPI_SIZE Count) 257*35786f68SRobert Mustacchi { 258*35786f68SRobert Mustacchi char *New = (char *) Dest; 259*35786f68SRobert Mustacchi char *Old = (char *) Src; 260*35786f68SRobert Mustacchi 261*35786f68SRobert Mustacchi 262*35786f68SRobert Mustacchi if (Old > New) 263*35786f68SRobert Mustacchi { 264*35786f68SRobert Mustacchi /* Copy from the beginning */ 265*35786f68SRobert Mustacchi 266*35786f68SRobert Mustacchi while (Count) 267*35786f68SRobert Mustacchi { 268*35786f68SRobert Mustacchi *New = *Old; 269*35786f68SRobert Mustacchi New++; 270*35786f68SRobert Mustacchi Old++; 271*35786f68SRobert Mustacchi Count--; 272*35786f68SRobert Mustacchi } 273*35786f68SRobert Mustacchi } 274*35786f68SRobert Mustacchi else if (Old < New) 275*35786f68SRobert Mustacchi { 276*35786f68SRobert Mustacchi /* Copy from the end */ 277*35786f68SRobert Mustacchi 278*35786f68SRobert Mustacchi New = New + Count - 1; 279*35786f68SRobert Mustacchi Old = Old + Count - 1; 280*35786f68SRobert Mustacchi while (Count) 281*35786f68SRobert Mustacchi { 282*35786f68SRobert Mustacchi *New = *Old; 283*35786f68SRobert Mustacchi New--; 284*35786f68SRobert Mustacchi Old--; 285*35786f68SRobert Mustacchi Count--; 286*35786f68SRobert Mustacchi } 287*35786f68SRobert Mustacchi } 288*35786f68SRobert Mustacchi 289*35786f68SRobert Mustacchi return (Dest); 290*35786f68SRobert Mustacchi } 291*35786f68SRobert Mustacchi 292*35786f68SRobert Mustacchi 2937c478bd9Sstevel@tonic-gate /******************************************************************************* 2947c478bd9Sstevel@tonic-gate * 2957b1019a6SJerry Jelinek * FUNCTION: memcpy 2967c478bd9Sstevel@tonic-gate * 2977c478bd9Sstevel@tonic-gate * PARAMETERS: Dest - Target of the copy 2987c478bd9Sstevel@tonic-gate * Src - Source buffer to copy 2997c478bd9Sstevel@tonic-gate * Count - Number of bytes to copy 3007c478bd9Sstevel@tonic-gate * 3017c478bd9Sstevel@tonic-gate * RETURN: Dest 3027c478bd9Sstevel@tonic-gate * 3037c478bd9Sstevel@tonic-gate * DESCRIPTION: Copy arbitrary bytes of memory 3047c478bd9Sstevel@tonic-gate * 3057c478bd9Sstevel@tonic-gate ******************************************************************************/ 3067c478bd9Sstevel@tonic-gate 3077c478bd9Sstevel@tonic-gate void * 3087b1019a6SJerry Jelinek memcpy ( 3097c478bd9Sstevel@tonic-gate void *Dest, 3107c478bd9Sstevel@tonic-gate const void *Src, 3117c478bd9Sstevel@tonic-gate ACPI_SIZE Count) 3127c478bd9Sstevel@tonic-gate { 3137c478bd9Sstevel@tonic-gate char *New = (char *) Dest; 3147c478bd9Sstevel@tonic-gate char *Old = (char *) Src; 3157c478bd9Sstevel@tonic-gate 3167c478bd9Sstevel@tonic-gate 3177c478bd9Sstevel@tonic-gate while (Count) 3187c478bd9Sstevel@tonic-gate { 3197c478bd9Sstevel@tonic-gate *New = *Old; 3207c478bd9Sstevel@tonic-gate New++; 3217c478bd9Sstevel@tonic-gate Old++; 3227c478bd9Sstevel@tonic-gate Count--; 3237c478bd9Sstevel@tonic-gate } 3247c478bd9Sstevel@tonic-gate 3257c478bd9Sstevel@tonic-gate return (Dest); 3267c478bd9Sstevel@tonic-gate } 3277c478bd9Sstevel@tonic-gate 3287c478bd9Sstevel@tonic-gate 3297c478bd9Sstevel@tonic-gate /******************************************************************************* 3307c478bd9Sstevel@tonic-gate * 3317b1019a6SJerry Jelinek * FUNCTION: memset 3327c478bd9Sstevel@tonic-gate * 3337c478bd9Sstevel@tonic-gate * PARAMETERS: Dest - Buffer to set 3347c478bd9Sstevel@tonic-gate * Value - Value to set each byte of memory 3357c478bd9Sstevel@tonic-gate * Count - Number of bytes to set 3367c478bd9Sstevel@tonic-gate * 3377c478bd9Sstevel@tonic-gate * RETURN: Dest 3387c478bd9Sstevel@tonic-gate * 3397c478bd9Sstevel@tonic-gate * DESCRIPTION: Initialize a buffer to a known value. 3407c478bd9Sstevel@tonic-gate * 3417c478bd9Sstevel@tonic-gate ******************************************************************************/ 3427c478bd9Sstevel@tonic-gate 3437c478bd9Sstevel@tonic-gate void * 3447b1019a6SJerry Jelinek memset ( 3457c478bd9Sstevel@tonic-gate void *Dest, 3467b1019a6SJerry Jelinek int Value, 3477c478bd9Sstevel@tonic-gate ACPI_SIZE Count) 3487c478bd9Sstevel@tonic-gate { 3497c478bd9Sstevel@tonic-gate char *New = (char *) Dest; 3507c478bd9Sstevel@tonic-gate 3517c478bd9Sstevel@tonic-gate 3527c478bd9Sstevel@tonic-gate while (Count) 3537c478bd9Sstevel@tonic-gate { 3547c478bd9Sstevel@tonic-gate *New = (char) Value; 3557c478bd9Sstevel@tonic-gate New++; 3567c478bd9Sstevel@tonic-gate Count--; 3577c478bd9Sstevel@tonic-gate } 3587c478bd9Sstevel@tonic-gate 3597c478bd9Sstevel@tonic-gate return (Dest); 3607c478bd9Sstevel@tonic-gate } 3617c478bd9Sstevel@tonic-gate 3627c478bd9Sstevel@tonic-gate 3637c478bd9Sstevel@tonic-gate /******************************************************************************* 3647c478bd9Sstevel@tonic-gate * 3657b1019a6SJerry Jelinek * FUNCTION: strlen 3667c478bd9Sstevel@tonic-gate * 3677c478bd9Sstevel@tonic-gate * PARAMETERS: String - Null terminated string 3687c478bd9Sstevel@tonic-gate * 3697c478bd9Sstevel@tonic-gate * RETURN: Length 3707c478bd9Sstevel@tonic-gate * 3717c478bd9Sstevel@tonic-gate * DESCRIPTION: Returns the length of the input string 3727c478bd9Sstevel@tonic-gate * 3737c478bd9Sstevel@tonic-gate ******************************************************************************/ 3747c478bd9Sstevel@tonic-gate 3757c478bd9Sstevel@tonic-gate 3767c478bd9Sstevel@tonic-gate ACPI_SIZE 3777b1019a6SJerry Jelinek strlen ( 3787c478bd9Sstevel@tonic-gate const char *String) 3797c478bd9Sstevel@tonic-gate { 3807c478bd9Sstevel@tonic-gate UINT32 Length = 0; 3817c478bd9Sstevel@tonic-gate 3827c478bd9Sstevel@tonic-gate 3837c478bd9Sstevel@tonic-gate /* Count the string until a null is encountered */ 3847c478bd9Sstevel@tonic-gate 3857c478bd9Sstevel@tonic-gate while (*String) 3867c478bd9Sstevel@tonic-gate { 3877c478bd9Sstevel@tonic-gate Length++; 3887c478bd9Sstevel@tonic-gate String++; 3897c478bd9Sstevel@tonic-gate } 3907c478bd9Sstevel@tonic-gate 3917c478bd9Sstevel@tonic-gate return (Length); 3927c478bd9Sstevel@tonic-gate } 3937c478bd9Sstevel@tonic-gate 3947c478bd9Sstevel@tonic-gate 395*35786f68SRobert Mustacchi /******************************************************************************* 396*35786f68SRobert Mustacchi * 397*35786f68SRobert Mustacchi * FUNCTION: strpbrk 398*35786f68SRobert Mustacchi * 399*35786f68SRobert Mustacchi * PARAMETERS: String - Null terminated string 400*35786f68SRobert Mustacchi * Delimiters - Delimiters to match 401*35786f68SRobert Mustacchi * 402*35786f68SRobert Mustacchi * RETURN: The first occurance in the string of any of the bytes in the 403*35786f68SRobert Mustacchi * delimiters 404*35786f68SRobert Mustacchi * 405*35786f68SRobert Mustacchi * DESCRIPTION: Search a string for any of a set of the delimiters 406*35786f68SRobert Mustacchi * 407*35786f68SRobert Mustacchi ******************************************************************************/ 408*35786f68SRobert Mustacchi 409*35786f68SRobert Mustacchi char * 410*35786f68SRobert Mustacchi strpbrk ( 411*35786f68SRobert Mustacchi const char *String, 412*35786f68SRobert Mustacchi const char *Delimiters) 413*35786f68SRobert Mustacchi { 414*35786f68SRobert Mustacchi const char *Delimiter; 415*35786f68SRobert Mustacchi 416*35786f68SRobert Mustacchi 417*35786f68SRobert Mustacchi for ( ; *String != '\0'; ++String) 418*35786f68SRobert Mustacchi { 419*35786f68SRobert Mustacchi for (Delimiter = Delimiters; *Delimiter != '\0'; Delimiter++) 420*35786f68SRobert Mustacchi { 421*35786f68SRobert Mustacchi if (*String == *Delimiter) 422*35786f68SRobert Mustacchi { 423*35786f68SRobert Mustacchi return (ACPI_CAST_PTR (char, String)); 424*35786f68SRobert Mustacchi } 425*35786f68SRobert Mustacchi } 426*35786f68SRobert Mustacchi } 427*35786f68SRobert Mustacchi 428*35786f68SRobert Mustacchi return (NULL); 429*35786f68SRobert Mustacchi } 430*35786f68SRobert Mustacchi 431*35786f68SRobert Mustacchi 432*35786f68SRobert Mustacchi /******************************************************************************* 433*35786f68SRobert Mustacchi * 434*35786f68SRobert Mustacchi * FUNCTION: strtok 435*35786f68SRobert Mustacchi * 436*35786f68SRobert Mustacchi * PARAMETERS: String - Null terminated string 437*35786f68SRobert Mustacchi * Delimiters - Delimiters to match 438*35786f68SRobert Mustacchi * 439*35786f68SRobert Mustacchi * RETURN: Pointer to the next token 440*35786f68SRobert Mustacchi * 441*35786f68SRobert Mustacchi * DESCRIPTION: Split string into tokens 442*35786f68SRobert Mustacchi * 443*35786f68SRobert Mustacchi ******************************************************************************/ 444*35786f68SRobert Mustacchi 445*35786f68SRobert Mustacchi char* 446*35786f68SRobert Mustacchi strtok ( 447*35786f68SRobert Mustacchi char *String, 448*35786f68SRobert Mustacchi const char *Delimiters) 449*35786f68SRobert Mustacchi { 450*35786f68SRobert Mustacchi char *Begin = String; 451*35786f68SRobert Mustacchi static char *SavedPtr; 452*35786f68SRobert Mustacchi 453*35786f68SRobert Mustacchi 454*35786f68SRobert Mustacchi if (Begin == NULL) 455*35786f68SRobert Mustacchi { 456*35786f68SRobert Mustacchi if (SavedPtr == NULL) 457*35786f68SRobert Mustacchi { 458*35786f68SRobert Mustacchi return (NULL); 459*35786f68SRobert Mustacchi } 460*35786f68SRobert Mustacchi Begin = SavedPtr; 461*35786f68SRobert Mustacchi } 462*35786f68SRobert Mustacchi 463*35786f68SRobert Mustacchi SavedPtr = strpbrk (Begin, Delimiters); 464*35786f68SRobert Mustacchi while (SavedPtr == Begin) 465*35786f68SRobert Mustacchi { 466*35786f68SRobert Mustacchi *Begin++ = '\0'; 467*35786f68SRobert Mustacchi SavedPtr = strpbrk (Begin, Delimiters); 468*35786f68SRobert Mustacchi } 469*35786f68SRobert Mustacchi 470*35786f68SRobert Mustacchi if (SavedPtr) 471*35786f68SRobert Mustacchi { 472*35786f68SRobert Mustacchi *SavedPtr++ = '\0'; 473*35786f68SRobert Mustacchi return (Begin); 474*35786f68SRobert Mustacchi } 475*35786f68SRobert Mustacchi else 476*35786f68SRobert Mustacchi { 477*35786f68SRobert Mustacchi return (NULL); 478*35786f68SRobert Mustacchi } 479*35786f68SRobert Mustacchi } 480*35786f68SRobert Mustacchi 481*35786f68SRobert Mustacchi 4827c478bd9Sstevel@tonic-gate /******************************************************************************* 4837c478bd9Sstevel@tonic-gate * 4847b1019a6SJerry Jelinek * FUNCTION: strcpy 4857c478bd9Sstevel@tonic-gate * 4867c478bd9Sstevel@tonic-gate * PARAMETERS: DstString - Target of the copy 4877c478bd9Sstevel@tonic-gate * SrcString - The source string to copy 4887c478bd9Sstevel@tonic-gate * 4897c478bd9Sstevel@tonic-gate * RETURN: DstString 4907c478bd9Sstevel@tonic-gate * 4917c478bd9Sstevel@tonic-gate * DESCRIPTION: Copy a null terminated string 4927c478bd9Sstevel@tonic-gate * 4937c478bd9Sstevel@tonic-gate ******************************************************************************/ 4947c478bd9Sstevel@tonic-gate 4957c478bd9Sstevel@tonic-gate char * 4967b1019a6SJerry Jelinek strcpy ( 4977c478bd9Sstevel@tonic-gate char *DstString, 4987c478bd9Sstevel@tonic-gate const char *SrcString) 4997c478bd9Sstevel@tonic-gate { 5007c478bd9Sstevel@tonic-gate char *String = DstString; 5017c478bd9Sstevel@tonic-gate 5027c478bd9Sstevel@tonic-gate 5037c478bd9Sstevel@tonic-gate /* Move bytes brute force */ 5047c478bd9Sstevel@tonic-gate 5057c478bd9Sstevel@tonic-gate while (*SrcString) 5067c478bd9Sstevel@tonic-gate { 5077c478bd9Sstevel@tonic-gate *String = *SrcString; 5087c478bd9Sstevel@tonic-gate 5097c478bd9Sstevel@tonic-gate String++; 5107c478bd9Sstevel@tonic-gate SrcString++; 5117c478bd9Sstevel@tonic-gate } 5127c478bd9Sstevel@tonic-gate 5137c478bd9Sstevel@tonic-gate /* Null terminate */ 5147c478bd9Sstevel@tonic-gate 5157c478bd9Sstevel@tonic-gate *String = 0; 5167c478bd9Sstevel@tonic-gate return (DstString); 5177c478bd9Sstevel@tonic-gate } 5187c478bd9Sstevel@tonic-gate 5197c478bd9Sstevel@tonic-gate 5207c478bd9Sstevel@tonic-gate /******************************************************************************* 5217c478bd9Sstevel@tonic-gate * 5227b1019a6SJerry Jelinek * FUNCTION: strncpy 5237c478bd9Sstevel@tonic-gate * 5247c478bd9Sstevel@tonic-gate * PARAMETERS: DstString - Target of the copy 5257c478bd9Sstevel@tonic-gate * SrcString - The source string to copy 5267c478bd9Sstevel@tonic-gate * Count - Maximum # of bytes to copy 5277c478bd9Sstevel@tonic-gate * 5287c478bd9Sstevel@tonic-gate * RETURN: DstString 5297c478bd9Sstevel@tonic-gate * 5307c478bd9Sstevel@tonic-gate * DESCRIPTION: Copy a null terminated string, with a maximum length 5317c478bd9Sstevel@tonic-gate * 5327c478bd9Sstevel@tonic-gate ******************************************************************************/ 5337c478bd9Sstevel@tonic-gate 5347c478bd9Sstevel@tonic-gate char * 5357b1019a6SJerry Jelinek strncpy ( 5367c478bd9Sstevel@tonic-gate char *DstString, 5377c478bd9Sstevel@tonic-gate const char *SrcString, 5387c478bd9Sstevel@tonic-gate ACPI_SIZE Count) 5397c478bd9Sstevel@tonic-gate { 5407c478bd9Sstevel@tonic-gate char *String = DstString; 5417c478bd9Sstevel@tonic-gate 5427c478bd9Sstevel@tonic-gate 5437c478bd9Sstevel@tonic-gate /* Copy the string */ 5447c478bd9Sstevel@tonic-gate 5457c478bd9Sstevel@tonic-gate for (String = DstString; 5467c478bd9Sstevel@tonic-gate Count && (Count--, (*String++ = *SrcString++)); ) 5477c478bd9Sstevel@tonic-gate {;} 5487c478bd9Sstevel@tonic-gate 5497c478bd9Sstevel@tonic-gate /* Pad with nulls if necessary */ 5507c478bd9Sstevel@tonic-gate 5517c478bd9Sstevel@tonic-gate while (Count--) 5527c478bd9Sstevel@tonic-gate { 5537c478bd9Sstevel@tonic-gate *String = 0; 5547c478bd9Sstevel@tonic-gate String++; 5557c478bd9Sstevel@tonic-gate } 5567c478bd9Sstevel@tonic-gate 5577c478bd9Sstevel@tonic-gate /* Return original pointer */ 5587c478bd9Sstevel@tonic-gate 5597c478bd9Sstevel@tonic-gate return (DstString); 5607c478bd9Sstevel@tonic-gate } 5617c478bd9Sstevel@tonic-gate 5627c478bd9Sstevel@tonic-gate 5637c478bd9Sstevel@tonic-gate /******************************************************************************* 5647c478bd9Sstevel@tonic-gate * 5657b1019a6SJerry Jelinek * FUNCTION: strcmp 5667c478bd9Sstevel@tonic-gate * 5677c478bd9Sstevel@tonic-gate * PARAMETERS: String1 - First string 5687c478bd9Sstevel@tonic-gate * String2 - Second string 5697c478bd9Sstevel@tonic-gate * 5707c478bd9Sstevel@tonic-gate * RETURN: Index where strings mismatched, or 0 if strings matched 5717c478bd9Sstevel@tonic-gate * 5727c478bd9Sstevel@tonic-gate * DESCRIPTION: Compare two null terminated strings 5737c478bd9Sstevel@tonic-gate * 5747c478bd9Sstevel@tonic-gate ******************************************************************************/ 5757c478bd9Sstevel@tonic-gate 5767c478bd9Sstevel@tonic-gate int 5777b1019a6SJerry Jelinek strcmp ( 5787c478bd9Sstevel@tonic-gate const char *String1, 5797c478bd9Sstevel@tonic-gate const char *String2) 5807c478bd9Sstevel@tonic-gate { 5817c478bd9Sstevel@tonic-gate 5827c478bd9Sstevel@tonic-gate 5837c478bd9Sstevel@tonic-gate for ( ; (*String1 == *String2); String2++) 5847c478bd9Sstevel@tonic-gate { 5857c478bd9Sstevel@tonic-gate if (!*String1++) 5867c478bd9Sstevel@tonic-gate { 5877c478bd9Sstevel@tonic-gate return (0); 5887c478bd9Sstevel@tonic-gate } 5897c478bd9Sstevel@tonic-gate } 5907c478bd9Sstevel@tonic-gate 5917c478bd9Sstevel@tonic-gate return ((unsigned char) *String1 - (unsigned char) *String2); 5927c478bd9Sstevel@tonic-gate } 5937c478bd9Sstevel@tonic-gate 5947c478bd9Sstevel@tonic-gate 5957c478bd9Sstevel@tonic-gate /******************************************************************************* 5967c478bd9Sstevel@tonic-gate * 5977b1019a6SJerry Jelinek * FUNCTION: strchr 5987c478bd9Sstevel@tonic-gate * 5997c478bd9Sstevel@tonic-gate * PARAMETERS: String - Search string 6007c478bd9Sstevel@tonic-gate * ch - character to search for 6017c478bd9Sstevel@tonic-gate * 6027c478bd9Sstevel@tonic-gate * RETURN: Ptr to char or NULL if not found 6037c478bd9Sstevel@tonic-gate * 6047c478bd9Sstevel@tonic-gate * DESCRIPTION: Search a string for a character 6057c478bd9Sstevel@tonic-gate * 6067c478bd9Sstevel@tonic-gate ******************************************************************************/ 6077c478bd9Sstevel@tonic-gate 6087c478bd9Sstevel@tonic-gate char * 6097b1019a6SJerry Jelinek strchr ( 6107c478bd9Sstevel@tonic-gate const char *String, 6117c478bd9Sstevel@tonic-gate int ch) 6127c478bd9Sstevel@tonic-gate { 6137c478bd9Sstevel@tonic-gate 6147c478bd9Sstevel@tonic-gate 6157c478bd9Sstevel@tonic-gate for ( ; (*String); String++) 6167c478bd9Sstevel@tonic-gate { 6177c478bd9Sstevel@tonic-gate if ((*String) == (char) ch) 6187c478bd9Sstevel@tonic-gate { 6197c478bd9Sstevel@tonic-gate return ((char *) String); 6207c478bd9Sstevel@tonic-gate } 6217c478bd9Sstevel@tonic-gate } 6227c478bd9Sstevel@tonic-gate 6237c478bd9Sstevel@tonic-gate return (NULL); 6247c478bd9Sstevel@tonic-gate } 6257b1019a6SJerry Jelinek 6267c478bd9Sstevel@tonic-gate 6277c478bd9Sstevel@tonic-gate /******************************************************************************* 6287c478bd9Sstevel@tonic-gate * 6297b1019a6SJerry Jelinek * FUNCTION: strncmp 6307c478bd9Sstevel@tonic-gate * 6317c478bd9Sstevel@tonic-gate * PARAMETERS: String1 - First string 6327c478bd9Sstevel@tonic-gate * String2 - Second string 6337c478bd9Sstevel@tonic-gate * Count - Maximum # of bytes to compare 6347c478bd9Sstevel@tonic-gate * 6357c478bd9Sstevel@tonic-gate * RETURN: Index where strings mismatched, or 0 if strings matched 6367c478bd9Sstevel@tonic-gate * 6377c478bd9Sstevel@tonic-gate * DESCRIPTION: Compare two null terminated strings, with a maximum length 6387c478bd9Sstevel@tonic-gate * 6397c478bd9Sstevel@tonic-gate ******************************************************************************/ 6407c478bd9Sstevel@tonic-gate 6417c478bd9Sstevel@tonic-gate int 6427b1019a6SJerry Jelinek strncmp ( 6437c478bd9Sstevel@tonic-gate const char *String1, 6447c478bd9Sstevel@tonic-gate const char *String2, 6457c478bd9Sstevel@tonic-gate ACPI_SIZE Count) 6467c478bd9Sstevel@tonic-gate { 6477c478bd9Sstevel@tonic-gate 6487c478bd9Sstevel@tonic-gate 6497c478bd9Sstevel@tonic-gate for ( ; Count-- && (*String1 == *String2); String2++) 6507c478bd9Sstevel@tonic-gate { 6517c478bd9Sstevel@tonic-gate if (!*String1++) 6527c478bd9Sstevel@tonic-gate { 6537c478bd9Sstevel@tonic-gate return (0); 6547c478bd9Sstevel@tonic-gate } 6557c478bd9Sstevel@tonic-gate } 6567c478bd9Sstevel@tonic-gate 6577c478bd9Sstevel@tonic-gate return ((Count == ACPI_SIZE_MAX) ? 0 : ((unsigned char) *String1 - 6587c478bd9Sstevel@tonic-gate (unsigned char) *String2)); 6597c478bd9Sstevel@tonic-gate } 6607c478bd9Sstevel@tonic-gate 6617c478bd9Sstevel@tonic-gate 6627c478bd9Sstevel@tonic-gate /******************************************************************************* 6637c478bd9Sstevel@tonic-gate * 6647b1019a6SJerry Jelinek * FUNCTION: strcat 6657c478bd9Sstevel@tonic-gate * 6667c478bd9Sstevel@tonic-gate * PARAMETERS: DstString - Target of the copy 6677c478bd9Sstevel@tonic-gate * SrcString - The source string to copy 6687c478bd9Sstevel@tonic-gate * 6697c478bd9Sstevel@tonic-gate * RETURN: DstString 6707c478bd9Sstevel@tonic-gate * 6717c478bd9Sstevel@tonic-gate * DESCRIPTION: Append a null terminated string to a null terminated string 6727c478bd9Sstevel@tonic-gate * 6737c478bd9Sstevel@tonic-gate ******************************************************************************/ 6747c478bd9Sstevel@tonic-gate 6757c478bd9Sstevel@tonic-gate char * 6767b1019a6SJerry Jelinek strcat ( 6777c478bd9Sstevel@tonic-gate char *DstString, 6787c478bd9Sstevel@tonic-gate const char *SrcString) 6797c478bd9Sstevel@tonic-gate { 6807c478bd9Sstevel@tonic-gate char *String; 6817c478bd9Sstevel@tonic-gate 6827c478bd9Sstevel@tonic-gate 6837c478bd9Sstevel@tonic-gate /* Find end of the destination string */ 6847c478bd9Sstevel@tonic-gate 6857c478bd9Sstevel@tonic-gate for (String = DstString; *String++; ) 6867c478bd9Sstevel@tonic-gate { ; } 6877c478bd9Sstevel@tonic-gate 6887c478bd9Sstevel@tonic-gate /* Concatenate the string */ 6897c478bd9Sstevel@tonic-gate 6907c478bd9Sstevel@tonic-gate for (--String; (*String++ = *SrcString++); ) 6917c478bd9Sstevel@tonic-gate { ; } 6927c478bd9Sstevel@tonic-gate 6937c478bd9Sstevel@tonic-gate return (DstString); 6947c478bd9Sstevel@tonic-gate } 6957c478bd9Sstevel@tonic-gate 6967c478bd9Sstevel@tonic-gate 6977c478bd9Sstevel@tonic-gate /******************************************************************************* 6987c478bd9Sstevel@tonic-gate * 6997b1019a6SJerry Jelinek * FUNCTION: strncat 7007c478bd9Sstevel@tonic-gate * 7017c478bd9Sstevel@tonic-gate * PARAMETERS: DstString - Target of the copy 7027c478bd9Sstevel@tonic-gate * SrcString - The source string to copy 7037c478bd9Sstevel@tonic-gate * Count - Maximum # of bytes to copy 7047c478bd9Sstevel@tonic-gate * 7057c478bd9Sstevel@tonic-gate * RETURN: DstString 7067c478bd9Sstevel@tonic-gate * 7077c478bd9Sstevel@tonic-gate * DESCRIPTION: Append a null terminated string to a null terminated string, 7087c478bd9Sstevel@tonic-gate * with a maximum count. 7097c478bd9Sstevel@tonic-gate * 7107c478bd9Sstevel@tonic-gate ******************************************************************************/ 7117c478bd9Sstevel@tonic-gate 7127c478bd9Sstevel@tonic-gate char * 7137b1019a6SJerry Jelinek strncat ( 7147c478bd9Sstevel@tonic-gate char *DstString, 7157c478bd9Sstevel@tonic-gate const char *SrcString, 7167c478bd9Sstevel@tonic-gate ACPI_SIZE Count) 7177c478bd9Sstevel@tonic-gate { 7187c478bd9Sstevel@tonic-gate char *String; 7197c478bd9Sstevel@tonic-gate 7207c478bd9Sstevel@tonic-gate 7217c478bd9Sstevel@tonic-gate if (Count) 7227c478bd9Sstevel@tonic-gate { 7237c478bd9Sstevel@tonic-gate /* Find end of the destination string */ 7247c478bd9Sstevel@tonic-gate 7257c478bd9Sstevel@tonic-gate for (String = DstString; *String++; ) 7267c478bd9Sstevel@tonic-gate { ; } 7277c478bd9Sstevel@tonic-gate 7287c478bd9Sstevel@tonic-gate /* Concatenate the string */ 7297c478bd9Sstevel@tonic-gate 7307c478bd9Sstevel@tonic-gate for (--String; (*String++ = *SrcString++) && --Count; ) 7317c478bd9Sstevel@tonic-gate { ; } 7327c478bd9Sstevel@tonic-gate 7337c478bd9Sstevel@tonic-gate /* Null terminate if necessary */ 7347c478bd9Sstevel@tonic-gate 7357c478bd9Sstevel@tonic-gate if (!Count) 7367c478bd9Sstevel@tonic-gate { 7377c478bd9Sstevel@tonic-gate *String = 0; 7387c478bd9Sstevel@tonic-gate } 7397c478bd9Sstevel@tonic-gate } 7407c478bd9Sstevel@tonic-gate 7417c478bd9Sstevel@tonic-gate return (DstString); 7427c478bd9Sstevel@tonic-gate } 7437c478bd9Sstevel@tonic-gate 7447c478bd9Sstevel@tonic-gate 7457c478bd9Sstevel@tonic-gate /******************************************************************************* 7467c478bd9Sstevel@tonic-gate * 7477b1019a6SJerry Jelinek * FUNCTION: strstr 7487c478bd9Sstevel@tonic-gate * 7497c478bd9Sstevel@tonic-gate * PARAMETERS: String1 - Target string 7507c478bd9Sstevel@tonic-gate * String2 - Substring to search for 7517c478bd9Sstevel@tonic-gate * 7527c478bd9Sstevel@tonic-gate * RETURN: Where substring match starts, Null if no match found 7537c478bd9Sstevel@tonic-gate * 7547c478bd9Sstevel@tonic-gate * DESCRIPTION: Checks if String2 occurs in String1. This is not really a 7557c478bd9Sstevel@tonic-gate * full implementation of strstr, only sufficient for command 7567c478bd9Sstevel@tonic-gate * matching 7577c478bd9Sstevel@tonic-gate * 7587c478bd9Sstevel@tonic-gate ******************************************************************************/ 7597c478bd9Sstevel@tonic-gate 7607c478bd9Sstevel@tonic-gate char * 7617b1019a6SJerry Jelinek strstr ( 7627c478bd9Sstevel@tonic-gate char *String1, 7637c478bd9Sstevel@tonic-gate char *String2) 7647c478bd9Sstevel@tonic-gate { 765*35786f68SRobert Mustacchi ACPI_SIZE Length; 7667c478bd9Sstevel@tonic-gate 7677c478bd9Sstevel@tonic-gate 7687b1019a6SJerry Jelinek Length = strlen (String2); 7697b1019a6SJerry Jelinek if (!Length) 7707c478bd9Sstevel@tonic-gate { 7717b1019a6SJerry Jelinek return (String1); 7727c478bd9Sstevel@tonic-gate } 7737c478bd9Sstevel@tonic-gate 7747b1019a6SJerry Jelinek while (strlen (String1) >= Length) 7757c478bd9Sstevel@tonic-gate { 7767b1019a6SJerry Jelinek if (memcmp (String1, String2, Length) == 0) 7777c478bd9Sstevel@tonic-gate { 7787b1019a6SJerry Jelinek return (String1); 7797c478bd9Sstevel@tonic-gate } 7807b1019a6SJerry Jelinek String1++; 7817c478bd9Sstevel@tonic-gate } 7827c478bd9Sstevel@tonic-gate 7837b1019a6SJerry Jelinek return (NULL); 7847c478bd9Sstevel@tonic-gate } 7857c478bd9Sstevel@tonic-gate 7867c478bd9Sstevel@tonic-gate 7877c478bd9Sstevel@tonic-gate /******************************************************************************* 7887c478bd9Sstevel@tonic-gate * 7897b1019a6SJerry Jelinek * FUNCTION: strtoul 7907c478bd9Sstevel@tonic-gate * 7917c478bd9Sstevel@tonic-gate * PARAMETERS: String - Null terminated string 7927c478bd9Sstevel@tonic-gate * Terminater - Where a pointer to the terminating byte is 7937c478bd9Sstevel@tonic-gate * returned 7947c478bd9Sstevel@tonic-gate * Base - Radix of the string 7957c478bd9Sstevel@tonic-gate * 7967c478bd9Sstevel@tonic-gate * RETURN: Converted value 7977c478bd9Sstevel@tonic-gate * 7987c478bd9Sstevel@tonic-gate * DESCRIPTION: Convert a string into a 32-bit unsigned value. 7997b1019a6SJerry Jelinek * Note: use strtoul64 for 64-bit integers. 8007c478bd9Sstevel@tonic-gate * 8017c478bd9Sstevel@tonic-gate ******************************************************************************/ 8027c478bd9Sstevel@tonic-gate 8037c478bd9Sstevel@tonic-gate UINT32 8047b1019a6SJerry Jelinek strtoul ( 8057c478bd9Sstevel@tonic-gate const char *String, 8067c478bd9Sstevel@tonic-gate char **Terminator, 8077c478bd9Sstevel@tonic-gate UINT32 Base) 8087c478bd9Sstevel@tonic-gate { 8097c478bd9Sstevel@tonic-gate UINT32 converted = 0; 8107c478bd9Sstevel@tonic-gate UINT32 index; 8117c478bd9Sstevel@tonic-gate UINT32 sign; 8127c478bd9Sstevel@tonic-gate const char *StringStart; 8137c478bd9Sstevel@tonic-gate UINT32 ReturnValue = 0; 8147c478bd9Sstevel@tonic-gate ACPI_STATUS Status = AE_OK; 8157c478bd9Sstevel@tonic-gate 8167c478bd9Sstevel@tonic-gate 8177c478bd9Sstevel@tonic-gate /* 8187c478bd9Sstevel@tonic-gate * Save the value of the pointer to the buffer's first 8197c478bd9Sstevel@tonic-gate * character, save the current errno value, and then 8207c478bd9Sstevel@tonic-gate * skip over any white space in the buffer: 8217c478bd9Sstevel@tonic-gate */ 8227c478bd9Sstevel@tonic-gate StringStart = String; 8237b1019a6SJerry Jelinek while (isspace (*String) || *String == '\t') 8247c478bd9Sstevel@tonic-gate { 8257c478bd9Sstevel@tonic-gate ++String; 8267c478bd9Sstevel@tonic-gate } 8277c478bd9Sstevel@tonic-gate 8287c478bd9Sstevel@tonic-gate /* 8297c478bd9Sstevel@tonic-gate * The buffer may contain an optional plus or minus sign. 8307c478bd9Sstevel@tonic-gate * If it does, then skip over it but remember what is was: 8317c478bd9Sstevel@tonic-gate */ 8327c478bd9Sstevel@tonic-gate if (*String == '-') 8337c478bd9Sstevel@tonic-gate { 8347b1019a6SJerry Jelinek sign = ACPI_SIGN_NEGATIVE; 8357c478bd9Sstevel@tonic-gate ++String; 8367c478bd9Sstevel@tonic-gate } 8377c478bd9Sstevel@tonic-gate else if (*String == '+') 8387c478bd9Sstevel@tonic-gate { 8397c478bd9Sstevel@tonic-gate ++String; 8407b1019a6SJerry Jelinek sign = ACPI_SIGN_POSITIVE; 8417c478bd9Sstevel@tonic-gate } 8427c478bd9Sstevel@tonic-gate else 8437c478bd9Sstevel@tonic-gate { 8447b1019a6SJerry Jelinek sign = ACPI_SIGN_POSITIVE; 8457c478bd9Sstevel@tonic-gate } 8467c478bd9Sstevel@tonic-gate 8477c478bd9Sstevel@tonic-gate /* 8487c478bd9Sstevel@tonic-gate * If the input parameter Base is zero, then we need to 8497c478bd9Sstevel@tonic-gate * determine if it is octal, decimal, or hexadecimal: 8507c478bd9Sstevel@tonic-gate */ 8517c478bd9Sstevel@tonic-gate if (Base == 0) 8527c478bd9Sstevel@tonic-gate { 8537c478bd9Sstevel@tonic-gate if (*String == '0') 8547c478bd9Sstevel@tonic-gate { 8557b1019a6SJerry Jelinek if (tolower (*(++String)) == 'x') 8567c478bd9Sstevel@tonic-gate { 8577c478bd9Sstevel@tonic-gate Base = 16; 8587c478bd9Sstevel@tonic-gate ++String; 8597c478bd9Sstevel@tonic-gate } 8607c478bd9Sstevel@tonic-gate else 8617c478bd9Sstevel@tonic-gate { 8627c478bd9Sstevel@tonic-gate Base = 8; 8637c478bd9Sstevel@tonic-gate } 8647c478bd9Sstevel@tonic-gate } 8657c478bd9Sstevel@tonic-gate else 8667c478bd9Sstevel@tonic-gate { 8677c478bd9Sstevel@tonic-gate Base = 10; 8687c478bd9Sstevel@tonic-gate } 8697c478bd9Sstevel@tonic-gate } 8707c478bd9Sstevel@tonic-gate else if (Base < 2 || Base > 36) 8717c478bd9Sstevel@tonic-gate { 8727c478bd9Sstevel@tonic-gate /* 8737c478bd9Sstevel@tonic-gate * The specified Base parameter is not in the domain of 8747c478bd9Sstevel@tonic-gate * this function: 8757c478bd9Sstevel@tonic-gate */ 8767c478bd9Sstevel@tonic-gate goto done; 8777c478bd9Sstevel@tonic-gate } 8787c478bd9Sstevel@tonic-gate 8797c478bd9Sstevel@tonic-gate /* 8807c478bd9Sstevel@tonic-gate * For octal and hexadecimal bases, skip over the leading 8817c478bd9Sstevel@tonic-gate * 0 or 0x, if they are present. 8827c478bd9Sstevel@tonic-gate */ 8837c478bd9Sstevel@tonic-gate if (Base == 8 && *String == '0') 8847c478bd9Sstevel@tonic-gate { 8857c478bd9Sstevel@tonic-gate String++; 8867c478bd9Sstevel@tonic-gate } 8877c478bd9Sstevel@tonic-gate 8887c478bd9Sstevel@tonic-gate if (Base == 16 && 8897c478bd9Sstevel@tonic-gate *String == '0' && 8907b1019a6SJerry Jelinek tolower (*(++String)) == 'x') 8917c478bd9Sstevel@tonic-gate { 8927c478bd9Sstevel@tonic-gate String++; 8937c478bd9Sstevel@tonic-gate } 8947c478bd9Sstevel@tonic-gate 8957c478bd9Sstevel@tonic-gate /* 8967c478bd9Sstevel@tonic-gate * Main loop: convert the string to an unsigned long: 8977c478bd9Sstevel@tonic-gate */ 8987c478bd9Sstevel@tonic-gate while (*String) 8997c478bd9Sstevel@tonic-gate { 9007b1019a6SJerry Jelinek if (isdigit (*String)) 9017c478bd9Sstevel@tonic-gate { 9027c478bd9Sstevel@tonic-gate index = (UINT32) ((UINT8) *String - '0'); 9037c478bd9Sstevel@tonic-gate } 9047c478bd9Sstevel@tonic-gate else 9057c478bd9Sstevel@tonic-gate { 9067b1019a6SJerry Jelinek index = (UINT32) toupper (*String); 9077b1019a6SJerry Jelinek if (isupper (index)) 9087c478bd9Sstevel@tonic-gate { 9097c478bd9Sstevel@tonic-gate index = index - 'A' + 10; 9107c478bd9Sstevel@tonic-gate } 9117c478bd9Sstevel@tonic-gate else 9127c478bd9Sstevel@tonic-gate { 9137c478bd9Sstevel@tonic-gate goto done; 9147c478bd9Sstevel@tonic-gate } 9157c478bd9Sstevel@tonic-gate } 9167c478bd9Sstevel@tonic-gate 9177c478bd9Sstevel@tonic-gate if (index >= Base) 9187c478bd9Sstevel@tonic-gate { 9197c478bd9Sstevel@tonic-gate goto done; 9207c478bd9Sstevel@tonic-gate } 9217c478bd9Sstevel@tonic-gate 9227c478bd9Sstevel@tonic-gate /* 9237c478bd9Sstevel@tonic-gate * Check to see if value is out of range: 9247c478bd9Sstevel@tonic-gate */ 9257c478bd9Sstevel@tonic-gate 9267c478bd9Sstevel@tonic-gate if (ReturnValue > ((ACPI_UINT32_MAX - (UINT32) index) / 9277c478bd9Sstevel@tonic-gate (UINT32) Base)) 9287c478bd9Sstevel@tonic-gate { 9297c478bd9Sstevel@tonic-gate Status = AE_ERROR; 9307c478bd9Sstevel@tonic-gate ReturnValue = 0; /* reset */ 9317c478bd9Sstevel@tonic-gate } 9327c478bd9Sstevel@tonic-gate else 9337c478bd9Sstevel@tonic-gate { 9347c478bd9Sstevel@tonic-gate ReturnValue *= Base; 9357c478bd9Sstevel@tonic-gate ReturnValue += index; 9367c478bd9Sstevel@tonic-gate converted = 1; 9377c478bd9Sstevel@tonic-gate } 9387c478bd9Sstevel@tonic-gate 9397c478bd9Sstevel@tonic-gate ++String; 9407c478bd9Sstevel@tonic-gate } 9417c478bd9Sstevel@tonic-gate 9427c478bd9Sstevel@tonic-gate done: 9437c478bd9Sstevel@tonic-gate /* 9447c478bd9Sstevel@tonic-gate * If appropriate, update the caller's pointer to the next 9457c478bd9Sstevel@tonic-gate * unconverted character in the buffer. 9467c478bd9Sstevel@tonic-gate */ 9477c478bd9Sstevel@tonic-gate if (Terminator) 9487c478bd9Sstevel@tonic-gate { 9497c478bd9Sstevel@tonic-gate if (converted == 0 && ReturnValue == 0 && String != NULL) 9507c478bd9Sstevel@tonic-gate { 9517c478bd9Sstevel@tonic-gate *Terminator = (char *) StringStart; 9527c478bd9Sstevel@tonic-gate } 9537c478bd9Sstevel@tonic-gate else 9547c478bd9Sstevel@tonic-gate { 9557c478bd9Sstevel@tonic-gate *Terminator = (char *) String; 9567c478bd9Sstevel@tonic-gate } 9577c478bd9Sstevel@tonic-gate } 9587c478bd9Sstevel@tonic-gate 9597c478bd9Sstevel@tonic-gate if (Status == AE_ERROR) 9607c478bd9Sstevel@tonic-gate { 9617c478bd9Sstevel@tonic-gate ReturnValue = ACPI_UINT32_MAX; 9627c478bd9Sstevel@tonic-gate } 9637c478bd9Sstevel@tonic-gate 9647c478bd9Sstevel@tonic-gate /* 9657c478bd9Sstevel@tonic-gate * If a minus sign was present, then "the conversion is negated": 9667c478bd9Sstevel@tonic-gate */ 9677b1019a6SJerry Jelinek if (sign == ACPI_SIGN_NEGATIVE) 9687c478bd9Sstevel@tonic-gate { 9697c478bd9Sstevel@tonic-gate ReturnValue = (ACPI_UINT32_MAX - ReturnValue) + 1; 9707c478bd9Sstevel@tonic-gate } 9717c478bd9Sstevel@tonic-gate 9727c478bd9Sstevel@tonic-gate return (ReturnValue); 9737c478bd9Sstevel@tonic-gate } 9747c478bd9Sstevel@tonic-gate 9757c478bd9Sstevel@tonic-gate 9767c478bd9Sstevel@tonic-gate /******************************************************************************* 9777c478bd9Sstevel@tonic-gate * 9787b1019a6SJerry Jelinek * FUNCTION: toupper 9797c478bd9Sstevel@tonic-gate * 9807c478bd9Sstevel@tonic-gate * PARAMETERS: c - Character to convert 9817c478bd9Sstevel@tonic-gate * 9827c478bd9Sstevel@tonic-gate * RETURN: Converted character as an int 9837c478bd9Sstevel@tonic-gate * 9847c478bd9Sstevel@tonic-gate * DESCRIPTION: Convert character to uppercase 9857c478bd9Sstevel@tonic-gate * 9867c478bd9Sstevel@tonic-gate ******************************************************************************/ 9877c478bd9Sstevel@tonic-gate 9887c478bd9Sstevel@tonic-gate int 9897b1019a6SJerry Jelinek toupper ( 9907c478bd9Sstevel@tonic-gate int c) 9917c478bd9Sstevel@tonic-gate { 9927c478bd9Sstevel@tonic-gate 9937b1019a6SJerry Jelinek return (islower(c) ? ((c)-0x20) : (c)); 9947c478bd9Sstevel@tonic-gate } 9957c478bd9Sstevel@tonic-gate 9967c478bd9Sstevel@tonic-gate 9977c478bd9Sstevel@tonic-gate /******************************************************************************* 9987c478bd9Sstevel@tonic-gate * 9997b1019a6SJerry Jelinek * FUNCTION: tolower 10007c478bd9Sstevel@tonic-gate * 10017c478bd9Sstevel@tonic-gate * PARAMETERS: c - Character to convert 10027c478bd9Sstevel@tonic-gate * 10037c478bd9Sstevel@tonic-gate * RETURN: Converted character as an int 10047c478bd9Sstevel@tonic-gate * 10057c478bd9Sstevel@tonic-gate * DESCRIPTION: Convert character to lowercase 10067c478bd9Sstevel@tonic-gate * 10077c478bd9Sstevel@tonic-gate ******************************************************************************/ 10087c478bd9Sstevel@tonic-gate 10097c478bd9Sstevel@tonic-gate int 10107b1019a6SJerry Jelinek tolower ( 10117c478bd9Sstevel@tonic-gate int c) 10127c478bd9Sstevel@tonic-gate { 10137c478bd9Sstevel@tonic-gate 10147b1019a6SJerry Jelinek return (isupper(c) ? ((c)+0x20) : (c)); 10157c478bd9Sstevel@tonic-gate } 10167c478bd9Sstevel@tonic-gate 10177c478bd9Sstevel@tonic-gate 10187c478bd9Sstevel@tonic-gate /******************************************************************************* 10197c478bd9Sstevel@tonic-gate * 10207b1019a6SJerry Jelinek * FUNCTION: is* function array 10217c478bd9Sstevel@tonic-gate * 10227c478bd9Sstevel@tonic-gate * DESCRIPTION: is* functions use the ctype table below 10237c478bd9Sstevel@tonic-gate * 10247c478bd9Sstevel@tonic-gate ******************************************************************************/ 10257c478bd9Sstevel@tonic-gate 10267b1019a6SJerry Jelinek const UINT8 AcpiGbl_Ctypes[257] = { 10277b1019a6SJerry Jelinek _ACPI_CN, /* 0x00 0 NUL */ 10287b1019a6SJerry Jelinek _ACPI_CN, /* 0x01 1 SOH */ 10297b1019a6SJerry Jelinek _ACPI_CN, /* 0x02 2 STX */ 10307b1019a6SJerry Jelinek _ACPI_CN, /* 0x03 3 ETX */ 10317b1019a6SJerry Jelinek _ACPI_CN, /* 0x04 4 EOT */ 10327b1019a6SJerry Jelinek _ACPI_CN, /* 0x05 5 ENQ */ 10337b1019a6SJerry Jelinek _ACPI_CN, /* 0x06 6 ACK */ 10347b1019a6SJerry Jelinek _ACPI_CN, /* 0x07 7 BEL */ 10357b1019a6SJerry Jelinek _ACPI_CN, /* 0x08 8 BS */ 10367b1019a6SJerry Jelinek _ACPI_CN|_ACPI_SP, /* 0x09 9 TAB */ 10377b1019a6SJerry Jelinek _ACPI_CN|_ACPI_SP, /* 0x0A 10 LF */ 10387b1019a6SJerry Jelinek _ACPI_CN|_ACPI_SP, /* 0x0B 11 VT */ 10397b1019a6SJerry Jelinek _ACPI_CN|_ACPI_SP, /* 0x0C 12 FF */ 10407b1019a6SJerry Jelinek _ACPI_CN|_ACPI_SP, /* 0x0D 13 CR */ 10417b1019a6SJerry Jelinek _ACPI_CN, /* 0x0E 14 SO */ 10427b1019a6SJerry Jelinek _ACPI_CN, /* 0x0F 15 SI */ 10437b1019a6SJerry Jelinek _ACPI_CN, /* 0x10 16 DLE */ 10447b1019a6SJerry Jelinek _ACPI_CN, /* 0x11 17 DC1 */ 10457b1019a6SJerry Jelinek _ACPI_CN, /* 0x12 18 DC2 */ 10467b1019a6SJerry Jelinek _ACPI_CN, /* 0x13 19 DC3 */ 10477b1019a6SJerry Jelinek _ACPI_CN, /* 0x14 20 DC4 */ 10487b1019a6SJerry Jelinek _ACPI_CN, /* 0x15 21 NAK */ 10497b1019a6SJerry Jelinek _ACPI_CN, /* 0x16 22 SYN */ 10507b1019a6SJerry Jelinek _ACPI_CN, /* 0x17 23 ETB */ 10517b1019a6SJerry Jelinek _ACPI_CN, /* 0x18 24 CAN */ 10527b1019a6SJerry Jelinek _ACPI_CN, /* 0x19 25 EM */ 10537b1019a6SJerry Jelinek _ACPI_CN, /* 0x1A 26 SUB */ 10547b1019a6SJerry Jelinek _ACPI_CN, /* 0x1B 27 ESC */ 10557b1019a6SJerry Jelinek _ACPI_CN, /* 0x1C 28 FS */ 10567b1019a6SJerry Jelinek _ACPI_CN, /* 0x1D 29 GS */ 10577b1019a6SJerry Jelinek _ACPI_CN, /* 0x1E 30 RS */ 10587b1019a6SJerry Jelinek _ACPI_CN, /* 0x1F 31 US */ 10597b1019a6SJerry Jelinek _ACPI_XS|_ACPI_SP, /* 0x20 32 ' ' */ 10607b1019a6SJerry Jelinek _ACPI_PU, /* 0x21 33 '!' */ 10617b1019a6SJerry Jelinek _ACPI_PU, /* 0x22 34 '"' */ 10627b1019a6SJerry Jelinek _ACPI_PU, /* 0x23 35 '#' */ 10637b1019a6SJerry Jelinek _ACPI_PU, /* 0x24 36 '$' */ 10647b1019a6SJerry Jelinek _ACPI_PU, /* 0x25 37 '%' */ 10657b1019a6SJerry Jelinek _ACPI_PU, /* 0x26 38 '&' */ 10667b1019a6SJerry Jelinek _ACPI_PU, /* 0x27 39 ''' */ 10677b1019a6SJerry Jelinek _ACPI_PU, /* 0x28 40 '(' */ 10687b1019a6SJerry Jelinek _ACPI_PU, /* 0x29 41 ')' */ 10697b1019a6SJerry Jelinek _ACPI_PU, /* 0x2A 42 '*' */ 10707b1019a6SJerry Jelinek _ACPI_PU, /* 0x2B 43 '+' */ 10717b1019a6SJerry Jelinek _ACPI_PU, /* 0x2C 44 ',' */ 10727b1019a6SJerry Jelinek _ACPI_PU, /* 0x2D 45 '-' */ 10737b1019a6SJerry Jelinek _ACPI_PU, /* 0x2E 46 '.' */ 10747b1019a6SJerry Jelinek _ACPI_PU, /* 0x2F 47 '/' */ 10757b1019a6SJerry Jelinek _ACPI_XD|_ACPI_DI, /* 0x30 48 '0' */ 10767b1019a6SJerry Jelinek _ACPI_XD|_ACPI_DI, /* 0x31 49 '1' */ 10777b1019a6SJerry Jelinek _ACPI_XD|_ACPI_DI, /* 0x32 50 '2' */ 10787b1019a6SJerry Jelinek _ACPI_XD|_ACPI_DI, /* 0x33 51 '3' */ 10797b1019a6SJerry Jelinek _ACPI_XD|_ACPI_DI, /* 0x34 52 '4' */ 10807b1019a6SJerry Jelinek _ACPI_XD|_ACPI_DI, /* 0x35 53 '5' */ 10817b1019a6SJerry Jelinek _ACPI_XD|_ACPI_DI, /* 0x36 54 '6' */ 10827b1019a6SJerry Jelinek _ACPI_XD|_ACPI_DI, /* 0x37 55 '7' */ 10837b1019a6SJerry Jelinek _ACPI_XD|_ACPI_DI, /* 0x38 56 '8' */ 10847b1019a6SJerry Jelinek _ACPI_XD|_ACPI_DI, /* 0x39 57 '9' */ 10857b1019a6SJerry Jelinek _ACPI_PU, /* 0x3A 58 ':' */ 10867b1019a6SJerry Jelinek _ACPI_PU, /* 0x3B 59 ';' */ 10877b1019a6SJerry Jelinek _ACPI_PU, /* 0x3C 60 '<' */ 10887b1019a6SJerry Jelinek _ACPI_PU, /* 0x3D 61 '=' */ 10897b1019a6SJerry Jelinek _ACPI_PU, /* 0x3E 62 '>' */ 10907b1019a6SJerry Jelinek _ACPI_PU, /* 0x3F 63 '?' */ 10917b1019a6SJerry Jelinek _ACPI_PU, /* 0x40 64 '@' */ 10927b1019a6SJerry Jelinek _ACPI_XD|_ACPI_UP, /* 0x41 65 'A' */ 10937b1019a6SJerry Jelinek _ACPI_XD|_ACPI_UP, /* 0x42 66 'B' */ 10947b1019a6SJerry Jelinek _ACPI_XD|_ACPI_UP, /* 0x43 67 'C' */ 10957b1019a6SJerry Jelinek _ACPI_XD|_ACPI_UP, /* 0x44 68 'D' */ 10967b1019a6SJerry Jelinek _ACPI_XD|_ACPI_UP, /* 0x45 69 'E' */ 10977b1019a6SJerry Jelinek _ACPI_XD|_ACPI_UP, /* 0x46 70 'F' */ 10987b1019a6SJerry Jelinek _ACPI_UP, /* 0x47 71 'G' */ 10997b1019a6SJerry Jelinek _ACPI_UP, /* 0x48 72 'H' */ 11007b1019a6SJerry Jelinek _ACPI_UP, /* 0x49 73 'I' */ 11017b1019a6SJerry Jelinek _ACPI_UP, /* 0x4A 74 'J' */ 11027b1019a6SJerry Jelinek _ACPI_UP, /* 0x4B 75 'K' */ 11037b1019a6SJerry Jelinek _ACPI_UP, /* 0x4C 76 'L' */ 11047b1019a6SJerry Jelinek _ACPI_UP, /* 0x4D 77 'M' */ 11057b1019a6SJerry Jelinek _ACPI_UP, /* 0x4E 78 'N' */ 11067b1019a6SJerry Jelinek _ACPI_UP, /* 0x4F 79 'O' */ 11077b1019a6SJerry Jelinek _ACPI_UP, /* 0x50 80 'P' */ 11087b1019a6SJerry Jelinek _ACPI_UP, /* 0x51 81 'Q' */ 11097b1019a6SJerry Jelinek _ACPI_UP, /* 0x52 82 'R' */ 11107b1019a6SJerry Jelinek _ACPI_UP, /* 0x53 83 'S' */ 11117b1019a6SJerry Jelinek _ACPI_UP, /* 0x54 84 'T' */ 11127b1019a6SJerry Jelinek _ACPI_UP, /* 0x55 85 'U' */ 11137b1019a6SJerry Jelinek _ACPI_UP, /* 0x56 86 'V' */ 11147b1019a6SJerry Jelinek _ACPI_UP, /* 0x57 87 'W' */ 11157b1019a6SJerry Jelinek _ACPI_UP, /* 0x58 88 'X' */ 11167b1019a6SJerry Jelinek _ACPI_UP, /* 0x59 89 'Y' */ 11177b1019a6SJerry Jelinek _ACPI_UP, /* 0x5A 90 'Z' */ 11187b1019a6SJerry Jelinek _ACPI_PU, /* 0x5B 91 '[' */ 11197b1019a6SJerry Jelinek _ACPI_PU, /* 0x5C 92 '\' */ 11207b1019a6SJerry Jelinek _ACPI_PU, /* 0x5D 93 ']' */ 11217b1019a6SJerry Jelinek _ACPI_PU, /* 0x5E 94 '^' */ 11227b1019a6SJerry Jelinek _ACPI_PU, /* 0x5F 95 '_' */ 11237b1019a6SJerry Jelinek _ACPI_PU, /* 0x60 96 '`' */ 11247b1019a6SJerry Jelinek _ACPI_XD|_ACPI_LO, /* 0x61 97 'a' */ 11257b1019a6SJerry Jelinek _ACPI_XD|_ACPI_LO, /* 0x62 98 'b' */ 11267b1019a6SJerry Jelinek _ACPI_XD|_ACPI_LO, /* 0x63 99 'c' */ 11277b1019a6SJerry Jelinek _ACPI_XD|_ACPI_LO, /* 0x64 100 'd' */ 11287b1019a6SJerry Jelinek _ACPI_XD|_ACPI_LO, /* 0x65 101 'e' */ 11297b1019a6SJerry Jelinek _ACPI_XD|_ACPI_LO, /* 0x66 102 'f' */ 11307b1019a6SJerry Jelinek _ACPI_LO, /* 0x67 103 'g' */ 11317b1019a6SJerry Jelinek _ACPI_LO, /* 0x68 104 'h' */ 11327b1019a6SJerry Jelinek _ACPI_LO, /* 0x69 105 'i' */ 11337b1019a6SJerry Jelinek _ACPI_LO, /* 0x6A 106 'j' */ 11347b1019a6SJerry Jelinek _ACPI_LO, /* 0x6B 107 'k' */ 11357b1019a6SJerry Jelinek _ACPI_LO, /* 0x6C 108 'l' */ 11367b1019a6SJerry Jelinek _ACPI_LO, /* 0x6D 109 'm' */ 11377b1019a6SJerry Jelinek _ACPI_LO, /* 0x6E 110 'n' */ 11387b1019a6SJerry Jelinek _ACPI_LO, /* 0x6F 111 'o' */ 11397b1019a6SJerry Jelinek _ACPI_LO, /* 0x70 112 'p' */ 11407b1019a6SJerry Jelinek _ACPI_LO, /* 0x71 113 'q' */ 11417b1019a6SJerry Jelinek _ACPI_LO, /* 0x72 114 'r' */ 11427b1019a6SJerry Jelinek _ACPI_LO, /* 0x73 115 's' */ 11437b1019a6SJerry Jelinek _ACPI_LO, /* 0x74 116 't' */ 11447b1019a6SJerry Jelinek _ACPI_LO, /* 0x75 117 'u' */ 11457b1019a6SJerry Jelinek _ACPI_LO, /* 0x76 118 'v' */ 11467b1019a6SJerry Jelinek _ACPI_LO, /* 0x77 119 'w' */ 11477b1019a6SJerry Jelinek _ACPI_LO, /* 0x78 120 'x' */ 11487b1019a6SJerry Jelinek _ACPI_LO, /* 0x79 121 'y' */ 11497b1019a6SJerry Jelinek _ACPI_LO, /* 0x7A 122 'z' */ 11507b1019a6SJerry Jelinek _ACPI_PU, /* 0x7B 123 '{' */ 11517b1019a6SJerry Jelinek _ACPI_PU, /* 0x7C 124 '|' */ 11527b1019a6SJerry Jelinek _ACPI_PU, /* 0x7D 125 '}' */ 11537b1019a6SJerry Jelinek _ACPI_PU, /* 0x7E 126 '~' */ 11547b1019a6SJerry Jelinek _ACPI_CN, /* 0x7F 127 DEL */ 11557c478bd9Sstevel@tonic-gate 11567c478bd9Sstevel@tonic-gate 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x80 to 0x8F */ 11577c478bd9Sstevel@tonic-gate 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x90 to 0x9F */ 11587c478bd9Sstevel@tonic-gate 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0xA0 to 0xAF */ 11597c478bd9Sstevel@tonic-gate 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0xB0 to 0xBF */ 11607c478bd9Sstevel@tonic-gate 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0xC0 to 0xCF */ 11617c478bd9Sstevel@tonic-gate 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0xD0 to 0xDF */ 11627c478bd9Sstevel@tonic-gate 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0xE0 to 0xEF */ 11637b1019a6SJerry Jelinek 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0xF0 to 0xFF */ 11647b1019a6SJerry Jelinek 0 /* 0x100 */ 11657c478bd9Sstevel@tonic-gate }; 11667c478bd9Sstevel@tonic-gate 11677c478bd9Sstevel@tonic-gate 11687c478bd9Sstevel@tonic-gate #endif /* ACPI_USE_SYSTEM_CLIBRARY */ 1169