summaryrefslogtreecommitdiff
path: root/firmware/target/mips/ingenic_x1000/x1000/macro.h
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/mips/ingenic_x1000/x1000/macro.h')
-rw-r--r--firmware/target/mips/ingenic_x1000/x1000/macro.h356
1 files changed, 356 insertions, 0 deletions
diff --git a/firmware/target/mips/ingenic_x1000/x1000/macro.h b/firmware/target/mips/ingenic_x1000/x1000/macro.h
new file mode 100644
index 0000000000..bfe8708a91
--- /dev/null
+++ b/firmware/target/mips/ingenic_x1000/x1000/macro.h
@@ -0,0 +1,356 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * This file was automatically generated by headergen, DO NOT EDIT it.
9 * headergen version: 3.0.0
10 *
11 * Copyright (C) 2015 by the authors
12 *
13 * This program is free software; you can redistribute it and/or
14 * modify it under the terms of the GNU General Public License
15 * as published by the Free Software Foundation; either version 2
16 * of the License, or (at your option) any later version.
17 *
18 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19 * KIND, either express or implied.
20 *
21 ****************************************************************************/
22#ifndef __HEADERGEN_MACRO_H__
23#define __HEADERGEN_MACRO_H__
24
25#include <stdint.h>
26
27#define __VAR_OR1(prefix, suffix) \
28 (prefix##suffix)
29#define __VAR_OR2(pre, s1, s2) \
30 (__VAR_OR1(pre, s1) | __VAR_OR1(pre, s2))
31#define __VAR_OR3(pre, s1, s2, s3) \
32 (__VAR_OR1(pre, s1) | __VAR_OR2(pre, s2, s3))
33#define __VAR_OR4(pre, s1, s2, s3, s4) \
34 (__VAR_OR2(pre, s1, s2) | __VAR_OR2(pre, s3, s4))
35#define __VAR_OR5(pre, s1, s2, s3, s4, s5) \
36 (__VAR_OR2(pre, s1, s2) | __VAR_OR3(pre, s3, s4, s5))
37#define __VAR_OR6(pre, s1, s2, s3, s4, s5, s6) \
38 (__VAR_OR3(pre, s1, s2, s3) | __VAR_OR3(pre, s4, s5, s6))
39#define __VAR_OR7(pre, s1, s2, s3, s4, s5, s6, s7) \
40 (__VAR_OR3(pre, s1, s2, s3) | __VAR_OR4(pre, s4, s5, s6, s7))
41#define __VAR_OR8(pre, s1, s2, s3, s4, s5, s6, s7, s8) \
42 (__VAR_OR4(pre, s1, s2, s3, s4) | __VAR_OR4(pre, s5, s6, s7, s8))
43#define __VAR_OR9(pre, s1, s2, s3, s4, s5, s6, s7, s8, s9) \
44 (__VAR_OR4(pre, s1, s2, s3, s4) | __VAR_OR5(pre, s5, s6, s7, s8, s9))
45#define __VAR_OR10(pre, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10) \
46 (__VAR_OR5(pre, s1, s2, s3, s4, s5) | __VAR_OR5(pre, s6, s7, s8, s9, s10))
47#define __VAR_OR11(pre, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11) \
48 (__VAR_OR5(pre, s1, s2, s3, s4, s5) | __VAR_OR6(pre, s6, s7, s8, s9, s10, s11))
49#define __VAR_OR12(pre, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12) \
50 (__VAR_OR6(pre, s1, s2, s3, s4, s5, s6) | __VAR_OR6(pre, s7, s8, s9, s10, s11, s12))
51#define __VAR_OR13(pre, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13) \
52 (__VAR_OR6(pre, s1, s2, s3, s4, s5, s6) | __VAR_OR7(pre, s7, s8, s9, s10, s11, s12, s13))
53
54#define __VAR_NARGS(...) __VAR_NARGS_(__VA_ARGS__, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
55#define __VAR_NARGS_(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, N, ...) N
56
57#define __VAR_EXPAND(macro, prefix, ...) __VAR_EXPAND_(macro, __VAR_NARGS(__VA_ARGS__), prefix, __VA_ARGS__)
58#define __VAR_EXPAND_(macro, cnt, prefix, ...) __VAR_EXPAND__(macro, cnt, prefix, __VA_ARGS__)
59#define __VAR_EXPAND__(macro, cnt, prefix, ...) __VAR_EXPAND___(macro##cnt, prefix, __VA_ARGS__)
60#define __VAR_EXPAND___(macro, prefix, ...) macro(prefix, __VA_ARGS__)
61
62#define JIO_8_RO(op, name, ...) JIO_8_RO_##op(name, __VA_ARGS__)
63#define JIO_8_RO_RD(name, ...) (*(const volatile uint8_t *)(JA_##name))
64#define JIO_8_RO_WR(name, val) _Static_assert(0, #name " is read-only")
65#define JIO_8_RO_RMW(name, vand, vor) _Static_assert(0, #name " is read-only")
66#define JIO_8_RO_VAR(name, ...) (*(const volatile uint8_t *)(JA_##name))
67
68#define JIO_16_RO(op, name, ...) JIO_16_RO_##op(name, __VA_ARGS__)
69#define JIO_16_RO_RD(name, ...) (*(const volatile uint16_t *)(JA_##name))
70#define JIO_16_RO_WR(name, val) _Static_assert(0, #name " is read-only")
71#define JIO_16_RO_RMW(name, vand, vor) _Static_assert(0, #name " is read-only")
72#define JIO_16_RO_VAR(name, ...) (*(const volatile uint16_t *)(JA_##name))
73
74#define JIO_32_RO(op, name, ...) JIO_32_RO_##op(name, __VA_ARGS__)
75#define JIO_32_RO_RD(name, ...) (*(const volatile uint32_t *)(JA_##name))
76#define JIO_32_RO_WR(name, val) _Static_assert(0, #name " is read-only")
77#define JIO_32_RO_RMW(name, vand, vor) _Static_assert(0, #name " is read-only")
78#define JIO_32_RO_VAR(name, ...) (*(const volatile uint32_t *)(JA_##name))
79
80#define JIO_8_RW(op, name, ...) JIO_8_RW_##op(name, __VA_ARGS__)
81#define JIO_8_RW_RD(name, ...) (*(volatile uint8_t *)(JA_##name))
82#define JIO_8_RW_WR(name, val) (*(volatile uint8_t *)(JA_##name)) = (val)
83#define JIO_8_RW_RMW(name, vand, vor) JIO_8_RW_WR(name, (JIO_8_RW_RD(name) & (vand)) | (vor))
84#define JIO_8_RW_VAR(name, ...) (*(volatile uint8_t *)(JA_##name))
85
86#define JIO_16_RW(op, name, ...) JIO_16_RW_##op(name, __VA_ARGS__)
87#define JIO_16_RW_RD(name, ...) (*(volatile uint16_t *)(JA_##name))
88#define JIO_16_RW_WR(name, val) (*(volatile uint16_t *)(JA_##name)) = (val)
89#define JIO_16_RW_RMW(name, vand, vor) JIO_16_RW_WR(name, (JIO_16_RW_RD(name) & (vand)) | (vor))
90#define JIO_16_RW_VAR(name, ...) (*(volatile uint16_t *)(JA_##name))
91
92#define JIO_32_RW(op, name, ...) JIO_32_RW_##op(name, __VA_ARGS__)
93#define JIO_32_RW_RD(name, ...) (*(volatile uint32_t *)(JA_##name))
94#define JIO_32_RW_WR(name, val) (*(volatile uint32_t *)(JA_##name)) = (val)
95#define JIO_32_RW_RMW(name, vand, vor) JIO_32_RW_WR(name, (JIO_32_RW_RD(name) & (vand)) | (vor))
96#define JIO_32_RW_VAR(name, ...) (*(volatile uint32_t *)(JA_##name))
97
98#define JIO_8_WO(op, name, ...) JIO_8_WO_##op(name, __VA_ARGS__)
99#define JIO_8_WO_RD(name, ...) ({_Static_assert(0, #name " is write-only"); 0;})
100#define JIO_8_WO_WR(name, val) (*(volatile uint8_t *)(JA_##name)) = (val)
101#define JIO_8_WO_RMW(name, vand, vor) JIO_8_WO_WR(name, vor)
102#define JIO_8_WO_VAR(name, ...) (*(volatile uint8_t *)(JA_##name))
103
104#define JIO_16_WO(op, name, ...) JIO_16_WO_##op(name, __VA_ARGS__)
105#define JIO_16_WO_RD(name, ...) ({_Static_assert(0, #name " is write-only"); 0;})
106#define JIO_16_WO_WR(name, val) (*(volatile uint16_t *)(JA_##name)) = (val)
107#define JIO_16_WO_RMW(name, vand, vor) JIO_16_WO_WR(name, vor)
108#define JIO_16_WO_VAR(name, ...) (*(volatile uint16_t *)(JA_##name))
109
110#define JIO_32_WO(op, name, ...) JIO_32_WO_##op(name, __VA_ARGS__)
111#define JIO_32_WO_RD(name, ...) ({_Static_assert(0, #name " is write-only"); 0;})
112#define JIO_32_WO_WR(name, val) (*(volatile uint32_t *)(JA_##name)) = (val)
113#define JIO_32_WO_RMW(name, vand, vor) JIO_32_WO_WR(name, vor)
114#define JIO_32_WO_VAR(name, ...) (*(volatile uint32_t *)(JA_##name))
115
116
117/** __jz_variant
118 *
119 * usage: __jz_variant(register, variant_prefix, variant_postfix)
120 *
121 * effect: expands to register variant given as argument
122 * note: internal usage
123 * note: register must be fully qualified if indexed
124 *
125 * example: __jz_variant(ICOLL_CTRL, , _SET)
126 * example: __jz_variant(ICOLL_ENABLE(3), , _CLR)
127 */
128#define __jz_variant(name, varp, vars) __jz_variant_(JN_##name, JI_##name, varp, vars)
129#define __jz_variant_(...) __jz_variant__(__VA_ARGS__)
130#define __jz_variant__(name, index, varp, vars) varp##name##vars index
131
132/** jz_orf
133 *
134 * usage: jz_orf(register, f1(v1), f2(v2), ...)
135 *
136 * effect: expands to the register value where each field fi has value vi.
137 * Informally: reg_f1(v1) | reg_f2(v2) | ...
138 * note: enumerated values for fields can be obtained by using the syntax:
139 * f1_V(name)
140 *
141 * example: jz_orf(ICOLL_CTRL, SFTRST(1), CLKGATE(0), TZ_LOCK_V(UNLOCKED))
142 */
143#define jz_orf(reg, ...) __VAR_EXPAND(__VAR_OR, BF_##reg##_, __VA_ARGS__)
144
145/** __jz_orfm
146 *
147 * usage: __jz_orfm(register, f1(v1), f2(v2), ...)
148 *
149 * effect: expands to the register value where each field fi has maximum value (vi is ignored).
150 * note: internal usage
151 *
152 * example: __jz_orfm(ICOLL_CTRL, SFTRST(1), CLKGATE(0), TZ_LOCK_V(UNLOCKED))
153 */
154#define __jz_orfm(reg, ...) __VAR_EXPAND(__VAR_OR, BFM_##reg##_, __VA_ARGS__)
155
156/** jz_orm
157 *
158 * usage: jz_orm(register, f1, f2, ...)
159 *
160 * effect: expands to the register value where each field fi is set to its maximum value.
161 * Informally: reg_f1_mask | reg_f2_mask | ...
162 *
163 * example: jz_orm(ICOLL_CTRL, SFTRST, CLKGATE)
164 */
165#define jz_orm(reg, ...) __VAR_EXPAND(__VAR_OR, BM_##reg##_, __VA_ARGS__)
166
167
168/** jz_read
169 *
170 * usage: jz_read(register)
171 *
172 * effect: read a register and return its value
173 * note: register must be fully qualified if indexed
174 *
175 * example: jz_read(ICOLL_STATUS)
176 * jz_read(ICOLL_ENABLE(42))
177 */
178#define jz_read(name) JT_##name(RD, name)
179
180/** jz_vreadf
181 *
182 * usage: jz_vreadf(value, register, field)
183 *
184 * effect: given a register value, return the value of a particular field
185 * note: this macro does NOT read any register
186 *
187 * example: jz_vreadf(0xc0000000, ICOLL_CTRL, SFTRST)
188 * jz_vreadf(0x46ff, ICOLL_ENABLE, CPU0_PRIO)
189 */
190#define jz_vreadf(val, name, field) (((val) & BM_##name##_##field) >> BP_##name##_##field)
191
192/** jz_readf
193 *
194 * usage: jz_readf(register, field)
195 *
196 * effect: read a register and return the value of a particular field
197 * note: register must be fully qualified if indexed
198 *
199 * example: jz_readf(ICOLL_CTRL, SFTRST)
200 * jz_readf(ICOLL_ENABLE(3), CPU0_PRIO)
201 */
202#define jz_readf(name, field) jz_readf_(jz_read(name), JN_##name, field)
203#define jz_readf_(...) jz_vreadf(__VA_ARGS__)
204
205/** jz_write
206 *
207 * usage: jz_write(register, value)
208 *
209 * effect: write a register
210 * note: register must be fully qualified if indexed
211 *
212 * example: jz_write(ICOLL_CTRL, 0x42)
213 * jz_write(ICOLL_ENABLE_SET(3), 0x37)
214 */
215#define jz_write(name, val) JT_##name(WR, name, val)
216
217/** jz_writef
218 *
219 * usage: jz_writef(register, f1(v1), f2(v2), ...)
220 *
221 * effect: change the register value so that field fi has value vi
222 * note: register must be fully qualified if indexed
223 * note: this macro may perform a read-modify-write
224 *
225 * example: jz_writef(ICOLL_CTRL, SFTRST(1), CLKGATE(0), TZ_LOCK_V(UNLOCKED))
226 * jz_writef(ICOLL_ENABLE(3), CPU0_PRIO(1), CPU0_TYPE_V(FIQ))
227 */
228#define jz_writef(name, ...) jz_writef_(name, JN_##name, __VA_ARGS__)
229#define jz_writef_(name, name2, ...) JT_##name(RMW, name, ~__jz_orfm(name2, __VA_ARGS__), jz_orf(name2, __VA_ARGS__))
230
231/** jz_overwritef
232 *
233 * usage: jz_overwritef(register, f1(v1), f2(v2), ...)
234 *
235 * effect: change the register value so that field fi has value vi and other fields have value zero
236 * thus this macro is equivalent to:
237 * jz_write(register, jz_orf(register, f1(v1), ...))
238 * note: register must be fully qualified if indexed
239 * note: this macro will overwrite the register (it is NOT a read-modify-write)
240 *
241 * example: jz_overwritef(ICOLL_CTRL, SFTRST(1), CLKGATE(0), TZ_LOCK_V(UNLOCKED))
242 * jz_overwritef(ICOLL_ENABLE(3), CPU0_PRIO(1), CPU0_TYPE_V(FIQ))
243 */
244#define jz_overwritef(name, ...) jz_overwritef_(name, JN_##name, __VA_ARGS__)
245#define jz_overwritef_(name, name2, ...) JT_##name(WR, name, jz_orf(name2, __VA_ARGS__))
246
247/** jz_vwritef
248 *
249 * usage: jz_vwritef(var, register, f1(v1), f2(v2), ...)
250 *
251 * effect: change the variable value so that field fi has value vi
252 * note: this macro will perform a read-modify-write
253 *
254 * example: jz_vwritef(var, ICOLL_CTRL, SFTRST(1), CLKGATE(0), TZ_LOCK_V(UNLOCKED))
255 * jz_vwritef(var, ICOLL_ENABLE, CPU0_PRIO(1), CPU0_TYPE_V(FIQ))
256 */
257#define jz_vwritef(var, name, ...) (var) = jz_orf(name, __VA_ARGS__) | (~__jz_orfm(name, __VA_ARGS__) & (var))
258
259/** jz_setf
260 *
261 * usage: jz_setf(register, f1, f2, ...)
262 *
263 * effect: change the register value so that field fi has maximum value
264 * IMPORTANT: this macro performs a write to the set variant of the register
265 * note: register must be fully qualified if indexed
266 *
267 * example: jz_setf(ICOLL_CTRL, SFTRST, CLKGATE)
268 * jz_setf(ICOLL_ENABLE(3), CPU0_PRIO, CPU0_TYPE)
269 */
270#define jz_setf(name, ...) jz_setf_(__jz_variant(name, , _SET), JN_##name, __VA_ARGS__)
271#define jz_setf_(name, name2, ...) jz_write(name, jz_orm(name2, __VA_ARGS__))
272
273/** jz_clrf
274 *
275 * usage: jz_clrf(register, f1, f2, ...)
276 *
277 * effect: change the register value so that field fi has value zero
278 * IMPORTANT: this macro performs a write to the clr variant of the register
279 * note: register must be fully qualified if indexed
280 *
281 * example: jz_clrf(ICOLL_CTRL, SFTRST, CLKGATE)
282 * jz_clrf(ICOLL_ENABLE(3), CPU0_PRIO, CPU0_TYPE)
283 */
284#define jz_clrf(name, ...) jz_clrf_(__jz_variant(name, , _CLR), JN_##name, __VA_ARGS__)
285#define jz_clrf_(name, name2, ...) jz_write(name, jz_orm(name2, __VA_ARGS__))
286
287/** jz_set
288 *
289 * usage: jz_set(register, set_value)
290 *
291 * effect: set some bits using set variant
292 * note: register must be fully qualified if indexed
293 *
294 * example: jz_set(ICOLL_CTRL, 0x42)
295 * jz_set(ICOLL_ENABLE(3), 0x37)
296 */
297#define jz_set(name, sval) jz_set_(__jz_variant(name, , _SET), sval)
298#define jz_set_(sname, sval) jz_write(sname, sval)
299
300/** jz_clr
301 *
302 * usage: jz_clr(register, clr_value)
303 *
304 * effect: clear some bits using clr variant
305 * note: register must be fully qualified if indexed
306 *
307 * example: jz_clr(ICOLL_CTRL, 0x42)
308 * jz_clr(ICOLL_ENABLE(3), 0x37)
309 */
310#define jz_clr(name, cval) jz_clr_(__jz_variant(name, , _CLR), cval)
311#define jz_clr_(cname, cval) jz_write(cname, cval)
312
313/** jz_cs
314 *
315 * usage: jz_cs(register, clear_value, set_value)
316 *
317 * effect: clear some bits using clr variant and then set some using set variant
318 * note: register must be fully qualified if indexed
319 *
320 * example: jz_cs(ICOLL_CTRL, 0xff, 0x42)
321 * jz_cs(ICOLL_ENABLE(3), 0xff, 0x37)
322 */
323#define jz_cs(name, cval, sval) jz_cs_(__jz_variant(name, , _CLR), __jz_variant(name, , _SET), cval, sval)
324#define jz_cs_(cname, sname, cval, sval) do { jz_write(cname, cval); jz_write(sname, sval); } while(0)
325
326/** jz_csf
327 *
328 * usage: jz_csf(register, f1(v1), f2(v2), ...)
329 *
330 * effect: change the register value so that field fi has value vi using clr and set variants
331 * note: register must be fully qualified if indexed
332 * note: this macro will NOT perform a read-modify-write and is thus safer
333 * IMPORTANT: this macro will set some fields to 0 temporarily, make sure this is acceptable
334 *
335 * example: jz_csf(ICOLL_CTRL, SFTRST(1), CLKGATE(0), TZ_LOCK_V(UNLOCKED))
336 * jz_csf(ICOLL_ENABLE(3), CPU0_PRIO(1), CPU0_TYPE_V(FIQ))
337 */
338#define jz_csf(name, ...) jz_csf_(name, JN_##name, __VA_ARGS__)
339#define jz_csf_(name, name2, ...) jz_cs(name, __jz_orfm(name2, __VA_ARGS__), jz_orf(name2, __VA_ARGS__))
340
341/** jz_reg
342 *
343 * usage: jz_reg(register)
344 *
345 * effect: return a variable-like expression that can be read/written
346 * note: register must be fully qualified if indexed
347 * note: read-only registers will yield a constant expression
348 *
349 * example: unsigned x = jz_reg(ICOLL_STATUS)
350 * unsigned x = jz_reg(ICOLL_ENABLE(42))
351 * jz_reg(ICOLL_ENABLE(42)) = 64
352 */
353#define jz_reg(name) JT_##name(VAR, name)
354
355
356#endif /* __HEADERGEN_MACRO_H__*/