xref: /linux/net/bluetooth/hci_core.c (revision 12871a0bd67dd4db4418e1daafcd46e9d329ef10)
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/jiffies.h>
28 #include <linux/module.h>
29 #include <linux/kmod.h>
30 
31 #include <linux/types.h>
32 #include <linux/errno.h>
33 #include <linux/kernel.h>
34 #include <linux/sched.h>
35 #include <linux/slab.h>
36 #include <linux/poll.h>
37 #include <linux/fcntl.h>
38 #include <linux/init.h>
39 #include <linux/skbuff.h>
40 #include <linux/workqueue.h>
41 #include <linux/interrupt.h>
42 #include <linux/notifier.h>
43 #include <linux/rfkill.h>
44 #include <linux/timer.h>
45 #include <net/sock.h>
46 
47 #include <asm/system.h>
48 #include <linux/uaccess.h>
49 #include <asm/unaligned.h>
50 
51 #include <net/bluetooth/bluetooth.h>
52 #include <net/bluetooth/hci_core.h>
53 
54 #define AUTO_OFF_TIMEOUT 2000
55 
56 static void hci_cmd_task(unsigned long arg);
57 static void hci_rx_task(unsigned long arg);
58 static void hci_tx_task(unsigned long arg);
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, __u16 cmd, int result)
97 {
98 	BT_DBG("%s command 0x%04x result 0x%2.2x", hdev->name, cmd, result);
99 
100 	/* If this is the init phase check if the completed command matches
101 	 * the last init command, and if not just return.
102 	 */
103 	if (test_bit(HCI_INIT, &hdev->flags) && hdev->init_last_cmd != cmd)
104 		return;
105 
106 	if (hdev->req_status == HCI_REQ_PEND) {
107 		hdev->req_result = result;
108 		hdev->req_status = HCI_REQ_DONE;
109 		wake_up_interruptible(&hdev->req_wait_q);
110 	}
111 }
112 
113 static void hci_req_cancel(struct hci_dev *hdev, int err)
114 {
115 	BT_DBG("%s err 0x%2.2x", hdev->name, err);
116 
117 	if (hdev->req_status == HCI_REQ_PEND) {
118 		hdev->req_result = err;
119 		hdev->req_status = HCI_REQ_CANCELED;
120 		wake_up_interruptible(&hdev->req_wait_q);
121 	}
122 }
123 
124 /* Execute request and wait for completion. */
125 static int __hci_request(struct hci_dev *hdev, void (*req)(struct hci_dev *hdev, unsigned long opt),
126 					unsigned long opt, __u32 timeout)
127 {
128 	DECLARE_WAITQUEUE(wait, current);
129 	int err = 0;
130 
131 	BT_DBG("%s start", hdev->name);
132 
133 	hdev->req_status = HCI_REQ_PEND;
134 
135 	add_wait_queue(&hdev->req_wait_q, &wait);
136 	set_current_state(TASK_INTERRUPTIBLE);
137 
138 	req(hdev, opt);
139 	schedule_timeout(timeout);
140 
141 	remove_wait_queue(&hdev->req_wait_q, &wait);
142 
143 	if (signal_pending(current))
144 		return -EINTR;
145 
146 	switch (hdev->req_status) {
147 	case HCI_REQ_DONE:
148 		err = -bt_err(hdev->req_result);
149 		break;
150 
151 	case HCI_REQ_CANCELED:
152 		err = -hdev->req_result;
153 		break;
154 
155 	default:
156 		err = -ETIMEDOUT;
157 		break;
158 	}
159 
160 	hdev->req_status = hdev->req_result = 0;
161 
162 	BT_DBG("%s end: err %d", hdev->name, err);
163 
164 	return err;
165 }
166 
167 static inline int hci_request(struct hci_dev *hdev, void (*req)(struct hci_dev *hdev, unsigned long opt),
168 					unsigned long opt, __u32 timeout)
169 {
170 	int ret;
171 
172 	if (!test_bit(HCI_UP, &hdev->flags))
173 		return -ENETDOWN;
174 
175 	/* Serialize all requests */
176 	hci_req_lock(hdev);
177 	ret = __hci_request(hdev, req, opt, timeout);
178 	hci_req_unlock(hdev);
179 
180 	return ret;
181 }
182 
183 static void hci_reset_req(struct hci_dev *hdev, unsigned long opt)
184 {
185 	BT_DBG("%s %ld", hdev->name, opt);
186 
187 	/* Reset device */
188 	set_bit(HCI_RESET, &hdev->flags);
189 	hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
190 }
191 
192 static void hci_init_req(struct hci_dev *hdev, unsigned long opt)
193 {
194 	struct hci_cp_delete_stored_link_key cp;
195 	struct sk_buff *skb;
196 	__le16 param;
197 	__u8 flt_type;
198 
199 	BT_DBG("%s %ld", hdev->name, opt);
200 
201 	/* Driver initialization */
202 
203 	/* Special commands */
204 	while ((skb = skb_dequeue(&hdev->driver_init))) {
205 		bt_cb(skb)->pkt_type = HCI_COMMAND_PKT;
206 		skb->dev = (void *) hdev;
207 
208 		skb_queue_tail(&hdev->cmd_q, skb);
209 		tasklet_schedule(&hdev->cmd_task);
210 	}
211 	skb_queue_purge(&hdev->driver_init);
212 
213 	/* Mandatory initialization */
214 
215 	/* Reset */
216 	if (!test_bit(HCI_QUIRK_NO_RESET, &hdev->quirks)) {
217 			set_bit(HCI_RESET, &hdev->flags);
218 			hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
219 	}
220 
221 	/* Read Local Supported Features */
222 	hci_send_cmd(hdev, HCI_OP_READ_LOCAL_FEATURES, 0, NULL);
223 
224 	/* Read Local Version */
225 	hci_send_cmd(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL);
226 
227 	/* Read Buffer Size (ACL mtu, max pkt, etc.) */
228 	hci_send_cmd(hdev, HCI_OP_READ_BUFFER_SIZE, 0, NULL);
229 
230 #if 0
231 	/* Host buffer size */
232 	{
233 		struct hci_cp_host_buffer_size cp;
234 		cp.acl_mtu = cpu_to_le16(HCI_MAX_ACL_SIZE);
235 		cp.sco_mtu = HCI_MAX_SCO_SIZE;
236 		cp.acl_max_pkt = cpu_to_le16(0xffff);
237 		cp.sco_max_pkt = cpu_to_le16(0xffff);
238 		hci_send_cmd(hdev, HCI_OP_HOST_BUFFER_SIZE, sizeof(cp), &cp);
239 	}
240 #endif
241 
242 	/* Read BD Address */
243 	hci_send_cmd(hdev, HCI_OP_READ_BD_ADDR, 0, NULL);
244 
245 	/* Read Class of Device */
246 	hci_send_cmd(hdev, HCI_OP_READ_CLASS_OF_DEV, 0, NULL);
247 
248 	/* Read Local Name */
249 	hci_send_cmd(hdev, HCI_OP_READ_LOCAL_NAME, 0, NULL);
250 
251 	/* Read Voice Setting */
252 	hci_send_cmd(hdev, HCI_OP_READ_VOICE_SETTING, 0, NULL);
253 
254 	/* Optional initialization */
255 
256 	/* Clear Event Filters */
257 	flt_type = HCI_FLT_CLEAR_ALL;
258 	hci_send_cmd(hdev, HCI_OP_SET_EVENT_FLT, 1, &flt_type);
259 
260 	/* Connection accept timeout ~20 secs */
261 	param = cpu_to_le16(0x7d00);
262 	hci_send_cmd(hdev, HCI_OP_WRITE_CA_TIMEOUT, 2, &param);
263 
264 	bacpy(&cp.bdaddr, BDADDR_ANY);
265 	cp.delete_all = 1;
266 	hci_send_cmd(hdev, HCI_OP_DELETE_STORED_LINK_KEY, sizeof(cp), &cp);
267 }
268 
269 static void hci_le_init_req(struct hci_dev *hdev, unsigned long opt)
270 {
271 	BT_DBG("%s", hdev->name);
272 
273 	/* Read LE buffer size */
274 	hci_send_cmd(hdev, HCI_OP_LE_READ_BUFFER_SIZE, 0, NULL);
275 }
276 
277 static void hci_scan_req(struct hci_dev *hdev, unsigned long opt)
278 {
279 	__u8 scan = opt;
280 
281 	BT_DBG("%s %x", hdev->name, scan);
282 
283 	/* Inquiry and Page scans */
284 	hci_send_cmd(hdev, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
285 }
286 
287 static void hci_auth_req(struct hci_dev *hdev, unsigned long opt)
288 {
289 	__u8 auth = opt;
290 
291 	BT_DBG("%s %x", hdev->name, auth);
292 
293 	/* Authentication */
294 	hci_send_cmd(hdev, HCI_OP_WRITE_AUTH_ENABLE, 1, &auth);
295 }
296 
297 static void hci_encrypt_req(struct hci_dev *hdev, unsigned long opt)
298 {
299 	__u8 encrypt = opt;
300 
301 	BT_DBG("%s %x", hdev->name, encrypt);
302 
303 	/* Encryption */
304 	hci_send_cmd(hdev, HCI_OP_WRITE_ENCRYPT_MODE, 1, &encrypt);
305 }
306 
307 static void hci_linkpol_req(struct hci_dev *hdev, unsigned long opt)
308 {
309 	__le16 policy = cpu_to_le16(opt);
310 
311 	BT_DBG("%s %x", hdev->name, policy);
312 
313 	/* Default link policy */
314 	hci_send_cmd(hdev, HCI_OP_WRITE_DEF_LINK_POLICY, 2, &policy);
315 }
316 
317 /* Get HCI device by index.
318  * Device is held on return. */
319 struct hci_dev *hci_dev_get(int index)
320 {
321 	struct hci_dev *hdev = NULL;
322 	struct list_head *p;
323 
324 	BT_DBG("%d", index);
325 
326 	if (index < 0)
327 		return NULL;
328 
329 	read_lock(&hci_dev_list_lock);
330 	list_for_each(p, &hci_dev_list) {
331 		struct hci_dev *d = list_entry(p, struct hci_dev, list);
332 		if (d->id == index) {
333 			hdev = hci_dev_hold(d);
334 			break;
335 		}
336 	}
337 	read_unlock(&hci_dev_list_lock);
338 	return hdev;
339 }
340 
341 /* ---- Inquiry support ---- */
342 static void inquiry_cache_flush(struct hci_dev *hdev)
343 {
344 	struct inquiry_cache *cache = &hdev->inq_cache;
345 	struct inquiry_entry *next  = cache->list, *e;
346 
347 	BT_DBG("cache %p", cache);
348 
349 	cache->list = NULL;
350 	while ((e = next)) {
351 		next = e->next;
352 		kfree(e);
353 	}
354 }
355 
356 struct inquiry_entry *hci_inquiry_cache_lookup(struct hci_dev *hdev, bdaddr_t *bdaddr)
357 {
358 	struct inquiry_cache *cache = &hdev->inq_cache;
359 	struct inquiry_entry *e;
360 
361 	BT_DBG("cache %p, %s", cache, batostr(bdaddr));
362 
363 	for (e = cache->list; e; e = e->next)
364 		if (!bacmp(&e->data.bdaddr, bdaddr))
365 			break;
366 	return e;
367 }
368 
369 void hci_inquiry_cache_update(struct hci_dev *hdev, struct inquiry_data *data)
370 {
371 	struct inquiry_cache *cache = &hdev->inq_cache;
372 	struct inquiry_entry *ie;
373 
374 	BT_DBG("cache %p, %s", cache, batostr(&data->bdaddr));
375 
376 	ie = hci_inquiry_cache_lookup(hdev, &data->bdaddr);
377 	if (!ie) {
378 		/* Entry not in the cache. Add new one. */
379 		ie = kzalloc(sizeof(struct inquiry_entry), GFP_ATOMIC);
380 		if (!ie)
381 			return;
382 
383 		ie->next = cache->list;
384 		cache->list = ie;
385 	}
386 
387 	memcpy(&ie->data, data, sizeof(*data));
388 	ie->timestamp = jiffies;
389 	cache->timestamp = jiffies;
390 }
391 
392 static int inquiry_cache_dump(struct hci_dev *hdev, int num, __u8 *buf)
393 {
394 	struct inquiry_cache *cache = &hdev->inq_cache;
395 	struct inquiry_info *info = (struct inquiry_info *) buf;
396 	struct inquiry_entry *e;
397 	int copied = 0;
398 
399 	for (e = cache->list; e && copied < num; e = e->next, copied++) {
400 		struct inquiry_data *data = &e->data;
401 		bacpy(&info->bdaddr, &data->bdaddr);
402 		info->pscan_rep_mode	= data->pscan_rep_mode;
403 		info->pscan_period_mode	= data->pscan_period_mode;
404 		info->pscan_mode	= data->pscan_mode;
405 		memcpy(info->dev_class, data->dev_class, 3);
406 		info->clock_offset	= data->clock_offset;
407 		info++;
408 	}
409 
410 	BT_DBG("cache %p, copied %d", cache, copied);
411 	return copied;
412 }
413 
414 static void hci_inq_req(struct hci_dev *hdev, unsigned long opt)
415 {
416 	struct hci_inquiry_req *ir = (struct hci_inquiry_req *) opt;
417 	struct hci_cp_inquiry cp;
418 
419 	BT_DBG("%s", hdev->name);
420 
421 	if (test_bit(HCI_INQUIRY, &hdev->flags))
422 		return;
423 
424 	/* Start Inquiry */
425 	memcpy(&cp.lap, &ir->lap, 3);
426 	cp.length  = ir->length;
427 	cp.num_rsp = ir->num_rsp;
428 	hci_send_cmd(hdev, HCI_OP_INQUIRY, sizeof(cp), &cp);
429 }
430 
431 int hci_inquiry(void __user *arg)
432 {
433 	__u8 __user *ptr = arg;
434 	struct hci_inquiry_req ir;
435 	struct hci_dev *hdev;
436 	int err = 0, do_inquiry = 0, max_rsp;
437 	long timeo;
438 	__u8 *buf;
439 
440 	if (copy_from_user(&ir, ptr, sizeof(ir)))
441 		return -EFAULT;
442 
443 	hdev = hci_dev_get(ir.dev_id);
444 	if (!hdev)
445 		return -ENODEV;
446 
447 	hci_dev_lock_bh(hdev);
448 	if (inquiry_cache_age(hdev) > INQUIRY_CACHE_AGE_MAX ||
449 				inquiry_cache_empty(hdev) ||
450 				ir.flags & IREQ_CACHE_FLUSH) {
451 		inquiry_cache_flush(hdev);
452 		do_inquiry = 1;
453 	}
454 	hci_dev_unlock_bh(hdev);
455 
456 	timeo = ir.length * msecs_to_jiffies(2000);
457 
458 	if (do_inquiry) {
459 		err = hci_request(hdev, hci_inq_req, (unsigned long)&ir, timeo);
460 		if (err < 0)
461 			goto done;
462 	}
463 
464 	/* for unlimited number of responses we will use buffer with 255 entries */
465 	max_rsp = (ir.num_rsp == 0) ? 255 : ir.num_rsp;
466 
467 	/* cache_dump can't sleep. Therefore we allocate temp buffer and then
468 	 * copy it to the user space.
469 	 */
470 	buf = kmalloc(sizeof(struct inquiry_info) * max_rsp, GFP_KERNEL);
471 	if (!buf) {
472 		err = -ENOMEM;
473 		goto done;
474 	}
475 
476 	hci_dev_lock_bh(hdev);
477 	ir.num_rsp = inquiry_cache_dump(hdev, max_rsp, buf);
478 	hci_dev_unlock_bh(hdev);
479 
480 	BT_DBG("num_rsp %d", ir.num_rsp);
481 
482 	if (!copy_to_user(ptr, &ir, sizeof(ir))) {
483 		ptr += sizeof(ir);
484 		if (copy_to_user(ptr, buf, sizeof(struct inquiry_info) *
485 					ir.num_rsp))
486 			err = -EFAULT;
487 	} else
488 		err = -EFAULT;
489 
490 	kfree(buf);
491 
492 done:
493 	hci_dev_put(hdev);
494 	return err;
495 }
496 
497 /* ---- HCI ioctl helpers ---- */
498 
499 int hci_dev_open(__u16 dev)
500 {
501 	struct hci_dev *hdev;
502 	int ret = 0;
503 
504 	hdev = hci_dev_get(dev);
505 	if (!hdev)
506 		return -ENODEV;
507 
508 	BT_DBG("%s %p", hdev->name, hdev);
509 
510 	hci_req_lock(hdev);
511 
512 	if (hdev->rfkill && rfkill_blocked(hdev->rfkill)) {
513 		ret = -ERFKILL;
514 		goto done;
515 	}
516 
517 	if (test_bit(HCI_UP, &hdev->flags)) {
518 		ret = -EALREADY;
519 		goto done;
520 	}
521 
522 	if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks))
523 		set_bit(HCI_RAW, &hdev->flags);
524 
525 	/* Treat all non BR/EDR controllers as raw devices for now */
526 	if (hdev->dev_type != HCI_BREDR)
527 		set_bit(HCI_RAW, &hdev->flags);
528 
529 	if (hdev->open(hdev)) {
530 		ret = -EIO;
531 		goto done;
532 	}
533 
534 	if (!test_bit(HCI_RAW, &hdev->flags)) {
535 		atomic_set(&hdev->cmd_cnt, 1);
536 		set_bit(HCI_INIT, &hdev->flags);
537 		hdev->init_last_cmd = 0;
538 
539 		ret = __hci_request(hdev, hci_init_req, 0,
540 					msecs_to_jiffies(HCI_INIT_TIMEOUT));
541 
542 		if (lmp_le_capable(hdev))
543 			ret = __hci_request(hdev, hci_le_init_req, 0,
544 					msecs_to_jiffies(HCI_INIT_TIMEOUT));
545 
546 		clear_bit(HCI_INIT, &hdev->flags);
547 	}
548 
549 	if (!ret) {
550 		hci_dev_hold(hdev);
551 		set_bit(HCI_UP, &hdev->flags);
552 		hci_notify(hdev, HCI_DEV_UP);
553 		if (!test_bit(HCI_SETUP, &hdev->flags))
554 			mgmt_powered(hdev->id, 1);
555 	} else {
556 		/* Init failed, cleanup */
557 		tasklet_kill(&hdev->rx_task);
558 		tasklet_kill(&hdev->tx_task);
559 		tasklet_kill(&hdev->cmd_task);
560 
561 		skb_queue_purge(&hdev->cmd_q);
562 		skb_queue_purge(&hdev->rx_q);
563 
564 		if (hdev->flush)
565 			hdev->flush(hdev);
566 
567 		if (hdev->sent_cmd) {
568 			kfree_skb(hdev->sent_cmd);
569 			hdev->sent_cmd = NULL;
570 		}
571 
572 		hdev->close(hdev);
573 		hdev->flags = 0;
574 	}
575 
576 done:
577 	hci_req_unlock(hdev);
578 	hci_dev_put(hdev);
579 	return ret;
580 }
581 
582 static int hci_dev_do_close(struct hci_dev *hdev)
583 {
584 	BT_DBG("%s %p", hdev->name, hdev);
585 
586 	hci_req_cancel(hdev, ENODEV);
587 	hci_req_lock(hdev);
588 
589 	if (!test_and_clear_bit(HCI_UP, &hdev->flags)) {
590 		del_timer_sync(&hdev->cmd_timer);
591 		hci_req_unlock(hdev);
592 		return 0;
593 	}
594 
595 	/* Kill RX and TX tasks */
596 	tasklet_kill(&hdev->rx_task);
597 	tasklet_kill(&hdev->tx_task);
598 
599 	hci_dev_lock_bh(hdev);
600 	inquiry_cache_flush(hdev);
601 	hci_conn_hash_flush(hdev);
602 	hci_dev_unlock_bh(hdev);
603 
604 	hci_notify(hdev, HCI_DEV_DOWN);
605 
606 	if (hdev->flush)
607 		hdev->flush(hdev);
608 
609 	/* Reset device */
610 	skb_queue_purge(&hdev->cmd_q);
611 	atomic_set(&hdev->cmd_cnt, 1);
612 	if (!test_bit(HCI_RAW, &hdev->flags)) {
613 		set_bit(HCI_INIT, &hdev->flags);
614 		__hci_request(hdev, hci_reset_req, 0,
615 					msecs_to_jiffies(250));
616 		clear_bit(HCI_INIT, &hdev->flags);
617 	}
618 
619 	/* Kill cmd task */
620 	tasklet_kill(&hdev->cmd_task);
621 
622 	/* Drop queues */
623 	skb_queue_purge(&hdev->rx_q);
624 	skb_queue_purge(&hdev->cmd_q);
625 	skb_queue_purge(&hdev->raw_q);
626 
627 	/* Drop last sent command */
628 	if (hdev->sent_cmd) {
629 		del_timer_sync(&hdev->cmd_timer);
630 		kfree_skb(hdev->sent_cmd);
631 		hdev->sent_cmd = NULL;
632 	}
633 
634 	/* After this point our queues are empty
635 	 * and no tasks are scheduled. */
636 	hdev->close(hdev);
637 
638 	mgmt_powered(hdev->id, 0);
639 
640 	/* Clear flags */
641 	hdev->flags = 0;
642 
643 	hci_req_unlock(hdev);
644 
645 	hci_dev_put(hdev);
646 	return 0;
647 }
648 
649 int hci_dev_close(__u16 dev)
650 {
651 	struct hci_dev *hdev;
652 	int err;
653 
654 	hdev = hci_dev_get(dev);
655 	if (!hdev)
656 		return -ENODEV;
657 	err = hci_dev_do_close(hdev);
658 	hci_dev_put(hdev);
659 	return err;
660 }
661 
662 int hci_dev_reset(__u16 dev)
663 {
664 	struct hci_dev *hdev;
665 	int ret = 0;
666 
667 	hdev = hci_dev_get(dev);
668 	if (!hdev)
669 		return -ENODEV;
670 
671 	hci_req_lock(hdev);
672 	tasklet_disable(&hdev->tx_task);
673 
674 	if (!test_bit(HCI_UP, &hdev->flags))
675 		goto done;
676 
677 	/* Drop queues */
678 	skb_queue_purge(&hdev->rx_q);
679 	skb_queue_purge(&hdev->cmd_q);
680 
681 	hci_dev_lock_bh(hdev);
682 	inquiry_cache_flush(hdev);
683 	hci_conn_hash_flush(hdev);
684 	hci_dev_unlock_bh(hdev);
685 
686 	if (hdev->flush)
687 		hdev->flush(hdev);
688 
689 	atomic_set(&hdev->cmd_cnt, 1);
690 	hdev->acl_cnt = 0; hdev->sco_cnt = 0; hdev->le_cnt = 0;
691 
692 	if (!test_bit(HCI_RAW, &hdev->flags))
693 		ret = __hci_request(hdev, hci_reset_req, 0,
694 					msecs_to_jiffies(HCI_INIT_TIMEOUT));
695 
696 done:
697 	tasklet_enable(&hdev->tx_task);
698 	hci_req_unlock(hdev);
699 	hci_dev_put(hdev);
700 	return ret;
701 }
702 
703 int hci_dev_reset_stat(__u16 dev)
704 {
705 	struct hci_dev *hdev;
706 	int ret = 0;
707 
708 	hdev = hci_dev_get(dev);
709 	if (!hdev)
710 		return -ENODEV;
711 
712 	memset(&hdev->stat, 0, sizeof(struct hci_dev_stats));
713 
714 	hci_dev_put(hdev);
715 
716 	return ret;
717 }
718 
719 int hci_dev_cmd(unsigned int cmd, void __user *arg)
720 {
721 	struct hci_dev *hdev;
722 	struct hci_dev_req dr;
723 	int err = 0;
724 
725 	if (copy_from_user(&dr, arg, sizeof(dr)))
726 		return -EFAULT;
727 
728 	hdev = hci_dev_get(dr.dev_id);
729 	if (!hdev)
730 		return -ENODEV;
731 
732 	switch (cmd) {
733 	case HCISETAUTH:
734 		err = hci_request(hdev, hci_auth_req, dr.dev_opt,
735 					msecs_to_jiffies(HCI_INIT_TIMEOUT));
736 		break;
737 
738 	case HCISETENCRYPT:
739 		if (!lmp_encrypt_capable(hdev)) {
740 			err = -EOPNOTSUPP;
741 			break;
742 		}
743 
744 		if (!test_bit(HCI_AUTH, &hdev->flags)) {
745 			/* Auth must be enabled first */
746 			err = hci_request(hdev, hci_auth_req, dr.dev_opt,
747 					msecs_to_jiffies(HCI_INIT_TIMEOUT));
748 			if (err)
749 				break;
750 		}
751 
752 		err = hci_request(hdev, hci_encrypt_req, dr.dev_opt,
753 					msecs_to_jiffies(HCI_INIT_TIMEOUT));
754 		break;
755 
756 	case HCISETSCAN:
757 		err = hci_request(hdev, hci_scan_req, dr.dev_opt,
758 					msecs_to_jiffies(HCI_INIT_TIMEOUT));
759 		break;
760 
761 	case HCISETLINKPOL:
762 		err = hci_request(hdev, hci_linkpol_req, dr.dev_opt,
763 					msecs_to_jiffies(HCI_INIT_TIMEOUT));
764 		break;
765 
766 	case HCISETLINKMODE:
767 		hdev->link_mode = ((__u16) dr.dev_opt) &
768 					(HCI_LM_MASTER | HCI_LM_ACCEPT);
769 		break;
770 
771 	case HCISETPTYPE:
772 		hdev->pkt_type = (__u16) dr.dev_opt;
773 		break;
774 
775 	case HCISETACLMTU:
776 		hdev->acl_mtu  = *((__u16 *) &dr.dev_opt + 1);
777 		hdev->acl_pkts = *((__u16 *) &dr.dev_opt + 0);
778 		break;
779 
780 	case HCISETSCOMTU:
781 		hdev->sco_mtu  = *((__u16 *) &dr.dev_opt + 1);
782 		hdev->sco_pkts = *((__u16 *) &dr.dev_opt + 0);
783 		break;
784 
785 	default:
786 		err = -EINVAL;
787 		break;
788 	}
789 
790 	hci_dev_put(hdev);
791 	return err;
792 }
793 
794 int hci_get_dev_list(void __user *arg)
795 {
796 	struct hci_dev_list_req *dl;
797 	struct hci_dev_req *dr;
798 	struct list_head *p;
799 	int n = 0, size, err;
800 	__u16 dev_num;
801 
802 	if (get_user(dev_num, (__u16 __user *) arg))
803 		return -EFAULT;
804 
805 	if (!dev_num || dev_num > (PAGE_SIZE * 2) / sizeof(*dr))
806 		return -EINVAL;
807 
808 	size = sizeof(*dl) + dev_num * sizeof(*dr);
809 
810 	dl = kzalloc(size, GFP_KERNEL);
811 	if (!dl)
812 		return -ENOMEM;
813 
814 	dr = dl->dev_req;
815 
816 	read_lock_bh(&hci_dev_list_lock);
817 	list_for_each(p, &hci_dev_list) {
818 		struct hci_dev *hdev;
819 
820 		hdev = list_entry(p, struct hci_dev, list);
821 
822 		hci_del_off_timer(hdev);
823 
824 		if (!test_bit(HCI_MGMT, &hdev->flags))
825 			set_bit(HCI_PAIRABLE, &hdev->flags);
826 
827 		(dr + n)->dev_id  = hdev->id;
828 		(dr + n)->dev_opt = hdev->flags;
829 
830 		if (++n >= dev_num)
831 			break;
832 	}
833 	read_unlock_bh(&hci_dev_list_lock);
834 
835 	dl->dev_num = n;
836 	size = sizeof(*dl) + n * sizeof(*dr);
837 
838 	err = copy_to_user(arg, dl, size);
839 	kfree(dl);
840 
841 	return err ? -EFAULT : 0;
842 }
843 
844 int hci_get_dev_info(void __user *arg)
845 {
846 	struct hci_dev *hdev;
847 	struct hci_dev_info di;
848 	int err = 0;
849 
850 	if (copy_from_user(&di, arg, sizeof(di)))
851 		return -EFAULT;
852 
853 	hdev = hci_dev_get(di.dev_id);
854 	if (!hdev)
855 		return -ENODEV;
856 
857 	hci_del_off_timer(hdev);
858 
859 	if (!test_bit(HCI_MGMT, &hdev->flags))
860 		set_bit(HCI_PAIRABLE, &hdev->flags);
861 
862 	strcpy(di.name, hdev->name);
863 	di.bdaddr   = hdev->bdaddr;
864 	di.type     = (hdev->bus & 0x0f) | (hdev->dev_type << 4);
865 	di.flags    = hdev->flags;
866 	di.pkt_type = hdev->pkt_type;
867 	di.acl_mtu  = hdev->acl_mtu;
868 	di.acl_pkts = hdev->acl_pkts;
869 	di.sco_mtu  = hdev->sco_mtu;
870 	di.sco_pkts = hdev->sco_pkts;
871 	di.link_policy = hdev->link_policy;
872 	di.link_mode   = hdev->link_mode;
873 
874 	memcpy(&di.stat, &hdev->stat, sizeof(di.stat));
875 	memcpy(&di.features, &hdev->features, sizeof(di.features));
876 
877 	if (copy_to_user(arg, &di, sizeof(di)))
878 		err = -EFAULT;
879 
880 	hci_dev_put(hdev);
881 
882 	return err;
883 }
884 
885 /* ---- Interface to HCI drivers ---- */
886 
887 static int hci_rfkill_set_block(void *data, bool blocked)
888 {
889 	struct hci_dev *hdev = data;
890 
891 	BT_DBG("%p name %s blocked %d", hdev, hdev->name, blocked);
892 
893 	if (!blocked)
894 		return 0;
895 
896 	hci_dev_do_close(hdev);
897 
898 	return 0;
899 }
900 
901 static const struct rfkill_ops hci_rfkill_ops = {
902 	.set_block = hci_rfkill_set_block,
903 };
904 
905 /* Alloc HCI device */
906 struct hci_dev *hci_alloc_dev(void)
907 {
908 	struct hci_dev *hdev;
909 
910 	hdev = kzalloc(sizeof(struct hci_dev), GFP_KERNEL);
911 	if (!hdev)
912 		return NULL;
913 
914 	skb_queue_head_init(&hdev->driver_init);
915 
916 	return hdev;
917 }
918 EXPORT_SYMBOL(hci_alloc_dev);
919 
920 /* Free HCI device */
921 void hci_free_dev(struct hci_dev *hdev)
922 {
923 	skb_queue_purge(&hdev->driver_init);
924 
925 	/* will free via device release */
926 	put_device(&hdev->dev);
927 }
928 EXPORT_SYMBOL(hci_free_dev);
929 
930 static void hci_power_on(struct work_struct *work)
931 {
932 	struct hci_dev *hdev = container_of(work, struct hci_dev, power_on);
933 
934 	BT_DBG("%s", hdev->name);
935 
936 	if (hci_dev_open(hdev->id) < 0)
937 		return;
938 
939 	if (test_bit(HCI_AUTO_OFF, &hdev->flags))
940 		mod_timer(&hdev->off_timer,
941 				jiffies + msecs_to_jiffies(AUTO_OFF_TIMEOUT));
942 
943 	if (test_and_clear_bit(HCI_SETUP, &hdev->flags))
944 		mgmt_index_added(hdev->id);
945 }
946 
947 static void hci_power_off(struct work_struct *work)
948 {
949 	struct hci_dev *hdev = container_of(work, struct hci_dev, power_off);
950 
951 	BT_DBG("%s", hdev->name);
952 
953 	hci_dev_close(hdev->id);
954 }
955 
956 static void hci_auto_off(unsigned long data)
957 {
958 	struct hci_dev *hdev = (struct hci_dev *) data;
959 
960 	BT_DBG("%s", hdev->name);
961 
962 	clear_bit(HCI_AUTO_OFF, &hdev->flags);
963 
964 	queue_work(hdev->workqueue, &hdev->power_off);
965 }
966 
967 void hci_del_off_timer(struct hci_dev *hdev)
968 {
969 	BT_DBG("%s", hdev->name);
970 
971 	clear_bit(HCI_AUTO_OFF, &hdev->flags);
972 	del_timer(&hdev->off_timer);
973 }
974 
975 int hci_uuids_clear(struct hci_dev *hdev)
976 {
977 	struct list_head *p, *n;
978 
979 	list_for_each_safe(p, n, &hdev->uuids) {
980 		struct bt_uuid *uuid;
981 
982 		uuid = list_entry(p, struct bt_uuid, list);
983 
984 		list_del(p);
985 		kfree(uuid);
986 	}
987 
988 	return 0;
989 }
990 
991 int hci_link_keys_clear(struct hci_dev *hdev)
992 {
993 	struct list_head *p, *n;
994 
995 	list_for_each_safe(p, n, &hdev->link_keys) {
996 		struct link_key *key;
997 
998 		key = list_entry(p, struct link_key, list);
999 
1000 		list_del(p);
1001 		kfree(key);
1002 	}
1003 
1004 	return 0;
1005 }
1006 
1007 struct link_key *hci_find_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr)
1008 {
1009 	struct list_head *p;
1010 
1011 	list_for_each(p, &hdev->link_keys) {
1012 		struct link_key *k;
1013 
1014 		k = list_entry(p, struct link_key, list);
1015 
1016 		if (bacmp(bdaddr, &k->bdaddr) == 0)
1017 			return k;
1018 	}
1019 
1020 	return NULL;
1021 }
1022 
1023 static int hci_persistent_key(struct hci_dev *hdev, struct hci_conn *conn,
1024 						u8 key_type, u8 old_key_type)
1025 {
1026 	/* Legacy key */
1027 	if (key_type < 0x03)
1028 		return 1;
1029 
1030 	/* Debug keys are insecure so don't store them persistently */
1031 	if (key_type == HCI_LK_DEBUG_COMBINATION)
1032 		return 0;
1033 
1034 	/* Changed combination key and there's no previous one */
1035 	if (key_type == HCI_LK_CHANGED_COMBINATION && old_key_type == 0xff)
1036 		return 0;
1037 
1038 	/* Security mode 3 case */
1039 	if (!conn)
1040 		return 1;
1041 
1042 	/* Neither local nor remote side had no-bonding as requirement */
1043 	if (conn->auth_type > 0x01 && conn->remote_auth > 0x01)
1044 		return 1;
1045 
1046 	/* Local side had dedicated bonding as requirement */
1047 	if (conn->auth_type == 0x02 || conn->auth_type == 0x03)
1048 		return 1;
1049 
1050 	/* Remote side had dedicated bonding as requirement */
1051 	if (conn->remote_auth == 0x02 || conn->remote_auth == 0x03)
1052 		return 1;
1053 
1054 	/* If none of the above criteria match, then don't store the key
1055 	 * persistently */
1056 	return 0;
1057 }
1058 
1059 int hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn, int new_key,
1060 				bdaddr_t *bdaddr, u8 *val, u8 type, u8 pin_len)
1061 {
1062 	struct link_key *key, *old_key;
1063 	u8 old_key_type, persistent;
1064 
1065 	old_key = hci_find_link_key(hdev, bdaddr);
1066 	if (old_key) {
1067 		old_key_type = old_key->type;
1068 		key = old_key;
1069 	} else {
1070 		old_key_type = conn ? conn->key_type : 0xff;
1071 		key = kzalloc(sizeof(*key), GFP_ATOMIC);
1072 		if (!key)
1073 			return -ENOMEM;
1074 		list_add(&key->list, &hdev->link_keys);
1075 	}
1076 
1077 	BT_DBG("%s key for %s type %u", hdev->name, batostr(bdaddr), type);
1078 
1079 	/* Some buggy controller combinations generate a changed
1080 	 * combination key for legacy pairing even when there's no
1081 	 * previous key */
1082 	if (type == HCI_LK_CHANGED_COMBINATION &&
1083 					(!conn || conn->remote_auth == 0xff) &&
1084 					old_key_type == 0xff) {
1085 		type = HCI_LK_COMBINATION;
1086 		if (conn)
1087 			conn->key_type = type;
1088 	}
1089 
1090 	bacpy(&key->bdaddr, bdaddr);
1091 	memcpy(key->val, val, 16);
1092 	key->pin_len = pin_len;
1093 
1094 	if (type == HCI_LK_CHANGED_COMBINATION)
1095 		key->type = old_key_type;
1096 	else
1097 		key->type = type;
1098 
1099 	if (!new_key)
1100 		return 0;
1101 
1102 	persistent = hci_persistent_key(hdev, conn, type, old_key_type);
1103 
1104 	mgmt_new_key(hdev->id, key, persistent);
1105 
1106 	if (!persistent) {
1107 		list_del(&key->list);
1108 		kfree(key);
1109 	}
1110 
1111 	return 0;
1112 }
1113 
1114 int hci_remove_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr)
1115 {
1116 	struct link_key *key;
1117 
1118 	key = hci_find_link_key(hdev, bdaddr);
1119 	if (!key)
1120 		return -ENOENT;
1121 
1122 	BT_DBG("%s removing %s", hdev->name, batostr(bdaddr));
1123 
1124 	list_del(&key->list);
1125 	kfree(key);
1126 
1127 	return 0;
1128 }
1129 
1130 /* HCI command timer function */
1131 static void hci_cmd_timer(unsigned long arg)
1132 {
1133 	struct hci_dev *hdev = (void *) arg;
1134 
1135 	BT_ERR("%s command tx timeout", hdev->name);
1136 	atomic_set(&hdev->cmd_cnt, 1);
1137 	clear_bit(HCI_RESET, &hdev->flags);
1138 	tasklet_schedule(&hdev->cmd_task);
1139 }
1140 
1141 struct oob_data *hci_find_remote_oob_data(struct hci_dev *hdev,
1142 							bdaddr_t *bdaddr)
1143 {
1144 	struct oob_data *data;
1145 
1146 	list_for_each_entry(data, &hdev->remote_oob_data, list)
1147 		if (bacmp(bdaddr, &data->bdaddr) == 0)
1148 			return data;
1149 
1150 	return NULL;
1151 }
1152 
1153 int hci_remove_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr)
1154 {
1155 	struct oob_data *data;
1156 
1157 	data = hci_find_remote_oob_data(hdev, bdaddr);
1158 	if (!data)
1159 		return -ENOENT;
1160 
1161 	BT_DBG("%s removing %s", hdev->name, batostr(bdaddr));
1162 
1163 	list_del(&data->list);
1164 	kfree(data);
1165 
1166 	return 0;
1167 }
1168 
1169 int hci_remote_oob_data_clear(struct hci_dev *hdev)
1170 {
1171 	struct oob_data *data, *n;
1172 
1173 	list_for_each_entry_safe(data, n, &hdev->remote_oob_data, list) {
1174 		list_del(&data->list);
1175 		kfree(data);
1176 	}
1177 
1178 	return 0;
1179 }
1180 
1181 int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 *hash,
1182 								u8 *randomizer)
1183 {
1184 	struct oob_data *data;
1185 
1186 	data = hci_find_remote_oob_data(hdev, bdaddr);
1187 
1188 	if (!data) {
1189 		data = kmalloc(sizeof(*data), GFP_ATOMIC);
1190 		if (!data)
1191 			return -ENOMEM;
1192 
1193 		bacpy(&data->bdaddr, bdaddr);
1194 		list_add(&data->list, &hdev->remote_oob_data);
1195 	}
1196 
1197 	memcpy(data->hash, hash, sizeof(data->hash));
1198 	memcpy(data->randomizer, randomizer, sizeof(data->randomizer));
1199 
1200 	BT_DBG("%s for %s", hdev->name, batostr(bdaddr));
1201 
1202 	return 0;
1203 }
1204 
1205 /* Register HCI device */
1206 int hci_register_dev(struct hci_dev *hdev)
1207 {
1208 	struct list_head *head = &hci_dev_list, *p;
1209 	int i, id = 0;
1210 
1211 	BT_DBG("%p name %s bus %d owner %p", hdev, hdev->name,
1212 						hdev->bus, hdev->owner);
1213 
1214 	if (!hdev->open || !hdev->close || !hdev->destruct)
1215 		return -EINVAL;
1216 
1217 	write_lock_bh(&hci_dev_list_lock);
1218 
1219 	/* Find first available device id */
1220 	list_for_each(p, &hci_dev_list) {
1221 		if (list_entry(p, struct hci_dev, list)->id != id)
1222 			break;
1223 		head = p; id++;
1224 	}
1225 
1226 	sprintf(hdev->name, "hci%d", id);
1227 	hdev->id = id;
1228 	list_add(&hdev->list, head);
1229 
1230 	atomic_set(&hdev->refcnt, 1);
1231 	spin_lock_init(&hdev->lock);
1232 
1233 	hdev->flags = 0;
1234 	hdev->pkt_type  = (HCI_DM1 | HCI_DH1 | HCI_HV1);
1235 	hdev->esco_type = (ESCO_HV1);
1236 	hdev->link_mode = (HCI_LM_ACCEPT);
1237 	hdev->io_capability = 0x03; /* No Input No Output */
1238 
1239 	hdev->idle_timeout = 0;
1240 	hdev->sniff_max_interval = 800;
1241 	hdev->sniff_min_interval = 80;
1242 
1243 	tasklet_init(&hdev->cmd_task, hci_cmd_task, (unsigned long) hdev);
1244 	tasklet_init(&hdev->rx_task, hci_rx_task, (unsigned long) hdev);
1245 	tasklet_init(&hdev->tx_task, hci_tx_task, (unsigned long) hdev);
1246 
1247 	skb_queue_head_init(&hdev->rx_q);
1248 	skb_queue_head_init(&hdev->cmd_q);
1249 	skb_queue_head_init(&hdev->raw_q);
1250 
1251 	setup_timer(&hdev->cmd_timer, hci_cmd_timer, (unsigned long) hdev);
1252 
1253 	for (i = 0; i < NUM_REASSEMBLY; i++)
1254 		hdev->reassembly[i] = NULL;
1255 
1256 	init_waitqueue_head(&hdev->req_wait_q);
1257 	mutex_init(&hdev->req_lock);
1258 
1259 	inquiry_cache_init(hdev);
1260 
1261 	hci_conn_hash_init(hdev);
1262 
1263 	INIT_LIST_HEAD(&hdev->blacklist);
1264 
1265 	INIT_LIST_HEAD(&hdev->uuids);
1266 
1267 	INIT_LIST_HEAD(&hdev->link_keys);
1268 
1269 	INIT_LIST_HEAD(&hdev->remote_oob_data);
1270 
1271 	INIT_WORK(&hdev->power_on, hci_power_on);
1272 	INIT_WORK(&hdev->power_off, hci_power_off);
1273 	setup_timer(&hdev->off_timer, hci_auto_off, (unsigned long) hdev);
1274 
1275 	memset(&hdev->stat, 0, sizeof(struct hci_dev_stats));
1276 
1277 	atomic_set(&hdev->promisc, 0);
1278 
1279 	write_unlock_bh(&hci_dev_list_lock);
1280 
1281 	hdev->workqueue = create_singlethread_workqueue(hdev->name);
1282 	if (!hdev->workqueue)
1283 		goto nomem;
1284 
1285 	hci_register_sysfs(hdev);
1286 
1287 	hdev->rfkill = rfkill_alloc(hdev->name, &hdev->dev,
1288 				RFKILL_TYPE_BLUETOOTH, &hci_rfkill_ops, hdev);
1289 	if (hdev->rfkill) {
1290 		if (rfkill_register(hdev->rfkill) < 0) {
1291 			rfkill_destroy(hdev->rfkill);
1292 			hdev->rfkill = NULL;
1293 		}
1294 	}
1295 
1296 	set_bit(HCI_AUTO_OFF, &hdev->flags);
1297 	set_bit(HCI_SETUP, &hdev->flags);
1298 	queue_work(hdev->workqueue, &hdev->power_on);
1299 
1300 	hci_notify(hdev, HCI_DEV_REG);
1301 
1302 	return id;
1303 
1304 nomem:
1305 	write_lock_bh(&hci_dev_list_lock);
1306 	list_del(&hdev->list);
1307 	write_unlock_bh(&hci_dev_list_lock);
1308 
1309 	return -ENOMEM;
1310 }
1311 EXPORT_SYMBOL(hci_register_dev);
1312 
1313 /* Unregister HCI device */
1314 int hci_unregister_dev(struct hci_dev *hdev)
1315 {
1316 	int i;
1317 
1318 	BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus);
1319 
1320 	write_lock_bh(&hci_dev_list_lock);
1321 	list_del(&hdev->list);
1322 	write_unlock_bh(&hci_dev_list_lock);
1323 
1324 	hci_dev_do_close(hdev);
1325 
1326 	for (i = 0; i < NUM_REASSEMBLY; i++)
1327 		kfree_skb(hdev->reassembly[i]);
1328 
1329 	if (!test_bit(HCI_INIT, &hdev->flags) &&
1330 					!test_bit(HCI_SETUP, &hdev->flags))
1331 		mgmt_index_removed(hdev->id);
1332 
1333 	hci_notify(hdev, HCI_DEV_UNREG);
1334 
1335 	if (hdev->rfkill) {
1336 		rfkill_unregister(hdev->rfkill);
1337 		rfkill_destroy(hdev->rfkill);
1338 	}
1339 
1340 	hci_unregister_sysfs(hdev);
1341 
1342 	hci_del_off_timer(hdev);
1343 
1344 	destroy_workqueue(hdev->workqueue);
1345 
1346 	hci_dev_lock_bh(hdev);
1347 	hci_blacklist_clear(hdev);
1348 	hci_uuids_clear(hdev);
1349 	hci_link_keys_clear(hdev);
1350 	hci_remote_oob_data_clear(hdev);
1351 	hci_dev_unlock_bh(hdev);
1352 
1353 	__hci_dev_put(hdev);
1354 
1355 	return 0;
1356 }
1357 EXPORT_SYMBOL(hci_unregister_dev);
1358 
1359 /* Suspend HCI device */
1360 int hci_suspend_dev(struct hci_dev *hdev)
1361 {
1362 	hci_notify(hdev, HCI_DEV_SUSPEND);
1363 	return 0;
1364 }
1365 EXPORT_SYMBOL(hci_suspend_dev);
1366 
1367 /* Resume HCI device */
1368 int hci_resume_dev(struct hci_dev *hdev)
1369 {
1370 	hci_notify(hdev, HCI_DEV_RESUME);
1371 	return 0;
1372 }
1373 EXPORT_SYMBOL(hci_resume_dev);
1374 
1375 /* Receive frame from HCI drivers */
1376 int hci_recv_frame(struct sk_buff *skb)
1377 {
1378 	struct hci_dev *hdev = (struct hci_dev *) skb->dev;
1379 	if (!hdev || (!test_bit(HCI_UP, &hdev->flags)
1380 				&& !test_bit(HCI_INIT, &hdev->flags))) {
1381 		kfree_skb(skb);
1382 		return -ENXIO;
1383 	}
1384 
1385 	/* Incomming skb */
1386 	bt_cb(skb)->incoming = 1;
1387 
1388 	/* Time stamp */
1389 	__net_timestamp(skb);
1390 
1391 	/* Queue frame for rx task */
1392 	skb_queue_tail(&hdev->rx_q, skb);
1393 	tasklet_schedule(&hdev->rx_task);
1394 
1395 	return 0;
1396 }
1397 EXPORT_SYMBOL(hci_recv_frame);
1398 
1399 static int hci_reassembly(struct hci_dev *hdev, int type, void *data,
1400 						  int count, __u8 index)
1401 {
1402 	int len = 0;
1403 	int hlen = 0;
1404 	int remain = count;
1405 	struct sk_buff *skb;
1406 	struct bt_skb_cb *scb;
1407 
1408 	if ((type < HCI_ACLDATA_PKT || type > HCI_EVENT_PKT) ||
1409 				index >= NUM_REASSEMBLY)
1410 		return -EILSEQ;
1411 
1412 	skb = hdev->reassembly[index];
1413 
1414 	if (!skb) {
1415 		switch (type) {
1416 		case HCI_ACLDATA_PKT:
1417 			len = HCI_MAX_FRAME_SIZE;
1418 			hlen = HCI_ACL_HDR_SIZE;
1419 			break;
1420 		case HCI_EVENT_PKT:
1421 			len = HCI_MAX_EVENT_SIZE;
1422 			hlen = HCI_EVENT_HDR_SIZE;
1423 			break;
1424 		case HCI_SCODATA_PKT:
1425 			len = HCI_MAX_SCO_SIZE;
1426 			hlen = HCI_SCO_HDR_SIZE;
1427 			break;
1428 		}
1429 
1430 		skb = bt_skb_alloc(len, GFP_ATOMIC);
1431 		if (!skb)
1432 			return -ENOMEM;
1433 
1434 		scb = (void *) skb->cb;
1435 		scb->expect = hlen;
1436 		scb->pkt_type = type;
1437 
1438 		skb->dev = (void *) hdev;
1439 		hdev->reassembly[index] = skb;
1440 	}
1441 
1442 	while (count) {
1443 		scb = (void *) skb->cb;
1444 		len = min(scb->expect, (__u16)count);
1445 
1446 		memcpy(skb_put(skb, len), data, len);
1447 
1448 		count -= len;
1449 		data += len;
1450 		scb->expect -= len;
1451 		remain = count;
1452 
1453 		switch (type) {
1454 		case HCI_EVENT_PKT:
1455 			if (skb->len == HCI_EVENT_HDR_SIZE) {
1456 				struct hci_event_hdr *h = hci_event_hdr(skb);
1457 				scb->expect = h->plen;
1458 
1459 				if (skb_tailroom(skb) < scb->expect) {
1460 					kfree_skb(skb);
1461 					hdev->reassembly[index] = NULL;
1462 					return -ENOMEM;
1463 				}
1464 			}
1465 			break;
1466 
1467 		case HCI_ACLDATA_PKT:
1468 			if (skb->len  == HCI_ACL_HDR_SIZE) {
1469 				struct hci_acl_hdr *h = hci_acl_hdr(skb);
1470 				scb->expect = __le16_to_cpu(h->dlen);
1471 
1472 				if (skb_tailroom(skb) < scb->expect) {
1473 					kfree_skb(skb);
1474 					hdev->reassembly[index] = NULL;
1475 					return -ENOMEM;
1476 				}
1477 			}
1478 			break;
1479 
1480 		case HCI_SCODATA_PKT:
1481 			if (skb->len == HCI_SCO_HDR_SIZE) {
1482 				struct hci_sco_hdr *h = hci_sco_hdr(skb);
1483 				scb->expect = h->dlen;
1484 
1485 				if (skb_tailroom(skb) < scb->expect) {
1486 					kfree_skb(skb);
1487 					hdev->reassembly[index] = NULL;
1488 					return -ENOMEM;
1489 				}
1490 			}
1491 			break;
1492 		}
1493 
1494 		if (scb->expect == 0) {
1495 			/* Complete frame */
1496 
1497 			bt_cb(skb)->pkt_type = type;
1498 			hci_recv_frame(skb);
1499 
1500 			hdev->reassembly[index] = NULL;
1501 			return remain;
1502 		}
1503 	}
1504 
1505 	return remain;
1506 }
1507 
1508 int hci_recv_fragment(struct hci_dev *hdev, int type, void *data, int count)
1509 {
1510 	int rem = 0;
1511 
1512 	if (type < HCI_ACLDATA_PKT || type > HCI_EVENT_PKT)
1513 		return -EILSEQ;
1514 
1515 	while (count) {
1516 		rem = hci_reassembly(hdev, type, data, count, type - 1);
1517 		if (rem < 0)
1518 			return rem;
1519 
1520 		data += (count - rem);
1521 		count = rem;
1522 	};
1523 
1524 	return rem;
1525 }
1526 EXPORT_SYMBOL(hci_recv_fragment);
1527 
1528 #define STREAM_REASSEMBLY 0
1529 
1530 int hci_recv_stream_fragment(struct hci_dev *hdev, void *data, int count)
1531 {
1532 	int type;
1533 	int rem = 0;
1534 
1535 	while (count) {
1536 		struct sk_buff *skb = hdev->reassembly[STREAM_REASSEMBLY];
1537 
1538 		if (!skb) {
1539 			struct { char type; } *pkt;
1540 
1541 			/* Start of the frame */
1542 			pkt = data;
1543 			type = pkt->type;
1544 
1545 			data++;
1546 			count--;
1547 		} else
1548 			type = bt_cb(skb)->pkt_type;
1549 
1550 		rem = hci_reassembly(hdev, type, data, count,
1551 							STREAM_REASSEMBLY);
1552 		if (rem < 0)
1553 			return rem;
1554 
1555 		data += (count - rem);
1556 		count = rem;
1557 	};
1558 
1559 	return rem;
1560 }
1561 EXPORT_SYMBOL(hci_recv_stream_fragment);
1562 
1563 /* ---- Interface to upper protocols ---- */
1564 
1565 /* Register/Unregister protocols.
1566  * hci_task_lock is used to ensure that no tasks are running. */
1567 int hci_register_proto(struct hci_proto *hp)
1568 {
1569 	int err = 0;
1570 
1571 	BT_DBG("%p name %s id %d", hp, hp->name, hp->id);
1572 
1573 	if (hp->id >= HCI_MAX_PROTO)
1574 		return -EINVAL;
1575 
1576 	write_lock_bh(&hci_task_lock);
1577 
1578 	if (!hci_proto[hp->id])
1579 		hci_proto[hp->id] = hp;
1580 	else
1581 		err = -EEXIST;
1582 
1583 	write_unlock_bh(&hci_task_lock);
1584 
1585 	return err;
1586 }
1587 EXPORT_SYMBOL(hci_register_proto);
1588 
1589 int hci_unregister_proto(struct hci_proto *hp)
1590 {
1591 	int err = 0;
1592 
1593 	BT_DBG("%p name %s id %d", hp, hp->name, hp->id);
1594 
1595 	if (hp->id >= HCI_MAX_PROTO)
1596 		return -EINVAL;
1597 
1598 	write_lock_bh(&hci_task_lock);
1599 
1600 	if (hci_proto[hp->id])
1601 		hci_proto[hp->id] = NULL;
1602 	else
1603 		err = -ENOENT;
1604 
1605 	write_unlock_bh(&hci_task_lock);
1606 
1607 	return err;
1608 }
1609 EXPORT_SYMBOL(hci_unregister_proto);
1610 
1611 int hci_register_cb(struct hci_cb *cb)
1612 {
1613 	BT_DBG("%p name %s", cb, cb->name);
1614 
1615 	write_lock_bh(&hci_cb_list_lock);
1616 	list_add(&cb->list, &hci_cb_list);
1617 	write_unlock_bh(&hci_cb_list_lock);
1618 
1619 	return 0;
1620 }
1621 EXPORT_SYMBOL(hci_register_cb);
1622 
1623 int hci_unregister_cb(struct hci_cb *cb)
1624 {
1625 	BT_DBG("%p name %s", cb, cb->name);
1626 
1627 	write_lock_bh(&hci_cb_list_lock);
1628 	list_del(&cb->list);
1629 	write_unlock_bh(&hci_cb_list_lock);
1630 
1631 	return 0;
1632 }
1633 EXPORT_SYMBOL(hci_unregister_cb);
1634 
1635 static int hci_send_frame(struct sk_buff *skb)
1636 {
1637 	struct hci_dev *hdev = (struct hci_dev *) skb->dev;
1638 
1639 	if (!hdev) {
1640 		kfree_skb(skb);
1641 		return -ENODEV;
1642 	}
1643 
1644 	BT_DBG("%s type %d len %d", hdev->name, bt_cb(skb)->pkt_type, skb->len);
1645 
1646 	if (atomic_read(&hdev->promisc)) {
1647 		/* Time stamp */
1648 		__net_timestamp(skb);
1649 
1650 		hci_send_to_sock(hdev, skb, NULL);
1651 	}
1652 
1653 	/* Get rid of skb owner, prior to sending to the driver. */
1654 	skb_orphan(skb);
1655 
1656 	return hdev->send(skb);
1657 }
1658 
1659 /* Send HCI command */
1660 int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen, void *param)
1661 {
1662 	int len = HCI_COMMAND_HDR_SIZE + plen;
1663 	struct hci_command_hdr *hdr;
1664 	struct sk_buff *skb;
1665 
1666 	BT_DBG("%s opcode 0x%x plen %d", hdev->name, opcode, plen);
1667 
1668 	skb = bt_skb_alloc(len, GFP_ATOMIC);
1669 	if (!skb) {
1670 		BT_ERR("%s no memory for command", hdev->name);
1671 		return -ENOMEM;
1672 	}
1673 
1674 	hdr = (struct hci_command_hdr *) skb_put(skb, HCI_COMMAND_HDR_SIZE);
1675 	hdr->opcode = cpu_to_le16(opcode);
1676 	hdr->plen   = plen;
1677 
1678 	if (plen)
1679 		memcpy(skb_put(skb, plen), param, plen);
1680 
1681 	BT_DBG("skb len %d", skb->len);
1682 
1683 	bt_cb(skb)->pkt_type = HCI_COMMAND_PKT;
1684 	skb->dev = (void *) hdev;
1685 
1686 	if (test_bit(HCI_INIT, &hdev->flags))
1687 		hdev->init_last_cmd = opcode;
1688 
1689 	skb_queue_tail(&hdev->cmd_q, skb);
1690 	tasklet_schedule(&hdev->cmd_task);
1691 
1692 	return 0;
1693 }
1694 
1695 /* Get data from the previously sent command */
1696 void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 opcode)
1697 {
1698 	struct hci_command_hdr *hdr;
1699 
1700 	if (!hdev->sent_cmd)
1701 		return NULL;
1702 
1703 	hdr = (void *) hdev->sent_cmd->data;
1704 
1705 	if (hdr->opcode != cpu_to_le16(opcode))
1706 		return NULL;
1707 
1708 	BT_DBG("%s opcode 0x%x", hdev->name, opcode);
1709 
1710 	return hdev->sent_cmd->data + HCI_COMMAND_HDR_SIZE;
1711 }
1712 
1713 /* Send ACL data */
1714 static void hci_add_acl_hdr(struct sk_buff *skb, __u16 handle, __u16 flags)
1715 {
1716 	struct hci_acl_hdr *hdr;
1717 	int len = skb->len;
1718 
1719 	skb_push(skb, HCI_ACL_HDR_SIZE);
1720 	skb_reset_transport_header(skb);
1721 	hdr = (struct hci_acl_hdr *)skb_transport_header(skb);
1722 	hdr->handle = cpu_to_le16(hci_handle_pack(handle, flags));
1723 	hdr->dlen   = cpu_to_le16(len);
1724 }
1725 
1726 void hci_send_acl(struct hci_conn *conn, struct sk_buff *skb, __u16 flags)
1727 {
1728 	struct hci_dev *hdev = conn->hdev;
1729 	struct sk_buff *list;
1730 
1731 	BT_DBG("%s conn %p flags 0x%x", hdev->name, conn, flags);
1732 
1733 	skb->dev = (void *) hdev;
1734 	bt_cb(skb)->pkt_type = HCI_ACLDATA_PKT;
1735 	hci_add_acl_hdr(skb, conn->handle, flags);
1736 
1737 	list = skb_shinfo(skb)->frag_list;
1738 	if (!list) {
1739 		/* Non fragmented */
1740 		BT_DBG("%s nonfrag skb %p len %d", hdev->name, skb, skb->len);
1741 
1742 		skb_queue_tail(&conn->data_q, skb);
1743 	} else {
1744 		/* Fragmented */
1745 		BT_DBG("%s frag %p len %d", hdev->name, skb, skb->len);
1746 
1747 		skb_shinfo(skb)->frag_list = NULL;
1748 
1749 		/* Queue all fragments atomically */
1750 		spin_lock_bh(&conn->data_q.lock);
1751 
1752 		__skb_queue_tail(&conn->data_q, skb);
1753 
1754 		flags &= ~ACL_START;
1755 		flags |= ACL_CONT;
1756 		do {
1757 			skb = list; list = list->next;
1758 
1759 			skb->dev = (void *) hdev;
1760 			bt_cb(skb)->pkt_type = HCI_ACLDATA_PKT;
1761 			hci_add_acl_hdr(skb, conn->handle, flags);
1762 
1763 			BT_DBG("%s frag %p len %d", hdev->name, skb, skb->len);
1764 
1765 			__skb_queue_tail(&conn->data_q, skb);
1766 		} while (list);
1767 
1768 		spin_unlock_bh(&conn->data_q.lock);
1769 	}
1770 
1771 	tasklet_schedule(&hdev->tx_task);
1772 }
1773 EXPORT_SYMBOL(hci_send_acl);
1774 
1775 /* Send SCO data */
1776 void hci_send_sco(struct hci_conn *conn, struct sk_buff *skb)
1777 {
1778 	struct hci_dev *hdev = conn->hdev;
1779 	struct hci_sco_hdr hdr;
1780 
1781 	BT_DBG("%s len %d", hdev->name, skb->len);
1782 
1783 	hdr.handle = cpu_to_le16(conn->handle);
1784 	hdr.dlen   = skb->len;
1785 
1786 	skb_push(skb, HCI_SCO_HDR_SIZE);
1787 	skb_reset_transport_header(skb);
1788 	memcpy(skb_transport_header(skb), &hdr, HCI_SCO_HDR_SIZE);
1789 
1790 	skb->dev = (void *) hdev;
1791 	bt_cb(skb)->pkt_type = HCI_SCODATA_PKT;
1792 
1793 	skb_queue_tail(&conn->data_q, skb);
1794 	tasklet_schedule(&hdev->tx_task);
1795 }
1796 EXPORT_SYMBOL(hci_send_sco);
1797 
1798 /* ---- HCI TX task (outgoing data) ---- */
1799 
1800 /* HCI Connection scheduler */
1801 static inline struct hci_conn *hci_low_sent(struct hci_dev *hdev, __u8 type, int *quote)
1802 {
1803 	struct hci_conn_hash *h = &hdev->conn_hash;
1804 	struct hci_conn *conn = NULL;
1805 	int num = 0, min = ~0;
1806 	struct list_head *p;
1807 
1808 	/* We don't have to lock device here. Connections are always
1809 	 * added and removed with TX task disabled. */
1810 	list_for_each(p, &h->list) {
1811 		struct hci_conn *c;
1812 		c = list_entry(p, struct hci_conn, list);
1813 
1814 		if (c->type != type || skb_queue_empty(&c->data_q))
1815 			continue;
1816 
1817 		if (c->state != BT_CONNECTED && c->state != BT_CONFIG)
1818 			continue;
1819 
1820 		num++;
1821 
1822 		if (c->sent < min) {
1823 			min  = c->sent;
1824 			conn = c;
1825 		}
1826 	}
1827 
1828 	if (conn) {
1829 		int cnt, q;
1830 
1831 		switch (conn->type) {
1832 		case ACL_LINK:
1833 			cnt = hdev->acl_cnt;
1834 			break;
1835 		case SCO_LINK:
1836 		case ESCO_LINK:
1837 			cnt = hdev->sco_cnt;
1838 			break;
1839 		case LE_LINK:
1840 			cnt = hdev->le_mtu ? hdev->le_cnt : hdev->acl_cnt;
1841 			break;
1842 		default:
1843 			cnt = 0;
1844 			BT_ERR("Unknown link type");
1845 		}
1846 
1847 		q = cnt / num;
1848 		*quote = q ? q : 1;
1849 	} else
1850 		*quote = 0;
1851 
1852 	BT_DBG("conn %p quote %d", conn, *quote);
1853 	return conn;
1854 }
1855 
1856 static inline void hci_link_tx_to(struct hci_dev *hdev, __u8 type)
1857 {
1858 	struct hci_conn_hash *h = &hdev->conn_hash;
1859 	struct list_head *p;
1860 	struct hci_conn  *c;
1861 
1862 	BT_ERR("%s link tx timeout", hdev->name);
1863 
1864 	/* Kill stalled connections */
1865 	list_for_each(p, &h->list) {
1866 		c = list_entry(p, struct hci_conn, list);
1867 		if (c->type == type && c->sent) {
1868 			BT_ERR("%s killing stalled connection %s",
1869 				hdev->name, batostr(&c->dst));
1870 			hci_acl_disconn(c, 0x13);
1871 		}
1872 	}
1873 }
1874 
1875 static inline void hci_sched_acl(struct hci_dev *hdev)
1876 {
1877 	struct hci_conn *conn;
1878 	struct sk_buff *skb;
1879 	int quote;
1880 
1881 	BT_DBG("%s", hdev->name);
1882 
1883 	if (!test_bit(HCI_RAW, &hdev->flags)) {
1884 		/* ACL tx timeout must be longer than maximum
1885 		 * link supervision timeout (40.9 seconds) */
1886 		if (!hdev->acl_cnt && time_after(jiffies, hdev->acl_last_tx + HZ * 45))
1887 			hci_link_tx_to(hdev, ACL_LINK);
1888 	}
1889 
1890 	while (hdev->acl_cnt && (conn = hci_low_sent(hdev, ACL_LINK, &quote))) {
1891 		while (quote-- && (skb = skb_dequeue(&conn->data_q))) {
1892 			BT_DBG("skb %p len %d", skb, skb->len);
1893 
1894 			hci_conn_enter_active_mode(conn);
1895 
1896 			hci_send_frame(skb);
1897 			hdev->acl_last_tx = jiffies;
1898 
1899 			hdev->acl_cnt--;
1900 			conn->sent++;
1901 		}
1902 	}
1903 }
1904 
1905 /* Schedule SCO */
1906 static inline void hci_sched_sco(struct hci_dev *hdev)
1907 {
1908 	struct hci_conn *conn;
1909 	struct sk_buff *skb;
1910 	int quote;
1911 
1912 	BT_DBG("%s", hdev->name);
1913 
1914 	while (hdev->sco_cnt && (conn = hci_low_sent(hdev, SCO_LINK, &quote))) {
1915 		while (quote-- && (skb = skb_dequeue(&conn->data_q))) {
1916 			BT_DBG("skb %p len %d", skb, skb->len);
1917 			hci_send_frame(skb);
1918 
1919 			conn->sent++;
1920 			if (conn->sent == ~0)
1921 				conn->sent = 0;
1922 		}
1923 	}
1924 }
1925 
1926 static inline void hci_sched_esco(struct hci_dev *hdev)
1927 {
1928 	struct hci_conn *conn;
1929 	struct sk_buff *skb;
1930 	int quote;
1931 
1932 	BT_DBG("%s", hdev->name);
1933 
1934 	while (hdev->sco_cnt && (conn = hci_low_sent(hdev, ESCO_LINK, &quote))) {
1935 		while (quote-- && (skb = skb_dequeue(&conn->data_q))) {
1936 			BT_DBG("skb %p len %d", skb, skb->len);
1937 			hci_send_frame(skb);
1938 
1939 			conn->sent++;
1940 			if (conn->sent == ~0)
1941 				conn->sent = 0;
1942 		}
1943 	}
1944 }
1945 
1946 static inline void hci_sched_le(struct hci_dev *hdev)
1947 {
1948 	struct hci_conn *conn;
1949 	struct sk_buff *skb;
1950 	int quote, cnt;
1951 
1952 	BT_DBG("%s", hdev->name);
1953 
1954 	if (!test_bit(HCI_RAW, &hdev->flags)) {
1955 		/* LE tx timeout must be longer than maximum
1956 		 * link supervision timeout (40.9 seconds) */
1957 		if (!hdev->le_cnt && hdev->le_pkts &&
1958 				time_after(jiffies, hdev->le_last_tx + HZ * 45))
1959 			hci_link_tx_to(hdev, LE_LINK);
1960 	}
1961 
1962 	cnt = hdev->le_pkts ? hdev->le_cnt : hdev->acl_cnt;
1963 	while (cnt && (conn = hci_low_sent(hdev, LE_LINK, &quote))) {
1964 		while (quote-- && (skb = skb_dequeue(&conn->data_q))) {
1965 			BT_DBG("skb %p len %d", skb, skb->len);
1966 
1967 			hci_send_frame(skb);
1968 			hdev->le_last_tx = jiffies;
1969 
1970 			cnt--;
1971 			conn->sent++;
1972 		}
1973 	}
1974 	if (hdev->le_pkts)
1975 		hdev->le_cnt = cnt;
1976 	else
1977 		hdev->acl_cnt = cnt;
1978 }
1979 
1980 static void hci_tx_task(unsigned long arg)
1981 {
1982 	struct hci_dev *hdev = (struct hci_dev *) arg;
1983 	struct sk_buff *skb;
1984 
1985 	read_lock(&hci_task_lock);
1986 
1987 	BT_DBG("%s acl %d sco %d le %d", hdev->name, hdev->acl_cnt,
1988 		hdev->sco_cnt, hdev->le_cnt);
1989 
1990 	/* Schedule queues and send stuff to HCI driver */
1991 
1992 	hci_sched_acl(hdev);
1993 
1994 	hci_sched_sco(hdev);
1995 
1996 	hci_sched_esco(hdev);
1997 
1998 	hci_sched_le(hdev);
1999 
2000 	/* Send next queued raw (unknown type) packet */
2001 	while ((skb = skb_dequeue(&hdev->raw_q)))
2002 		hci_send_frame(skb);
2003 
2004 	read_unlock(&hci_task_lock);
2005 }
2006 
2007 /* ----- HCI RX task (incoming data processing) ----- */
2008 
2009 /* ACL data packet */
2010 static inline void hci_acldata_packet(struct hci_dev *hdev, struct sk_buff *skb)
2011 {
2012 	struct hci_acl_hdr *hdr = (void *) skb->data;
2013 	struct hci_conn *conn;
2014 	__u16 handle, flags;
2015 
2016 	skb_pull(skb, HCI_ACL_HDR_SIZE);
2017 
2018 	handle = __le16_to_cpu(hdr->handle);
2019 	flags  = hci_flags(handle);
2020 	handle = hci_handle(handle);
2021 
2022 	BT_DBG("%s len %d handle 0x%x flags 0x%x", hdev->name, skb->len, handle, flags);
2023 
2024 	hdev->stat.acl_rx++;
2025 
2026 	hci_dev_lock(hdev);
2027 	conn = hci_conn_hash_lookup_handle(hdev, handle);
2028 	hci_dev_unlock(hdev);
2029 
2030 	if (conn) {
2031 		register struct hci_proto *hp;
2032 
2033 		hci_conn_enter_active_mode(conn);
2034 
2035 		/* Send to upper protocol */
2036 		hp = hci_proto[HCI_PROTO_L2CAP];
2037 		if (hp && hp->recv_acldata) {
2038 			hp->recv_acldata(conn, skb, flags);
2039 			return;
2040 		}
2041 	} else {
2042 		BT_ERR("%s ACL packet for unknown connection handle %d",
2043 			hdev->name, handle);
2044 	}
2045 
2046 	kfree_skb(skb);
2047 }
2048 
2049 /* SCO data packet */
2050 static inline void hci_scodata_packet(struct hci_dev *hdev, struct sk_buff *skb)
2051 {
2052 	struct hci_sco_hdr *hdr = (void *) skb->data;
2053 	struct hci_conn *conn;
2054 	__u16 handle;
2055 
2056 	skb_pull(skb, HCI_SCO_HDR_SIZE);
2057 
2058 	handle = __le16_to_cpu(hdr->handle);
2059 
2060 	BT_DBG("%s len %d handle 0x%x", hdev->name, skb->len, handle);
2061 
2062 	hdev->stat.sco_rx++;
2063 
2064 	hci_dev_lock(hdev);
2065 	conn = hci_conn_hash_lookup_handle(hdev, handle);
2066 	hci_dev_unlock(hdev);
2067 
2068 	if (conn) {
2069 		register struct hci_proto *hp;
2070 
2071 		/* Send to upper protocol */
2072 		hp = hci_proto[HCI_PROTO_SCO];
2073 		if (hp && hp->recv_scodata) {
2074 			hp->recv_scodata(conn, skb);
2075 			return;
2076 		}
2077 	} else {
2078 		BT_ERR("%s SCO packet for unknown connection handle %d",
2079 			hdev->name, handle);
2080 	}
2081 
2082 	kfree_skb(skb);
2083 }
2084 
2085 static void hci_rx_task(unsigned long arg)
2086 {
2087 	struct hci_dev *hdev = (struct hci_dev *) arg;
2088 	struct sk_buff *skb;
2089 
2090 	BT_DBG("%s", hdev->name);
2091 
2092 	read_lock(&hci_task_lock);
2093 
2094 	while ((skb = skb_dequeue(&hdev->rx_q))) {
2095 		if (atomic_read(&hdev->promisc)) {
2096 			/* Send copy to the sockets */
2097 			hci_send_to_sock(hdev, skb, NULL);
2098 		}
2099 
2100 		if (test_bit(HCI_RAW, &hdev->flags)) {
2101 			kfree_skb(skb);
2102 			continue;
2103 		}
2104 
2105 		if (test_bit(HCI_INIT, &hdev->flags)) {
2106 			/* Don't process data packets in this states. */
2107 			switch (bt_cb(skb)->pkt_type) {
2108 			case HCI_ACLDATA_PKT:
2109 			case HCI_SCODATA_PKT:
2110 				kfree_skb(skb);
2111 				continue;
2112 			}
2113 		}
2114 
2115 		/* Process frame */
2116 		switch (bt_cb(skb)->pkt_type) {
2117 		case HCI_EVENT_PKT:
2118 			hci_event_packet(hdev, skb);
2119 			break;
2120 
2121 		case HCI_ACLDATA_PKT:
2122 			BT_DBG("%s ACL data packet", hdev->name);
2123 			hci_acldata_packet(hdev, skb);
2124 			break;
2125 
2126 		case HCI_SCODATA_PKT:
2127 			BT_DBG("%s SCO data packet", hdev->name);
2128 			hci_scodata_packet(hdev, skb);
2129 			break;
2130 
2131 		default:
2132 			kfree_skb(skb);
2133 			break;
2134 		}
2135 	}
2136 
2137 	read_unlock(&hci_task_lock);
2138 }
2139 
2140 static void hci_cmd_task(unsigned long arg)
2141 {
2142 	struct hci_dev *hdev = (struct hci_dev *) arg;
2143 	struct sk_buff *skb;
2144 
2145 	BT_DBG("%s cmd %d", hdev->name, atomic_read(&hdev->cmd_cnt));
2146 
2147 	/* Send queued commands */
2148 	if (atomic_read(&hdev->cmd_cnt)) {
2149 		skb = skb_dequeue(&hdev->cmd_q);
2150 		if (!skb)
2151 			return;
2152 
2153 		kfree_skb(hdev->sent_cmd);
2154 
2155 		hdev->sent_cmd = skb_clone(skb, GFP_ATOMIC);
2156 		if (hdev->sent_cmd) {
2157 			atomic_dec(&hdev->cmd_cnt);
2158 			hci_send_frame(skb);
2159 			mod_timer(&hdev->cmd_timer,
2160 				  jiffies + msecs_to_jiffies(HCI_CMD_TIMEOUT));
2161 		} else {
2162 			skb_queue_head(&hdev->cmd_q, skb);
2163 			tasklet_schedule(&hdev->cmd_task);
2164 		}
2165 	}
2166 }
2167