home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / hamradio / s920603.zip / PI.H < prev    next >
C/C++ Source or Header  |  1992-04-03  |  5KB  |  137 lines

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