home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / hamradio / s920603.zip / N8250.H < prev    next >
C/C++ Source or Header  |  1992-06-01  |  7KB  |  188 lines

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