@@ -789,18 +789,19 @@ static int netvsc_set_channels(struct net_device *net,
789789 return ret ;
790790}
791791
792- static bool netvsc_validate_ethtool_ss_cmd (const struct ethtool_cmd * cmd )
792+ static bool
793+ netvsc_validate_ethtool_ss_cmd (const struct ethtool_link_ksettings * cmd )
793794{
794- struct ethtool_cmd diff1 = * cmd ;
795- struct ethtool_cmd diff2 = {};
795+ struct ethtool_link_ksettings diff1 = * cmd ;
796+ struct ethtool_link_ksettings diff2 = {};
796797
797- ethtool_cmd_speed_set ( & diff1 , 0 ) ;
798- diff1 .duplex = 0 ;
798+ diff1 . base . speed = 0 ;
799+ diff1 .base . duplex = 0 ;
799800 /* advertising and cmd are usually set */
800- diff1 . advertising = 0 ;
801- diff1 .cmd = 0 ;
801+ ethtool_link_ksettings_zero_link_mode ( & diff1 , advertising ) ;
802+ diff1 .base . cmd = 0 ;
802803 /* We set port to PORT_OTHER */
803- diff2 .port = PORT_OTHER ;
804+ diff2 .base . port = PORT_OTHER ;
804805
805806 return !memcmp (& diff1 , & diff2 , sizeof (diff1 ));
806807}
@@ -813,30 +814,32 @@ static void netvsc_init_settings(struct net_device *dev)
813814 ndc -> duplex = DUPLEX_UNKNOWN ;
814815}
815816
816- static int netvsc_get_settings (struct net_device * dev , struct ethtool_cmd * cmd )
817+ static int netvsc_get_link_ksettings (struct net_device * dev ,
818+ struct ethtool_link_ksettings * cmd )
817819{
818820 struct net_device_context * ndc = netdev_priv (dev );
819821
820- ethtool_cmd_speed_set ( cmd , ndc -> speed ) ;
821- cmd -> duplex = ndc -> duplex ;
822- cmd -> port = PORT_OTHER ;
822+ cmd -> base . speed = ndc -> speed ;
823+ cmd -> base . duplex = ndc -> duplex ;
824+ cmd -> base . port = PORT_OTHER ;
823825
824826 return 0 ;
825827}
826828
827- static int netvsc_set_settings (struct net_device * dev , struct ethtool_cmd * cmd )
829+ static int netvsc_set_link_ksettings (struct net_device * dev ,
830+ const struct ethtool_link_ksettings * cmd )
828831{
829832 struct net_device_context * ndc = netdev_priv (dev );
830833 u32 speed ;
831834
832- speed = ethtool_cmd_speed ( cmd ) ;
835+ speed = cmd -> base . speed ;
833836 if (!ethtool_validate_speed (speed ) ||
834- !ethtool_validate_duplex (cmd -> duplex ) ||
837+ !ethtool_validate_duplex (cmd -> base . duplex ) ||
835838 !netvsc_validate_ethtool_ss_cmd (cmd ))
836839 return - EINVAL ;
837840
838841 ndc -> speed = speed ;
839- ndc -> duplex = cmd -> duplex ;
842+ ndc -> duplex = cmd -> base . duplex ;
840843
841844 return 0 ;
842845}
@@ -1170,13 +1173,13 @@ static const struct ethtool_ops ethtool_ops = {
11701173 .get_channels = netvsc_get_channels ,
11711174 .set_channels = netvsc_set_channels ,
11721175 .get_ts_info = ethtool_op_get_ts_info ,
1173- .get_settings = netvsc_get_settings ,
1174- .set_settings = netvsc_set_settings ,
11751176 .get_rxnfc = netvsc_get_rxnfc ,
11761177 .get_rxfh_key_size = netvsc_get_rxfh_key_size ,
11771178 .get_rxfh_indir_size = netvsc_rss_indir_size ,
11781179 .get_rxfh = netvsc_get_rxfh ,
11791180 .set_rxfh = netvsc_set_rxfh ,
1181+ .get_link_ksettings = netvsc_get_link_ksettings ,
1182+ .set_link_ksettings = netvsc_set_link_ksettings ,
11801183};
11811184
11821185static const struct net_device_ops device_ops = {
0 commit comments