home *** CD-ROM | disk | FTP | other *** search
/ The Pier Shareware 6 / The_Pier_Shareware_Number_6_(The_Pier_Exchange)_(1995).iso / 024 / psi110g.zip / I8250.H < prev    next >
C/C++ Source or Header  |  1994-08-26  |  8KB  |  206 lines

  1. /* Various I/O definitions specific to asynch I/O on the IBM PC */
  2. /*
  3.  * mods by G1EMM
  4.  */
  5. #ifndef _8250_H
  6. #define _8250_H
  7.   
  8. #ifndef _MBUF_H
  9. #include "mbuf.h"
  10. #endif
  11.   
  12. #ifndef _PROC_H
  13. #include "proc.h"
  14. #endif
  15.   
  16. #ifndef _IFACE_H
  17. #include "iface.h"
  18. #endif
  19.   
  20. /* Output pseudo-dma control structure */
  21. struct dma {
  22.     char *data;     /* current output pointer */
  23.     unsigned short cnt;     /* byte count remaining */
  24.     char flags;     /* transmitter active */
  25. };
  26.   
  27. /* Read fifo control structure */
  28. struct fifo {
  29.     char *buf;              /* Ring buffer */
  30.     unsigned bufsize;       /* Size of ring buffer */
  31.     char *wp;               /* Write pointer */
  32.     char *rp;               /* Read pointer */
  33.     unsigned short cnt;     /* count of characters in buffer */
  34.     unsigned short hiwat;   /* High water mark */
  35.     long overrun;           /* count of sw fifo buffer overruns */
  36. };
  37.   
  38. /* Asynch controller control block */
  39. struct asy {
  40.     struct iface *iface;
  41.     struct fifo fifo;
  42.     int trigchar;           /* Fifo trigger character */
  43.   
  44.     struct dma dma;
  45.     struct mbuf *sndq;      /* Transmit queue */
  46.   
  47.     struct proc *monitor;
  48.   
  49.     unsigned addr;          /* Base I/O address */
  50.     unsigned vec;           /* Interrupt vector */
  51.     long speed;             /* Line speed in bits per second */
  52.   
  53.     struct {                /* Previous configuration saved at startup */
  54.         INTERRUPT (*vec) __ARGS((void));
  55.                 /* Original interrupt vector [cs:pc] */
  56.         char mask;      /* 8259 mask */
  57.         char divh,divl; /* baud rate divisor */
  58.         char lcr;       /* line control reg */
  59.         char ier;       /* Interrupt enable register */
  60.         char iir;       /* Interrupt ID reg, fifo type */
  61.         char mcr;       /* modem control bits */
  62.         char msr;       /* modem status bits */
  63.         char dummy;
  64.     } save;
  65.   
  66.     struct proc *poller;    /* G8BPQ poll process */
  67.   
  68.     char is_16550a;         /* 16550A detected */
  69.     char msr;
  70.   
  71. #define FOUND_DOWN      0x00
  72. #define FOUND_UP        0x01
  73. #define MOVED_DOWN      0x02
  74. #define MOVED_UP        0x03
  75. #define IGNORED         0x04
  76.     char dtr_usage;
  77.     char rts_usage;
  78.   
  79.     char cts_flow_control;
  80.     char rlsd_line_control; /* RLSD indicates physical layer up/down */
  81.     char chain;             /* 0 unless IRQ is chained to predecessor vector */
  82.     char nrs_cts;           /* 1=>netrom flow control */
  83.   
  84.     long fifotimeouts;      /* hw fifo character timeout int's */
  85.     long rxints;            /* receive interrupts */
  86.     long txints;            /* transmit interrupts */
  87.     long rxchar;            /* Received characters */
  88.     long overrun;           /* Receiver hardware overrun errors */
  89.     long txchar;            /* Transmitted characters */
  90.     long rxhiwat;           /* High water mark on hardware rx fifo */
  91.     long msint_count;       /* Count of modem status interrupts */
  92.     long txto;              /* Count of TX interrupt timeouts */
  93. };
  94.   
  95. extern int Nasy;                /* Actual number of asynch lines */
  96. extern struct asy Asy[];
  97. extern char *arg_dtr_0[];
  98.   
  99. #define BAUDCLK 115200L         /* 1.8432 Mhz / 16 */
  100.   
  101. /* 8250 definitions */
  102. /* Control/status register offsets from base address */
  103. #define THR     0               /* Transmitter holding register */
  104. #define RBR     0               /* Receiver buffer register */
  105. #define DLL     0               /* Divisor latch LSB */
  106. #define DLM     1               /* Divisor latch MSB */
  107. #define IER     1               /* Interrupt enable register */
  108. #define IIR     2               /* Interrupt ident register */
  109. #define FCR     2               /* FIFO control register (16550A only) */
  110. #define LCR     3               /* Line control register */
  111. #define MCR     4               /* Modem control register */
  112. #define LSR     5               /* Line status register */
  113. #define MSR     6               /* Modem status register */
  114.   
  115. /* 8250 Line Control Register */
  116. #define LCR_5BITS       0x00    /* 5 bit words */
  117. #define LCR_6BITS       0x01    /* 6 bit words */
  118. #define LCR_7BITS       0x02    /* 7 bit words */
  119. #define LCR_8BITS       0x03    /* 8 bit words */
  120. #define LCR_BIT_MASK    0x03    /* mask of bit size */
  121. #define LCR_NSB         0x04    /* Number of stop bits */
  122. #define LCR_PEN         0x08    /* Parity enable */
  123. #define LCR_EPS         0x10    /* Even parity select */
  124. #define LCR_SP          0x20    /* Stick parity */
  125. #define LCR_SB          0x40    /* Set break */
  126. #define LCR_DLAB        0x80    /* Divisor Latch Access Bit */
  127.   
  128. /* 8250 Line Status Register */
  129. #define LSR_DR          0x01    /* Data ready */
  130. #define LSR_OE          0x02    /* Overrun error */
  131. #define LSR_PE          0x04    /* Parity error */
  132. #define LSR_FE          0x08    /* Framing error */
  133. #define LSR_BI          0x10    /* Break interrupt */
  134. #define LSR_THRE        0x20    /* Transmitter line holding register empty */
  135. #define LSR_TSRE        0x40    /* Transmitter shift register empty */
  136.   
  137. /* 8250 Interrupt Identification Register */
  138. #define IIR_IP          0x01    /* 0 if interrupt pending */
  139.   
  140. #define IIR_MSTAT       0x00    /* Modem status interrupt */
  141. #define IIR_THRE        0x02    /* Transmitter holding register empty int */
  142. #define IIR_RDA         0x04    /* Receiver data available interrupt */
  143. #define IIR_RLS         0x06    /* Receiver Line Status interrupt */
  144. #define IIR_ID_MASK     0x06    /* Mask for interrupt ID */
  145.   
  146. #define IIR_FIFO_TIMEOUT 0x08   /* FIFO timeout interrupt pending - 16550A */
  147. #define IIR_FIFO_ENABLED 0xc0   /* FIFO enabled (FCR0,1 = 1) - 16550A only */
  148.   
  149.   
  150. /* 8250 interrupt enable register bits */
  151. #define IER_DAV         0x01    /* Data available interrupt */
  152. #define IER_TxE         0x02    /* Tx buffer empty interrupt */
  153. #define IER_RLS         0x04    /* Receive line status interrupt */
  154. #define IER_MS          0x08    /* Modem status interrupt */
  155.   
  156. /* 8250 Modem control register */
  157. #define MCR_DTR         0x01    /* Data Terminal Ready */
  158. #define MCR_RTS         0x02    /* Request to Send */
  159. #define MCR_OUT1        0x04    /* Out 1 (not used) */
  160. #define MCR_OUT2        0x08    /* Master interrupt enable (actually OUT 2) */
  161. #define MCR_LOOP        0x10    /* Loopback test mode */
  162.   
  163. /* 8250 Modem Status Register */
  164. #define MSR_DCTS        0x01    /* Delta Clear-to-Send */
  165. #define MSR_DDSR        0x02    /* Delta Data Set Ready */
  166. #define MSR_TERI        0x04    /* Trailing edge ring indicator */
  167. #define MSR_DRLSD       0x08    /* Delta Rx Line Signal Detect */
  168. #define MSR_CTS         0x10    /* Clear to send */
  169. #define MSR_DSR         0x20    /* Data set ready */
  170. #define MSR_RI          0x40    /* Ring indicator */
  171. #define MSR_RLSD        0x80    /* Rx line signal detect */
  172.   
  173. /* 16550A FIFO control register values */
  174. #define FIFO_ENABLE     0x01    /* enable TX & RX fifo */
  175. #define FIFO_CLR_RX     0x02    /* clear RX fifo */
  176. #define FIFO_CLR_TX     0x04    /* clear TX fifo */
  177. #define FIFO_START_DMA  0x08    /* enable TXRDY/RXRDY pin DMA handshake */
  178. #define FIFO_SIZE_1     0x00    /* RX fifo trigger levels */
  179. #define FIFO_SIZE_4     0x40
  180. #define FIFO_SIZE_8     0x80
  181. #define FIFO_SIZE_14    0xC0
  182. #define FIFO_SIZE_MASK  0xC0
  183.   
  184. #define FIFO_SETUP  (FIFO_ENABLE|FIFO_CLR_RX|FIFO_CLR_TX)
  185. #define FIFO_SETUP1 (FIFO_SETUP|FIFO_SIZE_1)
  186. #define FIFO_SETUP4 (FIFO_SETUP|FIFO_SIZE_4)
  187. #define FIFO_SETUP8 (FIFO_SETUP|FIFO_SIZE_8)
  188. #define FIFO_SETUP14 (FIFO_SETUP|FIFO_SIZE_14)
  189.   
  190. #define OUTPUT_FIFO_SIZE    8       /* was 16 */
  191.   
  192. /* end g1emm mod */
  193.   
  194. /* In asyvec.asm: */
  195. INTERRUPT asy0vec __ARGS((void));
  196. INTERRUPT asy1vec __ARGS((void));
  197. INTERRUPT asy2vec __ARGS((void));
  198. INTERRUPT asy3vec __ARGS((void));
  199. INTERRUPT asy4vec __ARGS((void));
  200. INTERRUPT asy5vec __ARGS((void));
  201.   
  202. /* In I8250.c  */
  203. int carrier_detect __ARGS((int dev));
  204.   
  205. #endif  /* _8250_H */
  206.