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;
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 sock *sk)
240 struct sco_conn *conn;
241 struct hci_conn *hcon;
242 struct hci_dev *hdev;
245 BT_DBG("%pMR -> %pMR", &sco_pi(sk)->src, &sco_pi(sk)->dst);
247 hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src, BDADDR_BREDR);
249 return -EHOSTUNREACH;
253 if (lmp_esco_capable(hdev) && !disable_esco)
258 if (sco_pi(sk)->setting == BT_VOICE_TRANSPARENT &&
259 (!lmp_transp_capable(hdev) || !lmp_esco_capable(hdev))) {
264 hcon = hci_connect_sco(hdev, type, &sco_pi(sk)->dst,
265 sco_pi(sk)->setting, &sco_pi(sk)->codec);
271 hci_dev_unlock(hdev);
274 conn = sco_conn_add(hcon);
280 err = sco_chan_add(conn, sk, NULL);
286 /* Update source addr of the socket */
287 bacpy(&sco_pi(sk)->src, &hcon->src);
289 if (hcon->state == BT_CONNECTED) {
290 sco_sock_clear_timer(sk);
291 sk->sk_state = BT_CONNECTED;
293 sk->sk_state = BT_CONNECT;
294 sco_sock_set_timer(sk, sk->sk_sndtimeo);
302 hci_dev_unlock(hdev);
307 static int sco_send_frame(struct sock *sk, struct sk_buff *skb)
309 struct sco_conn *conn = sco_pi(sk)->conn;
312 /* Check outgoing MTU */
316 BT_DBG("sk %p len %d", sk, len);
318 hci_send_sco(conn->hcon, skb);
323 static void sco_recv_frame(struct sco_conn *conn, struct sk_buff *skb)
329 sco_conn_unlock(conn);
334 BT_DBG("sk %p len %u", sk, skb->len);
336 if (sk->sk_state != BT_CONNECTED)
339 if (!sock_queue_rcv_skb(sk, skb))
346 /* -------- Socket interface ---------- */
347 static struct sock *__sco_get_sock_listen_by_addr(bdaddr_t *ba)
351 sk_for_each(sk, &sco_sk_list.head) {
352 if (sk->sk_state != BT_LISTEN)
355 if (!bacmp(&sco_pi(sk)->src, ba))
362 /* Find socket listening on source bdaddr.
363 * Returns closest match.
365 static struct sock *sco_get_sock_listen(bdaddr_t *src)
367 struct sock *sk = NULL, *sk1 = NULL;
369 read_lock(&sco_sk_list.lock);
371 sk_for_each(sk, &sco_sk_list.head) {
372 if (sk->sk_state != BT_LISTEN)
376 if (!bacmp(&sco_pi(sk)->src, src))
380 if (!bacmp(&sco_pi(sk)->src, BDADDR_ANY))
384 read_unlock(&sco_sk_list.lock);
386 return sk ? sk : sk1;
389 static void sco_sock_destruct(struct sock *sk)
393 skb_queue_purge(&sk->sk_receive_queue);
394 skb_queue_purge(&sk->sk_write_queue);
397 static void sco_sock_cleanup_listen(struct sock *parent)
401 BT_DBG("parent %p", parent);
403 /* Close not yet accepted channels */
404 while ((sk = bt_accept_dequeue(parent, NULL))) {
409 parent->sk_state = BT_CLOSED;
410 sock_set_flag(parent, SOCK_ZAPPED);
413 /* Kill socket (only if zapped and orphan)
414 * Must be called on unlocked socket.
416 static void sco_sock_kill(struct sock *sk)
418 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
421 BT_DBG("sk %p state %d", sk, sk->sk_state);
423 /* Kill poor orphan */
424 bt_sock_unlink(&sco_sk_list, sk);
425 sock_set_flag(sk, SOCK_DEAD);
429 static void __sco_sock_close(struct sock *sk)
431 BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
433 switch (sk->sk_state) {
435 sco_sock_cleanup_listen(sk);
440 if (sco_pi(sk)->conn->hcon) {
441 sk->sk_state = BT_DISCONN;
442 sco_sock_set_timer(sk, SCO_DISCONN_TIMEOUT);
443 sco_conn_lock(sco_pi(sk)->conn);
444 hci_conn_drop(sco_pi(sk)->conn->hcon);
445 sco_pi(sk)->conn->hcon = NULL;
446 sco_conn_unlock(sco_pi(sk)->conn);
448 sco_chan_del(sk, ECONNRESET);
454 sco_chan_del(sk, ECONNRESET);
458 sock_set_flag(sk, SOCK_ZAPPED);
464 /* Must be called on unlocked socket. */
465 static void sco_sock_close(struct sock *sk)
468 sco_sock_clear_timer(sk);
469 __sco_sock_close(sk);
473 static void sco_skb_put_cmsg(struct sk_buff *skb, struct msghdr *msg,
476 if (sco_pi(sk)->cmsg_mask & SCO_CMSG_PKT_STATUS)
477 put_cmsg(msg, SOL_BLUETOOTH, BT_SCM_PKT_STATUS,
478 sizeof(bt_cb(skb)->sco.pkt_status),
479 &bt_cb(skb)->sco.pkt_status);
482 static void sco_sock_init(struct sock *sk, struct sock *parent)
487 sk->sk_type = parent->sk_type;
488 bt_sk(sk)->flags = bt_sk(parent)->flags;
489 security_sk_clone(parent, sk);
491 bt_sk(sk)->skb_put_cmsg = sco_skb_put_cmsg;
495 static struct proto sco_proto = {
497 .owner = THIS_MODULE,
498 .obj_size = sizeof(struct sco_pinfo)
501 static struct sock *sco_sock_alloc(struct net *net, struct socket *sock,
502 int proto, gfp_t prio, int kern)
506 sk = sk_alloc(net, PF_BLUETOOTH, prio, &sco_proto, kern);
510 sock_init_data(sock, sk);
511 INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
513 sk->sk_destruct = sco_sock_destruct;
514 sk->sk_sndtimeo = SCO_CONN_TIMEOUT;
516 sock_reset_flag(sk, SOCK_ZAPPED);
518 sk->sk_protocol = proto;
519 sk->sk_state = BT_OPEN;
521 sco_pi(sk)->setting = BT_VOICE_CVSD_16BIT;
522 sco_pi(sk)->codec.id = BT_CODEC_CVSD;
523 sco_pi(sk)->codec.cid = 0xffff;
524 sco_pi(sk)->codec.vid = 0xffff;
525 sco_pi(sk)->codec.data_path = 0x00;
527 bt_sock_link(&sco_sk_list, sk);
531 static int sco_sock_create(struct net *net, struct socket *sock, int protocol,
536 BT_DBG("sock %p", sock);
538 sock->state = SS_UNCONNECTED;
540 if (sock->type != SOCK_SEQPACKET)
541 return -ESOCKTNOSUPPORT;
543 sock->ops = &sco_sock_ops;
545 sk = sco_sock_alloc(net, sock, protocol, GFP_ATOMIC, kern);
549 sco_sock_init(sk, NULL);
553 static int sco_sock_bind(struct socket *sock, struct sockaddr *addr,
556 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
557 struct sock *sk = sock->sk;
560 if (!addr || addr_len < sizeof(struct sockaddr_sco) ||
561 addr->sa_family != AF_BLUETOOTH)
564 BT_DBG("sk %p %pMR", sk, &sa->sco_bdaddr);
568 if (sk->sk_state != BT_OPEN) {
573 if (sk->sk_type != SOCK_SEQPACKET) {
578 bacpy(&sco_pi(sk)->src, &sa->sco_bdaddr);
580 sk->sk_state = BT_BOUND;
587 static int sco_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
589 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
590 struct sock *sk = sock->sk;
595 if (alen < sizeof(struct sockaddr_sco) ||
596 addr->sa_family != AF_BLUETOOTH)
599 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND)
602 if (sk->sk_type != SOCK_SEQPACKET)
606 /* Set destination address and psm */
607 bacpy(&sco_pi(sk)->dst, &sa->sco_bdaddr);
610 err = sco_connect(sk);
616 err = bt_sock_wait_state(sk, BT_CONNECTED,
617 sock_sndtimeo(sk, flags & O_NONBLOCK));
623 static int sco_sock_listen(struct socket *sock, int backlog)
625 struct sock *sk = sock->sk;
626 bdaddr_t *src = &sco_pi(sk)->src;
629 BT_DBG("sk %p backlog %d", sk, backlog);
633 if (sk->sk_state != BT_BOUND) {
638 if (sk->sk_type != SOCK_SEQPACKET) {
643 write_lock(&sco_sk_list.lock);
645 if (__sco_get_sock_listen_by_addr(src)) {
650 sk->sk_max_ack_backlog = backlog;
651 sk->sk_ack_backlog = 0;
653 sk->sk_state = BT_LISTEN;
656 write_unlock(&sco_sk_list.lock);
663 static int sco_sock_accept(struct socket *sock, struct socket *newsock,
664 int flags, bool kern)
666 DEFINE_WAIT_FUNC(wait, woken_wake_function);
667 struct sock *sk = sock->sk, *ch;
673 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
675 BT_DBG("sk %p timeo %ld", sk, timeo);
677 /* Wait for an incoming connection. (wake-one). */
678 add_wait_queue_exclusive(sk_sleep(sk), &wait);
680 if (sk->sk_state != BT_LISTEN) {
685 ch = bt_accept_dequeue(sk, newsock);
694 if (signal_pending(current)) {
695 err = sock_intr_errno(timeo);
701 timeo = wait_woken(&wait, TASK_INTERRUPTIBLE, timeo);
704 remove_wait_queue(sk_sleep(sk), &wait);
709 newsock->state = SS_CONNECTED;
711 BT_DBG("new socket %p", ch);
718 static int sco_sock_getname(struct socket *sock, struct sockaddr *addr,
721 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
722 struct sock *sk = sock->sk;
724 BT_DBG("sock %p, sk %p", sock, sk);
726 addr->sa_family = AF_BLUETOOTH;
729 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->dst);
731 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->src);
733 return sizeof(struct sockaddr_sco);
736 static int sco_sock_sendmsg(struct socket *sock, struct msghdr *msg,
739 struct sock *sk = sock->sk;
743 BT_DBG("sock %p, sk %p", sock, sk);
745 err = sock_error(sk);
749 if (msg->msg_flags & MSG_OOB)
752 skb = bt_skb_sendmsg(sk, msg, len, len, 0, 0);
758 if (sk->sk_state == BT_CONNECTED)
759 err = sco_send_frame(sk, skb);
770 static void sco_conn_defer_accept(struct hci_conn *conn, u16 setting)
772 struct hci_dev *hdev = conn->hdev;
774 BT_DBG("conn %p", conn);
776 conn->state = BT_CONFIG;
778 if (!lmp_esco_capable(hdev)) {
779 struct hci_cp_accept_conn_req cp;
781 bacpy(&cp.bdaddr, &conn->dst);
782 cp.role = 0x00; /* Ignored */
784 hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ, sizeof(cp), &cp);
786 struct hci_cp_accept_sync_conn_req cp;
788 bacpy(&cp.bdaddr, &conn->dst);
789 cp.pkt_type = cpu_to_le16(conn->pkt_type);
791 cp.tx_bandwidth = cpu_to_le32(0x00001f40);
792 cp.rx_bandwidth = cpu_to_le32(0x00001f40);
793 cp.content_format = cpu_to_le16(setting);
795 switch (setting & SCO_AIRMODE_MASK) {
796 case SCO_AIRMODE_TRANSP:
797 if (conn->pkt_type & ESCO_2EV3)
798 cp.max_latency = cpu_to_le16(0x0008);
800 cp.max_latency = cpu_to_le16(0x000D);
801 cp.retrans_effort = 0x02;
803 case SCO_AIRMODE_CVSD:
804 cp.max_latency = cpu_to_le16(0xffff);
805 cp.retrans_effort = 0xff;
808 /* use CVSD settings as fallback */
809 cp.max_latency = cpu_to_le16(0xffff);
810 cp.retrans_effort = 0xff;
814 hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
819 static int sco_sock_recvmsg(struct socket *sock, struct msghdr *msg,
820 size_t len, int flags)
822 struct sock *sk = sock->sk;
823 struct sco_pinfo *pi = sco_pi(sk);
827 if (sk->sk_state == BT_CONNECT2 &&
828 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
829 sco_conn_defer_accept(pi->conn->hcon, pi->setting);
830 sk->sk_state = BT_CONFIG;
838 return bt_sock_recvmsg(sock, msg, len, flags);
841 static int sco_sock_setsockopt(struct socket *sock, int level, int optname,
842 sockptr_t optval, unsigned int optlen)
844 struct sock *sk = sock->sk;
846 struct bt_voice voice;
848 struct bt_codecs *codecs;
849 struct hci_dev *hdev;
859 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
864 if (copy_from_sockptr(&opt, optval, sizeof(u32))) {
870 set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
872 clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
876 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND &&
877 sk->sk_state != BT_CONNECT2) {
882 voice.setting = sco_pi(sk)->setting;
884 len = min_t(unsigned int, sizeof(voice), optlen);
885 if (copy_from_sockptr(&voice, optval, len)) {
890 /* Explicitly check for these values */
891 if (voice.setting != BT_VOICE_TRANSPARENT &&
892 voice.setting != BT_VOICE_CVSD_16BIT) {
897 sco_pi(sk)->setting = voice.setting;
898 hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src,
904 if (enhanced_sync_conn_capable(hdev) &&
905 voice.setting == BT_VOICE_TRANSPARENT)
906 sco_pi(sk)->codec.id = BT_CODEC_TRANSPARENT;
911 if (copy_from_sockptr(&opt, optval, sizeof(u32))) {
917 sco_pi(sk)->cmsg_mask |= SCO_CMSG_PKT_STATUS;
919 sco_pi(sk)->cmsg_mask &= SCO_CMSG_PKT_STATUS;
923 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND &&
924 sk->sk_state != BT_CONNECT2) {
929 hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src,
936 if (!hci_dev_test_flag(hdev, HCI_OFFLOAD_CODECS_ENABLED)) {
942 if (!hdev->get_data_path_id) {
948 if (optlen < sizeof(struct bt_codecs) ||
949 optlen > sizeof(buffer)) {
955 if (copy_from_sockptr(buffer, optval, optlen)) {
961 codecs = (void *)buffer;
963 if (codecs->num_codecs > 1) {
969 sco_pi(sk)->codec = codecs->codecs[0];
982 static int sco_sock_getsockopt_old(struct socket *sock, int optname,
983 char __user *optval, int __user *optlen)
985 struct sock *sk = sock->sk;
986 struct sco_options opts;
987 struct sco_conninfo cinfo;
992 if (get_user(len, optlen))
999 if (sk->sk_state != BT_CONNECTED &&
1000 !(sk->sk_state == BT_CONNECT2 &&
1001 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
1006 opts.mtu = sco_pi(sk)->conn->mtu;
1008 BT_DBG("mtu %u", opts.mtu);
1010 len = min_t(unsigned int, len, sizeof(opts));
1011 if (copy_to_user(optval, (char *)&opts, len))
1017 if (sk->sk_state != BT_CONNECTED &&
1018 !(sk->sk_state == BT_CONNECT2 &&
1019 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
1024 memset(&cinfo, 0, sizeof(cinfo));
1025 cinfo.hci_handle = sco_pi(sk)->conn->hcon->handle;
1026 memcpy(cinfo.dev_class, sco_pi(sk)->conn->hcon->dev_class, 3);
1028 len = min_t(unsigned int, len, sizeof(cinfo));
1029 if (copy_to_user(optval, (char *)&cinfo, len))
1043 static int sco_sock_getsockopt(struct socket *sock, int level, int optname,
1044 char __user *optval, int __user *optlen)
1046 struct sock *sk = sock->sk;
1048 struct bt_voice voice;
1052 struct codec_list *c;
1053 u8 num_codecs, i, __user *ptr;
1054 struct hci_dev *hdev;
1055 struct hci_codec_caps *caps;
1056 struct bt_codec codec;
1058 BT_DBG("sk %p", sk);
1060 if (level == SOL_SCO)
1061 return sco_sock_getsockopt_old(sock, optname, optval, optlen);
1063 if (get_user(len, optlen))
1070 case BT_DEFER_SETUP:
1071 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
1076 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
1077 (u32 __user *)optval))
1083 voice.setting = sco_pi(sk)->setting;
1085 len = min_t(unsigned int, len, sizeof(voice));
1086 if (copy_to_user(optval, (char *)&voice, len))
1092 if (sk->sk_state != BT_CONNECTED) {
1097 phys = hci_conn_get_phy(sco_pi(sk)->conn->hcon);
1099 if (put_user(phys, (u32 __user *) optval))
1104 pkt_status = (sco_pi(sk)->cmsg_mask & SCO_CMSG_PKT_STATUS);
1106 if (put_user(pkt_status, (int __user *)optval))
1112 if (sk->sk_state != BT_CONNECTED) {
1117 if (put_user(sco_pi(sk)->conn->mtu, (u32 __user *)optval))
1125 hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src, BDADDR_BREDR);
1131 if (!hci_dev_test_flag(hdev, HCI_OFFLOAD_CODECS_ENABLED)) {
1137 if (!hdev->get_data_path_id) {
1145 /* find total buffer size required to copy codec + caps */
1147 list_for_each_entry(c, &hdev->local_codecs, list) {
1148 if (c->transport != HCI_TRANSPORT_SCO_ESCO)
1151 for (i = 0, caps = c->caps; i < c->num_caps; i++) {
1152 buf_len += 1 + caps->len;
1153 caps = (void *)&caps->data[caps->len];
1155 buf_len += sizeof(struct bt_codec);
1157 hci_dev_unlock(hdev);
1159 buf_len += sizeof(struct bt_codecs);
1160 if (buf_len > len) {
1166 if (put_user(num_codecs, ptr)) {
1170 ptr += sizeof(num_codecs);
1172 /* Iterate all the codecs supported over SCO and populate
1176 list_for_each_entry(c, &hdev->local_codecs, list) {
1177 if (c->transport != HCI_TRANSPORT_SCO_ESCO)
1183 err = hdev->get_data_path_id(hdev, &codec.data_path);
1186 codec.num_caps = c->num_caps;
1187 if (copy_to_user(ptr, &codec, sizeof(codec))) {
1191 ptr += sizeof(codec);
1193 /* find codec capabilities data length */
1195 for (i = 0, caps = c->caps; i < c->num_caps; i++) {
1196 len += 1 + caps->len;
1197 caps = (void *)&caps->data[caps->len];
1200 /* copy codec capabilities data */
1201 if (len && copy_to_user(ptr, c->caps, len)) {
1208 hci_dev_unlock(hdev);
1213 if (!err && put_user(buf_len, optlen))
1227 static int sco_sock_shutdown(struct socket *sock, int how)
1229 struct sock *sk = sock->sk;
1232 BT_DBG("sock %p, sk %p", sock, sk);
1240 if (!sk->sk_shutdown) {
1241 sk->sk_shutdown = SHUTDOWN_MASK;
1242 sco_sock_clear_timer(sk);
1243 __sco_sock_close(sk);
1245 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
1246 !(current->flags & PF_EXITING))
1247 err = bt_sock_wait_state(sk, BT_CLOSED,
1257 static int sco_sock_release(struct socket *sock)
1259 struct sock *sk = sock->sk;
1262 BT_DBG("sock %p, sk %p", sock, sk);
1269 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
1270 !(current->flags & PF_EXITING)) {
1272 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
1281 static void sco_conn_ready(struct sco_conn *conn)
1283 struct sock *parent;
1284 struct sock *sk = conn->sk;
1286 BT_DBG("conn %p", conn);
1290 sco_sock_clear_timer(sk);
1291 sk->sk_state = BT_CONNECTED;
1292 sk->sk_state_change(sk);
1295 sco_conn_lock(conn);
1298 sco_conn_unlock(conn);
1302 parent = sco_get_sock_listen(&conn->hcon->src);
1304 sco_conn_unlock(conn);
1310 sk = sco_sock_alloc(sock_net(parent), NULL,
1311 BTPROTO_SCO, GFP_ATOMIC, 0);
1313 release_sock(parent);
1314 sco_conn_unlock(conn);
1318 sco_sock_init(sk, parent);
1320 bacpy(&sco_pi(sk)->src, &conn->hcon->src);
1321 bacpy(&sco_pi(sk)->dst, &conn->hcon->dst);
1323 hci_conn_hold(conn->hcon);
1324 __sco_chan_add(conn, sk, parent);
1326 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(parent)->flags))
1327 sk->sk_state = BT_CONNECT2;
1329 sk->sk_state = BT_CONNECTED;
1331 /* Wake up parent */
1332 parent->sk_data_ready(parent);
1334 release_sock(parent);
1336 sco_conn_unlock(conn);
1340 /* ----- SCO interface with lower layer (HCI) ----- */
1341 int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags)
1346 BT_DBG("hdev %s, bdaddr %pMR", hdev->name, bdaddr);
1348 /* Find listening sockets */
1349 read_lock(&sco_sk_list.lock);
1350 sk_for_each(sk, &sco_sk_list.head) {
1351 if (sk->sk_state != BT_LISTEN)
1354 if (!bacmp(&sco_pi(sk)->src, &hdev->bdaddr) ||
1355 !bacmp(&sco_pi(sk)->src, BDADDR_ANY)) {
1356 lm |= HCI_LM_ACCEPT;
1358 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))
1359 *flags |= HCI_PROTO_DEFER;
1363 read_unlock(&sco_sk_list.lock);
1368 static void sco_connect_cfm(struct hci_conn *hcon, __u8 status)
1370 if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
1373 BT_DBG("hcon %p bdaddr %pMR status %u", hcon, &hcon->dst, status);
1376 struct sco_conn *conn;
1378 conn = sco_conn_add(hcon);
1380 sco_conn_ready(conn);
1382 sco_conn_del(hcon, bt_to_errno(status));
1385 static void sco_disconn_cfm(struct hci_conn *hcon, __u8 reason)
1387 if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
1390 BT_DBG("hcon %p reason %d", hcon, reason);
1392 sco_conn_del(hcon, bt_to_errno(reason));
1395 void sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
1397 struct sco_conn *conn = hcon->sco_data;
1402 BT_DBG("conn %p len %u", conn, skb->len);
1405 sco_recv_frame(conn, skb);
1413 static struct hci_cb sco_cb = {
1415 .connect_cfm = sco_connect_cfm,
1416 .disconn_cfm = sco_disconn_cfm,
1419 static int sco_debugfs_show(struct seq_file *f, void *p)
1423 read_lock(&sco_sk_list.lock);
1425 sk_for_each(sk, &sco_sk_list.head) {
1426 seq_printf(f, "%pMR %pMR %d\n", &sco_pi(sk)->src,
1427 &sco_pi(sk)->dst, sk->sk_state);
1430 read_unlock(&sco_sk_list.lock);
1435 DEFINE_SHOW_ATTRIBUTE(sco_debugfs);
1437 static struct dentry *sco_debugfs;
1439 static const struct proto_ops sco_sock_ops = {
1440 .family = PF_BLUETOOTH,
1441 .owner = THIS_MODULE,
1442 .release = sco_sock_release,
1443 .bind = sco_sock_bind,
1444 .connect = sco_sock_connect,
1445 .listen = sco_sock_listen,
1446 .accept = sco_sock_accept,
1447 .getname = sco_sock_getname,
1448 .sendmsg = sco_sock_sendmsg,
1449 .recvmsg = sco_sock_recvmsg,
1450 .poll = bt_sock_poll,
1451 .ioctl = bt_sock_ioctl,
1452 .gettstamp = sock_gettstamp,
1453 .mmap = sock_no_mmap,
1454 .socketpair = sock_no_socketpair,
1455 .shutdown = sco_sock_shutdown,
1456 .setsockopt = sco_sock_setsockopt,
1457 .getsockopt = sco_sock_getsockopt
1460 static const struct net_proto_family sco_sock_family_ops = {
1461 .family = PF_BLUETOOTH,
1462 .owner = THIS_MODULE,
1463 .create = sco_sock_create,
1466 int __init sco_init(void)
1470 BUILD_BUG_ON(sizeof(struct sockaddr_sco) > sizeof(struct sockaddr));
1472 err = proto_register(&sco_proto, 0);
1476 err = bt_sock_register(BTPROTO_SCO, &sco_sock_family_ops);
1478 BT_ERR("SCO socket registration failed");
1482 err = bt_procfs_init(&init_net, "sco", &sco_sk_list, NULL);
1484 BT_ERR("Failed to create SCO proc file");
1485 bt_sock_unregister(BTPROTO_SCO);
1489 BT_INFO("SCO socket layer initialized");
1491 hci_register_cb(&sco_cb);
1493 if (IS_ERR_OR_NULL(bt_debugfs))
1496 sco_debugfs = debugfs_create_file("sco", 0444, bt_debugfs,
1497 NULL, &sco_debugfs_fops);
1502 proto_unregister(&sco_proto);
1508 bt_procfs_cleanup(&init_net, "sco");
1510 debugfs_remove(sco_debugfs);
1512 hci_unregister_cb(&sco_cb);
1514 bt_sock_unregister(BTPROTO_SCO);
1516 proto_unregister(&sco_proto);
1519 module_param(disable_esco, bool, 0644);
1520 MODULE_PARM_DESC(disable_esco, "Disable eSCO connection creation");