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)
71 struct sco_conn *conn;
74 /* ---- SCO timers ---- */
75 #define SCO_CONN_TIMEOUT (HZ * 40)
76 #define SCO_DISCONN_TIMEOUT (HZ * 2)
78 static void sco_sock_timeout(struct work_struct *work)
80 struct sco_conn *conn = container_of(work, struct sco_conn,
88 sco_conn_unlock(conn);
93 BT_DBG("sock %p state %d", sk, sk->sk_state);
96 sk->sk_err = ETIMEDOUT;
97 sk->sk_state_change(sk);
103 static void sco_sock_set_timer(struct sock *sk, long timeout)
105 if (!sco_pi(sk)->conn)
108 BT_DBG("sock %p state %d timeout %ld", sk, sk->sk_state, timeout);
109 cancel_delayed_work(&sco_pi(sk)->conn->timeout_work);
110 schedule_delayed_work(&sco_pi(sk)->conn->timeout_work, timeout);
113 static void sco_sock_clear_timer(struct sock *sk)
115 if (!sco_pi(sk)->conn)
118 BT_DBG("sock %p state %d", sk, sk->sk_state);
119 cancel_delayed_work(&sco_pi(sk)->conn->timeout_work);
122 /* ---- SCO connections ---- */
123 static struct sco_conn *sco_conn_add(struct hci_conn *hcon)
125 struct hci_dev *hdev = hcon->hdev;
126 struct sco_conn *conn = hcon->sco_data;
131 conn = kzalloc(sizeof(struct sco_conn), GFP_KERNEL);
135 spin_lock_init(&conn->lock);
136 INIT_DELAYED_WORK(&conn->timeout_work, sco_sock_timeout);
138 hcon->sco_data = conn;
141 if (hdev->sco_mtu > 0)
142 conn->mtu = hdev->sco_mtu;
146 BT_DBG("hcon %p conn %p", hcon, conn);
152 * Must be called on the locked socket. */
153 static void sco_chan_del(struct sock *sk, int err)
155 struct sco_conn *conn;
157 conn = sco_pi(sk)->conn;
159 BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
164 sco_pi(sk)->conn = NULL;
165 sco_conn_unlock(conn);
168 hci_conn_drop(conn->hcon);
171 sk->sk_state = BT_CLOSED;
173 sk->sk_state_change(sk);
175 sock_set_flag(sk, SOCK_ZAPPED);
178 static void sco_conn_del(struct hci_conn *hcon, int err)
180 struct sco_conn *conn = hcon->sco_data;
186 BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
191 sco_conn_unlock(conn);
196 sco_sock_clear_timer(sk);
197 sco_chan_del(sk, err);
202 /* Ensure no more work items will run before freeing conn. */
203 cancel_delayed_work_sync(&conn->timeout_work);
205 hcon->sco_data = NULL;
209 static void __sco_chan_add(struct sco_conn *conn, struct sock *sk,
212 BT_DBG("conn %p", conn);
214 sco_pi(sk)->conn = conn;
218 bt_accept_enqueue(parent, sk, true);
221 static int sco_chan_add(struct sco_conn *conn, struct sock *sk,
230 __sco_chan_add(conn, sk, parent);
232 sco_conn_unlock(conn);
236 static int sco_connect(struct hci_dev *hdev, struct sock *sk)
238 struct sco_conn *conn;
239 struct hci_conn *hcon;
242 BT_DBG("%pMR -> %pMR", &sco_pi(sk)->src, &sco_pi(sk)->dst);
244 if (lmp_esco_capable(hdev) && !disable_esco)
249 if (sco_pi(sk)->setting == BT_VOICE_TRANSPARENT &&
250 (!lmp_transp_capable(hdev) || !lmp_esco_capable(hdev)))
253 hcon = hci_connect_sco(hdev, type, &sco_pi(sk)->dst,
254 sco_pi(sk)->setting);
256 return PTR_ERR(hcon);
258 conn = sco_conn_add(hcon);
264 /* Update source addr of the socket */
265 bacpy(&sco_pi(sk)->src, &hcon->src);
267 err = sco_chan_add(conn, sk, NULL);
271 if (hcon->state == BT_CONNECTED) {
272 sco_sock_clear_timer(sk);
273 sk->sk_state = BT_CONNECTED;
275 sk->sk_state = BT_CONNECT;
276 sco_sock_set_timer(sk, sk->sk_sndtimeo);
282 static int sco_send_frame(struct sock *sk, void *buf, int len,
283 unsigned int msg_flags)
285 struct sco_conn *conn = sco_pi(sk)->conn;
289 /* Check outgoing MTU */
293 BT_DBG("sk %p len %d", sk, len);
295 skb = bt_skb_send_alloc(sk, len, msg_flags & MSG_DONTWAIT, &err);
299 memcpy(skb_put(skb, len), buf, len);
300 hci_send_sco(conn->hcon, skb);
305 static void sco_recv_frame(struct sco_conn *conn, struct sk_buff *skb)
311 sco_conn_unlock(conn);
316 BT_DBG("sk %p len %d", sk, skb->len);
318 if (sk->sk_state != BT_CONNECTED)
321 if (!sock_queue_rcv_skb(sk, skb))
328 /* -------- Socket interface ---------- */
329 static struct sock *__sco_get_sock_listen_by_addr(bdaddr_t *ba)
333 sk_for_each(sk, &sco_sk_list.head) {
334 if (sk->sk_state != BT_LISTEN)
337 if (!bacmp(&sco_pi(sk)->src, ba))
344 /* Find socket listening on source bdaddr.
345 * Returns closest match.
347 static struct sock *sco_get_sock_listen(bdaddr_t *src)
349 struct sock *sk = NULL, *sk1 = NULL;
351 read_lock(&sco_sk_list.lock);
353 sk_for_each(sk, &sco_sk_list.head) {
354 if (sk->sk_state != BT_LISTEN)
358 if (!bacmp(&sco_pi(sk)->src, src))
362 if (!bacmp(&sco_pi(sk)->src, BDADDR_ANY))
366 read_unlock(&sco_sk_list.lock);
368 return sk ? sk : sk1;
371 static void sco_sock_destruct(struct sock *sk)
375 skb_queue_purge(&sk->sk_receive_queue);
376 skb_queue_purge(&sk->sk_write_queue);
379 static void sco_sock_cleanup_listen(struct sock *parent)
383 BT_DBG("parent %p", parent);
385 /* Close not yet accepted channels */
386 while ((sk = bt_accept_dequeue(parent, NULL))) {
391 parent->sk_state = BT_CLOSED;
392 sock_set_flag(parent, SOCK_ZAPPED);
395 /* Kill socket (only if zapped and orphan)
396 * Must be called on unlocked socket.
398 static void sco_sock_kill(struct sock *sk)
400 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
403 BT_DBG("sk %p state %d", sk, sk->sk_state);
405 /* Kill poor orphan */
406 bt_sock_unlink(&sco_sk_list, sk);
407 sock_set_flag(sk, SOCK_DEAD);
411 static void __sco_sock_close(struct sock *sk)
413 BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
415 switch (sk->sk_state) {
417 sco_sock_cleanup_listen(sk);
422 if (sco_pi(sk)->conn->hcon) {
423 sk->sk_state = BT_DISCONN;
424 sco_sock_set_timer(sk, SCO_DISCONN_TIMEOUT);
425 sco_conn_lock(sco_pi(sk)->conn);
426 hci_conn_drop(sco_pi(sk)->conn->hcon);
427 sco_pi(sk)->conn->hcon = NULL;
428 sco_conn_unlock(sco_pi(sk)->conn);
430 sco_chan_del(sk, ECONNRESET);
436 sco_chan_del(sk, ECONNRESET);
440 sock_set_flag(sk, SOCK_ZAPPED);
445 /* Must be called on unlocked socket. */
446 static void sco_sock_close(struct sock *sk)
448 sco_sock_clear_timer(sk);
450 __sco_sock_close(sk);
454 static void sco_sock_init(struct sock *sk, struct sock *parent)
459 sk->sk_type = parent->sk_type;
460 bt_sk(sk)->flags = bt_sk(parent)->flags;
461 security_sk_clone(parent, sk);
465 static struct proto sco_proto = {
467 .owner = THIS_MODULE,
468 .obj_size = sizeof(struct sco_pinfo)
471 static struct sock *sco_sock_alloc(struct net *net, struct socket *sock,
472 int proto, gfp_t prio, int kern)
476 sk = sk_alloc(net, PF_BLUETOOTH, prio, &sco_proto, kern);
480 sock_init_data(sock, sk);
481 INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
483 sk->sk_destruct = sco_sock_destruct;
484 sk->sk_sndtimeo = SCO_CONN_TIMEOUT;
486 sock_reset_flag(sk, SOCK_ZAPPED);
488 sk->sk_protocol = proto;
489 sk->sk_state = BT_OPEN;
491 sco_pi(sk)->setting = BT_VOICE_CVSD_16BIT;
493 bt_sock_link(&sco_sk_list, sk);
497 static int sco_sock_create(struct net *net, struct socket *sock, int protocol,
502 BT_DBG("sock %p", sock);
504 sock->state = SS_UNCONNECTED;
506 if (sock->type != SOCK_SEQPACKET)
507 return -ESOCKTNOSUPPORT;
509 sock->ops = &sco_sock_ops;
511 sk = sco_sock_alloc(net, sock, protocol, GFP_ATOMIC, kern);
515 sco_sock_init(sk, NULL);
519 static int sco_sock_bind(struct socket *sock, struct sockaddr *addr,
522 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
523 struct sock *sk = sock->sk;
526 if (!addr || addr_len < sizeof(struct sockaddr_sco) ||
527 addr->sa_family != AF_BLUETOOTH)
530 BT_DBG("sk %p %pMR", sk, &sa->sco_bdaddr);
534 if (sk->sk_state != BT_OPEN) {
539 if (sk->sk_type != SOCK_SEQPACKET) {
544 bacpy(&sco_pi(sk)->src, &sa->sco_bdaddr);
546 sk->sk_state = BT_BOUND;
553 static int sco_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
555 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
556 struct sock *sk = sock->sk;
557 struct hci_dev *hdev;
562 if (alen < sizeof(struct sockaddr_sco) ||
563 addr->sa_family != AF_BLUETOOTH)
567 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND) {
572 if (sk->sk_type != SOCK_SEQPACKET) {
577 hdev = hci_get_route(&sa->sco_bdaddr, &sco_pi(sk)->src, BDADDR_BREDR);
584 /* Set destination address and psm */
585 bacpy(&sco_pi(sk)->dst, &sa->sco_bdaddr);
587 err = sco_connect(hdev, sk);
588 hci_dev_unlock(hdev);
593 err = bt_sock_wait_state(sk, BT_CONNECTED,
594 sock_sndtimeo(sk, flags & O_NONBLOCK));
601 static int sco_sock_listen(struct socket *sock, int backlog)
603 struct sock *sk = sock->sk;
604 bdaddr_t *src = &sco_pi(sk)->src;
607 BT_DBG("sk %p backlog %d", sk, backlog);
611 if (sk->sk_state != BT_BOUND) {
616 if (sk->sk_type != SOCK_SEQPACKET) {
621 write_lock(&sco_sk_list.lock);
623 if (__sco_get_sock_listen_by_addr(src)) {
628 sk->sk_max_ack_backlog = backlog;
629 sk->sk_ack_backlog = 0;
631 sk->sk_state = BT_LISTEN;
634 write_unlock(&sco_sk_list.lock);
641 static int sco_sock_accept(struct socket *sock, struct socket *newsock,
642 int flags, bool kern)
644 DEFINE_WAIT_FUNC(wait, woken_wake_function);
645 struct sock *sk = sock->sk, *ch;
651 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
653 BT_DBG("sk %p timeo %ld", sk, timeo);
655 /* Wait for an incoming connection. (wake-one). */
656 add_wait_queue_exclusive(sk_sleep(sk), &wait);
658 if (sk->sk_state != BT_LISTEN) {
663 ch = bt_accept_dequeue(sk, newsock);
672 if (signal_pending(current)) {
673 err = sock_intr_errno(timeo);
679 timeo = wait_woken(&wait, TASK_INTERRUPTIBLE, timeo);
682 remove_wait_queue(sk_sleep(sk), &wait);
687 newsock->state = SS_CONNECTED;
689 BT_DBG("new socket %p", ch);
696 static int sco_sock_getname(struct socket *sock, struct sockaddr *addr,
699 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
700 struct sock *sk = sock->sk;
702 BT_DBG("sock %p, sk %p", sock, sk);
704 addr->sa_family = AF_BLUETOOTH;
707 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->dst);
709 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->src);
711 return sizeof(struct sockaddr_sco);
714 static int sco_sock_sendmsg(struct socket *sock, struct msghdr *msg,
717 struct sock *sk = sock->sk;
721 BT_DBG("sock %p, sk %p", sock, sk);
723 err = sock_error(sk);
727 if (msg->msg_flags & MSG_OOB)
730 buf = kmalloc(len, GFP_KERNEL);
734 if (memcpy_from_msg(buf, msg, len)) {
741 if (sk->sk_state == BT_CONNECTED)
742 err = sco_send_frame(sk, buf, len, msg->msg_flags);
751 static void sco_conn_defer_accept(struct hci_conn *conn, u16 setting)
753 struct hci_dev *hdev = conn->hdev;
755 BT_DBG("conn %p", conn);
757 conn->state = BT_CONFIG;
759 if (!lmp_esco_capable(hdev)) {
760 struct hci_cp_accept_conn_req cp;
762 bacpy(&cp.bdaddr, &conn->dst);
763 cp.role = 0x00; /* Ignored */
765 hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ, sizeof(cp), &cp);
767 struct hci_cp_accept_sync_conn_req cp;
769 bacpy(&cp.bdaddr, &conn->dst);
770 cp.pkt_type = cpu_to_le16(conn->pkt_type);
772 cp.tx_bandwidth = cpu_to_le32(0x00001f40);
773 cp.rx_bandwidth = cpu_to_le32(0x00001f40);
774 cp.content_format = cpu_to_le16(setting);
776 switch (setting & SCO_AIRMODE_MASK) {
777 case SCO_AIRMODE_TRANSP:
778 if (conn->pkt_type & ESCO_2EV3)
779 cp.max_latency = cpu_to_le16(0x0008);
781 cp.max_latency = cpu_to_le16(0x000D);
782 cp.retrans_effort = 0x02;
784 case SCO_AIRMODE_CVSD:
785 cp.max_latency = cpu_to_le16(0xffff);
786 cp.retrans_effort = 0xff;
789 /* use CVSD settings as fallback */
790 cp.max_latency = cpu_to_le16(0xffff);
791 cp.retrans_effort = 0xff;
795 hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
800 static int sco_sock_recvmsg(struct socket *sock, struct msghdr *msg,
801 size_t len, int flags)
803 struct sock *sk = sock->sk;
804 struct sco_pinfo *pi = sco_pi(sk);
808 if (sk->sk_state == BT_CONNECT2 &&
809 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
810 sco_conn_defer_accept(pi->conn->hcon, pi->setting);
811 sk->sk_state = BT_CONFIG;
819 return bt_sock_recvmsg(sock, msg, len, flags);
822 static int sco_sock_setsockopt(struct socket *sock, int level, int optname,
823 char __user *optval, unsigned int optlen)
825 struct sock *sk = sock->sk;
827 struct bt_voice voice;
837 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
842 if (get_user(opt, (u32 __user *) optval)) {
848 set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
850 clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
854 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND &&
855 sk->sk_state != BT_CONNECT2) {
860 voice.setting = sco_pi(sk)->setting;
862 len = min_t(unsigned int, sizeof(voice), optlen);
863 if (copy_from_user((char *)&voice, optval, len)) {
868 /* Explicitly check for these values */
869 if (voice.setting != BT_VOICE_TRANSPARENT &&
870 voice.setting != BT_VOICE_CVSD_16BIT) {
875 sco_pi(sk)->setting = voice.setting;
887 static int sco_sock_getsockopt_old(struct socket *sock, int optname,
888 char __user *optval, int __user *optlen)
890 struct sock *sk = sock->sk;
891 struct sco_options opts;
892 struct sco_conninfo cinfo;
897 if (get_user(len, optlen))
904 if (sk->sk_state != BT_CONNECTED &&
905 !(sk->sk_state == BT_CONNECT2 &&
906 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
911 opts.mtu = sco_pi(sk)->conn->mtu;
913 BT_DBG("mtu %d", opts.mtu);
915 len = min_t(unsigned int, len, sizeof(opts));
916 if (copy_to_user(optval, (char *)&opts, len))
922 if (sk->sk_state != BT_CONNECTED &&
923 !(sk->sk_state == BT_CONNECT2 &&
924 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
929 memset(&cinfo, 0, sizeof(cinfo));
930 cinfo.hci_handle = sco_pi(sk)->conn->hcon->handle;
931 memcpy(cinfo.dev_class, sco_pi(sk)->conn->hcon->dev_class, 3);
933 len = min_t(unsigned int, len, sizeof(cinfo));
934 if (copy_to_user(optval, (char *)&cinfo, len))
948 static int sco_sock_getsockopt(struct socket *sock, int level, int optname,
949 char __user *optval, int __user *optlen)
951 struct sock *sk = sock->sk;
953 struct bt_voice voice;
957 if (level == SOL_SCO)
958 return sco_sock_getsockopt_old(sock, optname, optval, optlen);
960 if (get_user(len, optlen))
968 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
973 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
974 (u32 __user *)optval))
980 voice.setting = sco_pi(sk)->setting;
982 len = min_t(unsigned int, len, sizeof(voice));
983 if (copy_to_user(optval, (char *)&voice, len))
997 static int sco_sock_shutdown(struct socket *sock, int how)
999 struct sock *sk = sock->sk;
1002 BT_DBG("sock %p, sk %p", sock, sk);
1010 if (!sk->sk_shutdown) {
1011 sk->sk_shutdown = SHUTDOWN_MASK;
1012 sco_sock_clear_timer(sk);
1013 __sco_sock_close(sk);
1015 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
1016 !(current->flags & PF_EXITING))
1017 err = bt_sock_wait_state(sk, BT_CLOSED,
1027 static int sco_sock_release(struct socket *sock)
1029 struct sock *sk = sock->sk;
1032 BT_DBG("sock %p, sk %p", sock, sk);
1039 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
1040 !(current->flags & PF_EXITING)) {
1042 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
1051 static void sco_conn_ready(struct sco_conn *conn)
1053 struct sock *parent;
1054 struct sock *sk = conn->sk;
1056 BT_DBG("conn %p", conn);
1059 sco_sock_clear_timer(sk);
1061 sk->sk_state = BT_CONNECTED;
1062 sk->sk_state_change(sk);
1065 sco_conn_lock(conn);
1068 sco_conn_unlock(conn);
1072 parent = sco_get_sock_listen(&conn->hcon->src);
1074 sco_conn_unlock(conn);
1078 bh_lock_sock(parent);
1080 sk = sco_sock_alloc(sock_net(parent), NULL,
1081 BTPROTO_SCO, GFP_ATOMIC, 0);
1083 bh_unlock_sock(parent);
1084 sco_conn_unlock(conn);
1088 sco_sock_init(sk, parent);
1090 bacpy(&sco_pi(sk)->src, &conn->hcon->src);
1091 bacpy(&sco_pi(sk)->dst, &conn->hcon->dst);
1093 hci_conn_hold(conn->hcon);
1094 __sco_chan_add(conn, sk, parent);
1096 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(parent)->flags))
1097 sk->sk_state = BT_CONNECT2;
1099 sk->sk_state = BT_CONNECTED;
1101 /* Wake up parent */
1102 parent->sk_data_ready(parent);
1104 bh_unlock_sock(parent);
1106 sco_conn_unlock(conn);
1110 /* ----- SCO interface with lower layer (HCI) ----- */
1111 int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags)
1116 BT_DBG("hdev %s, bdaddr %pMR", hdev->name, bdaddr);
1118 /* Find listening sockets */
1119 read_lock(&sco_sk_list.lock);
1120 sk_for_each(sk, &sco_sk_list.head) {
1121 if (sk->sk_state != BT_LISTEN)
1124 if (!bacmp(&sco_pi(sk)->src, &hdev->bdaddr) ||
1125 !bacmp(&sco_pi(sk)->src, BDADDR_ANY)) {
1126 lm |= HCI_LM_ACCEPT;
1128 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))
1129 *flags |= HCI_PROTO_DEFER;
1133 read_unlock(&sco_sk_list.lock);
1138 static void sco_connect_cfm(struct hci_conn *hcon, __u8 status)
1140 if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
1143 BT_DBG("hcon %p bdaddr %pMR status %d", hcon, &hcon->dst, status);
1146 struct sco_conn *conn;
1148 conn = sco_conn_add(hcon);
1150 sco_conn_ready(conn);
1152 sco_conn_del(hcon, bt_to_errno(status));
1155 static void sco_disconn_cfm(struct hci_conn *hcon, __u8 reason)
1157 if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
1160 BT_DBG("hcon %p reason %d", hcon, reason);
1162 sco_conn_del(hcon, bt_to_errno(reason));
1165 void sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
1167 struct sco_conn *conn = hcon->sco_data;
1172 BT_DBG("conn %p len %d", conn, skb->len);
1175 sco_recv_frame(conn, skb);
1183 static struct hci_cb sco_cb = {
1185 .connect_cfm = sco_connect_cfm,
1186 .disconn_cfm = sco_disconn_cfm,
1189 static int sco_debugfs_show(struct seq_file *f, void *p)
1193 read_lock(&sco_sk_list.lock);
1195 sk_for_each(sk, &sco_sk_list.head) {
1196 seq_printf(f, "%pMR %pMR %d\n", &sco_pi(sk)->src,
1197 &sco_pi(sk)->dst, sk->sk_state);
1200 read_unlock(&sco_sk_list.lock);
1205 DEFINE_SHOW_ATTRIBUTE(sco_debugfs);
1207 static struct dentry *sco_debugfs;
1209 static const struct proto_ops sco_sock_ops = {
1210 .family = PF_BLUETOOTH,
1211 .owner = THIS_MODULE,
1212 .release = sco_sock_release,
1213 .bind = sco_sock_bind,
1214 .connect = sco_sock_connect,
1215 .listen = sco_sock_listen,
1216 .accept = sco_sock_accept,
1217 .getname = sco_sock_getname,
1218 .sendmsg = sco_sock_sendmsg,
1219 .recvmsg = sco_sock_recvmsg,
1220 .poll = bt_sock_poll,
1221 .ioctl = bt_sock_ioctl,
1222 .gettstamp = sock_gettstamp,
1223 .mmap = sock_no_mmap,
1224 .socketpair = sock_no_socketpair,
1225 .shutdown = sco_sock_shutdown,
1226 .setsockopt = sco_sock_setsockopt,
1227 .getsockopt = sco_sock_getsockopt
1230 static const struct net_proto_family sco_sock_family_ops = {
1231 .family = PF_BLUETOOTH,
1232 .owner = THIS_MODULE,
1233 .create = sco_sock_create,
1236 int __init sco_init(void)
1240 BUILD_BUG_ON(sizeof(struct sockaddr_sco) > sizeof(struct sockaddr));
1242 err = proto_register(&sco_proto, 0);
1246 err = bt_sock_register(BTPROTO_SCO, &sco_sock_family_ops);
1248 BT_ERR("SCO socket registration failed");
1252 err = bt_procfs_init(&init_net, "sco", &sco_sk_list, NULL);
1254 BT_ERR("Failed to create SCO proc file");
1255 bt_sock_unregister(BTPROTO_SCO);
1259 BT_INFO("SCO socket layer initialized");
1261 hci_register_cb(&sco_cb);
1263 if (IS_ERR_OR_NULL(bt_debugfs))
1266 sco_debugfs = debugfs_create_file("sco", 0444, bt_debugfs,
1267 NULL, &sco_debugfs_fops);
1272 proto_unregister(&sco_proto);
1278 bt_procfs_cleanup(&init_net, "sco");
1280 debugfs_remove(sco_debugfs);
1282 hci_unregister_cb(&sco_cb);
1284 bt_sock_unregister(BTPROTO_SCO);
1286 proto_unregister(&sco_proto);
1289 module_param(disable_esco, bool, 0644);
1290 MODULE_PARM_DESC(disable_esco, "Disable eSCO connection creation");