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>
37 #include <net/bluetooth/mgmt.h>
38 #include <net/bluetooth/mgmt_tizen.h>
41 static bool disable_esco;
43 static const struct proto_ops sco_sock_ops;
45 static struct bt_sock_list sco_sk_list = {
46 .lock = __RW_LOCK_UNLOCKED(sco_sk_list.lock)
49 /* ---- SCO connections ---- */
51 struct hci_conn *hcon;
56 struct delayed_work timeout_work;
61 #define sco_conn_lock(c) spin_lock(&c->lock)
62 #define sco_conn_unlock(c) spin_unlock(&c->lock)
64 static void sco_sock_close(struct sock *sk);
65 static void sco_sock_kill(struct sock *sk);
67 /* ----- SCO socket info ----- */
68 #define sco_pi(sk) ((struct sco_pinfo *) sk)
77 struct sco_conn *conn;
80 /* ---- SCO timers ---- */
81 #define SCO_CONN_TIMEOUT (HZ * 40)
82 #define SCO_DISCONN_TIMEOUT (HZ * 2)
84 static void sco_sock_timeout(struct work_struct *work)
86 struct sco_conn *conn = container_of(work, struct sco_conn,
94 sco_conn_unlock(conn);
99 BT_DBG("sock %p state %d", sk, sk->sk_state);
102 sk->sk_err = ETIMEDOUT;
103 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);
142 hcon->sco_data = conn;
145 if (hdev->sco_mtu > 0)
146 conn->mtu = hdev->sco_mtu;
150 BT_DBG("hcon %p conn %p", hcon, conn);
156 * Must be called on the locked socket. */
157 static void sco_chan_del(struct sock *sk, int err)
159 struct sco_conn *conn;
161 conn = sco_pi(sk)->conn;
163 BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
168 sco_pi(sk)->conn = NULL;
169 sco_conn_unlock(conn);
172 hci_conn_drop(conn->hcon);
175 sk->sk_state = BT_CLOSED;
177 sk->sk_state_change(sk);
179 sock_set_flag(sk, SOCK_ZAPPED);
182 static void sco_conn_del(struct hci_conn *hcon, int err)
184 struct sco_conn *conn = hcon->sco_data;
190 BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
195 sco_conn_unlock(conn);
200 sco_sock_clear_timer(sk);
201 sco_chan_del(sk, err);
205 /* Ensure no more work items will run before freeing conn. */
206 cancel_delayed_work_sync(&conn->timeout_work);
209 hcon->sco_data = NULL;
213 static void __sco_chan_add(struct sco_conn *conn, struct sock *sk,
216 BT_DBG("conn %p", conn);
218 sco_pi(sk)->conn = conn;
221 INIT_DELAYED_WORK(&conn->timeout_work, sco_sock_timeout);
224 bt_accept_enqueue(parent, sk, true);
227 static int sco_chan_add(struct sco_conn *conn, struct sock *sk,
236 __sco_chan_add(conn, sk, parent);
238 sco_conn_unlock(conn);
242 static int sco_connect(struct hci_dev *hdev, struct sock *sk)
244 struct sco_conn *conn;
245 struct hci_conn *hcon;
248 BT_DBG("%pMR -> %pMR", &sco_pi(sk)->src, &sco_pi(sk)->dst);
250 if (lmp_esco_capable(hdev) && !disable_esco)
255 if (sco_pi(sk)->setting == BT_VOICE_TRANSPARENT &&
256 (!lmp_transp_capable(hdev) || !lmp_esco_capable(hdev)))
259 hcon = hci_connect_sco(hdev, type, &sco_pi(sk)->dst,
260 sco_pi(sk)->setting);
262 return PTR_ERR(hcon);
264 conn = sco_conn_add(hcon);
270 /* Update source addr of the socket */
271 bacpy(&sco_pi(sk)->src, &hcon->src);
273 err = sco_chan_add(conn, sk, NULL);
277 if (hcon->state == BT_CONNECTED) {
278 sco_sock_clear_timer(sk);
279 sk->sk_state = BT_CONNECTED;
281 sk->sk_state = BT_CONNECT;
282 sco_sock_set_timer(sk, sk->sk_sndtimeo);
288 static int sco_send_frame(struct sock *sk, struct msghdr *msg, int len)
290 struct sco_conn *conn = sco_pi(sk)->conn;
294 /* Check outgoing MTU */
298 BT_DBG("sk %p len %d", sk, len);
300 skb = bt_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err);
304 if (memcpy_from_msg(skb_put(skb, len), msg, len)) {
309 hci_send_sco(conn->hcon, skb);
314 static void sco_recv_frame(struct sco_conn *conn, struct sk_buff *skb)
320 sco_conn_unlock(conn);
325 BT_DBG("sk %p len %u", sk, skb->len);
327 if (sk->sk_state != BT_CONNECTED)
330 if (!sock_queue_rcv_skb(sk, skb))
337 /* -------- Socket interface ---------- */
338 static struct sock *__sco_get_sock_listen_by_addr(bdaddr_t *ba)
342 sk_for_each(sk, &sco_sk_list.head) {
343 if (sk->sk_state != BT_LISTEN)
346 if (!bacmp(&sco_pi(sk)->src, ba))
353 /* Find socket listening on source bdaddr.
354 * Returns closest match.
356 static struct sock *sco_get_sock_listen(bdaddr_t *src)
358 struct sock *sk = NULL, *sk1 = NULL;
360 read_lock(&sco_sk_list.lock);
362 sk_for_each(sk, &sco_sk_list.head) {
363 if (sk->sk_state != BT_LISTEN)
367 if (!bacmp(&sco_pi(sk)->src, src))
371 if (!bacmp(&sco_pi(sk)->src, BDADDR_ANY))
375 read_unlock(&sco_sk_list.lock);
377 return sk ? sk : sk1;
380 static void sco_sock_destruct(struct sock *sk)
384 skb_queue_purge(&sk->sk_receive_queue);
385 skb_queue_purge(&sk->sk_write_queue);
388 static void sco_sock_cleanup_listen(struct sock *parent)
392 BT_DBG("parent %p", parent);
394 /* Close not yet accepted channels */
395 while ((sk = bt_accept_dequeue(parent, NULL))) {
400 parent->sk_state = BT_CLOSED;
401 sock_set_flag(parent, SOCK_ZAPPED);
404 /* Kill socket (only if zapped and orphan)
405 * Must be called on unlocked socket.
407 static void sco_sock_kill(struct sock *sk)
409 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
412 BT_DBG("sk %p state %d", sk, sk->sk_state);
414 /* Kill poor orphan */
415 bt_sock_unlink(&sco_sk_list, sk);
416 sock_set_flag(sk, SOCK_DEAD);
420 static void __sco_sock_close(struct sock *sk)
422 BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
424 switch (sk->sk_state) {
426 sco_sock_cleanup_listen(sk);
431 if (sco_pi(sk)->conn->hcon) {
432 sk->sk_state = BT_DISCONN;
433 sco_sock_set_timer(sk, SCO_DISCONN_TIMEOUT);
434 sco_conn_lock(sco_pi(sk)->conn);
435 hci_conn_drop(sco_pi(sk)->conn->hcon);
436 sco_pi(sk)->conn->hcon = NULL;
437 sco_conn_unlock(sco_pi(sk)->conn);
439 sco_chan_del(sk, ECONNRESET);
445 sco_chan_del(sk, ECONNRESET);
449 sock_set_flag(sk, SOCK_ZAPPED);
454 /* Must be called on unlocked socket. */
455 static void sco_sock_close(struct sock *sk)
458 sco_sock_clear_timer(sk);
459 __sco_sock_close(sk);
463 static void sco_skb_put_cmsg(struct sk_buff *skb, struct msghdr *msg,
466 if (sco_pi(sk)->cmsg_mask & SCO_CMSG_PKT_STATUS)
467 put_cmsg(msg, SOL_BLUETOOTH, BT_SCM_PKT_STATUS,
468 sizeof(bt_cb(skb)->sco.pkt_status),
469 &bt_cb(skb)->sco.pkt_status);
472 static void sco_sock_init(struct sock *sk, struct sock *parent)
477 sk->sk_type = parent->sk_type;
478 bt_sk(sk)->flags = bt_sk(parent)->flags;
479 security_sk_clone(parent, sk);
481 bt_sk(sk)->skb_put_cmsg = sco_skb_put_cmsg;
485 static struct proto sco_proto = {
487 .owner = THIS_MODULE,
488 .obj_size = sizeof(struct sco_pinfo)
491 static struct sock *sco_sock_alloc(struct net *net, struct socket *sock,
492 int proto, gfp_t prio, int kern)
496 sk = sk_alloc(net, PF_BLUETOOTH, prio, &sco_proto, kern);
500 sock_init_data(sock, sk);
501 INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
503 sk->sk_destruct = sco_sock_destruct;
504 sk->sk_sndtimeo = SCO_CONN_TIMEOUT;
506 sock_reset_flag(sk, SOCK_ZAPPED);
508 sk->sk_protocol = proto;
509 sk->sk_state = BT_OPEN;
511 sco_pi(sk)->setting = BT_VOICE_CVSD_16BIT;
513 bt_sock_link(&sco_sk_list, sk);
517 static int sco_sock_create(struct net *net, struct socket *sock, int protocol,
522 BT_DBG("sock %p", sock);
524 sock->state = SS_UNCONNECTED;
526 if (sock->type != SOCK_SEQPACKET)
527 return -ESOCKTNOSUPPORT;
529 sock->ops = &sco_sock_ops;
531 sk = sco_sock_alloc(net, sock, protocol, GFP_ATOMIC, kern);
535 sco_sock_init(sk, NULL);
539 static int sco_sock_bind(struct socket *sock, struct sockaddr *addr,
542 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
543 struct sock *sk = sock->sk;
546 if (!addr || addr_len < sizeof(struct sockaddr_sco) ||
547 addr->sa_family != AF_BLUETOOTH)
550 BT_DBG("sk %p %pMR", sk, &sa->sco_bdaddr);
554 if (sk->sk_state != BT_OPEN) {
559 if (sk->sk_type != SOCK_SEQPACKET) {
564 bacpy(&sco_pi(sk)->src, &sa->sco_bdaddr);
566 sk->sk_state = BT_BOUND;
573 static int sco_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
575 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
576 struct sock *sk = sock->sk;
577 struct hci_dev *hdev;
582 if (alen < sizeof(struct sockaddr_sco) ||
583 addr->sa_family != AF_BLUETOOTH)
586 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND)
589 if (sk->sk_type != SOCK_SEQPACKET)
592 hdev = hci_get_route(&sa->sco_bdaddr, &sco_pi(sk)->src, BDADDR_BREDR);
594 return -EHOSTUNREACH;
599 /* Set destination address and psm */
600 bacpy(&sco_pi(sk)->dst, &sa->sco_bdaddr);
602 err = sco_connect(hdev, sk);
603 hci_dev_unlock(hdev);
608 err = bt_sock_wait_state(sk, BT_CONNECTED,
609 sock_sndtimeo(sk, flags & O_NONBLOCK));
616 static int sco_sock_listen(struct socket *sock, int backlog)
618 struct sock *sk = sock->sk;
619 bdaddr_t *src = &sco_pi(sk)->src;
622 BT_DBG("sk %p backlog %d", sk, backlog);
626 if (sk->sk_state != BT_BOUND) {
631 if (sk->sk_type != SOCK_SEQPACKET) {
636 write_lock(&sco_sk_list.lock);
638 if (__sco_get_sock_listen_by_addr(src)) {
643 sk->sk_max_ack_backlog = backlog;
644 sk->sk_ack_backlog = 0;
646 sk->sk_state = BT_LISTEN;
649 write_unlock(&sco_sk_list.lock);
656 static int sco_sock_accept(struct socket *sock, struct socket *newsock,
657 int flags, bool kern)
659 DEFINE_WAIT_FUNC(wait, woken_wake_function);
660 struct sock *sk = sock->sk, *ch;
666 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
668 BT_DBG("sk %p timeo %ld", sk, timeo);
670 /* Wait for an incoming connection. (wake-one). */
671 add_wait_queue_exclusive(sk_sleep(sk), &wait);
673 if (sk->sk_state != BT_LISTEN) {
678 ch = bt_accept_dequeue(sk, newsock);
687 if (signal_pending(current)) {
688 err = sock_intr_errno(timeo);
694 timeo = wait_woken(&wait, TASK_INTERRUPTIBLE, timeo);
697 remove_wait_queue(sk_sleep(sk), &wait);
702 newsock->state = SS_CONNECTED;
704 BT_DBG("new socket %p", ch);
711 static int sco_sock_getname(struct socket *sock, struct sockaddr *addr,
714 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
715 struct sock *sk = sock->sk;
717 BT_DBG("sock %p, sk %p", sock, sk);
719 addr->sa_family = AF_BLUETOOTH;
722 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->dst);
724 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->src);
726 return sizeof(struct sockaddr_sco);
729 static int sco_sock_sendmsg(struct socket *sock, struct msghdr *msg,
732 struct sock *sk = sock->sk;
735 BT_DBG("sock %p, sk %p", sock, sk);
737 err = sock_error(sk);
741 if (msg->msg_flags & MSG_OOB)
746 if (sk->sk_state == BT_CONNECTED)
747 err = sco_send_frame(sk, msg, len);
755 static void sco_conn_defer_accept(struct hci_conn *conn, u16 setting)
757 struct hci_dev *hdev = conn->hdev;
759 BT_DBG("conn %p", conn);
761 conn->state = BT_CONFIG;
763 if (!lmp_esco_capable(hdev)) {
764 struct hci_cp_accept_conn_req cp;
766 bacpy(&cp.bdaddr, &conn->dst);
767 cp.role = 0x00; /* Ignored */
769 hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ, sizeof(cp), &cp);
771 struct hci_cp_accept_sync_conn_req cp;
773 bacpy(&cp.bdaddr, &conn->dst);
774 cp.pkt_type = cpu_to_le16(conn->pkt_type);
776 cp.tx_bandwidth = cpu_to_le32(0x00001f40);
777 cp.rx_bandwidth = cpu_to_le32(0x00001f40);
778 cp.content_format = cpu_to_le16(setting);
780 switch (setting & SCO_AIRMODE_MASK) {
781 case SCO_AIRMODE_TRANSP:
782 if (conn->pkt_type & ESCO_2EV3)
783 cp.max_latency = cpu_to_le16(0x0008);
785 cp.max_latency = cpu_to_le16(0x000D);
786 cp.retrans_effort = 0x02;
788 case SCO_AIRMODE_CVSD:
789 cp.max_latency = cpu_to_le16(0xffff);
790 cp.retrans_effort = 0xff;
793 /* use CVSD settings as fallback */
794 cp.max_latency = cpu_to_le16(0xffff);
795 cp.retrans_effort = 0xff;
799 hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
804 static int sco_sock_recvmsg(struct socket *sock, struct msghdr *msg,
805 size_t len, int flags)
807 struct sock *sk = sock->sk;
808 struct sco_pinfo *pi = sco_pi(sk);
812 if (sk->sk_state == BT_CONNECT2 &&
813 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
814 sco_conn_defer_accept(pi->conn->hcon, pi->setting);
815 sk->sk_state = BT_CONFIG;
823 return bt_sock_recvmsg(sock, msg, len, flags);
826 static int sco_sock_setsockopt(struct socket *sock, int level, int optname,
827 sockptr_t optval, unsigned int optlen)
829 struct sock *sk = sock->sk;
831 struct bt_voice voice;
841 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
846 if (copy_from_sockptr(&opt, optval, sizeof(u32))) {
852 set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
854 clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
858 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND &&
859 sk->sk_state != BT_CONNECT2) {
864 voice.setting = sco_pi(sk)->setting;
866 len = min_t(unsigned int, sizeof(voice), optlen);
867 if (copy_from_sockptr(&voice, optval, len)) {
872 /* Explicitly check for these values */
874 /* Codec defer accept */
875 if (voice.setting != (BT_VOICE_TRANSPARENT |
876 BT_VOICE_CVSD_16BIT) &&
877 voice.setting != BT_VOICE_CVSD_16BIT) {
879 if (voice.setting != BT_VOICE_TRANSPARENT &&
880 voice.setting != BT_VOICE_CVSD_16BIT) {
886 sco_pi(sk)->setting = voice.setting;
890 if (copy_from_sockptr(&opt, optval, sizeof(u32))) {
896 sco_pi(sk)->cmsg_mask |= SCO_CMSG_PKT_STATUS;
898 sco_pi(sk)->cmsg_mask &= SCO_CMSG_PKT_STATUS;
910 static int sco_sock_getsockopt_old(struct socket *sock, int optname,
911 char __user *optval, int __user *optlen)
913 struct sock *sk = sock->sk;
914 struct sco_options opts;
915 struct sco_conninfo cinfo;
920 if (get_user(len, optlen))
927 if (sk->sk_state != BT_CONNECTED &&
928 !(sk->sk_state == BT_CONNECT2 &&
929 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
934 opts.mtu = sco_pi(sk)->conn->mtu;
936 BT_DBG("mtu %u", opts.mtu);
938 len = min_t(unsigned int, len, sizeof(opts));
939 if (copy_to_user(optval, (char *)&opts, len))
945 if (sk->sk_state != BT_CONNECTED &&
946 !(sk->sk_state == BT_CONNECT2 &&
947 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
952 memset(&cinfo, 0, sizeof(cinfo));
953 cinfo.hci_handle = sco_pi(sk)->conn->hcon->handle;
954 memcpy(cinfo.dev_class, sco_pi(sk)->conn->hcon->dev_class, 3);
956 len = min_t(unsigned int, len, sizeof(cinfo));
957 if (copy_to_user(optval, (char *)&cinfo, len))
971 static int sco_sock_getsockopt(struct socket *sock, int level, int optname,
972 char __user *optval, int __user *optlen)
974 struct sock *sk = sock->sk;
976 struct bt_voice voice;
982 if (level == SOL_SCO)
983 return sco_sock_getsockopt_old(sock, optname, optval, optlen);
985 if (get_user(len, optlen))
993 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
998 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
999 (u32 __user *)optval))
1005 voice.setting = sco_pi(sk)->setting;
1007 len = min_t(unsigned int, len, sizeof(voice));
1008 if (copy_to_user(optval, (char *)&voice, len))
1014 if (sk->sk_state != BT_CONNECTED) {
1019 phys = hci_conn_get_phy(sco_pi(sk)->conn->hcon);
1021 if (put_user(phys, (u32 __user *) optval))
1026 pkt_status = (sco_pi(sk)->cmsg_mask & SCO_CMSG_PKT_STATUS);
1028 if (put_user(pkt_status, (int __user *)optval))
1034 if (sk->sk_state != BT_CONNECTED) {
1039 if (put_user(sco_pi(sk)->conn->mtu, (u32 __user *)optval))
1052 static int sco_sock_shutdown(struct socket *sock, int how)
1054 struct sock *sk = sock->sk;
1057 BT_DBG("sock %p, sk %p", sock, sk);
1065 if (!sk->sk_shutdown) {
1066 sk->sk_shutdown = SHUTDOWN_MASK;
1067 sco_sock_clear_timer(sk);
1068 __sco_sock_close(sk);
1070 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
1071 !(current->flags & PF_EXITING))
1072 err = bt_sock_wait_state(sk, BT_CLOSED,
1082 static int sco_sock_release(struct socket *sock)
1084 struct sock *sk = sock->sk;
1087 BT_DBG("sock %p, sk %p", sock, sk);
1094 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
1095 !(current->flags & PF_EXITING)) {
1097 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
1102 /* SCO kernel panic fix */
1103 bt_sock_unlink(&sco_sk_list, sk);
1110 static void sco_conn_ready(struct sco_conn *conn)
1112 struct sock *parent;
1113 struct sock *sk = conn->sk;
1115 BT_DBG("conn %p", conn);
1119 sco_sock_clear_timer(sk);
1120 sk->sk_state = BT_CONNECTED;
1121 sk->sk_state_change(sk);
1124 sco_conn_lock(conn);
1127 sco_conn_unlock(conn);
1132 /* Multiple SCO accept feature */
1133 parent = sco_get_sock_listen(&conn->hcon->dst);
1135 parent = sco_get_sock_listen(&conn->hcon->src);
1138 sco_conn_unlock(conn);
1144 sk = sco_sock_alloc(sock_net(parent), NULL,
1145 BTPROTO_SCO, GFP_ATOMIC, 0);
1147 release_sock(parent);
1148 sco_conn_unlock(conn);
1152 sco_sock_init(sk, parent);
1154 bacpy(&sco_pi(sk)->src, &conn->hcon->src);
1155 bacpy(&sco_pi(sk)->dst, &conn->hcon->dst);
1157 hci_conn_hold(conn->hcon);
1158 __sco_chan_add(conn, sk, parent);
1160 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(parent)->flags))
1161 sk->sk_state = BT_CONNECT2;
1163 sk->sk_state = BT_CONNECTED;
1165 /* Wake up parent */
1166 parent->sk_data_ready(parent);
1168 release_sock(parent);
1170 sco_conn_unlock(conn);
1175 /* WBC/NBC feature */
1176 void sco_connect_set_gw_nbc(struct hci_dev *hdev)
1178 struct hci_cp_write_voice_setting cp1;
1179 struct hci_cp_bcm_wbs_req cp2;
1180 struct hci_cp_i2c_pcm_req cp3;
1181 struct hci_cp_sco_pcm_req cp4;
1183 BT_DBG("Setting the NBC params, hdev = %p", hdev);
1185 cp1.voice_setting = cpu_to_le16(0x0060);
1186 hci_send_cmd(hdev, HCI_OP_WRITE_VOICE_SETTING, sizeof(cp1), &cp1);
1187 hdev->voice_setting = cpu_to_le16(0x0060);
1189 cp2.role = 0x00; /* WbDisable */
1190 cp2.pkt_type = cpu_to_le16(0x0002);
1191 hci_send_cmd(hdev, HCI_BCM_ENABLE_WBS_REQ, sizeof(cp2), &cp2);
1193 cp3.i2c_enable = 0x01;
1194 cp3.is_master = 0x00;
1195 cp3.pcm_rate = 0x00;
1196 cp3.clock_rate = 0x01;
1197 hci_send_cmd(hdev, HCI_BCM_I2C_PCM_REQ, sizeof(cp3), &cp3);
1199 cp4.sco_routing = 0x00;
1200 cp4.pcm_rate = 0x01;
1201 cp4.frame_type = 0x00;
1202 cp4.sync_mode = 0x00;
1203 cp4.clock_mode = 0x00;
1204 hci_send_cmd(hdev, HCI_BCM_SCO_PCM_REQ, sizeof(cp4), &cp4);
1207 void sco_connect_set_gw_wbc(struct hci_dev *hdev)
1209 struct hci_cp_write_voice_setting cp1;
1210 struct hci_cp_bcm_wbs_req cp2;
1211 struct hci_cp_i2c_pcm_req cp3;
1212 struct hci_cp_sco_pcm_req cp4;
1214 BT_DBG("Setting the WBC params, hdev = %p", hdev);
1215 cp1.voice_setting = cpu_to_le16(0x0003 | 0x0060);
1216 hci_send_cmd(hdev, HCI_OP_WRITE_VOICE_SETTING, sizeof(cp1), &cp1);
1217 hdev->voice_setting = cpu_to_le16(0x0003 | 0x0060);
1219 cp2.role = 0x01; /* Enable */
1220 cp2.pkt_type = cpu_to_le16(0x0002);
1221 hci_send_cmd(hdev, HCI_BCM_ENABLE_WBS_REQ, sizeof(cp2), &cp2);
1223 cp3.i2c_enable = 0x00;
1224 cp3.is_master = 0x00;
1225 cp3.pcm_rate = 0x01;
1226 cp3.clock_rate = 0x02;
1227 hci_send_cmd(hdev, HCI_BCM_I2C_PCM_REQ, sizeof(cp3), &cp3);
1229 cp4.sco_routing = 0x00;
1230 cp4.pcm_rate = 0x00;
1231 cp4.frame_type = 0x00;
1232 cp4.sync_mode = 0x00;
1233 cp4.clock_mode = 0x00;
1234 hci_send_cmd(hdev, HCI_BCM_SCO_PCM_REQ, sizeof(cp4), &cp4);
1237 void sco_connect_set_nbc(struct hci_dev *hdev)
1239 struct hci_cp_write_voice_setting cp1;
1240 struct hci_cp_bcm_wbs_req cp2;
1241 struct hci_cp_i2c_pcm_req cp3;
1242 struct hci_cp_sco_pcm_req cp4;
1244 BT_DBG("Setting the NBC params, hdev = %p", hdev);
1246 cp1.voice_setting = cpu_to_le16(0x0060);
1247 hci_send_cmd(hdev, HCI_OP_WRITE_VOICE_SETTING, sizeof(cp1), &cp1);
1248 hdev->voice_setting = cpu_to_le16(0x0060);
1250 cp2.role = 0x00; /* WbDisable */
1251 cp2.pkt_type = cpu_to_le16(0x0002);
1252 hci_send_cmd(hdev, HCI_BCM_ENABLE_WBS_REQ, sizeof(cp2), &cp2);
1254 cp3.i2c_enable = 0x00;
1255 cp3.is_master = 0x00;
1256 cp3.pcm_rate = 0x00;
1257 cp3.clock_rate = 0x04;
1258 hci_send_cmd(hdev, HCI_BCM_I2C_PCM_REQ, sizeof(cp3), &cp3);
1260 cp4.sco_routing = 0x00;
1261 cp4.pcm_rate = 0x04;
1262 cp4.frame_type = 0x00;
1263 cp4.sync_mode = 0x00;
1264 cp4.clock_mode = 0x00;
1265 hci_send_cmd(hdev, HCI_BCM_SCO_PCM_REQ, sizeof(cp4), &cp4);
1268 void sco_connect_set_wbc(struct hci_dev *hdev)
1270 struct hci_cp_write_voice_setting cp1;
1271 struct hci_cp_bcm_wbs_req cp2;
1272 struct hci_cp_i2c_pcm_req cp3;
1273 struct hci_cp_sco_pcm_req cp4;
1275 BT_DBG("Setting the WBC params, hdev = %p", hdev);
1276 cp1.voice_setting = cpu_to_le16(0x0003 | 0x0060);
1277 hci_send_cmd(hdev, HCI_OP_WRITE_VOICE_SETTING, sizeof(cp1), &cp1);
1278 hdev->voice_setting = cpu_to_le16(0x0003 | 0x0060);
1280 cp2.role = 0x01; /* Enable */
1281 cp2.pkt_type = cpu_to_le16(0x0002);
1282 hci_send_cmd(hdev, HCI_BCM_ENABLE_WBS_REQ, sizeof(cp2), &cp2);
1284 cp3.i2c_enable = 0x00;
1285 cp3.is_master = 0x00;
1286 cp3.pcm_rate = 0x01;
1287 cp3.clock_rate = 0x04;
1288 hci_send_cmd(hdev, HCI_BCM_I2C_PCM_REQ, sizeof(cp3), &cp3);
1290 cp4.sco_routing = 0x00;
1291 cp4.pcm_rate = 0x04;
1292 cp4.frame_type = 0x00;
1293 cp4.sync_mode = 0x00;
1294 cp4.clock_mode = 0x00;
1295 hci_send_cmd(hdev, HCI_BCM_SCO_PCM_REQ, sizeof(cp4), &cp4);
1299 /* ----- SCO interface with lower layer (HCI) ----- */
1300 int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags)
1305 BT_DBG("hdev %s, bdaddr %pMR", hdev->name, bdaddr);
1307 /* Find listening sockets */
1308 read_lock(&sco_sk_list.lock);
1309 sk_for_each(sk, &sco_sk_list.head) {
1310 if (sk->sk_state != BT_LISTEN)
1314 /* Multiple SCO accept feature */
1315 if (!bacmp(&sco_pi(sk)->src, bdaddr) ||
1316 !bacmp(&sco_pi(sk)->src, BDADDR_ANY)) {
1318 if (!bacmp(&sco_pi(sk)->src, &hdev->bdaddr) ||
1319 !bacmp(&sco_pi(sk)->src, BDADDR_ANY)) {
1321 lm |= HCI_LM_ACCEPT;
1323 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))
1324 *flags |= HCI_PROTO_DEFER;
1328 read_unlock(&sco_sk_list.lock);
1331 /* WBC/NBC feature */
1332 if ((lm & HCI_LM_ACCEPT) && !hci_conn_hash_lookup_sco(hdev)) {
1333 struct hci_conn *hcon_acl;
1335 hcon_acl = hci_conn_hash_lookup_ba(hdev, ACL_LINK, bdaddr);
1337 BT_ERR("ACL doesn't alive. Use 0x%X",
1338 hdev->voice_setting);
1340 if (hdev->voice_setting == 0x0063)
1341 sco_connect_set_wbc(hdev);
1343 sco_connect_set_nbc(hdev);
1344 } else if (hcon_acl->sco_role == MGMT_SCO_ROLE_HANDSFREE) {
1345 BT_DBG("Handsfree SCO 0x%X", hcon_acl->voice_setting);
1346 if (hcon_acl->voice_setting == 0x0063)
1347 sco_connect_set_wbc(hdev);
1349 sco_connect_set_nbc(hdev);
1351 BT_DBG("Gateway SCO 0x%X", hcon_acl->voice_setting);
1352 if (hcon_acl->voice_setting == 0x0063)
1353 sco_connect_set_gw_wbc(hdev);
1355 sco_connect_set_gw_nbc(hdev);
1363 static void sco_connect_cfm(struct hci_conn *hcon, __u8 status)
1365 if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
1368 BT_DBG("hcon %p bdaddr %pMR status %u", hcon, &hcon->dst, status);
1371 struct sco_conn *conn;
1373 conn = sco_conn_add(hcon);
1375 sco_conn_ready(conn);
1377 sco_conn_del(hcon, bt_to_errno(status));
1380 static void sco_disconn_cfm(struct hci_conn *hcon, __u8 reason)
1382 if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
1385 BT_DBG("hcon %p reason %d", hcon, reason);
1387 sco_conn_del(hcon, bt_to_errno(reason));
1390 void sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
1392 struct sco_conn *conn = hcon->sco_data;
1397 BT_DBG("conn %p len %u", conn, skb->len);
1400 sco_recv_frame(conn, skb);
1408 static struct hci_cb sco_cb = {
1410 .connect_cfm = sco_connect_cfm,
1411 .disconn_cfm = sco_disconn_cfm,
1414 static int sco_debugfs_show(struct seq_file *f, void *p)
1418 read_lock(&sco_sk_list.lock);
1420 sk_for_each(sk, &sco_sk_list.head) {
1421 seq_printf(f, "%pMR %pMR %d\n", &sco_pi(sk)->src,
1422 &sco_pi(sk)->dst, sk->sk_state);
1425 read_unlock(&sco_sk_list.lock);
1430 DEFINE_SHOW_ATTRIBUTE(sco_debugfs);
1432 static struct dentry *sco_debugfs;
1434 static const struct proto_ops sco_sock_ops = {
1435 .family = PF_BLUETOOTH,
1436 .owner = THIS_MODULE,
1437 .release = sco_sock_release,
1438 .bind = sco_sock_bind,
1439 .connect = sco_sock_connect,
1440 .listen = sco_sock_listen,
1441 .accept = sco_sock_accept,
1442 .getname = sco_sock_getname,
1443 .sendmsg = sco_sock_sendmsg,
1444 .recvmsg = sco_sock_recvmsg,
1445 .poll = bt_sock_poll,
1446 .ioctl = bt_sock_ioctl,
1447 .gettstamp = sock_gettstamp,
1448 .mmap = sock_no_mmap,
1449 .socketpair = sock_no_socketpair,
1450 .shutdown = sco_sock_shutdown,
1451 .setsockopt = sco_sock_setsockopt,
1452 .getsockopt = sco_sock_getsockopt
1455 static const struct net_proto_family sco_sock_family_ops = {
1456 .family = PF_BLUETOOTH,
1457 .owner = THIS_MODULE,
1458 .create = sco_sock_create,
1461 int __init sco_init(void)
1465 BUILD_BUG_ON(sizeof(struct sockaddr_sco) > sizeof(struct sockaddr));
1467 err = proto_register(&sco_proto, 0);
1471 err = bt_sock_register(BTPROTO_SCO, &sco_sock_family_ops);
1473 BT_ERR("SCO socket registration failed");
1477 err = bt_procfs_init(&init_net, "sco", &sco_sk_list, NULL);
1479 BT_ERR("Failed to create SCO proc file");
1480 bt_sock_unregister(BTPROTO_SCO);
1484 BT_INFO("SCO socket layer initialized");
1486 hci_register_cb(&sco_cb);
1488 if (IS_ERR_OR_NULL(bt_debugfs))
1491 sco_debugfs = debugfs_create_file("sco", 0444, bt_debugfs,
1492 NULL, &sco_debugfs_fops);
1497 proto_unregister(&sco_proto);
1503 bt_procfs_cleanup(&init_net, "sco");
1505 debugfs_remove(sco_debugfs);
1507 hci_unregister_cb(&sco_cb);
1509 bt_sock_unregister(BTPROTO_SCO);
1511 proto_unregister(&sco_proto);
1514 module_param(disable_esco, bool, 0644);
1515 MODULE_PARM_DESC(disable_esco, "Disable eSCO connection creation");