1 // SPDX-License-Identifier: GPL-2.0-or-later
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>
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>
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
)
52 BT_INFO("HCI UART protocol %s registered", p
->name
);
57 int hci_uart_unregister_proto(const struct hci_uart_proto
*p
)
59 if (p
->id
>= HCI_UART_MAX_PROTO
)
70 static const struct hci_uart_proto
*hci_uart_get_proto(unsigned int id
)
72 if (id
>= HCI_UART_MAX_PROTO
)
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 */
98 static inline struct sk_buff
*hci_uart_dequeue(struct hci_uart
*hu
)
100 struct sk_buff
*skb
= hu
->tx_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
);
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
))
127 if (!test_bit(HCI_UART_PROTO_READY
, &hu
->flags
))
130 if (test_and_set_bit(HCI_UART_SENDING
, &hu
->tx_state
)) {
131 set_bit(HCI_UART_TX_WAKEUP
, &hu
->tx_state
);
137 schedule_work(&hu
->write_work
);
140 percpu_up_read(&hu
->proto_lock
);
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
;
153 /* REVISIT: should we cope with bad skbs or ->write() returning
158 clear_bit(HCI_UART_TX_WAKEUP
, &hu
->tx_state
);
160 while ((skb
= hci_uart_dequeue(hu
))) {
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
;
173 hci_uart_tx_complete(hu
, hci_skb_pkt_type(skb
));
177 if (test_bit(HCI_UART_TX_WAKEUP
, &hu
->tx_state
))
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
);
187 struct hci_dev
*hdev
;
189 if (!test_and_clear_bit(HCI_UART_INIT_PENDING
, &hu
->hdev_flags
))
192 err
= hci_register_dev(hu
->hdev
);
194 BT_ERR("Can't register HCI device");
195 clear_bit(HCI_UART_PROTO_READY
, &hu
->flags
);
196 hu
->proto
->close(hu
);
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
))
211 schedule_work(&hu
->init_ready
);
216 /* ------- Interface to HCI layer ------ */
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
);
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
);
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
;
255 static int hci_uart_close(struct hci_dev
*hdev
)
257 BT_DBG("hdev %p", hdev
);
259 hci_uart_flush(hdev
);
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
),
272 percpu_down_read(&hu
->proto_lock
);
274 if (!test_bit(HCI_UART_PROTO_READY
, &hu
->flags
)) {
275 percpu_up_read(&hu
->proto_lock
);
279 hu
->proto
->enqueue(hu
, skb
);
280 percpu_up_read(&hu
->proto_lock
);
282 hci_uart_tx_wakeup(hu
);
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
;
293 unsigned int set
= 0;
294 unsigned int clear
= 0;
297 serdev_device_set_flow_control(hu
->serdev
, !enable
);
298 serdev_device_set_rts(hu
->serdev
, !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
);
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");
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
);
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
;
377 /* Init speed if any */
379 speed
= hu
->init_speed
;
380 else if (hu
->proto
->init_speed
)
381 speed
= hu
->proto
->init_speed
;
386 hci_uart_set_baudrate(hu
, speed
);
388 /* Operational speed if any */
390 speed
= hu
->oper_speed
;
391 else if (hu
->proto
->oper_speed
)
392 speed
= hu
->proto
->oper_speed
;
396 if (hu
->proto
->set_baudrate
&& speed
) {
397 err
= hu
->proto
->set_baudrate(hu
, speed
);
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
))
408 skb
= __hci_cmd_sync(hdev
, HCI_OP_READ_LOCAL_VERSION
, 0, NULL
,
411 BT_ERR("%s: Reading local version information failed (%ld)",
412 hdev
->name
, PTR_ERR(skb
));
416 if (skb
->len
!= sizeof(*ver
)) {
417 BT_ERR("%s: Event length mismatch for version information",
422 ver
= (struct hci_rp_read_local_version
*)skb
->data
;
424 switch (le16_to_cpu(ver
->manufacturer
)) {
425 #ifdef CONFIG_BT_HCIUART_INTEL
427 hdev
->set_bdaddr
= btintel_set_bdaddr
;
428 btintel_check_bdaddr(hdev
);
431 #ifdef CONFIG_BT_HCIUART_BCM
433 hdev
->set_bdaddr
= btbcm_set_bdaddr
;
434 btbcm_check_bdaddr(hdev
);
446 /* ------ LDISC part ------ */
449 * Called when line discipline changed to HCI_UART.
452 * tty pointer to tty info structure
454 * 0 if success, otherwise error code
456 static int hci_uart_tty_open(struct tty_struct
*tty
)
460 BT_DBG("tty %p", tty
);
462 /* Error if the tty has no write op instead of leaving an exploitable
465 if (tty
->ops
->write
== NULL
)
468 hu
= kzalloc(sizeof(struct hci_uart
), GFP_KERNEL
);
470 BT_ERR("Can't allocate control structure");
476 tty
->receive_room
= 65536;
478 /* disable alignment support by default */
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
);
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
;
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
);
523 if (test_bit(HCI_UART_REGISTERED
, &hu
->flags
))
524 hci_unregister_dev(hdev
);
527 hu
->proto
->close(hu
);
529 clear_bit(HCI_UART_PROTO_SET
, &hu
->flags
);
531 percpu_free_rwsem(&hu
->proto_lock
);
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
544 static void hci_uart_tty_wakeup(struct tty_struct
*tty
)
546 struct hci_uart
*hu
= tty
->disc_data
;
553 clear_bit(TTY_DO_WRITE_WAKEUP
, &tty
->flags
);
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
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
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
)
582 percpu_down_read(&hu
->proto_lock
);
584 if (!test_bit(HCI_UART_PROTO_READY
, &hu
->flags
)) {
585 percpu_up_read(&hu
->proto_lock
);
589 /* It does not need a lock here as it is already protected by a mutex in
592 hu
->proto
->recv(hu
, data
, count
);
593 percpu_up_read(&hu
->proto_lock
);
596 hu
->hdev
->stat
.byte_rx
+= count
;
601 static int hci_uart_register_dev(struct hci_uart
*hu
)
603 struct hci_dev
*hdev
;
608 /* Initialize and register HCI device */
609 hdev
= hci_alloc_dev();
611 BT_ERR("Can't allocate HCI device");
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
;
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
);
658 if (test_bit(HCI_UART_INIT_PENDING
, &hu
->hdev_flags
))
661 if (hci_register_dev(hdev
) < 0) {
662 BT_ERR("Can't register HCI device");
663 hu
->proto
->close(hu
);
669 set_bit(HCI_UART_REGISTERED
, &hu
->flags
);
674 static int hci_uart_set_proto(struct hci_uart
*hu
, int id
)
676 const struct hci_uart_proto
*p
;
679 p
= hci_uart_get_proto(id
);
681 return -EPROTONOSUPPORT
;
685 err
= hci_uart_register_dev(hu
);
690 set_bit(HCI_UART_PROTO_READY
, &hu
->flags
);
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
)
706 hu
->hdev_flags
= flags
;
711 /* hci_uart_tty_ioctl()
713 * Process IOCTL system call for the tty device.
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
;
732 /* Verify the status of the device */
737 case HCIUARTSETPROTO
:
738 if (!test_and_set_bit(HCI_UART_PROTO_SET
, &hu
->flags
)) {
739 err
= hci_uart_set_proto(hu
, arg
);
741 clear_bit(HCI_UART_PROTO_SET
, &hu
->flags
);
746 case HCIUARTGETPROTO
:
747 if (test_bit(HCI_UART_PROTO_SET
, &hu
->flags
))
753 case HCIUARTGETDEVICE
:
754 if (test_bit(HCI_UART_REGISTERED
, &hu
->flags
))
760 case HCIUARTSETFLAGS
:
761 if (test_bit(HCI_UART_PROTO_SET
, &hu
->flags
))
764 err
= hci_uart_set_flags(hu
, arg
);
767 case HCIUARTGETFLAGS
:
768 err
= hu
->hdev_flags
;
772 err
= n_tty_ioctl_helper(tty
, file
, cmd
, arg
);
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
)
788 static ssize_t
hci_uart_tty_write(struct tty_struct
*tty
, struct file
*file
,
789 const unsigned char *data
, size_t count
)
794 static __poll_t
hci_uart_tty_poll(struct tty_struct
*tty
,
795 struct file
*filp
, poll_table
*wait
)
800 static int __init
hci_uart_init(void)
802 static struct tty_ldisc_ops hci_uart_ldisc
;
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
);
825 BT_ERR("HCI line discipline registration failed. (%d)", err
);
829 #ifdef CONFIG_BT_HCIUART_H4
832 #ifdef CONFIG_BT_HCIUART_BCSP
835 #ifdef CONFIG_BT_HCIUART_LL
838 #ifdef CONFIG_BT_HCIUART_ATH3K
841 #ifdef CONFIG_BT_HCIUART_3WIRE
844 #ifdef CONFIG_BT_HCIUART_INTEL
847 #ifdef CONFIG_BT_HCIUART_BCM
850 #ifdef CONFIG_BT_HCIUART_QCA
853 #ifdef CONFIG_BT_HCIUART_AG6XX
856 #ifdef CONFIG_BT_HCIUART_MRVL
863 static void __exit
hci_uart_exit(void)
867 #ifdef CONFIG_BT_HCIUART_H4
870 #ifdef CONFIG_BT_HCIUART_BCSP
873 #ifdef CONFIG_BT_HCIUART_LL
876 #ifdef CONFIG_BT_HCIUART_ATH3K
879 #ifdef CONFIG_BT_HCIUART_3WIRE
882 #ifdef CONFIG_BT_HCIUART_INTEL
885 #ifdef CONFIG_BT_HCIUART_BCM
888 #ifdef CONFIG_BT_HCIUART_QCA
891 #ifdef CONFIG_BT_HCIUART_AG6XX
894 #ifdef CONFIG_BT_HCIUART_MRVL
898 /* Release tty registration of line discipline */
899 err
= tty_unregister_ldisc(N_HCI
);
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
);