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