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