ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.6.tar.bz2
[linux-2.6.git] / include / asm-ppc / immap_8260.h
1 /*
2  * MPC8260 Internal Memory Map
3  * Copyright (c) 1999 Dan Malek (dmalek@jlc.net)
4  *
5  * The Internal Memory Map of the 8260.  I don't know how generic
6  * this will be, as I don't have any knowledge of the subsequent
7  * parts at this time.  I copied this from the 8xx_immap.h.
8  */
9 #ifdef __KERNEL__
10 #ifndef __IMMAP_82XX__
11 #define __IMMAP_82XX__
12
13 /* System configuration registers.
14 */
15 typedef struct sys_conf {
16         uint    sc_siumcr;
17         uint    sc_sypcr;
18         char    res1[6];
19         ushort  sc_swsr;
20         char    res2[20];
21         uint    sc_bcr;
22         u_char  sc_ppc_acr;
23         char    res3[3];
24         uint    sc_ppc_alrh;
25         uint    sc_ppc_alrl;
26         u_char  sc_lcl_acr;
27         char    res4[3];
28         uint    sc_lcl_alrh;
29         uint    sc_lcl_alrl;
30         uint    sc_tescr1;
31         uint    sc_tescr2;
32         uint    sc_ltescr1;
33         uint    sc_ltescr2;
34         uint    sc_pdtea;
35         u_char  sc_pdtem;
36         char    res5[3];
37         uint    sc_ldtea;
38         u_char  sc_ldtem;
39         char    res6[163];
40 } sysconf8260_t;
41
42
43 /* Memory controller registers.
44 */
45 typedef struct  mem_ctlr {
46         uint    memc_br0;
47         uint    memc_or0;
48         uint    memc_br1;
49         uint    memc_or1;
50         uint    memc_br2;
51         uint    memc_or2;
52         uint    memc_br3;
53         uint    memc_or3;
54         uint    memc_br4;
55         uint    memc_or4;
56         uint    memc_br5;
57         uint    memc_or5;
58         uint    memc_br6;
59         uint    memc_or6;
60         uint    memc_br7;
61         uint    memc_or7;
62         uint    memc_br8;
63         uint    memc_or8;
64         uint    memc_br9;
65         uint    memc_or9;
66         uint    memc_br10;
67         uint    memc_or10;
68         uint    memc_br11;
69         uint    memc_or11;
70         char    res1[8];
71         uint    memc_mar;
72         char    res2[4];
73         uint    memc_mamr;
74         uint    memc_mbmr;
75         uint    memc_mcmr;
76         char    res3[8];
77         ushort  memc_mptpr;
78         char    res4[2];
79         uint    memc_mdr;
80         char    res5[4];
81         uint    memc_psdmr;
82         uint    memc_lsdmr;
83         u_char  memc_purt;
84         char    res6[3];
85         u_char  memc_psrt;
86         char    res7[3];
87         u_char  memc_lurt;
88         char    res8[3];
89         u_char  memc_lsrt;
90         char    res9[3];
91         uint    memc_immr;
92         char    res10[84];
93 } memctl8260_t;
94
95 /* System Integration Timers.
96 */
97 typedef struct  sys_int_timers {
98         char    res1[32];
99         ushort  sit_tmcntsc;
100         char    res2[2];
101         uint    sit_tmcnt;
102         char    res3[4];
103         uint    sit_tmcntal;
104         char    res4[16];
105         ushort  sit_piscr;
106         char    res5[2];
107         uint    sit_pitc;
108         uint    sit_pitr;
109         char    res6[94];
110         char    res7[2390];
111 } sit8260_t;
112
113 #define PISCR_PIRQ_MASK         ((ushort)0xff00)
114 #define PISCR_PS                ((ushort)0x0080)
115 #define PISCR_PIE               ((ushort)0x0004)
116 #define PISCR_PTF               ((ushort)0x0002)
117 #define PISCR_PTE               ((ushort)0x0001)
118
119 /* Interrupt Controller.
120 */
121 typedef struct interrupt_controller {
122         ushort  ic_sicr;
123         char    res1[2];
124         uint    ic_sivec;
125         uint    ic_sipnrh;
126         uint    ic_sipnrl;
127         uint    ic_siprr;
128         uint    ic_scprrh;
129         uint    ic_scprrl;
130         uint    ic_simrh;
131         uint    ic_simrl;
132         uint    ic_siexr;
133         char    res2[88];
134 } intctl8260_t;
135
136 /* Clocks and Reset.
137 */
138 typedef struct clk_and_reset {
139         uint    car_sccr;
140         char    res1[4];
141         uint    car_scmr;
142         char    res2[4];
143         uint    car_rsr;
144         uint    car_rmr;
145         char    res[104];
146 } car8260_t;
147
148 /* Input/Output Port control/status registers.
149  * Names consistent with processor manual, although they are different
150  * from the original 8xx names.......
151  */
152 typedef struct io_port {
153         uint    iop_pdira;
154         uint    iop_ppara;
155         uint    iop_psora;
156         uint    iop_podra;
157         uint    iop_pdata;
158         char    res1[12];
159         uint    iop_pdirb;
160         uint    iop_pparb;
161         uint    iop_psorb;
162         uint    iop_podrb;
163         uint    iop_pdatb;
164         char    res2[12];
165         uint    iop_pdirc;
166         uint    iop_pparc;
167         uint    iop_psorc;
168         uint    iop_podrc;
169         uint    iop_pdatc;
170         char    res3[12];
171         uint    iop_pdird;
172         uint    iop_ppard;
173         uint    iop_psord;
174         uint    iop_podrd;
175         uint    iop_pdatd;
176         char    res4[12];
177 } iop8260_t;
178
179 /* Communication Processor Module Timers
180 */
181 typedef struct cpm_timers {
182         u_char  cpmt_tgcr1;
183         char    res1[3];
184         u_char  cpmt_tgcr2;
185         char    res2[11];
186         ushort  cpmt_tmr1;
187         ushort  cpmt_tmr2;
188         ushort  cpmt_trr1;
189         ushort  cpmt_trr2;
190         ushort  cpmt_tcr1;
191         ushort  cpmt_tcr2;
192         ushort  cpmt_tcn1;
193         ushort  cpmt_tcn2;
194         ushort  cpmt_tmr3;
195         ushort  cpmt_tmr4;
196         ushort  cpmt_trr3;
197         ushort  cpmt_trr4;
198         ushort  cpmt_tcr3;
199         ushort  cpmt_tcr4;
200         ushort  cpmt_tcn3;
201         ushort  cpmt_tcn4;
202         ushort  cpmt_ter1;
203         ushort  cpmt_ter2;
204         ushort  cpmt_ter3;
205         ushort  cpmt_ter4;
206         char    res3[584];
207 } cpmtimer8260_t;
208
209 /* DMA control/status registers.
210 */
211 typedef struct sdma_csr {
212         char    res0[24];
213         u_char  sdma_sdsr;
214         char    res1[3];
215         u_char  sdma_sdmr;
216         char    res2[3];
217         u_char  sdma_idsr1;
218         char    res3[3];
219         u_char  sdma_idmr1;
220         char    res4[3];
221         u_char  sdma_idsr2;
222         char    res5[3];
223         u_char  sdma_idmr2;
224         char    res6[3];
225         u_char  sdma_idsr3;
226         char    res7[3];
227         u_char  sdma_idmr3;
228         char    res8[3];
229         u_char  sdma_idsr4;
230         char    res9[3];
231         u_char  sdma_idmr4;
232         char    res10[707];
233 } sdma8260_t;
234
235 /* Fast controllers
236 */
237 typedef struct fcc {
238         uint    fcc_gfmr;
239         uint    fcc_fpsmr;
240         ushort  fcc_ftodr;
241         char    res1[2];
242         ushort  fcc_fdsr;
243         char    res2[2];
244         ushort  fcc_fcce;
245         char    res3[2];
246         ushort  fcc_fccm;
247         char    res4[2];
248         u_char  fcc_fccs;
249         char    res5[3];
250         u_char  fcc_ftirr_phy[4];
251 } fcc_t;
252
253 /* I2C
254 */
255 typedef struct i2c {
256         u_char  i2c_i2mod;
257         char    res1[3];
258         u_char  i2c_i2add;
259         char    res2[3];
260         u_char  i2c_i2brg;
261         char    res3[3];
262         u_char  i2c_i2com;
263         char    res4[3];
264         u_char  i2c_i2cer;
265         char    res5[3];
266         u_char  i2c_i2cmr;
267         char    res6[331];
268 } i2c8260_t;
269
270 typedef struct scc {            /* Serial communication channels */
271         uint    scc_gsmrl;
272         uint    scc_gsmrh;
273         ushort  scc_pmsr;
274         char    res1[2];
275         ushort  scc_todr;
276         ushort  scc_dsr;
277         ushort  scc_scce;
278         char    res2[2];
279         ushort  scc_sccm;
280         char    res3;
281         u_char  scc_sccs;
282         char    res4[8];
283 } scc_t;
284
285 typedef struct smc {            /* Serial management channels */
286         char    res1[2];
287         ushort  smc_smcmr;
288         char    res2[2];
289         u_char  smc_smce;
290         char    res3[3];
291         u_char  smc_smcm;
292         char    res4[5];
293 } smc_t;
294
295 /* Serial Peripheral Interface.
296 */
297 typedef struct spi {
298         ushort  spi_spmode;
299         char    res1[4];
300         u_char  spi_spie;
301         char    res2[3];
302         u_char  spi_spim;
303         char    res3[2];
304         u_char  spi_spcom;
305         char    res4[82];
306 } spi_t;
307
308 /* CPM Mux.
309 */
310 typedef struct cpmux {
311         u_char  cmx_si1cr;
312         char    res1;
313         u_char  cmx_si2cr;
314         char    res2;
315         uint    cmx_fcr;
316         uint    cmx_scr;
317         u_char  cmx_smr;
318         char    res3;
319         ushort  cmx_uar;
320         char    res4[16];
321 } cpmux_t;
322
323 /* SIRAM control
324 */
325 typedef struct siram {
326         ushort  si_amr;
327         ushort  si_bmr;
328         ushort  si_cmr;
329         ushort  si_dmr;
330         u_char  si_gmr;
331         char    res1;
332         u_char  si_cmdr;
333         char    res2;
334         u_char  si_str;
335         char    res3;
336         ushort  si_rsr;
337 } siramctl_t;
338
339 typedef struct mcc {
340         ushort  mcc_mcce;
341         char    res1[2];
342         ushort  mcc_mccm;
343         char    res2[2];
344         u_char  mcc_mccf;
345         char    res3[7];
346 } mcc_t;
347
348 typedef struct comm_proc {
349         uint    cp_cpcr;
350         uint    cp_rccr;
351         char    res1[14];
352         ushort  cp_rter;
353         char    res2[2];
354         ushort  cp_rtmr;
355         ushort  cp_rtscr;
356         char    res3[2];
357         uint    cp_rtsr;
358         char    res4[12];
359 } cpm8260_t;
360
361 /* ...and the whole thing wrapped up....
362 */
363 typedef struct immap {
364         /* Some references are into the unique and known dpram spaces,
365          * others are from the generic base.
366          */
367 #define im_dprambase    im_dpram1
368         u_char          im_dpram1[16*1024];
369         char            res1[16*1024];
370         u_char          im_dpram2[4*1024];
371         char            res2[8*1024];
372         u_char          im_dpram3[4*1024];
373         char            res3[16*1024];
374
375         sysconf8260_t   im_siu_conf;    /* SIU Configuration */
376         memctl8260_t    im_memctl;      /* Memory Controller */
377         sit8260_t       im_sit;         /* System Integration Timers */
378         intctl8260_t    im_intctl;      /* Interrupt Controller */
379         car8260_t       im_clkrst;      /* Clocks and reset */
380         iop8260_t       im_ioport;      /* IO Port control/status */
381         cpmtimer8260_t  im_cpmtimer;    /* CPM timers */
382         sdma8260_t      im_sdma;        /* SDMA control/status */
383
384         fcc_t           im_fcc[3];      /* Three FCCs */
385
386         char            res4[159];
387
388         /* First set of baud rate generators.
389         */
390         char            res4a[496];
391         uint            im_brgc5;
392         uint            im_brgc6;
393         uint            im_brgc7;
394         uint            im_brgc8;
395
396         char            res5[608];
397
398         i2c8260_t       im_i2c;         /* I2C control/status */
399         cpm8260_t       im_cpm;         /* Communication processor */
400
401         /* Second set of baud rate generators.
402         */
403         uint            im_brgc1;
404         uint            im_brgc2;
405         uint            im_brgc3;
406         uint            im_brgc4;
407
408         scc_t           im_scc[4];      /* Four SCCs */
409         smc_t           im_smc[2];      /* Couple of SMCs */
410         spi_t           im_spi;         /* A SPI */
411         cpmux_t         im_cpmux;       /* CPM clock route mux */
412         siramctl_t      im_siramctl1;   /* First SI RAM Control */
413         mcc_t           im_mcc1;        /* First MCC */
414         siramctl_t      im_siramctl2;   /* Second SI RAM Control */
415         mcc_t           im_mcc2;        /* Second MCC */
416
417         char            res6[1184];
418
419         ushort          im_si1txram[256];
420         char            res7[512];
421         ushort          im_si1rxram[256];
422         char            res8[512];
423         ushort          im_si2txram[256];
424         char            res9[512];
425         ushort          im_si2rxram[256];
426         char            res10[512];
427         char            res11[4096];
428 } immap_t;
429
430 extern immap_t  *immr;
431
432 #endif /* __IMMAP_82XX__ */
433 #endif /* __KERNEL__ */