home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HAM Radio 1
/
HamRadio.cdr
/
misc
/
src0131
/
ec.h
< prev
next >
Wrap
Text File
|
1990-11-10
|
4KB
|
97 lines
#ifndef _EC_H
#define _EC_H
#ifndef _IFACE_H
#include "iface.h"
#endif
/* Stuff specific to the 3-Com 3C500 Ethernet controller board */
#define EC_MAX 3
extern int Nec; /* Actual number of Ethernet controllers */
/* Find base address of specified device */
#define IE(dev) (ec_dev[dev].addr)
/* The various IE command registers */
#define EDLC_ADDR(num) (num) /* EDLC station address, 6 bytes */
#define EDLC_RCV(num) ((num)+0x6) /* EDLC receive csr */
#define EDLC_XMT(num) ((num)+0x7) /* EDLC transmit csr */
#define IE_GP(num) ((num)+0x8) /* GP pointer */
#define IE_RP(num) ((num)+0xa) /* Receive buffer pointer */
#define IE_SAPROM(num) ((num)+0xc) /* window on station addr prom */
#define IE_CSR(num) ((num)+0xe) /* IE command/status */
#define IE_BFR(num) ((num)+0xf) /* window on packet buffer */
/* Bits in EDLC_RCV, interrupt enable on write, status when read */
#define EDLC_NONE 0x00 /* match mode in bits 5-6, write only */
#define EDLC_ALL 0x40 /* promiscuous receive, write only */
#define EDLC_BROAD 0x80 /* station address plus broadcast */
#define EDLC_MULTI 0xc0 /* station address plus multicast */
#define EDLC_STALE 0x80 /* receive CSR status previously read */
#define EDLC_GOOD 0x20 /* well formed packets only */
#define EDLC_ANY 0x10 /* any packet, even those with errors */
#define EDLC_SHORT 0x08 /* short frame */
#define EDLC_DRIBBLE 0x04 /* dribble error */
#define EDLC_FCS 0x02 /* CRC error */
#define EDLC_OVER 0x01 /* data overflow */
#define EDLC_RERROR (EDLC_SHORT|EDLC_DRIBBLE|EDLC_FCS|EDLC_OVER)
#define EDLC_RMASK (EDLC_GOOD|EDLC_ANY|EDLC_RERROR)
/* bits in EDLC_XMT, interrupt enable on write, status when read */
#define EDLC_IDLE 0x08 /* transmit idle */
#define EDLC_16 0x04 /* packet experienced 16 collisions */
#define EDLC_JAM 0x02 /* packet experienced a collision */
#define EDLC_UNDER 0x01 /* data underflow */
/* bits in IE_CSR */
#define IE_RESET 0x80 /* reset the controller (wo) */
#define IE_XMTBSY 0x80 /* Transmitter busy (ro) */
#define IE_RIDE 0x40 /* request interrupt/DMA enable (rw) */
#define IE_DMA 0x20 /* DMA request (rw) */
#define IE_EDMA 0x10 /* DMA done (ro) */
#define IE_BUFCTL 0x0c /* mask for buffer control field (rw) */
#define IE_LOOP 0x0c /* 2 bit field in bits 2,3, loopback */
#define IE_RCVEDLC 0x08 /* gives buffer to receiver */
#define IE_XMTEDLC 0x04 /* gives buffer to transmit */
#define IE_SYSBFR 0x00 /* gives buffer to processor */
#define IE_CRC 0x01 /* causes CRC error on transmit (wo) */
#define IE_RCVBSY 0x01 /* receive in progress (ro) */
/* miscellaneous sizes */
#define BFRSIZ 2048 /* number of bytes in a buffer */
struct estats {
long recv; /* Good packets received */
long bad; /* Bad receive packets */
long over; /* Overflow errors */
long drop; /* Dropped because RX queue too long */
long nomem; /* Dropped because buffer malloc failed */
long intrpt; /* Interrupts */
long xmit; /* Total output packets */
long timeout; /* Transmitter timeouts */
long jam; /* Collisions */
long jam16; /* 16 successive collisions */
};
struct ec {
struct iface *iface;
struct estats estats; /* Controller statistics */
unsigned base; /* Base I/O address */
unsigned vec; /* Interrupt vector */
short size; /* Size of current transmit packet */
};
extern struct ec Ec[];
/* In ecvec.asm: */
INTERRUPT ec0vec __ARGS((void));
INTERRUPT ec1vec __ARGS((void));
INTERRUPT ec2vec __ARGS((void));
/* In ec.c: */
void ecint __ARGS((int dev));
#endif /* _EC_H */