xref: /plan9-contrib/sys/src/9k/k10/etherif.h (revision 252486b26b9cc60b522573a4310b4c79b038aad2)
1 enum
2 {
3 	Eaddrlen	= 6,
4 	ETHERMINTU	= 60,		/* minimum transmit size */
5 	ETHERMAXTU	= 1514,		/* maximum transmit size */
6 	ETHERHDRSIZE	= 14,		/* size of an ethernet header */
7 
8 	/* ethernet packet types */
9 	ETARP		= 0x0806,
10 	ETIP4		= 0x0800,
11 	ETIP6		= 0x86DD,
12 
13 	MaxEther	= 48,
14 	Ntypes		= 8,
15 };
16 
17 typedef struct Ether Ether;
18 struct Ether {
19 	ISAConf;			/* hardware info */
20 
21 	int	ctlrno;
22 	int	tbdf;			/* type+busno+devno+funcno */
23 	int	minmtu;
24 	int 	maxmtu;
25 	uchar	ea[Eaddrlen];
26 
27 	void	(*attach)(Ether*);	/* filled in by reset routine */
28 	void	(*detach)(Ether*);
29 	void	(*transmit)(Ether*);
30 	void	(*interrupt)(Ureg*, void*);
31 	long	(*ifstat)(Ether*, void*, long, ulong);
32 	long 	(*ctl)(Ether*, void*, long); /* custom ctl messages */
33 	void	(*power)(Ether*, int);	/* power on/off */
34 	void	(*shutdown)(Ether*);	/* shutdown hardware before reboot */
35 	void	*ctlr;
36 	void	*vector;
37 
38 	int	scan[Ntypes];		/* base station scanning interval */
39 	int	nscan;			/* number of base station scanners */
40 
41 	Netif;
42 };
43 
44 typedef struct Etherpkt Etherpkt;
45 struct Etherpkt
46 {
47 	uchar	d[Eaddrlen];
48 	uchar	s[Eaddrlen];
49 	uchar	type[2];
50 	uchar	data[1500];
51 };
52 
53 extern Block* etheriq(Ether*, Block*, int);
54 extern void addethercard(char*, int(*)(Ether*));
55 extern ulong ethercrc(uchar*, int);
56 extern int parseether(uchar*, char*);
57 
58 #define NEXT(x, l)	(((x)+1)%(l))
59 #define PREV(x, l)	(((x) == 0) ? (l)-1: (x)-1)
60