WS63 SDK 文档
7021f4f@fbb_ws63
ws63 和 ws63e 解决方案的 SDK 文档
载入中...
搜索中...
未找到
td_base.h
浏览该文件的文档.
1
/*
2
* Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2019-2020. All rights reserved.
3
* Description: types header.
4
* This file should be changed only infrequently and with great care.
5
*/
6
7
#ifndef __TD_BASE_H__
8
#define __TD_BASE_H__
9
10
#ifndef __KERNEL__
11
#include <stdbool.h>
12
#include <stddef.h>
13
#include <stdint.h>
14
#endif
15
#include "
td_type.h
"
16
#include "
soc_errno.h
"
17
18
#define TD_CONST const
19
#define TD_REG register
20
21
#define TD_U64_MAX 0xFFFFFFFFFFFFFFFFUL
22
#define TD_U32_MAX 0xFFFFFFFF
23
#define TD_U16_MAX 0xFFFF
24
#define TD_U8_MAX 0xFF
25
#define TD_U4_MAX 0x0f
26
#define TD_S32_MAX (~(~0 << (32 - 1)))
27
#define TD_S16_MAX 0x7FFF
28
#define TD_S8_MAX 0x7F
29
#define TD_S32_MIN (-0x80000000)
30
#define TD_S16_MIN (-0x8000)
31
#define TD_S8_MIN (-0x80)
32
33
#define TD_U32_BITS 32
34
#define TD_S32_BITS 32
35
#define TD_U24_BITS 24
36
#define TD_U16_BITS 16
37
#define TD_U8_BITS 8
38
#define TD_U4_BITS 4
39
40
#define TD_U8_BIT_INDEX_MAX 7
41
42
#define TD_PUBLIC extern
43
44
#if defined(__BUILD_IN_ROM__) || defined(CONFIG_FEATURE_UT)
45
#define TD_PRV
46
#else
47
#define TD_PRV static
48
#endif
49
50
#define TD_INLINE inline
51
#define TD_API
52
#define TD_EXTERN extern
53
#ifdef __cplusplus
54
# define TD_CPP_START extern "C" {
55
# define TD_CPP_END }
56
#else
57
# define TD_CPP_START
58
# define TD_CPP_END
59
#endif
60
61
#ifdef NDEBUG
62
#define TD_ASSERT(ignore) ((void)0)
63
#else
64
#define TD_ASSERT(x) ((void)0)
65
#endif
66
67
#define TD_START_HEADER TD_CPP_START
68
#define TD_END_HEADER TD_CPP_END
69
70
#undef TD_OUT
71
#undef TD_IN
72
#undef TD_INOUT
73
#define TD_OUT
74
#define TD_IN
75
#define TD_INOUT
76
77
#ifndef CACHE_ALIGNED_SIZE
78
#define CACHE_ALIGNED_SIZE 32
79
#endif
80
81
#define TD_ALWAYS_INLINE __attribute__((always_inline)) inline
82
#define TD_ALWAYS_STAIC_INLINE __attribute__((always_inline)) static inline
83
84
#define uapi_array_size(_array) (sizeof(_array) / sizeof((_array)[0]))
85
86
#define uapi_unused(var) \
87
do { \
88
(void)(var); \
89
} while (0)
90
91
#define uapi_align_4(x) ((unsigned int)((x) + 0x3) & (~0x3))
/* 构造4字节地址对齐 */
92
#define uapi_is_align_u32(x) (!((x) & 3))
/* 判断是否为4字节对齐 */
93
#define uapi_is_unalign_u32(x) ((x) & 3)
/* 判断是否为4字节对齐 */
94
95
#if defined(HAVE_PCLINT_CHECK)
96
#define uapi_fieldoffset(s, m) (0)
/* 结构成员偏移 */
97
#else
98
#define uapi_fieldoffset(s, m) ((td_u32) & (((s*)0)->m))
/* 结构成员偏移 */
99
#endif
100
101
#define TD_CHAR_CR '\r'
/* 0x0D */
102
#define TD_CHAR_LF '\n'
/* 0x0A */
103
#define uapi_tolower(x) ((x) | 0x20)
/* Works only for digits and letters, but small and fast */
104
105
#define uapi_makeu16(a, b) ((td_u16)(((td_u8)(a)) | ((td_u16)((td_u8)(b))) << 8))
106
#define uapi_makeu32(a, b) ((td_u32)(((td_u16)(a)) | ((td_u32)((td_u16)(b))) << 16))
107
#define uapi_makeu64(a, b) ((td_u64)(((td_u32)(a)) | ((td_u64)((td_u32)(b))) <<32))
108
#define uapi_joinu32(a, b, c, d) ((a) | ((td_u32)(b) << 8) | ((td_u32)(c) << 16) | ((td_u32)(d) << 24))
109
110
#define uapi_hiu32(l) ((td_u32)(((td_u64)(l) >> 32) & 0xFFFFFFFF))
111
#define uapi_lou32(l) ((td_u32)(l))
112
#define uapi_hiu16(l) ((td_u16)(((td_u32)(l) >> 16) & 0xFFFF))
113
#define uapi_lou16(l) ((td_u16)(l))
114
#define uapi_hiu8(l) ((td_u8)(((td_u16)(l) >> 8) & 0xFF))
115
#define uapi_lou8(l) ((td_u8)(l))
116
117
#define uapi_max(a, b) (((a) > (b)) ? (a) : (b))
118
#define uapi_min(a, b) (((a) < (b)) ? (a) : (b))
119
#define uapi_sub(a, b) (((a) > (b)) ? ((a) - (b)) : 0)
120
#define uapi_abs(a) (((a) > 0) ? (a) : (- (a)))
121
#define uapi_abs_sub(a, b) (((a) > (b)) ? ((a) - (b)) : ((b) - (a)))
122
#define uapi_byte_align(value, align) (((value) + (align) - 1) & (~((align) -1)))
123
#define uapi_is_byte_align(value, align) (((td_u32)(value) & ((align) - 1))== 0)
124
125
#define uapi_set_bit_i(val, n) ((val) |= (1 << (n)))
126
#define uapi_clr_bit_i(val, n) ((val) &= ~(1 << (n)))
127
#define uapi_is_bit_set_i(val, n) ((val) & (1 << (n)))
128
#define uapi_is_bit_clr_i(val, n) (~((val) & (1 << (n))))
129
#define uapi_switch_bit_i(val, n) ((val) ^= (1 << (n)))
130
#define uapi_get_bit_i(val, n) (((val) >> (n)) & 1)
131
132
#define td_u8_bit_val(b7, b6, b5, b4, b3, b2, b1, b0) \
133
(((b7) << 7) | ((b6) << 6) | ((b5) << 5) | ((b4) << 4) | ((b3) << 3) | ((b2) << 2) | ((b1) << 1) | ((b0) << 0))
134
135
#define td_u16_bit_val(b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0) \
136
(td_u16)(((b12) << 12) | ((b11) << 11) | ((b10) << 10) | ((b9) << 9) | ((b8) << 8) | ((b7) << 7) | \
137
((b6) << 6) | ((b5) << 5) | ((b4) << 4) | ((b3) << 3) | ((b2) << 2) | ((b1) << 1) | ((b0) << 0))
138
139
#define uapi_set_u32_ptr_val(ptr, offset, val) (*((td_u32*)(((td_u8*)(ptr)) + (offset))) = (val))
140
#define uapi_get_u32_ptr_val(ptr, offset) *((td_u32*)(((td_u8*)(ptr)) + (offset)))
141
142
#ifndef bit
143
#define bit(x) (1UL << (x))
144
#endif
145
#ifndef BIT0
146
#define BIT31 ((td_u32)(1UL << 31))
147
#define BIT30 ((td_u32)(1 << 30))
148
#define BIT29 ((td_u32)(1 << 29))
149
#define BIT28 ((td_u32)(1 << 28))
150
#define BIT27 ((td_u32)(1 << 27))
151
#define BIT26 ((td_u32)(1 << 26))
152
#define BIT25 ((td_u32)(1 << 25))
153
#define BIT24 ((td_u32)(1 << 24))
154
#define BIT23 ((td_u32)(1 << 23))
155
#define BIT22 ((td_u32)(1 << 22))
156
#define BIT21 ((td_u32)(1 << 21))
157
#define BIT20 ((td_u32)(1 << 20))
158
#define BIT19 ((td_u32)(1 << 19))
159
#define BIT18 ((td_u32)(1 << 18))
160
#define BIT17 ((td_u32)(1 << 17))
161
#define BIT16 ((td_u32)(1 << 16))
162
#define BIT15 ((td_u32)(1 << 15))
163
#define BIT14 ((td_u32)(1 << 14))
164
#define BIT13 ((td_u32)(1 << 13))
165
#define BIT12 ((td_u32)(1 << 12))
166
#define BIT11 ((td_u32)(1 << 11))
167
#define BIT10 ((td_u32)(1 << 10))
168
#define BIT9 ((td_u32)(1 << 9))
169
#define BIT8 ((td_u32)(1 << 8))
170
#define BIT7 ((td_u32)(1 << 7))
171
#define BIT6 ((td_u32)(1 << 6))
172
#define BIT5 ((td_u32)(1 << 5))
173
#define BIT4 ((td_u32)(1 << 4))
174
#define BIT3 ((td_u32)(1 << 3))
175
#define BIT2 ((td_u32)(1 << 2))
176
#define BIT1 ((td_u32)(1 << 1))
177
#define BIT0 ((td_u32)(1 << 0))
178
#endif
179
180
#define HALFWORD_BIT_WIDTH 16
181
182
#define BYTE_WIDTH 1
183
#define HALF_WIDTH 2
184
#define WORD_WIDTH 4
185
186
#define uapi_reg_write(addr, val) (*(volatile unsigned int *)(uintptr_t)(addr) = (val))
187
#define uapi_reg_read(addr, val) ((val) = *(volatile unsigned int *)(uintptr_t)(addr))
188
#define uapi_reg_write32(addr, val) (*(volatile unsigned int *)(uintptr_t)(addr) = (val))
189
#define uapi_reg_read32(addr, val) ((val) = *(volatile unsigned int *)(uintptr_t)(addr))
190
#define uapi_reg_read_val32(addr) (*(volatile unsigned int*)(uintptr_t)(addr))
191
#define uapi_reg_setbitmsk(addr, msk) ((uapi_reg_read_val32(addr)) |= (msk))
192
#define uapi_reg_clrbitmsk(addr, msk) ((uapi_reg_read_val32(addr)) &= ~(msk))
193
#define uapi_reg_clrbit(addr, pos) ((uapi_reg_read_val32(addr)) &= ~((unsigned int)(1) << (pos)))
194
#define uapi_reg_setbit(addr, pos) ((uapi_reg_read_val32(addr)) |= ((unsigned int)(1) << (pos)))
195
#define uapi_reg_clrbits(addr, pos, bits) (uapi_reg_read_val32(addr) &= ~((((unsigned int)1 << (bits)) - 1) << (pos)))
196
#define uapi_reg_setbits(addr, pos, bits, val) (uapi_reg_read_val32(addr) = \
197
(uapi_reg_read_val32(addr) & (~((((unsigned int)1 << (bits)) - 1) << (pos)))) | \
198
((unsigned int)((val) & (((unsigned int)1 << (bits)) - 1)) << (pos)))
199
#define uapi_reg_getbits(addr, pos, bits) ((uapi_reg_read_val32(addr) >> (pos)) & (((unsigned int)1 << (bits)) - 1))
200
201
#define uapi_reg_write16(addr, val) (*(volatile unsigned short *)(uintptr_t)(addr) = (val))
202
#define uapi_reg_read16(addr, val) ((val) = *(volatile unsigned short *)(uintptr_t)(addr))
203
#define uapi_reg_read_val16(addr) (*(volatile unsigned short*)(uintptr_t)(addr))
204
#define uapi_reg_clrbit16(addr, pos) ((uapi_reg_read_val16(addr)) &= ~((unsigned short)(1) << (pos)))
205
#define uapi_reg_setbit16(addr, pos) ((uapi_reg_read_val16(addr)) |= ((unsigned short)(1) << (pos)))
206
#define uapi_reg_clrbits16(addr, pos, bits) (uapi_reg_read_val16(addr) &= ~((((unsigned short)1 << (bits)) - 1) << (pos)))
207
#define uapi_reg_setbits16(addr, pos, bits, val) (uapi_reg_read_val16(addr) = \
208
(uapi_reg_read_val16(addr) & (~((((unsigned short)1 << (bits)) - 1) << (pos)))) | \
209
((unsigned short)((val) & (((unsigned short)1 << (bits)) - 1)) << (pos)))
210
#define uapi_reg_getbits16(addr, pos, bits) ((uapi_reg_read_val16(addr) >> (pos)) & (((unsigned short)1 << (bits)) - 1))
211
212
#define uapi_reg_write8(addr, val) (*(volatile unsigned char *)(uintptr_t)(addr) = (val))
213
#define uapi_reg_read8(addr, val) ((val) = *(volatile unsigned char *)(uintptr_t)(addr))
214
#define uapi_reg_read_val8(addr) (*(volatile unsigned char*)(uintptr_t)(addr))
215
#define uapi_reg_clrbit8(addr, pos) ((uapi_reg_read_val8(addr)) &= ~((unsigned char)(1) << (pos)))
216
#define uapi_reg_setbit8(addr, pos) ((uapi_reg_read_val8(addr)) |= ((unsigned char)(1) << (pos)))
217
#define uapi_reg_clrbits8(addr, pos, bits) (uapi_reg_read_val8(addr) &= ~((((unsigned char)1 << (bits)) - 1) << (pos)))
218
#define uapi_reg_setbits8(addr, pos, bits, val) (uapi_reg_read_val8(addr) = \
219
(uapi_reg_read_val8(addr) & (~((((unsigned char)1 << (bits)) - 1) << (pos)))) | \
220
((unsigned char)((val) & (((unsigned char)1 << (bits)) - 1)) << (pos)))
221
#define uapi_reg_getbits8(addr, pos, bits) ((uapi_reg_read_val8(addr) >> (pos)) & (((unsigned char)1 << (bits)) - 1))
222
#ifndef align_next
223
#define align_next(val, a) ((((val) + ((a) - 1)) & (~((a) - 1))))
224
#define align_length(val, a) align_next(val, a)
225
#endif
226
#define BITS_PER_BYTE 8
227
#define HEXADECIMAL 16
228
#define DECIMAL 10
229
230
#define osal_padding(x, size) (((x) + (size) - 1) & (~((size) - 1)))
231
232
#define osal_round_down(value, boundary) ((value) & (~((boundary) - 1)))
233
#define osal_round_up(value, boundary) ((((value) - 1) | ((boundary) - 1)) + 1)
234
235
/* Is val aligned to "align" ("align" must be power of 2) */
236
#ifndef IS_ALIGNED
237
#define osal_is_aligned(val, align) (((osal_u32)(val) & ((align) - 1)) == 0)
238
#else
239
#define osal_is_aligned IS_ALIGNED
240
#endif
241
242
#ifndef MAX
243
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
244
#endif
245
246
#ifndef MIN
247
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
248
#endif
249
250
#define SZ_1KB 1024
251
#define SZ_1MB (SZ_1KB * SZ_1KB)
252
#define SZ_4KB 4096
253
#define TD_SYS_WAIT_FOREVER 0xFFFFFFFF
254
255
typedef
td_void
(*
td_void_callback
)(
td_void
);
256
typedef
struct
{
257
td_mem_handle_t
mem_handle
;
258
td_mem_size_t
addr_offset
;
259
}
ext_mem_handle
;
260
261
typedef
struct
{
262
td_s32
x
;
263
td_s32
y
;
264
td_u32
width
;
265
td_u32
height
;
266
}
ext_rect
;
267
268
#ifdef HAVE_PCLINT_CHECK
269
#define uapi_likely(x) (x)
270
#define uapi_unlikely(x) (x)
271
#else
272
#define uapi_likely(x) __builtin_expect(!!(x), 1)
273
#define uapi_unlikely(x) __builtin_expect(!!(x), 0)
274
#endif
275
276
#endif
/* __TD_BASE_H__ */
277
soc_errno.h
ext_mem_handle
Definition
td_base.h:256
ext_mem_handle::mem_handle
td_mem_handle_t mem_handle
Definition
td_base.h:257
ext_mem_handle::addr_offset
td_mem_size_t addr_offset
Definition
td_base.h:258
ext_rect
Definition
td_base.h:261
ext_rect::x
td_s32 x
Definition
td_base.h:262
ext_rect::height
td_u32 height
Definition
td_base.h:265
ext_rect::y
td_s32 y
Definition
td_base.h:263
ext_rect::width
td_u32 width
Definition
td_base.h:264
td_void_callback
td_void(* td_void_callback)(td_void)
Definition
td_base.h:255
td_type.h
td_mem_handle_t
long long td_mem_handle_t
Definition
td_type.h:60
td_mem_size_t
unsigned long long td_mem_size_t
Definition
td_type.h:59
td_void
void td_void
Definition
td_type.h:49
td_u32
unsigned int td_u32
Definition
td_type.h:38
td_s32
int td_s32
Definition
td_type.h:44
src
middleware
utils
common_headers
native
td_base.h
由
William Goodspeed
维护 | E-mail: gongzl@stu.hebust.edu.cn | Wechat: a23333344 | ALSO CHECKOUT
WS63FLASH
!
生成于 2025年 一月 4日 星期六 17:47:12 , 为 WS63 SDK 文档使用
1.9.8