phy.c (3c1bcc8614db10803f1f57ef0295363917448cb2) phy.c (c0ec3c2736774c69bf5c641aea7712132c0f0eba)
1/* Framework for configuring and reading PHY devices
2 * Based on code in sungem_phy.c and gianfar_phy.c
3 *
4 * Author: Andy Fleming
5 *
6 * Copyright (c) 2004 Freescale Semiconductor, Inc.
7 * Copyright (c) 2006, 2007 Maciej W. Rozycki
8 *

--- 354 unchanged lines hidden (view full) ---

363}
364EXPORT_SYMBOL(phy_ethtool_ksettings_set);
365
366void phy_ethtool_ksettings_get(struct phy_device *phydev,
367 struct ethtool_link_ksettings *cmd)
368{
369 linkmode_copy(cmd->link_modes.supported, phydev->supported);
370 linkmode_copy(cmd->link_modes.advertising, phydev->advertising);
1/* Framework for configuring and reading PHY devices
2 * Based on code in sungem_phy.c and gianfar_phy.c
3 *
4 * Author: Andy Fleming
5 *
6 * Copyright (c) 2004 Freescale Semiconductor, Inc.
7 * Copyright (c) 2006, 2007 Maciej W. Rozycki
8 *

--- 354 unchanged lines hidden (view full) ---

363}
364EXPORT_SYMBOL(phy_ethtool_ksettings_set);
365
366void phy_ethtool_ksettings_get(struct phy_device *phydev,
367 struct ethtool_link_ksettings *cmd)
368{
369 linkmode_copy(cmd->link_modes.supported, phydev->supported);
370 linkmode_copy(cmd->link_modes.advertising, phydev->advertising);
371 linkmode_copy(cmd->link_modes.lp_advertising, phydev->lp_advertising);
371
372
372 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.lp_advertising,
373 phydev->lp_advertising);
374
375 cmd->base.speed = phydev->speed;
376 cmd->base.duplex = phydev->duplex;
377 if (phydev->interface == PHY_INTERFACE_MODE_MOCA)
378 cmd->base.port = PORT_BNC;
379 else
380 cmd->base.port = PORT_MII;
381 cmd->base.transceiver = phy_is_internal(phydev) ?
382 XCVR_INTERNAL : XCVR_EXTERNAL;

--- 161 unchanged lines hidden (view full) ---

544 return -EIO;
545
546 mutex_lock(&phydev->lock);
547
548 if (AUTONEG_DISABLE == phydev->autoneg)
549 phy_sanitize_settings(phydev);
550
551 /* Invalidate LP advertising flags */
373 cmd->base.speed = phydev->speed;
374 cmd->base.duplex = phydev->duplex;
375 if (phydev->interface == PHY_INTERFACE_MODE_MOCA)
376 cmd->base.port = PORT_BNC;
377 else
378 cmd->base.port = PORT_MII;
379 cmd->base.transceiver = phy_is_internal(phydev) ?
380 XCVR_INTERNAL : XCVR_EXTERNAL;

--- 161 unchanged lines hidden (view full) ---

542 return -EIO;
543
544 mutex_lock(&phydev->lock);
545
546 if (AUTONEG_DISABLE == phydev->autoneg)
547 phy_sanitize_settings(phydev);
548
549 /* Invalidate LP advertising flags */
552 phydev->lp_advertising = 0;
550 linkmode_zero(phydev->lp_advertising);
553
554 err = phy_config_aneg(phydev);
555 if (err < 0)
556 goto out_unlock;
557
558 if (phydev->state != PHY_HALTED) {
559 if (AUTONEG_ENABLE == phydev->autoneg) {
560 err = phy_check_link_status(phydev);

--- 44 unchanged lines hidden (view full) ---

605 __ETHTOOL_DECLARE_LINK_MODE_MASK(adv_old);
606 __ETHTOOL_DECLARE_LINK_MODE_MASK(adv);
607 int ret;
608
609 if (phydev->autoneg != AUTONEG_ENABLE)
610 return 0;
611
612 linkmode_copy(adv_old, phydev->advertising);
551
552 err = phy_config_aneg(phydev);
553 if (err < 0)
554 goto out_unlock;
555
556 if (phydev->state != PHY_HALTED) {
557 if (AUTONEG_ENABLE == phydev->autoneg) {
558 err = phy_check_link_status(phydev);

--- 44 unchanged lines hidden (view full) ---

603 __ETHTOOL_DECLARE_LINK_MODE_MASK(adv_old);
604 __ETHTOOL_DECLARE_LINK_MODE_MASK(adv);
605 int ret;
606
607 if (phydev->autoneg != AUTONEG_ENABLE)
608 return 0;
609
610 linkmode_copy(adv_old, phydev->advertising);
613 ethtool_convert_legacy_u32_to_link_mode(adv, phydev->lp_advertising);
611 linkmode_copy(adv, phydev->lp_advertising);
614 linkmode_and(adv, adv, phydev->supported);
615
616 if (linkmode_test_bit(ETHTOOL_LINK_MODE_10baseT_Half_BIT, adv) ||
617 linkmode_test_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT, adv)) {
618 linkmode_clear_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT,
619 phydev->advertising);
620 linkmode_clear_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT,
621 phydev->advertising);

--- 638 unchanged lines hidden ---
612 linkmode_and(adv, adv, phydev->supported);
613
614 if (linkmode_test_bit(ETHTOOL_LINK_MODE_10baseT_Half_BIT, adv) ||
615 linkmode_test_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT, adv)) {
616 linkmode_clear_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT,
617 phydev->advertising);
618 linkmode_clear_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT,
619 phydev->advertising);

--- 638 unchanged lines hidden ---