xref: /plan9/sys/src/9/pc/etherif.h (revision 12009bff671a91993ae58f16dab833e809f4a6f3)
17dd7cddfSDavid du Colombier enum {
2*0b712f6bSDavid du Colombier 	MaxEther	= 48,
37dd7cddfSDavid du Colombier 	Ntypes		= 8,
47dd7cddfSDavid du Colombier };
57dd7cddfSDavid du Colombier 
67dd7cddfSDavid du Colombier typedef struct Ether Ether;
77dd7cddfSDavid du Colombier struct Ether {
87dd7cddfSDavid du Colombier 	ISAConf;			/* hardware info */
97dd7cddfSDavid du Colombier 
107dd7cddfSDavid du Colombier 	int	ctlrno;
117dd7cddfSDavid du Colombier 	int	tbdf;			/* type+busno+devno+funcno */
127dd7cddfSDavid du Colombier 	uchar	ea[Eaddrlen];
137dd7cddfSDavid du Colombier 
147dd7cddfSDavid du Colombier 	void	(*attach)(Ether*);	/* filled in by reset routine */
153ff48bf5SDavid du Colombier 	void	(*detach)(Ether*);
167dd7cddfSDavid du Colombier 	void	(*transmit)(Ether*);
177dd7cddfSDavid du Colombier 	void	(*interrupt)(Ureg*, void*);
187dd7cddfSDavid du Colombier 	long	(*ifstat)(Ether*, void*, long, ulong);
1959cc4ca5SDavid du Colombier 	long 	(*ctl)(Ether*, void*, long); /* custom ctl messages */
203ff48bf5SDavid du Colombier 	void	(*power)(Ether*, int);	/* power on/off */
219a747e4fSDavid du Colombier 	void	(*shutdown)(Ether*);	/* shutdown hardware before reboot */
227dd7cddfSDavid du Colombier 	void	*ctlr;
237dd7cddfSDavid du Colombier 
247dd7cddfSDavid du Colombier 	Queue*	oq;
257dd7cddfSDavid du Colombier 
267dd7cddfSDavid du Colombier 	Netif;
277dd7cddfSDavid du Colombier };
287dd7cddfSDavid du Colombier 
297dd7cddfSDavid du Colombier extern Block* etheriq(Ether*, Block*, int);
307dd7cddfSDavid du Colombier extern void addethercard(char*, int(*)(Ether*));
317dd7cddfSDavid du Colombier extern ulong ethercrc(uchar*, int);
329a747e4fSDavid du Colombier extern int parseether(uchar*, char*);
337dd7cddfSDavid du Colombier 
347dd7cddfSDavid du Colombier #define NEXT(x, l)	(((x)+1)%(l))
357dd7cddfSDavid du Colombier #define PREV(x, l)	(((x) == 0) ? (l)-1: (x)-1)
36