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 cinfo.hci_handle = sco_pi(sk)->conn->hcon->handle;
722 memcpy(cinfo.dev_class, sco_pi(sk)->conn->hcon->dev_class, 3);
724 len = min_t(unsigned int, len, sizeof(cinfo));
725 if (copy_to_user(optval, (char *)&cinfo, len))
739 static int sco_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen)
741 struct sock *sk = sock->sk;
746 if (level == SOL_SCO)
747 return sco_sock_getsockopt_old(sock, optname, optval, optlen);
749 if (get_user(len, optlen))
764 static int sco_sock_shutdown(struct socket *sock, int how)
766 struct sock *sk = sock->sk;
769 BT_DBG("sock %p, sk %p", sock, sk);
775 if (!sk->sk_shutdown) {
776 sk->sk_shutdown = SHUTDOWN_MASK;
777 sco_sock_clear_timer(sk);
778 __sco_sock_close(sk);
780 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
781 err = bt_sock_wait_state(sk, BT_CLOSED,
788 static int sco_sock_release(struct socket *sock)
790 struct sock *sk = sock->sk;
793 BT_DBG("sock %p, sk %p", sock, sk);
800 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime) {
802 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
811 static void __sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent)
813 BT_DBG("conn %p", conn);
815 sco_pi(sk)->conn = conn;
819 bt_accept_enqueue(parent, sk);
823 * Must be called on the locked socket. */
824 static void sco_chan_del(struct sock *sk, int err)
826 struct sco_conn *conn;
828 conn = sco_pi(sk)->conn;
830 BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
835 sco_pi(sk)->conn = NULL;
836 sco_conn_unlock(conn);
837 hci_conn_put(conn->hcon);
840 sk->sk_state = BT_CLOSED;
842 sk->sk_state_change(sk);
844 sock_set_flag(sk, SOCK_ZAPPED);
847 static void sco_conn_ready(struct sco_conn *conn)
849 struct sock *parent, *sk;
851 BT_DBG("conn %p", conn);
855 if ((sk = conn->sk)) {
856 sco_sock_clear_timer(sk);
858 sk->sk_state = BT_CONNECTED;
859 sk->sk_state_change(sk);
862 parent = sco_get_sock_listen(conn->src);
866 bh_lock_sock(parent);
868 sk = sco_sock_alloc(sock_net(parent), NULL, BTPROTO_SCO, GFP_ATOMIC);
870 bh_unlock_sock(parent);
874 sco_sock_init(sk, parent);
876 bacpy(&bt_sk(sk)->src, conn->src);
877 bacpy(&bt_sk(sk)->dst, conn->dst);
879 hci_conn_hold(conn->hcon);
880 __sco_chan_add(conn, sk, parent);
882 sk->sk_state = BT_CONNECTED;
885 parent->sk_data_ready(parent, 1);
887 bh_unlock_sock(parent);
891 sco_conn_unlock(conn);
894 /* ----- SCO interface with lower layer (HCI) ----- */
895 static int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type)
897 register struct sock *sk;
898 struct hlist_node *node;
901 if (type != SCO_LINK && type != ESCO_LINK)
904 BT_DBG("hdev %s, bdaddr %s", hdev->name, batostr(bdaddr));
906 /* Find listening sockets */
907 read_lock(&sco_sk_list.lock);
908 sk_for_each(sk, node, &sco_sk_list.head) {
909 if (sk->sk_state != BT_LISTEN)
912 if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr) ||
913 !bacmp(&bt_sk(sk)->src, BDADDR_ANY)) {
918 read_unlock(&sco_sk_list.lock);
923 static int sco_connect_cfm(struct hci_conn *hcon, __u8 status)
925 BT_DBG("hcon %p bdaddr %s status %d", hcon, batostr(&hcon->dst), status);
927 if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
931 struct sco_conn *conn;
933 conn = sco_conn_add(hcon, status);
935 sco_conn_ready(conn);
937 sco_conn_del(hcon, bt_err(status));
942 static int sco_disconn_cfm(struct hci_conn *hcon, __u8 reason)
944 BT_DBG("hcon %p reason %d", hcon, reason);
946 if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
949 sco_conn_del(hcon, bt_err(reason));
954 static int sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
956 struct sco_conn *conn = hcon->sco_data;
961 BT_DBG("conn %p len %d", conn, skb->len);
964 sco_recv_frame(conn, skb);
973 static ssize_t sco_sysfs_show(struct class *dev, char *buf)
976 struct hlist_node *node;
978 int size = PAGE_SIZE;
980 read_lock_bh(&sco_sk_list.lock);
982 sk_for_each(sk, node, &sco_sk_list.head) {
985 len = snprintf(str, size, "%s %s %d\n",
986 batostr(&bt_sk(sk)->src), batostr(&bt_sk(sk)->dst),
996 read_unlock_bh(&sco_sk_list.lock);
1001 static CLASS_ATTR(sco, S_IRUGO, sco_sysfs_show, NULL);
1003 static const struct proto_ops sco_sock_ops = {
1004 .family = PF_BLUETOOTH,
1005 .owner = THIS_MODULE,
1006 .release = sco_sock_release,
1007 .bind = sco_sock_bind,
1008 .connect = sco_sock_connect,
1009 .listen = sco_sock_listen,
1010 .accept = sco_sock_accept,
1011 .getname = sco_sock_getname,
1012 .sendmsg = sco_sock_sendmsg,
1013 .recvmsg = bt_sock_recvmsg,
1014 .poll = bt_sock_poll,
1015 .ioctl = bt_sock_ioctl,
1016 .mmap = sock_no_mmap,
1017 .socketpair = sock_no_socketpair,
1018 .shutdown = sco_sock_shutdown,
1019 .setsockopt = sco_sock_setsockopt,
1020 .getsockopt = sco_sock_getsockopt
1023 static struct net_proto_family sco_sock_family_ops = {
1024 .family = PF_BLUETOOTH,
1025 .owner = THIS_MODULE,
1026 .create = sco_sock_create,
1029 static struct hci_proto sco_hci_proto = {
1031 .id = HCI_PROTO_SCO,
1032 .connect_ind = sco_connect_ind,
1033 .connect_cfm = sco_connect_cfm,
1034 .disconn_cfm = sco_disconn_cfm,
1035 .recv_scodata = sco_recv_scodata
1038 static int __init sco_init(void)
1042 err = proto_register(&sco_proto, 0);
1046 err = bt_sock_register(BTPROTO_SCO, &sco_sock_family_ops);
1048 BT_ERR("SCO socket registration failed");
1052 err = hci_register_proto(&sco_hci_proto);
1054 BT_ERR("SCO protocol registration failed");
1055 bt_sock_unregister(BTPROTO_SCO);
1059 if (class_create_file(bt_class, &class_attr_sco) < 0)
1060 BT_ERR("Failed to create SCO info file");
1062 BT_INFO("SCO (Voice Link) ver %s", VERSION);
1063 BT_INFO("SCO socket layer initialized");
1068 proto_unregister(&sco_proto);
1072 static void __exit sco_exit(void)
1074 class_remove_file(bt_class, &class_attr_sco);
1076 if (bt_sock_unregister(BTPROTO_SCO) < 0)
1077 BT_ERR("SCO socket unregistration failed");
1079 if (hci_unregister_proto(&sco_hci_proto) < 0)
1080 BT_ERR("SCO protocol unregistration failed");
1082 proto_unregister(&sco_proto);
1085 module_init(sco_init);
1086 module_exit(sco_exit);
1088 module_param(disable_esco, bool, 0644);
1089 MODULE_PARM_DESC(disable_esco, "Disable eSCO connection creation");
1091 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
1092 MODULE_DESCRIPTION("Bluetooth SCO ver " VERSION);
1093 MODULE_VERSION(VERSION);
1094 MODULE_LICENSE("GPL");
1095 MODULE_ALIAS("bt-proto-2");