linux/drivers/acpi/acpica/utuuid.c
<<
>>
Prefs
   1// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
   2/******************************************************************************
   3 *
   4 * Module Name: utuuid -- UUID support functions
   5 *
   6 * Copyright (C) 2000 - 2019, Intel Corp.
   7 *
   8 *****************************************************************************/
   9
  10#include <acpi/acpi.h>
  11#include "accommon.h"
  12
  13#define _COMPONENT          ACPI_COMPILER
  14ACPI_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 byte
  21 * buffer and the reverse. The table maps a UUID buffer index 0-15 to
  22 * the index within the 36-byte UUID string where the associated 2-byte
  23 * hex value can be found.
  24 *
  25 * 36-byte UUID strings are of the form:
  26 *     aabbccdd-eeff-gghh-iijj-kkllmmnnoopp
  27 * Where aa-pp are one byte hex numbers, made up of two hex digits
  28 *
  29 * Note: This table is basically the inverse of the string-to-offset table
  30 * 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, 34
  34};
  35
  36/*******************************************************************************
  37 *
  38 * FUNCTION:    acpi_ut_convert_string_to_uuid
  39 *
  40 * PARAMETERS:  in_string           - 36-byte formatted UUID string
  41 *              uuid_buffer         - Where the 16-byte UUID buffer is returned
  42 *
  43 * RETURN:      None. Output data is returned in the uuid_buffer
  44 *
  45 * DESCRIPTION: Convert a 36-byte formatted UUID string to 16-byte UUID buffer
  46 *
  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_hex
  56                     (in_string[acpi_gbl_map_to_uuid_offset[i]]) << 4);
  57
  58                uuid_buffer[i] |=
  59                    acpi_ut_ascii_char_to_hex(in_string
  60                                              [acpi_gbl_map_to_uuid_offset[i] +
  61                                               1]);
  62        }
  63}
  64#endif
  65