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