home *** CD-ROM | disk | FTP | other *** search
/ The Pier Shareware 6 / The_Pier_Shareware_Number_6_(The_Pier_Exchange)_(1995).iso / 024 / psi110g.zip / PI.H < prev    next >
C/C++ Source or Header  |  1994-04-17  |  6KB  |  135 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.     long xtal;              /* Oscillator frequency */
  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_CMD     8   /* DMA controller command register */
  58. #define DMA_MASK        10  /* DMA controller mask register */
  59. #define DMA_MODE        11  /* DMA controller mode register */
  60. #define DMA_RESETFF 12  /* DMA controller first/last flip flop  */
  61. /* DMA data */
  62. #define DMA_DISABLE (0x04)  /* Disable channel n */
  63. #define DMA_ENABLE  (0x00)  /* Enable channel n */
  64. /* Single transfers, incr. address, auto init, writes, ch. n */
  65. #define DMA_RX_MODE (0x54)
  66. /* Single transfers, incr. address, no auto init, reads, ch. n */
  67. #define DMA_TX_MODE (0x48)
  68.   
  69. struct pichan {
  70.     long rxints;        /* Receiver interrupts */
  71.     long txints;        /* Transmitter interrupts */
  72.     long exints;        /* External/status interrupts */
  73.   
  74.     int enqueued;       /* Packets enqueued for transmit */
  75.     int rxframes;       /* Packets received */
  76.     int crcerr;     /* CRC Errors */
  77.     int rovers;     /* Receiver Overruns */
  78.     int tunders;        /* Tranmitter underruns */
  79.   
  80.     struct mbuf *rcvbuf;    /* Buffer for current rx packet */
  81.     int16 bufsiz;       /* Size of rcvbuf */
  82.     char *rcp;      /* Pointer into rcvbuf */
  83.   
  84.     struct mbuf *sndq;  /* Packets awaiting transmission */
  85.     int16 sndcnt;       /* Number of packets on sndq */
  86.     struct mbuf *sndbuf;    /* Current buffer being transmitted */
  87.     char *txdmabuf;     /* Transmit DMA buffer */
  88.     char tstate;        /* Transmitter state */
  89. #define IDLE    0       /* Transmitter off, no data pending */
  90. #define ACTIVE  1       /* Transmitter on, sending data */
  91. #define UNDERRUN 2      /* Transmitter on, flushing CRC */
  92. #define FLAGOUT 3       /* CRC sent - attempt to start next frame */
  93. #define DEFER 4         /* Receive Active - DEFER Transmit */
  94. #define ST_TXDELAY 5        /* Sending leading flags */
  95. #define CRCOUT 6
  96.     char rstate;        /* Set when !DCD goes to 0 (TRUE) */
  97. /* Normal state is ACTIVE if Receive enabled */
  98. #define RXERROR 2       /* Error -- Aborting current Frame */
  99. #define RXABORT 3       /* ABORT sequence detected */
  100. #define TOOBIG 4        /* too large a frame to store */
  101.     int16 dev;      /* Device number */
  102.     int16 base;     /* Base of I/O registers */
  103.     int16 cardbase;     /* Base address of card */
  104.     int16 stata;        /* address of Channel A status regs */
  105.     int16 statb;        /* address of Channel B status regs */
  106.     int16 speed;        /* Line speed, bps */
  107.     int16 g3ruh;        /* tapr 9600 modem clocking option */
  108.     int16 txdelay;      /* Transmit Delay 10 ms/cnt */
  109.     char persist;       /* Persistence (0-255) as a % */
  110.     int16 slotime;      /* Delay to wait on persistence hit */
  111.     int16 squeldelay;   /* Delay after XMTR OFF for squelch tail */
  112.     struct iface *iface;    /* Associated interface */
  113.     char dmachan;       /* DMA channel for this port */
  114.     unsigned char page_addr;/* address of dma page register */
  115.     unsigned int dma_dest;  /* address of dma dest reg */
  116.     unsigned int dma_wcr;   /* address of dma word count reg */
  117. };
  118. extern struct pichan Pichan[];
  119.   
  120. #define OFF 0
  121. #define ON  1
  122.   
  123. /* In pi.c: */
  124. void piint __ARGS((int dev));
  125.   
  126. /* In pivec.asm: */
  127. void mloop __ARGS((void));
  128. void wrtscc __ARGS((int16 cbase,int16 ctl,int16 reg,int16 word));
  129. char rdscc __ARGS((int16 cbase,int16 word,char byte));
  130. INTERRUPT pi0vec __ARGS((void));
  131. INTERRUPT pi1vec __ARGS((void));
  132. INTERRUPT pi2vec __ARGS((void));
  133.   
  134. #endif  /* PIMAX */
  135.