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