1 /*
2 ibm/mii.c
3
4 Created: Nov 2004 by Philip Homburg <philip@f-mnx.phicoh.com>
5
6 Media Independent (Ethernet) Interface functions
7 */
8
9 #include <minix/drivers.h>
10 #if __minix_vmd
11 #include "config.h"
12 #endif
13
14 #include "mii.h"
15
16 /*===========================================================================*
17 * mii_print_stat_speed *
18 *===========================================================================*/
mii_print_stat_speed(u16_t stat,u16_t extstat)19 void mii_print_stat_speed(u16_t stat, u16_t extstat)
20 {
21 int fs, ft;
22
23 fs= 1;
24 if (stat & MII_STATUS_EXT_STAT)
25 {
26 if (extstat & (MII_ESTAT_1000XFD | MII_ESTAT_1000XHD |
27 MII_ESTAT_1000TFD | MII_ESTAT_1000THD))
28 {
29 printf("1000 Mbps: ");
30 fs= 0;
31 ft= 1;
32 if (extstat & (MII_ESTAT_1000XFD | MII_ESTAT_1000XHD))
33 {
34 ft= 0;
35 printf("X-");
36 switch(extstat &
37 (MII_ESTAT_1000XFD|MII_ESTAT_1000XHD))
38 {
39 case MII_ESTAT_1000XFD: printf("FD"); break;
40 case MII_ESTAT_1000XHD: printf("HD"); break;
41 default: printf("FD/HD"); break;
42 }
43 }
44 if (extstat & (MII_ESTAT_1000TFD | MII_ESTAT_1000THD))
45 {
46 if (!ft)
47 printf(", ");
48 ft= 0;
49 printf("T-");
50 switch(extstat &
51 (MII_ESTAT_1000TFD|MII_ESTAT_1000THD))
52 {
53 case MII_ESTAT_1000TFD: printf("FD"); break;
54 case MII_ESTAT_1000THD: printf("HD"); break;
55 default: printf("FD/HD"); break;
56 }
57 }
58 }
59 }
60 if (stat & (MII_STATUS_100T4 |
61 MII_STATUS_100XFD | MII_STATUS_100XHD |
62 MII_STATUS_100T2FD | MII_STATUS_100T2HD))
63 {
64 if (!fs)
65 printf(", ");
66 fs= 0;
67 printf("100 Mbps: ");
68 ft= 1;
69 if (stat & MII_STATUS_100T4)
70 {
71 printf("T4");
72 ft= 0;
73 }
74 if (stat & (MII_STATUS_100XFD | MII_STATUS_100XHD))
75 {
76 if (!ft)
77 printf(", ");
78 ft= 0;
79 printf("TX-");
80 switch(stat & (MII_STATUS_100XFD|MII_STATUS_100XHD))
81 {
82 case MII_STATUS_100XFD: printf("FD"); break;
83 case MII_STATUS_100XHD: printf("HD"); break;
84 default: printf("FD/HD"); break;
85 }
86 }
87 if (stat & (MII_STATUS_100T2FD | MII_STATUS_100T2HD))
88 {
89 if (!ft)
90 printf(", ");
91 ft= 0;
92 printf("T2-");
93 switch(stat & (MII_STATUS_100T2FD|MII_STATUS_100T2HD))
94 {
95 case MII_STATUS_100T2FD: printf("FD"); break;
96 case MII_STATUS_100T2HD: printf("HD"); break;
97 default: printf("FD/HD"); break;
98 }
99 }
100 }
101 if (stat & (MII_STATUS_10FD | MII_STATUS_10HD))
102 {
103 if (!fs)
104 printf(", ");
105 printf("10 Mbps: ");
106 fs= 0;
107 printf("T-");
108 switch(stat & (MII_STATUS_10FD|MII_STATUS_10HD))
109 {
110 case MII_STATUS_10FD: printf("FD"); break;
111 case MII_STATUS_10HD: printf("HD"); break;
112 default: printf("FD/HD"); break;
113 }
114 }
115 }
116
117 /*===========================================================================*
118 * mii_print_techab *
119 *===========================================================================*/
mii_print_techab(u16_t techab)120 void mii_print_techab(u16_t techab)
121 {
122 int fs, ft;
123
124 if ((techab & MII_ANA_SEL_M) != MII_ANA_SEL_802_3)
125 {
126 printf("strange selector 0x%x, value 0x%x",
127 techab & MII_ANA_SEL_M,
128 (techab & MII_ANA_TAF_M) >> MII_ANA_TAF_S);
129 return;
130 }
131 fs= 1;
132 if (techab & (MII_ANA_100T4 | MII_ANA_100TXFD | MII_ANA_100TXHD))
133 {
134 printf("100 Mbps: ");
135 fs= 0;
136 ft= 1;
137 if (techab & MII_ANA_100T4)
138 {
139 printf("T4");
140 ft= 0;
141 }
142 if (techab & (MII_ANA_100TXFD | MII_ANA_100TXHD))
143 {
144 if (!ft)
145 printf(", ");
146 ft= 0;
147 printf("TX-");
148 switch(techab & (MII_ANA_100TXFD|MII_ANA_100TXHD))
149 {
150 case MII_ANA_100TXFD: printf("FD"); break;
151 case MII_ANA_100TXHD: printf("HD"); break;
152 default: printf("FD/HD"); break;
153 }
154 }
155 }
156 if (techab & (MII_ANA_10TFD | MII_ANA_10THD))
157 {
158 if (!fs)
159 printf(", ");
160 printf("10 Mbps: ");
161 fs= 0;
162 printf("T-");
163 switch(techab & (MII_ANA_10TFD|MII_ANA_10THD))
164 {
165 case MII_ANA_10TFD: printf("FD"); break;
166 case MII_ANA_10THD: printf("HD"); break;
167 default: printf("FD/HD"); break;
168 }
169 }
170 if (techab & MII_ANA_PAUSE_SYM)
171 {
172 if (!fs)
173 printf(", ");
174 fs= 0;
175 printf("pause(SYM)");
176 }
177 if (techab & MII_ANA_PAUSE_ASYM)
178 {
179 if (!fs)
180 printf(", ");
181 fs= 0;
182 printf("pause(ASYM)");
183 }
184 if (techab & MII_ANA_TAF_RES)
185 {
186 if (!fs)
187 printf(", ");
188 fs= 0;
189 printf("0x%x", (techab & MII_ANA_TAF_RES) >> MII_ANA_TAF_S);
190 }
191 }
192
193 /*
194 * $PchId: mii.c,v 1.2 2005/01/31 22:17:26 philip Exp $
195 */
196