1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0+ */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * (C) Copyright 2019 Rockchip Electronics Co., Ltd 4*4882a593Smuzhiyun */ 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun #ifndef _ROCKCHIP_CRYPTO_V2_UTIL_H_ 7*4882a593Smuzhiyun #define _ROCKCHIP_CRYPTO_V2_UTIL_H_ 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #ifdef __cplusplus 10*4882a593Smuzhiyun extern "C" 11*4882a593Smuzhiyun { 12*4882a593Smuzhiyun #endif 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun /************************ Defines ******************************/ 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun /* invers the bytes on a word- used for output from HASH */ 17*4882a593Smuzhiyun #ifdef BIG__ENDIAN 18*4882a593Smuzhiyun #define UTIL_INVERSE_UINT32_BYTES(val) (val) 19*4882a593Smuzhiyun #else 20*4882a593Smuzhiyun #define UTIL_INVERSE_UINT32_BYTES(val) \ 21*4882a593Smuzhiyun (((val) >> 24) | (((val) & 0x00FF0000) >> 8) | \ 22*4882a593Smuzhiyun (((val) & 0x0000FF00) << 8) | (((val) & 0x000000FF) << 24)) 23*4882a593Smuzhiyun #endif 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun /* invers the bytes on a word - used for input data for HASH */ 26*4882a593Smuzhiyun #ifdef BIG__ENDIAN 27*4882a593Smuzhiyun #define UTIL_REVERT_UINT32_BYTES(val) \ 28*4882a593Smuzhiyun (((val) >> 24) | (((val) & 0x00FF0000) >> 8) | \ 29*4882a593Smuzhiyun (((val) & 0x0000FF00) << 8) | (((val) & 0x000000FF) << 24)) 30*4882a593Smuzhiyun #else 31*4882a593Smuzhiyun #define UTIL_REVERT_UINT32_BYTES(val) (val) 32*4882a593Smuzhiyun #endif 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun /* the minimum and maximum macros */ 35*4882a593Smuzhiyun #undef min 36*4882a593Smuzhiyun #define min(a, b) (((a) < (b)) ? (a) : (b)) 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun #undef max 39*4882a593Smuzhiyun #define max(a, b) (((a) > (b)) ? (a) : (b)) 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun /* MACRO to count one bits */ 42*4882a593Smuzhiyun #define COUNT_ONE_BITS(number, bit_count) \ 43*4882a593Smuzhiyun do { \ 44*4882a593Smuzhiyun u32 tmp_num = number; \ 45*4882a593Smuzhiyun bit_count = 0; \ 46*4882a593Smuzhiyun while (tmp_num) { \ 47*4882a593Smuzhiyun tmp_num = tmp_num & (tmp_num - 1); \ 48*4882a593Smuzhiyun bit_count = bit_count + 1; \ 49*4882a593Smuzhiyun } \ 50*4882a593Smuzhiyun } while (0) 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun /* ------------------------------------------------------------ 53*4882a593Smuzhiyun ** 54*4882a593Smuzhiyun * @brief This function executes a reversed words copy on a specified buffer. 55*4882a593Smuzhiyun * 56*4882a593Smuzhiyun * on a 6 words byffer: 57*4882a593Smuzhiyun * 58*4882a593Smuzhiyun * buff[5] <---> buff[0] 59*4882a593Smuzhiyun * buff[4] <---> buff[1] 60*4882a593Smuzhiyun * buff[3] <---> buff[2] 61*4882a593Smuzhiyun * 62*4882a593Smuzhiyun * @param[in] dst_ptr - The counter buffer. 63*4882a593Smuzhiyun * @param[in] size - The counter size in words. 64*4882a593Smuzhiyun * 65*4882a593Smuzhiyun */ 66*4882a593Smuzhiyun void util_reverse_words_buff(u32 *buff_ptr, u32 size_words); 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun /* ------------------------------------------------------------ 69*4882a593Smuzhiyun ** 70*4882a593Smuzhiyun * @brief This function executes a reversed byte copy on a specified buffer. 71*4882a593Smuzhiyun * 72*4882a593Smuzhiyun * on a 6 byte byffer: 73*4882a593Smuzhiyun * 74*4882a593Smuzhiyun * buff[5] <---> buff[0] 75*4882a593Smuzhiyun * buff[4] <---> buff[1] 76*4882a593Smuzhiyun * buff[3] <---> buff[2] 77*4882a593Smuzhiyun * 78*4882a593Smuzhiyun * @param[in] dst_ptr - The counter buffer. 79*4882a593Smuzhiyun * @param[in] src_ptr - The counter size in bytes. 80*4882a593Smuzhiyun * 81*4882a593Smuzhiyun */ 82*4882a593Smuzhiyun void util_reverse_buff(u8 *buff_ptr, u32 size); 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun /* ------------------------------------------------------------ 85*4882a593Smuzhiyun ** 86*4882a593Smuzhiyun * @brief This function executes a memory copy between 2 buffers. 87*4882a593Smuzhiyun * 88*4882a593Smuzhiyun * @param[in] dst_ptr - The first counter buffer. 89*4882a593Smuzhiyun * @param[in] src_ptr - The second counter buffer. 90*4882a593Smuzhiyun * @param[in] size - The counter size in words. 91*4882a593Smuzhiyun * 92*4882a593Smuzhiyun */ 93*4882a593Smuzhiyun void util_word_memcpy(u32 *dst_ptr, u32 *src_ptr, u32 size); 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun /* ------------------------------------------------------------ 96*4882a593Smuzhiyun ** 97*4882a593Smuzhiyun * @brief This function executes a memory set operation on a buffer. 98*4882a593Smuzhiyun * 99*4882a593Smuzhiyun * @param[in] buff_ptr - the buffer. 100*4882a593Smuzhiyun * @param[in] val - The value to set the buffer. 101*4882a593Smuzhiyun * @param[in] size - the buffers size in words. 102*4882a593Smuzhiyun * 103*4882a593Smuzhiyun */ 104*4882a593Smuzhiyun void util_word_memset(u32 *buff_ptr, u32 val, u32 size); 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun /* ------------------------------------------------------------ 107*4882a593Smuzhiyun ** 108*4882a593Smuzhiyun * @brief This function executes a reverse bytes copying from one buffer 109*4882a593Smuzhiyun * to another buffer. 110*4882a593Smuzhiyun * 111*4882a593Smuzhiyun * @param[in] dst_ptr - The pointer to destination buffer. 112*4882a593Smuzhiyun * @param[in] src_ptr - The pointer to source buffer. 113*4882a593Smuzhiyun * @param[in] size - The size in words. 114*4882a593Smuzhiyun * 115*4882a593Smuzhiyun */ 116*4882a593Smuzhiyun void util_reverse_word_memcpy(u32 *dst_ptr, u32 *src_ptr, u32 size); 117*4882a593Smuzhiyun 118*4882a593Smuzhiyun /* ------------------------------------------------------------ 119*4882a593Smuzhiyun ** 120*4882a593Smuzhiyun * @brief This function executes a reverse bytes copying from one buffer 121*4882a593Smuzhiyun * to another buffer. 122*4882a593Smuzhiyun * 123*4882a593Smuzhiyun * @param[in] dst_ptr - The pointer to destination buffer. 124*4882a593Smuzhiyun * @param[in] src_ptr - The pointer to source buffer. 125*4882a593Smuzhiyun * @param[in] size - The size in bytes. 126*4882a593Smuzhiyun * 127*4882a593Smuzhiyun */ 128*4882a593Smuzhiyun void util_reverse_memcpy(u8 *dst_ptr, const u8 *src_ptr, u32 size); 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun #ifdef __cplusplus 131*4882a593Smuzhiyun } 132*4882a593Smuzhiyun #endif 133*4882a593Smuzhiyun 134*4882a593Smuzhiyun #endif 135*4882a593Smuzhiyun 136