1#ifndef __ZBOOT_MACRO_H
2#define __ZBOOT_MACRO_H
3
4/* The LIST command is used to include comments in the script */
5.macro	LIST comment
6.endm
7
8/* The ED command is used to write a 32-bit word */
9.macro ED, addr, data
10	LDR	r0, 1f
11	LDR	r1, 2f
12	STR	r1, [r0]
13	B	3f
141 :	.long	\addr
152 :	.long	\data
163 :
17.endm
18
19/* The EW command is used to write a 16-bit word */
20.macro EW, addr, data
21	LDR	r0, 1f
22	LDR	r1, 2f
23	STRH	r1, [r0]
24	B	3f
251 :	.long	\addr
262 :	.long	\data
273 :
28.endm
29
30/* The EB command is used to write an 8-bit word */
31.macro EB, addr, data
32	LDR	r0, 1f
33	LDR	r1, 2f
34	STRB	r1, [r0]
35	B	3f
361 :	.long	\addr
372 :	.long	\data
383 :
39.endm
40
41/* The WAIT command is used to delay the execution */
42.macro  WAIT, time, reg
43	LDR	r1, 1f
44	LDR	r0, 2f
45	STR	r0, [r1]
4610 :
47	LDR	r0, [r1]
48	CMP	r0, #0x00000000
49	BNE	10b
50	NOP
51	B	3f
521 :	.long	\reg
532 :	.long	\time * 100
543 :
55.endm
56
57/* The DD command is used to read a 32-bit word */
58.macro  DD, start, end
59	LDR	r1, 1f
60	B	2f
611 :	.long	\start
622 :
63.endm
64
65/* loop until a given value has been read (with mask) */
66.macro WAIT_MASK, addr, data, cmp
67	LDR	r0, 2f
68	LDR	r1, 3f
69	LDR	r2, 4f
701:
71	LDR	r3, [r0, #0]
72	AND	r3, r1, r3
73	CMP	r2, r3
74	BNE	1b
75	B	5f
762:	.long	\addr
773:	.long	\data
784:	.long	\cmp
795:
80.endm
81
82/* read 32-bit value from addr, "or" an immediate and write back */
83.macro ED_OR, addr, data
84	LDR r4, 1f
85	LDR r5, 2f
86	LDR r6, [r4]
87	ORR r5, r6, r5
88	STR r5, [r4]
89	B	3f
901:	.long	\addr
912:	.long	\data
923:
93.endm
94
95/* read 32-bit value from addr, "and" an immediate and write back */
96.macro ED_AND, addr, data
97	LDR r4, 1f
98	LDR r5, 2f
99	LDR r6, [r4]
100	AND r5, r6, r5
101	STR r5, [r4]
102	B	3f
1031:	.long \addr
1042:	.long \data
1053:
106.endm
107
108#endif /* __ZBOOT_MACRO_H */
109