utuuid.c revision 1.11
1234285Sdim/****************************************************************************** 2234285Sdim * 3234285Sdim * Module Name: utuuid -- UUID support functions 4234285Sdim * 5234285Sdim *****************************************************************************/ 6234285Sdim 7234285Sdim/* 8234285Sdim * Copyright (C) 2000 - 2022, Intel Corp. 9234285Sdim * All rights reserved. 10234285Sdim * 11234285Sdim * Redistribution and use in source and binary forms, with or without 12234285Sdim * modification, are permitted provided that the following conditions 13234285Sdim * are met: 14234285Sdim * 1. Redistributions of source code must retain the above copyright 15234285Sdim * notice, this list of conditions, and the following disclaimer, 16234285Sdim * without modification. 17234285Sdim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18234285Sdim * substantially similar to the "NO WARRANTY" disclaimer below 19234285Sdim * ("Disclaimer") and any redistribution must be conditioned upon 20234285Sdim * including a substantially similar Disclaimer requirement for further 21234285Sdim * binary redistribution. 22234285Sdim * 3. Neither the names of the above-listed copyright holders nor the names 23234285Sdim * of any contributors may be used to endorse or promote products derived 24234285Sdim * from this software without specific prior written permission. 25234285Sdim * 26234285Sdim * Alternatively, this software may be distributed under the terms of the 27234285Sdim * GNU General Public License ("GPL") version 2 as published by the Free 28234285Sdim * Software Foundation. 29234285Sdim * 30234285Sdim * NO WARRANTY 31234285Sdim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32234285Sdim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33234285Sdim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 34234285Sdim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35234285Sdim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36234285Sdim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37234285Sdim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38234285Sdim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39234285Sdim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40234285Sdim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41234285Sdim * POSSIBILITY OF SUCH DAMAGES. 42234285Sdim */ 43234285Sdim 44234285Sdim#include "acpi.h" 45234285Sdim#include "accommon.h" 46234285Sdim 47234285Sdim#define _COMPONENT ACPI_COMPILER 48234285Sdim ACPI_MODULE_NAME ("utuuid") 49234285Sdim 50234285Sdim 51234285Sdim#if (defined ACPI_ASL_COMPILER || defined ACPI_EXEC_APP || defined ACPI_HELP_APP || defined ACPI_DISASSEMBLER) 52234285Sdim/* 53234285Sdim * UUID support functions. 54234285Sdim * 55234285Sdim * This table is used to convert an input UUID ascii string to a 16 byte 56234285Sdim * buffer and the reverse. The table maps a UUID buffer index 0-15 to 57234285Sdim * the index within the 36-byte UUID string where the associated 2-byte 58234285Sdim * hex value can be found. 59234285Sdim * 60234285Sdim * 36-byte UUID strings are of the form: 61234285Sdim * aabbccdd-eeff-gghh-iijj-kkllmmnnoopp 62234285Sdim * Where aa-pp are one byte hex numbers, made up of two hex digits 63234285Sdim * 64234285Sdim * Note: This table is basically the inverse of the string-to-offset table 65234285Sdim * found in the ACPI spec in the description of the ToUUID macro. 66234285Sdim */ 67234285Sdimconst UINT8 AcpiGbl_MapToUuidOffset[UUID_BUFFER_LENGTH] = 68234285Sdim{ 69234285Sdim 6,4,2,0,11,9,16,14,19,21,24,26,28,30,32,34 70234285Sdim}; 71234285Sdim 72234285Sdim 73234285Sdim/******************************************************************************* 74234285Sdim * 75234285Sdim * FUNCTION: AcpiUtConvertStringToUuid 76234285Sdim * 77234285Sdim * PARAMETERS: InString - 36-byte formatted UUID string 78234285Sdim * UuidBuffer - Where the 16-byte UUID buffer is returned 79234285Sdim * 80234285Sdim * RETURN: None. Output data is returned in the UuidBuffer 81234285Sdim * 82234285Sdim * DESCRIPTION: Convert a 36-byte formatted UUID string to 16-byte UUID buffer 83234285Sdim * 84234285Sdim ******************************************************************************/ 85234285Sdim 86234285Sdimvoid 87234285SdimAcpiUtConvertStringToUuid ( 88234285Sdim const char *InString, 89234285Sdim UINT8 *UuidBuffer) 90234285Sdim{ 91 UINT32 i; 92 93 94 for (i = 0; i < UUID_BUFFER_LENGTH; i++) 95 { 96 UuidBuffer[i] = (AcpiUtAsciiCharToHex ( 97 InString[AcpiGbl_MapToUuidOffset[i]]) << 4); 98 99 UuidBuffer[i] |= AcpiUtAsciiCharToHex ( 100 InString[AcpiGbl_MapToUuidOffset[i] + 1]); 101 } 102} 103 104 105/******************************************************************************* 106 * 107 * FUNCTION: AcpiUtConvertUuidToString 108 * 109 * PARAMETERS: UuidBuffer - 16-byte UUID buffer 110 * OutString - 36-byte formatted UUID string 111 * 112 * RETURN: Status 113 * 114 * DESCRIPTION: Convert 16-byte UUID buffer to 36-byte formatted UUID string 115 * OutString must be 37 bytes to include null terminator. 116 * 117 ******************************************************************************/ 118 119ACPI_STATUS 120AcpiUtConvertUuidToString ( 121 char *UuidBuffer, 122 char *OutString) 123{ 124 UINT32 i; 125 126 127 if (!UuidBuffer || !OutString) 128 { 129 return (AE_BAD_PARAMETER); 130 } 131 132 for (i = 0; i < UUID_BUFFER_LENGTH; i++) 133 { 134 OutString[AcpiGbl_MapToUuidOffset[i]] = 135 AcpiUtHexToAsciiChar (UuidBuffer[i], 4); 136 137 OutString[AcpiGbl_MapToUuidOffset[i] + 1] = 138 AcpiUtHexToAsciiChar (UuidBuffer[i], 0); 139 } 140 141 /* Insert required hyphens (dashes) */ 142 143 OutString[UUID_HYPHEN1_OFFSET] = 144 OutString[UUID_HYPHEN2_OFFSET] = 145 OutString[UUID_HYPHEN3_OFFSET] = 146 OutString[UUID_HYPHEN4_OFFSET] = '-'; 147 148 OutString[UUID_STRING_LENGTH] = 0; /* Null terminate */ 149 return (AE_OK); 150} 151#endif 152