]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - net/bluetooth/sco.c
Merge remote-tracking branch 'livepatching/for-next'
[karo-tx-linux.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 void 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;
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                 sock_hold(sk);
174                 bh_lock_sock(sk);
175                 sco_sock_clear_timer(sk);
176                 sco_chan_del(sk, err);
177                 bh_unlock_sock(sk);
178                 sco_sock_kill(sk);
179                 sock_put(sk);
180         }
181
182         hcon->sco_data = NULL;
183         kfree(conn);
184 }
185
186 static void __sco_chan_add(struct sco_conn *conn, struct sock *sk,
187                            struct sock *parent)
188 {
189         BT_DBG("conn %p", conn);
190
191         sco_pi(sk)->conn = conn;
192         conn->sk = sk;
193
194         if (parent)
195                 bt_accept_enqueue(parent, sk);
196 }
197
198 static int sco_chan_add(struct sco_conn *conn, struct sock *sk,
199                         struct sock *parent)
200 {
201         int err = 0;
202
203         sco_conn_lock(conn);
204         if (conn->sk)
205                 err = -EBUSY;
206         else
207                 __sco_chan_add(conn, sk, parent);
208
209         sco_conn_unlock(conn);
210         return err;
211 }
212
213 static int sco_connect(struct sock *sk)
214 {
215         struct sco_conn *conn;
216         struct hci_conn *hcon;
217         struct hci_dev  *hdev;
218         int err, type;
219
220         BT_DBG("%pMR -> %pMR", &sco_pi(sk)->src, &sco_pi(sk)->dst);
221
222         hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src);
223         if (!hdev)
224                 return -EHOSTUNREACH;
225
226         hci_dev_lock(hdev);
227
228         if (lmp_esco_capable(hdev) && !disable_esco)
229                 type = ESCO_LINK;
230         else
231                 type = SCO_LINK;
232
233         if (sco_pi(sk)->setting == BT_VOICE_TRANSPARENT &&
234             (!lmp_transp_capable(hdev) || !lmp_esco_capable(hdev))) {
235                 err = -EOPNOTSUPP;
236                 goto done;
237         }
238
239         hcon = hci_connect_sco(hdev, type, &sco_pi(sk)->dst,
240                                sco_pi(sk)->setting);
241         if (IS_ERR(hcon)) {
242                 err = PTR_ERR(hcon);
243                 goto done;
244         }
245
246         conn = sco_conn_add(hcon);
247         if (!conn) {
248                 hci_conn_drop(hcon);
249                 err = -ENOMEM;
250                 goto done;
251         }
252
253         /* Update source addr of the socket */
254         bacpy(&sco_pi(sk)->src, &hcon->src);
255
256         err = sco_chan_add(conn, sk, NULL);
257         if (err)
258                 goto done;
259
260         if (hcon->state == BT_CONNECTED) {
261                 sco_sock_clear_timer(sk);
262                 sk->sk_state = BT_CONNECTED;
263         } else {
264                 sk->sk_state = BT_CONNECT;
265                 sco_sock_set_timer(sk, sk->sk_sndtimeo);
266         }
267
268 done:
269         hci_dev_unlock(hdev);
270         hci_dev_put(hdev);
271         return err;
272 }
273
274 static int sco_send_frame(struct sock *sk, struct msghdr *msg, int len)
275 {
276         struct sco_conn *conn = sco_pi(sk)->conn;
277         struct sk_buff *skb;
278         int err;
279
280         /* Check outgoing MTU */
281         if (len > conn->mtu)
282                 return -EINVAL;
283
284         BT_DBG("sk %p len %d", sk, len);
285
286         skb = bt_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err);
287         if (!skb)
288                 return err;
289
290         if (memcpy_from_msg(skb_put(skb, len), msg, len)) {
291                 kfree_skb(skb);
292                 return -EFAULT;
293         }
294
295         hci_send_sco(conn->hcon, skb);
296
297         return len;
298 }
299
300 static void sco_recv_frame(struct sco_conn *conn, struct sk_buff *skb)
301 {
302         struct sock *sk;
303
304         sco_conn_lock(conn);
305         sk = conn->sk;
306         sco_conn_unlock(conn);
307
308         if (!sk)
309                 goto drop;
310
311         BT_DBG("sk %p len %d", sk, skb->len);
312
313         if (sk->sk_state != BT_CONNECTED)
314                 goto drop;
315
316         if (!sock_queue_rcv_skb(sk, skb))
317                 return;
318
319 drop:
320         kfree_skb(skb);
321 }
322
323 /* -------- Socket interface ---------- */
324 static struct sock *__sco_get_sock_listen_by_addr(bdaddr_t *ba)
325 {
326         struct sock *sk;
327
328         sk_for_each(sk, &sco_sk_list.head) {
329                 if (sk->sk_state != BT_LISTEN)
330                         continue;
331
332                 if (!bacmp(&sco_pi(sk)->src, ba))
333                         return sk;
334         }
335
336         return NULL;
337 }
338
339 /* Find socket listening on source bdaddr.
340  * Returns closest match.
341  */
342 static struct sock *sco_get_sock_listen(bdaddr_t *src)
343 {
344         struct sock *sk = NULL, *sk1 = NULL;
345
346         read_lock(&sco_sk_list.lock);
347
348         sk_for_each(sk, &sco_sk_list.head) {
349                 if (sk->sk_state != BT_LISTEN)
350                         continue;
351
352                 /* Exact match. */
353                 if (!bacmp(&sco_pi(sk)->src, src))
354                         break;
355
356                 /* Closest match */
357                 if (!bacmp(&sco_pi(sk)->src, BDADDR_ANY))
358                         sk1 = sk;
359         }
360
361         read_unlock(&sco_sk_list.lock);
362
363         return sk ? sk : sk1;
364 }
365
366 static void sco_sock_destruct(struct sock *sk)
367 {
368         BT_DBG("sk %p", sk);
369
370         skb_queue_purge(&sk->sk_receive_queue);
371         skb_queue_purge(&sk->sk_write_queue);
372 }
373
374 static void sco_sock_cleanup_listen(struct sock *parent)
375 {
376         struct sock *sk;
377
378         BT_DBG("parent %p", parent);
379
380         /* Close not yet accepted channels */
381         while ((sk = bt_accept_dequeue(parent, NULL))) {
382                 sco_sock_close(sk);
383                 sco_sock_kill(sk);
384         }
385
386         parent->sk_state  = BT_CLOSED;
387         sock_set_flag(parent, SOCK_ZAPPED);
388 }
389
390 /* Kill socket (only if zapped and orphan)
391  * Must be called on unlocked socket.
392  */
393 static void sco_sock_kill(struct sock *sk)
394 {
395         if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
396                 return;
397
398         BT_DBG("sk %p state %d", sk, sk->sk_state);
399
400         /* Kill poor orphan */
401         bt_sock_unlink(&sco_sk_list, sk);
402         sock_set_flag(sk, SOCK_DEAD);
403         sock_put(sk);
404 }
405
406 static void __sco_sock_close(struct sock *sk)
407 {
408         BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
409
410         switch (sk->sk_state) {
411         case BT_LISTEN:
412                 sco_sock_cleanup_listen(sk);
413                 break;
414
415         case BT_CONNECTED:
416         case BT_CONFIG:
417                 if (sco_pi(sk)->conn->hcon) {
418                         sk->sk_state = BT_DISCONN;
419                         sco_sock_set_timer(sk, SCO_DISCONN_TIMEOUT);
420                         sco_conn_lock(sco_pi(sk)->conn);
421                         hci_conn_drop(sco_pi(sk)->conn->hcon);
422                         sco_pi(sk)->conn->hcon = NULL;
423                         sco_conn_unlock(sco_pi(sk)->conn);
424                 } else
425                         sco_chan_del(sk, ECONNRESET);
426                 break;
427
428         case BT_CONNECT2:
429         case BT_CONNECT:
430         case BT_DISCONN:
431                 sco_chan_del(sk, ECONNRESET);
432                 break;
433
434         default:
435                 sock_set_flag(sk, SOCK_ZAPPED);
436                 break;
437         }
438 }
439
440 /* Must be called on unlocked socket. */
441 static void sco_sock_close(struct sock *sk)
442 {
443         sco_sock_clear_timer(sk);
444         lock_sock(sk);
445         __sco_sock_close(sk);
446         release_sock(sk);
447         sco_sock_kill(sk);
448 }
449
450 static void sco_sock_init(struct sock *sk, struct sock *parent)
451 {
452         BT_DBG("sk %p", sk);
453
454         if (parent) {
455                 sk->sk_type = parent->sk_type;
456                 bt_sk(sk)->flags = bt_sk(parent)->flags;
457                 security_sk_clone(parent, sk);
458         }
459 }
460
461 static struct proto sco_proto = {
462         .name           = "SCO",
463         .owner          = THIS_MODULE,
464         .obj_size       = sizeof(struct sco_pinfo)
465 };
466
467 static struct sock *sco_sock_alloc(struct net *net, struct socket *sock,
468                                    int proto, gfp_t prio, int kern)
469 {
470         struct sock *sk;
471
472         sk = sk_alloc(net, PF_BLUETOOTH, prio, &sco_proto, kern);
473         if (!sk)
474                 return NULL;
475
476         sock_init_data(sock, sk);
477         INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
478
479         sk->sk_destruct = sco_sock_destruct;
480         sk->sk_sndtimeo = SCO_CONN_TIMEOUT;
481
482         sock_reset_flag(sk, SOCK_ZAPPED);
483
484         sk->sk_protocol = proto;
485         sk->sk_state    = BT_OPEN;
486
487         sco_pi(sk)->setting = BT_VOICE_CVSD_16BIT;
488
489         setup_timer(&sk->sk_timer, sco_sock_timeout, (unsigned long)sk);
490
491         bt_sock_link(&sco_sk_list, sk);
492         return sk;
493 }
494
495 static int sco_sock_create(struct net *net, struct socket *sock, int protocol,
496                            int kern)
497 {
498         struct sock *sk;
499
500         BT_DBG("sock %p", sock);
501
502         sock->state = SS_UNCONNECTED;
503
504         if (sock->type != SOCK_SEQPACKET)
505                 return -ESOCKTNOSUPPORT;
506
507         sock->ops = &sco_sock_ops;
508
509         sk = sco_sock_alloc(net, sock, protocol, GFP_ATOMIC, kern);
510         if (!sk)
511                 return -ENOMEM;
512
513         sco_sock_init(sk, NULL);
514         return 0;
515 }
516
517 static int sco_sock_bind(struct socket *sock, struct sockaddr *addr,
518                          int addr_len)
519 {
520         struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
521         struct sock *sk = sock->sk;
522         int err = 0;
523
524         BT_DBG("sk %p %pMR", sk, &sa->sco_bdaddr);
525
526         if (!addr || addr->sa_family != AF_BLUETOOTH)
527                 return -EINVAL;
528
529         lock_sock(sk);
530
531         if (sk->sk_state != BT_OPEN) {
532                 err = -EBADFD;
533                 goto done;
534         }
535
536         if (sk->sk_type != SOCK_SEQPACKET) {
537                 err = -EINVAL;
538                 goto done;
539         }
540
541         bacpy(&sco_pi(sk)->src, &sa->sco_bdaddr);
542
543         sk->sk_state = BT_BOUND;
544
545 done:
546         release_sock(sk);
547         return err;
548 }
549
550 static int sco_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
551 {
552         struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
553         struct sock *sk = sock->sk;
554         int err;
555
556         BT_DBG("sk %p", sk);
557
558         if (alen < sizeof(struct sockaddr_sco) ||
559             addr->sa_family != AF_BLUETOOTH)
560                 return -EINVAL;
561
562         if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND)
563                 return -EBADFD;
564
565         if (sk->sk_type != SOCK_SEQPACKET)
566                 return -EINVAL;
567
568         lock_sock(sk);
569
570         /* Set destination address and psm */
571         bacpy(&sco_pi(sk)->dst, &sa->sco_bdaddr);
572
573         err = sco_connect(sk);
574         if (err)
575                 goto done;
576
577         err = bt_sock_wait_state(sk, BT_CONNECTED,
578                                  sock_sndtimeo(sk, flags & O_NONBLOCK));
579
580 done:
581         release_sock(sk);
582         return err;
583 }
584
585 static int sco_sock_listen(struct socket *sock, int backlog)
586 {
587         struct sock *sk = sock->sk;
588         bdaddr_t *src = &sco_pi(sk)->src;
589         int err = 0;
590
591         BT_DBG("sk %p backlog %d", sk, backlog);
592
593         lock_sock(sk);
594
595         if (sk->sk_state != BT_BOUND) {
596                 err = -EBADFD;
597                 goto done;
598         }
599
600         if (sk->sk_type != SOCK_SEQPACKET) {
601                 err = -EINVAL;
602                 goto done;
603         }
604
605         write_lock(&sco_sk_list.lock);
606
607         if (__sco_get_sock_listen_by_addr(src)) {
608                 err = -EADDRINUSE;
609                 goto unlock;
610         }
611
612         sk->sk_max_ack_backlog = backlog;
613         sk->sk_ack_backlog = 0;
614
615         sk->sk_state = BT_LISTEN;
616
617 unlock:
618         write_unlock(&sco_sk_list.lock);
619
620 done:
621         release_sock(sk);
622         return err;
623 }
624
625 static int sco_sock_accept(struct socket *sock, struct socket *newsock,
626                            int flags)
627 {
628         DEFINE_WAIT_FUNC(wait, woken_wake_function);
629         struct sock *sk = sock->sk, *ch;
630         long timeo;
631         int err = 0;
632
633         lock_sock(sk);
634
635         timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
636
637         BT_DBG("sk %p timeo %ld", sk, timeo);
638
639         /* Wait for an incoming connection. (wake-one). */
640         add_wait_queue_exclusive(sk_sleep(sk), &wait);
641         while (1) {
642                 if (sk->sk_state != BT_LISTEN) {
643                         err = -EBADFD;
644                         break;
645                 }
646
647                 ch = bt_accept_dequeue(sk, newsock);
648                 if (ch)
649                         break;
650
651                 if (!timeo) {
652                         err = -EAGAIN;
653                         break;
654                 }
655
656                 if (signal_pending(current)) {
657                         err = sock_intr_errno(timeo);
658                         break;
659                 }
660
661                 release_sock(sk);
662
663                 timeo = wait_woken(&wait, TASK_INTERRUPTIBLE, timeo);
664                 lock_sock(sk);
665         }
666         remove_wait_queue(sk_sleep(sk), &wait);
667
668         if (err)
669                 goto done;
670
671         newsock->state = SS_CONNECTED;
672
673         BT_DBG("new socket %p", ch);
674
675 done:
676         release_sock(sk);
677         return err;
678 }
679
680 static int sco_sock_getname(struct socket *sock, struct sockaddr *addr,
681                             int *len, int peer)
682 {
683         struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
684         struct sock *sk = sock->sk;
685
686         BT_DBG("sock %p, sk %p", sock, sk);
687
688         addr->sa_family = AF_BLUETOOTH;
689         *len = sizeof(struct sockaddr_sco);
690
691         if (peer)
692                 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->dst);
693         else
694                 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->src);
695
696         return 0;
697 }
698
699 static int sco_sock_sendmsg(struct socket *sock, struct msghdr *msg,
700                             size_t len)
701 {
702         struct sock *sk = sock->sk;
703         int err;
704
705         BT_DBG("sock %p, sk %p", sock, sk);
706
707         err = sock_error(sk);
708         if (err)
709                 return err;
710
711         if (msg->msg_flags & MSG_OOB)
712                 return -EOPNOTSUPP;
713
714         lock_sock(sk);
715
716         if (sk->sk_state == BT_CONNECTED)
717                 err = sco_send_frame(sk, msg, len);
718         else
719                 err = -ENOTCONN;
720
721         release_sock(sk);
722         return err;
723 }
724
725 static void sco_conn_defer_accept(struct hci_conn *conn, u16 setting)
726 {
727         struct hci_dev *hdev = conn->hdev;
728
729         BT_DBG("conn %p", conn);
730
731         conn->state = BT_CONFIG;
732
733         if (!lmp_esco_capable(hdev)) {
734                 struct hci_cp_accept_conn_req cp;
735
736                 bacpy(&cp.bdaddr, &conn->dst);
737                 cp.role = 0x00; /* Ignored */
738
739                 hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ, sizeof(cp), &cp);
740         } else {
741                 struct hci_cp_accept_sync_conn_req cp;
742
743                 bacpy(&cp.bdaddr, &conn->dst);
744                 cp.pkt_type = cpu_to_le16(conn->pkt_type);
745
746                 cp.tx_bandwidth   = cpu_to_le32(0x00001f40);
747                 cp.rx_bandwidth   = cpu_to_le32(0x00001f40);
748                 cp.content_format = cpu_to_le16(setting);
749
750                 switch (setting & SCO_AIRMODE_MASK) {
751                 case SCO_AIRMODE_TRANSP:
752                         if (conn->pkt_type & ESCO_2EV3)
753                                 cp.max_latency = cpu_to_le16(0x0008);
754                         else
755                                 cp.max_latency = cpu_to_le16(0x000D);
756                         cp.retrans_effort = 0x02;
757                         break;
758                 case SCO_AIRMODE_CVSD:
759                         cp.max_latency = cpu_to_le16(0xffff);
760                         cp.retrans_effort = 0xff;
761                         break;
762                 }
763
764                 hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
765                              sizeof(cp), &cp);
766         }
767 }
768
769 static int sco_sock_recvmsg(struct socket *sock, struct msghdr *msg,
770                             size_t len, int flags)
771 {
772         struct sock *sk = sock->sk;
773         struct sco_pinfo *pi = sco_pi(sk);
774
775         lock_sock(sk);
776
777         if (sk->sk_state == BT_CONNECT2 &&
778             test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
779                 sco_conn_defer_accept(pi->conn->hcon, pi->setting);
780                 sk->sk_state = BT_CONFIG;
781
782                 release_sock(sk);
783                 return 0;
784         }
785
786         release_sock(sk);
787
788         return bt_sock_recvmsg(sock, msg, len, flags);
789 }
790
791 static int sco_sock_setsockopt(struct socket *sock, int level, int optname,
792                                char __user *optval, unsigned int optlen)
793 {
794         struct sock *sk = sock->sk;
795         int len, err = 0;
796         struct bt_voice voice;
797         u32 opt;
798
799         BT_DBG("sk %p", sk);
800
801         lock_sock(sk);
802
803         switch (optname) {
804
805         case BT_DEFER_SETUP:
806                 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
807                         err = -EINVAL;
808                         break;
809                 }
810
811                 if (get_user(opt, (u32 __user *) optval)) {
812                         err = -EFAULT;
813                         break;
814                 }
815
816                 if (opt)
817                         set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
818                 else
819                         clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
820                 break;
821
822         case BT_VOICE:
823                 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND &&
824                     sk->sk_state != BT_CONNECT2) {
825                         err = -EINVAL;
826                         break;
827                 }
828
829                 voice.setting = sco_pi(sk)->setting;
830
831                 len = min_t(unsigned int, sizeof(voice), optlen);
832                 if (copy_from_user((char *)&voice, optval, len)) {
833                         err = -EFAULT;
834                         break;
835                 }
836
837                 /* Explicitly check for these values */
838                 if (voice.setting != BT_VOICE_TRANSPARENT &&
839                     voice.setting != BT_VOICE_CVSD_16BIT) {
840                         err = -EINVAL;
841                         break;
842                 }
843
844                 sco_pi(sk)->setting = voice.setting;
845                 break;
846
847         default:
848                 err = -ENOPROTOOPT;
849                 break;
850         }
851
852         release_sock(sk);
853         return err;
854 }
855
856 static int sco_sock_getsockopt_old(struct socket *sock, int optname,
857                                    char __user *optval, int __user *optlen)
858 {
859         struct sock *sk = sock->sk;
860         struct sco_options opts;
861         struct sco_conninfo cinfo;
862         int len, err = 0;
863
864         BT_DBG("sk %p", sk);
865
866         if (get_user(len, optlen))
867                 return -EFAULT;
868
869         lock_sock(sk);
870
871         switch (optname) {
872         case SCO_OPTIONS:
873                 if (sk->sk_state != BT_CONNECTED &&
874                     !(sk->sk_state == BT_CONNECT2 &&
875                       test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
876                         err = -ENOTCONN;
877                         break;
878                 }
879
880                 opts.mtu = sco_pi(sk)->conn->mtu;
881
882                 BT_DBG("mtu %d", opts.mtu);
883
884                 len = min_t(unsigned int, len, sizeof(opts));
885                 if (copy_to_user(optval, (char *)&opts, len))
886                         err = -EFAULT;
887
888                 break;
889
890         case SCO_CONNINFO:
891                 if (sk->sk_state != BT_CONNECTED &&
892                     !(sk->sk_state == BT_CONNECT2 &&
893                       test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
894                         err = -ENOTCONN;
895                         break;
896                 }
897
898                 memset(&cinfo, 0, sizeof(cinfo));
899                 cinfo.hci_handle = sco_pi(sk)->conn->hcon->handle;
900                 memcpy(cinfo.dev_class, sco_pi(sk)->conn->hcon->dev_class, 3);
901
902                 len = min_t(unsigned int, len, sizeof(cinfo));
903                 if (copy_to_user(optval, (char *)&cinfo, len))
904                         err = -EFAULT;
905
906                 break;
907
908         default:
909                 err = -ENOPROTOOPT;
910                 break;
911         }
912
913         release_sock(sk);
914         return err;
915 }
916
917 static int sco_sock_getsockopt(struct socket *sock, int level, int optname,
918                                char __user *optval, int __user *optlen)
919 {
920         struct sock *sk = sock->sk;
921         int len, err = 0;
922         struct bt_voice voice;
923
924         BT_DBG("sk %p", sk);
925
926         if (level == SOL_SCO)
927                 return sco_sock_getsockopt_old(sock, optname, optval, optlen);
928
929         if (get_user(len, optlen))
930                 return -EFAULT;
931
932         lock_sock(sk);
933
934         switch (optname) {
935
936         case BT_DEFER_SETUP:
937                 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
938                         err = -EINVAL;
939                         break;
940                 }
941
942                 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
943                              (u32 __user *)optval))
944                         err = -EFAULT;
945
946                 break;
947
948         case BT_VOICE:
949                 voice.setting = sco_pi(sk)->setting;
950
951                 len = min_t(unsigned int, len, sizeof(voice));
952                 if (copy_to_user(optval, (char *)&voice, len))
953                         err = -EFAULT;
954
955                 break;
956
957         default:
958                 err = -ENOPROTOOPT;
959                 break;
960         }
961
962         release_sock(sk);
963         return err;
964 }
965
966 static int sco_sock_shutdown(struct socket *sock, int how)
967 {
968         struct sock *sk = sock->sk;
969         int err = 0;
970
971         BT_DBG("sock %p, sk %p", sock, sk);
972
973         if (!sk)
974                 return 0;
975
976         sock_hold(sk);
977         lock_sock(sk);
978
979         if (!sk->sk_shutdown) {
980                 sk->sk_shutdown = SHUTDOWN_MASK;
981                 sco_sock_clear_timer(sk);
982                 __sco_sock_close(sk);
983
984                 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
985                     !(current->flags & PF_EXITING))
986                         err = bt_sock_wait_state(sk, BT_CLOSED,
987                                                  sk->sk_lingertime);
988         }
989
990         release_sock(sk);
991         sock_put(sk);
992
993         return err;
994 }
995
996 static int sco_sock_release(struct socket *sock)
997 {
998         struct sock *sk = sock->sk;
999         int err = 0;
1000
1001         BT_DBG("sock %p, sk %p", sock, sk);
1002
1003         if (!sk)
1004                 return 0;
1005
1006         sco_sock_close(sk);
1007
1008         if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
1009             !(current->flags & PF_EXITING)) {
1010                 lock_sock(sk);
1011                 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
1012                 release_sock(sk);
1013         }
1014
1015         sock_orphan(sk);
1016         sco_sock_kill(sk);
1017         return err;
1018 }
1019
1020 static void sco_conn_ready(struct sco_conn *conn)
1021 {
1022         struct sock *parent;
1023         struct sock *sk = conn->sk;
1024
1025         BT_DBG("conn %p", conn);
1026
1027         if (sk) {
1028                 sco_sock_clear_timer(sk);
1029                 bh_lock_sock(sk);
1030                 sk->sk_state = BT_CONNECTED;
1031                 sk->sk_state_change(sk);
1032                 bh_unlock_sock(sk);
1033         } else {
1034                 sco_conn_lock(conn);
1035
1036                 if (!conn->hcon) {
1037                         sco_conn_unlock(conn);
1038                         return;
1039                 }
1040
1041                 parent = sco_get_sock_listen(&conn->hcon->src);
1042                 if (!parent) {
1043                         sco_conn_unlock(conn);
1044                         return;
1045                 }
1046
1047                 bh_lock_sock(parent);
1048
1049                 sk = sco_sock_alloc(sock_net(parent), NULL,
1050                                     BTPROTO_SCO, GFP_ATOMIC, 0);
1051                 if (!sk) {
1052                         bh_unlock_sock(parent);
1053                         sco_conn_unlock(conn);
1054                         return;
1055                 }
1056
1057                 sco_sock_init(sk, parent);
1058
1059                 bacpy(&sco_pi(sk)->src, &conn->hcon->src);
1060                 bacpy(&sco_pi(sk)->dst, &conn->hcon->dst);
1061
1062                 hci_conn_hold(conn->hcon);
1063                 __sco_chan_add(conn, sk, parent);
1064
1065                 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(parent)->flags))
1066                         sk->sk_state = BT_CONNECT2;
1067                 else
1068                         sk->sk_state = BT_CONNECTED;
1069
1070                 /* Wake up parent */
1071                 parent->sk_data_ready(parent);
1072
1073                 bh_unlock_sock(parent);
1074
1075                 sco_conn_unlock(conn);
1076         }
1077 }
1078
1079 /* ----- SCO interface with lower layer (HCI) ----- */
1080 int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags)
1081 {
1082         struct sock *sk;
1083         int lm = 0;
1084
1085         BT_DBG("hdev %s, bdaddr %pMR", hdev->name, bdaddr);
1086
1087         /* Find listening sockets */
1088         read_lock(&sco_sk_list.lock);
1089         sk_for_each(sk, &sco_sk_list.head) {
1090                 if (sk->sk_state != BT_LISTEN)
1091                         continue;
1092
1093                 if (!bacmp(&sco_pi(sk)->src, &hdev->bdaddr) ||
1094                     !bacmp(&sco_pi(sk)->src, BDADDR_ANY)) {
1095                         lm |= HCI_LM_ACCEPT;
1096
1097                         if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))
1098                                 *flags |= HCI_PROTO_DEFER;
1099                         break;
1100                 }
1101         }
1102         read_unlock(&sco_sk_list.lock);
1103
1104         return lm;
1105 }
1106
1107 static void sco_connect_cfm(struct hci_conn *hcon, __u8 status)
1108 {
1109         if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
1110                 return;
1111
1112         BT_DBG("hcon %p bdaddr %pMR status %d", hcon, &hcon->dst, status);
1113
1114         if (!status) {
1115                 struct sco_conn *conn;
1116
1117                 conn = sco_conn_add(hcon);
1118                 if (conn)
1119                         sco_conn_ready(conn);
1120         } else
1121                 sco_conn_del(hcon, bt_to_errno(status));
1122 }
1123
1124 static void sco_disconn_cfm(struct hci_conn *hcon, __u8 reason)
1125 {
1126         if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
1127                 return;
1128
1129         BT_DBG("hcon %p reason %d", hcon, reason);
1130
1131         sco_conn_del(hcon, bt_to_errno(reason));
1132 }
1133
1134 void sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
1135 {
1136         struct sco_conn *conn = hcon->sco_data;
1137
1138         if (!conn)
1139                 goto drop;
1140
1141         BT_DBG("conn %p len %d", conn, skb->len);
1142
1143         if (skb->len) {
1144                 sco_recv_frame(conn, skb);
1145                 return;
1146         }
1147
1148 drop:
1149         kfree_skb(skb);
1150 }
1151
1152 static struct hci_cb sco_cb = {
1153         .name           = "SCO",
1154         .connect_cfm    = sco_connect_cfm,
1155         .disconn_cfm    = sco_disconn_cfm,
1156 };
1157
1158 static int sco_debugfs_show(struct seq_file *f, void *p)
1159 {
1160         struct sock *sk;
1161
1162         read_lock(&sco_sk_list.lock);
1163
1164         sk_for_each(sk, &sco_sk_list.head) {
1165                 seq_printf(f, "%pMR %pMR %d\n", &sco_pi(sk)->src,
1166                            &sco_pi(sk)->dst, sk->sk_state);
1167         }
1168
1169         read_unlock(&sco_sk_list.lock);
1170
1171         return 0;
1172 }
1173
1174 static int sco_debugfs_open(struct inode *inode, struct file *file)
1175 {
1176         return single_open(file, sco_debugfs_show, inode->i_private);
1177 }
1178
1179 static const struct file_operations sco_debugfs_fops = {
1180         .open           = sco_debugfs_open,
1181         .read           = seq_read,
1182         .llseek         = seq_lseek,
1183         .release        = single_release,
1184 };
1185
1186 static struct dentry *sco_debugfs;
1187
1188 static const struct proto_ops sco_sock_ops = {
1189         .family         = PF_BLUETOOTH,
1190         .owner          = THIS_MODULE,
1191         .release        = sco_sock_release,
1192         .bind           = sco_sock_bind,
1193         .connect        = sco_sock_connect,
1194         .listen         = sco_sock_listen,
1195         .accept         = sco_sock_accept,
1196         .getname        = sco_sock_getname,
1197         .sendmsg        = sco_sock_sendmsg,
1198         .recvmsg        = sco_sock_recvmsg,
1199         .poll           = bt_sock_poll,
1200         .ioctl          = bt_sock_ioctl,
1201         .mmap           = sock_no_mmap,
1202         .socketpair     = sock_no_socketpair,
1203         .shutdown       = sco_sock_shutdown,
1204         .setsockopt     = sco_sock_setsockopt,
1205         .getsockopt     = sco_sock_getsockopt
1206 };
1207
1208 static const struct net_proto_family sco_sock_family_ops = {
1209         .family = PF_BLUETOOTH,
1210         .owner  = THIS_MODULE,
1211         .create = sco_sock_create,
1212 };
1213
1214 int __init sco_init(void)
1215 {
1216         int err;
1217
1218         BUILD_BUG_ON(sizeof(struct sockaddr_sco) > sizeof(struct sockaddr));
1219
1220         err = proto_register(&sco_proto, 0);
1221         if (err < 0)
1222                 return err;
1223
1224         err = bt_sock_register(BTPROTO_SCO, &sco_sock_family_ops);
1225         if (err < 0) {
1226                 BT_ERR("SCO socket registration failed");
1227                 goto error;
1228         }
1229
1230         err = bt_procfs_init(&init_net, "sco", &sco_sk_list, NULL);
1231         if (err < 0) {
1232                 BT_ERR("Failed to create SCO proc file");
1233                 bt_sock_unregister(BTPROTO_SCO);
1234                 goto error;
1235         }
1236
1237         BT_INFO("SCO socket layer initialized");
1238
1239         hci_register_cb(&sco_cb);
1240
1241         if (IS_ERR_OR_NULL(bt_debugfs))
1242                 return 0;
1243
1244         sco_debugfs = debugfs_create_file("sco", 0444, bt_debugfs,
1245                                           NULL, &sco_debugfs_fops);
1246
1247         return 0;
1248
1249 error:
1250         proto_unregister(&sco_proto);
1251         return err;
1252 }
1253
1254 void sco_exit(void)
1255 {
1256         bt_procfs_cleanup(&init_net, "sco");
1257
1258         debugfs_remove(sco_debugfs);
1259
1260         hci_unregister_cb(&sco_cb);
1261
1262         bt_sock_unregister(BTPROTO_SCO);
1263
1264         proto_unregister(&sco_proto);
1265 }
1266
1267 module_param(disable_esco, bool, 0644);
1268 MODULE_PARM_DESC(disable_esco, "Disable eSCO connection creation");