1*d6dfd9efSDavid du Colombier enum 2*d6dfd9efSDavid du Colombier { 3*d6dfd9efSDavid du Colombier MaxEther = 2, 4*d6dfd9efSDavid du Colombier Ntypes = 8, 5*d6dfd9efSDavid du Colombier }; 6*d6dfd9efSDavid du Colombier 7*d6dfd9efSDavid du Colombier typedef struct Ether Ether; 8*d6dfd9efSDavid du Colombier struct Ether { 9*d6dfd9efSDavid du Colombier RWlock; /* TO DO */ 10*d6dfd9efSDavid du Colombier ISAConf; /* hardware info */ 11*d6dfd9efSDavid du Colombier int ctlrno; 12*d6dfd9efSDavid du Colombier int minmtu; 13*d6dfd9efSDavid du Colombier int maxmtu; 14*d6dfd9efSDavid du Colombier uchar ea[Eaddrlen]; 15*d6dfd9efSDavid du Colombier int tbusy; 16*d6dfd9efSDavid du Colombier int encry; 17*d6dfd9efSDavid du Colombier 18*d6dfd9efSDavid du Colombier void (*attach)(Ether*); /* filled in by reset routine */ 19*d6dfd9efSDavid du Colombier void (*closed)(Ether*); 20*d6dfd9efSDavid du Colombier void (*detach)(Ether*); 21*d6dfd9efSDavid du Colombier void (*transmit)(Ether*); 22*d6dfd9efSDavid du Colombier int (*interrupt)(ulong); 23*d6dfd9efSDavid du Colombier long (*ifstat)(Ether*, void*, long, ulong); 24*d6dfd9efSDavid du Colombier long (*ctl)(Ether*, void*, long); /* custom ctl messages */ 25*d6dfd9efSDavid du Colombier void (*power)(Ether*, int); /* power on/off */ 26*d6dfd9efSDavid du Colombier void (*shutdown)(Ether*); /* shutdown hardware before reboot */ 27*d6dfd9efSDavid du Colombier void *ctlr; 28*d6dfd9efSDavid du Colombier int pcmslot; /* PCMCIA */ 29*d6dfd9efSDavid du Colombier int fullduplex; /* non-zero if full duplex */ 30*d6dfd9efSDavid du Colombier 31*d6dfd9efSDavid du Colombier Queue* oq; 32*d6dfd9efSDavid du Colombier 33*d6dfd9efSDavid du Colombier /* statistics */ 34*d6dfd9efSDavid du Colombier ulong interrupts; 35*d6dfd9efSDavid du Colombier ulong dmarxintr; 36*d6dfd9efSDavid du Colombier ulong dmatxintr; 37*d6dfd9efSDavid du Colombier ulong promisc; 38*d6dfd9efSDavid du Colombier ulong pktsdropped; 39*d6dfd9efSDavid du Colombier ulong pktsmisaligned; 40*d6dfd9efSDavid du Colombier ulong resets; /* after initialisation */ 41*d6dfd9efSDavid du Colombier ulong bcasts; /* broadcast pkts rcv'd */ 42*d6dfd9efSDavid du Colombier ulong mcasts; /* multicast pkts rcv'd */ 43*d6dfd9efSDavid du Colombier 44*d6dfd9efSDavid du Colombier Netif; 45*d6dfd9efSDavid du Colombier }; 46*d6dfd9efSDavid du Colombier 47*d6dfd9efSDavid du Colombier extern Block* etheriq(Ether*, Block*, int); 48*d6dfd9efSDavid du Colombier extern void addethercard(char*, int(*)(Ether*)); 49*d6dfd9efSDavid du Colombier extern int archether(int, Ether*); 50