]> git.karo-electronics.de Git - karo-tx-linux.git/blob - net/bluetooth/sco.c
Merge branch 'for-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetoot...
[karo-tx-linux.git] / 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 #include <linux/debugfs.h>
29 #include <linux/seq_file.h>
30
31 #include <net/bluetooth/bluetooth.h>
32 #include <net/bluetooth/hci_core.h>
33 #include <net/bluetooth/sco.h>
34
35 static bool disable_esco;
36
37 static const struct proto_ops sco_sock_ops;
38
39 static struct bt_sock_list sco_sk_list = {
40         .lock = __RW_LOCK_UNLOCKED(sco_sk_list.lock)
41 };
42
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);
45
46 static void sco_sock_close(struct sock *sk);
47 static void sco_sock_kill(struct sock *sk);
48
49 /* ---- SCO timers ---- */
50 static void sco_sock_timeout(unsigned long arg)
51 {
52         struct sock *sk = (struct sock *) arg;
53
54         BT_DBG("sock %p state %d", sk, sk->sk_state);
55
56         bh_lock_sock(sk);
57         sk->sk_err = ETIMEDOUT;
58         sk->sk_state_change(sk);
59         bh_unlock_sock(sk);
60
61         sco_sock_kill(sk);
62         sock_put(sk);
63 }
64
65 static void sco_sock_set_timer(struct sock *sk, long timeout)
66 {
67         BT_DBG("sock %p state %d timeout %ld", sk, sk->sk_state, timeout);
68         sk_reset_timer(sk, &sk->sk_timer, jiffies + timeout);
69 }
70
71 static void sco_sock_clear_timer(struct sock *sk)
72 {
73         BT_DBG("sock %p state %d", sk, sk->sk_state);
74         sk_stop_timer(sk, &sk->sk_timer);
75 }
76
77 /* ---- SCO connections ---- */
78 static struct sco_conn *sco_conn_add(struct hci_conn *hcon)
79 {
80         struct hci_dev *hdev = hcon->hdev;
81         struct sco_conn *conn = hcon->sco_data;
82
83         if (conn)
84                 return conn;
85
86         conn = kzalloc(sizeof(struct sco_conn), GFP_ATOMIC);
87         if (!conn)
88                 return NULL;
89
90         spin_lock_init(&conn->lock);
91
92         hcon->sco_data = conn;
93         conn->hcon = hcon;
94
95         conn->src = &hdev->bdaddr;
96         conn->dst = &hcon->dst;
97
98         if (hdev->sco_mtu > 0)
99                 conn->mtu = hdev->sco_mtu;
100         else
101                 conn->mtu = 60;
102
103         BT_DBG("hcon %p conn %p", hcon, conn);
104
105         return conn;
106 }
107
108 static struct sock *sco_chan_get(struct sco_conn *conn)
109 {
110         struct sock *sk = NULL;
111         sco_conn_lock(conn);
112         sk = conn->sk;
113         sco_conn_unlock(conn);
114         return sk;
115 }
116
117 static int sco_conn_del(struct hci_conn *hcon, int err)
118 {
119         struct sco_conn *conn = hcon->sco_data;
120         struct sock *sk;
121
122         if (!conn)
123                 return 0;
124
125         BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
126
127         /* Kill socket */
128         sk = sco_chan_get(conn);
129         if (sk) {
130                 bh_lock_sock(sk);
131                 sco_sock_clear_timer(sk);
132                 sco_chan_del(sk, err);
133                 bh_unlock_sock(sk);
134                 sco_sock_kill(sk);
135         }
136
137         hcon->sco_data = NULL;
138         kfree(conn);
139         return 0;
140 }
141
142 static int sco_chan_add(struct sco_conn *conn, struct sock *sk,
143                         struct sock *parent)
144 {
145         int err = 0;
146
147         sco_conn_lock(conn);
148         if (conn->sk)
149                 err = -EBUSY;
150         else
151                 __sco_chan_add(conn, sk, parent);
152
153         sco_conn_unlock(conn);
154         return err;
155 }
156
157 static int sco_connect(struct sock *sk)
158 {
159         bdaddr_t *src = &bt_sk(sk)->src;
160         bdaddr_t *dst = &bt_sk(sk)->dst;
161         struct sco_conn *conn;
162         struct hci_conn *hcon;
163         struct hci_dev  *hdev;
164         int err, type;
165
166         BT_DBG("%pMR -> %pMR", src, dst);
167
168         hdev = hci_get_route(dst, src);
169         if (!hdev)
170                 return -EHOSTUNREACH;
171
172         hci_dev_lock(hdev);
173
174         if (lmp_esco_capable(hdev) && !disable_esco)
175                 type = ESCO_LINK;
176         else
177                 type = SCO_LINK;
178
179         hcon = hci_connect(hdev, type, dst, BDADDR_BREDR, BT_SECURITY_LOW,
180                            HCI_AT_NO_BONDING);
181         if (IS_ERR(hcon)) {
182                 err = PTR_ERR(hcon);
183                 goto done;
184         }
185
186         conn = sco_conn_add(hcon);
187         if (!conn) {
188                 hci_conn_put(hcon);
189                 err = -ENOMEM;
190                 goto done;
191         }
192
193         /* Update source addr of the socket */
194         bacpy(src, conn->src);
195
196         err = sco_chan_add(conn, sk, NULL);
197         if (err)
198                 goto done;
199
200         if (hcon->state == BT_CONNECTED) {
201                 sco_sock_clear_timer(sk);
202                 sk->sk_state = BT_CONNECTED;
203         } else {
204                 sk->sk_state = BT_CONNECT;
205                 sco_sock_set_timer(sk, sk->sk_sndtimeo);
206         }
207
208 done:
209         hci_dev_unlock(hdev);
210         hci_dev_put(hdev);
211         return err;
212 }
213
214 static int sco_send_frame(struct sock *sk, struct msghdr *msg, int len)
215 {
216         struct sco_conn *conn = sco_pi(sk)->conn;
217         struct sk_buff *skb;
218         int err;
219
220         /* Check outgoing MTU */
221         if (len > conn->mtu)
222                 return -EINVAL;
223
224         BT_DBG("sk %p len %d", sk, len);
225
226         skb = bt_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err);
227         if (!skb)
228                 return err;
229
230         if (memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len)) {
231                 kfree_skb(skb);
232                 return -EFAULT;
233         }
234
235         hci_send_sco(conn->hcon, skb);
236
237         return len;
238 }
239
240 static void sco_recv_frame(struct sco_conn *conn, struct sk_buff *skb)
241 {
242         struct sock *sk = sco_chan_get(conn);
243
244         if (!sk)
245                 goto drop;
246
247         BT_DBG("sk %p len %d", sk, skb->len);
248
249         if (sk->sk_state != BT_CONNECTED)
250                 goto drop;
251
252         if (!sock_queue_rcv_skb(sk, skb))
253                 return;
254
255 drop:
256         kfree_skb(skb);
257 }
258
259 /* -------- Socket interface ---------- */
260 static struct sock *__sco_get_sock_listen_by_addr(bdaddr_t *ba)
261 {
262         struct sock *sk;
263
264         sk_for_each(sk, &sco_sk_list.head) {
265                 if (sk->sk_state != BT_LISTEN)
266                         continue;
267
268                 if (!bacmp(&bt_sk(sk)->src, ba))
269                         return sk;
270         }
271
272         return NULL;
273 }
274
275 /* Find socket listening on source bdaddr.
276  * Returns closest match.
277  */
278 static struct sock *sco_get_sock_listen(bdaddr_t *src)
279 {
280         struct sock *sk = NULL, *sk1 = NULL;
281
282         read_lock(&sco_sk_list.lock);
283
284         sk_for_each(sk, &sco_sk_list.head) {
285                 if (sk->sk_state != BT_LISTEN)
286                         continue;
287
288                 /* Exact match. */
289                 if (!bacmp(&bt_sk(sk)->src, src))
290                         break;
291
292                 /* Closest match */
293                 if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
294                         sk1 = sk;
295         }
296
297         read_unlock(&sco_sk_list.lock);
298
299         return sk ? sk : sk1;
300 }
301
302 static void sco_sock_destruct(struct sock *sk)
303 {
304         BT_DBG("sk %p", sk);
305
306         skb_queue_purge(&sk->sk_receive_queue);
307         skb_queue_purge(&sk->sk_write_queue);
308 }
309
310 static void sco_sock_cleanup_listen(struct sock *parent)
311 {
312         struct sock *sk;
313
314         BT_DBG("parent %p", parent);
315
316         /* Close not yet accepted channels */
317         while ((sk = bt_accept_dequeue(parent, NULL))) {
318                 sco_sock_close(sk);
319                 sco_sock_kill(sk);
320         }
321
322         parent->sk_state  = BT_CLOSED;
323         sock_set_flag(parent, SOCK_ZAPPED);
324 }
325
326 /* Kill socket (only if zapped and orphan)
327  * Must be called on unlocked socket.
328  */
329 static void sco_sock_kill(struct sock *sk)
330 {
331         if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
332                 return;
333
334         BT_DBG("sk %p state %d", sk, sk->sk_state);
335
336         /* Kill poor orphan */
337         bt_sock_unlink(&sco_sk_list, sk);
338         sock_set_flag(sk, SOCK_DEAD);
339         sock_put(sk);
340 }
341
342 static void __sco_sock_close(struct sock *sk)
343 {
344         BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
345
346         switch (sk->sk_state) {
347         case BT_LISTEN:
348                 sco_sock_cleanup_listen(sk);
349                 break;
350
351         case BT_CONNECTED:
352         case BT_CONFIG:
353                 if (sco_pi(sk)->conn->hcon) {
354                         sk->sk_state = BT_DISCONN;
355                         sco_sock_set_timer(sk, SCO_DISCONN_TIMEOUT);
356                         hci_conn_put(sco_pi(sk)->conn->hcon);
357                         sco_pi(sk)->conn->hcon = NULL;
358                 } else
359                         sco_chan_del(sk, ECONNRESET);
360                 break;
361
362         case BT_CONNECT:
363         case BT_DISCONN:
364                 sco_chan_del(sk, ECONNRESET);
365                 break;
366
367         default:
368                 sock_set_flag(sk, SOCK_ZAPPED);
369                 break;
370         }
371 }
372
373 /* Must be called on unlocked socket. */
374 static void sco_sock_close(struct sock *sk)
375 {
376         sco_sock_clear_timer(sk);
377         lock_sock(sk);
378         __sco_sock_close(sk);
379         release_sock(sk);
380         sco_sock_kill(sk);
381 }
382
383 static void sco_sock_init(struct sock *sk, struct sock *parent)
384 {
385         BT_DBG("sk %p", sk);
386
387         if (parent) {
388                 sk->sk_type = parent->sk_type;
389                 bt_sk(sk)->flags = bt_sk(parent)->flags;
390                 security_sk_clone(parent, sk);
391         }
392 }
393
394 static struct proto sco_proto = {
395         .name           = "SCO",
396         .owner          = THIS_MODULE,
397         .obj_size       = sizeof(struct sco_pinfo)
398 };
399
400 static struct sock *sco_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio)
401 {
402         struct sock *sk;
403
404         sk = sk_alloc(net, PF_BLUETOOTH, prio, &sco_proto);
405         if (!sk)
406                 return NULL;
407
408         sock_init_data(sock, sk);
409         INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
410
411         sk->sk_destruct = sco_sock_destruct;
412         sk->sk_sndtimeo = SCO_CONN_TIMEOUT;
413
414         sock_reset_flag(sk, SOCK_ZAPPED);
415
416         sk->sk_protocol = proto;
417         sk->sk_state    = BT_OPEN;
418
419         setup_timer(&sk->sk_timer, sco_sock_timeout, (unsigned long)sk);
420
421         bt_sock_link(&sco_sk_list, sk);
422         return sk;
423 }
424
425 static int sco_sock_create(struct net *net, struct socket *sock, int protocol,
426                            int kern)
427 {
428         struct sock *sk;
429
430         BT_DBG("sock %p", sock);
431
432         sock->state = SS_UNCONNECTED;
433
434         if (sock->type != SOCK_SEQPACKET)
435                 return -ESOCKTNOSUPPORT;
436
437         sock->ops = &sco_sock_ops;
438
439         sk = sco_sock_alloc(net, sock, protocol, GFP_ATOMIC);
440         if (!sk)
441                 return -ENOMEM;
442
443         sco_sock_init(sk, NULL);
444         return 0;
445 }
446
447 static int sco_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
448 {
449         struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
450         struct sock *sk = sock->sk;
451         int err = 0;
452
453         BT_DBG("sk %p %pMR", sk, &sa->sco_bdaddr);
454
455         if (!addr || addr->sa_family != AF_BLUETOOTH)
456                 return -EINVAL;
457
458         lock_sock(sk);
459
460         if (sk->sk_state != BT_OPEN) {
461                 err = -EBADFD;
462                 goto done;
463         }
464
465         if (sk->sk_type != SOCK_SEQPACKET) {
466                 err = -EINVAL;
467                 goto done;
468         }
469
470         bacpy(&bt_sk(sk)->src, &sa->sco_bdaddr);
471
472         sk->sk_state = BT_BOUND;
473
474 done:
475         release_sock(sk);
476         return err;
477 }
478
479 static int sco_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
480 {
481         struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
482         struct sock *sk = sock->sk;
483         int err = 0;
484
485
486         BT_DBG("sk %p", sk);
487
488         if (alen < sizeof(struct sockaddr_sco) ||
489             addr->sa_family != AF_BLUETOOTH)
490                 return -EINVAL;
491
492         if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND)
493                 return -EBADFD;
494
495         if (sk->sk_type != SOCK_SEQPACKET)
496                 return -EINVAL;
497
498         lock_sock(sk);
499
500         /* Set destination address and psm */
501         bacpy(&bt_sk(sk)->dst, &sa->sco_bdaddr);
502
503         err = sco_connect(sk);
504         if (err)
505                 goto done;
506
507         err = bt_sock_wait_state(sk, BT_CONNECTED,
508                                  sock_sndtimeo(sk, flags & O_NONBLOCK));
509
510 done:
511         release_sock(sk);
512         return err;
513 }
514
515 static int sco_sock_listen(struct socket *sock, int backlog)
516 {
517         struct sock *sk = sock->sk;
518         bdaddr_t *src = &bt_sk(sk)->src;
519         int err = 0;
520
521         BT_DBG("sk %p backlog %d", sk, backlog);
522
523         lock_sock(sk);
524
525         if (sk->sk_state != BT_BOUND) {
526                 err = -EBADFD;
527                 goto done;
528         }
529
530         if (sk->sk_type != SOCK_SEQPACKET) {
531                 err = -EINVAL;
532                 goto done;
533         }
534
535         write_lock(&sco_sk_list.lock);
536
537         if (__sco_get_sock_listen_by_addr(src)) {
538                 err = -EADDRINUSE;
539                 goto unlock;
540         }
541
542         sk->sk_max_ack_backlog = backlog;
543         sk->sk_ack_backlog = 0;
544
545         sk->sk_state = BT_LISTEN;
546
547 unlock:
548         write_unlock(&sco_sk_list.lock);
549
550 done:
551         release_sock(sk);
552         return err;
553 }
554
555 static int sco_sock_accept(struct socket *sock, struct socket *newsock, int flags)
556 {
557         DECLARE_WAITQUEUE(wait, current);
558         struct sock *sk = sock->sk, *ch;
559         long timeo;
560         int err = 0;
561
562         lock_sock(sk);
563
564         timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
565
566         BT_DBG("sk %p timeo %ld", sk, timeo);
567
568         /* Wait for an incoming connection. (wake-one). */
569         add_wait_queue_exclusive(sk_sleep(sk), &wait);
570         while (1) {
571                 set_current_state(TASK_INTERRUPTIBLE);
572
573                 if (sk->sk_state != BT_LISTEN) {
574                         err = -EBADFD;
575                         break;
576                 }
577
578                 ch = bt_accept_dequeue(sk, newsock);
579                 if (ch)
580                         break;
581
582                 if (!timeo) {
583                         err = -EAGAIN;
584                         break;
585                 }
586
587                 if (signal_pending(current)) {
588                         err = sock_intr_errno(timeo);
589                         break;
590                 }
591
592                 release_sock(sk);
593                 timeo = schedule_timeout(timeo);
594                 lock_sock(sk);
595         }
596         __set_current_state(TASK_RUNNING);
597         remove_wait_queue(sk_sleep(sk), &wait);
598
599         if (err)
600                 goto done;
601
602         newsock->state = SS_CONNECTED;
603
604         BT_DBG("new socket %p", ch);
605
606 done:
607         release_sock(sk);
608         return err;
609 }
610
611 static int sco_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
612 {
613         struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
614         struct sock *sk = sock->sk;
615
616         BT_DBG("sock %p, sk %p", sock, sk);
617
618         addr->sa_family = AF_BLUETOOTH;
619         *len = sizeof(struct sockaddr_sco);
620
621         if (peer)
622                 bacpy(&sa->sco_bdaddr, &bt_sk(sk)->dst);
623         else
624                 bacpy(&sa->sco_bdaddr, &bt_sk(sk)->src);
625
626         return 0;
627 }
628
629 static int sco_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
630                             struct msghdr *msg, size_t len)
631 {
632         struct sock *sk = sock->sk;
633         int err;
634
635         BT_DBG("sock %p, sk %p", sock, sk);
636
637         err = sock_error(sk);
638         if (err)
639                 return err;
640
641         if (msg->msg_flags & MSG_OOB)
642                 return -EOPNOTSUPP;
643
644         lock_sock(sk);
645
646         if (sk->sk_state == BT_CONNECTED)
647                 err = sco_send_frame(sk, msg, len);
648         else
649                 err = -ENOTCONN;
650
651         release_sock(sk);
652         return err;
653 }
654
655 static int sco_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
656                             struct msghdr *msg, size_t len, int flags)
657 {
658         struct sock *sk = sock->sk;
659         struct sco_pinfo *pi = sco_pi(sk);
660
661         lock_sock(sk);
662
663         if (sk->sk_state == BT_CONNECT2 &&
664             test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
665                 hci_conn_accept(pi->conn->hcon, 0);
666                 sk->sk_state = BT_CONFIG;
667
668                 release_sock(sk);
669                 return 0;
670         }
671
672         release_sock(sk);
673
674         return bt_sock_recvmsg(iocb, sock, msg, len, flags);
675 }
676
677 static int sco_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen)
678 {
679         struct sock *sk = sock->sk;
680         int err = 0;
681         u32 opt;
682
683         BT_DBG("sk %p", sk);
684
685         lock_sock(sk);
686
687         switch (optname) {
688
689         case BT_DEFER_SETUP:
690                 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
691                         err = -EINVAL;
692                         break;
693                 }
694
695                 if (get_user(opt, (u32 __user *) optval)) {
696                         err = -EFAULT;
697                         break;
698                 }
699
700                 if (opt)
701                         set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
702                 else
703                         clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
704                 break;
705
706         default:
707                 err = -ENOPROTOOPT;
708                 break;
709         }
710
711         release_sock(sk);
712         return err;
713 }
714
715 static int sco_sock_getsockopt_old(struct socket *sock, int optname, char __user *optval, int __user *optlen)
716 {
717         struct sock *sk = sock->sk;
718         struct sco_options opts;
719         struct sco_conninfo cinfo;
720         int len, err = 0;
721
722         BT_DBG("sk %p", sk);
723
724         if (get_user(len, optlen))
725                 return -EFAULT;
726
727         lock_sock(sk);
728
729         switch (optname) {
730         case SCO_OPTIONS:
731                 if (sk->sk_state != BT_CONNECTED) {
732                         err = -ENOTCONN;
733                         break;
734                 }
735
736                 opts.mtu = sco_pi(sk)->conn->mtu;
737
738                 BT_DBG("mtu %d", opts.mtu);
739
740                 len = min_t(unsigned int, len, sizeof(opts));
741                 if (copy_to_user(optval, (char *)&opts, len))
742                         err = -EFAULT;
743
744                 break;
745
746         case SCO_CONNINFO:
747                 if (sk->sk_state != BT_CONNECTED) {
748                         err = -ENOTCONN;
749                         break;
750                 }
751
752                 memset(&cinfo, 0, sizeof(cinfo));
753                 cinfo.hci_handle = sco_pi(sk)->conn->hcon->handle;
754                 memcpy(cinfo.dev_class, sco_pi(sk)->conn->hcon->dev_class, 3);
755
756                 len = min_t(unsigned int, len, sizeof(cinfo));
757                 if (copy_to_user(optval, (char *)&cinfo, len))
758                         err = -EFAULT;
759
760                 break;
761
762         default:
763                 err = -ENOPROTOOPT;
764                 break;
765         }
766
767         release_sock(sk);
768         return err;
769 }
770
771 static int sco_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen)
772 {
773         struct sock *sk = sock->sk;
774         int len, err = 0;
775
776         BT_DBG("sk %p", sk);
777
778         if (level == SOL_SCO)
779                 return sco_sock_getsockopt_old(sock, optname, optval, optlen);
780
781         if (get_user(len, optlen))
782                 return -EFAULT;
783
784         lock_sock(sk);
785
786         switch (optname) {
787
788         case BT_DEFER_SETUP:
789                 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
790                         err = -EINVAL;
791                         break;
792                 }
793
794                 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
795                              (u32 __user *) optval))
796                         err = -EFAULT;
797
798                 break;
799
800         default:
801                 err = -ENOPROTOOPT;
802                 break;
803         }
804
805         release_sock(sk);
806         return err;
807 }
808
809 static int sco_sock_shutdown(struct socket *sock, int how)
810 {
811         struct sock *sk = sock->sk;
812         int err = 0;
813
814         BT_DBG("sock %p, sk %p", sock, sk);
815
816         if (!sk)
817                 return 0;
818
819         lock_sock(sk);
820         if (!sk->sk_shutdown) {
821                 sk->sk_shutdown = SHUTDOWN_MASK;
822                 sco_sock_clear_timer(sk);
823                 __sco_sock_close(sk);
824
825                 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
826                         err = bt_sock_wait_state(sk, BT_CLOSED,
827                                                  sk->sk_lingertime);
828         }
829         release_sock(sk);
830         return err;
831 }
832
833 static int sco_sock_release(struct socket *sock)
834 {
835         struct sock *sk = sock->sk;
836         int err = 0;
837
838         BT_DBG("sock %p, sk %p", sock, sk);
839
840         if (!sk)
841                 return 0;
842
843         sco_sock_close(sk);
844
845         if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime) {
846                 lock_sock(sk);
847                 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
848                 release_sock(sk);
849         }
850
851         sock_orphan(sk);
852         sco_sock_kill(sk);
853         return err;
854 }
855
856 static void __sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent)
857 {
858         BT_DBG("conn %p", conn);
859
860         sco_pi(sk)->conn = conn;
861         conn->sk = sk;
862
863         if (parent)
864                 bt_accept_enqueue(parent, sk);
865 }
866
867 /* Delete channel.
868  * Must be called on the locked socket. */
869 static void sco_chan_del(struct sock *sk, int err)
870 {
871         struct sco_conn *conn;
872
873         conn = sco_pi(sk)->conn;
874
875         BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
876
877         if (conn) {
878                 sco_conn_lock(conn);
879                 conn->sk = NULL;
880                 sco_pi(sk)->conn = NULL;
881                 sco_conn_unlock(conn);
882
883                 if (conn->hcon)
884                         hci_conn_put(conn->hcon);
885         }
886
887         sk->sk_state = BT_CLOSED;
888         sk->sk_err   = err;
889         sk->sk_state_change(sk);
890
891         sock_set_flag(sk, SOCK_ZAPPED);
892 }
893
894 static void sco_conn_ready(struct sco_conn *conn)
895 {
896         struct sock *parent;
897         struct sock *sk = conn->sk;
898
899         BT_DBG("conn %p", conn);
900
901         if (sk) {
902                 sco_sock_clear_timer(sk);
903                 bh_lock_sock(sk);
904                 sk->sk_state = BT_CONNECTED;
905                 sk->sk_state_change(sk);
906                 bh_unlock_sock(sk);
907         } else {
908                 sco_conn_lock(conn);
909
910                 parent = sco_get_sock_listen(conn->src);
911                 if (!parent) {
912                         sco_conn_unlock(conn);
913                         return;
914                 }
915
916                 bh_lock_sock(parent);
917
918                 sk = sco_sock_alloc(sock_net(parent), NULL,
919                                     BTPROTO_SCO, GFP_ATOMIC);
920                 if (!sk) {
921                         bh_unlock_sock(parent);
922                         sco_conn_unlock(conn);
923                         return;
924                 }
925
926                 sco_sock_init(sk, parent);
927
928                 bacpy(&bt_sk(sk)->src, conn->src);
929                 bacpy(&bt_sk(sk)->dst, conn->dst);
930
931                 hci_conn_hold(conn->hcon);
932                 __sco_chan_add(conn, sk, parent);
933
934                 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(parent)->flags))
935                         sk->sk_state = BT_CONNECT2;
936                 else
937                         sk->sk_state = BT_CONNECTED;
938
939                 /* Wake up parent */
940                 parent->sk_data_ready(parent, 1);
941
942                 bh_unlock_sock(parent);
943
944                 sco_conn_unlock(conn);
945         }
946 }
947
948 /* ----- SCO interface with lower layer (HCI) ----- */
949 int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags)
950 {
951         struct sock *sk;
952         int lm = 0;
953
954         BT_DBG("hdev %s, bdaddr %pMR", hdev->name, bdaddr);
955
956         /* Find listening sockets */
957         read_lock(&sco_sk_list.lock);
958         sk_for_each(sk, &sco_sk_list.head) {
959                 if (sk->sk_state != BT_LISTEN)
960                         continue;
961
962                 if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr) ||
963                     !bacmp(&bt_sk(sk)->src, BDADDR_ANY)) {
964                         lm |= HCI_LM_ACCEPT;
965
966                         if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))
967                                 *flags |= HCI_PROTO_DEFER;
968                         break;
969                 }
970         }
971         read_unlock(&sco_sk_list.lock);
972
973         return lm;
974 }
975
976 void sco_connect_cfm(struct hci_conn *hcon, __u8 status)
977 {
978         BT_DBG("hcon %p bdaddr %pMR status %d", hcon, &hcon->dst, status);
979         if (!status) {
980                 struct sco_conn *conn;
981
982                 conn = sco_conn_add(hcon);
983                 if (conn)
984                         sco_conn_ready(conn);
985         } else
986                 sco_conn_del(hcon, bt_to_errno(status));
987 }
988
989 void sco_disconn_cfm(struct hci_conn *hcon, __u8 reason)
990 {
991         BT_DBG("hcon %p reason %d", hcon, reason);
992
993         sco_conn_del(hcon, bt_to_errno(reason));
994 }
995
996 int sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
997 {
998         struct sco_conn *conn = hcon->sco_data;
999
1000         if (!conn)
1001                 goto drop;
1002
1003         BT_DBG("conn %p len %d", conn, skb->len);
1004
1005         if (skb->len) {
1006                 sco_recv_frame(conn, skb);
1007                 return 0;
1008         }
1009
1010 drop:
1011         kfree_skb(skb);
1012         return 0;
1013 }
1014
1015 static int sco_debugfs_show(struct seq_file *f, void *p)
1016 {
1017         struct sock *sk;
1018
1019         read_lock(&sco_sk_list.lock);
1020
1021         sk_for_each(sk, &sco_sk_list.head) {
1022                 seq_printf(f, "%pMR %pMR %d\n", &bt_sk(sk)->src,
1023                            &bt_sk(sk)->dst, sk->sk_state);
1024         }
1025
1026         read_unlock(&sco_sk_list.lock);
1027
1028         return 0;
1029 }
1030
1031 static int sco_debugfs_open(struct inode *inode, struct file *file)
1032 {
1033         return single_open(file, sco_debugfs_show, inode->i_private);
1034 }
1035
1036 static const struct file_operations sco_debugfs_fops = {
1037         .open           = sco_debugfs_open,
1038         .read           = seq_read,
1039         .llseek         = seq_lseek,
1040         .release        = single_release,
1041 };
1042
1043 static struct dentry *sco_debugfs;
1044
1045 static const struct proto_ops sco_sock_ops = {
1046         .family         = PF_BLUETOOTH,
1047         .owner          = THIS_MODULE,
1048         .release        = sco_sock_release,
1049         .bind           = sco_sock_bind,
1050         .connect        = sco_sock_connect,
1051         .listen         = sco_sock_listen,
1052         .accept         = sco_sock_accept,
1053         .getname        = sco_sock_getname,
1054         .sendmsg        = sco_sock_sendmsg,
1055         .recvmsg        = sco_sock_recvmsg,
1056         .poll           = bt_sock_poll,
1057         .ioctl          = bt_sock_ioctl,
1058         .mmap           = sock_no_mmap,
1059         .socketpair     = sock_no_socketpair,
1060         .shutdown       = sco_sock_shutdown,
1061         .setsockopt     = sco_sock_setsockopt,
1062         .getsockopt     = sco_sock_getsockopt
1063 };
1064
1065 static const struct net_proto_family sco_sock_family_ops = {
1066         .family = PF_BLUETOOTH,
1067         .owner  = THIS_MODULE,
1068         .create = sco_sock_create,
1069 };
1070
1071 int __init sco_init(void)
1072 {
1073         int err;
1074
1075         err = proto_register(&sco_proto, 0);
1076         if (err < 0)
1077                 return err;
1078
1079         err = bt_sock_register(BTPROTO_SCO, &sco_sock_family_ops);
1080         if (err < 0) {
1081                 BT_ERR("SCO socket registration failed");
1082                 goto error;
1083         }
1084
1085         err = bt_procfs_init(THIS_MODULE, &init_net, "sco", &sco_sk_list, NULL);
1086         if (err < 0) {
1087                 BT_ERR("Failed to create SCO proc file");
1088                 bt_sock_unregister(BTPROTO_SCO);
1089                 goto error;
1090         }
1091
1092         if (bt_debugfs) {
1093                 sco_debugfs = debugfs_create_file("sco", 0444, bt_debugfs,
1094                                                   NULL, &sco_debugfs_fops);
1095                 if (!sco_debugfs)
1096                         BT_ERR("Failed to create SCO debug file");
1097         }
1098
1099         BT_INFO("SCO socket layer initialized");
1100
1101         return 0;
1102
1103 error:
1104         proto_unregister(&sco_proto);
1105         return err;
1106 }
1107
1108 void __exit sco_exit(void)
1109 {
1110         bt_procfs_cleanup(&init_net, "sco");
1111
1112         debugfs_remove(sco_debugfs);
1113
1114         if (bt_sock_unregister(BTPROTO_SCO) < 0)
1115                 BT_ERR("SCO socket unregistration failed");
1116
1117         proto_unregister(&sco_proto);
1118 }
1119
1120 module_param(disable_esco, bool, 0644);
1121 MODULE_PARM_DESC(disable_esco, "Disable eSCO connection creation");