net/mlx5e: IPoIB, Add ioctl support to IPoIB device driver
authorFeras Daoud <ferasda@mellanox.com>
Thu, 1 Jun 2017 11:56:17 +0000 (14:56 +0300)
committerSaeed Mahameed <saeedm@mellanox.com>
Mon, 19 Jun 2017 15:40:20 +0000 (18:40 +0300)
Add ioctl support to IPoIB device driver. For now, this
ioctl will support timestamp get and set.

Signed-off-by: Feras Daoud <ferasda@mellanox.com>
Signed-off-by: Eitan Rabin <rabin@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
drivers/net/ethernet/mellanox/mlx5/core/en.h
drivers/net/ethernet/mellanox/mlx5/core/en_clock.c
drivers/net/ethernet/mellanox/mlx5/core/en_main.c
drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c

index 626683f0f4870f2ea8c02cee627c6735495da593..5d9ace493d85d25e2b5ca3534c409bc5485a6e18 100644 (file)
@@ -853,8 +853,8 @@ void mlx5e_timestamp_init(struct mlx5e_priv *priv);
 void mlx5e_timestamp_cleanup(struct mlx5e_priv *priv);
 void mlx5e_pps_event_handler(struct mlx5e_priv *priv,
                             struct ptp_clock_event *event);
-int mlx5e_hwstamp_set(struct net_device *dev, struct ifreq *ifr);
-int mlx5e_hwstamp_get(struct net_device *dev, struct ifreq *ifr);
+int mlx5e_hwstamp_set(struct mlx5e_priv *priv, struct ifreq *ifr);
+int mlx5e_hwstamp_get(struct mlx5e_priv *priv, struct ifreq *ifr);
 int mlx5e_modify_rx_cqe_compression_locked(struct mlx5e_priv *priv, bool val);
 
 int mlx5e_vlan_rx_add_vid(struct net_device *dev, __always_unused __be16 proto,
index e29494464cae9cea6e0af45337d3eac0e9168117..66f432385dbbd5ea6ce3ceb256abb7ce6dada7b0 100644 (file)
@@ -86,9 +86,8 @@ static void mlx5e_timestamp_overflow(struct work_struct *work)
        schedule_delayed_work(&tstamp->overflow_work, tstamp->overflow_period);
 }
 
-int mlx5e_hwstamp_set(struct net_device *dev, struct ifreq *ifr)
+int mlx5e_hwstamp_set(struct mlx5e_priv *priv, struct ifreq *ifr)
 {
-       struct mlx5e_priv *priv = netdev_priv(dev);
        struct hwtstamp_config config;
        int err;
 
@@ -130,10 +129,10 @@ int mlx5e_hwstamp_set(struct net_device *dev, struct ifreq *ifr)
        case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
        case HWTSTAMP_FILTER_NTP_ALL:
                /* Disable CQE compression */
-               netdev_warn(dev, "Disabling cqe compression");
+               netdev_warn(priv->netdev, "Disabling cqe compression");
                err = mlx5e_modify_rx_cqe_compression_locked(priv, false);
                if (err) {
-                       netdev_err(dev, "Failed disabling cqe compression err=%d\n", err);
+                       netdev_err(priv->netdev, "Failed disabling cqe compression err=%d\n", err);
                        mutex_unlock(&priv->state_lock);
                        return err;
                }
@@ -151,9 +150,8 @@ int mlx5e_hwstamp_set(struct net_device *dev, struct ifreq *ifr)
                            sizeof(config)) ? -EFAULT : 0;
 }
 
-int mlx5e_hwstamp_get(struct net_device *dev, struct ifreq *ifr)
+int mlx5e_hwstamp_get(struct mlx5e_priv *priv, struct ifreq *ifr)
 {
-       struct mlx5e_priv *priv = netdev_priv(dev);
        struct hwtstamp_config *cfg = &priv->tstamp.hwtstamp_config;
 
        if (!MLX5_CAP_GEN(priv->mdev, device_frequency_khz))
index de1e936fc2bec9d9384561099d40d6acfa0fb704..20ee29a2209e0d1a3893e621efd4aef09ba86414 100644 (file)
@@ -3317,11 +3317,13 @@ out:
 
 static int mlx5e_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
 {
+       struct mlx5e_priv *priv = netdev_priv(dev);
+
        switch (cmd) {
        case SIOCSHWTSTAMP:
-               return mlx5e_hwstamp_set(dev, ifr);
+               return mlx5e_hwstamp_set(priv, ifr);
        case SIOCGHWTSTAMP:
-               return mlx5e_hwstamp_get(dev, ifr);
+               return mlx5e_hwstamp_get(priv, ifr);
        default:
                return -EOPNOTSUPP;
        }
index 58bf0665f50b73b070fcd9b404bea1d7749687a4..1ee5bce8590118a2075bfd4ce2cc52d0da8c1f27 100644 (file)
@@ -43,6 +43,7 @@ static int mlx5i_close(struct net_device *netdev);
 static int  mlx5i_dev_init(struct net_device *dev);
 static void mlx5i_dev_cleanup(struct net_device *dev);
 static int mlx5i_change_mtu(struct net_device *netdev, int new_mtu);
+static int mlx5i_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd);
 
 static const struct net_device_ops mlx5i_netdev_ops = {
        .ndo_open                = mlx5i_open,
@@ -50,6 +51,7 @@ static const struct net_device_ops mlx5i_netdev_ops = {
        .ndo_init                = mlx5i_dev_init,
        .ndo_uninit              = mlx5i_dev_cleanup,
        .ndo_change_mtu          = mlx5i_change_mtu,
+       .ndo_do_ioctl            = mlx5i_ioctl,
 };
 
 /* IPoIB mlx5 netdev profile */
@@ -356,6 +358,20 @@ static int mlx5i_dev_init(struct net_device *dev)
        return 0;
 }
 
+static int mlx5i_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
+{
+       struct mlx5e_priv *priv = mlx5i_epriv(dev);
+
+       switch (cmd) {
+       case SIOCSHWTSTAMP:
+               return mlx5e_hwstamp_set(priv, ifr);
+       case SIOCGHWTSTAMP:
+               return mlx5e_hwstamp_get(priv, ifr);
+       default:
+               return -EOPNOTSUPP;
+       }
+}
+
 static void mlx5i_dev_cleanup(struct net_device *dev)
 {
        struct mlx5e_priv    *priv   = mlx5i_epriv(dev);