Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
typedef struct Mii Mii;
2
typedef struct MiiPhy MiiPhy;
3
 
4
enum {					/* registers */
5
	Bmcr		= 0x00,		/* Basic Mode Control */
6
	Bmsr		= 0x01,		/* Basic Mode Status */
7
	Phyidr1		= 0x02,		/* PHY Identifier #1 */
8
	Phyidr2		= 0x03,		/* PHY Identifier #2 */
9
	Anar		= 0x04,		/* Auto-Negotiation Advertisement */
10
	Anlpar		= 0x05,		/* AN Link Partner Ability */
11
	Aner		= 0x06,		/* AN Expansion */
12
	Annptr		= 0x07,		/* AN Next Page TX */
13
	Annprr		= 0x08,		/* AN Next Page RX */
14
	Mscr		= 0x09,		/* MASTER-SLAVE Control */
15
	Mssr		= 0x0A,		/* MASTER-SLAVE Status */
16
	Esr		= 0x0F,		/* Extended Status */
17
 
18
	NMiiPhyr	= 32,
19
	NMiiPhy		= 32,
20
};
21
 
22
enum {					/* Bmcr */
23
	BmcrSs1		= 0x0040,	/* Speed Select[1] */
24
	BmcrCte		= 0x0080,	/* Collision Test Enable */
25
	BmcrDm		= 0x0100,	/* Duplex Mode */
26
	BmcrRan		= 0x0200,	/* Restart Auto-Negotiation */
27
	BmcrI		= 0x0400,	/* Isolate */
28
	BmcrPd		= 0x0800,	/* Power Down */
29
	BmcrAne		= 0x1000,	/* Auto-Negotiation Enable */
30
	BmcrSs0		= 0x2000,	/* Speed Select[0] */
31
	BmcrLe		= 0x4000,	/* Loopback Enable */
32
	BmcrR		= 0x8000,	/* Reset */
33
};
34
 
35
enum {					/* Bmsr */
36
	BmsrEc		= 0x0001,	/* Extended Capability */
37
	BmsrJd		= 0x0002,	/* Jabber Detect */
38
	BmsrLs		= 0x0004,	/* Link Status */
39
	BmsrAna		= 0x0008,	/* Auto-Negotiation Ability */
40
	BmsrRf		= 0x0010,	/* Remote Fault */
41
	BmsrAnc		= 0x0020,	/* Auto-Negotiation Complete */
42
	BmsrPs		= 0x0040,	/* Preamble Suppression Capable */
43
	BmsrEs		= 0x0100,	/* Extended Status */
44
	Bmsr100T2HD	= 0x0200,	/* 100BASE-T2 HD Capable */
45
	Bmsr100T2FD	= 0x0400,	/* 100BASE-T2 FD Capable */
46
	Bmsr10THD	= 0x0800,	/* 10BASE-T HD Capable */
47
	Bmsr10TFD	= 0x1000,	/* 10BASE-T FD Capable */
48
	Bmsr100TXHD	= 0x2000,	/* 100BASE-TX HD Capable */
49
	Bmsr100TXFD	= 0x4000,	/* 100BASE-TX FD Capable */
50
	Bmsr100T4	= 0x8000,	/* 100BASE-T4 Capable */
51
};
52
 
53
enum {					/* Anar/Anlpar */
54
	Ana10HD		= 0x0020,	/* Advertise 10BASE-T */
55
	Ana10FD		= 0x0040,	/* Advertise 10BASE-T FD */
56
	AnaTXHD		= 0x0080,	/* Advertise 100BASE-TX */
57
	AnaTXFD		= 0x0100,	/* Advertise 100BASE-TX FD */
58
	AnaT4		= 0x0200,	/* Advertise 100BASE-T4 */
59
	AnaP		= 0x0400,	/* Pause */
60
	AnaAP		= 0x0800,	/* Asymmetrical Pause */
61
	AnaRf		= 0x2000,	/* Remote Fault */
62
	AnaAck		= 0x4000,	/* Acknowledge */
63
	AnaNp		= 0x8000,	/* Next Page Indication */
64
};
65
 
66
enum {					/* Mscr */
67
	Mscr1000THD	= 0x0100,	/* Advertise 1000BASE-T HD */
68
	Mscr1000TFD	= 0x0200,	/* Advertise 1000BASE-T FD */
69
};
70
 
71
enum {					/* Mssr */
72
	Mssr1000THD	= 0x0400,	/* Link Partner 1000BASE-T HD able */
73
	Mssr1000TFD	= 0x0800,	/* Link Partner 1000BASE-T FD able */
74
};
75
 
76
enum {					/* Esr */
77
	Esr1000THD	= 0x1000,	/* 1000BASE-T HD Capable */
78
	Esr1000TFD	= 0x2000,	/* 1000BASE-T FD Capable */
79
	Esr1000XHD	= 0x4000,	/* 1000BASE-X HD Capable */
80
	Esr1000XFD	= 0x8000,	/* 1000BASE-X FD Capable */
81
};
82
 
83
typedef struct Mii {
84
	Lock;
85
	int	nphy;
86
	int	mask;
87
	MiiPhy*	phy[NMiiPhy];
88
	MiiPhy*	curphy;
89
 
90
	void*	ctlr;
91
	int	(*mir)(Mii*, int, int);
92
	int	(*miw)(Mii*, int, int, int);
93
} Mii;
94
 
95
typedef struct MiiPhy {
96
	Mii*	mii;
97
	int	oui;
98
	int	phyno;
99
 
100
	int	anar;
101
	int	fc;
102
	int	mscr;
103
 
104
	int	link;
105
	int	speed;
106
	int	fd;
107
	int	rfc;
108
	int	tfc;
109
};
110
 
111
extern int mii(Mii*, int);
112
extern int miiane(Mii*, int, int, int);
113
extern int miimir(Mii*, int);
114
extern int miimiw(Mii*, int, int);
115
extern int miireset(Mii*);
116
extern int miistatus(Mii*);