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