vxge: Implement the SIOCGHWTSTAMP ioctl
authorBen Hutchings <bhutchings@solarflare.com>
Mon, 18 Nov 2013 23:16:23 +0000 (23:16 +0000)
committerBen Hutchings <bhutchings@solarflare.com>
Thu, 21 Nov 2013 17:17:41 +0000 (17:17 +0000)
Compile-tested only.

Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
drivers/net/ethernet/neterion/vxge/vxge-main.c

index 8614eeb..33f98ec 100644 (file)
@@ -3185,7 +3185,7 @@ static enum vxge_hw_status vxge_timestamp_config(struct __vxge_hw_device *devh)
        return status;
 }
 
-static int vxge_hwtstamp_ioctl(struct vxgedev *vdev, void __user *data)
+static int vxge_hwtstamp_set(struct vxgedev *vdev, void __user *data)
 {
        struct hwtstamp_config config;
        int i;
@@ -3246,6 +3246,21 @@ static int vxge_hwtstamp_ioctl(struct vxgedev *vdev, void __user *data)
        return 0;
 }
 
+static int vxge_hwtstamp_get(struct vxgedev *vdev, void __user *data)
+{
+       struct hwtstamp_config config;
+
+       config.flags = 0;
+       config.tx_type = HWTSTAMP_TX_OFF;
+       config.rx_filter = (vdev->rx_hwts ?
+                           HWTSTAMP_FILTER_ALL : HWTSTAMP_FILTER_NONE);
+
+       if (copy_to_user(data, &config, sizeof(config)))
+               return -EFAULT;
+
+       return 0;
+}
+
 /**
  * vxge_ioctl
  * @dev: Device pointer.
@@ -3259,19 +3274,15 @@ static int vxge_hwtstamp_ioctl(struct vxgedev *vdev, void __user *data)
 static int vxge_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
 {
        struct vxgedev *vdev = netdev_priv(dev);
-       int ret;
 
        switch (cmd) {
        case SIOCSHWTSTAMP:
-               ret = vxge_hwtstamp_ioctl(vdev, rq->ifr_data);
-               if (ret)
-                       return ret;
-               break;
+               return vxge_hwtstamp_set(vdev, rq->ifr_data);
+       case SIOCGHWTSTAMP:
+               return vxge_hwtstamp_get(vdev, rq->ifr_data);
        default:
                return -EOPNOTSUPP;
        }
-
-       return 0;
 }
 
 /**