Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ethtool: Use full 32 bit speed range in ethtool's set_settings

This makes sure the ethtool's set_settings() callback of network
drivers don't ignore the 16 most significant bits when ethtool calls
their set_settings().

All drivers compiled with make allyesconfig on x86_64 have been
updated.

Signed-off-by: David Decotigny <decot@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

David Decotigny and committed by
David S. Miller
25db0338 8ae6daca

+163 -131
+1 -1
drivers/net/acenic.c
··· 2718 2718 link |= LNK_TX_FLOW_CTL_Y; 2719 2719 if (ecmd->autoneg == AUTONEG_ENABLE) 2720 2720 link |= LNK_NEGOTIATE; 2721 - if (ecmd->speed != speed) { 2721 + if (ethtool_cmd_speed(ecmd) != speed) { 2722 2722 link &= ~(LNK_1000MB | LNK_100MB | LNK_10MB); 2723 2723 switch (speed) { 2724 2724 case SPEED_1000:
+3 -2
drivers/net/atl1c/atl1c_ethtool.c
··· 77 77 if (ecmd->autoneg == AUTONEG_ENABLE) { 78 78 autoneg_advertised = ADVERTISED_Autoneg; 79 79 } else { 80 - if (ecmd->speed == SPEED_1000) { 80 + u32 speed = ethtool_cmd_speed(ecmd); 81 + if (speed == SPEED_1000) { 81 82 if (ecmd->duplex != DUPLEX_FULL) { 82 83 if (netif_msg_link(adapter)) 83 84 dev_warn(&adapter->pdev->dev, ··· 87 86 return -EINVAL; 88 87 } 89 88 autoneg_advertised = ADVERTISED_1000baseT_Full; 90 - } else if (ecmd->speed == SPEED_100) { 89 + } else if (speed == SPEED_100) { 91 90 if (ecmd->duplex == DUPLEX_FULL) 92 91 autoneg_advertised = ADVERTISED_100baseT_Full; 93 92 else
+3 -2
drivers/net/atlx/atl1.c
··· 3268 3268 if (ecmd->autoneg == AUTONEG_ENABLE) 3269 3269 hw->media_type = MEDIA_TYPE_AUTO_SENSOR; 3270 3270 else { 3271 - if (ecmd->speed == SPEED_1000) { 3271 + u32 speed = ethtool_cmd_speed(ecmd); 3272 + if (speed == SPEED_1000) { 3272 3273 if (ecmd->duplex != DUPLEX_FULL) { 3273 3274 if (netif_msg_link(adapter)) 3274 3275 dev_warn(&adapter->pdev->dev, ··· 3278 3277 goto exit_sset; 3279 3278 } 3280 3279 hw->media_type = MEDIA_TYPE_1000M_FULL; 3281 - } else if (ecmd->speed == SPEED_100) { 3280 + } else if (speed == SPEED_100) { 3282 3281 if (ecmd->duplex == DUPLEX_FULL) 3283 3282 hw->media_type = MEDIA_TYPE_100M_FULL; 3284 3283 else
+4 -3
drivers/net/b44.c
··· 1831 1831 static int b44_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) 1832 1832 { 1833 1833 struct b44 *bp = netdev_priv(dev); 1834 + u32 speed = ethtool_cmd_speed(cmd); 1834 1835 1835 1836 /* We do not support gigabit. */ 1836 1837 if (cmd->autoneg == AUTONEG_ENABLE) { ··· 1839 1838 (ADVERTISED_1000baseT_Half | 1840 1839 ADVERTISED_1000baseT_Full)) 1841 1840 return -EINVAL; 1842 - } else if ((cmd->speed != SPEED_100 && 1843 - cmd->speed != SPEED_10) || 1841 + } else if ((speed != SPEED_100 && 1842 + speed != SPEED_10) || 1844 1843 (cmd->duplex != DUPLEX_HALF && 1845 1844 cmd->duplex != DUPLEX_FULL)) { 1846 1845 return -EINVAL; ··· 1874 1873 } else { 1875 1874 bp->flags |= B44_FLAG_FORCE_LINK; 1876 1875 bp->flags &= ~(B44_FLAG_100_BASE_T | B44_FLAG_FULL_DUPLEX); 1877 - if (cmd->speed == SPEED_100) 1876 + if (speed == SPEED_100) 1878 1877 bp->flags |= B44_FLAG_100_BASE_T; 1879 1878 if (cmd->duplex == DUPLEX_FULL) 1880 1879 bp->flags |= B44_FLAG_FULL_DUPLEX;
+2 -1
drivers/net/bna/bnad_ethtool.c
··· 256 256 /* 10G full duplex setting supported only */ 257 257 if (cmd->autoneg == AUTONEG_ENABLE) 258 258 return -EOPNOTSUPP; else { 259 - if ((cmd->speed == SPEED_10000) && (cmd->duplex == DUPLEX_FULL)) 259 + if ((ethtool_cmd_speed(cmd) == SPEED_10000) 260 + && (cmd->duplex == DUPLEX_FULL)) 260 261 return 0; 261 262 } 262 263
+6 -6
drivers/net/bnx2.c
··· 6758 6758 advertising |= ADVERTISED_Autoneg; 6759 6759 } 6760 6760 else { 6761 + u32 speed = ethtool_cmd_speed(cmd); 6761 6762 if (cmd->port == PORT_FIBRE) { 6762 - if ((cmd->speed != SPEED_1000 && 6763 - cmd->speed != SPEED_2500) || 6763 + if ((speed != SPEED_1000 && 6764 + speed != SPEED_2500) || 6764 6765 (cmd->duplex != DUPLEX_FULL)) 6765 6766 goto err_out_unlock; 6766 6767 6767 - if (cmd->speed == SPEED_2500 && 6768 + if (speed == SPEED_2500 && 6768 6769 !(bp->phy_flags & BNX2_PHY_FLAG_2_5G_CAPABLE)) 6769 6770 goto err_out_unlock; 6770 - } 6771 - else if (cmd->speed == SPEED_1000 || cmd->speed == SPEED_2500) 6771 + } else if (speed == SPEED_1000 || speed == SPEED_2500) 6772 6772 goto err_out_unlock; 6773 6773 6774 6774 autoneg &= ~AUTONEG_SPEED; 6775 - req_line_speed = cmd->speed; 6775 + req_line_speed = speed; 6776 6776 req_duplex = cmd->duplex; 6777 6777 advertising = 0; 6778 6778 }
+7 -5
drivers/net/cassini.c
··· 709 709 if (ep->autoneg == AUTONEG_ENABLE) 710 710 cp->link_cntl = BMCR_ANENABLE; 711 711 else { 712 + u32 speed = ethtool_cmd_speed(ep); 712 713 cp->link_cntl = 0; 713 - if (ep->speed == SPEED_100) 714 + if (speed == SPEED_100) 714 715 cp->link_cntl |= BMCR_SPEED100; 715 - else if (ep->speed == SPEED_1000) 716 + else if (speed == SPEED_1000) 716 717 cp->link_cntl |= CAS_BMCR_SPEED1000; 717 718 if (ep->duplex == DUPLEX_FULL) 718 719 cp->link_cntl |= BMCR_FULLDPLX; ··· 4654 4653 { 4655 4654 struct cas *cp = netdev_priv(dev); 4656 4655 unsigned long flags; 4656 + u32 speed = ethtool_cmd_speed(cmd); 4657 4657 4658 4658 /* Verify the settings we care about. */ 4659 4659 if (cmd->autoneg != AUTONEG_ENABLE && ··· 4662 4660 return -EINVAL; 4663 4661 4664 4662 if (cmd->autoneg == AUTONEG_DISABLE && 4665 - ((cmd->speed != SPEED_1000 && 4666 - cmd->speed != SPEED_100 && 4667 - cmd->speed != SPEED_10) || 4663 + ((speed != SPEED_1000 && 4664 + speed != SPEED_100 && 4665 + speed != SPEED_10) || 4668 4666 (cmd->duplex != DUPLEX_HALF && 4669 4667 cmd->duplex != DUPLEX_FULL))) 4670 4668 return -EINVAL;
+4 -3
drivers/net/chelsio/cxgb2.c
··· 638 638 return -EOPNOTSUPP; /* can't change speed/duplex */ 639 639 640 640 if (cmd->autoneg == AUTONEG_DISABLE) { 641 - int cap = speed_duplex_to_caps(cmd->speed, cmd->duplex); 641 + u32 speed = ethtool_cmd_speed(cmd); 642 + int cap = speed_duplex_to_caps(speed, cmd->duplex); 642 643 643 - if (!(lc->supported & cap) || cmd->speed == SPEED_1000) 644 + if (!(lc->supported & cap) || (speed == SPEED_1000)) 644 645 return -EINVAL; 645 - lc->requested_speed = cmd->speed; 646 + lc->requested_speed = speed; 646 647 lc->requested_duplex = cmd->duplex; 647 648 lc->advertising = 0; 648 649 } else {
+6 -4
drivers/net/cxgb3/cxgb3_main.c
··· 1821 1821 * being requested. 1822 1822 */ 1823 1823 if (cmd->autoneg == AUTONEG_DISABLE) { 1824 - int cap = speed_duplex_to_caps(cmd->speed, cmd->duplex); 1824 + u32 speed = ethtool_cmd_speed(cmd); 1825 + int cap = speed_duplex_to_caps(speed, cmd->duplex); 1825 1826 if (lc->supported & cap) 1826 1827 return 0; 1827 1828 } ··· 1830 1829 } 1831 1830 1832 1831 if (cmd->autoneg == AUTONEG_DISABLE) { 1833 - int cap = speed_duplex_to_caps(cmd->speed, cmd->duplex); 1832 + u32 speed = ethtool_cmd_speed(cmd); 1833 + int cap = speed_duplex_to_caps(speed, cmd->duplex); 1834 1834 1835 - if (!(lc->supported & cap) || cmd->speed == SPEED_1000) 1835 + if (!(lc->supported & cap) || (speed == SPEED_1000)) 1836 1836 return -EINVAL; 1837 - lc->requested_speed = cmd->speed; 1837 + lc->requested_speed = speed; 1838 1838 lc->requested_duplex = cmd->duplex; 1839 1839 lc->advertising = 0; 1840 1840 } else {
+6 -5
drivers/net/cxgb4/cxgb4_main.c
··· 1460 1460 unsigned int cap; 1461 1461 struct port_info *p = netdev_priv(dev); 1462 1462 struct link_config *lc = &p->link_cfg; 1463 + u32 speed = ethtool_cmd_speed(cmd); 1463 1464 1464 1465 if (cmd->duplex != DUPLEX_FULL) /* only full-duplex supported */ 1465 1466 return -EINVAL; ··· 1471 1470 * being requested. 1472 1471 */ 1473 1472 if (cmd->autoneg == AUTONEG_DISABLE && 1474 - (lc->supported & speed_to_caps(cmd->speed))) 1475 - return 0; 1473 + (lc->supported & speed_to_caps(speed))) 1474 + return 0; 1476 1475 return -EINVAL; 1477 1476 } 1478 1477 1479 1478 if (cmd->autoneg == AUTONEG_DISABLE) { 1480 - cap = speed_to_caps(cmd->speed); 1479 + cap = speed_to_caps(speed); 1481 1480 1482 - if (!(lc->supported & cap) || cmd->speed == SPEED_1000 || 1483 - cmd->speed == SPEED_10000) 1481 + if (!(lc->supported & cap) || (speed == SPEED_1000) || 1482 + (speed == SPEED_10000)) 1484 1483 return -EINVAL; 1485 1484 lc->requested_speed = cap; 1486 1485 lc->advertising = 0;
+7 -18
drivers/net/dl2k.c
··· 1219 1219 } else { 1220 1220 np->an_enable = 0; 1221 1221 if (np->speed == 1000) { 1222 - cmd->speed = SPEED_100; 1222 + ethtool_cmd_speed_set(cmd, SPEED_100); 1223 1223 cmd->duplex = DUPLEX_FULL; 1224 1224 printk("Warning!! Can't disable Auto negotiation in 1000Mbps, change to Manual 100Mbps, Full duplex.\n"); 1225 1225 } 1226 - switch(cmd->speed + cmd->duplex) { 1227 - 1228 - case SPEED_10 + DUPLEX_HALF: 1226 + switch (ethtool_cmd_speed(cmd)) { 1227 + case SPEED_10: 1229 1228 np->speed = 10; 1230 - np->full_duplex = 0; 1229 + np->full_duplex = (cmd->duplex == DUPLEX_FULL); 1231 1230 break; 1232 - 1233 - case SPEED_10 + DUPLEX_FULL: 1234 - np->speed = 10; 1235 - np->full_duplex = 1; 1236 - break; 1237 - case SPEED_100 + DUPLEX_HALF: 1231 + case SPEED_100: 1238 1232 np->speed = 100; 1239 - np->full_duplex = 0; 1233 + np->full_duplex = (cmd->duplex == DUPLEX_FULL); 1240 1234 break; 1241 - case SPEED_100 + DUPLEX_FULL: 1242 - np->speed = 100; 1243 - np->full_duplex = 1; 1244 - break; 1245 - case SPEED_1000 + DUPLEX_HALF:/* not supported */ 1246 - case SPEED_1000 + DUPLEX_FULL:/* not supported */ 1235 + case SPEED_1000: /* not supported */ 1247 1236 default: 1248 1237 return -EINVAL; 1249 1238 }
+5 -3
drivers/net/e100.c
··· 1669 1669 { 1670 1670 struct nic *nic = (struct nic *)data; 1671 1671 struct ethtool_cmd cmd = { .cmd = ETHTOOL_GSET }; 1672 + u32 speed; 1672 1673 1673 1674 netif_printk(nic, timer, KERN_DEBUG, nic->netdev, 1674 1675 "right now = %ld\n", jiffies); ··· 1677 1676 /* mii library handles link maintenance tasks */ 1678 1677 1679 1678 mii_ethtool_gset(&nic->mii, &cmd); 1679 + speed = ethtool_cmd_speed(&cmd); 1680 1680 1681 1681 if (mii_link_ok(&nic->mii) && !netif_carrier_ok(nic->netdev)) { 1682 1682 netdev_info(nic->netdev, "NIC Link is Up %u Mbps %s Duplex\n", 1683 - cmd.speed == SPEED_100 ? 100 : 10, 1683 + speed == SPEED_100 ? 100 : 10, 1684 1684 cmd.duplex == DUPLEX_FULL ? "Full" : "Half"); 1685 1685 } else if (!mii_link_ok(&nic->mii) && netif_carrier_ok(nic->netdev)) { 1686 1686 netdev_info(nic->netdev, "NIC Link is Down\n"); ··· 1700 1698 spin_unlock_irq(&nic->cmd_lock); 1701 1699 1702 1700 e100_update_stats(nic); 1703 - e100_adjust_adaptive_ifs(nic, cmd.speed, cmd.duplex); 1701 + e100_adjust_adaptive_ifs(nic, speed, cmd.duplex); 1704 1702 1705 1703 if (nic->mac <= mac_82557_D100_C) 1706 1704 /* Issue a multicast command to workaround a 557 lock up */ 1707 1705 e100_set_multicast_list(nic->netdev); 1708 1706 1709 - if (nic->flags & ich && cmd.speed==SPEED_10 && cmd.duplex==DUPLEX_HALF) 1707 + if (nic->flags & ich && speed == SPEED_10 && cmd.duplex == DUPLEX_HALF) 1710 1708 /* Need SW workaround for ICH[x] 10Mbps/half duplex Tx hang. */ 1711 1709 nic->flags |= ich_10h_workaround; 1712 1710 else
+4 -2
drivers/net/e1000/e1000_ethtool.c
··· 197 197 ADVERTISED_TP | 198 198 ADVERTISED_Autoneg; 199 199 ecmd->advertising = hw->autoneg_advertised; 200 - } else 201 - if (e1000_set_spd_dplx(adapter, ecmd->speed + ecmd->duplex)) { 200 + } else { 201 + u32 speed = ethtool_cmd_speed(ecmd); 202 + if (e1000_set_spd_dplx(adapter, speed + ecmd->duplex)) { 202 203 clear_bit(__E1000_RESETTING, &adapter->flags); 203 204 return -EINVAL; 204 205 } 206 + } 205 207 206 208 /* reset the link */ 207 209
+2 -1
drivers/net/e1000e/ethtool.c
··· 269 269 if (adapter->fc_autoneg) 270 270 hw->fc.requested_mode = e1000_fc_default; 271 271 } else { 272 - if (e1000_set_spd_dplx(adapter, ecmd->speed + ecmd->duplex)) { 272 + u32 speed = ethtool_cmd_speed(ecmd); 273 + if (e1000_set_spd_dplx(adapter, speed + ecmd->duplex)) { 273 274 clear_bit(__E1000_RESETTING, &adapter->state); 274 275 return -EINVAL; 275 276 }
+2 -1
drivers/net/enc28j60.c
··· 1499 1499 static int 1500 1500 enc28j60_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) 1501 1501 { 1502 - return enc28j60_setlink(dev, cmd->autoneg, cmd->speed, cmd->duplex); 1502 + return enc28j60_setlink(dev, cmd->autoneg, 1503 + ethtool_cmd_speed(cmd), cmd->duplex); 1503 1504 } 1504 1505 1505 1506 static u32 enc28j60_get_msglevel(struct net_device *dev)
+6 -5
drivers/net/forcedeth.c
··· 4029 4029 static int nv_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd) 4030 4030 { 4031 4031 struct fe_priv *np = netdev_priv(dev); 4032 + u32 speed = ethtool_cmd_speed(ecmd); 4032 4033 4033 4034 if (ecmd->port != PORT_MII) 4034 4035 return -EINVAL; ··· 4055 4054 /* Note: autonegotiation disable, speed 1000 intentionally 4056 4055 * forbidden - no one should need that. */ 4057 4056 4058 - if (ecmd->speed != SPEED_10 && ecmd->speed != SPEED_100) 4057 + if (speed != SPEED_10 && speed != SPEED_100) 4059 4058 return -EINVAL; 4060 4059 if (ecmd->duplex != DUPLEX_HALF && ecmd->duplex != DUPLEX_FULL) 4061 4060 return -EINVAL; ··· 4139 4138 4140 4139 adv = mii_rw(dev, np->phyaddr, MII_ADVERTISE, MII_READ); 4141 4140 adv &= ~(ADVERTISE_ALL | ADVERTISE_100BASE4 | ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM); 4142 - if (ecmd->speed == SPEED_10 && ecmd->duplex == DUPLEX_HALF) 4141 + if (speed == SPEED_10 && ecmd->duplex == DUPLEX_HALF) 4143 4142 adv |= ADVERTISE_10HALF; 4144 - if (ecmd->speed == SPEED_10 && ecmd->duplex == DUPLEX_FULL) 4143 + if (speed == SPEED_10 && ecmd->duplex == DUPLEX_FULL) 4145 4144 adv |= ADVERTISE_10FULL; 4146 - if (ecmd->speed == SPEED_100 && ecmd->duplex == DUPLEX_HALF) 4145 + if (speed == SPEED_100 && ecmd->duplex == DUPLEX_HALF) 4147 4146 adv |= ADVERTISE_100HALF; 4148 - if (ecmd->speed == SPEED_100 && ecmd->duplex == DUPLEX_FULL) 4147 + if (speed == SPEED_100 && ecmd->duplex == DUPLEX_FULL) 4149 4148 adv |= ADVERTISE_100FULL; 4150 4149 np->pause_flags &= ~(NV_PAUSEFRAME_AUTONEG|NV_PAUSEFRAME_RX_ENABLE|NV_PAUSEFRAME_TX_ENABLE); 4151 4150 if (np->pause_flags & NV_PAUSEFRAME_RX_REQ) {/* for rx we set both advertisements but disable tx pause */
+2 -1
drivers/net/igb/igb_ethtool.c
··· 223 223 if (adapter->fc_autoneg) 224 224 hw->fc.requested_mode = e1000_fc_default; 225 225 } else { 226 - if (igb_set_spd_dplx(adapter, ecmd->speed + ecmd->duplex)) { 226 + u32 speed = ethtool_cmd_speed(ecmd); 227 + if (igb_set_spd_dplx(adapter, speed + ecmd->duplex)) { 227 228 clear_bit(__IGB_RESETTING, &adapter->state); 228 229 return -EINVAL; 229 230 }
+2 -1
drivers/net/ixgb/ixgb_ethtool.c
··· 129 129 ixgb_set_settings(struct net_device *netdev, struct ethtool_cmd *ecmd) 130 130 { 131 131 struct ixgb_adapter *adapter = netdev_priv(netdev); 132 + u32 speed = ethtool_cmd_speed(ecmd); 132 133 133 134 if (ecmd->autoneg == AUTONEG_ENABLE || 134 - ecmd->speed + ecmd->duplex != SPEED_10000 + DUPLEX_FULL) 135 + (speed + ecmd->duplex != SPEED_10000 + DUPLEX_FULL)) 135 136 return -EINVAL; 136 137 137 138 if (netif_running(adapter->netdev)) {
+2 -1
drivers/net/ixgbe/ixgbe_ethtool.c
··· 346 346 } 347 347 } else { 348 348 /* in this case we currently only support 10Gb/FULL */ 349 + u32 speed = ethtool_cmd_speed(ecmd); 349 350 if ((ecmd->autoneg == AUTONEG_ENABLE) || 350 351 (ecmd->advertising != ADVERTISED_10000baseT_Full) || 351 - (ecmd->speed + ecmd->duplex != SPEED_10000 + DUPLEX_FULL)) 352 + (speed + ecmd->duplex != SPEED_10000 + DUPLEX_FULL)) 352 353 return -EINVAL; 353 354 } 354 355
+2 -1
drivers/net/jme.c
··· 2555 2555 struct jme_adapter *jme = netdev_priv(netdev); 2556 2556 int rc, fdc = 0; 2557 2557 2558 - if (ecmd->speed == SPEED_1000 && ecmd->autoneg != AUTONEG_ENABLE) 2558 + if (ethtool_cmd_speed(ecmd) == SPEED_1000 2559 + && ecmd->autoneg != AUTONEG_ENABLE) 2559 2560 return -EINVAL; 2560 2561 2561 2562 /*
+5 -4
drivers/net/ksz884x.c
··· 5998 5998 struct dev_priv *priv = netdev_priv(dev); 5999 5999 struct dev_info *hw_priv = priv->adapter; 6000 6000 struct ksz_port *port = &priv->port; 6001 + u32 speed = ethtool_cmd_speed(cmd); 6001 6002 int rc; 6002 6003 6003 6004 /* ··· 6007 6006 */ 6008 6007 if (cmd->autoneg && priv->advertising == cmd->advertising) { 6009 6008 cmd->advertising |= ADVERTISED_ALL; 6010 - if (10 == cmd->speed) 6009 + if (10 == speed) 6011 6010 cmd->advertising &= 6012 6011 ~(ADVERTISED_100baseT_Full | 6013 6012 ADVERTISED_100baseT_Half); 6014 - else if (100 == cmd->speed) 6013 + else if (100 == speed) 6015 6014 cmd->advertising &= 6016 6015 ~(ADVERTISED_10baseT_Full | 6017 6016 ADVERTISED_10baseT_Half); ··· 6033 6032 port->force_link = 0; 6034 6033 } else { 6035 6034 port->duplex = cmd->duplex + 1; 6036 - if (cmd->speed != 1000) 6037 - port->speed = cmd->speed; 6035 + if (1000 != speed) 6036 + port->speed = speed; 6038 6037 if (cmd->autoneg) 6039 6038 port->force_link = 0; 6040 6039 else
+7 -6
drivers/net/mii.c
··· 157 157 int mii_ethtool_sset(struct mii_if_info *mii, struct ethtool_cmd *ecmd) 158 158 { 159 159 struct net_device *dev = mii->dev; 160 + u32 speed = ethtool_cmd_speed(ecmd); 160 161 161 - if (ecmd->speed != SPEED_10 && 162 - ecmd->speed != SPEED_100 && 163 - ecmd->speed != SPEED_1000) 162 + if (speed != SPEED_10 && 163 + speed != SPEED_100 && 164 + speed != SPEED_1000) 164 165 return -EINVAL; 165 166 if (ecmd->duplex != DUPLEX_HALF && ecmd->duplex != DUPLEX_FULL) 166 167 return -EINVAL; ··· 173 172 return -EINVAL; 174 173 if (ecmd->autoneg != AUTONEG_DISABLE && ecmd->autoneg != AUTONEG_ENABLE) 175 174 return -EINVAL; 176 - if ((ecmd->speed == SPEED_1000) && (!mii->supports_gmii)) 175 + if ((speed == SPEED_1000) && (!mii->supports_gmii)) 177 176 return -EINVAL; 178 177 179 178 /* ignore supported, maxtxpkt, maxrxpkt */ ··· 231 230 bmcr = mii->mdio_read(dev, mii->phy_id, MII_BMCR); 232 231 tmp = bmcr & ~(BMCR_ANENABLE | BMCR_SPEED100 | 233 232 BMCR_SPEED1000 | BMCR_FULLDPLX); 234 - if (ecmd->speed == SPEED_1000) 233 + if (speed == SPEED_1000) 235 234 tmp |= BMCR_SPEED1000; 236 - else if (ecmd->speed == SPEED_100) 235 + else if (speed == SPEED_100) 237 236 tmp |= BMCR_SPEED100; 238 237 if (ecmd->duplex == DUPLEX_FULL) { 239 238 tmp |= BMCR_FULLDPLX;
+2 -1
drivers/net/mlx4/en_ethtool.c
··· 292 292 static int mlx4_en_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) 293 293 { 294 294 if ((cmd->autoneg == AUTONEG_ENABLE) || 295 - (cmd->speed != SPEED_10000) || (cmd->duplex != DUPLEX_FULL)) 295 + (ethtool_cmd_speed(cmd) != SPEED_10000) || 296 + (cmd->duplex != DUPLEX_FULL)) 296 297 return -EINVAL; 297 298 298 299 /* Nothing to change */
+3 -2
drivers/net/natsemi.c
··· 2908 2908 return -EINVAL; 2909 2909 } 2910 2910 } else if (ecmd->autoneg == AUTONEG_DISABLE) { 2911 - if (ecmd->speed != SPEED_10 && ecmd->speed != SPEED_100) 2911 + u32 speed = ethtool_cmd_speed(ecmd); 2912 + if (speed != SPEED_10 && speed != SPEED_100) 2912 2913 return -EINVAL; 2913 2914 if (ecmd->duplex != DUPLEX_HALF && ecmd->duplex != DUPLEX_FULL) 2914 2915 return -EINVAL; ··· 2957 2956 if (ecmd->advertising & ADVERTISED_100baseT_Full) 2958 2957 np->advertising |= ADVERTISE_100FULL; 2959 2958 } else { 2960 - np->speed = ecmd->speed; 2959 + np->speed = ethtool_cmd_speed(ecmd); 2961 2960 np->duplex = ecmd->duplex; 2962 2961 /* user overriding the initial full duplex parm? */ 2963 2962 if (np->duplex == DUPLEX_HALF)
+3 -2
drivers/net/netxen/netxen_nic_ethtool.c
··· 251 251 netxen_nic_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd) 252 252 { 253 253 struct netxen_adapter *adapter = netdev_priv(dev); 254 + u32 speed = ethtool_cmd_speed(ecmd); 254 255 int ret; 255 256 256 257 if (adapter->ahw.port_type != NETXEN_NIC_GBE) ··· 260 259 if (!(adapter->capabilities & NX_FW_CAPABILITY_GBE_LINK_CFG)) 261 260 return -EOPNOTSUPP; 262 261 263 - ret = nx_fw_cmd_set_gbe_port(adapter, ecmd->speed, ecmd->duplex, 262 + ret = nx_fw_cmd_set_gbe_port(adapter, speed, ecmd->duplex, 264 263 ecmd->autoneg); 265 264 if (ret == NX_RCODE_NOT_SUPPORTED) 266 265 return -EOPNOTSUPP; 267 266 else if (ret) 268 267 return -EIO; 269 268 270 - adapter->link_speed = ecmd->speed; 269 + adapter->link_speed = speed; 271 270 adapter->link_duplex = ecmd->duplex; 272 271 adapter->link_autoneg = ecmd->autoneg; 273 272
+1 -1
drivers/net/niu.c
··· 6859 6859 struct niu_link_config *lp = &np->link_config; 6860 6860 6861 6861 lp->advertising = cmd->advertising; 6862 - lp->speed = cmd->speed; 6862 + lp->speed = ethtool_cmd_speed(cmd); 6863 6863 lp->duplex = cmd->duplex; 6864 6864 lp->autoneg = cmd->autoneg; 6865 6865 return niu_init_link(np);
+7 -4
drivers/net/pch_gbe/pch_gbe_ethtool.c
··· 92 92 ecmd->advertising &= ~(ADVERTISED_TP | ADVERTISED_1000baseT_Half); 93 93 94 94 if (!netif_carrier_ok(adapter->netdev)) 95 - ecmd->speed = -1; 95 + ethtool_cmd_speed_set(ecmd, -1); 96 96 return ret; 97 97 } 98 98 ··· 109 109 { 110 110 struct pch_gbe_adapter *adapter = netdev_priv(netdev); 111 111 struct pch_gbe_hw *hw = &adapter->hw; 112 + u32 speed = ethtool_cmd_speed(ecmd); 112 113 int ret; 113 114 114 115 pch_gbe_hal_write_phy_reg(hw, MII_BMCR, BMCR_RESET); 115 116 116 - if (ecmd->speed == USHRT_MAX) { 117 - ecmd->speed = SPEED_1000; 117 + /* when set_settings() is called with a ethtool_cmd previously 118 + * filled by get_settings() on a down link, speed is -1: */ 119 + if (speed == UINT_MAX) { 120 + speed = SPEED_1000; 118 121 ecmd->duplex = DUPLEX_FULL; 119 122 } 120 123 ret = mii_ethtool_sset(&adapter->mii, ecmd); ··· 125 122 pr_err("Error: mii_ethtool_sset\n"); 126 123 return ret; 127 124 } 128 - hw->mac.link_speed = ecmd->speed; 125 + hw->mac.link_speed = speed; 129 126 hw->mac.link_duplex = ecmd->duplex; 130 127 hw->phy.autoneg_advertised = ecmd->advertising; 131 128 hw->mac.autoneg = ecmd->autoneg;
+2 -2
drivers/net/pcmcia/smc91c92_cs.c
··· 1875 1875 u16 tmp; 1876 1876 unsigned int ioaddr = dev->base_addr; 1877 1877 1878 - if (ecmd->speed != SPEED_10) 1879 - return -EINVAL; 1878 + if (ethtool_cmd_speed(ecmd) != SPEED_10) 1879 + return -EINVAL; 1880 1880 if (ecmd->duplex != DUPLEX_HALF && ecmd->duplex != DUPLEX_FULL) 1881 1881 return -EINVAL; 1882 1882 if (ecmd->port != PORT_TP && ecmd->port != PORT_AUI)
+6 -4
drivers/net/phy/phy.c
··· 238 238 */ 239 239 int phy_ethtool_sset(struct phy_device *phydev, struct ethtool_cmd *cmd) 240 240 { 241 + u32 speed = ethtool_cmd_speed(cmd); 242 + 241 243 if (cmd->phy_address != phydev->addr) 242 244 return -EINVAL; 243 245 ··· 255 253 return -EINVAL; 256 254 257 255 if (cmd->autoneg == AUTONEG_DISABLE && 258 - ((cmd->speed != SPEED_1000 && 259 - cmd->speed != SPEED_100 && 260 - cmd->speed != SPEED_10) || 256 + ((speed != SPEED_1000 && 257 + speed != SPEED_100 && 258 + speed != SPEED_10) || 261 259 (cmd->duplex != DUPLEX_HALF && 262 260 cmd->duplex != DUPLEX_FULL))) 263 261 return -EINVAL; 264 262 265 263 phydev->autoneg = cmd->autoneg; 266 264 267 - phydev->speed = cmd->speed; 265 + phydev->speed = speed; 268 266 269 267 phydev->advertising = cmd->advertising; 270 268
+2 -1
drivers/net/r8169.c
··· 1349 1349 1350 1350 spin_lock_irqsave(&tp->lock, flags); 1351 1351 ret = rtl8169_set_speed(dev, 1352 - cmd->autoneg, cmd->speed, cmd->duplex, cmd->advertising); 1352 + cmd->autoneg, ethtool_cmd_speed(cmd), 1353 + cmd->duplex, cmd->advertising); 1353 1354 spin_unlock_irqrestore(&tp->lock, flags); 1354 1355 1355 1356 return ret;
+1 -1
drivers/net/s2io.c
··· 5380 5380 { 5381 5381 struct s2io_nic *sp = netdev_priv(dev); 5382 5382 if ((info->autoneg == AUTONEG_ENABLE) || 5383 - (info->speed != SPEED_10000) || 5383 + (ethtool_cmd_speed(info) != SPEED_10000) || 5384 5384 (info->duplex != DUPLEX_FULL)) 5385 5385 return -EINVAL; 5386 5386 else {
+3 -2
drivers/net/sc92031.c
··· 1188 1188 { 1189 1189 struct sc92031_priv *priv = netdev_priv(dev); 1190 1190 void __iomem *port_base = priv->port_base; 1191 + u32 speed = ethtool_cmd_speed(cmd); 1191 1192 u32 phy_ctrl; 1192 1193 u32 old_phy_ctrl; 1193 1194 1194 - if (!(cmd->speed == SPEED_10 || cmd->speed == SPEED_100)) 1195 + if (!(speed == SPEED_10 || speed == SPEED_100)) 1195 1196 return -EINVAL; 1196 1197 if (!(cmd->duplex == DUPLEX_HALF || cmd->duplex == DUPLEX_FULL)) 1197 1198 return -EINVAL; ··· 1230 1229 // FIXME: Whole branch guessed 1231 1230 phy_ctrl = 0; 1232 1231 1233 - if (cmd->speed == SPEED_10) 1232 + if (speed == SPEED_10) 1234 1233 phy_ctrl |= PhyCtrlSpd10; 1235 1234 else /* cmd->speed == SPEED_100 */ 1236 1235 phy_ctrl |= PhyCtrlSpd100;
+2 -1
drivers/net/sfc/ethtool.c
··· 234 234 int rc; 235 235 236 236 /* GMAC does not support 1000Mbps HD */ 237 - if (ecmd->speed == SPEED_1000 && ecmd->duplex != DUPLEX_FULL) { 237 + if ((ethtool_cmd_speed(ecmd) == SPEED_1000) && 238 + (ecmd->duplex != DUPLEX_FULL)) { 238 239 netif_dbg(efx, drv, efx->net_dev, 239 240 "rejecting unsupported 1000Mbps HD setting\n"); 240 241 return -EINVAL;
+2 -2
drivers/net/sfc/mcdi_phy.c
··· 545 545 caps = (ethtool_to_mcdi_cap(ecmd->advertising) | 546 546 1 << MC_CMD_PHY_CAP_AN_LBN); 547 547 } else if (ecmd->duplex) { 548 - switch (ecmd->speed) { 548 + switch (ethtool_cmd_speed(ecmd)) { 549 549 case 10: caps = 1 << MC_CMD_PHY_CAP_10FDX_LBN; break; 550 550 case 100: caps = 1 << MC_CMD_PHY_CAP_100FDX_LBN; break; 551 551 case 1000: caps = 1 << MC_CMD_PHY_CAP_1000FDX_LBN; break; ··· 553 553 default: return -EINVAL; 554 554 } 555 555 } else { 556 - switch (ecmd->speed) { 556 + switch (ethtool_cmd_speed(ecmd)) { 557 557 case 10: caps = 1 << MC_CMD_PHY_CAP_10HDX_LBN; break; 558 558 case 100: caps = 1 << MC_CMD_PHY_CAP_100HDX_LBN; break; 559 559 case 1000: caps = 1 << MC_CMD_PHY_CAP_1000HDX_LBN; break;
+3 -2
drivers/net/skge.c
··· 321 321 skge->speed = -1; 322 322 } else { 323 323 u32 setting; 324 + u32 speed = ethtool_cmd_speed(ecmd); 324 325 325 - switch (ecmd->speed) { 326 + switch (speed) { 326 327 case SPEED_1000: 327 328 if (ecmd->duplex == DUPLEX_FULL) 328 329 setting = SUPPORTED_1000baseT_Full; ··· 356 355 if ((setting & supported) == 0) 357 356 return -EINVAL; 358 357 359 - skge->speed = ecmd->speed; 358 + skge->speed = speed; 360 359 skge->duplex = ecmd->duplex; 361 360 } 362 361
+3 -2
drivers/net/sky2.c
··· 3452 3452 sky2->speed = -1; 3453 3453 } else { 3454 3454 u32 setting; 3455 + u32 speed = ethtool_cmd_speed(ecmd); 3455 3456 3456 - switch (ecmd->speed) { 3457 + switch (speed) { 3457 3458 case SPEED_1000: 3458 3459 if (ecmd->duplex == DUPLEX_FULL) 3459 3460 setting = SUPPORTED_1000baseT_Full; ··· 3487 3486 if ((setting & supported) == 0) 3488 3487 return -EINVAL; 3489 3488 3490 - sky2->speed = ecmd->speed; 3489 + sky2->speed = speed; 3491 3490 sky2->duplex = ecmd->duplex; 3492 3491 sky2->flags &= ~SKY2_FLAG_AUTO_SPEED; 3493 3492 }
+5 -4
drivers/net/sungem.c
··· 1294 1294 autoneg = 1; 1295 1295 } else { 1296 1296 autoneg = 0; 1297 - speed = ep->speed; 1297 + speed = ethtool_cmd_speed(ep); 1298 1298 duplex = ep->duplex; 1299 1299 } 1300 1300 ··· 2686 2686 static int gem_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) 2687 2687 { 2688 2688 struct gem *gp = netdev_priv(dev); 2689 + u32 speed = ethtool_cmd_speed(cmd); 2689 2690 2690 2691 /* Verify the settings we care about. */ 2691 2692 if (cmd->autoneg != AUTONEG_ENABLE && ··· 2698 2697 return -EINVAL; 2699 2698 2700 2699 if (cmd->autoneg == AUTONEG_DISABLE && 2701 - ((cmd->speed != SPEED_1000 && 2702 - cmd->speed != SPEED_100 && 2703 - cmd->speed != SPEED_10) || 2700 + ((speed != SPEED_1000 && 2701 + speed != SPEED_100 && 2702 + speed != SPEED_10) || 2704 2703 (cmd->duplex != DUPLEX_HALF && 2705 2704 cmd->duplex != DUPLEX_FULL))) 2706 2705 return -EINVAL;
+3 -3
drivers/net/sunhme.c
··· 1383 1383 if (ep == NULL || ep->autoneg == AUTONEG_ENABLE) { 1384 1384 hp->sw_bmcr = BMCR_SPEED100; 1385 1385 } else { 1386 - if (ep->speed == SPEED_100) 1386 + if (ethtool_cmd_speed(ep) == SPEED_100) 1387 1387 hp->sw_bmcr = BMCR_SPEED100; 1388 1388 else 1389 1389 hp->sw_bmcr = 0; ··· 2452 2452 cmd->autoneg != AUTONEG_DISABLE) 2453 2453 return -EINVAL; 2454 2454 if (cmd->autoneg == AUTONEG_DISABLE && 2455 - ((cmd->speed != SPEED_100 && 2456 - cmd->speed != SPEED_10) || 2455 + ((ethtool_cmd_speed(cmd) != SPEED_100 && 2456 + ethtool_cmd_speed(cmd) != SPEED_10) || 2457 2457 (cmd->duplex != DUPLEX_HALF && 2458 2458 cmd->duplex != DUPLEX_FULL))) 2459 2459 return -EINVAL;
+5 -4
drivers/net/tg3.c
··· 10042 10042 static int tg3_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) 10043 10043 { 10044 10044 struct tg3 *tp = netdev_priv(dev); 10045 + u32 speed = ethtool_cmd_speed(cmd); 10045 10046 10046 10047 if (tg3_flag(tp, USE_PHYLIB)) { 10047 10048 struct phy_device *phydev; ··· 10092 10091 cmd->advertising &= mask; 10093 10092 } else { 10094 10093 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) { 10095 - if (cmd->speed != SPEED_1000) 10094 + if (speed != SPEED_1000) 10096 10095 return -EINVAL; 10097 10096 10098 10097 if (cmd->duplex != DUPLEX_FULL) 10099 10098 return -EINVAL; 10100 10099 } else { 10101 - if (cmd->speed != SPEED_100 && 10102 - cmd->speed != SPEED_10) 10100 + if (speed != SPEED_100 && 10101 + speed != SPEED_10) 10103 10102 return -EINVAL; 10104 10103 } 10105 10104 } ··· 10114 10113 tp->link_config.duplex = DUPLEX_INVALID; 10115 10114 } else { 10116 10115 tp->link_config.advertising = 0; 10117 - tp->link_config.speed = cmd->speed; 10116 + tp->link_config.speed = speed; 10118 10117 tp->link_config.duplex = cmd->duplex; 10119 10118 } 10120 10119
+3 -2
drivers/net/tulip/de2104x.c
··· 1549 1549 { 1550 1550 u32 new_media; 1551 1551 unsigned int media_lock; 1552 + u32 speed = ethtool_cmd_speed(ecmd); 1552 1553 1553 - if (ecmd->speed != SPEED_10 && ecmd->speed != 5 && ecmd->speed != 2) 1554 + if (speed != SPEED_10 && speed != 5 && speed != 2) 1554 1555 return -EINVAL; 1555 - if (de->de21040 && ecmd->speed == 2) 1556 + if (de->de21040 && speed == 2) 1556 1557 return -EINVAL; 1557 1558 if (ecmd->duplex != DUPLEX_HALF && ecmd->duplex != DUPLEX_FULL) 1558 1559 return -EINVAL;
+9 -8
drivers/net/typhoon.c
··· 1068 1068 typhoon_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) 1069 1069 { 1070 1070 struct typhoon *tp = netdev_priv(dev); 1071 + u32 speed = ethtool_cmd_speed(cmd); 1071 1072 struct cmd_desc xp_cmd; 1072 1073 __le16 xcvr; 1073 1074 int err; 1074 1075 1075 1076 err = -EINVAL; 1076 - if(cmd->autoneg == AUTONEG_ENABLE) { 1077 + if (cmd->autoneg == AUTONEG_ENABLE) { 1077 1078 xcvr = TYPHOON_XCVR_AUTONEG; 1078 1079 } else { 1079 - if(cmd->duplex == DUPLEX_HALF) { 1080 - if(cmd->speed == SPEED_10) 1080 + if (cmd->duplex == DUPLEX_HALF) { 1081 + if (speed == SPEED_10) 1081 1082 xcvr = TYPHOON_XCVR_10HALF; 1082 - else if(cmd->speed == SPEED_100) 1083 + else if (speed == SPEED_100) 1083 1084 xcvr = TYPHOON_XCVR_100HALF; 1084 1085 else 1085 1086 goto out; 1086 - } else if(cmd->duplex == DUPLEX_FULL) { 1087 - if(cmd->speed == SPEED_10) 1087 + } else if (cmd->duplex == DUPLEX_FULL) { 1088 + if (speed == SPEED_10) 1088 1089 xcvr = TYPHOON_XCVR_10FULL; 1089 - else if(cmd->speed == SPEED_100) 1090 + else if (speed == SPEED_100) 1090 1091 xcvr = TYPHOON_XCVR_100FULL; 1091 1092 else 1092 1093 goto out; ··· 1106 1105 tp->speed = 0xff; /* invalid */ 1107 1106 tp->duplex = 0xff; /* invalid */ 1108 1107 } else { 1109 - tp->speed = cmd->speed; 1108 + tp->speed = speed; 1110 1109 tp->duplex = cmd->duplex; 1111 1110 } 1112 1111
+6 -4
drivers/net/via-velocity.c
··· 3247 3247 return 0; 3248 3248 } 3249 3249 3250 - static int velocity_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) 3250 + static int velocity_set_settings(struct net_device *dev, 3251 + struct ethtool_cmd *cmd) 3251 3252 { 3252 3253 struct velocity_info *vptr = netdev_priv(dev); 3254 + u32 speed = ethtool_cmd_speed(cmd); 3253 3255 u32 curr_status; 3254 3256 u32 new_status = 0; 3255 3257 int ret = 0; ··· 3260 3258 curr_status &= (~VELOCITY_LINK_FAIL); 3261 3259 3262 3260 new_status |= ((cmd->autoneg) ? VELOCITY_AUTONEG_ENABLE : 0); 3263 - new_status |= ((cmd->speed == SPEED_1000) ? VELOCITY_SPEED_1000 : 0); 3264 - new_status |= ((cmd->speed == SPEED_100) ? VELOCITY_SPEED_100 : 0); 3265 - new_status |= ((cmd->speed == SPEED_10) ? VELOCITY_SPEED_10 : 0); 3261 + new_status |= ((speed == SPEED_1000) ? VELOCITY_SPEED_1000 : 0); 3262 + new_status |= ((speed == SPEED_100) ? VELOCITY_SPEED_100 : 0); 3263 + new_status |= ((speed == SPEED_10) ? VELOCITY_SPEED_10 : 0); 3266 3264 new_status |= ((cmd->duplex == DUPLEX_FULL) ? VELOCITY_DUPLEX_FULL : 0); 3267 3265 3268 3266 if ((new_status & VELOCITY_AUTONEG_ENABLE) &&
+2 -1
drivers/net/vxge/vxge-ethtool.c
··· 33 33 { 34 34 /* We currently only support 10Gb/FULL */ 35 35 if ((info->autoneg == AUTONEG_ENABLE) || 36 - (info->speed != SPEED_10000) || (info->duplex != DUPLEX_FULL)) 36 + (ethtool_cmd_speed(info) != SPEED_10000) || 37 + (info->duplex != DUPLEX_FULL)) 37 38 return -EINVAL; 38 39 39 40 return 0;
+2 -2
net/bridge/br_if.c
··· 36 36 if (dev->ethtool_ops && dev->ethtool_ops->get_settings) { 37 37 struct ethtool_cmd ecmd = { .cmd = ETHTOOL_GSET, }; 38 38 39 - if (!dev->ethtool_ops->get_settings(dev, &ecmd)) { 40 - switch(ecmd.speed) { 39 + if (!dev_ethtool_get_settings(dev, &ecmd)) { 40 + switch (ethtool_cmd_speed(&ecmd)) { 41 41 case SPEED_10000: 42 42 return 2; 43 43 case SPEED_1000: