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