enum { MaxEther = 4, Ntypes = 8, }; typedef struct Ether Ether; struct Ether { ISAConf; /* hardware info */ void (*attach)(Ether*); /* filled in by reset routine */ long (*write)(Ether*, void*, long); void (*interrupt)(Ether*); void *private; Etherpkt tpkt; /* transmit buffer */ Etherpkt rpkt; /* receive buffer */ QLock tlock; /* lock for grabbing transmitter queue */ Rendez tr; /* wait here for free xmit buffer */ long tlen; /* length of data in tb for txfifo management */ Netif; }; #define NEXT(x, l) (((x)+1)%(l)) #define HOWMANY(x, y) (((x)+((y)-1))/(y)) #define ROUNDUP(x, y) (HOWMANY((x), (y))*(y)) extern void addethercard(char*, int(*)(Ether*));