Merge tag 'for-linus-20190706' of git://git.kernel.dk/linux-block
[linux/fpc-iii.git] / drivers / bluetooth / hci_ldisc.c
blobc84f985f348dcb5baae982f362d46de070860ac1
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
4 * Bluetooth HCI UART driver
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 */
11 #include <linux/module.h>
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>
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>
31 #include <net/bluetooth/bluetooth.h>
32 #include <net/bluetooth/hci_core.h>
34 #include "btintel.h"
35 #include "btbcm.h"
36 #include "hci_uart.h"
38 #define VERSION "2.3"
40 static const struct hci_uart_proto *hup[HCI_UART_MAX_PROTO];
42 int hci_uart_register_proto(const struct hci_uart_proto *p)
44 if (p->id >= HCI_UART_MAX_PROTO)
45 return -EINVAL;
47 if (hup[p->id])
48 return -EEXIST;
50 hup[p->id] = p;
52 BT_INFO("HCI UART protocol %s registered", p->name);
54 return 0;
57 int hci_uart_unregister_proto(const struct hci_uart_proto *p)
59 if (p->id >= HCI_UART_MAX_PROTO)
60 return -EINVAL;
62 if (!hup[p->id])
63 return -EINVAL;
65 hup[p->id] = NULL;
67 return 0;
70 static const struct hci_uart_proto *hci_uart_get_proto(unsigned int id)
72 if (id >= HCI_UART_MAX_PROTO)
73 return NULL;
75 return hup[id];
78 static inline void hci_uart_tx_complete(struct hci_uart *hu, int pkt_type)
80 struct hci_dev *hdev = hu->hdev;
82 /* Update HCI stat counters */
83 switch (pkt_type) {
84 case HCI_COMMAND_PKT:
85 hdev->stat.cmd_tx++;
86 break;
88 case HCI_ACLDATA_PKT:
89 hdev->stat.acl_tx++;
90 break;
92 case HCI_SCODATA_PKT:
93 hdev->stat.sco_tx++;
94 break;
98 static inline struct sk_buff *hci_uart_dequeue(struct hci_uart *hu)
100 struct sk_buff *skb = hu->tx_skb;
102 if (!skb) {
103 percpu_down_read(&hu->proto_lock);
105 if (test_bit(HCI_UART_PROTO_READY, &hu->flags))
106 skb = hu->proto->dequeue(hu);
108 percpu_up_read(&hu->proto_lock);
109 } else {
110 hu->tx_skb = NULL;
113 return skb;
116 int hci_uart_tx_wakeup(struct hci_uart *hu)
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.
124 if (!percpu_down_read_trylock(&hu->proto_lock))
125 return 0;
127 if (!test_bit(HCI_UART_PROTO_READY, &hu->flags))
128 goto no_schedule;
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;
135 BT_DBG("");
137 schedule_work(&hu->write_work);
139 no_schedule:
140 percpu_up_read(&hu->proto_lock);
142 return 0;
144 EXPORT_SYMBOL_GPL(hci_uart_tx_wakeup);
146 static void hci_uart_write_work(struct work_struct *work)
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;
153 /* REVISIT: should we cope with bad skbs or ->write() returning
154 * and error value ?
157 restart:
158 clear_bit(HCI_UART_TX_WAKEUP, &hu->tx_state);
160 while ((skb = hci_uart_dequeue(hu))) {
161 int len;
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;
167 skb_pull(skb, len);
168 if (skb->len) {
169 hu->tx_skb = skb;
170 break;
173 hci_uart_tx_complete(hu, hci_skb_pkt_type(skb));
174 kfree_skb(skb);
177 if (test_bit(HCI_UART_TX_WAKEUP, &hu->tx_state))
178 goto restart;
180 clear_bit(HCI_UART_SENDING, &hu->tx_state);
183 void hci_uart_init_work(struct work_struct *work)
185 struct hci_uart *hu = container_of(work, struct hci_uart, init_ready);
186 int err;
187 struct hci_dev *hdev;
189 if (!test_and_clear_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags))
190 return;
192 err = hci_register_dev(hu->hdev);
193 if (err < 0) {
194 BT_ERR("Can't register HCI device");
195 clear_bit(HCI_UART_PROTO_READY, &hu->flags);
196 hu->proto->close(hu);
197 hdev = hu->hdev;
198 hu->hdev = NULL;
199 hci_free_dev(hdev);
200 return;
203 set_bit(HCI_UART_REGISTERED, &hu->flags);
206 int hci_uart_init_ready(struct hci_uart *hu)
208 if (!test_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags))
209 return -EALREADY;
211 schedule_work(&hu->init_ready);
213 return 0;
216 /* ------- Interface to HCI layer ------ */
217 /* Reset device */
218 static int hci_uart_flush(struct hci_dev *hdev)
220 struct hci_uart *hu = hci_get_drvdata(hdev);
221 struct tty_struct *tty = hu->tty;
223 BT_DBG("hdev %p tty %p", hdev, tty);
225 if (hu->tx_skb) {
226 kfree_skb(hu->tx_skb); hu->tx_skb = NULL;
229 /* Flush any pending characters in the driver and discipline. */
230 tty_ldisc_flush(tty);
231 tty_driver_flush_buffer(tty);
233 percpu_down_read(&hu->proto_lock);
235 if (test_bit(HCI_UART_PROTO_READY, &hu->flags))
236 hu->proto->flush(hu);
238 percpu_up_read(&hu->proto_lock);
240 return 0;
243 /* Initialize device */
244 static int hci_uart_open(struct hci_dev *hdev)
246 BT_DBG("%s %p", hdev->name, hdev);
248 /* Undo clearing this from hci_uart_close() */
249 hdev->flush = hci_uart_flush;
251 return 0;
254 /* Close device */
255 static int hci_uart_close(struct hci_dev *hdev)
257 BT_DBG("hdev %p", hdev);
259 hci_uart_flush(hdev);
260 hdev->flush = NULL;
261 return 0;
264 /* Send frames from HCI layer */
265 static int hci_uart_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
267 struct hci_uart *hu = hci_get_drvdata(hdev);
269 BT_DBG("%s: type %d len %d", hdev->name, hci_skb_pkt_type(skb),
270 skb->len);
272 percpu_down_read(&hu->proto_lock);
274 if (!test_bit(HCI_UART_PROTO_READY, &hu->flags)) {
275 percpu_up_read(&hu->proto_lock);
276 return -EUNATCH;
279 hu->proto->enqueue(hu, skb);
280 percpu_up_read(&hu->proto_lock);
282 hci_uart_tx_wakeup(hu);
284 return 0;
287 /* Flow control or un-flow control the device */
288 void hci_uart_set_flow_control(struct hci_uart *hu, bool enable)
290 struct tty_struct *tty = hu->tty;
291 struct ktermios ktermios;
292 int status;
293 unsigned int set = 0;
294 unsigned int clear = 0;
296 if (hu->serdev) {
297 serdev_device_set_flow_control(hu->serdev, !enable);
298 serdev_device_set_rts(hu->serdev, !enable);
299 return;
302 if (enable) {
303 /* Disable hardware flow control */
304 ktermios = tty->termios;
305 ktermios.c_cflag &= ~CRTSCTS;
306 status = tty_set_termios(tty, &ktermios);
307 BT_DBG("Disabling hardware flow control: %s",
308 status ? "failed" : "success");
310 /* Clear RTS to prevent the device from sending */
311 /* Most UARTs need OUT2 to enable interrupts */
312 status = tty->driver->ops->tiocmget(tty);
313 BT_DBG("Current tiocm 0x%x", status);
315 set &= ~(TIOCM_OUT2 | TIOCM_RTS);
316 clear = ~set;
317 set &= TIOCM_DTR | TIOCM_RTS | TIOCM_OUT1 |
318 TIOCM_OUT2 | TIOCM_LOOP;
319 clear &= TIOCM_DTR | TIOCM_RTS | TIOCM_OUT1 |
320 TIOCM_OUT2 | TIOCM_LOOP;
321 status = tty->driver->ops->tiocmset(tty, set, clear);
322 BT_DBG("Clearing RTS: %s", status ? "failed" : "success");
323 } else {
324 /* Set RTS to allow the device to send again */
325 status = tty->driver->ops->tiocmget(tty);
326 BT_DBG("Current tiocm 0x%x", status);
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("Setting RTS: %s", status ? "failed" : "success");
337 /* Re-enable hardware flow control */
338 ktermios = tty->termios;
339 ktermios.c_cflag |= CRTSCTS;
340 status = tty_set_termios(tty, &ktermios);
341 BT_DBG("Enabling hardware flow control: %s",
342 status ? "failed" : "success");
346 void hci_uart_set_speeds(struct hci_uart *hu, unsigned int init_speed,
347 unsigned int oper_speed)
349 hu->init_speed = init_speed;
350 hu->oper_speed = oper_speed;
353 void hci_uart_set_baudrate(struct hci_uart *hu, unsigned int speed)
355 struct tty_struct *tty = hu->tty;
356 struct ktermios ktermios;
358 ktermios = tty->termios;
359 ktermios.c_cflag &= ~CBAUD;
360 tty_termios_encode_baud_rate(&ktermios, speed, speed);
362 /* tty_set_termios() return not checked as it is always 0 */
363 tty_set_termios(tty, &ktermios);
365 BT_DBG("%s: New tty speeds: %d/%d", hu->hdev->name,
366 tty->termios.c_ispeed, tty->termios.c_ospeed);
369 static int hci_uart_setup(struct hci_dev *hdev)
371 struct hci_uart *hu = hci_get_drvdata(hdev);
372 struct hci_rp_read_local_version *ver;
373 struct sk_buff *skb;
374 unsigned int speed;
375 int err;
377 /* Init speed if any */
378 if (hu->init_speed)
379 speed = hu->init_speed;
380 else if (hu->proto->init_speed)
381 speed = hu->proto->init_speed;
382 else
383 speed = 0;
385 if (speed)
386 hci_uart_set_baudrate(hu, speed);
388 /* Operational speed if any */
389 if (hu->oper_speed)
390 speed = hu->oper_speed;
391 else if (hu->proto->oper_speed)
392 speed = hu->proto->oper_speed;
393 else
394 speed = 0;
396 if (hu->proto->set_baudrate && speed) {
397 err = hu->proto->set_baudrate(hu, speed);
398 if (!err)
399 hci_uart_set_baudrate(hu, speed);
402 if (hu->proto->setup)
403 return hu->proto->setup(hu);
405 if (!test_bit(HCI_UART_VND_DETECT, &hu->hdev_flags))
406 return 0;
408 skb = __hci_cmd_sync(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL,
409 HCI_INIT_TIMEOUT);
410 if (IS_ERR(skb)) {
411 BT_ERR("%s: Reading local version information failed (%ld)",
412 hdev->name, PTR_ERR(skb));
413 return 0;
416 if (skb->len != sizeof(*ver)) {
417 BT_ERR("%s: Event length mismatch for version information",
418 hdev->name);
419 goto done;
422 ver = (struct hci_rp_read_local_version *)skb->data;
424 switch (le16_to_cpu(ver->manufacturer)) {
425 #ifdef CONFIG_BT_HCIUART_INTEL
426 case 2:
427 hdev->set_bdaddr = btintel_set_bdaddr;
428 btintel_check_bdaddr(hdev);
429 break;
430 #endif
431 #ifdef CONFIG_BT_HCIUART_BCM
432 case 15:
433 hdev->set_bdaddr = btbcm_set_bdaddr;
434 btbcm_check_bdaddr(hdev);
435 break;
436 #endif
437 default:
438 break;
441 done:
442 kfree_skb(skb);
443 return 0;
446 /* ------ LDISC part ------ */
447 /* hci_uart_tty_open
449 * Called when line discipline changed to HCI_UART.
451 * Arguments:
452 * tty pointer to tty info structure
453 * Return Value:
454 * 0 if success, otherwise error code
456 static int hci_uart_tty_open(struct tty_struct *tty)
458 struct hci_uart *hu;
460 BT_DBG("tty %p", tty);
462 /* Error if the tty has no write op instead of leaving an exploitable
463 * hole
465 if (tty->ops->write == NULL)
466 return -EOPNOTSUPP;
468 hu = kzalloc(sizeof(struct hci_uart), GFP_KERNEL);
469 if (!hu) {
470 BT_ERR("Can't allocate control structure");
471 return -ENFILE;
474 tty->disc_data = hu;
475 hu->tty = tty;
476 tty->receive_room = 65536;
478 /* disable alignment support by default */
479 hu->alignment = 1;
480 hu->padding = 0;
482 INIT_WORK(&hu->init_ready, hci_uart_init_work);
483 INIT_WORK(&hu->write_work, hci_uart_write_work);
485 percpu_init_rwsem(&hu->proto_lock);
487 /* Flush any pending characters in the driver */
488 tty_driver_flush_buffer(tty);
490 return 0;
493 /* hci_uart_tty_close()
495 * Called when the line discipline is changed to something
496 * else, the tty is closed, or the tty detects a hangup.
498 static void hci_uart_tty_close(struct tty_struct *tty)
500 struct hci_uart *hu = tty->disc_data;
501 struct hci_dev *hdev;
503 BT_DBG("tty %p", tty);
505 /* Detach from the tty */
506 tty->disc_data = NULL;
508 if (!hu)
509 return;
511 hdev = hu->hdev;
512 if (hdev)
513 hci_uart_close(hdev);
515 if (test_bit(HCI_UART_PROTO_READY, &hu->flags)) {
516 percpu_down_write(&hu->proto_lock);
517 clear_bit(HCI_UART_PROTO_READY, &hu->flags);
518 percpu_up_write(&hu->proto_lock);
520 cancel_work_sync(&hu->write_work);
522 if (hdev) {
523 if (test_bit(HCI_UART_REGISTERED, &hu->flags))
524 hci_unregister_dev(hdev);
525 hci_free_dev(hdev);
527 hu->proto->close(hu);
529 clear_bit(HCI_UART_PROTO_SET, &hu->flags);
531 percpu_free_rwsem(&hu->proto_lock);
533 kfree(hu);
536 /* hci_uart_tty_wakeup()
538 * Callback for transmit wakeup. Called when low level
539 * device driver can accept more send data.
541 * Arguments: tty pointer to associated tty instance data
542 * Return Value: None
544 static void hci_uart_tty_wakeup(struct tty_struct *tty)
546 struct hci_uart *hu = tty->disc_data;
548 BT_DBG("");
550 if (!hu)
551 return;
553 clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
555 if (tty != hu->tty)
556 return;
558 if (test_bit(HCI_UART_PROTO_READY, &hu->flags))
559 hci_uart_tx_wakeup(hu);
562 /* hci_uart_tty_receive()
564 * Called by tty low level driver when receive data is
565 * available.
567 * Arguments: tty pointer to tty isntance data
568 * data pointer to received data
569 * flags pointer to flags for data
570 * count count of received data in bytes
572 * Return Value: None
574 static void hci_uart_tty_receive(struct tty_struct *tty, const u8 *data,
575 char *flags, int count)
577 struct hci_uart *hu = tty->disc_data;
579 if (!hu || tty != hu->tty)
580 return;
582 percpu_down_read(&hu->proto_lock);
584 if (!test_bit(HCI_UART_PROTO_READY, &hu->flags)) {
585 percpu_up_read(&hu->proto_lock);
586 return;
589 /* It does not need a lock here as it is already protected by a mutex in
590 * tty caller
592 hu->proto->recv(hu, data, count);
593 percpu_up_read(&hu->proto_lock);
595 if (hu->hdev)
596 hu->hdev->stat.byte_rx += count;
598 tty_unthrottle(tty);
601 static int hci_uart_register_dev(struct hci_uart *hu)
603 struct hci_dev *hdev;
604 int err;
606 BT_DBG("");
608 /* Initialize and register HCI device */
609 hdev = hci_alloc_dev();
610 if (!hdev) {
611 BT_ERR("Can't allocate HCI device");
612 return -ENOMEM;
615 hu->hdev = hdev;
617 hdev->bus = HCI_UART;
618 hci_set_drvdata(hdev, hu);
620 /* Only when vendor specific setup callback is provided, consider
621 * the manufacturer information valid. This avoids filling in the
622 * value for Ericsson when nothing is specified.
624 if (hu->proto->setup)
625 hdev->manufacturer = hu->proto->manufacturer;
627 hdev->open = hci_uart_open;
628 hdev->close = hci_uart_close;
629 hdev->flush = hci_uart_flush;
630 hdev->send = hci_uart_send_frame;
631 hdev->setup = hci_uart_setup;
632 SET_HCIDEV_DEV(hdev, hu->tty->dev);
634 if (test_bit(HCI_UART_RAW_DEVICE, &hu->hdev_flags))
635 set_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks);
637 if (test_bit(HCI_UART_EXT_CONFIG, &hu->hdev_flags))
638 set_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks);
640 if (!test_bit(HCI_UART_RESET_ON_INIT, &hu->hdev_flags))
641 set_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks);
643 if (test_bit(HCI_UART_CREATE_AMP, &hu->hdev_flags))
644 hdev->dev_type = HCI_AMP;
645 else
646 hdev->dev_type = HCI_PRIMARY;
648 /* Only call open() for the protocol after hdev is fully initialized as
649 * open() (or a timer/workqueue it starts) may attempt to reference it.
651 err = hu->proto->open(hu);
652 if (err) {
653 hu->hdev = NULL;
654 hci_free_dev(hdev);
655 return err;
658 if (test_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags))
659 return 0;
661 if (hci_register_dev(hdev) < 0) {
662 BT_ERR("Can't register HCI device");
663 hu->proto->close(hu);
664 hu->hdev = NULL;
665 hci_free_dev(hdev);
666 return -ENODEV;
669 set_bit(HCI_UART_REGISTERED, &hu->flags);
671 return 0;
674 static int hci_uart_set_proto(struct hci_uart *hu, int id)
676 const struct hci_uart_proto *p;
677 int err;
679 p = hci_uart_get_proto(id);
680 if (!p)
681 return -EPROTONOSUPPORT;
683 hu->proto = p;
685 err = hci_uart_register_dev(hu);
686 if (err) {
687 return err;
690 set_bit(HCI_UART_PROTO_READY, &hu->flags);
691 return 0;
694 static int hci_uart_set_flags(struct hci_uart *hu, unsigned long flags)
696 unsigned long valid_flags = BIT(HCI_UART_RAW_DEVICE) |
697 BIT(HCI_UART_RESET_ON_INIT) |
698 BIT(HCI_UART_CREATE_AMP) |
699 BIT(HCI_UART_INIT_PENDING) |
700 BIT(HCI_UART_EXT_CONFIG) |
701 BIT(HCI_UART_VND_DETECT);
703 if (flags & ~valid_flags)
704 return -EINVAL;
706 hu->hdev_flags = flags;
708 return 0;
711 /* hci_uart_tty_ioctl()
713 * Process IOCTL system call for the tty device.
715 * Arguments:
717 * tty pointer to tty instance data
718 * file pointer to open file object for device
719 * cmd IOCTL command code
720 * arg argument for IOCTL call (cmd dependent)
722 * Return Value: Command dependent
724 static int hci_uart_tty_ioctl(struct tty_struct *tty, struct file *file,
725 unsigned int cmd, unsigned long arg)
727 struct hci_uart *hu = tty->disc_data;
728 int err = 0;
730 BT_DBG("");
732 /* Verify the status of the device */
733 if (!hu)
734 return -EBADF;
736 switch (cmd) {
737 case HCIUARTSETPROTO:
738 if (!test_and_set_bit(HCI_UART_PROTO_SET, &hu->flags)) {
739 err = hci_uart_set_proto(hu, arg);
740 if (err)
741 clear_bit(HCI_UART_PROTO_SET, &hu->flags);
742 } else
743 err = -EBUSY;
744 break;
746 case HCIUARTGETPROTO:
747 if (test_bit(HCI_UART_PROTO_SET, &hu->flags))
748 err = hu->proto->id;
749 else
750 err = -EUNATCH;
751 break;
753 case HCIUARTGETDEVICE:
754 if (test_bit(HCI_UART_REGISTERED, &hu->flags))
755 err = hu->hdev->id;
756 else
757 err = -EUNATCH;
758 break;
760 case HCIUARTSETFLAGS:
761 if (test_bit(HCI_UART_PROTO_SET, &hu->flags))
762 err = -EBUSY;
763 else
764 err = hci_uart_set_flags(hu, arg);
765 break;
767 case HCIUARTGETFLAGS:
768 err = hu->hdev_flags;
769 break;
771 default:
772 err = n_tty_ioctl_helper(tty, file, cmd, arg);
773 break;
776 return err;
780 * We don't provide read/write/poll interface for user space.
782 static ssize_t hci_uart_tty_read(struct tty_struct *tty, struct file *file,
783 unsigned char __user *buf, size_t nr)
785 return 0;
788 static ssize_t hci_uart_tty_write(struct tty_struct *tty, struct file *file,
789 const unsigned char *data, size_t count)
791 return 0;
794 static __poll_t hci_uart_tty_poll(struct tty_struct *tty,
795 struct file *filp, poll_table *wait)
797 return 0;
800 static int __init hci_uart_init(void)
802 static struct tty_ldisc_ops hci_uart_ldisc;
803 int err;
805 BT_INFO("HCI UART driver ver %s", VERSION);
807 /* Register the tty discipline */
809 memset(&hci_uart_ldisc, 0, sizeof(hci_uart_ldisc));
810 hci_uart_ldisc.magic = TTY_LDISC_MAGIC;
811 hci_uart_ldisc.name = "n_hci";
812 hci_uart_ldisc.open = hci_uart_tty_open;
813 hci_uart_ldisc.close = hci_uart_tty_close;
814 hci_uart_ldisc.read = hci_uart_tty_read;
815 hci_uart_ldisc.write = hci_uart_tty_write;
816 hci_uart_ldisc.ioctl = hci_uart_tty_ioctl;
817 hci_uart_ldisc.compat_ioctl = hci_uart_tty_ioctl;
818 hci_uart_ldisc.poll = hci_uart_tty_poll;
819 hci_uart_ldisc.receive_buf = hci_uart_tty_receive;
820 hci_uart_ldisc.write_wakeup = hci_uart_tty_wakeup;
821 hci_uart_ldisc.owner = THIS_MODULE;
823 err = tty_register_ldisc(N_HCI, &hci_uart_ldisc);
824 if (err) {
825 BT_ERR("HCI line discipline registration failed. (%d)", err);
826 return err;
829 #ifdef CONFIG_BT_HCIUART_H4
830 h4_init();
831 #endif
832 #ifdef CONFIG_BT_HCIUART_BCSP
833 bcsp_init();
834 #endif
835 #ifdef CONFIG_BT_HCIUART_LL
836 ll_init();
837 #endif
838 #ifdef CONFIG_BT_HCIUART_ATH3K
839 ath_init();
840 #endif
841 #ifdef CONFIG_BT_HCIUART_3WIRE
842 h5_init();
843 #endif
844 #ifdef CONFIG_BT_HCIUART_INTEL
845 intel_init();
846 #endif
847 #ifdef CONFIG_BT_HCIUART_BCM
848 bcm_init();
849 #endif
850 #ifdef CONFIG_BT_HCIUART_QCA
851 qca_init();
852 #endif
853 #ifdef CONFIG_BT_HCIUART_AG6XX
854 ag6xx_init();
855 #endif
856 #ifdef CONFIG_BT_HCIUART_MRVL
857 mrvl_init();
858 #endif
860 return 0;
863 static void __exit hci_uart_exit(void)
865 int err;
867 #ifdef CONFIG_BT_HCIUART_H4
868 h4_deinit();
869 #endif
870 #ifdef CONFIG_BT_HCIUART_BCSP
871 bcsp_deinit();
872 #endif
873 #ifdef CONFIG_BT_HCIUART_LL
874 ll_deinit();
875 #endif
876 #ifdef CONFIG_BT_HCIUART_ATH3K
877 ath_deinit();
878 #endif
879 #ifdef CONFIG_BT_HCIUART_3WIRE
880 h5_deinit();
881 #endif
882 #ifdef CONFIG_BT_HCIUART_INTEL
883 intel_deinit();
884 #endif
885 #ifdef CONFIG_BT_HCIUART_BCM
886 bcm_deinit();
887 #endif
888 #ifdef CONFIG_BT_HCIUART_QCA
889 qca_deinit();
890 #endif
891 #ifdef CONFIG_BT_HCIUART_AG6XX
892 ag6xx_deinit();
893 #endif
894 #ifdef CONFIG_BT_HCIUART_MRVL
895 mrvl_deinit();
896 #endif
898 /* Release tty registration of line discipline */
899 err = tty_unregister_ldisc(N_HCI);
900 if (err)
901 BT_ERR("Can't unregister HCI line discipline (%d)", err);
904 module_init(hci_uart_init);
905 module_exit(hci_uart_exit);
907 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
908 MODULE_DESCRIPTION("Bluetooth HCI UART driver ver " VERSION);
909 MODULE_VERSION(VERSION);
910 MODULE_LICENSE("GPL");
911 MODULE_ALIAS_LDISC(N_HCI);