diff options
author | Philippe Reynes <tremyfr@gmail.com> | 2016-12-11 16:47:50 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-12-17 21:31:41 -0500 |
commit | 49cad93909b18acf942b70356e65eeeaa9ca9d23 (patch) | |
tree | 3701a4131db49786a53d884eb92ee1050660fb83 /drivers/net/ethernet | |
parent | 6219d05506b66e3157efa48b1b39042b04280ce1 (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.c | 64 |
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 | ||
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 | 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 | ||
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 | 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 | ||
790 | static const struct ethtool_ops t1_ethtool_ops = { | 800 | static 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 | ||
812 | static int t1_ioctl(struct net_device *dev, struct ifreq *req, int cmd) | 822 | static int t1_ioctl(struct net_device *dev, struct ifreq *req, int cmd) |