1 /* $Id: e100boot.h,v 1.9 2003/12/16 09:04:07 magnusmn Exp $ */
5 #define DMA_DESCR__out_priority__BITNR 5
6 #define DMA_DESCR__out_priority__WIDTH 1
7 #define DMA_DESCR__out_priority__normal 0
8 #define DMA_DESCR__out_priority__high 1
10 #define DMA_DESCR__ecp_cmd__BITNR 4
11 #define DMA_DESCR__ecp_cmd__WIDTH 1
12 #define DMA_DESCR__ecp_cmd__normal 0
13 #define DMA_DESCR__ecp_cmd__high 1
15 #define DMA_DESCR__tx_err__BITNR 4
16 #define DMA_DESCR__tx_err__WIDTH 1
17 #define DMA_DESCR__tx_err__enable 1
18 #define DMA_DESCR__tx_err__disable 0
20 #define DMA_DESCR__intr__BITNR 3
21 #define DMA_DESCR__intr__WIDTH 1
22 #define DMA_DESCR__intr__enable 1
23 #define DMA_DESCR__intr__disable 0
25 #define DMA_DESCR__wait__BITNR 2
26 #define DMA_DESCR__wait__WIDTH 1
27 #define DMA_DESCR__wait__enable 1
28 #define DMA_DESCR__wait__disable 0
30 #define DMA_DESCR__eop__BITNR 1
31 #define DMA_DESCR__eop__WIDTH 1
32 #define DMA_DESCR__eop__enable 1
33 #define DMA_DESCR__eop__disable 0
35 #define DMA_DESCR__eol__BITNR 0
36 #define DMA_DESCR__eol__WIDTH 1
37 #define DMA_DESCR__eol__enable 1
38 #define DMA_DESCR__eol__disable 0
40 #define DMA_DESCR__sw_len__BITNR 0
41 #define DMA_DESCR__sw_len__WIDTH 16
43 #define DMA_DESCR__next__BITNR 0
44 #define DMA_DESCR__next__WIDTH 32
46 #define DMA_DESCR__buf__BITNR 0
47 #define DMA_DESCR__buf__WIDTH 32
49 #define DMA_DESCR__fifo_len__BITNR 8
50 #define DMA_DESCR__fifo_len__WIDTH 7
52 #define DMA_DESCR__crc_err__BITNR 7
53 #define DMA_DESCR__crc_err__WIDTH 1
54 #define DMA_DESCR__crc_err__enable 1
55 #define DMA_DESCR__crc_err__disable 0
57 #define DMA_DESCR__align_err__BITNR 6
58 #define DMA_DESCR__align_err__WIDTH 1
59 #define DMA_DESCR__align_err__enable 1
60 #define DMA_DESCR__align_err__disable 0
62 #define DMA_DESCR__in_priority__BITNR 5
63 #define DMA_DESCR__in_priority__WIDTH 1
64 #define DMA_DESCR__in_priority__high 1
65 #define DMA_DESCR__in_priority__normal 0
67 #define DMA_DESCR__stop__BITNR 4
68 #define DMA_DESCR__stop__WIDTH 1
70 #define DMA_DESCR__rd_eop__BITNR 1
71 #define DMA_DESCR__rd_eop__WIDTH 1
73 #define DMA_DESCR__hw_len__BITNR 0
74 #define DMA_DESCR__hw_len__WIDTH 16
76 #define SET_ETHER_ADDR(a0_0,a0_1,a0_2,a0_3,a0_4,a0_5,a1_0,a1_1,a1_2,a1_3,a1_4,a1_5) \
77 *R_NETWORK_SA_0 = a0_0 | (a0_1 << 8) | (a0_2 << 16) | (a0_3 << 24); \
78 *R_NETWORK_SA_1 = a0_4 | (a0_5 << 8) | (a1_0 << 16) | (a1_1 << 24); \
79 *R_NETWORK_SA_2 = a1_2 | (a1_3 << 8) | (a1_4 << 16) | (a1_5 << 24);
81 #define DWORD_ALIGN(x) ((x) & 0xfffffffc)
105 #define PACKET_INFO 3
106 #define SET_REGISTER 4
107 #define GET_REGISTER 5
112 #define PAUSE_LOOP 10
116 #define ERR_FLASH_OK 0
117 #define ERR_FLASH_NONE 1
118 #define ERR_FLASH_TOO_SMALL 2
119 #define ERR_FLASH_VERIFY 3
120 #define ERR_FLASH_ERASE 4
122 #define TIMEOUT_LIMIT ( ((6250 * 1000) / 0xffff) / 2)
124 #define TX_CTRL_EOP \
125 (IO_STATE(DMA_DESCR, intr, disable) |\
126 IO_STATE(DMA_DESCR, wait, enable) |\
127 IO_STATE(DMA_DESCR, eop, enable) |\
128 IO_STATE(DMA_DESCR, eol, enable))
131 (IO_STATE(DMA_DESCR, intr, disable) |\
132 IO_STATE(DMA_DESCR, wait, disable) |\
133 IO_STATE(DMA_DESCR, eop, disable) |\
134 IO_STATE(DMA_DESCR, eol, disable))
136 #define LOAD_ADDRESS 0x38001000
137 #define SIZEOF_BOOT_LEVEL_1 2048
139 /* This is where the commands are transfered to. */
140 #define IO_BUF_START 0x38001f00
141 #define IO_BUF_END 0x380020f0 /* bootcode start + cache size */
143 /* This should only be used in the cbl, but if we compile the sbl for
144 * elinux then __CRIS__ will be defined, and these are already defined
145 * in uC-libc. Check that __linux__ is not defined as well!
148 #if defined(__CRIS__) && !defined(__linux__)
149 #define NULL ((void*)0)
154 __asm__ ("swapwb %0" : "=r" (x
) : "0" (x
));
159 #define ntohl(x) htonl(x)
165 __asm__ ("swapb %0" : "=r" (x
) : "0" (x
));
170 #define ntohs(x) htons(x)
174 /*#define ntohs(x) \*/
175 /*((unsigned short)((((unsigned short)(x) & 0x00ffU) << 8) | \*/
176 /* (((unsigned short)(x) & 0xff00U) >> 8)))*/
179 /*#define ntohl(x) \*/
180 /*((unsigned long int)((((unsigned long int)(x) & 0x000000ffU) << 24) | \*/
181 /* (((unsigned long int)(x) & 0x0000ff00U) << 8) | \*/
182 /* (((unsigned long int)(x) & 0x00ff0000U) >> 8) | \*/
183 /* (((unsigned long int)(x) & 0xff000000U) >> 24)))*/
185 struct packet_header_T
/* Size = 38 */
196 } __attribute__ ((packed
));
198 typedef struct dma_descr_T
{
199 uword sw_len
; /* 0-1 */
200 uword ctrl
; /* 2-3 */
201 udword next
; /* 4-7 */
202 udword buf
; /* 8-11 */
203 uword hw_len
; /* 12-13 */
204 uword status
; /* 14-15 */
207 typedef struct packet_info_T
{
212 typedef struct set_register_T
{
217 typedef struct get_register_T
{
221 typedef struct pause_loop_T
{
225 typedef struct mem_verify_T
{
230 typedef struct mem_test_T
{
235 typedef struct mem_dump_T
{
240 typedef struct mem_clear_T
{
245 typedef struct flash_T
{
246 unsigned char *source
;
251 typedef struct jump_T
{
255 typedef struct bne_T
{
260 typedef struct br_T
{
264 typedef struct command_T
{
267 packet_info_T packet_info
;
268 set_register_T set_register
;
269 get_register_T get_register
;
270 pause_loop_T pause_loop
;
271 mem_verify_T mem_verify
;
274 mem_clear_T mem_clear
;
282 #define NETWORK_HEADER_LENGTH sizeof(struct packet_header_T)
286 void level2_boot(void);
288 int handle_network_read(void);
289 int flash_write(const unsigned char *source
, unsigned int offset
, unsigned int size
);
291 void init_interface(void);
292 int handle_read(void);
294 void send_string(char *str
);
295 void send_hex(udword v
, byte nl
);
297 extern char e100boot_version
[];
299 extern volatile udword bytes_to_read
;
300 extern volatile udword target_address
;
302 extern udword nbr_read
;
303 extern byte interface
;
304 extern byte set_dest
;
305 extern udword last_timeout
;
306 extern byte
*io_buf_next
;
307 extern byte
*io_buf_cur
;
309 extern struct packet_header_T tx_header
;
310 extern dma_descr_T tx_descr
;
311 extern dma_descr_T tx_descr2
;
313 extern struct packet_header_T rx_header
;
314 extern dma_descr_T rx_descr
;
315 extern dma_descr_T rx_descr2
;
317 extern uword timeout_limit
;
319 extern byte serial_up
;
321 enum { /* Available in: */
322 d_eol
= (1 << 0), /* flags */
323 d_eop
= (1 << 1), /* flags & status */
324 d_wait
= (1 << 2), /* flags */
325 d_int
= (1 << 3), /* flags */
326 d_txerr
= (1 << 4), /* flags */
327 d_stop
= (1 << 4), /* status */
328 d_ecp
= (1 << 4), /* flags & status */
329 d_pri
= (1 << 5), /* flags & status */
330 d_alignerr
= (1 << 6), /* status */
331 d_crcerr
= (1 << 7) /* status */