diff options
Diffstat (limited to 'net/bluetooth/af_bluetooth.c')
-rw-r--r-- | net/bluetooth/af_bluetooth.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/net/bluetooth/af_bluetooth.c b/net/bluetooth/af_bluetooth.c index d366423c8392..88afe25003d8 100644 --- a/net/bluetooth/af_bluetooth.c +++ b/net/bluetooth/af_bluetooth.c | |||
@@ -36,6 +36,7 @@ | |||
36 | #include <linux/init.h> | 36 | #include <linux/init.h> |
37 | #include <linux/poll.h> | 37 | #include <linux/poll.h> |
38 | #include <net/sock.h> | 38 | #include <net/sock.h> |
39 | #include <asm/ioctls.h> | ||
39 | 40 | ||
40 | #if defined(CONFIG_KMOD) | 41 | #if defined(CONFIG_KMOD) |
41 | #include <linux/kmod.h> | 42 | #include <linux/kmod.h> |
@@ -266,6 +267,8 @@ int bt_sock_recvmsg(struct kiocb *iocb, struct socket *sock, | |||
266 | 267 | ||
267 | skb_reset_transport_header(skb); | 268 | skb_reset_transport_header(skb); |
268 | err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied); | 269 | err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied); |
270 | if (err == 0) | ||
271 | sock_recv_timestamp(msg, sk, skb); | ||
269 | 272 | ||
270 | skb_free_datagram(sk, skb); | 273 | skb_free_datagram(sk, skb); |
271 | 274 | ||
@@ -329,6 +332,31 @@ unsigned int bt_sock_poll(struct file * file, struct socket *sock, poll_table *w | |||
329 | } | 332 | } |
330 | EXPORT_SYMBOL(bt_sock_poll); | 333 | EXPORT_SYMBOL(bt_sock_poll); |
331 | 334 | ||
335 | int bt_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) | ||
336 | { | ||
337 | struct sock *sk = sock->sk; | ||
338 | int err; | ||
339 | |||
340 | BT_DBG("sk %p cmd %x arg %lx", sk, cmd, arg); | ||
341 | |||
342 | switch (cmd) { | ||
343 | case SIOCGSTAMP: | ||
344 | err = sock_get_timestamp(sk, (struct timeval __user *) arg); | ||
345 | break; | ||
346 | |||
347 | case SIOCGSTAMPNS: | ||
348 | err = sock_get_timestampns(sk, (struct timespec __user *) arg); | ||
349 | break; | ||
350 | |||
351 | default: | ||
352 | err = -ENOIOCTLCMD; | ||
353 | break; | ||
354 | } | ||
355 | |||
356 | return err; | ||
357 | } | ||
358 | EXPORT_SYMBOL(bt_sock_ioctl); | ||
359 | |||
332 | int bt_sock_wait_state(struct sock *sk, int state, unsigned long timeo) | 360 | int bt_sock_wait_state(struct sock *sk, int state, unsigned long timeo) |
333 | { | 361 | { |
334 | DECLARE_WAITQUEUE(wait, current); | 362 | DECLARE_WAITQUEUE(wait, current); |