1 /*
2 * rocket_int.h --- internal header file for rocket.c
3 *
4 * Written by Theodore Ts'o, Copyright 1997.
5 *
6 * Portions of this file are....
7 *
8 * Copyright 1994 Comtrol Corporation. All Rights Reserved.
9 *
10 * The following source code is subject to Comtrol Corporation's
11 * Developer's License Agreement.
12 *
13 * This source code is protected by United States copyright law and
14 * international copyright treaties.
15 *
16 * This source code may only be used to develop software products that
17 * will operate with Comtrol brand hardware.
18 *
19 * You may not reproduce nor distribute this source code in its original
20 * form but must produce a derivative work which includes portions of
21 * this source code only.
22 *
23 * The portions of this source code which you use in your derivative
24 * work must bear Comtrol's copyright notice:
25 *
26 * Copyright 1994 Comtrol Corporation.
27 *
28 */
29
30 /*
31 * Begin Comtrol-provided headers, et. al.
32 */
33
34 /*
35 user definitions for Rocket Toolkit
36
37 The following typedefs and defines must be established
38 depending on the platform the toolkit is being used
39 with.
40
41 */
42
43 /************************************************************
44 The following sets up the world for use with Linux
45 ************************************************************/
46
47 #include <asm/io.h>
48
49 typedef unsigned char Byte_t;
50 typedef unsigned int ByteIO_t;
51
52 typedef unsigned int Word_t;
53 typedef unsigned int WordIO_t;
54
55 typedef unsigned long DWord_t;
56 typedef unsigned int DWordIO_t;
57
58 #define sOutB(a, b) outb_p(b, a)
59 #define sOutW(a, b) outw_p(b, a)
60 #define sOutDW(a, b) outl_p(b, a)
61 #define sInB(a) (inb_p(a))
62 #define sInW(a) (inw_p(a))
63
64 #define sOutStrW(port, addr, count) outsw(port, addr, count)
65
66 #define sInStrW(port, addr, count) insw(port, addr, count)
67
68 #define CTL_SIZE 4
69 #define AIOP_CTL_SIZE 4
70 #define CHAN_AIOP_SIZE 8
71 #define MAX_PORTS_PER_AIOP 8
72 #define MAX_AIOPS_PER_BOARD 4
73 #define MAX_PORTS_PER_BOARD 32
74
75 /* Bus type ID */
76 #define isISA 0
77 #define isPCI 1
78 #define isMC 2
79
80 /* Controller ID numbers */
81 #define CTLID_NULL -1 /* no controller exists */
82 #define CTLID_0001 0x0001 /* controller release 1 */
83
84 /* AIOP ID numbers, identifies AIOP type implementing channel */
85 #define AIOPID_NULL -1 /* no AIOP or channel exists */
86 #define AIOPID_0001 0x0001 /* AIOP release 1 */
87
88 #define NULLDEV -1 /* identifies non-existant device */
89 #define NULLCTL -1 /* identifies non-existant controller */
90 #define NULLCTLPTR (CONTROLLER_T *)0 /* identifies non-existant controller */
91 #define NULLAIOP -1 /* identifies non-existant AIOP */
92 #define NULLCHAN -1 /* identifies non-existant channel */
93
94 /************************************************************************
95 Global Register Offsets - Direct Access - Fixed values
96 ************************************************************************/
97
98 #define _CMD_REG 0x38 /* Command Register 8 Write */
99 #define _INT_CHAN 0x39 /* Interrupt Channel Register 8 Read */
100 #define _INT_MASK 0x3A /* Interrupt Mask Register 8 Read / Write */
101 #define _UNUSED 0x3B /* Unused 8 */
102 #define _INDX_ADDR 0x3C /* Index Register Address 16 Write */
103 #define _INDX_DATA 0x3E /* Index Register Data 8/16 Read / Write */
104
105 /************************************************************************
106 Channel Register Offsets for 1st channel in AIOP - Direct Access
107 ************************************************************************/
108 #define _TD0 0x00 /* Transmit Data 16 Write */
109 #define _RD0 0x00 /* Receive Data 16 Read */
110 #define _CHN_STAT0 0x20 /* Channel Status 8/16 Read / Write */
111 #define _FIFO_CNT0 0x10 /* Transmit/Receive FIFO Count 16 Read */
112 #define _INT_ID0 0x30 /* Interrupt Identification 8 Read */
113
114 /************************************************************************
115 Tx Control Register Offsets - Indexed - External - Fixed
116 ************************************************************************/
117 #define _TX_ENBLS 0x980 /* Tx Processor Enables Register 8 Read / Write */
118 #define _TXCMP1 0x988 /* Transmit Compare Value #1 8 Read / Write */
119 #define _TXCMP2 0x989 /* Transmit Compare Value #2 8 Read / Write */
120 #define _TXREP1B1 0x98A /* Tx Replace Value #1 - Byte 1 8 Read / Write */
121 #define _TXREP1B2 0x98B /* Tx Replace Value #1 - Byte 2 8 Read / Write */
122 #define _TXREP2 0x98C /* Transmit Replace Value #2 8 Read / Write */
123
124 /************************************************************************
125 Memory Controller Register Offsets - Indexed - External - Fixed
126 ************************************************************************/
127 #define _RX_FIFO 0x000 /* Rx FIFO */
128 #define _TX_FIFO 0x800 /* Tx FIFO */
129 #define _RXF_OUTP 0x990 /* Rx FIFO OUT pointer 16 Read / Write */
130 #define _RXF_INP 0x992 /* Rx FIFO IN pointer 16 Read / Write */
131 #define _TXF_OUTP 0x994 /* Tx FIFO OUT pointer 8 Read / Write */
132 #define _TXF_INP 0x995 /* Tx FIFO IN pointer 8 Read / Write */
133 #define _TXP_CNT 0x996 /* Tx Priority Count 8 Read / Write */
134 #define _TXP_PNTR 0x997 /* Tx Priority Pointer 8 Read / Write */
135
136 #define PRI_PEND 0x80 /* Priority data pending (bit7, Tx pri cnt) */
137 #define TXFIFO_SIZE 255 /* size of Tx FIFO */
138 #define RXFIFO_SIZE 1023 /* size of Rx FIFO */
139
140 /************************************************************************
141 Tx Priority Buffer - Indexed - External - Fixed
142 ************************************************************************/
143 #define _TXP_BUF 0x9C0 /* Tx Priority Buffer 32 Bytes Read / Write */
144 #define TXP_SIZE 0x20 /* 32 bytes */
145
146 /************************************************************************
147 Channel Register Offsets - Indexed - Internal - Fixed
148 ************************************************************************/
149
150 #define _TX_CTRL 0xFF0 /* Transmit Control 16 Write */
151 #define _RX_CTRL 0xFF2 /* Receive Control 8 Write */
152 #define _BAUD 0xFF4 /* Baud Rate 16 Write */
153 #define _CLK_PRE 0xFF6 /* Clock Prescaler 8 Write */
154
155 #if 0
156 #define CLOCK_PRESC 0x14 /* ?????? new mod 4 (divide by 5) prescale */
157
158 #define BRD50 9215
159 #define BRD75 6143
160 #define BRD110 4188
161 #define BRD134 3438
162 #define BRD150 3071
163 #define BRD200 2303
164 #define BRD300 1535
165 #define BRD600 767
166 #define BRD1200 383
167 #define BRD1800 255
168 #define BRD2000 229
169 #define BRD2400 191
170 #define BRD3600 127
171 #define BRD4800 95
172 #define BRD7200 63
173 #define BRD9600 47
174 #define BRD14400 31
175 #define BRD19200 23
176 #define BRD38400 11
177 #define BRD57600 7
178 #define BRD76800 5
179 #define BRD115200 3
180 #define BRD230400 1
181 #define BRD460800 0
182 #endif
183
184 #if 0
185
186 /* Old clock prescale definition and baud rates associated with it */
187
188 #define CLOCK_PRESC 0x19 */ /* mod 9 (divide by 10) prescale */
189 #define BRD50 4607
190 #define BRD75 3071
191 #define BRD110 2094
192 #define BRD134 1712
193 #define BRD150 1535
194 #define BRD200 1151
195 #define BRD300 767
196 #define BRD600 383
197 #define BRD1200 191
198 #define BRD1800 127
199 #define BRD2000 114
200 #define BRD2400 95
201 #define BRD3600 64
202 #define BRD4800 47
203 #define BRD7200 31
204 #define BRD9600 23
205 #define BRD14400 15
206 #define BRD19200 11
207 #define BRD38400 5
208 #define BRD57600 3
209 #define BRD76800 2
210 #define BRD115200 1
211 #define BRD230400 0
212
213 #endif
214
215 #define STMBREAK 0x08 /* BREAK */
216 #define STMFRAME 0x04 /* framing error */
217 #define STMRCVROVR 0x02 /* receiver over run error */
218 #define STMPARITY 0x01 /* parity error */
219 #define STMERROR (STMBREAK | STMFRAME | STMPARITY)
220 #define STMBREAKH 0x800 /* BREAK */
221 #define STMFRAMEH 0x400 /* framing error */
222 #define STMRCVROVRH 0x200 /* receiver over run error */
223 #define STMPARITYH 0x100 /* parity error */
224 #define STMERRORH (STMBREAKH | STMFRAMEH | STMPARITYH)
225
226 #define CTS_ACT 0x20 /* CTS input asserted */
227 #define DSR_ACT 0x10 /* DSR input asserted */
228 #define CD_ACT 0x08 /* CD input asserted */
229 #define TXFIFOMT 0x04 /* Tx FIFO is empty */
230 #define TXSHRMT 0x02 /* Tx shift register is empty */
231 #define RDA 0x01 /* Rx data available */
232 #define DRAINED (TXFIFOMT | TXSHRMT) /* indicates Tx is drained */
233
234 #define STATMODE 0x8000 /* status mode enable bit */
235 #define RXFOVERFL 0x2000 /* receive FIFO overflow */
236 #define RX2MATCH 0x1000 /* receive compare byte 2 match */
237 #define RX1MATCH 0x0800 /* receive compare byte 1 match */
238 #define RXBREAK 0x0400 /* received BREAK */
239 #define RXFRAME 0x0200 /* received framing error */
240 #define RXPARITY 0x0100 /* received parity error */
241 #define STATERROR (RXBREAK | RXFRAME | RXPARITY)
242
243 #define CTSFC_EN 0x80 /* CTS flow control enable bit */
244 #define RTSTOG_EN 0x40 /* RTS toggle enable bit */
245 #define TXINT_EN 0x10 /* transmit interrupt enable */
246 #define STOP2 0x08 /* enable 2 stop bits (0 = 1 stop) */
247 #define PARITY_EN 0x04 /* enable parity (0 = no parity) */
248 #define EVEN_PAR 0x02 /* even parity (0 = odd parity) */
249 #define DATA8BIT 0x01 /* 8 bit data (0 = 7 bit data) */
250
251 #define SETBREAK 0x10 /* send break condition (must clear) */
252 #define LOCALLOOP 0x08 /* local loopback set for test */
253 #define SET_DTR 0x04 /* assert DTR */
254 #define SET_RTS 0x02 /* assert RTS */
255 #define TX_ENABLE 0x01 /* enable transmitter */
256
257 #define RTSFC_EN 0x40 /* RTS flow control enable */
258 #define RXPROC_EN 0x20 /* receive processor enable */
259 #define TRIG_NO 0x00 /* Rx FIFO trigger level 0 (no trigger) */
260 #define TRIG_1 0x08 /* trigger level 1 char */
261 #define TRIG_1_2 0x10 /* trigger level 1/2 */
262 #define TRIG_7_8 0x18 /* trigger level 7/8 */
263 #define TRIG_MASK 0x18 /* trigger level mask */
264 #define SRCINT_EN 0x04 /* special Rx condition interrupt enable */
265 #define RXINT_EN 0x02 /* Rx interrupt enable */
266 #define MCINT_EN 0x01 /* modem change interrupt enable */
267
268 #define RXF_TRIG 0x20 /* Rx FIFO trigger level interrupt */
269 #define TXFIFO_MT 0x10 /* Tx FIFO empty interrupt */
270 #define SRC_INT 0x08 /* special receive condition interrupt */
271 #define DELTA_CD 0x04 /* CD change interrupt */
272 #define DELTA_CTS 0x02 /* CTS change interrupt */
273 #define DELTA_DSR 0x01 /* DSR change interrupt */
274
275 #define REP1W2_EN 0x10 /* replace byte 1 with 2 bytes enable */
276 #define IGN2_EN 0x08 /* ignore byte 2 enable */
277 #define IGN1_EN 0x04 /* ignore byte 1 enable */
278 #define COMP2_EN 0x02 /* compare byte 2 enable */
279 #define COMP1_EN 0x01 /* compare byte 1 enable */
280
281 #define RESET_ALL 0x80 /* reset AIOP (all channels) */
282 #define TXOVERIDE 0x40 /* Transmit software off override */
283 #define RESETUART 0x20 /* reset channel's UART */
284 #define RESTXFCNT 0x10 /* reset channel's Tx FIFO count register */
285 #define RESRXFCNT 0x08 /* reset channel's Rx FIFO count register */
286
287 #define INTSTAT0 0x01 /* AIOP 0 interrupt status */
288 #define INTSTAT1 0x02 /* AIOP 1 interrupt status */
289 #define INTSTAT2 0x04 /* AIOP 2 interrupt status */
290 #define INTSTAT3 0x08 /* AIOP 3 interrupt status */
291
292 #define INTR_EN 0x08 /* allow interrupts to host */
293 #define INT_STROB 0x04 /* strobe and clear interrupt line (EOI) */
294
295 /**************************************************************************
296 MUDBAC remapped for PCI
297 **************************************************************************/
298
299 #define _CFG_INT_PCI 0x40
300 #define _PCI_INT_FUNC 0x3A
301
302 #define PCI_STROB 0x2000 /* bit 13 of int aiop register */
303 #define INTR_EN_PCI 0x0010 /* allow interrupts to host */
304
305
306 #define CHAN3_EN 0x08 /* enable AIOP 3 */
307 #define CHAN2_EN 0x04 /* enable AIOP 2 */
308 #define CHAN1_EN 0x02 /* enable AIOP 1 */
309 #define CHAN0_EN 0x01 /* enable AIOP 0 */
310 #define FREQ_DIS 0x00
311 #define FREQ_274HZ 0x60
312 #define FREQ_137HZ 0x50
313 #define FREQ_69HZ 0x40
314 #define FREQ_34HZ 0x30
315 #define FREQ_17HZ 0x20
316 #define FREQ_9HZ 0x10
317 #define PERIODIC_ONLY 0x80 /* only PERIODIC interrupt */
318
319 #define CHANINT_EN 0x0100 /* flags to enable/disable channel ints */
320
321 #define RDATASIZE 72
322 #define RREGDATASIZE 52
323
324 /* Controller level information structure */
325 typedef struct
326 {
327 int CtlID;
328 int CtlNum;
329 int BusType;
330 WordIO_t PCIIO;
331 ByteIO_t MBaseIO;
332 ByteIO_t MReg1IO;
333 ByteIO_t MReg2IO;
334 ByteIO_t MReg3IO;
335 Byte_t MReg2;
336 Byte_t MReg3;
337 int NumAiop;
338 WordIO_t AiopIO[AIOP_CTL_SIZE];
339 ByteIO_t AiopIntChanIO[AIOP_CTL_SIZE];
340 int AiopID[AIOP_CTL_SIZE];
341 int AiopNumChan[AIOP_CTL_SIZE];
342 } CONTROLLER_T;
343
344 typedef CONTROLLER_T CONTROLLER_t;
345
346 /* Channel level information structure */
347 typedef struct
348 {
349 CONTROLLER_T *CtlP;
350 int AiopNum;
351 int ChanID;
352 int ChanNum;
353
354 ByteIO_t Cmd;
355 ByteIO_t IntChan;
356 ByteIO_t IntMask;
357 DWordIO_t IndexAddr;
358 WordIO_t IndexData;
359
360 WordIO_t TxRxData;
361 WordIO_t ChanStat;
362 WordIO_t TxRxCount;
363 ByteIO_t IntID;
364
365 Word_t TxFIFO;
366 Word_t TxFIFOPtrs;
367 Word_t RxFIFO;
368 Word_t RxFIFOPtrs;
369 Word_t TxPrioCnt;
370 Word_t TxPrioPtr;
371 Word_t TxPrioBuf;
372
373 Byte_t R[RREGDATASIZE];
374
375 Byte_t BaudDiv[4];
376 Byte_t TxControl[4];
377 Byte_t RxControl[4];
378 Byte_t TxEnables[4];
379 Byte_t TxCompare[4];
380 Byte_t TxReplace1[4];
381 Byte_t TxReplace2[4];
382 } CHANNEL_T;
383
384 typedef CHANNEL_T CHANNEL_t;
385 typedef CHANNEL_T * CHANPTR_T;
386
387 /***************************************************************************
388 Function: sClrBreak
389 Purpose: Stop sending a transmit BREAK signal
390 Call: sClrBreak(ChP)
391 CHANNEL_T *ChP; Ptr to channel structure
392 */
393 #define sClrBreak(ChP) \
394 { \
395 (ChP)->TxControl[3] &= ~SETBREAK; \
396 sOutDW((ChP)->IndexAddr,*(DWord_t *)&(ChP)->TxControl[0]); \
397 }
398
399 /***************************************************************************
400 Function: sClrDTR
401 Purpose: Clr the DTR output
402 Call: sClrDTR(ChP)
403 CHANNEL_T *ChP; Ptr to channel structure
404 */
405 #define sClrDTR(ChP) \
406 { \
407 (ChP)->TxControl[3] &= ~SET_DTR; \
408 sOutDW((ChP)->IndexAddr,*(DWord_t *)&(ChP)->TxControl[0]); \
409 }
410
411 /***************************************************************************
412 Function: sClrRTS
413 Purpose: Clr the RTS output
414 Call: sClrRTS(ChP)
415 CHANNEL_T *ChP; Ptr to channel structure
416 */
417 #define sClrRTS(ChP) \
418 { \
419 (ChP)->TxControl[3] &= ~SET_RTS; \
420 sOutDW((ChP)->IndexAddr,*(DWord_t *)&(ChP)->TxControl[0]); \
421 }
422
423 /***************************************************************************
424 Function: sClrTxXOFF
425 Purpose: Clear any existing transmit software flow control off condition
426 Call: sClrTxXOFF(ChP)
427 CHANNEL_T *ChP; Ptr to channel structure
428 */
429 #define sClrTxXOFF(ChP) \
430 { \
431 sOutB((ChP)->Cmd,TXOVERIDE | (Byte_t)(ChP)->ChanNum); \
432 sOutB((ChP)->Cmd,(Byte_t)(ChP)->ChanNum); \
433 }
434
435 /***************************************************************************
436 Function: sCtlNumToCtlPtr
437 Purpose: Convert a controller number to controller structure pointer
438 Call: sCtlNumToCtlPtr(CtlNum)
439 int CtlNum; Controller number
440 Return: CONTROLLER_T *: Ptr to controller structure
441 */
442 #define sCtlNumToCtlPtr(CTLNUM) &sController[CTLNUM]
443
444 /***************************************************************************
445 Function: sControllerEOI
446 Purpose: Strobe the MUDBAC's End Of Interrupt bit.
447 Call: sControllerEOI(CtlP)
448 CONTROLLER_T *CtlP; Ptr to controller structure
449 */
450 #define sControllerEOI(CTLP) sOutB((CTLP)->MReg2IO,(CTLP)->MReg2 | INT_STROB)
451
452 /***************************************************************************
453 Function: sPCIControllerEOI
454 Purpose: Strobe the PCI End Of Interrupt bit.
455 Call: sPCIControllerEOI(CtlP)
456 CONTROLLER_T *CtlP; Ptr to controller structure
457 */
458 #define sPCIControllerEOI(CTLP) sOutW((CTLP)->PCIIO, PCI_STROB)
459
460 /***************************************************************************
461 Function: sDisAiop
462 Purpose: Disable I/O access to an AIOP
463 Call: sDisAiop(CltP)
464 CONTROLLER_T *CtlP; Ptr to controller structure
465 int AiopNum; Number of AIOP on controller
466 */
467 #define sDisAiop(CTLP,AIOPNUM) \
468 { \
469 (CTLP)->MReg3 &= sBitMapClrTbl[AIOPNUM]; \
470 sOutB((CTLP)->MReg3IO,(CTLP)->MReg3); \
471 }
472
473 /***************************************************************************
474 Function: sDisCTSFlowCtl
475 Purpose: Disable output flow control using CTS
476 Call: sDisCTSFlowCtl(ChP)
477 CHANNEL_T *ChP; Ptr to channel structure
478 */
479 #define sDisCTSFlowCtl(ChP) \
480 { \
481 (ChP)->TxControl[2] &= ~CTSFC_EN; \
482 sOutDW((ChP)->IndexAddr,*(DWord_t *)&(ChP)->TxControl[0]); \
483 }
484
485 /***************************************************************************
486 Function: sDisIXANY
487 Purpose: Disable IXANY Software Flow Control
488 Call: sDisIXANY(ChP)
489 CHANNEL_T *ChP; Ptr to channel structure
490 */
491 #define sDisIXANY(ChP) \
492 { \
493 (ChP)->R[0x0e] = 0x86; \
494 sOutDW((ChP)->IndexAddr,*(DWord_t *)&(ChP)->R[0x0c]); \
495 }
496
497 /***************************************************************************
498 Function: DisParity
499 Purpose: Disable parity
500 Call: sDisParity(ChP)
501 CHANNEL_T *ChP; Ptr to channel structure
502 Comments: Function sSetParity() can be used in place of functions sEnParity(),
503 sDisParity(), sSetOddParity(), and sSetEvenParity().
504 */
505 #define sDisParity(ChP) \
506 { \
507 (ChP)->TxControl[2] &= ~PARITY_EN; \
508 sOutDW((ChP)->IndexAddr,*(DWord_t *)&(ChP)->TxControl[0]); \
509 }
510
511 /***************************************************************************
512 Function: sDisRxFIFO
513 Purpose: Disable Rx FIFO
514 Call: sDisRxFIFO(ChP)
515 CHANNEL_T *ChP; Ptr to channel structure
516 */
517 #define sDisRxFIFO(ChP) \
518 { \
519 (ChP)->R[0x32] = 0x0a; \
520 sOutDW((ChP)->IndexAddr,*(DWord_t *)&(ChP)->R[0x30]); \
521 }
522
523 /***************************************************************************
524 Function: sDisRxStatusMode
525 Purpose: Disable the Rx status mode
526 Call: sDisRxStatusMode(ChP)
527 CHANNEL_T *ChP; Ptr to channel structure
528 Comments: This takes the channel out of the receive status mode. All
529 subsequent reads of receive data using sReadRxWord() will return
530 two data bytes.
531 */
532 #define sDisRxStatusMode(ChP) sOutW((ChP)->ChanStat,0)
533
534 /***************************************************************************
535 Function: sDisTransmit
536 Purpose: Disable transmit
537 Call: sDisTransmit(ChP)
538 CHANNEL_T *ChP; Ptr to channel structure
539 This disables movement of Tx data from the Tx FIFO into the 1 byte
540 Tx buffer. Therefore there could be up to a 2 byte latency
541 between the time sDisTransmit() is called and the transmit buffer
542 and transmit shift register going completely empty.
543 */
544 #define sDisTransmit(ChP) \
545 { \
546 (ChP)->TxControl[3] &= ~TX_ENABLE; \
547 sOutDW((ChP)->IndexAddr,*(DWord_t *)&(ChP)->TxControl[0]); \
548 }
549
550 /***************************************************************************
551 Function: sDisTxSoftFlowCtl
552 Purpose: Disable Tx Software Flow Control
553 Call: sDisTxSoftFlowCtl(ChP)
554 CHANNEL_T *ChP; Ptr to channel structure
555 */
556 #define sDisTxSoftFlowCtl(ChP) \
557 { \
558 (ChP)->R[0x06] = 0x8a; \
559 sOutDW((ChP)->IndexAddr,*(DWord_t *)&(ChP)->R[0x04]); \
560 }
561
562 /***************************************************************************
563 Function: sEnAiop
564 Purpose: Enable I/O access to an AIOP
565 Call: sEnAiop(CltP)
566 CONTROLLER_T *CtlP; Ptr to controller structure
567 int AiopNum; Number of AIOP on controller
568 */
569 #define sEnAiop(CTLP,AIOPNUM) \
570 { \
571 (CTLP)->MReg3 |= sBitMapSetTbl[AIOPNUM]; \
572 sOutB((CTLP)->MReg3IO,(CTLP)->MReg3); \
573 }
574
575 /***************************************************************************
576 Function: sEnCTSFlowCtl
577 Purpose: Enable output flow control using CTS
578 Call: sEnCTSFlowCtl(ChP)
579 CHANNEL_T *ChP; Ptr to channel structure
580 */
581 #define sEnCTSFlowCtl(ChP) \
582 { \
583 (ChP)->TxControl[2] |= CTSFC_EN; \
584 sOutDW((ChP)->IndexAddr,*(DWord_t *)&(ChP)->TxControl[0]); \
585 }
586
587 /***************************************************************************
588 Function: sEnIXANY
589 Purpose: Enable IXANY Software Flow Control
590 Call: sEnIXANY(ChP)
591 CHANNEL_T *ChP; Ptr to channel structure
592 */
593 #define sEnIXANY(ChP) \
594 { \
595 (ChP)->R[0x0e] = 0x21; \
596 sOutDW((ChP)->IndexAddr,*(DWord_t *)&(ChP)->R[0x0c]); \
597 }
598
599 /***************************************************************************
600 Function: EnParity
601 Purpose: Enable parity
602 Call: sEnParity(ChP)
603 CHANNEL_T *ChP; Ptr to channel structure
604 Comments: Function sSetParity() can be used in place of functions sEnParity(),
605 sDisParity(), sSetOddParity(), and sSetEvenParity().
606
607 Warnings: Before enabling parity odd or even parity should be chosen using
608 functions sSetOddParity() or sSetEvenParity().
609 */
610 #define sEnParity(ChP) \
611 { \
612 (ChP)->TxControl[2] |= PARITY_EN; \
613 sOutDW((ChP)->IndexAddr,*(DWord_t *)&(ChP)->TxControl[0]); \
614 }
615
616 /***************************************************************************
617 Function: sEnRxFIFO
618 Purpose: Enable Rx FIFO
619 Call: sEnRxFIFO(ChP)
620 CHANNEL_T *ChP; Ptr to channel structure
621 */
622 #define sEnRxFIFO(ChP) \
623 { \
624 (ChP)->R[0x32] = 0x08; \
625 sOutDW((ChP)->IndexAddr,*(DWord_t *)&(ChP)->R[0x30]); \
626 }
627
628 /***************************************************************************
629 Function: sEnRxProcessor
630 Purpose: Enable the receive processor
631 Call: sEnRxProcessor(ChP)
632 CHANNEL_T *ChP; Ptr to channel structure
633 Comments: This function is used to start the receive processor. When
634 the channel is in the reset state the receive processor is not
635 running. This is done to prevent the receive processor from
636 executing invalid microcode instructions prior to the
637 downloading of the microcode.
638
639 Warnings: This function must be called after valid microcode has been
640 downloaded to the AIOP, and it must not be called before the
641 microcode has been downloaded.
642 */
643 #define sEnRxProcessor(ChP) \
644 { \
645 (ChP)->RxControl[2] |= RXPROC_EN; \
646 sOutDW((ChP)->IndexAddr,*(DWord_t *)&(ChP)->RxControl[0]); \
647 }
648
649 /***************************************************************************
650 Function: sEnRxStatusMode
651 Purpose: Enable the Rx status mode
652 Call: sEnRxStatusMode(ChP)
653 CHANNEL_T *ChP; Ptr to channel structure
654 Comments: This places the channel in the receive status mode. All subsequent
655 reads of receive data using sReadRxWord() will return a data byte
656 in the low word and a status byte in the high word.
657
658 */
659 #define sEnRxStatusMode(ChP) sOutW((ChP)->ChanStat,STATMODE)
660
661 /***************************************************************************
662 Function: sEnTransmit
663 Purpose: Enable transmit
664 Call: sEnTransmit(ChP)
665 CHANNEL_T *ChP; Ptr to channel structure
666 */
667 #define sEnTransmit(ChP) \
668 { \
669 (ChP)->TxControl[3] |= TX_ENABLE; \
670 sOutDW((ChP)->IndexAddr,*(DWord_t *)&(ChP)->TxControl[0]); \
671 }
672
673 /***************************************************************************
674 Function: sEnTxSoftFlowCtl
675 Purpose: Enable Tx Software Flow Control
676 Call: sEnTxSoftFlowCtl(ChP)
677 CHANNEL_T *ChP; Ptr to channel structure
678 */
679 #define sEnTxSoftFlowCtl(ChP) \
680 { \
681 (ChP)->R[0x06] = 0xc5; \
682 sOutDW((ChP)->IndexAddr,*(DWord_t *)&(ChP)->R[0x04]); \
683 }
684
685 /***************************************************************************
686 Function: sGetAiopIntStatus
687 Purpose: Get the AIOP interrupt status
688 Call: sGetAiopIntStatus(CtlP,AiopNum)
689 CONTROLLER_T *CtlP; Ptr to controller structure
690 int AiopNum; AIOP number
691 Return: Byte_t: The AIOP interrupt status. Bits 0 through 7
692 represent channels 0 through 7 respectively. If a
693 bit is set that channel is interrupting.
694 */
695 #define sGetAiopIntStatus(CTLP,AIOPNUM) sInB((CTLP)->AiopIntChanIO[AIOPNUM])
696
697 /***************************************************************************
698 Function: sGetAiopNumChan
699 Purpose: Get the number of channels supported by an AIOP
700 Call: sGetAiopNumChan(CtlP,AiopNum)
701 CONTROLLER_T *CtlP; Ptr to controller structure
702 int AiopNum; AIOP number
703 Return: int: The number of channels supported by the AIOP
704 */
705 #define sGetAiopNumChan(CTLP,AIOPNUM) (CTLP)->AiopNumChan[AIOPNUM]
706
707 /***************************************************************************
708 Function: sGetChanIntID
709 Purpose: Get a channel's interrupt identification byte
710 Call: sGetChanIntID(ChP)
711 CHANNEL_T *ChP; Ptr to channel structure
712 Return: Byte_t: The channel interrupt ID. Can be any
713 combination of the following flags:
714 RXF_TRIG: Rx FIFO trigger level interrupt
715 TXFIFO_MT: Tx FIFO empty interrupt
716 SRC_INT: Special receive condition interrupt
717 DELTA_CD: CD change interrupt
718 DELTA_CTS: CTS change interrupt
719 DELTA_DSR: DSR change interrupt
720 */
721 #define sGetChanIntID(ChP) (sInB((ChP)->IntID) & (RXF_TRIG | TXFIFO_MT | SRC_INT | DELTA_CD | DELTA_CTS | DELTA_DSR))
722
723 /***************************************************************************
724 Function: sGetChanNum
725 Purpose: Get the number of a channel within an AIOP
726 Call: sGetChanNum(ChP)
727 CHANNEL_T *ChP; Ptr to channel structure
728 Return: int: Channel number within AIOP, or NULLCHAN if channel does
729 not exist.
730 */
731 #define sGetChanNum(ChP) (ChP)->ChanNum
732
733 /***************************************************************************
734 Function: sGetChanStatus
735 Purpose: Get the channel status
736 Call: sGetChanStatus(ChP)
737 CHANNEL_T *ChP; Ptr to channel structure
738 Return: Word_t: The channel status. Can be any combination of
739 the following flags:
740 LOW BYTE FLAGS
741 CTS_ACT: CTS input asserted
742 DSR_ACT: DSR input asserted
743 CD_ACT: CD input asserted
744 TXFIFOMT: Tx FIFO is empty
745 TXSHRMT: Tx shift register is empty
746 RDA: Rx data available
747
748 HIGH BYTE FLAGS
749 STATMODE: status mode enable bit
750 RXFOVERFL: receive FIFO overflow
751 RX2MATCH: receive compare byte 2 match
752 RX1MATCH: receive compare byte 1 match
753 RXBREAK: received BREAK
754 RXFRAME: received framing error
755 RXPARITY: received parity error
756 Warnings: This function will clear the high byte flags in the Channel
757 Status Register.
758 */
759 #define sGetChanStatus(ChP) sInW((ChP)->ChanStat)
760
761 /***************************************************************************
762 Function: sGetChanStatusLo
763 Purpose: Get the low byte only of the channel status
764 Call: sGetChanStatusLo(ChP)
765 CHANNEL_T *ChP; Ptr to channel structure
766 Return: Byte_t: The channel status low byte. Can be any combination
767 of the following flags:
768 CTS_ACT: CTS input asserted
769 DSR_ACT: DSR input asserted
770 CD_ACT: CD input asserted
771 TXFIFOMT: Tx FIFO is empty
772 TXSHRMT: Tx shift register is empty
773 RDA: Rx data available
774 */
775 #define sGetChanStatusLo(ChP) sInB((ByteIO_t)(ChP)->ChanStat)
776
777 /***************************************************************************
778 Function: sGetControllerIntStatus
779 Purpose: Get the controller interrupt status
780 Call: sGetControllerIntStatus(CtlP)
781 CONTROLLER_T *CtlP; Ptr to controller structure
782 Return: Byte_t: The controller interrupt status in the lower 4
783 bits. Bits 0 through 3 represent AIOP's 0
784 through 3 respectively. If a bit is set that
785 AIOP is interrupting. Bits 4 through 7 will
786 always be cleared.
787 */
788 #define sGetControllerIntStatus(CTLP) (sInB((CTLP)->MReg1IO) & 0x0f)
789
790 /***************************************************************************
791 Function: sPCIGetControllerIntStatus
792 Purpose: Get the controller interrupt status
793 Call: sPCIGetControllerIntStatus(CtlP)
794 CONTROLLER_T *CtlP; Ptr to controller structure
795 Return: unsigned char: The controller interrupt status in the lower 4
796 bits and bit 4. Bits 0 through 3 represent AIOP's 0
797 through 3 respectively. Bit 4 is set if the int
798 was generated from periodic. If a bit is set the
799 AIOP is interrupting.
800 */
801 #define sPCIGetControllerIntStatus(CTLP) ((sInW((CTLP)->PCIIO) >> 8) & 0x1f)
802
803 /***************************************************************************
804
805 Function: sGetRxCnt
806 Purpose: Get the number of data bytes in the Rx FIFO
807 Call: sGetRxCnt(ChP)
808 CHANNEL_T *ChP; Ptr to channel structure
809 Return: int: The number of data bytes in the Rx FIFO.
810 Comments: Byte read of count register is required to obtain Rx count.
811
812 */
813 #define sGetRxCnt(ChP) sInW((ChP)->TxRxCount)
814
815 /***************************************************************************
816 Function: sGetTxCnt
817 Purpose: Get the number of data bytes in the Tx FIFO
818 Call: sGetTxCnt(ChP)
819 CHANNEL_T *ChP; Ptr to channel structure
820 Return: Byte_t: The number of data bytes in the Tx FIFO.
821 Comments: Byte read of count register is required to obtain Tx count.
822
823 */
824 #define sGetTxCnt(ChP) sInB((ByteIO_t)(ChP)->TxRxCount)
825
826 /*****************************************************************************
827 Function: sGetTxRxDataIO
828 Purpose: Get the I/O address of a channel's TxRx Data register
829 Call: sGetTxRxDataIO(ChP)
830 CHANNEL_T *ChP; Ptr to channel structure
831 Return: WordIO_t: I/O address of a channel's TxRx Data register
832 */
833 #define sGetTxRxDataIO(ChP) (ChP)->TxRxData
834
835 /***************************************************************************
836 Function: sInitChanDefaults
837 Purpose: Initialize a channel structure to it's default state.
838 Call: sInitChanDefaults(ChP)
839 CHANNEL_T *ChP; Ptr to the channel structure
840 Comments: This function must be called once for every channel structure
841 that exists before any other SSCI calls can be made.
842
843 */
844 #define sInitChanDefaults(ChP) \
845 { \
846 (ChP)->CtlP = NULLCTLPTR; \
847 (ChP)->AiopNum = NULLAIOP; \
848 (ChP)->ChanID = AIOPID_NULL; \
849 (ChP)->ChanNum = NULLCHAN; \
850 }
851
852 /***************************************************************************
853 Function: sResetAiopByNum
854 Purpose: Reset the AIOP by number
855 Call: sResetAiopByNum(CTLP,AIOPNUM)
856 CONTROLLER_T CTLP; Ptr to controller structure
857 AIOPNUM; AIOP index
858 */
859 #define sResetAiopByNum(CTLP,AIOPNUM) \
860 { \
861 sOutB((CTLP)->AiopIO[(AIOPNUM)]+_CMD_REG,RESET_ALL); \
862 sOutB((CTLP)->AiopIO[(AIOPNUM)]+_CMD_REG,0x0); \
863 }
864
865 /***************************************************************************
866 Function: sSendBreak
867 Purpose: Send a transmit BREAK signal
868 Call: sSendBreak(ChP)
869 CHANNEL_T *ChP; Ptr to channel structure
870 */
871 #define sSendBreak(ChP) \
872 { \
873 (ChP)->TxControl[3] |= SETBREAK; \
874 sOutDW((ChP)->IndexAddr,*(DWord_t *)&(ChP)->TxControl[0]); \
875 }
876
877 /***************************************************************************
878 Function: sSetBaud
879 Purpose: Set baud rate
880 Call: sSetBaud(ChP,Divisor)
881 CHANNEL_T *ChP; Ptr to channel structure
882 Word_t Divisor; 16 bit baud rate divisor for channel
883 */
884 #define sSetBaud(ChP,DIVISOR) \
885 { \
886 (ChP)->BaudDiv[2] = (Byte_t)(DIVISOR); \
887 (ChP)->BaudDiv[3] = (Byte_t)((DIVISOR) >> 8); \
888 sOutDW((ChP)->IndexAddr,*(DWord_t *)&(ChP)->BaudDiv[0]); \
889 }
890
891 /***************************************************************************
892 Function: sSetData7
893 Purpose: Set data bits to 7
894 Call: sSetData7(ChP)
895 CHANNEL_T *ChP; Ptr to channel structure
896 */
897 #define sSetData7(ChP) \
898 { \
899 (ChP)->TxControl[2] &= ~DATA8BIT; \
900 sOutDW((ChP)->IndexAddr,*(DWord_t *)&(ChP)->TxControl[0]); \
901 }
902
903 /***************************************************************************
904 Function: sSetData8
905 Purpose: Set data bits to 8
906 Call: sSetData8(ChP)
907 CHANNEL_T *ChP; Ptr to channel structure
908 */
909 #define sSetData8(ChP) \
910 { \
911 (ChP)->TxControl[2] |= DATA8BIT; \
912 sOutDW((ChP)->IndexAddr,*(DWord_t *)&(ChP)->TxControl[0]); \
913 }
914
915 /***************************************************************************
916 Function: sSetDTR
917 Purpose: Set the DTR output
918 Call: sSetDTR(ChP)
919 CHANNEL_T *ChP; Ptr to channel structure
920 */
921 #define sSetDTR(ChP) \
922 { \
923 (ChP)->TxControl[3] |= SET_DTR; \
924 sOutDW((ChP)->IndexAddr,*(DWord_t *)&(ChP)->TxControl[0]); \
925 }
926
927 /***************************************************************************
928 Function: sSetEvenParity
929 Purpose: Set even parity
930 Call: sSetEvenParity(ChP)
931 CHANNEL_T *ChP; Ptr to channel structure
932 Comments: Function sSetParity() can be used in place of functions sEnParity(),
933 sDisParity(), sSetOddParity(), and sSetEvenParity().
934
935 Warnings: This function has no effect unless parity is enabled with function
936 sEnParity().
937 */
938 #define sSetEvenParity(ChP) \
939 { \
940 (ChP)->TxControl[2] |= EVEN_PAR; \
941 sOutDW((ChP)->IndexAddr,*(DWord_t *)&(ChP)->TxControl[0]); \
942 }
943
944 /***************************************************************************
945 Function: sSetOddParity
946 Purpose: Set odd parity
947 Call: sSetOddParity(ChP)
948 CHANNEL_T *ChP; Ptr to channel structure
949 Comments: Function sSetParity() can be used in place of functions sEnParity(),
950 sDisParity(), sSetOddParity(), and sSetEvenParity().
951
952 Warnings: This function has no effect unless parity is enabled with function
953 sEnParity().
954 */
955 #define sSetOddParity(ChP) \
956 { \
957 (ChP)->TxControl[2] &= ~EVEN_PAR; \
958 sOutDW((ChP)->IndexAddr,*(DWord_t *)&(ChP)->TxControl[0]); \
959 }
960
961 /***************************************************************************
962 Function: sSetRTS
963 Purpose: Set the RTS output
964 Call: sSetRTS(ChP)
965 CHANNEL_T *ChP; Ptr to channel structure
966 */
967 #define sSetRTS(ChP) \
968 { \
969 (ChP)->TxControl[3] |= SET_RTS; \
970 sOutDW((ChP)->IndexAddr,*(DWord_t *)&(ChP)->TxControl[0]); \
971 }
972
973 /***************************************************************************
974 Function: sSetRxTrigger
975 Purpose: Set the Rx FIFO trigger level
976 Call: sSetRxProcessor(ChP,Level)
977 CHANNEL_T *ChP; Ptr to channel structure
978 Byte_t Level; Number of characters in Rx FIFO at which the
979 interrupt will be generated. Can be any of the following flags:
980
981 TRIG_NO: no trigger
982 TRIG_1: 1 character in FIFO
983 TRIG_1_2: FIFO 1/2 full
984 TRIG_7_8: FIFO 7/8 full
985 Comments: An interrupt will be generated when the trigger level is reached
986 only if function sEnInterrupt() has been called with flag
987 RXINT_EN set. The RXF_TRIG flag in the Interrupt Idenfification
988 register will be set whenever the trigger level is reached
989 regardless of the setting of RXINT_EN.
990
991 */
992 #define sSetRxTrigger(ChP,LEVEL) \
993 { \
994 (ChP)->RxControl[2] &= ~TRIG_MASK; \
995 (ChP)->RxControl[2] |= LEVEL; \
996 sOutDW((ChP)->IndexAddr,*(DWord_t *)&(ChP)->RxControl[0]); \
997 }
998
999 /***************************************************************************
1000 Function: sSetStop1
1001 Purpose: Set stop bits to 1
1002 Call: sSetStop1(ChP)
1003 CHANNEL_T *ChP; Ptr to channel structure
1004 */
1005 #define sSetStop1(ChP) \
1006 { \
1007 (ChP)->TxControl[2] &= ~STOP2; \
1008 sOutDW((ChP)->IndexAddr,*(DWord_t *)&(ChP)->TxControl[0]); \
1009 }
1010
1011 /***************************************************************************
1012 Function: sSetStop2
1013 Purpose: Set stop bits to 2
1014 Call: sSetStop2(ChP)
1015 CHANNEL_T *ChP; Ptr to channel structure
1016 */
1017 #define sSetStop2(ChP) \
1018 { \
1019 (ChP)->TxControl[2] |= STOP2; \
1020 sOutDW((ChP)->IndexAddr,*(DWord_t *)&(ChP)->TxControl[0]); \
1021 }
1022
1023 /***************************************************************************
1024 Function: sSetTxXOFFChar
1025 Purpose: Set the Tx XOFF flow control character
1026 Call: sSetTxXOFFChar(ChP,Ch)
1027 CHANNEL_T *ChP; Ptr to channel structure
1028 Byte_t Ch; The value to set the Tx XOFF character to
1029 */
1030 #define sSetTxXOFFChar(ChP,CH) \
1031 { \
1032 (ChP)->R[0x07] = (CH); \
1033 sOutDW((ChP)->IndexAddr,*(DWord_t *)&(ChP)->R[0x04]); \
1034 }
1035
1036 /***************************************************************************
1037 Function: sSetTxXONChar
1038 Purpose: Set the Tx XON flow control character
1039 Call: sSetTxXONChar(ChP,Ch)
1040 CHANNEL_T *ChP; Ptr to channel structure
1041 Byte_t Ch; The value to set the Tx XON character to
1042 */
1043 #define sSetTxXONChar(ChP,CH) \
1044 { \
1045 (ChP)->R[0x0b] = (CH); \
1046 sOutDW((ChP)->IndexAddr,*(DWord_t *)&(ChP)->R[0x08]); \
1047 }
1048
1049 /***************************************************************************
1050 Function: sStartRxProcessor
1051 Purpose: Start a channel's receive processor
1052 Call: sStartRxProcessor(ChP)
1053 CHANNEL_T *ChP; Ptr to channel structure
1054 Comments: This function is used to start a Rx processor after it was
1055 stopped with sStopRxProcessor() or sStopSWInFlowCtl(). It
1056 will restart both the Rx processor and software input flow control.
1057
1058 */
1059 #define sStartRxProcessor(ChP) sOutDW((ChP)->IndexAddr,*(DWord_t *)&(ChP)->R[0])
1060
1061 /***************************************************************************
1062 Function: sWriteTxByte
1063 Purpose: Write a transmit data byte to a channel.
1064 ByteIO_t io: Channel transmit register I/O address. This can
1065 be obtained with sGetTxRxDataIO().
1066 Byte_t Data; The transmit data byte.
1067 Warnings: This function writes the data byte without checking to see if
1068 sMaxTxSize is exceeded in the Tx FIFO.
1069 */
1070 #define sWriteTxByte(IO,DATA) sOutB(IO,DATA)
1071
1072 int sInitController( CONTROLLER_T *CtlP,
1073 int CtlNum,
1074 ByteIO_t MudbacIO,
1075 ByteIO_t *AiopIOList,
1076 int AiopIOListSize,
1077 int IRQNum,
1078 Byte_t Frequency,
1079 int PeriodicOnly);
1080
1081 int sPCIInitController( CONTROLLER_T *CtlP,
1082 int CtlNum,
1083 ByteIO_t *AiopIOList,
1084 int AiopIOListSize,
1085 int IRQNum,
1086 Byte_t Frequency,
1087 int PeriodicOnly);
1088
1089 int sReadAiopID(ByteIO_t io);
1090 int sReadAiopNumChan(WordIO_t io);
1091 int sInitChan( CONTROLLER_T *CtlP,
1092 CHANNEL_T *ChP,
1093 int AiopNum,
1094 int ChanNum);
1095 Byte_t sGetRxErrStatus(CHANNEL_T *ChP);
1096 void sStopRxProcessor(CHANNEL_T *ChP);
1097 void sStopSWInFlowCtl(CHANNEL_T *ChP);
1098 void sFlushRxFIFO(CHANNEL_T *ChP);
1099 void sFlushTxFIFO(CHANNEL_T *ChP);
1100 int sWriteTxPrioByte(CHANNEL_T *ChP, Byte_t Data);
1101 void sEnInterrupts(CHANNEL_T *ChP,Word_t Flags);
1102 void sDisInterrupts(CHANNEL_T *ChP,Word_t Flags);
1103
1104 extern Byte_t R[RDATASIZE];
1105 extern CONTROLLER_T sController[CTL_SIZE];
1106 extern Byte_t sIRQMap[16];
1107 extern Byte_t sBitMapClrTbl[8];
1108 extern Byte_t sBitMapSetTbl[8];
1109 extern int sClockPrescale;
1110
1111
1112 /*
1113 * Begin Linux specific definitions for the Rocketport driver
1114 *
1115 * This code is Copyright Theodore Ts'o, 1995-1997
1116 */
1117
1118 struct r_port {
1119 int magic;
1120 int line;
1121 int flags;
1122 int count;
1123 int blocked_open;
1124 struct tty_struct *tty;
1125 int board:2;
1126 int aiop:2;
1127 int chan:3;
1128 CONTROLLER_t *ctlp;
1129 CHANNEL_t channel;
1130 int closing_wait;
1131 int close_delay;
1132 int intmask;
1133 int xmit_fifo_room; /* room in xmit fifo */
1134 unsigned char *xmit_buf;
1135 int xmit_head;
1136 int xmit_tail;
1137 int xmit_cnt;
1138 int session;
1139 int pgrp;
1140 int cd_status;
1141 int ignore_status_mask;
1142 int read_status_mask;
1143 int cps;
1144 struct termios normal_termios;
1145 struct termios callout_termios;
1146 struct tq_struct tqueue;
1147 wait_queue_head_t open_wait;
1148 wait_queue_head_t close_wait;
1149 };
1150
1151 #define RPORT_MAGIC 0x525001
1152
1153 #define NUM_BOARDS 8
1154 #define MAX_RP_PORTS (32*NUM_BOARDS)
1155
1156 /*
1157 * The size of the xmit buffer is 1 page, or 4096 bytes
1158 */
1159 #define XMIT_BUF_SIZE 4096
1160
1161 /* number of characters left in xmit buffer before we ask for more */
1162 #define WAKEUP_CHARS 256
1163
1164 /* Internal flags used only by the rocketport driver */
1165 #define ROCKET_INITIALIZED 0x80000000 /* Port is active */
1166 #define ROCKET_CLOSING 0x40000000 /* Serial port is closing */
1167 #define ROCKET_NORMAL_ACTIVE 0x20000000 /* Normal port is active */
1168 #define ROCKET_CALLOUT_ACTIVE 0x10000000 /* Callout port is active */
1169
1170 /*
1171 * tty subtypes
1172 *
1173 */
1174 #define SERIAL_TYPE_NORMAL 1
1175 #define SERIAL_TYPE_CALLOUT 2
1176
1177 /*
1178 * Assigned major numbers for the Comtrol Rocketport
1179 */
1180 #define TTY_ROCKET_MAJOR 46
1181 #define CUA_ROCKET_MAJOR 47
1182
1183 /*
1184 * Utility function.
1185 */
1186 #ifndef MIN
1187 #define MIN(a,b) ((a) < (b) ? (a) : (b))
1188 #endif
1189
1190 #ifdef PCI_VENDOR_ID_RP
1191 #undef PCI_VENDOR_ID_RP
1192 #undef PCI_DEVICE_ID_RP8OCTA
1193 #undef PCI_DEVICE_ID_RP8INTF
1194 #undef PCI_DEVICE_ID_RP16INTF
1195 #undef PCI_DEVICE_ID_RP32INTF
1196 #endif
1197
1198 #define PCI_VENDOR_ID_RP 0x11fe
1199 #define PCI_DEVICE_ID_RP32INTF 0x0001
1200 #define PCI_DEVICE_ID_RP8INTF 0x0002
1201 #define PCI_DEVICE_ID_RP16INTF 0x0003
1202 #define PCI_DEVICE_ID_RP8OCTA 0x0005
1203
1204 #ifndef PCI_DEVICE_ID_RP4QUAD
1205 #define PCI_DEVICE_ID_RP4QUAD 0x0004
1206 #endif
1207 #ifndef PCI_DEVICE_ID_RP8J
1208 #define PCI_DEVICE_ID_RP8J 0x0006
1209 #endif
1210 #ifndef PCI_DEVICE_ID_RPP4
1211 #define PCI_DEVICE_ID_RPP4 0x000A
1212 #endif
1213 #ifndef PCI_DEVICE_ID_RPP8
1214 #define PCI_DEVICE_ID_RPP8 0x000B
1215 #endif
1216 #ifndef PCI_DEVICE_ID_RP8M
1217 #define PCI_DEVICE_ID_RP8M 0x000C
1218 #endif
1219
1220
This page was automatically generated by the
LXR engine.
Visit the LXR main site for more
information.