rocket_int.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:41k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

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