1*f8146b88SJung-uk Kim /****************************************************************************** 2*f8146b88SJung-uk Kim * 3*f8146b88SJung-uk Kim * Module Name: utascii - Utility ascii functions 4*f8146b88SJung-uk Kim * 5*f8146b88SJung-uk Kim *****************************************************************************/ 6*f8146b88SJung-uk Kim 7*f8146b88SJung-uk Kim /* 8*f8146b88SJung-uk Kim * Copyright (C) 2000 - 2016, Intel Corp. 9*f8146b88SJung-uk Kim * All rights reserved. 10*f8146b88SJung-uk Kim * 11*f8146b88SJung-uk Kim * Redistribution and use in source and binary forms, with or without 12*f8146b88SJung-uk Kim * modification, are permitted provided that the following conditions 13*f8146b88SJung-uk Kim * are met: 14*f8146b88SJung-uk Kim * 1. Redistributions of source code must retain the above copyright 15*f8146b88SJung-uk Kim * notice, this list of conditions, and the following disclaimer, 16*f8146b88SJung-uk Kim * without modification. 17*f8146b88SJung-uk Kim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18*f8146b88SJung-uk Kim * substantially similar to the "NO WARRANTY" disclaimer below 19*f8146b88SJung-uk Kim * ("Disclaimer") and any redistribution must be conditioned upon 20*f8146b88SJung-uk Kim * including a substantially similar Disclaimer requirement for further 21*f8146b88SJung-uk Kim * binary redistribution. 22*f8146b88SJung-uk Kim * 3. Neither the names of the above-listed copyright holders nor the names 23*f8146b88SJung-uk Kim * of any contributors may be used to endorse or promote products derived 24*f8146b88SJung-uk Kim * from this software without specific prior written permission. 25*f8146b88SJung-uk Kim * 26*f8146b88SJung-uk Kim * Alternatively, this software may be distributed under the terms of the 27*f8146b88SJung-uk Kim * GNU General Public License ("GPL") version 2 as published by the Free 28*f8146b88SJung-uk Kim * Software Foundation. 29*f8146b88SJung-uk Kim * 30*f8146b88SJung-uk Kim * NO WARRANTY 31*f8146b88SJung-uk Kim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32*f8146b88SJung-uk Kim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33*f8146b88SJung-uk Kim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34*f8146b88SJung-uk Kim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35*f8146b88SJung-uk Kim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36*f8146b88SJung-uk Kim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37*f8146b88SJung-uk Kim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38*f8146b88SJung-uk Kim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39*f8146b88SJung-uk Kim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40*f8146b88SJung-uk Kim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41*f8146b88SJung-uk Kim * POSSIBILITY OF SUCH DAMAGES. 42*f8146b88SJung-uk Kim */ 43*f8146b88SJung-uk Kim 44*f8146b88SJung-uk Kim #include <contrib/dev/acpica/include/acpi.h> 45*f8146b88SJung-uk Kim #include <contrib/dev/acpica/include/accommon.h> 46*f8146b88SJung-uk Kim 47*f8146b88SJung-uk Kim 48*f8146b88SJung-uk Kim /******************************************************************************* 49*f8146b88SJung-uk Kim * 50*f8146b88SJung-uk Kim * FUNCTION: AcpiUtValidNameseg 51*f8146b88SJung-uk Kim * 52*f8146b88SJung-uk Kim * PARAMETERS: Name - The name or table signature to be examined. 53*f8146b88SJung-uk Kim * Four characters, does not have to be a 54*f8146b88SJung-uk Kim * NULL terminated string. 55*f8146b88SJung-uk Kim * 56*f8146b88SJung-uk Kim * RETURN: TRUE if signature is has 4 valid ACPI characters 57*f8146b88SJung-uk Kim * 58*f8146b88SJung-uk Kim * DESCRIPTION: Validate an ACPI table signature. 59*f8146b88SJung-uk Kim * 60*f8146b88SJung-uk Kim ******************************************************************************/ 61*f8146b88SJung-uk Kim 62*f8146b88SJung-uk Kim BOOLEAN 63*f8146b88SJung-uk Kim AcpiUtValidNameseg ( 64*f8146b88SJung-uk Kim char *Name) 65*f8146b88SJung-uk Kim { 66*f8146b88SJung-uk Kim UINT32 i; 67*f8146b88SJung-uk Kim 68*f8146b88SJung-uk Kim 69*f8146b88SJung-uk Kim /* Validate each character in the signature */ 70*f8146b88SJung-uk Kim 71*f8146b88SJung-uk Kim for (i = 0; i < ACPI_NAME_SIZE; i++) 72*f8146b88SJung-uk Kim { 73*f8146b88SJung-uk Kim if (!AcpiUtValidNameChar (Name[i], i)) 74*f8146b88SJung-uk Kim { 75*f8146b88SJung-uk Kim return (FALSE); 76*f8146b88SJung-uk Kim } 77*f8146b88SJung-uk Kim } 78*f8146b88SJung-uk Kim 79*f8146b88SJung-uk Kim return (TRUE); 80*f8146b88SJung-uk Kim } 81*f8146b88SJung-uk Kim 82*f8146b88SJung-uk Kim 83*f8146b88SJung-uk Kim /******************************************************************************* 84*f8146b88SJung-uk Kim * 85*f8146b88SJung-uk Kim * FUNCTION: AcpiUtValidNameChar 86*f8146b88SJung-uk Kim * 87*f8146b88SJung-uk Kim * PARAMETERS: Char - The character to be examined 88*f8146b88SJung-uk Kim * Position - Byte position (0-3) 89*f8146b88SJung-uk Kim * 90*f8146b88SJung-uk Kim * RETURN: TRUE if the character is valid, FALSE otherwise 91*f8146b88SJung-uk Kim * 92*f8146b88SJung-uk Kim * DESCRIPTION: Check for a valid ACPI character. Must be one of: 93*f8146b88SJung-uk Kim * 1) Upper case alpha 94*f8146b88SJung-uk Kim * 2) numeric 95*f8146b88SJung-uk Kim * 3) underscore 96*f8146b88SJung-uk Kim * 97*f8146b88SJung-uk Kim * We allow a '!' as the last character because of the ASF! table 98*f8146b88SJung-uk Kim * 99*f8146b88SJung-uk Kim ******************************************************************************/ 100*f8146b88SJung-uk Kim 101*f8146b88SJung-uk Kim BOOLEAN 102*f8146b88SJung-uk Kim AcpiUtValidNameChar ( 103*f8146b88SJung-uk Kim char Character, 104*f8146b88SJung-uk Kim UINT32 Position) 105*f8146b88SJung-uk Kim { 106*f8146b88SJung-uk Kim 107*f8146b88SJung-uk Kim if (!((Character >= 'A' && Character <= 'Z') || 108*f8146b88SJung-uk Kim (Character >= '0' && Character <= '9') || 109*f8146b88SJung-uk Kim (Character == '_'))) 110*f8146b88SJung-uk Kim { 111*f8146b88SJung-uk Kim /* Allow a '!' in the last position */ 112*f8146b88SJung-uk Kim 113*f8146b88SJung-uk Kim if (Character == '!' && Position == 3) 114*f8146b88SJung-uk Kim { 115*f8146b88SJung-uk Kim return (TRUE); 116*f8146b88SJung-uk Kim } 117*f8146b88SJung-uk Kim 118*f8146b88SJung-uk Kim return (FALSE); 119*f8146b88SJung-uk Kim } 120*f8146b88SJung-uk Kim 121*f8146b88SJung-uk Kim return (TRUE); 122*f8146b88SJung-uk Kim } 123*f8146b88SJung-uk Kim 124*f8146b88SJung-uk Kim 125*f8146b88SJung-uk Kim /******************************************************************************* 126*f8146b88SJung-uk Kim * 127*f8146b88SJung-uk Kim * FUNCTION: AcpiUtCheckAndRepairAscii 128*f8146b88SJung-uk Kim * 129*f8146b88SJung-uk Kim * PARAMETERS: Name - Ascii string 130*f8146b88SJung-uk Kim * Count - Number of characters to check 131*f8146b88SJung-uk Kim * 132*f8146b88SJung-uk Kim * RETURN: None 133*f8146b88SJung-uk Kim * 134*f8146b88SJung-uk Kim * DESCRIPTION: Ensure that the requested number of characters are printable 135*f8146b88SJung-uk Kim * Ascii characters. Sets non-printable and null chars to <space>. 136*f8146b88SJung-uk Kim * 137*f8146b88SJung-uk Kim ******************************************************************************/ 138*f8146b88SJung-uk Kim 139*f8146b88SJung-uk Kim void 140*f8146b88SJung-uk Kim AcpiUtCheckAndRepairAscii ( 141*f8146b88SJung-uk Kim UINT8 *Name, 142*f8146b88SJung-uk Kim char *RepairedName, 143*f8146b88SJung-uk Kim UINT32 Count) 144*f8146b88SJung-uk Kim { 145*f8146b88SJung-uk Kim UINT32 i; 146*f8146b88SJung-uk Kim 147*f8146b88SJung-uk Kim 148*f8146b88SJung-uk Kim for (i = 0; i < Count; i++) 149*f8146b88SJung-uk Kim { 150*f8146b88SJung-uk Kim RepairedName[i] = (char) Name[i]; 151*f8146b88SJung-uk Kim 152*f8146b88SJung-uk Kim if (!Name[i]) 153*f8146b88SJung-uk Kim { 154*f8146b88SJung-uk Kim return; 155*f8146b88SJung-uk Kim } 156*f8146b88SJung-uk Kim if (!isprint (Name[i])) 157*f8146b88SJung-uk Kim { 158*f8146b88SJung-uk Kim RepairedName[i] = ' '; 159*f8146b88SJung-uk Kim } 160*f8146b88SJung-uk Kim } 161*f8146b88SJung-uk Kim } 162