diff options
| author | David S. Miller <davem@davemloft.net> | 2013-12-05 19:45:14 -0500 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2013-12-05 19:45:14 -0500 |
| commit | 426e1fa31e0d8e982891e801c80b84b74f209f10 (patch) | |
| tree | bc53409418ffa918fb3f175639bc5c9245c4219f /drivers/net/ethernet/neterion | |
| parent | e1ca87bb1b64b044163e686ff3bb71405156c561 (diff) | |
| parent | a4bcc795e9cc84902b86edbfbb755ecb38d11f91 (diff) | |
Merge branch 'siocghwtstamp' of git://git.kernel.org/pub/scm/linux/kernel/git/bwh/sfc-next
Ben Hutchings says:
====================
SIOCGHWTSTAMP ioctl
1. Add the SIOCGHWTSTAMP ioctl and update the timestamping
documentation.
2. Implement SIOCGHWTSTAMP in most drivers that support SIOCSHWTSTAMP.
3. Add a test program to exercise SIOC{G,S}HWTSTAMP.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/neterion')
| -rw-r--r-- | drivers/net/ethernet/neterion/vxge/vxge-main.c | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/drivers/net/ethernet/neterion/vxge/vxge-main.c b/drivers/net/ethernet/neterion/vxge/vxge-main.c index f9876ea8c8bf..5d4ad589ebf3 100644 --- a/drivers/net/ethernet/neterion/vxge/vxge-main.c +++ b/drivers/net/ethernet/neterion/vxge/vxge-main.c | |||
| @@ -3189,7 +3189,7 @@ static enum vxge_hw_status vxge_timestamp_config(struct __vxge_hw_device *devh) | |||
| 3189 | return status; | 3189 | return status; |
| 3190 | } | 3190 | } |
| 3191 | 3191 | ||
| 3192 | static int vxge_hwtstamp_ioctl(struct vxgedev *vdev, void __user *data) | 3192 | static int vxge_hwtstamp_set(struct vxgedev *vdev, void __user *data) |
| 3193 | { | 3193 | { |
| 3194 | struct hwtstamp_config config; | 3194 | struct hwtstamp_config config; |
| 3195 | int i; | 3195 | int i; |
| @@ -3250,6 +3250,21 @@ static int vxge_hwtstamp_ioctl(struct vxgedev *vdev, void __user *data) | |||
| 3250 | return 0; | 3250 | return 0; |
| 3251 | } | 3251 | } |
| 3252 | 3252 | ||
| 3253 | static int vxge_hwtstamp_get(struct vxgedev *vdev, void __user *data) | ||
| 3254 | { | ||
| 3255 | struct hwtstamp_config config; | ||
| 3256 | |||
| 3257 | config.flags = 0; | ||
| 3258 | config.tx_type = HWTSTAMP_TX_OFF; | ||
| 3259 | config.rx_filter = (vdev->rx_hwts ? | ||
| 3260 | HWTSTAMP_FILTER_ALL : HWTSTAMP_FILTER_NONE); | ||
| 3261 | |||
| 3262 | if (copy_to_user(data, &config, sizeof(config))) | ||
| 3263 | return -EFAULT; | ||
| 3264 | |||
| 3265 | return 0; | ||
| 3266 | } | ||
| 3267 | |||
| 3253 | /** | 3268 | /** |
| 3254 | * vxge_ioctl | 3269 | * vxge_ioctl |
| 3255 | * @dev: Device pointer. | 3270 | * @dev: Device pointer. |
| @@ -3263,19 +3278,15 @@ static int vxge_hwtstamp_ioctl(struct vxgedev *vdev, void __user *data) | |||
| 3263 | static int vxge_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) | 3278 | static int vxge_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) |
| 3264 | { | 3279 | { |
| 3265 | struct vxgedev *vdev = netdev_priv(dev); | 3280 | struct vxgedev *vdev = netdev_priv(dev); |
| 3266 | int ret; | ||
| 3267 | 3281 | ||
| 3268 | switch (cmd) { | 3282 | switch (cmd) { |
| 3269 | case SIOCSHWTSTAMP: | 3283 | case SIOCSHWTSTAMP: |
| 3270 | ret = vxge_hwtstamp_ioctl(vdev, rq->ifr_data); | 3284 | return vxge_hwtstamp_set(vdev, rq->ifr_data); |
| 3271 | if (ret) | 3285 | case SIOCGHWTSTAMP: |
| 3272 | return ret; | 3286 | return vxge_hwtstamp_get(vdev, rq->ifr_data); |
| 3273 | break; | ||
| 3274 | default: | 3287 | default: |
| 3275 | return -EOPNOTSUPP; | 3288 | return -EOPNOTSUPP; |
| 3276 | } | 3289 | } |
| 3277 | |||
| 3278 | return 0; | ||
| 3279 | } | 3290 | } |
| 3280 | 3291 | ||
| 3281 | /** | 3292 | /** |
