[ACPI] merge 3549 4320 4485 4588 4980 5483 5651 acpica asus fops pnpacpi branches...
[pandora-kernel.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/config.h>
31 #include <linux/module.h>
32
33 #include <linux/tty.h>
34 #include <linux/tty_driver.h>
35 #include <linux/tty_flip.h>
36
37 #include <linux/capability.h>
38 #include <linux/slab.h>
39 #include <linux/skbuff.h>
40
41 #include <net/bluetooth/bluetooth.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 int rfcomm_dev_add(struct rfcomm_dev_req *req, struct rfcomm_dlc *dlc)
166 {
167         struct rfcomm_dev *dev;
168         struct list_head *head = &rfcomm_dev_list, *p;
169         int err = 0;
170
171         BT_DBG("id %d channel %d", req->dev_id, req->channel);
172         
173         dev = kmalloc(sizeof(struct rfcomm_dev), GFP_KERNEL);
174         if (!dev)
175                 return -ENOMEM;
176         memset(dev, 0, sizeof(struct rfcomm_dev));
177
178         write_lock_bh(&rfcomm_dev_lock);
179
180         if (req->dev_id < 0) {
181                 dev->id = 0;
182
183                 list_for_each(p, &rfcomm_dev_list) {
184                         if (list_entry(p, struct rfcomm_dev, list)->id != dev->id)
185                                 break;
186
187                         dev->id++;
188                         head = p;
189                 }
190         } else {
191                 dev->id = req->dev_id;
192
193                 list_for_each(p, &rfcomm_dev_list) {
194                         struct rfcomm_dev *entry = list_entry(p, struct rfcomm_dev, list);
195
196                         if (entry->id == dev->id) {
197                                 err = -EADDRINUSE;
198                                 goto out;
199                         }
200
201                         if (entry->id > dev->id - 1)
202                                 break;
203
204                         head = p;
205                 }
206         }
207
208         if ((dev->id < 0) || (dev->id > RFCOMM_MAX_DEV - 1)) {
209                 err = -ENFILE;
210                 goto out;
211         }
212
213         sprintf(dev->name, "rfcomm%d", dev->id);
214
215         list_add(&dev->list, head);
216         atomic_set(&dev->refcnt, 1);
217
218         bacpy(&dev->src, &req->src);
219         bacpy(&dev->dst, &req->dst);
220         dev->channel = req->channel;
221
222         dev->flags = req->flags & 
223                 ((1 << RFCOMM_RELEASE_ONHUP) | (1 << RFCOMM_REUSE_DLC));
224
225         init_waitqueue_head(&dev->wait);
226         tasklet_init(&dev->wakeup_task, rfcomm_tty_wakeup, (unsigned long) dev);
227
228         rfcomm_dlc_lock(dlc);
229         dlc->data_ready   = rfcomm_dev_data_ready;
230         dlc->state_change = rfcomm_dev_state_change;
231         dlc->modem_status = rfcomm_dev_modem_status;
232
233         dlc->owner = dev;
234         dev->dlc   = dlc;
235         rfcomm_dlc_unlock(dlc);
236
237         /* It's safe to call __module_get() here because socket already 
238            holds reference to this module. */
239         __module_get(THIS_MODULE);
240
241 out:
242         write_unlock_bh(&rfcomm_dev_lock);
243
244         if (err) {
245                 kfree(dev);
246                 return err;
247         }
248
249         tty_register_device(rfcomm_tty_driver, dev->id, NULL);
250
251         return dev->id;
252 }
253
254 static void rfcomm_dev_del(struct rfcomm_dev *dev)
255 {
256         BT_DBG("dev %p", dev);
257
258         write_lock_bh(&rfcomm_dev_lock);
259         list_del_init(&dev->list);
260         write_unlock_bh(&rfcomm_dev_lock);
261
262         rfcomm_dev_put(dev);
263 }
264
265 /* ---- Send buffer ---- */
266 static inline unsigned int rfcomm_room(struct rfcomm_dlc *dlc)
267 {
268         /* We can't let it be zero, because we don't get a callback
269            when tx_credits becomes nonzero, hence we'd never wake up */
270         return dlc->mtu * (dlc->tx_credits?:1);
271 }
272
273 static void rfcomm_wfree(struct sk_buff *skb)
274 {
275         struct rfcomm_dev *dev = (void *) skb->sk;
276         atomic_sub(skb->truesize, &dev->wmem_alloc);
277         if (test_bit(RFCOMM_TTY_ATTACHED, &dev->flags))
278                 tasklet_schedule(&dev->wakeup_task);
279         rfcomm_dev_put(dev);
280 }
281
282 static inline void rfcomm_set_owner_w(struct sk_buff *skb, struct rfcomm_dev *dev)
283 {
284         rfcomm_dev_hold(dev);
285         atomic_add(skb->truesize, &dev->wmem_alloc);
286         skb->sk = (void *) dev;
287         skb->destructor = rfcomm_wfree;
288 }
289
290 static struct sk_buff *rfcomm_wmalloc(struct rfcomm_dev *dev, unsigned long size, gfp_t priority)
291 {
292         if (atomic_read(&dev->wmem_alloc) < rfcomm_room(dev->dlc)) {
293                 struct sk_buff *skb = alloc_skb(size, priority);
294                 if (skb) {
295                         rfcomm_set_owner_w(skb, dev);
296                         return skb;
297                 }
298         }
299         return NULL;
300 }
301
302 /* ---- Device IOCTLs ---- */
303
304 #define NOCAP_FLAGS ((1 << RFCOMM_REUSE_DLC) | (1 << RFCOMM_RELEASE_ONHUP))
305
306 static int rfcomm_create_dev(struct sock *sk, void __user *arg)
307 {
308         struct rfcomm_dev_req req;
309         struct rfcomm_dlc *dlc;
310         int id;
311
312         if (copy_from_user(&req, arg, sizeof(req)))
313                 return -EFAULT;
314
315         BT_DBG("sk %p dev_id %id flags 0x%x", sk, req.dev_id, req.flags);
316
317         if (req.flags != NOCAP_FLAGS && !capable(CAP_NET_ADMIN))
318                 return -EPERM;
319
320         if (req.flags & (1 << RFCOMM_REUSE_DLC)) {
321                 /* Socket must be connected */
322                 if (sk->sk_state != BT_CONNECTED)
323                         return -EBADFD;
324
325                 dlc = rfcomm_pi(sk)->dlc;
326                 rfcomm_dlc_hold(dlc);
327         } else {
328                 dlc = rfcomm_dlc_alloc(GFP_KERNEL);
329                 if (!dlc)
330                         return -ENOMEM;
331         }
332
333         id = rfcomm_dev_add(&req, dlc);
334         if (id < 0) {
335                 rfcomm_dlc_put(dlc);
336                 return id;
337         }
338
339         if (req.flags & (1 << RFCOMM_REUSE_DLC)) {
340                 /* DLC is now used by device.
341                  * Socket must be disconnected */
342                 sk->sk_state = BT_CLOSED;
343         }
344
345         return id;
346 }
347
348 static int rfcomm_release_dev(void __user *arg)
349 {
350         struct rfcomm_dev_req req;
351         struct rfcomm_dev *dev;
352
353         if (copy_from_user(&req, arg, sizeof(req)))
354                 return -EFAULT;
355
356         BT_DBG("dev_id %id flags 0x%x", req.dev_id, req.flags);
357
358         if (!(dev = rfcomm_dev_get(req.dev_id)))
359                 return -ENODEV;
360
361         if (dev->flags != NOCAP_FLAGS && !capable(CAP_NET_ADMIN)) {
362                 rfcomm_dev_put(dev);
363                 return -EPERM;
364         }
365
366         if (req.flags & (1 << RFCOMM_HANGUP_NOW))
367                 rfcomm_dlc_close(dev->dlc, 0);
368
369         rfcomm_dev_del(dev);
370         rfcomm_dev_put(dev);
371         return 0;
372 }
373
374 static int rfcomm_get_dev_list(void __user *arg)
375 {
376         struct rfcomm_dev_list_req *dl;
377         struct rfcomm_dev_info *di;
378         struct list_head *p;
379         int n = 0, size, err;
380         u16 dev_num;
381
382         BT_DBG("");
383
384         if (get_user(dev_num, (u16 __user *) arg))
385                 return -EFAULT;
386
387         if (!dev_num || dev_num > (PAGE_SIZE * 4) / sizeof(*di))
388                 return -EINVAL;
389
390         size = sizeof(*dl) + dev_num * sizeof(*di);
391
392         if (!(dl = kmalloc(size, GFP_KERNEL)))
393                 return -ENOMEM;
394
395         di = dl->dev_info;
396
397         read_lock_bh(&rfcomm_dev_lock);
398
399         list_for_each(p, &rfcomm_dev_list) {
400                 struct rfcomm_dev *dev = list_entry(p, struct rfcomm_dev, list);
401                 (di + n)->id      = dev->id;
402                 (di + n)->flags   = dev->flags;
403                 (di + n)->state   = dev->dlc->state;
404                 (di + n)->channel = dev->channel;
405                 bacpy(&(di + n)->src, &dev->src);
406                 bacpy(&(di + n)->dst, &dev->dst);
407                 if (++n >= dev_num)
408                         break;
409         }
410
411         read_unlock_bh(&rfcomm_dev_lock);
412
413         dl->dev_num = n;
414         size = sizeof(*dl) + n * sizeof(*di);
415
416         err = copy_to_user(arg, dl, size);
417         kfree(dl);
418
419         return err ? -EFAULT : 0;
420 }
421
422 static int rfcomm_get_dev_info(void __user *arg)
423 {
424         struct rfcomm_dev *dev;
425         struct rfcomm_dev_info di;
426         int err = 0;
427
428         BT_DBG("");
429
430         if (copy_from_user(&di, arg, sizeof(di)))
431                 return -EFAULT;
432
433         if (!(dev = rfcomm_dev_get(di.id)))
434                 return -ENODEV;
435
436         di.flags   = dev->flags;
437         di.channel = dev->channel;
438         di.state   = dev->dlc->state;
439         bacpy(&di.src, &dev->src);
440         bacpy(&di.dst, &dev->dst);
441
442         if (copy_to_user(arg, &di, sizeof(di)))
443                 err = -EFAULT;
444
445         rfcomm_dev_put(dev);
446         return err;
447 }
448
449 int rfcomm_dev_ioctl(struct sock *sk, unsigned int cmd, void __user *arg)
450 {
451         BT_DBG("cmd %d arg %p", cmd, arg);
452
453         switch (cmd) {
454         case RFCOMMCREATEDEV:
455                 return rfcomm_create_dev(sk, arg);
456
457         case RFCOMMRELEASEDEV:
458                 return rfcomm_release_dev(arg);
459
460         case RFCOMMGETDEVLIST:
461                 return rfcomm_get_dev_list(arg);
462
463         case RFCOMMGETDEVINFO:
464                 return rfcomm_get_dev_info(arg);
465         }
466
467         return -EINVAL;
468 }
469
470 /* ---- DLC callbacks ---- */
471 static void rfcomm_dev_data_ready(struct rfcomm_dlc *dlc, struct sk_buff *skb)
472 {
473         struct rfcomm_dev *dev = dlc->owner;
474         struct tty_struct *tty;
475        
476         if (!dev || !(tty = dev->tty)) {
477                 kfree_skb(skb);
478                 return;
479         }
480
481         BT_DBG("dlc %p tty %p len %d", dlc, tty, skb->len);
482
483         if (test_bit(TTY_DONT_FLIP, &tty->flags)) {
484                 tty_buffer_request_room(tty, skb->len);
485                 tty_insert_flip_string(tty, skb->data, skb->len);
486                 tty_flip_buffer_push(tty);
487         } else
488                 tty->ldisc.receive_buf(tty, skb->data, NULL, skb->len);
489
490         kfree_skb(skb);
491 }
492
493 static void rfcomm_dev_state_change(struct rfcomm_dlc *dlc, int err)
494 {
495         struct rfcomm_dev *dev = dlc->owner;
496         if (!dev)
497                 return;
498         
499         BT_DBG("dlc %p dev %p err %d", dlc, dev, err);
500
501         dev->err = err;
502         wake_up_interruptible(&dev->wait);
503
504         if (dlc->state == BT_CLOSED) {
505                 if (!dev->tty) {
506                         if (test_bit(RFCOMM_RELEASE_ONHUP, &dev->flags)) {
507                                 rfcomm_dev_hold(dev);
508                                 rfcomm_dev_del(dev);
509
510                                 /* We have to drop DLC lock here, otherwise
511                                    rfcomm_dev_put() will dead lock if it's
512                                    the last reference. */
513                                 rfcomm_dlc_unlock(dlc);
514                                 rfcomm_dev_put(dev);
515                                 rfcomm_dlc_lock(dlc);
516                         }
517                 } else 
518                         tty_hangup(dev->tty);
519         }
520 }
521
522 static void rfcomm_dev_modem_status(struct rfcomm_dlc *dlc, u8 v24_sig)
523 {
524         struct rfcomm_dev *dev = dlc->owner;
525         if (!dev)
526                 return;
527
528         BT_DBG("dlc %p dev %p v24_sig 0x%02x", dlc, dev, v24_sig);
529
530         if ((dev->modem_status & TIOCM_CD) && !(v24_sig & RFCOMM_V24_DV)) {
531                 if (dev->tty && !C_CLOCAL(dev->tty))
532                         tty_hangup(dev->tty);
533         }
534
535         dev->modem_status = 
536                 ((v24_sig & RFCOMM_V24_RTC) ? (TIOCM_DSR | TIOCM_DTR) : 0) |
537                 ((v24_sig & RFCOMM_V24_RTR) ? (TIOCM_RTS | TIOCM_CTS) : 0) |
538                 ((v24_sig & RFCOMM_V24_IC)  ? TIOCM_RI : 0) |
539                 ((v24_sig & RFCOMM_V24_DV)  ? TIOCM_CD : 0);
540 }
541
542 /* ---- TTY functions ---- */
543 static void rfcomm_tty_wakeup(unsigned long arg)
544 {
545         struct rfcomm_dev *dev = (void *) arg;
546         struct tty_struct *tty = dev->tty;
547         if (!tty)
548                 return;
549
550         BT_DBG("dev %p tty %p", dev, tty);
551
552         if (test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags) && tty->ldisc.write_wakeup)
553                 (tty->ldisc.write_wakeup)(tty);
554
555         wake_up_interruptible(&tty->write_wait);
556 #ifdef SERIAL_HAVE_POLL_WAIT
557         wake_up_interruptible(&tty->poll_wait);
558 #endif
559 }
560
561 static int rfcomm_tty_open(struct tty_struct *tty, struct file *filp)
562 {
563         DECLARE_WAITQUEUE(wait, current);
564         struct rfcomm_dev *dev;
565         struct rfcomm_dlc *dlc;
566         int err, id;
567
568         id = tty->index;
569
570         BT_DBG("tty %p id %d", tty, id);
571
572         /* We don't leak this refcount. For reasons which are not entirely
573            clear, the TTY layer will call our ->close() method even if the
574            open fails. We decrease the refcount there, and decreasing it
575            here too would cause breakage. */
576         dev = rfcomm_dev_get(id);
577         if (!dev)
578                 return -ENODEV;
579
580         BT_DBG("dev %p dst %s channel %d opened %d", dev, batostr(&dev->dst), dev->channel, dev->opened);
581
582         if (dev->opened++ != 0)
583                 return 0;
584
585         dlc = dev->dlc;
586
587         /* Attach TTY and open DLC */
588
589         rfcomm_dlc_lock(dlc);
590         tty->driver_data = dev;
591         dev->tty = tty;
592         rfcomm_dlc_unlock(dlc);
593         set_bit(RFCOMM_TTY_ATTACHED, &dev->flags);
594
595         err = rfcomm_dlc_open(dlc, &dev->src, &dev->dst, dev->channel);
596         if (err < 0)
597                 return err;
598
599         /* Wait for DLC to connect */
600         add_wait_queue(&dev->wait, &wait);
601         while (1) {
602                 set_current_state(TASK_INTERRUPTIBLE);
603
604                 if (dlc->state == BT_CLOSED) {
605                         err = -dev->err;
606                         break;
607                 }
608
609                 if (dlc->state == BT_CONNECTED)
610                         break;
611
612                 if (signal_pending(current)) {
613                         err = -EINTR;
614                         break;
615                 }
616
617                 schedule();
618         }
619         set_current_state(TASK_RUNNING);
620         remove_wait_queue(&dev->wait, &wait);
621
622         return err;
623 }
624
625 static void rfcomm_tty_close(struct tty_struct *tty, struct file *filp)
626 {
627         struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
628         if (!dev)
629                 return;
630
631         BT_DBG("tty %p dev %p dlc %p opened %d", tty, dev, dev->dlc, dev->opened);
632
633         if (--dev->opened == 0) {
634                 /* Close DLC and dettach TTY */
635                 rfcomm_dlc_close(dev->dlc, 0);
636
637                 clear_bit(RFCOMM_TTY_ATTACHED, &dev->flags);
638                 tasklet_kill(&dev->wakeup_task);
639
640                 rfcomm_dlc_lock(dev->dlc);
641                 tty->driver_data = NULL;
642                 dev->tty = NULL;
643                 rfcomm_dlc_unlock(dev->dlc);
644         }
645
646         rfcomm_dev_put(dev);
647 }
648
649 static int rfcomm_tty_write(struct tty_struct *tty, const unsigned char *buf, int count)
650 {
651         struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
652         struct rfcomm_dlc *dlc = dev->dlc;
653         struct sk_buff *skb;
654         int err = 0, sent = 0, size;
655
656         BT_DBG("tty %p count %d", tty, count);
657
658         while (count) {
659                 size = min_t(uint, count, dlc->mtu);
660
661                 skb = rfcomm_wmalloc(dev, size + RFCOMM_SKB_RESERVE, GFP_ATOMIC);
662                 
663                 if (!skb)
664                         break;
665
666                 skb_reserve(skb, RFCOMM_SKB_HEAD_RESERVE);
667
668                 memcpy(skb_put(skb, size), buf + sent, size);
669
670                 if ((err = rfcomm_dlc_send(dlc, skb)) < 0) {
671                         kfree_skb(skb);
672                         break;
673                 }
674
675                 sent  += size;
676                 count -= size;
677         }
678
679         return sent ? sent : err;
680 }
681
682 static int rfcomm_tty_write_room(struct tty_struct *tty)
683 {
684         struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
685         int room;
686
687         BT_DBG("tty %p", tty);
688
689         room = rfcomm_room(dev->dlc) - atomic_read(&dev->wmem_alloc);
690         if (room < 0)
691                 room = 0;
692         return room;
693 }
694
695 static int rfcomm_tty_ioctl(struct tty_struct *tty, struct file *filp, unsigned int cmd, unsigned long arg)
696 {
697         BT_DBG("tty %p cmd 0x%02x", tty, cmd);
698
699         switch (cmd) {
700         case TCGETS:
701                 BT_DBG("TCGETS is not supported");
702                 return -ENOIOCTLCMD;
703
704         case TCSETS:
705                 BT_DBG("TCSETS is not supported");
706                 return -ENOIOCTLCMD;
707
708         case TIOCMIWAIT:
709                 BT_DBG("TIOCMIWAIT");
710                 break;
711
712         case TIOCGICOUNT:
713                 BT_DBG("TIOCGICOUNT");
714                 break;
715
716         case TIOCGSERIAL:
717                 BT_ERR("TIOCGSERIAL is not supported");
718                 return -ENOIOCTLCMD;
719
720         case TIOCSSERIAL:
721                 BT_ERR("TIOCSSERIAL is not supported");
722                 return -ENOIOCTLCMD;
723
724         case TIOCSERGSTRUCT:
725                 BT_ERR("TIOCSERGSTRUCT is not supported");
726                 return -ENOIOCTLCMD;
727
728         case TIOCSERGETLSR:
729                 BT_ERR("TIOCSERGETLSR is not supported");
730                 return -ENOIOCTLCMD;
731
732         case TIOCSERCONFIG:
733                 BT_ERR("TIOCSERCONFIG is not supported");
734                 return -ENOIOCTLCMD;
735
736         default:
737                 return -ENOIOCTLCMD;    /* ioctls which we must ignore */
738
739         }
740
741         return -ENOIOCTLCMD;
742 }
743
744 static void rfcomm_tty_set_termios(struct tty_struct *tty, struct termios *old)
745 {
746         struct termios *new = (struct termios *) tty->termios;
747         int old_baud_rate = tty_termios_baud_rate(old);
748         int new_baud_rate = tty_termios_baud_rate(new);
749
750         u8 baud, data_bits, stop_bits, parity, x_on, x_off;
751         u16 changes = 0;
752
753         struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
754
755         BT_DBG("tty %p termios %p", tty, old);
756
757         /* Handle turning off CRTSCTS */
758         if ((old->c_cflag & CRTSCTS) && !(new->c_cflag & CRTSCTS)) 
759                 BT_DBG("Turning off CRTSCTS unsupported");
760
761         /* Parity on/off and when on, odd/even */
762         if (((old->c_cflag & PARENB) != (new->c_cflag & PARENB)) ||
763                         ((old->c_cflag & PARODD) != (new->c_cflag & PARODD)) ) {
764                 changes |= RFCOMM_RPN_PM_PARITY;
765                 BT_DBG("Parity change detected.");
766         }
767
768         /* Mark and space parity are not supported! */
769         if (new->c_cflag & PARENB) {
770                 if (new->c_cflag & PARODD) {
771                         BT_DBG("Parity is ODD");
772                         parity = RFCOMM_RPN_PARITY_ODD;
773                 } else {
774                         BT_DBG("Parity is EVEN");
775                         parity = RFCOMM_RPN_PARITY_EVEN;
776                 }
777         } else {
778                 BT_DBG("Parity is OFF");
779                 parity = RFCOMM_RPN_PARITY_NONE;
780         }
781
782         /* Setting the x_on / x_off characters */
783         if (old->c_cc[VSTOP] != new->c_cc[VSTOP]) {
784                 BT_DBG("XOFF custom");
785                 x_on = new->c_cc[VSTOP];
786                 changes |= RFCOMM_RPN_PM_XON;
787         } else {
788                 BT_DBG("XOFF default");
789                 x_on = RFCOMM_RPN_XON_CHAR;
790         }
791
792         if (old->c_cc[VSTART] != new->c_cc[VSTART]) {
793                 BT_DBG("XON custom");
794                 x_off = new->c_cc[VSTART];
795                 changes |= RFCOMM_RPN_PM_XOFF;
796         } else {
797                 BT_DBG("XON default");
798                 x_off = RFCOMM_RPN_XOFF_CHAR;
799         }
800
801         /* Handle setting of stop bits */
802         if ((old->c_cflag & CSTOPB) != (new->c_cflag & CSTOPB))
803                 changes |= RFCOMM_RPN_PM_STOP;
804
805         /* POSIX does not support 1.5 stop bits and RFCOMM does not
806          * support 2 stop bits. So a request for 2 stop bits gets
807          * translated to 1.5 stop bits */
808         if (new->c_cflag & CSTOPB) {
809                 stop_bits = RFCOMM_RPN_STOP_15;
810         } else {
811                 stop_bits = RFCOMM_RPN_STOP_1;
812         }
813
814         /* Handle number of data bits [5-8] */
815         if ((old->c_cflag & CSIZE) != (new->c_cflag & CSIZE)) 
816                 changes |= RFCOMM_RPN_PM_DATA;
817
818         switch (new->c_cflag & CSIZE) {
819         case CS5:
820                 data_bits = RFCOMM_RPN_DATA_5;
821                 break;
822         case CS6:
823                 data_bits = RFCOMM_RPN_DATA_6;
824                 break;
825         case CS7:
826                 data_bits = RFCOMM_RPN_DATA_7;
827                 break;
828         case CS8:
829                 data_bits = RFCOMM_RPN_DATA_8;
830                 break;
831         default:
832                 data_bits = RFCOMM_RPN_DATA_8;
833                 break;
834         }
835
836         /* Handle baudrate settings */
837         if (old_baud_rate != new_baud_rate)
838                 changes |= RFCOMM_RPN_PM_BITRATE;
839
840         switch (new_baud_rate) {
841         case 2400:
842                 baud = RFCOMM_RPN_BR_2400;
843                 break;
844         case 4800:
845                 baud = RFCOMM_RPN_BR_4800;
846                 break;
847         case 7200:
848                 baud = RFCOMM_RPN_BR_7200;
849                 break;
850         case 9600:
851                 baud = RFCOMM_RPN_BR_9600;
852                 break;
853         case 19200: 
854                 baud = RFCOMM_RPN_BR_19200;
855                 break;
856         case 38400:
857                 baud = RFCOMM_RPN_BR_38400;
858                 break;
859         case 57600:
860                 baud = RFCOMM_RPN_BR_57600;
861                 break;
862         case 115200:
863                 baud = RFCOMM_RPN_BR_115200;
864                 break;
865         case 230400:
866                 baud = RFCOMM_RPN_BR_230400;
867                 break;
868         default:
869                 /* 9600 is standard accordinag to the RFCOMM specification */
870                 baud = RFCOMM_RPN_BR_9600;
871                 break;
872         
873         }
874
875         if (changes)
876                 rfcomm_send_rpn(dev->dlc->session, 1, dev->dlc->dlci, baud,
877                                 data_bits, stop_bits, parity,
878                                 RFCOMM_RPN_FLOW_NONE, x_on, x_off, changes);
879
880         return;
881 }
882
883 static void rfcomm_tty_throttle(struct tty_struct *tty)
884 {
885         struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
886
887         BT_DBG("tty %p dev %p", tty, dev);
888
889         rfcomm_dlc_throttle(dev->dlc);
890 }
891
892 static void rfcomm_tty_unthrottle(struct tty_struct *tty)
893 {
894         struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
895
896         BT_DBG("tty %p dev %p", tty, dev);
897
898         rfcomm_dlc_unthrottle(dev->dlc);
899 }
900
901 static int rfcomm_tty_chars_in_buffer(struct tty_struct *tty)
902 {
903         struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
904         struct rfcomm_dlc *dlc = dev->dlc;
905
906         BT_DBG("tty %p dev %p", tty, dev);
907
908         if (!skb_queue_empty(&dlc->tx_queue))
909                 return dlc->mtu;
910
911         return 0;
912 }
913
914 static void rfcomm_tty_flush_buffer(struct tty_struct *tty)
915 {
916         struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
917         if (!dev)
918                 return;
919
920         BT_DBG("tty %p dev %p", tty, dev);
921
922         skb_queue_purge(&dev->dlc->tx_queue);
923
924         if (test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags) && tty->ldisc.write_wakeup)
925                 tty->ldisc.write_wakeup(tty);
926 }
927
928 static void rfcomm_tty_send_xchar(struct tty_struct *tty, char ch)
929 {
930         BT_DBG("tty %p ch %c", tty, ch);
931 }
932
933 static void rfcomm_tty_wait_until_sent(struct tty_struct *tty, int timeout)
934 {
935         BT_DBG("tty %p timeout %d", tty, timeout);
936 }
937
938 static void rfcomm_tty_hangup(struct tty_struct *tty)
939 {
940         struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
941         if (!dev)
942                 return;
943
944         BT_DBG("tty %p dev %p", tty, dev);
945
946         rfcomm_tty_flush_buffer(tty);
947
948         if (test_bit(RFCOMM_RELEASE_ONHUP, &dev->flags))
949                 rfcomm_dev_del(dev);
950 }
951
952 static int rfcomm_tty_read_proc(char *buf, char **start, off_t offset, int len, int *eof, void *unused)
953 {
954         return 0;
955 }
956
957 static int rfcomm_tty_tiocmget(struct tty_struct *tty, struct file *filp)
958 {
959         struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
960
961         BT_DBG("tty %p dev %p", tty, dev);
962
963         return dev->modem_status;
964 }
965
966 static int rfcomm_tty_tiocmset(struct tty_struct *tty, struct file *filp, unsigned int set, unsigned int clear)
967 {
968         struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
969         struct rfcomm_dlc *dlc = dev->dlc;
970         u8 v24_sig;
971
972         BT_DBG("tty %p dev %p set 0x%02x clear 0x%02x", tty, dev, set, clear);
973
974         rfcomm_dlc_get_modem_status(dlc, &v24_sig);
975
976         if (set & TIOCM_DSR || set & TIOCM_DTR)
977                 v24_sig |= RFCOMM_V24_RTC;
978         if (set & TIOCM_RTS || set & TIOCM_CTS)
979                 v24_sig |= RFCOMM_V24_RTR;
980         if (set & TIOCM_RI)
981                 v24_sig |= RFCOMM_V24_IC;
982         if (set & TIOCM_CD)
983                 v24_sig |= RFCOMM_V24_DV;
984
985         if (clear & TIOCM_DSR || clear & TIOCM_DTR)
986                 v24_sig &= ~RFCOMM_V24_RTC;
987         if (clear & TIOCM_RTS || clear & TIOCM_CTS)
988                 v24_sig &= ~RFCOMM_V24_RTR;
989         if (clear & TIOCM_RI)
990                 v24_sig &= ~RFCOMM_V24_IC;
991         if (clear & TIOCM_CD)
992                 v24_sig &= ~RFCOMM_V24_DV;
993
994         rfcomm_dlc_set_modem_status(dlc, v24_sig);
995
996         return 0;
997 }
998
999 /* ---- TTY structure ---- */
1000
1001 static struct tty_operations rfcomm_ops = {
1002         .open                   = rfcomm_tty_open,
1003         .close                  = rfcomm_tty_close,
1004         .write                  = rfcomm_tty_write,
1005         .write_room             = rfcomm_tty_write_room,
1006         .chars_in_buffer        = rfcomm_tty_chars_in_buffer,
1007         .flush_buffer           = rfcomm_tty_flush_buffer,
1008         .ioctl                  = rfcomm_tty_ioctl,
1009         .throttle               = rfcomm_tty_throttle,
1010         .unthrottle             = rfcomm_tty_unthrottle,
1011         .set_termios            = rfcomm_tty_set_termios,
1012         .send_xchar             = rfcomm_tty_send_xchar,
1013         .hangup                 = rfcomm_tty_hangup,
1014         .wait_until_sent        = rfcomm_tty_wait_until_sent,
1015         .read_proc              = rfcomm_tty_read_proc,
1016         .tiocmget               = rfcomm_tty_tiocmget,
1017         .tiocmset               = rfcomm_tty_tiocmset,
1018 };
1019
1020 int rfcomm_init_ttys(void)
1021 {
1022         rfcomm_tty_driver = alloc_tty_driver(RFCOMM_TTY_PORTS);
1023         if (!rfcomm_tty_driver)
1024                 return -1;
1025
1026         rfcomm_tty_driver->owner        = THIS_MODULE;
1027         rfcomm_tty_driver->driver_name  = "rfcomm";
1028         rfcomm_tty_driver->devfs_name   = "bluetooth/rfcomm/";
1029         rfcomm_tty_driver->name         = "rfcomm";
1030         rfcomm_tty_driver->major        = RFCOMM_TTY_MAJOR;
1031         rfcomm_tty_driver->minor_start  = RFCOMM_TTY_MINOR;
1032         rfcomm_tty_driver->type         = TTY_DRIVER_TYPE_SERIAL;
1033         rfcomm_tty_driver->subtype      = SERIAL_TYPE_NORMAL;
1034         rfcomm_tty_driver->flags        = TTY_DRIVER_REAL_RAW | TTY_DRIVER_NO_DEVFS;
1035         rfcomm_tty_driver->init_termios = tty_std_termios;
1036         rfcomm_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
1037         tty_set_operations(rfcomm_tty_driver, &rfcomm_ops);
1038
1039         if (tty_register_driver(rfcomm_tty_driver)) {
1040                 BT_ERR("Can't register RFCOMM TTY driver");
1041                 put_tty_driver(rfcomm_tty_driver);
1042                 return -1;
1043         }
1044
1045         BT_INFO("RFCOMM TTY layer initialized");
1046
1047         return 0;
1048 }
1049
1050 void rfcomm_cleanup_ttys(void)
1051 {
1052         tty_unregister_driver(rfcomm_tty_driver);
1053         put_tty_driver(rfcomm_tty_driver);
1054 }