Bluetooth: Fix RFCOMM tty teardown race
[linux-2.6/btrfs-unstable.git] / net / bluetooth / rfcomm / tty.c
blob6ea08b05b53a0ed19db047cc69c780aca7c05389
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>
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;
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.
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.
25 * RFCOMM TTY.
28 #include <linux/module.h>
30 #include <linux/tty.h>
31 #include <linux/tty_driver.h>
32 #include <linux/tty_flip.h>
34 #include <net/bluetooth/bluetooth.h>
35 #include <net/bluetooth/hci_core.h>
36 #include <net/bluetooth/rfcomm.h>
38 #define RFCOMM_TTY_MAGIC 0x6d02 /* magic number for rfcomm struct */
39 #define RFCOMM_TTY_PORTS RFCOMM_MAX_DEV /* whole lotta rfcomm devices */
40 #define RFCOMM_TTY_MAJOR 216 /* device node major id of the usb/bluetooth.c driver */
41 #define RFCOMM_TTY_MINOR 0
43 static struct tty_driver *rfcomm_tty_driver;
45 struct rfcomm_dev {
46 struct tty_port port;
47 struct list_head list;
49 char name[12];
50 int id;
51 unsigned long flags;
52 int err;
54 unsigned long status; /* don't export to userspace */
56 bdaddr_t src;
57 bdaddr_t dst;
58 u8 channel;
60 uint modem_status;
62 struct rfcomm_dlc *dlc;
64 struct device *tty_dev;
66 atomic_t wmem_alloc;
68 struct sk_buff_head pending;
71 static LIST_HEAD(rfcomm_dev_list);
72 static DEFINE_SPINLOCK(rfcomm_dev_lock);
74 static void rfcomm_dev_data_ready(struct rfcomm_dlc *dlc, struct sk_buff *skb);
75 static void rfcomm_dev_state_change(struct rfcomm_dlc *dlc, int err);
76 static void rfcomm_dev_modem_status(struct rfcomm_dlc *dlc, u8 v24_sig);
78 /* ---- Device functions ---- */
80 static void rfcomm_dev_destruct(struct tty_port *port)
82 struct rfcomm_dev *dev = container_of(port, struct rfcomm_dev, port);
83 struct rfcomm_dlc *dlc = dev->dlc;
85 BT_DBG("dev %p dlc %p", dev, dlc);
87 rfcomm_dlc_lock(dlc);
88 /* Detach DLC if it's owned by this dev */
89 if (dlc->owner == dev)
90 dlc->owner = NULL;
91 rfcomm_dlc_unlock(dlc);
93 rfcomm_dlc_put(dlc);
95 tty_unregister_device(rfcomm_tty_driver, dev->id);
97 spin_lock(&rfcomm_dev_lock);
98 list_del(&dev->list);
99 spin_unlock(&rfcomm_dev_lock);
101 kfree(dev);
103 /* It's safe to call module_put() here because socket still
104 holds reference to this module. */
105 module_put(THIS_MODULE);
108 /* device-specific initialization: open the dlc */
109 static int rfcomm_dev_activate(struct tty_port *port, struct tty_struct *tty)
111 struct rfcomm_dev *dev = container_of(port, struct rfcomm_dev, port);
113 return rfcomm_dlc_open(dev->dlc, &dev->src, &dev->dst, dev->channel);
116 /* we block the open until the dlc->state becomes BT_CONNECTED */
117 static int rfcomm_dev_carrier_raised(struct tty_port *port)
119 struct rfcomm_dev *dev = container_of(port, struct rfcomm_dev, port);
121 return (dev->dlc->state == BT_CONNECTED);
124 /* device-specific cleanup: close the dlc */
125 static void rfcomm_dev_shutdown(struct tty_port *port)
127 struct rfcomm_dev *dev = container_of(port, struct rfcomm_dev, port);
129 if (dev->tty_dev->parent)
130 device_move(dev->tty_dev, NULL, DPM_ORDER_DEV_LAST);
132 /* close the dlc */
133 rfcomm_dlc_close(dev->dlc, 0);
136 static const struct tty_port_operations rfcomm_port_ops = {
137 .destruct = rfcomm_dev_destruct,
138 .activate = rfcomm_dev_activate,
139 .shutdown = rfcomm_dev_shutdown,
140 .carrier_raised = rfcomm_dev_carrier_raised,
143 static struct rfcomm_dev *__rfcomm_dev_get(int id)
145 struct rfcomm_dev *dev;
147 list_for_each_entry(dev, &rfcomm_dev_list, list)
148 if (dev->id == id)
149 return dev;
151 return NULL;
154 static struct rfcomm_dev *rfcomm_dev_get(int id)
156 struct rfcomm_dev *dev;
158 spin_lock(&rfcomm_dev_lock);
160 dev = __rfcomm_dev_get(id);
162 if (dev && !tty_port_get(&dev->port))
163 dev = NULL;
165 spin_unlock(&rfcomm_dev_lock);
167 return dev;
170 static struct device *rfcomm_get_device(struct rfcomm_dev *dev)
172 struct hci_dev *hdev;
173 struct hci_conn *conn;
175 hdev = hci_get_route(&dev->dst, &dev->src);
176 if (!hdev)
177 return NULL;
179 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &dev->dst);
181 hci_dev_put(hdev);
183 return conn ? &conn->dev : NULL;
186 static ssize_t show_address(struct device *tty_dev, struct device_attribute *attr, char *buf)
188 struct rfcomm_dev *dev = dev_get_drvdata(tty_dev);
189 return sprintf(buf, "%pMR\n", &dev->dst);
192 static ssize_t show_channel(struct device *tty_dev, struct device_attribute *attr, char *buf)
194 struct rfcomm_dev *dev = dev_get_drvdata(tty_dev);
195 return sprintf(buf, "%d\n", dev->channel);
198 static DEVICE_ATTR(address, S_IRUGO, show_address, NULL);
199 static DEVICE_ATTR(channel, S_IRUGO, show_channel, NULL);
201 static int rfcomm_dev_add(struct rfcomm_dev_req *req, struct rfcomm_dlc *dlc)
203 struct rfcomm_dev *dev, *entry;
204 struct list_head *head = &rfcomm_dev_list;
205 int err = 0;
207 BT_DBG("id %d channel %d", req->dev_id, req->channel);
209 dev = kzalloc(sizeof(struct rfcomm_dev), GFP_KERNEL);
210 if (!dev)
211 return -ENOMEM;
213 spin_lock(&rfcomm_dev_lock);
215 if (req->dev_id < 0) {
216 dev->id = 0;
218 list_for_each_entry(entry, &rfcomm_dev_list, list) {
219 if (entry->id != dev->id)
220 break;
222 dev->id++;
223 head = &entry->list;
225 } else {
226 dev->id = req->dev_id;
228 list_for_each_entry(entry, &rfcomm_dev_list, list) {
229 if (entry->id == dev->id) {
230 err = -EADDRINUSE;
231 goto out;
234 if (entry->id > dev->id - 1)
235 break;
237 head = &entry->list;
241 if ((dev->id < 0) || (dev->id > RFCOMM_MAX_DEV - 1)) {
242 err = -ENFILE;
243 goto out;
246 sprintf(dev->name, "rfcomm%d", dev->id);
248 list_add(&dev->list, head);
250 bacpy(&dev->src, &req->src);
251 bacpy(&dev->dst, &req->dst);
252 dev->channel = req->channel;
254 dev->flags = req->flags &
255 ((1 << RFCOMM_RELEASE_ONHUP) | (1 << RFCOMM_REUSE_DLC));
257 tty_port_init(&dev->port);
258 dev->port.ops = &rfcomm_port_ops;
260 skb_queue_head_init(&dev->pending);
262 rfcomm_dlc_lock(dlc);
264 if (req->flags & (1 << RFCOMM_REUSE_DLC)) {
265 struct sock *sk = dlc->owner;
266 struct sk_buff *skb;
268 BUG_ON(!sk);
270 rfcomm_dlc_throttle(dlc);
272 while ((skb = skb_dequeue(&sk->sk_receive_queue))) {
273 skb_orphan(skb);
274 skb_queue_tail(&dev->pending, skb);
275 atomic_sub(skb->len, &sk->sk_rmem_alloc);
279 dlc->data_ready = rfcomm_dev_data_ready;
280 dlc->state_change = rfcomm_dev_state_change;
281 dlc->modem_status = rfcomm_dev_modem_status;
283 dlc->owner = dev;
284 dev->dlc = dlc;
286 rfcomm_dev_modem_status(dlc, dlc->remote_v24_sig);
288 rfcomm_dlc_unlock(dlc);
290 /* It's safe to call __module_get() here because socket already
291 holds reference to this module. */
292 __module_get(THIS_MODULE);
294 out:
295 spin_unlock(&rfcomm_dev_lock);
297 if (err < 0)
298 goto free;
300 dev->tty_dev = tty_port_register_device(&dev->port, rfcomm_tty_driver,
301 dev->id, NULL);
302 if (IS_ERR(dev->tty_dev)) {
303 err = PTR_ERR(dev->tty_dev);
304 spin_lock(&rfcomm_dev_lock);
305 list_del(&dev->list);
306 spin_unlock(&rfcomm_dev_lock);
307 goto free;
310 dev_set_drvdata(dev->tty_dev, dev);
312 if (device_create_file(dev->tty_dev, &dev_attr_address) < 0)
313 BT_ERR("Failed to create address attribute");
315 if (device_create_file(dev->tty_dev, &dev_attr_channel) < 0)
316 BT_ERR("Failed to create channel attribute");
318 return dev->id;
320 free:
321 kfree(dev);
322 return err;
325 /* ---- Send buffer ---- */
326 static inline unsigned int rfcomm_room(struct rfcomm_dlc *dlc)
328 /* We can't let it be zero, because we don't get a callback
329 when tx_credits becomes nonzero, hence we'd never wake up */
330 return dlc->mtu * (dlc->tx_credits?:1);
333 static void rfcomm_wfree(struct sk_buff *skb)
335 struct rfcomm_dev *dev = (void *) skb->sk;
336 atomic_sub(skb->truesize, &dev->wmem_alloc);
337 if (test_bit(RFCOMM_TTY_ATTACHED, &dev->flags))
338 tty_port_tty_wakeup(&dev->port);
339 tty_port_put(&dev->port);
342 static void rfcomm_set_owner_w(struct sk_buff *skb, struct rfcomm_dev *dev)
344 tty_port_get(&dev->port);
345 atomic_add(skb->truesize, &dev->wmem_alloc);
346 skb->sk = (void *) dev;
347 skb->destructor = rfcomm_wfree;
350 static struct sk_buff *rfcomm_wmalloc(struct rfcomm_dev *dev, unsigned long size, gfp_t priority)
352 if (atomic_read(&dev->wmem_alloc) < rfcomm_room(dev->dlc)) {
353 struct sk_buff *skb = alloc_skb(size, priority);
354 if (skb) {
355 rfcomm_set_owner_w(skb, dev);
356 return skb;
359 return NULL;
362 /* ---- Device IOCTLs ---- */
364 #define NOCAP_FLAGS ((1 << RFCOMM_REUSE_DLC) | (1 << RFCOMM_RELEASE_ONHUP))
366 static int rfcomm_create_dev(struct sock *sk, void __user *arg)
368 struct rfcomm_dev_req req;
369 struct rfcomm_dlc *dlc;
370 int id;
372 if (copy_from_user(&req, arg, sizeof(req)))
373 return -EFAULT;
375 BT_DBG("sk %p dev_id %d flags 0x%x", sk, req.dev_id, req.flags);
377 if (req.flags != NOCAP_FLAGS && !capable(CAP_NET_ADMIN))
378 return -EPERM;
380 if (req.flags & (1 << RFCOMM_REUSE_DLC)) {
381 /* Socket must be connected */
382 if (sk->sk_state != BT_CONNECTED)
383 return -EBADFD;
385 dlc = rfcomm_pi(sk)->dlc;
386 rfcomm_dlc_hold(dlc);
387 } else {
388 dlc = rfcomm_dlc_alloc(GFP_KERNEL);
389 if (!dlc)
390 return -ENOMEM;
393 id = rfcomm_dev_add(&req, dlc);
394 if (id < 0) {
395 rfcomm_dlc_put(dlc);
396 return id;
399 if (req.flags & (1 << RFCOMM_REUSE_DLC)) {
400 /* DLC is now used by device.
401 * Socket must be disconnected */
402 sk->sk_state = BT_CLOSED;
405 return id;
408 static int rfcomm_release_dev(void __user *arg)
410 struct rfcomm_dev_req req;
411 struct rfcomm_dev *dev;
412 struct tty_struct *tty;
414 if (copy_from_user(&req, arg, sizeof(req)))
415 return -EFAULT;
417 BT_DBG("dev_id %d flags 0x%x", req.dev_id, req.flags);
419 dev = rfcomm_dev_get(req.dev_id);
420 if (!dev)
421 return -ENODEV;
423 if (dev->flags != NOCAP_FLAGS && !capable(CAP_NET_ADMIN)) {
424 tty_port_put(&dev->port);
425 return -EPERM;
428 /* only release once */
429 if (test_and_set_bit(RFCOMM_DEV_RELEASED, &dev->status)) {
430 tty_port_put(&dev->port);
431 return -EALREADY;
434 if (req.flags & (1 << RFCOMM_HANGUP_NOW))
435 rfcomm_dlc_close(dev->dlc, 0);
437 /* Shut down TTY synchronously before freeing rfcomm_dev */
438 tty = tty_port_tty_get(&dev->port);
439 if (tty) {
440 tty_vhangup(tty);
441 tty_kref_put(tty);
444 if (!test_bit(RFCOMM_TTY_OWNED, &dev->status))
445 tty_port_put(&dev->port);
447 tty_port_put(&dev->port);
448 return 0;
451 static int rfcomm_get_dev_list(void __user *arg)
453 struct rfcomm_dev *dev;
454 struct rfcomm_dev_list_req *dl;
455 struct rfcomm_dev_info *di;
456 int n = 0, size, err;
457 u16 dev_num;
459 BT_DBG("");
461 if (get_user(dev_num, (u16 __user *) arg))
462 return -EFAULT;
464 if (!dev_num || dev_num > (PAGE_SIZE * 4) / sizeof(*di))
465 return -EINVAL;
467 size = sizeof(*dl) + dev_num * sizeof(*di);
469 dl = kzalloc(size, GFP_KERNEL);
470 if (!dl)
471 return -ENOMEM;
473 di = dl->dev_info;
475 spin_lock(&rfcomm_dev_lock);
477 list_for_each_entry(dev, &rfcomm_dev_list, list) {
478 if (!tty_port_get(&dev->port))
479 continue;
480 (di + n)->id = dev->id;
481 (di + n)->flags = dev->flags;
482 (di + n)->state = dev->dlc->state;
483 (di + n)->channel = dev->channel;
484 bacpy(&(di + n)->src, &dev->src);
485 bacpy(&(di + n)->dst, &dev->dst);
486 tty_port_put(&dev->port);
487 if (++n >= dev_num)
488 break;
491 spin_unlock(&rfcomm_dev_lock);
493 dl->dev_num = n;
494 size = sizeof(*dl) + n * sizeof(*di);
496 err = copy_to_user(arg, dl, size);
497 kfree(dl);
499 return err ? -EFAULT : 0;
502 static int rfcomm_get_dev_info(void __user *arg)
504 struct rfcomm_dev *dev;
505 struct rfcomm_dev_info di;
506 int err = 0;
508 BT_DBG("");
510 if (copy_from_user(&di, arg, sizeof(di)))
511 return -EFAULT;
513 dev = rfcomm_dev_get(di.id);
514 if (!dev)
515 return -ENODEV;
517 di.flags = dev->flags;
518 di.channel = dev->channel;
519 di.state = dev->dlc->state;
520 bacpy(&di.src, &dev->src);
521 bacpy(&di.dst, &dev->dst);
523 if (copy_to_user(arg, &di, sizeof(di)))
524 err = -EFAULT;
526 tty_port_put(&dev->port);
527 return err;
530 int rfcomm_dev_ioctl(struct sock *sk, unsigned int cmd, void __user *arg)
532 BT_DBG("cmd %d arg %p", cmd, arg);
534 switch (cmd) {
535 case RFCOMMCREATEDEV:
536 return rfcomm_create_dev(sk, arg);
538 case RFCOMMRELEASEDEV:
539 return rfcomm_release_dev(arg);
541 case RFCOMMGETDEVLIST:
542 return rfcomm_get_dev_list(arg);
544 case RFCOMMGETDEVINFO:
545 return rfcomm_get_dev_info(arg);
548 return -EINVAL;
551 /* ---- DLC callbacks ---- */
552 static void rfcomm_dev_data_ready(struct rfcomm_dlc *dlc, struct sk_buff *skb)
554 struct rfcomm_dev *dev = dlc->owner;
556 if (!dev) {
557 kfree_skb(skb);
558 return;
561 if (!skb_queue_empty(&dev->pending)) {
562 skb_queue_tail(&dev->pending, skb);
563 return;
566 BT_DBG("dlc %p len %d", dlc, skb->len);
568 tty_insert_flip_string(&dev->port, skb->data, skb->len);
569 tty_flip_buffer_push(&dev->port);
571 kfree_skb(skb);
574 static void rfcomm_dev_state_change(struct rfcomm_dlc *dlc, int err)
576 struct rfcomm_dev *dev = dlc->owner;
577 if (!dev)
578 return;
580 BT_DBG("dlc %p dev %p err %d", dlc, dev, err);
582 dev->err = err;
583 if (dlc->state == BT_CONNECTED) {
584 device_move(dev->tty_dev, rfcomm_get_device(dev),
585 DPM_ORDER_DEV_AFTER_PARENT);
587 wake_up_interruptible(&dev->port.open_wait);
588 } else if (dlc->state == BT_CLOSED)
589 tty_port_tty_hangup(&dev->port, false);
592 static void rfcomm_dev_modem_status(struct rfcomm_dlc *dlc, u8 v24_sig)
594 struct rfcomm_dev *dev = dlc->owner;
595 if (!dev)
596 return;
598 BT_DBG("dlc %p dev %p v24_sig 0x%02x", dlc, dev, v24_sig);
600 if ((dev->modem_status & TIOCM_CD) && !(v24_sig & RFCOMM_V24_DV))
601 tty_port_tty_hangup(&dev->port, true);
603 dev->modem_status =
604 ((v24_sig & RFCOMM_V24_RTC) ? (TIOCM_DSR | TIOCM_DTR) : 0) |
605 ((v24_sig & RFCOMM_V24_RTR) ? (TIOCM_RTS | TIOCM_CTS) : 0) |
606 ((v24_sig & RFCOMM_V24_IC) ? TIOCM_RI : 0) |
607 ((v24_sig & RFCOMM_V24_DV) ? TIOCM_CD : 0);
610 /* ---- TTY functions ---- */
611 static void rfcomm_tty_copy_pending(struct rfcomm_dev *dev)
613 struct sk_buff *skb;
614 int inserted = 0;
616 BT_DBG("dev %p", dev);
618 rfcomm_dlc_lock(dev->dlc);
620 while ((skb = skb_dequeue(&dev->pending))) {
621 inserted += tty_insert_flip_string(&dev->port, skb->data,
622 skb->len);
623 kfree_skb(skb);
626 rfcomm_dlc_unlock(dev->dlc);
628 if (inserted > 0)
629 tty_flip_buffer_push(&dev->port);
632 /* do the reverse of install, clearing the tty fields and releasing the
633 * reference to tty_port
635 static void rfcomm_tty_cleanup(struct tty_struct *tty)
637 struct rfcomm_dev *dev = tty->driver_data;
639 clear_bit(RFCOMM_TTY_ATTACHED, &dev->flags);
641 rfcomm_dlc_lock(dev->dlc);
642 tty->driver_data = NULL;
643 rfcomm_dlc_unlock(dev->dlc);
646 * purge the dlc->tx_queue to avoid circular dependencies
647 * between dev and dlc
649 skb_queue_purge(&dev->dlc->tx_queue);
651 tty_port_put(&dev->port);
654 /* we acquire the tty_port reference since it's here the tty is first used
655 * by setting the termios. We also populate the driver_data field and install
656 * the tty port
658 static int rfcomm_tty_install(struct tty_driver *driver, struct tty_struct *tty)
660 struct rfcomm_dev *dev;
661 struct rfcomm_dlc *dlc;
662 int err;
664 dev = rfcomm_dev_get(tty->index);
665 if (!dev)
666 return -ENODEV;
668 dlc = dev->dlc;
670 /* Attach TTY and open DLC */
671 rfcomm_dlc_lock(dlc);
672 tty->driver_data = dev;
673 rfcomm_dlc_unlock(dlc);
674 set_bit(RFCOMM_TTY_ATTACHED, &dev->flags);
676 /* install the tty_port */
677 err = tty_port_install(&dev->port, driver, tty);
678 if (err) {
679 rfcomm_tty_cleanup(tty);
680 return err;
683 /* take over the tty_port reference if the port was created with the
684 * flag RFCOMM_RELEASE_ONHUP. This will force the release of the port
685 * when the last process closes the tty. The behaviour is expected by
686 * userspace.
688 if (test_bit(RFCOMM_RELEASE_ONHUP, &dev->flags)) {
689 set_bit(RFCOMM_TTY_OWNED, &dev->status);
690 tty_port_put(&dev->port);
693 return 0;
696 static int rfcomm_tty_open(struct tty_struct *tty, struct file *filp)
698 struct rfcomm_dev *dev = tty->driver_data;
699 int err;
701 BT_DBG("tty %p id %d", tty, tty->index);
703 BT_DBG("dev %p dst %pMR channel %d opened %d", dev, &dev->dst,
704 dev->channel, dev->port.count);
706 err = tty_port_open(&dev->port, tty, filp);
707 if (err)
708 return err;
711 * FIXME: rfcomm should use proper flow control for
712 * received data. This hack will be unnecessary and can
713 * be removed when that's implemented
715 rfcomm_tty_copy_pending(dev);
717 rfcomm_dlc_unthrottle(dev->dlc);
719 return 0;
722 static void rfcomm_tty_close(struct tty_struct *tty, struct file *filp)
724 struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
726 BT_DBG("tty %p dev %p dlc %p opened %d", tty, dev, dev->dlc,
727 dev->port.count);
729 tty_port_close(&dev->port, tty, filp);
732 static int rfcomm_tty_write(struct tty_struct *tty, const unsigned char *buf, int count)
734 struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
735 struct rfcomm_dlc *dlc = dev->dlc;
736 struct sk_buff *skb;
737 int err = 0, sent = 0, size;
739 BT_DBG("tty %p count %d", tty, count);
741 while (count) {
742 size = min_t(uint, count, dlc->mtu);
744 skb = rfcomm_wmalloc(dev, size + RFCOMM_SKB_RESERVE, GFP_ATOMIC);
746 if (!skb)
747 break;
749 skb_reserve(skb, RFCOMM_SKB_HEAD_RESERVE);
751 memcpy(skb_put(skb, size), buf + sent, size);
753 err = rfcomm_dlc_send(dlc, skb);
754 if (err < 0) {
755 kfree_skb(skb);
756 break;
759 sent += size;
760 count -= size;
763 return sent ? sent : err;
766 static int rfcomm_tty_write_room(struct tty_struct *tty)
768 struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
769 int room;
771 BT_DBG("tty %p", tty);
773 if (!dev || !dev->dlc)
774 return 0;
776 room = rfcomm_room(dev->dlc) - atomic_read(&dev->wmem_alloc);
777 if (room < 0)
778 room = 0;
780 return room;
783 static int rfcomm_tty_ioctl(struct tty_struct *tty, unsigned int cmd, unsigned long arg)
785 BT_DBG("tty %p cmd 0x%02x", tty, cmd);
787 switch (cmd) {
788 case TCGETS:
789 BT_DBG("TCGETS is not supported");
790 return -ENOIOCTLCMD;
792 case TCSETS:
793 BT_DBG("TCSETS is not supported");
794 return -ENOIOCTLCMD;
796 case TIOCMIWAIT:
797 BT_DBG("TIOCMIWAIT");
798 break;
800 case TIOCGSERIAL:
801 BT_ERR("TIOCGSERIAL is not supported");
802 return -ENOIOCTLCMD;
804 case TIOCSSERIAL:
805 BT_ERR("TIOCSSERIAL is not supported");
806 return -ENOIOCTLCMD;
808 case TIOCSERGSTRUCT:
809 BT_ERR("TIOCSERGSTRUCT is not supported");
810 return -ENOIOCTLCMD;
812 case TIOCSERGETLSR:
813 BT_ERR("TIOCSERGETLSR is not supported");
814 return -ENOIOCTLCMD;
816 case TIOCSERCONFIG:
817 BT_ERR("TIOCSERCONFIG is not supported");
818 return -ENOIOCTLCMD;
820 default:
821 return -ENOIOCTLCMD; /* ioctls which we must ignore */
825 return -ENOIOCTLCMD;
828 static void rfcomm_tty_set_termios(struct tty_struct *tty, struct ktermios *old)
830 struct ktermios *new = &tty->termios;
831 int old_baud_rate = tty_termios_baud_rate(old);
832 int new_baud_rate = tty_termios_baud_rate(new);
834 u8 baud, data_bits, stop_bits, parity, x_on, x_off;
835 u16 changes = 0;
837 struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
839 BT_DBG("tty %p termios %p", tty, old);
841 if (!dev || !dev->dlc || !dev->dlc->session)
842 return;
844 /* Handle turning off CRTSCTS */
845 if ((old->c_cflag & CRTSCTS) && !(new->c_cflag & CRTSCTS))
846 BT_DBG("Turning off CRTSCTS unsupported");
848 /* Parity on/off and when on, odd/even */
849 if (((old->c_cflag & PARENB) != (new->c_cflag & PARENB)) ||
850 ((old->c_cflag & PARODD) != (new->c_cflag & PARODD))) {
851 changes |= RFCOMM_RPN_PM_PARITY;
852 BT_DBG("Parity change detected.");
855 /* Mark and space parity are not supported! */
856 if (new->c_cflag & PARENB) {
857 if (new->c_cflag & PARODD) {
858 BT_DBG("Parity is ODD");
859 parity = RFCOMM_RPN_PARITY_ODD;
860 } else {
861 BT_DBG("Parity is EVEN");
862 parity = RFCOMM_RPN_PARITY_EVEN;
864 } else {
865 BT_DBG("Parity is OFF");
866 parity = RFCOMM_RPN_PARITY_NONE;
869 /* Setting the x_on / x_off characters */
870 if (old->c_cc[VSTOP] != new->c_cc[VSTOP]) {
871 BT_DBG("XOFF custom");
872 x_on = new->c_cc[VSTOP];
873 changes |= RFCOMM_RPN_PM_XON;
874 } else {
875 BT_DBG("XOFF default");
876 x_on = RFCOMM_RPN_XON_CHAR;
879 if (old->c_cc[VSTART] != new->c_cc[VSTART]) {
880 BT_DBG("XON custom");
881 x_off = new->c_cc[VSTART];
882 changes |= RFCOMM_RPN_PM_XOFF;
883 } else {
884 BT_DBG("XON default");
885 x_off = RFCOMM_RPN_XOFF_CHAR;
888 /* Handle setting of stop bits */
889 if ((old->c_cflag & CSTOPB) != (new->c_cflag & CSTOPB))
890 changes |= RFCOMM_RPN_PM_STOP;
892 /* POSIX does not support 1.5 stop bits and RFCOMM does not
893 * support 2 stop bits. So a request for 2 stop bits gets
894 * translated to 1.5 stop bits */
895 if (new->c_cflag & CSTOPB)
896 stop_bits = RFCOMM_RPN_STOP_15;
897 else
898 stop_bits = RFCOMM_RPN_STOP_1;
900 /* Handle number of data bits [5-8] */
901 if ((old->c_cflag & CSIZE) != (new->c_cflag & CSIZE))
902 changes |= RFCOMM_RPN_PM_DATA;
904 switch (new->c_cflag & CSIZE) {
905 case CS5:
906 data_bits = RFCOMM_RPN_DATA_5;
907 break;
908 case CS6:
909 data_bits = RFCOMM_RPN_DATA_6;
910 break;
911 case CS7:
912 data_bits = RFCOMM_RPN_DATA_7;
913 break;
914 case CS8:
915 data_bits = RFCOMM_RPN_DATA_8;
916 break;
917 default:
918 data_bits = RFCOMM_RPN_DATA_8;
919 break;
922 /* Handle baudrate settings */
923 if (old_baud_rate != new_baud_rate)
924 changes |= RFCOMM_RPN_PM_BITRATE;
926 switch (new_baud_rate) {
927 case 2400:
928 baud = RFCOMM_RPN_BR_2400;
929 break;
930 case 4800:
931 baud = RFCOMM_RPN_BR_4800;
932 break;
933 case 7200:
934 baud = RFCOMM_RPN_BR_7200;
935 break;
936 case 9600:
937 baud = RFCOMM_RPN_BR_9600;
938 break;
939 case 19200:
940 baud = RFCOMM_RPN_BR_19200;
941 break;
942 case 38400:
943 baud = RFCOMM_RPN_BR_38400;
944 break;
945 case 57600:
946 baud = RFCOMM_RPN_BR_57600;
947 break;
948 case 115200:
949 baud = RFCOMM_RPN_BR_115200;
950 break;
951 case 230400:
952 baud = RFCOMM_RPN_BR_230400;
953 break;
954 default:
955 /* 9600 is standard accordinag to the RFCOMM specification */
956 baud = RFCOMM_RPN_BR_9600;
957 break;
961 if (changes)
962 rfcomm_send_rpn(dev->dlc->session, 1, dev->dlc->dlci, baud,
963 data_bits, stop_bits, parity,
964 RFCOMM_RPN_FLOW_NONE, x_on, x_off, changes);
967 static void rfcomm_tty_throttle(struct tty_struct *tty)
969 struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
971 BT_DBG("tty %p dev %p", tty, dev);
973 rfcomm_dlc_throttle(dev->dlc);
976 static void rfcomm_tty_unthrottle(struct tty_struct *tty)
978 struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
980 BT_DBG("tty %p dev %p", tty, dev);
982 rfcomm_dlc_unthrottle(dev->dlc);
985 static int rfcomm_tty_chars_in_buffer(struct tty_struct *tty)
987 struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
989 BT_DBG("tty %p dev %p", tty, dev);
991 if (!dev || !dev->dlc)
992 return 0;
994 if (!skb_queue_empty(&dev->dlc->tx_queue))
995 return dev->dlc->mtu;
997 return 0;
1000 static void rfcomm_tty_flush_buffer(struct tty_struct *tty)
1002 struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
1004 BT_DBG("tty %p dev %p", tty, dev);
1006 if (!dev || !dev->dlc)
1007 return;
1009 skb_queue_purge(&dev->dlc->tx_queue);
1010 tty_wakeup(tty);
1013 static void rfcomm_tty_send_xchar(struct tty_struct *tty, char ch)
1015 BT_DBG("tty %p ch %c", tty, ch);
1018 static void rfcomm_tty_wait_until_sent(struct tty_struct *tty, int timeout)
1020 BT_DBG("tty %p timeout %d", tty, timeout);
1023 static void rfcomm_tty_hangup(struct tty_struct *tty)
1025 struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
1027 BT_DBG("tty %p dev %p", tty, dev);
1029 tty_port_hangup(&dev->port);
1032 static int rfcomm_tty_tiocmget(struct tty_struct *tty)
1034 struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
1036 BT_DBG("tty %p dev %p", tty, dev);
1038 return dev->modem_status;
1041 static int rfcomm_tty_tiocmset(struct tty_struct *tty, unsigned int set, unsigned int clear)
1043 struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
1044 struct rfcomm_dlc *dlc = dev->dlc;
1045 u8 v24_sig;
1047 BT_DBG("tty %p dev %p set 0x%02x clear 0x%02x", tty, dev, set, clear);
1049 rfcomm_dlc_get_modem_status(dlc, &v24_sig);
1051 if (set & TIOCM_DSR || set & TIOCM_DTR)
1052 v24_sig |= RFCOMM_V24_RTC;
1053 if (set & TIOCM_RTS || set & TIOCM_CTS)
1054 v24_sig |= RFCOMM_V24_RTR;
1055 if (set & TIOCM_RI)
1056 v24_sig |= RFCOMM_V24_IC;
1057 if (set & TIOCM_CD)
1058 v24_sig |= RFCOMM_V24_DV;
1060 if (clear & TIOCM_DSR || clear & TIOCM_DTR)
1061 v24_sig &= ~RFCOMM_V24_RTC;
1062 if (clear & TIOCM_RTS || clear & TIOCM_CTS)
1063 v24_sig &= ~RFCOMM_V24_RTR;
1064 if (clear & TIOCM_RI)
1065 v24_sig &= ~RFCOMM_V24_IC;
1066 if (clear & TIOCM_CD)
1067 v24_sig &= ~RFCOMM_V24_DV;
1069 rfcomm_dlc_set_modem_status(dlc, v24_sig);
1071 return 0;
1074 /* ---- TTY structure ---- */
1076 static const struct tty_operations rfcomm_ops = {
1077 .open = rfcomm_tty_open,
1078 .close = rfcomm_tty_close,
1079 .write = rfcomm_tty_write,
1080 .write_room = rfcomm_tty_write_room,
1081 .chars_in_buffer = rfcomm_tty_chars_in_buffer,
1082 .flush_buffer = rfcomm_tty_flush_buffer,
1083 .ioctl = rfcomm_tty_ioctl,
1084 .throttle = rfcomm_tty_throttle,
1085 .unthrottle = rfcomm_tty_unthrottle,
1086 .set_termios = rfcomm_tty_set_termios,
1087 .send_xchar = rfcomm_tty_send_xchar,
1088 .hangup = rfcomm_tty_hangup,
1089 .wait_until_sent = rfcomm_tty_wait_until_sent,
1090 .tiocmget = rfcomm_tty_tiocmget,
1091 .tiocmset = rfcomm_tty_tiocmset,
1092 .install = rfcomm_tty_install,
1093 .cleanup = rfcomm_tty_cleanup,
1096 int __init rfcomm_init_ttys(void)
1098 int error;
1100 rfcomm_tty_driver = alloc_tty_driver(RFCOMM_TTY_PORTS);
1101 if (!rfcomm_tty_driver)
1102 return -ENOMEM;
1104 rfcomm_tty_driver->driver_name = "rfcomm";
1105 rfcomm_tty_driver->name = "rfcomm";
1106 rfcomm_tty_driver->major = RFCOMM_TTY_MAJOR;
1107 rfcomm_tty_driver->minor_start = RFCOMM_TTY_MINOR;
1108 rfcomm_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
1109 rfcomm_tty_driver->subtype = SERIAL_TYPE_NORMAL;
1110 rfcomm_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
1111 rfcomm_tty_driver->init_termios = tty_std_termios;
1112 rfcomm_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL;
1113 rfcomm_tty_driver->init_termios.c_lflag &= ~ICANON;
1114 tty_set_operations(rfcomm_tty_driver, &rfcomm_ops);
1116 error = tty_register_driver(rfcomm_tty_driver);
1117 if (error) {
1118 BT_ERR("Can't register RFCOMM TTY driver");
1119 put_tty_driver(rfcomm_tty_driver);
1120 return error;
1123 BT_INFO("RFCOMM TTY layer initialized");
1125 return 0;
1128 void rfcomm_cleanup_ttys(void)
1130 tty_unregister_driver(rfcomm_tty_driver);
1131 put_tty_driver(rfcomm_tty_driver);