1*8e32b400SDavid du Colombier enum 2*8e32b400SDavid du Colombier { 3*8e32b400SDavid du Colombier MaxEther = 4, 4*8e32b400SDavid du Colombier Ntypes = 8, 5*8e32b400SDavid du Colombier }; 6*8e32b400SDavid du Colombier 7*8e32b400SDavid du Colombier typedef struct Ether Ether; 8*8e32b400SDavid du Colombier struct Ether { 9*8e32b400SDavid du Colombier RWlock; 10*8e32b400SDavid du Colombier ISAConf; /* hardware info */ 11*8e32b400SDavid du Colombier 12*8e32b400SDavid du Colombier int ctlrno; 13*8e32b400SDavid du Colombier int minmtu; 14*8e32b400SDavid du Colombier int maxmtu; 15*8e32b400SDavid du Colombier 16*8e32b400SDavid du Colombier Netif; 17*8e32b400SDavid du Colombier 18*8e32b400SDavid du Colombier void (*attach)(Ether*); /* filled in by reset routine */ 19*8e32b400SDavid du Colombier void (*detach)(Ether*); 20*8e32b400SDavid du Colombier void (*transmit)(Ether*); 21*8e32b400SDavid du Colombier void (*interrupt)(Ureg*, void*); 22*8e32b400SDavid du Colombier long (*ifstat)(Ether*, void*, long, ulong); 23*8e32b400SDavid du Colombier long (*ctl)(Ether*, void*, long); /* custom ctl messages */ 24*8e32b400SDavid du Colombier void (*power)(Ether*, int); /* power on/off */ 25*8e32b400SDavid du Colombier void (*shutdown)(Ether*); /* shutdown hardware before reboot */ 26*8e32b400SDavid du Colombier 27*8e32b400SDavid du Colombier void* ctlr; 28*8e32b400SDavid du Colombier uchar ea[Eaddrlen]; 29*8e32b400SDavid du Colombier void* address; 30*8e32b400SDavid du Colombier int irq; 31*8e32b400SDavid du Colombier 32*8e32b400SDavid du Colombier Queue* oq; 33*8e32b400SDavid du Colombier }; 34*8e32b400SDavid du Colombier 35*8e32b400SDavid du Colombier extern Block* etheriq(Ether*, Block*, int); 36*8e32b400SDavid du Colombier extern void addethercard(char*, int(*)(Ether*)); 37*8e32b400SDavid du Colombier extern ulong ethercrc(uchar*, int); 38*8e32b400SDavid du Colombier extern int parseether(uchar*, char*); 39*8e32b400SDavid du Colombier 40*8e32b400SDavid du Colombier #define NEXT(x, l) (((x)+1)%(l)) 41*8e32b400SDavid du Colombier #define PREV(x, l) (((x) == 0) ? (l)-1: (x)-1) 42