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