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>
30 #include <linux/sched/signal.h>
32 #include <net/bluetooth/bluetooth.h>
33 #include <net/bluetooth/hci_core.h>
34 #include <net/bluetooth/sco.h>
36 static bool disable_esco
;
38 static const struct proto_ops sco_sock_ops
;
40 static struct bt_sock_list sco_sk_list
= {
41 .lock
= __RW_LOCK_UNLOCKED(sco_sk_list
.lock
)
44 /* ---- SCO connections ---- */
46 struct hci_conn
*hcon
;
51 struct delayed_work timeout_work
;
57 #define sco_conn_lock(c) spin_lock(&c->lock)
58 #define sco_conn_unlock(c) spin_unlock(&c->lock)
60 static void sco_sock_close(struct sock
*sk
);
61 static void sco_sock_kill(struct sock
*sk
);
63 /* ----- SCO socket info ----- */
64 #define sco_pi(sk) ((struct sco_pinfo *) sk)
72 struct bt_codec codec
;
73 struct sco_conn
*conn
;
76 /* ---- SCO timers ---- */
77 #define SCO_CONN_TIMEOUT (HZ * 40)
78 #define SCO_DISCONN_TIMEOUT (HZ * 2)
80 static void sco_conn_free(struct kref
*ref
)
82 struct sco_conn
*conn
= container_of(ref
, struct sco_conn
, ref
);
84 BT_DBG("conn %p", conn
);
87 sco_pi(conn
->sk
)->conn
= NULL
;
90 conn
->hcon
->sco_data
= NULL
;
91 hci_conn_drop(conn
->hcon
);
94 /* Ensure no more work items will run since hci_conn has been dropped */
95 disable_delayed_work_sync(&conn
->timeout_work
);
100 static void sco_conn_put(struct sco_conn
*conn
)
105 BT_DBG("conn %p refcnt %d", conn
, kref_read(&conn
->ref
));
107 kref_put(&conn
->ref
, sco_conn_free
);
110 static struct sco_conn
*sco_conn_hold_unless_zero(struct sco_conn
*conn
)
115 BT_DBG("conn %p refcnt %u", conn
, kref_read(&conn
->ref
));
117 if (!kref_get_unless_zero(&conn
->ref
))
123 static struct sock
*sco_sock_hold(struct sco_conn
*conn
)
125 if (!conn
|| !bt_sock_linked(&sco_sk_list
, conn
->sk
))
133 static void sco_sock_timeout(struct work_struct
*work
)
135 struct sco_conn
*conn
= container_of(work
, struct sco_conn
,
139 conn
= sco_conn_hold_unless_zero(conn
);
145 sco_conn_unlock(conn
);
149 sk
= sco_sock_hold(conn
);
150 sco_conn_unlock(conn
);
156 BT_DBG("sock %p state %d", sk
, sk
->sk_state
);
159 sk
->sk_err
= ETIMEDOUT
;
160 sk
->sk_state_change(sk
);
165 static void sco_sock_set_timer(struct sock
*sk
, long timeout
)
167 if (!sco_pi(sk
)->conn
)
170 BT_DBG("sock %p state %d timeout %ld", sk
, sk
->sk_state
, timeout
);
171 cancel_delayed_work(&sco_pi(sk
)->conn
->timeout_work
);
172 schedule_delayed_work(&sco_pi(sk
)->conn
->timeout_work
, timeout
);
175 static void sco_sock_clear_timer(struct sock
*sk
)
177 if (!sco_pi(sk
)->conn
)
180 BT_DBG("sock %p state %d", sk
, sk
->sk_state
);
181 cancel_delayed_work(&sco_pi(sk
)->conn
->timeout_work
);
184 /* ---- SCO connections ---- */
185 static struct sco_conn
*sco_conn_add(struct hci_conn
*hcon
)
187 struct sco_conn
*conn
= hcon
->sco_data
;
189 conn
= sco_conn_hold_unless_zero(conn
);
194 sco_conn_unlock(conn
);
199 conn
= kzalloc(sizeof(struct sco_conn
), GFP_KERNEL
);
203 kref_init(&conn
->ref
);
204 spin_lock_init(&conn
->lock
);
205 INIT_DELAYED_WORK(&conn
->timeout_work
, sco_sock_timeout
);
207 hcon
->sco_data
= conn
;
209 conn
->mtu
= hcon
->mtu
;
212 conn
->mtu
= hcon
->mtu
;
216 BT_DBG("hcon %p conn %p", hcon
, conn
);
222 * Must be called on the locked socket. */
223 static void sco_chan_del(struct sock
*sk
, int err
)
225 struct sco_conn
*conn
;
227 conn
= sco_pi(sk
)->conn
;
228 sco_pi(sk
)->conn
= NULL
;
230 BT_DBG("sk %p, conn %p, err %d", sk
, conn
, err
);
235 sco_conn_unlock(conn
);
239 sk
->sk_state
= BT_CLOSED
;
241 sk
->sk_state_change(sk
);
243 sock_set_flag(sk
, SOCK_ZAPPED
);
246 static void sco_conn_del(struct hci_conn
*hcon
, int err
)
248 struct sco_conn
*conn
= hcon
->sco_data
;
251 conn
= sco_conn_hold_unless_zero(conn
);
255 BT_DBG("hcon %p conn %p, err %d", hcon
, conn
, err
);
258 sk
= sco_sock_hold(conn
);
259 sco_conn_unlock(conn
);
269 sco_sock_clear_timer(sk
);
270 sco_chan_del(sk
, err
);
275 static void __sco_chan_add(struct sco_conn
*conn
, struct sock
*sk
,
278 BT_DBG("conn %p", conn
);
280 sco_pi(sk
)->conn
= conn
;
284 bt_accept_enqueue(parent
, sk
, true);
287 static int sco_chan_add(struct sco_conn
*conn
, struct sock
*sk
,
296 __sco_chan_add(conn
, sk
, parent
);
298 sco_conn_unlock(conn
);
302 static int sco_connect(struct sock
*sk
)
304 struct sco_conn
*conn
;
305 struct hci_conn
*hcon
;
306 struct hci_dev
*hdev
;
309 BT_DBG("%pMR -> %pMR", &sco_pi(sk
)->src
, &sco_pi(sk
)->dst
);
311 hdev
= hci_get_route(&sco_pi(sk
)->dst
, &sco_pi(sk
)->src
, BDADDR_BREDR
);
313 return -EHOSTUNREACH
;
317 if (lmp_esco_capable(hdev
) && !disable_esco
)
322 if (sco_pi(sk
)->setting
== BT_VOICE_TRANSPARENT
&&
323 (!lmp_transp_capable(hdev
) || !lmp_esco_capable(hdev
))) {
328 hcon
= hci_connect_sco(hdev
, type
, &sco_pi(sk
)->dst
,
329 sco_pi(sk
)->setting
, &sco_pi(sk
)->codec
,
336 conn
= sco_conn_add(hcon
);
345 err
= sco_chan_add(conn
, sk
, NULL
);
351 /* Update source addr of the socket */
352 bacpy(&sco_pi(sk
)->src
, &hcon
->src
);
354 if (hcon
->state
== BT_CONNECTED
) {
355 sco_sock_clear_timer(sk
);
356 sk
->sk_state
= BT_CONNECTED
;
358 sk
->sk_state
= BT_CONNECT
;
359 sco_sock_set_timer(sk
, sk
->sk_sndtimeo
);
365 hci_dev_unlock(hdev
);
370 static int sco_send_frame(struct sock
*sk
, struct sk_buff
*skb
)
372 struct sco_conn
*conn
= sco_pi(sk
)->conn
;
375 /* Check outgoing MTU */
379 BT_DBG("sk %p len %d", sk
, len
);
381 hci_send_sco(conn
->hcon
, skb
);
386 static void sco_recv_frame(struct sco_conn
*conn
, struct sk_buff
*skb
)
392 sco_conn_unlock(conn
);
397 BT_DBG("sk %p len %u", sk
, skb
->len
);
399 if (sk
->sk_state
!= BT_CONNECTED
)
402 if (!sock_queue_rcv_skb(sk
, skb
))
409 /* -------- Socket interface ---------- */
410 static struct sock
*__sco_get_sock_listen_by_addr(bdaddr_t
*ba
)
414 sk_for_each(sk
, &sco_sk_list
.head
) {
415 if (sk
->sk_state
!= BT_LISTEN
)
418 if (!bacmp(&sco_pi(sk
)->src
, ba
))
425 /* Find socket listening on source bdaddr.
426 * Returns closest match.
428 static struct sock
*sco_get_sock_listen(bdaddr_t
*src
)
430 struct sock
*sk
= NULL
, *sk1
= NULL
;
432 read_lock(&sco_sk_list
.lock
);
434 sk_for_each(sk
, &sco_sk_list
.head
) {
435 if (sk
->sk_state
!= BT_LISTEN
)
439 if (!bacmp(&sco_pi(sk
)->src
, src
))
443 if (!bacmp(&sco_pi(sk
)->src
, BDADDR_ANY
))
447 read_unlock(&sco_sk_list
.lock
);
449 return sk
? sk
: sk1
;
452 static void sco_sock_destruct(struct sock
*sk
)
456 sco_conn_put(sco_pi(sk
)->conn
);
458 skb_queue_purge(&sk
->sk_receive_queue
);
459 skb_queue_purge(&sk
->sk_write_queue
);
462 static void sco_sock_cleanup_listen(struct sock
*parent
)
466 BT_DBG("parent %p", parent
);
468 /* Close not yet accepted channels */
469 while ((sk
= bt_accept_dequeue(parent
, NULL
))) {
474 parent
->sk_state
= BT_CLOSED
;
475 sock_set_flag(parent
, SOCK_ZAPPED
);
478 /* Kill socket (only if zapped and orphan)
479 * Must be called on unlocked socket.
481 static void sco_sock_kill(struct sock
*sk
)
483 if (!sock_flag(sk
, SOCK_ZAPPED
) || sk
->sk_socket
)
486 BT_DBG("sk %p state %d", sk
, sk
->sk_state
);
488 /* Kill poor orphan */
489 bt_sock_unlink(&sco_sk_list
, sk
);
490 sock_set_flag(sk
, SOCK_DEAD
);
494 static void __sco_sock_close(struct sock
*sk
)
496 BT_DBG("sk %p state %d socket %p", sk
, sk
->sk_state
, sk
->sk_socket
);
498 switch (sk
->sk_state
) {
500 sco_sock_cleanup_listen(sk
);
508 sco_chan_del(sk
, ECONNRESET
);
512 sock_set_flag(sk
, SOCK_ZAPPED
);
518 /* Must be called on unlocked socket. */
519 static void sco_sock_close(struct sock
*sk
)
522 sco_sock_clear_timer(sk
);
523 __sco_sock_close(sk
);
527 static void sco_sock_init(struct sock
*sk
, struct sock
*parent
)
532 sk
->sk_type
= parent
->sk_type
;
533 bt_sk(sk
)->flags
= bt_sk(parent
)->flags
;
534 security_sk_clone(parent
, sk
);
538 static struct proto sco_proto
= {
540 .owner
= THIS_MODULE
,
541 .obj_size
= sizeof(struct sco_pinfo
)
544 static struct sock
*sco_sock_alloc(struct net
*net
, struct socket
*sock
,
545 int proto
, gfp_t prio
, int kern
)
549 sk
= bt_sock_alloc(net
, sock
, &sco_proto
, proto
, prio
, kern
);
553 sk
->sk_destruct
= sco_sock_destruct
;
554 sk
->sk_sndtimeo
= SCO_CONN_TIMEOUT
;
556 sco_pi(sk
)->setting
= BT_VOICE_CVSD_16BIT
;
557 sco_pi(sk
)->codec
.id
= BT_CODEC_CVSD
;
558 sco_pi(sk
)->codec
.cid
= 0xffff;
559 sco_pi(sk
)->codec
.vid
= 0xffff;
560 sco_pi(sk
)->codec
.data_path
= 0x00;
562 bt_sock_link(&sco_sk_list
, sk
);
566 static int sco_sock_create(struct net
*net
, struct socket
*sock
, int protocol
,
571 BT_DBG("sock %p", sock
);
573 sock
->state
= SS_UNCONNECTED
;
575 if (sock
->type
!= SOCK_SEQPACKET
)
576 return -ESOCKTNOSUPPORT
;
578 sock
->ops
= &sco_sock_ops
;
580 sk
= sco_sock_alloc(net
, sock
, protocol
, GFP_ATOMIC
, kern
);
584 sco_sock_init(sk
, NULL
);
588 static int sco_sock_bind(struct socket
*sock
, struct sockaddr
*addr
,
591 struct sockaddr_sco
*sa
= (struct sockaddr_sco
*) addr
;
592 struct sock
*sk
= sock
->sk
;
595 if (!addr
|| addr_len
< sizeof(struct sockaddr_sco
) ||
596 addr
->sa_family
!= AF_BLUETOOTH
)
599 BT_DBG("sk %p %pMR", sk
, &sa
->sco_bdaddr
);
603 if (sk
->sk_state
!= BT_OPEN
) {
608 if (sk
->sk_type
!= SOCK_SEQPACKET
) {
613 bacpy(&sco_pi(sk
)->src
, &sa
->sco_bdaddr
);
615 sk
->sk_state
= BT_BOUND
;
622 static int sco_sock_connect(struct socket
*sock
, struct sockaddr
*addr
, int alen
, int flags
)
624 struct sockaddr_sco
*sa
= (struct sockaddr_sco
*) addr
;
625 struct sock
*sk
= sock
->sk
;
630 if (alen
< sizeof(struct sockaddr_sco
) ||
631 addr
->sa_family
!= AF_BLUETOOTH
)
634 if (sk
->sk_state
!= BT_OPEN
&& sk
->sk_state
!= BT_BOUND
)
637 if (sk
->sk_type
!= SOCK_SEQPACKET
)
641 /* Set destination address and psm */
642 bacpy(&sco_pi(sk
)->dst
, &sa
->sco_bdaddr
);
645 err
= sco_connect(sk
);
651 err
= bt_sock_wait_state(sk
, BT_CONNECTED
,
652 sock_sndtimeo(sk
, flags
& O_NONBLOCK
));
658 static int sco_sock_listen(struct socket
*sock
, int backlog
)
660 struct sock
*sk
= sock
->sk
;
661 bdaddr_t
*src
= &sco_pi(sk
)->src
;
664 BT_DBG("sk %p backlog %d", sk
, backlog
);
668 if (sk
->sk_state
!= BT_BOUND
) {
673 if (sk
->sk_type
!= SOCK_SEQPACKET
) {
678 write_lock(&sco_sk_list
.lock
);
680 if (__sco_get_sock_listen_by_addr(src
)) {
685 sk
->sk_max_ack_backlog
= backlog
;
686 sk
->sk_ack_backlog
= 0;
688 sk
->sk_state
= BT_LISTEN
;
691 write_unlock(&sco_sk_list
.lock
);
698 static int sco_sock_accept(struct socket
*sock
, struct socket
*newsock
,
699 struct proto_accept_arg
*arg
)
701 DEFINE_WAIT_FUNC(wait
, woken_wake_function
);
702 struct sock
*sk
= sock
->sk
, *ch
;
708 timeo
= sock_rcvtimeo(sk
, arg
->flags
& O_NONBLOCK
);
710 BT_DBG("sk %p timeo %ld", sk
, timeo
);
712 /* Wait for an incoming connection. (wake-one). */
713 add_wait_queue_exclusive(sk_sleep(sk
), &wait
);
715 if (sk
->sk_state
!= BT_LISTEN
) {
720 ch
= bt_accept_dequeue(sk
, newsock
);
729 if (signal_pending(current
)) {
730 err
= sock_intr_errno(timeo
);
736 timeo
= wait_woken(&wait
, TASK_INTERRUPTIBLE
, timeo
);
739 remove_wait_queue(sk_sleep(sk
), &wait
);
744 newsock
->state
= SS_CONNECTED
;
746 BT_DBG("new socket %p", ch
);
753 static int sco_sock_getname(struct socket
*sock
, struct sockaddr
*addr
,
756 struct sockaddr_sco
*sa
= (struct sockaddr_sco
*) addr
;
757 struct sock
*sk
= sock
->sk
;
759 BT_DBG("sock %p, sk %p", sock
, sk
);
761 addr
->sa_family
= AF_BLUETOOTH
;
764 bacpy(&sa
->sco_bdaddr
, &sco_pi(sk
)->dst
);
766 bacpy(&sa
->sco_bdaddr
, &sco_pi(sk
)->src
);
768 return sizeof(struct sockaddr_sco
);
771 static int sco_sock_sendmsg(struct socket
*sock
, struct msghdr
*msg
,
774 struct sock
*sk
= sock
->sk
;
778 BT_DBG("sock %p, sk %p", sock
, sk
);
780 err
= sock_error(sk
);
784 if (msg
->msg_flags
& MSG_OOB
)
787 skb
= bt_skb_sendmsg(sk
, msg
, len
, len
, 0, 0);
793 if (sk
->sk_state
== BT_CONNECTED
)
794 err
= sco_send_frame(sk
, skb
);
805 static void sco_conn_defer_accept(struct hci_conn
*conn
, u16 setting
)
807 struct hci_dev
*hdev
= conn
->hdev
;
809 BT_DBG("conn %p", conn
);
811 conn
->state
= BT_CONFIG
;
813 if (!lmp_esco_capable(hdev
)) {
814 struct hci_cp_accept_conn_req cp
;
816 bacpy(&cp
.bdaddr
, &conn
->dst
);
817 cp
.role
= 0x00; /* Ignored */
819 hci_send_cmd(hdev
, HCI_OP_ACCEPT_CONN_REQ
, sizeof(cp
), &cp
);
821 struct hci_cp_accept_sync_conn_req cp
;
823 bacpy(&cp
.bdaddr
, &conn
->dst
);
824 cp
.pkt_type
= cpu_to_le16(conn
->pkt_type
);
826 cp
.tx_bandwidth
= cpu_to_le32(0x00001f40);
827 cp
.rx_bandwidth
= cpu_to_le32(0x00001f40);
828 cp
.content_format
= cpu_to_le16(setting
);
830 switch (setting
& SCO_AIRMODE_MASK
) {
831 case SCO_AIRMODE_TRANSP
:
832 if (conn
->pkt_type
& ESCO_2EV3
)
833 cp
.max_latency
= cpu_to_le16(0x0008);
835 cp
.max_latency
= cpu_to_le16(0x000D);
836 cp
.retrans_effort
= 0x02;
838 case SCO_AIRMODE_CVSD
:
839 cp
.max_latency
= cpu_to_le16(0xffff);
840 cp
.retrans_effort
= 0xff;
843 /* use CVSD settings as fallback */
844 cp
.max_latency
= cpu_to_le16(0xffff);
845 cp
.retrans_effort
= 0xff;
849 hci_send_cmd(hdev
, HCI_OP_ACCEPT_SYNC_CONN_REQ
,
854 static int sco_sock_recvmsg(struct socket
*sock
, struct msghdr
*msg
,
855 size_t len
, int flags
)
857 struct sock
*sk
= sock
->sk
;
858 struct sco_pinfo
*pi
= sco_pi(sk
);
862 if (sk
->sk_state
== BT_CONNECT2
&&
863 test_bit(BT_SK_DEFER_SETUP
, &bt_sk(sk
)->flags
)) {
864 sco_conn_defer_accept(pi
->conn
->hcon
, pi
->setting
);
865 sk
->sk_state
= BT_CONFIG
;
873 return bt_sock_recvmsg(sock
, msg
, len
, flags
);
876 static int sco_sock_setsockopt(struct socket
*sock
, int level
, int optname
,
877 sockptr_t optval
, unsigned int optlen
)
879 struct sock
*sk
= sock
->sk
;
881 struct bt_voice voice
;
883 struct bt_codecs
*codecs
;
884 struct hci_dev
*hdev
;
894 if (sk
->sk_state
!= BT_BOUND
&& sk
->sk_state
!= BT_LISTEN
) {
899 err
= bt_copy_from_sockptr(&opt
, sizeof(opt
), optval
, optlen
);
904 set_bit(BT_SK_DEFER_SETUP
, &bt_sk(sk
)->flags
);
906 clear_bit(BT_SK_DEFER_SETUP
, &bt_sk(sk
)->flags
);
910 if (sk
->sk_state
!= BT_OPEN
&& sk
->sk_state
!= BT_BOUND
&&
911 sk
->sk_state
!= BT_CONNECT2
) {
916 voice
.setting
= sco_pi(sk
)->setting
;
918 err
= bt_copy_from_sockptr(&voice
, sizeof(voice
), optval
,
923 /* Explicitly check for these values */
924 if (voice
.setting
!= BT_VOICE_TRANSPARENT
&&
925 voice
.setting
!= BT_VOICE_CVSD_16BIT
) {
930 sco_pi(sk
)->setting
= voice
.setting
;
931 hdev
= hci_get_route(&sco_pi(sk
)->dst
, &sco_pi(sk
)->src
,
937 if (enhanced_sync_conn_capable(hdev
) &&
938 voice
.setting
== BT_VOICE_TRANSPARENT
)
939 sco_pi(sk
)->codec
.id
= BT_CODEC_TRANSPARENT
;
944 err
= bt_copy_from_sockptr(&opt
, sizeof(opt
), optval
, optlen
);
949 set_bit(BT_SK_PKT_STATUS
, &bt_sk(sk
)->flags
);
951 clear_bit(BT_SK_PKT_STATUS
, &bt_sk(sk
)->flags
);
955 if (sk
->sk_state
!= BT_OPEN
&& sk
->sk_state
!= BT_BOUND
&&
956 sk
->sk_state
!= BT_CONNECT2
) {
961 hdev
= hci_get_route(&sco_pi(sk
)->dst
, &sco_pi(sk
)->src
,
968 if (!hci_dev_test_flag(hdev
, HCI_OFFLOAD_CODECS_ENABLED
)) {
974 if (!hdev
->get_data_path_id
) {
980 if (optlen
< sizeof(struct bt_codecs
) ||
981 optlen
> sizeof(buffer
)) {
987 err
= bt_copy_from_sockptr(buffer
, optlen
, optval
, optlen
);
993 codecs
= (void *)buffer
;
995 if (codecs
->num_codecs
> 1) {
1001 sco_pi(sk
)->codec
= codecs
->codecs
[0];
1014 static int sco_sock_getsockopt_old(struct socket
*sock
, int optname
,
1015 char __user
*optval
, int __user
*optlen
)
1017 struct sock
*sk
= sock
->sk
;
1018 struct sco_options opts
;
1019 struct sco_conninfo cinfo
;
1023 BT_DBG("sk %p", sk
);
1025 if (get_user(len
, optlen
))
1032 if (sk
->sk_state
!= BT_CONNECTED
&&
1033 !(sk
->sk_state
== BT_CONNECT2
&&
1034 test_bit(BT_SK_DEFER_SETUP
, &bt_sk(sk
)->flags
))) {
1039 opts
.mtu
= sco_pi(sk
)->conn
->mtu
;
1041 BT_DBG("mtu %u", opts
.mtu
);
1043 len
= min(len
, sizeof(opts
));
1044 if (copy_to_user(optval
, (char *)&opts
, len
))
1050 if (sk
->sk_state
!= BT_CONNECTED
&&
1051 !(sk
->sk_state
== BT_CONNECT2
&&
1052 test_bit(BT_SK_DEFER_SETUP
, &bt_sk(sk
)->flags
))) {
1057 memset(&cinfo
, 0, sizeof(cinfo
));
1058 cinfo
.hci_handle
= sco_pi(sk
)->conn
->hcon
->handle
;
1059 memcpy(cinfo
.dev_class
, sco_pi(sk
)->conn
->hcon
->dev_class
, 3);
1061 len
= min(len
, sizeof(cinfo
));
1062 if (copy_to_user(optval
, (char *)&cinfo
, len
))
1076 static int sco_sock_getsockopt(struct socket
*sock
, int level
, int optname
,
1077 char __user
*optval
, int __user
*optlen
)
1079 struct sock
*sk
= sock
->sk
;
1081 struct bt_voice voice
;
1084 struct codec_list
*c
;
1085 u8 num_codecs
, i
, __user
*ptr
;
1086 struct hci_dev
*hdev
;
1087 struct hci_codec_caps
*caps
;
1088 struct bt_codec codec
;
1090 BT_DBG("sk %p", sk
);
1092 if (level
== SOL_SCO
)
1093 return sco_sock_getsockopt_old(sock
, optname
, optval
, optlen
);
1095 if (get_user(len
, optlen
))
1102 case BT_DEFER_SETUP
:
1103 if (sk
->sk_state
!= BT_BOUND
&& sk
->sk_state
!= BT_LISTEN
) {
1108 if (put_user(test_bit(BT_SK_DEFER_SETUP
, &bt_sk(sk
)->flags
),
1109 (u32 __user
*)optval
))
1115 voice
.setting
= sco_pi(sk
)->setting
;
1117 len
= min_t(unsigned int, len
, sizeof(voice
));
1118 if (copy_to_user(optval
, (char *)&voice
, len
))
1124 if (sk
->sk_state
!= BT_CONNECTED
) {
1129 phys
= hci_conn_get_phy(sco_pi(sk
)->conn
->hcon
);
1131 if (put_user(phys
, (u32 __user
*) optval
))
1136 if (put_user(test_bit(BT_SK_PKT_STATUS
, &bt_sk(sk
)->flags
),
1137 (int __user
*)optval
))
1143 if (sk
->sk_state
!= BT_CONNECTED
) {
1148 if (put_user(sco_pi(sk
)->conn
->mtu
, (u32 __user
*)optval
))
1156 hdev
= hci_get_route(&sco_pi(sk
)->dst
, &sco_pi(sk
)->src
, BDADDR_BREDR
);
1162 if (!hci_dev_test_flag(hdev
, HCI_OFFLOAD_CODECS_ENABLED
)) {
1168 if (!hdev
->get_data_path_id
) {
1176 /* find total buffer size required to copy codec + caps */
1178 list_for_each_entry(c
, &hdev
->local_codecs
, list
) {
1179 if (c
->transport
!= HCI_TRANSPORT_SCO_ESCO
)
1182 for (i
= 0, caps
= c
->caps
; i
< c
->num_caps
; i
++) {
1183 buf_len
+= 1 + caps
->len
;
1184 caps
= (void *)&caps
->data
[caps
->len
];
1186 buf_len
+= sizeof(struct bt_codec
);
1188 hci_dev_unlock(hdev
);
1190 buf_len
+= sizeof(struct bt_codecs
);
1191 if (buf_len
> len
) {
1197 if (put_user(num_codecs
, ptr
)) {
1201 ptr
+= sizeof(num_codecs
);
1203 /* Iterate all the codecs supported over SCO and populate
1207 list_for_each_entry(c
, &hdev
->local_codecs
, list
) {
1208 if (c
->transport
!= HCI_TRANSPORT_SCO_ESCO
)
1214 err
= hdev
->get_data_path_id(hdev
, &codec
.data_path
);
1217 codec
.num_caps
= c
->num_caps
;
1218 if (copy_to_user(ptr
, &codec
, sizeof(codec
))) {
1222 ptr
+= sizeof(codec
);
1224 /* find codec capabilities data length */
1226 for (i
= 0, caps
= c
->caps
; i
< c
->num_caps
; i
++) {
1227 len
+= 1 + caps
->len
;
1228 caps
= (void *)&caps
->data
[caps
->len
];
1231 /* copy codec capabilities data */
1232 if (len
&& copy_to_user(ptr
, c
->caps
, len
)) {
1239 hci_dev_unlock(hdev
);
1244 if (!err
&& put_user(buf_len
, optlen
))
1258 static int sco_sock_shutdown(struct socket
*sock
, int how
)
1260 struct sock
*sk
= sock
->sk
;
1263 BT_DBG("sock %p, sk %p", sock
, sk
);
1271 if (!sk
->sk_shutdown
) {
1272 sk
->sk_shutdown
= SHUTDOWN_MASK
;
1273 sco_sock_clear_timer(sk
);
1274 __sco_sock_close(sk
);
1276 if (sock_flag(sk
, SOCK_LINGER
) && sk
->sk_lingertime
&&
1277 !(current
->flags
& PF_EXITING
))
1278 err
= bt_sock_wait_state(sk
, BT_CLOSED
,
1288 static int sco_sock_release(struct socket
*sock
)
1290 struct sock
*sk
= sock
->sk
;
1293 BT_DBG("sock %p, sk %p", sock
, sk
);
1300 if (sock_flag(sk
, SOCK_LINGER
) && READ_ONCE(sk
->sk_lingertime
) &&
1301 !(current
->flags
& PF_EXITING
)) {
1303 err
= bt_sock_wait_state(sk
, BT_CLOSED
, sk
->sk_lingertime
);
1312 static void sco_conn_ready(struct sco_conn
*conn
)
1314 struct sock
*parent
;
1315 struct sock
*sk
= conn
->sk
;
1317 BT_DBG("conn %p", conn
);
1321 sco_sock_clear_timer(sk
);
1322 sk
->sk_state
= BT_CONNECTED
;
1323 sk
->sk_state_change(sk
);
1326 sco_conn_lock(conn
);
1329 sco_conn_unlock(conn
);
1333 parent
= sco_get_sock_listen(&conn
->hcon
->src
);
1335 sco_conn_unlock(conn
);
1341 sk
= sco_sock_alloc(sock_net(parent
), NULL
,
1342 BTPROTO_SCO
, GFP_ATOMIC
, 0);
1344 release_sock(parent
);
1345 sco_conn_unlock(conn
);
1349 sco_sock_init(sk
, parent
);
1351 bacpy(&sco_pi(sk
)->src
, &conn
->hcon
->src
);
1352 bacpy(&sco_pi(sk
)->dst
, &conn
->hcon
->dst
);
1354 hci_conn_hold(conn
->hcon
);
1355 __sco_chan_add(conn
, sk
, parent
);
1357 if (test_bit(BT_SK_DEFER_SETUP
, &bt_sk(parent
)->flags
))
1358 sk
->sk_state
= BT_CONNECT2
;
1360 sk
->sk_state
= BT_CONNECTED
;
1362 /* Wake up parent */
1363 parent
->sk_data_ready(parent
);
1365 release_sock(parent
);
1367 sco_conn_unlock(conn
);
1371 /* ----- SCO interface with lower layer (HCI) ----- */
1372 int sco_connect_ind(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, __u8
*flags
)
1377 BT_DBG("hdev %s, bdaddr %pMR", hdev
->name
, bdaddr
);
1379 /* Find listening sockets */
1380 read_lock(&sco_sk_list
.lock
);
1381 sk_for_each(sk
, &sco_sk_list
.head
) {
1382 if (sk
->sk_state
!= BT_LISTEN
)
1385 if (!bacmp(&sco_pi(sk
)->src
, &hdev
->bdaddr
) ||
1386 !bacmp(&sco_pi(sk
)->src
, BDADDR_ANY
)) {
1387 lm
|= HCI_LM_ACCEPT
;
1389 if (test_bit(BT_SK_DEFER_SETUP
, &bt_sk(sk
)->flags
))
1390 *flags
|= HCI_PROTO_DEFER
;
1394 read_unlock(&sco_sk_list
.lock
);
1399 static void sco_connect_cfm(struct hci_conn
*hcon
, __u8 status
)
1401 if (hcon
->type
!= SCO_LINK
&& hcon
->type
!= ESCO_LINK
)
1404 BT_DBG("hcon %p bdaddr %pMR status %u", hcon
, &hcon
->dst
, status
);
1407 struct sco_conn
*conn
;
1409 conn
= sco_conn_add(hcon
);
1411 sco_conn_ready(conn
);
1413 sco_conn_del(hcon
, bt_to_errno(status
));
1416 static void sco_disconn_cfm(struct hci_conn
*hcon
, __u8 reason
)
1418 if (hcon
->type
!= SCO_LINK
&& hcon
->type
!= ESCO_LINK
)
1421 BT_DBG("hcon %p reason %d", hcon
, reason
);
1423 sco_conn_del(hcon
, bt_to_errno(reason
));
1426 void sco_recv_scodata(struct hci_conn
*hcon
, struct sk_buff
*skb
)
1428 struct sco_conn
*conn
= hcon
->sco_data
;
1433 BT_DBG("conn %p len %u", conn
, skb
->len
);
1436 sco_recv_frame(conn
, skb
);
1444 static struct hci_cb sco_cb
= {
1446 .connect_cfm
= sco_connect_cfm
,
1447 .disconn_cfm
= sco_disconn_cfm
,
1450 static int sco_debugfs_show(struct seq_file
*f
, void *p
)
1454 read_lock(&sco_sk_list
.lock
);
1456 sk_for_each(sk
, &sco_sk_list
.head
) {
1457 seq_printf(f
, "%pMR %pMR %d\n", &sco_pi(sk
)->src
,
1458 &sco_pi(sk
)->dst
, sk
->sk_state
);
1461 read_unlock(&sco_sk_list
.lock
);
1466 DEFINE_SHOW_ATTRIBUTE(sco_debugfs
);
1468 static struct dentry
*sco_debugfs
;
1470 static const struct proto_ops sco_sock_ops
= {
1471 .family
= PF_BLUETOOTH
,
1472 .owner
= THIS_MODULE
,
1473 .release
= sco_sock_release
,
1474 .bind
= sco_sock_bind
,
1475 .connect
= sco_sock_connect
,
1476 .listen
= sco_sock_listen
,
1477 .accept
= sco_sock_accept
,
1478 .getname
= sco_sock_getname
,
1479 .sendmsg
= sco_sock_sendmsg
,
1480 .recvmsg
= sco_sock_recvmsg
,
1481 .poll
= bt_sock_poll
,
1482 .ioctl
= bt_sock_ioctl
,
1483 .gettstamp
= sock_gettstamp
,
1484 .mmap
= sock_no_mmap
,
1485 .socketpair
= sock_no_socketpair
,
1486 .shutdown
= sco_sock_shutdown
,
1487 .setsockopt
= sco_sock_setsockopt
,
1488 .getsockopt
= sco_sock_getsockopt
1491 static const struct net_proto_family sco_sock_family_ops
= {
1492 .family
= PF_BLUETOOTH
,
1493 .owner
= THIS_MODULE
,
1494 .create
= sco_sock_create
,
1497 int __init
sco_init(void)
1501 BUILD_BUG_ON(sizeof(struct sockaddr_sco
) > sizeof(struct sockaddr
));
1503 err
= proto_register(&sco_proto
, 0);
1507 err
= bt_sock_register(BTPROTO_SCO
, &sco_sock_family_ops
);
1509 BT_ERR("SCO socket registration failed");
1513 err
= bt_procfs_init(&init_net
, "sco", &sco_sk_list
, NULL
);
1515 BT_ERR("Failed to create SCO proc file");
1516 bt_sock_unregister(BTPROTO_SCO
);
1520 BT_INFO("SCO socket layer initialized");
1522 hci_register_cb(&sco_cb
);
1524 if (IS_ERR_OR_NULL(bt_debugfs
))
1527 sco_debugfs
= debugfs_create_file("sco", 0444, bt_debugfs
,
1528 NULL
, &sco_debugfs_fops
);
1533 proto_unregister(&sco_proto
);
1539 bt_procfs_cleanup(&init_net
, "sco");
1541 debugfs_remove(sco_debugfs
);
1543 hci_unregister_cb(&sco_cb
);
1545 bt_sock_unregister(BTPROTO_SCO
);
1547 proto_unregister(&sco_proto
);
1550 module_param(disable_esco
, bool, 0644);
1551 MODULE_PARM_DESC(disable_esco
, "Disable eSCO connection creation");