]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /*****************************************************************************/ |
2 | ||
3 | /* | |
4 | * sc26198.h -- SC26198 UART hardware info. | |
5 | * | |
6 | * Copyright (C) 1995-1998 Stallion Technologies | |
7 | * | |
8 | * This program is free software; you can redistribute it and/or modify | |
9 | * it under the terms of the GNU General Public License as published by | |
10 | * the Free Software Foundation; either version 2 of the License, or | |
11 | * (at your option) any later version. | |
12 | * | |
13 | * This program is distributed in the hope that it will be useful, | |
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 | * GNU General Public License for more details. | |
17 | * | |
18 | * You should have received a copy of the GNU General Public License | |
19 | * along with this program; if not, write to the Free Software | |
20 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |
21 | */ | |
22 | ||
23 | /*****************************************************************************/ | |
24 | #ifndef _SC26198_H | |
25 | #define _SC26198_H | |
26 | /*****************************************************************************/ | |
27 | ||
28 | /* | |
29 | * Define the number of async ports per sc26198 uart device. | |
30 | */ | |
31 | #define SC26198_PORTS 8 | |
32 | ||
33 | /* | |
34 | * Baud rate timing clocks. All derived from a master 14.7456 MHz clock. | |
35 | */ | |
36 | #define SC26198_MASTERCLOCK 14745600L | |
37 | #define SC26198_DCLK (SC26198_MASTERCLOCK) | |
38 | #define SC26198_CCLK (SC26198_MASTERCLOCK / 2) | |
39 | #define SC26198_BCLK (SC26198_MASTERCLOCK / 4) | |
40 | ||
41 | /* | |
42 | * Define internal FIFO sizes for the 26198 ports. | |
43 | */ | |
44 | #define SC26198_TXFIFOSIZE 16 | |
45 | #define SC26198_RXFIFOSIZE 16 | |
46 | ||
47 | /*****************************************************************************/ | |
48 | ||
49 | /* | |
50 | * Global register definitions. These registers are global to each 26198 | |
51 | * device, not specific ports on it. | |
52 | */ | |
53 | #define TSTR 0x0d | |
54 | #define GCCR 0x0f | |
55 | #define ICR 0x1b | |
56 | #define WDTRCR 0x1d | |
57 | #define IVR 0x1f | |
58 | #define BRGTRUA 0x84 | |
59 | #define GPOSR 0x87 | |
60 | #define GPOC 0x8b | |
61 | #define UCIR 0x8c | |
62 | #define CIR 0x8c | |
63 | #define BRGTRUB 0x8d | |
64 | #define GRXFIFO 0x8e | |
65 | #define GTXFIFO 0x8e | |
66 | #define GCCR2 0x8f | |
67 | #define BRGTRLA 0x94 | |
68 | #define GPOR 0x97 | |
69 | #define GPOD 0x9b | |
70 | #define BRGTCR 0x9c | |
71 | #define GICR 0x9c | |
72 | #define BRGTRLB 0x9d | |
73 | #define GIBCR 0x9d | |
74 | #define GITR 0x9f | |
75 | ||
76 | /* | |
77 | * Per port channel registers. These are the register offsets within | |
78 | * the port address space, so need to have the port address (0 to 7) | |
79 | * inserted in bit positions 4:6. | |
80 | */ | |
81 | #define MR0 0x00 | |
82 | #define MR1 0x01 | |
83 | #define IOPCR 0x02 | |
84 | #define BCRBRK 0x03 | |
85 | #define BCRCOS 0x04 | |
86 | #define BCRX 0x06 | |
87 | #define BCRA 0x07 | |
88 | #define XONCR 0x08 | |
89 | #define XOFFCR 0x09 | |
90 | #define ARCR 0x0a | |
91 | #define RXCSR 0x0c | |
92 | #define TXCSR 0x0e | |
93 | #define MR2 0x80 | |
94 | #define SR 0x81 | |
95 | #define SCCR 0x81 | |
96 | #define ISR 0x82 | |
97 | #define IMR 0x82 | |
98 | #define TXFIFO 0x83 | |
99 | #define RXFIFO 0x83 | |
100 | #define IPR 0x84 | |
101 | #define IOPIOR 0x85 | |
102 | #define XISR 0x86 | |
103 | ||
104 | /* | |
105 | * For any given port calculate the address to use to access a specified | |
106 | * register. This is only used for unusual access, mostly this is done | |
107 | * through the assembler access routines. | |
108 | */ | |
109 | #define SC26198_PORTREG(port,reg) ((((port) & 0x07) << 4) | (reg)) | |
110 | ||
111 | /*****************************************************************************/ | |
112 | ||
113 | /* | |
114 | * Global configuration control register bit definitions. | |
115 | */ | |
116 | #define GCCR_NOACK 0x00 | |
117 | #define GCCR_IVRACK 0x02 | |
118 | #define GCCR_IVRCHANACK 0x04 | |
119 | #define GCCR_IVRTYPCHANACK 0x06 | |
120 | #define GCCR_ASYNCCYCLE 0x00 | |
121 | #define GCCR_SYNCCYCLE 0x40 | |
122 | ||
123 | /*****************************************************************************/ | |
124 | ||
125 | /* | |
126 | * Mode register 0 bit definitions. | |
127 | */ | |
128 | #define MR0_ADDRNONE 0x00 | |
129 | #define MR0_AUTOWAKE 0x01 | |
130 | #define MR0_AUTODOZE 0x02 | |
131 | #define MR0_AUTOWAKEDOZE 0x03 | |
132 | #define MR0_SWFNONE 0x00 | |
133 | #define MR0_SWFTX 0x04 | |
134 | #define MR0_SWFRX 0x08 | |
135 | #define MR0_SWFRXTX 0x0c | |
136 | #define MR0_TXMASK 0x30 | |
137 | #define MR0_TXEMPTY 0x00 | |
138 | #define MR0_TXHIGH 0x10 | |
139 | #define MR0_TXHALF 0x20 | |
140 | #define MR0_TXRDY 0x00 | |
141 | #define MR0_ADDRNT 0x00 | |
142 | #define MR0_ADDRT 0x40 | |
143 | #define MR0_SWFNT 0x00 | |
144 | #define MR0_SWFT 0x80 | |
145 | ||
146 | /* | |
147 | * Mode register 1 bit definitions. | |
148 | */ | |
149 | #define MR1_CS5 0x00 | |
150 | #define MR1_CS6 0x01 | |
151 | #define MR1_CS7 0x02 | |
152 | #define MR1_CS8 0x03 | |
153 | #define MR1_PAREVEN 0x00 | |
154 | #define MR1_PARODD 0x04 | |
155 | #define MR1_PARENB 0x00 | |
156 | #define MR1_PARFORCE 0x08 | |
157 | #define MR1_PARNONE 0x10 | |
158 | #define MR1_PARSPECIAL 0x18 | |
159 | #define MR1_ERRCHAR 0x00 | |
160 | #define MR1_ERRBLOCK 0x20 | |
161 | #define MR1_ISRUNMASKED 0x00 | |
162 | #define MR1_ISRMASKED 0x40 | |
163 | #define MR1_AUTORTS 0x80 | |
164 | ||
165 | /* | |
166 | * Mode register 2 bit definitions. | |
167 | */ | |
168 | #define MR2_STOP1 0x00 | |
169 | #define MR2_STOP15 0x01 | |
170 | #define MR2_STOP2 0x02 | |
171 | #define MR2_STOP916 0x03 | |
172 | #define MR2_RXFIFORDY 0x00 | |
173 | #define MR2_RXFIFOHALF 0x04 | |
174 | #define MR2_RXFIFOHIGH 0x08 | |
175 | #define MR2_RXFIFOFULL 0x0c | |
176 | #define MR2_AUTOCTS 0x10 | |
177 | #define MR2_TXRTS 0x20 | |
178 | #define MR2_MODENORM 0x00 | |
179 | #define MR2_MODEAUTOECHO 0x40 | |
180 | #define MR2_MODELOOP 0x80 | |
181 | #define MR2_MODEREMECHO 0xc0 | |
182 | ||
183 | /*****************************************************************************/ | |
184 | ||
185 | /* | |
186 | * Baud Rate Generator (BRG) selector values. | |
187 | */ | |
188 | #define BRG_50 0x00 | |
189 | #define BRG_75 0x01 | |
190 | #define BRG_150 0x02 | |
191 | #define BRG_200 0x03 | |
192 | #define BRG_300 0x04 | |
193 | #define BRG_450 0x05 | |
194 | #define BRG_600 0x06 | |
195 | #define BRG_900 0x07 | |
196 | #define BRG_1200 0x08 | |
197 | #define BRG_1800 0x09 | |
198 | #define BRG_2400 0x0a | |
199 | #define BRG_3600 0x0b | |
200 | #define BRG_4800 0x0c | |
201 | #define BRG_7200 0x0d | |
202 | #define BRG_9600 0x0e | |
203 | #define BRG_14400 0x0f | |
204 | #define BRG_19200 0x10 | |
205 | #define BRG_28200 0x11 | |
206 | #define BRG_38400 0x12 | |
207 | #define BRG_57600 0x13 | |
208 | #define BRG_115200 0x14 | |
209 | #define BRG_230400 0x15 | |
210 | #define BRG_GIN0 0x16 | |
211 | #define BRG_GIN1 0x17 | |
212 | #define BRG_CT0 0x18 | |
213 | #define BRG_CT1 0x19 | |
214 | #define BRG_RX2TX316 0x1b | |
215 | #define BRG_RX2TX31 0x1c | |
216 | ||
217 | #define SC26198_MAXBAUD 921600 | |
218 | ||
219 | /*****************************************************************************/ | |
220 | ||
221 | /* | |
222 | * Command register command definitions. | |
223 | */ | |
224 | #define CR_NULL 0x04 | |
225 | #define CR_ADDRNORMAL 0x0c | |
226 | #define CR_RXRESET 0x14 | |
227 | #define CR_TXRESET 0x1c | |
228 | #define CR_CLEARRXERR 0x24 | |
229 | #define CR_BREAKRESET 0x2c | |
230 | #define CR_TXSTARTBREAK 0x34 | |
231 | #define CR_TXSTOPBREAK 0x3c | |
232 | #define CR_RTSON 0x44 | |
233 | #define CR_RTSOFF 0x4c | |
234 | #define CR_ADDRINIT 0x5c | |
235 | #define CR_RXERRBLOCK 0x6c | |
236 | #define CR_TXSENDXON 0x84 | |
237 | #define CR_TXSENDXOFF 0x8c | |
238 | #define CR_GANGXONSET 0x94 | |
239 | #define CR_GANGXOFFSET 0x9c | |
240 | #define CR_GANGXONINIT 0xa4 | |
241 | #define CR_GANGXOFFINIT 0xac | |
242 | #define CR_HOSTXON 0xb4 | |
243 | #define CR_HOSTXOFF 0xbc | |
244 | #define CR_CANCELXOFF 0xc4 | |
245 | #define CR_ADDRRESET 0xdc | |
246 | #define CR_RESETALLPORTS 0xf4 | |
247 | #define CR_RESETALL 0xfc | |
248 | ||
249 | #define CR_RXENABLE 0x01 | |
250 | #define CR_TXENABLE 0x02 | |
251 | ||
252 | /*****************************************************************************/ | |
253 | ||
254 | /* | |
255 | * Channel status register. | |
256 | */ | |
257 | #define SR_RXRDY 0x01 | |
258 | #define SR_RXFULL 0x02 | |
259 | #define SR_TXRDY 0x04 | |
260 | #define SR_TXEMPTY 0x08 | |
261 | #define SR_RXOVERRUN 0x10 | |
262 | #define SR_RXPARITY 0x20 | |
263 | #define SR_RXFRAMING 0x40 | |
264 | #define SR_RXBREAK 0x80 | |
265 | ||
266 | #define SR_RXERRS (SR_RXPARITY | SR_RXFRAMING | SR_RXOVERRUN) | |
267 | ||
268 | /*****************************************************************************/ | |
269 | ||
270 | /* | |
271 | * Interrupt status register and interrupt mask register bit definitions. | |
272 | */ | |
273 | #define IR_TXRDY 0x01 | |
274 | #define IR_RXRDY 0x02 | |
275 | #define IR_RXBREAK 0x04 | |
276 | #define IR_XONXOFF 0x10 | |
277 | #define IR_ADDRRECOG 0x20 | |
278 | #define IR_RXWATCHDOG 0x40 | |
279 | #define IR_IOPORT 0x80 | |
280 | ||
281 | /*****************************************************************************/ | |
282 | ||
283 | /* | |
284 | * Interrupt vector register field definitions. | |
285 | */ | |
286 | #define IVR_CHANMASK 0x07 | |
287 | #define IVR_TYPEMASK 0x18 | |
288 | #define IVR_CONSTMASK 0xc0 | |
289 | ||
290 | #define IVR_RXDATA 0x10 | |
291 | #define IVR_RXBADDATA 0x18 | |
292 | #define IVR_TXDATA 0x08 | |
293 | #define IVR_OTHER 0x00 | |
294 | ||
295 | /*****************************************************************************/ | |
296 | ||
297 | /* | |
298 | * BRG timer control register bit definitions. | |
299 | */ | |
300 | #define BRGCTCR_DISABCLK0 0x00 | |
301 | #define BRGCTCR_ENABCLK0 0x08 | |
302 | #define BRGCTCR_DISABCLK1 0x00 | |
303 | #define BRGCTCR_ENABCLK1 0x80 | |
304 | ||
305 | #define BRGCTCR_0SCLK16 0x00 | |
306 | #define BRGCTCR_0SCLK32 0x01 | |
307 | #define BRGCTCR_0SCLK64 0x02 | |
308 | #define BRGCTCR_0SCLK128 0x03 | |
309 | #define BRGCTCR_0X1 0x04 | |
310 | #define BRGCTCR_0X12 0x05 | |
311 | #define BRGCTCR_0IO1A 0x06 | |
312 | #define BRGCTCR_0GIN0 0x07 | |
313 | ||
314 | #define BRGCTCR_1SCLK16 0x00 | |
315 | #define BRGCTCR_1SCLK32 0x10 | |
316 | #define BRGCTCR_1SCLK64 0x20 | |
317 | #define BRGCTCR_1SCLK128 0x30 | |
318 | #define BRGCTCR_1X1 0x40 | |
319 | #define BRGCTCR_1X12 0x50 | |
320 | #define BRGCTCR_1IO1B 0x60 | |
321 | #define BRGCTCR_1GIN1 0x70 | |
322 | ||
323 | /*****************************************************************************/ | |
324 | ||
325 | /* | |
326 | * Watch dog timer enable register. | |
327 | */ | |
328 | #define WDTRCR_ENABALL 0xff | |
329 | ||
330 | /*****************************************************************************/ | |
331 | ||
332 | /* | |
333 | * XON/XOFF interrupt status register. | |
334 | */ | |
335 | #define XISR_TXCHARMASK 0x03 | |
336 | #define XISR_TXCHARNORMAL 0x00 | |
337 | #define XISR_TXWAIT 0x01 | |
338 | #define XISR_TXXOFFPEND 0x02 | |
339 | #define XISR_TXXONPEND 0x03 | |
340 | ||
341 | #define XISR_TXFLOWMASK 0x0c | |
342 | #define XISR_TXNORMAL 0x00 | |
343 | #define XISR_TXSTOPPEND 0x04 | |
344 | #define XISR_TXSTARTED 0x08 | |
345 | #define XISR_TXSTOPPED 0x0c | |
346 | ||
347 | #define XISR_RXFLOWMASK 0x30 | |
348 | #define XISR_RXFLOWNONE 0x00 | |
349 | #define XISR_RXXONSENT 0x10 | |
350 | #define XISR_RXXOFFSENT 0x20 | |
351 | ||
352 | #define XISR_RXXONGOT 0x40 | |
353 | #define XISR_RXXOFFGOT 0x80 | |
354 | ||
355 | /*****************************************************************************/ | |
356 | ||
357 | /* | |
358 | * Current interrupt register. | |
359 | */ | |
360 | #define CIR_TYPEMASK 0xc0 | |
361 | #define CIR_TYPEOTHER 0x00 | |
362 | #define CIR_TYPETX 0x40 | |
363 | #define CIR_TYPERXGOOD 0x80 | |
364 | #define CIR_TYPERXBAD 0xc0 | |
365 | ||
366 | #define CIR_RXDATA 0x80 | |
367 | #define CIR_RXBADDATA 0x40 | |
368 | #define CIR_TXDATA 0x40 | |
369 | ||
370 | #define CIR_CHANMASK 0x07 | |
371 | #define CIR_CNTMASK 0x38 | |
372 | ||
373 | #define CIR_SUBTYPEMASK 0x38 | |
374 | #define CIR_SUBNONE 0x00 | |
375 | #define CIR_SUBCOS 0x08 | |
376 | #define CIR_SUBADDR 0x10 | |
377 | #define CIR_SUBXONXOFF 0x18 | |
378 | #define CIR_SUBBREAK 0x28 | |
379 | ||
380 | /*****************************************************************************/ | |
381 | ||
382 | /* | |
383 | * Global interrupting channel register. | |
384 | */ | |
385 | #define GICR_CHANMASK 0x07 | |
386 | ||
387 | /*****************************************************************************/ | |
388 | ||
389 | /* | |
390 | * Global interrupting byte count register. | |
391 | */ | |
392 | #define GICR_COUNTMASK 0x0f | |
393 | ||
394 | /*****************************************************************************/ | |
395 | ||
396 | /* | |
397 | * Global interrupting type register. | |
398 | */ | |
399 | #define GITR_RXMASK 0xc0 | |
400 | #define GITR_RXNONE 0x00 | |
401 | #define GITR_RXBADDATA 0x80 | |
402 | #define GITR_RXGOODDATA 0xc0 | |
403 | #define GITR_TXDATA 0x20 | |
404 | ||
405 | #define GITR_SUBTYPEMASK 0x07 | |
406 | #define GITR_SUBNONE 0x00 | |
407 | #define GITR_SUBCOS 0x01 | |
408 | #define GITR_SUBADDR 0x02 | |
409 | #define GITR_SUBXONXOFF 0x03 | |
410 | #define GITR_SUBBREAK 0x05 | |
411 | ||
412 | /*****************************************************************************/ | |
413 | ||
414 | /* | |
415 | * Input port change register. | |
416 | */ | |
417 | #define IPR_CTS 0x01 | |
418 | #define IPR_DTR 0x02 | |
419 | #define IPR_RTS 0x04 | |
420 | #define IPR_DCD 0x08 | |
421 | #define IPR_CTSCHANGE 0x10 | |
422 | #define IPR_DTRCHANGE 0x20 | |
423 | #define IPR_RTSCHANGE 0x40 | |
424 | #define IPR_DCDCHANGE 0x80 | |
425 | ||
426 | #define IPR_CHANGEMASK 0xf0 | |
427 | ||
428 | /*****************************************************************************/ | |
429 | ||
430 | /* | |
431 | * IO port interrupt and output register. | |
432 | */ | |
433 | #define IOPR_CTS 0x01 | |
434 | #define IOPR_DTR 0x02 | |
435 | #define IOPR_RTS 0x04 | |
436 | #define IOPR_DCD 0x08 | |
437 | #define IOPR_CTSCOS 0x10 | |
438 | #define IOPR_DTRCOS 0x20 | |
439 | #define IOPR_RTSCOS 0x40 | |
440 | #define IOPR_DCDCOS 0x80 | |
441 | ||
442 | /*****************************************************************************/ | |
443 | ||
444 | /* | |
445 | * IO port configuration register. | |
446 | */ | |
447 | #define IOPCR_SETCTS 0x00 | |
448 | #define IOPCR_SETDTR 0x04 | |
449 | #define IOPCR_SETRTS 0x10 | |
450 | #define IOPCR_SETDCD 0x00 | |
451 | ||
452 | #define IOPCR_SETSIGS (IOPCR_SETRTS | IOPCR_SETRTS | IOPCR_SETDTR | IOPCR_SETDCD) | |
453 | ||
454 | /*****************************************************************************/ | |
455 | ||
456 | /* | |
457 | * General purpose output select register. | |
458 | */ | |
459 | #define GPORS_TXC1XA 0x08 | |
460 | #define GPORS_TXC16XA 0x09 | |
461 | #define GPORS_RXC16XA 0x0a | |
462 | #define GPORS_TXC16XB 0x0b | |
463 | #define GPORS_GPOR3 0x0c | |
464 | #define GPORS_GPOR2 0x0d | |
465 | #define GPORS_GPOR1 0x0e | |
466 | #define GPORS_GPOR0 0x0f | |
467 | ||
468 | /*****************************************************************************/ | |
469 | ||
470 | /* | |
471 | * General purpose output register. | |
472 | */ | |
473 | #define GPOR_0 0x01 | |
474 | #define GPOR_1 0x02 | |
475 | #define GPOR_2 0x04 | |
476 | #define GPOR_3 0x08 | |
477 | ||
478 | /*****************************************************************************/ | |
479 | ||
480 | /* | |
481 | * General purpose output clock register. | |
482 | */ | |
483 | #define GPORC_0NONE 0x00 | |
484 | #define GPORC_0GIN0 0x01 | |
485 | #define GPORC_0GIN1 0x02 | |
486 | #define GPORC_0IO3A 0x02 | |
487 | ||
488 | #define GPORC_1NONE 0x00 | |
489 | #define GPORC_1GIN0 0x04 | |
490 | #define GPORC_1GIN1 0x08 | |
491 | #define GPORC_1IO3C 0x0c | |
492 | ||
493 | #define GPORC_2NONE 0x00 | |
494 | #define GPORC_2GIN0 0x10 | |
495 | #define GPORC_2GIN1 0x20 | |
496 | #define GPORC_2IO3E 0x20 | |
497 | ||
498 | #define GPORC_3NONE 0x00 | |
499 | #define GPORC_3GIN0 0x40 | |
500 | #define GPORC_3GIN1 0x80 | |
501 | #define GPORC_3IO3G 0xc0 | |
502 | ||
503 | /*****************************************************************************/ | |
504 | ||
505 | /* | |
506 | * General purpose output data register. | |
507 | */ | |
508 | #define GPOD_0MASK 0x03 | |
509 | #define GPOD_0SET1 0x00 | |
510 | #define GPOD_0SET0 0x01 | |
511 | #define GPOD_0SETR0 0x02 | |
512 | #define GPOD_0SETIO3B 0x03 | |
513 | ||
514 | #define GPOD_1MASK 0x0c | |
515 | #define GPOD_1SET1 0x00 | |
516 | #define GPOD_1SET0 0x04 | |
517 | #define GPOD_1SETR0 0x08 | |
518 | #define GPOD_1SETIO3D 0x0c | |
519 | ||
520 | #define GPOD_2MASK 0x30 | |
521 | #define GPOD_2SET1 0x00 | |
522 | #define GPOD_2SET0 0x10 | |
523 | #define GPOD_2SETR0 0x20 | |
524 | #define GPOD_2SETIO3F 0x30 | |
525 | ||
526 | #define GPOD_3MASK 0xc0 | |
527 | #define GPOD_3SET1 0x00 | |
528 | #define GPOD_3SET0 0x40 | |
529 | #define GPOD_3SETR0 0x80 | |
530 | #define GPOD_3SETIO3H 0xc0 | |
531 | ||
532 | /*****************************************************************************/ | |
533 | #endif |