176
176
* @npage_adv: Modes currently advertised on next pages
177
177
* @npage_lpa: Modes advertised by link partner on next pages
179
* The @ecmd parameter is expected to have been cleared before calling
180
* mdio45_ethtool_gset_npage().
179
182
* Since the CSRs for auto-negotiation using next pages are not fully
180
183
* standardised, this function does not attempt to decode them. The
181
184
* caller must pass them in.
287
291
if (modes & (ADVERTISED_10000baseT_Full |
288
292
ADVERTISED_10000baseKX4_Full |
289
293
ADVERTISED_10000baseKR_Full)) {
290
ecmd->speed = SPEED_10000;
291
295
ecmd->duplex = DUPLEX_FULL;
292
296
} else if (modes & (ADVERTISED_1000baseT_Full |
293
297
ADVERTISED_1000baseT_Half |
294
298
ADVERTISED_1000baseKX_Full)) {
295
ecmd->speed = SPEED_1000;
296
300
ecmd->duplex = !(modes & ADVERTISED_1000baseT_Half);
297
301
} else if (modes & (ADVERTISED_100baseT_Full |
298
302
ADVERTISED_100baseT_Half)) {
299
ecmd->speed = SPEED_100;
300
304
ecmd->duplex = !!(modes & ADVERTISED_100baseT_Full);
302
ecmd->speed = SPEED_10;
303
307
ecmd->duplex = !!(modes & ADVERTISED_10baseT_Full);
306
310
/* Report forced settings */
307
311
reg = mdio->mdio_read(mdio->dev, mdio->prtad, MDIO_MMD_PMAPMD,
309
ecmd->speed = (((reg & MDIO_PMA_CTRL1_SPEED1000) ? 100 : 1) *
310
((reg & MDIO_PMA_CTRL1_SPEED100) ? 100 : 10));
313
speed = (((reg & MDIO_PMA_CTRL1_SPEED1000) ? 100 : 1)
314
* ((reg & MDIO_PMA_CTRL1_SPEED100) ? 100 : 10));
311
315
ecmd->duplex = (reg & MDIO_CTRL1_FULLDPLX ||
312
ecmd->speed == SPEED_10000);
316
speed == SPEED_10000);
319
ethtool_cmd_speed_set(ecmd, speed);
315
321
/* 10GBASE-T MDI/MDI-X */
316
if (ecmd->port == PORT_TP && ecmd->speed == SPEED_10000) {
322
if (ecmd->port == PORT_TP
323
&& (ethtool_cmd_speed(ecmd) == SPEED_10000)) {
317
324
switch (mdio->mdio_read(mdio->dev, mdio->prtad, MDIO_MMD_PMAPMD,
318
325
MDIO_PMA_10GBT_SWAPPOL)) {
319
326
case MDIO_PMA_10GBT_SWAPPOL_ABNX | MDIO_PMA_10GBT_SWAPPOL_CDNX: