[SCSI] aacraid: convert to use the data buffer accessors
[linux-2.6] / net / bluetooth / sco.c
1 /*
2    BlueZ - Bluetooth protocol stack for Linux
3    Copyright (C) 2000-2001 Qualcomm Incorporated
4
5    Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
6
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;
10
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.
19
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.
23 */
24
25 /* Bluetooth SCO sockets. */
26
27 #include <linux/module.h>
28
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>
42 #include <net/sock.h>
43
44 #include <asm/system.h>
45 #include <asm/uaccess.h>
46
47 #include <net/bluetooth/bluetooth.h>
48 #include <net/bluetooth/hci_core.h>
49 #include <net/bluetooth/sco.h>
50
51 #ifndef CONFIG_BT_SCO_DEBUG
52 #undef  BT_DBG
53 #define BT_DBG(D...)
54 #endif
55
56 #define VERSION "0.5"
57
58 static const struct proto_ops sco_sock_ops;
59
60 static struct bt_sock_list sco_sk_list = {
61         .lock = RW_LOCK_UNLOCKED
62 };
63
64 static void __sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent);
65 static void sco_chan_del(struct sock *sk, int err);
66
67 static int  sco_conn_del(struct hci_conn *conn, int err);
68
69 static void sco_sock_close(struct sock *sk);
70 static void sco_sock_kill(struct sock *sk);
71
72 /* ---- SCO timers ---- */
73 static void sco_sock_timeout(unsigned long arg)
74 {
75         struct sock *sk = (struct sock *) arg;
76
77         BT_DBG("sock %p state %d", sk, sk->sk_state);
78
79         bh_lock_sock(sk);
80         sk->sk_err = ETIMEDOUT;
81         sk->sk_state_change(sk);
82         bh_unlock_sock(sk);
83
84         sco_sock_kill(sk);
85         sock_put(sk);
86 }
87
88 static void sco_sock_set_timer(struct sock *sk, long timeout)
89 {
90         BT_DBG("sock %p state %d timeout %ld", sk, sk->sk_state, timeout);
91         sk_reset_timer(sk, &sk->sk_timer, jiffies + timeout);
92 }
93
94 static void sco_sock_clear_timer(struct sock *sk)
95 {
96         BT_DBG("sock %p state %d", sk, sk->sk_state);
97         sk_stop_timer(sk, &sk->sk_timer);
98 }
99
100 static void sco_sock_init_timer(struct sock *sk)
101 {
102         init_timer(&sk->sk_timer);
103         sk->sk_timer.function = sco_sock_timeout;
104         sk->sk_timer.data = (unsigned long)sk;
105 }
106
107 /* ---- SCO connections ---- */
108 static struct sco_conn *sco_conn_add(struct hci_conn *hcon, __u8 status)
109 {
110         struct hci_dev *hdev = hcon->hdev;
111         struct sco_conn *conn = hcon->sco_data;
112
113         if (conn || status)
114                 return conn;
115
116         conn = kzalloc(sizeof(struct sco_conn), GFP_ATOMIC);
117         if (!conn)
118                 return NULL;
119
120         spin_lock_init(&conn->lock);
121
122         hcon->sco_data = conn;
123         conn->hcon = hcon;
124
125         conn->src = &hdev->bdaddr;
126         conn->dst = &hcon->dst;
127
128         if (hdev->sco_mtu > 0)
129                 conn->mtu = hdev->sco_mtu;
130         else
131                 conn->mtu = 60;
132
133         BT_DBG("hcon %p conn %p", hcon, conn);
134
135         return conn;
136 }
137
138 static inline struct sock *sco_chan_get(struct sco_conn *conn)
139 {
140         struct sock *sk = NULL;
141         sco_conn_lock(conn);
142         sk = conn->sk;
143         sco_conn_unlock(conn);
144         return sk;
145 }
146
147 static int sco_conn_del(struct hci_conn *hcon, int err)
148 {
149         struct sco_conn *conn;
150         struct sock *sk;
151
152         if (!(conn = hcon->sco_data))
153                 return 0;
154
155         BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
156
157         /* Kill socket */
158         if ((sk = sco_chan_get(conn))) {
159                 bh_lock_sock(sk);
160                 sco_sock_clear_timer(sk);
161                 sco_chan_del(sk, err);
162                 bh_unlock_sock(sk);
163                 sco_sock_kill(sk);
164         }
165
166         hcon->sco_data = NULL;
167         kfree(conn);
168         return 0;
169 }
170
171 static inline int sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent)
172 {
173         int err = 0;
174
175         sco_conn_lock(conn);
176         if (conn->sk) {
177                 err = -EBUSY;
178         } else {
179                 __sco_chan_add(conn, sk, parent);
180         }
181         sco_conn_unlock(conn);
182         return err;
183 }
184
185 static int sco_connect(struct sock *sk)
186 {
187         bdaddr_t *src = &bt_sk(sk)->src;
188         bdaddr_t *dst = &bt_sk(sk)->dst;
189         struct sco_conn *conn;
190         struct hci_conn *hcon;
191         struct hci_dev  *hdev;
192         int err = 0;
193
194         BT_DBG("%s -> %s", batostr(src), batostr(dst));
195
196         if (!(hdev = hci_get_route(dst, src)))
197                 return -EHOSTUNREACH;
198
199         hci_dev_lock_bh(hdev);
200
201         err = -ENOMEM;
202
203         hcon = hci_connect(hdev, SCO_LINK, dst);
204         if (!hcon)
205                 goto done;
206
207         conn = sco_conn_add(hcon, 0);
208         if (!conn) {
209                 hci_conn_put(hcon);
210                 goto done;
211         }
212
213         /* Update source addr of the socket */
214         bacpy(src, conn->src);
215
216         err = sco_chan_add(conn, sk, NULL);
217         if (err)
218                 goto done;
219
220         if (hcon->state == BT_CONNECTED) {
221                 sco_sock_clear_timer(sk);
222                 sk->sk_state = BT_CONNECTED;
223         } else {
224                 sk->sk_state = BT_CONNECT;
225                 sco_sock_set_timer(sk, sk->sk_sndtimeo);
226         }
227 done:
228         hci_dev_unlock_bh(hdev);
229         hci_dev_put(hdev);
230         return err;
231 }
232
233 static inline int sco_send_frame(struct sock *sk, struct msghdr *msg, int len)
234 {
235         struct sco_conn *conn = sco_pi(sk)->conn;
236         struct sk_buff *skb;
237         int err, count;
238
239         /* Check outgoing MTU */
240         if (len > conn->mtu)
241                 return -EINVAL;
242
243         BT_DBG("sk %p len %d", sk, len);
244
245         count = min_t(unsigned int, conn->mtu, len);
246         if (!(skb = bt_skb_send_alloc(sk, count, msg->msg_flags & MSG_DONTWAIT, &err)))
247                 return err;
248
249         if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count)) {
250                 err = -EFAULT;
251                 goto fail;
252         }
253
254         if ((err = hci_send_sco(conn->hcon, skb)) < 0)
255                 return err;
256
257         return count;
258
259 fail:
260         kfree_skb(skb);
261         return err;
262 }
263
264 static inline void sco_recv_frame(struct sco_conn *conn, struct sk_buff *skb)
265 {
266         struct sock *sk = sco_chan_get(conn);
267
268         if (!sk)
269                 goto drop;
270
271         BT_DBG("sk %p len %d", sk, skb->len);
272
273         if (sk->sk_state != BT_CONNECTED)
274                 goto drop;
275
276         if (!sock_queue_rcv_skb(sk, skb))
277                 return;
278
279 drop:
280         kfree_skb(skb);
281         return;
282 }
283
284 /* -------- Socket interface ---------- */
285 static struct sock *__sco_get_sock_by_addr(bdaddr_t *ba)
286 {
287         struct sock *sk;
288         struct hlist_node *node;
289
290         sk_for_each(sk, node, &sco_sk_list.head)
291                 if (!bacmp(&bt_sk(sk)->src, ba))
292                         goto found;
293         sk = NULL;
294 found:
295         return sk;
296 }
297
298 /* Find socket listening on source bdaddr.
299  * Returns closest match.
300  */
301 static struct sock *sco_get_sock_listen(bdaddr_t *src)
302 {
303         struct sock *sk = NULL, *sk1 = NULL;
304         struct hlist_node *node;
305
306         read_lock(&sco_sk_list.lock);
307
308         sk_for_each(sk, node, &sco_sk_list.head) {
309                 if (sk->sk_state != BT_LISTEN)
310                         continue;
311
312                 /* Exact match. */
313                 if (!bacmp(&bt_sk(sk)->src, src))
314                         break;
315
316                 /* Closest match */
317                 if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
318                         sk1 = sk;
319         }
320
321         read_unlock(&sco_sk_list.lock);
322
323         return node ? sk : sk1;
324 }
325
326 static void sco_sock_destruct(struct sock *sk)
327 {
328         BT_DBG("sk %p", sk);
329
330         skb_queue_purge(&sk->sk_receive_queue);
331         skb_queue_purge(&sk->sk_write_queue);
332 }
333
334 static void sco_sock_cleanup_listen(struct sock *parent)
335 {
336         struct sock *sk;
337
338         BT_DBG("parent %p", parent);
339
340         /* Close not yet accepted channels */
341         while ((sk = bt_accept_dequeue(parent, NULL))) {
342                 sco_sock_close(sk);
343                 sco_sock_kill(sk);
344         }
345
346         parent->sk_state  = BT_CLOSED;
347         sock_set_flag(parent, SOCK_ZAPPED);
348 }
349
350 /* Kill socket (only if zapped and orphan)
351  * Must be called on unlocked socket.
352  */
353 static void sco_sock_kill(struct sock *sk)
354 {
355         if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
356                 return;
357
358         BT_DBG("sk %p state %d", sk, sk->sk_state);
359
360         /* Kill poor orphan */
361         bt_sock_unlink(&sco_sk_list, sk);
362         sock_set_flag(sk, SOCK_DEAD);
363         sock_put(sk);
364 }
365
366 /* Close socket.
367  * Must be called on unlocked socket.
368  */
369 static void sco_sock_close(struct sock *sk)
370 {
371         struct sco_conn *conn;
372
373         sco_sock_clear_timer(sk);
374
375         lock_sock(sk);
376
377         conn = sco_pi(sk)->conn;
378
379         BT_DBG("sk %p state %d conn %p socket %p", sk, sk->sk_state, conn, sk->sk_socket);
380
381         switch (sk->sk_state) {
382         case BT_LISTEN:
383                 sco_sock_cleanup_listen(sk);
384                 break;
385
386         case BT_CONNECTED:
387         case BT_CONFIG:
388         case BT_CONNECT:
389         case BT_DISCONN:
390                 sco_chan_del(sk, ECONNRESET);
391                 break;
392
393         default:
394                 sock_set_flag(sk, SOCK_ZAPPED);
395                 break;
396         }
397
398         release_sock(sk);
399
400         sco_sock_kill(sk);
401 }
402
403 static void sco_sock_init(struct sock *sk, struct sock *parent)
404 {
405         BT_DBG("sk %p", sk);
406
407         if (parent)
408                 sk->sk_type = parent->sk_type;
409 }
410
411 static struct proto sco_proto = {
412         .name           = "SCO",
413         .owner          = THIS_MODULE,
414         .obj_size       = sizeof(struct sco_pinfo)
415 };
416
417 static struct sock *sco_sock_alloc(struct socket *sock, int proto, gfp_t prio)
418 {
419         struct sock *sk;
420
421         sk = sk_alloc(PF_BLUETOOTH, prio, &sco_proto, 1);
422         if (!sk)
423                 return NULL;
424
425         sock_init_data(sock, sk);
426         INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
427
428         sk->sk_destruct = sco_sock_destruct;
429         sk->sk_sndtimeo = SCO_CONN_TIMEOUT;
430
431         sock_reset_flag(sk, SOCK_ZAPPED);
432
433         sk->sk_protocol = proto;
434         sk->sk_state    = BT_OPEN;
435
436         sco_sock_init_timer(sk);
437
438         bt_sock_link(&sco_sk_list, sk);
439         return sk;
440 }
441
442 static int sco_sock_create(struct socket *sock, int protocol)
443 {
444         struct sock *sk;
445
446         BT_DBG("sock %p", sock);
447
448         sock->state = SS_UNCONNECTED;
449
450         if (sock->type != SOCK_SEQPACKET)
451                 return -ESOCKTNOSUPPORT;
452
453         sock->ops = &sco_sock_ops;
454
455         sk = sco_sock_alloc(sock, protocol, GFP_ATOMIC);
456         if (!sk)
457                 return -ENOMEM;
458
459         sco_sock_init(sk, NULL);
460         return 0;
461 }
462
463 static int sco_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
464 {
465         struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
466         struct sock *sk = sock->sk;
467         bdaddr_t *src = &sa->sco_bdaddr;
468         int err = 0;
469
470         BT_DBG("sk %p %s", sk, batostr(&sa->sco_bdaddr));
471
472         if (!addr || addr->sa_family != AF_BLUETOOTH)
473                 return -EINVAL;
474
475         lock_sock(sk);
476
477         if (sk->sk_state != BT_OPEN) {
478                 err = -EBADFD;
479                 goto done;
480         }
481
482         write_lock_bh(&sco_sk_list.lock);
483
484         if (bacmp(src, BDADDR_ANY) && __sco_get_sock_by_addr(src)) {
485                 err = -EADDRINUSE;
486         } else {
487                 /* Save source address */
488                 bacpy(&bt_sk(sk)->src, &sa->sco_bdaddr);
489                 sk->sk_state = BT_BOUND;
490         }
491
492         write_unlock_bh(&sco_sk_list.lock);
493
494 done:
495         release_sock(sk);
496         return err;
497 }
498
499 static int sco_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
500 {
501         struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
502         struct sock *sk = sock->sk;
503         int err = 0;
504
505
506         BT_DBG("sk %p", sk);
507
508         if (addr->sa_family != AF_BLUETOOTH || alen < sizeof(struct sockaddr_sco))
509                 return -EINVAL;
510
511         if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND)
512                 return -EBADFD;
513
514         if (sk->sk_type != SOCK_SEQPACKET)
515                 return -EINVAL;
516
517         lock_sock(sk);
518
519         /* Set destination address and psm */
520         bacpy(&bt_sk(sk)->dst, &sa->sco_bdaddr);
521
522         if ((err = sco_connect(sk)))
523                 goto done;
524
525         err = bt_sock_wait_state(sk, BT_CONNECTED,
526                         sock_sndtimeo(sk, flags & O_NONBLOCK));
527
528 done:
529         release_sock(sk);
530         return err;
531 }
532
533 static int sco_sock_listen(struct socket *sock, int backlog)
534 {
535         struct sock *sk = sock->sk;
536         int err = 0;
537
538         BT_DBG("sk %p backlog %d", sk, backlog);
539
540         lock_sock(sk);
541
542         if (sk->sk_state != BT_BOUND || sock->type != SOCK_SEQPACKET) {
543                 err = -EBADFD;
544                 goto done;
545         }
546
547         sk->sk_max_ack_backlog = backlog;
548         sk->sk_ack_backlog = 0;
549         sk->sk_state = BT_LISTEN;
550
551 done:
552         release_sock(sk);
553         return err;
554 }
555
556 static int sco_sock_accept(struct socket *sock, struct socket *newsock, int flags)
557 {
558         DECLARE_WAITQUEUE(wait, current);
559         struct sock *sk = sock->sk, *ch;
560         long timeo;
561         int err = 0;
562
563         lock_sock(sk);
564
565         if (sk->sk_state != BT_LISTEN) {
566                 err = -EBADFD;
567                 goto done;
568         }
569
570         timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
571
572         BT_DBG("sk %p timeo %ld", sk, timeo);
573
574         /* Wait for an incoming connection. (wake-one). */
575         add_wait_queue_exclusive(sk->sk_sleep, &wait);
576         while (!(ch = bt_accept_dequeue(sk, newsock))) {
577                 set_current_state(TASK_INTERRUPTIBLE);
578                 if (!timeo) {
579                         err = -EAGAIN;
580                         break;
581                 }
582
583                 release_sock(sk);
584                 timeo = schedule_timeout(timeo);
585                 lock_sock(sk);
586
587                 if (sk->sk_state != BT_LISTEN) {
588                         err = -EBADFD;
589                         break;
590                 }
591
592                 if (signal_pending(current)) {
593                         err = sock_intr_errno(timeo);
594                         break;
595                 }
596         }
597         set_current_state(TASK_RUNNING);
598         remove_wait_queue(sk->sk_sleep, &wait);
599
600         if (err)
601                 goto done;
602
603         newsock->state = SS_CONNECTED;
604
605         BT_DBG("new socket %p", ch);
606
607 done:
608         release_sock(sk);
609         return err;
610 }
611
612 static int sco_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
613 {
614         struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
615         struct sock *sk = sock->sk;
616
617         BT_DBG("sock %p, sk %p", sock, sk);
618
619         addr->sa_family = AF_BLUETOOTH;
620         *len = sizeof(struct sockaddr_sco);
621
622         if (peer)
623                 bacpy(&sa->sco_bdaddr, &bt_sk(sk)->dst);
624         else
625                 bacpy(&sa->sco_bdaddr, &bt_sk(sk)->src);
626
627         return 0;
628 }
629
630 static int sco_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
631                             struct msghdr *msg, size_t len)
632 {
633         struct sock *sk = sock->sk;
634         int err = 0;
635
636         BT_DBG("sock %p, sk %p", sock, sk);
637
638         err = sock_error(sk);
639         if (err)
640                 return err;
641
642         if (msg->msg_flags & MSG_OOB)
643                 return -EOPNOTSUPP;
644
645         lock_sock(sk);
646
647         if (sk->sk_state == BT_CONNECTED)
648                 err = sco_send_frame(sk, msg, len);
649         else
650                 err = -ENOTCONN;
651
652         release_sock(sk);
653         return err;
654 }
655
656 static int sco_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, int optlen)
657 {
658         struct sock *sk = sock->sk;
659         int err = 0;
660
661         BT_DBG("sk %p", sk);
662
663         lock_sock(sk);
664
665         switch (optname) {
666         default:
667                 err = -ENOPROTOOPT;
668                 break;
669         }
670
671         release_sock(sk);
672         return err;
673 }
674
675 static int sco_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen)
676 {
677         struct sock *sk = sock->sk;
678         struct sco_options opts;
679         struct sco_conninfo cinfo;
680         int len, err = 0;
681
682         BT_DBG("sk %p", sk);
683
684         if (get_user(len, optlen))
685                 return -EFAULT;
686
687         lock_sock(sk);
688
689         switch (optname) {
690         case SCO_OPTIONS:
691                 if (sk->sk_state != BT_CONNECTED) {
692                         err = -ENOTCONN;
693                         break;
694                 }
695
696                 opts.mtu = sco_pi(sk)->conn->mtu;
697
698                 BT_DBG("mtu %d", opts.mtu);
699
700                 len = min_t(unsigned int, len, sizeof(opts));
701                 if (copy_to_user(optval, (char *)&opts, len))
702                         err = -EFAULT;
703
704                 break;
705
706         case SCO_CONNINFO:
707                 if (sk->sk_state != BT_CONNECTED) {
708                         err = -ENOTCONN;
709                         break;
710                 }
711
712                 cinfo.hci_handle = sco_pi(sk)->conn->hcon->handle;
713                 memcpy(cinfo.dev_class, sco_pi(sk)->conn->hcon->dev_class, 3);
714
715                 len = min_t(unsigned int, len, sizeof(cinfo));
716                 if (copy_to_user(optval, (char *)&cinfo, len))
717                         err = -EFAULT;
718
719                 break;
720
721         default:
722                 err = -ENOPROTOOPT;
723                 break;
724         }
725
726         release_sock(sk);
727         return err;
728 }
729
730 static int sco_sock_release(struct socket *sock)
731 {
732         struct sock *sk = sock->sk;
733         int err = 0;
734
735         BT_DBG("sock %p, sk %p", sock, sk);
736
737         if (!sk)
738                 return 0;
739
740         sco_sock_close(sk);
741
742         if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime) {
743                 lock_sock(sk);
744                 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
745                 release_sock(sk);
746         }
747
748         sock_orphan(sk);
749         sco_sock_kill(sk);
750         return err;
751 }
752
753 static void __sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent)
754 {
755         BT_DBG("conn %p", conn);
756
757         sco_pi(sk)->conn = conn;
758         conn->sk = sk;
759
760         if (parent)
761                 bt_accept_enqueue(parent, sk);
762 }
763
764 /* Delete channel.
765  * Must be called on the locked socket. */
766 static void sco_chan_del(struct sock *sk, int err)
767 {
768         struct sco_conn *conn;
769
770         conn = sco_pi(sk)->conn;
771
772         BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
773
774         if (conn) {
775                 sco_conn_lock(conn);
776                 conn->sk = NULL;
777                 sco_pi(sk)->conn = NULL;
778                 sco_conn_unlock(conn);
779                 hci_conn_put(conn->hcon);
780         }
781
782         sk->sk_state = BT_CLOSED;
783         sk->sk_err   = err;
784         sk->sk_state_change(sk);
785
786         sock_set_flag(sk, SOCK_ZAPPED);
787 }
788
789 static void sco_conn_ready(struct sco_conn *conn)
790 {
791         struct sock *parent, *sk;
792
793         BT_DBG("conn %p", conn);
794
795         sco_conn_lock(conn);
796
797         if ((sk = conn->sk)) {
798                 sco_sock_clear_timer(sk);
799                 bh_lock_sock(sk);
800                 sk->sk_state = BT_CONNECTED;
801                 sk->sk_state_change(sk);
802                 bh_unlock_sock(sk);
803         } else {
804                 parent = sco_get_sock_listen(conn->src);
805                 if (!parent)
806                         goto done;
807
808                 bh_lock_sock(parent);
809
810                 sk = sco_sock_alloc(NULL, BTPROTO_SCO, GFP_ATOMIC);
811                 if (!sk) {
812                         bh_unlock_sock(parent);
813                         goto done;
814                 }
815
816                 sco_sock_init(sk, parent);
817
818                 bacpy(&bt_sk(sk)->src, conn->src);
819                 bacpy(&bt_sk(sk)->dst, conn->dst);
820
821                 hci_conn_hold(conn->hcon);
822                 __sco_chan_add(conn, sk, parent);
823
824                 sk->sk_state = BT_CONNECTED;
825
826                 /* Wake up parent */
827                 parent->sk_data_ready(parent, 1);
828
829                 bh_unlock_sock(parent);
830         }
831
832 done:
833         sco_conn_unlock(conn);
834 }
835
836 /* ----- SCO interface with lower layer (HCI) ----- */
837 static int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type)
838 {
839         BT_DBG("hdev %s, bdaddr %s", hdev->name, batostr(bdaddr));
840
841         /* Always accept connection */
842         return HCI_LM_ACCEPT;
843 }
844
845 static int sco_connect_cfm(struct hci_conn *hcon, __u8 status)
846 {
847         BT_DBG("hcon %p bdaddr %s status %d", hcon, batostr(&hcon->dst), status);
848
849         if (hcon->type != SCO_LINK)
850                 return 0;
851
852         if (!status) {
853                 struct sco_conn *conn;
854
855                 conn = sco_conn_add(hcon, status);
856                 if (conn)
857                         sco_conn_ready(conn);
858         } else
859                 sco_conn_del(hcon, bt_err(status));
860
861         return 0;
862 }
863
864 static int sco_disconn_ind(struct hci_conn *hcon, __u8 reason)
865 {
866         BT_DBG("hcon %p reason %d", hcon, reason);
867
868         if (hcon->type != SCO_LINK)
869                 return 0;
870
871         sco_conn_del(hcon, bt_err(reason));
872         return 0;
873 }
874
875 static int sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
876 {
877         struct sco_conn *conn = hcon->sco_data;
878
879         if (!conn)
880                 goto drop;
881
882         BT_DBG("conn %p len %d", conn, skb->len);
883
884         if (skb->len) {
885                 sco_recv_frame(conn, skb);
886                 return 0;
887         }
888
889 drop:
890         kfree_skb(skb);
891         return 0;
892 }
893
894 static ssize_t sco_sysfs_show(struct class *dev, char *buf)
895 {
896         struct sock *sk;
897         struct hlist_node *node;
898         char *str = buf;
899
900         read_lock_bh(&sco_sk_list.lock);
901
902         sk_for_each(sk, node, &sco_sk_list.head) {
903                 str += sprintf(str, "%s %s %d\n",
904                                 batostr(&bt_sk(sk)->src), batostr(&bt_sk(sk)->dst),
905                                 sk->sk_state);
906         }
907
908         read_unlock_bh(&sco_sk_list.lock);
909
910         return (str - buf);
911 }
912
913 static CLASS_ATTR(sco, S_IRUGO, sco_sysfs_show, NULL);
914
915 static const struct proto_ops sco_sock_ops = {
916         .family         = PF_BLUETOOTH,
917         .owner          = THIS_MODULE,
918         .release        = sco_sock_release,
919         .bind           = sco_sock_bind,
920         .connect        = sco_sock_connect,
921         .listen         = sco_sock_listen,
922         .accept         = sco_sock_accept,
923         .getname        = sco_sock_getname,
924         .sendmsg        = sco_sock_sendmsg,
925         .recvmsg        = bt_sock_recvmsg,
926         .poll           = bt_sock_poll,
927         .ioctl          = sock_no_ioctl,
928         .mmap           = sock_no_mmap,
929         .socketpair     = sock_no_socketpair,
930         .shutdown       = sock_no_shutdown,
931         .setsockopt     = sco_sock_setsockopt,
932         .getsockopt     = sco_sock_getsockopt
933 };
934
935 static struct net_proto_family sco_sock_family_ops = {
936         .family = PF_BLUETOOTH,
937         .owner  = THIS_MODULE,
938         .create = sco_sock_create,
939 };
940
941 static struct hci_proto sco_hci_proto = {
942         .name           = "SCO",
943         .id             = HCI_PROTO_SCO,
944         .connect_ind    = sco_connect_ind,
945         .connect_cfm    = sco_connect_cfm,
946         .disconn_ind    = sco_disconn_ind,
947         .recv_scodata   = sco_recv_scodata
948 };
949
950 static int __init sco_init(void)
951 {
952         int err;
953
954         err = proto_register(&sco_proto, 0);
955         if (err < 0)
956                 return err;
957
958         err = bt_sock_register(BTPROTO_SCO, &sco_sock_family_ops);
959         if (err < 0) {
960                 BT_ERR("SCO socket registration failed");
961                 goto error;
962         }
963
964         err = hci_register_proto(&sco_hci_proto);
965         if (err < 0) {
966                 BT_ERR("SCO protocol registration failed");
967                 bt_sock_unregister(BTPROTO_SCO);
968                 goto error;
969         }
970
971         if (class_create_file(bt_class, &class_attr_sco) < 0)
972                 BT_ERR("Failed to create SCO info file");
973
974         BT_INFO("SCO (Voice Link) ver %s", VERSION);
975         BT_INFO("SCO socket layer initialized");
976
977         return 0;
978
979 error:
980         proto_unregister(&sco_proto);
981         return err;
982 }
983
984 static void __exit sco_exit(void)
985 {
986         class_remove_file(bt_class, &class_attr_sco);
987
988         if (bt_sock_unregister(BTPROTO_SCO) < 0)
989                 BT_ERR("SCO socket unregistration failed");
990
991         if (hci_unregister_proto(&sco_hci_proto) < 0)
992                 BT_ERR("SCO protocol unregistration failed");
993
994         proto_unregister(&sco_proto);
995 }
996
997 module_init(sco_init);
998 module_exit(sco_exit);
999
1000 MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>, Marcel Holtmann <marcel@holtmann.org>");
1001 MODULE_DESCRIPTION("Bluetooth SCO ver " VERSION);
1002 MODULE_VERSION(VERSION);
1003 MODULE_LICENSE("GPL");
1004 MODULE_ALIAS("bt-proto-2");