~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux/drivers/char/rocket_int.h

Version: ~ [ 2.4.0 ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.