aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilippe Reynes <tremyfr@gmail.com>2016-12-11 18:27:49 -0500
committerDavid S. Miller <davem@davemloft.net>2016-12-17 21:31:41 -0500
commitb7b44fd23e6d2a896c6efbe85b39862f14aae11a (patch)
tree54fba5925fb02181f3dd05678648e92f2eed61ed
parent49cad93909b18acf942b70356e65eeeaa9ca9d23 (diff)
net: chelsio: cxgb3: use new api ethtool_{get|set}_link_ksettings
The ethtool api {get|set}_settings is deprecated. We move this driver to new api {get|set}_link_ksettings. Signed-off-by: Philippe Reynes <tremyfr@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c65
1 files changed, 37 insertions, 28 deletions
diff --git a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
index 092b3c16440b..7b2224ae72f2 100644
--- a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
@@ -1801,27 +1801,31 @@ static int set_phys_id(struct net_device *dev,
1801 return 0; 1801 return 0;
1802} 1802}
1803 1803
1804static int get_settings(struct net_device *dev, struct ethtool_cmd *cmd) 1804static int get_link_ksettings(struct net_device *dev,
1805 struct ethtool_link_ksettings *cmd)
1805{ 1806{
1806 struct port_info *p = netdev_priv(dev); 1807 struct port_info *p = netdev_priv(dev);
1808 u32 supported;
1807 1809
1808 cmd->supported = p->link_config.supported; 1810 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
1809 cmd->advertising = p->link_config.advertising; 1811 p->link_config.supported);
1812 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising,
1813 p->link_config.advertising);
1810 1814
1811 if (netif_carrier_ok(dev)) { 1815 if (netif_carrier_ok(dev)) {
1812 ethtool_cmd_speed_set(cmd, p->link_config.speed); 1816 cmd->base.speed = p->link_config.speed;
1813 cmd->duplex = p->link_config.duplex; 1817 cmd->base.duplex = p->link_config.duplex;
1814 } else { 1818 } else {
1815 ethtool_cmd_speed_set(cmd, SPEED_UNKNOWN); 1819 cmd->base.speed = SPEED_UNKNOWN;
1816 cmd->duplex = DUPLEX_UNKNOWN; 1820 cmd->base.duplex = DUPLEX_UNKNOWN;
1817 } 1821 }
1818 1822
1819 cmd->port = (cmd->supported & SUPPORTED_TP) ? PORT_TP : PORT_FIBRE; 1823 ethtool_convert_link_mode_to_legacy_u32(&supported,
1820 cmd->phy_address = p->phy.mdio.prtad; 1824 cmd->link_modes.supported);
1821 cmd->transceiver = XCVR_EXTERNAL; 1825
1822 cmd->autoneg = p->link_config.autoneg; 1826 cmd->base.port = (supported & SUPPORTED_TP) ? PORT_TP : PORT_FIBRE;
1823 cmd->maxtxpkt = 0; 1827 cmd->base.phy_address = p->phy.mdio.prtad;
1824 cmd->maxrxpkt = 0; 1828 cmd->base.autoneg = p->link_config.autoneg;
1825 return 0; 1829 return 0;
1826} 1830}
1827 1831
@@ -1860,44 +1864,49 @@ static int speed_duplex_to_caps(int speed, int duplex)
1860 ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full | \ 1864 ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full | \
1861 ADVERTISED_10000baseT_Full) 1865 ADVERTISED_10000baseT_Full)
1862 1866
1863static int set_settings(struct net_device *dev, struct ethtool_cmd *cmd) 1867static int set_link_ksettings(struct net_device *dev,
1868 const struct ethtool_link_ksettings *cmd)
1864{ 1869{
1865 struct port_info *p = netdev_priv(dev); 1870 struct port_info *p = netdev_priv(dev);
1866 struct link_config *lc = &p->link_config; 1871 struct link_config *lc = &p->link_config;
1872 u32 advertising;
1873
1874 ethtool_convert_link_mode_to_legacy_u32(&advertising,
1875 cmd->link_modes.advertising);
1867 1876
1868 if (!(lc->supported & SUPPORTED_Autoneg)) { 1877 if (!(lc->supported & SUPPORTED_Autoneg)) {
1869 /* 1878 /*
1870 * PHY offers a single speed/duplex. See if that's what's 1879 * PHY offers a single speed/duplex. See if that's what's
1871 * being requested. 1880 * being requested.
1872 */ 1881 */
1873 if (cmd->autoneg == AUTONEG_DISABLE) { 1882 if (cmd->base.autoneg == AUTONEG_DISABLE) {
1874 u32 speed = ethtool_cmd_speed(cmd); 1883 u32 speed = cmd->base.speed;
1875 int cap = speed_duplex_to_caps(speed, cmd->duplex); 1884 int cap = speed_duplex_to_caps(speed, cmd->base.duplex);
1876 if (lc->supported & cap) 1885 if (lc->supported & cap)
1877 return 0; 1886 return 0;
1878 } 1887 }
1879 return -EINVAL; 1888 return -EINVAL;
1880 } 1889 }
1881 1890
1882 if (cmd->autoneg == AUTONEG_DISABLE) { 1891 if (cmd->base.autoneg == AUTONEG_DISABLE) {
1883 u32 speed = ethtool_cmd_speed(cmd); 1892 u32 speed = cmd->base.speed;
1884 int cap = speed_duplex_to_caps(speed, cmd->duplex); 1893 int cap = speed_duplex_to_caps(speed, cmd->base.duplex);
1885 1894
1886 if (!(lc->supported & cap) || (speed == SPEED_1000)) 1895 if (!(lc->supported & cap) || (speed == SPEED_1000))
1887 return -EINVAL; 1896 return -EINVAL;
1888 lc->requested_speed = speed; 1897 lc->requested_speed = speed;
1889 lc->requested_duplex = cmd->duplex; 1898 lc->requested_duplex = cmd->base.duplex;
1890 lc->advertising = 0; 1899 lc->advertising = 0;
1891 } else { 1900 } else {
1892 cmd->advertising &= ADVERTISED_MASK; 1901 advertising &= ADVERTISED_MASK;
1893 cmd->advertising &= lc->supported; 1902 advertising &= lc->supported;
1894 if (!cmd->advertising) 1903 if (!advertising)
1895 return -EINVAL; 1904 return -EINVAL;
1896 lc->requested_speed = SPEED_INVALID; 1905 lc->requested_speed = SPEED_INVALID;
1897 lc->requested_duplex = DUPLEX_INVALID; 1906 lc->requested_duplex = DUPLEX_INVALID;
1898 lc->advertising = cmd->advertising | ADVERTISED_Autoneg; 1907 lc->advertising = advertising | ADVERTISED_Autoneg;
1899 } 1908 }
1900 lc->autoneg = cmd->autoneg; 1909 lc->autoneg = cmd->base.autoneg;
1901 if (netif_running(dev)) 1910 if (netif_running(dev))
1902 t3_link_start(&p->phy, &p->mac, lc); 1911 t3_link_start(&p->phy, &p->mac, lc);
1903 return 0; 1912 return 0;
@@ -2097,8 +2106,6 @@ static void get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
2097} 2106}
2098 2107
2099static const struct ethtool_ops cxgb_ethtool_ops = { 2108static const struct ethtool_ops cxgb_ethtool_ops = {
2100 .get_settings = get_settings,
2101 .set_settings = set_settings,
2102 .get_drvinfo = get_drvinfo, 2109 .get_drvinfo = get_drvinfo,
2103 .get_msglevel = get_msglevel, 2110 .get_msglevel = get_msglevel,
2104 .set_msglevel = set_msglevel, 2111 .set_msglevel = set_msglevel,
@@ -2120,6 +2127,8 @@ static const struct ethtool_ops cxgb_ethtool_ops = {
2120 .get_regs_len = get_regs_len, 2127 .get_regs_len = get_regs_len,
2121 .get_regs = get_regs, 2128 .get_regs = get_regs,
2122 .get_wol = get_wol, 2129 .get_wol = get_wol,
2130 .get_link_ksettings = get_link_ksettings,
2131 .set_link_ksettings = set_link_ksettings,
2123}; 2132};
2124 2133
2125static int in_range(int val, int lo, int hi) 2134static int in_range(int val, int lo, int hi)