x86/smpboot: Init apic mapping before usage
[cascardo/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         if (addr_len < sizeof(struct sockaddr_sco))
530                 return -EINVAL;
531
532         lock_sock(sk);
533
534         if (sk->sk_state != BT_OPEN) {
535                 err = -EBADFD;
536                 goto done;
537         }
538
539         if (sk->sk_type != SOCK_SEQPACKET) {
540                 err = -EINVAL;
541                 goto done;
542         }
543
544         bacpy(&sco_pi(sk)->src, &sa->sco_bdaddr);
545
546         sk->sk_state = BT_BOUND;
547
548 done:
549         release_sock(sk);
550         return err;
551 }
552
553 static int sco_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
554 {
555         struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
556         struct sock *sk = sock->sk;
557         int err;
558
559         BT_DBG("sk %p", sk);
560
561         if (alen < sizeof(struct sockaddr_sco) ||
562             addr->sa_family != AF_BLUETOOTH)
563                 return -EINVAL;
564
565         if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND)
566                 return -EBADFD;
567
568         if (sk->sk_type != SOCK_SEQPACKET)
569                 return -EINVAL;
570
571         lock_sock(sk);
572
573         /* Set destination address and psm */
574         bacpy(&sco_pi(sk)->dst, &sa->sco_bdaddr);
575
576         err = sco_connect(sk);
577         if (err)
578                 goto done;
579
580         err = bt_sock_wait_state(sk, BT_CONNECTED,
581                                  sock_sndtimeo(sk, flags & O_NONBLOCK));
582
583 done:
584         release_sock(sk);
585         return err;
586 }
587
588 static int sco_sock_listen(struct socket *sock, int backlog)
589 {
590         struct sock *sk = sock->sk;
591         bdaddr_t *src = &sco_pi(sk)->src;
592         int err = 0;
593
594         BT_DBG("sk %p backlog %d", sk, backlog);
595
596         lock_sock(sk);
597
598         if (sk->sk_state != BT_BOUND) {
599                 err = -EBADFD;
600                 goto done;
601         }
602
603         if (sk->sk_type != SOCK_SEQPACKET) {
604                 err = -EINVAL;
605                 goto done;
606         }
607
608         write_lock(&sco_sk_list.lock);
609
610         if (__sco_get_sock_listen_by_addr(src)) {
611                 err = -EADDRINUSE;
612                 goto unlock;
613         }
614
615         sk->sk_max_ack_backlog = backlog;
616         sk->sk_ack_backlog = 0;
617
618         sk->sk_state = BT_LISTEN;
619
620 unlock:
621         write_unlock(&sco_sk_list.lock);
622
623 done:
624         release_sock(sk);
625         return err;
626 }
627
628 static int sco_sock_accept(struct socket *sock, struct socket *newsock,
629                            int flags)
630 {
631         DEFINE_WAIT_FUNC(wait, woken_wake_function);
632         struct sock *sk = sock->sk, *ch;
633         long timeo;
634         int err = 0;
635
636         lock_sock(sk);
637
638         timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
639
640         BT_DBG("sk %p timeo %ld", sk, timeo);
641
642         /* Wait for an incoming connection. (wake-one). */
643         add_wait_queue_exclusive(sk_sleep(sk), &wait);
644         while (1) {
645                 if (sk->sk_state != BT_LISTEN) {
646                         err = -EBADFD;
647                         break;
648                 }
649
650                 ch = bt_accept_dequeue(sk, newsock);
651                 if (ch)
652                         break;
653
654                 if (!timeo) {
655                         err = -EAGAIN;
656                         break;
657                 }
658
659                 if (signal_pending(current)) {
660                         err = sock_intr_errno(timeo);
661                         break;
662                 }
663
664                 release_sock(sk);
665
666                 timeo = wait_woken(&wait, TASK_INTERRUPTIBLE, timeo);
667                 lock_sock(sk);
668         }
669         remove_wait_queue(sk_sleep(sk), &wait);
670
671         if (err)
672                 goto done;
673
674         newsock->state = SS_CONNECTED;
675
676         BT_DBG("new socket %p", ch);
677
678 done:
679         release_sock(sk);
680         return err;
681 }
682
683 static int sco_sock_getname(struct socket *sock, struct sockaddr *addr,
684                             int *len, int peer)
685 {
686         struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
687         struct sock *sk = sock->sk;
688
689         BT_DBG("sock %p, sk %p", sock, sk);
690
691         addr->sa_family = AF_BLUETOOTH;
692         *len = sizeof(struct sockaddr_sco);
693
694         if (peer)
695                 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->dst);
696         else
697                 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->src);
698
699         return 0;
700 }
701
702 static int sco_sock_sendmsg(struct socket *sock, struct msghdr *msg,
703                             size_t len)
704 {
705         struct sock *sk = sock->sk;
706         int err;
707
708         BT_DBG("sock %p, sk %p", sock, sk);
709
710         err = sock_error(sk);
711         if (err)
712                 return err;
713
714         if (msg->msg_flags & MSG_OOB)
715                 return -EOPNOTSUPP;
716
717         lock_sock(sk);
718
719         if (sk->sk_state == BT_CONNECTED)
720                 err = sco_send_frame(sk, msg, len);
721         else
722                 err = -ENOTCONN;
723
724         release_sock(sk);
725         return err;
726 }
727
728 static void sco_conn_defer_accept(struct hci_conn *conn, u16 setting)
729 {
730         struct hci_dev *hdev = conn->hdev;
731
732         BT_DBG("conn %p", conn);
733
734         conn->state = BT_CONFIG;
735
736         if (!lmp_esco_capable(hdev)) {
737                 struct hci_cp_accept_conn_req cp;
738
739                 bacpy(&cp.bdaddr, &conn->dst);
740                 cp.role = 0x00; /* Ignored */
741
742                 hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ, sizeof(cp), &cp);
743         } else {
744                 struct hci_cp_accept_sync_conn_req cp;
745
746                 bacpy(&cp.bdaddr, &conn->dst);
747                 cp.pkt_type = cpu_to_le16(conn->pkt_type);
748
749                 cp.tx_bandwidth   = cpu_to_le32(0x00001f40);
750                 cp.rx_bandwidth   = cpu_to_le32(0x00001f40);
751                 cp.content_format = cpu_to_le16(setting);
752
753                 switch (setting & SCO_AIRMODE_MASK) {
754                 case SCO_AIRMODE_TRANSP:
755                         if (conn->pkt_type & ESCO_2EV3)
756                                 cp.max_latency = cpu_to_le16(0x0008);
757                         else
758                                 cp.max_latency = cpu_to_le16(0x000D);
759                         cp.retrans_effort = 0x02;
760                         break;
761                 case SCO_AIRMODE_CVSD:
762                         cp.max_latency = cpu_to_le16(0xffff);
763                         cp.retrans_effort = 0xff;
764                         break;
765                 }
766
767                 hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
768                              sizeof(cp), &cp);
769         }
770 }
771
772 static int sco_sock_recvmsg(struct socket *sock, struct msghdr *msg,
773                             size_t len, int flags)
774 {
775         struct sock *sk = sock->sk;
776         struct sco_pinfo *pi = sco_pi(sk);
777
778         lock_sock(sk);
779
780         if (sk->sk_state == BT_CONNECT2 &&
781             test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
782                 sco_conn_defer_accept(pi->conn->hcon, pi->setting);
783                 sk->sk_state = BT_CONFIG;
784
785                 release_sock(sk);
786                 return 0;
787         }
788
789         release_sock(sk);
790
791         return bt_sock_recvmsg(sock, msg, len, flags);
792 }
793
794 static int sco_sock_setsockopt(struct socket *sock, int level, int optname,
795                                char __user *optval, unsigned int optlen)
796 {
797         struct sock *sk = sock->sk;
798         int len, err = 0;
799         struct bt_voice voice;
800         u32 opt;
801
802         BT_DBG("sk %p", sk);
803
804         lock_sock(sk);
805
806         switch (optname) {
807
808         case BT_DEFER_SETUP:
809                 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
810                         err = -EINVAL;
811                         break;
812                 }
813
814                 if (get_user(opt, (u32 __user *) optval)) {
815                         err = -EFAULT;
816                         break;
817                 }
818
819                 if (opt)
820                         set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
821                 else
822                         clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
823                 break;
824
825         case BT_VOICE:
826                 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND &&
827                     sk->sk_state != BT_CONNECT2) {
828                         err = -EINVAL;
829                         break;
830                 }
831
832                 voice.setting = sco_pi(sk)->setting;
833
834                 len = min_t(unsigned int, sizeof(voice), optlen);
835                 if (copy_from_user((char *)&voice, optval, len)) {
836                         err = -EFAULT;
837                         break;
838                 }
839
840                 /* Explicitly check for these values */
841                 if (voice.setting != BT_VOICE_TRANSPARENT &&
842                     voice.setting != BT_VOICE_CVSD_16BIT) {
843                         err = -EINVAL;
844                         break;
845                 }
846
847                 sco_pi(sk)->setting = voice.setting;
848                 break;
849
850         default:
851                 err = -ENOPROTOOPT;
852                 break;
853         }
854
855         release_sock(sk);
856         return err;
857 }
858
859 static int sco_sock_getsockopt_old(struct socket *sock, int optname,
860                                    char __user *optval, int __user *optlen)
861 {
862         struct sock *sk = sock->sk;
863         struct sco_options opts;
864         struct sco_conninfo cinfo;
865         int len, err = 0;
866
867         BT_DBG("sk %p", sk);
868
869         if (get_user(len, optlen))
870                 return -EFAULT;
871
872         lock_sock(sk);
873
874         switch (optname) {
875         case SCO_OPTIONS:
876                 if (sk->sk_state != BT_CONNECTED &&
877                     !(sk->sk_state == BT_CONNECT2 &&
878                       test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
879                         err = -ENOTCONN;
880                         break;
881                 }
882
883                 opts.mtu = sco_pi(sk)->conn->mtu;
884
885                 BT_DBG("mtu %d", opts.mtu);
886
887                 len = min_t(unsigned int, len, sizeof(opts));
888                 if (copy_to_user(optval, (char *)&opts, len))
889                         err = -EFAULT;
890
891                 break;
892
893         case SCO_CONNINFO:
894                 if (sk->sk_state != BT_CONNECTED &&
895                     !(sk->sk_state == BT_CONNECT2 &&
896                       test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
897                         err = -ENOTCONN;
898                         break;
899                 }
900
901                 memset(&cinfo, 0, sizeof(cinfo));
902                 cinfo.hci_handle = sco_pi(sk)->conn->hcon->handle;
903                 memcpy(cinfo.dev_class, sco_pi(sk)->conn->hcon->dev_class, 3);
904
905                 len = min_t(unsigned int, len, sizeof(cinfo));
906                 if (copy_to_user(optval, (char *)&cinfo, len))
907                         err = -EFAULT;
908
909                 break;
910
911         default:
912                 err = -ENOPROTOOPT;
913                 break;
914         }
915
916         release_sock(sk);
917         return err;
918 }
919
920 static int sco_sock_getsockopt(struct socket *sock, int level, int optname,
921                                char __user *optval, int __user *optlen)
922 {
923         struct sock *sk = sock->sk;
924         int len, err = 0;
925         struct bt_voice voice;
926
927         BT_DBG("sk %p", sk);
928
929         if (level == SOL_SCO)
930                 return sco_sock_getsockopt_old(sock, optname, optval, optlen);
931
932         if (get_user(len, optlen))
933                 return -EFAULT;
934
935         lock_sock(sk);
936
937         switch (optname) {
938
939         case BT_DEFER_SETUP:
940                 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
941                         err = -EINVAL;
942                         break;
943                 }
944
945                 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
946                              (u32 __user *)optval))
947                         err = -EFAULT;
948
949                 break;
950
951         case BT_VOICE:
952                 voice.setting = sco_pi(sk)->setting;
953
954                 len = min_t(unsigned int, len, sizeof(voice));
955                 if (copy_to_user(optval, (char *)&voice, len))
956                         err = -EFAULT;
957
958                 break;
959
960         default:
961                 err = -ENOPROTOOPT;
962                 break;
963         }
964
965         release_sock(sk);
966         return err;
967 }
968
969 static int sco_sock_shutdown(struct socket *sock, int how)
970 {
971         struct sock *sk = sock->sk;
972         int err = 0;
973
974         BT_DBG("sock %p, sk %p", sock, sk);
975
976         if (!sk)
977                 return 0;
978
979         sock_hold(sk);
980         lock_sock(sk);
981
982         if (!sk->sk_shutdown) {
983                 sk->sk_shutdown = SHUTDOWN_MASK;
984                 sco_sock_clear_timer(sk);
985                 __sco_sock_close(sk);
986
987                 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
988                     !(current->flags & PF_EXITING))
989                         err = bt_sock_wait_state(sk, BT_CLOSED,
990                                                  sk->sk_lingertime);
991         }
992
993         release_sock(sk);
994         sock_put(sk);
995
996         return err;
997 }
998
999 static int sco_sock_release(struct socket *sock)
1000 {
1001         struct sock *sk = sock->sk;
1002         int err = 0;
1003
1004         BT_DBG("sock %p, sk %p", sock, sk);
1005
1006         if (!sk)
1007                 return 0;
1008
1009         sco_sock_close(sk);
1010
1011         if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
1012             !(current->flags & PF_EXITING)) {
1013                 lock_sock(sk);
1014                 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
1015                 release_sock(sk);
1016         }
1017
1018         sock_orphan(sk);
1019         sco_sock_kill(sk);
1020         return err;
1021 }
1022
1023 static void sco_conn_ready(struct sco_conn *conn)
1024 {
1025         struct sock *parent;
1026         struct sock *sk = conn->sk;
1027
1028         BT_DBG("conn %p", conn);
1029
1030         if (sk) {
1031                 sco_sock_clear_timer(sk);
1032                 bh_lock_sock(sk);
1033                 sk->sk_state = BT_CONNECTED;
1034                 sk->sk_state_change(sk);
1035                 bh_unlock_sock(sk);
1036         } else {
1037                 sco_conn_lock(conn);
1038
1039                 if (!conn->hcon) {
1040                         sco_conn_unlock(conn);
1041                         return;
1042                 }
1043
1044                 parent = sco_get_sock_listen(&conn->hcon->src);
1045                 if (!parent) {
1046                         sco_conn_unlock(conn);
1047                         return;
1048                 }
1049
1050                 bh_lock_sock(parent);
1051
1052                 sk = sco_sock_alloc(sock_net(parent), NULL,
1053                                     BTPROTO_SCO, GFP_ATOMIC, 0);
1054                 if (!sk) {
1055                         bh_unlock_sock(parent);
1056                         sco_conn_unlock(conn);
1057                         return;
1058                 }
1059
1060                 sco_sock_init(sk, parent);
1061
1062                 bacpy(&sco_pi(sk)->src, &conn->hcon->src);
1063                 bacpy(&sco_pi(sk)->dst, &conn->hcon->dst);
1064
1065                 hci_conn_hold(conn->hcon);
1066                 __sco_chan_add(conn, sk, parent);
1067
1068                 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(parent)->flags))
1069                         sk->sk_state = BT_CONNECT2;
1070                 else
1071                         sk->sk_state = BT_CONNECTED;
1072
1073                 /* Wake up parent */
1074                 parent->sk_data_ready(parent);
1075
1076                 bh_unlock_sock(parent);
1077
1078                 sco_conn_unlock(conn);
1079         }
1080 }
1081
1082 /* ----- SCO interface with lower layer (HCI) ----- */
1083 int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags)
1084 {
1085         struct sock *sk;
1086         int lm = 0;
1087
1088         BT_DBG("hdev %s, bdaddr %pMR", hdev->name, bdaddr);
1089
1090         /* Find listening sockets */
1091         read_lock(&sco_sk_list.lock);
1092         sk_for_each(sk, &sco_sk_list.head) {
1093                 if (sk->sk_state != BT_LISTEN)
1094                         continue;
1095
1096                 if (!bacmp(&sco_pi(sk)->src, &hdev->bdaddr) ||
1097                     !bacmp(&sco_pi(sk)->src, BDADDR_ANY)) {
1098                         lm |= HCI_LM_ACCEPT;
1099
1100                         if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))
1101                                 *flags |= HCI_PROTO_DEFER;
1102                         break;
1103                 }
1104         }
1105         read_unlock(&sco_sk_list.lock);
1106
1107         return lm;
1108 }
1109
1110 static void sco_connect_cfm(struct hci_conn *hcon, __u8 status)
1111 {
1112         if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
1113                 return;
1114
1115         BT_DBG("hcon %p bdaddr %pMR status %d", hcon, &hcon->dst, status);
1116
1117         if (!status) {
1118                 struct sco_conn *conn;
1119
1120                 conn = sco_conn_add(hcon);
1121                 if (conn)
1122                         sco_conn_ready(conn);
1123         } else
1124                 sco_conn_del(hcon, bt_to_errno(status));
1125 }
1126
1127 static void sco_disconn_cfm(struct hci_conn *hcon, __u8 reason)
1128 {
1129         if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
1130                 return;
1131
1132         BT_DBG("hcon %p reason %d", hcon, reason);
1133
1134         sco_conn_del(hcon, bt_to_errno(reason));
1135 }
1136
1137 void sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
1138 {
1139         struct sco_conn *conn = hcon->sco_data;
1140
1141         if (!conn)
1142                 goto drop;
1143
1144         BT_DBG("conn %p len %d", conn, skb->len);
1145
1146         if (skb->len) {
1147                 sco_recv_frame(conn, skb);
1148                 return;
1149         }
1150
1151 drop:
1152         kfree_skb(skb);
1153 }
1154
1155 static struct hci_cb sco_cb = {
1156         .name           = "SCO",
1157         .connect_cfm    = sco_connect_cfm,
1158         .disconn_cfm    = sco_disconn_cfm,
1159 };
1160
1161 static int sco_debugfs_show(struct seq_file *f, void *p)
1162 {
1163         struct sock *sk;
1164
1165         read_lock(&sco_sk_list.lock);
1166
1167         sk_for_each(sk, &sco_sk_list.head) {
1168                 seq_printf(f, "%pMR %pMR %d\n", &sco_pi(sk)->src,
1169                            &sco_pi(sk)->dst, sk->sk_state);
1170         }
1171
1172         read_unlock(&sco_sk_list.lock);
1173
1174         return 0;
1175 }
1176
1177 static int sco_debugfs_open(struct inode *inode, struct file *file)
1178 {
1179         return single_open(file, sco_debugfs_show, inode->i_private);
1180 }
1181
1182 static const struct file_operations sco_debugfs_fops = {
1183         .open           = sco_debugfs_open,
1184         .read           = seq_read,
1185         .llseek         = seq_lseek,
1186         .release        = single_release,
1187 };
1188
1189 static struct dentry *sco_debugfs;
1190
1191 static const struct proto_ops sco_sock_ops = {
1192         .family         = PF_BLUETOOTH,
1193         .owner          = THIS_MODULE,
1194         .release        = sco_sock_release,
1195         .bind           = sco_sock_bind,
1196         .connect        = sco_sock_connect,
1197         .listen         = sco_sock_listen,
1198         .accept         = sco_sock_accept,
1199         .getname        = sco_sock_getname,
1200         .sendmsg        = sco_sock_sendmsg,
1201         .recvmsg        = sco_sock_recvmsg,
1202         .poll           = bt_sock_poll,
1203         .ioctl          = bt_sock_ioctl,
1204         .mmap           = sock_no_mmap,
1205         .socketpair     = sock_no_socketpair,
1206         .shutdown       = sco_sock_shutdown,
1207         .setsockopt     = sco_sock_setsockopt,
1208         .getsockopt     = sco_sock_getsockopt
1209 };
1210
1211 static const struct net_proto_family sco_sock_family_ops = {
1212         .family = PF_BLUETOOTH,
1213         .owner  = THIS_MODULE,
1214         .create = sco_sock_create,
1215 };
1216
1217 int __init sco_init(void)
1218 {
1219         int err;
1220
1221         BUILD_BUG_ON(sizeof(struct sockaddr_sco) > sizeof(struct sockaddr));
1222
1223         err = proto_register(&sco_proto, 0);
1224         if (err < 0)
1225                 return err;
1226
1227         err = bt_sock_register(BTPROTO_SCO, &sco_sock_family_ops);
1228         if (err < 0) {
1229                 BT_ERR("SCO socket registration failed");
1230                 goto error;
1231         }
1232
1233         err = bt_procfs_init(&init_net, "sco", &sco_sk_list, NULL);
1234         if (err < 0) {
1235                 BT_ERR("Failed to create SCO proc file");
1236                 bt_sock_unregister(BTPROTO_SCO);
1237                 goto error;
1238         }
1239
1240         BT_INFO("SCO socket layer initialized");
1241
1242         hci_register_cb(&sco_cb);
1243
1244         if (IS_ERR_OR_NULL(bt_debugfs))
1245                 return 0;
1246
1247         sco_debugfs = debugfs_create_file("sco", 0444, bt_debugfs,
1248                                           NULL, &sco_debugfs_fops);
1249
1250         return 0;
1251
1252 error:
1253         proto_unregister(&sco_proto);
1254         return err;
1255 }
1256
1257 void sco_exit(void)
1258 {
1259         bt_procfs_cleanup(&init_net, "sco");
1260
1261         debugfs_remove(sco_debugfs);
1262
1263         hci_unregister_cb(&sco_cb);
1264
1265         bt_sock_unregister(BTPROTO_SCO);
1266
1267         proto_unregister(&sco_proto);
1268 }
1269
1270 module_param(disable_esco, bool, 0644);
1271 MODULE_PARM_DESC(disable_esco, "Disable eSCO connection creation");