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