xref: /inferno-os/os/mpc/etherif.h (revision 74a4d8c26dd3c1e9febcb717cfd6cb6512991a7a)
1*74a4d8c2SCharles.Forsyth enum {
2*74a4d8c2SCharles.Forsyth 	MaxEther	= 6,
3*74a4d8c2SCharles.Forsyth 	Ntypes		= 8,
4*74a4d8c2SCharles.Forsyth };
5*74a4d8c2SCharles.Forsyth 
6*74a4d8c2SCharles.Forsyth typedef struct Ether Ether;
7*74a4d8c2SCharles.Forsyth struct Ether {
8*74a4d8c2SCharles.Forsyth RWlock;	/* TO DO */
9*74a4d8c2SCharles.Forsyth 	ISAConf;			/* hardware info */
10*74a4d8c2SCharles.Forsyth 	int	ctlrno;
11*74a4d8c2SCharles.Forsyth 	int	tbdf;			/* type+busno+devno+funcno */
12*74a4d8c2SCharles.Forsyth 	int	minmtu;
13*74a4d8c2SCharles.Forsyth 	int	maxmtu;
14*74a4d8c2SCharles.Forsyth 	uchar	ea[Eaddrlen];
15*74a4d8c2SCharles.Forsyth 	int	encry;
16*74a4d8c2SCharles.Forsyth 
17*74a4d8c2SCharles.Forsyth 	void	(*attach)(Ether*);	/* filled in by reset routine */
18*74a4d8c2SCharles.Forsyth 	void	(*closed)(Ether*);
19*74a4d8c2SCharles.Forsyth 	void	(*detach)(Ether*);
20*74a4d8c2SCharles.Forsyth 	void	(*transmit)(Ether*);
21*74a4d8c2SCharles.Forsyth 	void	(*interrupt)(Ureg*, void*);
22*74a4d8c2SCharles.Forsyth 	long	(*ifstat)(Ether*, void*, long, ulong);
23*74a4d8c2SCharles.Forsyth 	long	(*ctl)(Ether*, void*, long); /* custom ctl messages */
24*74a4d8c2SCharles.Forsyth 	void	(*power)(Ether*, int);	/* power on/off */
25*74a4d8c2SCharles.Forsyth 	void	(*shutdown)(Ether*);	/* shutdown hardware before reboot */
26*74a4d8c2SCharles.Forsyth 	void	*ctlr;
27*74a4d8c2SCharles.Forsyth 	int	pcmslot;		/* PCMCIA */
28*74a4d8c2SCharles.Forsyth 	int	fullduplex;	/* non-zero if full duplex */
29*74a4d8c2SCharles.Forsyth 
30*74a4d8c2SCharles.Forsyth 	Queue*	oq;
31*74a4d8c2SCharles.Forsyth 
32*74a4d8c2SCharles.Forsyth 	Netif;
33*74a4d8c2SCharles.Forsyth };
34*74a4d8c2SCharles.Forsyth 
35*74a4d8c2SCharles.Forsyth extern Block* etheriq(Ether*, Block*, int);
36*74a4d8c2SCharles.Forsyth extern void addethercard(char*, int(*)(Ether*));
37*74a4d8c2SCharles.Forsyth extern int archether(int, Ether*);
38