Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[pandora-kernel.git] / net / bluetooth / sco.c
1 /*
2    BlueZ - Bluetooth protocol stack for Linux
3    Copyright (C) 2000-2001 Qualcomm Incorporated
4
5    Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License version 2 as
9    published by the Free Software Foundation;
10
11    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
14    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
16    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19
20    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
22    SOFTWARE IS DISCLAIMED.
23 */
24
25 /* Bluetooth SCO sockets. */
26
27 #include <linux/module.h>
28 #include <linux/debugfs.h>
29 #include <linux/seq_file.h>
30
31 #include <net/bluetooth/bluetooth.h>
32 #include <net/bluetooth/hci_core.h>
33 #include <net/bluetooth/sco.h>
34
35 static bool disable_esco;
36
37 static const struct proto_ops sco_sock_ops;
38
39 static struct bt_sock_list sco_sk_list = {
40         .lock = __RW_LOCK_UNLOCKED(sco_sk_list.lock)
41 };
42
43 /* ---- SCO connections ---- */
44 struct sco_conn {
45         struct hci_conn *hcon;
46
47         spinlock_t      lock;
48         struct sock     *sk;
49
50         unsigned int    mtu;
51 };
52
53 #define sco_conn_lock(c)        spin_lock(&c->lock);
54 #define sco_conn_unlock(c)      spin_unlock(&c->lock);
55
56 static void sco_sock_close(struct sock *sk);
57 static void sco_sock_kill(struct sock *sk);
58
59 /* ----- SCO socket info ----- */
60 #define sco_pi(sk) ((struct sco_pinfo *) sk)
61
62 struct sco_pinfo {
63         struct bt_sock  bt;
64         bdaddr_t        src;
65         bdaddr_t        dst;
66         __u32           flags;
67         __u16           setting;
68         struct sco_conn *conn;
69 };
70
71 /* ---- SCO timers ---- */
72 #define SCO_CONN_TIMEOUT        (HZ * 40)
73 #define SCO_DISCONN_TIMEOUT     (HZ * 2)
74
75 static void sco_sock_timeout(unsigned long arg)
76 {
77         struct sock *sk = (struct sock *) arg;
78
79         BT_DBG("sock %p state %d", sk, sk->sk_state);
80
81         bh_lock_sock(sk);
82         sk->sk_err = ETIMEDOUT;
83         sk->sk_state_change(sk);
84         bh_unlock_sock(sk);
85
86         sco_sock_kill(sk);
87         sock_put(sk);
88 }
89
90 static void sco_sock_set_timer(struct sock *sk, long timeout)
91 {
92         BT_DBG("sock %p state %d timeout %ld", sk, sk->sk_state, timeout);
93         sk_reset_timer(sk, &sk->sk_timer, jiffies + timeout);
94 }
95
96 static void sco_sock_clear_timer(struct sock *sk)
97 {
98         BT_DBG("sock %p state %d", sk, sk->sk_state);
99         sk_stop_timer(sk, &sk->sk_timer);
100 }
101
102 /* ---- SCO connections ---- */
103 static struct sco_conn *sco_conn_add(struct hci_conn *hcon)
104 {
105         struct hci_dev *hdev = hcon->hdev;
106         struct sco_conn *conn = hcon->sco_data;
107
108         if (conn)
109                 return conn;
110
111         conn = kzalloc(sizeof(struct sco_conn), GFP_KERNEL);
112         if (!conn)
113                 return NULL;
114
115         spin_lock_init(&conn->lock);
116
117         hcon->sco_data = conn;
118         conn->hcon = hcon;
119
120         if (hdev->sco_mtu > 0)
121                 conn->mtu = hdev->sco_mtu;
122         else
123                 conn->mtu = 60;
124
125         BT_DBG("hcon %p conn %p", hcon, conn);
126
127         return conn;
128 }
129
130 /* Delete channel.
131  * Must be called on the locked socket. */
132 static void sco_chan_del(struct sock *sk, int err)
133 {
134         struct sco_conn *conn;
135
136         conn = sco_pi(sk)->conn;
137
138         BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
139
140         if (conn) {
141                 sco_conn_lock(conn);
142                 conn->sk = NULL;
143                 sco_pi(sk)->conn = NULL;
144                 sco_conn_unlock(conn);
145
146                 if (conn->hcon)
147                         hci_conn_drop(conn->hcon);
148         }
149
150         sk->sk_state = BT_CLOSED;
151         sk->sk_err   = err;
152         sk->sk_state_change(sk);
153
154         sock_set_flag(sk, SOCK_ZAPPED);
155 }
156
157 static int sco_conn_del(struct hci_conn *hcon, int err)
158 {
159         struct sco_conn *conn = hcon->sco_data;
160         struct sock *sk;
161
162         if (!conn)
163                 return 0;
164
165         BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
166
167         /* Kill socket */
168         sco_conn_lock(conn);
169         sk = conn->sk;
170         sco_conn_unlock(conn);
171
172         if (sk) {
173                 bh_lock_sock(sk);
174                 sco_sock_clear_timer(sk);
175                 sco_chan_del(sk, err);
176                 bh_unlock_sock(sk);
177                 sco_sock_kill(sk);
178         }
179
180         hcon->sco_data = NULL;
181         kfree(conn);
182         return 0;
183 }
184
185 static void __sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent)
186 {
187         BT_DBG("conn %p", conn);
188
189         sco_pi(sk)->conn = conn;
190         conn->sk = sk;
191
192         if (parent)
193                 bt_accept_enqueue(parent, sk);
194 }
195
196 static int sco_chan_add(struct sco_conn *conn, struct sock *sk,
197                         struct sock *parent)
198 {
199         int err = 0;
200
201         sco_conn_lock(conn);
202         if (conn->sk)
203                 err = -EBUSY;
204         else
205                 __sco_chan_add(conn, sk, parent);
206
207         sco_conn_unlock(conn);
208         return err;
209 }
210
211 static int sco_connect(struct sock *sk)
212 {
213         struct sco_conn *conn;
214         struct hci_conn *hcon;
215         struct hci_dev  *hdev;
216         int err, type;
217
218         BT_DBG("%pMR -> %pMR", &sco_pi(sk)->src, &sco_pi(sk)->dst);
219
220         hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src);
221         if (!hdev)
222                 return -EHOSTUNREACH;
223
224         hci_dev_lock(hdev);
225
226         if (lmp_esco_capable(hdev) && !disable_esco)
227                 type = ESCO_LINK;
228         else
229                 type = SCO_LINK;
230
231         if (sco_pi(sk)->setting == BT_VOICE_TRANSPARENT &&
232             (!lmp_transp_capable(hdev) || !lmp_esco_capable(hdev))) {
233                 err = -EOPNOTSUPP;
234                 goto done;
235         }
236
237         hcon = hci_connect_sco(hdev, type, &sco_pi(sk)->dst,
238                                sco_pi(sk)->setting);
239         if (IS_ERR(hcon)) {
240                 err = PTR_ERR(hcon);
241                 goto done;
242         }
243
244         conn = sco_conn_add(hcon);
245         if (!conn) {
246                 hci_conn_drop(hcon);
247                 err = -ENOMEM;
248                 goto done;
249         }
250
251         /* Update source addr of the socket */
252         bacpy(&sco_pi(sk)->src, &hcon->src);
253
254         err = sco_chan_add(conn, sk, NULL);
255         if (err)
256                 goto done;
257
258         if (hcon->state == BT_CONNECTED) {
259                 sco_sock_clear_timer(sk);
260                 sk->sk_state = BT_CONNECTED;
261         } else {
262                 sk->sk_state = BT_CONNECT;
263                 sco_sock_set_timer(sk, sk->sk_sndtimeo);
264         }
265
266 done:
267         hci_dev_unlock(hdev);
268         hci_dev_put(hdev);
269         return err;
270 }
271
272 static int sco_send_frame(struct sock *sk, struct msghdr *msg, int len)
273 {
274         struct sco_conn *conn = sco_pi(sk)->conn;
275         struct sk_buff *skb;
276         int err;
277
278         /* Check outgoing MTU */
279         if (len > conn->mtu)
280                 return -EINVAL;
281
282         BT_DBG("sk %p len %d", sk, len);
283
284         skb = bt_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err);
285         if (!skb)
286                 return err;
287
288         if (memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len)) {
289                 kfree_skb(skb);
290                 return -EFAULT;
291         }
292
293         hci_send_sco(conn->hcon, skb);
294
295         return len;
296 }
297
298 static void sco_recv_frame(struct sco_conn *conn, struct sk_buff *skb)
299 {
300         struct sock *sk;
301
302         sco_conn_lock(conn);
303         sk = conn->sk;
304         sco_conn_unlock(conn);
305
306         if (!sk)
307                 goto drop;
308
309         BT_DBG("sk %p len %d", sk, skb->len);
310
311         if (sk->sk_state != BT_CONNECTED)
312                 goto drop;
313
314         if (!sock_queue_rcv_skb(sk, skb))
315                 return;
316
317 drop:
318         kfree_skb(skb);
319 }
320
321 /* -------- Socket interface ---------- */
322 static struct sock *__sco_get_sock_listen_by_addr(bdaddr_t *ba)
323 {
324         struct sock *sk;
325
326         sk_for_each(sk, &sco_sk_list.head) {
327                 if (sk->sk_state != BT_LISTEN)
328                         continue;
329
330                 if (!bacmp(&sco_pi(sk)->src, ba))
331                         return sk;
332         }
333
334         return NULL;
335 }
336
337 /* Find socket listening on source bdaddr.
338  * Returns closest match.
339  */
340 static struct sock *sco_get_sock_listen(bdaddr_t *src)
341 {
342         struct sock *sk = NULL, *sk1 = NULL;
343
344         read_lock(&sco_sk_list.lock);
345
346         sk_for_each(sk, &sco_sk_list.head) {
347                 if (sk->sk_state != BT_LISTEN)
348                         continue;
349
350                 /* Exact match. */
351                 if (!bacmp(&sco_pi(sk)->src, src))
352                         break;
353
354                 /* Closest match */
355                 if (!bacmp(&sco_pi(sk)->src, BDADDR_ANY))
356                         sk1 = sk;
357         }
358
359         read_unlock(&sco_sk_list.lock);
360
361         return sk ? sk : sk1;
362 }
363
364 static void sco_sock_destruct(struct sock *sk)
365 {
366         BT_DBG("sk %p", sk);
367
368         skb_queue_purge(&sk->sk_receive_queue);
369         skb_queue_purge(&sk->sk_write_queue);
370 }
371
372 static void sco_sock_cleanup_listen(struct sock *parent)
373 {
374         struct sock *sk;
375
376         BT_DBG("parent %p", parent);
377
378         /* Close not yet accepted channels */
379         while ((sk = bt_accept_dequeue(parent, NULL))) {
380                 sco_sock_close(sk);
381                 sco_sock_kill(sk);
382         }
383
384         parent->sk_state  = BT_CLOSED;
385         sock_set_flag(parent, SOCK_ZAPPED);
386 }
387
388 /* Kill socket (only if zapped and orphan)
389  * Must be called on unlocked socket.
390  */
391 static void sco_sock_kill(struct sock *sk)
392 {
393         if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
394                 return;
395
396         BT_DBG("sk %p state %d", sk, sk->sk_state);
397
398         /* Kill poor orphan */
399         bt_sock_unlink(&sco_sk_list, sk);
400         sock_set_flag(sk, SOCK_DEAD);
401         sock_put(sk);
402 }
403
404 static void __sco_sock_close(struct sock *sk)
405 {
406         BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
407
408         switch (sk->sk_state) {
409         case BT_LISTEN:
410                 sco_sock_cleanup_listen(sk);
411                 break;
412
413         case BT_CONNECTED:
414         case BT_CONFIG:
415                 if (sco_pi(sk)->conn->hcon) {
416                         sk->sk_state = BT_DISCONN;
417                         sco_sock_set_timer(sk, SCO_DISCONN_TIMEOUT);
418                         hci_conn_drop(sco_pi(sk)->conn->hcon);
419                         sco_pi(sk)->conn->hcon = NULL;
420                 } else
421                         sco_chan_del(sk, ECONNRESET);
422                 break;
423
424         case BT_CONNECT2:
425         case BT_CONNECT:
426         case BT_DISCONN:
427                 sco_chan_del(sk, ECONNRESET);
428                 break;
429
430         default:
431                 sock_set_flag(sk, SOCK_ZAPPED);
432                 break;
433         }
434 }
435
436 /* Must be called on unlocked socket. */
437 static void sco_sock_close(struct sock *sk)
438 {
439         sco_sock_clear_timer(sk);
440         lock_sock(sk);
441         __sco_sock_close(sk);
442         release_sock(sk);
443         sco_sock_kill(sk);
444 }
445
446 static void sco_sock_init(struct sock *sk, struct sock *parent)
447 {
448         BT_DBG("sk %p", sk);
449
450         if (parent) {
451                 sk->sk_type = parent->sk_type;
452                 bt_sk(sk)->flags = bt_sk(parent)->flags;
453                 security_sk_clone(parent, sk);
454         }
455 }
456
457 static struct proto sco_proto = {
458         .name           = "SCO",
459         .owner          = THIS_MODULE,
460         .obj_size       = sizeof(struct sco_pinfo)
461 };
462
463 static struct sock *sco_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio)
464 {
465         struct sock *sk;
466
467         sk = sk_alloc(net, PF_BLUETOOTH, prio, &sco_proto);
468         if (!sk)
469                 return NULL;
470
471         sock_init_data(sock, sk);
472         INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
473
474         sk->sk_destruct = sco_sock_destruct;
475         sk->sk_sndtimeo = SCO_CONN_TIMEOUT;
476
477         sock_reset_flag(sk, SOCK_ZAPPED);
478
479         sk->sk_protocol = proto;
480         sk->sk_state    = BT_OPEN;
481
482         sco_pi(sk)->setting = BT_VOICE_CVSD_16BIT;
483
484         setup_timer(&sk->sk_timer, sco_sock_timeout, (unsigned long)sk);
485
486         bt_sock_link(&sco_sk_list, sk);
487         return sk;
488 }
489
490 static int sco_sock_create(struct net *net, struct socket *sock, int protocol,
491                            int kern)
492 {
493         struct sock *sk;
494
495         BT_DBG("sock %p", sock);
496
497         sock->state = SS_UNCONNECTED;
498
499         if (sock->type != SOCK_SEQPACKET)
500                 return -ESOCKTNOSUPPORT;
501
502         sock->ops = &sco_sock_ops;
503
504         sk = sco_sock_alloc(net, sock, protocol, GFP_ATOMIC);
505         if (!sk)
506                 return -ENOMEM;
507
508         sco_sock_init(sk, NULL);
509         return 0;
510 }
511
512 static int sco_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
513 {
514         struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
515         struct sock *sk = sock->sk;
516         int err = 0;
517
518         BT_DBG("sk %p %pMR", sk, &sa->sco_bdaddr);
519
520         if (!addr || addr->sa_family != AF_BLUETOOTH)
521                 return -EINVAL;
522
523         lock_sock(sk);
524
525         if (sk->sk_state != BT_OPEN) {
526                 err = -EBADFD;
527                 goto done;
528         }
529
530         if (sk->sk_type != SOCK_SEQPACKET) {
531                 err = -EINVAL;
532                 goto done;
533         }
534
535         bacpy(&sco_pi(sk)->src, &sa->sco_bdaddr);
536
537         sk->sk_state = BT_BOUND;
538
539 done:
540         release_sock(sk);
541         return err;
542 }
543
544 static int sco_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
545 {
546         struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
547         struct sock *sk = sock->sk;
548         int err;
549
550         BT_DBG("sk %p", sk);
551
552         if (alen < sizeof(struct sockaddr_sco) ||
553             addr->sa_family != AF_BLUETOOTH)
554                 return -EINVAL;
555
556         if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND)
557                 return -EBADFD;
558
559         if (sk->sk_type != SOCK_SEQPACKET)
560                 return -EINVAL;
561
562         lock_sock(sk);
563
564         /* Set destination address and psm */
565         bacpy(&sco_pi(sk)->dst, &sa->sco_bdaddr);
566
567         err = sco_connect(sk);
568         if (err)
569                 goto done;
570
571         err = bt_sock_wait_state(sk, BT_CONNECTED,
572                                  sock_sndtimeo(sk, flags & O_NONBLOCK));
573
574 done:
575         release_sock(sk);
576         return err;
577 }
578
579 static int sco_sock_listen(struct socket *sock, int backlog)
580 {
581         struct sock *sk = sock->sk;
582         bdaddr_t *src = &sco_pi(sk)->src;
583         int err = 0;
584
585         BT_DBG("sk %p backlog %d", sk, backlog);
586
587         lock_sock(sk);
588
589         if (sk->sk_state != BT_BOUND) {
590                 err = -EBADFD;
591                 goto done;
592         }
593
594         if (sk->sk_type != SOCK_SEQPACKET) {
595                 err = -EINVAL;
596                 goto done;
597         }
598
599         write_lock(&sco_sk_list.lock);
600
601         if (__sco_get_sock_listen_by_addr(src)) {
602                 err = -EADDRINUSE;
603                 goto unlock;
604         }
605
606         sk->sk_max_ack_backlog = backlog;
607         sk->sk_ack_backlog = 0;
608
609         sk->sk_state = BT_LISTEN;
610
611 unlock:
612         write_unlock(&sco_sk_list.lock);
613
614 done:
615         release_sock(sk);
616         return err;
617 }
618
619 static int sco_sock_accept(struct socket *sock, struct socket *newsock, int flags)
620 {
621         DECLARE_WAITQUEUE(wait, current);
622         struct sock *sk = sock->sk, *ch;
623         long timeo;
624         int err = 0;
625
626         lock_sock(sk);
627
628         timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
629
630         BT_DBG("sk %p timeo %ld", sk, timeo);
631
632         /* Wait for an incoming connection. (wake-one). */
633         add_wait_queue_exclusive(sk_sleep(sk), &wait);
634         while (1) {
635                 set_current_state(TASK_INTERRUPTIBLE);
636
637                 if (sk->sk_state != BT_LISTEN) {
638                         err = -EBADFD;
639                         break;
640                 }
641
642                 ch = bt_accept_dequeue(sk, newsock);
643                 if (ch)
644                         break;
645
646                 if (!timeo) {
647                         err = -EAGAIN;
648                         break;
649                 }
650
651                 if (signal_pending(current)) {
652                         err = sock_intr_errno(timeo);
653                         break;
654                 }
655
656                 release_sock(sk);
657                 timeo = schedule_timeout(timeo);
658                 lock_sock(sk);
659         }
660         __set_current_state(TASK_RUNNING);
661         remove_wait_queue(sk_sleep(sk), &wait);
662
663         if (err)
664                 goto done;
665
666         newsock->state = SS_CONNECTED;
667
668         BT_DBG("new socket %p", ch);
669
670 done:
671         release_sock(sk);
672         return err;
673 }
674
675 static int sco_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
676 {
677         struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
678         struct sock *sk = sock->sk;
679
680         BT_DBG("sock %p, sk %p", sock, sk);
681
682         addr->sa_family = AF_BLUETOOTH;
683         *len = sizeof(struct sockaddr_sco);
684
685         if (peer)
686                 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->dst);
687         else
688                 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->src);
689
690         return 0;
691 }
692
693 static int sco_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
694                             struct msghdr *msg, size_t len)
695 {
696         struct sock *sk = sock->sk;
697         int err;
698
699         BT_DBG("sock %p, sk %p", sock, sk);
700
701         err = sock_error(sk);
702         if (err)
703                 return err;
704
705         if (msg->msg_flags & MSG_OOB)
706                 return -EOPNOTSUPP;
707
708         lock_sock(sk);
709
710         if (sk->sk_state == BT_CONNECTED)
711                 err = sco_send_frame(sk, msg, len);
712         else
713                 err = -ENOTCONN;
714
715         release_sock(sk);
716         return err;
717 }
718
719 static void sco_conn_defer_accept(struct hci_conn *conn, u16 setting)
720 {
721         struct hci_dev *hdev = conn->hdev;
722
723         BT_DBG("conn %p", conn);
724
725         conn->state = BT_CONFIG;
726
727         if (!lmp_esco_capable(hdev)) {
728                 struct hci_cp_accept_conn_req cp;
729
730                 bacpy(&cp.bdaddr, &conn->dst);
731                 cp.role = 0x00; /* Ignored */
732
733                 hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ, sizeof(cp), &cp);
734         } else {
735                 struct hci_cp_accept_sync_conn_req cp;
736
737                 bacpy(&cp.bdaddr, &conn->dst);
738                 cp.pkt_type = cpu_to_le16(conn->pkt_type);
739
740                 cp.tx_bandwidth   = cpu_to_le32(0x00001f40);
741                 cp.rx_bandwidth   = cpu_to_le32(0x00001f40);
742                 cp.content_format = cpu_to_le16(setting);
743
744                 switch (setting & SCO_AIRMODE_MASK) {
745                 case SCO_AIRMODE_TRANSP:
746                         if (conn->pkt_type & ESCO_2EV3)
747                                 cp.max_latency = cpu_to_le16(0x0008);
748                         else
749                                 cp.max_latency = cpu_to_le16(0x000D);
750                         cp.retrans_effort = 0x02;
751                         break;
752                 case SCO_AIRMODE_CVSD:
753                         cp.max_latency = cpu_to_le16(0xffff);
754                         cp.retrans_effort = 0xff;
755                         break;
756                 }
757
758                 hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
759                              sizeof(cp), &cp);
760         }
761 }
762
763 static int sco_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
764                             struct msghdr *msg, size_t len, int flags)
765 {
766         struct sock *sk = sock->sk;
767         struct sco_pinfo *pi = sco_pi(sk);
768
769         lock_sock(sk);
770
771         if (sk->sk_state == BT_CONNECT2 &&
772             test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
773                 sco_conn_defer_accept(pi->conn->hcon, pi->setting);
774                 sk->sk_state = BT_CONFIG;
775
776                 release_sock(sk);
777                 return 0;
778         }
779
780         release_sock(sk);
781
782         return bt_sock_recvmsg(iocb, sock, msg, len, flags);
783 }
784
785 static int sco_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen)
786 {
787         struct sock *sk = sock->sk;
788         int len, err = 0;
789         struct bt_voice voice;
790         u32 opt;
791
792         BT_DBG("sk %p", sk);
793
794         lock_sock(sk);
795
796         switch (optname) {
797
798         case BT_DEFER_SETUP:
799                 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
800                         err = -EINVAL;
801                         break;
802                 }
803
804                 if (get_user(opt, (u32 __user *) optval)) {
805                         err = -EFAULT;
806                         break;
807                 }
808
809                 if (opt)
810                         set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
811                 else
812                         clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
813                 break;
814
815         case BT_VOICE:
816                 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND &&
817                     sk->sk_state != BT_CONNECT2) {
818                         err = -EINVAL;
819                         break;
820                 }
821
822                 voice.setting = sco_pi(sk)->setting;
823
824                 len = min_t(unsigned int, sizeof(voice), optlen);
825                 if (copy_from_user((char *) &voice, optval, len)) {
826                         err = -EFAULT;
827                         break;
828                 }
829
830                 /* Explicitly check for these values */
831                 if (voice.setting != BT_VOICE_TRANSPARENT &&
832                     voice.setting != BT_VOICE_CVSD_16BIT) {
833                         err = -EINVAL;
834                         break;
835                 }
836
837                 sco_pi(sk)->setting = voice.setting;
838                 break;
839
840         default:
841                 err = -ENOPROTOOPT;
842                 break;
843         }
844
845         release_sock(sk);
846         return err;
847 }
848
849 static int sco_sock_getsockopt_old(struct socket *sock, int optname, char __user *optval, int __user *optlen)
850 {
851         struct sock *sk = sock->sk;
852         struct sco_options opts;
853         struct sco_conninfo cinfo;
854         int len, err = 0;
855
856         BT_DBG("sk %p", sk);
857
858         if (get_user(len, optlen))
859                 return -EFAULT;
860
861         lock_sock(sk);
862
863         switch (optname) {
864         case SCO_OPTIONS:
865                 if (sk->sk_state != BT_CONNECTED &&
866                     !(sk->sk_state == BT_CONNECT2 &&
867                       test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
868                         err = -ENOTCONN;
869                         break;
870                 }
871
872                 opts.mtu = sco_pi(sk)->conn->mtu;
873
874                 BT_DBG("mtu %d", opts.mtu);
875
876                 len = min_t(unsigned int, len, sizeof(opts));
877                 if (copy_to_user(optval, (char *)&opts, len))
878                         err = -EFAULT;
879
880                 break;
881
882         case SCO_CONNINFO:
883                 if (sk->sk_state != BT_CONNECTED &&
884                     !(sk->sk_state == BT_CONNECT2 &&
885                       test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
886                         err = -ENOTCONN;
887                         break;
888                 }
889
890                 memset(&cinfo, 0, sizeof(cinfo));
891                 cinfo.hci_handle = sco_pi(sk)->conn->hcon->handle;
892                 memcpy(cinfo.dev_class, sco_pi(sk)->conn->hcon->dev_class, 3);
893
894                 len = min_t(unsigned int, len, sizeof(cinfo));
895                 if (copy_to_user(optval, (char *)&cinfo, len))
896                         err = -EFAULT;
897
898                 break;
899
900         default:
901                 err = -ENOPROTOOPT;
902                 break;
903         }
904
905         release_sock(sk);
906         return err;
907 }
908
909 static int sco_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen)
910 {
911         struct sock *sk = sock->sk;
912         int len, err = 0;
913         struct bt_voice voice;
914
915         BT_DBG("sk %p", sk);
916
917         if (level == SOL_SCO)
918                 return sco_sock_getsockopt_old(sock, optname, optval, optlen);
919
920         if (get_user(len, optlen))
921                 return -EFAULT;
922
923         lock_sock(sk);
924
925         switch (optname) {
926
927         case BT_DEFER_SETUP:
928                 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
929                         err = -EINVAL;
930                         break;
931                 }
932
933                 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
934                              (u32 __user *) optval))
935                         err = -EFAULT;
936
937                 break;
938
939         case BT_VOICE:
940                 voice.setting = sco_pi(sk)->setting;
941
942                 len = min_t(unsigned int, len, sizeof(voice));
943                 if (copy_to_user(optval, (char *)&voice, len))
944                         err = -EFAULT;
945
946                 break;
947
948         default:
949                 err = -ENOPROTOOPT;
950                 break;
951         }
952
953         release_sock(sk);
954         return err;
955 }
956
957 static int sco_sock_shutdown(struct socket *sock, int how)
958 {
959         struct sock *sk = sock->sk;
960         int err = 0;
961
962         BT_DBG("sock %p, sk %p", sock, sk);
963
964         if (!sk)
965                 return 0;
966
967         lock_sock(sk);
968         if (!sk->sk_shutdown) {
969                 sk->sk_shutdown = SHUTDOWN_MASK;
970                 sco_sock_clear_timer(sk);
971                 __sco_sock_close(sk);
972
973                 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
974                     !(current->flags & PF_EXITING))
975                         err = bt_sock_wait_state(sk, BT_CLOSED,
976                                                  sk->sk_lingertime);
977         }
978         release_sock(sk);
979         return err;
980 }
981
982 static int sco_sock_release(struct socket *sock)
983 {
984         struct sock *sk = sock->sk;
985         int err = 0;
986
987         BT_DBG("sock %p, sk %p", sock, sk);
988
989         if (!sk)
990                 return 0;
991
992         sco_sock_close(sk);
993
994         if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
995             !(current->flags & PF_EXITING)) {
996                 lock_sock(sk);
997                 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
998                 release_sock(sk);
999         }
1000
1001         sock_orphan(sk);
1002         sco_sock_kill(sk);
1003         return err;
1004 }
1005
1006 static void sco_conn_ready(struct sco_conn *conn)
1007 {
1008         struct sock *parent;
1009         struct sock *sk = conn->sk;
1010
1011         BT_DBG("conn %p", conn);
1012
1013         if (sk) {
1014                 sco_sock_clear_timer(sk);
1015                 bh_lock_sock(sk);
1016                 sk->sk_state = BT_CONNECTED;
1017                 sk->sk_state_change(sk);
1018                 bh_unlock_sock(sk);
1019         } else {
1020                 sco_conn_lock(conn);
1021
1022                 parent = sco_get_sock_listen(&conn->hcon->src);
1023                 if (!parent) {
1024                         sco_conn_unlock(conn);
1025                         return;
1026                 }
1027
1028                 bh_lock_sock(parent);
1029
1030                 sk = sco_sock_alloc(sock_net(parent), NULL,
1031                                     BTPROTO_SCO, GFP_ATOMIC);
1032                 if (!sk) {
1033                         bh_unlock_sock(parent);
1034                         sco_conn_unlock(conn);
1035                         return;
1036                 }
1037
1038                 sco_sock_init(sk, parent);
1039
1040                 bacpy(&sco_pi(sk)->src, &conn->hcon->src);
1041                 bacpy(&sco_pi(sk)->dst, &conn->hcon->dst);
1042
1043                 hci_conn_hold(conn->hcon);
1044                 __sco_chan_add(conn, sk, parent);
1045
1046                 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(parent)->flags))
1047                         sk->sk_state = BT_CONNECT2;
1048                 else
1049                         sk->sk_state = BT_CONNECTED;
1050
1051                 /* Wake up parent */
1052                 parent->sk_data_ready(parent);
1053
1054                 bh_unlock_sock(parent);
1055
1056                 sco_conn_unlock(conn);
1057         }
1058 }
1059
1060 /* ----- SCO interface with lower layer (HCI) ----- */
1061 int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags)
1062 {
1063         struct sock *sk;
1064         int lm = 0;
1065
1066         BT_DBG("hdev %s, bdaddr %pMR", hdev->name, bdaddr);
1067
1068         /* Find listening sockets */
1069         read_lock(&sco_sk_list.lock);
1070         sk_for_each(sk, &sco_sk_list.head) {
1071                 if (sk->sk_state != BT_LISTEN)
1072                         continue;
1073
1074                 if (!bacmp(&sco_pi(sk)->src, &hdev->bdaddr) ||
1075                     !bacmp(&sco_pi(sk)->src, BDADDR_ANY)) {
1076                         lm |= HCI_LM_ACCEPT;
1077
1078                         if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))
1079                                 *flags |= HCI_PROTO_DEFER;
1080                         break;
1081                 }
1082         }
1083         read_unlock(&sco_sk_list.lock);
1084
1085         return lm;
1086 }
1087
1088 void sco_connect_cfm(struct hci_conn *hcon, __u8 status)
1089 {
1090         BT_DBG("hcon %p bdaddr %pMR status %d", hcon, &hcon->dst, status);
1091         if (!status) {
1092                 struct sco_conn *conn;
1093
1094                 conn = sco_conn_add(hcon);
1095                 if (conn)
1096                         sco_conn_ready(conn);
1097         } else
1098                 sco_conn_del(hcon, bt_to_errno(status));
1099 }
1100
1101 void sco_disconn_cfm(struct hci_conn *hcon, __u8 reason)
1102 {
1103         BT_DBG("hcon %p reason %d", hcon, reason);
1104
1105         sco_conn_del(hcon, bt_to_errno(reason));
1106 }
1107
1108 int sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
1109 {
1110         struct sco_conn *conn = hcon->sco_data;
1111
1112         if (!conn)
1113                 goto drop;
1114
1115         BT_DBG("conn %p len %d", conn, skb->len);
1116
1117         if (skb->len) {
1118                 sco_recv_frame(conn, skb);
1119                 return 0;
1120         }
1121
1122 drop:
1123         kfree_skb(skb);
1124         return 0;
1125 }
1126
1127 static int sco_debugfs_show(struct seq_file *f, void *p)
1128 {
1129         struct sock *sk;
1130
1131         read_lock(&sco_sk_list.lock);
1132
1133         sk_for_each(sk, &sco_sk_list.head) {
1134                 seq_printf(f, "%pMR %pMR %d\n", &sco_pi(sk)->src,
1135                            &sco_pi(sk)->dst, sk->sk_state);
1136         }
1137
1138         read_unlock(&sco_sk_list.lock);
1139
1140         return 0;
1141 }
1142
1143 static int sco_debugfs_open(struct inode *inode, struct file *file)
1144 {
1145         return single_open(file, sco_debugfs_show, inode->i_private);
1146 }
1147
1148 static const struct file_operations sco_debugfs_fops = {
1149         .open           = sco_debugfs_open,
1150         .read           = seq_read,
1151         .llseek         = seq_lseek,
1152         .release        = single_release,
1153 };
1154
1155 static struct dentry *sco_debugfs;
1156
1157 static const struct proto_ops sco_sock_ops = {
1158         .family         = PF_BLUETOOTH,
1159         .owner          = THIS_MODULE,
1160         .release        = sco_sock_release,
1161         .bind           = sco_sock_bind,
1162         .connect        = sco_sock_connect,
1163         .listen         = sco_sock_listen,
1164         .accept         = sco_sock_accept,
1165         .getname        = sco_sock_getname,
1166         .sendmsg        = sco_sock_sendmsg,
1167         .recvmsg        = sco_sock_recvmsg,
1168         .poll           = bt_sock_poll,
1169         .ioctl          = bt_sock_ioctl,
1170         .mmap           = sock_no_mmap,
1171         .socketpair     = sock_no_socketpair,
1172         .shutdown       = sco_sock_shutdown,
1173         .setsockopt     = sco_sock_setsockopt,
1174         .getsockopt     = sco_sock_getsockopt
1175 };
1176
1177 static const struct net_proto_family sco_sock_family_ops = {
1178         .family = PF_BLUETOOTH,
1179         .owner  = THIS_MODULE,
1180         .create = sco_sock_create,
1181 };
1182
1183 int __init sco_init(void)
1184 {
1185         int err;
1186
1187         err = proto_register(&sco_proto, 0);
1188         if (err < 0)
1189                 return err;
1190
1191         err = bt_sock_register(BTPROTO_SCO, &sco_sock_family_ops);
1192         if (err < 0) {
1193                 BT_ERR("SCO socket registration failed");
1194                 goto error;
1195         }
1196
1197         err = bt_procfs_init(&init_net, "sco", &sco_sk_list, NULL);
1198         if (err < 0) {
1199                 BT_ERR("Failed to create SCO proc file");
1200                 bt_sock_unregister(BTPROTO_SCO);
1201                 goto error;
1202         }
1203
1204         BT_INFO("SCO socket layer initialized");
1205
1206         if (IS_ERR_OR_NULL(bt_debugfs))
1207                 return 0;
1208
1209         sco_debugfs = debugfs_create_file("sco", 0444, bt_debugfs,
1210                                           NULL, &sco_debugfs_fops);
1211
1212         return 0;
1213
1214 error:
1215         proto_unregister(&sco_proto);
1216         return err;
1217 }
1218
1219 void __exit sco_exit(void)
1220 {
1221         bt_procfs_cleanup(&init_net, "sco");
1222
1223         debugfs_remove(sco_debugfs);
1224
1225         bt_sock_unregister(BTPROTO_SCO);
1226
1227         proto_unregister(&sco_proto);
1228 }
1229
1230 module_param(disable_esco, bool, 0644);
1231 MODULE_PARM_DESC(disable_esco, "Disable eSCO connection creation");