2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2000-2001 Qualcomm Incorporated
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 switch (sco_pi(sk)->setting & SCO_AIRMODE_MASK) {
323 case SCO_AIRMODE_TRANSP:
324 if (!lmp_transp_capable(hdev) || !lmp_esco_capable(hdev)) {
331 hcon = hci_connect_sco(hdev, type, &sco_pi(sk)->dst,
332 sco_pi(sk)->setting, &sco_pi(sk)->codec,
339 conn = sco_conn_add(hcon);
348 err = sco_chan_add(conn, sk, NULL);
354 /* Update source addr of the socket */
355 bacpy(&sco_pi(sk)->src, &hcon->src);
357 if (hcon->state == BT_CONNECTED) {
358 sco_sock_clear_timer(sk);
359 sk->sk_state = BT_CONNECTED;
361 sk->sk_state = BT_CONNECT;
362 sco_sock_set_timer(sk, sk->sk_sndtimeo);
368 hci_dev_unlock(hdev);
373 static int sco_send_frame(struct sock *sk, struct sk_buff *skb)
375 struct sco_conn *conn = sco_pi(sk)->conn;
378 /* Check outgoing MTU */
382 BT_DBG("sk %p len %d", sk, len);
384 hci_send_sco(conn->hcon, skb);
389 static void sco_recv_frame(struct sco_conn *conn, struct sk_buff *skb)
395 sco_conn_unlock(conn);
400 BT_DBG("sk %p len %u", sk, skb->len);
402 if (sk->sk_state != BT_CONNECTED)
405 if (!sock_queue_rcv_skb(sk, skb))
412 /* -------- Socket interface ---------- */
413 static struct sock *__sco_get_sock_listen_by_addr(bdaddr_t *ba)
417 sk_for_each(sk, &sco_sk_list.head) {
418 if (sk->sk_state != BT_LISTEN)
421 if (!bacmp(&sco_pi(sk)->src, ba))
428 /* Find socket listening on source bdaddr.
429 * Returns closest match.
431 static struct sock *sco_get_sock_listen(bdaddr_t *src)
433 struct sock *sk = NULL, *sk1 = NULL;
435 read_lock(&sco_sk_list.lock);
437 sk_for_each(sk, &sco_sk_list.head) {
438 if (sk->sk_state != BT_LISTEN)
442 if (!bacmp(&sco_pi(sk)->src, src))
446 if (!bacmp(&sco_pi(sk)->src, BDADDR_ANY))
450 read_unlock(&sco_sk_list.lock);
452 return sk ? sk : sk1;
455 static void sco_sock_destruct(struct sock *sk)
459 sco_conn_put(sco_pi(sk)->conn);
461 skb_queue_purge(&sk->sk_receive_queue);
462 skb_queue_purge(&sk->sk_write_queue);
465 static void sco_sock_cleanup_listen(struct sock *parent)
469 BT_DBG("parent %p", parent);
471 /* Close not yet accepted channels */
472 while ((sk = bt_accept_dequeue(parent, NULL))) {
477 parent->sk_state = BT_CLOSED;
478 sock_set_flag(parent, SOCK_ZAPPED);
481 /* Kill socket (only if zapped and orphan)
482 * Must be called on unlocked socket.
484 static void sco_sock_kill(struct sock *sk)
486 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
489 BT_DBG("sk %p state %d", sk, sk->sk_state);
491 /* Kill poor orphan */
492 bt_sock_unlink(&sco_sk_list, sk);
493 sock_set_flag(sk, SOCK_DEAD);
497 static void __sco_sock_close(struct sock *sk)
499 BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
501 switch (sk->sk_state) {
503 sco_sock_cleanup_listen(sk);
511 sco_chan_del(sk, ECONNRESET);
515 sock_set_flag(sk, SOCK_ZAPPED);
521 /* Must be called on unlocked socket. */
522 static void sco_sock_close(struct sock *sk)
525 sco_sock_clear_timer(sk);
526 __sco_sock_close(sk);
530 static void sco_sock_init(struct sock *sk, struct sock *parent)
535 sk->sk_type = parent->sk_type;
536 bt_sk(sk)->flags = bt_sk(parent)->flags;
537 security_sk_clone(parent, sk);
541 static struct proto sco_proto = {
543 .owner = THIS_MODULE,
544 .obj_size = sizeof(struct sco_pinfo)
547 static struct sock *sco_sock_alloc(struct net *net, struct socket *sock,
548 int proto, gfp_t prio, int kern)
552 sk = bt_sock_alloc(net, sock, &sco_proto, proto, prio, kern);
556 sk->sk_destruct = sco_sock_destruct;
557 sk->sk_sndtimeo = SCO_CONN_TIMEOUT;
559 sco_pi(sk)->setting = BT_VOICE_CVSD_16BIT;
560 sco_pi(sk)->codec.id = BT_CODEC_CVSD;
561 sco_pi(sk)->codec.cid = 0xffff;
562 sco_pi(sk)->codec.vid = 0xffff;
563 sco_pi(sk)->codec.data_path = 0x00;
565 bt_sock_link(&sco_sk_list, sk);
569 static int sco_sock_create(struct net *net, struct socket *sock, int protocol,
574 BT_DBG("sock %p", sock);
576 sock->state = SS_UNCONNECTED;
578 if (sock->type != SOCK_SEQPACKET)
579 return -ESOCKTNOSUPPORT;
581 sock->ops = &sco_sock_ops;
583 sk = sco_sock_alloc(net, sock, protocol, GFP_ATOMIC, kern);
587 sco_sock_init(sk, NULL);
591 static int sco_sock_bind(struct socket *sock, struct sockaddr *addr,
594 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
595 struct sock *sk = sock->sk;
598 if (!addr || addr_len < sizeof(struct sockaddr_sco) ||
599 addr->sa_family != AF_BLUETOOTH)
602 BT_DBG("sk %p %pMR", sk, &sa->sco_bdaddr);
606 if (sk->sk_state != BT_OPEN) {
611 if (sk->sk_type != SOCK_SEQPACKET) {
616 bacpy(&sco_pi(sk)->src, &sa->sco_bdaddr);
618 sk->sk_state = BT_BOUND;
625 static int sco_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
627 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
628 struct sock *sk = sock->sk;
633 if (alen < sizeof(struct sockaddr_sco) ||
634 addr->sa_family != AF_BLUETOOTH)
637 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND)
640 if (sk->sk_type != SOCK_SEQPACKET)
644 /* Set destination address and psm */
645 bacpy(&sco_pi(sk)->dst, &sa->sco_bdaddr);
648 err = sco_connect(sk);
654 err = bt_sock_wait_state(sk, BT_CONNECTED,
655 sock_sndtimeo(sk, flags & O_NONBLOCK));
661 static int sco_sock_listen(struct socket *sock, int backlog)
663 struct sock *sk = sock->sk;
664 bdaddr_t *src = &sco_pi(sk)->src;
667 BT_DBG("sk %p backlog %d", sk, backlog);
671 if (sk->sk_state != BT_BOUND) {
676 if (sk->sk_type != SOCK_SEQPACKET) {
681 write_lock(&sco_sk_list.lock);
683 if (__sco_get_sock_listen_by_addr(src)) {
688 sk->sk_max_ack_backlog = backlog;
689 sk->sk_ack_backlog = 0;
691 sk->sk_state = BT_LISTEN;
694 write_unlock(&sco_sk_list.lock);
701 static int sco_sock_accept(struct socket *sock, struct socket *newsock,
702 struct proto_accept_arg *arg)
704 DEFINE_WAIT_FUNC(wait, woken_wake_function);
705 struct sock *sk = sock->sk, *ch;
711 timeo = sock_rcvtimeo(sk, arg->flags & O_NONBLOCK);
713 BT_DBG("sk %p timeo %ld", sk, timeo);
715 /* Wait for an incoming connection. (wake-one). */
716 add_wait_queue_exclusive(sk_sleep(sk), &wait);
718 if (sk->sk_state != BT_LISTEN) {
723 ch = bt_accept_dequeue(sk, newsock);
732 if (signal_pending(current)) {
733 err = sock_intr_errno(timeo);
739 timeo = wait_woken(&wait, TASK_INTERRUPTIBLE, timeo);
742 remove_wait_queue(sk_sleep(sk), &wait);
747 newsock->state = SS_CONNECTED;
749 BT_DBG("new socket %p", ch);
756 static int sco_sock_getname(struct socket *sock, struct sockaddr *addr,
759 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
760 struct sock *sk = sock->sk;
762 BT_DBG("sock %p, sk %p", sock, sk);
764 addr->sa_family = AF_BLUETOOTH;
767 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->dst);
769 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->src);
771 return sizeof(struct sockaddr_sco);
774 static int sco_sock_sendmsg(struct socket *sock, struct msghdr *msg,
777 struct sock *sk = sock->sk;
781 BT_DBG("sock %p, sk %p", sock, sk);
783 err = sock_error(sk);
787 if (msg->msg_flags & MSG_OOB)
790 skb = bt_skb_sendmsg(sk, msg, len, len, 0, 0);
796 if (sk->sk_state == BT_CONNECTED)
797 err = sco_send_frame(sk, skb);
808 static void sco_conn_defer_accept(struct hci_conn *conn, u16 setting)
810 struct hci_dev *hdev = conn->hdev;
812 BT_DBG("conn %p", conn);
814 conn->state = BT_CONFIG;
816 if (!lmp_esco_capable(hdev)) {
817 struct hci_cp_accept_conn_req cp;
819 bacpy(&cp.bdaddr, &conn->dst);
820 cp.role = 0x00; /* Ignored */
822 hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ, sizeof(cp), &cp);
824 struct hci_cp_accept_sync_conn_req cp;
826 bacpy(&cp.bdaddr, &conn->dst);
827 cp.pkt_type = cpu_to_le16(conn->pkt_type);
829 cp.tx_bandwidth = cpu_to_le32(0x00001f40);
830 cp.rx_bandwidth = cpu_to_le32(0x00001f40);
831 cp.content_format = cpu_to_le16(setting);
833 switch (setting & SCO_AIRMODE_MASK) {
834 case SCO_AIRMODE_TRANSP:
835 if (conn->pkt_type & ESCO_2EV3)
836 cp.max_latency = cpu_to_le16(0x0008);
838 cp.max_latency = cpu_to_le16(0x000D);
839 cp.retrans_effort = 0x02;
841 case SCO_AIRMODE_CVSD:
842 cp.max_latency = cpu_to_le16(0xffff);
843 cp.retrans_effort = 0xff;
846 /* use CVSD settings as fallback */
847 cp.max_latency = cpu_to_le16(0xffff);
848 cp.retrans_effort = 0xff;
852 hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
857 static int sco_sock_recvmsg(struct socket *sock, struct msghdr *msg,
858 size_t len, int flags)
860 struct sock *sk = sock->sk;
861 struct sco_pinfo *pi = sco_pi(sk);
865 if (sk->sk_state == BT_CONNECT2 &&
866 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
867 sco_conn_defer_accept(pi->conn->hcon, pi->setting);
868 sk->sk_state = BT_CONFIG;
876 return bt_sock_recvmsg(sock, msg, len, flags);
879 static int sco_sock_setsockopt(struct socket *sock, int level, int optname,
880 sockptr_t optval, unsigned int optlen)
882 struct sock *sk = sock->sk;
884 struct bt_voice voice;
886 struct bt_codecs *codecs;
887 struct hci_dev *hdev;
897 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
902 err = copy_safe_from_sockptr(&opt, sizeof(opt), optval, optlen);
907 set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
909 clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
913 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND &&
914 sk->sk_state != BT_CONNECT2) {
919 voice.setting = sco_pi(sk)->setting;
921 err = copy_safe_from_sockptr(&voice, sizeof(voice), optval,
926 sco_pi(sk)->setting = voice.setting;
927 hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src,
934 switch (sco_pi(sk)->setting & SCO_AIRMODE_MASK) {
935 case SCO_AIRMODE_TRANSP:
936 if (enhanced_sync_conn_capable(hdev))
937 sco_pi(sk)->codec.id = BT_CODEC_TRANSPARENT;
945 err = copy_safe_from_sockptr(&opt, sizeof(opt), optval, optlen);
950 set_bit(BT_SK_PKT_STATUS, &bt_sk(sk)->flags);
952 clear_bit(BT_SK_PKT_STATUS, &bt_sk(sk)->flags);
956 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND &&
957 sk->sk_state != BT_CONNECT2) {
962 hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src,
969 if (!hci_dev_test_flag(hdev, HCI_OFFLOAD_CODECS_ENABLED)) {
975 if (!hdev->get_data_path_id) {
981 if (optlen < sizeof(struct bt_codecs) ||
982 optlen > sizeof(buffer)) {
988 err = copy_struct_from_sockptr(buffer, sizeof(buffer), optval,
995 codecs = (void *)buffer;
997 if (codecs->num_codecs > 1) {
1003 sco_pi(sk)->codec = codecs->codecs[0];
1016 static int sco_sock_getsockopt_old(struct socket *sock, int optname,
1017 char __user *optval, int __user *optlen)
1019 struct sock *sk = sock->sk;
1020 struct sco_options opts;
1021 struct sco_conninfo cinfo;
1025 BT_DBG("sk %p", sk);
1027 if (get_user(len, optlen))
1034 if (sk->sk_state != BT_CONNECTED &&
1035 !(sk->sk_state == BT_CONNECT2 &&
1036 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
1041 opts.mtu = sco_pi(sk)->conn->mtu;
1043 BT_DBG("mtu %u", opts.mtu);
1045 len = min(len, sizeof(opts));
1046 if (copy_to_user(optval, (char *)&opts, len))
1052 if (sk->sk_state != BT_CONNECTED &&
1053 !(sk->sk_state == BT_CONNECT2 &&
1054 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
1059 memset(&cinfo, 0, sizeof(cinfo));
1060 cinfo.hci_handle = sco_pi(sk)->conn->hcon->handle;
1061 memcpy(cinfo.dev_class, sco_pi(sk)->conn->hcon->dev_class, 3);
1063 len = min(len, sizeof(cinfo));
1064 if (copy_to_user(optval, (char *)&cinfo, len))
1078 static int sco_sock_getsockopt(struct socket *sock, int level, int optname,
1079 char __user *optval, int __user *optlen)
1081 struct sock *sk = sock->sk;
1083 struct bt_voice voice;
1086 struct codec_list *c;
1087 u8 num_codecs, i, __user *ptr;
1088 struct hci_dev *hdev;
1089 struct hci_codec_caps *caps;
1090 struct bt_codec codec;
1092 BT_DBG("sk %p", sk);
1094 if (level == SOL_SCO)
1095 return sco_sock_getsockopt_old(sock, optname, optval, optlen);
1097 if (get_user(len, optlen))
1104 case BT_DEFER_SETUP:
1105 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
1110 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
1111 (u32 __user *)optval))
1117 voice.setting = sco_pi(sk)->setting;
1119 len = min_t(unsigned int, len, sizeof(voice));
1120 if (copy_to_user(optval, (char *)&voice, len))
1126 if (sk->sk_state != BT_CONNECTED) {
1131 phys = hci_conn_get_phy(sco_pi(sk)->conn->hcon);
1133 if (put_user(phys, (u32 __user *) optval))
1138 if (put_user(test_bit(BT_SK_PKT_STATUS, &bt_sk(sk)->flags),
1139 (int __user *)optval))
1145 if (sk->sk_state != BT_CONNECTED) {
1150 if (put_user(sco_pi(sk)->conn->mtu, (u32 __user *)optval))
1158 hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src, BDADDR_BREDR);
1164 if (!hci_dev_test_flag(hdev, HCI_OFFLOAD_CODECS_ENABLED)) {
1170 if (!hdev->get_data_path_id) {
1178 /* find total buffer size required to copy codec + caps */
1180 list_for_each_entry(c, &hdev->local_codecs, list) {
1181 if (c->transport != HCI_TRANSPORT_SCO_ESCO)
1184 for (i = 0, caps = c->caps; i < c->num_caps; i++) {
1185 buf_len += 1 + caps->len;
1186 caps = (void *)&caps->data[caps->len];
1188 buf_len += sizeof(struct bt_codec);
1190 hci_dev_unlock(hdev);
1192 buf_len += sizeof(struct bt_codecs);
1193 if (buf_len > len) {
1199 if (put_user(num_codecs, ptr)) {
1203 ptr += sizeof(num_codecs);
1205 /* Iterate all the codecs supported over SCO and populate
1209 list_for_each_entry(c, &hdev->local_codecs, list) {
1210 if (c->transport != HCI_TRANSPORT_SCO_ESCO)
1216 err = hdev->get_data_path_id(hdev, &codec.data_path);
1219 codec.num_caps = c->num_caps;
1220 if (copy_to_user(ptr, &codec, sizeof(codec))) {
1224 ptr += sizeof(codec);
1226 /* find codec capabilities data length */
1228 for (i = 0, caps = c->caps; i < c->num_caps; i++) {
1229 len += 1 + caps->len;
1230 caps = (void *)&caps->data[caps->len];
1233 /* copy codec capabilities data */
1234 if (len && copy_to_user(ptr, c->caps, len)) {
1241 hci_dev_unlock(hdev);
1246 if (!err && put_user(buf_len, optlen))
1260 static int sco_sock_shutdown(struct socket *sock, int how)
1262 struct sock *sk = sock->sk;
1265 BT_DBG("sock %p, sk %p", sock, sk);
1273 if (!sk->sk_shutdown) {
1274 sk->sk_shutdown = SHUTDOWN_MASK;
1275 sco_sock_clear_timer(sk);
1276 __sco_sock_close(sk);
1278 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
1279 !(current->flags & PF_EXITING))
1280 err = bt_sock_wait_state(sk, BT_CLOSED,
1290 static int sco_sock_release(struct socket *sock)
1292 struct sock *sk = sock->sk;
1295 BT_DBG("sock %p, sk %p", sock, sk);
1302 if (sock_flag(sk, SOCK_LINGER) && READ_ONCE(sk->sk_lingertime) &&
1303 !(current->flags & PF_EXITING)) {
1305 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
1314 static void sco_conn_ready(struct sco_conn *conn)
1316 struct sock *parent;
1317 struct sock *sk = conn->sk;
1319 BT_DBG("conn %p", conn);
1323 sco_sock_clear_timer(sk);
1324 sk->sk_state = BT_CONNECTED;
1325 sk->sk_state_change(sk);
1328 sco_conn_lock(conn);
1331 sco_conn_unlock(conn);
1335 parent = sco_get_sock_listen(&conn->hcon->src);
1337 sco_conn_unlock(conn);
1343 sk = sco_sock_alloc(sock_net(parent), NULL,
1344 BTPROTO_SCO, GFP_ATOMIC, 0);
1346 release_sock(parent);
1347 sco_conn_unlock(conn);
1351 sco_sock_init(sk, parent);
1353 bacpy(&sco_pi(sk)->src, &conn->hcon->src);
1354 bacpy(&sco_pi(sk)->dst, &conn->hcon->dst);
1356 hci_conn_hold(conn->hcon);
1357 __sco_chan_add(conn, sk, parent);
1359 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(parent)->flags))
1360 sk->sk_state = BT_CONNECT2;
1362 sk->sk_state = BT_CONNECTED;
1364 /* Wake up parent */
1365 parent->sk_data_ready(parent);
1367 release_sock(parent);
1369 sco_conn_unlock(conn);
1373 /* ----- SCO interface with lower layer (HCI) ----- */
1374 int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags)
1379 BT_DBG("hdev %s, bdaddr %pMR", hdev->name, bdaddr);
1381 /* Find listening sockets */
1382 read_lock(&sco_sk_list.lock);
1383 sk_for_each(sk, &sco_sk_list.head) {
1384 if (sk->sk_state != BT_LISTEN)
1387 if (!bacmp(&sco_pi(sk)->src, &hdev->bdaddr) ||
1388 !bacmp(&sco_pi(sk)->src, BDADDR_ANY)) {
1389 lm |= HCI_LM_ACCEPT;
1391 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))
1392 *flags |= HCI_PROTO_DEFER;
1396 read_unlock(&sco_sk_list.lock);
1401 static bool sco_match(struct hci_conn *hcon)
1403 return hcon->type == SCO_LINK || hcon->type == ESCO_LINK;
1406 static void sco_connect_cfm(struct hci_conn *hcon, __u8 status)
1408 BT_DBG("hcon %p bdaddr %pMR status %u", hcon, &hcon->dst, status);
1411 struct sco_conn *conn;
1413 conn = sco_conn_add(hcon);
1415 sco_conn_ready(conn);
1417 sco_conn_del(hcon, bt_to_errno(status));
1420 static void sco_disconn_cfm(struct hci_conn *hcon, __u8 reason)
1422 BT_DBG("hcon %p reason %d", hcon, reason);
1424 sco_conn_del(hcon, bt_to_errno(reason));
1427 void sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
1429 struct sco_conn *conn = hcon->sco_data;
1434 BT_DBG("conn %p len %u", conn, skb->len);
1437 sco_recv_frame(conn, skb);
1445 static struct hci_cb sco_cb = {
1448 .connect_cfm = sco_connect_cfm,
1449 .disconn_cfm = sco_disconn_cfm,
1452 static int sco_debugfs_show(struct seq_file *f, void *p)
1456 read_lock(&sco_sk_list.lock);
1458 sk_for_each(sk, &sco_sk_list.head) {
1459 seq_printf(f, "%pMR %pMR %d\n", &sco_pi(sk)->src,
1460 &sco_pi(sk)->dst, sk->sk_state);
1463 read_unlock(&sco_sk_list.lock);
1468 DEFINE_SHOW_ATTRIBUTE(sco_debugfs);
1470 static struct dentry *sco_debugfs;
1472 static const struct proto_ops sco_sock_ops = {
1473 .family = PF_BLUETOOTH,
1474 .owner = THIS_MODULE,
1475 .release = sco_sock_release,
1476 .bind = sco_sock_bind,
1477 .connect = sco_sock_connect,
1478 .listen = sco_sock_listen,
1479 .accept = sco_sock_accept,
1480 .getname = sco_sock_getname,
1481 .sendmsg = sco_sock_sendmsg,
1482 .recvmsg = sco_sock_recvmsg,
1483 .poll = bt_sock_poll,
1484 .ioctl = bt_sock_ioctl,
1485 .gettstamp = sock_gettstamp,
1486 .mmap = sock_no_mmap,
1487 .socketpair = sock_no_socketpair,
1488 .shutdown = sco_sock_shutdown,
1489 .setsockopt = sco_sock_setsockopt,
1490 .getsockopt = sco_sock_getsockopt
1493 static const struct net_proto_family sco_sock_family_ops = {
1494 .family = PF_BLUETOOTH,
1495 .owner = THIS_MODULE,
1496 .create = sco_sock_create,
1499 int __init sco_init(void)
1503 BUILD_BUG_ON(sizeof(struct sockaddr_sco) > sizeof(struct sockaddr));
1505 err = proto_register(&sco_proto, 0);
1509 err = bt_sock_register(BTPROTO_SCO, &sco_sock_family_ops);
1511 BT_ERR("SCO socket registration failed");
1515 err = bt_procfs_init(&init_net, "sco", &sco_sk_list, NULL);
1517 BT_ERR("Failed to create SCO proc file");
1518 bt_sock_unregister(BTPROTO_SCO);
1522 BT_INFO("SCO socket layer initialized");
1524 hci_register_cb(&sco_cb);
1526 if (IS_ERR_OR_NULL(bt_debugfs))
1529 sco_debugfs = debugfs_create_file("sco", 0444, bt_debugfs,
1530 NULL, &sco_debugfs_fops);
1535 proto_unregister(&sco_proto);
1541 bt_procfs_cleanup(&init_net, "sco");
1543 debugfs_remove(sco_debugfs);
1545 hci_unregister_cb(&sco_cb);
1547 bt_sock_unregister(BTPROTO_SCO);
1549 proto_unregister(&sco_proto);
1552 module_param(disable_esco, bool, 0644);
1553 MODULE_PARM_DESC(disable_esco, "Disable eSCO connection creation");