]>
Commit | Line | Data |
---|---|---|
95857638 | 1 | // SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 |
73bbca04 BM |
2 | /****************************************************************************** |
3 | * | |
4 | * Module Name: uthex -- Hex/ASCII support functions | |
5 | * | |
da6f8320 | 6 | * Copyright (C) 2000 - 2018, Intel Corp. |
73bbca04 | 7 | * |
95857638 | 8 | *****************************************************************************/ |
73bbca04 BM |
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 */ | |
c118abc5 | 17 | static const char acpi_gbl_hex_to_ascii[] = { |
73bbca04 BM |
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 | char acpi_ut_hex_to_ascii_char(u64 integer, u32 position) | |
37 | { | |
65082bfc | 38 | u64 index; |
73bbca04 | 39 | |
65082bfc LZ |
40 | acpi_ut_short_shift_right(integer, position, &index); |
41 | return (acpi_gbl_hex_to_ascii[index & 0xF]); | |
73bbca04 BM |
42 | } |
43 | ||
5ebd2eaa BM |
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 | 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 | ||
eacce4b6 BM |
63 | if (!isxdigit((int)two_ascii_chars[0]) || |
64 | !isxdigit((int)two_ascii_chars[1])) { | |
5ebd2eaa BM |
65 | return (AE_BAD_HEX_CONSTANT); |
66 | } | |
67 | ||
68 | *return_byte = | |
69 | acpi_ut_ascii_char_to_hex(two_ascii_chars[1]) | | |
70 | (acpi_ut_ascii_char_to_hex(two_ascii_chars[0]) << 4); | |
71 | ||
72 | return (AE_OK); | |
73 | } | |
74 | ||
73bbca04 BM |
75 | /******************************************************************************* |
76 | * | |
04f8e384 | 77 | * FUNCTION: acpi_ut_ascii_char_to_hex |
73bbca04 | 78 | * |
5ebd2eaa BM |
79 | * PARAMETERS: hex_char - Hex character in Ascii. Must be: |
80 | * 0-9 or A-F or a-f | |
73bbca04 BM |
81 | * |
82 | * RETURN: The binary value of the ascii/hex character | |
83 | * | |
84 | * DESCRIPTION: Perform ascii-to-hex translation | |
85 | * | |
86 | ******************************************************************************/ | |
87 | ||
88 | u8 acpi_ut_ascii_char_to_hex(int hex_char) | |
89 | { | |
90 | ||
5ebd2eaa BM |
91 | /* Values 0-9 */ |
92 | ||
93 | if (hex_char <= '9') { | |
94 | return ((u8)(hex_char - '0')); | |
73bbca04 BM |
95 | } |
96 | ||
5ebd2eaa BM |
97 | /* Upper case A-F */ |
98 | ||
99 | if (hex_char <= 'F') { | |
73bbca04 BM |
100 | return ((u8)(hex_char - 0x37)); |
101 | } | |
102 | ||
5ebd2eaa BM |
103 | /* Lower case a-f */ |
104 | ||
73bbca04 BM |
105 | return ((u8)(hex_char - 0x57)); |
106 | } |