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 sco_conn *conn;
75 /* ---- SCO timers ---- */
76 #define SCO_CONN_TIMEOUT (HZ * 40)
77 #define SCO_DISCONN_TIMEOUT (HZ * 2)
79 static void sco_sock_timeout(struct work_struct *work)
81 struct sco_conn *conn = container_of(work, struct sco_conn,
87 sco_conn_unlock(conn);
93 sco_conn_unlock(conn);
98 BT_DBG("sock %p state %d", sk, sk->sk_state);
101 sk->sk_err = ETIMEDOUT;
102 sk->sk_state_change(sk);
108 static void sco_sock_set_timer(struct sock *sk, long timeout)
110 if (!sco_pi(sk)->conn)
113 BT_DBG("sock %p state %d timeout %ld", sk, sk->sk_state, timeout);
114 cancel_delayed_work(&sco_pi(sk)->conn->timeout_work);
115 schedule_delayed_work(&sco_pi(sk)->conn->timeout_work, timeout);
118 static void sco_sock_clear_timer(struct sock *sk)
120 if (!sco_pi(sk)->conn)
123 BT_DBG("sock %p state %d", sk, sk->sk_state);
124 cancel_delayed_work(&sco_pi(sk)->conn->timeout_work);
127 /* ---- SCO connections ---- */
128 static struct sco_conn *sco_conn_add(struct hci_conn *hcon)
130 struct hci_dev *hdev = hcon->hdev;
131 struct sco_conn *conn = hcon->sco_data;
136 conn = kzalloc(sizeof(struct sco_conn), GFP_KERNEL);
140 spin_lock_init(&conn->lock);
141 INIT_DELAYED_WORK(&conn->timeout_work, sco_sock_timeout);
143 hcon->sco_data = conn;
146 if (hdev->sco_mtu > 0)
147 conn->mtu = hdev->sco_mtu;
151 BT_DBG("hcon %p conn %p", hcon, conn);
157 * Must be called on the locked socket. */
158 static void sco_chan_del(struct sock *sk, int err)
160 struct sco_conn *conn;
162 conn = sco_pi(sk)->conn;
164 BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
169 sco_pi(sk)->conn = NULL;
170 sco_conn_unlock(conn);
173 hci_conn_drop(conn->hcon);
176 sk->sk_state = BT_CLOSED;
178 sk->sk_state_change(sk);
180 sock_set_flag(sk, SOCK_ZAPPED);
183 static void sco_conn_del(struct hci_conn *hcon, int err)
185 struct sco_conn *conn = hcon->sco_data;
191 BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
196 sco_conn_unlock(conn);
201 sco_sock_clear_timer(sk);
202 sco_chan_del(sk, err);
207 /* Ensure no more work items will run before freeing conn. */
208 cancel_delayed_work_sync(&conn->timeout_work);
210 hcon->sco_data = NULL;
214 static void __sco_chan_add(struct sco_conn *conn, struct sock *sk,
217 BT_DBG("conn %p", conn);
219 sco_pi(sk)->conn = conn;
223 bt_accept_enqueue(parent, sk, true);
226 static int sco_chan_add(struct sco_conn *conn, struct sock *sk,
235 __sco_chan_add(conn, sk, parent);
237 sco_conn_unlock(conn);
241 static int sco_connect(struct hci_dev *hdev, struct sock *sk)
243 struct sco_conn *conn;
244 struct hci_conn *hcon;
247 BT_DBG("%pMR -> %pMR", &sco_pi(sk)->src, &sco_pi(sk)->dst);
249 if (lmp_esco_capable(hdev) && !disable_esco)
254 if (sco_pi(sk)->setting == BT_VOICE_TRANSPARENT &&
255 (!lmp_transp_capable(hdev) || !lmp_esco_capable(hdev)))
258 hcon = hci_connect_sco(hdev, type, &sco_pi(sk)->dst,
259 sco_pi(sk)->setting);
261 return PTR_ERR(hcon);
263 conn = sco_conn_add(hcon);
269 /* Update source addr of the socket */
270 bacpy(&sco_pi(sk)->src, &hcon->src);
272 err = sco_chan_add(conn, sk, NULL);
276 if (hcon->state == BT_CONNECTED) {
277 sco_sock_clear_timer(sk);
278 sk->sk_state = BT_CONNECTED;
280 sk->sk_state = BT_CONNECT;
281 sco_sock_set_timer(sk, sk->sk_sndtimeo);
287 static int sco_send_frame(struct sock *sk, struct sk_buff *skb)
289 struct sco_conn *conn = sco_pi(sk)->conn;
292 /* Check outgoing MTU */
296 BT_DBG("sk %p len %d", sk, len);
298 hci_send_sco(conn->hcon, skb);
303 static void sco_recv_frame(struct sco_conn *conn, struct sk_buff *skb)
309 sco_conn_unlock(conn);
314 BT_DBG("sk %p len %d", sk, skb->len);
316 if (sk->sk_state != BT_CONNECTED)
319 if (!sock_queue_rcv_skb(sk, skb))
326 /* -------- Socket interface ---------- */
327 static struct sock *__sco_get_sock_listen_by_addr(bdaddr_t *ba)
331 sk_for_each(sk, &sco_sk_list.head) {
332 if (sk->sk_state != BT_LISTEN)
335 if (!bacmp(&sco_pi(sk)->src, ba))
342 /* Find socket listening on source bdaddr.
343 * Returns closest match.
345 static struct sock *sco_get_sock_listen(bdaddr_t *src)
347 struct sock *sk = NULL, *sk1 = NULL;
349 read_lock(&sco_sk_list.lock);
351 sk_for_each(sk, &sco_sk_list.head) {
352 if (sk->sk_state != BT_LISTEN)
356 if (!bacmp(&sco_pi(sk)->src, src))
360 if (!bacmp(&sco_pi(sk)->src, BDADDR_ANY))
364 read_unlock(&sco_sk_list.lock);
366 return sk ? sk : sk1;
369 static void sco_sock_destruct(struct sock *sk)
373 skb_queue_purge(&sk->sk_receive_queue);
374 skb_queue_purge(&sk->sk_write_queue);
377 static void sco_sock_cleanup_listen(struct sock *parent)
381 BT_DBG("parent %p", parent);
383 /* Close not yet accepted channels */
384 while ((sk = bt_accept_dequeue(parent, NULL))) {
389 parent->sk_state = BT_CLOSED;
390 sock_set_flag(parent, SOCK_ZAPPED);
393 /* Kill socket (only if zapped and orphan)
394 * Must be called on unlocked socket.
396 static void sco_sock_kill(struct sock *sk)
398 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
401 BT_DBG("sk %p state %d", sk, sk->sk_state);
403 /* Kill poor orphan */
404 bt_sock_unlink(&sco_sk_list, sk);
405 sock_set_flag(sk, SOCK_DEAD);
409 static void __sco_sock_close(struct sock *sk)
411 BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
413 switch (sk->sk_state) {
415 sco_sock_cleanup_listen(sk);
420 if (sco_pi(sk)->conn->hcon) {
421 sk->sk_state = BT_DISCONN;
422 sco_sock_set_timer(sk, SCO_DISCONN_TIMEOUT);
423 sco_conn_lock(sco_pi(sk)->conn);
424 hci_conn_drop(sco_pi(sk)->conn->hcon);
425 sco_pi(sk)->conn->hcon = NULL;
426 sco_conn_unlock(sco_pi(sk)->conn);
428 sco_chan_del(sk, ECONNRESET);
434 sco_chan_del(sk, ECONNRESET);
438 sock_set_flag(sk, SOCK_ZAPPED);
443 /* Must be called on unlocked socket. */
444 static void sco_sock_close(struct sock *sk)
446 sco_sock_clear_timer(sk);
448 __sco_sock_close(sk);
452 static void sco_skb_put_cmsg(struct sk_buff *skb, struct msghdr *msg,
455 if (sco_pi(sk)->cmsg_mask & SCO_CMSG_PKT_STATUS)
456 put_cmsg(msg, SOL_BLUETOOTH, BT_SCM_PKT_STATUS,
457 sizeof(bt_cb(skb)->sco.pkt_status),
458 &bt_cb(skb)->sco.pkt_status);
461 static void sco_sock_init(struct sock *sk, struct sock *parent)
466 sk->sk_type = parent->sk_type;
467 bt_sk(sk)->flags = bt_sk(parent)->flags;
468 security_sk_clone(parent, sk);
470 bt_sk(sk)->skb_put_cmsg = sco_skb_put_cmsg;
474 static struct proto sco_proto = {
476 .owner = THIS_MODULE,
477 .obj_size = sizeof(struct sco_pinfo)
480 static struct sock *sco_sock_alloc(struct net *net, struct socket *sock,
481 int proto, gfp_t prio, int kern)
485 sk = sk_alloc(net, PF_BLUETOOTH, prio, &sco_proto, kern);
489 sock_init_data(sock, sk);
490 INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
492 sk->sk_destruct = sco_sock_destruct;
493 sk->sk_sndtimeo = SCO_CONN_TIMEOUT;
495 sock_reset_flag(sk, SOCK_ZAPPED);
497 sk->sk_protocol = proto;
498 sk->sk_state = BT_OPEN;
500 sco_pi(sk)->setting = BT_VOICE_CVSD_16BIT;
502 bt_sock_link(&sco_sk_list, sk);
506 static int sco_sock_create(struct net *net, struct socket *sock, int protocol,
511 BT_DBG("sock %p", sock);
513 sock->state = SS_UNCONNECTED;
515 if (sock->type != SOCK_SEQPACKET)
516 return -ESOCKTNOSUPPORT;
518 sock->ops = &sco_sock_ops;
520 sk = sco_sock_alloc(net, sock, protocol, GFP_ATOMIC, kern);
524 sco_sock_init(sk, NULL);
528 static int sco_sock_bind(struct socket *sock, struct sockaddr *addr,
531 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
532 struct sock *sk = sock->sk;
535 if (!addr || addr_len < sizeof(struct sockaddr_sco) ||
536 addr->sa_family != AF_BLUETOOTH)
539 BT_DBG("sk %p %pMR", sk, &sa->sco_bdaddr);
543 if (sk->sk_state != BT_OPEN) {
548 if (sk->sk_type != SOCK_SEQPACKET) {
553 bacpy(&sco_pi(sk)->src, &sa->sco_bdaddr);
555 sk->sk_state = BT_BOUND;
562 static int sco_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
564 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
565 struct sock *sk = sock->sk;
566 struct hci_dev *hdev;
571 if (alen < sizeof(struct sockaddr_sco) ||
572 addr->sa_family != AF_BLUETOOTH)
576 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND) {
581 if (sk->sk_type != SOCK_SEQPACKET) {
586 hdev = hci_get_route(&sa->sco_bdaddr, &sco_pi(sk)->src, BDADDR_BREDR);
593 /* Set destination address and psm */
594 bacpy(&sco_pi(sk)->dst, &sa->sco_bdaddr);
596 err = sco_connect(hdev, sk);
597 hci_dev_unlock(hdev);
602 err = bt_sock_wait_state(sk, BT_CONNECTED,
603 sock_sndtimeo(sk, flags & O_NONBLOCK));
610 static int sco_sock_listen(struct socket *sock, int backlog)
612 struct sock *sk = sock->sk;
613 bdaddr_t *src = &sco_pi(sk)->src;
616 BT_DBG("sk %p backlog %d", sk, backlog);
620 if (sk->sk_state != BT_BOUND) {
625 if (sk->sk_type != SOCK_SEQPACKET) {
630 write_lock(&sco_sk_list.lock);
632 if (__sco_get_sock_listen_by_addr(src)) {
637 sk->sk_max_ack_backlog = backlog;
638 sk->sk_ack_backlog = 0;
640 sk->sk_state = BT_LISTEN;
643 write_unlock(&sco_sk_list.lock);
650 static int sco_sock_accept(struct socket *sock, struct socket *newsock,
651 int flags, bool kern)
653 DEFINE_WAIT_FUNC(wait, woken_wake_function);
654 struct sock *sk = sock->sk, *ch;
660 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
662 BT_DBG("sk %p timeo %ld", sk, timeo);
664 /* Wait for an incoming connection. (wake-one). */
665 add_wait_queue_exclusive(sk_sleep(sk), &wait);
667 if (sk->sk_state != BT_LISTEN) {
672 ch = bt_accept_dequeue(sk, newsock);
681 if (signal_pending(current)) {
682 err = sock_intr_errno(timeo);
688 timeo = wait_woken(&wait, TASK_INTERRUPTIBLE, timeo);
691 remove_wait_queue(sk_sleep(sk), &wait);
696 newsock->state = SS_CONNECTED;
698 BT_DBG("new socket %p", ch);
705 static int sco_sock_getname(struct socket *sock, struct sockaddr *addr,
708 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
709 struct sock *sk = sock->sk;
711 BT_DBG("sock %p, sk %p", sock, sk);
713 addr->sa_family = AF_BLUETOOTH;
716 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->dst);
718 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->src);
720 return sizeof(struct sockaddr_sco);
723 static int sco_sock_sendmsg(struct socket *sock, struct msghdr *msg,
726 struct sock *sk = sock->sk;
730 BT_DBG("sock %p, sk %p", sock, sk);
732 err = sock_error(sk);
736 if (msg->msg_flags & MSG_OOB)
739 skb = bt_skb_sendmsg(sk, msg, len, len, 0, 0);
745 if (sk->sk_state == BT_CONNECTED)
746 err = sco_send_frame(sk, skb);
757 static void sco_conn_defer_accept(struct hci_conn *conn, u16 setting)
759 struct hci_dev *hdev = conn->hdev;
761 BT_DBG("conn %p", conn);
763 conn->state = BT_CONFIG;
765 if (!lmp_esco_capable(hdev)) {
766 struct hci_cp_accept_conn_req cp;
768 bacpy(&cp.bdaddr, &conn->dst);
769 cp.role = 0x00; /* Ignored */
771 hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ, sizeof(cp), &cp);
773 struct hci_cp_accept_sync_conn_req cp;
775 bacpy(&cp.bdaddr, &conn->dst);
776 cp.pkt_type = cpu_to_le16(conn->pkt_type);
778 cp.tx_bandwidth = cpu_to_le32(0x00001f40);
779 cp.rx_bandwidth = cpu_to_le32(0x00001f40);
780 cp.content_format = cpu_to_le16(setting);
782 switch (setting & SCO_AIRMODE_MASK) {
783 case SCO_AIRMODE_TRANSP:
784 if (conn->pkt_type & ESCO_2EV3)
785 cp.max_latency = cpu_to_le16(0x0008);
787 cp.max_latency = cpu_to_le16(0x000D);
788 cp.retrans_effort = 0x02;
790 case SCO_AIRMODE_CVSD:
791 cp.max_latency = cpu_to_le16(0xffff);
792 cp.retrans_effort = 0xff;
795 /* use CVSD settings as fallback */
796 cp.max_latency = cpu_to_le16(0xffff);
797 cp.retrans_effort = 0xff;
801 hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
806 static int sco_sock_recvmsg(struct socket *sock, struct msghdr *msg,
807 size_t len, int flags)
809 struct sock *sk = sock->sk;
810 struct sco_pinfo *pi = sco_pi(sk);
814 if (sk->sk_state == BT_CONNECT2 &&
815 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
816 sco_conn_defer_accept(pi->conn->hcon, pi->setting);
817 sk->sk_state = BT_CONFIG;
825 return bt_sock_recvmsg(sock, msg, len, flags);
828 static int sco_sock_setsockopt(struct socket *sock, int level, int optname,
829 sockptr_t optval, unsigned int optlen)
831 struct sock *sk = sock->sk;
833 struct bt_voice voice;
843 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
848 err = bt_copy_from_sockptr(&opt, sizeof(opt), optval, optlen);
853 set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
855 clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
859 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND &&
860 sk->sk_state != BT_CONNECT2) {
865 voice.setting = sco_pi(sk)->setting;
867 err = bt_copy_from_sockptr(&voice, sizeof(voice), optval,
872 /* Explicitly check for these values */
873 if (voice.setting != BT_VOICE_TRANSPARENT &&
874 voice.setting != BT_VOICE_CVSD_16BIT) {
879 sco_pi(sk)->setting = voice.setting;
883 err = bt_copy_from_sockptr(&opt, sizeof(opt), optval, optlen);
888 sco_pi(sk)->cmsg_mask |= SCO_CMSG_PKT_STATUS;
890 sco_pi(sk)->cmsg_mask &= SCO_CMSG_PKT_STATUS;
902 static int sco_sock_getsockopt_old(struct socket *sock, int optname,
903 char __user *optval, int __user *optlen)
905 struct sock *sk = sock->sk;
906 struct sco_options opts;
907 struct sco_conninfo cinfo;
913 if (get_user(len, optlen))
920 if (sk->sk_state != BT_CONNECTED &&
921 !(sk->sk_state == BT_CONNECT2 &&
922 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
927 opts.mtu = sco_pi(sk)->conn->mtu;
929 BT_DBG("mtu %d", opts.mtu);
931 len = min(len, sizeof(opts));
932 if (copy_to_user(optval, (char *)&opts, len))
938 if (sk->sk_state != BT_CONNECTED &&
939 !(sk->sk_state == BT_CONNECT2 &&
940 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
945 memset(&cinfo, 0, sizeof(cinfo));
946 cinfo.hci_handle = sco_pi(sk)->conn->hcon->handle;
947 memcpy(cinfo.dev_class, sco_pi(sk)->conn->hcon->dev_class, 3);
949 len = min(len, sizeof(cinfo));
950 if (copy_to_user(optval, (char *)&cinfo, len))
964 static int sco_sock_getsockopt(struct socket *sock, int level, int optname,
965 char __user *optval, int __user *optlen)
967 struct sock *sk = sock->sk;
969 struct bt_voice voice;
975 if (level == SOL_SCO)
976 return sco_sock_getsockopt_old(sock, optname, optval, optlen);
978 if (get_user(len, optlen))
986 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
991 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
992 (u32 __user *)optval))
998 voice.setting = sco_pi(sk)->setting;
1000 len = min_t(unsigned int, len, sizeof(voice));
1001 if (copy_to_user(optval, (char *)&voice, len))
1007 if (sk->sk_state != BT_CONNECTED) {
1012 phys = hci_conn_get_phy(sco_pi(sk)->conn->hcon);
1014 if (put_user(phys, (u32 __user *) optval))
1019 pkt_status = (sco_pi(sk)->cmsg_mask & SCO_CMSG_PKT_STATUS);
1021 if (put_user(pkt_status, (int __user *)optval))
1027 if (sk->sk_state != BT_CONNECTED) {
1032 if (put_user(sco_pi(sk)->conn->mtu, (u32 __user *)optval))
1045 static int sco_sock_shutdown(struct socket *sock, int how)
1047 struct sock *sk = sock->sk;
1050 BT_DBG("sock %p, sk %p", sock, sk);
1058 if (!sk->sk_shutdown) {
1059 sk->sk_shutdown = SHUTDOWN_MASK;
1060 sco_sock_clear_timer(sk);
1061 __sco_sock_close(sk);
1063 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
1064 !(current->flags & PF_EXITING))
1065 err = bt_sock_wait_state(sk, BT_CLOSED,
1075 static int sco_sock_release(struct socket *sock)
1077 struct sock *sk = sock->sk;
1080 BT_DBG("sock %p, sk %p", sock, sk);
1087 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
1088 !(current->flags & PF_EXITING)) {
1090 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
1099 static void sco_conn_ready(struct sco_conn *conn)
1101 struct sock *parent;
1102 struct sock *sk = conn->sk;
1104 BT_DBG("conn %p", conn);
1107 sco_sock_clear_timer(sk);
1109 sk->sk_state = BT_CONNECTED;
1110 sk->sk_state_change(sk);
1113 sco_conn_lock(conn);
1116 sco_conn_unlock(conn);
1120 parent = sco_get_sock_listen(&conn->hcon->src);
1122 sco_conn_unlock(conn);
1126 bh_lock_sock(parent);
1128 sk = sco_sock_alloc(sock_net(parent), NULL,
1129 BTPROTO_SCO, GFP_ATOMIC, 0);
1131 bh_unlock_sock(parent);
1132 sco_conn_unlock(conn);
1136 sco_sock_init(sk, parent);
1138 bacpy(&sco_pi(sk)->src, &conn->hcon->src);
1139 bacpy(&sco_pi(sk)->dst, &conn->hcon->dst);
1141 hci_conn_hold(conn->hcon);
1142 __sco_chan_add(conn, sk, parent);
1144 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(parent)->flags))
1145 sk->sk_state = BT_CONNECT2;
1147 sk->sk_state = BT_CONNECTED;
1149 /* Wake up parent */
1150 parent->sk_data_ready(parent);
1152 bh_unlock_sock(parent);
1154 sco_conn_unlock(conn);
1158 /* ----- SCO interface with lower layer (HCI) ----- */
1159 int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags)
1164 BT_DBG("hdev %s, bdaddr %pMR", hdev->name, bdaddr);
1166 /* Find listening sockets */
1167 read_lock(&sco_sk_list.lock);
1168 sk_for_each(sk, &sco_sk_list.head) {
1169 if (sk->sk_state != BT_LISTEN)
1172 if (!bacmp(&sco_pi(sk)->src, &hdev->bdaddr) ||
1173 !bacmp(&sco_pi(sk)->src, BDADDR_ANY)) {
1174 lm |= HCI_LM_ACCEPT;
1176 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))
1177 *flags |= HCI_PROTO_DEFER;
1181 read_unlock(&sco_sk_list.lock);
1186 static void sco_connect_cfm(struct hci_conn *hcon, __u8 status)
1188 if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
1191 BT_DBG("hcon %p bdaddr %pMR status %d", hcon, &hcon->dst, status);
1194 struct sco_conn *conn;
1196 conn = sco_conn_add(hcon);
1198 sco_conn_ready(conn);
1200 sco_conn_del(hcon, bt_to_errno(status));
1203 static void sco_disconn_cfm(struct hci_conn *hcon, __u8 reason)
1205 if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
1208 BT_DBG("hcon %p reason %d", hcon, reason);
1210 sco_conn_del(hcon, bt_to_errno(reason));
1213 void sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
1215 struct sco_conn *conn = hcon->sco_data;
1220 BT_DBG("conn %p len %d", conn, skb->len);
1223 sco_recv_frame(conn, skb);
1231 static struct hci_cb sco_cb = {
1233 .connect_cfm = sco_connect_cfm,
1234 .disconn_cfm = sco_disconn_cfm,
1237 static int sco_debugfs_show(struct seq_file *f, void *p)
1241 read_lock(&sco_sk_list.lock);
1243 sk_for_each(sk, &sco_sk_list.head) {
1244 seq_printf(f, "%pMR %pMR %d\n", &sco_pi(sk)->src,
1245 &sco_pi(sk)->dst, sk->sk_state);
1248 read_unlock(&sco_sk_list.lock);
1253 DEFINE_SHOW_ATTRIBUTE(sco_debugfs);
1255 static struct dentry *sco_debugfs;
1257 static const struct proto_ops sco_sock_ops = {
1258 .family = PF_BLUETOOTH,
1259 .owner = THIS_MODULE,
1260 .release = sco_sock_release,
1261 .bind = sco_sock_bind,
1262 .connect = sco_sock_connect,
1263 .listen = sco_sock_listen,
1264 .accept = sco_sock_accept,
1265 .getname = sco_sock_getname,
1266 .sendmsg = sco_sock_sendmsg,
1267 .recvmsg = sco_sock_recvmsg,
1268 .poll = bt_sock_poll,
1269 .ioctl = bt_sock_ioctl,
1270 .gettstamp = sock_gettstamp,
1271 .mmap = sock_no_mmap,
1272 .socketpair = sock_no_socketpair,
1273 .shutdown = sco_sock_shutdown,
1274 .setsockopt = sco_sock_setsockopt,
1275 .getsockopt = sco_sock_getsockopt
1278 static const struct net_proto_family sco_sock_family_ops = {
1279 .family = PF_BLUETOOTH,
1280 .owner = THIS_MODULE,
1281 .create = sco_sock_create,
1284 int __init sco_init(void)
1288 BUILD_BUG_ON(sizeof(struct sockaddr_sco) > sizeof(struct sockaddr));
1290 err = proto_register(&sco_proto, 0);
1294 err = bt_sock_register(BTPROTO_SCO, &sco_sock_family_ops);
1296 BT_ERR("SCO socket registration failed");
1300 err = bt_procfs_init(&init_net, "sco", &sco_sk_list, NULL);
1302 BT_ERR("Failed to create SCO proc file");
1303 bt_sock_unregister(BTPROTO_SCO);
1307 BT_INFO("SCO socket layer initialized");
1309 hci_register_cb(&sco_cb);
1311 if (IS_ERR_OR_NULL(bt_debugfs))
1314 sco_debugfs = debugfs_create_file("sco", 0444, bt_debugfs,
1315 NULL, &sco_debugfs_fops);
1320 proto_unregister(&sco_proto);
1326 bt_procfs_cleanup(&init_net, "sco");
1328 debugfs_remove(sco_debugfs);
1330 hci_unregister_cb(&sco_cb);
1332 bt_sock_unregister(BTPROTO_SCO);
1334 proto_unregister(&sco_proto);
1337 module_param(disable_esco, bool, 0644);
1338 MODULE_PARM_DESC(disable_esco, "Disable eSCO connection creation");