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