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