1 /** 2 * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 * 15 * Description: Common define \n 16 * 17 */ 18 19 #ifndef COMMON_DEF_H 20 #define COMMON_DEF_H 21 #ifndef __KERNEL__ 22 #include <stdint.h> 23 #endif 24 #ifdef __cplusplus 25 #if __cplusplus 26 extern "C" { 27 #endif 28 #endif 29 30 31 #ifndef NULL 32 #define NULL 0L 33 #endif 34 35 #ifndef array_size 36 #define array_size(x) (sizeof(x) / sizeof((x)[0])) 37 #endif 38 39 #ifndef min 40 #define min(x, y) (((x) < (y)) ? (x) : (y)) 41 #endif 42 43 #ifndef max 44 #define max(x, y) (((x) > (y)) ? (x) : (y)) 45 #endif 46 47 #ifdef __GNUC__ 48 #ifndef likely 49 #define likely(x) __builtin_expect(!!(x), 1) 50 #endif 51 #ifndef unlikely 52 #define unlikely(x) __builtin_expect(!!(x), 0) 53 #endif 54 #else 55 #define likely(x) (x) 56 #define unlikely(x) (x) 57 #endif 58 59 #ifndef unused 60 #define unused(var) (void)(var) 61 #endif 62 63 64 #ifndef STATIC 65 #if (defined(CONFIG_ROM_COMPILE) || defined(UT_TEST)) 66 #define STATIC 67 #else 68 #define STATIC static 69 #endif 70 #endif 71 72 #ifndef INLINE 73 #if (defined(CONFIG_ROM_COMPILE) || defined(UT_TEST)) 74 #define INLINE static inline 75 #else 76 #define INLINE inline 77 #endif 78 #endif 79 80 81 #ifndef bit 82 #define bit(x) (1UL << (uint32_t)(x)) 83 #endif 84 85 86 #define makeu16(a, b) ((uint16_t)(((uint8_t)(a)) | ((uint16_t)((uint8_t)(b))) << 8)) 87 #define makeu32(a, b) ((uint32_t)(((uint16_t)(a)) | ((uint32_t)((uint16_t)(b))) << 16)) 88 #define makeu64(a, b) ((uint64_t)(((uint32_t)(a)) | ((uint64_t)((uint32_t)(b))) << 32)) 89 #define joinu32(a, b, c, d) makeu32(makeu16((a), (b)), makeu16((c), (d))) 90 91 #define hiu32(x) ((uint32_t)(((uint64_t)(x) >> 32) & 0xFFFFFFFF)) 92 #define lou32(x) ((uint32_t)(x)) 93 94 #define hiu16(x) ((uint16_t)(((uint32_t)(x) >> 16) & 0xFFFF)) 95 #define lou16(x) ((uint16_t)(x)) 96 97 #define hiu8(x) ((uint8_t)(((uint16_t)(x) >> 8) & 0xFF)) 98 #define lou8(x) ((uint8_t)(x)) 99 100 #define uapi_max(a, b) (((a) > (b)) ? (a) : (b)) 101 #define uapi_min(a, b) (((a) < (b)) ? (a) : (b)) 102 103 #define uapi_reg_write(addr, val) (*(volatile unsigned int *)(uintptr_t)(addr) = (val)) 104 #define uapi_reg_read(addr, val) ((val) = *(volatile unsigned int *)(uintptr_t)(addr)) 105 #define uapi_reg_write32(addr, val) (*(volatile unsigned int *)(uintptr_t)(addr) = (val)) 106 #define uapi_reg_read32(addr, val) ((val) = *(volatile unsigned int *)(uintptr_t)(addr)) 107 #define uapi_reg_read_val32(addr) (*(volatile unsigned int*)(uintptr_t)(addr)) 108 #define uapi_reg_setbitmsk(addr, msk) ((uapi_reg_read_val32(addr)) |= (msk)) 109 #define uapi_reg_clrbitmsk(addr, msk) ((uapi_reg_read_val32(addr)) &= ~(msk)) 110 #define uapi_reg_clrbit(addr, pos) ((uapi_reg_read_val32(addr)) &= ~((unsigned int)(1) << (pos))) 111 #define uapi_reg_setbit(addr, pos) ((uapi_reg_read_val32(addr)) |= ((unsigned int)(1) << (pos))) 112 #define uapi_reg_clrbits(addr, pos, bits) (uapi_reg_read_val32(addr) &= ~((((unsigned int)1 << (bits)) - 1) << (pos))) 113 #define uapi_reg_setbits(addr, pos, bits, val) (uapi_reg_read_val32(addr) = \ 114 (uapi_reg_read_val32(addr) & (~((((unsigned int)1 << (bits)) - 1) << (pos)))) | \ 115 ((unsigned int)((val) & (((unsigned int)1 << (bits)) - 1)) << (pos))) 116 #define uapi_reg_getbits(addr, pos, bits) ((uapi_reg_read_val32(addr) >> (pos)) & (((unsigned int)1 << (bits)) - 1)) 117 118 #define uapi_reg_write16(addr, val) (*(volatile unsigned short *)(uintptr_t)(addr) = (val)) 119 #define uapi_reg_read16(addr, val) ((val) = *(volatile unsigned short *)(uintptr_t)(addr)) 120 #define uapi_reg_read_val16(addr) (*(volatile unsigned short*)(uintptr_t)(addr)) 121 #define uapi_reg_clrbit16(addr, pos) ((uapi_reg_read_val16(addr)) &= ~((unsigned short)(1) << (pos))) 122 #define uapi_reg_setbit16(addr, pos) ((uapi_reg_read_val16(addr)) |= ((unsigned short)(1) << (pos))) 123 #define uapi_reg_clrbits16(addr, pos, bits) (uapi_reg_read_val16(addr) &= \ 124 ~((((unsigned short)1 << (bits)) - 1) << (pos))) 125 #define uapi_reg_setbits16(addr, pos, bits, val) (uapi_reg_read_val16(addr) = \ 126 (uapi_reg_read_val16(addr) & (~((((unsigned short)1 << (bits)) - 1) << (pos)))) | \ 127 ((unsigned short)((val) & (((unsigned short)1 << (bits)) - 1)) << (pos))) 128 #define uapi_reg_getbits16(addr, pos, bits) ((uapi_reg_read_val16(addr) >> (pos)) & (((unsigned short)1 << (bits)) - 1)) 129 130 #define uapi_reg_write8(addr, val) (*(volatile unsigned char *)(uintptr_t)(addr) = (val)) 131 #define uapi_reg_read8(addr, val) ((val) = *(volatile unsigned char *)(uintptr_t)(addr)) 132 #define uapi_reg_read_val8(addr) (*(volatile unsigned char*)(uintptr_t)(addr)) 133 #define uapi_reg_clrbit8(addr, pos) ((uapi_reg_read_val8(addr)) &= ~((unsigned char)(1) << (pos))) 134 #define uapi_reg_setbit8(addr, pos) ((uapi_reg_read_val8(addr)) |= ((unsigned char)(1) << (pos))) 135 #define uapi_reg_clrbits8(addr, pos, bits) (uapi_reg_read_val8(addr) &= ~((((unsigned char)1 << (bits)) - 1) << (pos))) 136 #define uapi_reg_setbits8(addr, pos, bits, val) (uapi_reg_read_val8(addr) = \ 137 (uapi_reg_read_val8(addr) & (~((((unsigned char)1 << (bits)) - 1) << (pos)))) | \ 138 ((unsigned char)((val) & (((unsigned char)1 << (bits)) - 1)) << (pos))) 139 #define uapi_reg_getbits8(addr, pos, bits) ((uapi_reg_read_val8(addr) >> (pos)) & (((unsigned char)1 << (bits)) - 1)) 140 141 /** 142 * @if Eng 143 * @brief The offset of member in the structrue. 144 * @else 145 * @brief 结构体成员偏移 146 * @endif 147 */ 148 #define fieldoffset(s, m) ((uint32_t) &(((s *)0)->m)) 149 150 151 #ifdef __cplusplus 152 #if __cplusplus 153 } 154 #endif 155 #endif 156 157 #endif 158