linux/drivers/bluetooth/hci_ldisc.c
<<
>>
Prefs
   1/*
   2 *
   3 *  Bluetooth HCI UART driver
   4 *
   5 *  Copyright (C) 2000-2001  Qualcomm Incorporated
   6 *  Copyright (C) 2002-2003  Maxim Krasnyansky <maxk@qualcomm.com>
   7 *  Copyright (C) 2004-2005  Marcel Holtmann <marcel@holtmann.org>
   8 *
   9 *
  10 *  This program is free software; you can redistribute it and/or modify
  11 *  it under the terms of the GNU General Public License as published by
  12 *  the Free Software Foundation; either version 2 of the License, or
  13 *  (at your option) any later version.
  14 *
  15 *  This program is distributed in the hope that it will be useful,
  16 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  17 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18 *  GNU General Public License for more details.
  19 *
  20 *  You should have received a copy of the GNU General Public License
  21 *  along with this program; if not, write to the Free Software
  22 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  23 *
  24 */
  25
  26#include <linux/module.h>
  27
  28#include <linux/kernel.h>
  29#include <linux/init.h>
  30#include <linux/types.h>
  31#include <linux/fcntl.h>
  32#include <linux/interrupt.h>
  33#include <linux/ptrace.h>
  34#include <linux/poll.h>
  35
  36#include <linux/slab.h>
  37#include <linux/tty.h>
  38#include <linux/errno.h>
  39#include <linux/string.h>
  40#include <linux/signal.h>
  41#include <linux/ioctl.h>
  42#include <linux/skbuff.h>
  43#include <linux/firmware.h>
  44#include <linux/serdev.h>
  45
  46#include <net/bluetooth/bluetooth.h>
  47#include <net/bluetooth/hci_core.h>
  48
  49#include "btintel.h"
  50#include "btbcm.h"
  51#include "hci_uart.h"
  52
  53#define VERSION "2.3"
  54
  55static const struct hci_uart_proto *hup[HCI_UART_MAX_PROTO];
  56
  57int hci_uart_register_proto(const struct hci_uart_proto *p)
  58{
  59        if (p->id >= HCI_UART_MAX_PROTO)
  60                return -EINVAL;
  61
  62        if (hup[p->id])
  63                return -EEXIST;
  64
  65        hup[p->id] = p;
  66
  67        BT_INFO("HCI UART protocol %s registered", p->name);
  68
  69        return 0;
  70}
  71
  72int hci_uart_unregister_proto(const struct hci_uart_proto *p)
  73{
  74        if (p->id >= HCI_UART_MAX_PROTO)
  75                return -EINVAL;
  76
  77        if (!hup[p->id])
  78                return -EINVAL;
  79
  80        hup[p->id] = NULL;
  81
  82        return 0;
  83}
  84
  85static const struct hci_uart_proto *hci_uart_get_proto(unsigned int id)
  86{
  87        if (id >= HCI_UART_MAX_PROTO)
  88                return NULL;
  89
  90        return hup[id];
  91}
  92
  93static inline void hci_uart_tx_complete(struct hci_uart *hu, int pkt_type)
  94{
  95        struct hci_dev *hdev = hu->hdev;
  96
  97        /* Update HCI stat counters */
  98        switch (pkt_type) {
  99        case HCI_COMMAND_PKT:
 100                hdev->stat.cmd_tx++;
 101                break;
 102
 103        case HCI_ACLDATA_PKT:
 104                hdev->stat.acl_tx++;
 105                break;
 106
 107        case HCI_SCODATA_PKT:
 108                hdev->stat.sco_tx++;
 109                break;
 110        }
 111}
 112
 113static inline struct sk_buff *hci_uart_dequeue(struct hci_uart *hu)
 114{
 115        struct sk_buff *skb = hu->tx_skb;
 116
 117        if (!skb) {
 118                percpu_down_read(&hu->proto_lock);
 119
 120                if (test_bit(HCI_UART_PROTO_READY, &hu->flags))
 121                        skb = hu->proto->dequeue(hu);
 122
 123                percpu_up_read(&hu->proto_lock);
 124        } else {
 125                hu->tx_skb = NULL;
 126        }
 127
 128        return skb;
 129}
 130
 131int hci_uart_tx_wakeup(struct hci_uart *hu)
 132{
 133        /* This may be called in an IRQ context, so we can't sleep. Therefore
 134         * we try to acquire the lock only, and if that fails we assume the
 135         * tty is being closed because that is the only time the write lock is
 136         * acquired. If, however, at some point in the future the write lock
 137         * is also acquired in other situations, then this must be revisited.
 138         */
 139        if (!percpu_down_read_trylock(&hu->proto_lock))
 140                return 0;
 141
 142        if (!test_bit(HCI_UART_PROTO_READY, &hu->flags))
 143                goto no_schedule;
 144
 145        if (test_and_set_bit(HCI_UART_SENDING, &hu->tx_state)) {
 146                set_bit(HCI_UART_TX_WAKEUP, &hu->tx_state);
 147                goto no_schedule;
 148        }
 149
 150        BT_DBG("");
 151
 152        schedule_work(&hu->write_work);
 153
 154no_schedule:
 155        percpu_up_read(&hu->proto_lock);
 156
 157        return 0;
 158}
 159EXPORT_SYMBOL_GPL(hci_uart_tx_wakeup);
 160
 161static void hci_uart_write_work(struct work_struct *work)
 162{
 163        struct hci_uart *hu = container_of(work, struct hci_uart, write_work);
 164        struct tty_struct *tty = hu->tty;
 165        struct hci_dev *hdev = hu->hdev;
 166        struct sk_buff *skb;
 167
 168        /* REVISIT: should we cope with bad skbs or ->write() returning
 169         * and error value ?
 170         */
 171
 172restart:
 173        clear_bit(HCI_UART_TX_WAKEUP, &hu->tx_state);
 174
 175        while ((skb = hci_uart_dequeue(hu))) {
 176                int len;
 177
 178                set_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
 179                len = tty->ops->write(tty, skb->data, skb->len);
 180                hdev->stat.byte_tx += len;
 181
 182                skb_pull(skb, len);
 183                if (skb->len) {
 184                        hu->tx_skb = skb;
 185                        break;
 186                }
 187
 188                hci_uart_tx_complete(hu, hci_skb_pkt_type(skb));
 189                kfree_skb(skb);
 190        }
 191
 192        if (test_bit(HCI_UART_TX_WAKEUP, &hu->tx_state))
 193                goto restart;
 194
 195        clear_bit(HCI_UART_SENDING, &hu->tx_state);
 196}
 197
 198static void hci_uart_init_work(struct work_struct *work)
 199{
 200        struct hci_uart *hu = container_of(work, struct hci_uart, init_ready);
 201        int err;
 202        struct hci_dev *hdev;
 203
 204        if (!test_and_clear_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags))
 205                return;
 206
 207        err = hci_register_dev(hu->hdev);
 208        if (err < 0) {
 209                BT_ERR("Can't register HCI device");
 210                hdev = hu->hdev;
 211                hu->hdev = NULL;
 212                hci_free_dev(hdev);
 213                clear_bit(HCI_UART_PROTO_READY, &hu->flags);
 214                hu->proto->close(hu);
 215                return;
 216        }
 217
 218        set_bit(HCI_UART_REGISTERED, &hu->flags);
 219}
 220
 221int hci_uart_init_ready(struct hci_uart *hu)
 222{
 223        if (!test_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags))
 224                return -EALREADY;
 225
 226        schedule_work(&hu->init_ready);
 227
 228        return 0;
 229}
 230
 231/* ------- Interface to HCI layer ------ */
 232/* Initialize device */
 233static int hci_uart_open(struct hci_dev *hdev)
 234{
 235        BT_DBG("%s %p", hdev->name, hdev);
 236
 237        /* Nothing to do for UART driver */
 238        return 0;
 239}
 240
 241/* Reset device */
 242static int hci_uart_flush(struct hci_dev *hdev)
 243{
 244        struct hci_uart *hu  = hci_get_drvdata(hdev);
 245        struct tty_struct *tty = hu->tty;
 246
 247        BT_DBG("hdev %p tty %p", hdev, tty);
 248
 249        if (hu->tx_skb) {
 250                kfree_skb(hu->tx_skb); hu->tx_skb = NULL;
 251        }
 252
 253        /* Flush any pending characters in the driver and discipline. */
 254        tty_ldisc_flush(tty);
 255        tty_driver_flush_buffer(tty);
 256
 257        percpu_down_read(&hu->proto_lock);
 258
 259        if (test_bit(HCI_UART_PROTO_READY, &hu->flags))
 260                hu->proto->flush(hu);
 261
 262        percpu_up_read(&hu->proto_lock);
 263
 264        return 0;
 265}
 266
 267/* Close device */
 268static int hci_uart_close(struct hci_dev *hdev)
 269{
 270        BT_DBG("hdev %p", hdev);
 271
 272        hci_uart_flush(hdev);
 273        hdev->flush = NULL;
 274        return 0;
 275}
 276
 277/* Send frames from HCI layer */
 278static int hci_uart_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
 279{
 280        struct hci_uart *hu = hci_get_drvdata(hdev);
 281
 282        BT_DBG("%s: type %d len %d", hdev->name, hci_skb_pkt_type(skb),
 283               skb->len);
 284
 285        percpu_down_read(&hu->proto_lock);
 286
 287        if (!test_bit(HCI_UART_PROTO_READY, &hu->flags)) {
 288                percpu_up_read(&hu->proto_lock);
 289                return -EUNATCH;
 290        }
 291
 292        hu->proto->enqueue(hu, skb);
 293        percpu_up_read(&hu->proto_lock);
 294
 295        hci_uart_tx_wakeup(hu);
 296
 297        return 0;
 298}
 299
 300/* Flow control or un-flow control the device */
 301void hci_uart_set_flow_control(struct hci_uart *hu, bool enable)
 302{
 303        struct tty_struct *tty = hu->tty;
 304        struct ktermios ktermios;
 305        int status;
 306        unsigned int set = 0;
 307        unsigned int clear = 0;
 308
 309        if (hu->serdev) {
 310                serdev_device_set_flow_control(hu->serdev, !enable);
 311                serdev_device_set_rts(hu->serdev, !enable);
 312                return;
 313        }
 314
 315        if (enable) {
 316                /* Disable hardware flow control */
 317                ktermios = tty->termios;
 318                ktermios.c_cflag &= ~CRTSCTS;
 319                status = tty_set_termios(tty, &ktermios);
 320                BT_DBG("Disabling hardware flow control: %s",
 321                       status ? "failed" : "success");
 322
 323                /* Clear RTS to prevent the device from sending */
 324                /* Most UARTs need OUT2 to enable interrupts */
 325                status = tty->driver->ops->tiocmget(tty);
 326                BT_DBG("Current tiocm 0x%x", status);
 327
 328                set &= ~(TIOCM_OUT2 | TIOCM_RTS);
 329                clear = ~set;
 330                set &= TIOCM_DTR | TIOCM_RTS | TIOCM_OUT1 |
 331                       TIOCM_OUT2 | TIOCM_LOOP;
 332                clear &= TIOCM_DTR | TIOCM_RTS | TIOCM_OUT1 |
 333                         TIOCM_OUT2 | TIOCM_LOOP;
 334                status = tty->driver->ops->tiocmset(tty, set, clear);
 335                BT_DBG("Clearing RTS: %s", status ? "failed" : "success");
 336        } else {
 337                /* Set RTS to allow the device to send again */
 338                status = tty->driver->ops->tiocmget(tty);
 339                BT_DBG("Current tiocm 0x%x", status);
 340
 341                set |= (TIOCM_OUT2 | TIOCM_RTS);
 342                clear = ~set;
 343                set &= TIOCM_DTR | TIOCM_RTS | TIOCM_OUT1 |
 344                       TIOCM_OUT2 | TIOCM_LOOP;
 345                clear &= TIOCM_DTR | TIOCM_RTS | TIOCM_OUT1 |
 346                         TIOCM_OUT2 | TIOCM_LOOP;
 347                status = tty->driver->ops->tiocmset(tty, set, clear);
 348                BT_DBG("Setting RTS: %s", status ? "failed" : "success");
 349
 350                /* Re-enable hardware flow control */
 351                ktermios = tty->termios;
 352                ktermios.c_cflag |= CRTSCTS;
 353                status = tty_set_termios(tty, &ktermios);
 354                BT_DBG("Enabling hardware flow control: %s",
 355                       status ? "failed" : "success");
 356        }
 357}
 358
 359void hci_uart_set_speeds(struct hci_uart *hu, unsigned int init_speed,
 360                         unsigned int oper_speed)
 361{
 362        hu->init_speed = init_speed;
 363        hu->oper_speed = oper_speed;
 364}
 365
 366void hci_uart_set_baudrate(struct hci_uart *hu, unsigned int speed)
 367{
 368        struct tty_struct *tty = hu->tty;
 369        struct ktermios ktermios;
 370
 371        ktermios = tty->termios;
 372        ktermios.c_cflag &= ~CBAUD;
 373        tty_termios_encode_baud_rate(&ktermios, speed, speed);
 374
 375        /* tty_set_termios() return not checked as it is always 0 */
 376        tty_set_termios(tty, &ktermios);
 377
 378        BT_DBG("%s: New tty speeds: %d/%d", hu->hdev->name,
 379               tty->termios.c_ispeed, tty->termios.c_ospeed);
 380}
 381
 382static int hci_uart_setup(struct hci_dev *hdev)
 383{
 384        struct hci_uart *hu = hci_get_drvdata(hdev);
 385        struct hci_rp_read_local_version *ver;
 386        struct sk_buff *skb;
 387        unsigned int speed;
 388        int err;
 389
 390        /* Init speed if any */
 391        if (hu->init_speed)
 392                speed = hu->init_speed;
 393        else if (hu->proto->init_speed)
 394                speed = hu->proto->init_speed;
 395        else
 396                speed = 0;
 397
 398        if (speed)
 399                hci_uart_set_baudrate(hu, speed);
 400
 401        /* Operational speed if any */
 402        if (hu->oper_speed)
 403                speed = hu->oper_speed;
 404        else if (hu->proto->oper_speed)
 405                speed = hu->proto->oper_speed;
 406        else
 407                speed = 0;
 408
 409        if (hu->proto->set_baudrate && speed) {
 410                err = hu->proto->set_baudrate(hu, speed);
 411                if (!err)
 412                        hci_uart_set_baudrate(hu, speed);
 413        }
 414
 415        if (hu->proto->setup)
 416                return hu->proto->setup(hu);
 417
 418        if (!test_bit(HCI_UART_VND_DETECT, &hu->hdev_flags))
 419                return 0;
 420
 421        skb = __hci_cmd_sync(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL,
 422                             HCI_INIT_TIMEOUT);
 423        if (IS_ERR(skb)) {
 424                BT_ERR("%s: Reading local version information failed (%ld)",
 425                       hdev->name, PTR_ERR(skb));
 426                return 0;
 427        }
 428
 429        if (skb->len != sizeof(*ver)) {
 430                BT_ERR("%s: Event length mismatch for version information",
 431                       hdev->name);
 432                goto done;
 433        }
 434
 435        ver = (struct hci_rp_read_local_version *)skb->data;
 436
 437        switch (le16_to_cpu(ver->manufacturer)) {
 438#ifdef CONFIG_BT_HCIUART_INTEL
 439        case 2:
 440                hdev->set_bdaddr = btintel_set_bdaddr;
 441                btintel_check_bdaddr(hdev);
 442                break;
 443#endif
 444#ifdef CONFIG_BT_HCIUART_BCM
 445        case 15:
 446                hdev->set_bdaddr = btbcm_set_bdaddr;
 447                btbcm_check_bdaddr(hdev);
 448                break;
 449#endif
 450        }
 451
 452done:
 453        kfree_skb(skb);
 454        return 0;
 455}
 456
 457/* ------ LDISC part ------ */
 458/* hci_uart_tty_open
 459 *
 460 *     Called when line discipline changed to HCI_UART.
 461 *
 462 * Arguments:
 463 *     tty    pointer to tty info structure
 464 * Return Value:
 465 *     0 if success, otherwise error code
 466 */
 467static int hci_uart_tty_open(struct tty_struct *tty)
 468{
 469        struct hci_uart *hu;
 470
 471        BT_DBG("tty %p", tty);
 472
 473        /* Error if the tty has no write op instead of leaving an exploitable
 474         * hole
 475         */
 476        if (tty->ops->write == NULL)
 477                return -EOPNOTSUPP;
 478
 479        hu = kzalloc(sizeof(struct hci_uart), GFP_KERNEL);
 480        if (!hu) {
 481                BT_ERR("Can't allocate control structure");
 482                return -ENFILE;
 483        }
 484
 485        tty->disc_data = hu;
 486        hu->tty = tty;
 487        tty->receive_room = 65536;
 488
 489        /* disable alignment support by default */
 490        hu->alignment = 1;
 491        hu->padding = 0;
 492
 493        INIT_WORK(&hu->init_ready, hci_uart_init_work);
 494        INIT_WORK(&hu->write_work, hci_uart_write_work);
 495
 496        percpu_init_rwsem(&hu->proto_lock);
 497
 498        /* Flush any pending characters in the driver */
 499        tty_driver_flush_buffer(tty);
 500
 501        return 0;
 502}
 503
 504/* hci_uart_tty_close()
 505 *
 506 *    Called when the line discipline is changed to something
 507 *    else, the tty is closed, or the tty detects a hangup.
 508 */
 509static void hci_uart_tty_close(struct tty_struct *tty)
 510{
 511        struct hci_uart *hu = tty->disc_data;
 512        struct hci_dev *hdev;
 513
 514        BT_DBG("tty %p", tty);
 515
 516        /* Detach from the tty */
 517        tty->disc_data = NULL;
 518
 519        if (!hu)
 520                return;
 521
 522        hdev = hu->hdev;
 523        if (hdev)
 524                hci_uart_close(hdev);
 525
 526        if (test_bit(HCI_UART_PROTO_READY, &hu->flags)) {
 527                percpu_down_write(&hu->proto_lock);
 528                clear_bit(HCI_UART_PROTO_READY, &hu->flags);
 529                percpu_up_write(&hu->proto_lock);
 530
 531                cancel_work_sync(&hu->write_work);
 532
 533                if (hdev) {
 534                        if (test_bit(HCI_UART_REGISTERED, &hu->flags))
 535                                hci_unregister_dev(hdev);
 536                        hci_free_dev(hdev);
 537                }
 538                hu->proto->close(hu);
 539        }
 540        clear_bit(HCI_UART_PROTO_SET, &hu->flags);
 541
 542        kfree(hu);
 543}
 544
 545/* hci_uart_tty_wakeup()
 546 *
 547 *    Callback for transmit wakeup. Called when low level
 548 *    device driver can accept more send data.
 549 *
 550 * Arguments:        tty    pointer to associated tty instance data
 551 * Return Value:    None
 552 */
 553static void hci_uart_tty_wakeup(struct tty_struct *tty)
 554{
 555        struct hci_uart *hu = tty->disc_data;
 556
 557        BT_DBG("");
 558
 559        if (!hu)
 560                return;
 561
 562        clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
 563
 564        if (tty != hu->tty)
 565                return;
 566
 567        if (test_bit(HCI_UART_PROTO_READY, &hu->flags))
 568                hci_uart_tx_wakeup(hu);
 569}
 570
 571/* hci_uart_tty_receive()
 572 *
 573 *     Called by tty low level driver when receive data is
 574 *     available.
 575 *
 576 * Arguments:  tty          pointer to tty isntance data
 577 *             data         pointer to received data
 578 *             flags        pointer to flags for data
 579 *             count        count of received data in bytes
 580 *
 581 * Return Value:    None
 582 */
 583static void hci_uart_tty_receive(struct tty_struct *tty, const u8 *data,
 584                                 char *flags, int count)
 585{
 586        struct hci_uart *hu = tty->disc_data;
 587
 588        if (!hu || tty != hu->tty)
 589                return;
 590
 591        percpu_down_read(&hu->proto_lock);
 592
 593        if (!test_bit(HCI_UART_PROTO_READY, &hu->flags)) {
 594                percpu_up_read(&hu->proto_lock);
 595                return;
 596        }
 597
 598        /* It does not need a lock here as it is already protected by a mutex in
 599         * tty caller
 600         */
 601        hu->proto->recv(hu, data, count);
 602        percpu_up_read(&hu->proto_lock);
 603
 604        if (hu->hdev)
 605                hu->hdev->stat.byte_rx += count;
 606
 607        tty_unthrottle(tty);
 608}
 609
 610static int hci_uart_register_dev(struct hci_uart *hu)
 611{
 612        struct hci_dev *hdev;
 613
 614        BT_DBG("");
 615
 616        /* Initialize and register HCI device */
 617        hdev = hci_alloc_dev();
 618        if (!hdev) {
 619                BT_ERR("Can't allocate HCI device");
 620                return -ENOMEM;
 621        }
 622
 623        hu->hdev = hdev;
 624
 625        hdev->bus = HCI_UART;
 626        hci_set_drvdata(hdev, hu);
 627
 628        /* Only when vendor specific setup callback is provided, consider
 629         * the manufacturer information valid. This avoids filling in the
 630         * value for Ericsson when nothing is specified.
 631         */
 632        if (hu->proto->setup)
 633                hdev->manufacturer = hu->proto->manufacturer;
 634
 635        hdev->open  = hci_uart_open;
 636        hdev->close = hci_uart_close;
 637        hdev->flush = hci_uart_flush;
 638        hdev->send  = hci_uart_send_frame;
 639        hdev->setup = hci_uart_setup;
 640        SET_HCIDEV_DEV(hdev, hu->tty->dev);
 641
 642        if (test_bit(HCI_UART_RAW_DEVICE, &hu->hdev_flags))
 643                set_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks);
 644
 645        if (test_bit(HCI_UART_EXT_CONFIG, &hu->hdev_flags))
 646                set_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks);
 647
 648        if (!test_bit(HCI_UART_RESET_ON_INIT, &hu->hdev_flags))
 649                set_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks);
 650
 651        if (test_bit(HCI_UART_CREATE_AMP, &hu->hdev_flags))
 652                hdev->dev_type = HCI_AMP;
 653        else
 654                hdev->dev_type = HCI_PRIMARY;
 655
 656        if (test_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags))
 657                return 0;
 658
 659        if (hci_register_dev(hdev) < 0) {
 660                BT_ERR("Can't register HCI device");
 661                hu->hdev = NULL;
 662                hci_free_dev(hdev);
 663                return -ENODEV;
 664        }
 665
 666        set_bit(HCI_UART_REGISTERED, &hu->flags);
 667
 668        return 0;
 669}
 670
 671static int hci_uart_set_proto(struct hci_uart *hu, int id)
 672{
 673        const struct hci_uart_proto *p;
 674        int err;
 675
 676        p = hci_uart_get_proto(id);
 677        if (!p)
 678                return -EPROTONOSUPPORT;
 679
 680        err = p->open(hu);
 681        if (err)
 682                return err;
 683
 684        hu->proto = p;
 685        set_bit(HCI_UART_PROTO_READY, &hu->flags);
 686
 687        err = hci_uart_register_dev(hu);
 688        if (err) {
 689                clear_bit(HCI_UART_PROTO_READY, &hu->flags);
 690                p->close(hu);
 691                return err;
 692        }
 693
 694        return 0;
 695}
 696
 697static int hci_uart_set_flags(struct hci_uart *hu, unsigned long flags)
 698{
 699        unsigned long valid_flags = BIT(HCI_UART_RAW_DEVICE) |
 700                                    BIT(HCI_UART_RESET_ON_INIT) |
 701                                    BIT(HCI_UART_CREATE_AMP) |
 702                                    BIT(HCI_UART_INIT_PENDING) |
 703                                    BIT(HCI_UART_EXT_CONFIG) |
 704                                    BIT(HCI_UART_VND_DETECT);
 705
 706        if (flags & ~valid_flags)
 707                return -EINVAL;
 708
 709        hu->hdev_flags = flags;
 710
 711        return 0;
 712}
 713
 714/* hci_uart_tty_ioctl()
 715 *
 716 *    Process IOCTL system call for the tty device.
 717 *
 718 * Arguments:
 719 *
 720 *    tty        pointer to tty instance data
 721 *    file       pointer to open file object for device
 722 *    cmd        IOCTL command code
 723 *    arg        argument for IOCTL call (cmd dependent)
 724 *
 725 * Return Value:    Command dependent
 726 */
 727static int hci_uart_tty_ioctl(struct tty_struct *tty, struct file *file,
 728                              unsigned int cmd, unsigned long arg)
 729{
 730        struct hci_uart *hu = tty->disc_data;
 731        int err = 0;
 732
 733        BT_DBG("");
 734
 735        /* Verify the status of the device */
 736        if (!hu)
 737                return -EBADF;
 738
 739        switch (cmd) {
 740        case HCIUARTSETPROTO:
 741                if (!test_and_set_bit(HCI_UART_PROTO_SET, &hu->flags)) {
 742                        err = hci_uart_set_proto(hu, arg);
 743                        if (err)
 744                                clear_bit(HCI_UART_PROTO_SET, &hu->flags);
 745                } else
 746                        err = -EBUSY;
 747                break;
 748
 749        case HCIUARTGETPROTO:
 750                if (test_bit(HCI_UART_PROTO_SET, &hu->flags))
 751                        err = hu->proto->id;
 752                else
 753                        err = -EUNATCH;
 754                break;
 755
 756        case HCIUARTGETDEVICE:
 757                if (test_bit(HCI_UART_REGISTERED, &hu->flags))
 758                        err = hu->hdev->id;
 759                else
 760                        err = -EUNATCH;
 761                break;
 762
 763        case HCIUARTSETFLAGS:
 764                if (test_bit(HCI_UART_PROTO_SET, &hu->flags))
 765                        err = -EBUSY;
 766                else
 767                        err = hci_uart_set_flags(hu, arg);
 768                break;
 769
 770        case HCIUARTGETFLAGS:
 771                err = hu->hdev_flags;
 772                break;
 773
 774        default:
 775                err = n_tty_ioctl_helper(tty, file, cmd, arg);
 776                break;
 777        }
 778
 779        return err;
 780}
 781
 782/*
 783 * We don't provide read/write/poll interface for user space.
 784 */
 785static ssize_t hci_uart_tty_read(struct tty_struct *tty, struct file *file,
 786                                 unsigned char __user *buf, size_t nr)
 787{
 788        return 0;
 789}
 790
 791static ssize_t hci_uart_tty_write(struct tty_struct *tty, struct file *file,
 792                                  const unsigned char *data, size_t count)
 793{
 794        return 0;
 795}
 796
 797static unsigned int hci_uart_tty_poll(struct tty_struct *tty,
 798                                      struct file *filp, poll_table *wait)
 799{
 800        return 0;
 801}
 802
 803static int __init hci_uart_init(void)
 804{
 805        static struct tty_ldisc_ops hci_uart_ldisc;
 806        int err;
 807
 808        BT_INFO("HCI UART driver ver %s", VERSION);
 809
 810        /* Register the tty discipline */
 811
 812        memset(&hci_uart_ldisc, 0, sizeof(hci_uart_ldisc));
 813        hci_uart_ldisc.magic            = TTY_LDISC_MAGIC;
 814        hci_uart_ldisc.name             = "n_hci";
 815        hci_uart_ldisc.open             = hci_uart_tty_open;
 816        hci_uart_ldisc.close            = hci_uart_tty_close;
 817        hci_uart_ldisc.read             = hci_uart_tty_read;
 818        hci_uart_ldisc.write            = hci_uart_tty_write;
 819        hci_uart_ldisc.ioctl            = hci_uart_tty_ioctl;
 820        hci_uart_ldisc.poll             = hci_uart_tty_poll;
 821        hci_uart_ldisc.receive_buf      = hci_uart_tty_receive;
 822        hci_uart_ldisc.write_wakeup     = hci_uart_tty_wakeup;
 823        hci_uart_ldisc.owner            = THIS_MODULE;
 824
 825        err = tty_register_ldisc(N_HCI, &hci_uart_ldisc);
 826        if (err) {
 827                BT_ERR("HCI line discipline registration failed. (%d)", err);
 828                return err;
 829        }
 830
 831#ifdef CONFIG_BT_HCIUART_H4
 832        h4_init();
 833#endif
 834#ifdef CONFIG_BT_HCIUART_BCSP
 835        bcsp_init();
 836#endif
 837#ifdef CONFIG_BT_HCIUART_LL
 838        ll_init();
 839#endif
 840#ifdef CONFIG_BT_HCIUART_ATH3K
 841        ath_init();
 842#endif
 843#ifdef CONFIG_BT_HCIUART_3WIRE
 844        h5_init();
 845#endif
 846#ifdef CONFIG_BT_HCIUART_INTEL
 847        intel_init();
 848#endif
 849#ifdef CONFIG_BT_HCIUART_BCM
 850        bcm_init();
 851#endif
 852#ifdef CONFIG_BT_HCIUART_QCA
 853        qca_init();
 854#endif
 855#ifdef CONFIG_BT_HCIUART_AG6XX
 856        ag6xx_init();
 857#endif
 858#ifdef CONFIG_BT_HCIUART_MRVL
 859        mrvl_init();
 860#endif
 861
 862        return 0;
 863}
 864
 865static void __exit hci_uart_exit(void)
 866{
 867        int err;
 868
 869#ifdef CONFIG_BT_HCIUART_H4
 870        h4_deinit();
 871#endif
 872#ifdef CONFIG_BT_HCIUART_BCSP
 873        bcsp_deinit();
 874#endif
 875#ifdef CONFIG_BT_HCIUART_LL
 876        ll_deinit();
 877#endif
 878#ifdef CONFIG_BT_HCIUART_ATH3K
 879        ath_deinit();
 880#endif
 881#ifdef CONFIG_BT_HCIUART_3WIRE
 882        h5_deinit();
 883#endif
 884#ifdef CONFIG_BT_HCIUART_INTEL
 885        intel_deinit();
 886#endif
 887#ifdef CONFIG_BT_HCIUART_BCM
 888        bcm_deinit();
 889#endif
 890#ifdef CONFIG_BT_HCIUART_QCA
 891        qca_deinit();
 892#endif
 893#ifdef CONFIG_BT_HCIUART_AG6XX
 894        ag6xx_deinit();
 895#endif
 896#ifdef CONFIG_BT_HCIUART_MRVL
 897        mrvl_deinit();
 898#endif
 899
 900        /* Release tty registration of line discipline */
 901        err = tty_unregister_ldisc(N_HCI);
 902        if (err)
 903                BT_ERR("Can't unregister HCI line discipline (%d)", err);
 904}
 905
 906module_init(hci_uart_init);
 907module_exit(hci_uart_exit);
 908
 909MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
 910MODULE_DESCRIPTION("Bluetooth HCI UART driver ver " VERSION);
 911MODULE_VERSION(VERSION);
 912MODULE_LICENSE("GPL");
 913MODULE_ALIAS_LDISC(N_HCI);
 914