@@ -789,18 +789,19 @@ static int netvsc_set_channels(struct net_device *net,
789
789
return ret ;
790
790
}
791
791
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 )
793
794
{
794
- struct ethtool_cmd diff1 = * cmd ;
795
- struct ethtool_cmd diff2 = {};
795
+ struct ethtool_link_ksettings diff1 = * cmd ;
796
+ struct ethtool_link_ksettings diff2 = {};
796
797
797
- ethtool_cmd_speed_set ( & diff1 , 0 ) ;
798
- diff1 .duplex = 0 ;
798
+ diff1 . base . speed = 0 ;
799
+ diff1 .base . duplex = 0 ;
799
800
/* 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 ;
802
803
/* We set port to PORT_OTHER */
803
- diff2 .port = PORT_OTHER ;
804
+ diff2 .base . port = PORT_OTHER ;
804
805
805
806
return !memcmp (& diff1 , & diff2 , sizeof (diff1 ));
806
807
}
@@ -813,30 +814,32 @@ static void netvsc_init_settings(struct net_device *dev)
813
814
ndc -> duplex = DUPLEX_UNKNOWN ;
814
815
}
815
816
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 )
817
819
{
818
820
struct net_device_context * ndc = netdev_priv (dev );
819
821
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 ;
823
825
824
826
return 0 ;
825
827
}
826
828
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 )
828
831
{
829
832
struct net_device_context * ndc = netdev_priv (dev );
830
833
u32 speed ;
831
834
832
- speed = ethtool_cmd_speed ( cmd ) ;
835
+ speed = cmd -> base . speed ;
833
836
if (!ethtool_validate_speed (speed ) ||
834
- !ethtool_validate_duplex (cmd -> duplex ) ||
837
+ !ethtool_validate_duplex (cmd -> base . duplex ) ||
835
838
!netvsc_validate_ethtool_ss_cmd (cmd ))
836
839
return - EINVAL ;
837
840
838
841
ndc -> speed = speed ;
839
- ndc -> duplex = cmd -> duplex ;
842
+ ndc -> duplex = cmd -> base . duplex ;
840
843
841
844
return 0 ;
842
845
}
@@ -1170,13 +1173,13 @@ static const struct ethtool_ops ethtool_ops = {
1170
1173
.get_channels = netvsc_get_channels ,
1171
1174
.set_channels = netvsc_set_channels ,
1172
1175
.get_ts_info = ethtool_op_get_ts_info ,
1173
- .get_settings = netvsc_get_settings ,
1174
- .set_settings = netvsc_set_settings ,
1175
1176
.get_rxnfc = netvsc_get_rxnfc ,
1176
1177
.get_rxfh_key_size = netvsc_get_rxfh_key_size ,
1177
1178
.get_rxfh_indir_size = netvsc_rss_indir_size ,
1178
1179
.get_rxfh = netvsc_get_rxfh ,
1179
1180
.set_rxfh = netvsc_set_rxfh ,
1181
+ .get_link_ksettings = netvsc_get_link_ksettings ,
1182
+ .set_link_ksettings = netvsc_set_link_ksettings ,
1180
1183
};
1181
1184
1182
1185
static const struct net_device_ops device_ops = {
0 commit comments