1313a0c13SJung-uk Kim /****************************************************************************** 2313a0c13SJung-uk Kim * 3313a0c13SJung-uk Kim * Module Name: utuuid -- UUID support functions 4313a0c13SJung-uk Kim * 5313a0c13SJung-uk Kim *****************************************************************************/ 6313a0c13SJung-uk Kim 7313a0c13SJung-uk Kim /* 8*1c0e1b6dSJung-uk Kim * Copyright (C) 2000 - 2015, Intel Corp. 9313a0c13SJung-uk Kim * All rights reserved. 10313a0c13SJung-uk Kim * 11313a0c13SJung-uk Kim * Redistribution and use in source and binary forms, with or without 12313a0c13SJung-uk Kim * modification, are permitted provided that the following conditions 13313a0c13SJung-uk Kim * are met: 14313a0c13SJung-uk Kim * 1. Redistributions of source code must retain the above copyright 15313a0c13SJung-uk Kim * notice, this list of conditions, and the following disclaimer, 16313a0c13SJung-uk Kim * without modification. 17313a0c13SJung-uk Kim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18313a0c13SJung-uk Kim * substantially similar to the "NO WARRANTY" disclaimer below 19313a0c13SJung-uk Kim * ("Disclaimer") and any redistribution must be conditioned upon 20313a0c13SJung-uk Kim * including a substantially similar Disclaimer requirement for further 21313a0c13SJung-uk Kim * binary redistribution. 22313a0c13SJung-uk Kim * 3. Neither the names of the above-listed copyright holders nor the names 23313a0c13SJung-uk Kim * of any contributors may be used to endorse or promote products derived 24313a0c13SJung-uk Kim * from this software without specific prior written permission. 25313a0c13SJung-uk Kim * 26313a0c13SJung-uk Kim * Alternatively, this software may be distributed under the terms of the 27313a0c13SJung-uk Kim * GNU General Public License ("GPL") version 2 as published by the Free 28313a0c13SJung-uk Kim * Software Foundation. 29313a0c13SJung-uk Kim * 30313a0c13SJung-uk Kim * NO WARRANTY 31313a0c13SJung-uk Kim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32313a0c13SJung-uk Kim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33313a0c13SJung-uk Kim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34313a0c13SJung-uk Kim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35313a0c13SJung-uk Kim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36313a0c13SJung-uk Kim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37313a0c13SJung-uk Kim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38313a0c13SJung-uk Kim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39313a0c13SJung-uk Kim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40313a0c13SJung-uk Kim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41313a0c13SJung-uk Kim * POSSIBILITY OF SUCH DAMAGES. 42313a0c13SJung-uk Kim */ 43313a0c13SJung-uk Kim 44313a0c13SJung-uk Kim #include <contrib/dev/acpica/include/acpi.h> 45313a0c13SJung-uk Kim #include <contrib/dev/acpica/include/accommon.h> 46313a0c13SJung-uk Kim 47313a0c13SJung-uk Kim #define _COMPONENT ACPI_COMPILER 48313a0c13SJung-uk Kim ACPI_MODULE_NAME ("utuuid") 49313a0c13SJung-uk Kim 50313a0c13SJung-uk Kim 51313a0c13SJung-uk Kim /* 52313a0c13SJung-uk Kim * UUID support functions. 53313a0c13SJung-uk Kim * 54313a0c13SJung-uk Kim * This table is used to convert an input UUID ascii string to a 16 byte 55313a0c13SJung-uk Kim * buffer and the reverse. The table maps a UUID buffer index 0-15 to 56313a0c13SJung-uk Kim * the index within the 36-byte UUID string where the associated 2-byte 57313a0c13SJung-uk Kim * hex value can be found. 58313a0c13SJung-uk Kim * 59313a0c13SJung-uk Kim * 36-byte UUID strings are of the form: 60313a0c13SJung-uk Kim * aabbccdd-eeff-gghh-iijj-kkllmmnnoopp 61313a0c13SJung-uk Kim * Where aa-pp are one byte hex numbers, made up of two hex digits 62313a0c13SJung-uk Kim * 63313a0c13SJung-uk Kim * Note: This table is basically the inverse of the string-to-offset table 64313a0c13SJung-uk Kim * found in the ACPI spec in the description of the ToUUID macro. 65313a0c13SJung-uk Kim */ 66313a0c13SJung-uk Kim const UINT8 AcpiGbl_MapToUuidOffset[UUID_BUFFER_LENGTH] = 67313a0c13SJung-uk Kim { 68313a0c13SJung-uk Kim 6,4,2,0,11,9,16,14,19,21,24,26,28,30,32,34 69313a0c13SJung-uk Kim }; 70313a0c13SJung-uk Kim 71313a0c13SJung-uk Kim 72313a0c13SJung-uk Kim /******************************************************************************* 73313a0c13SJung-uk Kim * 74313a0c13SJung-uk Kim * FUNCTION: AcpiUtConvertStringToUuid 75313a0c13SJung-uk Kim * 76313a0c13SJung-uk Kim * PARAMETERS: InString - 36-byte formatted UUID string 77313a0c13SJung-uk Kim * UuidBuffer - Where the 16-byte UUID buffer is returned 78313a0c13SJung-uk Kim * 79313a0c13SJung-uk Kim * RETURN: None. Output data is returned in the UuidBuffer 80313a0c13SJung-uk Kim * 81313a0c13SJung-uk Kim * DESCRIPTION: Convert a 36-byte formatted UUID string to 16-byte UUID buffer 82313a0c13SJung-uk Kim * 83313a0c13SJung-uk Kim ******************************************************************************/ 84313a0c13SJung-uk Kim 85313a0c13SJung-uk Kim void 86313a0c13SJung-uk Kim AcpiUtConvertStringToUuid ( 87313a0c13SJung-uk Kim char *InString, 88313a0c13SJung-uk Kim UINT8 *UuidBuffer) 89313a0c13SJung-uk Kim { 90313a0c13SJung-uk Kim UINT32 i; 91313a0c13SJung-uk Kim 92313a0c13SJung-uk Kim 93313a0c13SJung-uk Kim for (i = 0; i < UUID_BUFFER_LENGTH; i++) 94313a0c13SJung-uk Kim { 95313a0c13SJung-uk Kim UuidBuffer[i] = 96313a0c13SJung-uk Kim (AcpiUtAsciiCharToHex (InString[AcpiGbl_MapToUuidOffset[i]]) << 4); 97313a0c13SJung-uk Kim 98313a0c13SJung-uk Kim UuidBuffer[i] |= 99313a0c13SJung-uk Kim AcpiUtAsciiCharToHex (InString[AcpiGbl_MapToUuidOffset[i] + 1]); 100313a0c13SJung-uk Kim } 101313a0c13SJung-uk Kim } 102