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