brintos

brintos / linux-shallow public Read only

0
0
Text · 3.2 KiB · 8f10b41 Raw
106 lines · c
1// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.02/******************************************************************************3 *4 * Module Name: utuuid -- UUID support functions5 *6 * Copyright (C) 2000 - 2023, Intel Corp.7 *8 *****************************************************************************/9 10#include <acpi/acpi.h>11#include "accommon.h"12 13#define _COMPONENT          ACPI_COMPILER14ACPI_MODULE_NAME("utuuid")15 16#if (defined ACPI_ASL_COMPILER || defined ACPI_EXEC_APP || defined ACPI_HELP_APP)17/*18 * UUID support functions.19 *20 * This table is used to convert an input UUID ascii string to a 16 byte21 * buffer and the reverse. The table maps a UUID buffer index 0-15 to22 * the index within the 36-byte UUID string where the associated 2-byte23 * hex value can be found.24 *25 * 36-byte UUID strings are of the form:26 *     aabbccdd-eeff-gghh-iijj-kkllmmnnoopp27 * Where aa-pp are one byte hex numbers, made up of two hex digits28 *29 * Note: This table is basically the inverse of the string-to-offset table30 * found in the ACPI spec in the description of the to_UUID macro.31 */32const u8 acpi_gbl_map_to_uuid_offset[UUID_BUFFER_LENGTH] = {33	6, 4, 2, 0, 11, 9, 16, 14, 19, 21, 24, 26, 28, 30, 32, 3434};35 36/*******************************************************************************37 *38 * FUNCTION:    acpi_ut_convert_string_to_uuid39 *40 * PARAMETERS:  in_string           - 36-byte formatted UUID string41 *              uuid_buffer         - Where the 16-byte UUID buffer is returned42 *43 * RETURN:      None. Output data is returned in the uuid_buffer44 *45 * DESCRIPTION: Convert a 36-byte formatted UUID string to 16-byte UUID buffer46 *47 ******************************************************************************/48 49void acpi_ut_convert_string_to_uuid(char *in_string, u8 *uuid_buffer)50{51	u32 i;52 53	for (i = 0; i < UUID_BUFFER_LENGTH; i++) {54		uuid_buffer[i] =55		    (acpi_ut_ascii_char_to_hex56		     (in_string[acpi_gbl_map_to_uuid_offset[i]]) << 4);57 58		uuid_buffer[i] |=59		    acpi_ut_ascii_char_to_hex(in_string60					      [acpi_gbl_map_to_uuid_offset[i] +61					       1]);62	}63}64 65/*******************************************************************************66 *67 * FUNCTION:    acpi_ut_convert_uuid_to_string68 *69 * PARAMETERS:  uuid_buffer         - 16-byte UUID buffer70 *              out_string          - 36-byte formatted UUID string71 *72 * RETURN:      Status73 *74 * DESCRIPTION: Convert 16-byte UUID buffer to 36-byte formatted UUID string75 *              out_string must be 37 bytes to include null terminator.76 *77 ******************************************************************************/78 79acpi_status acpi_ut_convert_uuid_to_string(char *uuid_buffer, char *out_string)80{81	u32 i;82 83	if (!uuid_buffer || !out_string) {84		return (AE_BAD_PARAMETER);85	}86 87	for (i = 0; i < UUID_BUFFER_LENGTH; i++) {88		out_string[acpi_gbl_map_to_uuid_offset[i]] =89		    acpi_ut_hex_to_ascii_char(uuid_buffer[i], 4);90 91		out_string[acpi_gbl_map_to_uuid_offset[i] + 1] =92		    acpi_ut_hex_to_ascii_char(uuid_buffer[i], 0);93	}94 95	/* Insert required hyphens (dashes) */96 97	out_string[UUID_HYPHEN1_OFFSET] =98	    out_string[UUID_HYPHEN2_OFFSET] =99	    out_string[UUID_HYPHEN3_OFFSET] =100	    out_string[UUID_HYPHEN4_OFFSET] = '-';101 102	out_string[UUID_STRING_LENGTH] = 0;	/* Null terminate */103	return (AE_OK);104}105#endif106