@@ -568,28 +568,33 @@ static void get_regs(struct net_device *dev, struct ethtool_regs *regs,
568
568
reg_block_dump (ap , buf , A_MC5_CONFIG , A_MC5_MASK_WRITE_CMD );
569
569
}
570
570
571
- static int get_settings (struct net_device * dev , struct ethtool_cmd * cmd )
571
+ static int get_link_ksettings (struct net_device * dev ,
572
+ struct ethtool_link_ksettings * cmd )
572
573
{
573
574
struct adapter * adapter = dev -> ml_priv ;
574
575
struct port_info * p = & adapter -> port [dev -> if_port ];
576
+ u32 supported , advertising ;
575
577
576
- cmd -> supported = p -> link_config .supported ;
577
- cmd -> advertising = p -> link_config .advertising ;
578
+ supported = p -> link_config .supported ;
579
+ advertising = p -> link_config .advertising ;
578
580
579
581
if (netif_carrier_ok (dev )) {
580
- ethtool_cmd_speed_set ( cmd , p -> link_config .speed ) ;
581
- cmd -> duplex = p -> link_config .duplex ;
582
+ cmd -> base . speed = p -> link_config .speed ;
583
+ cmd -> base . duplex = p -> link_config .duplex ;
582
584
} else {
583
- ethtool_cmd_speed_set ( cmd , SPEED_UNKNOWN ) ;
584
- cmd -> duplex = DUPLEX_UNKNOWN ;
585
+ cmd -> base . speed = SPEED_UNKNOWN ;
586
+ cmd -> base . duplex = DUPLEX_UNKNOWN ;
585
587
}
586
588
587
- cmd -> port = (cmd -> supported & SUPPORTED_TP ) ? PORT_TP : PORT_FIBRE ;
588
- cmd -> phy_address = p -> phy -> mdio .prtad ;
589
- cmd -> transceiver = XCVR_EXTERNAL ;
590
- cmd -> autoneg = p -> link_config .autoneg ;
591
- cmd -> maxtxpkt = 0 ;
592
- cmd -> maxrxpkt = 0 ;
589
+ cmd -> base .port = (supported & SUPPORTED_TP ) ? PORT_TP : PORT_FIBRE ;
590
+ cmd -> base .phy_address = p -> phy -> mdio .prtad ;
591
+ cmd -> base .autoneg = p -> link_config .autoneg ;
592
+
593
+ ethtool_convert_legacy_u32_to_link_mode (cmd -> link_modes .supported ,
594
+ supported );
595
+ ethtool_convert_legacy_u32_to_link_mode (cmd -> link_modes .advertising ,
596
+ advertising );
597
+
593
598
return 0 ;
594
599
}
595
600
@@ -628,36 +633,41 @@ static int speed_duplex_to_caps(int speed, int duplex)
628
633
ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full | \
629
634
ADVERTISED_10000baseT_Full)
630
635
631
- static int set_settings (struct net_device * dev , struct ethtool_cmd * cmd )
636
+ static int set_link_ksettings (struct net_device * dev ,
637
+ const struct ethtool_link_ksettings * cmd )
632
638
{
633
639
struct adapter * adapter = dev -> ml_priv ;
634
640
struct port_info * p = & adapter -> port [dev -> if_port ];
635
641
struct link_config * lc = & p -> link_config ;
642
+ u32 advertising ;
643
+
644
+ ethtool_convert_link_mode_to_legacy_u32 (& advertising ,
645
+ cmd -> link_modes .advertising );
636
646
637
647
if (!(lc -> supported & SUPPORTED_Autoneg ))
638
648
return - EOPNOTSUPP ; /* can't change speed/duplex */
639
649
640
- if (cmd -> autoneg == AUTONEG_DISABLE ) {
641
- u32 speed = ethtool_cmd_speed ( cmd ) ;
642
- int cap = speed_duplex_to_caps (speed , cmd -> duplex );
650
+ if (cmd -> base . autoneg == AUTONEG_DISABLE ) {
651
+ u32 speed = cmd -> base . speed ;
652
+ int cap = speed_duplex_to_caps (speed , cmd -> base . duplex );
643
653
644
654
if (!(lc -> supported & cap ) || (speed == SPEED_1000 ))
645
655
return - EINVAL ;
646
656
lc -> requested_speed = speed ;
647
- lc -> requested_duplex = cmd -> duplex ;
657
+ lc -> requested_duplex = cmd -> base . duplex ;
648
658
lc -> advertising = 0 ;
649
659
} else {
650
- cmd -> advertising &= ADVERTISED_MASK ;
651
- if (cmd -> advertising & (cmd -> advertising - 1 ))
652
- cmd -> advertising = lc -> supported ;
653
- cmd -> advertising &= lc -> supported ;
654
- if (!cmd -> advertising )
660
+ advertising &= ADVERTISED_MASK ;
661
+ if (advertising & (advertising - 1 ))
662
+ advertising = lc -> supported ;
663
+ advertising &= lc -> supported ;
664
+ if (!advertising )
655
665
return - EINVAL ;
656
666
lc -> requested_speed = SPEED_INVALID ;
657
667
lc -> requested_duplex = DUPLEX_INVALID ;
658
- lc -> advertising = cmd -> advertising | ADVERTISED_Autoneg ;
668
+ lc -> advertising = advertising | ADVERTISED_Autoneg ;
659
669
}
660
- lc -> autoneg = cmd -> autoneg ;
670
+ lc -> autoneg = cmd -> base . autoneg ;
661
671
if (netif_running (dev ))
662
672
t1_link_start (p -> phy , p -> mac , lc );
663
673
return 0 ;
@@ -788,8 +798,6 @@ static int get_eeprom(struct net_device *dev, struct ethtool_eeprom *e,
788
798
}
789
799
790
800
static const struct ethtool_ops t1_ethtool_ops = {
791
- .get_settings = get_settings ,
792
- .set_settings = set_settings ,
793
801
.get_drvinfo = get_drvinfo ,
794
802
.get_msglevel = get_msglevel ,
795
803
.set_msglevel = set_msglevel ,
@@ -807,6 +815,8 @@ static const struct ethtool_ops t1_ethtool_ops = {
807
815
.get_ethtool_stats = get_stats ,
808
816
.get_regs_len = get_regs_len ,
809
817
.get_regs = get_regs ,
818
+ .get_link_ksettings = get_link_ksettings ,
819
+ .set_link_ksettings = set_link_ksettings ,
810
820
};
811
821
812
822
static int t1_ioctl (struct net_device * dev , struct ifreq * req , int cmd )
0 commit comments