xref: /linux/net/bluetooth/sco.c (revision a33f32244d8550da8b4a26e277ce07d5c6d158b5)
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 
29 #include <linux/types.h>
30 #include <linux/errno.h>
31 #include <linux/kernel.h>
32 #include <linux/sched.h>
33 #include <linux/slab.h>
34 #include <linux/poll.h>
35 #include <linux/fcntl.h>
36 #include <linux/init.h>
37 #include <linux/interrupt.h>
38 #include <linux/socket.h>
39 #include <linux/skbuff.h>
40 #include <linux/device.h>
41 #include <linux/debugfs.h>
42 #include <linux/seq_file.h>
43 #include <linux/list.h>
44 #include <net/sock.h>
45 
46 #include <asm/system.h>
47 #include <asm/uaccess.h>
48 
49 #include <net/bluetooth/bluetooth.h>
50 #include <net/bluetooth/hci_core.h>
51 #include <net/bluetooth/sco.h>
52 
53 #define VERSION "0.6"
54 
55 static int disable_esco = 0;
56 
57 static const struct proto_ops sco_sock_ops;
58 
59 static struct bt_sock_list sco_sk_list = {
60 	.lock = __RW_LOCK_UNLOCKED(sco_sk_list.lock)
61 };
62 
63 static void __sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent);
64 static void sco_chan_del(struct sock *sk, int err);
65 
66 static int  sco_conn_del(struct hci_conn *conn, int err);
67 
68 static void sco_sock_close(struct sock *sk);
69 static void sco_sock_kill(struct sock *sk);
70 
71 /* ---- SCO timers ---- */
72 static void sco_sock_timeout(unsigned long arg)
73 {
74 	struct sock *sk = (struct sock *) arg;
75 
76 	BT_DBG("sock %p state %d", sk, sk->sk_state);
77 
78 	bh_lock_sock(sk);
79 	sk->sk_err = ETIMEDOUT;
80 	sk->sk_state_change(sk);
81 	bh_unlock_sock(sk);
82 
83 	sco_sock_kill(sk);
84 	sock_put(sk);
85 }
86 
87 static void sco_sock_set_timer(struct sock *sk, long timeout)
88 {
89 	BT_DBG("sock %p state %d timeout %ld", sk, sk->sk_state, timeout);
90 	sk_reset_timer(sk, &sk->sk_timer, jiffies + timeout);
91 }
92 
93 static void sco_sock_clear_timer(struct sock *sk)
94 {
95 	BT_DBG("sock %p state %d", sk, sk->sk_state);
96 	sk_stop_timer(sk, &sk->sk_timer);
97 }
98 
99 /* ---- SCO connections ---- */
100 static struct sco_conn *sco_conn_add(struct hci_conn *hcon, __u8 status)
101 {
102 	struct hci_dev *hdev = hcon->hdev;
103 	struct sco_conn *conn = hcon->sco_data;
104 
105 	if (conn || status)
106 		return conn;
107 
108 	conn = kzalloc(sizeof(struct sco_conn), GFP_ATOMIC);
109 	if (!conn)
110 		return NULL;
111 
112 	spin_lock_init(&conn->lock);
113 
114 	hcon->sco_data = conn;
115 	conn->hcon = hcon;
116 
117 	conn->src = &hdev->bdaddr;
118 	conn->dst = &hcon->dst;
119 
120 	if (hdev->sco_mtu > 0)
121 		conn->mtu = hdev->sco_mtu;
122 	else
123 		conn->mtu = 60;
124 
125 	BT_DBG("hcon %p conn %p", hcon, conn);
126 
127 	return conn;
128 }
129 
130 static inline struct sock *sco_chan_get(struct sco_conn *conn)
131 {
132 	struct sock *sk = NULL;
133 	sco_conn_lock(conn);
134 	sk = conn->sk;
135 	sco_conn_unlock(conn);
136 	return sk;
137 }
138 
139 static int sco_conn_del(struct hci_conn *hcon, int err)
140 {
141 	struct sco_conn *conn;
142 	struct sock *sk;
143 
144 	if (!(conn = hcon->sco_data))
145 		return 0;
146 
147 	BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
148 
149 	/* Kill socket */
150 	if ((sk = sco_chan_get(conn))) {
151 		bh_lock_sock(sk);
152 		sco_sock_clear_timer(sk);
153 		sco_chan_del(sk, err);
154 		bh_unlock_sock(sk);
155 		sco_sock_kill(sk);
156 	}
157 
158 	hcon->sco_data = NULL;
159 	kfree(conn);
160 	return 0;
161 }
162 
163 static inline int sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent)
164 {
165 	int err = 0;
166 
167 	sco_conn_lock(conn);
168 	if (conn->sk) {
169 		err = -EBUSY;
170 	} else {
171 		__sco_chan_add(conn, sk, parent);
172 	}
173 	sco_conn_unlock(conn);
174 	return err;
175 }
176 
177 static int sco_connect(struct sock *sk)
178 {
179 	bdaddr_t *src = &bt_sk(sk)->src;
180 	bdaddr_t *dst = &bt_sk(sk)->dst;
181 	struct sco_conn *conn;
182 	struct hci_conn *hcon;
183 	struct hci_dev  *hdev;
184 	int err, type;
185 
186 	BT_DBG("%s -> %s", batostr(src), batostr(dst));
187 
188 	if (!(hdev = hci_get_route(dst, src)))
189 		return -EHOSTUNREACH;
190 
191 	hci_dev_lock_bh(hdev);
192 
193 	err = -ENOMEM;
194 
195 	if (lmp_esco_capable(hdev) && !disable_esco)
196 		type = ESCO_LINK;
197 	else
198 		type = SCO_LINK;
199 
200 	hcon = hci_connect(hdev, type, dst, BT_SECURITY_LOW, HCI_AT_NO_BONDING);
201 	if (!hcon)
202 		goto done;
203 
204 	conn = sco_conn_add(hcon, 0);
205 	if (!conn) {
206 		hci_conn_put(hcon);
207 		goto done;
208 	}
209 
210 	/* Update source addr of the socket */
211 	bacpy(src, conn->src);
212 
213 	err = sco_chan_add(conn, sk, NULL);
214 	if (err)
215 		goto done;
216 
217 	if (hcon->state == BT_CONNECTED) {
218 		sco_sock_clear_timer(sk);
219 		sk->sk_state = BT_CONNECTED;
220 	} else {
221 		sk->sk_state = BT_CONNECT;
222 		sco_sock_set_timer(sk, sk->sk_sndtimeo);
223 	}
224 
225 done:
226 	hci_dev_unlock_bh(hdev);
227 	hci_dev_put(hdev);
228 	return err;
229 }
230 
231 static inline int sco_send_frame(struct sock *sk, struct msghdr *msg, int len)
232 {
233 	struct sco_conn *conn = sco_pi(sk)->conn;
234 	struct sk_buff *skb;
235 	int err, count;
236 
237 	/* Check outgoing MTU */
238 	if (len > conn->mtu)
239 		return -EINVAL;
240 
241 	BT_DBG("sk %p len %d", sk, len);
242 
243 	count = min_t(unsigned int, conn->mtu, len);
244 	if (!(skb = bt_skb_send_alloc(sk, count, msg->msg_flags & MSG_DONTWAIT, &err)))
245 		return err;
246 
247 	if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count)) {
248 		err = -EFAULT;
249 		goto fail;
250 	}
251 
252 	if ((err = hci_send_sco(conn->hcon, skb)) < 0)
253 		return err;
254 
255 	return count;
256 
257 fail:
258 	kfree_skb(skb);
259 	return err;
260 }
261 
262 static inline void sco_recv_frame(struct sco_conn *conn, struct sk_buff *skb)
263 {
264 	struct sock *sk = sco_chan_get(conn);
265 
266 	if (!sk)
267 		goto drop;
268 
269 	BT_DBG("sk %p len %d", sk, skb->len);
270 
271 	if (sk->sk_state != BT_CONNECTED)
272 		goto drop;
273 
274 	if (!sock_queue_rcv_skb(sk, skb))
275 		return;
276 
277 drop:
278 	kfree_skb(skb);
279 	return;
280 }
281 
282 /* -------- Socket interface ---------- */
283 static struct sock *__sco_get_sock_by_addr(bdaddr_t *ba)
284 {
285 	struct sock *sk;
286 	struct hlist_node *node;
287 
288 	sk_for_each(sk, node, &sco_sk_list.head)
289 		if (!bacmp(&bt_sk(sk)->src, ba))
290 			goto found;
291 	sk = NULL;
292 found:
293 	return sk;
294 }
295 
296 /* Find socket listening on source bdaddr.
297  * Returns closest match.
298  */
299 static struct sock *sco_get_sock_listen(bdaddr_t *src)
300 {
301 	struct sock *sk = NULL, *sk1 = NULL;
302 	struct hlist_node *node;
303 
304 	read_lock(&sco_sk_list.lock);
305 
306 	sk_for_each(sk, node, &sco_sk_list.head) {
307 		if (sk->sk_state != BT_LISTEN)
308 			continue;
309 
310 		/* Exact match. */
311 		if (!bacmp(&bt_sk(sk)->src, src))
312 			break;
313 
314 		/* Closest match */
315 		if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
316 			sk1 = sk;
317 	}
318 
319 	read_unlock(&sco_sk_list.lock);
320 
321 	return node ? sk : sk1;
322 }
323 
324 static void sco_sock_destruct(struct sock *sk)
325 {
326 	BT_DBG("sk %p", sk);
327 
328 	skb_queue_purge(&sk->sk_receive_queue);
329 	skb_queue_purge(&sk->sk_write_queue);
330 }
331 
332 static void sco_sock_cleanup_listen(struct sock *parent)
333 {
334 	struct sock *sk;
335 
336 	BT_DBG("parent %p", parent);
337 
338 	/* Close not yet accepted channels */
339 	while ((sk = bt_accept_dequeue(parent, NULL))) {
340 		sco_sock_close(sk);
341 		sco_sock_kill(sk);
342 	}
343 
344 	parent->sk_state  = BT_CLOSED;
345 	sock_set_flag(parent, SOCK_ZAPPED);
346 }
347 
348 /* Kill socket (only if zapped and orphan)
349  * Must be called on unlocked socket.
350  */
351 static void sco_sock_kill(struct sock *sk)
352 {
353 	if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
354 		return;
355 
356 	BT_DBG("sk %p state %d", sk, sk->sk_state);
357 
358 	/* Kill poor orphan */
359 	bt_sock_unlink(&sco_sk_list, sk);
360 	sock_set_flag(sk, SOCK_DEAD);
361 	sock_put(sk);
362 }
363 
364 static void __sco_sock_close(struct sock *sk)
365 {
366 	BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
367 
368 	switch (sk->sk_state) {
369 	case BT_LISTEN:
370 		sco_sock_cleanup_listen(sk);
371 		break;
372 
373 	case BT_CONNECTED:
374 	case BT_CONFIG:
375 	case BT_CONNECT:
376 	case BT_DISCONN:
377 		sco_chan_del(sk, ECONNRESET);
378 		break;
379 
380 	default:
381 		sock_set_flag(sk, SOCK_ZAPPED);
382 		break;
383 	}
384 }
385 
386 /* Must be called on unlocked socket. */
387 static void sco_sock_close(struct sock *sk)
388 {
389 	sco_sock_clear_timer(sk);
390 	lock_sock(sk);
391 	__sco_sock_close(sk);
392 	release_sock(sk);
393 	sco_sock_kill(sk);
394 }
395 
396 static void sco_sock_init(struct sock *sk, struct sock *parent)
397 {
398 	BT_DBG("sk %p", sk);
399 
400 	if (parent)
401 		sk->sk_type = parent->sk_type;
402 }
403 
404 static struct proto sco_proto = {
405 	.name		= "SCO",
406 	.owner		= THIS_MODULE,
407 	.obj_size	= sizeof(struct sco_pinfo)
408 };
409 
410 static struct sock *sco_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio)
411 {
412 	struct sock *sk;
413 
414 	sk = sk_alloc(net, PF_BLUETOOTH, prio, &sco_proto);
415 	if (!sk)
416 		return NULL;
417 
418 	sock_init_data(sock, sk);
419 	INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
420 
421 	sk->sk_destruct = sco_sock_destruct;
422 	sk->sk_sndtimeo = SCO_CONN_TIMEOUT;
423 
424 	sock_reset_flag(sk, SOCK_ZAPPED);
425 
426 	sk->sk_protocol = proto;
427 	sk->sk_state    = BT_OPEN;
428 
429 	setup_timer(&sk->sk_timer, sco_sock_timeout, (unsigned long)sk);
430 
431 	bt_sock_link(&sco_sk_list, sk);
432 	return sk;
433 }
434 
435 static int sco_sock_create(struct net *net, struct socket *sock, int protocol,
436 			   int kern)
437 {
438 	struct sock *sk;
439 
440 	BT_DBG("sock %p", sock);
441 
442 	sock->state = SS_UNCONNECTED;
443 
444 	if (sock->type != SOCK_SEQPACKET)
445 		return -ESOCKTNOSUPPORT;
446 
447 	sock->ops = &sco_sock_ops;
448 
449 	sk = sco_sock_alloc(net, sock, protocol, GFP_ATOMIC);
450 	if (!sk)
451 		return -ENOMEM;
452 
453 	sco_sock_init(sk, NULL);
454 	return 0;
455 }
456 
457 static int sco_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
458 {
459 	struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
460 	struct sock *sk = sock->sk;
461 	bdaddr_t *src = &sa->sco_bdaddr;
462 	int err = 0;
463 
464 	BT_DBG("sk %p %s", sk, batostr(&sa->sco_bdaddr));
465 
466 	if (!addr || addr->sa_family != AF_BLUETOOTH)
467 		return -EINVAL;
468 
469 	lock_sock(sk);
470 
471 	if (sk->sk_state != BT_OPEN) {
472 		err = -EBADFD;
473 		goto done;
474 	}
475 
476 	write_lock_bh(&sco_sk_list.lock);
477 
478 	if (bacmp(src, BDADDR_ANY) && __sco_get_sock_by_addr(src)) {
479 		err = -EADDRINUSE;
480 	} else {
481 		/* Save source address */
482 		bacpy(&bt_sk(sk)->src, &sa->sco_bdaddr);
483 		sk->sk_state = BT_BOUND;
484 	}
485 
486 	write_unlock_bh(&sco_sk_list.lock);
487 
488 done:
489 	release_sock(sk);
490 	return err;
491 }
492 
493 static int sco_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
494 {
495 	struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
496 	struct sock *sk = sock->sk;
497 	int err = 0;
498 
499 
500 	BT_DBG("sk %p", sk);
501 
502 	if (alen < sizeof(struct sockaddr_sco) ||
503 	    addr->sa_family != AF_BLUETOOTH)
504 		return -EINVAL;
505 
506 	if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND)
507 		return -EBADFD;
508 
509 	if (sk->sk_type != SOCK_SEQPACKET)
510 		return -EINVAL;
511 
512 	lock_sock(sk);
513 
514 	/* Set destination address and psm */
515 	bacpy(&bt_sk(sk)->dst, &sa->sco_bdaddr);
516 
517 	if ((err = sco_connect(sk)))
518 		goto done;
519 
520 	err = bt_sock_wait_state(sk, BT_CONNECTED,
521 			sock_sndtimeo(sk, flags & O_NONBLOCK));
522 
523 done:
524 	release_sock(sk);
525 	return err;
526 }
527 
528 static int sco_sock_listen(struct socket *sock, int backlog)
529 {
530 	struct sock *sk = sock->sk;
531 	int err = 0;
532 
533 	BT_DBG("sk %p backlog %d", sk, backlog);
534 
535 	lock_sock(sk);
536 
537 	if (sk->sk_state != BT_BOUND || sock->type != SOCK_SEQPACKET) {
538 		err = -EBADFD;
539 		goto done;
540 	}
541 
542 	sk->sk_max_ack_backlog = backlog;
543 	sk->sk_ack_backlog = 0;
544 	sk->sk_state = BT_LISTEN;
545 
546 done:
547 	release_sock(sk);
548 	return err;
549 }
550 
551 static int sco_sock_accept(struct socket *sock, struct socket *newsock, int flags)
552 {
553 	DECLARE_WAITQUEUE(wait, current);
554 	struct sock *sk = sock->sk, *ch;
555 	long timeo;
556 	int err = 0;
557 
558 	lock_sock(sk);
559 
560 	if (sk->sk_state != BT_LISTEN) {
561 		err = -EBADFD;
562 		goto done;
563 	}
564 
565 	timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
566 
567 	BT_DBG("sk %p timeo %ld", sk, timeo);
568 
569 	/* Wait for an incoming connection. (wake-one). */
570 	add_wait_queue_exclusive(sk->sk_sleep, &wait);
571 	while (!(ch = bt_accept_dequeue(sk, newsock))) {
572 		set_current_state(TASK_INTERRUPTIBLE);
573 		if (!timeo) {
574 			err = -EAGAIN;
575 			break;
576 		}
577 
578 		release_sock(sk);
579 		timeo = schedule_timeout(timeo);
580 		lock_sock(sk);
581 
582 		if (sk->sk_state != BT_LISTEN) {
583 			err = -EBADFD;
584 			break;
585 		}
586 
587 		if (signal_pending(current)) {
588 			err = sock_intr_errno(timeo);
589 			break;
590 		}
591 	}
592 	set_current_state(TASK_RUNNING);
593 	remove_wait_queue(sk->sk_sleep, &wait);
594 
595 	if (err)
596 		goto done;
597 
598 	newsock->state = SS_CONNECTED;
599 
600 	BT_DBG("new socket %p", ch);
601 
602 done:
603 	release_sock(sk);
604 	return err;
605 }
606 
607 static int sco_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
608 {
609 	struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
610 	struct sock *sk = sock->sk;
611 
612 	BT_DBG("sock %p, sk %p", sock, sk);
613 
614 	addr->sa_family = AF_BLUETOOTH;
615 	*len = sizeof(struct sockaddr_sco);
616 
617 	if (peer)
618 		bacpy(&sa->sco_bdaddr, &bt_sk(sk)->dst);
619 	else
620 		bacpy(&sa->sco_bdaddr, &bt_sk(sk)->src);
621 
622 	return 0;
623 }
624 
625 static int sco_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
626 			    struct msghdr *msg, size_t len)
627 {
628 	struct sock *sk = sock->sk;
629 	int err = 0;
630 
631 	BT_DBG("sock %p, sk %p", sock, sk);
632 
633 	err = sock_error(sk);
634 	if (err)
635 		return err;
636 
637 	if (msg->msg_flags & MSG_OOB)
638 		return -EOPNOTSUPP;
639 
640 	lock_sock(sk);
641 
642 	if (sk->sk_state == BT_CONNECTED)
643 		err = sco_send_frame(sk, msg, len);
644 	else
645 		err = -ENOTCONN;
646 
647 	release_sock(sk);
648 	return err;
649 }
650 
651 static int sco_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen)
652 {
653 	struct sock *sk = sock->sk;
654 	int err = 0;
655 
656 	BT_DBG("sk %p", sk);
657 
658 	lock_sock(sk);
659 
660 	switch (optname) {
661 	default:
662 		err = -ENOPROTOOPT;
663 		break;
664 	}
665 
666 	release_sock(sk);
667 	return err;
668 }
669 
670 static int sco_sock_getsockopt_old(struct socket *sock, int optname, char __user *optval, int __user *optlen)
671 {
672 	struct sock *sk = sock->sk;
673 	struct sco_options opts;
674 	struct sco_conninfo cinfo;
675 	int len, err = 0;
676 
677 	BT_DBG("sk %p", sk);
678 
679 	if (get_user(len, optlen))
680 		return -EFAULT;
681 
682 	lock_sock(sk);
683 
684 	switch (optname) {
685 	case SCO_OPTIONS:
686 		if (sk->sk_state != BT_CONNECTED) {
687 			err = -ENOTCONN;
688 			break;
689 		}
690 
691 		opts.mtu = sco_pi(sk)->conn->mtu;
692 
693 		BT_DBG("mtu %d", opts.mtu);
694 
695 		len = min_t(unsigned int, len, sizeof(opts));
696 		if (copy_to_user(optval, (char *)&opts, len))
697 			err = -EFAULT;
698 
699 		break;
700 
701 	case SCO_CONNINFO:
702 		if (sk->sk_state != BT_CONNECTED) {
703 			err = -ENOTCONN;
704 			break;
705 		}
706 
707 		cinfo.hci_handle = sco_pi(sk)->conn->hcon->handle;
708 		memcpy(cinfo.dev_class, sco_pi(sk)->conn->hcon->dev_class, 3);
709 
710 		len = min_t(unsigned int, len, sizeof(cinfo));
711 		if (copy_to_user(optval, (char *)&cinfo, len))
712 			err = -EFAULT;
713 
714 		break;
715 
716 	default:
717 		err = -ENOPROTOOPT;
718 		break;
719 	}
720 
721 	release_sock(sk);
722 	return err;
723 }
724 
725 static int sco_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen)
726 {
727 	struct sock *sk = sock->sk;
728 	int len, err = 0;
729 
730 	BT_DBG("sk %p", sk);
731 
732 	if (level == SOL_SCO)
733 		return sco_sock_getsockopt_old(sock, optname, optval, optlen);
734 
735 	if (get_user(len, optlen))
736 		return -EFAULT;
737 
738 	lock_sock(sk);
739 
740 	switch (optname) {
741 	default:
742 		err = -ENOPROTOOPT;
743 		break;
744 	}
745 
746 	release_sock(sk);
747 	return err;
748 }
749 
750 static int sco_sock_shutdown(struct socket *sock, int how)
751 {
752 	struct sock *sk = sock->sk;
753 	int err = 0;
754 
755 	BT_DBG("sock %p, sk %p", sock, sk);
756 
757 	if (!sk)
758 		return 0;
759 
760 	lock_sock(sk);
761 	if (!sk->sk_shutdown) {
762 		sk->sk_shutdown = SHUTDOWN_MASK;
763 		sco_sock_clear_timer(sk);
764 		__sco_sock_close(sk);
765 
766 		if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
767 			err = bt_sock_wait_state(sk, BT_CLOSED,
768 							sk->sk_lingertime);
769 	}
770 	release_sock(sk);
771 	return err;
772 }
773 
774 static int sco_sock_release(struct socket *sock)
775 {
776 	struct sock *sk = sock->sk;
777 	int err = 0;
778 
779 	BT_DBG("sock %p, sk %p", sock, sk);
780 
781 	if (!sk)
782 		return 0;
783 
784 	sco_sock_close(sk);
785 
786 	if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime) {
787 		lock_sock(sk);
788 		err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
789 		release_sock(sk);
790 	}
791 
792 	sock_orphan(sk);
793 	sco_sock_kill(sk);
794 	return err;
795 }
796 
797 static void __sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent)
798 {
799 	BT_DBG("conn %p", conn);
800 
801 	sco_pi(sk)->conn = conn;
802 	conn->sk = sk;
803 
804 	if (parent)
805 		bt_accept_enqueue(parent, sk);
806 }
807 
808 /* Delete channel.
809  * Must be called on the locked socket. */
810 static void sco_chan_del(struct sock *sk, int err)
811 {
812 	struct sco_conn *conn;
813 
814 	conn = sco_pi(sk)->conn;
815 
816 	BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
817 
818 	if (conn) {
819 		sco_conn_lock(conn);
820 		conn->sk = NULL;
821 		sco_pi(sk)->conn = NULL;
822 		sco_conn_unlock(conn);
823 		hci_conn_put(conn->hcon);
824 	}
825 
826 	sk->sk_state = BT_CLOSED;
827 	sk->sk_err   = err;
828 	sk->sk_state_change(sk);
829 
830 	sock_set_flag(sk, SOCK_ZAPPED);
831 }
832 
833 static void sco_conn_ready(struct sco_conn *conn)
834 {
835 	struct sock *parent, *sk;
836 
837 	BT_DBG("conn %p", conn);
838 
839 	sco_conn_lock(conn);
840 
841 	if ((sk = conn->sk)) {
842 		sco_sock_clear_timer(sk);
843 		bh_lock_sock(sk);
844 		sk->sk_state = BT_CONNECTED;
845 		sk->sk_state_change(sk);
846 		bh_unlock_sock(sk);
847 	} else {
848 		parent = sco_get_sock_listen(conn->src);
849 		if (!parent)
850 			goto done;
851 
852 		bh_lock_sock(parent);
853 
854 		sk = sco_sock_alloc(sock_net(parent), NULL, BTPROTO_SCO, GFP_ATOMIC);
855 		if (!sk) {
856 			bh_unlock_sock(parent);
857 			goto done;
858 		}
859 
860 		sco_sock_init(sk, parent);
861 
862 		bacpy(&bt_sk(sk)->src, conn->src);
863 		bacpy(&bt_sk(sk)->dst, conn->dst);
864 
865 		hci_conn_hold(conn->hcon);
866 		__sco_chan_add(conn, sk, parent);
867 
868 		sk->sk_state = BT_CONNECTED;
869 
870 		/* Wake up parent */
871 		parent->sk_data_ready(parent, 1);
872 
873 		bh_unlock_sock(parent);
874 	}
875 
876 done:
877 	sco_conn_unlock(conn);
878 }
879 
880 /* ----- SCO interface with lower layer (HCI) ----- */
881 static int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type)
882 {
883 	register struct sock *sk;
884 	struct hlist_node *node;
885 	int lm = 0;
886 
887 	if (type != SCO_LINK && type != ESCO_LINK)
888 		return 0;
889 
890 	BT_DBG("hdev %s, bdaddr %s", hdev->name, batostr(bdaddr));
891 
892 	/* Find listening sockets */
893 	read_lock(&sco_sk_list.lock);
894 	sk_for_each(sk, node, &sco_sk_list.head) {
895 		if (sk->sk_state != BT_LISTEN)
896 			continue;
897 
898 		if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr) ||
899 				!bacmp(&bt_sk(sk)->src, BDADDR_ANY)) {
900 			lm |= HCI_LM_ACCEPT;
901 			break;
902 		}
903 	}
904 	read_unlock(&sco_sk_list.lock);
905 
906 	return lm;
907 }
908 
909 static int sco_connect_cfm(struct hci_conn *hcon, __u8 status)
910 {
911 	BT_DBG("hcon %p bdaddr %s status %d", hcon, batostr(&hcon->dst), status);
912 
913 	if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
914 		return 0;
915 
916 	if (!status) {
917 		struct sco_conn *conn;
918 
919 		conn = sco_conn_add(hcon, status);
920 		if (conn)
921 			sco_conn_ready(conn);
922 	} else
923 		sco_conn_del(hcon, bt_err(status));
924 
925 	return 0;
926 }
927 
928 static int sco_disconn_cfm(struct hci_conn *hcon, __u8 reason)
929 {
930 	BT_DBG("hcon %p reason %d", hcon, reason);
931 
932 	if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
933 		return 0;
934 
935 	sco_conn_del(hcon, bt_err(reason));
936 
937 	return 0;
938 }
939 
940 static int sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
941 {
942 	struct sco_conn *conn = hcon->sco_data;
943 
944 	if (!conn)
945 		goto drop;
946 
947 	BT_DBG("conn %p len %d", conn, skb->len);
948 
949 	if (skb->len) {
950 		sco_recv_frame(conn, skb);
951 		return 0;
952 	}
953 
954 drop:
955 	kfree_skb(skb);
956 	return 0;
957 }
958 
959 static int sco_debugfs_show(struct seq_file *f, void *p)
960 {
961 	struct sock *sk;
962 	struct hlist_node *node;
963 
964 	read_lock_bh(&sco_sk_list.lock);
965 
966 	sk_for_each(sk, node, &sco_sk_list.head) {
967 		seq_printf(f, "%s %s %d\n", batostr(&bt_sk(sk)->src),
968 				batostr(&bt_sk(sk)->dst), sk->sk_state);
969 	}
970 
971 	read_unlock_bh(&sco_sk_list.lock);
972 
973 	return 0;
974 }
975 
976 static int sco_debugfs_open(struct inode *inode, struct file *file)
977 {
978 	return single_open(file, sco_debugfs_show, inode->i_private);
979 }
980 
981 static const struct file_operations sco_debugfs_fops = {
982 	.open		= sco_debugfs_open,
983 	.read		= seq_read,
984 	.llseek		= seq_lseek,
985 	.release	= single_release,
986 };
987 
988 static struct dentry *sco_debugfs;
989 
990 static const struct proto_ops sco_sock_ops = {
991 	.family		= PF_BLUETOOTH,
992 	.owner		= THIS_MODULE,
993 	.release	= sco_sock_release,
994 	.bind		= sco_sock_bind,
995 	.connect	= sco_sock_connect,
996 	.listen		= sco_sock_listen,
997 	.accept		= sco_sock_accept,
998 	.getname	= sco_sock_getname,
999 	.sendmsg	= sco_sock_sendmsg,
1000 	.recvmsg	= bt_sock_recvmsg,
1001 	.poll		= bt_sock_poll,
1002 	.ioctl		= bt_sock_ioctl,
1003 	.mmap		= sock_no_mmap,
1004 	.socketpair	= sock_no_socketpair,
1005 	.shutdown	= sco_sock_shutdown,
1006 	.setsockopt	= sco_sock_setsockopt,
1007 	.getsockopt	= sco_sock_getsockopt
1008 };
1009 
1010 static const struct net_proto_family sco_sock_family_ops = {
1011 	.family	= PF_BLUETOOTH,
1012 	.owner	= THIS_MODULE,
1013 	.create	= sco_sock_create,
1014 };
1015 
1016 static struct hci_proto sco_hci_proto = {
1017 	.name		= "SCO",
1018 	.id		= HCI_PROTO_SCO,
1019 	.connect_ind	= sco_connect_ind,
1020 	.connect_cfm	= sco_connect_cfm,
1021 	.disconn_cfm	= sco_disconn_cfm,
1022 	.recv_scodata	= sco_recv_scodata
1023 };
1024 
1025 static int __init sco_init(void)
1026 {
1027 	int err;
1028 
1029 	err = proto_register(&sco_proto, 0);
1030 	if (err < 0)
1031 		return err;
1032 
1033 	err = bt_sock_register(BTPROTO_SCO, &sco_sock_family_ops);
1034 	if (err < 0) {
1035 		BT_ERR("SCO socket registration failed");
1036 		goto error;
1037 	}
1038 
1039 	err = hci_register_proto(&sco_hci_proto);
1040 	if (err < 0) {
1041 		BT_ERR("SCO protocol registration failed");
1042 		bt_sock_unregister(BTPROTO_SCO);
1043 		goto error;
1044 	}
1045 
1046 	if (bt_debugfs) {
1047 		sco_debugfs = debugfs_create_file("sco", 0444,
1048 					bt_debugfs, NULL, &sco_debugfs_fops);
1049 		if (!sco_debugfs)
1050 			BT_ERR("Failed to create SCO debug file");
1051 	}
1052 
1053 	BT_INFO("SCO (Voice Link) ver %s", VERSION);
1054 	BT_INFO("SCO socket layer initialized");
1055 
1056 	return 0;
1057 
1058 error:
1059 	proto_unregister(&sco_proto);
1060 	return err;
1061 }
1062 
1063 static void __exit sco_exit(void)
1064 {
1065 	debugfs_remove(sco_debugfs);
1066 
1067 	if (bt_sock_unregister(BTPROTO_SCO) < 0)
1068 		BT_ERR("SCO socket unregistration failed");
1069 
1070 	if (hci_unregister_proto(&sco_hci_proto) < 0)
1071 		BT_ERR("SCO protocol unregistration failed");
1072 
1073 	proto_unregister(&sco_proto);
1074 }
1075 
1076 module_init(sco_init);
1077 module_exit(sco_exit);
1078 
1079 module_param(disable_esco, bool, 0644);
1080 MODULE_PARM_DESC(disable_esco, "Disable eSCO connection creation");
1081 
1082 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
1083 MODULE_DESCRIPTION("Bluetooth SCO ver " VERSION);
1084 MODULE_VERSION(VERSION);
1085 MODULE_LICENSE("GPL");
1086 MODULE_ALIAS("bt-proto-2");
1087