xref: /inferno-os/os/boot/mpc/etherif.h (revision 74a4d8c26dd3c1e9febcb717cfd6cb6512991a7a)
1*74a4d8c2SCharles.Forsyth /*
2*74a4d8c2SCharles.Forsyth  * All the goo for PC ethernet cards.
3*74a4d8c2SCharles.Forsyth  */
4*74a4d8c2SCharles.Forsyth typedef struct Card Card;
5*74a4d8c2SCharles.Forsyth typedef struct Type Type;
6*74a4d8c2SCharles.Forsyth typedef struct Ctlr Ctlr;
7*74a4d8c2SCharles.Forsyth 
8*74a4d8c2SCharles.Forsyth /*
9*74a4d8c2SCharles.Forsyth  * Hardware interface.
10*74a4d8c2SCharles.Forsyth  */
11*74a4d8c2SCharles.Forsyth struct Card {
12*74a4d8c2SCharles.Forsyth 	ISAConf;
13*74a4d8c2SCharles.Forsyth 
14*74a4d8c2SCharles.Forsyth 	int	(*reset)(Ctlr*);
15*74a4d8c2SCharles.Forsyth 	void	(*attach)(Ctlr*);
16*74a4d8c2SCharles.Forsyth 
17*74a4d8c2SCharles.Forsyth 	void	*(*read)(Ctlr*, void*, ulong, ulong);
18*74a4d8c2SCharles.Forsyth 	void	*(*write)(Ctlr*, ulong, void*, ulong);
19*74a4d8c2SCharles.Forsyth 
20*74a4d8c2SCharles.Forsyth 	void	(*receive)(Ctlr*);
21*74a4d8c2SCharles.Forsyth 	void	(*transmit)(Ctlr*);
22*74a4d8c2SCharles.Forsyth 	void	(*intr)(Ureg*, void*);
23*74a4d8c2SCharles.Forsyth 	void	(*overflow)(Ctlr*);
24*74a4d8c2SCharles.Forsyth 
25*74a4d8c2SCharles.Forsyth 	uchar	bit16;			/* true if a 16 bit interface */
26*74a4d8c2SCharles.Forsyth 	uchar	ram;			/* true if card has shared memory */
27*74a4d8c2SCharles.Forsyth 
28*74a4d8c2SCharles.Forsyth 	ulong	dp8390;			/* I/O address of 8390 (if any) */
29*74a4d8c2SCharles.Forsyth 	ulong	data;			/* I/O data port if no shared memory */
30*74a4d8c2SCharles.Forsyth 	uchar	nxtpkt;			/* software bndry */
31*74a4d8c2SCharles.Forsyth 	uchar	tstart;			/* 8390 ring addresses */
32*74a4d8c2SCharles.Forsyth 	uchar	pstart;
33*74a4d8c2SCharles.Forsyth 	uchar	pstop;
34*74a4d8c2SCharles.Forsyth 
35*74a4d8c2SCharles.Forsyth 	uchar	dummyrr;		/* do dummy remote read */
36*74a4d8c2SCharles.Forsyth };
37*74a4d8c2SCharles.Forsyth 
38*74a4d8c2SCharles.Forsyth /*
39*74a4d8c2SCharles.Forsyth  * Software controller.
40*74a4d8c2SCharles.Forsyth  */
41*74a4d8c2SCharles.Forsyth struct Ctlr {
42*74a4d8c2SCharles.Forsyth 	Card	card;			/* hardware info */
43*74a4d8c2SCharles.Forsyth 	int	ctlrno;
44*74a4d8c2SCharles.Forsyth 	int	present;
45*74a4d8c2SCharles.Forsyth 
46*74a4d8c2SCharles.Forsyth 	Queue*	iq;
47*74a4d8c2SCharles.Forsyth 	Queue*	oq;
48*74a4d8c2SCharles.Forsyth 
49*74a4d8c2SCharles.Forsyth 	int	inpackets;
50*74a4d8c2SCharles.Forsyth 	int	outpackets;
51*74a4d8c2SCharles.Forsyth 	int	crcs;			/* input crc errors */
52*74a4d8c2SCharles.Forsyth 	int	oerrs;			/* output errors */
53*74a4d8c2SCharles.Forsyth 	int	frames;			/* framing errors */
54*74a4d8c2SCharles.Forsyth 	int	overflows;		/* packet overflows */
55*74a4d8c2SCharles.Forsyth 	int	buffs;			/* buffering errors */
56*74a4d8c2SCharles.Forsyth };
57*74a4d8c2SCharles.Forsyth 
58*74a4d8c2SCharles.Forsyth extern int sccethreset(Ctlr*);
59*74a4d8c2SCharles.Forsyth extern int	etheriq(Ctlr*, Block*, int);
60