source: SVN/rincon/u-boot/board/evb64260/zuma_pbb.h @ 55

Last change on this file since 55 was 55, checked in by Tim Harvey, 22 months ago

rincon: added latest u-boot source

restored form server backup

Signed-off-by: Tim Harvey <tharvey@…>

File size: 7.6 KB
Line 
1#ifndef ZUMA_PBB_H
2#define ZUMA_PBB_H
3
4#define MAX_NUM_BUFFER_PER_RING 32
5
6#ifdef __BIG_ENDIAN
7#define cpu_bits _be_s_bits     /* use with le32_to_cpu only */
8#define pci_bits _be_bits       /* may contain swapped bytes,
9                                   but dont need le32_to_cpu */
10#endif
11
12#ifdef __LITTLE_ENDIAN
13#define cpu_bits _le_bits
14#define pci_bits _le_bits
15#endif
16
17#define VENDOR_ID_ZUMA          0x1172
18#define DEVICE_ID_ZUMA_PBB      0x0004
19
20#define RXDBP(chan)             (&sip->rx_desc[chan].base)      /* ch*8      */
21#define RXDP(chan)              (&sip->rx_desc[chan].current)   /* ch*8 +  4 */
22#define TXDBP(chan)             (&sip->tx_desc[chan].base)      /* ch*8 + 64 */
23#define TXDP(chan)              (&sip->tx_desc[chan].current)   /* ch*8 + 68 */
24
25#define PBB_DMA_OWN_BIT         0x80000000
26#define PBB_DMA_LAST_BIT        0x40000000
27
28#define EOF_RX_FLAG             1       /* bit 0 */
29#define EOB_RX_FLAG             2       /* bit 1 */
30#define EOF_TX_FLAG             4       /* bit 2 */
31#define EOB_TX_FLAG             8       /* bit 3 */
32
33#define TX_MODE(m)              (((m)&7) << 16)
34
35#define RX_DESC(i)              (cs->rx_desc[i])
36#define TX_DESC(i)              (cs->tx_desc[i])
37
38#define RX_CONTROL(i)           (RX_DESC(i).control.word)
39#define RX_CONTROL_SIZE(i)      (RX_DESC(i).control.rx.size)
40#define TX_CONTROL(i)           (TX_DESC(i).control.word)
41
42#define RX_DATA_P(i)            (&RX_DESC(i).ptr)
43#define TX_DATA_P(i)            (&TX_DESC(i).ptr)
44
45typedef volatile unsigned char V8;
46typedef volatile unsigned short V16;
47typedef volatile unsigned int V32;
48
49/* RAM descriptor layout */
50typedef struct _tag_dma_descriptor {
51    V32 ptr;
52    union {
53        struct {
54            V32 owner:1;
55            V32 last:1;
56            V32 reserved0: 10;
57            V32 tx_mode: 4;
58
59            V32 reserved1: 5;
60            V32 size: 11;
61        } tx;
62        struct {
63            V32 owner:1;
64            V32 last:1;
65            V32 reserved0: 14;
66
67            V32 reserved1: 5;
68            V32 size: 11;
69        } rx;
70        V32 word;
71    } control;
72} DMA_DESCRIPTOR;
73
74/*
75 * NOTE: DO NOT USE structure to write non-word values... all registers
76 * MUST be written 4 bytes at a time in SI version 0.
77 * Non-word writes will result in "unaccessed" bytes written as zero.
78 *
79 * Byte reads are allowed.
80 *
81 * V32 pads are because the registers are spaced every 8 bytes (64 bits)
82 *
83 */
84
85/* NOTE!!! 4 dwords */
86typedef struct _tag_dma_descriptor_ring {
87    DMA_DESCRIPTOR *base;
88    V32 pad1;   /* skip high dword */
89    volatile DMA_DESCRIPTOR *current;
90    V32 pad3;   /* skip high dword */
91} DMA_DESCRIPTOR_RING;
92
93/* 1 dword */
94typedef union _tag_dma_generic {
95    struct {    /* byte 3 2 1 0 */
96        V32 chan7:4;    /* bits 31-28 */
97        V32 chan6:4;    /* bits 27-24 */
98        V32 chan5:4;    /* bits 23-20 */
99        V32 chan4:4;    /* bits 19-16 */
100        V32 chan3:4;    /* bits 15-12 */
101        V32 chan2:4;    /* bits 11-8 */
102        V32 chan1:4;    /* bits 7-4 */
103        V32 chan0:4;    /* bits 3-0 */
104    } _be_s_bits;
105    struct {    /* byte 0 1 2 3 */
106        V32 chan1:4;    /* bits 7-4 */
107        V32 chan0:4;    /* bits 3-0 */
108        V32 chan3:4;    /* bits 15-12 */
109        V32 chan2:4;    /* bits 11-8 */
110        V32 chan5:4;    /* bits 23-20 */
111        V32 chan4:4;    /* bits 19-16 */
112        V32 chan7:4;    /* bits 31-28 */
113        V32 chan6:4;    /* bits 27-24 */
114    } _be_bits;
115    struct {    /* byte 0 1 2 3 */
116        V32 chan0:4;    /* bits 0-3 */
117        V32 chan1:4;    /* bits 4-7 */
118        V32 chan2:4;    /* bits 8-11 */
119        V32 chan3:4;    /* bits 12-15 */
120        V32 chan4:4;    /* bits 16-19 */
121        V32 chan5:4;    /* bits 20-23 */
122        V32 chan6:4;    /* bits 24-27 */
123        V32 chan7:4;    /* bits 28-31 */
124    } _le_bits;
125    V8 byte[4];
126    V32 word;
127} DMA_RXTX_ENABLE, DMA_RX_DELETE,
128  DMA_INT_STATUS, DMA_INT_MASK,
129  DMA_RX_LEVEL_STATUS, DMA_RX_LEVEL_INT_MASK;
130
131/* 1 dword */
132typedef union _tag_dma_rx_timer{
133    struct {
134        V32 res0:8;     /* bits 32-24 */
135        V32 res1:7;     /* bits 23-17 */
136        V32 enable:1;   /* bit 16 */
137        V32 value:16;   /* bits 15-0 */
138    } _be_s_bits;
139    struct {
140        /* crosses byte boundary. must use swap. */
141        V32 s_value:16; /* bits 7-0,15-8 */
142        V32 enable:1;   /* bit 16 */
143        V32 res1:7;     /* bits 23-17 */
144        V32 res0:8;     /* bits 32-24 */
145    } _be_bits;
146    struct {
147        V32 value:16;   /* bits 0-15 */
148        V32 enable:1;   /* bit 16 */
149        V32 res1:7;     /* bits 17-23 */
150        V32 res0:8;     /* bits 24-32 */
151    } _le_bits;
152    V8 byte[4];
153    V32 word;
154} DMA_RX_TIMER;
155
156/* NOTE!!!: 2 dwords */
157typedef struct _tag_dma_desc_level{
158    union {
159        struct {
160            V32 res1:8; /* bits 31-24 */
161            V32 res0:7; /* bits 23-17 */
162            V32 write:1;        /* bit 16 */
163            V32 thresh:8;       /* bits 15-8 */
164            V32 level:8;        /* bits 7-0 */
165        } _be_s_bits;
166        struct {
167            V32 level:8;        /* bits 7-0 */
168            V32 thresh:8;       /* bits 15-8 */
169            V32 res0:7; /* bits 30-17 */
170            V32 write:1;        /* bit 16 */
171            V32 res1:8; /* bits 31-24 */
172        } _be_bits;
173        struct {
174            V32 level:8;        /* bits 0-7 */
175            V32 thresh:8;       /* bits 8-15 */
176            V32 write:1;        /* bit 16 */
177            V32 res0:7; /* bit 17-30 */
178            V32 res1:8; /* bits 24-31 */
179        } _le_bits;
180        V8 byte[4];
181        V32 word;
182    } desc;
183    V32 pad1;
184} DMA_DESC_LEVEL;
185
186typedef struct _tag_pbb_dma_reg_map {
187    /* 0-15 (0x000-0x078) */
188    DMA_DESCRIPTOR_RING rx_desc[8];     /* 4 dwords each, 128 bytes tot. */
189
190    /* 16-31 (0x080-0x0f8) */
191    DMA_DESCRIPTOR_RING tx_desc[8];     /* 4 dwords each, 128 bytes tot. */
192
193    /* 32/33 (0x100/0x108) */
194    V32 reserved_32;
195    V32 pad_32;
196    V32 reserved_33;
197    V32 pad_33;
198
199    /* 34 (0x110) */
200    DMA_RXTX_ENABLE rxtx_enable;
201    V32 pad_34;
202
203    /* 35 (0x118) */
204    DMA_RX_DELETE rx_delete;
205    V32 pad_35;
206
207    /* 36-38 (0x120-0x130) */
208    DMA_INT_STATUS status;
209    V32 pad_36;
210    DMA_INT_STATUS last_status;
211    V32 pad_37;
212    DMA_INT_MASK int_mask;
213    V32 pad_38;
214
215    /* 39/40 (0x138/0x140) */
216    union {
217        /* NOTE!! 4 dwords */
218        struct {
219            V32 channel_3:8;
220            V32 channel_2:8;
221            V32 channel_1:8;
222            V32 channel_0:8;
223            V32 pad1;
224            V32 channel_7:8;
225            V32 channel_6:8;
226            V32 channel_5:8;
227            V32 channel_4:8;
228            V32 pad3;
229        } _be_s_bits;
230        struct {
231            V32 channel_0:8;
232            V32 channel_1:8;
233            V32 channel_2:8;
234            V32 channel_3:8;
235            V32 pad1;
236            V32 channel_4:8;
237            V32 channel_5:8;
238            V32 channel_6:8;
239            V32 channel_7:8;
240            V32 pad3;
241        } _be_bits, _le_bits;
242        V8 byte[16];
243        V32 word[4];
244    } rx_size;
245
246    /* 41/42 (0x148/0x150) */
247    V32 reserved_41;
248    V32 pad_41;
249    V32 reserved_42;
250    V32 pad_42;
251
252    /* 43/44 (0x158/0x160) */
253    DMA_RX_LEVEL_STATUS rx_level_status;
254    V32 pad_43;
255    DMA_RX_LEVEL_INT_MASK rx_level_int_mask;
256    V32 pad_44;
257
258    /* 45 (0x168) */
259    DMA_RX_TIMER rx_timer;
260    V32 pad_45;
261
262    /* 46 (0x170) */
263    V32 reserved_46;
264    V32 pad_46;
265
266    /* 47 (0x178) */
267    V32 mbox_status;
268    V32 pad_47;
269
270    /* 48/49 (0x180/0x188) */
271    V32 mbox_out;
272    V32 pad_48;
273    V32 mbox_in;
274    V32 pad_49;
275
276    /* 50 (0x190) */
277    V32 config;
278    V32 pad_50;
279
280    /* 51/52 (0x198/0x1a0) */
281    V32 c2a_ctr;
282    V32 pad_51;
283    V32 a2c_ctr;
284    V32 pad_52;
285
286    /* 53 (0x1a8) */
287    union {
288        struct {
289            V32 rev_major:8;    /* bits 31-24 */
290            V32 rev_minor:8;    /* bits 23-16 */
291            V32 reserved:16;    /* bits 15-0 */
292        } _be_s_bits;
293        struct {
294            V32 s_reserved:16;  /* bits 7-0, 15-8 */
295            V32 rev_minor:8;    /* bits 23-16 */
296            V32 rev_major:8;    /* bits 31-24 */
297        } _be_bits;
298        struct {
299            V32 reserved:16;    /* bits 0-15 */
300            V32 rev_minor:8;    /* bits 16-23 */
301            V32 rev_major:8;    /* bits 24-31 */
302        } _le_bits;
303        V8 byte[4];
304        V32 word;
305    } version;
306    V32 pad_53;
307
308    /* 54-59 (0x1b0-0x1d8) */
309    V32 debug_54;
310    V32 pad_54;
311    V32 debug_55;
312    V32 pad_55;
313    V32 debug_56;
314    V32 pad_56;
315    V32 debug_57;
316    V32 pad_57;
317    V32 debug_58;
318    V32 pad_58;
319    V32 debug_59;
320    V32 pad_59;
321
322    /* 60 (0x1e0) */
323    V32 timestamp;
324    V32 pad_60;
325
326    /* 61-63 (0x1e8-0x1f8) */
327    V32 debug_61;
328    V32 pad_61;
329    V32 debug_62;
330    V32 pad_62;
331    V32 debug_63;
332    V32 pad_63;
333
334    /* 64-71 (0x200 - 0x238) */
335    DMA_DESC_LEVEL rx_desc_level[8];    /* 2 dwords each, 32 bytes tot. */
336
337    /* 72-98 (0x240 - 0x2f8) */
338    /* reserved */
339
340    /* 96-127 (0x300 - 0x3f8) */
341    /* mirrors (0x100 - 0x1f8) */
342
343} PBB_DMA_REG_MAP;
344
345
346#endif /* ZUMA_PBB_H */
Note: See TracBrowser for help on using the repository browser.