root/drivers/bluetooth/hci_ldisc.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. hci_uart_register_proto
  2. hci_uart_unregister_proto
  3. hci_uart_get_proto
  4. hci_uart_tx_complete
  5. hci_uart_dequeue
  6. hci_uart_tx_wakeup
  7. hci_uart_write_work
  8. hci_uart_init_work
  9. hci_uart_init_ready
  10. hci_uart_wait_until_sent
  11. hci_uart_flush
  12. hci_uart_open
  13. hci_uart_close
  14. hci_uart_send_frame
  15. hci_uart_has_flow_control
  16. hci_uart_set_flow_control
  17. hci_uart_set_speeds
  18. hci_uart_set_baudrate
  19. hci_uart_setup
  20. hci_uart_tty_open
  21. hci_uart_tty_close
  22. hci_uart_tty_wakeup
  23. hci_uart_tty_receive
  24. hci_uart_register_dev
  25. hci_uart_set_proto
  26. hci_uart_set_flags
  27. hci_uart_tty_ioctl
  28. hci_uart_tty_read
  29. hci_uart_tty_write
  30. hci_uart_tty_poll
  31. hci_uart_init
  32. hci_uart_exit

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

/* [<][>][^][v][top][bottom][index][help] */