Branch data Line data Source code
1 : : // SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 2 : : /****************************************************************************** 3 : : * 4 : : * Module Name: uthex -- Hex/ASCII support functions 5 : : * 6 : : * Copyright (C) 2000 - 2020, Intel Corp. 7 : : * 8 : : *****************************************************************************/ 9 : : 10 : : #include <acpi/acpi.h> 11 : : #include "accommon.h" 12 : : 13 : : #define _COMPONENT ACPI_COMPILER 14 : : ACPI_MODULE_NAME("uthex") 15 : : 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', 19 : : 'E', 'F' 20 : : }; 21 : : 22 : : /******************************************************************************* 23 : : * 24 : : * FUNCTION: acpi_ut_hex_to_ascii_char 25 : : * 26 : : * PARAMETERS: integer - Contains the hex digit 27 : : * position - bit position of the digit within the 28 : : * integer (multiple of 4) 29 : : * 30 : : * RETURN: The converted Ascii character 31 : : * 32 : : * DESCRIPTION: Convert a hex digit to an Ascii character 33 : : * 34 : : ******************************************************************************/ 35 : : 36 : 3564 : char acpi_ut_hex_to_ascii_char(u64 integer, u32 position) 37 : : { 38 : 3564 : u64 index; 39 : : 40 : 3564 : acpi_ut_short_shift_right(integer, position, &index); 41 : 3564 : return (acpi_gbl_hex_to_ascii[index & 0xF]); 42 : : } 43 : : 44 : : /******************************************************************************* 45 : : * 46 : : * FUNCTION: acpi_ut_ascii_to_hex_byte 47 : : * 48 : : * PARAMETERS: two_ascii_chars - Pointer to two ASCII characters 49 : : * return_byte - Where converted byte is returned 50 : : * 51 : : * RETURN: Status and converted hex byte 52 : : * 53 : : * DESCRIPTION: Perform ascii-to-hex translation, exactly two ASCII characters 54 : : * to a single converted byte value. 55 : : * 56 : : ******************************************************************************/ 57 : : 58 : 22 : acpi_status acpi_ut_ascii_to_hex_byte(char *two_ascii_chars, u8 *return_byte) 59 : : { 60 : : 61 : : /* Both ASCII characters must be valid hex digits */ 62 : : 63 [ + - ]: 22 : if (!isxdigit((int)two_ascii_chars[0]) || 64 [ + - ]: 22 : !isxdigit((int)two_ascii_chars[1])) { 65 : : return (AE_BAD_HEX_CONSTANT); 66 : : } 67 : : 68 : 22 : *return_byte = 69 : 22 : acpi_ut_ascii_char_to_hex(two_ascii_chars[1]) | 70 : 22 : (acpi_ut_ascii_char_to_hex(two_ascii_chars[0]) << 4); 71 : : 72 : 22 : return (AE_OK); 73 : : } 74 : : 75 : : /******************************************************************************* 76 : : * 77 : : * FUNCTION: acpi_ut_ascii_char_to_hex 78 : : * 79 : : * PARAMETERS: hex_char - Hex character in Ascii. Must be: 80 : : * 0-9 or A-F or a-f 81 : : * 82 : : * RETURN: The binary value of the ascii/hex character 83 : : * 84 : : * DESCRIPTION: Perform ascii-to-hex translation 85 : : * 86 : : ******************************************************************************/ 87 : : 88 : 44 : u8 acpi_ut_ascii_char_to_hex(int hex_char) 89 : : { 90 : : 91 : : /* Values 0-9 */ 92 : : 93 [ + - ]: 44 : if (hex_char <= '9') { 94 : 44 : return ((u8)(hex_char - '0')); 95 : : } 96 : : 97 : : /* Upper case A-F */ 98 : : 99 [ # # ]: 0 : if (hex_char <= 'F') { 100 : 0 : return ((u8)(hex_char - 0x37)); 101 : : } 102 : : 103 : : /* Lower case a-f */ 104 : : 105 : 0 : return ((u8)(hex_char - 0x57)); 106 : : }