1d244b227SJung-uk Kim /****************************************************************************** 2d244b227SJung-uk Kim * 3d244b227SJung-uk Kim * Module Name: asluuid-- compiler UUID support 4d244b227SJung-uk Kim * 5d244b227SJung-uk Kim *****************************************************************************/ 6d244b227SJung-uk Kim 7d244b227SJung-uk Kim /* 8*313a0c13SJung-uk Kim * Copyright (C) 2000 - 2014, Intel Corp. 9d244b227SJung-uk Kim * All rights reserved. 10d244b227SJung-uk Kim * 11d244b227SJung-uk Kim * Redistribution and use in source and binary forms, with or without 12d244b227SJung-uk Kim * modification, are permitted provided that the following conditions 13d244b227SJung-uk Kim * are met: 14d244b227SJung-uk Kim * 1. Redistributions of source code must retain the above copyright 15d244b227SJung-uk Kim * notice, this list of conditions, and the following disclaimer, 16d244b227SJung-uk Kim * without modification. 17d244b227SJung-uk Kim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18d244b227SJung-uk Kim * substantially similar to the "NO WARRANTY" disclaimer below 19d244b227SJung-uk Kim * ("Disclaimer") and any redistribution must be conditioned upon 20d244b227SJung-uk Kim * including a substantially similar Disclaimer requirement for further 21d244b227SJung-uk Kim * binary redistribution. 22d244b227SJung-uk Kim * 3. Neither the names of the above-listed copyright holders nor the names 23d244b227SJung-uk Kim * of any contributors may be used to endorse or promote products derived 24d244b227SJung-uk Kim * from this software without specific prior written permission. 25d244b227SJung-uk Kim * 26d244b227SJung-uk Kim * Alternatively, this software may be distributed under the terms of the 27d244b227SJung-uk Kim * GNU General Public License ("GPL") version 2 as published by the Free 28d244b227SJung-uk Kim * Software Foundation. 29d244b227SJung-uk Kim * 30d244b227SJung-uk Kim * NO WARRANTY 31d244b227SJung-uk Kim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32d244b227SJung-uk Kim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33d244b227SJung-uk Kim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34d244b227SJung-uk Kim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35d244b227SJung-uk Kim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36d244b227SJung-uk Kim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37d244b227SJung-uk Kim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38d244b227SJung-uk Kim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39d244b227SJung-uk Kim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40d244b227SJung-uk Kim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41d244b227SJung-uk Kim * POSSIBILITY OF SUCH DAMAGES. 42d244b227SJung-uk Kim */ 43d244b227SJung-uk Kim 44d244b227SJung-uk Kim #include <contrib/dev/acpica/compiler/aslcompiler.h> 45d244b227SJung-uk Kim 46d244b227SJung-uk Kim #define _COMPONENT ACPI_COMPILER 47d244b227SJung-uk Kim ACPI_MODULE_NAME ("asluuid") 48d244b227SJung-uk Kim 49d244b227SJung-uk Kim 50*313a0c13SJung-uk Kim extern UINT8 AcpiGbl_MapToUuidOffset[UUID_BUFFER_LENGTH]; 51d244b227SJung-uk Kim 52d244b227SJung-uk Kim 53d244b227SJung-uk Kim /******************************************************************************* 54d244b227SJung-uk Kim * 55d244b227SJung-uk Kim * FUNCTION: AuValiduateUuid 56d244b227SJung-uk Kim * 57d244b227SJung-uk Kim * PARAMETERS: InString - 36-byte formatted UUID string 58d244b227SJung-uk Kim * 59d244b227SJung-uk Kim * RETURN: Status 60d244b227SJung-uk Kim * 61d244b227SJung-uk Kim * DESCRIPTION: Check all 36 characters for correct format 62d244b227SJung-uk Kim * 63d244b227SJung-uk Kim ******************************************************************************/ 64d244b227SJung-uk Kim 65d244b227SJung-uk Kim ACPI_STATUS 66d244b227SJung-uk Kim AuValidateUuid ( 67d244b227SJung-uk Kim char *InString) 68d244b227SJung-uk Kim { 69d244b227SJung-uk Kim UINT32 i; 70d244b227SJung-uk Kim 71d244b227SJung-uk Kim 72d244b227SJung-uk Kim if (!InString || (ACPI_STRLEN (InString) != UUID_STRING_LENGTH)) 73d244b227SJung-uk Kim { 74d244b227SJung-uk Kim return (AE_BAD_PARAMETER); 75d244b227SJung-uk Kim } 76d244b227SJung-uk Kim 77d244b227SJung-uk Kim /* Check all 36 characters for correct format */ 78d244b227SJung-uk Kim 79d244b227SJung-uk Kim for (i = 0; i < UUID_STRING_LENGTH; i++) 80d244b227SJung-uk Kim { 81d244b227SJung-uk Kim /* Must have 4 hyphens (dashes) in these positions: */ 82d244b227SJung-uk Kim 83d244b227SJung-uk Kim if ((i == UUID_HYPHEN1_OFFSET) || 84d244b227SJung-uk Kim (i == UUID_HYPHEN2_OFFSET) || 85d244b227SJung-uk Kim (i == UUID_HYPHEN3_OFFSET) || 86d244b227SJung-uk Kim (i == UUID_HYPHEN4_OFFSET)) 87d244b227SJung-uk Kim { 88d244b227SJung-uk Kim if (InString[i] != '-') 89d244b227SJung-uk Kim { 90d244b227SJung-uk Kim return (AE_BAD_PARAMETER); 91d244b227SJung-uk Kim } 92d244b227SJung-uk Kim } 93d244b227SJung-uk Kim 94d244b227SJung-uk Kim /* All other positions must contain hex digits */ 95d244b227SJung-uk Kim 96d244b227SJung-uk Kim else 97d244b227SJung-uk Kim { 98d244b227SJung-uk Kim if (!isxdigit ((int) InString[i])) 99d244b227SJung-uk Kim { 100d244b227SJung-uk Kim return (AE_BAD_PARAMETER); 101d244b227SJung-uk Kim } 102d244b227SJung-uk Kim } 103d244b227SJung-uk Kim } 104d244b227SJung-uk Kim 105d244b227SJung-uk Kim return (AE_OK); 106d244b227SJung-uk Kim } 107d244b227SJung-uk Kim 108d244b227SJung-uk Kim 109d244b227SJung-uk Kim /******************************************************************************* 110d244b227SJung-uk Kim * 111d244b227SJung-uk Kim * FUNCTION: AuConvertUuidToString 112d244b227SJung-uk Kim * 113d244b227SJung-uk Kim * PARAMETERS: UuidBuffer - 16-byte UUID buffer 114d244b227SJung-uk Kim * OutString - 36-byte formatted UUID string 115d244b227SJung-uk Kim * 116d244b227SJung-uk Kim * RETURN: Status 117d244b227SJung-uk Kim * 118d244b227SJung-uk Kim * DESCRIPTION: Convert 16-byte UUID buffer to 36-byte formatted UUID string 119d244b227SJung-uk Kim * OutString must be 37 bytes to include null terminator. 120d244b227SJung-uk Kim * 121d244b227SJung-uk Kim ******************************************************************************/ 122d244b227SJung-uk Kim 123d244b227SJung-uk Kim ACPI_STATUS 124d244b227SJung-uk Kim AuConvertUuidToString ( 125d244b227SJung-uk Kim char *UuidBuffer, 126d244b227SJung-uk Kim char *OutString) 127d244b227SJung-uk Kim { 128d244b227SJung-uk Kim UINT32 i; 129d244b227SJung-uk Kim 130d244b227SJung-uk Kim 131d244b227SJung-uk Kim if (!UuidBuffer || !OutString) 132d244b227SJung-uk Kim { 133d244b227SJung-uk Kim return (AE_BAD_PARAMETER); 134d244b227SJung-uk Kim } 135d244b227SJung-uk Kim 136d244b227SJung-uk Kim for (i = 0; i < UUID_BUFFER_LENGTH; i++) 137d244b227SJung-uk Kim { 138*313a0c13SJung-uk Kim OutString[AcpiGbl_MapToUuidOffset[i]] = 139*313a0c13SJung-uk Kim AcpiUtHexToAsciiChar (UuidBuffer[i], 4); 140*313a0c13SJung-uk Kim 141*313a0c13SJung-uk Kim OutString[AcpiGbl_MapToUuidOffset[i] + 1] = 142*313a0c13SJung-uk Kim AcpiUtHexToAsciiChar (UuidBuffer[i], 0); 143d244b227SJung-uk Kim } 144d244b227SJung-uk Kim 145d244b227SJung-uk Kim /* Insert required hyphens (dashes) */ 146d244b227SJung-uk Kim 147d244b227SJung-uk Kim OutString[UUID_HYPHEN1_OFFSET] = 148d244b227SJung-uk Kim OutString[UUID_HYPHEN2_OFFSET] = 149d244b227SJung-uk Kim OutString[UUID_HYPHEN3_OFFSET] = 150d244b227SJung-uk Kim OutString[UUID_HYPHEN4_OFFSET] = '-'; 151d244b227SJung-uk Kim 152d244b227SJung-uk Kim OutString[UUID_STRING_LENGTH] = 0; /* Null terminate */ 153d244b227SJung-uk Kim return (AE_OK); 154d244b227SJung-uk Kim } 155