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, BDADDR_BREDR);
 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, 0444, show_address, NULL);
 214static DEVICE_ATTR(channel, 0444, 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                if (dlc)
 417                        return -EBUSY;
 418                dlc = rfcomm_dlc_alloc(GFP_KERNEL);
 419                if (!dlc)
 420                        return -ENOMEM;
 421        }
 422
 423        id = rfcomm_dev_add(&req, dlc);
 424        if (id < 0)
 425                return id;
 426
 427        if (req.flags & (1 << RFCOMM_REUSE_DLC)) {
 428                /* DLC is now used by device.
 429                 * Socket must be disconnected */
 430                sk->sk_state = BT_CLOSED;
 431        }
 432
 433        return id;
 434}
 435
 436static int __rfcomm_release_dev(void __user *arg)
 437{
 438        struct rfcomm_dev_req req;
 439        struct rfcomm_dev *dev;
 440        struct tty_struct *tty;
 441
 442        if (copy_from_user(&req, arg, sizeof(req)))
 443                return -EFAULT;
 444
 445        BT_DBG("dev_id %d flags 0x%x", req.dev_id, req.flags);
 446
 447        dev = rfcomm_dev_get(req.dev_id);
 448        if (!dev)
 449                return -ENODEV;
 450
 451        if (dev->flags != NOCAP_FLAGS && !capable(CAP_NET_ADMIN)) {
 452                tty_port_put(&dev->port);
 453                return -EPERM;
 454        }
 455
 456        /* only release once */
 457        if (test_and_set_bit(RFCOMM_DEV_RELEASED, &dev->status)) {
 458                tty_port_put(&dev->port);
 459                return -EALREADY;
 460        }
 461
 462        if (req.flags & (1 << RFCOMM_HANGUP_NOW))
 463                rfcomm_dlc_close(dev->dlc, 0);
 464
 465        /* Shut down TTY synchronously before freeing rfcomm_dev */
 466        tty = tty_port_tty_get(&dev->port);
 467        if (tty) {
 468                tty_vhangup(tty);
 469                tty_kref_put(tty);
 470        }
 471
 472        if (!test_bit(RFCOMM_TTY_OWNED, &dev->status))
 473                tty_port_put(&dev->port);
 474
 475        tty_port_put(&dev->port);
 476        return 0;
 477}
 478
 479static int rfcomm_create_dev(struct sock *sk, void __user *arg)
 480{
 481        int ret;
 482
 483        mutex_lock(&rfcomm_ioctl_mutex);
 484        ret = __rfcomm_create_dev(sk, arg);
 485        mutex_unlock(&rfcomm_ioctl_mutex);
 486
 487        return ret;
 488}
 489
 490static int rfcomm_release_dev(void __user *arg)
 491{
 492        int ret;
 493
 494        mutex_lock(&rfcomm_ioctl_mutex);
 495        ret = __rfcomm_release_dev(arg);
 496        mutex_unlock(&rfcomm_ioctl_mutex);
 497
 498        return ret;
 499}
 500
 501static int rfcomm_get_dev_list(void __user *arg)
 502{
 503        struct rfcomm_dev *dev;
 504        struct rfcomm_dev_list_req *dl;
 505        struct rfcomm_dev_info *di;
 506        int n = 0, size, err;
 507        u16 dev_num;
 508
 509        BT_DBG("");
 510
 511        if (get_user(dev_num, (u16 __user *) arg))
 512                return -EFAULT;
 513
 514        if (!dev_num || dev_num > (PAGE_SIZE * 4) / sizeof(*di))
 515                return -EINVAL;
 516
 517        size = sizeof(*dl) + dev_num * sizeof(*di);
 518
 519        dl = kzalloc(size, GFP_KERNEL);
 520        if (!dl)
 521                return -ENOMEM;
 522
 523        di = dl->dev_info;
 524
 525        mutex_lock(&rfcomm_dev_lock);
 526
 527        list_for_each_entry(dev, &rfcomm_dev_list, list) {
 528                if (!tty_port_get(&dev->port))
 529                        continue;
 530                (di + n)->id      = dev->id;
 531                (di + n)->flags   = dev->flags;
 532                (di + n)->state   = dev->dlc->state;
 533                (di + n)->channel = dev->channel;
 534                bacpy(&(di + n)->src, &dev->src);
 535                bacpy(&(di + n)->dst, &dev->dst);
 536                tty_port_put(&dev->port);
 537                if (++n >= dev_num)
 538                        break;
 539        }
 540
 541        mutex_unlock(&rfcomm_dev_lock);
 542
 543        dl->dev_num = n;
 544        size = sizeof(*dl) + n * sizeof(*di);
 545
 546        err = copy_to_user(arg, dl, size);
 547        kfree(dl);
 548
 549        return err ? -EFAULT : 0;
 550}
 551
 552static int rfcomm_get_dev_info(void __user *arg)
 553{
 554        struct rfcomm_dev *dev;
 555        struct rfcomm_dev_info di;
 556        int err = 0;
 557
 558        BT_DBG("");
 559
 560        if (copy_from_user(&di, arg, sizeof(di)))
 561                return -EFAULT;
 562
 563        dev = rfcomm_dev_get(di.id);
 564        if (!dev)
 565                return -ENODEV;
 566
 567        di.flags   = dev->flags;
 568        di.channel = dev->channel;
 569        di.state   = dev->dlc->state;
 570        bacpy(&di.src, &dev->src);
 571        bacpy(&di.dst, &dev->dst);
 572
 573        if (copy_to_user(arg, &di, sizeof(di)))
 574                err = -EFAULT;
 575
 576        tty_port_put(&dev->port);
 577        return err;
 578}
 579
 580int rfcomm_dev_ioctl(struct sock *sk, unsigned int cmd, void __user *arg)
 581{
 582        BT_DBG("cmd %d arg %p", cmd, arg);
 583
 584        switch (cmd) {
 585        case RFCOMMCREATEDEV:
 586                return rfcomm_create_dev(sk, arg);
 587
 588        case RFCOMMRELEASEDEV:
 589                return rfcomm_release_dev(arg);
 590
 591        case RFCOMMGETDEVLIST:
 592                return rfcomm_get_dev_list(arg);
 593
 594        case RFCOMMGETDEVINFO:
 595                return rfcomm_get_dev_info(arg);
 596        }
 597
 598        return -EINVAL;
 599}
 600
 601/* ---- DLC callbacks ---- */
 602static void rfcomm_dev_data_ready(struct rfcomm_dlc *dlc, struct sk_buff *skb)
 603{
 604        struct rfcomm_dev *dev = dlc->owner;
 605
 606        if (!dev) {
 607                kfree_skb(skb);
 608                return;
 609        }
 610
 611        if (!skb_queue_empty(&dev->pending)) {
 612                skb_queue_tail(&dev->pending, skb);
 613                return;
 614        }
 615
 616        BT_DBG("dlc %p len %d", dlc, skb->len);
 617
 618        tty_insert_flip_string(&dev->port, skb->data, skb->len);
 619        tty_flip_buffer_push(&dev->port);
 620
 621        kfree_skb(skb);
 622}
 623
 624static void rfcomm_dev_state_change(struct rfcomm_dlc *dlc, int err)
 625{
 626        struct rfcomm_dev *dev = dlc->owner;
 627        if (!dev)
 628                return;
 629
 630        BT_DBG("dlc %p dev %p err %d", dlc, dev, err);
 631
 632        dev->err = err;
 633        if (dlc->state == BT_CONNECTED) {
 634                rfcomm_reparent_device(dev);
 635
 636                wake_up_interruptible(&dev->port.open_wait);
 637        } else if (dlc->state == BT_CLOSED)
 638                tty_port_tty_hangup(&dev->port, false);
 639}
 640
 641static void rfcomm_dev_modem_status(struct rfcomm_dlc *dlc, u8 v24_sig)
 642{
 643        struct rfcomm_dev *dev = dlc->owner;
 644        if (!dev)
 645                return;
 646
 647        BT_DBG("dlc %p dev %p v24_sig 0x%02x", dlc, dev, v24_sig);
 648
 649        if ((dev->modem_status & TIOCM_CD) && !(v24_sig & RFCOMM_V24_DV))
 650                tty_port_tty_hangup(&dev->port, true);
 651
 652        dev->modem_status =
 653                ((v24_sig & RFCOMM_V24_RTC) ? (TIOCM_DSR | TIOCM_DTR) : 0) |
 654                ((v24_sig & RFCOMM_V24_RTR) ? (TIOCM_RTS | TIOCM_CTS) : 0) |
 655                ((v24_sig & RFCOMM_V24_IC)  ? TIOCM_RI : 0) |
 656                ((v24_sig & RFCOMM_V24_DV)  ? TIOCM_CD : 0);
 657}
 658
 659/* ---- TTY functions ---- */
 660static void rfcomm_tty_copy_pending(struct rfcomm_dev *dev)
 661{
 662        struct sk_buff *skb;
 663        int inserted = 0;
 664
 665        BT_DBG("dev %p", dev);
 666
 667        rfcomm_dlc_lock(dev->dlc);
 668
 669        while ((skb = skb_dequeue(&dev->pending))) {
 670                inserted += tty_insert_flip_string(&dev->port, skb->data,
 671                                skb->len);
 672                kfree_skb(skb);
 673        }
 674
 675        rfcomm_dlc_unlock(dev->dlc);
 676
 677        if (inserted > 0)
 678                tty_flip_buffer_push(&dev->port);
 679}
 680
 681/* do the reverse of install, clearing the tty fields and releasing the
 682 * reference to tty_port
 683 */
 684static void rfcomm_tty_cleanup(struct tty_struct *tty)
 685{
 686        struct rfcomm_dev *dev = tty->driver_data;
 687
 688        clear_bit(RFCOMM_TTY_ATTACHED, &dev->flags);
 689
 690        rfcomm_dlc_lock(dev->dlc);
 691        tty->driver_data = NULL;
 692        rfcomm_dlc_unlock(dev->dlc);
 693
 694        /*
 695         * purge the dlc->tx_queue to avoid circular dependencies
 696         * between dev and dlc
 697         */
 698        skb_queue_purge(&dev->dlc->tx_queue);
 699
 700        tty_port_put(&dev->port);
 701}
 702
 703/* we acquire the tty_port reference since it's here the tty is first used
 704 * by setting the termios. We also populate the driver_data field and install
 705 * the tty port
 706 */
 707static int rfcomm_tty_install(struct tty_driver *driver, struct tty_struct *tty)
 708{
 709        struct rfcomm_dev *dev;
 710        struct rfcomm_dlc *dlc;
 711        int err;
 712
 713        dev = rfcomm_dev_get(tty->index);
 714        if (!dev)
 715                return -ENODEV;
 716
 717        dlc = dev->dlc;
 718
 719        /* Attach TTY and open DLC */
 720        rfcomm_dlc_lock(dlc);
 721        tty->driver_data = dev;
 722        rfcomm_dlc_unlock(dlc);
 723        set_bit(RFCOMM_TTY_ATTACHED, &dev->flags);
 724
 725        /* install the tty_port */
 726        err = tty_port_install(&dev->port, driver, tty);
 727        if (err) {
 728                rfcomm_tty_cleanup(tty);
 729                return err;
 730        }
 731
 732        /* take over the tty_port reference if the port was created with the
 733         * flag RFCOMM_RELEASE_ONHUP. This will force the release of the port
 734         * when the last process closes the tty. The behaviour is expected by
 735         * userspace.
 736         */
 737        if (test_bit(RFCOMM_RELEASE_ONHUP, &dev->flags)) {
 738                set_bit(RFCOMM_TTY_OWNED, &dev->status);
 739                tty_port_put(&dev->port);
 740        }
 741
 742        return 0;
 743}
 744
 745static int rfcomm_tty_open(struct tty_struct *tty, struct file *filp)
 746{
 747        struct rfcomm_dev *dev = tty->driver_data;
 748        int err;
 749
 750        BT_DBG("tty %p id %d", tty, tty->index);
 751
 752        BT_DBG("dev %p dst %pMR channel %d opened %d", dev, &dev->dst,
 753               dev->channel, dev->port.count);
 754
 755        err = tty_port_open(&dev->port, tty, filp);
 756        if (err)
 757                return err;
 758
 759        /*
 760         * FIXME: rfcomm should use proper flow control for
 761         * received data. This hack will be unnecessary and can
 762         * be removed when that's implemented
 763         */
 764        rfcomm_tty_copy_pending(dev);
 765
 766        rfcomm_dlc_unthrottle(dev->dlc);
 767
 768        return 0;
 769}
 770
 771static void rfcomm_tty_close(struct tty_struct *tty, struct file *filp)
 772{
 773        struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
 774
 775        BT_DBG("tty %p dev %p dlc %p opened %d", tty, dev, dev->dlc,
 776                                                dev->port.count);
 777
 778        tty_port_close(&dev->port, tty, filp);
 779}
 780
 781static int rfcomm_tty_write(struct tty_struct *tty, const unsigned char *buf, int count)
 782{
 783        struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
 784        struct rfcomm_dlc *dlc = dev->dlc;
 785        struct sk_buff *skb;
 786        int sent = 0, size;
 787
 788        BT_DBG("tty %p count %d", tty, count);
 789
 790        while (count) {
 791                size = min_t(uint, count, dlc->mtu);
 792
 793                skb = rfcomm_wmalloc(dev, size + RFCOMM_SKB_RESERVE, GFP_ATOMIC);
 794                if (!skb)
 795                        break;
 796
 797                skb_reserve(skb, RFCOMM_SKB_HEAD_RESERVE);
 798
 799                skb_put_data(skb, buf + sent, size);
 800
 801                rfcomm_dlc_send_noerror(dlc, skb);
 802
 803                sent  += size;
 804                count -= size;
 805        }
 806
 807        return sent;
 808}
 809
 810static int rfcomm_tty_write_room(struct tty_struct *tty)
 811{
 812        struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
 813        int room = 0;
 814
 815        if (dev && dev->dlc)
 816                room = rfcomm_room(dev);
 817
 818        BT_DBG("tty %p room %d", tty, room);
 819
 820        return room;
 821}
 822
 823static int rfcomm_tty_ioctl(struct tty_struct *tty, unsigned int cmd, unsigned long arg)
 824{
 825        BT_DBG("tty %p cmd 0x%02x", tty, cmd);
 826
 827        switch (cmd) {
 828        case TCGETS:
 829                BT_DBG("TCGETS is not supported");
 830                return -ENOIOCTLCMD;
 831
 832        case TCSETS:
 833                BT_DBG("TCSETS is not supported");
 834                return -ENOIOCTLCMD;
 835
 836        case TIOCMIWAIT:
 837                BT_DBG("TIOCMIWAIT");
 838                break;
 839
 840        case TIOCSERGETLSR:
 841                BT_ERR("TIOCSERGETLSR is not supported");
 842                return -ENOIOCTLCMD;
 843
 844        case TIOCSERCONFIG:
 845                BT_ERR("TIOCSERCONFIG is not supported");
 846                return -ENOIOCTLCMD;
 847
 848        default:
 849                return -ENOIOCTLCMD;    /* ioctls which we must ignore */
 850
 851        }
 852
 853        return -ENOIOCTLCMD;
 854}
 855
 856static void rfcomm_tty_set_termios(struct tty_struct *tty, struct ktermios *old)
 857{
 858        struct ktermios *new = &tty->termios;
 859        int old_baud_rate = tty_termios_baud_rate(old);
 860        int new_baud_rate = tty_termios_baud_rate(new);
 861
 862        u8 baud, data_bits, stop_bits, parity, x_on, x_off;
 863        u16 changes = 0;
 864
 865        struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
 866
 867        BT_DBG("tty %p termios %p", tty, old);
 868
 869        if (!dev || !dev->dlc || !dev->dlc->session)
 870                return;
 871
 872        /* Handle turning off CRTSCTS */
 873        if ((old->c_cflag & CRTSCTS) && !(new->c_cflag & CRTSCTS))
 874                BT_DBG("Turning off CRTSCTS unsupported");
 875
 876        /* Parity on/off and when on, odd/even */
 877        if (((old->c_cflag & PARENB) != (new->c_cflag & PARENB)) ||
 878                        ((old->c_cflag & PARODD) != (new->c_cflag & PARODD))) {
 879                changes |= RFCOMM_RPN_PM_PARITY;
 880                BT_DBG("Parity change detected.");
 881        }
 882
 883        /* Mark and space parity are not supported! */
 884        if (new->c_cflag & PARENB) {
 885                if (new->c_cflag & PARODD) {
 886                        BT_DBG("Parity is ODD");
 887                        parity = RFCOMM_RPN_PARITY_ODD;
 888                } else {
 889                        BT_DBG("Parity is EVEN");
 890                        parity = RFCOMM_RPN_PARITY_EVEN;
 891                }
 892        } else {
 893                BT_DBG("Parity is OFF");
 894                parity = RFCOMM_RPN_PARITY_NONE;
 895        }
 896
 897        /* Setting the x_on / x_off characters */
 898        if (old->c_cc[VSTOP] != new->c_cc[VSTOP]) {
 899                BT_DBG("XOFF custom");
 900                x_on = new->c_cc[VSTOP];
 901                changes |= RFCOMM_RPN_PM_XON;
 902        } else {
 903                BT_DBG("XOFF default");
 904                x_on = RFCOMM_RPN_XON_CHAR;
 905        }
 906
 907        if (old->c_cc[VSTART] != new->c_cc[VSTART]) {
 908                BT_DBG("XON custom");
 909                x_off = new->c_cc[VSTART];
 910                changes |= RFCOMM_RPN_PM_XOFF;
 911        } else {
 912                BT_DBG("XON default");
 913                x_off = RFCOMM_RPN_XOFF_CHAR;
 914        }
 915
 916        /* Handle setting of stop bits */
 917        if ((old->c_cflag & CSTOPB) != (new->c_cflag & CSTOPB))
 918                changes |= RFCOMM_RPN_PM_STOP;
 919
 920        /* POSIX does not support 1.5 stop bits and RFCOMM does not
 921         * support 2 stop bits. So a request for 2 stop bits gets
 922         * translated to 1.5 stop bits */
 923        if (new->c_cflag & CSTOPB)
 924                stop_bits = RFCOMM_RPN_STOP_15;
 925        else
 926                stop_bits = RFCOMM_RPN_STOP_1;
 927
 928        /* Handle number of data bits [5-8] */
 929        if ((old->c_cflag & CSIZE) != (new->c_cflag & CSIZE))
 930                changes |= RFCOMM_RPN_PM_DATA;
 931
 932        switch (new->c_cflag & CSIZE) {
 933        case CS5:
 934                data_bits = RFCOMM_RPN_DATA_5;
 935                break;
 936        case CS6:
 937                data_bits = RFCOMM_RPN_DATA_6;
 938                break;
 939        case CS7:
 940                data_bits = RFCOMM_RPN_DATA_7;
 941                break;
 942        case CS8:
 943                data_bits = RFCOMM_RPN_DATA_8;
 944                break;
 945        default:
 946                data_bits = RFCOMM_RPN_DATA_8;
 947                break;
 948        }
 949
 950        /* Handle baudrate settings */
 951        if (old_baud_rate != new_baud_rate)
 952                changes |= RFCOMM_RPN_PM_BITRATE;
 953
 954        switch (new_baud_rate) {
 955        case 2400:
 956                baud = RFCOMM_RPN_BR_2400;
 957                break;
 958        case 4800:
 959                baud = RFCOMM_RPN_BR_4800;
 960                break;
 961        case 7200:
 962                baud = RFCOMM_RPN_BR_7200;
 963                break;
 964        case 9600:
 965                baud = RFCOMM_RPN_BR_9600;
 966                break;
 967        case 19200:
 968                baud = RFCOMM_RPN_BR_19200;
 969                break;
 970        case 38400:
 971                baud = RFCOMM_RPN_BR_38400;
 972                break;
 973        case 57600:
 974                baud = RFCOMM_RPN_BR_57600;
 975                break;
 976        case 115200:
 977                baud = RFCOMM_RPN_BR_115200;
 978                break;
 979        case 230400:
 980                baud = RFCOMM_RPN_BR_230400;
 981                break;
 982        default:
 983                /* 9600 is standard accordinag to the RFCOMM specification */
 984                baud = RFCOMM_RPN_BR_9600;
 985                break;
 986
 987        }
 988
 989        if (changes)
 990                rfcomm_send_rpn(dev->dlc->session, 1, dev->dlc->dlci, baud,
 991                                data_bits, stop_bits, parity,
 992                                RFCOMM_RPN_FLOW_NONE, x_on, x_off, changes);
 993}
 994
 995static void rfcomm_tty_throttle(struct tty_struct *tty)
 996{
 997        struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
 998
 999        BT_DBG("tty %p dev %p", tty, dev);
1000
1001        rfcomm_dlc_throttle(dev->dlc);
1002}
1003
1004static void rfcomm_tty_unthrottle(struct tty_struct *tty)
1005{
1006        struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
1007
1008        BT_DBG("tty %p dev %p", tty, dev);
1009
1010        rfcomm_dlc_unthrottle(dev->dlc);
1011}
1012
1013static int rfcomm_tty_chars_in_buffer(struct tty_struct *tty)
1014{
1015        struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
1016
1017        BT_DBG("tty %p dev %p", tty, dev);
1018
1019        if (!dev || !dev->dlc)
1020                return 0;
1021
1022        if (!skb_queue_empty(&dev->dlc->tx_queue))
1023                return dev->dlc->mtu;
1024
1025        return 0;
1026}
1027
1028static void rfcomm_tty_flush_buffer(struct tty_struct *tty)
1029{
1030        struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
1031
1032        BT_DBG("tty %p dev %p", tty, dev);
1033
1034        if (!dev || !dev->dlc)
1035                return;
1036
1037        skb_queue_purge(&dev->dlc->tx_queue);
1038        tty_wakeup(tty);
1039}
1040
1041static void rfcomm_tty_send_xchar(struct tty_struct *tty, char ch)
1042{
1043        BT_DBG("tty %p ch %c", tty, ch);
1044}
1045
1046static void rfcomm_tty_wait_until_sent(struct tty_struct *tty, int timeout)
1047{
1048        BT_DBG("tty %p timeout %d", tty, timeout);
1049}
1050
1051static void rfcomm_tty_hangup(struct tty_struct *tty)
1052{
1053        struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
1054
1055        BT_DBG("tty %p dev %p", tty, dev);
1056
1057        tty_port_hangup(&dev->port);
1058}
1059
1060static int rfcomm_tty_tiocmget(struct tty_struct *tty)
1061{
1062        struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
1063
1064        BT_DBG("tty %p dev %p", tty, dev);
1065
1066        return dev->modem_status;
1067}
1068
1069static int rfcomm_tty_tiocmset(struct tty_struct *tty, unsigned int set, unsigned int clear)
1070{
1071        struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
1072        struct rfcomm_dlc *dlc = dev->dlc;
1073        u8 v24_sig;
1074
1075        BT_DBG("tty %p dev %p set 0x%02x clear 0x%02x", tty, dev, set, clear);
1076
1077        rfcomm_dlc_get_modem_status(dlc, &v24_sig);
1078
1079        if (set & TIOCM_DSR || set & TIOCM_DTR)
1080                v24_sig |= RFCOMM_V24_RTC;
1081        if (set & TIOCM_RTS || set & TIOCM_CTS)
1082                v24_sig |= RFCOMM_V24_RTR;
1083        if (set & TIOCM_RI)
1084                v24_sig |= RFCOMM_V24_IC;
1085        if (set & TIOCM_CD)
1086                v24_sig |= RFCOMM_V24_DV;
1087
1088        if (clear & TIOCM_DSR || clear & TIOCM_DTR)
1089                v24_sig &= ~RFCOMM_V24_RTC;
1090        if (clear & TIOCM_RTS || clear & TIOCM_CTS)
1091                v24_sig &= ~RFCOMM_V24_RTR;
1092        if (clear & TIOCM_RI)
1093                v24_sig &= ~RFCOMM_V24_IC;
1094        if (clear & TIOCM_CD)
1095                v24_sig &= ~RFCOMM_V24_DV;
1096
1097        rfcomm_dlc_set_modem_status(dlc, v24_sig);
1098
1099        return 0;
1100}
1101
1102/* ---- TTY structure ---- */
1103
1104static const struct tty_operations rfcomm_ops = {
1105        .open                   = rfcomm_tty_open,
1106        .close                  = rfcomm_tty_close,
1107        .write                  = rfcomm_tty_write,
1108        .write_room             = rfcomm_tty_write_room,
1109        .chars_in_buffer        = rfcomm_tty_chars_in_buffer,
1110        .flush_buffer           = rfcomm_tty_flush_buffer,
1111        .ioctl                  = rfcomm_tty_ioctl,
1112        .throttle               = rfcomm_tty_throttle,
1113        .unthrottle             = rfcomm_tty_unthrottle,
1114        .set_termios            = rfcomm_tty_set_termios,
1115        .send_xchar             = rfcomm_tty_send_xchar,
1116        .hangup                 = rfcomm_tty_hangup,
1117        .wait_until_sent        = rfcomm_tty_wait_until_sent,
1118        .tiocmget               = rfcomm_tty_tiocmget,
1119        .tiocmset               = rfcomm_tty_tiocmset,
1120        .install                = rfcomm_tty_install,
1121        .cleanup                = rfcomm_tty_cleanup,
1122};
1123
1124int __init rfcomm_init_ttys(void)
1125{
1126        int error;
1127
1128        rfcomm_tty_driver = alloc_tty_driver(RFCOMM_TTY_PORTS);
1129        if (!rfcomm_tty_driver)
1130                return -ENOMEM;
1131
1132        rfcomm_tty_driver->driver_name  = "rfcomm";
1133        rfcomm_tty_driver->name         = "rfcomm";
1134        rfcomm_tty_driver->major        = RFCOMM_TTY_MAJOR;
1135        rfcomm_tty_driver->minor_start  = RFCOMM_TTY_MINOR;
1136        rfcomm_tty_driver->type         = TTY_DRIVER_TYPE_SERIAL;
1137        rfcomm_tty_driver->subtype      = SERIAL_TYPE_NORMAL;
1138        rfcomm_tty_driver->flags        = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
1139        rfcomm_tty_driver->init_termios = tty_std_termios;
1140        rfcomm_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL;
1141        rfcomm_tty_driver->init_termios.c_lflag &= ~ICANON;
1142        tty_set_operations(rfcomm_tty_driver, &rfcomm_ops);
1143
1144        error = tty_register_driver(rfcomm_tty_driver);
1145        if (error) {
1146                BT_ERR("Can't register RFCOMM TTY driver");
1147                put_tty_driver(rfcomm_tty_driver);
1148                return error;
1149        }
1150
1151        BT_INFO("RFCOMM TTY layer initialized");
1152
1153        return 0;
1154}
1155
1156void rfcomm_cleanup_ttys(void)
1157{
1158        tty_unregister_driver(rfcomm_tty_driver);
1159        put_tty_driver(rfcomm_tty_driver);
1160}
1161