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