12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- typedef struct RingBuf {
- uchar owner;
- uchar unused;
- ushort len;
- uchar pkt[sizeof(Etherpkt)];
- } RingBuf;
- enum {
- Host = 0, /* buffer owned by host */
- Interface = 1, /* buffer owned by card */
- Nrb = 32, /* default number of receive buffers */
- Ntb = 8, /* default number of transmit buffers */
- };
- typedef struct Ether Ether;
- struct Ether {
- ISAConf; /* hardware info */
- int ctlrno;
- int state;
- int tbdf;
- void (*attach)(Ether*); /* filled in by reset routine */
- void (*transmit)(Ether*);
- void (*interrupt)(Ureg*, void*);
- void (*detach)(Ether*);
- void *ctlr;
- ushort nrb; /* number of software receive buffers */
- ushort ntb; /* number of software transmit buffers */
- RingBuf *rb; /* software receive buffers */
- RingBuf *tb; /* software transmit buffers */
- ushort rh; /* first receive buffer belonging to host */
- ushort ri; /* first receive buffer belonging to card */
- ushort th; /* first transmit buffer belonging to host */
- ushort ti; /* first transmit buffer belonging to card */
- int tbusy; /* transmitter is busy */
- };
- extern void etherrloop(Ether*, Etherpkt*, long);
- extern void addethercard(char*, int(*)(Ether*));
- #define NEXT(x, l) (((x)+1)%(l))
- #define PREV(x, l) (((x) == 0) ? (l)-1: (x)-1)
|