Merge tag 'v3.10.55' into update
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / net / bluetooth / sco.c
CommitLineData
8e87d142 1/*
1da177e4
LT
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
8e87d142
YH
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
1da177e4
LT
18 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19
8e87d142
YH
20 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
1da177e4
LT
22 SOFTWARE IS DISCLAIMED.
23*/
24
25/* Bluetooth SCO sockets. */
26
1da177e4 27#include <linux/module.h>
aef7d97c
MH
28#include <linux/debugfs.h>
29#include <linux/seq_file.h>
1da177e4
LT
30
31#include <net/bluetooth/bluetooth.h>
32#include <net/bluetooth/hci_core.h>
33#include <net/bluetooth/sco.h>
34
eb939922 35static bool disable_esco;
1da177e4 36
90ddc4f0 37static const struct proto_ops sco_sock_ops;
1da177e4
LT
38
39static struct bt_sock_list sco_sk_list = {
d5fb2962 40 .lock = __RW_LOCK_UNLOCKED(sco_sk_list.lock)
1da177e4
LT
41};
42
43static void __sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent);
44static void sco_chan_del(struct sock *sk, int err);
45
1da177e4
LT
46static void sco_sock_close(struct sock *sk);
47static void sco_sock_kill(struct sock *sk);
48
49/* ---- SCO timers ---- */
50static 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
65static 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
71static 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
1da177e4 77/* ---- SCO connections ---- */
519e42b3 78static struct sco_conn *sco_conn_add(struct hci_conn *hcon)
1da177e4
LT
79{
80 struct hci_dev *hdev = hcon->hdev;
25ea6db0 81 struct sco_conn *conn = hcon->sco_data;
1da177e4 82
519e42b3 83 if (conn)
1da177e4
LT
84 return conn;
85
c10cc5a9 86 conn = kzalloc(sizeof(struct sco_conn), GFP_KERNEL);
25ea6db0 87 if (!conn)
1da177e4 88 return NULL;
1da177e4
LT
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);
25ea6db0 104
1da177e4
LT
105 return conn;
106}
107
6039aa73 108static struct sock *sco_chan_get(struct sco_conn *conn)
1da177e4
LT
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
117static int sco_conn_del(struct hci_conn *hcon, int err)
118{
735cbc47 119 struct sco_conn *conn = hcon->sco_data;
1da177e4
LT
120 struct sock *sk;
121
735cbc47 122 if (!conn)
1da177e4
LT
123 return 0;
124
125 BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
126
127 /* Kill socket */
735cbc47
AE
128 sk = sco_chan_get(conn);
129 if (sk) {
1da177e4
LT
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
6039aa73
GP
142static int sco_chan_add(struct sco_conn *conn, struct sock *sk,
143 struct sock *parent)
1da177e4
LT
144{
145 int err = 0;
146
147 sco_conn_lock(conn);
b9dbdbc1 148 if (conn->sk)
1da177e4 149 err = -EBUSY;
b9dbdbc1 150 else
1da177e4 151 __sco_chan_add(conn, sk, parent);
b9dbdbc1 152
1da177e4
LT
153 sco_conn_unlock(conn);
154 return err;
155}
156
157static int sco_connect(struct sock *sk)
158{
159 bdaddr_t *src = &bt_sk(sk)->src;
160 bdaddr_t *dst = &bt_sk(sk)->dst;
6fa3eb70 161 __u16 pkt_type = sco_pi(sk)->pkt_type;
1da177e4
LT
162 struct sco_conn *conn;
163 struct hci_conn *hcon;
164 struct hci_dev *hdev;
b6a0dc82 165 int err, type;
1da177e4 166
6ed93dc6 167 BT_DBG("%pMR -> %pMR", src, dst);
1da177e4 168
735cbc47
AE
169 hdev = hci_get_route(dst, src);
170 if (!hdev)
1da177e4
LT
171 return -EHOSTUNREACH;
172
09fd0de5 173 hci_dev_lock(hdev);
1da177e4 174
7cb127d5
MH
175 if (lmp_esco_capable(hdev) && !disable_esco)
176 type = ESCO_LINK;
6fa3eb70 177 else {
7cb127d5 178 type = SCO_LINK;
6fa3eb70
S
179 pkt_type &= SCO_ESCO_MASK;
180 }
b6a0dc82 181
6fa3eb70
S
182 hcon = hci_connect(hdev, type, pkt_type, dst, BDADDR_BREDR,
183 BT_SECURITY_LOW, HCI_AT_NO_BONDING);
30e76272
VT
184 if (IS_ERR(hcon)) {
185 err = PTR_ERR(hcon);
1da177e4 186 goto done;
30e76272 187 }
1da177e4 188
519e42b3 189 conn = sco_conn_add(hcon);
1da177e4 190 if (!conn) {
76a68ba0 191 hci_conn_drop(hcon);
30e76272 192 err = -ENOMEM;
1da177e4
LT
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 }
b6a0dc82 210
1da177e4 211done:
09fd0de5 212 hci_dev_unlock(hdev);
1da177e4
LT
213 hci_dev_put(hdev);
214 return err;
215}
216
6039aa73 217static int sco_send_frame(struct sock *sk, struct msghdr *msg, int len)
1da177e4
LT
218{
219 struct sco_conn *conn = sco_pi(sk)->conn;
220 struct sk_buff *skb;
088ce088 221 int err;
1da177e4
LT
222
223 /* Check outgoing MTU */
224 if (len > conn->mtu)
225 return -EINVAL;
226
227 BT_DBG("sk %p len %d", sk, len);
228
088ce088 229 skb = bt_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err);
b9dbdbc1 230 if (!skb)
1da177e4
LT
231 return err;
232
088ce088 233 if (memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len)) {
b9dbdbc1
GP
234 kfree_skb(skb);
235 return -EFAULT;
1da177e4
LT
236 }
237
0d861d8b 238 hci_send_sco(conn->hcon, skb);
1da177e4 239
088ce088 240 return len;
1da177e4
LT
241}
242
6039aa73 243static void sco_recv_frame(struct sco_conn *conn, struct sk_buff *skb)
1da177e4
LT
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
258drop:
259 kfree_skb(skb);
1da177e4
LT
260}
261
262/* -------- Socket interface ---------- */
fb334059 263static struct sock *__sco_get_sock_listen_by_addr(bdaddr_t *ba)
1da177e4 264{
fb334059
MH
265 struct sock *sk;
266
b67bfe0d 267 sk_for_each(sk, &sco_sk_list.head) {
fb334059
MH
268 if (sk->sk_state != BT_LISTEN)
269 continue;
1da177e4 270
1da177e4 271 if (!bacmp(&bt_sk(sk)->src, ba))
fb334059
MH
272 return sk;
273 }
274
275 return NULL;
1da177e4
LT
276}
277
278/* Find socket listening on source bdaddr.
279 * Returns closest match.
280 */
281static struct sock *sco_get_sock_listen(bdaddr_t *src)
282{
283 struct sock *sk = NULL, *sk1 = NULL;
1da177e4
LT
284
285 read_lock(&sco_sk_list.lock);
286
b67bfe0d 287 sk_for_each(sk, &sco_sk_list.head) {
1da177e4
LT
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
b67bfe0d 302 return sk ? sk : sk1;
1da177e4
LT
303}
304
305static 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
313static 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 */
332static 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
fd0b3ff7 345static void __sco_sock_close(struct sock *sk)
1da177e4 346{
fd0b3ff7 347 BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
1da177e4
LT
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:
b7e98b51 356 if (sco_pi(sk)->conn->hcon) {
4a77708b
LAD
357 sk->sk_state = BT_DISCONN;
358 sco_sock_set_timer(sk, SCO_DISCONN_TIMEOUT);
76a68ba0 359 hci_conn_drop(sco_pi(sk)->conn->hcon);
4a77708b
LAD
360 sco_pi(sk)->conn->hcon = NULL;
361 } else
362 sco_chan_del(sk, ECONNRESET);
363 break;
364
eb20ff9c 365 case BT_CONNECT2:
1da177e4
LT
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;
3ff50b79 374 }
fd0b3ff7 375}
1da177e4 376
fd0b3ff7
MH
377/* Must be called on unlocked socket. */
378static void sco_sock_close(struct sock *sk)
379{
380 sco_sock_clear_timer(sk);
381 lock_sock(sk);
382 __sco_sock_close(sk);
1da177e4 383 release_sock(sk);
1da177e4
LT
384 sco_sock_kill(sk);
385}
386
387static void sco_sock_init(struct sock *sk, struct sock *parent)
388{
389 BT_DBG("sk %p", sk);
390
6230c9b4 391 if (parent) {
1da177e4 392 sk->sk_type = parent->sk_type;
20714bfe 393 bt_sk(sk)->flags = bt_sk(parent)->flags;
6230c9b4
PM
394 security_sk_clone(parent, sk);
395 }
1da177e4
LT
396}
397
398static struct proto sco_proto = {
399 .name = "SCO",
400 .owner = THIS_MODULE,
401 .obj_size = sizeof(struct sco_pinfo)
402};
403
1b8d7ae4 404static struct sock *sco_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio)
1da177e4
LT
405{
406 struct sock *sk;
407
6257ff21 408 sk = sk_alloc(net, PF_BLUETOOTH, prio, &sco_proto);
1da177e4
LT
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
b24b8a24 423 setup_timer(&sk->sk_timer, sco_sock_timeout, (unsigned long)sk);
1da177e4
LT
424
425 bt_sock_link(&sco_sk_list, sk);
426 return sk;
427}
428
3f378b68
EP
429static int sco_sock_create(struct net *net, struct socket *sock, int protocol,
430 int kern)
1da177e4
LT
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
1b8d7ae4 443 sk = sco_sock_alloc(net, sock, protocol, GFP_ATOMIC);
74da626a 444 if (!sk)
1da177e4
LT
445 return -ENOMEM;
446
447 sco_sock_init(sk, NULL);
448 return 0;
449}
450
6fa3eb70 451static int sco_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
1da177e4 452{
6fa3eb70 453 struct sockaddr_sco sa;
1da177e4 454 struct sock *sk = sock->sk;
6fa3eb70 455 int len, err = 0;
1da177e4 456
6fa3eb70 457 BT_DBG("sk %p %pMR", sk, &sa.sco_bdaddr);
1da177e4
LT
458
459 if (!addr || addr->sa_family != AF_BLUETOOTH)
460 return -EINVAL;
461
6fa3eb70
S
462 memset(&sa, 0, sizeof(sa));
463 len = min_t(unsigned int, sizeof(sa), alen);
464 memcpy(&sa, addr, len);
465
1da177e4
LT
466 lock_sock(sk);
467
468 if (sk->sk_state != BT_OPEN) {
469 err = -EBADFD;
470 goto done;
471 }
472
8ed21f7e
MH
473 if (sk->sk_type != SOCK_SEQPACKET) {
474 err = -EINVAL;
475 goto done;
1da177e4
LT
476 }
477
6fa3eb70
S
478 bacpy(&bt_sk(sk)->src, &sa.sco_bdaddr);
479 sco_pi(sk)->pkt_type = sa.sco_pkt_type;
8ed21f7e
MH
480
481 sk->sk_state = BT_BOUND;
1da177e4
LT
482
483done:
484 release_sock(sk);
485 return err;
486}
487
488static int sco_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
489{
1da177e4 490 struct sock *sk = sock->sk;
6fa3eb70
S
491 struct sockaddr_sco sa;
492 int len, err;
1da177e4
LT
493
494 BT_DBG("sk %p", sk);
495
6fa3eb70 496 if (!addr || addr->sa_family != AF_BLUETOOTH)
1da177e4
LT
497 return -EINVAL;
498
6fa3eb70
S
499 memset(&sa, 0, sizeof(sa));
500 len = min_t(unsigned int, sizeof(sa), alen);
501 memcpy(&sa, addr, len);
1da177e4
LT
502
503 lock_sock(sk);
504
6fa3eb70
S
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
1da177e4 515 /* Set destination address and psm */
6fa3eb70
S
516 bacpy(&bt_sk(sk)->dst, &sa.sco_bdaddr);
517 sco_pi(sk)->pkt_type = sa.sco_pkt_type;
1da177e4 518
735cbc47
AE
519 err = sco_connect(sk);
520 if (err)
1da177e4
LT
521 goto done;
522
8e87d142 523 err = bt_sock_wait_state(sk, BT_CONNECTED,
be7c2b99 524 sock_sndtimeo(sk, flags & O_NONBLOCK));
1da177e4
LT
525
526done:
527 release_sock(sk);
528 return err;
529}
530
531static int sco_sock_listen(struct socket *sock, int backlog)
532{
533 struct sock *sk = sock->sk;
fb334059 534 bdaddr_t *src = &bt_sk(sk)->src;
1da177e4
LT
535 int err = 0;
536
537 BT_DBG("sk %p backlog %d", sk, backlog);
538
539 lock_sock(sk);
540
7d5d775a 541 if (sk->sk_state != BT_BOUND) {
1da177e4
LT
542 err = -EBADFD;
543 goto done;
544 }
545
7d5d775a
MH
546 if (sk->sk_type != SOCK_SEQPACKET) {
547 err = -EINVAL;
548 goto done;
549 }
550
fb334059
MH
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
1da177e4
LT
558 sk->sk_max_ack_backlog = backlog;
559 sk->sk_ack_backlog = 0;
fb334059 560
1da177e4
LT
561 sk->sk_state = BT_LISTEN;
562
fb334059
MH
563unlock:
564 write_unlock(&sco_sk_list.lock);
565
1da177e4
LT
566done:
567 release_sock(sk);
568 return err;
569}
570
571static 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
1da177e4
LT
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). */
aa395145 585 add_wait_queue_exclusive(sk_sleep(sk), &wait);
552b0d3c 586 while (1) {
1da177e4 587 set_current_state(TASK_INTERRUPTIBLE);
552b0d3c
PH
588
589 if (sk->sk_state != BT_LISTEN) {
590 err = -EBADFD;
1da177e4
LT
591 break;
592 }
593
552b0d3c
PH
594 ch = bt_accept_dequeue(sk, newsock);
595 if (ch)
596 break;
1da177e4 597
552b0d3c
PH
598 if (!timeo) {
599 err = -EAGAIN;
1da177e4
LT
600 break;
601 }
602
603 if (signal_pending(current)) {
604 err = sock_intr_errno(timeo);
605 break;
606 }
552b0d3c
PH
607
608 release_sock(sk);
609 timeo = schedule_timeout(timeo);
610 lock_sock(sk);
1da177e4 611 }
552b0d3c 612 __set_current_state(TASK_RUNNING);
aa395145 613 remove_wait_queue(sk_sleep(sk), &wait);
1da177e4
LT
614
615 if (err)
616 goto done;
617
618 newsock->state = SS_CONNECTED;
619
620 BT_DBG("new socket %p", ch);
621
622done:
623 release_sock(sk);
624 return err;
625}
626
627static 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);
6fa3eb70 641 sa->sco_pkt_type = sco_pi(sk)->pkt_type;
1da177e4
LT
642
643 return 0;
644}
645
8e87d142 646static int sco_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
1da177e4
LT
647 struct msghdr *msg, size_t len)
648{
649 struct sock *sk = sock->sk;
b9dbdbc1 650 int err;
1da177e4
LT
651
652 BT_DBG("sock %p, sk %p", sock, sk);
653
c1cbe4b7
BL
654 err = sock_error(sk);
655 if (err)
656 return err;
1da177e4
LT
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
fa5513be
FD
672static 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
20714bfe
FD
708static 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)) {
fa5513be 718 sco_conn_defer_accept(pi->conn->hcon, 0);
20714bfe
FD
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
b7058842 730static int sco_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen)
1da177e4
LT
731{
732 struct sock *sk = sock->sk;
733 int err = 0;
b96e9c67 734 u32 opt;
1da177e4
LT
735
736 BT_DBG("sk %p", sk);
737
738 lock_sock(sk);
739
740 switch (optname) {
b96e9c67
FD
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
1da177e4
LT
759 default:
760 err = -ENOPROTOOPT;
761 break;
762 }
763
764 release_sock(sk);
765 return err;
766}
767
d58daf42 768static int sco_sock_getsockopt_old(struct socket *sock, int optname, char __user *optval, int __user *optlen)
1da177e4
LT
769{
770 struct sock *sk = sock->sk;
771 struct sco_options opts;
772 struct sco_conninfo cinfo;
8e87d142 773 int len, err = 0;
1da177e4
LT
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
c4c896e1 805 memset(&cinfo, 0, sizeof(cinfo));
1da177e4
LT
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
d58daf42
MH
824static 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) {
b96e9c67
FD
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
d58daf42
MH
853 default:
854 err = -ENOPROTOOPT;
855 break;
856 }
857
858 release_sock(sk);
859 return err;
860}
861
fd0b3ff7
MH
862static 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
819f3e7a
VD
878 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
879 !(current->flags & PF_EXITING))
fd0b3ff7 880 err = bt_sock_wait_state(sk, BT_CLOSED,
be7c2b99 881 sk->sk_lingertime);
fd0b3ff7
MH
882 }
883 release_sock(sk);
884 return err;
885}
886
1da177e4
LT
887static int sco_sock_release(struct socket *sock)
888{
889 struct sock *sk = sock->sk;
890 int err = 0;
891
892 BT_DBG("sock %p, sk %p", sock, sk);
893
894 if (!sk)
895 return 0;
896
897 sco_sock_close(sk);
898
819f3e7a
VD
899 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
900 !(current->flags & PF_EXITING)) {
1da177e4
LT
901 lock_sock(sk);
902 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
903 release_sock(sk);
904 }
905
906 sock_orphan(sk);
907 sco_sock_kill(sk);
908 return err;
909}
910
911static void __sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent)
912{
913 BT_DBG("conn %p", conn);
914
915 sco_pi(sk)->conn = conn;
916 conn->sk = sk;
917
918 if (parent)
919 bt_accept_enqueue(parent, sk);
920}
921
8e87d142 922/* Delete channel.
1da177e4
LT
923 * Must be called on the locked socket. */
924static void sco_chan_del(struct sock *sk, int err)
925{
926 struct sco_conn *conn;
927
928 conn = sco_pi(sk)->conn;
929
930 BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
931
0b27a4b9
GP
932 if (conn) {
933 sco_conn_lock(conn);
934 conn->sk = NULL;
935 sco_pi(sk)->conn = NULL;
936 sco_conn_unlock(conn);
937
938 if (conn->hcon)
76a68ba0 939 hci_conn_drop(conn->hcon);
0b27a4b9
GP
940 }
941
1da177e4
LT
942 sk->sk_state = BT_CLOSED;
943 sk->sk_err = err;
944 sk->sk_state_change(sk);
945
946 sock_set_flag(sk, SOCK_ZAPPED);
947}
948
949static void sco_conn_ready(struct sco_conn *conn)
950{
735cbc47
AE
951 struct sock *parent;
952 struct sock *sk = conn->sk;
1da177e4
LT
953
954 BT_DBG("conn %p", conn);
955
735cbc47 956 if (sk) {
1da177e4
LT
957 sco_sock_clear_timer(sk);
958 bh_lock_sock(sk);
959 sk->sk_state = BT_CONNECTED;
960 sk->sk_state_change(sk);
961 bh_unlock_sock(sk);
962 } else {
40528088
AG
963 sco_conn_lock(conn);
964
1da177e4 965 parent = sco_get_sock_listen(conn->src);
40528088
AG
966 if (!parent) {
967 sco_conn_unlock(conn);
968 return;
969 }
1da177e4
LT
970
971 bh_lock_sock(parent);
972
b9dbdbc1 973 sk = sco_sock_alloc(sock_net(parent), NULL,
be7c2b99 974 BTPROTO_SCO, GFP_ATOMIC);
1da177e4
LT
975 if (!sk) {
976 bh_unlock_sock(parent);
40528088
AG
977 sco_conn_unlock(conn);
978 return;
1da177e4
LT
979 }
980
981 sco_sock_init(sk, parent);
982
983 bacpy(&bt_sk(sk)->src, conn->src);
984 bacpy(&bt_sk(sk)->dst, conn->dst);
985
986 hci_conn_hold(conn->hcon);
987 __sco_chan_add(conn, sk, parent);
988
20714bfe
FD
989 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(parent)->flags))
990 sk->sk_state = BT_CONNECT2;
991 else
992 sk->sk_state = BT_CONNECTED;
1da177e4
LT
993
994 /* Wake up parent */
995 parent->sk_data_ready(parent, 1);
996
997 bh_unlock_sock(parent);
1da177e4 998
40528088
AG
999 sco_conn_unlock(conn);
1000 }
1da177e4
LT
1001}
1002
1003/* ----- SCO interface with lower layer (HCI) ----- */
20714bfe 1004int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags)
1da177e4 1005{
fc5fef61 1006 struct sock *sk;
71aeeaa1
MH
1007 int lm = 0;
1008
6ed93dc6 1009 BT_DBG("hdev %s, bdaddr %pMR", hdev->name, bdaddr);
1da177e4 1010
71aeeaa1
MH
1011 /* Find listening sockets */
1012 read_lock(&sco_sk_list.lock);
b67bfe0d 1013 sk_for_each(sk, &sco_sk_list.head) {
71aeeaa1
MH
1014 if (sk->sk_state != BT_LISTEN)
1015 continue;
1016
1017 if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr) ||
be7c2b99 1018 !bacmp(&bt_sk(sk)->src, BDADDR_ANY)) {
71aeeaa1 1019 lm |= HCI_LM_ACCEPT;
20714bfe
FD
1020
1021 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))
1022 *flags |= HCI_PROTO_DEFER;
71aeeaa1
MH
1023 break;
1024 }
1025 }
1026 read_unlock(&sco_sk_list.lock);
1027
1028 return lm;
1da177e4
LT
1029}
1030
9e664631 1031void sco_connect_cfm(struct hci_conn *hcon, __u8 status)
1da177e4 1032{
6ed93dc6 1033 BT_DBG("hcon %p bdaddr %pMR status %d", hcon, &hcon->dst, status);
1da177e4
LT
1034 if (!status) {
1035 struct sco_conn *conn;
1036
519e42b3 1037 conn = sco_conn_add(hcon);
1da177e4
LT
1038 if (conn)
1039 sco_conn_ready(conn);
8e87d142 1040 } else
e175072f 1041 sco_conn_del(hcon, bt_to_errno(status));
1da177e4
LT
1042}
1043
9e664631 1044void sco_disconn_cfm(struct hci_conn *hcon, __u8 reason)
1da177e4
LT
1045{
1046 BT_DBG("hcon %p reason %d", hcon, reason);
1047
e175072f 1048 sco_conn_del(hcon, bt_to_errno(reason));
1da177e4
LT
1049}
1050
686ebf28 1051int sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
1da177e4
LT
1052{
1053 struct sco_conn *conn = hcon->sco_data;
1054
1055 if (!conn)
1056 goto drop;
1057
1058 BT_DBG("conn %p len %d", conn, skb->len);
1059
1060 if (skb->len) {
1061 sco_recv_frame(conn, skb);
1062 return 0;
1063 }
1064
1065drop:
8e87d142 1066 kfree_skb(skb);
1da177e4
LT
1067 return 0;
1068}
1069
aef7d97c 1070static int sco_debugfs_show(struct seq_file *f, void *p)
1da177e4
LT
1071{
1072 struct sock *sk;
1da177e4 1073
ee65d19e 1074 read_lock(&sco_sk_list.lock);
1da177e4 1075
b67bfe0d 1076 sk_for_each(sk, &sco_sk_list.head) {
fcb73338
AE
1077 seq_printf(f, "%pMR %pMR %d\n", &bt_sk(sk)->src,
1078 &bt_sk(sk)->dst, sk->sk_state);
be9d1227 1079 }
1da177e4 1080
ee65d19e 1081 read_unlock(&sco_sk_list.lock);
1da177e4 1082
aef7d97c 1083 return 0;
1da177e4
LT
1084}
1085
aef7d97c
MH
1086static int sco_debugfs_open(struct inode *inode, struct file *file)
1087{
1088 return single_open(file, sco_debugfs_show, inode->i_private);
1089}
1090
1091static const struct file_operations sco_debugfs_fops = {
1092 .open = sco_debugfs_open,
1093 .read = seq_read,
1094 .llseek = seq_lseek,
1095 .release = single_release,
1096};
1097
1098static struct dentry *sco_debugfs;
1da177e4 1099
90ddc4f0 1100static const struct proto_ops sco_sock_ops = {
1da177e4
LT
1101 .family = PF_BLUETOOTH,
1102 .owner = THIS_MODULE,
1103 .release = sco_sock_release,
1104 .bind = sco_sock_bind,
1105 .connect = sco_sock_connect,
1106 .listen = sco_sock_listen,
1107 .accept = sco_sock_accept,
1108 .getname = sco_sock_getname,
1109 .sendmsg = sco_sock_sendmsg,
20714bfe 1110 .recvmsg = sco_sock_recvmsg,
1da177e4 1111 .poll = bt_sock_poll,
3241ad82 1112 .ioctl = bt_sock_ioctl,
1da177e4
LT
1113 .mmap = sock_no_mmap,
1114 .socketpair = sock_no_socketpair,
fd0b3ff7 1115 .shutdown = sco_sock_shutdown,
1da177e4
LT
1116 .setsockopt = sco_sock_setsockopt,
1117 .getsockopt = sco_sock_getsockopt
1118};
1119
ec1b4cf7 1120static const struct net_proto_family sco_sock_family_ops = {
1da177e4
LT
1121 .family = PF_BLUETOOTH,
1122 .owner = THIS_MODULE,
1123 .create = sco_sock_create,
1124};
1125
64274518 1126int __init sco_init(void)
1da177e4
LT
1127{
1128 int err;
1129
1130 err = proto_register(&sco_proto, 0);
1131 if (err < 0)
1132 return err;
1133
1134 err = bt_sock_register(BTPROTO_SCO, &sco_sock_family_ops);
1135 if (err < 0) {
1136 BT_ERR("SCO socket registration failed");
1137 goto error;
1138 }
1139
b0316615 1140 err = bt_procfs_init(&init_net, "sco", &sco_sk_list, NULL);
de9b9212
MY
1141 if (err < 0) {
1142 BT_ERR("Failed to create SCO proc file");
1143 bt_sock_unregister(BTPROTO_SCO);
1144 goto error;
1145 }
1146
aef7d97c 1147 if (bt_debugfs) {
be7c2b99
GP
1148 sco_debugfs = debugfs_create_file("sco", 0444, bt_debugfs,
1149 NULL, &sco_debugfs_fops);
aef7d97c
MH
1150 if (!sco_debugfs)
1151 BT_ERR("Failed to create SCO debug file");
1152 }
1da177e4 1153
1da177e4
LT
1154 BT_INFO("SCO socket layer initialized");
1155
1156 return 0;
1157
1158error:
1159 proto_unregister(&sco_proto);
1160 return err;
1161}
1162
64274518 1163void __exit sco_exit(void)
1da177e4 1164{
de9b9212
MY
1165 bt_procfs_cleanup(&init_net, "sco");
1166
aef7d97c 1167 debugfs_remove(sco_debugfs);
1da177e4 1168
5e9d7f86 1169 bt_sock_unregister(BTPROTO_SCO);
1da177e4 1170
1da177e4
LT
1171 proto_unregister(&sco_proto);
1172}
1173
7cb127d5
MH
1174module_param(disable_esco, bool, 0644);
1175MODULE_PARM_DESC(disable_esco, "Disable eSCO connection creation");