1 // SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
2 /******************************************************************************
4 * Module Name: uthex -- Hex/ASCII support functions
6 * Copyright (C) 2000 - 2020, Intel Corp.
8 *****************************************************************************/
10 #include <acpi/acpi.h>
13 #define _COMPONENT ACPI_COMPILER
14 ACPI_MODULE_NAME("uthex")
16 /* Hex to ASCII conversion table */
17 static const char acpi_gbl_hex_to_ascii
[] = {
18 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D',
22 /*******************************************************************************
24 * FUNCTION: acpi_ut_hex_to_ascii_char
26 * PARAMETERS: integer - Contains the hex digit
27 * position - bit position of the digit within the
28 * integer (multiple of 4)
30 * RETURN: The converted Ascii character
32 * DESCRIPTION: Convert a hex digit to an Ascii character
34 ******************************************************************************/
36 char acpi_ut_hex_to_ascii_char(u64 integer
, u32 position
)
40 acpi_ut_short_shift_right(integer
, position
, &index
);
41 return (acpi_gbl_hex_to_ascii
[index
& 0xF]);
44 /*******************************************************************************
46 * FUNCTION: acpi_ut_ascii_to_hex_byte
48 * PARAMETERS: two_ascii_chars - Pointer to two ASCII characters
49 * return_byte - Where converted byte is returned
51 * RETURN: Status and converted hex byte
53 * DESCRIPTION: Perform ascii-to-hex translation, exactly two ASCII characters
54 * to a single converted byte value.
56 ******************************************************************************/
58 acpi_status
acpi_ut_ascii_to_hex_byte(char *two_ascii_chars
, u8
*return_byte
)
61 /* Both ASCII characters must be valid hex digits */
63 if (!isxdigit((int)two_ascii_chars
[0]) ||
64 !isxdigit((int)two_ascii_chars
[1])) {
65 return (AE_BAD_HEX_CONSTANT
);
69 acpi_ut_ascii_char_to_hex(two_ascii_chars
[1]) |
70 (acpi_ut_ascii_char_to_hex(two_ascii_chars
[0]) << 4);
75 /*******************************************************************************
77 * FUNCTION: acpi_ut_ascii_char_to_hex
79 * PARAMETERS: hex_char - Hex character in Ascii. Must be:
82 * RETURN: The binary value of the ascii/hex character
84 * DESCRIPTION: Perform ascii-to-hex translation
86 ******************************************************************************/
88 u8
acpi_ut_ascii_char_to_hex(int hex_char
)
93 if (hex_char
<= '9') {
94 return ((u8
)(hex_char
- '0'));
99 if (hex_char
<= 'F') {
100 return ((u8
)(hex_char
- 0x37));
105 return ((u8
)(hex_char
- 0x57));