8
8
9
9
const char * phy_speed_to_str (int speed )
10
10
{
11
+ BUILD_BUG_ON_MSG (__ETHTOOL_LINK_MODE_MASK_NBITS != 67 ,
12
+ "Enum ethtool_link_mode_bit_indices and phylib are out of sync. "
13
+ "If a speed or mode has been added please update phy_speed_to_str "
14
+ "and the PHY settings array.\n" );
15
+
11
16
switch (speed ) {
12
17
case SPEED_10 :
13
18
return "10Mbps" ;
@@ -35,6 +40,8 @@ const char *phy_speed_to_str(int speed)
35
40
return "56Gbps" ;
36
41
case SPEED_100000 :
37
42
return "100Gbps" ;
43
+ case SPEED_200000 :
44
+ return "200Gbps" ;
38
45
case SPEED_UNKNOWN :
39
46
return "Unknown" ;
40
47
default :
@@ -58,222 +65,81 @@ EXPORT_SYMBOL_GPL(phy_duplex_to_str);
58
65
/* A mapping of all SUPPORTED settings to speed/duplex. This table
59
66
* must be grouped by speed and sorted in descending match priority
60
67
* - iow, descending speed. */
68
+
69
+ #define PHY_SETTING (s , d , b ) { .speed = SPEED_ ## s, .duplex = DUPLEX_ ## d, \
70
+ .bit = ETHTOOL_LINK_MODE_ ## b ## _BIT}
71
+
61
72
static const struct phy_setting settings [] = {
73
+ /* 200G */
74
+ PHY_SETTING ( 200000 , FULL , 200000b aseCR4_Full ),
75
+ PHY_SETTING ( 200000 , FULL , 200000b aseKR4_Full ),
76
+ PHY_SETTING ( 200000 , FULL , 200000b aseLR4_ER4_FR4_Full ),
77
+ PHY_SETTING ( 200000 , FULL , 200000b aseDR4_Full ),
78
+ PHY_SETTING ( 200000 , FULL , 200000b aseSR4_Full ),
62
79
/* 100G */
63
- {
64
- .speed = SPEED_100000 ,
65
- .duplex = DUPLEX_FULL ,
66
- .bit = ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT ,
67
- },
68
- {
69
- .speed = SPEED_100000 ,
70
- .duplex = DUPLEX_FULL ,
71
- .bit = ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT ,
72
- },
73
- {
74
- .speed = SPEED_100000 ,
75
- .duplex = DUPLEX_FULL ,
76
- .bit = ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT ,
77
- },
78
- {
79
- .speed = SPEED_100000 ,
80
- .duplex = DUPLEX_FULL ,
81
- .bit = ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT ,
82
- },
80
+ PHY_SETTING ( 100000 , FULL , 100000b aseCR4_Full ),
81
+ PHY_SETTING ( 100000 , FULL , 100000b aseKR4_Full ),
82
+ PHY_SETTING ( 100000 , FULL , 100000b aseLR4_ER4_Full ),
83
+ PHY_SETTING ( 100000 , FULL , 100000b aseSR4_Full ),
84
+ PHY_SETTING ( 100000 , FULL , 100000b aseCR2_Full ),
85
+ PHY_SETTING ( 100000 , FULL , 100000b aseKR2_Full ),
86
+ PHY_SETTING ( 100000 , FULL , 100000b aseLR2_ER2_FR2_Full ),
87
+ PHY_SETTING ( 100000 , FULL , 100000b aseDR2_Full ),
88
+ PHY_SETTING ( 100000 , FULL , 100000b aseSR2_Full ),
83
89
/* 56G */
84
- {
85
- .speed = SPEED_56000 ,
86
- .duplex = DUPLEX_FULL ,
87
- .bit = ETHTOOL_LINK_MODE_56000baseCR4_Full_BIT ,
88
- },
89
- {
90
- .speed = SPEED_56000 ,
91
- .duplex = DUPLEX_FULL ,
92
- .bit = ETHTOOL_LINK_MODE_56000baseKR4_Full_BIT ,
93
- },
94
- {
95
- .speed = SPEED_56000 ,
96
- .duplex = DUPLEX_FULL ,
97
- .bit = ETHTOOL_LINK_MODE_56000baseLR4_Full_BIT ,
98
- },
99
- {
100
- .speed = SPEED_56000 ,
101
- .duplex = DUPLEX_FULL ,
102
- .bit = ETHTOOL_LINK_MODE_56000baseSR4_Full_BIT ,
103
- },
90
+ PHY_SETTING ( 56000 , FULL , 56000b aseCR4_Full ),
91
+ PHY_SETTING ( 56000 , FULL , 56000b aseKR4_Full ),
92
+ PHY_SETTING ( 56000 , FULL , 56000b aseLR4_Full ),
93
+ PHY_SETTING ( 56000 , FULL , 56000b aseSR4_Full ),
104
94
/* 50G */
105
- {
106
- .speed = SPEED_50000 ,
107
- .duplex = DUPLEX_FULL ,
108
- .bit = ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT ,
109
- },
110
- {
111
- .speed = SPEED_50000 ,
112
- .duplex = DUPLEX_FULL ,
113
- .bit = ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT ,
114
- },
115
- {
116
- .speed = SPEED_50000 ,
117
- .duplex = DUPLEX_FULL ,
118
- .bit = ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT ,
119
- },
95
+ PHY_SETTING ( 50000 , FULL , 50000b aseCR2_Full ),
96
+ PHY_SETTING ( 50000 , FULL , 50000b aseKR2_Full ),
97
+ PHY_SETTING ( 50000 , FULL , 50000b aseSR2_Full ),
98
+ PHY_SETTING ( 50000 , FULL , 50000b aseCR_Full ),
99
+ PHY_SETTING ( 50000 , FULL , 50000b aseKR_Full ),
100
+ PHY_SETTING ( 50000 , FULL , 50000b aseLR_ER_FR_Full ),
101
+ PHY_SETTING ( 50000 , FULL , 50000b aseDR_Full ),
102
+ PHY_SETTING ( 50000 , FULL , 50000b aseSR_Full ),
120
103
/* 40G */
121
- {
122
- .speed = SPEED_40000 ,
123
- .duplex = DUPLEX_FULL ,
124
- .bit = ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT ,
125
- },
126
- {
127
- .speed = SPEED_40000 ,
128
- .duplex = DUPLEX_FULL ,
129
- .bit = ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT ,
130
- },
131
- {
132
- .speed = SPEED_40000 ,
133
- .duplex = DUPLEX_FULL ,
134
- .bit = ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT ,
135
- },
136
- {
137
- .speed = SPEED_40000 ,
138
- .duplex = DUPLEX_FULL ,
139
- .bit = ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT ,
140
- },
104
+ PHY_SETTING ( 40000 , FULL , 40000b aseCR4_Full ),
105
+ PHY_SETTING ( 40000 , FULL , 40000b aseKR4_Full ),
106
+ PHY_SETTING ( 40000 , FULL , 40000b aseLR4_Full ),
107
+ PHY_SETTING ( 40000 , FULL , 40000b aseSR4_Full ),
141
108
/* 25G */
142
- {
143
- .speed = SPEED_25000 ,
144
- .duplex = DUPLEX_FULL ,
145
- .bit = ETHTOOL_LINK_MODE_25000baseCR_Full_BIT ,
146
- },
147
- {
148
- .speed = SPEED_25000 ,
149
- .duplex = DUPLEX_FULL ,
150
- .bit = ETHTOOL_LINK_MODE_25000baseKR_Full_BIT ,
151
- },
152
- {
153
- .speed = SPEED_25000 ,
154
- .duplex = DUPLEX_FULL ,
155
- .bit = ETHTOOL_LINK_MODE_25000baseSR_Full_BIT ,
156
- },
157
-
109
+ PHY_SETTING ( 25000 , FULL , 25000b aseCR_Full ),
110
+ PHY_SETTING ( 25000 , FULL , 25000b aseKR_Full ),
111
+ PHY_SETTING ( 25000 , FULL , 25000b aseSR_Full ),
158
112
/* 20G */
159
- {
160
- .speed = SPEED_20000 ,
161
- .duplex = DUPLEX_FULL ,
162
- .bit = ETHTOOL_LINK_MODE_20000baseKR2_Full_BIT ,
163
- },
164
- {
165
- .speed = SPEED_20000 ,
166
- .duplex = DUPLEX_FULL ,
167
- .bit = ETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT ,
168
- },
113
+ PHY_SETTING ( 20000 , FULL , 20000b aseKR2_Full ),
114
+ PHY_SETTING ( 20000 , FULL , 20000b aseMLD2_Full ),
169
115
/* 10G */
170
- {
171
- .speed = SPEED_10000 ,
172
- .duplex = DUPLEX_FULL ,
173
- .bit = ETHTOOL_LINK_MODE_10000baseCR_Full_BIT ,
174
- },
175
- {
176
- .speed = SPEED_10000 ,
177
- .duplex = DUPLEX_FULL ,
178
- .bit = ETHTOOL_LINK_MODE_10000baseER_Full_BIT ,
179
- },
180
- {
181
- .speed = SPEED_10000 ,
182
- .duplex = DUPLEX_FULL ,
183
- .bit = ETHTOOL_LINK_MODE_10000baseKR_Full_BIT ,
184
- },
185
- {
186
- .speed = SPEED_10000 ,
187
- .duplex = DUPLEX_FULL ,
188
- .bit = ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT ,
189
- },
190
- {
191
- .speed = SPEED_10000 ,
192
- .duplex = DUPLEX_FULL ,
193
- .bit = ETHTOOL_LINK_MODE_10000baseLR_Full_BIT ,
194
- },
195
- {
196
- .speed = SPEED_10000 ,
197
- .duplex = DUPLEX_FULL ,
198
- .bit = ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT ,
199
- },
200
- {
201
- .speed = SPEED_10000 ,
202
- .duplex = DUPLEX_FULL ,
203
- .bit = ETHTOOL_LINK_MODE_10000baseR_FEC_BIT ,
204
- },
205
- {
206
- .speed = SPEED_10000 ,
207
- .duplex = DUPLEX_FULL ,
208
- .bit = ETHTOOL_LINK_MODE_10000baseSR_Full_BIT ,
209
- },
210
- {
211
- .speed = SPEED_10000 ,
212
- .duplex = DUPLEX_FULL ,
213
- .bit = ETHTOOL_LINK_MODE_10000baseT_Full_BIT ,
214
- },
116
+ PHY_SETTING ( 10000 , FULL , 10000b aseCR_Full ),
117
+ PHY_SETTING ( 10000 , FULL , 10000b aseER_Full ),
118
+ PHY_SETTING ( 10000 , FULL , 10000b aseKR_Full ),
119
+ PHY_SETTING ( 10000 , FULL , 10000b aseKX4_Full ),
120
+ PHY_SETTING ( 10000 , FULL , 10000b aseLR_Full ),
121
+ PHY_SETTING ( 10000 , FULL , 10000b aseLRM_Full ),
122
+ PHY_SETTING ( 10000 , FULL , 10000b aseR_FEC ),
123
+ PHY_SETTING ( 10000 , FULL , 10000b aseSR_Full ),
124
+ PHY_SETTING ( 10000 , FULL , 10000b aseT_Full ),
215
125
/* 5G */
216
- {
217
- .speed = SPEED_5000 ,
218
- .duplex = DUPLEX_FULL ,
219
- .bit = ETHTOOL_LINK_MODE_5000baseT_Full_BIT ,
220
- },
221
-
126
+ PHY_SETTING ( 5000 , FULL , 5000b aseT_Full ),
222
127
/* 2.5G */
223
- {
224
- .speed = SPEED_2500 ,
225
- .duplex = DUPLEX_FULL ,
226
- .bit = ETHTOOL_LINK_MODE_2500baseT_Full_BIT ,
227
- },
228
- {
229
- .speed = SPEED_2500 ,
230
- .duplex = DUPLEX_FULL ,
231
- .bit = ETHTOOL_LINK_MODE_2500baseX_Full_BIT ,
232
- },
128
+ PHY_SETTING ( 2500 , FULL , 2500b aseT_Full ),
129
+ PHY_SETTING ( 2500 , FULL , 2500b aseX_Full ),
233
130
/* 1G */
234
- {
235
- .speed = SPEED_1000 ,
236
- .duplex = DUPLEX_FULL ,
237
- .bit = ETHTOOL_LINK_MODE_1000baseKX_Full_BIT ,
238
- },
239
- {
240
- .speed = SPEED_1000 ,
241
- .duplex = DUPLEX_FULL ,
242
- .bit = ETHTOOL_LINK_MODE_1000baseT_Full_BIT ,
243
- },
244
- {
245
- .speed = SPEED_1000 ,
246
- .duplex = DUPLEX_HALF ,
247
- .bit = ETHTOOL_LINK_MODE_1000baseT_Half_BIT ,
248
- },
249
- {
250
- .speed = SPEED_1000 ,
251
- .duplex = DUPLEX_FULL ,
252
- .bit = ETHTOOL_LINK_MODE_1000baseX_Full_BIT ,
253
- },
131
+ PHY_SETTING ( 1000 , FULL , 1000b aseKX_Full ),
132
+ PHY_SETTING ( 1000 , FULL , 1000b aseT_Full ),
133
+ PHY_SETTING ( 1000 , HALF , 1000b aseT_Half ),
134
+ PHY_SETTING ( 1000 , FULL , 1000b aseX_Full ),
254
135
/* 100M */
255
- {
256
- .speed = SPEED_100 ,
257
- .duplex = DUPLEX_FULL ,
258
- .bit = ETHTOOL_LINK_MODE_100baseT_Full_BIT ,
259
- },
260
- {
261
- .speed = SPEED_100 ,
262
- .duplex = DUPLEX_HALF ,
263
- .bit = ETHTOOL_LINK_MODE_100baseT_Half_BIT ,
264
- },
136
+ PHY_SETTING ( 100 , FULL , 100b aseT_Full ),
137
+ PHY_SETTING ( 100 , HALF , 100b aseT_Half ),
265
138
/* 10M */
266
- {
267
- .speed = SPEED_10 ,
268
- .duplex = DUPLEX_FULL ,
269
- .bit = ETHTOOL_LINK_MODE_10baseT_Full_BIT ,
270
- },
271
- {
272
- .speed = SPEED_10 ,
273
- .duplex = DUPLEX_HALF ,
274
- .bit = ETHTOOL_LINK_MODE_10baseT_Half_BIT ,
275
- },
139
+ PHY_SETTING ( 10 , FULL , 10b aseT_Full ),
140
+ PHY_SETTING ( 10 , HALF , 10b aseT_Half ),
276
141
};
142
+ #undef PHY_SETTING
277
143
278
144
/**
279
145
* phy_lookup_setting - lookup a PHY setting
0 commit comments