summaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet
diff options
context:
space:
mode:
authorPhilippe Reynes <tremyfr@gmail.com>2016-12-11 16:47:50 -0500
committerDavid S. Miller <davem@davemloft.net>2016-12-17 21:31:41 -0500
commit49cad93909b18acf942b70356e65eeeaa9ca9d23 (patch)
tree3701a4131db49786a53d884eb92ee1050660fb83 /drivers/net/ethernet
parent6219d05506b66e3157efa48b1b39042b04280ce1 (diff)
net: chelsio: cxgb2: 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>
Diffstat (limited to 'drivers/net/ethernet')
-rw-r--r--drivers/net/ethernet/chelsio/cxgb/cxgb2.c64
1 files changed, 37 insertions, 27 deletions
diff --git a/drivers/net/ethernet/chelsio/cxgb/cxgb2.c b/drivers/net/ethernet/chelsio/cxgb/cxgb2.c
index 81d1d0bc7553..3a05f9098e75 100644
--- a/drivers/net/ethernet/chelsio/cxgb/cxgb2.c
+++ b/drivers/net/ethernet/chelsio/cxgb/cxgb2.c
@@ -568,28 +568,33 @@ static void get_regs(struct net_device *dev, struct ethtool_regs *regs,
568 reg_block_dump(ap, buf, A_MC5_CONFIG, A_MC5_MASK_WRITE_CMD); 568 reg_block_dump(ap, buf, A_MC5_CONFIG, A_MC5_MASK_WRITE_CMD);
569} 569}
570 570
571static int get_settings(struct net_device *dev, struct ethtool_cmd *cmd) 571static int get_link_ksettings(struct net_device *dev,
572 struct ethtool_link_ksettings *cmd)
572{ 573{
573 struct adapter *adapter = dev->ml_priv; 574 struct adapter *adapter = dev->ml_priv;
574 struct port_info *p = &adapter->port[dev->if_port]; 575 struct port_info *p = &adapter->port[dev->if_port];
576 u32 supported, advertising;
575 577
576 cmd->supported = p->link_config.supported; 578 supported = p->link_config.supported;
577 cmd->advertising = p->link_config.advertising; 579 advertising = p->link_config.advertising;
578 580
579 if (netif_carrier_ok(dev)) { 581 if (netif_carrier_ok(dev)) {
580 ethtool_cmd_speed_set(cmd, p->link_config.speed); 582 cmd->base.speed = p->link_config.speed;
581 cmd->duplex = p->link_config.duplex; 583 cmd->base.duplex = p->link_config.duplex;
582 } else { 584 } else {
583 ethtool_cmd_speed_set(cmd, SPEED_UNKNOWN); 585 cmd->base.speed = SPEED_UNKNOWN;
584 cmd->duplex = DUPLEX_UNKNOWN; 586 cmd->base.duplex = DUPLEX_UNKNOWN;
585 } 587 }
586 588
587 cmd->port = (cmd->supported & SUPPORTED_TP) ? PORT_TP : PORT_FIBRE; 589 cmd->base.port = (supported & SUPPORTED_TP) ? PORT_TP : PORT_FIBRE;
588 cmd->phy_address = p->phy->mdio.prtad; 590 cmd->base.phy_address = p->phy->mdio.prtad;
589 cmd->transceiver = XCVR_EXTERNAL; 591 cmd->base.autoneg = p->link_config.autoneg;
590 cmd->autoneg = p->link_config.autoneg; 592
591 cmd->maxtxpkt = 0; 593 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
592 cmd->maxrxpkt = 0; 594 supported);
595 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising,
596 advertising);
597
593 return 0; 598 return 0;
594} 599}
595 600
@@ -628,36 +633,41 @@ static int speed_duplex_to_caps(int speed, int duplex)
628 ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full | \ 633 ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full | \
629 ADVERTISED_10000baseT_Full) 634 ADVERTISED_10000baseT_Full)
630 635
631static int set_settings(struct net_device *dev, struct ethtool_cmd *cmd) 636static int set_link_ksettings(struct net_device *dev,
637 const struct ethtool_link_ksettings *cmd)
632{ 638{
633 struct adapter *adapter = dev->ml_priv; 639 struct adapter *adapter = dev->ml_priv;
634 struct port_info *p = &adapter->port[dev->if_port]; 640 struct port_info *p = &adapter->port[dev->if_port];
635 struct link_config *lc = &p->link_config; 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 if (!(lc->supported & SUPPORTED_Autoneg)) 647 if (!(lc->supported & SUPPORTED_Autoneg))
638 return -EOPNOTSUPP; /* can't change speed/duplex */ 648 return -EOPNOTSUPP; /* can't change speed/duplex */
639 649
640 if (cmd->autoneg == AUTONEG_DISABLE) { 650 if (cmd->base.autoneg == AUTONEG_DISABLE) {
641 u32 speed = ethtool_cmd_speed(cmd); 651 u32 speed = cmd->base.speed;
642 int cap = speed_duplex_to_caps(speed, cmd->duplex); 652 int cap = speed_duplex_to_caps(speed, cmd->base.duplex);
643 653
644 if (!(lc->supported & cap) || (speed == SPEED_1000)) 654 if (!(lc->supported & cap) || (speed == SPEED_1000))
645 return -EINVAL; 655 return -EINVAL;
646 lc->requested_speed = speed; 656 lc->requested_speed = speed;
647 lc->requested_duplex = cmd->duplex; 657 lc->requested_duplex = cmd->base.duplex;
648 lc->advertising = 0; 658 lc->advertising = 0;
649 } else { 659 } else {
650 cmd->advertising &= ADVERTISED_MASK; 660 advertising &= ADVERTISED_MASK;
651 if (cmd->advertising & (cmd->advertising - 1)) 661 if (advertising & (advertising - 1))
652 cmd->advertising = lc->supported; 662 advertising = lc->supported;
653 cmd->advertising &= lc->supported; 663 advertising &= lc->supported;
654 if (!cmd->advertising) 664 if (!advertising)
655 return -EINVAL; 665 return -EINVAL;
656 lc->requested_speed = SPEED_INVALID; 666 lc->requested_speed = SPEED_INVALID;
657 lc->requested_duplex = DUPLEX_INVALID; 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 if (netif_running(dev)) 671 if (netif_running(dev))
662 t1_link_start(p->phy, p->mac, lc); 672 t1_link_start(p->phy, p->mac, lc);
663 return 0; 673 return 0;
@@ -788,8 +798,6 @@ static int get_eeprom(struct net_device *dev, struct ethtool_eeprom *e,
788} 798}
789 799
790static const struct ethtool_ops t1_ethtool_ops = { 800static const struct ethtool_ops t1_ethtool_ops = {
791 .get_settings = get_settings,
792 .set_settings = set_settings,
793 .get_drvinfo = get_drvinfo, 801 .get_drvinfo = get_drvinfo,
794 .get_msglevel = get_msglevel, 802 .get_msglevel = get_msglevel,
795 .set_msglevel = set_msglevel, 803 .set_msglevel = set_msglevel,
@@ -807,6 +815,8 @@ static const struct ethtool_ops t1_ethtool_ops = {
807 .get_ethtool_stats = get_stats, 815 .get_ethtool_stats = get_stats,
808 .get_regs_len = get_regs_len, 816 .get_regs_len = get_regs_len,
809 .get_regs = get_regs, 817 .get_regs = get_regs,
818 .get_link_ksettings = get_link_ksettings,
819 .set_link_ksettings = set_link_ksettings,
810}; 820};
811 821
812static int t1_ioctl(struct net_device *dev, struct ifreq *req, int cmd) 822static int t1_ioctl(struct net_device *dev, struct ifreq *req, int cmd)