lkml.org 
[lkml]   [2020]   [Jul]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v5 08/10] net: eth: altera: add support for ptp and timestamping
    On Mon, Jul 27, 2020 at 05:21:55PM +0800, Ooi, Joyce wrote:

    > +/* ioctl to configure timestamping */
    > +static int tse_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
    > +{
    > + struct altera_tse_private *priv = netdev_priv(dev);
    > + struct hwtstamp_config config;
    > +
    > + if (!netif_running(dev))
    > + return -EINVAL;
    > +
    > + if (!priv->has_ptp) {
    > + netdev_alert(priv->dev, "Timestamping not supported");
    > + return -EOPNOTSUPP;
    > + }

    The user might well have a PHY that supports time stamping. The code
    must pass the ioctl through to the PHY even when !priv->has_ptp.

    > +
    > + if (!dev->phydev)
    > + return -EINVAL;
    > +
    > + if (!phy_has_hwtstamp(dev->phydev)) {
    > + if (cmd == SIOCSHWTSTAMP) {
    > + if (copy_from_user(&config, ifr->ifr_data,
    > + sizeof(struct hwtstamp_config)))
    > + return -EFAULT;
    > +
    > + if (config.flags)
    > + return -EINVAL;
    > +
    > + switch (config.tx_type) {
    > + case HWTSTAMP_TX_OFF:
    > + priv->hwts_tx_en = 0;
    > + break;
    > + case HWTSTAMP_TX_ON:
    > + priv->hwts_tx_en = 1;
    > + break;
    > + default:
    > + return -ERANGE;
    > + }
    > +
    > + switch (config.rx_filter) {
    > + case HWTSTAMP_FILTER_NONE:
    > + priv->hwts_rx_en = 0;
    > + config.rx_filter = HWTSTAMP_FILTER_NONE;
    > + break;
    > + default:
    > + priv->hwts_rx_en = 1;
    > + config.rx_filter = HWTSTAMP_FILTER_ALL;
    > + break;
    > + }
    > +
    > + if (copy_to_user(ifr->ifr_data, &config,
    > + sizeof(struct hwtstamp_config)))
    > + return -EFAULT;
    > + else
    > + return 0;
    > + }
    > +
    > + if (cmd == SIOCGHWTSTAMP) {
    > + config.flags = 0;
    > +
    > + if (priv->hwts_tx_en)
    > + config.tx_type = HWTSTAMP_TX_ON;
    > + else
    > + config.tx_type = HWTSTAMP_TX_OFF;
    > +
    > + if (priv->hwts_rx_en)
    > + config.rx_filter = HWTSTAMP_FILTER_ALL;
    > + else
    > + config.rx_filter = HWTSTAMP_FILTER_NONE;
    > +
    > + if (copy_to_user(ifr->ifr_data, &config,
    > + sizeof(struct hwtstamp_config)))
    > + return -EFAULT;
    > + else
    > + return 0;
    > + }
    > + }
    > +
    > + return phy_mii_ioctl(dev->phydev, ifr, cmd);
    > +}

    Thanks,
    Richard

    \
     
     \ /
      Last update: 2020-07-27 16:29    [W:5.476 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site