diff options
author | Philippe Reynes <tremyfr@gmail.com> | 2016-12-11 18:27:49 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-12-17 21:31:41 -0500 |
commit | b7b44fd23e6d2a896c6efbe85b39862f14aae11a (patch) | |
tree | 54fba5925fb02181f3dd05678648e92f2eed61ed | |
parent | 49cad93909b18acf942b70356e65eeeaa9ca9d23 (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.c | 65 |
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 | ||
1804 | static int get_settings(struct net_device *dev, struct ethtool_cmd *cmd) | 1804 | static 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 | ||
1863 | static int set_settings(struct net_device *dev, struct ethtool_cmd *cmd) | 1867 | static 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 | ||
2099 | static const struct ethtool_ops cxgb_ethtool_ops = { | 2108 | static 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 | ||
2125 | static int in_range(int val, int lo, int hi) | 2134 | static int in_range(int val, int lo, int hi) |