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 static void __sco_chan_add(struct sco_conn
*conn
, struct sock
*sk
, struct sock
*parent
);
44 static void sco_chan_del(struct sock
*sk
, int err
);
46 static void sco_sock_close(struct sock
*sk
);
47 static void sco_sock_kill(struct sock
*sk
);
49 /* ----- SCO socket info ----- */
50 #define sco_pi(sk) ((struct sco_pinfo *) sk)
58 struct sco_conn
*conn
;
61 /* ---- SCO timers ---- */
62 static void sco_sock_timeout(unsigned long arg
)
64 struct sock
*sk
= (struct sock
*) arg
;
66 BT_DBG("sock %p state %d", sk
, sk
->sk_state
);
69 sk
->sk_err
= ETIMEDOUT
;
70 sk
->sk_state_change(sk
);
77 static void sco_sock_set_timer(struct sock
*sk
, long timeout
)
79 BT_DBG("sock %p state %d timeout %ld", sk
, sk
->sk_state
, timeout
);
80 sk_reset_timer(sk
, &sk
->sk_timer
, jiffies
+ timeout
);
83 static void sco_sock_clear_timer(struct sock
*sk
)
85 BT_DBG("sock %p state %d", sk
, sk
->sk_state
);
86 sk_stop_timer(sk
, &sk
->sk_timer
);
89 /* ---- SCO connections ---- */
90 static struct sco_conn
*sco_conn_add(struct hci_conn
*hcon
)
92 struct hci_dev
*hdev
= hcon
->hdev
;
93 struct sco_conn
*conn
= hcon
->sco_data
;
98 conn
= kzalloc(sizeof(struct sco_conn
), GFP_KERNEL
);
102 spin_lock_init(&conn
->lock
);
104 hcon
->sco_data
= conn
;
107 if (hdev
->sco_mtu
> 0)
108 conn
->mtu
= hdev
->sco_mtu
;
112 BT_DBG("hcon %p conn %p", hcon
, conn
);
117 static struct sock
*sco_chan_get(struct sco_conn
*conn
)
119 struct sock
*sk
= NULL
;
122 sco_conn_unlock(conn
);
126 static int sco_conn_del(struct hci_conn
*hcon
, int err
)
128 struct sco_conn
*conn
= hcon
->sco_data
;
134 BT_DBG("hcon %p conn %p, err %d", hcon
, conn
, err
);
137 sk
= sco_chan_get(conn
);
140 sco_sock_clear_timer(sk
);
141 sco_chan_del(sk
, err
);
146 hcon
->sco_data
= NULL
;
151 static int sco_chan_add(struct sco_conn
*conn
, struct sock
*sk
,
160 __sco_chan_add(conn
, sk
, parent
);
162 sco_conn_unlock(conn
);
166 static int sco_connect(struct sock
*sk
)
168 struct sco_conn
*conn
;
169 struct hci_conn
*hcon
;
170 struct hci_dev
*hdev
;
173 BT_DBG("%pMR -> %pMR", &sco_pi(sk
)->src
, &sco_pi(sk
)->dst
);
175 hdev
= hci_get_route(&sco_pi(sk
)->dst
, &sco_pi(sk
)->src
);
177 return -EHOSTUNREACH
;
181 if (lmp_esco_capable(hdev
) && !disable_esco
)
186 if (sco_pi(sk
)->setting
== BT_VOICE_TRANSPARENT
&&
187 (!lmp_transp_capable(hdev
) || !lmp_esco_capable(hdev
))) {
192 hcon
= hci_connect_sco(hdev
, type
, &sco_pi(sk
)->dst
,
193 sco_pi(sk
)->setting
);
199 conn
= sco_conn_add(hcon
);
206 /* Update source addr of the socket */
207 bacpy(&sco_pi(sk
)->src
, &hcon
->src
);
209 err
= sco_chan_add(conn
, sk
, NULL
);
213 if (hcon
->state
== BT_CONNECTED
) {
214 sco_sock_clear_timer(sk
);
215 sk
->sk_state
= BT_CONNECTED
;
217 sk
->sk_state
= BT_CONNECT
;
218 sco_sock_set_timer(sk
, sk
->sk_sndtimeo
);
222 hci_dev_unlock(hdev
);
227 static int sco_send_frame(struct sock
*sk
, struct msghdr
*msg
, int len
)
229 struct sco_conn
*conn
= sco_pi(sk
)->conn
;
233 /* Check outgoing MTU */
237 BT_DBG("sk %p len %d", sk
, len
);
239 skb
= bt_skb_send_alloc(sk
, len
, msg
->msg_flags
& MSG_DONTWAIT
, &err
);
243 if (memcpy_fromiovec(skb_put(skb
, len
), msg
->msg_iov
, len
)) {
248 hci_send_sco(conn
->hcon
, skb
);
253 static void sco_recv_frame(struct sco_conn
*conn
, struct sk_buff
*skb
)
255 struct sock
*sk
= sco_chan_get(conn
);
260 BT_DBG("sk %p len %d", sk
, skb
->len
);
262 if (sk
->sk_state
!= BT_CONNECTED
)
265 if (!sock_queue_rcv_skb(sk
, skb
))
272 /* -------- Socket interface ---------- */
273 static struct sock
*__sco_get_sock_listen_by_addr(bdaddr_t
*ba
)
277 sk_for_each(sk
, &sco_sk_list
.head
) {
278 if (sk
->sk_state
!= BT_LISTEN
)
281 if (!bacmp(&sco_pi(sk
)->src
, ba
))
288 /* Find socket listening on source bdaddr.
289 * Returns closest match.
291 static struct sock
*sco_get_sock_listen(bdaddr_t
*src
)
293 struct sock
*sk
= NULL
, *sk1
= NULL
;
295 read_lock(&sco_sk_list
.lock
);
297 sk_for_each(sk
, &sco_sk_list
.head
) {
298 if (sk
->sk_state
!= BT_LISTEN
)
302 if (!bacmp(&sco_pi(sk
)->src
, src
))
306 if (!bacmp(&sco_pi(sk
)->src
, BDADDR_ANY
))
310 read_unlock(&sco_sk_list
.lock
);
312 return sk
? sk
: sk1
;
315 static void sco_sock_destruct(struct sock
*sk
)
319 skb_queue_purge(&sk
->sk_receive_queue
);
320 skb_queue_purge(&sk
->sk_write_queue
);
323 static void sco_sock_cleanup_listen(struct sock
*parent
)
327 BT_DBG("parent %p", parent
);
329 /* Close not yet accepted channels */
330 while ((sk
= bt_accept_dequeue(parent
, NULL
))) {
335 parent
->sk_state
= BT_CLOSED
;
336 sock_set_flag(parent
, SOCK_ZAPPED
);
339 /* Kill socket (only if zapped and orphan)
340 * Must be called on unlocked socket.
342 static void sco_sock_kill(struct sock
*sk
)
344 if (!sock_flag(sk
, SOCK_ZAPPED
) || sk
->sk_socket
)
347 BT_DBG("sk %p state %d", sk
, sk
->sk_state
);
349 /* Kill poor orphan */
350 bt_sock_unlink(&sco_sk_list
, sk
);
351 sock_set_flag(sk
, SOCK_DEAD
);
355 static void __sco_sock_close(struct sock
*sk
)
357 BT_DBG("sk %p state %d socket %p", sk
, sk
->sk_state
, sk
->sk_socket
);
359 switch (sk
->sk_state
) {
361 sco_sock_cleanup_listen(sk
);
366 if (sco_pi(sk
)->conn
->hcon
) {
367 sk
->sk_state
= BT_DISCONN
;
368 sco_sock_set_timer(sk
, SCO_DISCONN_TIMEOUT
);
369 hci_conn_drop(sco_pi(sk
)->conn
->hcon
);
370 sco_pi(sk
)->conn
->hcon
= NULL
;
372 sco_chan_del(sk
, ECONNRESET
);
378 sco_chan_del(sk
, ECONNRESET
);
382 sock_set_flag(sk
, SOCK_ZAPPED
);
387 /* Must be called on unlocked socket. */
388 static void sco_sock_close(struct sock
*sk
)
390 sco_sock_clear_timer(sk
);
392 __sco_sock_close(sk
);
397 static void sco_sock_init(struct sock
*sk
, struct sock
*parent
)
402 sk
->sk_type
= parent
->sk_type
;
403 bt_sk(sk
)->flags
= bt_sk(parent
)->flags
;
404 security_sk_clone(parent
, sk
);
408 static struct proto sco_proto
= {
410 .owner
= THIS_MODULE
,
411 .obj_size
= sizeof(struct sco_pinfo
)
414 static struct sock
*sco_sock_alloc(struct net
*net
, struct socket
*sock
, int proto
, gfp_t prio
)
418 sk
= sk_alloc(net
, PF_BLUETOOTH
, prio
, &sco_proto
);
422 sock_init_data(sock
, sk
);
423 INIT_LIST_HEAD(&bt_sk(sk
)->accept_q
);
425 sk
->sk_destruct
= sco_sock_destruct
;
426 sk
->sk_sndtimeo
= SCO_CONN_TIMEOUT
;
428 sock_reset_flag(sk
, SOCK_ZAPPED
);
430 sk
->sk_protocol
= proto
;
431 sk
->sk_state
= BT_OPEN
;
433 sco_pi(sk
)->setting
= BT_VOICE_CVSD_16BIT
;
435 setup_timer(&sk
->sk_timer
, sco_sock_timeout
, (unsigned long)sk
);
437 bt_sock_link(&sco_sk_list
, sk
);
441 static int sco_sock_create(struct net
*net
, struct socket
*sock
, int protocol
,
446 BT_DBG("sock %p", sock
);
448 sock
->state
= SS_UNCONNECTED
;
450 if (sock
->type
!= SOCK_SEQPACKET
)
451 return -ESOCKTNOSUPPORT
;
453 sock
->ops
= &sco_sock_ops
;
455 sk
= sco_sock_alloc(net
, sock
, protocol
, GFP_ATOMIC
);
459 sco_sock_init(sk
, NULL
);
463 static int sco_sock_bind(struct socket
*sock
, struct sockaddr
*addr
, int addr_len
)
465 struct sockaddr_sco
*sa
= (struct sockaddr_sco
*) addr
;
466 struct sock
*sk
= sock
->sk
;
469 BT_DBG("sk %p %pMR", sk
, &sa
->sco_bdaddr
);
471 if (!addr
|| addr
->sa_family
!= AF_BLUETOOTH
)
476 if (sk
->sk_state
!= BT_OPEN
) {
481 if (sk
->sk_type
!= SOCK_SEQPACKET
) {
486 bacpy(&sco_pi(sk
)->src
, &sa
->sco_bdaddr
);
488 sk
->sk_state
= BT_BOUND
;
495 static int sco_sock_connect(struct socket
*sock
, struct sockaddr
*addr
, int alen
, int flags
)
497 struct sockaddr_sco
*sa
= (struct sockaddr_sco
*) addr
;
498 struct sock
*sk
= sock
->sk
;
503 if (alen
< sizeof(struct sockaddr_sco
) ||
504 addr
->sa_family
!= AF_BLUETOOTH
)
507 if (sk
->sk_state
!= BT_OPEN
&& sk
->sk_state
!= BT_BOUND
)
510 if (sk
->sk_type
!= SOCK_SEQPACKET
)
515 /* Set destination address and psm */
516 bacpy(&sco_pi(sk
)->dst
, &sa
->sco_bdaddr
);
518 err
= sco_connect(sk
);
522 err
= bt_sock_wait_state(sk
, BT_CONNECTED
,
523 sock_sndtimeo(sk
, flags
& O_NONBLOCK
));
530 static int sco_sock_listen(struct socket
*sock
, int backlog
)
532 struct sock
*sk
= sock
->sk
;
533 bdaddr_t
*src
= &sco_pi(sk
)->src
;
536 BT_DBG("sk %p backlog %d", sk
, backlog
);
540 if (sk
->sk_state
!= BT_BOUND
) {
545 if (sk
->sk_type
!= SOCK_SEQPACKET
) {
550 write_lock(&sco_sk_list
.lock
);
552 if (__sco_get_sock_listen_by_addr(src
)) {
557 sk
->sk_max_ack_backlog
= backlog
;
558 sk
->sk_ack_backlog
= 0;
560 sk
->sk_state
= BT_LISTEN
;
563 write_unlock(&sco_sk_list
.lock
);
570 static int sco_sock_accept(struct socket
*sock
, struct socket
*newsock
, int flags
)
572 DECLARE_WAITQUEUE(wait
, current
);
573 struct sock
*sk
= sock
->sk
, *ch
;
579 timeo
= sock_rcvtimeo(sk
, flags
& O_NONBLOCK
);
581 BT_DBG("sk %p timeo %ld", sk
, timeo
);
583 /* Wait for an incoming connection. (wake-one). */
584 add_wait_queue_exclusive(sk_sleep(sk
), &wait
);
586 set_current_state(TASK_INTERRUPTIBLE
);
588 if (sk
->sk_state
!= BT_LISTEN
) {
593 ch
= bt_accept_dequeue(sk
, newsock
);
602 if (signal_pending(current
)) {
603 err
= sock_intr_errno(timeo
);
608 timeo
= schedule_timeout(timeo
);
611 __set_current_state(TASK_RUNNING
);
612 remove_wait_queue(sk_sleep(sk
), &wait
);
617 newsock
->state
= SS_CONNECTED
;
619 BT_DBG("new socket %p", ch
);
626 static int sco_sock_getname(struct socket
*sock
, struct sockaddr
*addr
, int *len
, int peer
)
628 struct sockaddr_sco
*sa
= (struct sockaddr_sco
*) addr
;
629 struct sock
*sk
= sock
->sk
;
631 BT_DBG("sock %p, sk %p", sock
, sk
);
633 addr
->sa_family
= AF_BLUETOOTH
;
634 *len
= sizeof(struct sockaddr_sco
);
637 bacpy(&sa
->sco_bdaddr
, &sco_pi(sk
)->dst
);
639 bacpy(&sa
->sco_bdaddr
, &sco_pi(sk
)->src
);
644 static int sco_sock_sendmsg(struct kiocb
*iocb
, struct socket
*sock
,
645 struct msghdr
*msg
, size_t len
)
647 struct sock
*sk
= sock
->sk
;
650 BT_DBG("sock %p, sk %p", sock
, sk
);
652 err
= sock_error(sk
);
656 if (msg
->msg_flags
& MSG_OOB
)
661 if (sk
->sk_state
== BT_CONNECTED
)
662 err
= sco_send_frame(sk
, msg
, len
);
670 static void sco_conn_defer_accept(struct hci_conn
*conn
, u16 setting
)
672 struct hci_dev
*hdev
= conn
->hdev
;
674 BT_DBG("conn %p", conn
);
676 conn
->state
= BT_CONFIG
;
678 if (!lmp_esco_capable(hdev
)) {
679 struct hci_cp_accept_conn_req cp
;
681 bacpy(&cp
.bdaddr
, &conn
->dst
);
682 cp
.role
= 0x00; /* Ignored */
684 hci_send_cmd(hdev
, HCI_OP_ACCEPT_CONN_REQ
, sizeof(cp
), &cp
);
686 struct hci_cp_accept_sync_conn_req cp
;
688 bacpy(&cp
.bdaddr
, &conn
->dst
);
689 cp
.pkt_type
= cpu_to_le16(conn
->pkt_type
);
691 cp
.tx_bandwidth
= cpu_to_le32(0x00001f40);
692 cp
.rx_bandwidth
= cpu_to_le32(0x00001f40);
693 cp
.content_format
= cpu_to_le16(setting
);
695 switch (setting
& SCO_AIRMODE_MASK
) {
696 case SCO_AIRMODE_TRANSP
:
697 if (conn
->pkt_type
& ESCO_2EV3
)
698 cp
.max_latency
= cpu_to_le16(0x0008);
700 cp
.max_latency
= cpu_to_le16(0x000D);
701 cp
.retrans_effort
= 0x02;
703 case SCO_AIRMODE_CVSD
:
704 cp
.max_latency
= cpu_to_le16(0xffff);
705 cp
.retrans_effort
= 0xff;
709 hci_send_cmd(hdev
, HCI_OP_ACCEPT_SYNC_CONN_REQ
,
714 static int sco_sock_recvmsg(struct kiocb
*iocb
, struct socket
*sock
,
715 struct msghdr
*msg
, size_t len
, int flags
)
717 struct sock
*sk
= sock
->sk
;
718 struct sco_pinfo
*pi
= sco_pi(sk
);
722 if (sk
->sk_state
== BT_CONNECT2
&&
723 test_bit(BT_SK_DEFER_SETUP
, &bt_sk(sk
)->flags
)) {
724 sco_conn_defer_accept(pi
->conn
->hcon
, pi
->setting
);
725 sk
->sk_state
= BT_CONFIG
;
733 return bt_sock_recvmsg(iocb
, sock
, msg
, len
, flags
);
736 static int sco_sock_setsockopt(struct socket
*sock
, int level
, int optname
, char __user
*optval
, unsigned int optlen
)
738 struct sock
*sk
= sock
->sk
;
740 struct bt_voice voice
;
750 if (sk
->sk_state
!= BT_BOUND
&& sk
->sk_state
!= BT_LISTEN
) {
755 if (get_user(opt
, (u32 __user
*) optval
)) {
761 set_bit(BT_SK_DEFER_SETUP
, &bt_sk(sk
)->flags
);
763 clear_bit(BT_SK_DEFER_SETUP
, &bt_sk(sk
)->flags
);
767 if (sk
->sk_state
!= BT_OPEN
&& sk
->sk_state
!= BT_BOUND
&&
768 sk
->sk_state
!= BT_CONNECT2
) {
773 voice
.setting
= sco_pi(sk
)->setting
;
775 len
= min_t(unsigned int, sizeof(voice
), optlen
);
776 if (copy_from_user((char *) &voice
, optval
, len
)) {
781 /* Explicitly check for these values */
782 if (voice
.setting
!= BT_VOICE_TRANSPARENT
&&
783 voice
.setting
!= BT_VOICE_CVSD_16BIT
) {
788 sco_pi(sk
)->setting
= voice
.setting
;
800 static int sco_sock_getsockopt_old(struct socket
*sock
, int optname
, char __user
*optval
, int __user
*optlen
)
802 struct sock
*sk
= sock
->sk
;
803 struct sco_options opts
;
804 struct sco_conninfo cinfo
;
809 if (get_user(len
, optlen
))
816 if (sk
->sk_state
!= BT_CONNECTED
&&
817 !(sk
->sk_state
== BT_CONNECT2
&&
818 test_bit(BT_SK_DEFER_SETUP
, &bt_sk(sk
)->flags
))) {
823 opts
.mtu
= sco_pi(sk
)->conn
->mtu
;
825 BT_DBG("mtu %d", opts
.mtu
);
827 len
= min_t(unsigned int, len
, sizeof(opts
));
828 if (copy_to_user(optval
, (char *)&opts
, len
))
834 if (sk
->sk_state
!= BT_CONNECTED
&&
835 !(sk
->sk_state
== BT_CONNECT2
&&
836 test_bit(BT_SK_DEFER_SETUP
, &bt_sk(sk
)->flags
))) {
841 memset(&cinfo
, 0, sizeof(cinfo
));
842 cinfo
.hci_handle
= sco_pi(sk
)->conn
->hcon
->handle
;
843 memcpy(cinfo
.dev_class
, sco_pi(sk
)->conn
->hcon
->dev_class
, 3);
845 len
= min_t(unsigned int, len
, sizeof(cinfo
));
846 if (copy_to_user(optval
, (char *)&cinfo
, len
))
860 static int sco_sock_getsockopt(struct socket
*sock
, int level
, int optname
, char __user
*optval
, int __user
*optlen
)
862 struct sock
*sk
= sock
->sk
;
864 struct bt_voice voice
;
868 if (level
== SOL_SCO
)
869 return sco_sock_getsockopt_old(sock
, optname
, optval
, optlen
);
871 if (get_user(len
, optlen
))
879 if (sk
->sk_state
!= BT_BOUND
&& sk
->sk_state
!= BT_LISTEN
) {
884 if (put_user(test_bit(BT_SK_DEFER_SETUP
, &bt_sk(sk
)->flags
),
885 (u32 __user
*) optval
))
891 voice
.setting
= sco_pi(sk
)->setting
;
893 len
= min_t(unsigned int, len
, sizeof(voice
));
894 if (copy_to_user(optval
, (char *)&voice
, len
))
908 static int sco_sock_shutdown(struct socket
*sock
, int how
)
910 struct sock
*sk
= sock
->sk
;
913 BT_DBG("sock %p, sk %p", sock
, sk
);
919 if (!sk
->sk_shutdown
) {
920 sk
->sk_shutdown
= SHUTDOWN_MASK
;
921 sco_sock_clear_timer(sk
);
922 __sco_sock_close(sk
);
924 if (sock_flag(sk
, SOCK_LINGER
) && sk
->sk_lingertime
)
925 err
= bt_sock_wait_state(sk
, BT_CLOSED
,
932 static int sco_sock_release(struct socket
*sock
)
934 struct sock
*sk
= sock
->sk
;
937 BT_DBG("sock %p, sk %p", sock
, sk
);
944 if (sock_flag(sk
, SOCK_LINGER
) && sk
->sk_lingertime
) {
946 err
= bt_sock_wait_state(sk
, BT_CLOSED
, sk
->sk_lingertime
);
955 static void __sco_chan_add(struct sco_conn
*conn
, struct sock
*sk
, struct sock
*parent
)
957 BT_DBG("conn %p", conn
);
959 sco_pi(sk
)->conn
= conn
;
963 bt_accept_enqueue(parent
, sk
);
967 * Must be called on the locked socket. */
968 static void sco_chan_del(struct sock
*sk
, int err
)
970 struct sco_conn
*conn
;
972 conn
= sco_pi(sk
)->conn
;
974 BT_DBG("sk %p, conn %p, err %d", sk
, conn
, err
);
979 sco_pi(sk
)->conn
= NULL
;
980 sco_conn_unlock(conn
);
983 hci_conn_drop(conn
->hcon
);
986 sk
->sk_state
= BT_CLOSED
;
988 sk
->sk_state_change(sk
);
990 sock_set_flag(sk
, SOCK_ZAPPED
);
993 static void sco_conn_ready(struct sco_conn
*conn
)
996 struct sock
*sk
= conn
->sk
;
998 BT_DBG("conn %p", conn
);
1001 sco_sock_clear_timer(sk
);
1003 sk
->sk_state
= BT_CONNECTED
;
1004 sk
->sk_state_change(sk
);
1007 sco_conn_lock(conn
);
1009 parent
= sco_get_sock_listen(&conn
->hcon
->src
);
1011 sco_conn_unlock(conn
);
1015 bh_lock_sock(parent
);
1017 sk
= sco_sock_alloc(sock_net(parent
), NULL
,
1018 BTPROTO_SCO
, GFP_ATOMIC
);
1020 bh_unlock_sock(parent
);
1021 sco_conn_unlock(conn
);
1025 sco_sock_init(sk
, parent
);
1027 bacpy(&sco_pi(sk
)->src
, &conn
->hcon
->src
);
1028 bacpy(&sco_pi(sk
)->dst
, &conn
->hcon
->dst
);
1030 hci_conn_hold(conn
->hcon
);
1031 __sco_chan_add(conn
, sk
, parent
);
1033 if (test_bit(BT_SK_DEFER_SETUP
, &bt_sk(parent
)->flags
))
1034 sk
->sk_state
= BT_CONNECT2
;
1036 sk
->sk_state
= BT_CONNECTED
;
1038 /* Wake up parent */
1039 parent
->sk_data_ready(parent
);
1041 bh_unlock_sock(parent
);
1043 sco_conn_unlock(conn
);
1047 /* ----- SCO interface with lower layer (HCI) ----- */
1048 int sco_connect_ind(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, __u8
*flags
)
1053 BT_DBG("hdev %s, bdaddr %pMR", hdev
->name
, bdaddr
);
1055 /* Find listening sockets */
1056 read_lock(&sco_sk_list
.lock
);
1057 sk_for_each(sk
, &sco_sk_list
.head
) {
1058 if (sk
->sk_state
!= BT_LISTEN
)
1061 if (!bacmp(&sco_pi(sk
)->src
, &hdev
->bdaddr
) ||
1062 !bacmp(&sco_pi(sk
)->src
, BDADDR_ANY
)) {
1063 lm
|= HCI_LM_ACCEPT
;
1065 if (test_bit(BT_SK_DEFER_SETUP
, &bt_sk(sk
)->flags
))
1066 *flags
|= HCI_PROTO_DEFER
;
1070 read_unlock(&sco_sk_list
.lock
);
1075 void sco_connect_cfm(struct hci_conn
*hcon
, __u8 status
)
1077 BT_DBG("hcon %p bdaddr %pMR status %d", hcon
, &hcon
->dst
, status
);
1079 struct sco_conn
*conn
;
1081 conn
= sco_conn_add(hcon
);
1083 sco_conn_ready(conn
);
1085 sco_conn_del(hcon
, bt_to_errno(status
));
1088 void sco_disconn_cfm(struct hci_conn
*hcon
, __u8 reason
)
1090 BT_DBG("hcon %p reason %d", hcon
, reason
);
1092 sco_conn_del(hcon
, bt_to_errno(reason
));
1095 int sco_recv_scodata(struct hci_conn
*hcon
, struct sk_buff
*skb
)
1097 struct sco_conn
*conn
= hcon
->sco_data
;
1102 BT_DBG("conn %p len %d", conn
, skb
->len
);
1105 sco_recv_frame(conn
, skb
);
1114 static int sco_debugfs_show(struct seq_file
*f
, void *p
)
1118 read_lock(&sco_sk_list
.lock
);
1120 sk_for_each(sk
, &sco_sk_list
.head
) {
1121 seq_printf(f
, "%pMR %pMR %d\n", &sco_pi(sk
)->src
,
1122 &sco_pi(sk
)->dst
, sk
->sk_state
);
1125 read_unlock(&sco_sk_list
.lock
);
1130 static int sco_debugfs_open(struct inode
*inode
, struct file
*file
)
1132 return single_open(file
, sco_debugfs_show
, inode
->i_private
);
1135 static const struct file_operations sco_debugfs_fops
= {
1136 .open
= sco_debugfs_open
,
1138 .llseek
= seq_lseek
,
1139 .release
= single_release
,
1142 static struct dentry
*sco_debugfs
;
1144 static const struct proto_ops sco_sock_ops
= {
1145 .family
= PF_BLUETOOTH
,
1146 .owner
= THIS_MODULE
,
1147 .release
= sco_sock_release
,
1148 .bind
= sco_sock_bind
,
1149 .connect
= sco_sock_connect
,
1150 .listen
= sco_sock_listen
,
1151 .accept
= sco_sock_accept
,
1152 .getname
= sco_sock_getname
,
1153 .sendmsg
= sco_sock_sendmsg
,
1154 .recvmsg
= sco_sock_recvmsg
,
1155 .poll
= bt_sock_poll
,
1156 .ioctl
= bt_sock_ioctl
,
1157 .mmap
= sock_no_mmap
,
1158 .socketpair
= sock_no_socketpair
,
1159 .shutdown
= sco_sock_shutdown
,
1160 .setsockopt
= sco_sock_setsockopt
,
1161 .getsockopt
= sco_sock_getsockopt
1164 static const struct net_proto_family sco_sock_family_ops
= {
1165 .family
= PF_BLUETOOTH
,
1166 .owner
= THIS_MODULE
,
1167 .create
= sco_sock_create
,
1170 int __init
sco_init(void)
1174 err
= proto_register(&sco_proto
, 0);
1178 err
= bt_sock_register(BTPROTO_SCO
, &sco_sock_family_ops
);
1180 BT_ERR("SCO socket registration failed");
1184 err
= bt_procfs_init(&init_net
, "sco", &sco_sk_list
, NULL
);
1186 BT_ERR("Failed to create SCO proc file");
1187 bt_sock_unregister(BTPROTO_SCO
);
1191 BT_INFO("SCO socket layer initialized");
1193 if (IS_ERR_OR_NULL(bt_debugfs
))
1196 sco_debugfs
= debugfs_create_file("sco", 0444, bt_debugfs
,
1197 NULL
, &sco_debugfs_fops
);
1202 proto_unregister(&sco_proto
);
1206 void __exit
sco_exit(void)
1208 bt_procfs_cleanup(&init_net
, "sco");
1210 debugfs_remove(sco_debugfs
);
1212 bt_sock_unregister(BTPROTO_SCO
);
1214 proto_unregister(&sco_proto
);
1217 module_param(disable_esco
, bool, 0644);
1218 MODULE_PARM_DESC(disable_esco
, "Disable eSCO connection creation");