xref: /plan9-contrib/sys/src/boot/vt4/etherif.h (revision da917039c7f233c1a27d212bf012c6afa758af39)
1*da917039SDavid du Colombier typedef struct RingBuf {
2*da917039SDavid du Colombier 	uchar	owner;
3*da917039SDavid du Colombier 	uchar	unused;
4*da917039SDavid du Colombier 	ushort	len;
5*da917039SDavid du Colombier 	uchar	pkt[sizeof(Etherpkt)];
6*da917039SDavid du Colombier } RingBuf;
7*da917039SDavid du Colombier 
8*da917039SDavid du Colombier enum {
9*da917039SDavid du Colombier 	Host		= 0,		/* buffer owned by host */
10*da917039SDavid du Colombier 	Interface	= 1,		/* buffer owned by card */
11*da917039SDavid du Colombier 
12*da917039SDavid du Colombier 	Nrb		= 32,		/* default number of receive buffers */
13*da917039SDavid du Colombier 	Ntb		= 8,		/* default number of transmit buffers */
14*da917039SDavid du Colombier };
15*da917039SDavid du Colombier 
16*da917039SDavid du Colombier /*
17*da917039SDavid du Colombier  *  a parsed .ini line
18*da917039SDavid du Colombier  */
19*da917039SDavid du Colombier #define ISAOPTLEN	32
20*da917039SDavid du Colombier #define NISAOPT		8
21*da917039SDavid du Colombier #define NAMELEN		28
22*da917039SDavid du Colombier 
23*da917039SDavid du Colombier typedef struct  ISAConf {
24*da917039SDavid du Colombier 	char	type[NAMELEN];
25*da917039SDavid du Colombier 	ulong	port;
26*da917039SDavid du Colombier //	ulong	irq;
27*da917039SDavid du Colombier 	ulong	mem;
28*da917039SDavid du Colombier 	ulong	size;
29*da917039SDavid du Colombier 	uchar	ea[6];
30*da917039SDavid du Colombier 
31*da917039SDavid du Colombier 	int	nopt;
32*da917039SDavid du Colombier 	char	opt[NISAOPT][ISAOPTLEN];
33*da917039SDavid du Colombier } ISAConf;
34*da917039SDavid du Colombier 
35*da917039SDavid du Colombier #define	CONFADDR	(0x2200)		/* above ppc vectors */
36*da917039SDavid du Colombier #define BOOTLINE	((char*)CONFADDR)
37*da917039SDavid du Colombier 
38*da917039SDavid du Colombier typedef struct Ether Ether;
39*da917039SDavid du Colombier struct Ether {
40*da917039SDavid du Colombier 	ISAConf;			/* hardware info */
41*da917039SDavid du Colombier 	ushort	ctlrno;
42*da917039SDavid du Colombier 	ushort	state;			/* 0: unfound, 1: found, 2: attaching */
43*da917039SDavid du Colombier 
44*da917039SDavid du Colombier 	void	(*attach)(Ether*);	/* filled in by reset routine */
45*da917039SDavid du Colombier 	void	(*transmit)(Ether*);
46*da917039SDavid du Colombier 	int	(*interrupt)(ulong bit);
47*da917039SDavid du Colombier 	void	(*detach)(Ether*);
48*da917039SDavid du Colombier 	void	*ctlr;
49*da917039SDavid du Colombier 
50*da917039SDavid du Colombier 	ushort	nrb;			/* number of software receive buffers */
51*da917039SDavid du Colombier 	ushort	ntb;			/* number of software transmit buffers */
52*da917039SDavid du Colombier 	RingBuf *rb;			/* software receive buffers */
53*da917039SDavid du Colombier 	RingBuf *tb;			/* software transmit buffers */
54*da917039SDavid du Colombier 
55*da917039SDavid du Colombier 	ushort	rh;			/* first receive buffer belonging to host */
56*da917039SDavid du Colombier 	ushort	ri;			/* first receive buffer belonging to card */
57*da917039SDavid du Colombier 
58*da917039SDavid du Colombier 	ushort	th;			/* first transmit buffer belonging to host */
59*da917039SDavid du Colombier 	ushort	ti;			/* first transmit buffer belonging to card */
60*da917039SDavid du Colombier 	ushort	tbusy;			/* transmitter is busy */
61*da917039SDavid du Colombier 	ushort	mbps;			/* zero means link down */
62*da917039SDavid du Colombier };
63*da917039SDavid du Colombier 
64*da917039SDavid du Colombier extern void etherrloop(Ether*, Etherpkt*, long);
65*da917039SDavid du Colombier extern void addethercard(char*, int(*)(Ether*));
66*da917039SDavid du Colombier 
67*da917039SDavid du Colombier #define NEXT(x, l)	(((x)+1)%(l))
68*da917039SDavid du Colombier #define PREV(x, l)	(((x) == 0) ? (l)-1: (x)-1)
69