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;
56 #define sco_conn_lock(c) spin_lock(&c->lock)
57 #define sco_conn_unlock(c) spin_unlock(&c->lock)
59 static void sco_sock_close(struct sock *sk);
60 static void sco_sock_kill(struct sock *sk);
62 /* ----- SCO socket info ----- */
63 #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_sock_timeout(struct work_struct *work)
82 struct sco_conn *conn = container_of(work, struct sco_conn,
90 sco_conn_unlock(conn);
95 BT_DBG("sock %p state %d", sk, sk->sk_state);
98 sk->sk_err = ETIMEDOUT;
99 sk->sk_state_change(sk);
104 static void sco_sock_set_timer(struct sock *sk, long timeout)
106 if (!sco_pi(sk)->conn)
109 BT_DBG("sock %p state %d timeout %ld", sk, sk->sk_state, timeout);
110 cancel_delayed_work(&sco_pi(sk)->conn->timeout_work);
111 schedule_delayed_work(&sco_pi(sk)->conn->timeout_work, timeout);
114 static void sco_sock_clear_timer(struct sock *sk)
116 if (!sco_pi(sk)->conn)
119 BT_DBG("sock %p state %d", sk, sk->sk_state);
120 cancel_delayed_work(&sco_pi(sk)->conn->timeout_work);
123 /* ---- SCO connections ---- */
124 static struct sco_conn *sco_conn_add(struct hci_conn *hcon)
126 struct hci_dev *hdev = hcon->hdev;
127 struct sco_conn *conn = hcon->sco_data;
132 conn = kzalloc(sizeof(struct sco_conn), GFP_KERNEL);
136 spin_lock_init(&conn->lock);
137 INIT_DELAYED_WORK(&conn->timeout_work, sco_sock_timeout);
139 hcon->sco_data = conn;
142 if (hdev->sco_mtu > 0)
143 conn->mtu = hdev->sco_mtu;
147 BT_DBG("hcon %p conn %p", hcon, conn);
153 * Must be called on the locked socket. */
154 static void sco_chan_del(struct sock *sk, int err)
156 struct sco_conn *conn;
158 conn = sco_pi(sk)->conn;
160 BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
165 sco_pi(sk)->conn = NULL;
166 sco_conn_unlock(conn);
169 hci_conn_drop(conn->hcon);
172 sk->sk_state = BT_CLOSED;
174 sk->sk_state_change(sk);
176 sock_set_flag(sk, SOCK_ZAPPED);
179 static void sco_conn_del(struct hci_conn *hcon, int err)
181 struct sco_conn *conn = hcon->sco_data;
187 BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
194 sco_conn_unlock(conn);
198 sco_sock_clear_timer(sk);
199 sco_chan_del(sk, err);
204 /* Ensure no more work items will run before freeing conn. */
205 cancel_delayed_work_sync(&conn->timeout_work);
207 hcon->sco_data = NULL;
211 static void __sco_chan_add(struct sco_conn *conn, struct sock *sk,
214 BT_DBG("conn %p", conn);
216 sco_pi(sk)->conn = conn;
220 bt_accept_enqueue(parent, sk, true);
223 static int sco_chan_add(struct sco_conn *conn, struct sock *sk,
232 __sco_chan_add(conn, sk, parent);
234 sco_conn_unlock(conn);
238 static int sco_connect(struct hci_dev *hdev, struct sock *sk)
240 struct sco_conn *conn;
241 struct hci_conn *hcon;
244 BT_DBG("%pMR -> %pMR", &sco_pi(sk)->src, &sco_pi(sk)->dst);
246 if (lmp_esco_capable(hdev) && !disable_esco)
251 if (sco_pi(sk)->setting == BT_VOICE_TRANSPARENT &&
252 (!lmp_transp_capable(hdev) || !lmp_esco_capable(hdev)))
255 hcon = hci_connect_sco(hdev, type, &sco_pi(sk)->dst,
256 sco_pi(sk)->setting, &sco_pi(sk)->codec);
258 return PTR_ERR(hcon);
260 conn = sco_conn_add(hcon);
266 /* Update source addr of the socket */
267 bacpy(&sco_pi(sk)->src, &hcon->src);
269 err = sco_chan_add(conn, sk, NULL);
273 if (hcon->state == BT_CONNECTED) {
274 sco_sock_clear_timer(sk);
275 sk->sk_state = BT_CONNECTED;
277 sk->sk_state = BT_CONNECT;
278 sco_sock_set_timer(sk, sk->sk_sndtimeo);
284 static int sco_send_frame(struct sock *sk, struct sk_buff *skb)
286 struct sco_conn *conn = sco_pi(sk)->conn;
289 /* Check outgoing MTU */
293 BT_DBG("sk %p len %d", sk, len);
295 hci_send_sco(conn->hcon, skb);
300 static void sco_recv_frame(struct sco_conn *conn, struct sk_buff *skb)
306 sco_conn_unlock(conn);
311 BT_DBG("sk %p len %u", sk, skb->len);
313 if (sk->sk_state != BT_CONNECTED)
316 if (!sock_queue_rcv_skb(sk, skb))
323 /* -------- Socket interface ---------- */
324 static struct sock *__sco_get_sock_listen_by_addr(bdaddr_t *ba)
328 sk_for_each(sk, &sco_sk_list.head) {
329 if (sk->sk_state != BT_LISTEN)
332 if (!bacmp(&sco_pi(sk)->src, ba))
339 /* Find socket listening on source bdaddr.
340 * Returns closest match.
342 static struct sock *sco_get_sock_listen(bdaddr_t *src)
344 struct sock *sk = NULL, *sk1 = NULL;
346 read_lock(&sco_sk_list.lock);
348 sk_for_each(sk, &sco_sk_list.head) {
349 if (sk->sk_state != BT_LISTEN)
353 if (!bacmp(&sco_pi(sk)->src, src))
357 if (!bacmp(&sco_pi(sk)->src, BDADDR_ANY))
361 read_unlock(&sco_sk_list.lock);
363 return sk ? sk : sk1;
366 static void sco_sock_destruct(struct sock *sk)
370 skb_queue_purge(&sk->sk_receive_queue);
371 skb_queue_purge(&sk->sk_write_queue);
374 static void sco_sock_cleanup_listen(struct sock *parent)
378 BT_DBG("parent %p", parent);
380 /* Close not yet accepted channels */
381 while ((sk = bt_accept_dequeue(parent, NULL))) {
386 parent->sk_state = BT_CLOSED;
387 sock_set_flag(parent, SOCK_ZAPPED);
390 /* Kill socket (only if zapped and orphan)
391 * Must be called on unlocked socket.
393 static void sco_sock_kill(struct sock *sk)
395 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
398 BT_DBG("sk %p state %d", sk, sk->sk_state);
400 /* Kill poor orphan */
401 bt_sock_unlink(&sco_sk_list, sk);
402 sock_set_flag(sk, SOCK_DEAD);
406 static void __sco_sock_close(struct sock *sk)
408 BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
410 switch (sk->sk_state) {
412 sco_sock_cleanup_listen(sk);
417 if (sco_pi(sk)->conn->hcon) {
418 sk->sk_state = BT_DISCONN;
419 sco_sock_set_timer(sk, SCO_DISCONN_TIMEOUT);
420 sco_conn_lock(sco_pi(sk)->conn);
421 hci_conn_drop(sco_pi(sk)->conn->hcon);
422 sco_pi(sk)->conn->hcon = NULL;
423 sco_conn_unlock(sco_pi(sk)->conn);
425 sco_chan_del(sk, ECONNRESET);
431 sco_chan_del(sk, ECONNRESET);
435 sock_set_flag(sk, SOCK_ZAPPED);
441 /* Must be called on unlocked socket. */
442 static void sco_sock_close(struct sock *sk)
445 sco_sock_clear_timer(sk);
446 __sco_sock_close(sk);
450 static void sco_skb_put_cmsg(struct sk_buff *skb, struct msghdr *msg,
453 if (sco_pi(sk)->cmsg_mask & SCO_CMSG_PKT_STATUS)
454 put_cmsg(msg, SOL_BLUETOOTH, BT_SCM_PKT_STATUS,
455 sizeof(bt_cb(skb)->sco.pkt_status),
456 &bt_cb(skb)->sco.pkt_status);
459 static void sco_sock_init(struct sock *sk, struct sock *parent)
464 sk->sk_type = parent->sk_type;
465 bt_sk(sk)->flags = bt_sk(parent)->flags;
466 security_sk_clone(parent, sk);
468 bt_sk(sk)->skb_put_cmsg = sco_skb_put_cmsg;
472 static struct proto sco_proto = {
474 .owner = THIS_MODULE,
475 .obj_size = sizeof(struct sco_pinfo)
478 static struct sock *sco_sock_alloc(struct net *net, struct socket *sock,
479 int proto, gfp_t prio, int kern)
483 sk = sk_alloc(net, PF_BLUETOOTH, prio, &sco_proto, kern);
487 sock_init_data(sock, sk);
488 INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
490 sk->sk_destruct = sco_sock_destruct;
491 sk->sk_sndtimeo = SCO_CONN_TIMEOUT;
493 sock_reset_flag(sk, SOCK_ZAPPED);
495 sk->sk_protocol = proto;
496 sk->sk_state = BT_OPEN;
498 sco_pi(sk)->setting = BT_VOICE_CVSD_16BIT;
499 sco_pi(sk)->codec.id = BT_CODEC_CVSD;
500 sco_pi(sk)->codec.cid = 0xffff;
501 sco_pi(sk)->codec.vid = 0xffff;
502 sco_pi(sk)->codec.data_path = 0x00;
504 bt_sock_link(&sco_sk_list, sk);
508 static int sco_sock_create(struct net *net, struct socket *sock, int protocol,
513 BT_DBG("sock %p", sock);
515 sock->state = SS_UNCONNECTED;
517 if (sock->type != SOCK_SEQPACKET)
518 return -ESOCKTNOSUPPORT;
520 sock->ops = &sco_sock_ops;
522 sk = sco_sock_alloc(net, sock, protocol, GFP_ATOMIC, kern);
526 sco_sock_init(sk, NULL);
530 static int sco_sock_bind(struct socket *sock, struct sockaddr *addr,
533 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
534 struct sock *sk = sock->sk;
537 if (!addr || addr_len < sizeof(struct sockaddr_sco) ||
538 addr->sa_family != AF_BLUETOOTH)
541 BT_DBG("sk %p %pMR", sk, &sa->sco_bdaddr);
545 if (sk->sk_state != BT_OPEN) {
550 if (sk->sk_type != SOCK_SEQPACKET) {
555 bacpy(&sco_pi(sk)->src, &sa->sco_bdaddr);
557 sk->sk_state = BT_BOUND;
564 static int sco_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
566 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
567 struct sock *sk = sock->sk;
568 struct hci_dev *hdev;
573 if (alen < sizeof(struct sockaddr_sco) ||
574 addr->sa_family != AF_BLUETOOTH)
578 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND) {
583 if (sk->sk_type != SOCK_SEQPACKET) {
588 hdev = hci_get_route(&sa->sco_bdaddr, &sco_pi(sk)->src, BDADDR_BREDR);
595 /* Set destination address and psm */
596 bacpy(&sco_pi(sk)->dst, &sa->sco_bdaddr);
598 err = sco_connect(hdev, sk);
599 hci_dev_unlock(hdev);
604 err = bt_sock_wait_state(sk, BT_CONNECTED,
605 sock_sndtimeo(sk, flags & O_NONBLOCK));
612 static int sco_sock_listen(struct socket *sock, int backlog)
614 struct sock *sk = sock->sk;
615 bdaddr_t *src = &sco_pi(sk)->src;
618 BT_DBG("sk %p backlog %d", sk, backlog);
622 if (sk->sk_state != BT_BOUND) {
627 if (sk->sk_type != SOCK_SEQPACKET) {
632 write_lock(&sco_sk_list.lock);
634 if (__sco_get_sock_listen_by_addr(src)) {
639 sk->sk_max_ack_backlog = backlog;
640 sk->sk_ack_backlog = 0;
642 sk->sk_state = BT_LISTEN;
645 write_unlock(&sco_sk_list.lock);
652 static int sco_sock_accept(struct socket *sock, struct socket *newsock,
653 int flags, bool kern)
655 DEFINE_WAIT_FUNC(wait, woken_wake_function);
656 struct sock *sk = sock->sk, *ch;
662 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
664 BT_DBG("sk %p timeo %ld", sk, timeo);
666 /* Wait for an incoming connection. (wake-one). */
667 add_wait_queue_exclusive(sk_sleep(sk), &wait);
669 if (sk->sk_state != BT_LISTEN) {
674 ch = bt_accept_dequeue(sk, newsock);
683 if (signal_pending(current)) {
684 err = sock_intr_errno(timeo);
690 timeo = wait_woken(&wait, TASK_INTERRUPTIBLE, timeo);
693 remove_wait_queue(sk_sleep(sk), &wait);
698 newsock->state = SS_CONNECTED;
700 BT_DBG("new socket %p", ch);
707 static int sco_sock_getname(struct socket *sock, struct sockaddr *addr,
710 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
711 struct sock *sk = sock->sk;
713 BT_DBG("sock %p, sk %p", sock, sk);
715 addr->sa_family = AF_BLUETOOTH;
718 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->dst);
720 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->src);
722 return sizeof(struct sockaddr_sco);
725 static int sco_sock_sendmsg(struct socket *sock, struct msghdr *msg,
728 struct sock *sk = sock->sk;
732 BT_DBG("sock %p, sk %p", sock, sk);
734 err = sock_error(sk);
738 if (msg->msg_flags & MSG_OOB)
741 skb = bt_skb_sendmsg(sk, msg, len, len, 0, 0);
747 if (sk->sk_state == BT_CONNECTED)
748 err = sco_send_frame(sk, skb);
759 static void sco_conn_defer_accept(struct hci_conn *conn, u16 setting)
761 struct hci_dev *hdev = conn->hdev;
763 BT_DBG("conn %p", conn);
765 conn->state = BT_CONFIG;
767 if (!lmp_esco_capable(hdev)) {
768 struct hci_cp_accept_conn_req cp;
770 bacpy(&cp.bdaddr, &conn->dst);
771 cp.role = 0x00; /* Ignored */
773 hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ, sizeof(cp), &cp);
775 struct hci_cp_accept_sync_conn_req cp;
777 bacpy(&cp.bdaddr, &conn->dst);
778 cp.pkt_type = cpu_to_le16(conn->pkt_type);
780 cp.tx_bandwidth = cpu_to_le32(0x00001f40);
781 cp.rx_bandwidth = cpu_to_le32(0x00001f40);
782 cp.content_format = cpu_to_le16(setting);
784 switch (setting & SCO_AIRMODE_MASK) {
785 case SCO_AIRMODE_TRANSP:
786 if (conn->pkt_type & ESCO_2EV3)
787 cp.max_latency = cpu_to_le16(0x0008);
789 cp.max_latency = cpu_to_le16(0x000D);
790 cp.retrans_effort = 0x02;
792 case SCO_AIRMODE_CVSD:
793 cp.max_latency = cpu_to_le16(0xffff);
794 cp.retrans_effort = 0xff;
797 /* use CVSD settings as fallback */
798 cp.max_latency = cpu_to_le16(0xffff);
799 cp.retrans_effort = 0xff;
803 hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
808 static int sco_sock_recvmsg(struct socket *sock, struct msghdr *msg,
809 size_t len, int flags)
811 struct sock *sk = sock->sk;
812 struct sco_pinfo *pi = sco_pi(sk);
816 if (sk->sk_state == BT_CONNECT2 &&
817 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
818 sco_conn_defer_accept(pi->conn->hcon, pi->setting);
819 sk->sk_state = BT_CONFIG;
827 return bt_sock_recvmsg(sock, msg, len, flags);
830 static int sco_sock_setsockopt(struct socket *sock, int level, int optname,
831 sockptr_t optval, unsigned int optlen)
833 struct sock *sk = sock->sk;
835 struct bt_voice voice;
837 struct bt_codecs *codecs;
838 struct hci_dev *hdev;
848 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
853 if (copy_from_sockptr(&opt, optval, sizeof(u32))) {
859 set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
861 clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
865 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND &&
866 sk->sk_state != BT_CONNECT2) {
871 voice.setting = sco_pi(sk)->setting;
873 len = min_t(unsigned int, sizeof(voice), optlen);
874 if (copy_from_sockptr(&voice, optval, len)) {
879 /* Explicitly check for these values */
880 if (voice.setting != BT_VOICE_TRANSPARENT &&
881 voice.setting != BT_VOICE_CVSD_16BIT) {
886 sco_pi(sk)->setting = voice.setting;
887 hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src,
893 if (enhanced_sync_conn_capable(hdev) &&
894 voice.setting == BT_VOICE_TRANSPARENT)
895 sco_pi(sk)->codec.id = BT_CODEC_TRANSPARENT;
900 if (copy_from_sockptr(&opt, optval, sizeof(u32))) {
906 sco_pi(sk)->cmsg_mask |= SCO_CMSG_PKT_STATUS;
908 sco_pi(sk)->cmsg_mask &= SCO_CMSG_PKT_STATUS;
912 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND &&
913 sk->sk_state != BT_CONNECT2) {
918 hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src,
925 if (!hci_dev_test_flag(hdev, HCI_OFFLOAD_CODECS_ENABLED)) {
931 if (!hdev->get_data_path_id) {
937 if (optlen < sizeof(struct bt_codecs) ||
938 optlen > sizeof(buffer)) {
944 if (copy_from_sockptr(buffer, optval, optlen)) {
950 codecs = (void *)buffer;
952 if (codecs->num_codecs > 1) {
958 sco_pi(sk)->codec = codecs->codecs[0];
971 static int sco_sock_getsockopt_old(struct socket *sock, int optname,
972 char __user *optval, int __user *optlen)
974 struct sock *sk = sock->sk;
975 struct sco_options opts;
976 struct sco_conninfo cinfo;
981 if (get_user(len, optlen))
988 if (sk->sk_state != BT_CONNECTED &&
989 !(sk->sk_state == BT_CONNECT2 &&
990 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
995 opts.mtu = sco_pi(sk)->conn->mtu;
997 BT_DBG("mtu %u", opts.mtu);
999 len = min_t(unsigned int, len, sizeof(opts));
1000 if (copy_to_user(optval, (char *)&opts, len))
1006 if (sk->sk_state != BT_CONNECTED &&
1007 !(sk->sk_state == BT_CONNECT2 &&
1008 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
1013 memset(&cinfo, 0, sizeof(cinfo));
1014 cinfo.hci_handle = sco_pi(sk)->conn->hcon->handle;
1015 memcpy(cinfo.dev_class, sco_pi(sk)->conn->hcon->dev_class, 3);
1017 len = min_t(unsigned int, len, sizeof(cinfo));
1018 if (copy_to_user(optval, (char *)&cinfo, len))
1032 static int sco_sock_getsockopt(struct socket *sock, int level, int optname,
1033 char __user *optval, int __user *optlen)
1035 struct sock *sk = sock->sk;
1037 struct bt_voice voice;
1041 struct codec_list *c;
1042 u8 num_codecs, i, __user *ptr;
1043 struct hci_dev *hdev;
1044 struct hci_codec_caps *caps;
1045 struct bt_codec codec;
1047 BT_DBG("sk %p", sk);
1049 if (level == SOL_SCO)
1050 return sco_sock_getsockopt_old(sock, optname, optval, optlen);
1052 if (get_user(len, optlen))
1059 case BT_DEFER_SETUP:
1060 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
1065 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
1066 (u32 __user *)optval))
1072 voice.setting = sco_pi(sk)->setting;
1074 len = min_t(unsigned int, len, sizeof(voice));
1075 if (copy_to_user(optval, (char *)&voice, len))
1081 if (sk->sk_state != BT_CONNECTED) {
1086 phys = hci_conn_get_phy(sco_pi(sk)->conn->hcon);
1088 if (put_user(phys, (u32 __user *) optval))
1093 pkt_status = (sco_pi(sk)->cmsg_mask & SCO_CMSG_PKT_STATUS);
1095 if (put_user(pkt_status, (int __user *)optval))
1101 if (sk->sk_state != BT_CONNECTED) {
1106 if (put_user(sco_pi(sk)->conn->mtu, (u32 __user *)optval))
1114 hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src, BDADDR_BREDR);
1120 if (!hci_dev_test_flag(hdev, HCI_OFFLOAD_CODECS_ENABLED)) {
1126 if (!hdev->get_data_path_id) {
1132 /* find total buffer size required to copy codec + caps */
1134 list_for_each_entry(c, &hdev->local_codecs, list) {
1135 if (c->transport != HCI_TRANSPORT_SCO_ESCO)
1138 for (i = 0, caps = c->caps; i < c->num_caps; i++) {
1139 buf_len += 1 + caps->len;
1140 caps = (void *)&caps->data[caps->len];
1142 buf_len += sizeof(struct bt_codec);
1144 hci_dev_unlock(hdev);
1146 buf_len += sizeof(struct bt_codecs);
1147 if (buf_len > len) {
1154 if (put_user(num_codecs, ptr)) {
1159 ptr += sizeof(num_codecs);
1161 /* Iterate all the codecs supported over SCO and populate
1165 list_for_each_entry(c, &hdev->local_codecs, list) {
1166 if (c->transport != HCI_TRANSPORT_SCO_ESCO)
1172 err = hdev->get_data_path_id(hdev, &codec.data_path);
1175 codec.num_caps = c->num_caps;
1176 if (copy_to_user(ptr, &codec, sizeof(codec))) {
1180 ptr += sizeof(codec);
1182 /* find codec capabilities data length */
1184 for (i = 0, caps = c->caps; i < c->num_caps; i++) {
1185 len += 1 + caps->len;
1186 caps = (void *)&caps->data[caps->len];
1189 /* copy codec capabilities data */
1190 if (len && copy_to_user(ptr, c->caps, len)) {
1197 if (!err && put_user(buf_len, optlen))
1200 hci_dev_unlock(hdev);
1214 static int sco_sock_shutdown(struct socket *sock, int how)
1216 struct sock *sk = sock->sk;
1219 BT_DBG("sock %p, sk %p", sock, sk);
1227 if (!sk->sk_shutdown) {
1228 sk->sk_shutdown = SHUTDOWN_MASK;
1229 sco_sock_clear_timer(sk);
1230 __sco_sock_close(sk);
1232 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
1233 !(current->flags & PF_EXITING))
1234 err = bt_sock_wait_state(sk, BT_CLOSED,
1244 static int sco_sock_release(struct socket *sock)
1246 struct sock *sk = sock->sk;
1249 BT_DBG("sock %p, sk %p", sock, sk);
1256 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
1257 !(current->flags & PF_EXITING)) {
1259 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
1268 static void sco_conn_ready(struct sco_conn *conn)
1270 struct sock *parent;
1271 struct sock *sk = conn->sk;
1273 BT_DBG("conn %p", conn);
1277 sco_sock_clear_timer(sk);
1278 sk->sk_state = BT_CONNECTED;
1279 sk->sk_state_change(sk);
1282 sco_conn_lock(conn);
1285 sco_conn_unlock(conn);
1289 parent = sco_get_sock_listen(&conn->hcon->src);
1291 sco_conn_unlock(conn);
1297 sk = sco_sock_alloc(sock_net(parent), NULL,
1298 BTPROTO_SCO, GFP_ATOMIC, 0);
1300 release_sock(parent);
1301 sco_conn_unlock(conn);
1305 sco_sock_init(sk, parent);
1307 bacpy(&sco_pi(sk)->src, &conn->hcon->src);
1308 bacpy(&sco_pi(sk)->dst, &conn->hcon->dst);
1310 hci_conn_hold(conn->hcon);
1311 __sco_chan_add(conn, sk, parent);
1313 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(parent)->flags))
1314 sk->sk_state = BT_CONNECT2;
1316 sk->sk_state = BT_CONNECTED;
1318 /* Wake up parent */
1319 parent->sk_data_ready(parent);
1321 release_sock(parent);
1323 sco_conn_unlock(conn);
1327 /* ----- SCO interface with lower layer (HCI) ----- */
1328 int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags)
1333 BT_DBG("hdev %s, bdaddr %pMR", hdev->name, bdaddr);
1335 /* Find listening sockets */
1336 read_lock(&sco_sk_list.lock);
1337 sk_for_each(sk, &sco_sk_list.head) {
1338 if (sk->sk_state != BT_LISTEN)
1341 if (!bacmp(&sco_pi(sk)->src, &hdev->bdaddr) ||
1342 !bacmp(&sco_pi(sk)->src, BDADDR_ANY)) {
1343 lm |= HCI_LM_ACCEPT;
1345 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))
1346 *flags |= HCI_PROTO_DEFER;
1350 read_unlock(&sco_sk_list.lock);
1355 static void sco_connect_cfm(struct hci_conn *hcon, __u8 status)
1357 if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
1360 BT_DBG("hcon %p bdaddr %pMR status %u", hcon, &hcon->dst, status);
1363 struct sco_conn *conn;
1365 conn = sco_conn_add(hcon);
1367 sco_conn_ready(conn);
1369 sco_conn_del(hcon, bt_to_errno(status));
1372 static void sco_disconn_cfm(struct hci_conn *hcon, __u8 reason)
1374 if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
1377 BT_DBG("hcon %p reason %d", hcon, reason);
1379 sco_conn_del(hcon, bt_to_errno(reason));
1382 void sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
1384 struct sco_conn *conn = hcon->sco_data;
1389 BT_DBG("conn %p len %u", conn, skb->len);
1392 sco_recv_frame(conn, skb);
1400 static struct hci_cb sco_cb = {
1402 .connect_cfm = sco_connect_cfm,
1403 .disconn_cfm = sco_disconn_cfm,
1406 static int sco_debugfs_show(struct seq_file *f, void *p)
1410 read_lock(&sco_sk_list.lock);
1412 sk_for_each(sk, &sco_sk_list.head) {
1413 seq_printf(f, "%pMR %pMR %d\n", &sco_pi(sk)->src,
1414 &sco_pi(sk)->dst, sk->sk_state);
1417 read_unlock(&sco_sk_list.lock);
1422 DEFINE_SHOW_ATTRIBUTE(sco_debugfs);
1424 static struct dentry *sco_debugfs;
1426 static const struct proto_ops sco_sock_ops = {
1427 .family = PF_BLUETOOTH,
1428 .owner = THIS_MODULE,
1429 .release = sco_sock_release,
1430 .bind = sco_sock_bind,
1431 .connect = sco_sock_connect,
1432 .listen = sco_sock_listen,
1433 .accept = sco_sock_accept,
1434 .getname = sco_sock_getname,
1435 .sendmsg = sco_sock_sendmsg,
1436 .recvmsg = sco_sock_recvmsg,
1437 .poll = bt_sock_poll,
1438 .ioctl = bt_sock_ioctl,
1439 .gettstamp = sock_gettstamp,
1440 .mmap = sock_no_mmap,
1441 .socketpair = sock_no_socketpair,
1442 .shutdown = sco_sock_shutdown,
1443 .setsockopt = sco_sock_setsockopt,
1444 .getsockopt = sco_sock_getsockopt
1447 static const struct net_proto_family sco_sock_family_ops = {
1448 .family = PF_BLUETOOTH,
1449 .owner = THIS_MODULE,
1450 .create = sco_sock_create,
1453 int __init sco_init(void)
1457 BUILD_BUG_ON(sizeof(struct sockaddr_sco) > sizeof(struct sockaddr));
1459 err = proto_register(&sco_proto, 0);
1463 err = bt_sock_register(BTPROTO_SCO, &sco_sock_family_ops);
1465 BT_ERR("SCO socket registration failed");
1469 err = bt_procfs_init(&init_net, "sco", &sco_sk_list, NULL);
1471 BT_ERR("Failed to create SCO proc file");
1472 bt_sock_unregister(BTPROTO_SCO);
1476 BT_INFO("SCO socket layer initialized");
1478 hci_register_cb(&sco_cb);
1480 if (IS_ERR_OR_NULL(bt_debugfs))
1483 sco_debugfs = debugfs_create_file("sco", 0444, bt_debugfs,
1484 NULL, &sco_debugfs_fops);
1489 proto_unregister(&sco_proto);
1495 bt_procfs_cleanup(&init_net, "sco");
1497 debugfs_remove(sco_debugfs);
1499 hci_unregister_cb(&sco_cb);
1501 bt_sock_unregister(BTPROTO_SCO);
1503 proto_unregister(&sco_proto);
1506 module_param(disable_esco, bool, 0644);
1507 MODULE_PARM_DESC(disable_esco, "Disable eSCO connection creation");