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