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