2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2000-2001 Qualcomm Incorporated
5 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
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;
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.
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.
25 /* Bluetooth SCO sockets. */
27 #include <linux/module.h>
28 #include <linux/debugfs.h>
29 #include <linux/seq_file.h>
31 #include <net/bluetooth/bluetooth.h>
32 #include <net/bluetooth/hci_core.h>
33 #include <net/bluetooth/sco.h>
35 static bool disable_esco
;
37 static const struct proto_ops sco_sock_ops
;
39 static struct bt_sock_list sco_sk_list
= {
40 .lock
= __RW_LOCK_UNLOCKED(sco_sk_list
.lock
)
43 /* ---- SCO connections ---- */
45 struct hci_conn
*hcon
;
53 #define sco_conn_lock(c) spin_lock(&c->lock);
54 #define sco_conn_unlock(c) spin_unlock(&c->lock);
56 static void sco_chan_del(struct sock
*sk
, int err
);
58 static void sco_sock_close(struct sock
*sk
);
59 static void sco_sock_kill(struct sock
*sk
);
61 /* ----- SCO socket info ----- */
62 #define sco_pi(sk) ((struct sco_pinfo *) sk)
70 struct sco_conn
*conn
;
73 /* ---- SCO timers ---- */
74 #define SCO_CONN_TIMEOUT (HZ * 40)
75 #define SCO_DISCONN_TIMEOUT (HZ * 2)
77 static void sco_sock_timeout(unsigned long arg
)
79 struct sock
*sk
= (struct sock
*) arg
;
81 BT_DBG("sock %p state %d", sk
, sk
->sk_state
);
84 sk
->sk_err
= ETIMEDOUT
;
85 sk
->sk_state_change(sk
);
92 static void sco_sock_set_timer(struct sock
*sk
, long timeout
)
94 BT_DBG("sock %p state %d timeout %ld", sk
, sk
->sk_state
, timeout
);
95 sk_reset_timer(sk
, &sk
->sk_timer
, jiffies
+ timeout
);
98 static void sco_sock_clear_timer(struct sock
*sk
)
100 BT_DBG("sock %p state %d", sk
, sk
->sk_state
);
101 sk_stop_timer(sk
, &sk
->sk_timer
);
104 /* ---- SCO connections ---- */
105 static struct sco_conn
*sco_conn_add(struct hci_conn
*hcon
)
107 struct hci_dev
*hdev
= hcon
->hdev
;
108 struct sco_conn
*conn
= hcon
->sco_data
;
113 conn
= kzalloc(sizeof(struct sco_conn
), GFP_KERNEL
);
117 spin_lock_init(&conn
->lock
);
119 hcon
->sco_data
= conn
;
122 if (hdev
->sco_mtu
> 0)
123 conn
->mtu
= hdev
->sco_mtu
;
127 BT_DBG("hcon %p conn %p", hcon
, conn
);
132 static struct sock
*sco_chan_get(struct sco_conn
*conn
)
134 struct sock
*sk
= NULL
;
137 sco_conn_unlock(conn
);
141 static int sco_conn_del(struct hci_conn
*hcon
, int err
)
143 struct sco_conn
*conn
= hcon
->sco_data
;
149 BT_DBG("hcon %p conn %p, err %d", hcon
, conn
, err
);
152 sk
= sco_chan_get(conn
);
155 sco_sock_clear_timer(sk
);
156 sco_chan_del(sk
, err
);
161 hcon
->sco_data
= NULL
;
166 static void __sco_chan_add(struct sco_conn
*conn
, struct sock
*sk
, struct sock
*parent
)
168 BT_DBG("conn %p", conn
);
170 sco_pi(sk
)->conn
= conn
;
174 bt_accept_enqueue(parent
, sk
);
177 static int sco_chan_add(struct sco_conn
*conn
, struct sock
*sk
,
186 __sco_chan_add(conn
, sk
, parent
);
188 sco_conn_unlock(conn
);
192 static int sco_connect(struct sock
*sk
)
194 struct sco_conn
*conn
;
195 struct hci_conn
*hcon
;
196 struct hci_dev
*hdev
;
199 BT_DBG("%pMR -> %pMR", &sco_pi(sk
)->src
, &sco_pi(sk
)->dst
);
201 hdev
= hci_get_route(&sco_pi(sk
)->dst
, &sco_pi(sk
)->src
);
203 return -EHOSTUNREACH
;
207 if (lmp_esco_capable(hdev
) && !disable_esco
)
212 if (sco_pi(sk
)->setting
== BT_VOICE_TRANSPARENT
&&
213 (!lmp_transp_capable(hdev
) || !lmp_esco_capable(hdev
))) {
218 hcon
= hci_connect_sco(hdev
, type
, &sco_pi(sk
)->dst
,
219 sco_pi(sk
)->setting
);
225 conn
= sco_conn_add(hcon
);
232 /* Update source addr of the socket */
233 bacpy(&sco_pi(sk
)->src
, &hcon
->src
);
235 err
= sco_chan_add(conn
, sk
, NULL
);
239 if (hcon
->state
== BT_CONNECTED
) {
240 sco_sock_clear_timer(sk
);
241 sk
->sk_state
= BT_CONNECTED
;
243 sk
->sk_state
= BT_CONNECT
;
244 sco_sock_set_timer(sk
, sk
->sk_sndtimeo
);
248 hci_dev_unlock(hdev
);
253 static int sco_send_frame(struct sock
*sk
, struct msghdr
*msg
, int len
)
255 struct sco_conn
*conn
= sco_pi(sk
)->conn
;
259 /* Check outgoing MTU */
263 BT_DBG("sk %p len %d", sk
, len
);
265 skb
= bt_skb_send_alloc(sk
, len
, msg
->msg_flags
& MSG_DONTWAIT
, &err
);
269 if (memcpy_fromiovec(skb_put(skb
, len
), msg
->msg_iov
, len
)) {
274 hci_send_sco(conn
->hcon
, skb
);
279 static void sco_recv_frame(struct sco_conn
*conn
, struct sk_buff
*skb
)
281 struct sock
*sk
= sco_chan_get(conn
);
286 BT_DBG("sk %p len %d", sk
, skb
->len
);
288 if (sk
->sk_state
!= BT_CONNECTED
)
291 if (!sock_queue_rcv_skb(sk
, skb
))
298 /* -------- Socket interface ---------- */
299 static struct sock
*__sco_get_sock_listen_by_addr(bdaddr_t
*ba
)
303 sk_for_each(sk
, &sco_sk_list
.head
) {
304 if (sk
->sk_state
!= BT_LISTEN
)
307 if (!bacmp(&sco_pi(sk
)->src
, ba
))
314 /* Find socket listening on source bdaddr.
315 * Returns closest match.
317 static struct sock
*sco_get_sock_listen(bdaddr_t
*src
)
319 struct sock
*sk
= NULL
, *sk1
= NULL
;
321 read_lock(&sco_sk_list
.lock
);
323 sk_for_each(sk
, &sco_sk_list
.head
) {
324 if (sk
->sk_state
!= BT_LISTEN
)
328 if (!bacmp(&sco_pi(sk
)->src
, src
))
332 if (!bacmp(&sco_pi(sk
)->src
, BDADDR_ANY
))
336 read_unlock(&sco_sk_list
.lock
);
338 return sk
? sk
: sk1
;
341 static void sco_sock_destruct(struct sock
*sk
)
345 skb_queue_purge(&sk
->sk_receive_queue
);
346 skb_queue_purge(&sk
->sk_write_queue
);
349 static void sco_sock_cleanup_listen(struct sock
*parent
)
353 BT_DBG("parent %p", parent
);
355 /* Close not yet accepted channels */
356 while ((sk
= bt_accept_dequeue(parent
, NULL
))) {
361 parent
->sk_state
= BT_CLOSED
;
362 sock_set_flag(parent
, SOCK_ZAPPED
);
365 /* Kill socket (only if zapped and orphan)
366 * Must be called on unlocked socket.
368 static void sco_sock_kill(struct sock
*sk
)
370 if (!sock_flag(sk
, SOCK_ZAPPED
) || sk
->sk_socket
)
373 BT_DBG("sk %p state %d", sk
, sk
->sk_state
);
375 /* Kill poor orphan */
376 bt_sock_unlink(&sco_sk_list
, sk
);
377 sock_set_flag(sk
, SOCK_DEAD
);
381 static void __sco_sock_close(struct sock
*sk
)
383 BT_DBG("sk %p state %d socket %p", sk
, sk
->sk_state
, sk
->sk_socket
);
385 switch (sk
->sk_state
) {
387 sco_sock_cleanup_listen(sk
);
392 if (sco_pi(sk
)->conn
->hcon
) {
393 sk
->sk_state
= BT_DISCONN
;
394 sco_sock_set_timer(sk
, SCO_DISCONN_TIMEOUT
);
395 hci_conn_drop(sco_pi(sk
)->conn
->hcon
);
396 sco_pi(sk
)->conn
->hcon
= NULL
;
398 sco_chan_del(sk
, ECONNRESET
);
404 sco_chan_del(sk
, ECONNRESET
);
408 sock_set_flag(sk
, SOCK_ZAPPED
);
413 /* Must be called on unlocked socket. */
414 static void sco_sock_close(struct sock
*sk
)
416 sco_sock_clear_timer(sk
);
418 __sco_sock_close(sk
);
423 static void sco_sock_init(struct sock
*sk
, struct sock
*parent
)
428 sk
->sk_type
= parent
->sk_type
;
429 bt_sk(sk
)->flags
= bt_sk(parent
)->flags
;
430 security_sk_clone(parent
, sk
);
434 static struct proto sco_proto
= {
436 .owner
= THIS_MODULE
,
437 .obj_size
= sizeof(struct sco_pinfo
)
440 static struct sock
*sco_sock_alloc(struct net
*net
, struct socket
*sock
, int proto
, gfp_t prio
)
444 sk
= sk_alloc(net
, PF_BLUETOOTH
, prio
, &sco_proto
);
448 sock_init_data(sock
, sk
);
449 INIT_LIST_HEAD(&bt_sk(sk
)->accept_q
);
451 sk
->sk_destruct
= sco_sock_destruct
;
452 sk
->sk_sndtimeo
= SCO_CONN_TIMEOUT
;
454 sock_reset_flag(sk
, SOCK_ZAPPED
);
456 sk
->sk_protocol
= proto
;
457 sk
->sk_state
= BT_OPEN
;
459 sco_pi(sk
)->setting
= BT_VOICE_CVSD_16BIT
;
461 setup_timer(&sk
->sk_timer
, sco_sock_timeout
, (unsigned long)sk
);
463 bt_sock_link(&sco_sk_list
, sk
);
467 static int sco_sock_create(struct net
*net
, struct socket
*sock
, int protocol
,
472 BT_DBG("sock %p", sock
);
474 sock
->state
= SS_UNCONNECTED
;
476 if (sock
->type
!= SOCK_SEQPACKET
)
477 return -ESOCKTNOSUPPORT
;
479 sock
->ops
= &sco_sock_ops
;
481 sk
= sco_sock_alloc(net
, sock
, protocol
, GFP_ATOMIC
);
485 sco_sock_init(sk
, NULL
);
489 static int sco_sock_bind(struct socket
*sock
, struct sockaddr
*addr
, int addr_len
)
491 struct sockaddr_sco
*sa
= (struct sockaddr_sco
*) addr
;
492 struct sock
*sk
= sock
->sk
;
495 BT_DBG("sk %p %pMR", sk
, &sa
->sco_bdaddr
);
497 if (!addr
|| addr
->sa_family
!= AF_BLUETOOTH
)
502 if (sk
->sk_state
!= BT_OPEN
) {
507 if (sk
->sk_type
!= SOCK_SEQPACKET
) {
512 bacpy(&sco_pi(sk
)->src
, &sa
->sco_bdaddr
);
514 sk
->sk_state
= BT_BOUND
;
521 static int sco_sock_connect(struct socket
*sock
, struct sockaddr
*addr
, int alen
, int flags
)
523 struct sockaddr_sco
*sa
= (struct sockaddr_sco
*) addr
;
524 struct sock
*sk
= sock
->sk
;
529 if (alen
< sizeof(struct sockaddr_sco
) ||
530 addr
->sa_family
!= AF_BLUETOOTH
)
533 if (sk
->sk_state
!= BT_OPEN
&& sk
->sk_state
!= BT_BOUND
)
536 if (sk
->sk_type
!= SOCK_SEQPACKET
)
541 /* Set destination address and psm */
542 bacpy(&sco_pi(sk
)->dst
, &sa
->sco_bdaddr
);
544 err
= sco_connect(sk
);
548 err
= bt_sock_wait_state(sk
, BT_CONNECTED
,
549 sock_sndtimeo(sk
, flags
& O_NONBLOCK
));
556 static int sco_sock_listen(struct socket
*sock
, int backlog
)
558 struct sock
*sk
= sock
->sk
;
559 bdaddr_t
*src
= &sco_pi(sk
)->src
;
562 BT_DBG("sk %p backlog %d", sk
, backlog
);
566 if (sk
->sk_state
!= BT_BOUND
) {
571 if (sk
->sk_type
!= SOCK_SEQPACKET
) {
576 write_lock(&sco_sk_list
.lock
);
578 if (__sco_get_sock_listen_by_addr(src
)) {
583 sk
->sk_max_ack_backlog
= backlog
;
584 sk
->sk_ack_backlog
= 0;
586 sk
->sk_state
= BT_LISTEN
;
589 write_unlock(&sco_sk_list
.lock
);
596 static int sco_sock_accept(struct socket
*sock
, struct socket
*newsock
, int flags
)
598 DECLARE_WAITQUEUE(wait
, current
);
599 struct sock
*sk
= sock
->sk
, *ch
;
605 timeo
= sock_rcvtimeo(sk
, flags
& O_NONBLOCK
);
607 BT_DBG("sk %p timeo %ld", sk
, timeo
);
609 /* Wait for an incoming connection. (wake-one). */
610 add_wait_queue_exclusive(sk_sleep(sk
), &wait
);
612 set_current_state(TASK_INTERRUPTIBLE
);
614 if (sk
->sk_state
!= BT_LISTEN
) {
619 ch
= bt_accept_dequeue(sk
, newsock
);
628 if (signal_pending(current
)) {
629 err
= sock_intr_errno(timeo
);
634 timeo
= schedule_timeout(timeo
);
637 __set_current_state(TASK_RUNNING
);
638 remove_wait_queue(sk_sleep(sk
), &wait
);
643 newsock
->state
= SS_CONNECTED
;
645 BT_DBG("new socket %p", ch
);
652 static int sco_sock_getname(struct socket
*sock
, struct sockaddr
*addr
, int *len
, int peer
)
654 struct sockaddr_sco
*sa
= (struct sockaddr_sco
*) addr
;
655 struct sock
*sk
= sock
->sk
;
657 BT_DBG("sock %p, sk %p", sock
, sk
);
659 addr
->sa_family
= AF_BLUETOOTH
;
660 *len
= sizeof(struct sockaddr_sco
);
663 bacpy(&sa
->sco_bdaddr
, &sco_pi(sk
)->dst
);
665 bacpy(&sa
->sco_bdaddr
, &sco_pi(sk
)->src
);
670 static int sco_sock_sendmsg(struct kiocb
*iocb
, struct socket
*sock
,
671 struct msghdr
*msg
, size_t len
)
673 struct sock
*sk
= sock
->sk
;
676 BT_DBG("sock %p, sk %p", sock
, sk
);
678 err
= sock_error(sk
);
682 if (msg
->msg_flags
& MSG_OOB
)
687 if (sk
->sk_state
== BT_CONNECTED
)
688 err
= sco_send_frame(sk
, msg
, len
);
696 static void sco_conn_defer_accept(struct hci_conn
*conn
, u16 setting
)
698 struct hci_dev
*hdev
= conn
->hdev
;
700 BT_DBG("conn %p", conn
);
702 conn
->state
= BT_CONFIG
;
704 if (!lmp_esco_capable(hdev
)) {
705 struct hci_cp_accept_conn_req cp
;
707 bacpy(&cp
.bdaddr
, &conn
->dst
);
708 cp
.role
= 0x00; /* Ignored */
710 hci_send_cmd(hdev
, HCI_OP_ACCEPT_CONN_REQ
, sizeof(cp
), &cp
);
712 struct hci_cp_accept_sync_conn_req cp
;
714 bacpy(&cp
.bdaddr
, &conn
->dst
);
715 cp
.pkt_type
= cpu_to_le16(conn
->pkt_type
);
717 cp
.tx_bandwidth
= cpu_to_le32(0x00001f40);
718 cp
.rx_bandwidth
= cpu_to_le32(0x00001f40);
719 cp
.content_format
= cpu_to_le16(setting
);
721 switch (setting
& SCO_AIRMODE_MASK
) {
722 case SCO_AIRMODE_TRANSP
:
723 if (conn
->pkt_type
& ESCO_2EV3
)
724 cp
.max_latency
= cpu_to_le16(0x0008);
726 cp
.max_latency
= cpu_to_le16(0x000D);
727 cp
.retrans_effort
= 0x02;
729 case SCO_AIRMODE_CVSD
:
730 cp
.max_latency
= cpu_to_le16(0xffff);
731 cp
.retrans_effort
= 0xff;
735 hci_send_cmd(hdev
, HCI_OP_ACCEPT_SYNC_CONN_REQ
,
740 static int sco_sock_recvmsg(struct kiocb
*iocb
, struct socket
*sock
,
741 struct msghdr
*msg
, size_t len
, int flags
)
743 struct sock
*sk
= sock
->sk
;
744 struct sco_pinfo
*pi
= sco_pi(sk
);
748 if (sk
->sk_state
== BT_CONNECT2
&&
749 test_bit(BT_SK_DEFER_SETUP
, &bt_sk(sk
)->flags
)) {
750 sco_conn_defer_accept(pi
->conn
->hcon
, pi
->setting
);
751 sk
->sk_state
= BT_CONFIG
;
759 return bt_sock_recvmsg(iocb
, sock
, msg
, len
, flags
);
762 static int sco_sock_setsockopt(struct socket
*sock
, int level
, int optname
, char __user
*optval
, unsigned int optlen
)
764 struct sock
*sk
= sock
->sk
;
766 struct bt_voice voice
;
776 if (sk
->sk_state
!= BT_BOUND
&& sk
->sk_state
!= BT_LISTEN
) {
781 if (get_user(opt
, (u32 __user
*) optval
)) {
787 set_bit(BT_SK_DEFER_SETUP
, &bt_sk(sk
)->flags
);
789 clear_bit(BT_SK_DEFER_SETUP
, &bt_sk(sk
)->flags
);
793 if (sk
->sk_state
!= BT_OPEN
&& sk
->sk_state
!= BT_BOUND
&&
794 sk
->sk_state
!= BT_CONNECT2
) {
799 voice
.setting
= sco_pi(sk
)->setting
;
801 len
= min_t(unsigned int, sizeof(voice
), optlen
);
802 if (copy_from_user((char *) &voice
, optval
, len
)) {
807 /* Explicitly check for these values */
808 if (voice
.setting
!= BT_VOICE_TRANSPARENT
&&
809 voice
.setting
!= BT_VOICE_CVSD_16BIT
) {
814 sco_pi(sk
)->setting
= voice
.setting
;
826 static int sco_sock_getsockopt_old(struct socket
*sock
, int optname
, char __user
*optval
, int __user
*optlen
)
828 struct sock
*sk
= sock
->sk
;
829 struct sco_options opts
;
830 struct sco_conninfo cinfo
;
835 if (get_user(len
, optlen
))
842 if (sk
->sk_state
!= BT_CONNECTED
&&
843 !(sk
->sk_state
== BT_CONNECT2
&&
844 test_bit(BT_SK_DEFER_SETUP
, &bt_sk(sk
)->flags
))) {
849 opts
.mtu
= sco_pi(sk
)->conn
->mtu
;
851 BT_DBG("mtu %d", opts
.mtu
);
853 len
= min_t(unsigned int, len
, sizeof(opts
));
854 if (copy_to_user(optval
, (char *)&opts
, len
))
860 if (sk
->sk_state
!= BT_CONNECTED
&&
861 !(sk
->sk_state
== BT_CONNECT2
&&
862 test_bit(BT_SK_DEFER_SETUP
, &bt_sk(sk
)->flags
))) {
867 memset(&cinfo
, 0, sizeof(cinfo
));
868 cinfo
.hci_handle
= sco_pi(sk
)->conn
->hcon
->handle
;
869 memcpy(cinfo
.dev_class
, sco_pi(sk
)->conn
->hcon
->dev_class
, 3);
871 len
= min_t(unsigned int, len
, sizeof(cinfo
));
872 if (copy_to_user(optval
, (char *)&cinfo
, len
))
886 static int sco_sock_getsockopt(struct socket
*sock
, int level
, int optname
, char __user
*optval
, int __user
*optlen
)
888 struct sock
*sk
= sock
->sk
;
890 struct bt_voice voice
;
894 if (level
== SOL_SCO
)
895 return sco_sock_getsockopt_old(sock
, optname
, optval
, optlen
);
897 if (get_user(len
, optlen
))
905 if (sk
->sk_state
!= BT_BOUND
&& sk
->sk_state
!= BT_LISTEN
) {
910 if (put_user(test_bit(BT_SK_DEFER_SETUP
, &bt_sk(sk
)->flags
),
911 (u32 __user
*) optval
))
917 voice
.setting
= sco_pi(sk
)->setting
;
919 len
= min_t(unsigned int, len
, sizeof(voice
));
920 if (copy_to_user(optval
, (char *)&voice
, len
))
934 static int sco_sock_shutdown(struct socket
*sock
, int how
)
936 struct sock
*sk
= sock
->sk
;
939 BT_DBG("sock %p, sk %p", sock
, sk
);
945 if (!sk
->sk_shutdown
) {
946 sk
->sk_shutdown
= SHUTDOWN_MASK
;
947 sco_sock_clear_timer(sk
);
948 __sco_sock_close(sk
);
950 if (sock_flag(sk
, SOCK_LINGER
) && sk
->sk_lingertime
)
951 err
= bt_sock_wait_state(sk
, BT_CLOSED
,
958 static int sco_sock_release(struct socket
*sock
)
960 struct sock
*sk
= sock
->sk
;
963 BT_DBG("sock %p, sk %p", sock
, sk
);
970 if (sock_flag(sk
, SOCK_LINGER
) && sk
->sk_lingertime
) {
972 err
= bt_sock_wait_state(sk
, BT_CLOSED
, sk
->sk_lingertime
);
982 * Must be called on the locked socket. */
983 static void sco_chan_del(struct sock
*sk
, int err
)
985 struct sco_conn
*conn
;
987 conn
= sco_pi(sk
)->conn
;
989 BT_DBG("sk %p, conn %p, err %d", sk
, conn
, err
);
994 sco_pi(sk
)->conn
= NULL
;
995 sco_conn_unlock(conn
);
998 hci_conn_drop(conn
->hcon
);
1001 sk
->sk_state
= BT_CLOSED
;
1003 sk
->sk_state_change(sk
);
1005 sock_set_flag(sk
, SOCK_ZAPPED
);
1008 static void sco_conn_ready(struct sco_conn
*conn
)
1010 struct sock
*parent
;
1011 struct sock
*sk
= conn
->sk
;
1013 BT_DBG("conn %p", conn
);
1016 sco_sock_clear_timer(sk
);
1018 sk
->sk_state
= BT_CONNECTED
;
1019 sk
->sk_state_change(sk
);
1022 sco_conn_lock(conn
);
1024 parent
= sco_get_sock_listen(&conn
->hcon
->src
);
1026 sco_conn_unlock(conn
);
1030 bh_lock_sock(parent
);
1032 sk
= sco_sock_alloc(sock_net(parent
), NULL
,
1033 BTPROTO_SCO
, GFP_ATOMIC
);
1035 bh_unlock_sock(parent
);
1036 sco_conn_unlock(conn
);
1040 sco_sock_init(sk
, parent
);
1042 bacpy(&sco_pi(sk
)->src
, &conn
->hcon
->src
);
1043 bacpy(&sco_pi(sk
)->dst
, &conn
->hcon
->dst
);
1045 hci_conn_hold(conn
->hcon
);
1046 __sco_chan_add(conn
, sk
, parent
);
1048 if (test_bit(BT_SK_DEFER_SETUP
, &bt_sk(parent
)->flags
))
1049 sk
->sk_state
= BT_CONNECT2
;
1051 sk
->sk_state
= BT_CONNECTED
;
1053 /* Wake up parent */
1054 parent
->sk_data_ready(parent
);
1056 bh_unlock_sock(parent
);
1058 sco_conn_unlock(conn
);
1062 /* ----- SCO interface with lower layer (HCI) ----- */
1063 int sco_connect_ind(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, __u8
*flags
)
1068 BT_DBG("hdev %s, bdaddr %pMR", hdev
->name
, bdaddr
);
1070 /* Find listening sockets */
1071 read_lock(&sco_sk_list
.lock
);
1072 sk_for_each(sk
, &sco_sk_list
.head
) {
1073 if (sk
->sk_state
!= BT_LISTEN
)
1076 if (!bacmp(&sco_pi(sk
)->src
, &hdev
->bdaddr
) ||
1077 !bacmp(&sco_pi(sk
)->src
, BDADDR_ANY
)) {
1078 lm
|= HCI_LM_ACCEPT
;
1080 if (test_bit(BT_SK_DEFER_SETUP
, &bt_sk(sk
)->flags
))
1081 *flags
|= HCI_PROTO_DEFER
;
1085 read_unlock(&sco_sk_list
.lock
);
1090 void sco_connect_cfm(struct hci_conn
*hcon
, __u8 status
)
1092 BT_DBG("hcon %p bdaddr %pMR status %d", hcon
, &hcon
->dst
, status
);
1094 struct sco_conn
*conn
;
1096 conn
= sco_conn_add(hcon
);
1098 sco_conn_ready(conn
);
1100 sco_conn_del(hcon
, bt_to_errno(status
));
1103 void sco_disconn_cfm(struct hci_conn
*hcon
, __u8 reason
)
1105 BT_DBG("hcon %p reason %d", hcon
, reason
);
1107 sco_conn_del(hcon
, bt_to_errno(reason
));
1110 int sco_recv_scodata(struct hci_conn
*hcon
, struct sk_buff
*skb
)
1112 struct sco_conn
*conn
= hcon
->sco_data
;
1117 BT_DBG("conn %p len %d", conn
, skb
->len
);
1120 sco_recv_frame(conn
, skb
);
1129 static int sco_debugfs_show(struct seq_file
*f
, void *p
)
1133 read_lock(&sco_sk_list
.lock
);
1135 sk_for_each(sk
, &sco_sk_list
.head
) {
1136 seq_printf(f
, "%pMR %pMR %d\n", &sco_pi(sk
)->src
,
1137 &sco_pi(sk
)->dst
, sk
->sk_state
);
1140 read_unlock(&sco_sk_list
.lock
);
1145 static int sco_debugfs_open(struct inode
*inode
, struct file
*file
)
1147 return single_open(file
, sco_debugfs_show
, inode
->i_private
);
1150 static const struct file_operations sco_debugfs_fops
= {
1151 .open
= sco_debugfs_open
,
1153 .llseek
= seq_lseek
,
1154 .release
= single_release
,
1157 static struct dentry
*sco_debugfs
;
1159 static const struct proto_ops sco_sock_ops
= {
1160 .family
= PF_BLUETOOTH
,
1161 .owner
= THIS_MODULE
,
1162 .release
= sco_sock_release
,
1163 .bind
= sco_sock_bind
,
1164 .connect
= sco_sock_connect
,
1165 .listen
= sco_sock_listen
,
1166 .accept
= sco_sock_accept
,
1167 .getname
= sco_sock_getname
,
1168 .sendmsg
= sco_sock_sendmsg
,
1169 .recvmsg
= sco_sock_recvmsg
,
1170 .poll
= bt_sock_poll
,
1171 .ioctl
= bt_sock_ioctl
,
1172 .mmap
= sock_no_mmap
,
1173 .socketpair
= sock_no_socketpair
,
1174 .shutdown
= sco_sock_shutdown
,
1175 .setsockopt
= sco_sock_setsockopt
,
1176 .getsockopt
= sco_sock_getsockopt
1179 static const struct net_proto_family sco_sock_family_ops
= {
1180 .family
= PF_BLUETOOTH
,
1181 .owner
= THIS_MODULE
,
1182 .create
= sco_sock_create
,
1185 int __init
sco_init(void)
1189 err
= proto_register(&sco_proto
, 0);
1193 err
= bt_sock_register(BTPROTO_SCO
, &sco_sock_family_ops
);
1195 BT_ERR("SCO socket registration failed");
1199 err
= bt_procfs_init(&init_net
, "sco", &sco_sk_list
, NULL
);
1201 BT_ERR("Failed to create SCO proc file");
1202 bt_sock_unregister(BTPROTO_SCO
);
1206 BT_INFO("SCO socket layer initialized");
1208 if (IS_ERR_OR_NULL(bt_debugfs
))
1211 sco_debugfs
= debugfs_create_file("sco", 0444, bt_debugfs
,
1212 NULL
, &sco_debugfs_fops
);
1217 proto_unregister(&sco_proto
);
1221 void __exit
sco_exit(void)
1223 bt_procfs_cleanup(&init_net
, "sco");
1225 debugfs_remove(sco_debugfs
);
1227 bt_sock_unregister(BTPROTO_SCO
);
1229 proto_unregister(&sco_proto
);
1232 module_param(disable_esco
, bool, 0644);
1233 MODULE_PARM_DESC(disable_esco
, "Disable eSCO connection creation");