]> pilppa.org Git - linux-2.6-omap-h63xx.git/blob - net/bluetooth/rfcomm/tty.c
[Bluetooth] Fix reference count when connection lookup fails
[linux-2.6-omap-h63xx.git] / net / bluetooth / rfcomm / tty.c
1 /* 
2    RFCOMM implementation for Linux Bluetooth stack (BlueZ).
3    Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
4    Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License version 2 as
8    published by the Free Software Foundation;
9
10    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
12    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
13    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
14    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES 
15    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 
16    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 
17    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18
19    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, 
20    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS 
21    SOFTWARE IS DISCLAIMED.
22 */
23
24 /*
25  * RFCOMM TTY.
26  *
27  * $Id: tty.c,v 1.24 2002/10/03 01:54:38 holtmann Exp $
28  */
29
30 #include <linux/module.h>
31
32 #include <linux/tty.h>
33 #include <linux/tty_driver.h>
34 #include <linux/tty_flip.h>
35
36 #include <linux/capability.h>
37 #include <linux/slab.h>
38 #include <linux/skbuff.h>
39
40 #include <net/bluetooth/bluetooth.h>
41 #include <net/bluetooth/hci_core.h>
42 #include <net/bluetooth/rfcomm.h>
43
44 #ifndef CONFIG_BT_RFCOMM_DEBUG
45 #undef  BT_DBG
46 #define BT_DBG(D...)
47 #endif
48
49 #define RFCOMM_TTY_MAGIC 0x6d02         /* magic number for rfcomm struct */
50 #define RFCOMM_TTY_PORTS RFCOMM_MAX_DEV /* whole lotta rfcomm devices */
51 #define RFCOMM_TTY_MAJOR 216            /* device node major id of the usb/bluetooth.c driver */
52 #define RFCOMM_TTY_MINOR 0
53
54 static struct tty_driver *rfcomm_tty_driver;
55
56 struct rfcomm_dev {
57         struct list_head        list;
58         atomic_t                refcnt;
59
60         char                    name[12];
61         int                     id;
62         unsigned long           flags;
63         int                     opened;
64         int                     err;
65
66         bdaddr_t                src;
67         bdaddr_t                dst;
68         u8                      channel;
69
70         uint                    modem_status;
71
72         struct rfcomm_dlc       *dlc;
73         struct tty_struct       *tty;
74         wait_queue_head_t       wait;
75         struct tasklet_struct   wakeup_task;
76
77         atomic_t                wmem_alloc;
78 };
79
80 static LIST_HEAD(rfcomm_dev_list);
81 static DEFINE_RWLOCK(rfcomm_dev_lock);
82
83 static void rfcomm_dev_data_ready(struct rfcomm_dlc *dlc, struct sk_buff *skb);
84 static void rfcomm_dev_state_change(struct rfcomm_dlc *dlc, int err);
85 static void rfcomm_dev_modem_status(struct rfcomm_dlc *dlc, u8 v24_sig);
86
87 static void rfcomm_tty_wakeup(unsigned long arg);
88
89 /* ---- Device functions ---- */
90 static void rfcomm_dev_destruct(struct rfcomm_dev *dev)
91 {
92         struct rfcomm_dlc *dlc = dev->dlc;
93
94         BT_DBG("dev %p dlc %p", dev, dlc);
95
96         rfcomm_dlc_lock(dlc);
97         /* Detach DLC if it's owned by this dev */
98         if (dlc->owner == dev)
99                 dlc->owner = NULL;
100         rfcomm_dlc_unlock(dlc);
101
102         rfcomm_dlc_put(dlc);
103
104         tty_unregister_device(rfcomm_tty_driver, dev->id);
105
106         /* Refcount should only hit zero when called from rfcomm_dev_del()
107            which will have taken us off the list. Everything else are
108            refcounting bugs. */
109         BUG_ON(!list_empty(&dev->list));
110
111         kfree(dev);
112
113         /* It's safe to call module_put() here because socket still 
114            holds reference to this module. */
115         module_put(THIS_MODULE);
116 }
117
118 static inline void rfcomm_dev_hold(struct rfcomm_dev *dev)
119 {
120         atomic_inc(&dev->refcnt);
121 }
122
123 static inline void rfcomm_dev_put(struct rfcomm_dev *dev)
124 {
125         /* The reason this isn't actually a race, as you no
126            doubt have a little voice screaming at you in your
127            head, is that the refcount should never actually
128            reach zero unless the device has already been taken
129            off the list, in rfcomm_dev_del(). And if that's not
130            true, we'll hit the BUG() in rfcomm_dev_destruct()
131            anyway. */
132         if (atomic_dec_and_test(&dev->refcnt))
133                 rfcomm_dev_destruct(dev);
134 }
135
136 static struct rfcomm_dev *__rfcomm_dev_get(int id)
137 {
138         struct rfcomm_dev *dev;
139         struct list_head  *p;
140
141         list_for_each(p, &rfcomm_dev_list) {
142                 dev = list_entry(p, struct rfcomm_dev, list);
143                 if (dev->id == id)
144                         return dev;
145         }
146
147         return NULL;
148 }
149
150 static inline struct rfcomm_dev *rfcomm_dev_get(int id)
151 {
152         struct rfcomm_dev *dev;
153
154         read_lock(&rfcomm_dev_lock);
155
156         dev = __rfcomm_dev_get(id);
157         if (dev)
158                 rfcomm_dev_hold(dev);
159
160         read_unlock(&rfcomm_dev_lock);
161
162         return dev;
163 }
164
165 static struct device *rfcomm_get_device(struct rfcomm_dev *dev)
166 {
167         struct hci_dev *hdev;
168         struct hci_conn *conn;
169
170         hdev = hci_get_route(&dev->dst, &dev->src);
171         if (!hdev)
172                 return NULL;
173
174         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &dev->dst);
175
176         hci_dev_put(hdev);
177
178         return conn ? &conn->dev : NULL;
179 }
180
181 static int rfcomm_dev_add(struct rfcomm_dev_req *req, struct rfcomm_dlc *dlc)
182 {
183         struct rfcomm_dev *dev;
184         struct list_head *head = &rfcomm_dev_list, *p;
185         int err = 0;
186
187         BT_DBG("id %d channel %d", req->dev_id, req->channel);
188         
189         dev = kzalloc(sizeof(struct rfcomm_dev), GFP_KERNEL);
190         if (!dev)
191                 return -ENOMEM;
192
193         write_lock_bh(&rfcomm_dev_lock);
194
195         if (req->dev_id < 0) {
196                 dev->id = 0;
197
198                 list_for_each(p, &rfcomm_dev_list) {
199                         if (list_entry(p, struct rfcomm_dev, list)->id != dev->id)
200                                 break;
201
202                         dev->id++;
203                         head = p;
204                 }
205         } else {
206                 dev->id = req->dev_id;
207
208                 list_for_each(p, &rfcomm_dev_list) {
209                         struct rfcomm_dev *entry = list_entry(p, struct rfcomm_dev, list);
210
211                         if (entry->id == dev->id) {
212                                 err = -EADDRINUSE;
213                                 goto out;
214                         }
215
216                         if (entry->id > dev->id - 1)
217                                 break;
218
219                         head = p;
220                 }
221         }
222
223         if ((dev->id < 0) || (dev->id > RFCOMM_MAX_DEV - 1)) {
224                 err = -ENFILE;
225                 goto out;
226         }
227
228         sprintf(dev->name, "rfcomm%d", dev->id);
229
230         list_add(&dev->list, head);
231         atomic_set(&dev->refcnt, 1);
232
233         bacpy(&dev->src, &req->src);
234         bacpy(&dev->dst, &req->dst);
235         dev->channel = req->channel;
236
237         dev->flags = req->flags & 
238                 ((1 << RFCOMM_RELEASE_ONHUP) | (1 << RFCOMM_REUSE_DLC));
239
240         init_waitqueue_head(&dev->wait);
241         tasklet_init(&dev->wakeup_task, rfcomm_tty_wakeup, (unsigned long) dev);
242
243         rfcomm_dlc_lock(dlc);
244         dlc->data_ready   = rfcomm_dev_data_ready;
245         dlc->state_change = rfcomm_dev_state_change;
246         dlc->modem_status = rfcomm_dev_modem_status;
247
248         dlc->owner = dev;
249         dev->dlc   = dlc;
250         rfcomm_dlc_unlock(dlc);
251
252         /* It's safe to call __module_get() here because socket already 
253            holds reference to this module. */
254         __module_get(THIS_MODULE);
255
256 out:
257         write_unlock_bh(&rfcomm_dev_lock);
258
259         if (err) {
260                 kfree(dev);
261                 return err;
262         }
263
264         tty_register_device(rfcomm_tty_driver, dev->id, rfcomm_get_device(dev));
265
266         return dev->id;
267 }
268
269 static void rfcomm_dev_del(struct rfcomm_dev *dev)
270 {
271         BT_DBG("dev %p", dev);
272
273         write_lock_bh(&rfcomm_dev_lock);
274         list_del_init(&dev->list);
275         write_unlock_bh(&rfcomm_dev_lock);
276
277         rfcomm_dev_put(dev);
278 }
279
280 /* ---- Send buffer ---- */
281 static inline unsigned int rfcomm_room(struct rfcomm_dlc *dlc)
282 {
283         /* We can't let it be zero, because we don't get a callback
284            when tx_credits becomes nonzero, hence we'd never wake up */
285         return dlc->mtu * (dlc->tx_credits?:1);
286 }
287
288 static void rfcomm_wfree(struct sk_buff *skb)
289 {
290         struct rfcomm_dev *dev = (void *) skb->sk;
291         atomic_sub(skb->truesize, &dev->wmem_alloc);
292         if (test_bit(RFCOMM_TTY_ATTACHED, &dev->flags))
293                 tasklet_schedule(&dev->wakeup_task);
294         rfcomm_dev_put(dev);
295 }
296
297 static inline void rfcomm_set_owner_w(struct sk_buff *skb, struct rfcomm_dev *dev)
298 {
299         rfcomm_dev_hold(dev);
300         atomic_add(skb->truesize, &dev->wmem_alloc);
301         skb->sk = (void *) dev;
302         skb->destructor = rfcomm_wfree;
303 }
304
305 static struct sk_buff *rfcomm_wmalloc(struct rfcomm_dev *dev, unsigned long size, gfp_t priority)
306 {
307         if (atomic_read(&dev->wmem_alloc) < rfcomm_room(dev->dlc)) {
308                 struct sk_buff *skb = alloc_skb(size, priority);
309                 if (skb) {
310                         rfcomm_set_owner_w(skb, dev);
311                         return skb;
312                 }
313         }
314         return NULL;
315 }
316
317 /* ---- Device IOCTLs ---- */
318
319 #define NOCAP_FLAGS ((1 << RFCOMM_REUSE_DLC) | (1 << RFCOMM_RELEASE_ONHUP))
320
321 static int rfcomm_create_dev(struct sock *sk, void __user *arg)
322 {
323         struct rfcomm_dev_req req;
324         struct rfcomm_dlc *dlc;
325         int id;
326
327         if (copy_from_user(&req, arg, sizeof(req)))
328                 return -EFAULT;
329
330         BT_DBG("sk %p dev_id %id flags 0x%x", sk, req.dev_id, req.flags);
331
332         if (req.flags != NOCAP_FLAGS && !capable(CAP_NET_ADMIN))
333                 return -EPERM;
334
335         if (req.flags & (1 << RFCOMM_REUSE_DLC)) {
336                 /* Socket must be connected */
337                 if (sk->sk_state != BT_CONNECTED)
338                         return -EBADFD;
339
340                 dlc = rfcomm_pi(sk)->dlc;
341                 rfcomm_dlc_hold(dlc);
342         } else {
343                 dlc = rfcomm_dlc_alloc(GFP_KERNEL);
344                 if (!dlc)
345                         return -ENOMEM;
346         }
347
348         id = rfcomm_dev_add(&req, dlc);
349         if (id < 0) {
350                 rfcomm_dlc_put(dlc);
351                 return id;
352         }
353
354         if (req.flags & (1 << RFCOMM_REUSE_DLC)) {
355                 /* DLC is now used by device.
356                  * Socket must be disconnected */
357                 sk->sk_state = BT_CLOSED;
358         }
359
360         return id;
361 }
362
363 static int rfcomm_release_dev(void __user *arg)
364 {
365         struct rfcomm_dev_req req;
366         struct rfcomm_dev *dev;
367
368         if (copy_from_user(&req, arg, sizeof(req)))
369                 return -EFAULT;
370
371         BT_DBG("dev_id %id flags 0x%x", req.dev_id, req.flags);
372
373         if (!(dev = rfcomm_dev_get(req.dev_id)))
374                 return -ENODEV;
375
376         if (dev->flags != NOCAP_FLAGS && !capable(CAP_NET_ADMIN)) {
377                 rfcomm_dev_put(dev);
378                 return -EPERM;
379         }
380
381         if (req.flags & (1 << RFCOMM_HANGUP_NOW))
382                 rfcomm_dlc_close(dev->dlc, 0);
383
384         rfcomm_dev_del(dev);
385         rfcomm_dev_put(dev);
386         return 0;
387 }
388
389 static int rfcomm_get_dev_list(void __user *arg)
390 {
391         struct rfcomm_dev_list_req *dl;
392         struct rfcomm_dev_info *di;
393         struct list_head *p;
394         int n = 0, size, err;
395         u16 dev_num;
396
397         BT_DBG("");
398
399         if (get_user(dev_num, (u16 __user *) arg))
400                 return -EFAULT;
401
402         if (!dev_num || dev_num > (PAGE_SIZE * 4) / sizeof(*di))
403                 return -EINVAL;
404
405         size = sizeof(*dl) + dev_num * sizeof(*di);
406
407         if (!(dl = kmalloc(size, GFP_KERNEL)))
408                 return -ENOMEM;
409
410         di = dl->dev_info;
411
412         read_lock_bh(&rfcomm_dev_lock);
413
414         list_for_each(p, &rfcomm_dev_list) {
415                 struct rfcomm_dev *dev = list_entry(p, struct rfcomm_dev, list);
416                 (di + n)->id      = dev->id;
417                 (di + n)->flags   = dev->flags;
418                 (di + n)->state   = dev->dlc->state;
419                 (di + n)->channel = dev->channel;
420                 bacpy(&(di + n)->src, &dev->src);
421                 bacpy(&(di + n)->dst, &dev->dst);
422                 if (++n >= dev_num)
423                         break;
424         }
425
426         read_unlock_bh(&rfcomm_dev_lock);
427
428         dl->dev_num = n;
429         size = sizeof(*dl) + n * sizeof(*di);
430
431         err = copy_to_user(arg, dl, size);
432         kfree(dl);
433
434         return err ? -EFAULT : 0;
435 }
436
437 static int rfcomm_get_dev_info(void __user *arg)
438 {
439         struct rfcomm_dev *dev;
440         struct rfcomm_dev_info di;
441         int err = 0;
442
443         BT_DBG("");
444
445         if (copy_from_user(&di, arg, sizeof(di)))
446                 return -EFAULT;
447
448         if (!(dev = rfcomm_dev_get(di.id)))
449                 return -ENODEV;
450
451         di.flags   = dev->flags;
452         di.channel = dev->channel;
453         di.state   = dev->dlc->state;
454         bacpy(&di.src, &dev->src);
455         bacpy(&di.dst, &dev->dst);
456
457         if (copy_to_user(arg, &di, sizeof(di)))
458                 err = -EFAULT;
459
460         rfcomm_dev_put(dev);
461         return err;
462 }
463
464 int rfcomm_dev_ioctl(struct sock *sk, unsigned int cmd, void __user *arg)
465 {
466         BT_DBG("cmd %d arg %p", cmd, arg);
467
468         switch (cmd) {
469         case RFCOMMCREATEDEV:
470                 return rfcomm_create_dev(sk, arg);
471
472         case RFCOMMRELEASEDEV:
473                 return rfcomm_release_dev(arg);
474
475         case RFCOMMGETDEVLIST:
476                 return rfcomm_get_dev_list(arg);
477
478         case RFCOMMGETDEVINFO:
479                 return rfcomm_get_dev_info(arg);
480         }
481
482         return -EINVAL;
483 }
484
485 /* ---- DLC callbacks ---- */
486 static void rfcomm_dev_data_ready(struct rfcomm_dlc *dlc, struct sk_buff *skb)
487 {
488         struct rfcomm_dev *dev = dlc->owner;
489         struct tty_struct *tty;
490        
491         if (!dev || !(tty = dev->tty)) {
492                 kfree_skb(skb);
493                 return;
494         }
495
496         BT_DBG("dlc %p tty %p len %d", dlc, tty, skb->len);
497
498         tty_insert_flip_string(tty, skb->data, skb->len);
499         tty_flip_buffer_push(tty);
500
501         kfree_skb(skb);
502 }
503
504 static void rfcomm_dev_state_change(struct rfcomm_dlc *dlc, int err)
505 {
506         struct rfcomm_dev *dev = dlc->owner;
507         if (!dev)
508                 return;
509         
510         BT_DBG("dlc %p dev %p err %d", dlc, dev, err);
511
512         dev->err = err;
513         wake_up_interruptible(&dev->wait);
514
515         if (dlc->state == BT_CLOSED) {
516                 if (!dev->tty) {
517                         if (test_bit(RFCOMM_RELEASE_ONHUP, &dev->flags)) {
518                                 rfcomm_dev_hold(dev);
519                                 rfcomm_dev_del(dev);
520
521                                 /* We have to drop DLC lock here, otherwise
522                                    rfcomm_dev_put() will dead lock if it's
523                                    the last reference. */
524                                 rfcomm_dlc_unlock(dlc);
525                                 rfcomm_dev_put(dev);
526                                 rfcomm_dlc_lock(dlc);
527                         }
528                 } else 
529                         tty_hangup(dev->tty);
530         }
531 }
532
533 static void rfcomm_dev_modem_status(struct rfcomm_dlc *dlc, u8 v24_sig)
534 {
535         struct rfcomm_dev *dev = dlc->owner;
536         if (!dev)
537                 return;
538
539         BT_DBG("dlc %p dev %p v24_sig 0x%02x", dlc, dev, v24_sig);
540
541         if ((dev->modem_status & TIOCM_CD) && !(v24_sig & RFCOMM_V24_DV)) {
542                 if (dev->tty && !C_CLOCAL(dev->tty))
543                         tty_hangup(dev->tty);
544         }
545
546         dev->modem_status = 
547                 ((v24_sig & RFCOMM_V24_RTC) ? (TIOCM_DSR | TIOCM_DTR) : 0) |
548                 ((v24_sig & RFCOMM_V24_RTR) ? (TIOCM_RTS | TIOCM_CTS) : 0) |
549                 ((v24_sig & RFCOMM_V24_IC)  ? TIOCM_RI : 0) |
550                 ((v24_sig & RFCOMM_V24_DV)  ? TIOCM_CD : 0);
551 }
552
553 /* ---- TTY functions ---- */
554 static void rfcomm_tty_wakeup(unsigned long arg)
555 {
556         struct rfcomm_dev *dev = (void *) arg;
557         struct tty_struct *tty = dev->tty;
558         if (!tty)
559                 return;
560
561         BT_DBG("dev %p tty %p", dev, tty);
562
563         if (test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags) && tty->ldisc.write_wakeup)
564                 (tty->ldisc.write_wakeup)(tty);
565
566         wake_up_interruptible(&tty->write_wait);
567 #ifdef SERIAL_HAVE_POLL_WAIT
568         wake_up_interruptible(&tty->poll_wait);
569 #endif
570 }
571
572 static int rfcomm_tty_open(struct tty_struct *tty, struct file *filp)
573 {
574         DECLARE_WAITQUEUE(wait, current);
575         struct rfcomm_dev *dev;
576         struct rfcomm_dlc *dlc;
577         int err, id;
578
579         id = tty->index;
580
581         BT_DBG("tty %p id %d", tty, id);
582
583         /* We don't leak this refcount. For reasons which are not entirely
584            clear, the TTY layer will call our ->close() method even if the
585            open fails. We decrease the refcount there, and decreasing it
586            here too would cause breakage. */
587         dev = rfcomm_dev_get(id);
588         if (!dev)
589                 return -ENODEV;
590
591         BT_DBG("dev %p dst %s channel %d opened %d", dev, batostr(&dev->dst), dev->channel, dev->opened);
592
593         if (dev->opened++ != 0)
594                 return 0;
595
596         dlc = dev->dlc;
597
598         /* Attach TTY and open DLC */
599
600         rfcomm_dlc_lock(dlc);
601         tty->driver_data = dev;
602         dev->tty = tty;
603         rfcomm_dlc_unlock(dlc);
604         set_bit(RFCOMM_TTY_ATTACHED, &dev->flags);
605
606         err = rfcomm_dlc_open(dlc, &dev->src, &dev->dst, dev->channel);
607         if (err < 0)
608                 return err;
609
610         /* Wait for DLC to connect */
611         add_wait_queue(&dev->wait, &wait);
612         while (1) {
613                 set_current_state(TASK_INTERRUPTIBLE);
614
615                 if (dlc->state == BT_CLOSED) {
616                         err = -dev->err;
617                         break;
618                 }
619
620                 if (dlc->state == BT_CONNECTED)
621                         break;
622
623                 if (signal_pending(current)) {
624                         err = -EINTR;
625                         break;
626                 }
627
628                 schedule();
629         }
630         set_current_state(TASK_RUNNING);
631         remove_wait_queue(&dev->wait, &wait);
632
633         return err;
634 }
635
636 static void rfcomm_tty_close(struct tty_struct *tty, struct file *filp)
637 {
638         struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
639         if (!dev)
640                 return;
641
642         BT_DBG("tty %p dev %p dlc %p opened %d", tty, dev, dev->dlc, dev->opened);
643
644         if (--dev->opened == 0) {
645                 /* Close DLC and dettach TTY */
646                 rfcomm_dlc_close(dev->dlc, 0);
647
648                 clear_bit(RFCOMM_TTY_ATTACHED, &dev->flags);
649                 tasklet_kill(&dev->wakeup_task);
650
651                 rfcomm_dlc_lock(dev->dlc);
652                 tty->driver_data = NULL;
653                 dev->tty = NULL;
654                 rfcomm_dlc_unlock(dev->dlc);
655         }
656
657         rfcomm_dev_put(dev);
658 }
659
660 static int rfcomm_tty_write(struct tty_struct *tty, const unsigned char *buf, int count)
661 {
662         struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
663         struct rfcomm_dlc *dlc = dev->dlc;
664         struct sk_buff *skb;
665         int err = 0, sent = 0, size;
666
667         BT_DBG("tty %p count %d", tty, count);
668
669         while (count) {
670                 size = min_t(uint, count, dlc->mtu);
671
672                 skb = rfcomm_wmalloc(dev, size + RFCOMM_SKB_RESERVE, GFP_ATOMIC);
673                 
674                 if (!skb)
675                         break;
676
677                 skb_reserve(skb, RFCOMM_SKB_HEAD_RESERVE);
678
679                 memcpy(skb_put(skb, size), buf + sent, size);
680
681                 if ((err = rfcomm_dlc_send(dlc, skb)) < 0) {
682                         kfree_skb(skb);
683                         break;
684                 }
685
686                 sent  += size;
687                 count -= size;
688         }
689
690         return sent ? sent : err;
691 }
692
693 static int rfcomm_tty_write_room(struct tty_struct *tty)
694 {
695         struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
696         int room;
697
698         BT_DBG("tty %p", tty);
699
700         room = rfcomm_room(dev->dlc) - atomic_read(&dev->wmem_alloc);
701         if (room < 0)
702                 room = 0;
703         return room;
704 }
705
706 static int rfcomm_tty_ioctl(struct tty_struct *tty, struct file *filp, unsigned int cmd, unsigned long arg)
707 {
708         BT_DBG("tty %p cmd 0x%02x", tty, cmd);
709
710         switch (cmd) {
711         case TCGETS:
712                 BT_DBG("TCGETS is not supported");
713                 return -ENOIOCTLCMD;
714
715         case TCSETS:
716                 BT_DBG("TCSETS is not supported");
717                 return -ENOIOCTLCMD;
718
719         case TIOCMIWAIT:
720                 BT_DBG("TIOCMIWAIT");
721                 break;
722
723         case TIOCGICOUNT:
724                 BT_DBG("TIOCGICOUNT");
725                 break;
726
727         case TIOCGSERIAL:
728                 BT_ERR("TIOCGSERIAL is not supported");
729                 return -ENOIOCTLCMD;
730
731         case TIOCSSERIAL:
732                 BT_ERR("TIOCSSERIAL is not supported");
733                 return -ENOIOCTLCMD;
734
735         case TIOCSERGSTRUCT:
736                 BT_ERR("TIOCSERGSTRUCT is not supported");
737                 return -ENOIOCTLCMD;
738
739         case TIOCSERGETLSR:
740                 BT_ERR("TIOCSERGETLSR is not supported");
741                 return -ENOIOCTLCMD;
742
743         case TIOCSERCONFIG:
744                 BT_ERR("TIOCSERCONFIG is not supported");
745                 return -ENOIOCTLCMD;
746
747         default:
748                 return -ENOIOCTLCMD;    /* ioctls which we must ignore */
749
750         }
751
752         return -ENOIOCTLCMD;
753 }
754
755 static void rfcomm_tty_set_termios(struct tty_struct *tty, struct termios *old)
756 {
757         struct termios *new = (struct termios *) tty->termios;
758         int old_baud_rate = tty_termios_baud_rate(old);
759         int new_baud_rate = tty_termios_baud_rate(new);
760
761         u8 baud, data_bits, stop_bits, parity, x_on, x_off;
762         u16 changes = 0;
763
764         struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
765
766         BT_DBG("tty %p termios %p", tty, old);
767
768         /* Handle turning off CRTSCTS */
769         if ((old->c_cflag & CRTSCTS) && !(new->c_cflag & CRTSCTS)) 
770                 BT_DBG("Turning off CRTSCTS unsupported");
771
772         /* Parity on/off and when on, odd/even */
773         if (((old->c_cflag & PARENB) != (new->c_cflag & PARENB)) ||
774                         ((old->c_cflag & PARODD) != (new->c_cflag & PARODD)) ) {
775                 changes |= RFCOMM_RPN_PM_PARITY;
776                 BT_DBG("Parity change detected.");
777         }
778
779         /* Mark and space parity are not supported! */
780         if (new->c_cflag & PARENB) {
781                 if (new->c_cflag & PARODD) {
782                         BT_DBG("Parity is ODD");
783                         parity = RFCOMM_RPN_PARITY_ODD;
784                 } else {
785                         BT_DBG("Parity is EVEN");
786                         parity = RFCOMM_RPN_PARITY_EVEN;
787                 }
788         } else {
789                 BT_DBG("Parity is OFF");
790                 parity = RFCOMM_RPN_PARITY_NONE;
791         }
792
793         /* Setting the x_on / x_off characters */
794         if (old->c_cc[VSTOP] != new->c_cc[VSTOP]) {
795                 BT_DBG("XOFF custom");
796                 x_on = new->c_cc[VSTOP];
797                 changes |= RFCOMM_RPN_PM_XON;
798         } else {
799                 BT_DBG("XOFF default");
800                 x_on = RFCOMM_RPN_XON_CHAR;
801         }
802
803         if (old->c_cc[VSTART] != new->c_cc[VSTART]) {
804                 BT_DBG("XON custom");
805                 x_off = new->c_cc[VSTART];
806                 changes |= RFCOMM_RPN_PM_XOFF;
807         } else {
808                 BT_DBG("XON default");
809                 x_off = RFCOMM_RPN_XOFF_CHAR;
810         }
811
812         /* Handle setting of stop bits */
813         if ((old->c_cflag & CSTOPB) != (new->c_cflag & CSTOPB))
814                 changes |= RFCOMM_RPN_PM_STOP;
815
816         /* POSIX does not support 1.5 stop bits and RFCOMM does not
817          * support 2 stop bits. So a request for 2 stop bits gets
818          * translated to 1.5 stop bits */
819         if (new->c_cflag & CSTOPB) {
820                 stop_bits = RFCOMM_RPN_STOP_15;
821         } else {
822                 stop_bits = RFCOMM_RPN_STOP_1;
823         }
824
825         /* Handle number of data bits [5-8] */
826         if ((old->c_cflag & CSIZE) != (new->c_cflag & CSIZE)) 
827                 changes |= RFCOMM_RPN_PM_DATA;
828
829         switch (new->c_cflag & CSIZE) {
830         case CS5:
831                 data_bits = RFCOMM_RPN_DATA_5;
832                 break;
833         case CS6:
834                 data_bits = RFCOMM_RPN_DATA_6;
835                 break;
836         case CS7:
837                 data_bits = RFCOMM_RPN_DATA_7;
838                 break;
839         case CS8:
840                 data_bits = RFCOMM_RPN_DATA_8;
841                 break;
842         default:
843                 data_bits = RFCOMM_RPN_DATA_8;
844                 break;
845         }
846
847         /* Handle baudrate settings */
848         if (old_baud_rate != new_baud_rate)
849                 changes |= RFCOMM_RPN_PM_BITRATE;
850
851         switch (new_baud_rate) {
852         case 2400:
853                 baud = RFCOMM_RPN_BR_2400;
854                 break;
855         case 4800:
856                 baud = RFCOMM_RPN_BR_4800;
857                 break;
858         case 7200:
859                 baud = RFCOMM_RPN_BR_7200;
860                 break;
861         case 9600:
862                 baud = RFCOMM_RPN_BR_9600;
863                 break;
864         case 19200: 
865                 baud = RFCOMM_RPN_BR_19200;
866                 break;
867         case 38400:
868                 baud = RFCOMM_RPN_BR_38400;
869                 break;
870         case 57600:
871                 baud = RFCOMM_RPN_BR_57600;
872                 break;
873         case 115200:
874                 baud = RFCOMM_RPN_BR_115200;
875                 break;
876         case 230400:
877                 baud = RFCOMM_RPN_BR_230400;
878                 break;
879         default:
880                 /* 9600 is standard accordinag to the RFCOMM specification */
881                 baud = RFCOMM_RPN_BR_9600;
882                 break;
883         
884         }
885
886         if (changes)
887                 rfcomm_send_rpn(dev->dlc->session, 1, dev->dlc->dlci, baud,
888                                 data_bits, stop_bits, parity,
889                                 RFCOMM_RPN_FLOW_NONE, x_on, x_off, changes);
890
891         return;
892 }
893
894 static void rfcomm_tty_throttle(struct tty_struct *tty)
895 {
896         struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
897
898         BT_DBG("tty %p dev %p", tty, dev);
899
900         rfcomm_dlc_throttle(dev->dlc);
901 }
902
903 static void rfcomm_tty_unthrottle(struct tty_struct *tty)
904 {
905         struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
906
907         BT_DBG("tty %p dev %p", tty, dev);
908
909         rfcomm_dlc_unthrottle(dev->dlc);
910 }
911
912 static int rfcomm_tty_chars_in_buffer(struct tty_struct *tty)
913 {
914         struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
915         struct rfcomm_dlc *dlc = dev->dlc;
916
917         BT_DBG("tty %p dev %p", tty, dev);
918
919         if (!skb_queue_empty(&dlc->tx_queue))
920                 return dlc->mtu;
921
922         return 0;
923 }
924
925 static void rfcomm_tty_flush_buffer(struct tty_struct *tty)
926 {
927         struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
928         if (!dev)
929                 return;
930
931         BT_DBG("tty %p dev %p", tty, dev);
932
933         skb_queue_purge(&dev->dlc->tx_queue);
934
935         if (test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags) && tty->ldisc.write_wakeup)
936                 tty->ldisc.write_wakeup(tty);
937 }
938
939 static void rfcomm_tty_send_xchar(struct tty_struct *tty, char ch)
940 {
941         BT_DBG("tty %p ch %c", tty, ch);
942 }
943
944 static void rfcomm_tty_wait_until_sent(struct tty_struct *tty, int timeout)
945 {
946         BT_DBG("tty %p timeout %d", tty, timeout);
947 }
948
949 static void rfcomm_tty_hangup(struct tty_struct *tty)
950 {
951         struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
952         if (!dev)
953                 return;
954
955         BT_DBG("tty %p dev %p", tty, dev);
956
957         rfcomm_tty_flush_buffer(tty);
958
959         if (test_bit(RFCOMM_RELEASE_ONHUP, &dev->flags))
960                 rfcomm_dev_del(dev);
961 }
962
963 static int rfcomm_tty_read_proc(char *buf, char **start, off_t offset, int len, int *eof, void *unused)
964 {
965         return 0;
966 }
967
968 static int rfcomm_tty_tiocmget(struct tty_struct *tty, struct file *filp)
969 {
970         struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
971
972         BT_DBG("tty %p dev %p", tty, dev);
973
974         return dev->modem_status;
975 }
976
977 static int rfcomm_tty_tiocmset(struct tty_struct *tty, struct file *filp, unsigned int set, unsigned int clear)
978 {
979         struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
980         struct rfcomm_dlc *dlc = dev->dlc;
981         u8 v24_sig;
982
983         BT_DBG("tty %p dev %p set 0x%02x clear 0x%02x", tty, dev, set, clear);
984
985         rfcomm_dlc_get_modem_status(dlc, &v24_sig);
986
987         if (set & TIOCM_DSR || set & TIOCM_DTR)
988                 v24_sig |= RFCOMM_V24_RTC;
989         if (set & TIOCM_RTS || set & TIOCM_CTS)
990                 v24_sig |= RFCOMM_V24_RTR;
991         if (set & TIOCM_RI)
992                 v24_sig |= RFCOMM_V24_IC;
993         if (set & TIOCM_CD)
994                 v24_sig |= RFCOMM_V24_DV;
995
996         if (clear & TIOCM_DSR || clear & TIOCM_DTR)
997                 v24_sig &= ~RFCOMM_V24_RTC;
998         if (clear & TIOCM_RTS || clear & TIOCM_CTS)
999                 v24_sig &= ~RFCOMM_V24_RTR;
1000         if (clear & TIOCM_RI)
1001                 v24_sig &= ~RFCOMM_V24_IC;
1002         if (clear & TIOCM_CD)
1003                 v24_sig &= ~RFCOMM_V24_DV;
1004
1005         rfcomm_dlc_set_modem_status(dlc, v24_sig);
1006
1007         return 0;
1008 }
1009
1010 /* ---- TTY structure ---- */
1011
1012 static const struct tty_operations rfcomm_ops = {
1013         .open                   = rfcomm_tty_open,
1014         .close                  = rfcomm_tty_close,
1015         .write                  = rfcomm_tty_write,
1016         .write_room             = rfcomm_tty_write_room,
1017         .chars_in_buffer        = rfcomm_tty_chars_in_buffer,
1018         .flush_buffer           = rfcomm_tty_flush_buffer,
1019         .ioctl                  = rfcomm_tty_ioctl,
1020         .throttle               = rfcomm_tty_throttle,
1021         .unthrottle             = rfcomm_tty_unthrottle,
1022         .set_termios            = rfcomm_tty_set_termios,
1023         .send_xchar             = rfcomm_tty_send_xchar,
1024         .hangup                 = rfcomm_tty_hangup,
1025         .wait_until_sent        = rfcomm_tty_wait_until_sent,
1026         .read_proc              = rfcomm_tty_read_proc,
1027         .tiocmget               = rfcomm_tty_tiocmget,
1028         .tiocmset               = rfcomm_tty_tiocmset,
1029 };
1030
1031 int rfcomm_init_ttys(void)
1032 {
1033         rfcomm_tty_driver = alloc_tty_driver(RFCOMM_TTY_PORTS);
1034         if (!rfcomm_tty_driver)
1035                 return -1;
1036
1037         rfcomm_tty_driver->owner        = THIS_MODULE;
1038         rfcomm_tty_driver->driver_name  = "rfcomm";
1039         rfcomm_tty_driver->name         = "rfcomm";
1040         rfcomm_tty_driver->major        = RFCOMM_TTY_MAJOR;
1041         rfcomm_tty_driver->minor_start  = RFCOMM_TTY_MINOR;
1042         rfcomm_tty_driver->type         = TTY_DRIVER_TYPE_SERIAL;
1043         rfcomm_tty_driver->subtype      = SERIAL_TYPE_NORMAL;
1044         rfcomm_tty_driver->flags        = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
1045         rfcomm_tty_driver->init_termios = tty_std_termios;
1046         rfcomm_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
1047         tty_set_operations(rfcomm_tty_driver, &rfcomm_ops);
1048
1049         if (tty_register_driver(rfcomm_tty_driver)) {
1050                 BT_ERR("Can't register RFCOMM TTY driver");
1051                 put_tty_driver(rfcomm_tty_driver);
1052                 return -1;
1053         }
1054
1055         BT_INFO("RFCOMM TTY layer initialized");
1056
1057         return 0;
1058 }
1059
1060 void rfcomm_cleanup_ttys(void)
1061 {
1062         tty_unregister_driver(rfcomm_tty_driver);
1063         put_tty_driver(rfcomm_tty_driver);
1064 }