xref: /openbmc/linux/net/bluetooth/hci_core.c (revision 33a03aad)
1 /*
2    BlueZ - Bluetooth protocol stack for Linux
3    Copyright (C) 2000-2001 Qualcomm Incorporated
4    Copyright (C) 2011 ProFUSION Embedded Systems
5 
6    Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
7 
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License version 2 as
10    published by the Free Software Foundation;
11 
12    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
13    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
15    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
16    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
17    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
18    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
19    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20 
21    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
22    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
23    SOFTWARE IS DISCLAIMED.
24 */
25 
26 /* Bluetooth HCI core. */
27 
28 #include <linux/jiffies.h>
29 #include <linux/module.h>
30 #include <linux/kmod.h>
31 
32 #include <linux/types.h>
33 #include <linux/errno.h>
34 #include <linux/kernel.h>
35 #include <linux/sched.h>
36 #include <linux/slab.h>
37 #include <linux/poll.h>
38 #include <linux/fcntl.h>
39 #include <linux/init.h>
40 #include <linux/skbuff.h>
41 #include <linux/workqueue.h>
42 #include <linux/interrupt.h>
43 #include <linux/rfkill.h>
44 #include <linux/timer.h>
45 #include <linux/crypto.h>
46 #include <net/sock.h>
47 
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_rx_work(struct work_struct *work);
57 static void hci_cmd_work(struct work_struct *work);
58 static void hci_tx_work(struct work_struct *work);
59 
60 /* HCI device list */
61 LIST_HEAD(hci_dev_list);
62 DEFINE_RWLOCK(hci_dev_list_lock);
63 
64 /* HCI callback list */
65 LIST_HEAD(hci_cb_list);
66 DEFINE_RWLOCK(hci_cb_list_lock);
67 
68 /* ---- HCI notifications ---- */
69 
70 static void hci_notify(struct hci_dev *hdev, int event)
71 {
72 	hci_sock_dev_event(hdev, event);
73 }
74 
75 /* ---- HCI requests ---- */
76 
77 void hci_req_complete(struct hci_dev *hdev, __u16 cmd, int result)
78 {
79 	BT_DBG("%s command 0x%04x result 0x%2.2x", hdev->name, cmd, result);
80 
81 	/* If this is the init phase check if the completed command matches
82 	 * the last init command, and if not just return.
83 	 */
84 	if (test_bit(HCI_INIT, &hdev->flags) && hdev->init_last_cmd != cmd) {
85 		struct hci_command_hdr *sent = (void *) hdev->sent_cmd->data;
86 		u16 opcode = __le16_to_cpu(sent->opcode);
87 		struct sk_buff *skb;
88 
89 		/* Some CSR based controllers generate a spontaneous
90 		 * reset complete event during init and any pending
91 		 * command will never be completed. In such a case we
92 		 * need to resend whatever was the last sent
93 		 * command.
94 		 */
95 
96 		if (cmd != HCI_OP_RESET || opcode == HCI_OP_RESET)
97 			return;
98 
99 		skb = skb_clone(hdev->sent_cmd, GFP_ATOMIC);
100 		if (skb) {
101 			skb_queue_head(&hdev->cmd_q, skb);
102 			queue_work(hdev->workqueue, &hdev->cmd_work);
103 		}
104 
105 		return;
106 	}
107 
108 	if (hdev->req_status == HCI_REQ_PEND) {
109 		hdev->req_result = result;
110 		hdev->req_status = HCI_REQ_DONE;
111 		wake_up_interruptible(&hdev->req_wait_q);
112 	}
113 }
114 
115 static void hci_req_cancel(struct hci_dev *hdev, int err)
116 {
117 	BT_DBG("%s err 0x%2.2x", hdev->name, err);
118 
119 	if (hdev->req_status == HCI_REQ_PEND) {
120 		hdev->req_result = err;
121 		hdev->req_status = HCI_REQ_CANCELED;
122 		wake_up_interruptible(&hdev->req_wait_q);
123 	}
124 }
125 
126 /* Execute request and wait for completion. */
127 static int __hci_request(struct hci_dev *hdev, void (*req)(struct hci_dev *hdev, unsigned long opt),
128 					unsigned long opt, __u32 timeout)
129 {
130 	DECLARE_WAITQUEUE(wait, current);
131 	int err = 0;
132 
133 	BT_DBG("%s start", hdev->name);
134 
135 	hdev->req_status = HCI_REQ_PEND;
136 
137 	add_wait_queue(&hdev->req_wait_q, &wait);
138 	set_current_state(TASK_INTERRUPTIBLE);
139 
140 	req(hdev, opt);
141 	schedule_timeout(timeout);
142 
143 	remove_wait_queue(&hdev->req_wait_q, &wait);
144 
145 	if (signal_pending(current))
146 		return -EINTR;
147 
148 	switch (hdev->req_status) {
149 	case HCI_REQ_DONE:
150 		err = -bt_to_errno(hdev->req_result);
151 		break;
152 
153 	case HCI_REQ_CANCELED:
154 		err = -hdev->req_result;
155 		break;
156 
157 	default:
158 		err = -ETIMEDOUT;
159 		break;
160 	}
161 
162 	hdev->req_status = hdev->req_result = 0;
163 
164 	BT_DBG("%s end: err %d", hdev->name, err);
165 
166 	return err;
167 }
168 
169 static inline int hci_request(struct hci_dev *hdev, void (*req)(struct hci_dev *hdev, unsigned long opt),
170 					unsigned long opt, __u32 timeout)
171 {
172 	int ret;
173 
174 	if (!test_bit(HCI_UP, &hdev->flags))
175 		return -ENETDOWN;
176 
177 	/* Serialize all requests */
178 	hci_req_lock(hdev);
179 	ret = __hci_request(hdev, req, opt, timeout);
180 	hci_req_unlock(hdev);
181 
182 	return ret;
183 }
184 
185 static void hci_reset_req(struct hci_dev *hdev, unsigned long opt)
186 {
187 	BT_DBG("%s %ld", hdev->name, opt);
188 
189 	/* Reset device */
190 	set_bit(HCI_RESET, &hdev->flags);
191 	hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
192 }
193 
194 static void bredr_init(struct hci_dev *hdev)
195 {
196 	struct hci_cp_delete_stored_link_key cp;
197 	__le16 param;
198 	__u8 flt_type;
199 
200 	hdev->flow_ctl_mode = HCI_FLOW_CTL_MODE_PACKET_BASED;
201 
202 	/* Mandatory initialization */
203 
204 	/* Reset */
205 	if (!test_bit(HCI_QUIRK_NO_RESET, &hdev->quirks)) {
206 		set_bit(HCI_RESET, &hdev->flags);
207 		hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
208 	}
209 
210 	/* Read Local Supported Features */
211 	hci_send_cmd(hdev, HCI_OP_READ_LOCAL_FEATURES, 0, NULL);
212 
213 	/* Read Local Version */
214 	hci_send_cmd(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL);
215 
216 	/* Read Buffer Size (ACL mtu, max pkt, etc.) */
217 	hci_send_cmd(hdev, HCI_OP_READ_BUFFER_SIZE, 0, NULL);
218 
219 	/* Read BD Address */
220 	hci_send_cmd(hdev, HCI_OP_READ_BD_ADDR, 0, NULL);
221 
222 	/* Read Class of Device */
223 	hci_send_cmd(hdev, HCI_OP_READ_CLASS_OF_DEV, 0, NULL);
224 
225 	/* Read Local Name */
226 	hci_send_cmd(hdev, HCI_OP_READ_LOCAL_NAME, 0, NULL);
227 
228 	/* Read Voice Setting */
229 	hci_send_cmd(hdev, HCI_OP_READ_VOICE_SETTING, 0, NULL);
230 
231 	/* Optional initialization */
232 
233 	/* Clear Event Filters */
234 	flt_type = HCI_FLT_CLEAR_ALL;
235 	hci_send_cmd(hdev, HCI_OP_SET_EVENT_FLT, 1, &flt_type);
236 
237 	/* Connection accept timeout ~20 secs */
238 	param = cpu_to_le16(0x7d00);
239 	hci_send_cmd(hdev, HCI_OP_WRITE_CA_TIMEOUT, 2, &param);
240 
241 	bacpy(&cp.bdaddr, BDADDR_ANY);
242 	cp.delete_all = 1;
243 	hci_send_cmd(hdev, HCI_OP_DELETE_STORED_LINK_KEY, sizeof(cp), &cp);
244 }
245 
246 static void amp_init(struct hci_dev *hdev)
247 {
248 	hdev->flow_ctl_mode = HCI_FLOW_CTL_MODE_BLOCK_BASED;
249 
250 	/* Reset */
251 	hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
252 
253 	/* Read Local Version */
254 	hci_send_cmd(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL);
255 
256 	/* Read Local AMP Info */
257 	hci_send_cmd(hdev, HCI_OP_READ_LOCAL_AMP_INFO, 0, NULL);
258 }
259 
260 static void hci_init_req(struct hci_dev *hdev, unsigned long opt)
261 {
262 	struct sk_buff *skb;
263 
264 	BT_DBG("%s %ld", hdev->name, opt);
265 
266 	/* Driver initialization */
267 
268 	/* Special commands */
269 	while ((skb = skb_dequeue(&hdev->driver_init))) {
270 		bt_cb(skb)->pkt_type = HCI_COMMAND_PKT;
271 		skb->dev = (void *) hdev;
272 
273 		skb_queue_tail(&hdev->cmd_q, skb);
274 		queue_work(hdev->workqueue, &hdev->cmd_work);
275 	}
276 	skb_queue_purge(&hdev->driver_init);
277 
278 	switch (hdev->dev_type) {
279 	case HCI_BREDR:
280 		bredr_init(hdev);
281 		break;
282 
283 	case HCI_AMP:
284 		amp_init(hdev);
285 		break;
286 
287 	default:
288 		BT_ERR("Unknown device type %d", hdev->dev_type);
289 		break;
290 	}
291 
292 }
293 
294 static void hci_le_init_req(struct hci_dev *hdev, unsigned long opt)
295 {
296 	BT_DBG("%s", hdev->name);
297 
298 	/* Read LE buffer size */
299 	hci_send_cmd(hdev, HCI_OP_LE_READ_BUFFER_SIZE, 0, NULL);
300 }
301 
302 static void hci_scan_req(struct hci_dev *hdev, unsigned long opt)
303 {
304 	__u8 scan = opt;
305 
306 	BT_DBG("%s %x", hdev->name, scan);
307 
308 	/* Inquiry and Page scans */
309 	hci_send_cmd(hdev, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
310 }
311 
312 static void hci_auth_req(struct hci_dev *hdev, unsigned long opt)
313 {
314 	__u8 auth = opt;
315 
316 	BT_DBG("%s %x", hdev->name, auth);
317 
318 	/* Authentication */
319 	hci_send_cmd(hdev, HCI_OP_WRITE_AUTH_ENABLE, 1, &auth);
320 }
321 
322 static void hci_encrypt_req(struct hci_dev *hdev, unsigned long opt)
323 {
324 	__u8 encrypt = opt;
325 
326 	BT_DBG("%s %x", hdev->name, encrypt);
327 
328 	/* Encryption */
329 	hci_send_cmd(hdev, HCI_OP_WRITE_ENCRYPT_MODE, 1, &encrypt);
330 }
331 
332 static void hci_linkpol_req(struct hci_dev *hdev, unsigned long opt)
333 {
334 	__le16 policy = cpu_to_le16(opt);
335 
336 	BT_DBG("%s %x", hdev->name, policy);
337 
338 	/* Default link policy */
339 	hci_send_cmd(hdev, HCI_OP_WRITE_DEF_LINK_POLICY, 2, &policy);
340 }
341 
342 /* Get HCI device by index.
343  * Device is held on return. */
344 struct hci_dev *hci_dev_get(int index)
345 {
346 	struct hci_dev *hdev = NULL, *d;
347 
348 	BT_DBG("%d", index);
349 
350 	if (index < 0)
351 		return NULL;
352 
353 	read_lock(&hci_dev_list_lock);
354 	list_for_each_entry(d, &hci_dev_list, list) {
355 		if (d->id == index) {
356 			hdev = hci_dev_hold(d);
357 			break;
358 		}
359 	}
360 	read_unlock(&hci_dev_list_lock);
361 	return hdev;
362 }
363 
364 /* ---- Inquiry support ---- */
365 
366 bool hci_discovery_active(struct hci_dev *hdev)
367 {
368 	struct discovery_state *discov = &hdev->discovery;
369 
370 	switch (discov->state) {
371 	case DISCOVERY_FINDING:
372 	case DISCOVERY_RESOLVING:
373 		return true;
374 
375 	default:
376 		return false;
377 	}
378 }
379 
380 void hci_discovery_set_state(struct hci_dev *hdev, int state)
381 {
382 	BT_DBG("%s state %u -> %u", hdev->name, hdev->discovery.state, state);
383 
384 	if (hdev->discovery.state == state)
385 		return;
386 
387 	switch (state) {
388 	case DISCOVERY_STOPPED:
389 		if (hdev->discovery.state != DISCOVERY_STARTING)
390 			mgmt_discovering(hdev, 0);
391 		break;
392 	case DISCOVERY_STARTING:
393 		break;
394 	case DISCOVERY_FINDING:
395 		mgmt_discovering(hdev, 1);
396 		break;
397 	case DISCOVERY_RESOLVING:
398 		break;
399 	case DISCOVERY_STOPPING:
400 		break;
401 	}
402 
403 	hdev->discovery.state = state;
404 }
405 
406 static void inquiry_cache_flush(struct hci_dev *hdev)
407 {
408 	struct discovery_state *cache = &hdev->discovery;
409 	struct inquiry_entry *p, *n;
410 
411 	list_for_each_entry_safe(p, n, &cache->all, all) {
412 		list_del(&p->all);
413 		kfree(p);
414 	}
415 
416 	INIT_LIST_HEAD(&cache->unknown);
417 	INIT_LIST_HEAD(&cache->resolve);
418 }
419 
420 struct inquiry_entry *hci_inquiry_cache_lookup(struct hci_dev *hdev, bdaddr_t *bdaddr)
421 {
422 	struct discovery_state *cache = &hdev->discovery;
423 	struct inquiry_entry *e;
424 
425 	BT_DBG("cache %p, %s", cache, batostr(bdaddr));
426 
427 	list_for_each_entry(e, &cache->all, all) {
428 		if (!bacmp(&e->data.bdaddr, bdaddr))
429 			return e;
430 	}
431 
432 	return NULL;
433 }
434 
435 struct inquiry_entry *hci_inquiry_cache_lookup_unknown(struct hci_dev *hdev,
436 						       bdaddr_t *bdaddr)
437 {
438 	struct discovery_state *cache = &hdev->discovery;
439 	struct inquiry_entry *e;
440 
441 	BT_DBG("cache %p, %s", cache, batostr(bdaddr));
442 
443 	list_for_each_entry(e, &cache->unknown, list) {
444 		if (!bacmp(&e->data.bdaddr, bdaddr))
445 			return e;
446 	}
447 
448 	return NULL;
449 }
450 
451 struct inquiry_entry *hci_inquiry_cache_lookup_resolve(struct hci_dev *hdev,
452 						       bdaddr_t *bdaddr,
453 						       int state)
454 {
455 	struct discovery_state *cache = &hdev->discovery;
456 	struct inquiry_entry *e;
457 
458 	BT_DBG("cache %p bdaddr %s state %d", cache, batostr(bdaddr), state);
459 
460 	list_for_each_entry(e, &cache->resolve, list) {
461 		if (!bacmp(bdaddr, BDADDR_ANY) && e->name_state == state)
462 			return e;
463 		if (!bacmp(&e->data.bdaddr, bdaddr))
464 			return e;
465 	}
466 
467 	return NULL;
468 }
469 
470 void hci_inquiry_cache_update_resolve(struct hci_dev *hdev,
471 				      struct inquiry_entry *ie)
472 {
473 	struct discovery_state *cache = &hdev->discovery;
474 	struct list_head *pos = &cache->resolve;
475 	struct inquiry_entry *p;
476 
477 	list_del(&ie->list);
478 
479 	list_for_each_entry(p, &cache->resolve, list) {
480 		if (p->name_state != NAME_PENDING &&
481 				abs(p->data.rssi) >= abs(ie->data.rssi))
482 			break;
483 		pos = &p->list;
484 	}
485 
486 	list_add(&ie->list, pos);
487 }
488 
489 bool hci_inquiry_cache_update(struct hci_dev *hdev, struct inquiry_data *data,
490 			      bool name_known, bool *ssp)
491 {
492 	struct discovery_state *cache = &hdev->discovery;
493 	struct inquiry_entry *ie;
494 
495 	BT_DBG("cache %p, %s", cache, batostr(&data->bdaddr));
496 
497 	if (ssp)
498 		*ssp = data->ssp_mode;
499 
500 	ie = hci_inquiry_cache_lookup(hdev, &data->bdaddr);
501 	if (ie) {
502 		if (ie->data.ssp_mode && ssp)
503 			*ssp = true;
504 
505 		if (ie->name_state == NAME_NEEDED &&
506 						data->rssi != ie->data.rssi) {
507 			ie->data.rssi = data->rssi;
508 			hci_inquiry_cache_update_resolve(hdev, ie);
509 		}
510 
511 		goto update;
512 	}
513 
514 	/* Entry not in the cache. Add new one. */
515 	ie = kzalloc(sizeof(struct inquiry_entry), GFP_ATOMIC);
516 	if (!ie)
517 		return false;
518 
519 	list_add(&ie->all, &cache->all);
520 
521 	if (name_known) {
522 		ie->name_state = NAME_KNOWN;
523 	} else {
524 		ie->name_state = NAME_NOT_KNOWN;
525 		list_add(&ie->list, &cache->unknown);
526 	}
527 
528 update:
529 	if (name_known && ie->name_state != NAME_KNOWN &&
530 					ie->name_state != NAME_PENDING) {
531 		ie->name_state = NAME_KNOWN;
532 		list_del(&ie->list);
533 	}
534 
535 	memcpy(&ie->data, data, sizeof(*data));
536 	ie->timestamp = jiffies;
537 	cache->timestamp = jiffies;
538 
539 	if (ie->name_state == NAME_NOT_KNOWN)
540 		return false;
541 
542 	return true;
543 }
544 
545 static int inquiry_cache_dump(struct hci_dev *hdev, int num, __u8 *buf)
546 {
547 	struct discovery_state *cache = &hdev->discovery;
548 	struct inquiry_info *info = (struct inquiry_info *) buf;
549 	struct inquiry_entry *e;
550 	int copied = 0;
551 
552 	list_for_each_entry(e, &cache->all, all) {
553 		struct inquiry_data *data = &e->data;
554 
555 		if (copied >= num)
556 			break;
557 
558 		bacpy(&info->bdaddr, &data->bdaddr);
559 		info->pscan_rep_mode	= data->pscan_rep_mode;
560 		info->pscan_period_mode	= data->pscan_period_mode;
561 		info->pscan_mode	= data->pscan_mode;
562 		memcpy(info->dev_class, data->dev_class, 3);
563 		info->clock_offset	= data->clock_offset;
564 
565 		info++;
566 		copied++;
567 	}
568 
569 	BT_DBG("cache %p, copied %d", cache, copied);
570 	return copied;
571 }
572 
573 static void hci_inq_req(struct hci_dev *hdev, unsigned long opt)
574 {
575 	struct hci_inquiry_req *ir = (struct hci_inquiry_req *) opt;
576 	struct hci_cp_inquiry cp;
577 
578 	BT_DBG("%s", hdev->name);
579 
580 	if (test_bit(HCI_INQUIRY, &hdev->flags))
581 		return;
582 
583 	/* Start Inquiry */
584 	memcpy(&cp.lap, &ir->lap, 3);
585 	cp.length  = ir->length;
586 	cp.num_rsp = ir->num_rsp;
587 	hci_send_cmd(hdev, HCI_OP_INQUIRY, sizeof(cp), &cp);
588 }
589 
590 int hci_inquiry(void __user *arg)
591 {
592 	__u8 __user *ptr = arg;
593 	struct hci_inquiry_req ir;
594 	struct hci_dev *hdev;
595 	int err = 0, do_inquiry = 0, max_rsp;
596 	long timeo;
597 	__u8 *buf;
598 
599 	if (copy_from_user(&ir, ptr, sizeof(ir)))
600 		return -EFAULT;
601 
602 	hdev = hci_dev_get(ir.dev_id);
603 	if (!hdev)
604 		return -ENODEV;
605 
606 	hci_dev_lock(hdev);
607 	if (inquiry_cache_age(hdev) > INQUIRY_CACHE_AGE_MAX ||
608 				inquiry_cache_empty(hdev) ||
609 				ir.flags & IREQ_CACHE_FLUSH) {
610 		inquiry_cache_flush(hdev);
611 		do_inquiry = 1;
612 	}
613 	hci_dev_unlock(hdev);
614 
615 	timeo = ir.length * msecs_to_jiffies(2000);
616 
617 	if (do_inquiry) {
618 		err = hci_request(hdev, hci_inq_req, (unsigned long)&ir, timeo);
619 		if (err < 0)
620 			goto done;
621 	}
622 
623 	/* for unlimited number of responses we will use buffer with 255 entries */
624 	max_rsp = (ir.num_rsp == 0) ? 255 : ir.num_rsp;
625 
626 	/* cache_dump can't sleep. Therefore we allocate temp buffer and then
627 	 * copy it to the user space.
628 	 */
629 	buf = kmalloc(sizeof(struct inquiry_info) * max_rsp, GFP_KERNEL);
630 	if (!buf) {
631 		err = -ENOMEM;
632 		goto done;
633 	}
634 
635 	hci_dev_lock(hdev);
636 	ir.num_rsp = inquiry_cache_dump(hdev, max_rsp, buf);
637 	hci_dev_unlock(hdev);
638 
639 	BT_DBG("num_rsp %d", ir.num_rsp);
640 
641 	if (!copy_to_user(ptr, &ir, sizeof(ir))) {
642 		ptr += sizeof(ir);
643 		if (copy_to_user(ptr, buf, sizeof(struct inquiry_info) *
644 					ir.num_rsp))
645 			err = -EFAULT;
646 	} else
647 		err = -EFAULT;
648 
649 	kfree(buf);
650 
651 done:
652 	hci_dev_put(hdev);
653 	return err;
654 }
655 
656 /* ---- HCI ioctl helpers ---- */
657 
658 int hci_dev_open(__u16 dev)
659 {
660 	struct hci_dev *hdev;
661 	int ret = 0;
662 
663 	hdev = hci_dev_get(dev);
664 	if (!hdev)
665 		return -ENODEV;
666 
667 	BT_DBG("%s %p", hdev->name, hdev);
668 
669 	hci_req_lock(hdev);
670 
671 	if (test_bit(HCI_UNREGISTER, &hdev->dev_flags)) {
672 		ret = -ENODEV;
673 		goto done;
674 	}
675 
676 	if (hdev->rfkill && rfkill_blocked(hdev->rfkill)) {
677 		ret = -ERFKILL;
678 		goto done;
679 	}
680 
681 	if (test_bit(HCI_UP, &hdev->flags)) {
682 		ret = -EALREADY;
683 		goto done;
684 	}
685 
686 	if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks))
687 		set_bit(HCI_RAW, &hdev->flags);
688 
689 	/* Treat all non BR/EDR controllers as raw devices if
690 	   enable_hs is not set */
691 	if (hdev->dev_type != HCI_BREDR && !enable_hs)
692 		set_bit(HCI_RAW, &hdev->flags);
693 
694 	if (hdev->open(hdev)) {
695 		ret = -EIO;
696 		goto done;
697 	}
698 
699 	if (!test_bit(HCI_RAW, &hdev->flags)) {
700 		atomic_set(&hdev->cmd_cnt, 1);
701 		set_bit(HCI_INIT, &hdev->flags);
702 		hdev->init_last_cmd = 0;
703 
704 		ret = __hci_request(hdev, hci_init_req, 0,
705 					msecs_to_jiffies(HCI_INIT_TIMEOUT));
706 
707 		if (lmp_host_le_capable(hdev))
708 			ret = __hci_request(hdev, hci_le_init_req, 0,
709 					msecs_to_jiffies(HCI_INIT_TIMEOUT));
710 
711 		clear_bit(HCI_INIT, &hdev->flags);
712 	}
713 
714 	if (!ret) {
715 		hci_dev_hold(hdev);
716 		set_bit(HCI_UP, &hdev->flags);
717 		hci_notify(hdev, HCI_DEV_UP);
718 		if (!test_bit(HCI_SETUP, &hdev->dev_flags)) {
719 			hci_dev_lock(hdev);
720 			mgmt_powered(hdev, 1);
721 			hci_dev_unlock(hdev);
722 		}
723 	} else {
724 		/* Init failed, cleanup */
725 		flush_work(&hdev->tx_work);
726 		flush_work(&hdev->cmd_work);
727 		flush_work(&hdev->rx_work);
728 
729 		skb_queue_purge(&hdev->cmd_q);
730 		skb_queue_purge(&hdev->rx_q);
731 
732 		if (hdev->flush)
733 			hdev->flush(hdev);
734 
735 		if (hdev->sent_cmd) {
736 			kfree_skb(hdev->sent_cmd);
737 			hdev->sent_cmd = NULL;
738 		}
739 
740 		hdev->close(hdev);
741 		hdev->flags = 0;
742 	}
743 
744 done:
745 	hci_req_unlock(hdev);
746 	hci_dev_put(hdev);
747 	return ret;
748 }
749 
750 static int hci_dev_do_close(struct hci_dev *hdev)
751 {
752 	BT_DBG("%s %p", hdev->name, hdev);
753 
754 	cancel_work_sync(&hdev->le_scan);
755 
756 	hci_req_cancel(hdev, ENODEV);
757 	hci_req_lock(hdev);
758 
759 	if (!test_and_clear_bit(HCI_UP, &hdev->flags)) {
760 		del_timer_sync(&hdev->cmd_timer);
761 		hci_req_unlock(hdev);
762 		return 0;
763 	}
764 
765 	/* Flush RX and TX works */
766 	flush_work(&hdev->tx_work);
767 	flush_work(&hdev->rx_work);
768 
769 	if (hdev->discov_timeout > 0) {
770 		cancel_delayed_work(&hdev->discov_off);
771 		hdev->discov_timeout = 0;
772 		clear_bit(HCI_DISCOVERABLE, &hdev->dev_flags);
773 	}
774 
775 	if (test_and_clear_bit(HCI_SERVICE_CACHE, &hdev->dev_flags))
776 		cancel_delayed_work(&hdev->service_cache);
777 
778 	cancel_delayed_work_sync(&hdev->le_scan_disable);
779 
780 	hci_dev_lock(hdev);
781 	inquiry_cache_flush(hdev);
782 	hci_conn_hash_flush(hdev);
783 	hci_dev_unlock(hdev);
784 
785 	hci_notify(hdev, HCI_DEV_DOWN);
786 
787 	if (hdev->flush)
788 		hdev->flush(hdev);
789 
790 	/* Reset device */
791 	skb_queue_purge(&hdev->cmd_q);
792 	atomic_set(&hdev->cmd_cnt, 1);
793 	if (!test_bit(HCI_RAW, &hdev->flags) &&
794 				test_bit(HCI_QUIRK_NO_RESET, &hdev->quirks)) {
795 		set_bit(HCI_INIT, &hdev->flags);
796 		__hci_request(hdev, hci_reset_req, 0,
797 					msecs_to_jiffies(250));
798 		clear_bit(HCI_INIT, &hdev->flags);
799 	}
800 
801 	/* flush cmd  work */
802 	flush_work(&hdev->cmd_work);
803 
804 	/* Drop queues */
805 	skb_queue_purge(&hdev->rx_q);
806 	skb_queue_purge(&hdev->cmd_q);
807 	skb_queue_purge(&hdev->raw_q);
808 
809 	/* Drop last sent command */
810 	if (hdev->sent_cmd) {
811 		del_timer_sync(&hdev->cmd_timer);
812 		kfree_skb(hdev->sent_cmd);
813 		hdev->sent_cmd = NULL;
814 	}
815 
816 	/* After this point our queues are empty
817 	 * and no tasks are scheduled. */
818 	hdev->close(hdev);
819 
820 	if (!test_and_clear_bit(HCI_AUTO_OFF, &hdev->dev_flags)) {
821 		hci_dev_lock(hdev);
822 		mgmt_powered(hdev, 0);
823 		hci_dev_unlock(hdev);
824 	}
825 
826 	/* Clear flags */
827 	hdev->flags = 0;
828 
829 	memset(hdev->eir, 0, sizeof(hdev->eir));
830 	memset(hdev->dev_class, 0, sizeof(hdev->dev_class));
831 
832 	hci_req_unlock(hdev);
833 
834 	hci_dev_put(hdev);
835 	return 0;
836 }
837 
838 int hci_dev_close(__u16 dev)
839 {
840 	struct hci_dev *hdev;
841 	int err;
842 
843 	hdev = hci_dev_get(dev);
844 	if (!hdev)
845 		return -ENODEV;
846 
847 	if (test_and_clear_bit(HCI_AUTO_OFF, &hdev->dev_flags))
848 		cancel_delayed_work(&hdev->power_off);
849 
850 	err = hci_dev_do_close(hdev);
851 
852 	hci_dev_put(hdev);
853 	return err;
854 }
855 
856 int hci_dev_reset(__u16 dev)
857 {
858 	struct hci_dev *hdev;
859 	int ret = 0;
860 
861 	hdev = hci_dev_get(dev);
862 	if (!hdev)
863 		return -ENODEV;
864 
865 	hci_req_lock(hdev);
866 
867 	if (!test_bit(HCI_UP, &hdev->flags))
868 		goto done;
869 
870 	/* Drop queues */
871 	skb_queue_purge(&hdev->rx_q);
872 	skb_queue_purge(&hdev->cmd_q);
873 
874 	hci_dev_lock(hdev);
875 	inquiry_cache_flush(hdev);
876 	hci_conn_hash_flush(hdev);
877 	hci_dev_unlock(hdev);
878 
879 	if (hdev->flush)
880 		hdev->flush(hdev);
881 
882 	atomic_set(&hdev->cmd_cnt, 1);
883 	hdev->acl_cnt = 0; hdev->sco_cnt = 0; hdev->le_cnt = 0;
884 
885 	if (!test_bit(HCI_RAW, &hdev->flags))
886 		ret = __hci_request(hdev, hci_reset_req, 0,
887 					msecs_to_jiffies(HCI_INIT_TIMEOUT));
888 
889 done:
890 	hci_req_unlock(hdev);
891 	hci_dev_put(hdev);
892 	return ret;
893 }
894 
895 int hci_dev_reset_stat(__u16 dev)
896 {
897 	struct hci_dev *hdev;
898 	int ret = 0;
899 
900 	hdev = hci_dev_get(dev);
901 	if (!hdev)
902 		return -ENODEV;
903 
904 	memset(&hdev->stat, 0, sizeof(struct hci_dev_stats));
905 
906 	hci_dev_put(hdev);
907 
908 	return ret;
909 }
910 
911 int hci_dev_cmd(unsigned int cmd, void __user *arg)
912 {
913 	struct hci_dev *hdev;
914 	struct hci_dev_req dr;
915 	int err = 0;
916 
917 	if (copy_from_user(&dr, arg, sizeof(dr)))
918 		return -EFAULT;
919 
920 	hdev = hci_dev_get(dr.dev_id);
921 	if (!hdev)
922 		return -ENODEV;
923 
924 	switch (cmd) {
925 	case HCISETAUTH:
926 		err = hci_request(hdev, hci_auth_req, dr.dev_opt,
927 					msecs_to_jiffies(HCI_INIT_TIMEOUT));
928 		break;
929 
930 	case HCISETENCRYPT:
931 		if (!lmp_encrypt_capable(hdev)) {
932 			err = -EOPNOTSUPP;
933 			break;
934 		}
935 
936 		if (!test_bit(HCI_AUTH, &hdev->flags)) {
937 			/* Auth must be enabled first */
938 			err = hci_request(hdev, hci_auth_req, dr.dev_opt,
939 					msecs_to_jiffies(HCI_INIT_TIMEOUT));
940 			if (err)
941 				break;
942 		}
943 
944 		err = hci_request(hdev, hci_encrypt_req, dr.dev_opt,
945 					msecs_to_jiffies(HCI_INIT_TIMEOUT));
946 		break;
947 
948 	case HCISETSCAN:
949 		err = hci_request(hdev, hci_scan_req, dr.dev_opt,
950 					msecs_to_jiffies(HCI_INIT_TIMEOUT));
951 		break;
952 
953 	case HCISETLINKPOL:
954 		err = hci_request(hdev, hci_linkpol_req, dr.dev_opt,
955 					msecs_to_jiffies(HCI_INIT_TIMEOUT));
956 		break;
957 
958 	case HCISETLINKMODE:
959 		hdev->link_mode = ((__u16) dr.dev_opt) &
960 					(HCI_LM_MASTER | HCI_LM_ACCEPT);
961 		break;
962 
963 	case HCISETPTYPE:
964 		hdev->pkt_type = (__u16) dr.dev_opt;
965 		break;
966 
967 	case HCISETACLMTU:
968 		hdev->acl_mtu  = *((__u16 *) &dr.dev_opt + 1);
969 		hdev->acl_pkts = *((__u16 *) &dr.dev_opt + 0);
970 		break;
971 
972 	case HCISETSCOMTU:
973 		hdev->sco_mtu  = *((__u16 *) &dr.dev_opt + 1);
974 		hdev->sco_pkts = *((__u16 *) &dr.dev_opt + 0);
975 		break;
976 
977 	default:
978 		err = -EINVAL;
979 		break;
980 	}
981 
982 	hci_dev_put(hdev);
983 	return err;
984 }
985 
986 int hci_get_dev_list(void __user *arg)
987 {
988 	struct hci_dev *hdev;
989 	struct hci_dev_list_req *dl;
990 	struct hci_dev_req *dr;
991 	int n = 0, size, err;
992 	__u16 dev_num;
993 
994 	if (get_user(dev_num, (__u16 __user *) arg))
995 		return -EFAULT;
996 
997 	if (!dev_num || dev_num > (PAGE_SIZE * 2) / sizeof(*dr))
998 		return -EINVAL;
999 
1000 	size = sizeof(*dl) + dev_num * sizeof(*dr);
1001 
1002 	dl = kzalloc(size, GFP_KERNEL);
1003 	if (!dl)
1004 		return -ENOMEM;
1005 
1006 	dr = dl->dev_req;
1007 
1008 	read_lock(&hci_dev_list_lock);
1009 	list_for_each_entry(hdev, &hci_dev_list, list) {
1010 		if (test_and_clear_bit(HCI_AUTO_OFF, &hdev->dev_flags))
1011 			cancel_delayed_work(&hdev->power_off);
1012 
1013 		if (!test_bit(HCI_MGMT, &hdev->dev_flags))
1014 			set_bit(HCI_PAIRABLE, &hdev->dev_flags);
1015 
1016 		(dr + n)->dev_id  = hdev->id;
1017 		(dr + n)->dev_opt = hdev->flags;
1018 
1019 		if (++n >= dev_num)
1020 			break;
1021 	}
1022 	read_unlock(&hci_dev_list_lock);
1023 
1024 	dl->dev_num = n;
1025 	size = sizeof(*dl) + n * sizeof(*dr);
1026 
1027 	err = copy_to_user(arg, dl, size);
1028 	kfree(dl);
1029 
1030 	return err ? -EFAULT : 0;
1031 }
1032 
1033 int hci_get_dev_info(void __user *arg)
1034 {
1035 	struct hci_dev *hdev;
1036 	struct hci_dev_info di;
1037 	int err = 0;
1038 
1039 	if (copy_from_user(&di, arg, sizeof(di)))
1040 		return -EFAULT;
1041 
1042 	hdev = hci_dev_get(di.dev_id);
1043 	if (!hdev)
1044 		return -ENODEV;
1045 
1046 	if (test_and_clear_bit(HCI_AUTO_OFF, &hdev->dev_flags))
1047 		cancel_delayed_work_sync(&hdev->power_off);
1048 
1049 	if (!test_bit(HCI_MGMT, &hdev->dev_flags))
1050 		set_bit(HCI_PAIRABLE, &hdev->dev_flags);
1051 
1052 	strcpy(di.name, hdev->name);
1053 	di.bdaddr   = hdev->bdaddr;
1054 	di.type     = (hdev->bus & 0x0f) | (hdev->dev_type << 4);
1055 	di.flags    = hdev->flags;
1056 	di.pkt_type = hdev->pkt_type;
1057 	di.acl_mtu  = hdev->acl_mtu;
1058 	di.acl_pkts = hdev->acl_pkts;
1059 	di.sco_mtu  = hdev->sco_mtu;
1060 	di.sco_pkts = hdev->sco_pkts;
1061 	di.link_policy = hdev->link_policy;
1062 	di.link_mode   = hdev->link_mode;
1063 
1064 	memcpy(&di.stat, &hdev->stat, sizeof(di.stat));
1065 	memcpy(&di.features, &hdev->features, sizeof(di.features));
1066 
1067 	if (copy_to_user(arg, &di, sizeof(di)))
1068 		err = -EFAULT;
1069 
1070 	hci_dev_put(hdev);
1071 
1072 	return err;
1073 }
1074 
1075 /* ---- Interface to HCI drivers ---- */
1076 
1077 static int hci_rfkill_set_block(void *data, bool blocked)
1078 {
1079 	struct hci_dev *hdev = data;
1080 
1081 	BT_DBG("%p name %s blocked %d", hdev, hdev->name, blocked);
1082 
1083 	if (!blocked)
1084 		return 0;
1085 
1086 	hci_dev_do_close(hdev);
1087 
1088 	return 0;
1089 }
1090 
1091 static const struct rfkill_ops hci_rfkill_ops = {
1092 	.set_block = hci_rfkill_set_block,
1093 };
1094 
1095 static void hci_power_on(struct work_struct *work)
1096 {
1097 	struct hci_dev *hdev = container_of(work, struct hci_dev, power_on);
1098 
1099 	BT_DBG("%s", hdev->name);
1100 
1101 	if (hci_dev_open(hdev->id) < 0)
1102 		return;
1103 
1104 	if (test_bit(HCI_AUTO_OFF, &hdev->dev_flags))
1105 		schedule_delayed_work(&hdev->power_off,
1106 					msecs_to_jiffies(AUTO_OFF_TIMEOUT));
1107 
1108 	if (test_and_clear_bit(HCI_SETUP, &hdev->dev_flags))
1109 		mgmt_index_added(hdev);
1110 }
1111 
1112 static void hci_power_off(struct work_struct *work)
1113 {
1114 	struct hci_dev *hdev = container_of(work, struct hci_dev,
1115 							power_off.work);
1116 
1117 	BT_DBG("%s", hdev->name);
1118 
1119 	hci_dev_do_close(hdev);
1120 }
1121 
1122 static void hci_discov_off(struct work_struct *work)
1123 {
1124 	struct hci_dev *hdev;
1125 	u8 scan = SCAN_PAGE;
1126 
1127 	hdev = container_of(work, struct hci_dev, discov_off.work);
1128 
1129 	BT_DBG("%s", hdev->name);
1130 
1131 	hci_dev_lock(hdev);
1132 
1133 	hci_send_cmd(hdev, HCI_OP_WRITE_SCAN_ENABLE, sizeof(scan), &scan);
1134 
1135 	hdev->discov_timeout = 0;
1136 
1137 	hci_dev_unlock(hdev);
1138 }
1139 
1140 int hci_uuids_clear(struct hci_dev *hdev)
1141 {
1142 	struct list_head *p, *n;
1143 
1144 	list_for_each_safe(p, n, &hdev->uuids) {
1145 		struct bt_uuid *uuid;
1146 
1147 		uuid = list_entry(p, struct bt_uuid, list);
1148 
1149 		list_del(p);
1150 		kfree(uuid);
1151 	}
1152 
1153 	return 0;
1154 }
1155 
1156 int hci_link_keys_clear(struct hci_dev *hdev)
1157 {
1158 	struct list_head *p, *n;
1159 
1160 	list_for_each_safe(p, n, &hdev->link_keys) {
1161 		struct link_key *key;
1162 
1163 		key = list_entry(p, struct link_key, list);
1164 
1165 		list_del(p);
1166 		kfree(key);
1167 	}
1168 
1169 	return 0;
1170 }
1171 
1172 int hci_smp_ltks_clear(struct hci_dev *hdev)
1173 {
1174 	struct smp_ltk *k, *tmp;
1175 
1176 	list_for_each_entry_safe(k, tmp, &hdev->long_term_keys, list) {
1177 		list_del(&k->list);
1178 		kfree(k);
1179 	}
1180 
1181 	return 0;
1182 }
1183 
1184 struct link_key *hci_find_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr)
1185 {
1186 	struct link_key *k;
1187 
1188 	list_for_each_entry(k, &hdev->link_keys, list)
1189 		if (bacmp(bdaddr, &k->bdaddr) == 0)
1190 			return k;
1191 
1192 	return NULL;
1193 }
1194 
1195 static bool hci_persistent_key(struct hci_dev *hdev, struct hci_conn *conn,
1196 						u8 key_type, u8 old_key_type)
1197 {
1198 	/* Legacy key */
1199 	if (key_type < 0x03)
1200 		return true;
1201 
1202 	/* Debug keys are insecure so don't store them persistently */
1203 	if (key_type == HCI_LK_DEBUG_COMBINATION)
1204 		return false;
1205 
1206 	/* Changed combination key and there's no previous one */
1207 	if (key_type == HCI_LK_CHANGED_COMBINATION && old_key_type == 0xff)
1208 		return false;
1209 
1210 	/* Security mode 3 case */
1211 	if (!conn)
1212 		return true;
1213 
1214 	/* Neither local nor remote side had no-bonding as requirement */
1215 	if (conn->auth_type > 0x01 && conn->remote_auth > 0x01)
1216 		return true;
1217 
1218 	/* Local side had dedicated bonding as requirement */
1219 	if (conn->auth_type == 0x02 || conn->auth_type == 0x03)
1220 		return true;
1221 
1222 	/* Remote side had dedicated bonding as requirement */
1223 	if (conn->remote_auth == 0x02 || conn->remote_auth == 0x03)
1224 		return true;
1225 
1226 	/* If none of the above criteria match, then don't store the key
1227 	 * persistently */
1228 	return false;
1229 }
1230 
1231 struct smp_ltk *hci_find_ltk(struct hci_dev *hdev, __le16 ediv, u8 rand[8])
1232 {
1233 	struct smp_ltk *k;
1234 
1235 	list_for_each_entry(k, &hdev->long_term_keys, list) {
1236 		if (k->ediv != ediv ||
1237 				memcmp(rand, k->rand, sizeof(k->rand)))
1238 			continue;
1239 
1240 		return k;
1241 	}
1242 
1243 	return NULL;
1244 }
1245 EXPORT_SYMBOL(hci_find_ltk);
1246 
1247 struct smp_ltk *hci_find_ltk_by_addr(struct hci_dev *hdev, bdaddr_t *bdaddr,
1248 				     u8 addr_type)
1249 {
1250 	struct smp_ltk *k;
1251 
1252 	list_for_each_entry(k, &hdev->long_term_keys, list)
1253 		if (addr_type == k->bdaddr_type &&
1254 					bacmp(bdaddr, &k->bdaddr) == 0)
1255 			return k;
1256 
1257 	return NULL;
1258 }
1259 EXPORT_SYMBOL(hci_find_ltk_by_addr);
1260 
1261 int hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn, int new_key,
1262 		     bdaddr_t *bdaddr, u8 *val, u8 type, u8 pin_len)
1263 {
1264 	struct link_key *key, *old_key;
1265 	u8 old_key_type;
1266 	bool persistent;
1267 
1268 	old_key = hci_find_link_key(hdev, bdaddr);
1269 	if (old_key) {
1270 		old_key_type = old_key->type;
1271 		key = old_key;
1272 	} else {
1273 		old_key_type = conn ? conn->key_type : 0xff;
1274 		key = kzalloc(sizeof(*key), GFP_ATOMIC);
1275 		if (!key)
1276 			return -ENOMEM;
1277 		list_add(&key->list, &hdev->link_keys);
1278 	}
1279 
1280 	BT_DBG("%s key for %s type %u", hdev->name, batostr(bdaddr), type);
1281 
1282 	/* Some buggy controller combinations generate a changed
1283 	 * combination key for legacy pairing even when there's no
1284 	 * previous key */
1285 	if (type == HCI_LK_CHANGED_COMBINATION &&
1286 					(!conn || conn->remote_auth == 0xff) &&
1287 					old_key_type == 0xff) {
1288 		type = HCI_LK_COMBINATION;
1289 		if (conn)
1290 			conn->key_type = type;
1291 	}
1292 
1293 	bacpy(&key->bdaddr, bdaddr);
1294 	memcpy(key->val, val, 16);
1295 	key->pin_len = pin_len;
1296 
1297 	if (type == HCI_LK_CHANGED_COMBINATION)
1298 		key->type = old_key_type;
1299 	else
1300 		key->type = type;
1301 
1302 	if (!new_key)
1303 		return 0;
1304 
1305 	persistent = hci_persistent_key(hdev, conn, type, old_key_type);
1306 
1307 	mgmt_new_link_key(hdev, key, persistent);
1308 
1309 	if (conn)
1310 		conn->flush_key = !persistent;
1311 
1312 	return 0;
1313 }
1314 
1315 int hci_add_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 addr_type, u8 type,
1316 		int new_key, u8 authenticated, u8 tk[16], u8 enc_size, __le16
1317 		ediv, u8 rand[8])
1318 {
1319 	struct smp_ltk *key, *old_key;
1320 
1321 	if (!(type & HCI_SMP_STK) && !(type & HCI_SMP_LTK))
1322 		return 0;
1323 
1324 	old_key = hci_find_ltk_by_addr(hdev, bdaddr, addr_type);
1325 	if (old_key)
1326 		key = old_key;
1327 	else {
1328 		key = kzalloc(sizeof(*key), GFP_ATOMIC);
1329 		if (!key)
1330 			return -ENOMEM;
1331 		list_add(&key->list, &hdev->long_term_keys);
1332 	}
1333 
1334 	bacpy(&key->bdaddr, bdaddr);
1335 	key->bdaddr_type = addr_type;
1336 	memcpy(key->val, tk, sizeof(key->val));
1337 	key->authenticated = authenticated;
1338 	key->ediv = ediv;
1339 	key->enc_size = enc_size;
1340 	key->type = type;
1341 	memcpy(key->rand, rand, sizeof(key->rand));
1342 
1343 	if (!new_key)
1344 		return 0;
1345 
1346 	if (type & HCI_SMP_LTK)
1347 		mgmt_new_ltk(hdev, key, 1);
1348 
1349 	return 0;
1350 }
1351 
1352 int hci_remove_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr)
1353 {
1354 	struct link_key *key;
1355 
1356 	key = hci_find_link_key(hdev, bdaddr);
1357 	if (!key)
1358 		return -ENOENT;
1359 
1360 	BT_DBG("%s removing %s", hdev->name, batostr(bdaddr));
1361 
1362 	list_del(&key->list);
1363 	kfree(key);
1364 
1365 	return 0;
1366 }
1367 
1368 int hci_remove_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr)
1369 {
1370 	struct smp_ltk *k, *tmp;
1371 
1372 	list_for_each_entry_safe(k, tmp, &hdev->long_term_keys, list) {
1373 		if (bacmp(bdaddr, &k->bdaddr))
1374 			continue;
1375 
1376 		BT_DBG("%s removing %s", hdev->name, batostr(bdaddr));
1377 
1378 		list_del(&k->list);
1379 		kfree(k);
1380 	}
1381 
1382 	return 0;
1383 }
1384 
1385 /* HCI command timer function */
1386 static void hci_cmd_timer(unsigned long arg)
1387 {
1388 	struct hci_dev *hdev = (void *) arg;
1389 
1390 	BT_ERR("%s command tx timeout", hdev->name);
1391 	atomic_set(&hdev->cmd_cnt, 1);
1392 	queue_work(hdev->workqueue, &hdev->cmd_work);
1393 }
1394 
1395 struct oob_data *hci_find_remote_oob_data(struct hci_dev *hdev,
1396 					  bdaddr_t *bdaddr)
1397 {
1398 	struct oob_data *data;
1399 
1400 	list_for_each_entry(data, &hdev->remote_oob_data, list)
1401 		if (bacmp(bdaddr, &data->bdaddr) == 0)
1402 			return data;
1403 
1404 	return NULL;
1405 }
1406 
1407 int hci_remove_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr)
1408 {
1409 	struct oob_data *data;
1410 
1411 	data = hci_find_remote_oob_data(hdev, bdaddr);
1412 	if (!data)
1413 		return -ENOENT;
1414 
1415 	BT_DBG("%s removing %s", hdev->name, batostr(bdaddr));
1416 
1417 	list_del(&data->list);
1418 	kfree(data);
1419 
1420 	return 0;
1421 }
1422 
1423 int hci_remote_oob_data_clear(struct hci_dev *hdev)
1424 {
1425 	struct oob_data *data, *n;
1426 
1427 	list_for_each_entry_safe(data, n, &hdev->remote_oob_data, list) {
1428 		list_del(&data->list);
1429 		kfree(data);
1430 	}
1431 
1432 	return 0;
1433 }
1434 
1435 int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 *hash,
1436 			    u8 *randomizer)
1437 {
1438 	struct oob_data *data;
1439 
1440 	data = hci_find_remote_oob_data(hdev, bdaddr);
1441 
1442 	if (!data) {
1443 		data = kmalloc(sizeof(*data), GFP_ATOMIC);
1444 		if (!data)
1445 			return -ENOMEM;
1446 
1447 		bacpy(&data->bdaddr, bdaddr);
1448 		list_add(&data->list, &hdev->remote_oob_data);
1449 	}
1450 
1451 	memcpy(data->hash, hash, sizeof(data->hash));
1452 	memcpy(data->randomizer, randomizer, sizeof(data->randomizer));
1453 
1454 	BT_DBG("%s for %s", hdev->name, batostr(bdaddr));
1455 
1456 	return 0;
1457 }
1458 
1459 struct bdaddr_list *hci_blacklist_lookup(struct hci_dev *hdev, bdaddr_t *bdaddr)
1460 {
1461 	struct bdaddr_list *b;
1462 
1463 	list_for_each_entry(b, &hdev->blacklist, list)
1464 		if (bacmp(bdaddr, &b->bdaddr) == 0)
1465 			return b;
1466 
1467 	return NULL;
1468 }
1469 
1470 int hci_blacklist_clear(struct hci_dev *hdev)
1471 {
1472 	struct list_head *p, *n;
1473 
1474 	list_for_each_safe(p, n, &hdev->blacklist) {
1475 		struct bdaddr_list *b;
1476 
1477 		b = list_entry(p, struct bdaddr_list, list);
1478 
1479 		list_del(p);
1480 		kfree(b);
1481 	}
1482 
1483 	return 0;
1484 }
1485 
1486 int hci_blacklist_add(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type)
1487 {
1488 	struct bdaddr_list *entry;
1489 
1490 	if (bacmp(bdaddr, BDADDR_ANY) == 0)
1491 		return -EBADF;
1492 
1493 	if (hci_blacklist_lookup(hdev, bdaddr))
1494 		return -EEXIST;
1495 
1496 	entry = kzalloc(sizeof(struct bdaddr_list), GFP_KERNEL);
1497 	if (!entry)
1498 		return -ENOMEM;
1499 
1500 	bacpy(&entry->bdaddr, bdaddr);
1501 
1502 	list_add(&entry->list, &hdev->blacklist);
1503 
1504 	return mgmt_device_blocked(hdev, bdaddr, type);
1505 }
1506 
1507 int hci_blacklist_del(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type)
1508 {
1509 	struct bdaddr_list *entry;
1510 
1511 	if (bacmp(bdaddr, BDADDR_ANY) == 0)
1512 		return hci_blacklist_clear(hdev);
1513 
1514 	entry = hci_blacklist_lookup(hdev, bdaddr);
1515 	if (!entry)
1516 		return -ENOENT;
1517 
1518 	list_del(&entry->list);
1519 	kfree(entry);
1520 
1521 	return mgmt_device_unblocked(hdev, bdaddr, type);
1522 }
1523 
1524 static void le_scan_param_req(struct hci_dev *hdev, unsigned long opt)
1525 {
1526 	struct le_scan_params *param =  (struct le_scan_params *) opt;
1527 	struct hci_cp_le_set_scan_param cp;
1528 
1529 	memset(&cp, 0, sizeof(cp));
1530 	cp.type = param->type;
1531 	cp.interval = cpu_to_le16(param->interval);
1532 	cp.window = cpu_to_le16(param->window);
1533 
1534 	hci_send_cmd(hdev, HCI_OP_LE_SET_SCAN_PARAM, sizeof(cp), &cp);
1535 }
1536 
1537 static void le_scan_enable_req(struct hci_dev *hdev, unsigned long opt)
1538 {
1539 	struct hci_cp_le_set_scan_enable cp;
1540 
1541 	memset(&cp, 0, sizeof(cp));
1542 	cp.enable = 1;
1543 
1544 	hci_send_cmd(hdev, HCI_OP_LE_SET_SCAN_ENABLE, sizeof(cp), &cp);
1545 }
1546 
1547 static int hci_do_le_scan(struct hci_dev *hdev, u8 type, u16 interval,
1548 			  u16 window, int timeout)
1549 {
1550 	long timeo = msecs_to_jiffies(3000);
1551 	struct le_scan_params param;
1552 	int err;
1553 
1554 	BT_DBG("%s", hdev->name);
1555 
1556 	if (test_bit(HCI_LE_SCAN, &hdev->dev_flags))
1557 		return -EINPROGRESS;
1558 
1559 	param.type = type;
1560 	param.interval = interval;
1561 	param.window = window;
1562 
1563 	hci_req_lock(hdev);
1564 
1565 	err = __hci_request(hdev, le_scan_param_req, (unsigned long) &param,
1566 			    timeo);
1567 	if (!err)
1568 		err = __hci_request(hdev, le_scan_enable_req, 0, timeo);
1569 
1570 	hci_req_unlock(hdev);
1571 
1572 	if (err < 0)
1573 		return err;
1574 
1575 	schedule_delayed_work(&hdev->le_scan_disable,
1576 			      msecs_to_jiffies(timeout));
1577 
1578 	return 0;
1579 }
1580 
1581 int hci_cancel_le_scan(struct hci_dev *hdev)
1582 {
1583 	BT_DBG("%s", hdev->name);
1584 
1585 	if (!test_bit(HCI_LE_SCAN, &hdev->dev_flags))
1586 		return -EALREADY;
1587 
1588 	if (cancel_delayed_work(&hdev->le_scan_disable)) {
1589 		struct hci_cp_le_set_scan_enable cp;
1590 
1591 		/* Send HCI command to disable LE Scan */
1592 		memset(&cp, 0, sizeof(cp));
1593 		hci_send_cmd(hdev, HCI_OP_LE_SET_SCAN_ENABLE, sizeof(cp), &cp);
1594 	}
1595 
1596 	return 0;
1597 }
1598 
1599 static void le_scan_disable_work(struct work_struct *work)
1600 {
1601 	struct hci_dev *hdev = container_of(work, struct hci_dev,
1602 					    le_scan_disable.work);
1603 	struct hci_cp_le_set_scan_enable cp;
1604 
1605 	BT_DBG("%s", hdev->name);
1606 
1607 	memset(&cp, 0, sizeof(cp));
1608 
1609 	hci_send_cmd(hdev, HCI_OP_LE_SET_SCAN_ENABLE, sizeof(cp), &cp);
1610 }
1611 
1612 static void le_scan_work(struct work_struct *work)
1613 {
1614 	struct hci_dev *hdev = container_of(work, struct hci_dev, le_scan);
1615 	struct le_scan_params *param = &hdev->le_scan_params;
1616 
1617 	BT_DBG("%s", hdev->name);
1618 
1619 	hci_do_le_scan(hdev, param->type, param->interval, param->window,
1620 		       param->timeout);
1621 }
1622 
1623 int hci_le_scan(struct hci_dev *hdev, u8 type, u16 interval, u16 window,
1624 		int timeout)
1625 {
1626 	struct le_scan_params *param = &hdev->le_scan_params;
1627 
1628 	BT_DBG("%s", hdev->name);
1629 
1630 	if (work_busy(&hdev->le_scan))
1631 		return -EINPROGRESS;
1632 
1633 	param->type = type;
1634 	param->interval = interval;
1635 	param->window = window;
1636 	param->timeout = timeout;
1637 
1638 	queue_work(system_long_wq, &hdev->le_scan);
1639 
1640 	return 0;
1641 }
1642 
1643 /* Alloc HCI device */
1644 struct hci_dev *hci_alloc_dev(void)
1645 {
1646 	struct hci_dev *hdev;
1647 
1648 	hdev = kzalloc(sizeof(struct hci_dev), GFP_KERNEL);
1649 	if (!hdev)
1650 		return NULL;
1651 
1652 	hdev->pkt_type  = (HCI_DM1 | HCI_DH1 | HCI_HV1);
1653 	hdev->esco_type = (ESCO_HV1);
1654 	hdev->link_mode = (HCI_LM_ACCEPT);
1655 	hdev->io_capability = 0x03; /* No Input No Output */
1656 
1657 	hdev->sniff_max_interval = 800;
1658 	hdev->sniff_min_interval = 80;
1659 
1660 	mutex_init(&hdev->lock);
1661 	mutex_init(&hdev->req_lock);
1662 
1663 	INIT_LIST_HEAD(&hdev->mgmt_pending);
1664 	INIT_LIST_HEAD(&hdev->blacklist);
1665 	INIT_LIST_HEAD(&hdev->uuids);
1666 	INIT_LIST_HEAD(&hdev->link_keys);
1667 	INIT_LIST_HEAD(&hdev->long_term_keys);
1668 	INIT_LIST_HEAD(&hdev->remote_oob_data);
1669 
1670 	INIT_WORK(&hdev->rx_work, hci_rx_work);
1671 	INIT_WORK(&hdev->cmd_work, hci_cmd_work);
1672 	INIT_WORK(&hdev->tx_work, hci_tx_work);
1673 	INIT_WORK(&hdev->power_on, hci_power_on);
1674 	INIT_WORK(&hdev->le_scan, le_scan_work);
1675 
1676 	INIT_DELAYED_WORK(&hdev->power_off, hci_power_off);
1677 	INIT_DELAYED_WORK(&hdev->discov_off, hci_discov_off);
1678 	INIT_DELAYED_WORK(&hdev->le_scan_disable, le_scan_disable_work);
1679 
1680 	skb_queue_head_init(&hdev->driver_init);
1681 	skb_queue_head_init(&hdev->rx_q);
1682 	skb_queue_head_init(&hdev->cmd_q);
1683 	skb_queue_head_init(&hdev->raw_q);
1684 
1685 	init_waitqueue_head(&hdev->req_wait_q);
1686 
1687 	setup_timer(&hdev->cmd_timer, hci_cmd_timer, (unsigned long) hdev);
1688 
1689 	hci_init_sysfs(hdev);
1690 	discovery_init(hdev);
1691 	hci_conn_hash_init(hdev);
1692 
1693 	return hdev;
1694 }
1695 EXPORT_SYMBOL(hci_alloc_dev);
1696 
1697 /* Free HCI device */
1698 void hci_free_dev(struct hci_dev *hdev)
1699 {
1700 	skb_queue_purge(&hdev->driver_init);
1701 
1702 	/* will free via device release */
1703 	put_device(&hdev->dev);
1704 }
1705 EXPORT_SYMBOL(hci_free_dev);
1706 
1707 /* Register HCI device */
1708 int hci_register_dev(struct hci_dev *hdev)
1709 {
1710 	struct list_head *head, *p;
1711 	int id, error;
1712 
1713 	if (!hdev->open || !hdev->close)
1714 		return -EINVAL;
1715 
1716 	write_lock(&hci_dev_list_lock);
1717 
1718 	/* Do not allow HCI_AMP devices to register at index 0,
1719 	 * so the index can be used as the AMP controller ID.
1720 	 */
1721 	id = (hdev->dev_type == HCI_BREDR) ? 0 : 1;
1722 	head = &hci_dev_list;
1723 
1724 	/* Find first available device id */
1725 	list_for_each(p, &hci_dev_list) {
1726 		int nid = list_entry(p, struct hci_dev, list)->id;
1727 		if (nid > id)
1728 			break;
1729 		if (nid == id)
1730 			id++;
1731 		head = p;
1732 	}
1733 
1734 	sprintf(hdev->name, "hci%d", id);
1735 	hdev->id = id;
1736 
1737 	BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus);
1738 
1739 	list_add(&hdev->list, head);
1740 
1741 	write_unlock(&hci_dev_list_lock);
1742 
1743 	hdev->workqueue = alloc_workqueue(hdev->name, WQ_HIGHPRI | WQ_UNBOUND |
1744 							WQ_MEM_RECLAIM, 1);
1745 	if (!hdev->workqueue) {
1746 		error = -ENOMEM;
1747 		goto err;
1748 	}
1749 
1750 	error = hci_add_sysfs(hdev);
1751 	if (error < 0)
1752 		goto err_wqueue;
1753 
1754 	hdev->rfkill = rfkill_alloc(hdev->name, &hdev->dev,
1755 				RFKILL_TYPE_BLUETOOTH, &hci_rfkill_ops, hdev);
1756 	if (hdev->rfkill) {
1757 		if (rfkill_register(hdev->rfkill) < 0) {
1758 			rfkill_destroy(hdev->rfkill);
1759 			hdev->rfkill = NULL;
1760 		}
1761 	}
1762 
1763 	set_bit(HCI_AUTO_OFF, &hdev->dev_flags);
1764 	set_bit(HCI_SETUP, &hdev->dev_flags);
1765 	schedule_work(&hdev->power_on);
1766 
1767 	hci_notify(hdev, HCI_DEV_REG);
1768 	hci_dev_hold(hdev);
1769 
1770 	return id;
1771 
1772 err_wqueue:
1773 	destroy_workqueue(hdev->workqueue);
1774 err:
1775 	write_lock(&hci_dev_list_lock);
1776 	list_del(&hdev->list);
1777 	write_unlock(&hci_dev_list_lock);
1778 
1779 	return error;
1780 }
1781 EXPORT_SYMBOL(hci_register_dev);
1782 
1783 /* Unregister HCI device */
1784 void hci_unregister_dev(struct hci_dev *hdev)
1785 {
1786 	int i;
1787 
1788 	BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus);
1789 
1790 	set_bit(HCI_UNREGISTER, &hdev->dev_flags);
1791 
1792 	write_lock(&hci_dev_list_lock);
1793 	list_del(&hdev->list);
1794 	write_unlock(&hci_dev_list_lock);
1795 
1796 	hci_dev_do_close(hdev);
1797 
1798 	for (i = 0; i < NUM_REASSEMBLY; i++)
1799 		kfree_skb(hdev->reassembly[i]);
1800 
1801 	if (!test_bit(HCI_INIT, &hdev->flags) &&
1802 				!test_bit(HCI_SETUP, &hdev->dev_flags)) {
1803 		hci_dev_lock(hdev);
1804 		mgmt_index_removed(hdev);
1805 		hci_dev_unlock(hdev);
1806 	}
1807 
1808 	/* mgmt_index_removed should take care of emptying the
1809 	 * pending list */
1810 	BUG_ON(!list_empty(&hdev->mgmt_pending));
1811 
1812 	hci_notify(hdev, HCI_DEV_UNREG);
1813 
1814 	if (hdev->rfkill) {
1815 		rfkill_unregister(hdev->rfkill);
1816 		rfkill_destroy(hdev->rfkill);
1817 	}
1818 
1819 	hci_del_sysfs(hdev);
1820 
1821 	destroy_workqueue(hdev->workqueue);
1822 
1823 	hci_dev_lock(hdev);
1824 	hci_blacklist_clear(hdev);
1825 	hci_uuids_clear(hdev);
1826 	hci_link_keys_clear(hdev);
1827 	hci_smp_ltks_clear(hdev);
1828 	hci_remote_oob_data_clear(hdev);
1829 	hci_dev_unlock(hdev);
1830 
1831 	hci_dev_put(hdev);
1832 }
1833 EXPORT_SYMBOL(hci_unregister_dev);
1834 
1835 /* Suspend HCI device */
1836 int hci_suspend_dev(struct hci_dev *hdev)
1837 {
1838 	hci_notify(hdev, HCI_DEV_SUSPEND);
1839 	return 0;
1840 }
1841 EXPORT_SYMBOL(hci_suspend_dev);
1842 
1843 /* Resume HCI device */
1844 int hci_resume_dev(struct hci_dev *hdev)
1845 {
1846 	hci_notify(hdev, HCI_DEV_RESUME);
1847 	return 0;
1848 }
1849 EXPORT_SYMBOL(hci_resume_dev);
1850 
1851 /* Receive frame from HCI drivers */
1852 int hci_recv_frame(struct sk_buff *skb)
1853 {
1854 	struct hci_dev *hdev = (struct hci_dev *) skb->dev;
1855 	if (!hdev || (!test_bit(HCI_UP, &hdev->flags)
1856 				&& !test_bit(HCI_INIT, &hdev->flags))) {
1857 		kfree_skb(skb);
1858 		return -ENXIO;
1859 	}
1860 
1861 	/* Incomming skb */
1862 	bt_cb(skb)->incoming = 1;
1863 
1864 	/* Time stamp */
1865 	__net_timestamp(skb);
1866 
1867 	skb_queue_tail(&hdev->rx_q, skb);
1868 	queue_work(hdev->workqueue, &hdev->rx_work);
1869 
1870 	return 0;
1871 }
1872 EXPORT_SYMBOL(hci_recv_frame);
1873 
1874 static int hci_reassembly(struct hci_dev *hdev, int type, void *data,
1875 						  int count, __u8 index)
1876 {
1877 	int len = 0;
1878 	int hlen = 0;
1879 	int remain = count;
1880 	struct sk_buff *skb;
1881 	struct bt_skb_cb *scb;
1882 
1883 	if ((type < HCI_ACLDATA_PKT || type > HCI_EVENT_PKT) ||
1884 				index >= NUM_REASSEMBLY)
1885 		return -EILSEQ;
1886 
1887 	skb = hdev->reassembly[index];
1888 
1889 	if (!skb) {
1890 		switch (type) {
1891 		case HCI_ACLDATA_PKT:
1892 			len = HCI_MAX_FRAME_SIZE;
1893 			hlen = HCI_ACL_HDR_SIZE;
1894 			break;
1895 		case HCI_EVENT_PKT:
1896 			len = HCI_MAX_EVENT_SIZE;
1897 			hlen = HCI_EVENT_HDR_SIZE;
1898 			break;
1899 		case HCI_SCODATA_PKT:
1900 			len = HCI_MAX_SCO_SIZE;
1901 			hlen = HCI_SCO_HDR_SIZE;
1902 			break;
1903 		}
1904 
1905 		skb = bt_skb_alloc(len, GFP_ATOMIC);
1906 		if (!skb)
1907 			return -ENOMEM;
1908 
1909 		scb = (void *) skb->cb;
1910 		scb->expect = hlen;
1911 		scb->pkt_type = type;
1912 
1913 		skb->dev = (void *) hdev;
1914 		hdev->reassembly[index] = skb;
1915 	}
1916 
1917 	while (count) {
1918 		scb = (void *) skb->cb;
1919 		len = min_t(uint, scb->expect, count);
1920 
1921 		memcpy(skb_put(skb, len), data, len);
1922 
1923 		count -= len;
1924 		data += len;
1925 		scb->expect -= len;
1926 		remain = count;
1927 
1928 		switch (type) {
1929 		case HCI_EVENT_PKT:
1930 			if (skb->len == HCI_EVENT_HDR_SIZE) {
1931 				struct hci_event_hdr *h = hci_event_hdr(skb);
1932 				scb->expect = h->plen;
1933 
1934 				if (skb_tailroom(skb) < scb->expect) {
1935 					kfree_skb(skb);
1936 					hdev->reassembly[index] = NULL;
1937 					return -ENOMEM;
1938 				}
1939 			}
1940 			break;
1941 
1942 		case HCI_ACLDATA_PKT:
1943 			if (skb->len  == HCI_ACL_HDR_SIZE) {
1944 				struct hci_acl_hdr *h = hci_acl_hdr(skb);
1945 				scb->expect = __le16_to_cpu(h->dlen);
1946 
1947 				if (skb_tailroom(skb) < scb->expect) {
1948 					kfree_skb(skb);
1949 					hdev->reassembly[index] = NULL;
1950 					return -ENOMEM;
1951 				}
1952 			}
1953 			break;
1954 
1955 		case HCI_SCODATA_PKT:
1956 			if (skb->len == HCI_SCO_HDR_SIZE) {
1957 				struct hci_sco_hdr *h = hci_sco_hdr(skb);
1958 				scb->expect = h->dlen;
1959 
1960 				if (skb_tailroom(skb) < scb->expect) {
1961 					kfree_skb(skb);
1962 					hdev->reassembly[index] = NULL;
1963 					return -ENOMEM;
1964 				}
1965 			}
1966 			break;
1967 		}
1968 
1969 		if (scb->expect == 0) {
1970 			/* Complete frame */
1971 
1972 			bt_cb(skb)->pkt_type = type;
1973 			hci_recv_frame(skb);
1974 
1975 			hdev->reassembly[index] = NULL;
1976 			return remain;
1977 		}
1978 	}
1979 
1980 	return remain;
1981 }
1982 
1983 int hci_recv_fragment(struct hci_dev *hdev, int type, void *data, int count)
1984 {
1985 	int rem = 0;
1986 
1987 	if (type < HCI_ACLDATA_PKT || type > HCI_EVENT_PKT)
1988 		return -EILSEQ;
1989 
1990 	while (count) {
1991 		rem = hci_reassembly(hdev, type, data, count, type - 1);
1992 		if (rem < 0)
1993 			return rem;
1994 
1995 		data += (count - rem);
1996 		count = rem;
1997 	}
1998 
1999 	return rem;
2000 }
2001 EXPORT_SYMBOL(hci_recv_fragment);
2002 
2003 #define STREAM_REASSEMBLY 0
2004 
2005 int hci_recv_stream_fragment(struct hci_dev *hdev, void *data, int count)
2006 {
2007 	int type;
2008 	int rem = 0;
2009 
2010 	while (count) {
2011 		struct sk_buff *skb = hdev->reassembly[STREAM_REASSEMBLY];
2012 
2013 		if (!skb) {
2014 			struct { char type; } *pkt;
2015 
2016 			/* Start of the frame */
2017 			pkt = data;
2018 			type = pkt->type;
2019 
2020 			data++;
2021 			count--;
2022 		} else
2023 			type = bt_cb(skb)->pkt_type;
2024 
2025 		rem = hci_reassembly(hdev, type, data, count,
2026 							STREAM_REASSEMBLY);
2027 		if (rem < 0)
2028 			return rem;
2029 
2030 		data += (count - rem);
2031 		count = rem;
2032 	}
2033 
2034 	return rem;
2035 }
2036 EXPORT_SYMBOL(hci_recv_stream_fragment);
2037 
2038 /* ---- Interface to upper protocols ---- */
2039 
2040 int hci_register_cb(struct hci_cb *cb)
2041 {
2042 	BT_DBG("%p name %s", cb, cb->name);
2043 
2044 	write_lock(&hci_cb_list_lock);
2045 	list_add(&cb->list, &hci_cb_list);
2046 	write_unlock(&hci_cb_list_lock);
2047 
2048 	return 0;
2049 }
2050 EXPORT_SYMBOL(hci_register_cb);
2051 
2052 int hci_unregister_cb(struct hci_cb *cb)
2053 {
2054 	BT_DBG("%p name %s", cb, cb->name);
2055 
2056 	write_lock(&hci_cb_list_lock);
2057 	list_del(&cb->list);
2058 	write_unlock(&hci_cb_list_lock);
2059 
2060 	return 0;
2061 }
2062 EXPORT_SYMBOL(hci_unregister_cb);
2063 
2064 static int hci_send_frame(struct sk_buff *skb)
2065 {
2066 	struct hci_dev *hdev = (struct hci_dev *) skb->dev;
2067 
2068 	if (!hdev) {
2069 		kfree_skb(skb);
2070 		return -ENODEV;
2071 	}
2072 
2073 	BT_DBG("%s type %d len %d", hdev->name, bt_cb(skb)->pkt_type, skb->len);
2074 
2075 	/* Time stamp */
2076 	__net_timestamp(skb);
2077 
2078 	/* Send copy to monitor */
2079 	hci_send_to_monitor(hdev, skb);
2080 
2081 	if (atomic_read(&hdev->promisc)) {
2082 		/* Send copy to the sockets */
2083 		hci_send_to_sock(hdev, skb);
2084 	}
2085 
2086 	/* Get rid of skb owner, prior to sending to the driver. */
2087 	skb_orphan(skb);
2088 
2089 	return hdev->send(skb);
2090 }
2091 
2092 /* Send HCI command */
2093 int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen, void *param)
2094 {
2095 	int len = HCI_COMMAND_HDR_SIZE + plen;
2096 	struct hci_command_hdr *hdr;
2097 	struct sk_buff *skb;
2098 
2099 	BT_DBG("%s opcode 0x%x plen %d", hdev->name, opcode, plen);
2100 
2101 	skb = bt_skb_alloc(len, GFP_ATOMIC);
2102 	if (!skb) {
2103 		BT_ERR("%s no memory for command", hdev->name);
2104 		return -ENOMEM;
2105 	}
2106 
2107 	hdr = (struct hci_command_hdr *) skb_put(skb, HCI_COMMAND_HDR_SIZE);
2108 	hdr->opcode = cpu_to_le16(opcode);
2109 	hdr->plen   = plen;
2110 
2111 	if (plen)
2112 		memcpy(skb_put(skb, plen), param, plen);
2113 
2114 	BT_DBG("skb len %d", skb->len);
2115 
2116 	bt_cb(skb)->pkt_type = HCI_COMMAND_PKT;
2117 	skb->dev = (void *) hdev;
2118 
2119 	if (test_bit(HCI_INIT, &hdev->flags))
2120 		hdev->init_last_cmd = opcode;
2121 
2122 	skb_queue_tail(&hdev->cmd_q, skb);
2123 	queue_work(hdev->workqueue, &hdev->cmd_work);
2124 
2125 	return 0;
2126 }
2127 
2128 /* Get data from the previously sent command */
2129 void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 opcode)
2130 {
2131 	struct hci_command_hdr *hdr;
2132 
2133 	if (!hdev->sent_cmd)
2134 		return NULL;
2135 
2136 	hdr = (void *) hdev->sent_cmd->data;
2137 
2138 	if (hdr->opcode != cpu_to_le16(opcode))
2139 		return NULL;
2140 
2141 	BT_DBG("%s opcode 0x%x", hdev->name, opcode);
2142 
2143 	return hdev->sent_cmd->data + HCI_COMMAND_HDR_SIZE;
2144 }
2145 
2146 /* Send ACL data */
2147 static void hci_add_acl_hdr(struct sk_buff *skb, __u16 handle, __u16 flags)
2148 {
2149 	struct hci_acl_hdr *hdr;
2150 	int len = skb->len;
2151 
2152 	skb_push(skb, HCI_ACL_HDR_SIZE);
2153 	skb_reset_transport_header(skb);
2154 	hdr = (struct hci_acl_hdr *)skb_transport_header(skb);
2155 	hdr->handle = cpu_to_le16(hci_handle_pack(handle, flags));
2156 	hdr->dlen   = cpu_to_le16(len);
2157 }
2158 
2159 static void hci_queue_acl(struct hci_conn *conn, struct sk_buff_head *queue,
2160 				struct sk_buff *skb, __u16 flags)
2161 {
2162 	struct hci_dev *hdev = conn->hdev;
2163 	struct sk_buff *list;
2164 
2165 	skb->len = skb_headlen(skb);
2166 	skb->data_len = 0;
2167 
2168 	bt_cb(skb)->pkt_type = HCI_ACLDATA_PKT;
2169 	hci_add_acl_hdr(skb, conn->handle, flags);
2170 
2171 	list = skb_shinfo(skb)->frag_list;
2172 	if (!list) {
2173 		/* Non fragmented */
2174 		BT_DBG("%s nonfrag skb %p len %d", hdev->name, skb, skb->len);
2175 
2176 		skb_queue_tail(queue, skb);
2177 	} else {
2178 		/* Fragmented */
2179 		BT_DBG("%s frag %p len %d", hdev->name, skb, skb->len);
2180 
2181 		skb_shinfo(skb)->frag_list = NULL;
2182 
2183 		/* Queue all fragments atomically */
2184 		spin_lock(&queue->lock);
2185 
2186 		__skb_queue_tail(queue, skb);
2187 
2188 		flags &= ~ACL_START;
2189 		flags |= ACL_CONT;
2190 		do {
2191 			skb = list; list = list->next;
2192 
2193 			skb->dev = (void *) hdev;
2194 			bt_cb(skb)->pkt_type = HCI_ACLDATA_PKT;
2195 			hci_add_acl_hdr(skb, conn->handle, flags);
2196 
2197 			BT_DBG("%s frag %p len %d", hdev->name, skb, skb->len);
2198 
2199 			__skb_queue_tail(queue, skb);
2200 		} while (list);
2201 
2202 		spin_unlock(&queue->lock);
2203 	}
2204 }
2205 
2206 void hci_send_acl(struct hci_chan *chan, struct sk_buff *skb, __u16 flags)
2207 {
2208 	struct hci_conn *conn = chan->conn;
2209 	struct hci_dev *hdev = conn->hdev;
2210 
2211 	BT_DBG("%s chan %p flags 0x%x", hdev->name, chan, flags);
2212 
2213 	skb->dev = (void *) hdev;
2214 
2215 	hci_queue_acl(conn, &chan->data_q, skb, flags);
2216 
2217 	queue_work(hdev->workqueue, &hdev->tx_work);
2218 }
2219 EXPORT_SYMBOL(hci_send_acl);
2220 
2221 /* Send SCO data */
2222 void hci_send_sco(struct hci_conn *conn, struct sk_buff *skb)
2223 {
2224 	struct hci_dev *hdev = conn->hdev;
2225 	struct hci_sco_hdr hdr;
2226 
2227 	BT_DBG("%s len %d", hdev->name, skb->len);
2228 
2229 	hdr.handle = cpu_to_le16(conn->handle);
2230 	hdr.dlen   = skb->len;
2231 
2232 	skb_push(skb, HCI_SCO_HDR_SIZE);
2233 	skb_reset_transport_header(skb);
2234 	memcpy(skb_transport_header(skb), &hdr, HCI_SCO_HDR_SIZE);
2235 
2236 	skb->dev = (void *) hdev;
2237 	bt_cb(skb)->pkt_type = HCI_SCODATA_PKT;
2238 
2239 	skb_queue_tail(&conn->data_q, skb);
2240 	queue_work(hdev->workqueue, &hdev->tx_work);
2241 }
2242 EXPORT_SYMBOL(hci_send_sco);
2243 
2244 /* ---- HCI TX task (outgoing data) ---- */
2245 
2246 /* HCI Connection scheduler */
2247 static inline struct hci_conn *hci_low_sent(struct hci_dev *hdev, __u8 type, int *quote)
2248 {
2249 	struct hci_conn_hash *h = &hdev->conn_hash;
2250 	struct hci_conn *conn = NULL, *c;
2251 	unsigned int num = 0, min = ~0;
2252 
2253 	/* We don't have to lock device here. Connections are always
2254 	 * added and removed with TX task disabled. */
2255 
2256 	rcu_read_lock();
2257 
2258 	list_for_each_entry_rcu(c, &h->list, list) {
2259 		if (c->type != type || skb_queue_empty(&c->data_q))
2260 			continue;
2261 
2262 		if (c->state != BT_CONNECTED && c->state != BT_CONFIG)
2263 			continue;
2264 
2265 		num++;
2266 
2267 		if (c->sent < min) {
2268 			min  = c->sent;
2269 			conn = c;
2270 		}
2271 
2272 		if (hci_conn_num(hdev, type) == num)
2273 			break;
2274 	}
2275 
2276 	rcu_read_unlock();
2277 
2278 	if (conn) {
2279 		int cnt, q;
2280 
2281 		switch (conn->type) {
2282 		case ACL_LINK:
2283 			cnt = hdev->acl_cnt;
2284 			break;
2285 		case SCO_LINK:
2286 		case ESCO_LINK:
2287 			cnt = hdev->sco_cnt;
2288 			break;
2289 		case LE_LINK:
2290 			cnt = hdev->le_mtu ? hdev->le_cnt : hdev->acl_cnt;
2291 			break;
2292 		default:
2293 			cnt = 0;
2294 			BT_ERR("Unknown link type");
2295 		}
2296 
2297 		q = cnt / num;
2298 		*quote = q ? q : 1;
2299 	} else
2300 		*quote = 0;
2301 
2302 	BT_DBG("conn %p quote %d", conn, *quote);
2303 	return conn;
2304 }
2305 
2306 static inline void hci_link_tx_to(struct hci_dev *hdev, __u8 type)
2307 {
2308 	struct hci_conn_hash *h = &hdev->conn_hash;
2309 	struct hci_conn *c;
2310 
2311 	BT_ERR("%s link tx timeout", hdev->name);
2312 
2313 	rcu_read_lock();
2314 
2315 	/* Kill stalled connections */
2316 	list_for_each_entry_rcu(c, &h->list, list) {
2317 		if (c->type == type && c->sent) {
2318 			BT_ERR("%s killing stalled connection %s",
2319 				hdev->name, batostr(&c->dst));
2320 			hci_acl_disconn(c, 0x13);
2321 		}
2322 	}
2323 
2324 	rcu_read_unlock();
2325 }
2326 
2327 static inline struct hci_chan *hci_chan_sent(struct hci_dev *hdev, __u8 type,
2328 						int *quote)
2329 {
2330 	struct hci_conn_hash *h = &hdev->conn_hash;
2331 	struct hci_chan *chan = NULL;
2332 	unsigned int num = 0, min = ~0, cur_prio = 0;
2333 	struct hci_conn *conn;
2334 	int cnt, q, conn_num = 0;
2335 
2336 	BT_DBG("%s", hdev->name);
2337 
2338 	rcu_read_lock();
2339 
2340 	list_for_each_entry_rcu(conn, &h->list, list) {
2341 		struct hci_chan *tmp;
2342 
2343 		if (conn->type != type)
2344 			continue;
2345 
2346 		if (conn->state != BT_CONNECTED && conn->state != BT_CONFIG)
2347 			continue;
2348 
2349 		conn_num++;
2350 
2351 		list_for_each_entry_rcu(tmp, &conn->chan_list, list) {
2352 			struct sk_buff *skb;
2353 
2354 			if (skb_queue_empty(&tmp->data_q))
2355 				continue;
2356 
2357 			skb = skb_peek(&tmp->data_q);
2358 			if (skb->priority < cur_prio)
2359 				continue;
2360 
2361 			if (skb->priority > cur_prio) {
2362 				num = 0;
2363 				min = ~0;
2364 				cur_prio = skb->priority;
2365 			}
2366 
2367 			num++;
2368 
2369 			if (conn->sent < min) {
2370 				min  = conn->sent;
2371 				chan = tmp;
2372 			}
2373 		}
2374 
2375 		if (hci_conn_num(hdev, type) == conn_num)
2376 			break;
2377 	}
2378 
2379 	rcu_read_unlock();
2380 
2381 	if (!chan)
2382 		return NULL;
2383 
2384 	switch (chan->conn->type) {
2385 	case ACL_LINK:
2386 		cnt = hdev->acl_cnt;
2387 		break;
2388 	case SCO_LINK:
2389 	case ESCO_LINK:
2390 		cnt = hdev->sco_cnt;
2391 		break;
2392 	case LE_LINK:
2393 		cnt = hdev->le_mtu ? hdev->le_cnt : hdev->acl_cnt;
2394 		break;
2395 	default:
2396 		cnt = 0;
2397 		BT_ERR("Unknown link type");
2398 	}
2399 
2400 	q = cnt / num;
2401 	*quote = q ? q : 1;
2402 	BT_DBG("chan %p quote %d", chan, *quote);
2403 	return chan;
2404 }
2405 
2406 static void hci_prio_recalculate(struct hci_dev *hdev, __u8 type)
2407 {
2408 	struct hci_conn_hash *h = &hdev->conn_hash;
2409 	struct hci_conn *conn;
2410 	int num = 0;
2411 
2412 	BT_DBG("%s", hdev->name);
2413 
2414 	rcu_read_lock();
2415 
2416 	list_for_each_entry_rcu(conn, &h->list, list) {
2417 		struct hci_chan *chan;
2418 
2419 		if (conn->type != type)
2420 			continue;
2421 
2422 		if (conn->state != BT_CONNECTED && conn->state != BT_CONFIG)
2423 			continue;
2424 
2425 		num++;
2426 
2427 		list_for_each_entry_rcu(chan, &conn->chan_list, list) {
2428 			struct sk_buff *skb;
2429 
2430 			if (chan->sent) {
2431 				chan->sent = 0;
2432 				continue;
2433 			}
2434 
2435 			if (skb_queue_empty(&chan->data_q))
2436 				continue;
2437 
2438 			skb = skb_peek(&chan->data_q);
2439 			if (skb->priority >= HCI_PRIO_MAX - 1)
2440 				continue;
2441 
2442 			skb->priority = HCI_PRIO_MAX - 1;
2443 
2444 			BT_DBG("chan %p skb %p promoted to %d", chan, skb,
2445 								skb->priority);
2446 		}
2447 
2448 		if (hci_conn_num(hdev, type) == num)
2449 			break;
2450 	}
2451 
2452 	rcu_read_unlock();
2453 
2454 }
2455 
2456 static inline int __get_blocks(struct hci_dev *hdev, struct sk_buff *skb)
2457 {
2458 	/* Calculate count of blocks used by this packet */
2459 	return DIV_ROUND_UP(skb->len - HCI_ACL_HDR_SIZE, hdev->block_len);
2460 }
2461 
2462 static inline void __check_timeout(struct hci_dev *hdev, unsigned int cnt)
2463 {
2464 	if (!test_bit(HCI_RAW, &hdev->flags)) {
2465 		/* ACL tx timeout must be longer than maximum
2466 		 * link supervision timeout (40.9 seconds) */
2467 		if (!cnt && time_after(jiffies, hdev->acl_last_tx +
2468 					msecs_to_jiffies(HCI_ACL_TX_TIMEOUT)))
2469 			hci_link_tx_to(hdev, ACL_LINK);
2470 	}
2471 }
2472 
2473 static inline void hci_sched_acl_pkt(struct hci_dev *hdev)
2474 {
2475 	unsigned int cnt = hdev->acl_cnt;
2476 	struct hci_chan *chan;
2477 	struct sk_buff *skb;
2478 	int quote;
2479 
2480 	__check_timeout(hdev, cnt);
2481 
2482 	while (hdev->acl_cnt &&
2483 			(chan = hci_chan_sent(hdev, ACL_LINK, &quote))) {
2484 		u32 priority = (skb_peek(&chan->data_q))->priority;
2485 		while (quote-- && (skb = skb_peek(&chan->data_q))) {
2486 			BT_DBG("chan %p skb %p len %d priority %u", chan, skb,
2487 					skb->len, skb->priority);
2488 
2489 			/* Stop if priority has changed */
2490 			if (skb->priority < priority)
2491 				break;
2492 
2493 			skb = skb_dequeue(&chan->data_q);
2494 
2495 			hci_conn_enter_active_mode(chan->conn,
2496 						   bt_cb(skb)->force_active);
2497 
2498 			hci_send_frame(skb);
2499 			hdev->acl_last_tx = jiffies;
2500 
2501 			hdev->acl_cnt--;
2502 			chan->sent++;
2503 			chan->conn->sent++;
2504 		}
2505 	}
2506 
2507 	if (cnt != hdev->acl_cnt)
2508 		hci_prio_recalculate(hdev, ACL_LINK);
2509 }
2510 
2511 static inline void hci_sched_acl_blk(struct hci_dev *hdev)
2512 {
2513 	unsigned int cnt = hdev->block_cnt;
2514 	struct hci_chan *chan;
2515 	struct sk_buff *skb;
2516 	int quote;
2517 
2518 	__check_timeout(hdev, cnt);
2519 
2520 	while (hdev->block_cnt > 0 &&
2521 			(chan = hci_chan_sent(hdev, ACL_LINK, &quote))) {
2522 		u32 priority = (skb_peek(&chan->data_q))->priority;
2523 		while (quote > 0 && (skb = skb_peek(&chan->data_q))) {
2524 			int blocks;
2525 
2526 			BT_DBG("chan %p skb %p len %d priority %u", chan, skb,
2527 						skb->len, skb->priority);
2528 
2529 			/* Stop if priority has changed */
2530 			if (skb->priority < priority)
2531 				break;
2532 
2533 			skb = skb_dequeue(&chan->data_q);
2534 
2535 			blocks = __get_blocks(hdev, skb);
2536 			if (blocks > hdev->block_cnt)
2537 				return;
2538 
2539 			hci_conn_enter_active_mode(chan->conn,
2540 						bt_cb(skb)->force_active);
2541 
2542 			hci_send_frame(skb);
2543 			hdev->acl_last_tx = jiffies;
2544 
2545 			hdev->block_cnt -= blocks;
2546 			quote -= blocks;
2547 
2548 			chan->sent += blocks;
2549 			chan->conn->sent += blocks;
2550 		}
2551 	}
2552 
2553 	if (cnt != hdev->block_cnt)
2554 		hci_prio_recalculate(hdev, ACL_LINK);
2555 }
2556 
2557 static inline void hci_sched_acl(struct hci_dev *hdev)
2558 {
2559 	BT_DBG("%s", hdev->name);
2560 
2561 	if (!hci_conn_num(hdev, ACL_LINK))
2562 		return;
2563 
2564 	switch (hdev->flow_ctl_mode) {
2565 	case HCI_FLOW_CTL_MODE_PACKET_BASED:
2566 		hci_sched_acl_pkt(hdev);
2567 		break;
2568 
2569 	case HCI_FLOW_CTL_MODE_BLOCK_BASED:
2570 		hci_sched_acl_blk(hdev);
2571 		break;
2572 	}
2573 }
2574 
2575 /* Schedule SCO */
2576 static inline void hci_sched_sco(struct hci_dev *hdev)
2577 {
2578 	struct hci_conn *conn;
2579 	struct sk_buff *skb;
2580 	int quote;
2581 
2582 	BT_DBG("%s", hdev->name);
2583 
2584 	if (!hci_conn_num(hdev, SCO_LINK))
2585 		return;
2586 
2587 	while (hdev->sco_cnt && (conn = hci_low_sent(hdev, SCO_LINK, &quote))) {
2588 		while (quote-- && (skb = skb_dequeue(&conn->data_q))) {
2589 			BT_DBG("skb %p len %d", skb, skb->len);
2590 			hci_send_frame(skb);
2591 
2592 			conn->sent++;
2593 			if (conn->sent == ~0)
2594 				conn->sent = 0;
2595 		}
2596 	}
2597 }
2598 
2599 static inline void hci_sched_esco(struct hci_dev *hdev)
2600 {
2601 	struct hci_conn *conn;
2602 	struct sk_buff *skb;
2603 	int quote;
2604 
2605 	BT_DBG("%s", hdev->name);
2606 
2607 	if (!hci_conn_num(hdev, ESCO_LINK))
2608 		return;
2609 
2610 	while (hdev->sco_cnt && (conn = hci_low_sent(hdev, ESCO_LINK, &quote))) {
2611 		while (quote-- && (skb = skb_dequeue(&conn->data_q))) {
2612 			BT_DBG("skb %p len %d", skb, skb->len);
2613 			hci_send_frame(skb);
2614 
2615 			conn->sent++;
2616 			if (conn->sent == ~0)
2617 				conn->sent = 0;
2618 		}
2619 	}
2620 }
2621 
2622 static inline void hci_sched_le(struct hci_dev *hdev)
2623 {
2624 	struct hci_chan *chan;
2625 	struct sk_buff *skb;
2626 	int quote, cnt, tmp;
2627 
2628 	BT_DBG("%s", hdev->name);
2629 
2630 	if (!hci_conn_num(hdev, LE_LINK))
2631 		return;
2632 
2633 	if (!test_bit(HCI_RAW, &hdev->flags)) {
2634 		/* LE tx timeout must be longer than maximum
2635 		 * link supervision timeout (40.9 seconds) */
2636 		if (!hdev->le_cnt && hdev->le_pkts &&
2637 				time_after(jiffies, hdev->le_last_tx + HZ * 45))
2638 			hci_link_tx_to(hdev, LE_LINK);
2639 	}
2640 
2641 	cnt = hdev->le_pkts ? hdev->le_cnt : hdev->acl_cnt;
2642 	tmp = cnt;
2643 	while (cnt && (chan = hci_chan_sent(hdev, LE_LINK, &quote))) {
2644 		u32 priority = (skb_peek(&chan->data_q))->priority;
2645 		while (quote-- && (skb = skb_peek(&chan->data_q))) {
2646 			BT_DBG("chan %p skb %p len %d priority %u", chan, skb,
2647 					skb->len, skb->priority);
2648 
2649 			/* Stop if priority has changed */
2650 			if (skb->priority < priority)
2651 				break;
2652 
2653 			skb = skb_dequeue(&chan->data_q);
2654 
2655 			hci_send_frame(skb);
2656 			hdev->le_last_tx = jiffies;
2657 
2658 			cnt--;
2659 			chan->sent++;
2660 			chan->conn->sent++;
2661 		}
2662 	}
2663 
2664 	if (hdev->le_pkts)
2665 		hdev->le_cnt = cnt;
2666 	else
2667 		hdev->acl_cnt = cnt;
2668 
2669 	if (cnt != tmp)
2670 		hci_prio_recalculate(hdev, LE_LINK);
2671 }
2672 
2673 static void hci_tx_work(struct work_struct *work)
2674 {
2675 	struct hci_dev *hdev = container_of(work, struct hci_dev, tx_work);
2676 	struct sk_buff *skb;
2677 
2678 	BT_DBG("%s acl %d sco %d le %d", hdev->name, hdev->acl_cnt,
2679 		hdev->sco_cnt, hdev->le_cnt);
2680 
2681 	/* Schedule queues and send stuff to HCI driver */
2682 
2683 	hci_sched_acl(hdev);
2684 
2685 	hci_sched_sco(hdev);
2686 
2687 	hci_sched_esco(hdev);
2688 
2689 	hci_sched_le(hdev);
2690 
2691 	/* Send next queued raw (unknown type) packet */
2692 	while ((skb = skb_dequeue(&hdev->raw_q)))
2693 		hci_send_frame(skb);
2694 }
2695 
2696 /* ----- HCI RX task (incoming data processing) ----- */
2697 
2698 /* ACL data packet */
2699 static inline void hci_acldata_packet(struct hci_dev *hdev, struct sk_buff *skb)
2700 {
2701 	struct hci_acl_hdr *hdr = (void *) skb->data;
2702 	struct hci_conn *conn;
2703 	__u16 handle, flags;
2704 
2705 	skb_pull(skb, HCI_ACL_HDR_SIZE);
2706 
2707 	handle = __le16_to_cpu(hdr->handle);
2708 	flags  = hci_flags(handle);
2709 	handle = hci_handle(handle);
2710 
2711 	BT_DBG("%s len %d handle 0x%x flags 0x%x", hdev->name, skb->len, handle, flags);
2712 
2713 	hdev->stat.acl_rx++;
2714 
2715 	hci_dev_lock(hdev);
2716 	conn = hci_conn_hash_lookup_handle(hdev, handle);
2717 	hci_dev_unlock(hdev);
2718 
2719 	if (conn) {
2720 		hci_conn_enter_active_mode(conn, BT_POWER_FORCE_ACTIVE_OFF);
2721 
2722 		hci_dev_lock(hdev);
2723 		if (test_bit(HCI_MGMT, &hdev->dev_flags) &&
2724 		    !test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
2725 			mgmt_device_connected(hdev, &conn->dst, conn->type,
2726 					      conn->dst_type, 0, NULL, 0,
2727 					      conn->dev_class);
2728 		hci_dev_unlock(hdev);
2729 
2730 		/* Send to upper protocol */
2731 		l2cap_recv_acldata(conn, skb, flags);
2732 		return;
2733 	} else {
2734 		BT_ERR("%s ACL packet for unknown connection handle %d",
2735 			hdev->name, handle);
2736 	}
2737 
2738 	kfree_skb(skb);
2739 }
2740 
2741 /* SCO data packet */
2742 static inline void hci_scodata_packet(struct hci_dev *hdev, struct sk_buff *skb)
2743 {
2744 	struct hci_sco_hdr *hdr = (void *) skb->data;
2745 	struct hci_conn *conn;
2746 	__u16 handle;
2747 
2748 	skb_pull(skb, HCI_SCO_HDR_SIZE);
2749 
2750 	handle = __le16_to_cpu(hdr->handle);
2751 
2752 	BT_DBG("%s len %d handle 0x%x", hdev->name, skb->len, handle);
2753 
2754 	hdev->stat.sco_rx++;
2755 
2756 	hci_dev_lock(hdev);
2757 	conn = hci_conn_hash_lookup_handle(hdev, handle);
2758 	hci_dev_unlock(hdev);
2759 
2760 	if (conn) {
2761 		/* Send to upper protocol */
2762 		sco_recv_scodata(conn, skb);
2763 		return;
2764 	} else {
2765 		BT_ERR("%s SCO packet for unknown connection handle %d",
2766 			hdev->name, handle);
2767 	}
2768 
2769 	kfree_skb(skb);
2770 }
2771 
2772 static void hci_rx_work(struct work_struct *work)
2773 {
2774 	struct hci_dev *hdev = container_of(work, struct hci_dev, rx_work);
2775 	struct sk_buff *skb;
2776 
2777 	BT_DBG("%s", hdev->name);
2778 
2779 	while ((skb = skb_dequeue(&hdev->rx_q))) {
2780 		/* Send copy to monitor */
2781 		hci_send_to_monitor(hdev, skb);
2782 
2783 		if (atomic_read(&hdev->promisc)) {
2784 			/* Send copy to the sockets */
2785 			hci_send_to_sock(hdev, skb);
2786 		}
2787 
2788 		if (test_bit(HCI_RAW, &hdev->flags)) {
2789 			kfree_skb(skb);
2790 			continue;
2791 		}
2792 
2793 		if (test_bit(HCI_INIT, &hdev->flags)) {
2794 			/* Don't process data packets in this states. */
2795 			switch (bt_cb(skb)->pkt_type) {
2796 			case HCI_ACLDATA_PKT:
2797 			case HCI_SCODATA_PKT:
2798 				kfree_skb(skb);
2799 				continue;
2800 			}
2801 		}
2802 
2803 		/* Process frame */
2804 		switch (bt_cb(skb)->pkt_type) {
2805 		case HCI_EVENT_PKT:
2806 			BT_DBG("%s Event packet", hdev->name);
2807 			hci_event_packet(hdev, skb);
2808 			break;
2809 
2810 		case HCI_ACLDATA_PKT:
2811 			BT_DBG("%s ACL data packet", hdev->name);
2812 			hci_acldata_packet(hdev, skb);
2813 			break;
2814 
2815 		case HCI_SCODATA_PKT:
2816 			BT_DBG("%s SCO data packet", hdev->name);
2817 			hci_scodata_packet(hdev, skb);
2818 			break;
2819 
2820 		default:
2821 			kfree_skb(skb);
2822 			break;
2823 		}
2824 	}
2825 }
2826 
2827 static void hci_cmd_work(struct work_struct *work)
2828 {
2829 	struct hci_dev *hdev = container_of(work, struct hci_dev, cmd_work);
2830 	struct sk_buff *skb;
2831 
2832 	BT_DBG("%s cmd %d", hdev->name, atomic_read(&hdev->cmd_cnt));
2833 
2834 	/* Send queued commands */
2835 	if (atomic_read(&hdev->cmd_cnt)) {
2836 		skb = skb_dequeue(&hdev->cmd_q);
2837 		if (!skb)
2838 			return;
2839 
2840 		kfree_skb(hdev->sent_cmd);
2841 
2842 		hdev->sent_cmd = skb_clone(skb, GFP_ATOMIC);
2843 		if (hdev->sent_cmd) {
2844 			atomic_dec(&hdev->cmd_cnt);
2845 			hci_send_frame(skb);
2846 			if (test_bit(HCI_RESET, &hdev->flags))
2847 				del_timer(&hdev->cmd_timer);
2848 			else
2849 				mod_timer(&hdev->cmd_timer,
2850 				  jiffies + msecs_to_jiffies(HCI_CMD_TIMEOUT));
2851 		} else {
2852 			skb_queue_head(&hdev->cmd_q, skb);
2853 			queue_work(hdev->workqueue, &hdev->cmd_work);
2854 		}
2855 	}
2856 }
2857 
2858 int hci_do_inquiry(struct hci_dev *hdev, u8 length)
2859 {
2860 	/* General inquiry access code (GIAC) */
2861 	u8 lap[3] = { 0x33, 0x8b, 0x9e };
2862 	struct hci_cp_inquiry cp;
2863 
2864 	BT_DBG("%s", hdev->name);
2865 
2866 	if (test_bit(HCI_INQUIRY, &hdev->flags))
2867 		return -EINPROGRESS;
2868 
2869 	inquiry_cache_flush(hdev);
2870 
2871 	memset(&cp, 0, sizeof(cp));
2872 	memcpy(&cp.lap, lap, sizeof(cp.lap));
2873 	cp.length  = length;
2874 
2875 	return hci_send_cmd(hdev, HCI_OP_INQUIRY, sizeof(cp), &cp);
2876 }
2877 
2878 int hci_cancel_inquiry(struct hci_dev *hdev)
2879 {
2880 	BT_DBG("%s", hdev->name);
2881 
2882 	if (!test_bit(HCI_INQUIRY, &hdev->flags))
2883 		return -EALREADY;
2884 
2885 	return hci_send_cmd(hdev, HCI_OP_INQUIRY_CANCEL, 0, NULL);
2886 }
2887 
2888 u8 bdaddr_to_le(u8 bdaddr_type)
2889 {
2890 	switch (bdaddr_type) {
2891 	case BDADDR_LE_PUBLIC:
2892 		return ADDR_LE_DEV_PUBLIC;
2893 
2894 	default:
2895 		/* Fallback to LE Random address type */
2896 		return ADDR_LE_DEV_RANDOM;
2897 	}
2898 }
2899