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