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