## diffname pc/ether.h 1992/1222
## diff -e /dev/null /n/bootesdump/1992/1222/sys/src/9/pc/ether.h
0a
/*
* All the goo for PC ethernet cards.
*/
typedef struct Board Board;
typedef struct RingBuf RingBuf;
typedef struct Type Type;
typedef struct Ctlr Ctlr;
/*
* Hardware interface.
*/
struct Board {
int (*reset)(Ctlr*);
void (*init)(Ctlr*);
void (*attach)(Ctlr*);
void (*mode)(Ctlr*, int);
void (*receive)(Ctlr*);
void (*transmit)(Ctlr*);
void (*intr)(Ctlr*);
void (*watch)(Ctlr*);
ulong io; /* interface I/O base address */
uchar irq; /* interrupt level */
uchar bit16; /* true if a 16 bit interface */
uchar ram; /* true if interface has shared memory */
ulong ramstart; /* interface shared memory address start */
ulong ramstop; /* interface shared memory address end */
ulong dp8390; /* I/O address of 8390 (if any) */
ulong data; /* I/O data port if no shared memory */
uchar tstart; /* 8390 ring addresses */
uchar pstart;
uchar pstop;
};
/*
* Software ring buffer.
*/
struct RingBuf {
uchar owner;
uchar busy;
ushort len;
uchar pkt[sizeof(Etherpkt)];
};
enum {
Host = 0, /* buffer owned by host */
Interface = 1, /* buffer owned by interface */
Nrb = 16, /* default number of receive buffers */
Ntb = 4, /* default number of transmit buffers */
};
/*
* One per ethernet packet type.
*/
struct Type {
QLock;
Netprot; /* stat info */
int type; /* ethernet type */
int prom; /* promiscuous mode */
Queue *q;
int inuse;
Ctlr *ctlr;
Rendez cr; /* rendezvous for close */
Type *clist; /* close list */
};
enum {
NType = 9, /* types/interface */
};
/*
* Software controller.
*/
struct Ctlr {
QLock;
Board *board;
int present;
ushort nrb; /* number of software receive buffers */
ushort ntb; /* number of software transmit buffers */
RingBuf *rb; /* software receive buffers */
RingBuf *tb; /* software transmit buffers */
uchar ea[6]; /* ethernet address */
uchar ba[6]; /* broadcast address */
Rendez rr; /* rendezvous for a receive buffer */
ushort rh; /* first receive buffer belonging to host */
ushort ri; /* first receive buffer belonging to interface */
Rendez tr; /* rendezvous for a transmit buffer */
QLock tlock; /* semaphore on th */
ushort th; /* first transmit buffer belonging to host */
ushort ti; /* first transmit buffer belonging to interface */
Type type[NType];
int all; /* number of channels listening to all packets */
Type *clist; /* channels waiting to close */
Lock clock; /* lock for clist */
int prom; /* number of promiscuous channels */
int kproc; /* true if kproc started */
char name[NAMELEN]; /* name of kproc */
Network net;
Queue lbq; /* software loopback packet queue */
int inpackets;
int outpackets;
int crcs; /* input crc errors */
int oerrs; /* output errors */
int frames; /* framing errors */
int overflows; /* packet overflows */
int buffs; /* buffering errors */
};
#define NEXT(x, l) (((x)+1)%(l))
#define HOWMANY(x, y) (((x)+((y)-1))/(y))
#define ROUNDUP(x, y) (HOWMANY((x), (y))*(y))
/*
* The Western Digital 8003 and 8013 series, the NE2000
* and the 3Com 503 all use the DP8390 Network Interface
* Chip.
*/
extern void dp8390reset(Ctlr*);
extern void dp8390attach(Ctlr*);
extern void dp8390mode(Ctlr*, int);
extern void dp8390setea(Ctlr*);
extern void *dp8390read(Ctlr*, void*, ulong, ulong);
extern void dp8390receive(Ctlr*);
extern void dp8390transmit(Ctlr*);
extern void dp8390intr(Ctlr*);
enum {
Dp8390BufSz = 256, /* hardware ring buffer size */
};
.
## diffname pc/ether.h 1993/0212
## diff -e /n/bootesdump/1992/1222/sys/src/9/pc/ether.h /n/bootesdump/1993/0212/sys/src/9/pc/ether.h
138a
extern void dp8390watch(Ctlr*);
extern void dp8390overflow(Ctlr*);
extern void dp8390debug(Ctlr*);
/*
* The DP8390 needs some time between successive
* chip selects, so we need special I/O routines.
* See l.s.
* These routines only need to be used for accessing
* the chip registers. Data I/O, either through
* remote DMA or shared memory, can use the normal
* routines.
*/
extern int dp8390inb(ulong);
extern void dp8390outb(ulong, uchar);
.
135a
extern void *dp8390write(Ctlr*, ulong, void*, ulong);
.
115,119c
int crcs; /* input crc errors */
int oerrs; /* output errors */
int frames; /* framing errors */
int overflows; /* packet overflows */
int buffs; /* buffering errors */
.
111c
Queue lbq; /* software loopback packet queue */
.
103,108c
int all; /* number of channels listening to all packets */
Type *clist; /* channels waiting to close */
Lock clock; /* lock for clist */
int prom; /* number of promiscuous channels */
int kproc; /* true if kproc started */
char name[NAMELEN]; /* name of kproc */
.
97,100c
Rendez tr; /* rendezvous for a transmit buffer */
QLock tlock; /* semaphore on th */
ushort th; /* first transmit buffer belonging to host */
ushort ti; /* first transmit buffer belonging to card */
int tbusy; /* transmitter is busy */
.
93,95c
Rendez rr; /* rendezvous for a receive buffer */
ushort rh; /* first receive buffer belonging to host */
ushort ri; /* first receive buffer belonging to card */
.
90,91c
uchar ea[6]; /* ethernet address */
uchar ba[6]; /* broadcast address */
.
85,88c
ushort nrb; /* number of software receive buffers */
ushort ntb; /* number of software transmit buffers */
RingBuf *rb; /* software receive buffers */
RingBuf *tb; /* software transmit buffers */
.
83a
int debug;
.
82c
Card card; /* hardware info */
.
73c
NType = 9, /* types/card */
.
68,69c
Rendez cr; /* rendezvous for close */
Type *clist; /* close list */
.
61,63c
Netprot; /* stat info */
int type; /* ethernet type */
int prom; /* promiscuous mode */
.
52,53c
Nrb = 16, /* default number of receive buffers */
Ntb = 4, /* default number of transmit buffers */
.
49,50c
Host = 0, /* buffer owned by host */
Interface = 1, /* buffer owned by card */
.
43c
uchar busy; /* unused */
.
32a
uchar nxtpkt; /* software bndry */
.
27,29c
uchar ram; /* true if card has shared memory */
ulong ramstart; /* card shared memory address start */
ulong ramstop; /* card shared memory address end */
.
23c
ulong io; /* card I/O base address */
.
21a
void (*overflow)(Ctlr*);
.
17a
void *(*read)(Ctlr*, void*, ulong, ulong);
void *(*write)(Ctlr*, ulong, void*, ulong);
.
12c
struct Card {
char id[NAMELEN]; /* type of card */
.
4c
typedef struct Card Card;
.
## diffname pc/ether.h 1993/0915
## diff -e /n/bootesdump/1993/0212/sys/src/9/pc/ether.h /n/fornaxdump/1993/0915/sys/src/brazil/pc/ether.h
168a
extern void addethercard(char*, int (*)(Ctlr*));
.
142a
extern void dp8390getea(Ctlr*);
.
87a
int ctlrno;
Ctlr *next;
.
34,35d
32d
29,30d
13c
ISAConf;
.
## diffname pc/ether.h 1993/1113 # deleted
## diff -e /n/fornaxdump/1993/0915/sys/src/brazil/pc/ether.h /n/fornaxdump/1993/1113/sys/src/brazil/pc/ether.h
1,169d
|