xref: /plan9/sys/src/9/pc/ethermii.h (revision eb752b91575dc69cc3e452727a3dfb01f0902806)
1019aa153SDavid du Colombier typedef struct Mii Mii;
2019aa153SDavid du Colombier typedef struct MiiPhy MiiPhy;
3019aa153SDavid du Colombier 
4019aa153SDavid du Colombier enum {					/* registers */
5019aa153SDavid du Colombier 	Bmcr		= 0x00,		/* Basic Mode Control */
6019aa153SDavid du Colombier 	Bmsr		= 0x01,		/* Basic Mode Status */
7019aa153SDavid du Colombier 	Phyidr1		= 0x02,		/* PHY Identifier #1 */
8019aa153SDavid du Colombier 	Phyidr2		= 0x03,		/* PHY Identifier #2 */
9019aa153SDavid du Colombier 	Anar		= 0x04,		/* Auto-Negotiation Advertisement */
10019aa153SDavid du Colombier 	Anlpar		= 0x05,		/* AN Link Partner Ability */
11019aa153SDavid du Colombier 	Aner		= 0x06,		/* AN Expansion */
12019aa153SDavid du Colombier 	Annptr		= 0x07,		/* AN Next Page TX */
13019aa153SDavid du Colombier 	Annprr		= 0x08,		/* AN Next Page RX */
14019aa153SDavid du Colombier 	Mscr		= 0x09,		/* MASTER-SLAVE Control */
15019aa153SDavid du Colombier 	Mssr		= 0x0A,		/* MASTER-SLAVE Status */
16019aa153SDavid du Colombier 	Esr		= 0x0F,		/* Extended Status */
17019aa153SDavid du Colombier 
18019aa153SDavid du Colombier 	NMiiPhyr	= 32,
19019aa153SDavid du Colombier 	NMiiPhy		= 32,
20019aa153SDavid du Colombier };
21019aa153SDavid du Colombier 
22019aa153SDavid du Colombier enum {					/* Bmcr */
23019aa153SDavid du Colombier 	BmcrSs1		= 0x0040,	/* Speed Select[1] */
24019aa153SDavid du Colombier 	BmcrCte		= 0x0080,	/* Collision Test Enable */
25019aa153SDavid du Colombier 	BmcrDm		= 0x0100,	/* Duplex Mode */
26019aa153SDavid du Colombier 	BmcrRan		= 0x0200,	/* Restart Auto-Negotiation */
27019aa153SDavid du Colombier 	BmcrI		= 0x0400,	/* Isolate */
28019aa153SDavid du Colombier 	BmcrPd		= 0x0800,	/* Power Down */
29019aa153SDavid du Colombier 	BmcrAne		= 0x1000,	/* Auto-Negotiation Enable */
30019aa153SDavid du Colombier 	BmcrSs0		= 0x2000,	/* Speed Select[0] */
31019aa153SDavid du Colombier 	BmcrLe		= 0x4000,	/* Loopback Enable */
32019aa153SDavid du Colombier 	BmcrR		= 0x8000,	/* Reset */
33019aa153SDavid du Colombier };
34019aa153SDavid du Colombier 
35019aa153SDavid du Colombier enum {					/* Bmsr */
36019aa153SDavid du Colombier 	BmsrEc		= 0x0001,	/* Extended Capability */
37019aa153SDavid du Colombier 	BmsrJd		= 0x0002,	/* Jabber Detect */
38019aa153SDavid du Colombier 	BmsrLs		= 0x0004,	/* Link Status */
39019aa153SDavid du Colombier 	BmsrAna		= 0x0008,	/* Auto-Negotiation Ability */
40019aa153SDavid du Colombier 	BmsrRf		= 0x0010,	/* Remote Fault */
41019aa153SDavid du Colombier 	BmsrAnc		= 0x0020,	/* Auto-Negotiation Complete */
42019aa153SDavid du Colombier 	BmsrPs		= 0x0040,	/* Preamble Suppression Capable */
43019aa153SDavid du Colombier 	BmsrEs		= 0x0100,	/* Extended Status */
44019aa153SDavid du Colombier 	Bmsr100T2HD	= 0x0200,	/* 100BASE-T2 HD Capable */
45019aa153SDavid du Colombier 	Bmsr100T2FD	= 0x0400,	/* 100BASE-T2 FD Capable */
46*eb752b91SDavid du Colombier 	Bmsr10THD	= 0x0800,	/* 10BASE-T HD Capable */
47019aa153SDavid du Colombier 	Bmsr10TFD	= 0x1000,	/* 10BASE-T FD Capable */
48019aa153SDavid du Colombier 	Bmsr100TXHD	= 0x2000,	/* 100BASE-TX HD Capable */
49019aa153SDavid du Colombier 	Bmsr100TXFD	= 0x4000,	/* 100BASE-TX FD Capable */
50019aa153SDavid du Colombier 	Bmsr100T4	= 0x8000,	/* 100BASE-T4 Capable */
51019aa153SDavid du Colombier };
52019aa153SDavid du Colombier 
53019aa153SDavid du Colombier enum {					/* Anar/Anlpar */
54019aa153SDavid du Colombier 	Ana10HD		= 0x0020,	/* Advertise 10BASE-T */
55019aa153SDavid du Colombier 	Ana10FD		= 0x0040,	/* Advertise 10BASE-T FD */
56019aa153SDavid du Colombier 	AnaTXHD		= 0x0080,	/* Advertise 100BASE-TX */
57019aa153SDavid du Colombier 	AnaTXFD		= 0x0100,	/* Advertise 100BASE-TX FD */
58019aa153SDavid du Colombier 	AnaT4		= 0x0200,	/* Advertise 100BASE-T4 */
59019aa153SDavid du Colombier 	AnaP		= 0x0400,	/* Pause */
60019aa153SDavid du Colombier 	AnaAP		= 0x0800,	/* Asymmetrical Pause */
61019aa153SDavid du Colombier 	AnaRf		= 0x2000,	/* Remote Fault */
62019aa153SDavid du Colombier 	AnaAck		= 0x4000,	/* Acknowledge */
63019aa153SDavid du Colombier 	AnaNp		= 0x8000,	/* Next Page Indication */
64019aa153SDavid du Colombier };
65019aa153SDavid du Colombier 
66019aa153SDavid du Colombier enum {					/* Mscr */
67019aa153SDavid du Colombier 	Mscr1000THD	= 0x0100,	/* Advertise 1000BASE-T HD */
68019aa153SDavid du Colombier 	Mscr1000TFD	= 0x0200,	/* Advertise 1000BASE-T FD */
69019aa153SDavid du Colombier };
70019aa153SDavid du Colombier 
71019aa153SDavid du Colombier enum {					/* Mssr */
72019aa153SDavid du Colombier 	Mssr1000THD	= 0x0400,	/* Link Partner 1000BASE-T HD able */
73019aa153SDavid du Colombier 	Mssr1000TFD	= 0x0800,	/* Link Partner 1000BASE-T FD able */
74019aa153SDavid du Colombier };
75019aa153SDavid du Colombier 
76019aa153SDavid du Colombier enum {					/* Esr */
77019aa153SDavid du Colombier 	Esr1000THD	= 0x1000,	/* 1000BASE-T HD Capable */
78019aa153SDavid du Colombier 	Esr1000TFD	= 0x2000,	/* 1000BASE-T FD Capable */
79019aa153SDavid du Colombier 	Esr1000XHD	= 0x4000,	/* 1000BASE-X HD Capable */
80019aa153SDavid du Colombier 	Esr1000XFD	= 0x8000,	/* 1000BASE-X FD Capable */
81019aa153SDavid du Colombier };
82019aa153SDavid du Colombier 
83019aa153SDavid du Colombier typedef struct Mii {
84019aa153SDavid du Colombier 	Lock;
85019aa153SDavid du Colombier 	int	nphy;
86019aa153SDavid du Colombier 	int	mask;
87019aa153SDavid du Colombier 	MiiPhy*	phy[NMiiPhy];
88019aa153SDavid du Colombier 	MiiPhy*	curphy;
89019aa153SDavid du Colombier 
90019aa153SDavid du Colombier 	void*	ctlr;
91019aa153SDavid du Colombier 	int	(*mir)(Mii*, int, int);
92019aa153SDavid du Colombier 	int	(*miw)(Mii*, int, int, int);
93019aa153SDavid du Colombier } Mii;
94019aa153SDavid du Colombier 
95019aa153SDavid du Colombier typedef struct MiiPhy {
96019aa153SDavid du Colombier 	Mii*	mii;
97019aa153SDavid du Colombier 	int	oui;
98019aa153SDavid du Colombier 	int	phyno;
99019aa153SDavid du Colombier 
100019aa153SDavid du Colombier 	int	anar;
101019aa153SDavid du Colombier 	int	fc;
102019aa153SDavid du Colombier 	int	mscr;
103019aa153SDavid du Colombier 
104019aa153SDavid du Colombier 	int	link;
105019aa153SDavid du Colombier 	int	speed;
106019aa153SDavid du Colombier 	int	fd;
107019aa153SDavid du Colombier 	int	rfc;
108019aa153SDavid du Colombier 	int	tfc;
109019aa153SDavid du Colombier };
110019aa153SDavid du Colombier 
111019aa153SDavid du Colombier extern int mii(Mii*, int);
112019aa153SDavid du Colombier extern int miiane(Mii*, int, int, int);
113019aa153SDavid du Colombier extern int miimir(Mii*, int);
114019aa153SDavid du Colombier extern int miimiw(Mii*, int, int);
115019aa153SDavid du Colombier extern int miireset(Mii*);
116019aa153SDavid du Colombier extern int miistatus(Mii*);
117