• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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