1*9a747e4fSDavid du Colombier enum { 2*9a747e4fSDavid du Colombier MaxEther = 24, 3*9a747e4fSDavid du Colombier Ntypes = 8, 4*9a747e4fSDavid du Colombier }; 5*9a747e4fSDavid du Colombier 6*9a747e4fSDavid du Colombier typedef struct Ether Ether; 7*9a747e4fSDavid du Colombier struct Ether { 8*9a747e4fSDavid du Colombier ISAConf; /* hardware info */ 9*9a747e4fSDavid du Colombier 10*9a747e4fSDavid du Colombier int ctlrno; 11*9a747e4fSDavid du Colombier int tbdf; /* type+busno+devno+funcno */ 12*9a747e4fSDavid du Colombier int minmtu; 13*9a747e4fSDavid du Colombier int maxmtu; 14*9a747e4fSDavid du Colombier uchar ea[Eaddrlen]; 15*9a747e4fSDavid du Colombier 16*9a747e4fSDavid du Colombier void (*attach)(Ether*); /* filled in by reset routine */ 17*9a747e4fSDavid du Colombier void (*transmit)(Ether*); 18*9a747e4fSDavid du Colombier void (*interrupt)(Ureg*, void*); 19*9a747e4fSDavid du Colombier long (*ifstat)(Ether*, void*, long, ulong); 20*9a747e4fSDavid du Colombier long (*ctl)(Ether*, void*, long); /* custom ctl messages */ 21*9a747e4fSDavid du Colombier void *ctlr; 22*9a747e4fSDavid du Colombier 23*9a747e4fSDavid du Colombier Queue* oq; 24*9a747e4fSDavid du Colombier 25*9a747e4fSDavid du Colombier Netif; 26*9a747e4fSDavid du Colombier }; 27*9a747e4fSDavid du Colombier 28*9a747e4fSDavid du Colombier extern Block* etheriq(Ether*, Block*, int); 29*9a747e4fSDavid du Colombier extern void addethercard(char*, int(*)(Ether*)); 30*9a747e4fSDavid du Colombier extern ulong ethercrc(uchar*, int); 31*9a747e4fSDavid du Colombier 32*9a747e4fSDavid du Colombier #define NEXT(x, l) (((x)+1)%(l)) 33*9a747e4fSDavid du Colombier #define PREV(x, l) (((x) == 0) ? (l)-1: (x)-1) 34