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>
31 #include <net/bluetooth/bluetooth.h>
32 #include <net/bluetooth/hci_core.h>
33 #include <net/bluetooth/sco.h>
35 static bool disable_esco;
37 static const struct proto_ops sco_sock_ops;
39 static struct bt_sock_list sco_sk_list = {
40 .lock = __RW_LOCK_UNLOCKED(sco_sk_list.lock)
43 static void __sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent);
44 static void sco_chan_del(struct sock *sk, int err);
46 static void sco_sock_close(struct sock *sk);
47 static void sco_sock_kill(struct sock *sk);
49 /* ---- SCO timers ---- */
50 static void sco_sock_timeout(unsigned long arg)
52 struct sock *sk = (struct sock *) arg;
54 BT_DBG("sock %p state %d", sk, sk->sk_state);
57 sk->sk_err = ETIMEDOUT;
58 sk->sk_state_change(sk);
65 static void sco_sock_set_timer(struct sock *sk, long timeout)
67 BT_DBG("sock %p state %d timeout %ld", sk, sk->sk_state, timeout);
68 sk_reset_timer(sk, &sk->sk_timer, jiffies + timeout);
71 static void sco_sock_clear_timer(struct sock *sk)
73 BT_DBG("sock %p state %d", sk, sk->sk_state);
74 sk_stop_timer(sk, &sk->sk_timer);
77 /* ---- SCO connections ---- */
78 static struct sco_conn *sco_conn_add(struct hci_conn *hcon)
80 struct hci_dev *hdev = hcon->hdev;
81 struct sco_conn *conn = hcon->sco_data;
86 conn = kzalloc(sizeof(struct sco_conn), GFP_ATOMIC);
90 spin_lock_init(&conn->lock);
92 hcon->sco_data = conn;
95 conn->src = &hdev->bdaddr;
96 conn->dst = &hcon->dst;
98 if (hdev->sco_mtu > 0)
99 conn->mtu = hdev->sco_mtu;
103 BT_DBG("hcon %p conn %p", hcon, conn);
108 static struct sock *sco_chan_get(struct sco_conn *conn)
110 struct sock *sk = NULL;
113 sco_conn_unlock(conn);
117 static int sco_conn_del(struct hci_conn *hcon, int err)
119 struct sco_conn *conn = hcon->sco_data;
125 BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
128 sk = sco_chan_get(conn);
131 sco_sock_clear_timer(sk);
132 sco_chan_del(sk, err);
137 sco_pi(sk)->conn = NULL;
138 sco_conn_unlock(conn);
141 hci_conn_put(conn->hcon);
146 hcon->sco_data = NULL;
151 static int sco_chan_add(struct sco_conn *conn, struct sock *sk,
160 __sco_chan_add(conn, sk, parent);
162 sco_conn_unlock(conn);
166 static int sco_connect(struct sock *sk)
168 bdaddr_t *src = &bt_sk(sk)->src;
169 bdaddr_t *dst = &bt_sk(sk)->dst;
170 struct sco_conn *conn;
171 struct hci_conn *hcon;
172 struct hci_dev *hdev;
175 BT_DBG("%pMR -> %pMR", src, dst);
177 hdev = hci_get_route(dst, src);
179 return -EHOSTUNREACH;
183 if (lmp_esco_capable(hdev) && !disable_esco)
188 hcon = hci_connect(hdev, type, dst, BDADDR_BREDR, BT_SECURITY_LOW,
195 conn = sco_conn_add(hcon);
202 /* Update source addr of the socket */
203 bacpy(src, conn->src);
205 err = sco_chan_add(conn, sk, NULL);
209 if (hcon->state == BT_CONNECTED) {
210 sco_sock_clear_timer(sk);
211 sk->sk_state = BT_CONNECTED;
213 sk->sk_state = BT_CONNECT;
214 sco_sock_set_timer(sk, sk->sk_sndtimeo);
218 hci_dev_unlock(hdev);
223 static int sco_send_frame(struct sock *sk, struct msghdr *msg, int len)
225 struct sco_conn *conn = sco_pi(sk)->conn;
229 /* Check outgoing MTU */
233 BT_DBG("sk %p len %d", sk, len);
235 skb = bt_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err);
239 if (memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len)) {
244 hci_send_sco(conn->hcon, skb);
249 static void sco_recv_frame(struct sco_conn *conn, struct sk_buff *skb)
251 struct sock *sk = sco_chan_get(conn);
256 BT_DBG("sk %p len %d", sk, skb->len);
258 if (sk->sk_state != BT_CONNECTED)
261 if (!sock_queue_rcv_skb(sk, skb))
268 /* -------- Socket interface ---------- */
269 static struct sock *__sco_get_sock_listen_by_addr(bdaddr_t *ba)
271 struct hlist_node *node;
274 sk_for_each(sk, node, &sco_sk_list.head) {
275 if (sk->sk_state != BT_LISTEN)
278 if (!bacmp(&bt_sk(sk)->src, ba))
285 /* Find socket listening on source bdaddr.
286 * Returns closest match.
288 static struct sock *sco_get_sock_listen(bdaddr_t *src)
290 struct sock *sk = NULL, *sk1 = NULL;
291 struct hlist_node *node;
293 read_lock(&sco_sk_list.lock);
295 sk_for_each(sk, node, &sco_sk_list.head) {
296 if (sk->sk_state != BT_LISTEN)
300 if (!bacmp(&bt_sk(sk)->src, src))
304 if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
308 read_unlock(&sco_sk_list.lock);
310 return node ? sk : sk1;
313 static void sco_sock_destruct(struct sock *sk)
317 skb_queue_purge(&sk->sk_receive_queue);
318 skb_queue_purge(&sk->sk_write_queue);
321 static void sco_sock_cleanup_listen(struct sock *parent)
325 BT_DBG("parent %p", parent);
327 /* Close not yet accepted channels */
328 while ((sk = bt_accept_dequeue(parent, NULL))) {
333 parent->sk_state = BT_CLOSED;
334 sock_set_flag(parent, SOCK_ZAPPED);
337 /* Kill socket (only if zapped and orphan)
338 * Must be called on unlocked socket.
340 static void sco_sock_kill(struct sock *sk)
342 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
345 BT_DBG("sk %p state %d", sk, sk->sk_state);
347 /* Kill poor orphan */
348 bt_sock_unlink(&sco_sk_list, sk);
349 sock_set_flag(sk, SOCK_DEAD);
353 static void __sco_sock_close(struct sock *sk)
355 BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
357 switch (sk->sk_state) {
359 sco_sock_cleanup_listen(sk);
364 if (sco_pi(sk)->conn) {
365 sk->sk_state = BT_DISCONN;
366 sco_sock_set_timer(sk, SCO_DISCONN_TIMEOUT);
367 hci_conn_put(sco_pi(sk)->conn->hcon);
368 sco_pi(sk)->conn->hcon = NULL;
370 sco_chan_del(sk, ECONNRESET);
375 sco_chan_del(sk, ECONNRESET);
379 sock_set_flag(sk, SOCK_ZAPPED);
384 /* Must be called on unlocked socket. */
385 static void sco_sock_close(struct sock *sk)
387 sco_sock_clear_timer(sk);
389 __sco_sock_close(sk);
394 static void sco_sock_init(struct sock *sk, struct sock *parent)
399 sk->sk_type = parent->sk_type;
400 bt_sk(sk)->flags = bt_sk(parent)->flags;
401 security_sk_clone(parent, sk);
405 static struct proto sco_proto = {
407 .owner = THIS_MODULE,
408 .obj_size = sizeof(struct sco_pinfo)
411 static struct sock *sco_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio)
415 sk = sk_alloc(net, PF_BLUETOOTH, prio, &sco_proto);
419 sock_init_data(sock, sk);
420 INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
422 sk->sk_destruct = sco_sock_destruct;
423 sk->sk_sndtimeo = SCO_CONN_TIMEOUT;
425 sock_reset_flag(sk, SOCK_ZAPPED);
427 sk->sk_protocol = proto;
428 sk->sk_state = BT_OPEN;
430 setup_timer(&sk->sk_timer, sco_sock_timeout, (unsigned long)sk);
432 bt_sock_link(&sco_sk_list, sk);
436 static int sco_sock_create(struct net *net, struct socket *sock, int protocol,
441 BT_DBG("sock %p", sock);
443 sock->state = SS_UNCONNECTED;
445 if (sock->type != SOCK_SEQPACKET)
446 return -ESOCKTNOSUPPORT;
448 sock->ops = &sco_sock_ops;
450 sk = sco_sock_alloc(net, sock, protocol, GFP_ATOMIC);
454 sco_sock_init(sk, NULL);
458 static int sco_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
460 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
461 struct sock *sk = sock->sk;
464 BT_DBG("sk %p %pMR", sk, &sa->sco_bdaddr);
466 if (!addr || addr->sa_family != AF_BLUETOOTH)
471 if (sk->sk_state != BT_OPEN) {
476 if (sk->sk_type != SOCK_SEQPACKET) {
481 bacpy(&bt_sk(sk)->src, &sa->sco_bdaddr);
483 sk->sk_state = BT_BOUND;
490 static int sco_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
492 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
493 struct sock *sk = sock->sk;
499 if (alen < sizeof(struct sockaddr_sco) ||
500 addr->sa_family != AF_BLUETOOTH)
503 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND)
506 if (sk->sk_type != SOCK_SEQPACKET)
511 /* Set destination address and psm */
512 bacpy(&bt_sk(sk)->dst, &sa->sco_bdaddr);
514 err = sco_connect(sk);
518 err = bt_sock_wait_state(sk, BT_CONNECTED,
519 sock_sndtimeo(sk, flags & O_NONBLOCK));
526 static int sco_sock_listen(struct socket *sock, int backlog)
528 struct sock *sk = sock->sk;
529 bdaddr_t *src = &bt_sk(sk)->src;
532 BT_DBG("sk %p backlog %d", sk, backlog);
536 if (sk->sk_state != BT_BOUND) {
541 if (sk->sk_type != SOCK_SEQPACKET) {
546 write_lock(&sco_sk_list.lock);
548 if (__sco_get_sock_listen_by_addr(src)) {
553 sk->sk_max_ack_backlog = backlog;
554 sk->sk_ack_backlog = 0;
556 sk->sk_state = BT_LISTEN;
559 write_unlock(&sco_sk_list.lock);
566 static int sco_sock_accept(struct socket *sock, struct socket *newsock, int flags)
568 DECLARE_WAITQUEUE(wait, current);
569 struct sock *sk = sock->sk, *ch;
575 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
577 BT_DBG("sk %p timeo %ld", sk, timeo);
579 /* Wait for an incoming connection. (wake-one). */
580 add_wait_queue_exclusive(sk_sleep(sk), &wait);
582 set_current_state(TASK_INTERRUPTIBLE);
584 if (sk->sk_state != BT_LISTEN) {
589 ch = bt_accept_dequeue(sk, newsock);
598 if (signal_pending(current)) {
599 err = sock_intr_errno(timeo);
604 timeo = schedule_timeout(timeo);
607 __set_current_state(TASK_RUNNING);
608 remove_wait_queue(sk_sleep(sk), &wait);
613 newsock->state = SS_CONNECTED;
615 BT_DBG("new socket %p", ch);
622 static int sco_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
624 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
625 struct sock *sk = sock->sk;
627 BT_DBG("sock %p, sk %p", sock, sk);
629 addr->sa_family = AF_BLUETOOTH;
630 *len = sizeof(struct sockaddr_sco);
633 bacpy(&sa->sco_bdaddr, &bt_sk(sk)->dst);
635 bacpy(&sa->sco_bdaddr, &bt_sk(sk)->src);
640 static int sco_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
641 struct msghdr *msg, size_t len)
643 struct sock *sk = sock->sk;
646 BT_DBG("sock %p, sk %p", sock, sk);
648 err = sock_error(sk);
652 if (msg->msg_flags & MSG_OOB)
657 if (sk->sk_state == BT_CONNECTED)
658 err = sco_send_frame(sk, msg, len);
666 static int sco_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
667 struct msghdr *msg, size_t len, int flags)
669 struct sock *sk = sock->sk;
670 struct sco_pinfo *pi = sco_pi(sk);
674 if (sk->sk_state == BT_CONNECT2 &&
675 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
676 hci_conn_accept(pi->conn->hcon, 0);
677 sk->sk_state = BT_CONFIG;
685 return bt_sock_recvmsg(iocb, sock, msg, len, flags);
688 static int sco_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen)
690 struct sock *sk = sock->sk;
701 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
706 if (get_user(opt, (u32 __user *) optval)) {
712 set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
714 clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
726 static int sco_sock_getsockopt_old(struct socket *sock, int optname, char __user *optval, int __user *optlen)
728 struct sock *sk = sock->sk;
729 struct sco_options opts;
730 struct sco_conninfo cinfo;
735 if (get_user(len, optlen))
742 if (sk->sk_state != BT_CONNECTED) {
747 opts.mtu = sco_pi(sk)->conn->mtu;
749 BT_DBG("mtu %d", opts.mtu);
751 len = min_t(unsigned int, len, sizeof(opts));
752 if (copy_to_user(optval, (char *)&opts, len))
758 if (sk->sk_state != BT_CONNECTED) {
763 memset(&cinfo, 0, sizeof(cinfo));
764 cinfo.hci_handle = sco_pi(sk)->conn->hcon->handle;
765 memcpy(cinfo.dev_class, sco_pi(sk)->conn->hcon->dev_class, 3);
767 len = min_t(unsigned int, len, sizeof(cinfo));
768 if (copy_to_user(optval, (char *)&cinfo, len))
782 static int sco_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen)
784 struct sock *sk = sock->sk;
789 if (level == SOL_SCO)
790 return sco_sock_getsockopt_old(sock, optname, optval, optlen);
792 if (get_user(len, optlen))
800 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
805 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
806 (u32 __user *) optval))
820 static int sco_sock_shutdown(struct socket *sock, int how)
822 struct sock *sk = sock->sk;
825 BT_DBG("sock %p, sk %p", sock, sk);
831 if (!sk->sk_shutdown) {
832 sk->sk_shutdown = SHUTDOWN_MASK;
833 sco_sock_clear_timer(sk);
834 __sco_sock_close(sk);
836 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
837 err = bt_sock_wait_state(sk, BT_CLOSED,
844 static int sco_sock_release(struct socket *sock)
846 struct sock *sk = sock->sk;
849 BT_DBG("sock %p, sk %p", sock, sk);
856 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime) {
858 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
867 static void __sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent)
869 BT_DBG("conn %p", conn);
871 sco_pi(sk)->conn = conn;
875 bt_accept_enqueue(parent, sk);
879 * Must be called on the locked socket. */
880 static void sco_chan_del(struct sock *sk, int err)
882 struct sco_conn *conn;
884 conn = sco_pi(sk)->conn;
886 BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
888 sk->sk_state = BT_CLOSED;
890 sk->sk_state_change(sk);
892 sock_set_flag(sk, SOCK_ZAPPED);
895 static void sco_conn_ready(struct sco_conn *conn)
898 struct sock *sk = conn->sk;
900 BT_DBG("conn %p", conn);
905 sco_sock_clear_timer(sk);
907 sk->sk_state = BT_CONNECTED;
908 sk->sk_state_change(sk);
911 parent = sco_get_sock_listen(conn->src);
915 bh_lock_sock(parent);
917 sk = sco_sock_alloc(sock_net(parent), NULL,
918 BTPROTO_SCO, GFP_ATOMIC);
920 bh_unlock_sock(parent);
924 sco_sock_init(sk, parent);
926 bacpy(&bt_sk(sk)->src, conn->src);
927 bacpy(&bt_sk(sk)->dst, conn->dst);
929 hci_conn_hold(conn->hcon);
930 __sco_chan_add(conn, sk, parent);
932 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(parent)->flags))
933 sk->sk_state = BT_CONNECT2;
935 sk->sk_state = BT_CONNECTED;
938 parent->sk_data_ready(parent, 1);
940 bh_unlock_sock(parent);
944 sco_conn_unlock(conn);
947 /* ----- SCO interface with lower layer (HCI) ----- */
948 int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags)
951 struct hlist_node *node;
954 BT_DBG("hdev %s, bdaddr %pMR", hdev->name, bdaddr);
956 /* Find listening sockets */
957 read_lock(&sco_sk_list.lock);
958 sk_for_each(sk, node, &sco_sk_list.head) {
959 if (sk->sk_state != BT_LISTEN)
962 if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr) ||
963 !bacmp(&bt_sk(sk)->src, BDADDR_ANY)) {
966 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))
967 *flags |= HCI_PROTO_DEFER;
971 read_unlock(&sco_sk_list.lock);
976 void sco_connect_cfm(struct hci_conn *hcon, __u8 status)
978 BT_DBG("hcon %p bdaddr %pMR status %d", hcon, &hcon->dst, status);
980 struct sco_conn *conn;
982 conn = sco_conn_add(hcon);
984 sco_conn_ready(conn);
986 sco_conn_del(hcon, bt_to_errno(status));
989 void sco_disconn_cfm(struct hci_conn *hcon, __u8 reason)
991 BT_DBG("hcon %p reason %d", hcon, reason);
993 sco_conn_del(hcon, bt_to_errno(reason));
996 int sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
998 struct sco_conn *conn = hcon->sco_data;
1003 BT_DBG("conn %p len %d", conn, skb->len);
1006 sco_recv_frame(conn, skb);
1015 static int sco_debugfs_show(struct seq_file *f, void *p)
1018 struct hlist_node *node;
1020 read_lock(&sco_sk_list.lock);
1022 sk_for_each(sk, node, &sco_sk_list.head) {
1023 seq_printf(f, "%pMR %pMR %d\n", &bt_sk(sk)->src,
1024 &bt_sk(sk)->dst, sk->sk_state);
1027 read_unlock(&sco_sk_list.lock);
1032 static int sco_debugfs_open(struct inode *inode, struct file *file)
1034 return single_open(file, sco_debugfs_show, inode->i_private);
1037 static const struct file_operations sco_debugfs_fops = {
1038 .open = sco_debugfs_open,
1040 .llseek = seq_lseek,
1041 .release = single_release,
1044 static struct dentry *sco_debugfs;
1046 static const struct proto_ops sco_sock_ops = {
1047 .family = PF_BLUETOOTH,
1048 .owner = THIS_MODULE,
1049 .release = sco_sock_release,
1050 .bind = sco_sock_bind,
1051 .connect = sco_sock_connect,
1052 .listen = sco_sock_listen,
1053 .accept = sco_sock_accept,
1054 .getname = sco_sock_getname,
1055 .sendmsg = sco_sock_sendmsg,
1056 .recvmsg = sco_sock_recvmsg,
1057 .poll = bt_sock_poll,
1058 .ioctl = bt_sock_ioctl,
1059 .mmap = sock_no_mmap,
1060 .socketpair = sock_no_socketpair,
1061 .shutdown = sco_sock_shutdown,
1062 .setsockopt = sco_sock_setsockopt,
1063 .getsockopt = sco_sock_getsockopt
1066 static const struct net_proto_family sco_sock_family_ops = {
1067 .family = PF_BLUETOOTH,
1068 .owner = THIS_MODULE,
1069 .create = sco_sock_create,
1072 int __init sco_init(void)
1076 err = proto_register(&sco_proto, 0);
1080 err = bt_sock_register(BTPROTO_SCO, &sco_sock_family_ops);
1082 BT_ERR("SCO socket registration failed");
1086 err = bt_procfs_init(THIS_MODULE, &init_net, "sco", &sco_sk_list, NULL);
1088 BT_ERR("Failed to create SCO proc file");
1089 bt_sock_unregister(BTPROTO_SCO);
1094 sco_debugfs = debugfs_create_file("sco", 0444, bt_debugfs,
1095 NULL, &sco_debugfs_fops);
1097 BT_ERR("Failed to create SCO debug file");
1100 BT_INFO("SCO socket layer initialized");
1105 proto_unregister(&sco_proto);
1109 void __exit sco_exit(void)
1111 bt_procfs_cleanup(&init_net, "sco");
1113 debugfs_remove(sco_debugfs);
1115 if (bt_sock_unregister(BTPROTO_SCO) < 0)
1116 BT_ERR("SCO socket unregistration failed");
1118 proto_unregister(&sco_proto);
1121 module_param(disable_esco, bool, 0644);
1122 MODULE_PARM_DESC(disable_esco, "Disable eSCO connection creation");