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