]> git.ipfire.org Git - thirdparty/linux.git/blame - net/bluetooth/sco.c
fs: indicate request originates from old mount API
[thirdparty/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>
174cd4b1 30#include <linux/sched/signal.h>
1da177e4
LT
31
32#include <net/bluetooth/bluetooth.h>
33#include <net/bluetooth/hci_core.h>
34#include <net/bluetooth/sco.h>
35
eb939922 36static bool disable_esco;
1da177e4 37
90ddc4f0 38static const struct proto_ops sco_sock_ops;
1da177e4
LT
39
40static struct bt_sock_list sco_sk_list = {
d5fb2962 41 .lock = __RW_LOCK_UNLOCKED(sco_sk_list.lock)
1da177e4
LT
42};
43
fc8f525a
MH
44/* ---- SCO connections ---- */
45struct sco_conn {
46 struct hci_conn *hcon;
47
48 spinlock_t lock;
49 struct sock *sk;
50
ba316be1
DCZX
51 struct delayed_work timeout_work;
52
fc8f525a
MH
53 unsigned int mtu;
54};
55
0f90d320
MY
56#define sco_conn_lock(c) spin_lock(&c->lock)
57#define sco_conn_unlock(c) spin_unlock(&c->lock)
fc8f525a 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;
f6873401 71 struct bt_codec codec;
2a0dccb3
MH
72 struct sco_conn *conn;
73};
74
1da177e4 75/* ---- SCO timers ---- */
068d69e5
MH
76#define SCO_CONN_TIMEOUT (HZ * 40)
77#define SCO_DISCONN_TIMEOUT (HZ * 2)
78
ba316be1 79static void sco_sock_timeout(struct work_struct *work)
1da177e4 80{
ba316be1
DCZX
81 struct sco_conn *conn = container_of(work, struct sco_conn,
82 timeout_work.work);
83 struct sock *sk;
84
85 sco_conn_lock(conn);
86 sk = conn->sk;
87 if (sk)
88 sock_hold(sk);
89 sco_conn_unlock(conn);
90
91 if (!sk)
92 return;
1da177e4
LT
93
94 BT_DBG("sock %p state %d", sk, sk->sk_state);
95
27c24fda 96 lock_sock(sk);
1da177e4
LT
97 sk->sk_err = ETIMEDOUT;
98 sk->sk_state_change(sk);
27c24fda 99 release_sock(sk);
1da177e4
LT
100 sock_put(sk);
101}
102
103static void sco_sock_set_timer(struct sock *sk, long timeout)
104{
ba316be1
DCZX
105 if (!sco_pi(sk)->conn)
106 return;
107
1da177e4 108 BT_DBG("sock %p state %d timeout %ld", sk, sk->sk_state, timeout);
ba316be1
DCZX
109 cancel_delayed_work(&sco_pi(sk)->conn->timeout_work);
110 schedule_delayed_work(&sco_pi(sk)->conn->timeout_work, timeout);
1da177e4
LT
111}
112
113static void sco_sock_clear_timer(struct sock *sk)
114{
ba316be1
DCZX
115 if (!sco_pi(sk)->conn)
116 return;
117
1da177e4 118 BT_DBG("sock %p state %d", sk, sk->sk_state);
ba316be1 119 cancel_delayed_work(&sco_pi(sk)->conn->timeout_work);
1da177e4
LT
120}
121
1da177e4 122/* ---- SCO connections ---- */
519e42b3 123static struct sco_conn *sco_conn_add(struct hci_conn *hcon)
1da177e4
LT
124{
125 struct hci_dev *hdev = hcon->hdev;
25ea6db0 126 struct sco_conn *conn = hcon->sco_data;
1da177e4 127
3dcaa192
PV
128 if (conn) {
129 if (!conn->hcon)
130 conn->hcon = hcon;
1da177e4 131 return conn;
3dcaa192 132 }
1da177e4 133
c10cc5a9 134 conn = kzalloc(sizeof(struct sco_conn), GFP_KERNEL);
25ea6db0 135 if (!conn)
1da177e4 136 return NULL;
1da177e4
LT
137
138 spin_lock_init(&conn->lock);
49d8a560 139 INIT_DELAYED_WORK(&conn->timeout_work, sco_sock_timeout);
1da177e4
LT
140
141 hcon->sco_data = conn;
142 conn->hcon = hcon;
143
1da177e4
LT
144 if (hdev->sco_mtu > 0)
145 conn->mtu = hdev->sco_mtu;
146 else
147 conn->mtu = 60;
148
149 BT_DBG("hcon %p conn %p", hcon, conn);
25ea6db0 150
1da177e4
LT
151 return conn;
152}
153
e03ab519
MH
154/* Delete channel.
155 * Must be called on the locked socket. */
156static void sco_chan_del(struct sock *sk, int err)
157{
158 struct sco_conn *conn;
159
160 conn = sco_pi(sk)->conn;
161
162 BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
163
164 if (conn) {
165 sco_conn_lock(conn);
166 conn->sk = NULL;
167 sco_pi(sk)->conn = NULL;
168 sco_conn_unlock(conn);
169
170 if (conn->hcon)
171 hci_conn_drop(conn->hcon);
172 }
173
174 sk->sk_state = BT_CLOSED;
175 sk->sk_err = err;
176 sk->sk_state_change(sk);
177
178 sock_set_flag(sk, SOCK_ZAPPED);
179}
180
df945360 181static void sco_conn_del(struct hci_conn *hcon, int err)
1da177e4 182{
735cbc47 183 struct sco_conn *conn = hcon->sco_data;
1da177e4
LT
184 struct sock *sk;
185
735cbc47 186 if (!conn)
df945360 187 return;
1da177e4
LT
188
189 BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
190
191 /* Kill socket */
eb5a4de8
MH
192 sco_conn_lock(conn);
193 sk = conn->sk;
f4712fa9
DCZX
194 if (sk)
195 sock_hold(sk);
eb5a4de8
MH
196 sco_conn_unlock(conn);
197
735cbc47 198 if (sk) {
27c24fda 199 lock_sock(sk);
1da177e4
LT
200 sco_sock_clear_timer(sk);
201 sco_chan_del(sk, err);
27c24fda 202 release_sock(sk);
75e34f5c 203 sock_put(sk);
1da177e4
LT
204 }
205
49d8a560
DCZX
206 /* Ensure no more work items will run before freeing conn. */
207 cancel_delayed_work_sync(&conn->timeout_work);
208
1da177e4
LT
209 hcon->sco_data = NULL;
210 kfree(conn);
1da177e4
LT
211}
212
c4297e8f
MH
213static void __sco_chan_add(struct sco_conn *conn, struct sock *sk,
214 struct sock *parent)
015b01cb
MH
215{
216 BT_DBG("conn %p", conn);
217
218 sco_pi(sk)->conn = conn;
219 conn->sk = sk;
220
221 if (parent)
c4f5627f 222 bt_accept_enqueue(parent, sk, true);
015b01cb
MH
223}
224
6039aa73
GP
225static int sco_chan_add(struct sco_conn *conn, struct sock *sk,
226 struct sock *parent)
1da177e4
LT
227{
228 int err = 0;
229
230 sco_conn_lock(conn);
b9dbdbc1 231 if (conn->sk)
1da177e4 232 err = -EBUSY;
b9dbdbc1 233 else
1da177e4 234 __sco_chan_add(conn, sk, parent);
b9dbdbc1 235
1da177e4
LT
236 sco_conn_unlock(conn);
237 return err;
238}
239
9a8ec9e8 240static int sco_connect(struct sock *sk)
1da177e4 241{
1da177e4
LT
242 struct sco_conn *conn;
243 struct hci_conn *hcon;
9a8ec9e8 244 struct hci_dev *hdev;
b6a0dc82 245 int err, type;
1da177e4 246
eea96364 247 BT_DBG("%pMR -> %pMR", &sco_pi(sk)->src, &sco_pi(sk)->dst);
1da177e4 248
9a8ec9e8
LAD
249 hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src, BDADDR_BREDR);
250 if (!hdev)
251 return -EHOSTUNREACH;
252
253 hci_dev_lock(hdev);
254
7cb127d5
MH
255 if (lmp_esco_capable(hdev) && !disable_esco)
256 type = ESCO_LINK;
257 else
258 type = SCO_LINK;
b6a0dc82 259
79dc0087 260 if (sco_pi(sk)->setting == BT_VOICE_TRANSPARENT &&
9a8ec9e8
LAD
261 (!lmp_transp_capable(hdev) || !lmp_esco_capable(hdev))) {
262 err = -EOPNOTSUPP;
263 goto unlock;
264 }
79dc0087 265
eea96364 266 hcon = hci_connect_sco(hdev, type, &sco_pi(sk)->dst,
b2af264a 267 sco_pi(sk)->setting, &sco_pi(sk)->codec);
9a8ec9e8
LAD
268 if (IS_ERR(hcon)) {
269 err = PTR_ERR(hcon);
270 goto unlock;
271 }
272
519e42b3 273 conn = sco_conn_add(hcon);
1da177e4 274 if (!conn) {
76a68ba0 275 hci_conn_drop(hcon);
3dcaa192
PV
276 err = -ENOMEM;
277 goto unlock;
1da177e4
LT
278 }
279
9a8ec9e8
LAD
280 lock_sock(sk);
281
3dcaa192
PV
282 err = sco_chan_add(conn, sk, NULL);
283 if (err) {
284 release_sock(sk);
285 goto unlock;
286 }
287
9a8ec9e8
LAD
288 /* Update source addr of the socket */
289 bacpy(&sco_pi(sk)->src, &hcon->src);
290
1da177e4
LT
291 if (hcon->state == BT_CONNECTED) {
292 sco_sock_clear_timer(sk);
293 sk->sk_state = BT_CONNECTED;
294 } else {
295 sk->sk_state = BT_CONNECT;
296 sco_sock_set_timer(sk, sk->sk_sndtimeo);
297 }
b6a0dc82 298
9a8ec9e8
LAD
299 release_sock(sk);
300
9a8ec9e8
LAD
301unlock:
302 hci_dev_unlock(hdev);
303 hci_dev_put(hdev);
1da177e4
LT
304 return err;
305}
306
0771cbb3 307static int sco_send_frame(struct sock *sk, struct sk_buff *skb)
1da177e4
LT
308{
309 struct sco_conn *conn = sco_pi(sk)->conn;
037ce005 310 int len = skb->len;
1da177e4
LT
311
312 /* Check outgoing MTU */
037ce005 313 if (len > conn->mtu)
1da177e4
LT
314 return -EINVAL;
315
037ce005 316 BT_DBG("sk %p len %d", sk, len);
1da177e4 317
0d861d8b 318 hci_send_sco(conn->hcon, skb);
1da177e4 319
037ce005 320 return len;
1da177e4
LT
321}
322
6039aa73 323static void sco_recv_frame(struct sco_conn *conn, struct sk_buff *skb)
1da177e4 324{
eb5a4de8
MH
325 struct sock *sk;
326
327 sco_conn_lock(conn);
328 sk = conn->sk;
329 sco_conn_unlock(conn);
1da177e4
LT
330
331 if (!sk)
332 goto drop;
333
79dbeafe 334 BT_DBG("sk %p len %u", sk, skb->len);
1da177e4
LT
335
336 if (sk->sk_state != BT_CONNECTED)
337 goto drop;
338
339 if (!sock_queue_rcv_skb(sk, skb))
340 return;
341
342drop:
343 kfree_skb(skb);
1da177e4
LT
344}
345
346/* -------- Socket interface ---------- */
fb334059 347static struct sock *__sco_get_sock_listen_by_addr(bdaddr_t *ba)
1da177e4 348{
fb334059
MH
349 struct sock *sk;
350
b67bfe0d 351 sk_for_each(sk, &sco_sk_list.head) {
fb334059
MH
352 if (sk->sk_state != BT_LISTEN)
353 continue;
1da177e4 354
eea96364 355 if (!bacmp(&sco_pi(sk)->src, ba))
fb334059
MH
356 return sk;
357 }
358
359 return NULL;
1da177e4
LT
360}
361
362/* Find socket listening on source bdaddr.
363 * Returns closest match.
364 */
365static struct sock *sco_get_sock_listen(bdaddr_t *src)
366{
367 struct sock *sk = NULL, *sk1 = NULL;
1da177e4
LT
368
369 read_lock(&sco_sk_list.lock);
370
b67bfe0d 371 sk_for_each(sk, &sco_sk_list.head) {
1da177e4
LT
372 if (sk->sk_state != BT_LISTEN)
373 continue;
374
375 /* Exact match. */
eea96364 376 if (!bacmp(&sco_pi(sk)->src, src))
1da177e4
LT
377 break;
378
379 /* Closest match */
eea96364 380 if (!bacmp(&sco_pi(sk)->src, BDADDR_ANY))
1da177e4
LT
381 sk1 = sk;
382 }
383
384 read_unlock(&sco_sk_list.lock);
385
b67bfe0d 386 return sk ? sk : sk1;
1da177e4
LT
387}
388
389static void sco_sock_destruct(struct sock *sk)
390{
391 BT_DBG("sk %p", sk);
392
393 skb_queue_purge(&sk->sk_receive_queue);
394 skb_queue_purge(&sk->sk_write_queue);
395}
396
397static void sco_sock_cleanup_listen(struct sock *parent)
398{
399 struct sock *sk;
400
401 BT_DBG("parent %p", parent);
402
403 /* Close not yet accepted channels */
404 while ((sk = bt_accept_dequeue(parent, NULL))) {
405 sco_sock_close(sk);
406 sco_sock_kill(sk);
407 }
408
409 parent->sk_state = BT_CLOSED;
410 sock_set_flag(parent, SOCK_ZAPPED);
411}
412
413/* Kill socket (only if zapped and orphan)
414 * Must be called on unlocked socket.
415 */
416static void sco_sock_kill(struct sock *sk)
417{
e1dee2c1 418 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
1da177e4
LT
419 return;
420
421 BT_DBG("sk %p state %d", sk, sk->sk_state);
422
423 /* Kill poor orphan */
424 bt_sock_unlink(&sco_sk_list, sk);
425 sock_set_flag(sk, SOCK_DEAD);
426 sock_put(sk);
427}
428
fd0b3ff7 429static void __sco_sock_close(struct sock *sk)
1da177e4 430{
fd0b3ff7 431 BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
1da177e4
LT
432
433 switch (sk->sk_state) {
434 case BT_LISTEN:
435 sco_sock_cleanup_listen(sk);
436 break;
437
438 case BT_CONNECTED:
439 case BT_CONFIG:
b7e98b51 440 if (sco_pi(sk)->conn->hcon) {
4a77708b
LAD
441 sk->sk_state = BT_DISCONN;
442 sco_sock_set_timer(sk, SCO_DISCONN_TIMEOUT);
435c5133 443 sco_conn_lock(sco_pi(sk)->conn);
76a68ba0 444 hci_conn_drop(sco_pi(sk)->conn->hcon);
4a77708b 445 sco_pi(sk)->conn->hcon = NULL;
435c5133 446 sco_conn_unlock(sco_pi(sk)->conn);
4a77708b
LAD
447 } else
448 sco_chan_del(sk, ECONNRESET);
449 break;
450
eb20ff9c 451 case BT_CONNECT2:
1da177e4
LT
452 case BT_CONNECT:
453 case BT_DISCONN:
454 sco_chan_del(sk, ECONNRESET);
455 break;
456
457 default:
458 sock_set_flag(sk, SOCK_ZAPPED);
459 break;
3ff50b79 460 }
f6873401 461
fd0b3ff7 462}
1da177e4 463
fd0b3ff7
MH
464/* Must be called on unlocked socket. */
465static void sco_sock_close(struct sock *sk)
466{
fd0b3ff7 467 lock_sock(sk);
3f2c89fb 468 sco_sock_clear_timer(sk);
fd0b3ff7 469 __sco_sock_close(sk);
1da177e4 470 release_sock(sk);
1da177e4
LT
471}
472
473static void sco_sock_init(struct sock *sk, struct sock *parent)
474{
475 BT_DBG("sk %p", sk);
476
6230c9b4 477 if (parent) {
1da177e4 478 sk->sk_type = parent->sk_type;
20714bfe 479 bt_sk(sk)->flags = bt_sk(parent)->flags;
6230c9b4
PM
480 security_sk_clone(parent, sk);
481 }
1da177e4
LT
482}
483
484static struct proto sco_proto = {
485 .name = "SCO",
486 .owner = THIS_MODULE,
487 .obj_size = sizeof(struct sco_pinfo)
488};
489
c4297e8f
MH
490static struct sock *sco_sock_alloc(struct net *net, struct socket *sock,
491 int proto, gfp_t prio, int kern)
1da177e4
LT
492{
493 struct sock *sk;
494
6bfa273e 495 sk = bt_sock_alloc(net, sock, &sco_proto, proto, prio, kern);
1da177e4
LT
496 if (!sk)
497 return NULL;
498
1da177e4
LT
499 sk->sk_destruct = sco_sock_destruct;
500 sk->sk_sndtimeo = SCO_CONN_TIMEOUT;
501
ad10b1a4 502 sco_pi(sk)->setting = BT_VOICE_CVSD_16BIT;
f6873401
K
503 sco_pi(sk)->codec.id = BT_CODEC_CVSD;
504 sco_pi(sk)->codec.cid = 0xffff;
505 sco_pi(sk)->codec.vid = 0xffff;
506 sco_pi(sk)->codec.data_path = 0x00;
ad10b1a4 507
1da177e4
LT
508 bt_sock_link(&sco_sk_list, sk);
509 return sk;
510}
511
3f378b68
EP
512static int sco_sock_create(struct net *net, struct socket *sock, int protocol,
513 int kern)
1da177e4
LT
514{
515 struct sock *sk;
516
517 BT_DBG("sock %p", sock);
518
519 sock->state = SS_UNCONNECTED;
520
521 if (sock->type != SOCK_SEQPACKET)
522 return -ESOCKTNOSUPPORT;
523
524 sock->ops = &sco_sock_ops;
525
11aa9c28 526 sk = sco_sock_alloc(net, sock, protocol, GFP_ATOMIC, kern);
74da626a 527 if (!sk)
1da177e4
LT
528 return -ENOMEM;
529
530 sco_sock_init(sk, NULL);
531 return 0;
532}
533
c4297e8f
MH
534static int sco_sock_bind(struct socket *sock, struct sockaddr *addr,
535 int addr_len)
1da177e4
LT
536{
537 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
538 struct sock *sk = sock->sk;
1da177e4
LT
539 int err = 0;
540
d2ecfa76
MJ
541 if (!addr || addr_len < sizeof(struct sockaddr_sco) ||
542 addr->sa_family != AF_BLUETOOTH)
5233252f
DM
543 return -EINVAL;
544
bd7d46dd
TH
545 BT_DBG("sk %p %pMR", sk, &sa->sco_bdaddr);
546
1da177e4
LT
547 lock_sock(sk);
548
549 if (sk->sk_state != BT_OPEN) {
550 err = -EBADFD;
551 goto done;
552 }
553
8ed21f7e
MH
554 if (sk->sk_type != SOCK_SEQPACKET) {
555 err = -EINVAL;
556 goto done;
1da177e4
LT
557 }
558
eea96364 559 bacpy(&sco_pi(sk)->src, &sa->sco_bdaddr);
8ed21f7e
MH
560
561 sk->sk_state = BT_BOUND;
1da177e4
LT
562
563done:
564 release_sock(sk);
565 return err;
566}
567
568static int sco_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
569{
570 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
571 struct sock *sk = sock->sk;
92f185c8 572 int err;
1da177e4
LT
573
574 BT_DBG("sk %p", sk);
575
6503d961
CG
576 if (alen < sizeof(struct sockaddr_sco) ||
577 addr->sa_family != AF_BLUETOOTH)
1da177e4
LT
578 return -EINVAL;
579
9a8ec9e8
LAD
580 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND)
581 return -EBADFD;
1da177e4 582
9a8ec9e8 583 if (sk->sk_type != SOCK_SEQPACKET)
7aa1e7d1 584 err = -EINVAL;
734bc5ff 585
9a8ec9e8 586 lock_sock(sk);
1da177e4 587 /* Set destination address and psm */
eea96364 588 bacpy(&sco_pi(sk)->dst, &sa->sco_bdaddr);
9a8ec9e8 589 release_sock(sk);
1da177e4 590
9a8ec9e8 591 err = sco_connect(sk);
735cbc47 592 if (err)
9a8ec9e8
LAD
593 return err;
594
595 lock_sock(sk);
1da177e4 596
8e87d142 597 err = bt_sock_wait_state(sk, BT_CONNECTED,
be7c2b99 598 sock_sndtimeo(sk, flags & O_NONBLOCK));
1da177e4 599
1da177e4
LT
600 release_sock(sk);
601 return err;
602}
603
604static int sco_sock_listen(struct socket *sock, int backlog)
605{
606 struct sock *sk = sock->sk;
eea96364 607 bdaddr_t *src = &sco_pi(sk)->src;
1da177e4
LT
608 int err = 0;
609
610 BT_DBG("sk %p backlog %d", sk, backlog);
611
612 lock_sock(sk);
613
7d5d775a 614 if (sk->sk_state != BT_BOUND) {
1da177e4
LT
615 err = -EBADFD;
616 goto done;
617 }
618
7d5d775a
MH
619 if (sk->sk_type != SOCK_SEQPACKET) {
620 err = -EINVAL;
621 goto done;
622 }
623
fb334059
MH
624 write_lock(&sco_sk_list.lock);
625
626 if (__sco_get_sock_listen_by_addr(src)) {
627 err = -EADDRINUSE;
628 goto unlock;
629 }
630
1da177e4
LT
631 sk->sk_max_ack_backlog = backlog;
632 sk->sk_ack_backlog = 0;
fb334059 633
1da177e4
LT
634 sk->sk_state = BT_LISTEN;
635
fb334059
MH
636unlock:
637 write_unlock(&sco_sk_list.lock);
638
1da177e4
LT
639done:
640 release_sock(sk);
641 return err;
642}
643
c4297e8f 644static int sco_sock_accept(struct socket *sock, struct socket *newsock,
cdfbabfb 645 int flags, bool kern)
1da177e4 646{
dfb2fae7 647 DEFINE_WAIT_FUNC(wait, woken_wake_function);
1da177e4
LT
648 struct sock *sk = sock->sk, *ch;
649 long timeo;
650 int err = 0;
651
652 lock_sock(sk);
653
1da177e4
LT
654 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
655
656 BT_DBG("sk %p timeo %ld", sk, timeo);
657
658 /* Wait for an incoming connection. (wake-one). */
aa395145 659 add_wait_queue_exclusive(sk_sleep(sk), &wait);
552b0d3c 660 while (1) {
552b0d3c
PH
661 if (sk->sk_state != BT_LISTEN) {
662 err = -EBADFD;
1da177e4
LT
663 break;
664 }
665
552b0d3c
PH
666 ch = bt_accept_dequeue(sk, newsock);
667 if (ch)
668 break;
1da177e4 669
552b0d3c
PH
670 if (!timeo) {
671 err = -EAGAIN;
1da177e4
LT
672 break;
673 }
674
675 if (signal_pending(current)) {
676 err = sock_intr_errno(timeo);
677 break;
678 }
552b0d3c
PH
679
680 release_sock(sk);
dfb2fae7
PH
681
682 timeo = wait_woken(&wait, TASK_INTERRUPTIBLE, timeo);
552b0d3c 683 lock_sock(sk);
1da177e4 684 }
aa395145 685 remove_wait_queue(sk_sleep(sk), &wait);
1da177e4
LT
686
687 if (err)
688 goto done;
689
690 newsock->state = SS_CONNECTED;
691
692 BT_DBG("new socket %p", ch);
693
694done:
695 release_sock(sk);
696 return err;
697}
698
c4297e8f 699static int sco_sock_getname(struct socket *sock, struct sockaddr *addr,
9b2c45d4 700 int peer)
1da177e4
LT
701{
702 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
703 struct sock *sk = sock->sk;
704
705 BT_DBG("sock %p, sk %p", sock, sk);
706
707 addr->sa_family = AF_BLUETOOTH;
1da177e4
LT
708
709 if (peer)
eea96364 710 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->dst);
1da177e4 711 else
eea96364 712 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->src);
1da177e4 713
9b2c45d4 714 return sizeof(struct sockaddr_sco);
1da177e4
LT
715}
716
1b784140
YX
717static int sco_sock_sendmsg(struct socket *sock, struct msghdr *msg,
718 size_t len)
1da177e4
LT
719{
720 struct sock *sk = sock->sk;
0771cbb3 721 struct sk_buff *skb;
b9dbdbc1 722 int err;
1da177e4
LT
723
724 BT_DBG("sock %p, sk %p", sock, sk);
725
c1cbe4b7
BL
726 err = sock_error(sk);
727 if (err)
728 return err;
1da177e4
LT
729
730 if (msg->msg_flags & MSG_OOB)
731 return -EOPNOTSUPP;
732
0771cbb3 733 skb = bt_skb_sendmsg(sk, msg, len, len, 0, 0);
266191aa 734 if (IS_ERR(skb))
0771cbb3 735 return PTR_ERR(skb);
99c23da0 736
1da177e4
LT
737 lock_sock(sk);
738
739 if (sk->sk_state == BT_CONNECTED)
0771cbb3 740 err = sco_send_frame(sk, skb);
1da177e4
LT
741 else
742 err = -ENOTCONN;
743
744 release_sock(sk);
037ce005
LAD
745
746 if (err < 0)
0771cbb3 747 kfree_skb(skb);
1da177e4
LT
748 return err;
749}
750
2f69a82a 751static void sco_conn_defer_accept(struct hci_conn *conn, u16 setting)
fa5513be
FD
752{
753 struct hci_dev *hdev = conn->hdev;
754
755 BT_DBG("conn %p", conn);
756
757 conn->state = BT_CONFIG;
758
759 if (!lmp_esco_capable(hdev)) {
760 struct hci_cp_accept_conn_req cp;
761
762 bacpy(&cp.bdaddr, &conn->dst);
33f24048 763 cp.role = 0x00; /* Ignored */
fa5513be
FD
764
765 hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ, sizeof(cp), &cp);
766 } else {
767 struct hci_cp_accept_sync_conn_req cp;
768
769 bacpy(&cp.bdaddr, &conn->dst);
770 cp.pkt_type = cpu_to_le16(conn->pkt_type);
771
dcf4adbf
JP
772 cp.tx_bandwidth = cpu_to_le32(0x00001f40);
773 cp.rx_bandwidth = cpu_to_le32(0x00001f40);
2f69a82a
FD
774 cp.content_format = cpu_to_le16(setting);
775
776 switch (setting & SCO_AIRMODE_MASK) {
777 case SCO_AIRMODE_TRANSP:
778 if (conn->pkt_type & ESCO_2EV3)
dcf4adbf 779 cp.max_latency = cpu_to_le16(0x0008);
2f69a82a 780 else
dcf4adbf 781 cp.max_latency = cpu_to_le16(0x000D);
2f69a82a
FD
782 cp.retrans_effort = 0x02;
783 break;
784 case SCO_AIRMODE_CVSD:
dcf4adbf 785 cp.max_latency = cpu_to_le16(0xffff);
2f69a82a
FD
786 cp.retrans_effort = 0xff;
787 break;
59da0b38
DC
788 default:
789 /* use CVSD settings as fallback */
790 cp.max_latency = cpu_to_le16(0xffff);
791 cp.retrans_effort = 0xff;
792 break;
2f69a82a 793 }
fa5513be
FD
794
795 hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
796 sizeof(cp), &cp);
797 }
798}
799
1b784140
YX
800static int sco_sock_recvmsg(struct socket *sock, struct msghdr *msg,
801 size_t len, int flags)
20714bfe
FD
802{
803 struct sock *sk = sock->sk;
804 struct sco_pinfo *pi = sco_pi(sk);
805
806 lock_sock(sk);
807
808 if (sk->sk_state == BT_CONNECT2 &&
809 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
2f69a82a 810 sco_conn_defer_accept(pi->conn->hcon, pi->setting);
20714bfe
FD
811 sk->sk_state = BT_CONFIG;
812
813 release_sock(sk);
814 return 0;
815 }
816
817 release_sock(sk);
818
1b784140 819 return bt_sock_recvmsg(sock, msg, len, flags);
20714bfe
FD
820}
821
c4297e8f 822static int sco_sock_setsockopt(struct socket *sock, int level, int optname,
a7b75c5a 823 sockptr_t optval, unsigned int optlen)
1da177e4
LT
824{
825 struct sock *sk = sock->sk;
ad10b1a4
FD
826 int len, err = 0;
827 struct bt_voice voice;
b96e9c67 828 u32 opt;
f6873401
K
829 struct bt_codecs *codecs;
830 struct hci_dev *hdev;
831 __u8 buffer[255];
1da177e4
LT
832
833 BT_DBG("sk %p", sk);
834
835 lock_sock(sk);
836
837 switch (optname) {
b96e9c67
FD
838
839 case BT_DEFER_SETUP:
840 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
841 err = -EINVAL;
842 break;
843 }
844
a7b75c5a 845 if (copy_from_sockptr(&opt, optval, sizeof(u32))) {
b96e9c67
FD
846 err = -EFAULT;
847 break;
848 }
849
850 if (opt)
851 set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
852 else
853 clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
854 break;
855
ad10b1a4
FD
856 case BT_VOICE:
857 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND &&
858 sk->sk_state != BT_CONNECT2) {
859 err = -EINVAL;
860 break;
861 }
862
863 voice.setting = sco_pi(sk)->setting;
864
865 len = min_t(unsigned int, sizeof(voice), optlen);
a7b75c5a 866 if (copy_from_sockptr(&voice, optval, len)) {
ad10b1a4
FD
867 err = -EFAULT;
868 break;
869 }
870
871 /* Explicitly check for these values */
872 if (voice.setting != BT_VOICE_TRANSPARENT &&
873 voice.setting != BT_VOICE_CVSD_16BIT) {
874 err = -EINVAL;
875 break;
876 }
877
878 sco_pi(sk)->setting = voice.setting;
b2af264a
K
879 hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src,
880 BDADDR_BREDR);
881 if (!hdev) {
882 err = -EBADFD;
883 break;
884 }
05abad85 885 if (enhanced_sync_conn_capable(hdev) &&
b2af264a
K
886 voice.setting == BT_VOICE_TRANSPARENT)
887 sco_pi(sk)->codec.id = BT_CODEC_TRANSPARENT;
888 hci_dev_put(hdev);
ad10b1a4
FD
889 break;
890
00398e1d 891 case BT_PKT_STATUS:
83a33b24 892 if (copy_from_sockptr(&opt, optval, sizeof(u32))) {
00398e1d
AM
893 err = -EFAULT;
894 break;
895 }
896
897 if (opt)
3f19ffb2 898 set_bit(BT_SK_PKT_STATUS, &bt_sk(sk)->flags);
00398e1d 899 else
3f19ffb2 900 clear_bit(BT_SK_PKT_STATUS, &bt_sk(sk)->flags);
00398e1d
AM
901 break;
902
f6873401
K
903 case BT_CODEC:
904 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND &&
905 sk->sk_state != BT_CONNECT2) {
906 err = -EINVAL;
907 break;
908 }
909
910 hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src,
911 BDADDR_BREDR);
912 if (!hdev) {
913 err = -EBADFD;
914 break;
915 }
916
917 if (!hci_dev_test_flag(hdev, HCI_OFFLOAD_CODECS_ENABLED)) {
918 hci_dev_put(hdev);
919 err = -EOPNOTSUPP;
920 break;
921 }
922
923 if (!hdev->get_data_path_id) {
924 hci_dev_put(hdev);
925 err = -EOPNOTSUPP;
926 break;
927 }
928
929 if (optlen < sizeof(struct bt_codecs) ||
930 optlen > sizeof(buffer)) {
931 hci_dev_put(hdev);
932 err = -EINVAL;
933 break;
934 }
935
936 if (copy_from_sockptr(buffer, optval, optlen)) {
937 hci_dev_put(hdev);
938 err = -EFAULT;
939 break;
940 }
941
942 codecs = (void *)buffer;
943
944 if (codecs->num_codecs > 1) {
945 hci_dev_put(hdev);
946 err = -EINVAL;
947 break;
948 }
949
950 sco_pi(sk)->codec = codecs->codecs[0];
951 hci_dev_put(hdev);
952 break;
953
1da177e4
LT
954 default:
955 err = -ENOPROTOOPT;
956 break;
957 }
958
959 release_sock(sk);
960 return err;
961}
962
c4297e8f
MH
963static int sco_sock_getsockopt_old(struct socket *sock, int optname,
964 char __user *optval, int __user *optlen)
1da177e4
LT
965{
966 struct sock *sk = sock->sk;
967 struct sco_options opts;
968 struct sco_conninfo cinfo;
8e87d142 969 int len, err = 0;
1da177e4
LT
970
971 BT_DBG("sk %p", sk);
972
973 if (get_user(len, optlen))
974 return -EFAULT;
975
976 lock_sock(sk);
977
978 switch (optname) {
979 case SCO_OPTIONS:
9d225d22
JH
980 if (sk->sk_state != BT_CONNECTED &&
981 !(sk->sk_state == BT_CONNECT2 &&
982 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
1da177e4
LT
983 err = -ENOTCONN;
984 break;
985 }
986
987 opts.mtu = sco_pi(sk)->conn->mtu;
988
79dbeafe 989 BT_DBG("mtu %u", opts.mtu);
1da177e4
LT
990
991 len = min_t(unsigned int, len, sizeof(opts));
992 if (copy_to_user(optval, (char *)&opts, len))
993 err = -EFAULT;
994
995 break;
996
997 case SCO_CONNINFO:
9d225d22
JH
998 if (sk->sk_state != BT_CONNECTED &&
999 !(sk->sk_state == BT_CONNECT2 &&
1000 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
1da177e4
LT
1001 err = -ENOTCONN;
1002 break;
1003 }
1004
c4c896e1 1005 memset(&cinfo, 0, sizeof(cinfo));
1da177e4
LT
1006 cinfo.hci_handle = sco_pi(sk)->conn->hcon->handle;
1007 memcpy(cinfo.dev_class, sco_pi(sk)->conn->hcon->dev_class, 3);
1008
1009 len = min_t(unsigned int, len, sizeof(cinfo));
1010 if (copy_to_user(optval, (char *)&cinfo, len))
1011 err = -EFAULT;
1012
1013 break;
1014
1015 default:
1016 err = -ENOPROTOOPT;
1017 break;
1018 }
1019
1020 release_sock(sk);
1021 return err;
1022}
1023
c4297e8f
MH
1024static int sco_sock_getsockopt(struct socket *sock, int level, int optname,
1025 char __user *optval, int __user *optlen)
d58daf42
MH
1026{
1027 struct sock *sk = sock->sk;
1028 int len, err = 0;
ad10b1a4 1029 struct bt_voice voice;
eab2404b 1030 u32 phys;
248733e8
K
1031 int buf_len;
1032 struct codec_list *c;
1033 u8 num_codecs, i, __user *ptr;
1034 struct hci_dev *hdev;
1035 struct hci_codec_caps *caps;
1036 struct bt_codec codec;
d58daf42
MH
1037
1038 BT_DBG("sk %p", sk);
1039
1040 if (level == SOL_SCO)
1041 return sco_sock_getsockopt_old(sock, optname, optval, optlen);
1042
1043 if (get_user(len, optlen))
1044 return -EFAULT;
1045
1046 lock_sock(sk);
1047
1048 switch (optname) {
b96e9c67
FD
1049
1050 case BT_DEFER_SETUP:
1051 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
1052 err = -EINVAL;
1053 break;
1054 }
1055
1056 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
c4297e8f 1057 (u32 __user *)optval))
b96e9c67
FD
1058 err = -EFAULT;
1059
1060 break;
1061
ad10b1a4
FD
1062 case BT_VOICE:
1063 voice.setting = sco_pi(sk)->setting;
1064
1065 len = min_t(unsigned int, len, sizeof(voice));
1066 if (copy_to_user(optval, (char *)&voice, len))
1067 err = -EFAULT;
1068
1069 break;
1070
eab2404b 1071 case BT_PHY:
a2a8b0b4 1072 if (sk->sk_state != BT_CONNECTED) {
eab2404b
LAD
1073 err = -ENOTCONN;
1074 break;
1075 }
1076
1077 phys = hci_conn_get_phy(sco_pi(sk)->conn->hcon);
1078
1079 if (put_user(phys, (u32 __user *) optval))
1080 err = -EFAULT;
1081 break;
1082
00398e1d 1083 case BT_PKT_STATUS:
3f19ffb2
LAD
1084 if (put_user(test_bit(BT_SK_PKT_STATUS, &bt_sk(sk)->flags),
1085 (int __user *)optval))
00398e1d
AM
1086 err = -EFAULT;
1087 break;
1088
0fc1a726
JH
1089 case BT_SNDMTU:
1090 case BT_RCVMTU:
f6b8c6b5
WY
1091 if (sk->sk_state != BT_CONNECTED) {
1092 err = -ENOTCONN;
1093 break;
1094 }
1095
0fc1a726
JH
1096 if (put_user(sco_pi(sk)->conn->mtu, (u32 __user *)optval))
1097 err = -EFAULT;
1098 break;
1099
248733e8
K
1100 case BT_CODEC:
1101 num_codecs = 0;
1102 buf_len = 0;
1103
1104 hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src, BDADDR_BREDR);
1105 if (!hdev) {
1106 err = -EBADFD;
1107 break;
1108 }
1109
1110 if (!hci_dev_test_flag(hdev, HCI_OFFLOAD_CODECS_ENABLED)) {
1111 hci_dev_put(hdev);
1112 err = -EOPNOTSUPP;
1113 break;
1114 }
1115
1116 if (!hdev->get_data_path_id) {
1117 hci_dev_put(hdev);
1118 err = -EOPNOTSUPP;
1119 break;
1120 }
1121
975abc0c
LAD
1122 release_sock(sk);
1123
248733e8
K
1124 /* find total buffer size required to copy codec + caps */
1125 hci_dev_lock(hdev);
1126 list_for_each_entry(c, &hdev->local_codecs, list) {
1127 if (c->transport != HCI_TRANSPORT_SCO_ESCO)
1128 continue;
1129 num_codecs++;
1130 for (i = 0, caps = c->caps; i < c->num_caps; i++) {
1131 buf_len += 1 + caps->len;
1132 caps = (void *)&caps->data[caps->len];
1133 }
1134 buf_len += sizeof(struct bt_codec);
1135 }
1136 hci_dev_unlock(hdev);
1137
1138 buf_len += sizeof(struct bt_codecs);
1139 if (buf_len > len) {
1140 hci_dev_put(hdev);
975abc0c 1141 return -ENOBUFS;
248733e8
K
1142 }
1143 ptr = optval;
1144
1145 if (put_user(num_codecs, ptr)) {
1146 hci_dev_put(hdev);
975abc0c 1147 return -EFAULT;
248733e8
K
1148 }
1149 ptr += sizeof(num_codecs);
1150
1151 /* Iterate all the codecs supported over SCO and populate
1152 * codec data
1153 */
1154 hci_dev_lock(hdev);
1155 list_for_each_entry(c, &hdev->local_codecs, list) {
1156 if (c->transport != HCI_TRANSPORT_SCO_ESCO)
1157 continue;
1158
1159 codec.id = c->id;
1160 codec.cid = c->cid;
1161 codec.vid = c->vid;
1162 err = hdev->get_data_path_id(hdev, &codec.data_path);
1163 if (err < 0)
1164 break;
1165 codec.num_caps = c->num_caps;
1166 if (copy_to_user(ptr, &codec, sizeof(codec))) {
1167 err = -EFAULT;
1168 break;
1169 }
1170 ptr += sizeof(codec);
1171
1172 /* find codec capabilities data length */
1173 len = 0;
1174 for (i = 0, caps = c->caps; i < c->num_caps; i++) {
1175 len += 1 + caps->len;
1176 caps = (void *)&caps->data[caps->len];
1177 }
1178
1179 /* copy codec capabilities data */
1180 if (len && copy_to_user(ptr, c->caps, len)) {
1181 err = -EFAULT;
1182 break;
1183 }
1184 ptr += len;
1185 }
1186
248733e8
K
1187 hci_dev_unlock(hdev);
1188 hci_dev_put(hdev);
1189
975abc0c
LAD
1190 lock_sock(sk);
1191
1192 if (!err && put_user(buf_len, optlen))
1193 err = -EFAULT;
1194
248733e8
K
1195 break;
1196
d58daf42
MH
1197 default:
1198 err = -ENOPROTOOPT;
1199 break;
1200 }
1201
1202 release_sock(sk);
1203 return err;
1204}
1205
fd0b3ff7
MH
1206static int sco_sock_shutdown(struct socket *sock, int how)
1207{
1208 struct sock *sk = sock->sk;
1209 int err = 0;
1210
1211 BT_DBG("sock %p, sk %p", sock, sk);
1212
1213 if (!sk)
1214 return 0;
1215
1da5537e 1216 sock_hold(sk);
fd0b3ff7 1217 lock_sock(sk);
1da5537e 1218
fd0b3ff7
MH
1219 if (!sk->sk_shutdown) {
1220 sk->sk_shutdown = SHUTDOWN_MASK;
1221 sco_sock_clear_timer(sk);
1222 __sco_sock_close(sk);
1223
093facf3
VD
1224 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
1225 !(current->flags & PF_EXITING))
fd0b3ff7 1226 err = bt_sock_wait_state(sk, BT_CLOSED,
be7c2b99 1227 sk->sk_lingertime);
fd0b3ff7 1228 }
1da5537e 1229
fd0b3ff7 1230 release_sock(sk);
1da5537e
KP
1231 sock_put(sk);
1232
fd0b3ff7
MH
1233 return err;
1234}
1235
1da177e4
LT
1236static int sco_sock_release(struct socket *sock)
1237{
1238 struct sock *sk = sock->sk;
1239 int err = 0;
1240
1241 BT_DBG("sock %p, sk %p", sock, sk);
1242
1243 if (!sk)
1244 return 0;
1245
1246 sco_sock_close(sk);
1247
bc1fb82a 1248 if (sock_flag(sk, SOCK_LINGER) && READ_ONCE(sk->sk_lingertime) &&
093facf3 1249 !(current->flags & PF_EXITING)) {
1da177e4
LT
1250 lock_sock(sk);
1251 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
1252 release_sock(sk);
1253 }
1254
1255 sock_orphan(sk);
1256 sco_sock_kill(sk);
1257 return err;
1258}
1259
1da177e4
LT
1260static void sco_conn_ready(struct sco_conn *conn)
1261{
735cbc47
AE
1262 struct sock *parent;
1263 struct sock *sk = conn->sk;
1da177e4
LT
1264
1265 BT_DBG("conn %p", conn);
1266
735cbc47 1267 if (sk) {
27c24fda 1268 lock_sock(sk);
3f2c89fb 1269 sco_sock_clear_timer(sk);
1da177e4
LT
1270 sk->sk_state = BT_CONNECTED;
1271 sk->sk_state_change(sk);
27c24fda 1272 release_sock(sk);
1da177e4 1273 } else {
40528088
AG
1274 sco_conn_lock(conn);
1275
2c501cdd
KP
1276 if (!conn->hcon) {
1277 sco_conn_unlock(conn);
1278 return;
1279 }
1280
041987cf 1281 parent = sco_get_sock_listen(&conn->hcon->src);
40528088
AG
1282 if (!parent) {
1283 sco_conn_unlock(conn);
1284 return;
1285 }
1da177e4 1286
27c24fda 1287 lock_sock(parent);
1da177e4 1288
b9dbdbc1 1289 sk = sco_sock_alloc(sock_net(parent), NULL,
11aa9c28 1290 BTPROTO_SCO, GFP_ATOMIC, 0);
1da177e4 1291 if (!sk) {
27c24fda 1292 release_sock(parent);
40528088
AG
1293 sco_conn_unlock(conn);
1294 return;
1da177e4
LT
1295 }
1296
1297 sco_sock_init(sk, parent);
1298
eea96364
MH
1299 bacpy(&sco_pi(sk)->src, &conn->hcon->src);
1300 bacpy(&sco_pi(sk)->dst, &conn->hcon->dst);
1da177e4
LT
1301
1302 hci_conn_hold(conn->hcon);
1303 __sco_chan_add(conn, sk, parent);
1304
20714bfe
FD
1305 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(parent)->flags))
1306 sk->sk_state = BT_CONNECT2;
1307 else
1308 sk->sk_state = BT_CONNECTED;
1da177e4
LT
1309
1310 /* Wake up parent */
676d2369 1311 parent->sk_data_ready(parent);
1da177e4 1312
27c24fda 1313 release_sock(parent);
1da177e4 1314
40528088
AG
1315 sco_conn_unlock(conn);
1316 }
1da177e4
LT
1317}
1318
1319/* ----- SCO interface with lower layer (HCI) ----- */
20714bfe 1320int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags)
1da177e4 1321{
fc5fef61 1322 struct sock *sk;
71aeeaa1
MH
1323 int lm = 0;
1324
6ed93dc6 1325 BT_DBG("hdev %s, bdaddr %pMR", hdev->name, bdaddr);
1da177e4 1326
71aeeaa1
MH
1327 /* Find listening sockets */
1328 read_lock(&sco_sk_list.lock);
b67bfe0d 1329 sk_for_each(sk, &sco_sk_list.head) {
71aeeaa1
MH
1330 if (sk->sk_state != BT_LISTEN)
1331 continue;
1332
eea96364
MH
1333 if (!bacmp(&sco_pi(sk)->src, &hdev->bdaddr) ||
1334 !bacmp(&sco_pi(sk)->src, BDADDR_ANY)) {
71aeeaa1 1335 lm |= HCI_LM_ACCEPT;
20714bfe
FD
1336
1337 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))
1338 *flags |= HCI_PROTO_DEFER;
71aeeaa1
MH
1339 break;
1340 }
1341 }
1342 read_unlock(&sco_sk_list.lock);
1343
1344 return lm;
1da177e4
LT
1345}
1346
539c496d 1347static void sco_connect_cfm(struct hci_conn *hcon, __u8 status)
1da177e4 1348{
539c496d
JH
1349 if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
1350 return;
1351
79dbeafe 1352 BT_DBG("hcon %p bdaddr %pMR status %u", hcon, &hcon->dst, status);
539c496d 1353
1da177e4
LT
1354 if (!status) {
1355 struct sco_conn *conn;
1356
519e42b3 1357 conn = sco_conn_add(hcon);
1da177e4
LT
1358 if (conn)
1359 sco_conn_ready(conn);
8e87d142 1360 } else
e175072f 1361 sco_conn_del(hcon, bt_to_errno(status));
1da177e4
LT
1362}
1363
3a6d576b 1364static void sco_disconn_cfm(struct hci_conn *hcon, __u8 reason)
1da177e4 1365{
3a6d576b
JH
1366 if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
1367 return;
1368
1da177e4
LT
1369 BT_DBG("hcon %p reason %d", hcon, reason);
1370
e175072f 1371 sco_conn_del(hcon, bt_to_errno(reason));
1da177e4
LT
1372}
1373
9b4c3336 1374void sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
1da177e4
LT
1375{
1376 struct sco_conn *conn = hcon->sco_data;
1377
1378 if (!conn)
1379 goto drop;
1380
79dbeafe 1381 BT_DBG("conn %p len %u", conn, skb->len);
1da177e4
LT
1382
1383 if (skb->len) {
1384 sco_recv_frame(conn, skb);
9b4c3336 1385 return;
1da177e4
LT
1386 }
1387
1388drop:
8e87d142 1389 kfree_skb(skb);
1da177e4
LT
1390}
1391
539c496d
JH
1392static struct hci_cb sco_cb = {
1393 .name = "SCO",
1394 .connect_cfm = sco_connect_cfm,
3a6d576b 1395 .disconn_cfm = sco_disconn_cfm,
539c496d
JH
1396};
1397
aef7d97c 1398static int sco_debugfs_show(struct seq_file *f, void *p)
1da177e4
LT
1399{
1400 struct sock *sk;
1da177e4 1401
ee65d19e 1402 read_lock(&sco_sk_list.lock);
1da177e4 1403
b67bfe0d 1404 sk_for_each(sk, &sco_sk_list.head) {
eea96364
MH
1405 seq_printf(f, "%pMR %pMR %d\n", &sco_pi(sk)->src,
1406 &sco_pi(sk)->dst, sk->sk_state);
be9d1227 1407 }
1da177e4 1408
ee65d19e 1409 read_unlock(&sco_sk_list.lock);
1da177e4 1410
aef7d97c 1411 return 0;
1da177e4
LT
1412}
1413
8e2924e3 1414DEFINE_SHOW_ATTRIBUTE(sco_debugfs);
aef7d97c
MH
1415
1416static struct dentry *sco_debugfs;
1da177e4 1417
90ddc4f0 1418static const struct proto_ops sco_sock_ops = {
1da177e4
LT
1419 .family = PF_BLUETOOTH,
1420 .owner = THIS_MODULE,
1421 .release = sco_sock_release,
1422 .bind = sco_sock_bind,
1423 .connect = sco_sock_connect,
1424 .listen = sco_sock_listen,
1425 .accept = sco_sock_accept,
1426 .getname = sco_sock_getname,
1427 .sendmsg = sco_sock_sendmsg,
20714bfe 1428 .recvmsg = sco_sock_recvmsg,
a11e1d43 1429 .poll = bt_sock_poll,
3241ad82 1430 .ioctl = bt_sock_ioctl,
c7cbdbf2 1431 .gettstamp = sock_gettstamp,
1da177e4
LT
1432 .mmap = sock_no_mmap,
1433 .socketpair = sock_no_socketpair,
fd0b3ff7 1434 .shutdown = sco_sock_shutdown,
1da177e4
LT
1435 .setsockopt = sco_sock_setsockopt,
1436 .getsockopt = sco_sock_getsockopt
1437};
1438
ec1b4cf7 1439static const struct net_proto_family sco_sock_family_ops = {
1da177e4
LT
1440 .family = PF_BLUETOOTH,
1441 .owner = THIS_MODULE,
1442 .create = sco_sock_create,
1443};
1444
64274518 1445int __init sco_init(void)
1da177e4
LT
1446{
1447 int err;
1448
15762fa7
MH
1449 BUILD_BUG_ON(sizeof(struct sockaddr_sco) > sizeof(struct sockaddr));
1450
1da177e4
LT
1451 err = proto_register(&sco_proto, 0);
1452 if (err < 0)
1453 return err;
1454
1455 err = bt_sock_register(BTPROTO_SCO, &sco_sock_family_ops);
1456 if (err < 0) {
1457 BT_ERR("SCO socket registration failed");
1458 goto error;
1459 }
1460
b0316615 1461 err = bt_procfs_init(&init_net, "sco", &sco_sk_list, NULL);
de9b9212
MY
1462 if (err < 0) {
1463 BT_ERR("Failed to create SCO proc file");
1464 bt_sock_unregister(BTPROTO_SCO);
1465 goto error;
1466 }
1467
1da177e4
LT
1468 BT_INFO("SCO socket layer initialized");
1469
539c496d
JH
1470 hci_register_cb(&sco_cb);
1471
1120e4bf
MH
1472 if (IS_ERR_OR_NULL(bt_debugfs))
1473 return 0;
1474
1475 sco_debugfs = debugfs_create_file("sco", 0444, bt_debugfs,
1476 NULL, &sco_debugfs_fops);
1477
1da177e4
LT
1478 return 0;
1479
1480error:
1481 proto_unregister(&sco_proto);
1482 return err;
1483}
1484
0402d9f2 1485void sco_exit(void)
1da177e4 1486{
de9b9212
MY
1487 bt_procfs_cleanup(&init_net, "sco");
1488
aef7d97c 1489 debugfs_remove(sco_debugfs);
1da177e4 1490
539c496d
JH
1491 hci_unregister_cb(&sco_cb);
1492
5e9d7f86 1493 bt_sock_unregister(BTPROTO_SCO);
1da177e4 1494
1da177e4
LT
1495 proto_unregister(&sco_proto);
1496}
1497
7cb127d5
MH
1498module_param(disable_esco, bool, 0644);
1499MODULE_PARM_DESC(disable_esco, "Disable eSCO connection creation");