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