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