On Thu, 2016-02-18 at 22:40 +0000, woojung....@microchip.com wrote:
> Add ethtool operations of set_pauseram and get_pauseparm.
[...]
> +static void lan78xx_get_pause(struct net_device *net,
> +                           struct ethtool_pauseparam *pause)
> +{
> +     struct lan78xx_net *dev = netdev_priv(net);
> +     struct phy_device *phydev = net->phydev;
> +     struct ethtool_cmd ecmd = { .cmd = ETHTOOL_GSET };
> +
> +     phy_ethtool_gset(phydev, &ecmd);
> +
> +     pause->autoneg = dev->fc_autoneg;
> +
> +     if (dev->fc_autoneg) {
> +             if (dev->fc_autoneg_control & FLOW_CTRL_TX)
> +                     pause->tx_pause = 1;
> +
> +             if (dev->fc_autoneg_control & FLOW_CTRL_RX)
> +                     pause->rx_pause = 1;

This is incorrect; you should always return the manual settings
(fc_request_control flags) here.  If autonegotiation is enabled then
your get_settings function will return the actual pause flags.

Ben.


> +     } else {
> +             if (dev->fc_request_control & FLOW_CTRL_TX)
> +                     pause->tx_pause = 1;
> +
> +             if (dev->fc_request_control & FLOW_CTRL_RX)
> +                     pause->rx_pause = 1;
> +     }
> +}
[...]

-- 
Ben Hutchings
Once a job is fouled up, anything done to improve it makes it worse.

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to