Merge branch 'for-linus' of ssh://master.kernel.org/pub/scm/linux/kernel/git/hskinnem...
[pandora-kernel.git] / net / bluetooth / hci_core.c
1 /*
2    BlueZ - Bluetooth protocol stack for Linux
3    Copyright (C) 2000-2001 Qualcomm Incorporated
4
5    Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License version 2 as
9    published by the Free Software Foundation;
10
11    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
14    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
16    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19
20    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
22    SOFTWARE IS DISCLAIMED.
23 */
24
25 /* Bluetooth HCI core. */
26
27 #include <linux/module.h>
28 #include <linux/kmod.h>
29
30 #include <linux/types.h>
31 #include <linux/errno.h>
32 #include <linux/kernel.h>
33 #include <linux/sched.h>
34 #include <linux/slab.h>
35 #include <linux/poll.h>
36 #include <linux/fcntl.h>
37 #include <linux/init.h>
38 #include <linux/skbuff.h>
39 #include <linux/interrupt.h>
40 #include <linux/notifier.h>
41 #include <net/sock.h>
42
43 #include <asm/system.h>
44 #include <asm/uaccess.h>
45 #include <asm/unaligned.h>
46
47 #include <net/bluetooth/bluetooth.h>
48 #include <net/bluetooth/hci_core.h>
49
50 #ifndef CONFIG_BT_HCI_CORE_DEBUG
51 #undef  BT_DBG
52 #define BT_DBG(D...)
53 #endif
54
55 static void hci_cmd_task(unsigned long arg);
56 static void hci_rx_task(unsigned long arg);
57 static void hci_tx_task(unsigned long arg);
58 static void hci_notify(struct hci_dev *hdev, int event);
59
60 static DEFINE_RWLOCK(hci_task_lock);
61
62 /* HCI device list */
63 LIST_HEAD(hci_dev_list);
64 DEFINE_RWLOCK(hci_dev_list_lock);
65
66 /* HCI callback list */
67 LIST_HEAD(hci_cb_list);
68 DEFINE_RWLOCK(hci_cb_list_lock);
69
70 /* HCI protocols */
71 #define HCI_MAX_PROTO   2
72 struct hci_proto *hci_proto[HCI_MAX_PROTO];
73
74 /* HCI notifiers list */
75 static ATOMIC_NOTIFIER_HEAD(hci_notifier);
76
77 /* ---- HCI notifications ---- */
78
79 int hci_register_notifier(struct notifier_block *nb)
80 {
81         return atomic_notifier_chain_register(&hci_notifier, nb);
82 }
83
84 int hci_unregister_notifier(struct notifier_block *nb)
85 {
86         return atomic_notifier_chain_unregister(&hci_notifier, nb);
87 }
88
89 static void hci_notify(struct hci_dev *hdev, int event)
90 {
91         atomic_notifier_call_chain(&hci_notifier, event, hdev);
92 }
93
94 /* ---- HCI requests ---- */
95
96 void hci_req_complete(struct hci_dev *hdev, int result)
97 {
98         BT_DBG("%s result 0x%2.2x", hdev->name, result);
99
100         if (hdev->req_status == HCI_REQ_PEND) {
101                 hdev->req_result = result;
102                 hdev->req_status = HCI_REQ_DONE;
103                 wake_up_interruptible(&hdev->req_wait_q);
104         }
105 }
106
107 static void hci_req_cancel(struct hci_dev *hdev, int err)
108 {
109         BT_DBG("%s err 0x%2.2x", hdev->name, err);
110
111         if (hdev->req_status == HCI_REQ_PEND) {
112                 hdev->req_result = err;
113                 hdev->req_status = HCI_REQ_CANCELED;
114                 wake_up_interruptible(&hdev->req_wait_q);
115         }
116 }
117
118 /* Execute request and wait for completion. */
119 static int __hci_request(struct hci_dev *hdev, void (*req)(struct hci_dev *hdev, unsigned long opt),
120                                 unsigned long opt, __u32 timeout)
121 {
122         DECLARE_WAITQUEUE(wait, current);
123         int err = 0;
124
125         BT_DBG("%s start", hdev->name);
126
127         hdev->req_status = HCI_REQ_PEND;
128
129         add_wait_queue(&hdev->req_wait_q, &wait);
130         set_current_state(TASK_INTERRUPTIBLE);
131
132         req(hdev, opt);
133         schedule_timeout(timeout);
134
135         remove_wait_queue(&hdev->req_wait_q, &wait);
136
137         if (signal_pending(current))
138                 return -EINTR;
139
140         switch (hdev->req_status) {
141         case HCI_REQ_DONE:
142                 err = -bt_err(hdev->req_result);
143                 break;
144
145         case HCI_REQ_CANCELED:
146                 err = -hdev->req_result;
147                 break;
148
149         default:
150                 err = -ETIMEDOUT;
151                 break;
152         }
153
154         hdev->req_status = hdev->req_result = 0;
155
156         BT_DBG("%s end: err %d", hdev->name, err);
157
158         return err;
159 }
160
161 static inline int hci_request(struct hci_dev *hdev, void (*req)(struct hci_dev *hdev, unsigned long opt),
162                                 unsigned long opt, __u32 timeout)
163 {
164         int ret;
165
166         /* Serialize all requests */
167         hci_req_lock(hdev);
168         ret = __hci_request(hdev, req, opt, timeout);
169         hci_req_unlock(hdev);
170
171         return ret;
172 }
173
174 static void hci_reset_req(struct hci_dev *hdev, unsigned long opt)
175 {
176         BT_DBG("%s %ld", hdev->name, opt);
177
178         /* Reset device */
179         hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
180 }
181
182 static void hci_init_req(struct hci_dev *hdev, unsigned long opt)
183 {
184         struct sk_buff *skb;
185         __le16 param;
186         __u8 flt_type;
187
188         BT_DBG("%s %ld", hdev->name, opt);
189
190         /* Driver initialization */
191
192         /* Special commands */
193         while ((skb = skb_dequeue(&hdev->driver_init))) {
194                 bt_cb(skb)->pkt_type = HCI_COMMAND_PKT;
195                 skb->dev = (void *) hdev;
196                 skb_queue_tail(&hdev->cmd_q, skb);
197                 hci_sched_cmd(hdev);
198         }
199         skb_queue_purge(&hdev->driver_init);
200
201         /* Mandatory initialization */
202
203         /* Reset */
204         if (test_bit(HCI_QUIRK_RESET_ON_INIT, &hdev->quirks))
205                         hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
206
207         /* Read Local Supported Features */
208         hci_send_cmd(hdev, HCI_OP_READ_LOCAL_FEATURES, 0, NULL);
209
210         /* Read Local Version */
211         hci_send_cmd(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL);
212
213         /* Read Buffer Size (ACL mtu, max pkt, etc.) */
214         hci_send_cmd(hdev, HCI_OP_READ_BUFFER_SIZE, 0, NULL);
215
216 #if 0
217         /* Host buffer size */
218         {
219                 struct hci_cp_host_buffer_size cp;
220                 cp.acl_mtu = cpu_to_le16(HCI_MAX_ACL_SIZE);
221                 cp.sco_mtu = HCI_MAX_SCO_SIZE;
222                 cp.acl_max_pkt = cpu_to_le16(0xffff);
223                 cp.sco_max_pkt = cpu_to_le16(0xffff);
224                 hci_send_cmd(hdev, HCI_OP_HOST_BUFFER_SIZE, sizeof(cp), &cp);
225         }
226 #endif
227
228         /* Read BD Address */
229         hci_send_cmd(hdev, HCI_OP_READ_BD_ADDR, 0, NULL);
230
231         /* Read Class of Device */
232         hci_send_cmd(hdev, HCI_OP_READ_CLASS_OF_DEV, 0, NULL);
233
234         /* Read Local Name */
235         hci_send_cmd(hdev, HCI_OP_READ_LOCAL_NAME, 0, NULL);
236
237         /* Read Voice Setting */
238         hci_send_cmd(hdev, HCI_OP_READ_VOICE_SETTING, 0, NULL);
239
240         /* Optional initialization */
241
242         /* Clear Event Filters */
243         flt_type = HCI_FLT_CLEAR_ALL;
244         hci_send_cmd(hdev, HCI_OP_SET_EVENT_FLT, 1, &flt_type);
245
246         /* Page timeout ~20 secs */
247         param = cpu_to_le16(0x8000);
248         hci_send_cmd(hdev, HCI_OP_WRITE_PG_TIMEOUT, 2, &param);
249
250         /* Connection accept timeout ~20 secs */
251         param = cpu_to_le16(0x7d00);
252         hci_send_cmd(hdev, HCI_OP_WRITE_CA_TIMEOUT, 2, &param);
253 }
254
255 static void hci_scan_req(struct hci_dev *hdev, unsigned long opt)
256 {
257         __u8 scan = opt;
258
259         BT_DBG("%s %x", hdev->name, scan);
260
261         /* Inquiry and Page scans */
262         hci_send_cmd(hdev, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
263 }
264
265 static void hci_auth_req(struct hci_dev *hdev, unsigned long opt)
266 {
267         __u8 auth = opt;
268
269         BT_DBG("%s %x", hdev->name, auth);
270
271         /* Authentication */
272         hci_send_cmd(hdev, HCI_OP_WRITE_AUTH_ENABLE, 1, &auth);
273 }
274
275 static void hci_encrypt_req(struct hci_dev *hdev, unsigned long opt)
276 {
277         __u8 encrypt = opt;
278
279         BT_DBG("%s %x", hdev->name, encrypt);
280
281         /* Authentication */
282         hci_send_cmd(hdev, HCI_OP_WRITE_ENCRYPT_MODE, 1, &encrypt);
283 }
284
285 /* Get HCI device by index.
286  * Device is held on return. */
287 struct hci_dev *hci_dev_get(int index)
288 {
289         struct hci_dev *hdev = NULL;
290         struct list_head *p;
291
292         BT_DBG("%d", index);
293
294         if (index < 0)
295                 return NULL;
296
297         read_lock(&hci_dev_list_lock);
298         list_for_each(p, &hci_dev_list) {
299                 struct hci_dev *d = list_entry(p, struct hci_dev, list);
300                 if (d->id == index) {
301                         hdev = hci_dev_hold(d);
302                         break;
303                 }
304         }
305         read_unlock(&hci_dev_list_lock);
306         return hdev;
307 }
308
309 /* ---- Inquiry support ---- */
310 static void inquiry_cache_flush(struct hci_dev *hdev)
311 {
312         struct inquiry_cache *cache = &hdev->inq_cache;
313         struct inquiry_entry *next  = cache->list, *e;
314
315         BT_DBG("cache %p", cache);
316
317         cache->list = NULL;
318         while ((e = next)) {
319                 next = e->next;
320                 kfree(e);
321         }
322 }
323
324 struct inquiry_entry *hci_inquiry_cache_lookup(struct hci_dev *hdev, bdaddr_t *bdaddr)
325 {
326         struct inquiry_cache *cache = &hdev->inq_cache;
327         struct inquiry_entry *e;
328
329         BT_DBG("cache %p, %s", cache, batostr(bdaddr));
330
331         for (e = cache->list; e; e = e->next)
332                 if (!bacmp(&e->data.bdaddr, bdaddr))
333                         break;
334         return e;
335 }
336
337 void hci_inquiry_cache_update(struct hci_dev *hdev, struct inquiry_data *data)
338 {
339         struct inquiry_cache *cache = &hdev->inq_cache;
340         struct inquiry_entry *e;
341
342         BT_DBG("cache %p, %s", cache, batostr(&data->bdaddr));
343
344         if (!(e = hci_inquiry_cache_lookup(hdev, &data->bdaddr))) {
345                 /* Entry not in the cache. Add new one. */
346                 if (!(e = kzalloc(sizeof(struct inquiry_entry), GFP_ATOMIC)))
347                         return;
348                 e->next     = cache->list;
349                 cache->list = e;
350         }
351
352         memcpy(&e->data, data, sizeof(*data));
353         e->timestamp = jiffies;
354         cache->timestamp = jiffies;
355 }
356
357 static int inquiry_cache_dump(struct hci_dev *hdev, int num, __u8 *buf)
358 {
359         struct inquiry_cache *cache = &hdev->inq_cache;
360         struct inquiry_info *info = (struct inquiry_info *) buf;
361         struct inquiry_entry *e;
362         int copied = 0;
363
364         for (e = cache->list; e && copied < num; e = e->next, copied++) {
365                 struct inquiry_data *data = &e->data;
366                 bacpy(&info->bdaddr, &data->bdaddr);
367                 info->pscan_rep_mode    = data->pscan_rep_mode;
368                 info->pscan_period_mode = data->pscan_period_mode;
369                 info->pscan_mode        = data->pscan_mode;
370                 memcpy(info->dev_class, data->dev_class, 3);
371                 info->clock_offset      = data->clock_offset;
372                 info++;
373         }
374
375         BT_DBG("cache %p, copied %d", cache, copied);
376         return copied;
377 }
378
379 static void hci_inq_req(struct hci_dev *hdev, unsigned long opt)
380 {
381         struct hci_inquiry_req *ir = (struct hci_inquiry_req *) opt;
382         struct hci_cp_inquiry cp;
383
384         BT_DBG("%s", hdev->name);
385
386         if (test_bit(HCI_INQUIRY, &hdev->flags))
387                 return;
388
389         /* Start Inquiry */
390         memcpy(&cp.lap, &ir->lap, 3);
391         cp.length  = ir->length;
392         cp.num_rsp = ir->num_rsp;
393         hci_send_cmd(hdev, HCI_OP_INQUIRY, sizeof(cp), &cp);
394 }
395
396 int hci_inquiry(void __user *arg)
397 {
398         __u8 __user *ptr = arg;
399         struct hci_inquiry_req ir;
400         struct hci_dev *hdev;
401         int err = 0, do_inquiry = 0, max_rsp;
402         long timeo;
403         __u8 *buf;
404
405         if (copy_from_user(&ir, ptr, sizeof(ir)))
406                 return -EFAULT;
407
408         if (!(hdev = hci_dev_get(ir.dev_id)))
409                 return -ENODEV;
410
411         hci_dev_lock_bh(hdev);
412         if (inquiry_cache_age(hdev) > INQUIRY_CACHE_AGE_MAX ||
413                                         inquiry_cache_empty(hdev) ||
414                                         ir.flags & IREQ_CACHE_FLUSH) {
415                 inquiry_cache_flush(hdev);
416                 do_inquiry = 1;
417         }
418         hci_dev_unlock_bh(hdev);
419
420         timeo = ir.length * msecs_to_jiffies(2000);
421         if (do_inquiry && (err = hci_request(hdev, hci_inq_req, (unsigned long)&ir, timeo)) < 0)
422                 goto done;
423
424         /* for unlimited number of responses we will use buffer with 255 entries */
425         max_rsp = (ir.num_rsp == 0) ? 255 : ir.num_rsp;
426
427         /* cache_dump can't sleep. Therefore we allocate temp buffer and then
428          * copy it to the user space.
429          */
430         if (!(buf = kmalloc(sizeof(struct inquiry_info) * max_rsp, GFP_KERNEL))) {
431                 err = -ENOMEM;
432                 goto done;
433         }
434
435         hci_dev_lock_bh(hdev);
436         ir.num_rsp = inquiry_cache_dump(hdev, max_rsp, buf);
437         hci_dev_unlock_bh(hdev);
438
439         BT_DBG("num_rsp %d", ir.num_rsp);
440
441         if (!copy_to_user(ptr, &ir, sizeof(ir))) {
442                 ptr += sizeof(ir);
443                 if (copy_to_user(ptr, buf, sizeof(struct inquiry_info) *
444                                         ir.num_rsp))
445                         err = -EFAULT;
446         } else
447                 err = -EFAULT;
448
449         kfree(buf);
450
451 done:
452         hci_dev_put(hdev);
453         return err;
454 }
455
456 /* ---- HCI ioctl helpers ---- */
457
458 int hci_dev_open(__u16 dev)
459 {
460         struct hci_dev *hdev;
461         int ret = 0;
462
463         if (!(hdev = hci_dev_get(dev)))
464                 return -ENODEV;
465
466         BT_DBG("%s %p", hdev->name, hdev);
467
468         hci_req_lock(hdev);
469
470         if (test_bit(HCI_UP, &hdev->flags)) {
471                 ret = -EALREADY;
472                 goto done;
473         }
474
475         if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks))
476                 set_bit(HCI_RAW, &hdev->flags);
477
478         if (hdev->open(hdev)) {
479                 ret = -EIO;
480                 goto done;
481         }
482
483         if (!test_bit(HCI_RAW, &hdev->flags)) {
484                 atomic_set(&hdev->cmd_cnt, 1);
485                 set_bit(HCI_INIT, &hdev->flags);
486
487                 //__hci_request(hdev, hci_reset_req, 0, HZ);
488                 ret = __hci_request(hdev, hci_init_req, 0,
489                                         msecs_to_jiffies(HCI_INIT_TIMEOUT));
490
491                 clear_bit(HCI_INIT, &hdev->flags);
492         }
493
494         if (!ret) {
495                 hci_dev_hold(hdev);
496                 set_bit(HCI_UP, &hdev->flags);
497                 hci_notify(hdev, HCI_DEV_UP);
498         } else {
499                 /* Init failed, cleanup */
500                 tasklet_kill(&hdev->rx_task);
501                 tasklet_kill(&hdev->tx_task);
502                 tasklet_kill(&hdev->cmd_task);
503
504                 skb_queue_purge(&hdev->cmd_q);
505                 skb_queue_purge(&hdev->rx_q);
506
507                 if (hdev->flush)
508                         hdev->flush(hdev);
509
510                 if (hdev->sent_cmd) {
511                         kfree_skb(hdev->sent_cmd);
512                         hdev->sent_cmd = NULL;
513                 }
514
515                 hdev->close(hdev);
516                 hdev->flags = 0;
517         }
518
519 done:
520         hci_req_unlock(hdev);
521         hci_dev_put(hdev);
522         return ret;
523 }
524
525 static int hci_dev_do_close(struct hci_dev *hdev)
526 {
527         BT_DBG("%s %p", hdev->name, hdev);
528
529         hci_req_cancel(hdev, ENODEV);
530         hci_req_lock(hdev);
531
532         if (!test_and_clear_bit(HCI_UP, &hdev->flags)) {
533                 hci_req_unlock(hdev);
534                 return 0;
535         }
536
537         /* Kill RX and TX tasks */
538         tasklet_kill(&hdev->rx_task);
539         tasklet_kill(&hdev->tx_task);
540
541         hci_dev_lock_bh(hdev);
542         inquiry_cache_flush(hdev);
543         hci_conn_hash_flush(hdev);
544         hci_dev_unlock_bh(hdev);
545
546         hci_notify(hdev, HCI_DEV_DOWN);
547
548         if (hdev->flush)
549                 hdev->flush(hdev);
550
551         /* Reset device */
552         skb_queue_purge(&hdev->cmd_q);
553         atomic_set(&hdev->cmd_cnt, 1);
554         if (!test_bit(HCI_RAW, &hdev->flags)) {
555                 set_bit(HCI_INIT, &hdev->flags);
556                 __hci_request(hdev, hci_reset_req, 0,
557                                         msecs_to_jiffies(250));
558                 clear_bit(HCI_INIT, &hdev->flags);
559         }
560
561         /* Kill cmd task */
562         tasklet_kill(&hdev->cmd_task);
563
564         /* Drop queues */
565         skb_queue_purge(&hdev->rx_q);
566         skb_queue_purge(&hdev->cmd_q);
567         skb_queue_purge(&hdev->raw_q);
568
569         /* Drop last sent command */
570         if (hdev->sent_cmd) {
571                 kfree_skb(hdev->sent_cmd);
572                 hdev->sent_cmd = NULL;
573         }
574
575         /* After this point our queues are empty
576          * and no tasks are scheduled. */
577         hdev->close(hdev);
578
579         /* Clear flags */
580         hdev->flags = 0;
581
582         hci_req_unlock(hdev);
583
584         hci_dev_put(hdev);
585         return 0;
586 }
587
588 int hci_dev_close(__u16 dev)
589 {
590         struct hci_dev *hdev;
591         int err;
592
593         if (!(hdev = hci_dev_get(dev)))
594                 return -ENODEV;
595         err = hci_dev_do_close(hdev);
596         hci_dev_put(hdev);
597         return err;
598 }
599
600 int hci_dev_reset(__u16 dev)
601 {
602         struct hci_dev *hdev;
603         int ret = 0;
604
605         if (!(hdev = hci_dev_get(dev)))
606                 return -ENODEV;
607
608         hci_req_lock(hdev);
609         tasklet_disable(&hdev->tx_task);
610
611         if (!test_bit(HCI_UP, &hdev->flags))
612                 goto done;
613
614         /* Drop queues */
615         skb_queue_purge(&hdev->rx_q);
616         skb_queue_purge(&hdev->cmd_q);
617
618         hci_dev_lock_bh(hdev);
619         inquiry_cache_flush(hdev);
620         hci_conn_hash_flush(hdev);
621         hci_dev_unlock_bh(hdev);
622
623         if (hdev->flush)
624                 hdev->flush(hdev);
625
626         atomic_set(&hdev->cmd_cnt, 1);
627         hdev->acl_cnt = 0; hdev->sco_cnt = 0;
628
629         if (!test_bit(HCI_RAW, &hdev->flags))
630                 ret = __hci_request(hdev, hci_reset_req, 0,
631                                         msecs_to_jiffies(HCI_INIT_TIMEOUT));
632
633 done:
634         tasklet_enable(&hdev->tx_task);
635         hci_req_unlock(hdev);
636         hci_dev_put(hdev);
637         return ret;
638 }
639
640 int hci_dev_reset_stat(__u16 dev)
641 {
642         struct hci_dev *hdev;
643         int ret = 0;
644
645         if (!(hdev = hci_dev_get(dev)))
646                 return -ENODEV;
647
648         memset(&hdev->stat, 0, sizeof(struct hci_dev_stats));
649
650         hci_dev_put(hdev);
651
652         return ret;
653 }
654
655 int hci_dev_cmd(unsigned int cmd, void __user *arg)
656 {
657         struct hci_dev *hdev;
658         struct hci_dev_req dr;
659         int err = 0;
660
661         if (copy_from_user(&dr, arg, sizeof(dr)))
662                 return -EFAULT;
663
664         if (!(hdev = hci_dev_get(dr.dev_id)))
665                 return -ENODEV;
666
667         switch (cmd) {
668         case HCISETAUTH:
669                 err = hci_request(hdev, hci_auth_req, dr.dev_opt,
670                                         msecs_to_jiffies(HCI_INIT_TIMEOUT));
671                 break;
672
673         case HCISETENCRYPT:
674                 if (!lmp_encrypt_capable(hdev)) {
675                         err = -EOPNOTSUPP;
676                         break;
677                 }
678
679                 if (!test_bit(HCI_AUTH, &hdev->flags)) {
680                         /* Auth must be enabled first */
681                         err = hci_request(hdev, hci_auth_req, dr.dev_opt,
682                                         msecs_to_jiffies(HCI_INIT_TIMEOUT));
683                         if (err)
684                                 break;
685                 }
686
687                 err = hci_request(hdev, hci_encrypt_req, dr.dev_opt,
688                                         msecs_to_jiffies(HCI_INIT_TIMEOUT));
689                 break;
690
691         case HCISETSCAN:
692                 err = hci_request(hdev, hci_scan_req, dr.dev_opt,
693                                         msecs_to_jiffies(HCI_INIT_TIMEOUT));
694                 break;
695
696         case HCISETPTYPE:
697                 hdev->pkt_type = (__u16) dr.dev_opt;
698                 break;
699
700         case HCISETLINKPOL:
701                 hdev->link_policy = (__u16) dr.dev_opt;
702                 break;
703
704         case HCISETLINKMODE:
705                 hdev->link_mode = ((__u16) dr.dev_opt) & (HCI_LM_MASTER | HCI_LM_ACCEPT);
706                 break;
707
708         case HCISETACLMTU:
709                 hdev->acl_mtu  = *((__u16 *)&dr.dev_opt + 1);
710                 hdev->acl_pkts = *((__u16 *)&dr.dev_opt + 0);
711                 break;
712
713         case HCISETSCOMTU:
714                 hdev->sco_mtu  = *((__u16 *)&dr.dev_opt + 1);
715                 hdev->sco_pkts = *((__u16 *)&dr.dev_opt + 0);
716                 break;
717
718         default:
719                 err = -EINVAL;
720                 break;
721         }
722         hci_dev_put(hdev);
723         return err;
724 }
725
726 int hci_get_dev_list(void __user *arg)
727 {
728         struct hci_dev_list_req *dl;
729         struct hci_dev_req *dr;
730         struct list_head *p;
731         int n = 0, size, err;
732         __u16 dev_num;
733
734         if (get_user(dev_num, (__u16 __user *) arg))
735                 return -EFAULT;
736
737         if (!dev_num || dev_num > (PAGE_SIZE * 2) / sizeof(*dr))
738                 return -EINVAL;
739
740         size = sizeof(*dl) + dev_num * sizeof(*dr);
741
742         if (!(dl = kmalloc(size, GFP_KERNEL)))
743                 return -ENOMEM;
744
745         dr = dl->dev_req;
746
747         read_lock_bh(&hci_dev_list_lock);
748         list_for_each(p, &hci_dev_list) {
749                 struct hci_dev *hdev;
750                 hdev = list_entry(p, struct hci_dev, list);
751                 (dr + n)->dev_id  = hdev->id;
752                 (dr + n)->dev_opt = hdev->flags;
753                 if (++n >= dev_num)
754                         break;
755         }
756         read_unlock_bh(&hci_dev_list_lock);
757
758         dl->dev_num = n;
759         size = sizeof(*dl) + n * sizeof(*dr);
760
761         err = copy_to_user(arg, dl, size);
762         kfree(dl);
763
764         return err ? -EFAULT : 0;
765 }
766
767 int hci_get_dev_info(void __user *arg)
768 {
769         struct hci_dev *hdev;
770         struct hci_dev_info di;
771         int err = 0;
772
773         if (copy_from_user(&di, arg, sizeof(di)))
774                 return -EFAULT;
775
776         if (!(hdev = hci_dev_get(di.dev_id)))
777                 return -ENODEV;
778
779         strcpy(di.name, hdev->name);
780         di.bdaddr   = hdev->bdaddr;
781         di.type     = hdev->type;
782         di.flags    = hdev->flags;
783         di.pkt_type = hdev->pkt_type;
784         di.acl_mtu  = hdev->acl_mtu;
785         di.acl_pkts = hdev->acl_pkts;
786         di.sco_mtu  = hdev->sco_mtu;
787         di.sco_pkts = hdev->sco_pkts;
788         di.link_policy = hdev->link_policy;
789         di.link_mode   = hdev->link_mode;
790
791         memcpy(&di.stat, &hdev->stat, sizeof(di.stat));
792         memcpy(&di.features, &hdev->features, sizeof(di.features));
793
794         if (copy_to_user(arg, &di, sizeof(di)))
795                 err = -EFAULT;
796
797         hci_dev_put(hdev);
798
799         return err;
800 }
801
802 /* ---- Interface to HCI drivers ---- */
803
804 /* Alloc HCI device */
805 struct hci_dev *hci_alloc_dev(void)
806 {
807         struct hci_dev *hdev;
808
809         hdev = kzalloc(sizeof(struct hci_dev), GFP_KERNEL);
810         if (!hdev)
811                 return NULL;
812
813         skb_queue_head_init(&hdev->driver_init);
814
815         return hdev;
816 }
817 EXPORT_SYMBOL(hci_alloc_dev);
818
819 /* Free HCI device */
820 void hci_free_dev(struct hci_dev *hdev)
821 {
822         skb_queue_purge(&hdev->driver_init);
823
824         /* will free via device release */
825         put_device(&hdev->dev);
826 }
827 EXPORT_SYMBOL(hci_free_dev);
828
829 /* Register HCI device */
830 int hci_register_dev(struct hci_dev *hdev)
831 {
832         struct list_head *head = &hci_dev_list, *p;
833         int i, id = 0;
834
835         BT_DBG("%p name %s type %d owner %p", hdev, hdev->name, hdev->type, hdev->owner);
836
837         if (!hdev->open || !hdev->close || !hdev->destruct)
838                 return -EINVAL;
839
840         write_lock_bh(&hci_dev_list_lock);
841
842         /* Find first available device id */
843         list_for_each(p, &hci_dev_list) {
844                 if (list_entry(p, struct hci_dev, list)->id != id)
845                         break;
846                 head = p; id++;
847         }
848
849         sprintf(hdev->name, "hci%d", id);
850         hdev->id = id;
851         list_add(&hdev->list, head);
852
853         atomic_set(&hdev->refcnt, 1);
854         spin_lock_init(&hdev->lock);
855
856         hdev->flags = 0;
857         hdev->pkt_type  = (HCI_DM1 | HCI_DH1 | HCI_HV1);
858         hdev->esco_type = (ESCO_HV1);
859         hdev->link_mode = (HCI_LM_ACCEPT);
860
861         hdev->idle_timeout = 0;
862         hdev->sniff_max_interval = 800;
863         hdev->sniff_min_interval = 80;
864
865         tasklet_init(&hdev->cmd_task, hci_cmd_task,(unsigned long) hdev);
866         tasklet_init(&hdev->rx_task, hci_rx_task, (unsigned long) hdev);
867         tasklet_init(&hdev->tx_task, hci_tx_task, (unsigned long) hdev);
868
869         skb_queue_head_init(&hdev->rx_q);
870         skb_queue_head_init(&hdev->cmd_q);
871         skb_queue_head_init(&hdev->raw_q);
872
873         for (i = 0; i < 3; i++)
874                 hdev->reassembly[i] = NULL;
875
876         init_waitqueue_head(&hdev->req_wait_q);
877         init_MUTEX(&hdev->req_lock);
878
879         inquiry_cache_init(hdev);
880
881         hci_conn_hash_init(hdev);
882
883         memset(&hdev->stat, 0, sizeof(struct hci_dev_stats));
884
885         atomic_set(&hdev->promisc, 0);
886
887         write_unlock_bh(&hci_dev_list_lock);
888
889         hci_register_sysfs(hdev);
890
891         hci_notify(hdev, HCI_DEV_REG);
892
893         return id;
894 }
895 EXPORT_SYMBOL(hci_register_dev);
896
897 /* Unregister HCI device */
898 int hci_unregister_dev(struct hci_dev *hdev)
899 {
900         int i;
901
902         BT_DBG("%p name %s type %d", hdev, hdev->name, hdev->type);
903
904         hci_unregister_sysfs(hdev);
905
906         write_lock_bh(&hci_dev_list_lock);
907         list_del(&hdev->list);
908         write_unlock_bh(&hci_dev_list_lock);
909
910         hci_dev_do_close(hdev);
911
912         for (i = 0; i < 3; i++)
913                 kfree_skb(hdev->reassembly[i]);
914
915         hci_notify(hdev, HCI_DEV_UNREG);
916
917         __hci_dev_put(hdev);
918
919         return 0;
920 }
921 EXPORT_SYMBOL(hci_unregister_dev);
922
923 /* Suspend HCI device */
924 int hci_suspend_dev(struct hci_dev *hdev)
925 {
926         hci_notify(hdev, HCI_DEV_SUSPEND);
927         return 0;
928 }
929 EXPORT_SYMBOL(hci_suspend_dev);
930
931 /* Resume HCI device */
932 int hci_resume_dev(struct hci_dev *hdev)
933 {
934         hci_notify(hdev, HCI_DEV_RESUME);
935         return 0;
936 }
937 EXPORT_SYMBOL(hci_resume_dev);
938
939 /* Receive packet type fragment */
940 #define __reassembly(hdev, type)  ((hdev)->reassembly[(type) - 2])
941
942 int hci_recv_fragment(struct hci_dev *hdev, int type, void *data, int count)
943 {
944         if (type < HCI_ACLDATA_PKT || type > HCI_EVENT_PKT)
945                 return -EILSEQ;
946
947         while (count) {
948                 struct sk_buff *skb = __reassembly(hdev, type);
949                 struct { int expect; } *scb;
950                 int len = 0;
951
952                 if (!skb) {
953                         /* Start of the frame */
954
955                         switch (type) {
956                         case HCI_EVENT_PKT:
957                                 if (count >= HCI_EVENT_HDR_SIZE) {
958                                         struct hci_event_hdr *h = data;
959                                         len = HCI_EVENT_HDR_SIZE + h->plen;
960                                 } else
961                                         return -EILSEQ;
962                                 break;
963
964                         case HCI_ACLDATA_PKT:
965                                 if (count >= HCI_ACL_HDR_SIZE) {
966                                         struct hci_acl_hdr *h = data;
967                                         len = HCI_ACL_HDR_SIZE + __le16_to_cpu(h->dlen);
968                                 } else
969                                         return -EILSEQ;
970                                 break;
971
972                         case HCI_SCODATA_PKT:
973                                 if (count >= HCI_SCO_HDR_SIZE) {
974                                         struct hci_sco_hdr *h = data;
975                                         len = HCI_SCO_HDR_SIZE + h->dlen;
976                                 } else
977                                         return -EILSEQ;
978                                 break;
979                         }
980
981                         skb = bt_skb_alloc(len, GFP_ATOMIC);
982                         if (!skb) {
983                                 BT_ERR("%s no memory for packet", hdev->name);
984                                 return -ENOMEM;
985                         }
986
987                         skb->dev = (void *) hdev;
988                         bt_cb(skb)->pkt_type = type;
989
990                         __reassembly(hdev, type) = skb;
991
992                         scb = (void *) skb->cb;
993                         scb->expect = len;
994                 } else {
995                         /* Continuation */
996
997                         scb = (void *) skb->cb;
998                         len = scb->expect;
999                 }
1000
1001                 len = min(len, count);
1002
1003                 memcpy(skb_put(skb, len), data, len);
1004
1005                 scb->expect -= len;
1006
1007                 if (scb->expect == 0) {
1008                         /* Complete frame */
1009
1010                         __reassembly(hdev, type) = NULL;
1011
1012                         bt_cb(skb)->pkt_type = type;
1013                         hci_recv_frame(skb);
1014                 }
1015
1016                 count -= len; data += len;
1017         }
1018
1019         return 0;
1020 }
1021 EXPORT_SYMBOL(hci_recv_fragment);
1022
1023 /* ---- Interface to upper protocols ---- */
1024
1025 /* Register/Unregister protocols.
1026  * hci_task_lock is used to ensure that no tasks are running. */
1027 int hci_register_proto(struct hci_proto *hp)
1028 {
1029         int err = 0;
1030
1031         BT_DBG("%p name %s id %d", hp, hp->name, hp->id);
1032
1033         if (hp->id >= HCI_MAX_PROTO)
1034                 return -EINVAL;
1035
1036         write_lock_bh(&hci_task_lock);
1037
1038         if (!hci_proto[hp->id])
1039                 hci_proto[hp->id] = hp;
1040         else
1041                 err = -EEXIST;
1042
1043         write_unlock_bh(&hci_task_lock);
1044
1045         return err;
1046 }
1047 EXPORT_SYMBOL(hci_register_proto);
1048
1049 int hci_unregister_proto(struct hci_proto *hp)
1050 {
1051         int err = 0;
1052
1053         BT_DBG("%p name %s id %d", hp, hp->name, hp->id);
1054
1055         if (hp->id >= HCI_MAX_PROTO)
1056                 return -EINVAL;
1057
1058         write_lock_bh(&hci_task_lock);
1059
1060         if (hci_proto[hp->id])
1061                 hci_proto[hp->id] = NULL;
1062         else
1063                 err = -ENOENT;
1064
1065         write_unlock_bh(&hci_task_lock);
1066
1067         return err;
1068 }
1069 EXPORT_SYMBOL(hci_unregister_proto);
1070
1071 int hci_register_cb(struct hci_cb *cb)
1072 {
1073         BT_DBG("%p name %s", cb, cb->name);
1074
1075         write_lock_bh(&hci_cb_list_lock);
1076         list_add(&cb->list, &hci_cb_list);
1077         write_unlock_bh(&hci_cb_list_lock);
1078
1079         return 0;
1080 }
1081 EXPORT_SYMBOL(hci_register_cb);
1082
1083 int hci_unregister_cb(struct hci_cb *cb)
1084 {
1085         BT_DBG("%p name %s", cb, cb->name);
1086
1087         write_lock_bh(&hci_cb_list_lock);
1088         list_del(&cb->list);
1089         write_unlock_bh(&hci_cb_list_lock);
1090
1091         return 0;
1092 }
1093 EXPORT_SYMBOL(hci_unregister_cb);
1094
1095 static int hci_send_frame(struct sk_buff *skb)
1096 {
1097         struct hci_dev *hdev = (struct hci_dev *) skb->dev;
1098
1099         if (!hdev) {
1100                 kfree_skb(skb);
1101                 return -ENODEV;
1102         }
1103
1104         BT_DBG("%s type %d len %d", hdev->name, bt_cb(skb)->pkt_type, skb->len);
1105
1106         if (atomic_read(&hdev->promisc)) {
1107                 /* Time stamp */
1108                 __net_timestamp(skb);
1109
1110                 hci_send_to_sock(hdev, skb);
1111         }
1112
1113         /* Get rid of skb owner, prior to sending to the driver. */
1114         skb_orphan(skb);
1115
1116         return hdev->send(skb);
1117 }
1118
1119 /* Send HCI command */
1120 int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen, void *param)
1121 {
1122         int len = HCI_COMMAND_HDR_SIZE + plen;
1123         struct hci_command_hdr *hdr;
1124         struct sk_buff *skb;
1125
1126         BT_DBG("%s opcode 0x%x plen %d", hdev->name, opcode, plen);
1127
1128         skb = bt_skb_alloc(len, GFP_ATOMIC);
1129         if (!skb) {
1130                 BT_ERR("%s no memory for command", hdev->name);
1131                 return -ENOMEM;
1132         }
1133
1134         hdr = (struct hci_command_hdr *) skb_put(skb, HCI_COMMAND_HDR_SIZE);
1135         hdr->opcode = cpu_to_le16(opcode);
1136         hdr->plen   = plen;
1137
1138         if (plen)
1139                 memcpy(skb_put(skb, plen), param, plen);
1140
1141         BT_DBG("skb len %d", skb->len);
1142
1143         bt_cb(skb)->pkt_type = HCI_COMMAND_PKT;
1144         skb->dev = (void *) hdev;
1145         skb_queue_tail(&hdev->cmd_q, skb);
1146         hci_sched_cmd(hdev);
1147
1148         return 0;
1149 }
1150
1151 /* Get data from the previously sent command */
1152 void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 opcode)
1153 {
1154         struct hci_command_hdr *hdr;
1155
1156         if (!hdev->sent_cmd)
1157                 return NULL;
1158
1159         hdr = (void *) hdev->sent_cmd->data;
1160
1161         if (hdr->opcode != cpu_to_le16(opcode))
1162                 return NULL;
1163
1164         BT_DBG("%s opcode 0x%x", hdev->name, opcode);
1165
1166         return hdev->sent_cmd->data + HCI_COMMAND_HDR_SIZE;
1167 }
1168
1169 /* Send ACL data */
1170 static void hci_add_acl_hdr(struct sk_buff *skb, __u16 handle, __u16 flags)
1171 {
1172         struct hci_acl_hdr *hdr;
1173         int len = skb->len;
1174
1175         skb_push(skb, HCI_ACL_HDR_SIZE);
1176         skb_reset_transport_header(skb);
1177         hdr = (struct hci_acl_hdr *)skb_transport_header(skb);
1178         hdr->handle = cpu_to_le16(hci_handle_pack(handle, flags));
1179         hdr->dlen   = cpu_to_le16(len);
1180 }
1181
1182 int hci_send_acl(struct hci_conn *conn, struct sk_buff *skb, __u16 flags)
1183 {
1184         struct hci_dev *hdev = conn->hdev;
1185         struct sk_buff *list;
1186
1187         BT_DBG("%s conn %p flags 0x%x", hdev->name, conn, flags);
1188
1189         skb->dev = (void *) hdev;
1190         bt_cb(skb)->pkt_type = HCI_ACLDATA_PKT;
1191         hci_add_acl_hdr(skb, conn->handle, flags | ACL_START);
1192
1193         if (!(list = skb_shinfo(skb)->frag_list)) {
1194                 /* Non fragmented */
1195                 BT_DBG("%s nonfrag skb %p len %d", hdev->name, skb, skb->len);
1196
1197                 skb_queue_tail(&conn->data_q, skb);
1198         } else {
1199                 /* Fragmented */
1200                 BT_DBG("%s frag %p len %d", hdev->name, skb, skb->len);
1201
1202                 skb_shinfo(skb)->frag_list = NULL;
1203
1204                 /* Queue all fragments atomically */
1205                 spin_lock_bh(&conn->data_q.lock);
1206
1207                 __skb_queue_tail(&conn->data_q, skb);
1208                 do {
1209                         skb = list; list = list->next;
1210
1211                         skb->dev = (void *) hdev;
1212                         bt_cb(skb)->pkt_type = HCI_ACLDATA_PKT;
1213                         hci_add_acl_hdr(skb, conn->handle, flags | ACL_CONT);
1214
1215                         BT_DBG("%s frag %p len %d", hdev->name, skb, skb->len);
1216
1217                         __skb_queue_tail(&conn->data_q, skb);
1218                 } while (list);
1219
1220                 spin_unlock_bh(&conn->data_q.lock);
1221         }
1222
1223         hci_sched_tx(hdev);
1224         return 0;
1225 }
1226 EXPORT_SYMBOL(hci_send_acl);
1227
1228 /* Send SCO data */
1229 int hci_send_sco(struct hci_conn *conn, struct sk_buff *skb)
1230 {
1231         struct hci_dev *hdev = conn->hdev;
1232         struct hci_sco_hdr hdr;
1233
1234         BT_DBG("%s len %d", hdev->name, skb->len);
1235
1236         if (skb->len > hdev->sco_mtu) {
1237                 kfree_skb(skb);
1238                 return -EINVAL;
1239         }
1240
1241         hdr.handle = cpu_to_le16(conn->handle);
1242         hdr.dlen   = skb->len;
1243
1244         skb_push(skb, HCI_SCO_HDR_SIZE);
1245         skb_reset_transport_header(skb);
1246         memcpy(skb_transport_header(skb), &hdr, HCI_SCO_HDR_SIZE);
1247
1248         skb->dev = (void *) hdev;
1249         bt_cb(skb)->pkt_type = HCI_SCODATA_PKT;
1250         skb_queue_tail(&conn->data_q, skb);
1251         hci_sched_tx(hdev);
1252         return 0;
1253 }
1254 EXPORT_SYMBOL(hci_send_sco);
1255
1256 /* ---- HCI TX task (outgoing data) ---- */
1257
1258 /* HCI Connection scheduler */
1259 static inline struct hci_conn *hci_low_sent(struct hci_dev *hdev, __u8 type, int *quote)
1260 {
1261         struct hci_conn_hash *h = &hdev->conn_hash;
1262         struct hci_conn *conn = NULL;
1263         int num = 0, min = ~0;
1264         struct list_head *p;
1265
1266         /* We don't have to lock device here. Connections are always
1267          * added and removed with TX task disabled. */
1268         list_for_each(p, &h->list) {
1269                 struct hci_conn *c;
1270                 c = list_entry(p, struct hci_conn, list);
1271
1272                 if (c->type != type || c->state != BT_CONNECTED
1273                                 || skb_queue_empty(&c->data_q))
1274                         continue;
1275                 num++;
1276
1277                 if (c->sent < min) {
1278                         min  = c->sent;
1279                         conn = c;
1280                 }
1281         }
1282
1283         if (conn) {
1284                 int cnt = (type == ACL_LINK ? hdev->acl_cnt : hdev->sco_cnt);
1285                 int q = cnt / num;
1286                 *quote = q ? q : 1;
1287         } else
1288                 *quote = 0;
1289
1290         BT_DBG("conn %p quote %d", conn, *quote);
1291         return conn;
1292 }
1293
1294 static inline void hci_acl_tx_to(struct hci_dev *hdev)
1295 {
1296         struct hci_conn_hash *h = &hdev->conn_hash;
1297         struct list_head *p;
1298         struct hci_conn  *c;
1299
1300         BT_ERR("%s ACL tx timeout", hdev->name);
1301
1302         /* Kill stalled connections */
1303         list_for_each(p, &h->list) {
1304                 c = list_entry(p, struct hci_conn, list);
1305                 if (c->type == ACL_LINK && c->sent) {
1306                         BT_ERR("%s killing stalled ACL connection %s",
1307                                 hdev->name, batostr(&c->dst));
1308                         hci_acl_disconn(c, 0x13);
1309                 }
1310         }
1311 }
1312
1313 static inline void hci_sched_acl(struct hci_dev *hdev)
1314 {
1315         struct hci_conn *conn;
1316         struct sk_buff *skb;
1317         int quote;
1318
1319         BT_DBG("%s", hdev->name);
1320
1321         if (!test_bit(HCI_RAW, &hdev->flags)) {
1322                 /* ACL tx timeout must be longer than maximum
1323                  * link supervision timeout (40.9 seconds) */
1324                 if (!hdev->acl_cnt && (jiffies - hdev->acl_last_tx) > (HZ * 45))
1325                         hci_acl_tx_to(hdev);
1326         }
1327
1328         while (hdev->acl_cnt && (conn = hci_low_sent(hdev, ACL_LINK, &quote))) {
1329                 while (quote-- && (skb = skb_dequeue(&conn->data_q))) {
1330                         BT_DBG("skb %p len %d", skb, skb->len);
1331
1332                         hci_conn_enter_active_mode(conn);
1333
1334                         hci_send_frame(skb);
1335                         hdev->acl_last_tx = jiffies;
1336
1337                         hdev->acl_cnt--;
1338                         conn->sent++;
1339                 }
1340         }
1341 }
1342
1343 /* Schedule SCO */
1344 static inline void hci_sched_sco(struct hci_dev *hdev)
1345 {
1346         struct hci_conn *conn;
1347         struct sk_buff *skb;
1348         int quote;
1349
1350         BT_DBG("%s", hdev->name);
1351
1352         while (hdev->sco_cnt && (conn = hci_low_sent(hdev, SCO_LINK, &quote))) {
1353                 while (quote-- && (skb = skb_dequeue(&conn->data_q))) {
1354                         BT_DBG("skb %p len %d", skb, skb->len);
1355                         hci_send_frame(skb);
1356
1357                         conn->sent++;
1358                         if (conn->sent == ~0)
1359                                 conn->sent = 0;
1360                 }
1361         }
1362 }
1363
1364 static inline void hci_sched_esco(struct hci_dev *hdev)
1365 {
1366         struct hci_conn *conn;
1367         struct sk_buff *skb;
1368         int quote;
1369
1370         BT_DBG("%s", hdev->name);
1371
1372         while (hdev->sco_cnt && (conn = hci_low_sent(hdev, ESCO_LINK, &quote))) {
1373                 while (quote-- && (skb = skb_dequeue(&conn->data_q))) {
1374                         BT_DBG("skb %p len %d", skb, skb->len);
1375                         hci_send_frame(skb);
1376
1377                         conn->sent++;
1378                         if (conn->sent == ~0)
1379                                 conn->sent = 0;
1380                 }
1381         }
1382 }
1383
1384 static void hci_tx_task(unsigned long arg)
1385 {
1386         struct hci_dev *hdev = (struct hci_dev *) arg;
1387         struct sk_buff *skb;
1388
1389         read_lock(&hci_task_lock);
1390
1391         BT_DBG("%s acl %d sco %d", hdev->name, hdev->acl_cnt, hdev->sco_cnt);
1392
1393         /* Schedule queues and send stuff to HCI driver */
1394
1395         hci_sched_acl(hdev);
1396
1397         hci_sched_sco(hdev);
1398
1399         hci_sched_esco(hdev);
1400
1401         /* Send next queued raw (unknown type) packet */
1402         while ((skb = skb_dequeue(&hdev->raw_q)))
1403                 hci_send_frame(skb);
1404
1405         read_unlock(&hci_task_lock);
1406 }
1407
1408 /* ----- HCI RX task (incoming data proccessing) ----- */
1409
1410 /* ACL data packet */
1411 static inline void hci_acldata_packet(struct hci_dev *hdev, struct sk_buff *skb)
1412 {
1413         struct hci_acl_hdr *hdr = (void *) skb->data;
1414         struct hci_conn *conn;
1415         __u16 handle, flags;
1416
1417         skb_pull(skb, HCI_ACL_HDR_SIZE);
1418
1419         handle = __le16_to_cpu(hdr->handle);
1420         flags  = hci_flags(handle);
1421         handle = hci_handle(handle);
1422
1423         BT_DBG("%s len %d handle 0x%x flags 0x%x", hdev->name, skb->len, handle, flags);
1424
1425         hdev->stat.acl_rx++;
1426
1427         hci_dev_lock(hdev);
1428         conn = hci_conn_hash_lookup_handle(hdev, handle);
1429         hci_dev_unlock(hdev);
1430
1431         if (conn) {
1432                 register struct hci_proto *hp;
1433
1434                 hci_conn_enter_active_mode(conn);
1435
1436                 /* Send to upper protocol */
1437                 if ((hp = hci_proto[HCI_PROTO_L2CAP]) && hp->recv_acldata) {
1438                         hp->recv_acldata(conn, skb, flags);
1439                         return;
1440                 }
1441         } else {
1442                 BT_ERR("%s ACL packet for unknown connection handle %d",
1443                         hdev->name, handle);
1444         }
1445
1446         kfree_skb(skb);
1447 }
1448
1449 /* SCO data packet */
1450 static inline void hci_scodata_packet(struct hci_dev *hdev, struct sk_buff *skb)
1451 {
1452         struct hci_sco_hdr *hdr = (void *) skb->data;
1453         struct hci_conn *conn;
1454         __u16 handle;
1455
1456         skb_pull(skb, HCI_SCO_HDR_SIZE);
1457
1458         handle = __le16_to_cpu(hdr->handle);
1459
1460         BT_DBG("%s len %d handle 0x%x", hdev->name, skb->len, handle);
1461
1462         hdev->stat.sco_rx++;
1463
1464         hci_dev_lock(hdev);
1465         conn = hci_conn_hash_lookup_handle(hdev, handle);
1466         hci_dev_unlock(hdev);
1467
1468         if (conn) {
1469                 register struct hci_proto *hp;
1470
1471                 /* Send to upper protocol */
1472                 if ((hp = hci_proto[HCI_PROTO_SCO]) && hp->recv_scodata) {
1473                         hp->recv_scodata(conn, skb);
1474                         return;
1475                 }
1476         } else {
1477                 BT_ERR("%s SCO packet for unknown connection handle %d",
1478                         hdev->name, handle);
1479         }
1480
1481         kfree_skb(skb);
1482 }
1483
1484 static void hci_rx_task(unsigned long arg)
1485 {
1486         struct hci_dev *hdev = (struct hci_dev *) arg;
1487         struct sk_buff *skb;
1488
1489         BT_DBG("%s", hdev->name);
1490
1491         read_lock(&hci_task_lock);
1492
1493         while ((skb = skb_dequeue(&hdev->rx_q))) {
1494                 if (atomic_read(&hdev->promisc)) {
1495                         /* Send copy to the sockets */
1496                         hci_send_to_sock(hdev, skb);
1497                 }
1498
1499                 if (test_bit(HCI_RAW, &hdev->flags)) {
1500                         kfree_skb(skb);
1501                         continue;
1502                 }
1503
1504                 if (test_bit(HCI_INIT, &hdev->flags)) {
1505                         /* Don't process data packets in this states. */
1506                         switch (bt_cb(skb)->pkt_type) {
1507                         case HCI_ACLDATA_PKT:
1508                         case HCI_SCODATA_PKT:
1509                                 kfree_skb(skb);
1510                                 continue;
1511                         }
1512                 }
1513
1514                 /* Process frame */
1515                 switch (bt_cb(skb)->pkt_type) {
1516                 case HCI_EVENT_PKT:
1517                         hci_event_packet(hdev, skb);
1518                         break;
1519
1520                 case HCI_ACLDATA_PKT:
1521                         BT_DBG("%s ACL data packet", hdev->name);
1522                         hci_acldata_packet(hdev, skb);
1523                         break;
1524
1525                 case HCI_SCODATA_PKT:
1526                         BT_DBG("%s SCO data packet", hdev->name);
1527                         hci_scodata_packet(hdev, skb);
1528                         break;
1529
1530                 default:
1531                         kfree_skb(skb);
1532                         break;
1533                 }
1534         }
1535
1536         read_unlock(&hci_task_lock);
1537 }
1538
1539 static void hci_cmd_task(unsigned long arg)
1540 {
1541         struct hci_dev *hdev = (struct hci_dev *) arg;
1542         struct sk_buff *skb;
1543
1544         BT_DBG("%s cmd %d", hdev->name, atomic_read(&hdev->cmd_cnt));
1545
1546         if (!atomic_read(&hdev->cmd_cnt) && (jiffies - hdev->cmd_last_tx) > HZ) {
1547                 BT_ERR("%s command tx timeout", hdev->name);
1548                 atomic_set(&hdev->cmd_cnt, 1);
1549         }
1550
1551         /* Send queued commands */
1552         if (atomic_read(&hdev->cmd_cnt) && (skb = skb_dequeue(&hdev->cmd_q))) {
1553                 if (hdev->sent_cmd)
1554                         kfree_skb(hdev->sent_cmd);
1555
1556                 if ((hdev->sent_cmd = skb_clone(skb, GFP_ATOMIC))) {
1557                         atomic_dec(&hdev->cmd_cnt);
1558                         hci_send_frame(skb);
1559                         hdev->cmd_last_tx = jiffies;
1560                 } else {
1561                         skb_queue_head(&hdev->cmd_q, skb);
1562                         hci_sched_cmd(hdev);
1563                 }
1564         }
1565 }