xref: /plan9-contrib/sys/src/9/kw/etherif.h (revision 5e27dea93c37a6944933876218b2bfb60ef34178)
1154abd99SDavid du Colombier enum
2154abd99SDavid du Colombier {
3154abd99SDavid du Colombier 	MaxEther	= 2,
4154abd99SDavid du Colombier 	Ntypes		= 8,
5154abd99SDavid du Colombier };
6154abd99SDavid du Colombier 
7154abd99SDavid du Colombier typedef struct Ether Ether;
8154abd99SDavid du Colombier struct Ether {
9154abd99SDavid du Colombier 	RWlock;				/* TO DO */
10154abd99SDavid du Colombier 	ISAConf;			/* hardware info */
11154abd99SDavid du Colombier 	int	ctlrno;
12154abd99SDavid du Colombier 	int	minmtu;
13154abd99SDavid du Colombier 	int	maxmtu;
14154abd99SDavid du Colombier 	uchar	ea[Eaddrlen];
15154abd99SDavid du Colombier 	void	*address;
16154abd99SDavid du Colombier 	int	tbusy;
17154abd99SDavid du Colombier 
18154abd99SDavid du Colombier 	void	(*attach)(Ether*);	/* filled in by reset routine */
19154abd99SDavid du Colombier 	void	(*closed)(Ether*);
20154abd99SDavid du Colombier 	void	(*detach)(Ether*);
21154abd99SDavid du Colombier 	void	(*transmit)(Ether*);
22154abd99SDavid du Colombier 	void	(*interrupt)(Ureg*, void*);
23154abd99SDavid du Colombier 	long	(*ifstat)(Ether*, void*, long, ulong);
24154abd99SDavid du Colombier 	long	(*ctl)(Ether*, void*, long); /* custom ctl messages */
25154abd99SDavid du Colombier 	void	(*power)(Ether*, int);	/* power on/off */
26154abd99SDavid du Colombier 	void	(*shutdown)(Ether*);	/* shutdown hardware before reboot */
27154abd99SDavid du Colombier 	void	*ctlr;
28154abd99SDavid du Colombier 	int	pcmslot;		/* PCMCIA */
29154abd99SDavid du Colombier 	int	fullduplex;		/* non-zero if full duplex */
30*c6569576SDavid du Colombier 	int	linkchg;		/* link status changed? */
31*c6569576SDavid du Colombier 	uvlong	starttime;		/* last activity time */
32154abd99SDavid du Colombier 
33154abd99SDavid du Colombier 	Queue*	oq;
34154abd99SDavid du Colombier 
35154abd99SDavid du Colombier 	/* statistics */
36154abd99SDavid du Colombier 	ulong	interrupts;
37154abd99SDavid du Colombier 	ulong	dmarxintr;
38154abd99SDavid du Colombier 	ulong	dmatxintr;
39154abd99SDavid du Colombier 	ulong	promisc;
40154abd99SDavid du Colombier 	ulong	pktsdropped;
41154abd99SDavid du Colombier 	ulong	pktsmisaligned;
42154abd99SDavid du Colombier 	ulong	resets;			/* after initialisation */
43154abd99SDavid du Colombier 	ulong	bcasts;			/* broadcast pkts rcv'd */
44154abd99SDavid du Colombier 	ulong	mcasts;			/* multicast pkts rcv'd */
45154abd99SDavid du Colombier 
46154abd99SDavid du Colombier 	Netif;
47154abd99SDavid du Colombier };
48154abd99SDavid du Colombier 
49154abd99SDavid du Colombier extern Block* etheriq(Ether*, Block*, int);
50154abd99SDavid du Colombier extern void addethercard(char*, int(*)(Ether*));
51154abd99SDavid du Colombier extern ulong ethercrc(uchar*, int);
52154abd99SDavid du Colombier extern int parseether(uchar*, char*);
53154abd99SDavid du Colombier 
54154abd99SDavid du Colombier #define NEXT(x, l)	(((x)+1)%(l))
55154abd99SDavid du Colombier #define PREV(x, l)	(((x) == 0) ? (l)-1: (x)-1)
56