home *** CD-ROM | disk | FTP | other *** search
/ High Voltage Shareware / high1.zip / high1 / DIR3 / KA9Q212.ZIP / PI.H < prev    next >
C/C++ Source or Header  |  1993-07-16  |  5KB  |  141 lines

  1. /****************************************************************************
  2. *    $Id: pi.h 1.2 93/07/16 11:48:46 ROOT_DOS Exp $
  3. *    15 Jul 93    1.2        GT    Fix warnings.                                    *
  4. ****************************************************************************/
  5.  
  6. #ifndef    PIMAX
  7.  
  8. /* Hardware-dependent routines for the VE3IFB interface card for the PC
  9.  */
  10.  
  11. #include "global.h"
  12. #define PIMAX    3        /* 3 cards max */
  13. #define AX_MTU    512
  14. #define INTMASK 0x21        /* Intel 8259 interrupt controller mask */
  15.  
  16. struct PITAB {
  17.     INTERRUPT (*oldvec) __ARGS((void));    /* Original interrupt vector contents */
  18.     int16 addr;                /* Base I/O address */
  19.     unsigned vec;                /* Vector */
  20.     long ints;                /* Interrupt count */
  21. };
  22. extern struct PITAB Pi[];
  23.  
  24. /* Register offset info, specific to the PI
  25.  * E.g., to read the data port on channel A, use
  26.  *    inportb(pichan[dev].base + CHANA + DATA)
  27.  */
  28. #define CHANB    0    /* Base of channel B regs */
  29. #define CHANA    2    /* Base of channel A regs */
  30.  
  31. /* 8530 ports on each channel */
  32. #define CTL    0
  33. #define DATA    1
  34.  
  35. #define DMAEN    0x4 /* Offset off DMA Enable register */
  36.  
  37. /* Timer chip offsets */
  38. #define TMR0    0x8 /* Offset of timer 0 register */
  39. #define TMR1    0x9 /* Offset of timer 1 register */
  40. #define TMR2    0xA /* Offset of timer 2 register */
  41. #define TMRCMD    0xB /* Offset of timer command register */
  42.  
  43. /* Timer chip equates */
  44. #define SC0    0x00 /* Select counter 0 */
  45. #define SC1    0x40 /* Select counter 1 */
  46. #define SC2    0x80 /* Select counter 2 */
  47. #define CLATCH    0x00 /* Counter latching operation */
  48. #define MSB    0x20 /* Read/load MSB only */
  49. #define LSB    0x10 /* Read/load LSB only */
  50. #define LSB_MSB    0x30 /* Read/load LSB, then MSB */
  51. #define MODE0    0x00 /* Interrupt on terminal count */
  52. #define MODE1    0x02 /* Programmable one shot */
  53. #define MODE2    0x04 /* Rate generator */
  54. #define MODE3    0x06 /* Square wave rate generator */
  55. #define MODE4    0x08 /* Software triggered strobe */
  56. #define MODE5    0x0a /* Hardware triggered strobe */
  57. #define BCD    0x01 /* BCD counter */
  58.  
  59. /* DMA controller registers */
  60. #define DMA_STAT    8    /* DMA controller status register */
  61. #define DMA_MASK        10    /* DMA controller mask register    */
  62. #define DMA_MODE        11    /* DMA controller mode register    */
  63. #define DMA_RESETFF    12    /* DMA controller first/last flip flop    */
  64. /* DMA data */
  65. #define DMA_DISABLE (0x04)    /* Disable channel n */
  66. #define DMA_ENABLE    (0x00)    /* Enable channel n */
  67. /* Single transfers, incr. address, auto init, writes, ch. n */
  68. #define DMA_RX_MODE    (0x54)
  69. /* Single transfers, incr. address, no auto init, reads, ch. n */
  70. #define DMA_TX_MODE (0x48)
  71.  
  72. struct pichan {
  73.     long rxints;        /* Receiver interrupts */
  74.     long txints;        /* Transmitter interrupts */
  75.     long exints;        /* External/status interrupts */
  76.  
  77.     int enqueued;        /* Packets enqueued for transmit */
  78.     int rxframes;        /* Packets received */
  79.     int crcerr;        /* CRC Errors */
  80.     int rovers;        /* Receiver Overruns */
  81.     int tunders;        /* Tranmitter underruns */
  82.  
  83.     struct mbuf *rcvbuf;    /* Buffer for current rx packet */
  84.     int16 bufsiz;        /* Size of rcvbuf */
  85.     char *rcp;        /* Pointer into rcvbuf */
  86.  
  87.     struct mbuf *sndq;    /* Packets awaiting transmission */
  88.     int16 sndcnt;        /* Number of packets on sndq */
  89.     struct mbuf *sndbuf;    /* Current buffer being transmitted */
  90.     char *txdmabuf;        /* Transmit DMA buffer */
  91.     char tstate;        /* Transmitter state */
  92. #define IDLE    0        /* Transmitter off, no data pending */
  93. #define ACTIVE    1        /* Transmitter on, sending data */
  94. #define UNDERRUN 2        /* Transmitter on, flushing CRC */
  95. #define FLAGOUT 3        /* CRC sent - attempt to start next frame */
  96. #define DEFER 4         /* Receive Active - DEFER Transmit */
  97. #define ST_TXDELAY 5        /* Sending leading flags */
  98. #define CRCOUT 6
  99.     char rstate;        /* Set when !DCD goes to 0 (TRUE) */
  100. /* Normal state is ACTIVE if Receive enabled */
  101. #define RXERROR 2        /* Error -- Aborting current Frame */
  102. #define RXABORT 3        /* ABORT sequence detected */
  103. #define TOOBIG 4        /* too large a frame to store */
  104.     int16 dev;        /* Device number */
  105.     int16 base;        /* Base of I/O registers */
  106.     int16 cardbase;        /* Base address of card */
  107.     int16 stata;        /* address of Channel A status regs */
  108.     int16 statb;        /* address of Channel B status regs */
  109.     int16 speed;        /* Line speed, bps */
  110.     int16 txdelay;        /* Transmit Delay 10 ms/cnt */
  111.     char persist;        /* Persistence (0-255) as a % */
  112.     int16 slotime;        /* Delay to wait on persistence hit */
  113.     int16 squeldelay;    /* Delay after XMTR OFF for squelch tail */
  114.     struct iface *iface;    /* Associated interface */
  115.     char dmachan;        /* DMA channel for this port */
  116.     unsigned char page_addr;/* address of dma page register */
  117.     unsigned int dma_dest;    /* address of dma dest reg */
  118.     unsigned int dma_wcr;     /* address of dma word count reg */
  119.     int32 deftime;        /* Time when xmit is enabled */
  120. };
  121. extern struct pichan Pichan[];
  122.  
  123. #define OFF    0
  124. #define ON    1
  125.  
  126. /* 8530 clock speed */
  127. #define XTAL    ((long)3686400L/2L)     /* 32X clock constant */
  128.  
  129. /* In pi.c: */
  130. void piint __ARGS((int dev));
  131.  
  132. /* In pivec.asm: */
  133. void mloop __ARGS((void));
  134. void wrtscc __ARGS((int16 cbase,int16 ctl,int16 reg,int16 word));
  135. char rdscc __ARGS((int16 cbase,int16 word,char byte));
  136. INTERRUPT pi0vec __ARGS((void));
  137. INTERRUPT pi1vec __ARGS((void));
  138. INTERRUPT pi2vec __ARGS((void));
  139.  
  140. #endif    /* PIMAX */
  141.