On Mon, Jul 22, 2019 at 02:40:17PM -0700, Shannon Nelson wrote:

> +static void ionic_get_pauseparam(struct net_device *netdev,
> +                              struct ethtool_pauseparam *pause)
> +{
> +     struct lif *lif = netdev_priv(netdev);
> +     struct ionic_dev *idev = &lif->ionic->idev;
> +     uint8_t pause_type = idev->port_info->config.pause_type;
> +
> +     pause->autoneg = 0;
> +
> +     if (pause_type) {
> +             pause->rx_pause = pause_type & IONIC_PAUSE_F_RX ? 1 : 0;
> +             pause->tx_pause = pause_type & IONIC_PAUSE_F_TX ? 1 : 0;
> +     }
> +}
> +
> +static int ionic_set_pauseparam(struct net_device *netdev,
> +                             struct ethtool_pauseparam *pause)
> +{
> +     struct lif *lif = netdev_priv(netdev);
> +     struct ionic *ionic = lif->ionic;
> +     struct ionic_dev *idev = &lif->ionic->idev;
> +     u32 requested_pause;
> +     int err;
> +
> +     if (pause->autoneg == AUTONEG_ENABLE) {
> +             netdev_info(netdev, "Please use 'ethtool -s ...' to change 
> autoneg\n");
> +             return -EOPNOTSUPP;
> +     }
> +
> +     /* change both at the same time */
> +     requested_pause = PORT_PAUSE_TYPE_LINK;
> +     if (pause->rx_pause)
> +             requested_pause |= IONIC_PAUSE_F_RX;
> +     if (pause->tx_pause)
> +             requested_pause |= IONIC_PAUSE_F_TX;

Hi Shannon

This not what i was expecting, and i'm guessing what you have here is
not right.

So you don't support the case of pause->autoneg ==
AUTONEG_ENABLE. That implies that setting pause values directly
configures the MAC. The values from auto-neg are always ignored. Then
why did you set PAUSE in the get ksettings function?

If you always ignore the values from auto-neg, then your info message
also makes no sense.

What really does the firmware do?

     Andrew

Reply via email to