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