xref: /linux/net/bluetooth/sco.c (revision 9ce7677cfd7cd871adb457c80bea3b581b839641)
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/config.h>
28 #include <linux/module.h>
29 
30 #include <linux/types.h>
31 #include <linux/errno.h>
32 #include <linux/kernel.h>
33 #include <linux/sched.h>
34 #include <linux/slab.h>
35 #include <linux/poll.h>
36 #include <linux/fcntl.h>
37 #include <linux/init.h>
38 #include <linux/interrupt.h>
39 #include <linux/socket.h>
40 #include <linux/skbuff.h>
41 #include <linux/device.h>
42 #include <linux/list.h>
43 #include <net/sock.h>
44 
45 #include <asm/system.h>
46 #include <asm/uaccess.h>
47 
48 #include <net/bluetooth/bluetooth.h>
49 #include <net/bluetooth/hci_core.h>
50 #include <net/bluetooth/sco.h>
51 
52 #ifndef CONFIG_BT_SCO_DEBUG
53 #undef  BT_DBG
54 #define BT_DBG(D...)
55 #endif
56 
57 #define VERSION "0.5"
58 
59 static struct proto_ops sco_sock_ops;
60 
61 static struct bt_sock_list sco_sk_list = {
62 	.lock = RW_LOCK_UNLOCKED
63 };
64 
65 static void __sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent);
66 static void sco_chan_del(struct sock *sk, int err);
67 
68 static int  sco_conn_del(struct hci_conn *conn, int err);
69 
70 static void sco_sock_close(struct sock *sk);
71 static void sco_sock_kill(struct sock *sk);
72 
73 /* ---- SCO timers ---- */
74 static void sco_sock_timeout(unsigned long arg)
75 {
76 	struct sock *sk = (struct sock *) arg;
77 
78 	BT_DBG("sock %p state %d", sk, sk->sk_state);
79 
80 	bh_lock_sock(sk);
81 	sk->sk_err = ETIMEDOUT;
82 	sk->sk_state_change(sk);
83 	bh_unlock_sock(sk);
84 
85 	sco_sock_kill(sk);
86 	sock_put(sk);
87 }
88 
89 static void sco_sock_set_timer(struct sock *sk, long timeout)
90 {
91 	BT_DBG("sock %p state %d timeout %ld", sk, sk->sk_state, timeout);
92 	sk_reset_timer(sk, &sk->sk_timer, jiffies + timeout);
93 }
94 
95 static void sco_sock_clear_timer(struct sock *sk)
96 {
97 	BT_DBG("sock %p state %d", sk, sk->sk_state);
98 	sk_stop_timer(sk, &sk->sk_timer);
99 }
100 
101 static void sco_sock_init_timer(struct sock *sk)
102 {
103 	init_timer(&sk->sk_timer);
104 	sk->sk_timer.function = sco_sock_timeout;
105 	sk->sk_timer.data = (unsigned long)sk;
106 }
107 
108 /* ---- SCO connections ---- */
109 static struct sco_conn *sco_conn_add(struct hci_conn *hcon, __u8 status)
110 {
111 	struct hci_dev *hdev = hcon->hdev;
112 	struct sco_conn *conn;
113 
114 	if ((conn = hcon->sco_data))
115 		return conn;
116 
117 	if (status)
118 		return conn;
119 
120 	if (!(conn = kmalloc(sizeof(struct sco_conn), GFP_ATOMIC)))
121 		return NULL;
122 	memset(conn, 0, sizeof(struct sco_conn));
123 
124 	spin_lock_init(&conn->lock);
125 
126 	hcon->sco_data = conn;
127 	conn->hcon = hcon;
128 
129 	conn->src = &hdev->bdaddr;
130 	conn->dst = &hcon->dst;
131 
132 	if (hdev->sco_mtu > 0)
133 		conn->mtu = hdev->sco_mtu;
134 	else
135 		conn->mtu = 60;
136 
137 	BT_DBG("hcon %p conn %p", hcon, conn);
138 	return conn;
139 }
140 
141 static inline struct sock *sco_chan_get(struct sco_conn *conn)
142 {
143 	struct sock *sk = NULL;
144 	sco_conn_lock(conn);
145 	sk = conn->sk;
146 	sco_conn_unlock(conn);
147 	return sk;
148 }
149 
150 static int sco_conn_del(struct hci_conn *hcon, int err)
151 {
152 	struct sco_conn *conn;
153 	struct sock *sk;
154 
155 	if (!(conn = hcon->sco_data))
156 		return 0;
157 
158 	BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
159 
160 	/* Kill socket */
161 	if ((sk = sco_chan_get(conn))) {
162 		bh_lock_sock(sk);
163 		sco_sock_clear_timer(sk);
164 		sco_chan_del(sk, err);
165 		bh_unlock_sock(sk);
166 		sco_sock_kill(sk);
167 	}
168 
169 	hcon->sco_data = NULL;
170 	kfree(conn);
171 	return 0;
172 }
173 
174 static inline int sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent)
175 {
176 	int err = 0;
177 
178 	sco_conn_lock(conn);
179 	if (conn->sk) {
180 		err = -EBUSY;
181 	} else {
182 		__sco_chan_add(conn, sk, parent);
183 	}
184 	sco_conn_unlock(conn);
185 	return err;
186 }
187 
188 static int sco_connect(struct sock *sk)
189 {
190 	bdaddr_t *src = &bt_sk(sk)->src;
191 	bdaddr_t *dst = &bt_sk(sk)->dst;
192 	struct sco_conn *conn;
193 	struct hci_conn *hcon;
194 	struct hci_dev  *hdev;
195 	int err = 0;
196 
197 	BT_DBG("%s -> %s", batostr(src), batostr(dst));
198 
199 	if (!(hdev = hci_get_route(dst, src)))
200 		return -EHOSTUNREACH;
201 
202 	hci_dev_lock_bh(hdev);
203 
204 	err = -ENOMEM;
205 
206 	hcon = hci_connect(hdev, SCO_LINK, dst);
207 	if (!hcon)
208 		goto done;
209 
210 	conn = sco_conn_add(hcon, 0);
211 	if (!conn) {
212 		hci_conn_put(hcon);
213 		goto done;
214 	}
215 
216 	/* Update source addr of the socket */
217 	bacpy(src, conn->src);
218 
219 	err = sco_chan_add(conn, sk, NULL);
220 	if (err)
221 		goto done;
222 
223 	if (hcon->state == BT_CONNECTED) {
224 		sco_sock_clear_timer(sk);
225 		sk->sk_state = BT_CONNECTED;
226 	} else {
227 		sk->sk_state = BT_CONNECT;
228 		sco_sock_set_timer(sk, sk->sk_sndtimeo);
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 		goto fail;
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 socket *sock, int proto, gfp_t prio)
421 {
422 	struct sock *sk;
423 
424 	sk = sk_alloc(PF_BLUETOOTH, prio, &sco_proto, 1);
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 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 	if (!(sk = sco_sock_alloc(sock, protocol, GFP_KERNEL)))
459 		return -ENOMEM;
460 
461 	sco_sock_init(sk, NULL);
462 	return 0;
463 }
464 
465 static int sco_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
466 {
467 	struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
468 	struct sock *sk = sock->sk;
469 	bdaddr_t *src = &sa->sco_bdaddr;
470 	int err = 0;
471 
472 	BT_DBG("sk %p %s", sk, batostr(&sa->sco_bdaddr));
473 
474 	if (!addr || addr->sa_family != AF_BLUETOOTH)
475 		return -EINVAL;
476 
477 	lock_sock(sk);
478 
479 	if (sk->sk_state != BT_OPEN) {
480 		err = -EBADFD;
481 		goto done;
482 	}
483 
484 	write_lock_bh(&sco_sk_list.lock);
485 
486 	if (bacmp(src, BDADDR_ANY) && __sco_get_sock_by_addr(src)) {
487 		err = -EADDRINUSE;
488 	} else {
489 		/* Save source address */
490 		bacpy(&bt_sk(sk)->src, &sa->sco_bdaddr);
491 		sk->sk_state = BT_BOUND;
492 	}
493 
494 	write_unlock_bh(&sco_sk_list.lock);
495 
496 done:
497 	release_sock(sk);
498 	return err;
499 }
500 
501 static int sco_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
502 {
503 	struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
504 	struct sock *sk = sock->sk;
505 	int err = 0;
506 
507 
508 	BT_DBG("sk %p", sk);
509 
510 	if (addr->sa_family != AF_BLUETOOTH || alen < sizeof(struct sockaddr_sco))
511 		return -EINVAL;
512 
513 	if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND)
514 		return -EBADFD;
515 
516 	if (sk->sk_type != SOCK_SEQPACKET)
517 		return -EINVAL;
518 
519 	lock_sock(sk);
520 
521 	/* Set destination address and psm */
522 	bacpy(&bt_sk(sk)->dst, &sa->sco_bdaddr);
523 
524 	if ((err = sco_connect(sk)))
525 		goto done;
526 
527 	err = bt_sock_wait_state(sk, BT_CONNECTED,
528 			sock_sndtimeo(sk, flags & O_NONBLOCK));
529 
530 done:
531 	release_sock(sk);
532 	return err;
533 }
534 
535 static int sco_sock_listen(struct socket *sock, int backlog)
536 {
537 	struct sock *sk = sock->sk;
538 	int err = 0;
539 
540 	BT_DBG("sk %p backlog %d", sk, backlog);
541 
542 	lock_sock(sk);
543 
544 	if (sk->sk_state != BT_BOUND || sock->type != SOCK_SEQPACKET) {
545 		err = -EBADFD;
546 		goto done;
547 	}
548 
549 	sk->sk_max_ack_backlog = backlog;
550 	sk->sk_ack_backlog = 0;
551 	sk->sk_state = BT_LISTEN;
552 
553 done:
554 	release_sock(sk);
555 	return err;
556 }
557 
558 static int sco_sock_accept(struct socket *sock, struct socket *newsock, int flags)
559 {
560 	DECLARE_WAITQUEUE(wait, current);
561 	struct sock *sk = sock->sk, *ch;
562 	long timeo;
563 	int err = 0;
564 
565 	lock_sock(sk);
566 
567 	if (sk->sk_state != BT_LISTEN) {
568 		err = -EBADFD;
569 		goto done;
570 	}
571 
572 	timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
573 
574 	BT_DBG("sk %p timeo %ld", sk, timeo);
575 
576 	/* Wait for an incoming connection. (wake-one). */
577 	add_wait_queue_exclusive(sk->sk_sleep, &wait);
578 	while (!(ch = bt_accept_dequeue(sk, newsock))) {
579 		set_current_state(TASK_INTERRUPTIBLE);
580 		if (!timeo) {
581 			err = -EAGAIN;
582 			break;
583 		}
584 
585 		release_sock(sk);
586 		timeo = schedule_timeout(timeo);
587 		lock_sock(sk);
588 
589 		if (sk->sk_state != BT_LISTEN) {
590 			err = -EBADFD;
591 			break;
592 		}
593 
594 		if (signal_pending(current)) {
595 			err = sock_intr_errno(timeo);
596 			break;
597 		}
598 	}
599 	set_current_state(TASK_RUNNING);
600 	remove_wait_queue(sk->sk_sleep, &wait);
601 
602 	if (err)
603 		goto done;
604 
605 	newsock->state = SS_CONNECTED;
606 
607 	BT_DBG("new socket %p", ch);
608 
609 done:
610 	release_sock(sk);
611 	return err;
612 }
613 
614 static int sco_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
615 {
616 	struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
617 	struct sock *sk = sock->sk;
618 
619 	BT_DBG("sock %p, sk %p", sock, sk);
620 
621 	addr->sa_family = AF_BLUETOOTH;
622 	*len = sizeof(struct sockaddr_sco);
623 
624 	if (peer)
625 		bacpy(&sa->sco_bdaddr, &bt_sk(sk)->dst);
626 	else
627 		bacpy(&sa->sco_bdaddr, &bt_sk(sk)->src);
628 
629 	return 0;
630 }
631 
632 static int sco_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
633 			    struct msghdr *msg, size_t len)
634 {
635 	struct sock *sk = sock->sk;
636 	int err = 0;
637 
638 	BT_DBG("sock %p, sk %p", sock, sk);
639 
640 	if (sk->sk_err)
641 		return sock_error(sk);
642 
643 	if (msg->msg_flags & MSG_OOB)
644 		return -EOPNOTSUPP;
645 
646 	lock_sock(sk);
647 
648 	if (sk->sk_state == BT_CONNECTED)
649 		err = sco_send_frame(sk, msg, len);
650 	else
651 		err = -ENOTCONN;
652 
653 	release_sock(sk);
654 	return err;
655 }
656 
657 static int sco_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, int optlen)
658 {
659 	struct sock *sk = sock->sk;
660 	int err = 0;
661 
662 	BT_DBG("sk %p", sk);
663 
664 	lock_sock(sk);
665 
666 	switch (optname) {
667 	default:
668 		err = -ENOPROTOOPT;
669 		break;
670 	}
671 
672 	release_sock(sk);
673 	return err;
674 }
675 
676 static int sco_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen)
677 {
678 	struct sock *sk = sock->sk;
679 	struct sco_options opts;
680 	struct sco_conninfo cinfo;
681 	int len, err = 0;
682 
683 	BT_DBG("sk %p", sk);
684 
685 	if (get_user(len, optlen))
686 		return -EFAULT;
687 
688 	lock_sock(sk);
689 
690 	switch (optname) {
691 	case SCO_OPTIONS:
692 		if (sk->sk_state != BT_CONNECTED) {
693 			err = -ENOTCONN;
694 			break;
695 		}
696 
697 		opts.mtu = sco_pi(sk)->conn->mtu;
698 
699 		BT_DBG("mtu %d", opts.mtu);
700 
701 		len = min_t(unsigned int, len, sizeof(opts));
702 		if (copy_to_user(optval, (char *)&opts, len))
703 			err = -EFAULT;
704 
705 		break;
706 
707 	case SCO_CONNINFO:
708 		if (sk->sk_state != BT_CONNECTED) {
709 			err = -ENOTCONN;
710 			break;
711 		}
712 
713 		cinfo.hci_handle = sco_pi(sk)->conn->hcon->handle;
714 		memcpy(cinfo.dev_class, sco_pi(sk)->conn->hcon->dev_class, 3);
715 
716 		len = min_t(unsigned int, len, sizeof(cinfo));
717 		if (copy_to_user(optval, (char *)&cinfo, len))
718 			err = -EFAULT;
719 
720 		break;
721 
722 	default:
723 		err = -ENOPROTOOPT;
724 		break;
725 	}
726 
727 	release_sock(sk);
728 	return err;
729 }
730 
731 static int sco_sock_release(struct socket *sock)
732 {
733 	struct sock *sk = sock->sk;
734 	int err = 0;
735 
736 	BT_DBG("sock %p, sk %p", sock, sk);
737 
738 	if (!sk)
739 		return 0;
740 
741 	sco_sock_close(sk);
742 
743 	if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime) {
744 		lock_sock(sk);
745 		err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
746 		release_sock(sk);
747 	}
748 
749 	sock_orphan(sk);
750 	sco_sock_kill(sk);
751 	return err;
752 }
753 
754 static void __sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent)
755 {
756 	BT_DBG("conn %p", conn);
757 
758 	sco_pi(sk)->conn = conn;
759 	conn->sk = sk;
760 
761 	if (parent)
762 		bt_accept_enqueue(parent, sk);
763 }
764 
765 /* Delete channel.
766  * Must be called on the locked socket. */
767 static void sco_chan_del(struct sock *sk, int err)
768 {
769 	struct sco_conn *conn;
770 
771 	conn = sco_pi(sk)->conn;
772 
773 	BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
774 
775 	if (conn) {
776 		sco_conn_lock(conn);
777 		conn->sk = NULL;
778 		sco_pi(sk)->conn = NULL;
779 		sco_conn_unlock(conn);
780 		hci_conn_put(conn->hcon);
781 	}
782 
783 	sk->sk_state = BT_CLOSED;
784 	sk->sk_err   = err;
785 	sk->sk_state_change(sk);
786 
787 	sock_set_flag(sk, SOCK_ZAPPED);
788 }
789 
790 static void sco_conn_ready(struct sco_conn *conn)
791 {
792 	struct sock *parent, *sk;
793 
794 	BT_DBG("conn %p", conn);
795 
796 	sco_conn_lock(conn);
797 
798 	if ((sk = conn->sk)) {
799 		sco_sock_clear_timer(sk);
800 		bh_lock_sock(sk);
801 		sk->sk_state = BT_CONNECTED;
802 		sk->sk_state_change(sk);
803 		bh_unlock_sock(sk);
804 	} else {
805 		parent = sco_get_sock_listen(conn->src);
806 		if (!parent)
807 			goto done;
808 
809 		bh_lock_sock(parent);
810 
811 		sk = sco_sock_alloc(NULL, BTPROTO_SCO, GFP_ATOMIC);
812 		if (!sk) {
813 			bh_unlock_sock(parent);
814 			goto done;
815 		}
816 
817 		sco_sock_init(sk, parent);
818 
819 		bacpy(&bt_sk(sk)->src, conn->src);
820 		bacpy(&bt_sk(sk)->dst, conn->dst);
821 
822 		hci_conn_hold(conn->hcon);
823 		__sco_chan_add(conn, sk, parent);
824 
825 		sk->sk_state = BT_CONNECTED;
826 
827 		/* Wake up parent */
828 		parent->sk_data_ready(parent, 1);
829 
830 		bh_unlock_sock(parent);
831 	}
832 
833 done:
834 	sco_conn_unlock(conn);
835 }
836 
837 /* ----- SCO interface with lower layer (HCI) ----- */
838 static int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type)
839 {
840 	BT_DBG("hdev %s, bdaddr %s", hdev->name, batostr(bdaddr));
841 
842 	/* Always accept connection */
843 	return HCI_LM_ACCEPT;
844 }
845 
846 static int sco_connect_cfm(struct hci_conn *hcon, __u8 status)
847 {
848 	BT_DBG("hcon %p bdaddr %s status %d", hcon, batostr(&hcon->dst), status);
849 
850 	if (hcon->type != SCO_LINK)
851 		return 0;
852 
853 	if (!status) {
854 		struct sco_conn *conn;
855 
856 		conn = sco_conn_add(hcon, status);
857 		if (conn)
858 			sco_conn_ready(conn);
859 	} else
860 		sco_conn_del(hcon, bt_err(status));
861 
862 	return 0;
863 }
864 
865 static int sco_disconn_ind(struct hci_conn *hcon, __u8 reason)
866 {
867 	BT_DBG("hcon %p reason %d", hcon, reason);
868 
869 	if (hcon->type != SCO_LINK)
870 		return 0;
871 
872 	sco_conn_del(hcon, bt_err(reason));
873 	return 0;
874 }
875 
876 static int sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
877 {
878 	struct sco_conn *conn = hcon->sco_data;
879 
880 	if (!conn)
881 		goto drop;
882 
883 	BT_DBG("conn %p len %d", conn, skb->len);
884 
885 	if (skb->len) {
886 		sco_recv_frame(conn, skb);
887 		return 0;
888 	}
889 
890 drop:
891 	kfree_skb(skb);
892 	return 0;
893 }
894 
895 static ssize_t sco_sysfs_show(struct class *dev, char *buf)
896 {
897 	struct sock *sk;
898 	struct hlist_node *node;
899 	char *str = buf;
900 
901 	read_lock_bh(&sco_sk_list.lock);
902 
903 	sk_for_each(sk, node, &sco_sk_list.head) {
904 		str += sprintf(str, "%s %s %d\n",
905 				batostr(&bt_sk(sk)->src), batostr(&bt_sk(sk)->dst),
906 				sk->sk_state);
907 	}
908 
909 	read_unlock_bh(&sco_sk_list.lock);
910 
911 	return (str - buf);
912 }
913 
914 static CLASS_ATTR(sco, S_IRUGO, sco_sysfs_show, NULL);
915 
916 static struct proto_ops sco_sock_ops = {
917 	.family		= PF_BLUETOOTH,
918 	.owner		= THIS_MODULE,
919 	.release	= sco_sock_release,
920 	.bind		= sco_sock_bind,
921 	.connect	= sco_sock_connect,
922 	.listen		= sco_sock_listen,
923 	.accept		= sco_sock_accept,
924 	.getname	= sco_sock_getname,
925 	.sendmsg	= sco_sock_sendmsg,
926 	.recvmsg	= bt_sock_recvmsg,
927 	.poll		= bt_sock_poll,
928 	.ioctl		= sock_no_ioctl,
929 	.mmap		= sock_no_mmap,
930 	.socketpair	= sock_no_socketpair,
931 	.shutdown	= sock_no_shutdown,
932 	.setsockopt	= sco_sock_setsockopt,
933 	.getsockopt	= sco_sock_getsockopt
934 };
935 
936 static struct net_proto_family sco_sock_family_ops = {
937 	.family	= PF_BLUETOOTH,
938 	.owner	= THIS_MODULE,
939 	.create	= sco_sock_create,
940 };
941 
942 static struct hci_proto sco_hci_proto = {
943 	.name		= "SCO",
944 	.id		= HCI_PROTO_SCO,
945 	.connect_ind	= sco_connect_ind,
946 	.connect_cfm	= sco_connect_cfm,
947 	.disconn_ind	= sco_disconn_ind,
948 	.recv_scodata	= sco_recv_scodata
949 };
950 
951 static int __init sco_init(void)
952 {
953 	int err;
954 
955 	err = proto_register(&sco_proto, 0);
956 	if (err < 0)
957 		return err;
958 
959 	err = bt_sock_register(BTPROTO_SCO, &sco_sock_family_ops);
960 	if (err < 0) {
961 		BT_ERR("SCO socket registration failed");
962 		goto error;
963 	}
964 
965 	err = hci_register_proto(&sco_hci_proto);
966 	if (err < 0) {
967 		BT_ERR("SCO protocol registration failed");
968 		bt_sock_unregister(BTPROTO_SCO);
969 		goto error;
970 	}
971 
972 	class_create_file(&bt_class, &class_attr_sco);
973 
974 	BT_INFO("SCO (Voice Link) ver %s", VERSION);
975 	BT_INFO("SCO socket layer initialized");
976 
977 	return 0;
978 
979 error:
980 	proto_unregister(&sco_proto);
981 	return err;
982 }
983 
984 static void __exit sco_exit(void)
985 {
986 	class_remove_file(&bt_class, &class_attr_sco);
987 
988 	if (bt_sock_unregister(BTPROTO_SCO) < 0)
989 		BT_ERR("SCO socket unregistration failed");
990 
991 	if (hci_unregister_proto(&sco_hci_proto) < 0)
992 		BT_ERR("SCO protocol unregistration failed");
993 
994 	proto_unregister(&sco_proto);
995 }
996 
997 module_init(sco_init);
998 module_exit(sco_exit);
999 
1000 MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>, Marcel Holtmann <marcel@holtmann.org>");
1001 MODULE_DESCRIPTION("Bluetooth SCO ver " VERSION);
1002 MODULE_VERSION(VERSION);
1003 MODULE_LICENSE("GPL");
1004 MODULE_ALIAS("bt-proto-2");
1005