1*74a4d8c2SCharles.Forsyth enum { 2*74a4d8c2SCharles.Forsyth MaxEther = 6, 3*74a4d8c2SCharles.Forsyth Ntypes = 8, 4*74a4d8c2SCharles.Forsyth }; 5*74a4d8c2SCharles.Forsyth 6*74a4d8c2SCharles.Forsyth typedef struct Ether Ether; 7*74a4d8c2SCharles.Forsyth struct Ether { 8*74a4d8c2SCharles.Forsyth RWlock; /* TO DO */ 9*74a4d8c2SCharles.Forsyth ISAConf; /* hardware info */ 10*74a4d8c2SCharles.Forsyth int ctlrno; 11*74a4d8c2SCharles.Forsyth int tbdf; /* type+busno+devno+funcno */ 12*74a4d8c2SCharles.Forsyth int minmtu; 13*74a4d8c2SCharles.Forsyth int maxmtu; 14*74a4d8c2SCharles.Forsyth uchar ea[Eaddrlen]; 15*74a4d8c2SCharles.Forsyth int encry; 16*74a4d8c2SCharles.Forsyth 17*74a4d8c2SCharles.Forsyth void (*attach)(Ether*); /* filled in by reset routine */ 18*74a4d8c2SCharles.Forsyth void (*closed)(Ether*); 19*74a4d8c2SCharles.Forsyth void (*detach)(Ether*); 20*74a4d8c2SCharles.Forsyth void (*transmit)(Ether*); 21*74a4d8c2SCharles.Forsyth void (*interrupt)(Ureg*, void*); 22*74a4d8c2SCharles.Forsyth long (*ifstat)(Ether*, void*, long, ulong); 23*74a4d8c2SCharles.Forsyth long (*ctl)(Ether*, void*, long); /* custom ctl messages */ 24*74a4d8c2SCharles.Forsyth void (*power)(Ether*, int); /* power on/off */ 25*74a4d8c2SCharles.Forsyth void (*shutdown)(Ether*); /* shutdown hardware before reboot */ 26*74a4d8c2SCharles.Forsyth void *ctlr; 27*74a4d8c2SCharles.Forsyth int pcmslot; /* PCMCIA */ 28*74a4d8c2SCharles.Forsyth int fullduplex; /* non-zero if full duplex */ 29*74a4d8c2SCharles.Forsyth 30*74a4d8c2SCharles.Forsyth Queue* oq; 31*74a4d8c2SCharles.Forsyth 32*74a4d8c2SCharles.Forsyth Netif; 33*74a4d8c2SCharles.Forsyth }; 34*74a4d8c2SCharles.Forsyth 35*74a4d8c2SCharles.Forsyth extern Block* etheriq(Ether*, Block*, int); 36*74a4d8c2SCharles.Forsyth extern void addethercard(char*, int(*)(Ether*)); 37*74a4d8c2SCharles.Forsyth extern int archether(int, Ether*); 38