@@ -1801,27 +1801,31 @@ static int set_phys_id(struct net_device *dev,
1801
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
1807
struct port_info * p = netdev_priv (dev );
1808
+ u32 supported ;
1807
1809
1808
- cmd -> supported = p -> link_config .supported ;
1809
- cmd -> advertising = p -> link_config .advertising ;
1810
+ ethtool_convert_legacy_u32_to_link_mode (cmd -> link_modes .supported ,
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
1815
if (netif_carrier_ok (dev )) {
1812
- ethtool_cmd_speed_set ( cmd , p -> link_config .speed ) ;
1813
- cmd -> duplex = p -> link_config .duplex ;
1816
+ cmd -> base . speed = p -> link_config .speed ;
1817
+ cmd -> base . duplex = p -> link_config .duplex ;
1814
1818
} else {
1815
- ethtool_cmd_speed_set ( cmd , SPEED_UNKNOWN ) ;
1816
- cmd -> duplex = DUPLEX_UNKNOWN ;
1819
+ cmd -> base . speed = SPEED_UNKNOWN ;
1820
+ cmd -> base . duplex = DUPLEX_UNKNOWN ;
1817
1821
}
1818
1822
1819
- cmd -> port = ( cmd -> supported & SUPPORTED_TP ) ? PORT_TP : PORT_FIBRE ;
1820
- cmd -> phy_address = p -> phy . mdio . prtad ;
1821
- cmd -> transceiver = XCVR_EXTERNAL ;
1822
- cmd -> autoneg = p -> link_config . autoneg ;
1823
- cmd -> maxtxpkt = 0 ;
1824
- cmd -> maxrxpkt = 0 ;
1823
+ ethtool_convert_link_mode_to_legacy_u32 ( & supported ,
1824
+ cmd -> link_modes . supported ) ;
1825
+
1826
+ cmd -> base . port = ( supported & SUPPORTED_TP ) ? PORT_TP : PORT_FIBRE ;
1827
+ cmd -> base . phy_address = p -> phy . mdio . prtad ;
1828
+ cmd -> base . autoneg = p -> link_config . autoneg ;
1825
1829
return 0 ;
1826
1830
}
1827
1831
@@ -1860,44 +1864,49 @@ static int speed_duplex_to_caps(int speed, int duplex)
1860
1864
ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full | \
1861
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
1870
struct port_info * p = netdev_priv (dev );
1866
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
1877
if (!(lc -> supported & SUPPORTED_Autoneg )) {
1869
1878
/*
1870
1879
* PHY offers a single speed/duplex. See if that's what's
1871
1880
* being requested.
1872
1881
*/
1873
- if (cmd -> autoneg == AUTONEG_DISABLE ) {
1874
- u32 speed = ethtool_cmd_speed ( cmd ) ;
1875
- int cap = speed_duplex_to_caps (speed , cmd -> duplex );
1882
+ if (cmd -> base . autoneg == AUTONEG_DISABLE ) {
1883
+ u32 speed = cmd -> base . speed ;
1884
+ int cap = speed_duplex_to_caps (speed , cmd -> base . duplex );
1876
1885
if (lc -> supported & cap )
1877
1886
return 0 ;
1878
1887
}
1879
1888
return - EINVAL ;
1880
1889
}
1881
1890
1882
- if (cmd -> autoneg == AUTONEG_DISABLE ) {
1883
- u32 speed = ethtool_cmd_speed ( cmd ) ;
1884
- int cap = speed_duplex_to_caps (speed , cmd -> duplex );
1891
+ if (cmd -> base . autoneg == AUTONEG_DISABLE ) {
1892
+ u32 speed = cmd -> base . speed ;
1893
+ int cap = speed_duplex_to_caps (speed , cmd -> base . duplex );
1885
1894
1886
1895
if (!(lc -> supported & cap ) || (speed == SPEED_1000 ))
1887
1896
return - EINVAL ;
1888
1897
lc -> requested_speed = speed ;
1889
- lc -> requested_duplex = cmd -> duplex ;
1898
+ lc -> requested_duplex = cmd -> base . duplex ;
1890
1899
lc -> advertising = 0 ;
1891
1900
} else {
1892
- cmd -> advertising &= ADVERTISED_MASK ;
1893
- cmd -> advertising &= lc -> supported ;
1894
- if (!cmd -> advertising )
1901
+ advertising &= ADVERTISED_MASK ;
1902
+ advertising &= lc -> supported ;
1903
+ if (!advertising )
1895
1904
return - EINVAL ;
1896
1905
lc -> requested_speed = SPEED_INVALID ;
1897
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
1910
if (netif_running (dev ))
1902
1911
t3_link_start (& p -> phy , & p -> mac , lc );
1903
1912
return 0 ;
@@ -2097,8 +2106,6 @@ static void get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
2097
2106
}
2098
2107
2099
2108
static const struct ethtool_ops cxgb_ethtool_ops = {
2100
- .get_settings = get_settings ,
2101
- .set_settings = set_settings ,
2102
2109
.get_drvinfo = get_drvinfo ,
2103
2110
.get_msglevel = get_msglevel ,
2104
2111
.set_msglevel = set_msglevel ,
@@ -2120,6 +2127,8 @@ static const struct ethtool_ops cxgb_ethtool_ops = {
2120
2127
.get_regs_len = get_regs_len ,
2121
2128
.get_regs = get_regs ,
2122
2129
.get_wol = get_wol ,
2130
+ .get_link_ksettings = get_link_ksettings ,
2131
+ .set_link_ksettings = set_link_ksettings ,
2123
2132
};
2124
2133
2125
2134
static int in_range (int val , int lo , int hi )
0 commit comments