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