173bbca04867d2f75443cc7dadcf115258f06b25eBob Moore/******************************************************************************
273bbca04867d2f75443cc7dadcf115258f06b25eBob Moore *
373bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * Module Name: uthex -- Hex/ASCII support functions
473bbca04867d2f75443cc7dadcf115258f06b25eBob Moore *
573bbca04867d2f75443cc7dadcf115258f06b25eBob Moore *****************************************************************************/
673bbca04867d2f75443cc7dadcf115258f06b25eBob Moore
773bbca04867d2f75443cc7dadcf115258f06b25eBob Moore/*
873bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * Copyright (C) 2000 - 2014, Intel Corp.
973bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * All rights reserved.
1073bbca04867d2f75443cc7dadcf115258f06b25eBob Moore *
1173bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * Redistribution and use in source and binary forms, with or without
1273bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * modification, are permitted provided that the following conditions
1373bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * are met:
1473bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * 1. Redistributions of source code must retain the above copyright
1573bbca04867d2f75443cc7dadcf115258f06b25eBob Moore *    notice, this list of conditions, and the following disclaimer,
1673bbca04867d2f75443cc7dadcf115258f06b25eBob Moore *    without modification.
1773bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * 2. Redistributions in binary form must reproduce at minimum a disclaimer
1873bbca04867d2f75443cc7dadcf115258f06b25eBob Moore *    substantially similar to the "NO WARRANTY" disclaimer below
1973bbca04867d2f75443cc7dadcf115258f06b25eBob Moore *    ("Disclaimer") and any redistribution must be conditioned upon
2073bbca04867d2f75443cc7dadcf115258f06b25eBob Moore *    including a substantially similar Disclaimer requirement for further
2173bbca04867d2f75443cc7dadcf115258f06b25eBob Moore *    binary redistribution.
2273bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * 3. Neither the names of the above-listed copyright holders nor the names
2373bbca04867d2f75443cc7dadcf115258f06b25eBob Moore *    of any contributors may be used to endorse or promote products derived
2473bbca04867d2f75443cc7dadcf115258f06b25eBob Moore *    from this software without specific prior written permission.
2573bbca04867d2f75443cc7dadcf115258f06b25eBob Moore *
2673bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * Alternatively, this software may be distributed under the terms of the
2773bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * GNU General Public License ("GPL") version 2 as published by the Free
2873bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * Software Foundation.
2973bbca04867d2f75443cc7dadcf115258f06b25eBob Moore *
3073bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * NO WARRANTY
3173bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
3273bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
3373bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
3473bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
3573bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
3673bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
3773bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3873bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
3973bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
4073bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
4173bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * POSSIBILITY OF SUCH DAMAGES.
4273bbca04867d2f75443cc7dadcf115258f06b25eBob Moore */
4373bbca04867d2f75443cc7dadcf115258f06b25eBob Moore
4473bbca04867d2f75443cc7dadcf115258f06b25eBob Moore#include <acpi/acpi.h>
4573bbca04867d2f75443cc7dadcf115258f06b25eBob Moore#include "accommon.h"
4673bbca04867d2f75443cc7dadcf115258f06b25eBob Moore
4773bbca04867d2f75443cc7dadcf115258f06b25eBob Moore#define _COMPONENT          ACPI_COMPILER
4873bbca04867d2f75443cc7dadcf115258f06b25eBob MooreACPI_MODULE_NAME("uthex")
4973bbca04867d2f75443cc7dadcf115258f06b25eBob Moore
5073bbca04867d2f75443cc7dadcf115258f06b25eBob Moore/* Hex to ASCII conversion table */
5173bbca04867d2f75443cc7dadcf115258f06b25eBob Moorestatic char acpi_gbl_hex_to_ascii[] = {
5273bbca04867d2f75443cc7dadcf115258f06b25eBob Moore	'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D',
5373bbca04867d2f75443cc7dadcf115258f06b25eBob Moore	    'E', 'F'
5473bbca04867d2f75443cc7dadcf115258f06b25eBob Moore};
5573bbca04867d2f75443cc7dadcf115258f06b25eBob Moore
5673bbca04867d2f75443cc7dadcf115258f06b25eBob Moore/*******************************************************************************
5773bbca04867d2f75443cc7dadcf115258f06b25eBob Moore *
5873bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * FUNCTION:    acpi_ut_hex_to_ascii_char
5973bbca04867d2f75443cc7dadcf115258f06b25eBob Moore *
6073bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * PARAMETERS:  integer             - Contains the hex digit
6173bbca04867d2f75443cc7dadcf115258f06b25eBob Moore *              position            - bit position of the digit within the
6273bbca04867d2f75443cc7dadcf115258f06b25eBob Moore *                                    integer (multiple of 4)
6373bbca04867d2f75443cc7dadcf115258f06b25eBob Moore *
6473bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * RETURN:      The converted Ascii character
6573bbca04867d2f75443cc7dadcf115258f06b25eBob Moore *
6673bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * DESCRIPTION: Convert a hex digit to an Ascii character
6773bbca04867d2f75443cc7dadcf115258f06b25eBob Moore *
6873bbca04867d2f75443cc7dadcf115258f06b25eBob Moore ******************************************************************************/
6973bbca04867d2f75443cc7dadcf115258f06b25eBob Moore
7073bbca04867d2f75443cc7dadcf115258f06b25eBob Moorechar acpi_ut_hex_to_ascii_char(u64 integer, u32 position)
7173bbca04867d2f75443cc7dadcf115258f06b25eBob Moore{
7273bbca04867d2f75443cc7dadcf115258f06b25eBob Moore
7373bbca04867d2f75443cc7dadcf115258f06b25eBob Moore	return (acpi_gbl_hex_to_ascii[(integer >> position) & 0xF]);
7473bbca04867d2f75443cc7dadcf115258f06b25eBob Moore}
7573bbca04867d2f75443cc7dadcf115258f06b25eBob Moore
7673bbca04867d2f75443cc7dadcf115258f06b25eBob Moore/*******************************************************************************
7773bbca04867d2f75443cc7dadcf115258f06b25eBob Moore *
7873bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * FUNCTION:    acpi_ut_hex_char_to_value
7973bbca04867d2f75443cc7dadcf115258f06b25eBob Moore *
8073bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * PARAMETERS:  ascii_char            - Hex character in Ascii
8173bbca04867d2f75443cc7dadcf115258f06b25eBob Moore *
8273bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * RETURN:      The binary value of the ascii/hex character
8373bbca04867d2f75443cc7dadcf115258f06b25eBob Moore *
8473bbca04867d2f75443cc7dadcf115258f06b25eBob Moore * DESCRIPTION: Perform ascii-to-hex translation
8573bbca04867d2f75443cc7dadcf115258f06b25eBob Moore *
8673bbca04867d2f75443cc7dadcf115258f06b25eBob Moore ******************************************************************************/
8773bbca04867d2f75443cc7dadcf115258f06b25eBob Moore
8873bbca04867d2f75443cc7dadcf115258f06b25eBob Mooreu8 acpi_ut_ascii_char_to_hex(int hex_char)
8973bbca04867d2f75443cc7dadcf115258f06b25eBob Moore{
9073bbca04867d2f75443cc7dadcf115258f06b25eBob Moore
9173bbca04867d2f75443cc7dadcf115258f06b25eBob Moore	if (hex_char <= 0x39) {
9273bbca04867d2f75443cc7dadcf115258f06b25eBob Moore		return ((u8)(hex_char - 0x30));
9373bbca04867d2f75443cc7dadcf115258f06b25eBob Moore	}
9473bbca04867d2f75443cc7dadcf115258f06b25eBob Moore
9573bbca04867d2f75443cc7dadcf115258f06b25eBob Moore	if (hex_char <= 0x46) {
9673bbca04867d2f75443cc7dadcf115258f06b25eBob Moore		return ((u8)(hex_char - 0x37));
9773bbca04867d2f75443cc7dadcf115258f06b25eBob Moore	}
9873bbca04867d2f75443cc7dadcf115258f06b25eBob Moore
9973bbca04867d2f75443cc7dadcf115258f06b25eBob Moore	return ((u8)(hex_char - 0x57));
10073bbca04867d2f75443cc7dadcf115258f06b25eBob Moore}
101