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