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>
29 #include <linux/types.h>
30 #include <linux/errno.h>
31 #include <linux/kernel.h>
32 #include <linux/sched.h>
33 #include <linux/slab.h>
34 #include <linux/poll.h>
35 #include <linux/fcntl.h>
36 #include <linux/init.h>
37 #include <linux/interrupt.h>
38 #include <linux/socket.h>
39 #include <linux/skbuff.h>
40 #include <linux/device.h>
41 #include <linux/list.h>
44 #include <asm/system.h>
45 #include <asm/uaccess.h>
47 #include <net/bluetooth/bluetooth.h>
48 #include <net/bluetooth/hci_core.h>
49 #include <net/bluetooth/sco.h>
53 static int disable_esco = 0;
55 static const struct proto_ops sco_sock_ops;
57 static struct bt_sock_list sco_sk_list = {
58 .lock = __RW_LOCK_UNLOCKED(sco_sk_list.lock)
61 static void __sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent);
62 static void sco_chan_del(struct sock *sk, int err);
64 static int sco_conn_del(struct hci_conn *conn, int err);
66 static void sco_sock_close(struct sock *sk);
67 static void sco_sock_kill(struct sock *sk);
69 /* ---- SCO timers ---- */
70 static void sco_sock_timeout(unsigned long arg)
72 struct sock *sk = (struct sock *) arg;
74 BT_DBG("sock %p state %d", sk, sk->sk_state);
77 sk->sk_err = ETIMEDOUT;
78 sk->sk_state_change(sk);
85 static void sco_sock_set_timer(struct sock *sk, long timeout)
87 BT_DBG("sock %p state %d timeout %ld", sk, sk->sk_state, timeout);
88 sk_reset_timer(sk, &sk->sk_timer, jiffies + timeout);
91 static void sco_sock_clear_timer(struct sock *sk)
93 BT_DBG("sock %p state %d", sk, sk->sk_state);
94 sk_stop_timer(sk, &sk->sk_timer);
97 /* ---- SCO connections ---- */
98 static struct sco_conn *sco_conn_add(struct hci_conn *hcon, __u8 status)
100 struct hci_dev *hdev = hcon->hdev;
101 struct sco_conn *conn = hcon->sco_data;
106 conn = kzalloc(sizeof(struct sco_conn), GFP_ATOMIC);
110 spin_lock_init(&conn->lock);
112 hcon->sco_data = conn;
115 conn->src = &hdev->bdaddr;
116 conn->dst = &hcon->dst;
118 if (hdev->sco_mtu > 0)
119 conn->mtu = hdev->sco_mtu;
123 BT_DBG("hcon %p conn %p", hcon, conn);
128 static inline struct sock *sco_chan_get(struct sco_conn *conn)
130 struct sock *sk = NULL;
133 sco_conn_unlock(conn);
137 static int sco_conn_del(struct hci_conn *hcon, int err)
139 struct sco_conn *conn;
142 if (!(conn = hcon->sco_data))
145 BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
148 if ((sk = sco_chan_get(conn))) {
150 sco_sock_clear_timer(sk);
151 sco_chan_del(sk, err);
156 hcon->sco_data = NULL;
161 static inline int sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent)
169 __sco_chan_add(conn, sk, parent);
171 sco_conn_unlock(conn);
175 static int sco_connect(struct sock *sk)
177 bdaddr_t *src = &bt_sk(sk)->src;
178 bdaddr_t *dst = &bt_sk(sk)->dst;
179 __u16 pkt_type = sco_pi(sk)->pkt_type;
180 struct sco_conn *conn;
181 struct hci_conn *hcon;
182 struct hci_dev *hdev;
185 BT_DBG("%s -> %s", batostr(src), batostr(dst));
187 if (!(hdev = hci_get_route(dst, src)))
188 return -EHOSTUNREACH;
190 hci_dev_lock_bh(hdev);
194 if (lmp_esco_capable(hdev) && !disable_esco)
198 pkt_type &= SCO_ESCO_MASK;
201 hcon = hci_connect(hdev, type, pkt_type, dst,
202 BT_SECURITY_LOW, HCI_AT_NO_BONDING);
206 conn = sco_conn_add(hcon, 0);
212 /* Update source addr of the socket */
213 bacpy(src, conn->src);
215 err = sco_chan_add(conn, sk, NULL);
219 if (hcon->state == BT_CONNECTED) {
220 sco_sock_clear_timer(sk);
221 sk->sk_state = BT_CONNECTED;
223 sk->sk_state = BT_CONNECT;
224 sco_sock_set_timer(sk, sk->sk_sndtimeo);
228 hci_dev_unlock_bh(hdev);
233 static inline int sco_send_frame(struct sock *sk, struct msghdr *msg, int len)
235 struct sco_conn *conn = sco_pi(sk)->conn;
239 /* Check outgoing MTU */
243 BT_DBG("sk %p len %d", sk, len);
245 count = min_t(unsigned int, conn->mtu, len);
246 if (!(skb = bt_skb_send_alloc(sk, count, msg->msg_flags & MSG_DONTWAIT, &err)))
249 if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count)) {
254 if ((err = hci_send_sco(conn->hcon, skb)) < 0)
264 static inline void sco_recv_frame(struct sco_conn *conn, struct sk_buff *skb)
266 struct sock *sk = sco_chan_get(conn);
271 BT_DBG("sk %p len %d", sk, skb->len);
273 if (sk->sk_state != BT_CONNECTED)
276 if (!sock_queue_rcv_skb(sk, skb))
284 /* -------- Socket interface ---------- */
285 static struct sock *__sco_get_sock_by_addr(bdaddr_t *ba)
288 struct hlist_node *node;
290 sk_for_each(sk, node, &sco_sk_list.head)
291 if (!bacmp(&bt_sk(sk)->src, ba))
298 /* Find socket listening on source bdaddr.
299 * Returns closest match.
301 static struct sock *sco_get_sock_listen(bdaddr_t *src)
303 struct sock *sk = NULL, *sk1 = NULL;
304 struct hlist_node *node;
306 read_lock(&sco_sk_list.lock);
308 sk_for_each(sk, node, &sco_sk_list.head) {
309 if (sk->sk_state != BT_LISTEN)
313 if (!bacmp(&bt_sk(sk)->src, src))
317 if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
321 read_unlock(&sco_sk_list.lock);
323 return node ? sk : sk1;
326 static void sco_sock_destruct(struct sock *sk)
330 skb_queue_purge(&sk->sk_receive_queue);
331 skb_queue_purge(&sk->sk_write_queue);
334 static void sco_sock_cleanup_listen(struct sock *parent)
338 BT_DBG("parent %p", parent);
340 /* Close not yet accepted channels */
341 while ((sk = bt_accept_dequeue(parent, NULL))) {
346 parent->sk_state = BT_CLOSED;
347 sock_set_flag(parent, SOCK_ZAPPED);
350 /* Kill socket (only if zapped and orphan)
351 * Must be called on unlocked socket.
353 static void sco_sock_kill(struct sock *sk)
355 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
358 BT_DBG("sk %p state %d", sk, sk->sk_state);
360 /* Kill poor orphan */
361 bt_sock_unlink(&sco_sk_list, sk);
362 sock_set_flag(sk, SOCK_DEAD);
366 static void __sco_sock_close(struct sock *sk)
368 BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
370 switch (sk->sk_state) {
372 sco_sock_cleanup_listen(sk);
379 sco_chan_del(sk, ECONNRESET);
383 sock_set_flag(sk, SOCK_ZAPPED);
388 /* Must be called on unlocked socket. */
389 static void sco_sock_close(struct sock *sk)
391 sco_sock_clear_timer(sk);
393 __sco_sock_close(sk);
398 static void sco_sock_init(struct sock *sk, struct sock *parent)
403 sk->sk_type = parent->sk_type;
406 static struct proto sco_proto = {
408 .owner = THIS_MODULE,
409 .obj_size = sizeof(struct sco_pinfo)
412 static struct sock *sco_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio)
416 sk = sk_alloc(net, PF_BLUETOOTH, prio, &sco_proto);
420 sock_init_data(sock, sk);
421 INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
423 sk->sk_destruct = sco_sock_destruct;
424 sk->sk_sndtimeo = SCO_CONN_TIMEOUT;
426 sock_reset_flag(sk, SOCK_ZAPPED);
428 sk->sk_protocol = proto;
429 sk->sk_state = BT_OPEN;
431 setup_timer(&sk->sk_timer, sco_sock_timeout, (unsigned long)sk);
433 bt_sock_link(&sco_sk_list, sk);
437 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 alen)
460 struct sockaddr_sco sa;
461 struct sock *sk = sock->sk;
462 bdaddr_t *src = &sa.sco_bdaddr;
465 BT_DBG("sk %p %s", sk, batostr(&sa.sco_bdaddr));
467 if (!addr || addr->sa_family != AF_BLUETOOTH)
470 memset(&sa, 0, sizeof(sa));
471 len = min_t(unsigned int, sizeof(sa), alen);
472 memcpy(&sa, addr, len);
476 if (sk->sk_state != BT_OPEN) {
481 write_lock_bh(&sco_sk_list.lock);
483 if (bacmp(src, BDADDR_ANY) && __sco_get_sock_by_addr(src)) {
486 /* Save source address */
487 bacpy(&bt_sk(sk)->src, &sa.sco_bdaddr);
488 sco_pi(sk)->pkt_type = sa.sco_pkt_type;
489 sk->sk_state = BT_BOUND;
492 write_unlock_bh(&sco_sk_list.lock);
499 static int sco_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
501 struct sock *sk = sock->sk;
502 struct sockaddr_sco sa;
507 if (!addr || addr->sa_family != AF_BLUETOOTH)
510 memset(&sa, 0, sizeof(sa));
511 len = min_t(unsigned int, sizeof(sa), alen);
512 memcpy(&sa, addr, len);
516 if (sk->sk_type != SOCK_SEQPACKET) {
521 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND) {
526 /* Set destination address and psm */
527 bacpy(&bt_sk(sk)->dst, &sa.sco_bdaddr);
528 sco_pi(sk)->pkt_type = sa.sco_pkt_type;
530 if ((err = sco_connect(sk)))
533 err = bt_sock_wait_state(sk, BT_CONNECTED,
534 sock_sndtimeo(sk, flags & O_NONBLOCK));
541 static int sco_sock_listen(struct socket *sock, int backlog)
543 struct sock *sk = sock->sk;
546 BT_DBG("sk %p backlog %d", sk, backlog);
550 if (sk->sk_state != BT_BOUND || sock->type != SOCK_SEQPACKET) {
555 sk->sk_max_ack_backlog = backlog;
556 sk->sk_ack_backlog = 0;
557 sk->sk_state = BT_LISTEN;
564 static int sco_sock_accept(struct socket *sock, struct socket *newsock, int flags)
566 DECLARE_WAITQUEUE(wait, current);
567 struct sock *sk = sock->sk, *ch;
573 if (sk->sk_state != BT_LISTEN) {
578 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
580 BT_DBG("sk %p timeo %ld", sk, timeo);
582 /* Wait for an incoming connection. (wake-one). */
583 add_wait_queue_exclusive(sk->sk_sleep, &wait);
584 while (!(ch = bt_accept_dequeue(sk, newsock))) {
585 set_current_state(TASK_INTERRUPTIBLE);
592 timeo = schedule_timeout(timeo);
595 if (sk->sk_state != BT_LISTEN) {
600 if (signal_pending(current)) {
601 err = sock_intr_errno(timeo);
605 set_current_state(TASK_RUNNING);
606 remove_wait_queue(sk->sk_sleep, &wait);
611 newsock->state = SS_CONNECTED;
613 BT_DBG("new socket %p", ch);
620 static int sco_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
622 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
623 struct sock *sk = sock->sk;
625 BT_DBG("sock %p, sk %p", sock, sk);
627 addr->sa_family = AF_BLUETOOTH;
628 *len = sizeof(struct sockaddr_sco);
631 bacpy(&sa->sco_bdaddr, &bt_sk(sk)->dst);
633 bacpy(&sa->sco_bdaddr, &bt_sk(sk)->src);
634 sa->sco_pkt_type = sco_pi(sk)->pkt_type;
639 static int sco_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
640 struct msghdr *msg, size_t len)
642 struct sock *sk = sock->sk;
645 BT_DBG("sock %p, sk %p", sock, sk);
647 err = sock_error(sk);
651 if (msg->msg_flags & MSG_OOB)
656 if (sk->sk_state == BT_CONNECTED)
657 err = sco_send_frame(sk, msg, len);
665 static int sco_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen)
667 struct sock *sk = sock->sk;
684 static int sco_sock_getsockopt_old(struct socket *sock, int optname, char __user *optval, int __user *optlen)
686 struct sock *sk = sock->sk;
687 struct sco_options opts;
688 struct sco_conninfo cinfo;
693 if (get_user(len, optlen))
700 if (sk->sk_state != BT_CONNECTED) {
705 opts.mtu = sco_pi(sk)->conn->mtu;
707 BT_DBG("mtu %d", opts.mtu);
709 len = min_t(unsigned int, len, sizeof(opts));
710 if (copy_to_user(optval, (char *)&opts, len))
716 if (sk->sk_state != BT_CONNECTED) {
721 memset(&cinfo, 0, sizeof(cinfo));
722 cinfo.hci_handle = sco_pi(sk)->conn->hcon->handle;
723 memcpy(cinfo.dev_class, sco_pi(sk)->conn->hcon->dev_class, 3);
725 len = min_t(unsigned int, len, sizeof(cinfo));
726 if (copy_to_user(optval, (char *)&cinfo, len))
740 static int sco_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen)
742 struct sock *sk = sock->sk;
747 if (level == SOL_SCO)
748 return sco_sock_getsockopt_old(sock, optname, optval, optlen);
750 if (get_user(len, optlen))
765 static int sco_sock_shutdown(struct socket *sock, int how)
767 struct sock *sk = sock->sk;
770 BT_DBG("sock %p, sk %p", sock, sk);
776 if (!sk->sk_shutdown) {
777 sk->sk_shutdown = SHUTDOWN_MASK;
778 sco_sock_clear_timer(sk);
779 __sco_sock_close(sk);
781 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
782 err = bt_sock_wait_state(sk, BT_CLOSED,
789 static int sco_sock_release(struct socket *sock)
791 struct sock *sk = sock->sk;
794 BT_DBG("sock %p, sk %p", sock, sk);
801 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime) {
803 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
812 static void __sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent)
814 BT_DBG("conn %p", conn);
816 sco_pi(sk)->conn = conn;
820 bt_accept_enqueue(parent, sk);
824 * Must be called on the locked socket. */
825 static void sco_chan_del(struct sock *sk, int err)
827 struct sco_conn *conn;
829 conn = sco_pi(sk)->conn;
831 BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
836 sco_pi(sk)->conn = NULL;
837 sco_conn_unlock(conn);
838 hci_conn_put(conn->hcon);
841 sk->sk_state = BT_CLOSED;
843 sk->sk_state_change(sk);
845 sock_set_flag(sk, SOCK_ZAPPED);
848 static void sco_conn_ready(struct sco_conn *conn)
850 struct sock *parent, *sk;
852 BT_DBG("conn %p", conn);
856 if ((sk = conn->sk)) {
857 sco_sock_clear_timer(sk);
859 sk->sk_state = BT_CONNECTED;
860 sk->sk_state_change(sk);
863 parent = sco_get_sock_listen(conn->src);
867 bh_lock_sock(parent);
869 sk = sco_sock_alloc(sock_net(parent), NULL, BTPROTO_SCO, GFP_ATOMIC);
871 bh_unlock_sock(parent);
875 sco_sock_init(sk, parent);
877 bacpy(&bt_sk(sk)->src, conn->src);
878 bacpy(&bt_sk(sk)->dst, conn->dst);
880 hci_conn_hold(conn->hcon);
881 __sco_chan_add(conn, sk, parent);
883 sk->sk_state = BT_CONNECTED;
886 parent->sk_data_ready(parent, 1);
888 bh_unlock_sock(parent);
892 sco_conn_unlock(conn);
895 /* ----- SCO interface with lower layer (HCI) ----- */
896 static int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type)
898 register struct sock *sk;
899 struct hlist_node *node;
902 if (type != SCO_LINK && type != ESCO_LINK)
905 BT_DBG("hdev %s, bdaddr %s", hdev->name, batostr(bdaddr));
907 /* Find listening sockets */
908 read_lock(&sco_sk_list.lock);
909 sk_for_each(sk, node, &sco_sk_list.head) {
910 if (sk->sk_state != BT_LISTEN)
913 if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr) ||
914 !bacmp(&bt_sk(sk)->src, BDADDR_ANY)) {
919 read_unlock(&sco_sk_list.lock);
924 static int sco_connect_cfm(struct hci_conn *hcon, __u8 status)
926 BT_DBG("hcon %p bdaddr %s status %d", hcon, batostr(&hcon->dst), status);
928 if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
932 struct sco_conn *conn;
934 conn = sco_conn_add(hcon, status);
936 sco_conn_ready(conn);
938 sco_conn_del(hcon, bt_err(status));
943 static int sco_disconn_cfm(struct hci_conn *hcon, __u8 reason)
945 BT_DBG("hcon %p reason %d", hcon, reason);
947 if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
950 sco_conn_del(hcon, bt_err(reason));
955 static int sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
957 struct sco_conn *conn = hcon->sco_data;
962 BT_DBG("conn %p len %d", conn, skb->len);
965 sco_recv_frame(conn, skb);
974 static ssize_t sco_sysfs_show(struct class *dev, char *buf)
977 struct hlist_node *node;
979 int size = PAGE_SIZE;
981 read_lock_bh(&sco_sk_list.lock);
983 sk_for_each(sk, node, &sco_sk_list.head) {
986 len = snprintf(str, size, "%s %s %d\n",
987 batostr(&bt_sk(sk)->src), batostr(&bt_sk(sk)->dst),
997 read_unlock_bh(&sco_sk_list.lock);
1002 static CLASS_ATTR(sco, S_IRUGO, sco_sysfs_show, NULL);
1004 static const struct proto_ops sco_sock_ops = {
1005 .family = PF_BLUETOOTH,
1006 .owner = THIS_MODULE,
1007 .release = sco_sock_release,
1008 .bind = sco_sock_bind,
1009 .connect = sco_sock_connect,
1010 .listen = sco_sock_listen,
1011 .accept = sco_sock_accept,
1012 .getname = sco_sock_getname,
1013 .sendmsg = sco_sock_sendmsg,
1014 .recvmsg = bt_sock_recvmsg,
1015 .poll = bt_sock_poll,
1016 .ioctl = bt_sock_ioctl,
1017 .mmap = sock_no_mmap,
1018 .socketpair = sock_no_socketpair,
1019 .shutdown = sco_sock_shutdown,
1020 .setsockopt = sco_sock_setsockopt,
1021 .getsockopt = sco_sock_getsockopt
1024 static struct net_proto_family sco_sock_family_ops = {
1025 .family = PF_BLUETOOTH,
1026 .owner = THIS_MODULE,
1027 .create = sco_sock_create,
1030 static struct hci_proto sco_hci_proto = {
1032 .id = HCI_PROTO_SCO,
1033 .connect_ind = sco_connect_ind,
1034 .connect_cfm = sco_connect_cfm,
1035 .disconn_cfm = sco_disconn_cfm,
1036 .recv_scodata = sco_recv_scodata
1039 static int __init sco_init(void)
1043 err = proto_register(&sco_proto, 0);
1047 err = bt_sock_register(BTPROTO_SCO, &sco_sock_family_ops);
1049 BT_ERR("SCO socket registration failed");
1053 err = hci_register_proto(&sco_hci_proto);
1055 BT_ERR("SCO protocol registration failed");
1056 bt_sock_unregister(BTPROTO_SCO);
1060 if (class_create_file(bt_class, &class_attr_sco) < 0)
1061 BT_ERR("Failed to create SCO info file");
1063 BT_INFO("SCO (Voice Link) ver %s", VERSION);
1064 BT_INFO("SCO socket layer initialized");
1069 proto_unregister(&sco_proto);
1073 static void __exit sco_exit(void)
1075 class_remove_file(bt_class, &class_attr_sco);
1077 if (bt_sock_unregister(BTPROTO_SCO) < 0)
1078 BT_ERR("SCO socket unregistration failed");
1080 if (hci_unregister_proto(&sco_hci_proto) < 0)
1081 BT_ERR("SCO protocol unregistration failed");
1083 proto_unregister(&sco_proto);
1086 module_init(sco_init);
1087 module_exit(sco_exit);
1089 module_param(disable_esco, bool, 0644);
1090 MODULE_PARM_DESC(disable_esco, "Disable eSCO connection creation");
1092 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
1093 MODULE_DESCRIPTION("Bluetooth SCO ver " VERSION);
1094 MODULE_VERSION(VERSION);
1095 MODULE_LICENSE("GPL");
1096 MODULE_ALIAS("bt-proto-2");