to make u-boot work for fat32 filesystem
[jz_uboot.git] / board / siemens / IAD210 / atm.h
blob71b049725d3e2740fe1aaa3db43e7227fb55b1af
1 typedef unsigned char uint8;
2 typedef unsigned short uint16;
3 typedef unsigned int uint32;
4 typedef volatile unsigned char vuint8;
5 typedef volatile unsigned short vuint16;
6 typedef volatile unsigned int vuint32;
9 #define DPRAM_ATM CFG_IMMR + 0x3000
11 #define ATM_DPRAM_BEGIN (DPRAM_ATM - CFG_IMMR - 0x2000)
12 #define NUM_CONNECTIONS 1
13 #define SAR_RXB_SIZE 1584
14 #define AM_HMASK 0x0FFFFFF0
16 #define NUM_CT_ENTRIES (NUM_CONNECTIONS)
17 #define NUM_TCTE_ENTRIES (NUM_CONNECTIONS)
18 #define NUM_AM_ENTRIES (NUM_CONNECTIONS+1)
19 #define NUM_AP_ENTRIES (NUM_CONNECTIONS+1)
20 #define NUM_MPHYPT_ENTRIES 1
21 #define NUM_APCP_ENTRIES 1
22 #define NUM_APCT_PRIO_1_ENTRIES 146 /* Determines minimum rate */
23 #define NUM_TQ_ENTRIES 12
25 #define SIZE_OF_CT_ENTRY 64
26 #define SIZE_OF_TCTE_ENTRY 32
27 #define SIZE_OF_AM_ENTRY 4
28 #define SIZE_OF_AP_ENTRY 2
29 #define SIZE_OF_MPHYPT_ENTRY 2
30 #define SIZE_OF_APCP_ENTRY 32
31 #define SIZE_OF_APCT_ENTRY 2
32 #define SIZE_OF_TQ_ENTRY 2
34 #define CT_BASE ((ATM_DPRAM_BEGIN + 63) & 0xFFC0) /*64 */
35 #define TCTE_BASE (CT_BASE + NUM_CT_ENTRIES * SIZE_OF_CT_ENTRY) /*32 */
36 #define APCP_BASE (TCTE_BASE + NUM_TCTE_ENTRIES * SIZE_OF_TCTE_ENTRY) /*32 */
37 #define AM_BEGIN (APCP_BASE + NUM_APCP_ENTRIES * SIZE_OF_APCP_ENTRY) /*4 */
38 #define AM_BASE (AM_BEGIN + (NUM_AM_ENTRIES - 1) * SIZE_OF_AM_ENTRY)
39 #define AP_BEGIN (AM_BEGIN + NUM_AM_ENTRIES * SIZE_OF_AM_ENTRY) /*2 */
40 #define AP_BASE (AP_BEGIN + (NUM_AP_ENTRIES - 1) * SIZE_OF_AP_ENTRY)
41 #define MPHYPT_BASE (AP_BEGIN + NUM_AP_ENTRIES * SIZE_OF_AP_ENTRY) /*2 */
42 #define APCT_PRIO_1_BASE (MPHYPT_BASE + NUM_MPHYPT_ENTRIES * SIZE_OF_MPHYPT_ENTRY) /*2 */
43 #define TQ_BASE (APCT_PRIO_1_BASE + NUM_APCT_PRIO_1_ENTRIES * SIZE_OF_APCT_ENTRY) /*2 */
44 #define ATM_DPRAM_SIZE ((TQ_BASE + NUM_TQ_ENTRIES * SIZE_OF_TQ_ENTRY) - ATM_DPRAM_BEGIN)
46 #define CT_PTR(base) ((struct ct_entry_t *)((char *)(base) + 0x2000 + CT_BASE))
47 #define TCTE_PTR(base) ((struct tcte_entry_t *)((char *)(base) + 0x2000 + TCTE_BASE))
48 #define AM_PTR(base) ((uint32 *)((char *)(base) + 0x2000 + AM_BASE))
49 #define AP_PTR(base) ((uint16 *)((char *)(base) + 0x2000 + AP_BASE))
50 #define MPHYPT_PTR(base) ((uint16 *)((char *)(base) + 0x2000 + MPHYPT_BASE))
51 #define APCP_PTR(base) ((struct apc_params_t *)((char*)(base) + 0x2000 + APCP_BASE))
52 #define APCT1_PTR(base) ((uint16 *)((char *)(base) + 0x2000 + APCT_PRIO_1_BASE))
53 #define APCT2_PTR(base) ((uint16 *)((char *)(base) + 0x2000 + APCT_PRIO_2_BASE))
54 #define APCT3_PTR(base) ((uint16 *)((char *)(base) + 0x2000 + APCT_PRIO_3_BASE))
55 #define TQ_PTR(base) ((uint16 *)((char *)(base) + 0x2000 + TQ_BASE))
57 /* SAR registers */
58 #define RBDBASE(base) ((vuint32 *)(base + 0x3F00)) /* Base address of RxBD-List */
59 #define SRFCR(base) ((vuint8 *)(base + 0x3F04)) /* DMA Receive function code */
60 #define SRSTATE(base) ((vuint8 *)(base + 0x3F05)) /* DMA Receive status */
61 #define MRBLR(base) ((vuint16 *)(base + 0x3F06)) /* Init to 0 for ATM */
62 #define RSTATE(base) ((vuint32 *)(base + 0x3F08)) /* Do not write to */
63 #define R_CNT(base) ((vuint16 *)(base + 0x3F10)) /* Do not write to */
64 #define STFCR(base) ((vuint8 *)(base + 0x3F12)) /* DMA Transmit function code */
65 #define STSTATE(base) ((vuint8 *)(base + 0x3F13)) /* DMA Transmit status */
66 #define TBDBASE(base) ((vuint32 *)(base + 0x3F14)) /* Base address of TxBD-List */
67 #define TSTATE(base) ((vuint32 *)(base + 0x3F18)) /* Do not write to */
68 #define COMM_CH(base) ((vuint16 *)(base + 0x3F1C)) /* Command channel */
69 #define STCHNUM(base) ((vuint16 *)(base + 0x3F1E)) /* Do not write to */
70 #define T_CNT(base) ((vuint16 *)(base + 0x3F20)) /* Do not write to */
71 #define CTBASE(base) ((vuint16 *)(base + 0x3F22)) /* Base address of Connection-table */
72 #define ECTBASE(base) ((vuint32 *)(base + 0x3F24)) /* Valid only for external Conn.-table */
73 #define INTBASE(base) ((vuint32 *)(base + 0x3F28)) /* Base address of Interrupt-table */
74 #define INTPTR(base) ((vuint32 *)(base + 0x3F2C)) /* Pointer to Interrupt-queue */
75 #define C_MASK(base) ((vuint32 *)(base + 0x3F30)) /* CRC-mask */
76 #define SRCHNUM(base) ((vuint16 *)(base + 0x3F34)) /* Do not write to */
77 #define INT_CNT(base) ((vuint16 *)(base + 0x3F36)) /* Interrupt-Counter */
78 #define INT_ICNT(base) ((vuint16 *)(base + 0x3F38)) /* Interrupt threshold */
79 #define TSTA(base) ((vuint16 *)(base + 0x3F3A)) /* Time-stamp-address */
80 #define OLDLEN(base) ((vuint16 *)(base + 0x3F3C)) /* Do not write to */
81 #define SMRBLR(base) ((vuint16 *)(base + 0x3F3E)) /* SAR max RXBuffer length */
82 #define EHEAD(base) ((vuint32 *)(base + 0x3F40)) /* Valid for serial mode */
83 #define EPAYLOAD(base) ((vuint32 *)(base + 0x3F44)) /* Valid for serial mode */
84 #define TQBASE(base) ((vuint16 *)(base + 0x3F48)) /* Base address of Tx queue */
85 #define TQEND(base) ((vuint16 *)(base + 0x3F4A)) /* End address of Tx queue */
86 #define TQAPTR(base) ((vuint16 *)(base + 0x3F4C)) /* TQ APC pointer */
87 #define TQTPTR(base) ((vuint16 *)(base + 0x3F4E)) /* TQ Tx pointer */
88 #define APCST(base) ((vuint16 *)(base + 0x3F50)) /* APC status */
89 #define APCPTR(base) ((vuint16 *)(base + 0x3F52)) /* APC parameter pointer */
90 #define HMASK(base) ((vuint32 *)(base + 0x3F54)) /* Header mask */
91 #define AMBASE(base) ((vuint16 *)(base + 0x3F58)) /* Address match table base */
92 #define AMEND(base) ((vuint16 *)(base + 0x3F5A)) /* Address match table end */
93 #define APBASE(base) ((vuint16 *)(base + 0x3F5C)) /* Address match parameter */
94 #define FLBASE(base) ((vuint32 *)(base + 0x3F54)) /* First-level table base */
95 #define SLBASE(base) ((vuint32 *)(base + 0x3F58)) /* Second-level table base */
96 #define FLMASK(base) ((vuint16 *)(base + 0x3F5C)) /* First-level mask */
97 #define ECSIZE(base) ((vuint16 *)(base + 0x3F5E)) /* Valid for extended mode */
98 #define APCT_REAL(base) ((vuint32 *)(base + 0x3F60)) /* APC 32 bit counter */
99 #define R_PTR(base) ((vuint32 *)(base + 0x3F64)) /* Do not write to */
100 #define RTEMP(base) ((vuint32 *)(base + 0x3F68)) /* Do not write to */
101 #define T_PTR(base) ((vuint32 *)(base + 0x3F6C)) /* Do not write to */
102 #define TTEMP(base) ((vuint32 *)(base + 0x3F70)) /* Do not write to */
104 /* ESAR registers */
105 #define FMCTIMESTMP(base) ((vuint32 *)(base + 0x3F80)) /* Perf.Mon.Timestamp */
106 #define FMCTEMPLATE(base) ((vuint32 *)(base + 0x3F84)) /* Perf.Mon.Template */
107 #define PMPTR(base) ((vuint16 *)(base + 0x3F88)) /* Perf.Mon.Table */
108 #define PMCHANNEL(base) ((vuint16 *)(base + 0x3F8A)) /* Perf.Mon.Channel */
109 #define MPHYST(base) ((vuint16 *)(base + 0x3F90)) /* Multi-PHY Status */
110 #define TCTEBASE(base) ((vuint16 *)(base + 0x3F92)) /* Internal TCT Extension Base */
111 #define ETCTEBASE(base) ((vuint32 *)(base + 0x3F94)) /* External TCT Extension Base */
112 #define COMM_CH2(base) ((vuint32 *)(base + 0x3F98)) /* 2nd command channel word */
113 #define STATBASE(base) ((vuint16 *)(base + 0x3F9C)) /* Statistics table pointer */
115 /* UTOPIA Mode Register */
116 #define UTMODE(base) (CAST(vuint32 *)(base + 0x0978))
118 /* SAR commands */
119 #define TRANSMIT_CHANNEL_ACTIVATE_CMD 0x0FC1
120 #define TRANSMIT_CHANNEL_DEACTIVATE_CMD 0x1FC1
121 #define STOP_TRANSMIT_CMD 0x2FC1
122 #define RESTART_TRANSMIT_CMD 0x3FC1
123 #define STOP_RECEIVE_CMD 0x4FC1
124 #define RESTART_RECEIVE_CMD 0x5FC1
125 #define APC_BYPASS_CMD 0x6FC1
126 #define MEM_WRITE_CMD 0x7FC1
127 #define CPCR_FLG 0x0001
129 /* INT flags */
130 #define INT_VALID 0x80000000
131 #define INT_WRAP 0x40000000
132 #define INT_APCO 0x00800000
133 #define INT_TQF 0x00200000
134 #define INT_RXF 0x00080000
135 #define INT_BSY 0x00040000
136 #define INT_TXB 0x00020000
137 #define INT_RXB 0x00010000
139 #define NUM_INT_ENTRIES 80
140 #define SIZE_OF_INT_ENTRY 4
142 struct apc_params_t {
143 vuint16 apct_base1; /* APC Table - First Priority Base pointer */
144 vuint16 apct_end1; /* First APC Table - Length */
145 vuint16 apct_ptr1; /* First APC Table Pointer */
146 vuint16 apct_sptr1; /* APC Table First Priority Service pointer */
147 vuint16 etqbase; /* Enhanced Transmit Queue Base pointer */
148 vuint16 etqend; /* Enhanced Transmit Queue End pointer */
149 vuint16 etqaptr; /* Enhanced Transmit Queue APC pointer */
150 vuint16 etqtptr; /* Enhanced Transmit Queue Transmitter pointer */
151 vuint16 apc_mi; /* APC - Max Iteration */
152 vuint16 ncits; /* Number of Cells In TimeSlot */
153 vuint16 apcnt; /* APC - N Timer */
154 vuint16 reserved1; /* reserved */
155 vuint16 eapcst; /* APC status */
156 vuint16 ptp_counter; /* PTP queue length */
157 vuint16 ptp_txch; /* PTP channel */
158 vuint16 reserved2; /* reserved */
161 struct ct_entry_t {
162 /* RCT */
163 unsigned fhnt:1;
164 unsigned pm_rct:1;
165 unsigned reserved0:6;
166 unsigned hec:1;
167 unsigned clp:1;
168 unsigned cng_ncrc:1;
169 unsigned inf_rct:1;
170 unsigned cngi_ptp:1;
171 unsigned cdis_rct:1;
172 unsigned aal_rct:2;
173 uint16 rbalen;
174 uint32 rcrc;
175 uint32 rb_ptr;
176 uint16 rtmlen;
177 uint16 rbd_ptr;
178 uint16 rbase;
179 uint16 tstamp;
180 uint16 imask;
181 unsigned ft:2;
182 unsigned nim:1;
183 unsigned reserved1:2;
184 unsigned rpmt:6;
185 unsigned reserved2:5;
186 uint8 reserved3[8];
187 /* TCT */
188 unsigned reserved4:1;
189 unsigned pm_tct:1;
190 unsigned reserved5:6;
191 unsigned pc:1;
192 unsigned reserved6:2;
193 unsigned inf_tct:1;
194 unsigned cr10:1;
195 unsigned cdis_tct:1;
196 unsigned aal_tct:2;
197 uint16 tbalen;
198 uint32 tcrc;
199 uint32 tb_ptr;
200 uint16 ttmlen;
201 uint16 tbd_ptr;
202 uint16 tbase;
203 unsigned reserved7:5;
204 unsigned tpmt:6;
205 unsigned reserved8:3;
206 unsigned avcf:1;
207 unsigned act:1;
208 uint32 chead;
209 uint16 apcl;
210 uint16 apcpr;
211 unsigned out:1;
212 unsigned bnr:1;
213 unsigned tservice:2;
214 unsigned apcp:12;
215 uint16 apcpf;
218 struct tcte_entry_t {
219 unsigned res1:4;
220 unsigned scr:12;
221 uint16 scrf;
222 uint16 bt;
223 uint16 buptrh;
224 uint32 buptrl;
225 unsigned vbr2:1;
226 unsigned res2:15;
227 uint16 oobr;
228 uint16 res3[8];
231 #define SIZE_OF_RBD 12
232 #define SIZE_OF_TBD 12
234 struct atm_bd_t {
235 vuint16 flags;
236 vuint16 length;
237 unsigned char *buffer_ptr;
238 vuint16 cpcs_uu_cpi;
239 vuint16 reserved;
242 /* BD flags */
243 #define EMPTY 0x8000
244 #define READY 0x8000
245 #define WRAP 0x2000
246 #define INTERRUPT 0x1000
247 #define LAST 0x0800
248 #define FIRST 0x0400
249 #define OAM 0x0400
250 #define CONTINUOUS 0x0200
251 #define HEC_ERROR 0x0080
252 #define CELL_LOSS 0x0040
253 #define CONGESTION 0x0020
254 #define ABORT 0x0010
255 #define LEN_ERROR 0x0002
256 #define CRC_ERROR 0x0001
258 struct atm_connection_t {
259 struct atm_bd_t *rbd_ptr;
260 int num_rbd;
261 struct atm_bd_t *tbd_ptr;
262 int num_tbd;
263 struct ct_entry_t *ct_ptr;
264 struct tcte_entry_t *tcte_ptr;
265 void *drv;
266 void (*notify) (void *drv, int event);
269 struct atm_driver_t {
270 int loaded;
271 int started;
272 char *csram;
273 int csram_size;
274 uint32 *am_top;
275 uint16 *ap_top;
276 uint32 *int_reload_ptr;
277 uint32 *int_serv_ptr;
278 struct atm_bd_t *rbd_base_ptr;
279 struct atm_bd_t *tbd_base_ptr;
280 unsigned linerate_in_bps;
283 extern struct atm_connection_t g_conn[NUM_CONNECTIONS];
284 extern struct atm_driver_t g_atm;
286 extern int atmLoad (void);
287 extern void atmUnload (void);