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